mirror of
https://github.com/KevinMidboe/seasoned.git
synced 2026-03-11 11:55:38 +00:00
Feat/settings page redesign (#104)
* include credentials on login fetch requests, allows set header response * Add theme composable and utility improvements - Create useTheme composable for centralized theme management - Update main.ts to use useTheme for initialization - Generalize getCookie utility in user module - Add utility functions for data formatting * Add Plex integration composables and icons - Create usePlexAuth composable for Plex OAuth flow - Create usePlexApi composable for Plex API interactions - Create useRandomWords composable for password generation - Add Plex-related icons (IconPlex, IconServer, IconSync) - Add Plex helper utilities - Update API with Plex-related endpoints * Add storage management components for data & privacy section - Create StorageManager component for browser storage overview - Create StorageSectionBrowser for localStorage/sessionStorage/cookies - Create StorageSectionServer for server-side data (mock) - Create ExportSection for data export functionality - Refactor DataExport component with modular sections - Add storage icons (IconCookie, IconDatabase, IconTimer) - Implement collapsible sections with visual indicators - Add colored borders per storage type - Display item counts and total size in headers * Add theme, password, and security settings components - Create ThemePreferences with visual theme selector - Create PasswordGenerator with passphrase and random modes - Create SecuritySettings wrapper for password management - Update ChangePassword to work with new layout - Implement improved slider UX with visual feedback - Add theme preview cards with gradients - Standardize component styling and typography * Add Plex settings and authentication components - Create PlexSettings component for Plex account management - Create PlexAuthButton with improved OAuth flow - Create PlexServerInfo for server details display - Use icon components instead of inline SVGs - Add sync and unlink functionality - Implement user-friendly authentication flow * Redesign settings page with two-column layout and ProfileHero - Create ProfileHero component with avatar and user info - Create RequestHistory component for Plex requests (placeholder) - Redesign SettingsPage with modern two-column grid layout - Add shared-settings.scss for consistent styling - Organize sections: Appearance, Security, Integrations, Data & Privacy - Implement responsive mobile layout - Standardize typography (h2: 1.5rem, 700 weight) - Add compact modifier for tighter sections
This commit is contained in:
741
src/composables/useRandomWords.ts
Normal file
741
src/composables/useRandomWords.ts
Normal file
@@ -0,0 +1,741 @@
|
||||
// Composable for fetching random words for password generation
|
||||
// Uses Random Word API with fallback to EFF Diceware word list
|
||||
|
||||
export function useRandomWords() {
|
||||
// EFF Diceware short word list (optimized for memorability)
|
||||
// Source: https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases
|
||||
const FALLBACK_WORDS = [
|
||||
"able",
|
||||
"acid",
|
||||
"aged",
|
||||
"also",
|
||||
"area",
|
||||
"army",
|
||||
"away",
|
||||
"baby",
|
||||
"back",
|
||||
"ball",
|
||||
"band",
|
||||
"bank",
|
||||
"base",
|
||||
"bath",
|
||||
"bear",
|
||||
"beat",
|
||||
"been",
|
||||
"beer",
|
||||
"bell",
|
||||
"belt",
|
||||
"best",
|
||||
"bike",
|
||||
"bill",
|
||||
"bird",
|
||||
"blow",
|
||||
"blue",
|
||||
"boat",
|
||||
"body",
|
||||
"bold",
|
||||
"bolt",
|
||||
"bomb",
|
||||
"bond",
|
||||
"bone",
|
||||
"book",
|
||||
"boom",
|
||||
"born",
|
||||
"boss",
|
||||
"both",
|
||||
"bowl",
|
||||
"bulk",
|
||||
"burn",
|
||||
"bush",
|
||||
"busy",
|
||||
"cage",
|
||||
"cake",
|
||||
"call",
|
||||
"calm",
|
||||
"came",
|
||||
"camp",
|
||||
"card",
|
||||
"care",
|
||||
"cart",
|
||||
"case",
|
||||
"cash",
|
||||
"cast",
|
||||
"cell",
|
||||
"chat",
|
||||
"chip",
|
||||
"city",
|
||||
"clad",
|
||||
"clay",
|
||||
"clip",
|
||||
"club",
|
||||
"clue",
|
||||
"coal",
|
||||
"coat",
|
||||
"code",
|
||||
"coil",
|
||||
"coin",
|
||||
"cold",
|
||||
"come",
|
||||
"cook",
|
||||
"cool",
|
||||
"cope",
|
||||
"copy",
|
||||
"cord",
|
||||
"core",
|
||||
"cork",
|
||||
"cost",
|
||||
"crab",
|
||||
"crew",
|
||||
"crop",
|
||||
"crow",
|
||||
"curl",
|
||||
"cute",
|
||||
"damp",
|
||||
"dare",
|
||||
"dark",
|
||||
"dash",
|
||||
"data",
|
||||
"date",
|
||||
"dawn",
|
||||
"days",
|
||||
"dead",
|
||||
"deaf",
|
||||
"deal",
|
||||
"dean",
|
||||
"dear",
|
||||
"debt",
|
||||
"deck",
|
||||
"deed",
|
||||
"deep",
|
||||
"deer",
|
||||
"demo",
|
||||
"deny",
|
||||
"desk",
|
||||
"dial",
|
||||
"dice",
|
||||
"died",
|
||||
"diet",
|
||||
"disc",
|
||||
"dish",
|
||||
"disk",
|
||||
"dock",
|
||||
"does",
|
||||
"dome",
|
||||
"done",
|
||||
"doom",
|
||||
"door",
|
||||
"dose",
|
||||
"down",
|
||||
"drag",
|
||||
"draw",
|
||||
"drew",
|
||||
"drip",
|
||||
"drop",
|
||||
"drug",
|
||||
"drum",
|
||||
"dual",
|
||||
"duck",
|
||||
"dull",
|
||||
"dumb",
|
||||
"dump",
|
||||
"dune",
|
||||
"dunk",
|
||||
"dust",
|
||||
"duty",
|
||||
"each",
|
||||
"earl",
|
||||
"earn",
|
||||
"ease",
|
||||
"east",
|
||||
"easy",
|
||||
"edge",
|
||||
"edit",
|
||||
"else",
|
||||
"even",
|
||||
"ever",
|
||||
"evil",
|
||||
"exam",
|
||||
"exit",
|
||||
"face",
|
||||
"fact",
|
||||
"fade",
|
||||
"fail",
|
||||
"fair",
|
||||
"fake",
|
||||
"fall",
|
||||
"fame",
|
||||
"farm",
|
||||
"fast",
|
||||
"fate",
|
||||
"fear",
|
||||
"feed",
|
||||
"feel",
|
||||
"feet",
|
||||
"fell",
|
||||
"felt",
|
||||
"fern",
|
||||
"file",
|
||||
"fill",
|
||||
"film",
|
||||
"find",
|
||||
"fine",
|
||||
"fire",
|
||||
"firm",
|
||||
"fish",
|
||||
"fist",
|
||||
"five",
|
||||
"flag",
|
||||
"flat",
|
||||
"fled",
|
||||
"flew",
|
||||
"flip",
|
||||
"flow",
|
||||
"folk",
|
||||
"fond",
|
||||
"food",
|
||||
"fool",
|
||||
"foot",
|
||||
"ford",
|
||||
"fork",
|
||||
"form",
|
||||
"fort",
|
||||
"foul",
|
||||
"four",
|
||||
"free",
|
||||
"from",
|
||||
"fuel",
|
||||
"full",
|
||||
"fund",
|
||||
"gain",
|
||||
"game",
|
||||
"gang",
|
||||
"gate",
|
||||
"gave",
|
||||
"gear",
|
||||
"gene",
|
||||
"gift",
|
||||
"girl",
|
||||
"give",
|
||||
"glad",
|
||||
"glow",
|
||||
"glue",
|
||||
"goal",
|
||||
"goat",
|
||||
"gods",
|
||||
"goes",
|
||||
"gold",
|
||||
"golf",
|
||||
"gone",
|
||||
"good",
|
||||
"gray",
|
||||
"grew",
|
||||
"grey",
|
||||
"grid",
|
||||
"grim",
|
||||
"grin",
|
||||
"grip",
|
||||
"grow",
|
||||
"gulf",
|
||||
"hair",
|
||||
"half",
|
||||
"hall",
|
||||
"halt",
|
||||
"hand",
|
||||
"hang",
|
||||
"hard",
|
||||
"harm",
|
||||
"hate",
|
||||
"have",
|
||||
"hawk",
|
||||
"head",
|
||||
"heal",
|
||||
"hear",
|
||||
"heat",
|
||||
"held",
|
||||
"hell",
|
||||
"help",
|
||||
"herb",
|
||||
"here",
|
||||
"hero",
|
||||
"hide",
|
||||
"high",
|
||||
"hill",
|
||||
"hint",
|
||||
"hire",
|
||||
"hold",
|
||||
"hole",
|
||||
"holy",
|
||||
"home",
|
||||
"hood",
|
||||
"hook",
|
||||
"hope",
|
||||
"horn",
|
||||
"host",
|
||||
"hour",
|
||||
"huge",
|
||||
"hung",
|
||||
"hunt",
|
||||
"hurt",
|
||||
"icon",
|
||||
"idea",
|
||||
"inch",
|
||||
"into",
|
||||
"iron",
|
||||
"item",
|
||||
"jail",
|
||||
"jane",
|
||||
"jazz",
|
||||
"jean",
|
||||
"john",
|
||||
"join",
|
||||
"joke",
|
||||
"juan",
|
||||
"jump",
|
||||
"june",
|
||||
"jury",
|
||||
"just",
|
||||
"keen",
|
||||
"keep",
|
||||
"kent",
|
||||
"kept",
|
||||
"kick",
|
||||
"kids",
|
||||
"kill",
|
||||
"kind",
|
||||
"king",
|
||||
"kiss",
|
||||
"knee",
|
||||
"knew",
|
||||
"know",
|
||||
"lack",
|
||||
"lady",
|
||||
"laid",
|
||||
"lake",
|
||||
"lamb",
|
||||
"lamp",
|
||||
"land",
|
||||
"lane",
|
||||
"last",
|
||||
"late",
|
||||
"lead",
|
||||
"leaf",
|
||||
"lean",
|
||||
"left",
|
||||
"lend",
|
||||
"lens",
|
||||
"less",
|
||||
"levy",
|
||||
"lied",
|
||||
"life",
|
||||
"lift",
|
||||
"like",
|
||||
"lily",
|
||||
"line",
|
||||
"link",
|
||||
"lion",
|
||||
"list",
|
||||
"live",
|
||||
"load",
|
||||
"loan",
|
||||
"lock",
|
||||
"lodge",
|
||||
"loft",
|
||||
"logo",
|
||||
"long",
|
||||
"look",
|
||||
"loop",
|
||||
"lord",
|
||||
"lose",
|
||||
"loss",
|
||||
"lost",
|
||||
"loud",
|
||||
"love",
|
||||
"luck",
|
||||
"lung",
|
||||
"made",
|
||||
"maid",
|
||||
"mail",
|
||||
"main",
|
||||
"make",
|
||||
"male",
|
||||
"mall",
|
||||
"many",
|
||||
"mark",
|
||||
"mars",
|
||||
"mask",
|
||||
"mass",
|
||||
"mate",
|
||||
"math",
|
||||
"mayo",
|
||||
"maze",
|
||||
"meal",
|
||||
"mean",
|
||||
"meat",
|
||||
"meet",
|
||||
"melt",
|
||||
"menu",
|
||||
"mess",
|
||||
"mice",
|
||||
"mild",
|
||||
"mile",
|
||||
"milk",
|
||||
"mill",
|
||||
"mind",
|
||||
"mine",
|
||||
"mint",
|
||||
"miss",
|
||||
"mist",
|
||||
"mode",
|
||||
"mood",
|
||||
"moon",
|
||||
"more",
|
||||
"most",
|
||||
"move",
|
||||
"much",
|
||||
"mule",
|
||||
"must",
|
||||
"myth",
|
||||
"nail",
|
||||
"name",
|
||||
"navy",
|
||||
"near",
|
||||
"neat",
|
||||
"neck",
|
||||
"need",
|
||||
"news",
|
||||
"next",
|
||||
"nice",
|
||||
"nick",
|
||||
"nine",
|
||||
"noah",
|
||||
"node",
|
||||
"none",
|
||||
"noon",
|
||||
"norm",
|
||||
"nose",
|
||||
"note",
|
||||
"noun",
|
||||
"nuts",
|
||||
"okay",
|
||||
"once",
|
||||
"ones",
|
||||
"only",
|
||||
"onto",
|
||||
"open",
|
||||
"oral",
|
||||
"oven",
|
||||
"over",
|
||||
"pace",
|
||||
"pack",
|
||||
"page",
|
||||
"paid",
|
||||
"pain",
|
||||
"pair",
|
||||
"palm",
|
||||
"park",
|
||||
"part",
|
||||
"pass",
|
||||
"past",
|
||||
"path",
|
||||
"peak",
|
||||
"pick",
|
||||
"pier",
|
||||
"pike",
|
||||
"pile",
|
||||
"pill",
|
||||
"pine",
|
||||
"pink",
|
||||
"pipe",
|
||||
"plan",
|
||||
"play",
|
||||
"plot",
|
||||
"plug",
|
||||
"plus",
|
||||
"poem",
|
||||
"poet",
|
||||
"pole",
|
||||
"poll",
|
||||
"pond",
|
||||
"pony",
|
||||
"pool",
|
||||
"poor",
|
||||
"pope",
|
||||
"pork",
|
||||
"port",
|
||||
"pose",
|
||||
"post",
|
||||
"pour",
|
||||
"pray",
|
||||
"prep",
|
||||
"prey",
|
||||
"pull",
|
||||
"pump",
|
||||
"pure",
|
||||
"push",
|
||||
"quit",
|
||||
"race",
|
||||
"rack",
|
||||
"rage",
|
||||
"raid",
|
||||
"rail",
|
||||
"rain",
|
||||
"rank",
|
||||
"rare",
|
||||
"rate",
|
||||
"rays",
|
||||
"read",
|
||||
"real",
|
||||
"rear",
|
||||
"rely",
|
||||
"rent",
|
||||
"rest",
|
||||
"rice",
|
||||
"rich",
|
||||
"ride",
|
||||
"ring",
|
||||
"rise",
|
||||
"risk",
|
||||
"road",
|
||||
"rock",
|
||||
"rode",
|
||||
"role",
|
||||
"roll",
|
||||
"roof",
|
||||
"room",
|
||||
"root",
|
||||
"rope",
|
||||
"rose",
|
||||
"ross",
|
||||
"ruin",
|
||||
"rule",
|
||||
"rush",
|
||||
"ruth",
|
||||
"safe",
|
||||
"saga",
|
||||
"sage",
|
||||
"said",
|
||||
"sail",
|
||||
"sake",
|
||||
"sale",
|
||||
"salt",
|
||||
"same",
|
||||
"sand",
|
||||
"sank",
|
||||
"save",
|
||||
"says",
|
||||
"scan",
|
||||
"scar",
|
||||
"seal",
|
||||
"seat",
|
||||
"seed",
|
||||
"seek",
|
||||
"seem",
|
||||
"seen",
|
||||
"self",
|
||||
"sell",
|
||||
"semi",
|
||||
"send",
|
||||
"sent",
|
||||
"sept",
|
||||
"sets",
|
||||
"shed",
|
||||
"ship",
|
||||
"shop",
|
||||
"shot",
|
||||
"show",
|
||||
"shut",
|
||||
"sick",
|
||||
"side",
|
||||
"sign",
|
||||
"silk",
|
||||
"sing",
|
||||
"sink",
|
||||
"site",
|
||||
"size",
|
||||
"skin",
|
||||
"skip",
|
||||
"slam",
|
||||
"slap",
|
||||
"slip",
|
||||
"slow",
|
||||
"snap",
|
||||
"snow",
|
||||
"soft",
|
||||
"soil",
|
||||
"sold",
|
||||
"sole",
|
||||
"some",
|
||||
"song",
|
||||
"soon",
|
||||
"sort",
|
||||
"soul",
|
||||
"spot",
|
||||
"star",
|
||||
"stay",
|
||||
"stem",
|
||||
"step",
|
||||
"stir",
|
||||
"stop",
|
||||
"such",
|
||||
"suit",
|
||||
"sung",
|
||||
"sunk",
|
||||
"sure",
|
||||
"swim",
|
||||
"tail",
|
||||
"take",
|
||||
"tale",
|
||||
"talk",
|
||||
"tall",
|
||||
"tank",
|
||||
"tape",
|
||||
"task",
|
||||
"team",
|
||||
"tear",
|
||||
"tech",
|
||||
"tell",
|
||||
"tend",
|
||||
"tent",
|
||||
"term",
|
||||
"test",
|
||||
"text",
|
||||
"than",
|
||||
"that",
|
||||
"them",
|
||||
"then",
|
||||
"they",
|
||||
"thin",
|
||||
"this",
|
||||
"thus",
|
||||
"tide",
|
||||
"tied",
|
||||
"tier",
|
||||
"ties",
|
||||
"till",
|
||||
"time",
|
||||
"tiny",
|
||||
"tips",
|
||||
"tire",
|
||||
"told",
|
||||
"toll",
|
||||
"tone",
|
||||
"tony",
|
||||
"took",
|
||||
"tool",
|
||||
"tops",
|
||||
"torn",
|
||||
"toss",
|
||||
"tour",
|
||||
"town",
|
||||
"tray",
|
||||
"tree",
|
||||
"trek",
|
||||
"trim",
|
||||
"trio",
|
||||
"trip",
|
||||
"true",
|
||||
"tube",
|
||||
"tune",
|
||||
"turn",
|
||||
"twin",
|
||||
"type",
|
||||
"unit",
|
||||
"upon",
|
||||
"used",
|
||||
"user",
|
||||
"vary",
|
||||
"vast",
|
||||
"verb",
|
||||
"very",
|
||||
"vice",
|
||||
"view",
|
||||
"visa",
|
||||
"void",
|
||||
"vote",
|
||||
"wade",
|
||||
"wage",
|
||||
"wait",
|
||||
"wake",
|
||||
"walk",
|
||||
"wall",
|
||||
"ward",
|
||||
"warm",
|
||||
"warn",
|
||||
"wash",
|
||||
"wave",
|
||||
"ways",
|
||||
"weak",
|
||||
"wear",
|
||||
"week",
|
||||
"well",
|
||||
"went",
|
||||
"were",
|
||||
"west",
|
||||
"what",
|
||||
"when",
|
||||
"whom",
|
||||
"wide",
|
||||
"wife",
|
||||
"wild",
|
||||
"will",
|
||||
"wind",
|
||||
"wine",
|
||||
"wing",
|
||||
"wire",
|
||||
"wise",
|
||||
"wish",
|
||||
"with",
|
||||
"wolf",
|
||||
"wood",
|
||||
"wool",
|
||||
"word",
|
||||
"wore",
|
||||
"work",
|
||||
"worm",
|
||||
"worn",
|
||||
"wrap",
|
||||
"yard",
|
||||
"yeah",
|
||||
"year",
|
||||
"your",
|
||||
"zone",
|
||||
"zoom"
|
||||
];
|
||||
|
||||
// Try to fetch random words from API, fallback to local list
|
||||
async function getRandomWords(count = 4): Promise<string[]> {
|
||||
try {
|
||||
// Try Random Word API first
|
||||
const response = await fetch(
|
||||
`https://random-word-api.herokuapp.com/word?number=${count}`
|
||||
);
|
||||
|
||||
if (response.ok) {
|
||||
const words = await response.json();
|
||||
if (Array.isArray(words) && words.length === count) {
|
||||
return words;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn("[RandomWords] API failed, using fallback words:", error);
|
||||
}
|
||||
|
||||
// Fallback: pick random words from local list
|
||||
const words: string[] = [];
|
||||
const usedIndices = new Set<number>();
|
||||
|
||||
while (words.length < count) {
|
||||
const index = Math.floor(Math.random() * FALLBACK_WORDS.length);
|
||||
if (!usedIndices.has(index)) {
|
||||
usedIndices.add(index);
|
||||
words.push(FALLBACK_WORDS[index]);
|
||||
}
|
||||
}
|
||||
|
||||
return words;
|
||||
}
|
||||
|
||||
return {
|
||||
getRandomWords
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user