[
  {
    "path": ".claude/skills/use-ui-kit/SKILL.md",
    "content": "---\nname: use-ui-kit\ndescription: Use whenever creating or editing UI in this repo — React components, modals, dialogs, forms, buttons, inputs, typography, styling, icons, or any .tsx/.jsx work. The repo uses `@tetherto/pearpass-lib-ui-kit` as the single source for UI primitives; do not roll custom ones. Load this before suggesting any UI change, especially for v2 files (V2 suffix) or when touching src/components, src/containers/Modal, or src/pages.\n---\n\n<!-- Mirror of AGENTS.md at repo root — keep in sync. AGENTS.md is the canonical copy; this file exists so Claude Code's skill-trigger mechanism can lazy-load the same content on UI work. -->\n\n# UI conventions for pearpass-app-desktop-tether\n\nThis is the Electron desktop app for PearPass. It's written in React + TypeScript. UI is built on the shared component library `@tetherto/pearpass-lib-ui-kit`.\n\nThis document is for **anyone contributing UI** to the repo — new hires, current engineers, and AI coding assistants (Claude Code, Cursor, Codex, etc.). It captures the component catalog, styling conventions, file-naming rules, and patterns we use when building UI in this app. Read it once before your first UI change; keep it open when you're in doubt.\n\n## Design-system state — `DESKTOP_DESIGN_VERSION === 2`\n\nWhich design renders at runtime is controlled by the `DESKTOP_DESIGN_VERSION` flag from `@tetherto/pearpass-lib-constants` (resolved in [electron/runtime-config.cjs](../../../electron/runtime-config.cjs) and exposed via `isV2()` in [src/utils/designVersion.js](../../../src/utils/designVersion.js)).\n\n**Currently `DESKTOP_DESIGN_VERSION === 2`**, so kit components are the right choice for all new UI work. Legacy v1 components still live under [src/lib-react-components/](../../../src/lib-react-components/) and are rendered whenever `isV2()` returns `false` — do not delete them as part of v2 work.\n\n## File naming: when to use the `V2` suffix\n\nThe `V2` suffix is a **coexistence marker**, not a design marker. Use it only when a v1 sibling already exists:\n\n- **A v1 file already exists** for this component/screen → create a new file with the `V2` suffix next to it (e.g. v1 `CreateVaultModalContent.jsx` → new `CreateVaultModalContentV2.tsx`). Both live in the tree during migration; the branching happens at the call site via `isV2()`.\n- **No v1 equivalent exists** (net-new feature, net-new component) → create the file with its natural name, **no `V2` suffix**. The codebase is already v2 by default, so the suffix would just be noise.\n\nBefore creating a file, glob the directory for the base name without the suffix. If nothing comes up, skip the suffix.\n\n## Golden rules\n\n1. **Check the catalog below before creating any component.** If it exists in the kit, use it — never wrap or reimplement.\n2. **All new UI goes through the kit.** Any new `.tsx`/`.jsx` file — suffixed or not — must import from `@tetherto/pearpass-lib-ui-kit`, not from [src/lib-react-components/](../../../src/lib-react-components/).\n3. **Never add variants under [src/lib-react-components/components/](../../../src/lib-react-components/components/)** (`ButtonThin`, `ButtonPrimary`, `ButtonRoundIcon`, `PearPassInputField`, etc.). That tree is legacy; the kit's `Button` takes variants.\n4. **Style with tokens.** Use `useTheme()` + `rawTokens`. No hardcoded hex colors or px spacing.\n5. **Icons come from the kit.** `@tetherto/pearpass-lib-ui-kit/icons` has 530 icons. Do not add new SVGs under `src/`.\n6. **If the kit lacks something you need, stop and ask the user.** Don't silently roll a custom component.\n\n## Component catalog (31 components)\n\nImport pattern: `import { ComponentName } from '@tetherto/pearpass-lib-ui-kit'`\n\n### Actions\n- `Button` — all CTAs. Takes variants; use instead of `ButtonThin`, `ButtonPrimary`, `ButtonSecondary`, `ButtonRoundIcon`, `ButtonLittle`, `ButtonFilter`, `ButtonFolder`, `ButtonRadio`, `ButtonSingleInput`, `ButtonCreate`.\n- `Pressable` — low-level pressable wrapper for custom interactive elements.\n- `Link` — text links.\n\n### Forms\n- `Form` — form wrapper with validation.\n- `InputField` — text input. Use instead of `PearPassInputField`.\n- `PasswordField` — password input with strength indicator. Use instead of `PearPassPasswordField` / `PearPassPasswordFieldV2`.\n- `SearchField` — search input.\n- `SelectField` — dropdown select.\n- `Dropdown` — low-level dropdown primitive.\n- `TextArea` — multiline text input.\n- `Checkbox`\n- `Radio`\n- `ToggleSwitch`\n- `Slider`\n- `DateField`\n- `AttachmentField`\n- `UploadField`\n- `MultiSlotInput` — split inputs for OTP / recovery codes. Use instead of custom `OtpCodeField`.\n- `FieldError` — inline field validation error.\n\n### Typography\n- `Title` — headings.\n- `Text` — body text.\n\n### Layout / surfaces\n- `Dialog` — modals. Use instead of custom `ModalContent` wrappers.\n- `NativeBottomSheet` — bottom sheets.\n- `PageHeader` — top-of-page header.\n- `ItemScreenHeader` — item-detail header.\n- `Breadcrumb`\n- `ListItem`\n- `NavbarListItem`\n- `ContextMenu`\n\n### Feedback\n- `AlertMessage` — inline alerts. Reference: [src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx](../../../src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx).\n- `Snackbar` — toast-style notifications.\n- `PasswordIndicator` — standalone password strength meter.\n\n### Type exports\n- `ThemeColors`, `Theme`, `ThemeType`, `RawTokens`\n- `PasswordIndicatorVariant` — `'vulnerable' | 'decent' | 'strong'`\n\nImport types with `import type { ... } from '@tetherto/pearpass-lib-ui-kit'`.\n\n## Component props (15 most-used)\n\nRequired props have no `?`. **Always include a test ID on interactive components** — see the \"Test IDs\" section below for which prop to use per component.\n\n- **Button** — `variant: 'primary' | 'secondary' | 'tertiary' | 'destructive'`, `size: 'small' | 'medium'`, `onClick`, `children`, `type?: 'button' | 'submit'`, `disabled?`, `isLoading?`, `iconBefore?`, `iconAfter?`, `data-testid?`. Icon-only buttons need `aria-label`.\n- **Dialog** — `title` (ReactNode), `onClose?`, `open?`, `footer?`, `children?`, `closeOnOutsideClick?`, `hideCloseButton?`, `trapFocus?`, `initialFocusRef?`, `testID?`, `closeButtonTestID?`. Put action buttons in `footer`.\n- **InputField** — `label`, `value`, `onChange?: (e) => void`, `placeholder?`, `error?: string`, `inputType?: 'text' | 'password'`, `disabled?`, `readOnly?`, `copyable?`, `onCopy?`, `leftSlot?`, `rightSlot?`, `testID?`.\n- **PasswordField** — `label`, `value`, `onChange?`, `placeholder?`, `error?`, `passwordIndicator?: 'vulnerable' | 'decent' | 'strong' | 'match'`, `infoBox?: string`, `copyable?`, `testID?`.\n- **SearchField** — `value`, `onChangeText` (yes, this one is still current), `placeholderText?`, `size?: 'small' | 'medium'`, `testID?`.\n- **Form** — `children`, `onSubmit?`, `noValidate?`, `testID?`. Wrap fields here; pair with `useForm` from `@tetherto/pear-apps-lib-ui-react-hooks`.\n- **Text** — `children`, `as?: 'p' | 'span'`, `variant?: 'label' | 'labelEmphasized' | 'body' | 'bodyEmphasized' | 'caption'`, `color?`, `numberOfLines?`, `data-testid?`.\n- **Title** — `children`, `as?: 'h1' | 'h2' | ... | 'h6'`, `data-testid?`.\n- **AlertMessage** — `variant: 'info' | 'warning' | 'error'`, `size: 'small' | 'medium' | 'big'`, `title`, `description`, `actionText?`, `onAction?`, `testID?`, `actionTestId?`.\n- **ToggleSwitch** — `checked?`, `onChange?: (b: boolean) => void`, `label?`, `description?`, `disabled?`, `data-testid?`.\n- **Checkbox** — same shape as `ToggleSwitch` (uses `data-testid`).\n- **Radio** — `options: Array<{value, label?, description?, disabled?}>`, `value?`, `onChange?: (v: string) => void`, `testID?`.\n- **SelectField** — `label`, `value?`, `placeholder?`, `onClick?` (opens dropdown), `error?`, `disabled?`, `leftSlot?`, `rightSlot?`, `testID?`.\n- **TextArea** — `value`, `onChange?`, `label?`, `placeholder?`, `error?`, `disabled?`, `testID?`.\n- **Link** — `children`, `href?`, `isExternal?`, `onClick?`, `data-testid?` (and standard `<a>` attributes).\n\nFor components not listed, open `node_modules/@tetherto/pearpass-lib-ui-kit/dist/components/<Name>/types.d.ts`.\n\n### Test IDs — `testID` vs `data-testid`\n\nAlways include a test ID on anything a user interacts with (buttons, fields, toggles, dialogs). Which prop depends on the component:\n\n- **`testID`** — components that declare it explicitly: `Dialog` (+ `closeButtonTestID`), `Form`, `InputField`, `PasswordField`, `SearchField`, `SelectField`, `TextArea`, `Radio`, `AlertMessage` (+ `actionTestId`).\n- **`data-testid`** — components that extend native HTML and don't redeclare it: `Button`, `ToggleSwitch`, `Checkbox`, `Link`, `Pressable`, `Text`, `Title`.\n\nRule of thumb: try `testID` first; if TypeScript rejects it, use `data-testid`. When editing an existing file, follow the naming pattern already there (e.g. `createvault-name-v2`, `createvault-discard-v2`).\n\n### Prop naming — modern vs. deprecated (important)\n\nThe kit recently renamed several field props. **Use the modern names:**\n\n| Use | Not (deprecated) |\n| --- | --- |\n| `onChange` (receives `ChangeEvent`) | `onChangeText` (receives string) |\n| `placeholder` | `placeholderText` |\n| `error` (string) | `errorMessage` + `variant` |\n\n⚠️ **Existing v2 files in this repo (e.g. `CreateVaultModalContentV2`, `CardCreateMasterPasswordV2`) still use the deprecated props.** Don't copy their prop names blindly — use the modern ones in new code. The deprecated props still work for now but will be removed.\n\n**Exception:** `SearchField` still uses `onChangeText` + `placeholderText` — those aren't deprecated there. `testID` is current everywhere.\n\n## Theming\n\nThe codebase does **not** use styled-components. The convention is a `createStyles(colors)` factory that returns plain inline-style objects, consumed via `style={styles.foo}`.\n\n**In the component** (reference: `src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx`):\n\n```tsx\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { createStyles } from './styles'\n\nconst Component = () => {\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  return <div style={styles.card}>…</div>\n}\n```\n\n**In the companion `styles.ts`** (reference: `src/pages/WelcomePage/CardCreateMasterPasswordV2/styles.ts`):\n\n```ts\nimport type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  card: {\n    background: colors.colorSurfacePrimary,\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.radius8}px`,\n    padding: `${rawTokens.spacing24}px`,\n    gap: `${rawTokens.spacing12}px`,\n  },\n})\n```\n\n### `rawTokens` — flat, numeric-suffixed keys (not nested)\n\n- Spacing: `spacing2`, `spacing4`, `spacing6`, `spacing8`, `spacing10`, `spacing12`, `spacing16`, `spacing20`, `spacing24`, `spacing32`, `spacing40`, `spacing48` (all `number`, multiply with `${n}px`)\n- Radius: `radius8`, `radius16`, `radius20`, `radius26`\n- Font size: `fontSize12`, `fontSize14`, `fontSize16`, `fontSize24`, `fontSize28`\n- Font family: `fontPrimary` (`\"Inter\"`), `fontDisplay` (`\"Humble Nostalgia\"`)\n- Weight: `weightRegular` (`\"400\"`), `weightMedium` (`\"500\"`)\n\n### `theme.colors` — common keys seen in this repo\n\n`colorSurfacePrimary`, `colorSurfaceHover`, `colorBorderPrimary`, `colorBorderSecondary`, `colorTextPrimary`, `colorTextSecondary`, `colorTextTertiary`, `colorLinkText`. If you need one you haven't seen, inspect the `ThemeColors` type from `@tetherto/pearpass-lib-ui-kit`.\n\n### When hardcoded values are OK\n\nTokens cover the design-system primitives. Feature-specific layout values (a card's `maxWidth: '500px'`, a one-off `padding: '55px 0'`) are fine as literals — these aren't design tokens. **Rule of thumb:** if the value corresponds to a semantic design decision (spacing step, brand color, radius), it must come from a token.\n\n## Icons\n\n```tsx\nimport { Add, Download, Folder, OpenInNew } from '@tetherto/pearpass-lib-ui-kit/icons'\n```\n\n530 icons, mostly Material Design, with style variants as suffixes: `Filled`, `Outlined`, `Round`, `Sharp`, `Tone` (e.g. `LockFilled`, `InfoOutlined`, `KeyboardArrowRightRound`). If a name has no suffix, it exists as a single variant.\n\n**Commonly used in this repo** (check these first before browsing):\n\n- **Actions:** `Add`, `Download`, `ContentCopy`, `Share`, `Send`, `Swap`, `UploadFileFilled`\n- **Folder / organization:** `Folder`, `FolderOpen`, `FolderCopy`, `CreateNewFolder`, `Layers`\n- **Navigation / arrows:** `KeyboardArrowRightFilled`, `KeyboardArrowRightRound`, `KeyboardArrowLeftFilled`, `ExpandMore`\n- **Status / feedback:** `InfoOutlined`, `ReportProblemRound`, `ErrorFilled`, `Check`, `DoneAll`, `CheckBox`\n- **Security:** `LockFilled`, `Key`, `SecurityFilled`, `Fingerprint`, `TwoFactorAuthenticationFilled`\n- **External / misc:** `ImportOutlined`, `OpenInNew`\n\n**Discovering others:** `ls node_modules/@tetherto/pearpass-lib-ui-kit/dist/icons/components/ | grep -i <keyword>` — names are PascalCase, grep is case-insensitive friendly.\n\n## Anti-patterns to avoid\n\nWhen editing a v2 file or creating new UI, do **not**:\n\n- Add a new file under `src/lib-react-components/components/` for a Button/Input/Modal variant.\n- Import `PearPassInputField`, `PearPassPasswordField`, or any `Button*` variant from `src/lib-react-components/` into any new file — swap to the kit equivalents.\n- Add a `V2` suffix to a net-new file that has no v1 sibling. Suffix is only for migration coexistence.\n- Use native `<button>`, `<input>`, or `<dialog>` in production code (tests are fine).\n- Hardcode hex colors, brand radii, or design-system spacing — use `rawTokens` and `theme.colors`. (Feature-specific layout literals like `maxWidth: '500px'` are fine.)\n- Add new SVG files under `src/` when the kit's icons subpath covers them.\n- Introduce `styled-components` — the convention is `createStyles(colors)` returning plain style objects.\n\nWhen editing a v1 file and you spot these patterns, mention them to the user but **don't do drive-by rewrites** unless asked — v1 migration is scoped work.\n\n## When the kit truly lacks something\n\n1. Confirm by grepping `node_modules/@tetherto/pearpass-lib-ui-kit/dist/components/` for the concept.\n2. Check if a composition of existing kit primitives covers it (e.g. `Pressable` + `Text` + tokens).\n3. If still missing, surface it to the user: \"The kit doesn't export X — options are (a) compose from Y + Z, (b) request X be added upstream, (c) temporary local component. Which?\" Do not silently create (c).\n"
  },
  {
    "path": ".cursor/rules/use-ui-kit.mdc",
    "content": "---\ndescription: Rules for building and editing UI in this repo. The repo uses @tetherto/pearpass-lib-ui-kit as the single source for UI primitives — do not roll custom buttons, inputs, modals, typography, or icons. Covers component catalog, props (modern vs deprecated), theming conventions, a cookbook of common patterns, and anti-patterns to avoid. Mirror of .claude/skills/use-ui-kit/SKILL.md — keep in sync.\nglobs: src/**/*.tsx, src/**/*.jsx, src/**/*.ts\nalwaysApply: false\n---\n\n# Using `@tetherto/pearpass-lib-ui-kit`\n\nThis is the design system for the pearpass desktop app. All UI primitives come from here.\n\n## When these rules apply — `DESKTOP_DESIGN_VERSION === 2`\n\nThe active design is controlled by the `DESKTOP_DESIGN_VERSION` flag from `@tetherto/pearpass-lib-constants` (read in `electron/runtime-config.cjs` and exposed via `isV2()` in `src/utils/designVersion.js`).\n\n**Currently `DESKTOP_DESIGN_VERSION === 2`**, so kit components are the right choice for all new UI work today. The app is mid-migration from v1 (custom components in `src/lib-react-components/`) to v2 (kit-based). If the flag is ever flipped back to `1`, v1 components remain in place and continue to work — do not delete them.\n\n## File naming: when to use the `V2` suffix\n\nThe `V2` suffix is a **coexistence marker**, not a design marker. Use it only when a v1 sibling already exists:\n\n- **A v1 file already exists** for this component/screen → create a new file with the `V2` suffix next to it (e.g. v1 `CreateVaultModalContent.jsx` → new `CreateVaultModalContentV2.tsx`). Both live in the tree during migration; the branching happens at the call site via `isV2()`.\n- **No v1 equivalent exists** (net-new feature, net-new component) → create the file with its natural name, **no `V2` suffix**. The codebase is already v2 by default, so the suffix would just be noise.\n\nBefore creating a file, glob the directory for the base name without the suffix. If nothing comes up, skip the suffix.\n\n## Golden rules\n\n1. **Check the catalog below before creating any component.** If it exists in the kit, use it — never wrap or reimplement.\n2. **All new UI goes through the kit.** Any new `.tsx`/`.jsx` file — suffixed or not — must import from `@tetherto/pearpass-lib-ui-kit`, not from `src/lib-react-components/`.\n3. **Never add variants under `src/lib-react-components/components/`** (`ButtonThin`, `ButtonPrimary`, `ButtonRoundIcon`, `PearPassInputField`, etc.). That tree is legacy; the kit's `Button` takes variants.\n4. **Style with tokens.** Use `useTheme()` + `rawTokens`. No hardcoded hex colors or px spacing.\n5. **Icons come from the kit.** `@tetherto/pearpass-lib-ui-kit/icons` has 530 icons. Do not add new SVGs under `src/`.\n6. **If the kit lacks something you need, stop and ask the user.** Don't silently roll a custom component.\n\n## Component catalog (31 components)\n\nImport pattern: `import { ComponentName } from '@tetherto/pearpass-lib-ui-kit'`\n\n### Actions\n- `Button` — all CTAs. Takes variants; use instead of `ButtonThin`, `ButtonPrimary`, `ButtonSecondary`, `ButtonRoundIcon`, `ButtonLittle`, `ButtonFilter`, `ButtonFolder`, `ButtonRadio`, `ButtonSingleInput`, `ButtonCreate`.\n- `Pressable` — low-level pressable wrapper for custom interactive elements.\n- `Link` — text links.\n\n### Forms\n- `Form` — form wrapper with validation.\n- `InputField` — text input. Use instead of `PearPassInputField`.\n- `PasswordField` — password input with strength indicator. Use instead of `PearPassPasswordField` / `PearPassPasswordFieldV2`.\n- `SearchField` — search input.\n- `SelectField` — dropdown select.\n- `Dropdown` — low-level dropdown primitive.\n- `TextArea` — multiline text input.\n- `Checkbox`\n- `Radio`\n- `ToggleSwitch`\n- `Slider`\n- `DateField`\n- `AttachmentField`\n- `UploadField`\n- `MultiSlotInput` — split inputs for OTP / recovery codes. Use instead of custom `OtpCodeField`.\n- `FieldError` — inline field validation error.\n\n### Typography\n- `Title` — headings.\n- `Text` — body text.\n\n### Layout / surfaces\n- `Dialog` — modals. Use instead of custom `ModalContent` wrappers.\n- `NativeBottomSheet` — bottom sheets.\n- `PageHeader` — top-of-page header.\n- `ItemScreenHeader` — item-detail header.\n- `Breadcrumb`\n- `ListItem`\n- `NavbarListItem`\n- `ContextMenu`\n\n### Feedback\n- `AlertMessage` — inline alerts. Reference: `src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx`.\n- `Snackbar` — toast-style notifications.\n- `PasswordIndicator` — standalone password strength meter.\n\n### Type exports\n- `ThemeColors`, `Theme`, `ThemeType`, `RawTokens`\n- `PasswordIndicatorVariant` — `'vulnerable' | 'decent' | 'strong'`\n\nImport types with `import type { ... } from '@tetherto/pearpass-lib-ui-kit'`.\n\n## Component props (15 most-used)\n\nRequired props have no `?`. **Always include a test ID on interactive components** — see the \"Test IDs\" section below for which prop to use per component.\n\n- **Button** — `variant: 'primary' | 'secondary' | 'tertiary' | 'destructive'`, `size: 'small' | 'medium'`, `onClick`, `children`, `type?: 'button' | 'submit'`, `disabled?`, `isLoading?`, `iconBefore?`, `iconAfter?`, `data-testid?`. Icon-only buttons need `aria-label`.\n- **Dialog** — `title` (ReactNode), `onClose?`, `open?`, `footer?`, `children?`, `closeOnOutsideClick?`, `hideCloseButton?`, `trapFocus?`, `initialFocusRef?`, `testID?`, `closeButtonTestID?`. Put action buttons in `footer`.\n- **InputField** — `label`, `value`, `onChange?: (e) => void`, `placeholder?`, `error?: string`, `inputType?: 'text' | 'password'`, `disabled?`, `readOnly?`, `copyable?`, `onCopy?`, `leftSlot?`, `rightSlot?`, `testID?`.\n- **PasswordField** — `label`, `value`, `onChange?`, `placeholder?`, `error?`, `passwordIndicator?: 'vulnerable' | 'decent' | 'strong' | 'match'`, `infoBox?: string`, `copyable?`, `testID?`.\n- **SearchField** — `value`, `onChangeText` (yes, this one is still current), `placeholderText?`, `size?: 'small' | 'medium'`, `testID?`.\n- **Form** — `children`, `onSubmit?`, `noValidate?`, `testID?`. Wrap fields here; pair with `useForm` from `@tetherto/pear-apps-lib-ui-react-hooks`.\n- **Text** — `children`, `as?: 'p' | 'span'`, `variant?: 'label' | 'labelEmphasized' | 'body' | 'bodyEmphasized' | 'caption'`, `color?`, `numberOfLines?`, `data-testid?`.\n- **Title** — `children`, `as?: 'h1' | 'h2' | ... | 'h6'`, `data-testid?`.\n- **AlertMessage** — `variant: 'info' | 'warning' | 'error'`, `size: 'small' | 'medium' | 'big'`, `title`, `description`, `actionText?`, `onAction?`, `testID?`, `actionTestId?`.\n- **ToggleSwitch** — `checked?`, `onChange?: (b: boolean) => void`, `label?`, `description?`, `disabled?`, `data-testid?`.\n- **Checkbox** — same shape as `ToggleSwitch` (uses `data-testid`).\n- **Radio** — `options: Array<{value, label?, description?, disabled?}>`, `value?`, `onChange?: (v: string) => void`, `testID?`.\n- **SelectField** — `label`, `value?`, `placeholder?`, `onClick?` (opens dropdown), `error?`, `disabled?`, `leftSlot?`, `rightSlot?`, `testID?`.\n- **TextArea** — `value`, `onChange?`, `label?`, `placeholder?`, `error?`, `disabled?`, `testID?`.\n- **Link** — `children`, `href?`, `isExternal?`, `onClick?`, `data-testid?` (and standard `<a>` attributes).\n\nFor components not listed, open `node_modules/@tetherto/pearpass-lib-ui-kit/dist/components/<Name>/types.d.ts`.\n\n### Test IDs — `testID` vs `data-testid`\n\nAlways include a test ID on anything a user interacts with (buttons, fields, toggles, dialogs). Which prop depends on the component:\n\n- **`testID`** — components that declare it explicitly: `Dialog` (+ `closeButtonTestID`), `Form`, `InputField`, `PasswordField`, `SearchField`, `SelectField`, `TextArea`, `Radio`, `AlertMessage` (+ `actionTestId`).\n- **`data-testid`** — components that extend native HTML and don't redeclare it: `Button`, `ToggleSwitch`, `Checkbox`, `Link`, `Pressable`, `Text`, `Title`.\n\nRule of thumb: try `testID` first; if TypeScript rejects it, use `data-testid`. When editing an existing file, follow the naming pattern already there (e.g. `createvault-name-v2`, `createvault-discard-v2`).\n\n### Prop naming — modern vs. deprecated (important)\n\nThe kit recently renamed several field props. **Use the modern names:**\n\n| Use | Not (deprecated) |\n| --- | --- |\n| `onChange` (receives `ChangeEvent`) | `onChangeText` (receives string) |\n| `placeholder` | `placeholderText` |\n| `error` (string) | `errorMessage` + `variant` |\n\n⚠️ **Existing v2 files in this repo (e.g. `CreateVaultModalContentV2`, `CardCreateMasterPasswordV2`) still use the deprecated props.** Don't copy their prop names blindly — use the modern ones in new code. The deprecated props still work for now but will be removed.\n\n**Exception:** `SearchField` still uses `onChangeText` + `placeholderText` — those aren't deprecated there. `testID` is current everywhere.\n\n## Theming\n\nThe codebase does **not** use styled-components. The convention is a `createStyles(colors)` factory that returns plain inline-style objects, consumed via `style={styles.foo}`.\n\n**In the component** (reference: `src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx`):\n\n```tsx\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { createStyles } from './styles'\n\nconst Component = () => {\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  return <div style={styles.card}>…</div>\n}\n```\n\n**In the companion `styles.ts`** (reference: `src/pages/WelcomePage/CardCreateMasterPasswordV2/styles.ts`):\n\n```ts\nimport type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  card: {\n    background: colors.colorSurfacePrimary,\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.radius8}px`,\n    padding: `${rawTokens.spacing24}px`,\n    gap: `${rawTokens.spacing12}px`,\n  },\n})\n```\n\n### `rawTokens` — flat, numeric-suffixed keys (not nested)\n\n- Spacing: `spacing2`, `spacing4`, `spacing6`, `spacing8`, `spacing10`, `spacing12`, `spacing16`, `spacing20`, `spacing24`, `spacing32`, `spacing40`, `spacing48` (all `number`, multiply with `${n}px`)\n- Radius: `radius8`, `radius16`, `radius20`, `radius26`\n- Font size: `fontSize12`, `fontSize14`, `fontSize16`, `fontSize24`, `fontSize28`\n- Font family: `fontPrimary` (`\"Inter\"`), `fontDisplay` (`\"Humble Nostalgia\"`)\n- Weight: `weightRegular` (`\"400\"`), `weightMedium` (`\"500\"`)\n\n### `theme.colors` — common keys seen in this repo\n\n`colorSurfacePrimary`, `colorSurfaceHover`, `colorBorderPrimary`, `colorBorderSecondary`, `colorTextPrimary`, `colorTextSecondary`, `colorTextTertiary`, `colorLinkText`. If you need one you haven't seen, inspect the `ThemeColors` type from `@tetherto/pearpass-lib-ui-kit`.\n\n### When hardcoded values are OK\n\nTokens cover the design-system primitives. Feature-specific layout values (a card's `maxWidth: '500px'`, a one-off `padding: '55px 0'`) are fine as literals — these aren't design tokens. **Rule of thumb:** if the value corresponds to a semantic design decision (spacing step, brand color, radius), it must come from a token.\n\n## Icons\n\n```tsx\nimport { Add, Download, Folder, OpenInNew } from '@tetherto/pearpass-lib-ui-kit/icons'\n```\n\n530 icons, mostly Material Design, with style variants as suffixes: `Filled`, `Outlined`, `Round`, `Sharp`, `Tone` (e.g. `LockFilled`, `InfoOutlined`, `KeyboardArrowRightRound`). If a name has no suffix, it exists as a single variant.\n\n**Commonly used in this repo** (check these first before browsing):\n\n- **Actions:** `Add`, `Download`, `ContentCopy`, `Share`, `Send`, `Swap`, `UploadFileFilled`\n- **Folder / organization:** `Folder`, `FolderOpen`, `FolderCopy`, `CreateNewFolder`, `Layers`\n- **Navigation / arrows:** `KeyboardArrowRightFilled`, `KeyboardArrowRightRound`, `KeyboardArrowLeftFilled`, `ExpandMore`\n- **Status / feedback:** `InfoOutlined`, `ReportProblemRound`, `ErrorFilled`, `Check`, `DoneAll`, `CheckBox`\n- **Security:** `LockFilled`, `Key`, `SecurityFilled`, `Fingerprint`, `TwoFactorAuthenticationFilled`\n- **External / misc:** `ImportOutlined`, `OpenInNew`\n\n**Discovering others:** `ls node_modules/@tetherto/pearpass-lib-ui-kit/dist/icons/components/ | grep -i <keyword>` — names are PascalCase, grep is case-insensitive friendly.\n\n## Anti-patterns to avoid\n\nWhen editing a v2 file or creating new UI, do **not**:\n\n- Add a new file under `src/lib-react-components/components/` for a Button/Input/Modal variant.\n- Import `PearPassInputField`, `PearPassPasswordField`, or any `Button*` variant from `src/lib-react-components/` into any new file — swap to the kit equivalents.\n- Add a `V2` suffix to a net-new file that has no v1 sibling. Suffix is only for migration coexistence.\n- Use native `<button>`, `<input>`, or `<dialog>` in production code (tests are fine).\n- Hardcode hex colors, brand radii, or design-system spacing — use `rawTokens` and `theme.colors`. (Feature-specific layout literals like `maxWidth: '500px'` are fine.)\n- Add new SVG files under `src/` when the kit's icons subpath covers them.\n- Introduce `styled-components` — the convention is `createStyles(colors)` returning plain style objects.\n\nWhen editing a v1 file and you spot these patterns, mention them to the user but **don't do drive-by rewrites** unless asked — v1 migration is scoped work.\n\n## When the kit truly lacks something\n\n1. Confirm by grepping `node_modules/@tetherto/pearpass-lib-ui-kit/dist/components/` for the concept.\n2. Check if a composition of existing kit primitives covers it (e.g. `Pressable` + `Text` + tokens).\n3. If still missing, surface it to the user: \"The kit doesn't export X — options are (a) compose from Y + Z, (b) request X be added upstream, (c) temporary local component. Which?\" Do not silently create (c).\n"
  },
  {
    "path": ".github/actions/authorize-pr/action.yml",
    "content": "name: Authorize PR\ndescription: >\n  Security gate for pull_request_target workflows only. Checks actor\n  write permission, author association, and label presence for external\n  fork PRs. Strips the gate label on synchronize events from non-writers\n  to force re-review after new commits.\n\ninputs:\n  label:\n    description: \"Label name required for external fork PRs (default: verify)\"\n    required: false\n    default: \"verify\"\n  github-token:\n    description: \"GitHub token for permission check and label API calls\"\n    required: true\n\noutputs:\n  allowed:\n    description: \"true when the workflow is authorized to proceed\"\n    value: ${{ steps.check.outputs.allowed }}\n\nruns:\n  using: composite\n  steps:\n    # -----------------------------------------------------------------\n    # 1. Resolve actor permission level\n    # -----------------------------------------------------------------\n    - name: Check actor write permission\n      id: perm\n      uses: scherermichael-oss/action-has-permission@136e061bfe093832d87f090dd768e14e27a740d3 # 1.0.6\n      with:\n        required-permission: write\n      env:\n        GITHUB_TOKEN: ${{ inputs.github-token }}\n\n    # -----------------------------------------------------------------\n    # 2. Decide whether the run is authorized\n    # -----------------------------------------------------------------\n    - name: Check authorization\n      id: check\n      shell: bash\n      env:\n        EVENT: ${{ github.event_name }}\n        ACTION: ${{ github.event.action }}\n        HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}\n        BASE_REPO: ${{ github.repository }}\n        AUTHOR_ASSOC: ${{ github.event.pull_request.author_association }}\n        HAS_WRITE: ${{ steps.perm.outputs.has-permission }}\n        LABEL_NAME: ${{ inputs.label }}\n        LABELS_JSON: ${{ toJSON(github.event.pull_request.labels.*.name) }}\n      run: |\n        # Non-PR events (push, workflow_dispatch, workflow_call) are always trusted\n        if [ \"$EVENT\" != \"pull_request_target\" ]; then\n          echo \"::notice::Non-PR event ($EVENT) — authorized\"\n          echo \"allowed=true\" >> \"$GITHUB_OUTPUT\"\n          exit 0\n        fi\n\n        # Same-repo PRs are always trusted\n        if [ \"$HEAD_REPO\" = \"$BASE_REPO\" ]; then\n          echo \"::notice::Same-repo PR — authorized\"\n          echo \"allowed=true\" >> \"$GITHUB_OUTPUT\"\n          exit 0\n        fi\n\n        echo \"::notice::Actor '$GITHUB_ACTOR' write-or-higher: $HAS_WRITE\"\n\n        # Actor with write (or higher) is trusted even from a fork\n        if [ \"$HAS_WRITE\" = \"1\" ]; then\n          echo \"::notice::Actor has write-or-higher permission — authorized\"\n          echo \"allowed=true\" >> \"$GITHUB_OUTPUT\"\n          exit 0\n        fi\n\n        # Org members / collaborators are trusted even from forks\n        if [[ \"$AUTHOR_ASSOC\" =~ ^(MEMBER|OWNER|COLLABORATOR)$ ]]; then\n          echo \"::notice::Trusted author ($AUTHOR_ASSOC) — authorized\"\n          echo \"allowed=true\" >> \"$GITHUB_OUTPUT\"\n          exit 0\n        fi\n\n        # External fork: require the gate label\n        HAS_LABEL=$(echo \"$LABELS_JSON\" | jq -r --arg l \"$LABEL_NAME\" \\\n          'if . == null then \"false\" elif any(. == $l) then \"true\" else \"false\" end')\n\n        # On synchronize from a non-writer, reject even if the label is still\n        # present. The label was granted for the previous commit; new unreviewed\n        # code must not run with secrets. The strip step below removes the label\n        # so that a re-review + re-label is required for the next run.\n        if [ \"$ACTION\" = \"synchronize\" ]; then\n          echo \"::warning::External fork synchronize from non-writer — blocking until re-review\"\n          echo \"allowed=false\" >> \"$GITHUB_OUTPUT\"\n          exit 0\n        fi\n\n        if [ \"$HAS_LABEL\" = \"true\" ]; then\n          echo \"::notice::Fork PR with '$LABEL_NAME' label — authorized\"\n          echo \"allowed=true\" >> \"$GITHUB_OUTPUT\"\n        else\n          echo \"::warning::External fork PR without '$LABEL_NAME' label — skipping\"\n          echo \"::warning::A team member must review the code and apply the '$LABEL_NAME' label\"\n          echo \"allowed=false\" >> \"$GITHUB_OUTPUT\"\n        fi\n\n    # -----------------------------------------------------------------\n    # 3. Strip the gate label on synchronize from non-writers\n    #    This forces a maintainer to re-review before the NEXT run.\n    # -----------------------------------------------------------------\n    - name: Strip label on new pushes from non-writers\n      if: |\n        steps.perm.outputs.has-permission != '1' &&\n        github.event.action == 'synchronize' &&\n        github.event.pull_request.head.repo.full_name != github.repository\n      shell: bash\n      env:\n        GH_TOKEN: ${{ inputs.github-token }}\n        PR_NUMBER: ${{ github.event.pull_request.number }}\n        LABEL: ${{ inputs.label }}\n      run: |\n        gh api -X DELETE \\\n          \"repos/${{ github.repository }}/issues/${PR_NUMBER}/labels/${LABEL}\" \\\n          2>/dev/null || true\n        echo \"::warning::Removed '${LABEL}' label — new commits from non-writer. Re-review required.\"\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "### Requirements\n<!-- List the requirements for this PR -->\n\n### Changes\n<!-- Summarize the changes introduced in this PR -->\n\n### Testing Notes\n<!-- How did you test it? -->\n\n### Things reviewers should pay attention to\n<!-- Highlight anything specific you want reviewers to focus on -->\n\n### Screenshots/Recordings\n<!-- Add screenshots or screen recordings if applicable -->\n\n### dependencies\n<!-- List any dependent work items or PRs -->\n"
  },
  {
    "path": ".github/workflows/ci-pr.yml",
    "content": "name: PR CI\n\non:\n  pull_request_target:\n    types: [opened, reopened, synchronize, labeled]\n    branches: [main]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: pr-ci-${{ github.event.pull_request.number }}\n  cancel-in-progress: true\n\njobs:\n  authorize:\n    if: github.event.action != 'labeled' || github.event.label.name == 'verify'\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pull-requests: write\n      issues: write\n    outputs:\n      allowed: ${{ steps.auth.outputs.allowed }}\n\n    steps:\n      - name: Checkout workflow code\n        uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1\n\n      - name: Authorize PR execution\n        id: auth\n        uses: ./.github/actions/authorize-pr\n        with:\n          github-token: ${{ github.token }}\n\n      - name: Summarize skipped run\n        if: steps.auth.outputs.allowed != 'true'\n        run: |\n          echo \"PR CI is limited to members, collaborators, or external PRs labeled 'verify' (re-review required after each push).\" >> \"$GITHUB_STEP_SUMMARY\"\n\n  ci:\n    needs: authorize\n    if: needs.authorize.outputs.allowed == 'true'\n    uses: ./.github/workflows/ci-reusable.yml\n    with:\n      checkout_ref: ${{ github.event.pull_request.head.sha }}\n      checkout_repository: ${{ github.event.pull_request.head.repo.full_name }}\n"
  },
  {
    "path": ".github/workflows/ci-push.yml",
    "content": "name: Push CI\n\non:\n  push:\n    branches: [main]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: push-ci-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  ci:\n    uses: ./.github/workflows/ci-reusable.yml\n    with:\n      checkout_ref: ${{ github.sha }}\n      checkout_repository: ${{ github.repository }}\n"
  },
  {
    "path": ".github/workflows/ci-reusable.yml",
    "content": "name: Reusable CI\n\non:\n  workflow_call:\n    inputs:\n      checkout_ref:\n        description: Git ref or SHA to validate\n        required: true\n        type: string\n      checkout_repository:\n        description: Repository that contains the ref to validate\n        required: true\n        type: string\n\npermissions:\n  contents: read\n\njobs:\n  quality:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1\n        with:\n          ref: ${{ inputs.checkout_ref }}\n          repository: ${{ inputs.checkout_repository }}\n          persist-credentials: false\n\n      - name: Setup Node\n        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0\n        with:\n          node-version-file: .nvmrc\n          cache: npm\n\n      - name: Install dependencies\n        run: npm ci --legacy-peer-deps\n\n      - name: Compile locale files\n        run: |\n          npm run lingui:extract\n          npm run lingui:compile\n\n      - name: Run ESLint\n        run: npm run lint\n\n      - name: Run TypeScript typecheck\n        run: npx tsc --noEmit\n\n      - name: Run tests\n        run: npm test\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\n\nsrc/locales\n\n.yalc\nyalc.lock\npass\n\n#ignore IntelliJ or other Jetbrains files\n.idea\n\n# Generated log files\nlogs/\n\n.env\n\n.DS_Store\nassets/.DS_Store\n\ndist\n\n# Build output\nbuild/\n*.AppImage\n*.flatpak\n*.snap\n\n# Snapcraft build artifacts\n.snapcraft.yaml.swp\n\n# Flatpak build artifacts\nflatpak/.flatpak-builder/\nflatpak/build-dir/\nflatpak/repo/\nflatpak/icons/\n\n# Editor swap files\n*.swp\n*.swo\n*~\n\n# VSCode\n.vscode/\n\n# Test coverage\ncoverage/\n\n# TypeScript build info\n*.tsbuildinfo\n\n# bin.tar.gz generated by bare-build\n*.bin.tar.gz\n# Snapcraft\n.snapcraft.yaml.swp\n\n# Flatpak\nflatpak/*.flatpak\nflatpak/*.tar.gz\nflatpak/build-dir/\nflatpak/repo/\nflatpak/.flatpak-builder/\n.flatpak-builder/\n\n# Appling (AppImage builds)\nappling/*.AppImage\nappling/node_modules/\n\n# test files\ntest-results\n\nout/\n\nsrc/PearPass"
  },
  {
    "path": ".husky/pre-commit",
    "content": "npm run lint\nnpm run build:app\n"
  },
  {
    "path": ".npmrc",
    "content": "foreground-scripts=true\nlegacy-peer-deps=true\n"
  },
  {
    "path": ".nvmrc",
    "content": "22.12.0"
  },
  {
    "path": "AGENTS.md",
    "content": "# UI conventions for pearpass-app-desktop-tether\n\nThis is the Electron desktop app for PearPass. It's written in React + TypeScript. UI is built on the shared component library `@tetherto/pearpass-lib-ui-kit`.\n\nThis document is for **anyone contributing UI** to the repo — new hires, current engineers, and AI coding assistants (Claude Code, Cursor, Codex, etc.). It captures the component catalog, styling conventions, file-naming rules, and patterns we use when building UI in this app. Read it once before your first UI change; keep it open when you're in doubt.\n\n## Design-system state — `DESKTOP_DESIGN_VERSION === 2`\n\nWhich design renders at runtime is controlled by the `DESKTOP_DESIGN_VERSION` flag from `@tetherto/pearpass-lib-constants` (resolved in [electron/runtime-config.cjs](electron/runtime-config.cjs) and exposed via `isV2()` in [src/utils/designVersion.js](src/utils/designVersion.js)).\n\n**Currently `DESKTOP_DESIGN_VERSION === 2`**, so kit components are the right choice for all new UI work. Legacy v1 components still live under [src/lib-react-components/](src/lib-react-components/) and are rendered whenever `isV2()` returns `false` — do not delete them as part of v2 work.\n\n## File naming: when to use the `V2` suffix\n\nThe `V2` suffix is a **coexistence marker**, not a design marker. Use it only when a v1 sibling already exists:\n\n- **A v1 file already exists** for this component/screen → create a new file with the `V2` suffix next to it (e.g. v1 `CreateVaultModalContent.jsx` → new `CreateVaultModalContentV2.tsx`). Both live in the tree during migration; the branching happens at the call site via `isV2()`.\n- **No v1 equivalent exists** (net-new feature, net-new component) → create the file with its natural name, **no `V2` suffix**. The codebase is already v2 by default, so the suffix would just be noise.\n\nBefore creating a file, glob the directory for the base name without the suffix. If nothing comes up, skip the suffix.\n\n## Golden rules\n\n1. **Check the catalog below before creating any component.** If it exists in the kit, use it — never wrap or reimplement.\n2. **All new UI goes through the kit.** Any new `.tsx`/`.jsx` file — suffixed or not — must import from `@tetherto/pearpass-lib-ui-kit`, not from [src/lib-react-components/](src/lib-react-components/).\n3. **Never add variants under [src/lib-react-components/components/](src/lib-react-components/components/)** (`ButtonThin`, `ButtonPrimary`, `ButtonRoundIcon`, `PearPassInputField`, etc.). That tree is legacy; the kit's `Button` takes variants.\n4. **Style with tokens.** Use `useTheme()` + `rawTokens`. No hardcoded hex colors or px spacing.\n5. **Icons come from the kit.** `@tetherto/pearpass-lib-ui-kit/icons` has 530 icons. Do not add new SVGs under `src/`.\n6. **If the kit lacks something you need, stop and ask the user.** Don't silently roll a custom component.\n\n## Component catalog (31 components)\n\nImport pattern: `import { ComponentName } from '@tetherto/pearpass-lib-ui-kit'`\n\n### Actions\n- `Button` — all CTAs. Takes variants; use instead of `ButtonThin`, `ButtonPrimary`, `ButtonSecondary`, `ButtonRoundIcon`, `ButtonLittle`, `ButtonFilter`, `ButtonFolder`, `ButtonRadio`, `ButtonSingleInput`, `ButtonCreate`.\n- `Pressable` — low-level pressable wrapper for custom interactive elements.\n- `Link` — text links.\n\n### Forms\n- `Form` — form wrapper with validation.\n- `InputField` — text input. Use instead of `PearPassInputField`.\n- `PasswordField` — password input with strength indicator. Use instead of `PearPassPasswordField` / `PearPassPasswordFieldV2`.\n- `SearchField` — search input.\n- `SelectField` — dropdown select.\n- `Dropdown` — low-level dropdown primitive.\n- `TextArea` — multiline text input.\n- `Checkbox`\n- `Radio`\n- `ToggleSwitch`\n- `Slider`\n- `DateField`\n- `AttachmentField`\n- `UploadField`\n- `MultiSlotInput` — split inputs for OTP / recovery codes. Use instead of custom `OtpCodeField`.\n- `FieldError` — inline field validation error.\n\n### Typography\n- `Title` — headings.\n- `Text` — body text.\n\n### Layout / surfaces\n- `Dialog` — modals. Use instead of custom `ModalContent` wrappers.\n- `NativeBottomSheet` — bottom sheets.\n- `PageHeader` — top-of-page header.\n- `ItemScreenHeader` — item-detail header.\n- `Breadcrumb`\n- `ListItem`\n- `NavbarListItem`\n- `ContextMenu`\n\n### Feedback\n- `AlertMessage` — inline alerts. Reference: [src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx](src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx).\n- `Snackbar` — toast-style notifications.\n- `PasswordIndicator` — standalone password strength meter.\n\n### Type exports\n- `ThemeColors`, `Theme`, `ThemeType`, `RawTokens`\n- `PasswordIndicatorVariant` — `'vulnerable' | 'decent' | 'strong'`\n\nImport types with `import type { ... } from '@tetherto/pearpass-lib-ui-kit'`.\n\n## Component props (15 most-used)\n\nRequired props have no `?`. **Always include a test ID on interactive components** — see the \"Test IDs\" section below for which prop to use per component.\n\n- **Button** — `variant: 'primary' | 'secondary' | 'tertiary' | 'destructive'`, `size: 'small' | 'medium'`, `onClick`, `children`, `type?: 'button' | 'submit'`, `disabled?`, `isLoading?`, `iconBefore?`, `iconAfter?`, `data-testid?`. Icon-only buttons need `aria-label`.\n- **Dialog** — `title` (ReactNode), `onClose?`, `open?`, `footer?`, `children?`, `closeOnOutsideClick?`, `hideCloseButton?`, `trapFocus?`, `initialFocusRef?`, `testID?`, `closeButtonTestID?`. Put action buttons in `footer`.\n- **InputField** — `label`, `value`, `onChange?: (e) => void`, `placeholder?`, `error?: string`, `inputType?: 'text' | 'password'`, `disabled?`, `readOnly?`, `copyable?`, `onCopy?`, `leftSlot?`, `rightSlot?`, `testID?`.\n- **PasswordField** — `label`, `value`, `onChange?`, `placeholder?`, `error?`, `passwordIndicator?: 'vulnerable' | 'decent' | 'strong' | 'match'`, `infoBox?: string`, `copyable?`, `testID?`.\n- **SearchField** — `value`, `onChangeText` (yes, this one is still current), `placeholderText?`, `size?: 'small' | 'medium'`, `testID?`.\n- **Form** — `children`, `onSubmit?`, `noValidate?`, `testID?`. Wrap fields here; pair with `useForm` from `@tetherto/pear-apps-lib-ui-react-hooks`.\n- **Text** — `children`, `as?: 'p' | 'span'`, `variant?: 'label' | 'labelEmphasized' | 'body' | 'bodyEmphasized' | 'caption'`, `color?`, `numberOfLines?`, `data-testid?`.\n- **Title** — `children`, `as?: 'h1' | 'h2' | ... | 'h6'`, `data-testid?`.\n- **AlertMessage** — `variant: 'info' | 'warning' | 'error'`, `size: 'small' | 'medium' | 'big'`, `title`, `description`, `actionText?`, `onAction?`, `testID?`, `actionTestId?`.\n- **ToggleSwitch** — `checked?`, `onChange?: (b: boolean) => void`, `label?`, `description?`, `disabled?`, `data-testid?`.\n- **Checkbox** — same shape as `ToggleSwitch` (uses `data-testid`).\n- **Radio** — `options: Array<{value, label?, description?, disabled?}>`, `value?`, `onChange?: (v: string) => void`, `testID?`.\n- **SelectField** — `label`, `value?`, `placeholder?`, `onClick?` (opens dropdown), `error?`, `disabled?`, `leftSlot?`, `rightSlot?`, `testID?`.\n- **TextArea** — `value`, `onChange?`, `label?`, `placeholder?`, `error?`, `disabled?`, `testID?`.\n- **Link** — `children`, `href?`, `isExternal?`, `onClick?`, `data-testid?` (and standard `<a>` attributes).\n\nFor components not listed, open `node_modules/@tetherto/pearpass-lib-ui-kit/dist/components/<Name>/types.d.ts`.\n\n### Test IDs — `testID` vs `data-testid`\n\nAlways include a test ID on anything a user interacts with (buttons, fields, toggles, dialogs). Which prop depends on the component:\n\n- **`testID`** — components that declare it explicitly: `Dialog` (+ `closeButtonTestID`), `Form`, `InputField`, `PasswordField`, `SearchField`, `SelectField`, `TextArea`, `Radio`, `AlertMessage` (+ `actionTestId`).\n- **`data-testid`** — components that extend native HTML and don't redeclare it: `Button`, `ToggleSwitch`, `Checkbox`, `Link`, `Pressable`, `Text`, `Title`.\n\nRule of thumb: try `testID` first; if TypeScript rejects it, use `data-testid`. When editing an existing file, follow the naming pattern already there (e.g. `createvault-name-v2`, `createvault-discard-v2`).\n\n### Prop naming — modern vs. deprecated (important)\n\nThe kit recently renamed several field props. **Use the modern names:**\n\n| Use | Not (deprecated) |\n| --- | --- |\n| `onChange` (receives `ChangeEvent`) | `onChangeText` (receives string) |\n| `placeholder` | `placeholderText` |\n| `error` (string) | `errorMessage` + `variant` |\n\n⚠️ **Existing v2 files in this repo (e.g. `CreateVaultModalContentV2`, `CardCreateMasterPasswordV2`) still use the deprecated props.** Don't copy their prop names blindly — use the modern ones in new code. The deprecated props still work for now but will be removed.\n\n**Exception:** `SearchField` still uses `onChangeText` + `placeholderText` — those aren't deprecated there. `testID` is current everywhere.\n\n## Theming\n\nThe codebase does **not** use styled-components. The convention is a `createStyles(colors)` factory that returns plain inline-style objects, consumed via `style={styles.foo}`.\n\n**In the component** ([reference](src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx)):\n\n```tsx\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { createStyles } from './styles'\n\nconst Component = () => {\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  return <div style={styles.card}>…</div>\n}\n```\n\n**In the companion `styles.ts`** ([reference](src/pages/WelcomePage/CardCreateMasterPasswordV2/styles.ts)):\n\n```ts\nimport type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  card: {\n    background: colors.colorSurfacePrimary,\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.radius8}px`,\n    padding: `${rawTokens.spacing24}px`,\n    gap: `${rawTokens.spacing12}px`,\n  },\n})\n```\n\n### `rawTokens` — flat, numeric-suffixed keys (not nested)\n\n- Spacing: `spacing2`, `spacing4`, `spacing6`, `spacing8`, `spacing10`, `spacing12`, `spacing16`, `spacing20`, `spacing24`, `spacing32`, `spacing40`, `spacing48` (all `number`, multiply with `${n}px`)\n- Radius: `radius8`, `radius16`, `radius20`, `radius26`\n- Font size: `fontSize12`, `fontSize14`, `fontSize16`, `fontSize24`, `fontSize28`\n- Font family: `fontPrimary` (`\"Inter\"`), `fontDisplay` (`\"Humble Nostalgia\"`)\n- Weight: `weightRegular` (`\"400\"`), `weightMedium` (`\"500\"`)\n\n### `theme.colors` — common keys seen in this repo\n\n`colorSurfacePrimary`, `colorSurfaceHover`, `colorBorderPrimary`, `colorBorderSecondary`, `colorTextPrimary`, `colorTextSecondary`, `colorTextTertiary`, `colorLinkText`. If you need one you haven't seen, inspect the `ThemeColors` type from `@tetherto/pearpass-lib-ui-kit`.\n\n### When hardcoded values are OK\n\nTokens cover the design-system primitives. Feature-specific layout values (a card's `maxWidth: '500px'`, a one-off `padding: '55px 0'`) are fine as literals — these aren't design tokens. **Rule of thumb:** if the value corresponds to a semantic design decision (spacing step, brand color, radius), it must come from a token.\n\n## Icons\n\n```tsx\nimport { Add, Download, Folder, OpenInNew } from '@tetherto/pearpass-lib-ui-kit/icons'\n```\n\n530 icons, mostly Material Design, with style variants as suffixes: `Filled`, `Outlined`, `Round`, `Sharp`, `Tone` (e.g. `LockFilled`, `InfoOutlined`, `KeyboardArrowRightRound`). If a name has no suffix, it exists as a single variant.\n\n**Commonly used in this repo** (check these first before browsing):\n\n- **Actions:** `Add`, `Download`, `ContentCopy`, `Share`, `Send`, `Swap`, `UploadFileFilled`\n- **Folder / organization:** `Folder`, `FolderOpen`, `FolderCopy`, `CreateNewFolder`, `Layers`\n- **Navigation / arrows:** `KeyboardArrowRightFilled`, `KeyboardArrowRightRound`, `KeyboardArrowLeftFilled`, `ExpandMore`\n- **Status / feedback:** `InfoOutlined`, `ReportProblemRound`, `ErrorFilled`, `Check`, `DoneAll`, `CheckBox`\n- **Security:** `LockFilled`, `Key`, `SecurityFilled`, `Fingerprint`, `TwoFactorAuthenticationFilled`\n- **External / misc:** `ImportOutlined`, `OpenInNew`\n\n**Discovering others:** `ls node_modules/@tetherto/pearpass-lib-ui-kit/dist/icons/components/ | grep -i <keyword>` — names are PascalCase, grep is case-insensitive friendly.\n\n## Anti-patterns to avoid\n\nWhen editing a v2 file or creating new UI, do **not**:\n\n- Add a new file under [src/lib-react-components/components/](src/lib-react-components/components/) for a Button/Input/Modal variant.\n- Import `PearPassInputField`, `PearPassPasswordField`, or any `Button*` variant from `src/lib-react-components/` into any new file — swap to the kit equivalents.\n- Add a `V2` suffix to a net-new file that has no v1 sibling. Suffix is only for migration coexistence.\n- Use native `<button>`, `<input>`, or `<dialog>` in production code (tests are fine).\n- Hardcode hex colors, brand radii, or design-system spacing — use `rawTokens` and `theme.colors`. (Feature-specific layout literals like `maxWidth: '500px'` are fine.)\n- Add new SVG files under `src/` when the kit's icons subpath covers them.\n- Introduce `styled-components` — the convention is `createStyles(colors)` returning plain style objects.\n\nWhen editing a v1 file and you spot these patterns, mention them to the user but **don't do drive-by rewrites** unless asked — v1 migration is scoped work.\n\n## When the kit truly lacks something\n\n1. Confirm by grepping `node_modules/@tetherto/pearpass-lib-ui-kit/dist/components/` for the concept.\n2. Check if a composition of existing kit primitives covers it (e.g. `Pressable` + `Text` + tokens).\n3. If still missing, surface it to the user: \"The kit doesn't export X — options are (a) compose from Y + Z, (b) request X be added upstream, (c) temporary local component. Which?\" Do not silently create (c).\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# pearpass-app-desktop-tether\n\n## UI: always use `@tetherto/pearpass-lib-ui-kit`\n\nUI is built on `@tetherto/pearpass-lib-ui-kit`. All new UI — v2 redesigns of existing screens and net-new features — **must** use components from this kit. Do not roll custom buttons, inputs, modals, typography, or icons.\n\n**Full guide:** the component catalog, props, styling conventions, and reference files live in [AGENTS.md](AGENTS.md) (canonical contributor doc, also loaded by Codex/Cursor). Claude Code's skill trigger loads the same content via [.claude/skills/use-ui-kit/SKILL.md](.claude/skills/use-ui-kit/SKILL.md) whenever you're editing `.tsx`/`.jsx` files.\n\n**Hard rules:**\n- If a component exists in the kit, use it. If it does not, raise it with the team before creating a local alternative.\n- Do **not** add new files under [src/lib-react-components/components/](src/lib-react-components/components/) — that tree is legacy (v1) and should not grow.\n- Style with `useTheme()` + `rawTokens` from the kit. No hardcoded hex colors or design-system spacing.\n- Import icons from `@tetherto/pearpass-lib-ui-kit/icons` (530 available). Do not add new SVGs under `src/`.\n\n**When the kit applies:** the active design is controlled by the `DESKTOP_DESIGN_VERSION` flag from `@tetherto/pearpass-lib-constants`. Currently `DESKTOP_DESIGN_VERSION === 2`, so kit components are the default for all new UI.\n\n**`V2` suffix is for coexistence only.** If a v1 file already exists for the component you're creating, add the `V2` suffix (e.g. `CardCreateMasterPasswordV2` alongside legacy `CardCreateMasterPassword`). If the component is net-new with no v1 sibling, use its natural name — **no suffix**.\n\n## React: `useEffect` dependency safety\n\nBefore adding a function to a `useEffect` dependency array, verify it is stable (memoized with `useCallback`, a `useRef`-held ref, or a module-level constant). Un-memoized functions are recreated on every render and will cause the effect to fire on every render, producing an infinite loop. If the function is not memoized: wrap it in `useCallback` if it lives in this repository, or omit it from the dependency array if it comes from an external package/repository (where you cannot control memoization).\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to PearPass\n\nThe source is open to use as per the [LICENSE](./LICENSE).\n \nBe aware that **any pull-request or issue may be closed without explanation**.\n\n## Issues\n\n- Feature requests are welcome. \n- For bug reports, please provide a failing test case or steps to reproduce. \n\n## Pull Request\n\nNewer contributors are encouraged to start small and simple. Tests - both failing and passing - are very helpful.\n\n- Keep pull requests focused on a single feature or bug fix\n- Provide a clear description of changes\n- Ensure code passes linting: `npm run lint`\n- Ensure tests are passing: `npm test`\n  - except, of course, any added failing tests\n\n\n## License\n\nBy contributing, you agree that your contributions will be licensed under the project [LICENSE](./LICENSE).\n"
  },
  {
    "path": "LICENSE.md",
    "content": "# License\n\nThis project is licensed under the Apache License, Version 2.0.\nSee below for the full license text.\n\n## Apache License\n\n_Version 2.0, January 2004_  \n_&lt;<http://www.apache.org/licenses/>&gt;_\n\n### Terms and Conditions for use, reproduction, and distribution\n\n#### 1. Definitions\n\n“License” shall mean the terms and conditions for use, reproduction, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n“Licensor” shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n“Legal Entity” shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, “control” means **(i)** the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the\noutstanding shares, or **(iii)** beneficial ownership of such entity.\n\n“You” (or “Your”) shall mean an individual or Legal Entity exercising\npermissions granted by this License.\n\n“Source” form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n“Object” form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n“Work” shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n“Derivative Works” shall mean any work, whether in Source or Object form, that\nis based on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n“Contribution” shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work\nby the copyright owner or by an individual or Legal Entity authorized to submit\non behalf of the copyright owner. For the purposes of this definition,\n“submitted” means any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems, and\nissue tracking systems that are managed by, or on behalf of, the Licensor for\nthe purpose of discussing and improving the Work, but excluding communication\nthat is conspicuously marked or otherwise designated in writing by the copyright\nowner as “Not a Contribution.”\n\n“Contributor” shall mean Licensor and any individual or Legal Entity on behalf\nof whom a Contribution has been received by Licensor and subsequently\nincorporated within the Work.\n\n#### 2. Grant of Copyright License\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable copyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the Work and such\nDerivative Works in Source or Object form.\n\n#### 3. Grant of Patent License\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable (except as stated in this section) patent license to make, have\nmade, use, offer to sell, sell, import, and otherwise transfer the Work, where\nsuch license applies only to those patent claims licensable by such Contributor\nthat are necessarily infringed by their Contribution(s) alone or by combination\nof their Contribution(s) with the Work to which such Contribution(s) was\nsubmitted. If You institute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work or a\nContribution incorporated within the Work constitutes direct or contributory\npatent infringement, then any patent licenses granted to You under this License\nfor that Work shall terminate as of the date such litigation is filed.\n\n#### 4. Redistribution\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof\nin any medium, with or without modifications, and in Source or Object form,\nprovided that You meet the following conditions:\n\n* **(a)** You must give any other recipients of the Work or Derivative Works a copy of\nthis License; and\n* **(b)** You must cause any modified files to carry prominent notices stating that You\nchanged the files; and\n* **(c)** You must retain, in the Source form of any Derivative Works that You distribute,\nall copyright, patent, trademark, and attribution notices from the Source form\nof the Work, excluding those notices that do not pertain to any part of the\nDerivative Works; and\n* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any\nDerivative Works that You distribute must include a readable copy of the\nattribution notices contained within such NOTICE file, excluding those notices\nthat do not pertain to any part of the Derivative Works, in at least one of the\nfollowing places: within a NOTICE text file distributed as part of the\nDerivative Works; within the Source form or documentation, if provided along\nwith the Derivative Works; or, within a display generated by the Derivative\nWorks, if and wherever such third-party notices normally appear. The contents of\nthe NOTICE file are for informational purposes only and do not modify the\nLicense. You may add Your own attribution notices within Derivative Works that\nYou distribute, alongside or as an addendum to the NOTICE text from the Work,\nprovided that such additional attribution notices cannot be construed as\nmodifying the License.\n\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n#### 5. Submission of Contributions\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted\nfor inclusion in the Work by You to the Licensor shall be under the terms and\nconditions of this License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify the terms of\nany separate license agreement you may have executed with Licensor regarding\nsuch Contributions.\n\n#### 6. Trademarks\n\nThis License does not grant permission to use the trade names, trademarks,\nservice marks, or product names of the Licensor, except as required for\nreasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n#### 7. Disclaimer of Warranty\n\nUnless required by applicable law or agreed to in writing, Licensor provides the\nWork (and each Contributor provides its Contributions) on an “AS IS” BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,\nincluding, without limitation, any warranties or conditions of TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are\nsolely responsible for determining the appropriateness of using or\nredistributing the Work and assume any risks associated with Your exercise of\npermissions under this License.\n\n#### 8. Limitation of Liability\n\nIn no event and under no legal theory, whether in tort (including negligence),\ncontract, or otherwise, unless required by applicable law (such as deliberate\nand grossly negligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special, incidental,\nor consequential damages of any character arising as a result of this License or\nout of the use or inability to use the Work (including but not limited to\ndamages for loss of goodwill, work stoppage, computer failure or malfunction, or\nany and all other commercial damages or losses), even if such Contributor has\nbeen advised of the possibility of such damages.\n\n#### 9. Accepting Warranty or Additional Liability\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to\noffer, and charge a fee for, acceptance of support, warranty, indemnity, or\nother liability obligations and/or rights consistent with this License. However,\nin accepting such obligations, You may act only on Your own behalf and on Your\nsole responsibility, not on behalf of any other Contributor, and only if You\nagree to indemnify, defend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason of your\naccepting any such warranty or additional liability.\n\n_END OF TERMS AND CONDITIONS_\n\n### APPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets `[]` replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also\nrecommend that a file or class name and description of purpose be included on\nthe same “printed page” as the copyright notice for easier identification within\nthird-party archives.\n\nCopyright 2026 Tether Inc\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License."
  },
  {
    "path": "NOTICE.md",
    "content": "Copyright 2026 Tether Inc\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License."
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <img src=\"assets/images/logo.png\" alt=\"Pearpass logo\" width=\"264\"/>\n</p>\n\n# PearPass Desktop\n\n> The desktop app for PearPass, an open-source, end-to-end encrypted password and identity manager built on Pear Runtime.\n\n---\n\n## Table of Contents\n\n- [Introduction](#introduction)\n- [Features](#features)\n- [Installation](#installation)\n- [Usage Examples](#usage-examples)\n- [Logging](#logging)\n- [Testing](#testing)\n- [Staging to Dev](#staging-to-dev)\n- [Workspace Dependencies](#workspace-dependencies)\n- [Dependencies](#dependencies)\n- [Related Projects](#related-projects)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Introduction\n\nPearPass is an open-source, privacy-first password and identity manager that gives you full control over your sensitive information. It makes storing and managing your credentials simple, secure, and private. PearPass encrypts and stores all data locally on your device.\n\nUnlike traditional password managers that rely on centralized servers, PearPass is built on [Pear Runtime](https://pears.com/) and uses peer-to-peer technology to sync your credentials directly between your devices, ensuring they remain private, secure, and always under your control.\n\n---\n\n## Features\n\n- **Encrypted-at-rest storage** — PearPass encrypts passwords, credit cards, secure notes, and custom fields before writing them to disk.\n- **Cross-device sync** — PearPass syncs credentials directly between your devices using Pear Runtime, with no central server.\n- **Offline access** — Access your vault anytime, even without a network connection.\n- **Password health** — Analyse password strength and identify weak passwords.\n- **Random password generator** — Generate strong, unique passwords.\n- **Multi-platform** — Runs on macOS, Linux, and Windows. PearPass is also available on [mobile](https://github.com/tetherto/pearpass-app-mobile) and as a [browser extension](https://github.com/tetherto/pearpass-app-browser-extension).\n\n---\n\n## Installation\n\n### Prerequisites\n\n- **Node.js** — check the required version in `.nvmrc` and verify with:\n\n```bash\nnode --version\n```\n\n- **Pear Runtime** — [Installation guide](https://docs.pears.com/guide/getting-started.html).\n\n### Steps\n\n```bash\n# 1. Clone the repository\ngit clone git@github.com:tetherto/pearpass-app-desktop.git\n\n# 2. Go to the cloned directory\ncd pearpass-app-desktop\n\n# 3. Install dependencies\nnpm install\n\n# 4. Generate translation keys\nnpm run build\n\n# 5. Start the development app\nnpm run dev\n```\n\n---\n\n## Usage Examples\n\nVisit the official PearPass documentation for step-by-step guides on setup, vault management, syncing across devices, browser extension usage, and all other PearPass features:\n\n**[docs.pass.pears.com](https://docs.pass.pears.com)**\n\n> ⚠️ Intel Mac Support: Intel-based Mac builds are deprecated and provided without official support or active testing. We're keeping them available for now, but use them at your own risk. If you run into issues, feel free to open a ticket. While we can't guarantee a fix, we'd like to know if these builds are still being used!\n\n---\n\n## Logging\n\nOff by default. When enabled, logs are written under `<userData>/logs/` — `main.log` from the host process and `core.log` from the vault worker. The worker's sink redacts known sensitive fields (passwords, keys, tokens, etc.) before writing to `core.log`. The host process logger does not redact, so treat anything passed to `logger.*` in `main.cjs` as on-disk-visible in `main.log`.\n\nThree ways to enable:\n\n- **In-app toggle** (Settings → Diagnostics → **Enable logs**). Persists across launches; toggling on/off resets existing log files for a clean session.\n- **Launch flag:** pass `--enable-logging` at startup. Forces logging on regardless of the toggle.\n- **Nightly builds** (`PearPass-nightly`): logging is on automatically and the in-app toggle is locked.\n\nWhen logging is on, **Open logs folder** in the same screen reveals the directory.\n\n---\n\n## Testing\n\n### Unit Testing\n\nRun unit tests with Jest:\n\n```bash\nnpm test\n```\n\n\n---\n\n## Staging to Dev\n\nEnsure the app runs correctly using `npm run dev`.\n\nIf successful, stage it, for example: `pear stage dev`.\n\nThen run the app: `pear run pear://GENERATED_URL`.\n\nPear serves files from the `dist/` folder:\n\n```html\n<!-- index.html -->\n<script type=\"module\" src=\"./dist/app.js\"></script>\n```\n\nThe `src/` folder is for development and it's ignored in `package.json`:\n\n```json\n\"ignore\": [\".github\", \"appling\", \".git\", \".gitignore\", \"packages\", \"src\"]\n```\n\n---\n\n## Workspace Dependencies\n\nThe following sibling modules must be present in the workspace (they are not declared as npm dependencies):\n\n- [`@tetherto/tether-dev-docs`](../tether-dev-docs)\n- [`@tetherto/pear-apps-lib-feedback`](../pear-apps-lib-feedback)\n- [`@tetherto/pear-apps-lib-ui-react-hooks`](../pear-apps-lib-ui-react-hooks)\n- [`@tetherto/pear-apps-utils-avatar-initials`](../pear-apps-utils-avatar-initials)\n- [`@tetherto/pear-apps-utils-date`](../pear-apps-utils-date)\n- [`@tetherto/pear-apps-utils-generate-unique-id`](../pear-apps-utils-generate-unique-id)\n- [`@tetherto/pear-apps-utils-pattern-search`](../pear-apps-utils-pattern-search)\n- [`@tetherto/pear-apps-utils-qr`](../pear-apps-utils-qr)\n- [`@tetherto/pear-apps-utils-validator`](../pear-apps-utils-validator)\n- [`@tetherto/pearpass-lib-constants`](../pearpass-lib-constants)\n- [`@tetherto/pearpass-lib-data-export`](../pearpass-lib-data-export)\n- [`@tetherto/pearpass-lib-data-import`](../pearpass-lib-data-import)\n- [`@tetherto/pearpass-lib-ui-theme-provider`](../pearpass-lib-ui-theme-provider)\n- [`@tetherto/pearpass-lib-vault`](../pearpass-lib-vault)\n- [`@tetherto/pearpass-lib-vault-core`](../pearpass-lib-vault-core)\n- [`@tetherto/pearpass-utils-password-check`](../pearpass-utils-password-check)\n- [`@tetherto/pearpass-utils-password-generator`](../pearpass-utils-password-generator)\n\n---\n\n## Dependencies\n\n- [Pear Runtime](https://pears.com/)\n- [React](https://reactjs.org/)\n- [Styled Components](https://styled-components.com/)\n- [Lingui](https://lingui.dev/)\n- [Redux](https://redux.js.org/)\n\n---\n\n## Related Projects\n\n| Project                                                                                                          | Description                                |\n| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |\n| [`pearpass-app-mobile`](https://github.com/tetherto/pearpass-app-mobile)                                         | Mobile app for PearPass                    |\n| [`pearpass-app-browser-extension`](https://github.com/tetherto/pearpass-app-browser-extension)                   | Browser extension for PearPass             |\n| [`pearpass-lib-vault`](https://github.com/tetherto/pearpass-lib-vault)                                           | Vault management library                   |\n| [`pearpass-lib-vault-core`](https://github.com/tetherto/pearpass-lib-vault-core)                                 | Bare worker and client for PearPass vaults |\n| [`pearpass-lib-ui-react-components`](https://github.com/tetherto/pearpass-lib-ui-react-components)               | React UI component library                 |\n| [`pearpass-lib-ui-react-native-components`](https://github.com/tetherto/pearpass-lib-ui-react-native-components) | React Native UI component library          |\n| [`tether-dev-docs`](https://github.com/tetherto/tether-dev-docs)                                                 | Developer documentation and guides         |\n\n---\n\n## Contributing\n\nWe welcome contributions. See [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the development workflow and coding conventions.\n\n---\n\n## License\n\nThis project is licensed under the Apache License, Version 2.0. See the [LICENSE](./LICENSE) file for details.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Report a security issue\n\nTo report a security issue, please email [security-oss@tether.io](mailto:security-oss@tether.io).\n\nWe will respond within 5 working days of your report. Coordination and disclosure\nwill be handled here on GitHub (including using GitHub Security Advisory)."
  },
  {
    "path": "app.electron.tsx",
    "content": "/**\n * Electron-only entry for the renderer bundle (nodeIntegration: true).\n */\nimport { i18n } from '@lingui/core'\nimport { compileMessage } from '@lingui/message-utils/compileMessage'\nimport { I18nProvider } from '@lingui/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport {\n  setPearpassVaultClient,\n  VaultProvider\n} from '@tetherto/pearpass-lib-vault'\nimport { createRoot } from 'react-dom/client'\nimport { ThemeProvider as UIKitProvider } from '@tetherto/pearpass-lib-ui-kit'\n\nimport './src/strict.css'\nimport { App } from './src/app/App'\nimport { LoadingProvider } from './src/context/LoadingContext'\nimport { ModalProvider } from './src/context/ModalContext'\nimport { RouterProvider } from './src/context/RouterContext'\nimport { AppHeaderContextProvider } from './src/context/AppHeaderContext'\nimport { ToastProvider } from './src/context/ToastContext'\nimport { messages } from './src/locales/en/messages.mjs'\nimport { getElectronConfig, getElectronVaultClient } from './src/electron'\nimport { createOrGetPearpassClient } from './src/services/createOrGetPearpassClient'\nimport { getNativeMessagingEnabled } from './src/services/nativeMessagingPreferences'\nimport { startNativeMessagingIPC } from './src/services/nativeMessagingIPCServer'\nimport { logger } from './src/utils/logger'\nimport { setFontsAndResetCSS } from './styles'\nimport { AutoLockProvider } from './src/hooks/useAutoLockPreferences'\nimport { DEBUG_MODE } from './src/constants/appConstants'\n\nsetFontsAndResetCSS()\ni18n.setMessagesCompiler(compileMessage)\ni18n.load('en', messages)\ni18n.activate('en')\n\nfunction renderApp() {\n  const container = document.querySelector('#root')\n  if (!container) throw new Error('Failed to find the root element')\n  const root = createRoot(container)\n  root.render(\n    <UIKitProvider>\n      <LoadingProvider>\n        <ThemeProvider>\n          <VaultProvider>\n            <I18nProvider i18n={i18n}>\n              <ToastProvider>\n                <RouterProvider>\n                  <AppHeaderContextProvider>\n                    <AutoLockProvider>\n                      <ModalProvider>\n                        <App />\n                      </ModalProvider>\n                    </AutoLockProvider>\n                  </AppHeaderContextProvider>\n                </RouterProvider>\n              </ToastProvider>\n            </I18nProvider>\n          </VaultProvider>\n        </ThemeProvider>\n      </LoadingProvider>\n    </UIKitProvider>\n  )\n}\n\nasync function init() {\n  const config = await getElectronConfig()\n  const client = await getElectronVaultClient()\n  if (!config || !client)\n    throw new Error('Electron config or vault client missing')\n\n  const api = window.electronAPI!\n  ;(window as unknown as { Pear: object }).Pear = {\n    config: {\n      storage: config.storage,\n      key: config.key,\n      applink: config.applink || ''\n    },\n    updated: () => api.checkUpdated(),\n    updates: (cb: (update?: unknown) => void) => {\n      const unsub1 = api.onRuntimeUpdating(() => cb({}))\n      const unsub2 = api.onRuntimeUpdated(() => cb({}))\n      return () => {\n        unsub1()\n        unsub2()\n      }\n    },\n    reload: () => window.location.reload(),\n    restart: () => api.restart(),\n    teardown: () => {}\n  }\n\n  // Seed shared PearPass client singleton so code that calls\n  // createOrGetPearpassClient() without arguments (e.g. extension pairing)\n  // can reuse this Electron vault client instance and storage path.\n  createOrGetPearpassClient(client as any, config.storage, {\n    debugMode: DEBUG_MODE\n  })\n\n  setPearpassVaultClient(client)\n  if (getNativeMessagingEnabled()) {\n    startNativeMessagingIPC(client as any).catch((err: unknown) => {\n      logger.error('INDEX', 'Failed to start IPC server:', err)\n    })\n  }\n\n  renderApp()\n}\n\ninit()\n"
  },
  {
    "path": "appling/README.md",
    "content": "# PearPass Appling\n\nPear Appling installer for PearPass Desktop application.\n\n## Overview\n\nThis is a self-contained installer (Appling) that bootstraps the Pear platform and installs PearPass Desktop. The installer:\n\n1. Checks if the Pear platform is already installed\n2. If not, downloads and installs the Pear platform via P2P bootstrap\n3. Pre-loads the PearPass application\n4. Launches PearPass once installation is complete\n\n### Architecture\n\n```\napp.cjs                 # Entry point - calls install with app ID\nlib/\n├── install.cjs         # Main orchestration - UI and worker coordination\n├── preflight.cjs       # Pre-installation checks and platform resolution\n├── worker.cjs          # Background worker for heavy I/O operations\n├── progress.cjs        # Multi-stage progress tracking\n├── utils.cjs           # JSON encoding/decoding and formatting utilities\n├── view.html.cjs       # HTML/CSS/JS for installer UI\n└── icons/              # Platform-specific application icons\n```\n\n## Prerequisites\n\n- Node.js 22.0.0 or later (required for `using` keyword support)\n- `bare-build` (installed globally)\n\n## Development Setup\n\n```sh\n# Install bare-build globally\nnpm install --global bare-build\n\n# Install dependencies\nnpm install\n```\n\n## Building\n\n### macOS (Apple Silicon)\n\n```sh\nbare-build --host=darwin-arm64 --icon lib/icons/darwin/icon.png app.cjs\n```\n\n### macOS (Intel)\n\n```sh\nbare-build --host=darwin-x64 --icon lib/icons/darwin/icon.png app.cjs\n```\n\n### Linux\n\n```sh\nbare-build --host=linux-x64 --icon lib/icons/linux/icon.png --package app.cjs\n```\n\n### Signed macOS Build\n\nSee the CI workflow (`.github/workflows/build-appling.yaml`) for full signing, notarization, and DMG creation instructions.\n\n## Security Considerations\n\nThe macOS build requires specific entitlements (`entitlements.plist`) to function with Hardened Runtime. These entitlements are documented in the plist file itself. Key points:\n\n- **Library validation is disabled** - Required for native Node.js addons\n- **DYLD environment variables are allowed** - Required for Bare runtime\n\nSee `entitlements.plist` for detailed security documentation.\n\n## License\n\nApache-2.0\n"
  },
  {
    "path": "appling/app.cjs",
    "content": "const { install } = require('./lib/install')\n\n// When we have pear://pearpass, use this\n// install(\"pearpass\");\n\ninstall('tywsat7gz8m65ejx4zjn3773pbdc4j8m66tukis8dgzekraymtzo')\n"
  },
  {
    "path": "appling/app.dev.cjs",
    "content": "const { install } = require('./lib/install')\n\n// NOTE: Change the key when dev key changes\n\ninstall('8ue4k8ooakpmwukzutkno5ca9wy3yono6mp4q69bph8tt11pfthy')\n"
  },
  {
    "path": "appling/app.staging.cjs",
    "content": "const { install } = require('./lib/install')\n\n// NOTE: Change the key when staging key changes\n\ninstall('8k5z91c8u7nycsjow5m9ppmw75jznm66oe13mwt94cbohuyksdeo')\n"
  },
  {
    "path": "appling/entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<!--\n  PearPass Appling - macOS Code Signing Entitlements\n\n  SECURITY NOTICE:\n  These entitlements are required for the Bare runtime and native Node.js addons to function\n  correctly with macOS Hardened Runtime. They weaken the default security model and should\n  be understood before deployment.\n\n  Required Dependencies:\n  - sodium-native: Cryptographic operations require loading native libraries\n  - rocksdb-native: Database operations require loading native libraries\n  - udx-native, simdle-native, quickbit-native: P2P networking components\n\n  com.apple.security.cs.disable-library-validation:\n    Allows the app to load dynamic libraries that are not signed by the same team ID.\n    Required because native Node.js addons are compiled during npm install and are not\n    code-signed with the application's signing identity.\n\n  com.apple.security.cs.allow-dyld-environment-variables:\n    Allows DYLD_* environment variables to affect the process.\n    Required for the Bare runtime to properly load and resolve native modules.\n\n  RISK ASSESSMENT:\n  - These entitlements could allow library injection attacks if an attacker gains write\n    access to the application bundle or user's library paths.\n  - Mitigated by: macOS notarization, Gatekeeper, and the app's limited file system access.\n  - The Pear platform's P2P code is loaded through its own verified channels, not through\n    these library loading mechanisms.\n\n  ALTERNATIVES CONSIDERED:\n  - Bundling pre-signed native modules: Would break cross-platform build consistency\n  - Removing native dependencies: Would remove core functionality (encryption, database, P2P)\n-->\n<plist version=\"1.0\">\n<dict>\n    <!-- Required for native Node.js addons (sodium-native, rocksdb-native, etc.) -->\n    <key>com.apple.security.cs.disable-library-validation</key>\n    <true/>\n    <!-- Required for Bare runtime module resolution -->\n    <key>com.apple.security.cs.allow-dyld-environment-variables</key>\n    <true/>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n    <true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "appling/lib/install.cjs",
    "content": "const Thread = require(\"bare-thread\");\nconst { App, Screen, Window, WebView } = require(\"fx-native\");\nconst appling = require(\"appling-native\");\nconst { encode, decode } = require(\"./utils\");\nconst { preflight } = require(\"./preflight\");\nconst html = require(\"./view.html\");\n\nconst WINDOW_HEIGHT = 548;\nconst WINDOW_WIDTH = 500;\n\nasync function install(id, opts = {}) {\n  const { platform = \"pzcjqmpoo6szkoc4bpkw65ib9ctnrq7b6mneeinbhbheihaq6p6o\" } =\n    opts;\n\n  // Preflight check - determines if installation is needed\n  const preflightResult = await preflight(id);\n\n  // If app was already installed and launched, exit immediately\n  if (preflightResult.launched) {\n    Bare.exit();\n    return;\n  }\n\n  // Use the lock with explicit resource management\n  using lock = preflightResult.lock;\n\n  const config = {\n    dir: lock.dir,\n    platform,\n    link: `pear://${id}`,\n  };\n\n  const app = App.shared();\n\n  let window;\n  let view;\n\n  function onViewMessage(message) {\n    const msg = message.toString();\n    switch (msg) {\n      case \"quit\":\n        window.close();\n        break;\n      case \"install\":\n        app.broadcast(encode({ type: \"install\" }));\n        break;\n      case \"launch\": {\n        lock.unlock();\n        const appInstance = new appling.App(id);\n        appInstance.open();\n        window.close();\n        Bare.exit();\n        break;\n      }\n    }\n  }\n\n  function onWorkerMessage(message) {\n    const msg = decode(message);\n    if (!msg) return;\n\n    switch (msg.type) {\n      case \"ready\":\n        app.broadcast(encode({ type: \"config\", data: config }));\n        break;\n      case \"download\":\n        view.postMessage({ type: \"progress\", data: msg.data });\n        break;\n      case \"complete\":\n        view.postMessage({ type: \"state\", state: \"complete\" });\n        break;\n      case \"error\":\n        console.error(\"[install] Worker error:\", msg.error);\n        view.postMessage({ type: \"state\", state: \"error\" });\n        break;\n    }\n  }\n\n  // Track worker thread for cleanup\n  let workerThread;\n\n  app\n    .on(\"launch\", () => {\n      workerThread = new Thread(require.resolve(\"./worker\"));\n\n      const { width, height } = Screen.main().getBounds();\n\n      window = new Window(\n        (width - WINDOW_WIDTH) / 2,\n        (height - WINDOW_HEIGHT) / 2,\n        WINDOW_WIDTH,\n        WINDOW_HEIGHT,\n        { frame: false },\n      );\n\n      view = new WebView(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);\n      view.on(\"message\", onViewMessage).loadHTML(html);\n\n      window.appendChild(view);\n      window.show();\n    })\n    .on(\"terminate\", () => {\n      // Terminate worker thread if it exists\n      if (workerThread) {\n        try {\n          workerThread.terminate();\n        } catch (err) {\n          // Ignore termination errors\n        }\n      }\n      if (window) {\n        window.destroy();\n      }\n    })\n    .on(\"message\", onWorkerMessage)\n    .run();\n}\n\nmodule.exports = { install };\n"
  },
  {
    "path": "appling/lib/preflight.cjs",
    "content": "const appling = require('appling-native')\n\n/**\n * Performs pre-installation checks to determine if the app is already installed.\n *\n * @param {string} id - The Pear application ID (z32 encoded public key)\n * @returns {Promise<{lock: object, needsInstall: boolean, launched: boolean}>}\n *   - lock: The installation lock (null if app was launched)\n *   - needsInstall: true if installation is required\n *   - launched: true if the app was already installed and has been launched\n */\nasync function preflight(id) {\n  // Acquire lock without specifying dir - appling-native uses default location\n  const lock = await appling.lock()\n\n  let platform\n  try {\n    platform = await appling.resolve() //lock.dir if infinite loop\n  } catch {\n    // Platform not found - installation required\n    return { lock, needsInstall: true, launched: false }\n  }\n\n  const ready = platform.ready(`pear://${id}`)\n\n  if (ready === false) {\n    return { lock, needsInstall: true, launched: false }\n  }\n\n  // App is already installed and ready - launch it directly\n  await lock.unlock()\n  platform.launch(id)\n\n  // Return sentinel value indicating app was launched\n  // Caller should exit the process after receiving this\n  return { lock: null, needsInstall: false, launched: true }\n}\n\nmodule.exports = { preflight }\n"
  },
  {
    "path": "appling/lib/progress.cjs",
    "content": "const prettyBytes = require('prettier-bytes')\n\nconst { encode } = require('./utils')\n\n/**\n * Multi-stage progress tracker with weighted percentages.\n * Broadcasts progress updates via the app's IPC mechanism.\n */\n// NOTE: Assumes updates come from a trusted worker.\n// Do not expose Progress.update() to untrusted input.\nclass Progress {\n  /**\n   * Creates a new Progress tracker.\n   * @param {object} app - The fx-native App instance for broadcasting\n   * @param {number[]} stages - Array of stage weights (should sum to 1.0)\n   * @example new Progress(app, [0.3, 0.7]) // 30% for stage 0, 70% for stage 1\n   */\n  constructor(app, stages = [1]) {\n    this.app = app\n    this.stages = stages\n    this.values = Array(stages.length).fill(0)\n    this.speed = ''\n    this.peers = 0\n    this.total = 0\n    this.currentStage = 0\n    this.stageBytes = Array(stages.length).fill(0)\n\n    // Validate that stage weights sum to approximately 1.0\n    const sum = stages.reduce((a, b) => a + b, 0)\n    if (Math.abs(sum - 1) > 0.001) {\n      console.warn(\n        `[Progress] Stage weights sum to ${sum.toFixed(3)}, expected 1.0. ` +\n          `Progress percentage may not reach 100%.`\n      )\n    }\n  }\n\n  _broadcast() {\n    const bytes = this.stageBytes.reduce((sum, b) => sum + b, 0)\n    this.app.broadcast(\n      encode({\n        type: 'download',\n        data: {\n          speed: this.speed,\n          peers: this.peers,\n          progress: this.total,\n          stage: this.currentStage,\n          bytes: prettyBytes(bytes)\n        }\n      })\n    )\n  }\n\n  _compute() {\n    const v = this.stages.reduce((sum, per, i) => sum + per * this.values[i], 0)\n    this.total = Math.round(v * 100)\n  }\n\n  update(u, stage = 0) {\n    if (u.speed !== undefined) this.speed = u.speed\n    if (u.peers !== undefined) this.peers = u.peers\n    if (u.bytes !== undefined) this.stageBytes[stage] = u.bytes\n    if (u.progress !== undefined) this.stage(stage, u.progress)\n  }\n\n  stage(stage, value) {\n    if (stage < 0 || stage >= this.values.length) return\n    this.currentStage = stage\n    this.values[stage] = Math.min(1, Math.max(0, value))\n    this._compute()\n    this._broadcast()\n  }\n\n  complete() {\n    this.values = this.values.map(() => 1)\n    this._compute()\n    this._broadcast()\n  }\n}\n\nmodule.exports = { Progress }\n"
  },
  {
    "path": "appling/lib/utils.cjs",
    "content": "const prettyBytes = require('prettier-bytes')\n\n/**\n * Encodes an object to JSON string for IPC messaging.\n * @param {object} msg - The message object to encode\n * @returns {string} JSON string representation\n */\nfunction encode(msg) {\n  return JSON.stringify(msg)\n}\n\n/**\n * Decodes a JSON string from IPC messaging.\n * @param {string|Buffer} msg - The message to decode\n * @returns {object|null} Parsed object, or null if parsing fails\n */\nfunction decode(msg) {\n  try {\n    return JSON.parse(msg.toString())\n  } catch (err) {\n    console.error('[decode] Failed to parse JSON:', err.message)\n    return null\n  }\n}\n\n/**\n * Formats download progress data for display.\n * Handles two different progress object formats from the Pear ecosystem.\n * @param {object} u - Progress update object\n * @returns {object} Formatted progress data with speed, progress, peers, bytes\n */\nfunction format(u) {\n  // Guard against null/undefined input\n  if (!u) {\n    return {\n      speed: undefined,\n      progress: undefined,\n      peers: undefined,\n      bytes: undefined\n    }\n  }\n\n  // Format for Hyperswarm updater (has drive.core property)\n  if (u.drive?.core) {\n    return {\n      speed: prettyBytes(u.downloadSpeed()) + '/s',\n      progress: u.downloadProgress,\n      peers: u.drive.core.peers.length,\n      bytes: u.downloadedBytes\n    }\n  }\n\n  // Format for Bootstrap updater (has direct properties)\n  return {\n    speed:\n      u.downloadSpeed === 0 ? undefined : prettyBytes(u.downloadSpeed) + '/s',\n    progress: u.downloadProgress === 0 ? undefined : u.downloadProgress,\n    peers: u.peers === 0 ? undefined : u.peers,\n    bytes: u.downloadedBytes\n  }\n}\n\nmodule.exports = { encode, decode, format }\n"
  },
  {
    "path": "appling/lib/view.html.cjs",
    "content": "const AUTO_LAUNCH = true\nconst SLOW_TIMEOUT = 180000 // 3 minutes\n\n// Simple inline SVG for splash - can be replaced with actual PearPass logo\nconst splashSvg = require('./images/logo.svg', { with: { type: 'text' } })\n\n// Pear logo SVG\nconst pearSvg = require('./images/pear.svg', { with: { type: 'text' } })\n\nconst html = String.raw\n\nmodule.exports = html`\n  <style>\n    :root {\n      --color-white: #ffffff;\n      --color-green-400: #33f59a;\n      --color-grey-100: #ced3dc;\n      --color-grey-500: #30333f;\n      --color-grey-800: #151823;\n      --color-grey-950: #00020a;\n      --color-blue-400: #26d2e8;\n      --color-blue-500: #0cb6ce;\n      --color-blue-600: #0d91ad;\n      --color-blue-950: #0a3342;\n      --color-red-300: #ff6c72;\n      --color-red-400: #ff1831;\n      --color-gradient-background: linear-gradient(\n        180deg,\n        #687c26 0%,\n        #1e2211 100%\n      );\n    }\n\n    html {\n      font-size: 16px;\n      overflow: hidden;\n      -webkit-font-smoothing: antialiased;\n      -moz-osx-font-smoothing: grayscale;\n      background-color: #121212;\n    }\n\n    body {\n      margin: 0;\n      background: #121212;\n      color: var(--color-white);\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\n        Oxygen, Ubuntu, Cantarell, sans-serif;\n      position: relative;\n      overflow: hidden;\n    }\n\n    /* Blurred ellipse background effect */\n    body::before {\n      content: '';\n      position: absolute;\n      top: -34vh;\n      left: 3.2%;\n      width: 93.6vw;\n      height: 52.6vh;\n      background: #b0d944;\n      border-radius: 50%;\n      filter: blur(150px);\n      opacity: 0.3;\n      z-index: 0;\n      pointer-events: none;\n    }\n\n    img {\n      flex: 1;\n      padding: 0 100px;\n    }\n\n    h1 {\n      font-weight: 600;\n      font-size: 1.25rem;\n      margin: 0;\n    }\n\n    p {\n      margin: 0;\n      font-weight: 400;\n      font-size: 0.875rem;\n    }\n\n    span {\n      font-weight: 400;\n      font-size: 0.75rem;\n      color: var(--color-grey-100);\n    }\n\n    main {\n      display: flex;\n      gap: 0.5rem;\n      align-items: center;\n      flex-direction: column;\n      justify-content: center;\n      padding: 0 3.8rem;\n      height: 100vh;\n      position: relative;\n      z-index: 1;\n    }\n\n    header {\n      display: flex;\n      align-items: center;\n      flex-direction: column;\n      text-align: center;\n      margin-bottom: 5.377rem;\n    }\n\n    header svg {\n      width: 215px;\n      height: 45.2px;\n    }\n\n    article {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      text-align: center;\n      gap: 0.5rem;\n      width: 100%;\n    }\n\n    footer {\n      gap: 0.5rem;\n      text-align: center;\n      display: flex;\n      align-items: center;\n      flex-direction: column;\n    }\n\n    footer svg {\n      width: 35px;\n      height: 47.175px;\n      aspect-ratio: 35 / 47.17;\n    }\n\n    button {\n      background-color: #9fc131;\n      color: var(--color-grey-950);\n      font-size: 0.938rem;\n      font-weight: 600;\n      height: 2.75rem;\n      padding: 0 2.5rem;\n      border-radius: 3.125rem;\n      border: none;\n      letter-spacing: -0.02em;\n      margin-top: 1.125rem;\n      margin-bottom: 3.125rem;\n      transition: background-color 0.2s ease;\n      white-space: nowrap;\n      cursor: pointer;\n    }\n\n    button:hover {\n      background-color: #b1cb58;\n    }\n\n    button:active {\n      background-color: #b1cb58;\n    }\n\n    /* Accessibility: provide visible focus indicator for keyboard navigation */\n    button:focus {\n      outline: 2px solid var(--color-blue-400);\n      outline-offset: 2px;\n    }\n\n    button:focus:not(:focus-visible) {\n      outline: none;\n    }\n\n    button:focus-visible {\n      outline: 2px solid var(--color-blue-400);\n      outline-offset: 2px;\n    }\n\n    button.secondary {\n      color: var(--color-blue-400);\n      border: 1px solid var(--color-blue-400);\n      background-color: transparent;\n    }\n\n    button.secondary:hover {\n      color: var(--color-blue-400);\n      border-color: var(--color-blue-500);\n      background-color: transparent;\n    }\n\n    .hidden {\n      display: none !important;\n    }\n\n    .button-group {\n      display: flex;\n      gap: 1rem;\n      margin-top: 1.125rem;\n      margin-bottom: 0;\n      width: 100%;\n    }\n\n    .button-group button {\n      flex: 1;\n      min-width: 0;\n      margin: 0;\n      padding: 0 1rem;\n    }\n\n    .message {\n      font-size: 0.8rem;\n      width: 100%;\n      text-align: left;\n    }\n\n    .message.error {\n      color: var(--color-red-400);\n    }\n\n    .status-line {\n      display: flex;\n      justify-content: space-between;\n      align-items: start;\n      width: 100%;\n      gap: 0.3rem;\n      min-height: 1.5rem;\n    }\n\n    .status-line .message {\n      margin: 0;\n      flex: 1;\n      text-align: left;\n    }\n\n    .stats {\n      font-variant-numeric: tabular-nums;\n      font-size: 0.8rem;\n      display: flex;\n      justify-content: flex-end;\n      gap: 0.3rem;\n      white-space: nowrap;\n      margin: 0;\n      margin-left: auto;\n    }\n\n    .status {\n      width: 100%;\n      height: 130px;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      align-items: center;\n      gap: 0.5rem;\n    }\n\n    @keyframes indeterminate {\n      0% {\n        transform: translateX(-100%);\n      }\n      100% {\n        transform: translateX(400%);\n      }\n    }\n\n    .progress {\n      width: 100%;\n      height: 6px;\n      background-color: var(--color-grey-500);\n      border-radius: 4px;\n      overflow: hidden;\n    }\n\n    .progress > div {\n      height: 100%;\n      width: 0%;\n      border-radius: 4px;\n      background-color: var(--color-blue-400);\n      animation: none;\n    }\n\n    .progress.indeterminate > div {\n      width: 25%;\n      animation: indeterminate 1.5s ease-in-out infinite;\n    }\n\n    .progress.red > div {\n      background-color: var(--color-red-400);\n    }\n\n    .progress.green > div {\n      background-color: var(--color-green-400);\n    }\n\n    .progress.complete > div {\n      width: 100%;\n      animation: none;\n      background-color: var(--color-green-400);\n    }\n\n    .progress.determinate > div {\n      animation: none;\n      width: 0%;\n    }\n\n    .progress.determinate.transitioning > div {\n      transition: width 0.3s ease;\n    }\n  </style>\n\n  <main>\n    <header>${splashSvg}</header>\n    <article>\n      <h1 id=\"title\">Welcome to PearPass</h1>\n      <p id=\"message\">\n        Ready to start the installation. This will only take a moment.\n      </p>\n\n      <button id=\"installBtn\">Install PearPass</button>\n\n      <div id=\"status\" class=\"status hidden\">\n        <div\n          id=\"progress\"\n          class=\"progress\"\n          role=\"progressbar\"\n          aria-valuenow=\"0\"\n          aria-valuemin=\"0\"\n          aria-valuemax=\"100\"\n          aria-label=\"Installation progress\"\n        >\n          <div></div>\n        </div>\n        <div id=\"statusLine\" class=\"status-line\">\n          <p id=\"warning\" class=\"message\" role=\"status\" aria-live=\"polite\"></p>\n          <p id=\"stats\" class=\"stats\" aria-label=\"Download statistics\"></p>\n        </div>\n        <div id=\"buttonGroup\" class=\"button-group hidden\">\n          <button id=\"quitBtn\" class=\"secondary\" aria-label=\"Quit installation\">\n            Quit\n          </button>\n          <button id=\"retryBtn\" aria-label=\"Retry installation\">\n            Retry installation\n          </button>\n        </div>\n        <button\n          id=\"launchBtn\"\n          class=\"hidden\"\n          style=\"margin-top: 1.125rem; margin-bottom: 0;\"\n        >\n          Launch PearPass\n        </button>\n      </div>\n    </article>\n    <footer>\n      ${pearSvg}\n      <span>Powered by Pear</span>\n    </footer>\n  </main>\n  <script>\n    const SLOW_TIMEOUT = ${SLOW_TIMEOUT}\n    const AUTO_LAUNCH = ${AUTO_LAUNCH}\n\n    const elements = {\n      title: document.getElementById('title'),\n      message: document.getElementById('message'),\n      status: document.getElementById('status'),\n      progress: document.getElementById('progress'),\n      stats: document.getElementById('stats'),\n      warning: document.getElementById('warning'),\n      buttonGroup: document.getElementById('buttonGroup'),\n      installBtn: document.getElementById('installBtn'),\n      quitBtn: document.getElementById('quitBtn'),\n      retryBtn: document.getElementById('retryBtn'),\n      launchBtn: document.getElementById('launchBtn')\n    }\n\n    let timer = null\n\n    function startTimer() {\n      timer = setTimeout(() => setState('slow'), SLOW_TIMEOUT)\n    }\n\n    function onMessage(element, fn) {\n      element.addEventListener('message', fn)\n    }\n\n    function onClick(element, fn) {\n      element.addEventListener('click', fn)\n    }\n\n    function resetElements(e) {\n      e.installBtn.classList.add('hidden')\n      e.status.classList.remove('hidden')\n      e.progress.classList.remove('red', 'green', 'complete')\n      e.warning.textContent = ''\n      e.warning.classList.add('hidden')\n      e.warning.classList.remove('error')\n      e.buttonGroup.classList.add('hidden')\n      e.launchBtn.classList.add('hidden')\n    }\n\n    function setProgress({ speed, peers, progress, stage, bytes }) {\n      // Update stats\n      if (bytes || speed || peers !== undefined) {\n        const parts = [\n          bytes && '<span class=\"bytes\">' + bytes + '</span>',\n          speed && '<span class=\"speed\">' + speed + '</span>',\n          peers !== undefined &&\n            '<span class=\"peers\">' +\n              peers +\n              ' ' +\n              (peers === 1 ? 'peer' : 'peers') +\n              '</span>'\n        ].filter(Boolean)\n        elements.stats.innerHTML = parts.join('<span>•</span>')\n      }\n\n      // Update progress\n      if (progress !== undefined) {\n        elements.progress.classList.remove('indeterminate')\n        elements.progress.classList.add('determinate')\n        const progressBar = elements.progress.querySelector('div')\n\n        // Update ARIA attributes for accessibility\n        elements.progress.setAttribute('aria-valuenow', Math.round(progress))\n\n        // Enable transitions after first frame\n        if (progress > 0) {\n          elements.progress.classList.add('transitioning')\n        }\n\n        if (progress === 0) {\n          elements.warning.textContent = 'Starting platform installation'\n          elements.warning.classList.remove('hidden', 'error')\n        }\n\n        progressBar.style.width = progress + '%'\n      }\n\n      if (progress !== 0) {\n        if (stage === 0) {\n          elements.warning.textContent = 'Installing platform...'\n          elements.warning.classList.remove('hidden', 'error')\n        } else if (stage === 1) {\n          elements.warning.textContent = 'Platform ready, installing app...'\n          elements.warning.classList.remove('hidden', 'error')\n        }\n      }\n    }\n\n    function setState(state) {\n      const {\n        title,\n        message,\n        installBtn,\n        progress,\n        warning,\n        buttonGroup,\n        launchBtn\n      } = elements\n\n      resetElements(elements)\n      clearTimeout(timer)\n      timer = null\n\n      switch (state) {\n        case 'installing':\n          title.textContent = 'Welcome to PearPass'\n          message.textContent = 'It will launch once it is done.'\n          break\n        case 'slow':\n          title.textContent = 'Welcome to PearPass'\n          message.textContent = 'It will launch once it is done.'\n          warning.textContent =\n            \"It's taking a bit of time, please check your connection.\"\n          warning.classList.remove('hidden')\n          break\n        case 'error':\n          title.textContent = 'Welcome to PearPass'\n          message.textContent = 'It will launch once it is done.'\n          progress.classList.add('red')\n          warning.textContent = \"Installation didn't complete.\"\n          warning.classList.remove('hidden')\n          warning.classList.add('error')\n          buttonGroup.classList.remove('hidden')\n          break\n        case 'complete':\n          title.textContent = 'Installation complete!'\n          progress.classList.add('complete')\n          if (AUTO_LAUNCH) {\n            message.textContent = 'PearPass will launch shortly'\n            setTimeout(() => bridge.postMessage('launch'), 500)\n          } else {\n            message.textContent = 'PearPass is ready to launch.'\n            launchBtn.classList.remove('hidden')\n          }\n          break\n      }\n    }\n\n    onMessage(bridge, (event) => {\n      const { type, state, data } = event.data || {}\n      switch (type) {\n        case 'state':\n          setState(state)\n          break\n        case 'progress':\n          setProgress(data)\n          break\n      }\n    })\n\n    onClick(elements.installBtn, () => {\n      setState('installing')\n      bridge.postMessage('install')\n      startTimer()\n    })\n\n    onClick(elements.retryBtn, () => {\n      setState('installing')\n      bridge.postMessage('install')\n      startTimer()\n    })\n\n    onClick(elements.quitBtn, () => {\n      bridge.postMessage('quit')\n    })\n\n    onClick(elements.launchBtn, () => {\n      bridge.postMessage('launch')\n    })\n  </script>\n`\n"
  },
  {
    "path": "appling/lib/worker.cjs",
    "content": "const appling = require('appling-native')\nconst { App } = require('fx-native')\nconst bootstrap = require('pear-updater-bootstrap')\n\nconst { Progress } = require('./progress')\nconst { encode, decode, format } = require('./utils')\n\nconst app = App.shared()\n\nlet config\nlet platform\nlet installing = false // Guard against concurrent installation\n\nfunction setup(data) {\n  config = data\n}\n\n/**\n * Validates that config has all required fields.\n * @returns {string|null} Error message if invalid, null if valid\n */\nfunction validateConfig() {\n  if (!config) {\n    return 'Configuration not received - setup() was not called'\n  }\n  if (!config.dir) {\n    return \"Configuration missing required 'dir' field\"\n  }\n  if (!config.platform) {\n    return \"Configuration missing required 'platform' field\"\n  }\n  if (!config.link) {\n    return \"Configuration missing required 'link' field\"\n  }\n  return null\n}\n\nasync function install() {\n  // Prevent concurrent installation attempts\n  if (installing) {\n    return\n  }\n\n  // Validate configuration before proceeding\n  const configError = validateConfig()\n  if (configError) {\n    console.error('[worker] Configuration error:', configError)\n    app.broadcast(encode({ type: 'error', error: configError }))\n    return\n  }\n\n  installing = true\n  const progress = new Progress(app, [0.3, 0.7])\n  let platformFound = false\n  let bootstrapInterval = null\n\n  try {\n    try {\n      platform = await appling.resolve(config.dir)\n      platformFound = true\n    } catch {\n      // Platform not found - bootstrap it\n      await bootstrap(config.platform, config.dir, {\n        lock: false,\n        onupdater: (u) => {\n          bootstrapInterval = setInterval(() => {\n            progress.update(format(u))\n            if (u.downloadProgress === 1) {\n              clearInterval(bootstrapInterval)\n            }\n          }, 250)\n        }\n      })\n      platform = await appling.resolve(config.dir)\n    }\n\n    if (platformFound) {\n      progress.stage(0, 1)\n    }\n\n    progress.update({ progress: 0, speed: '', peers: 0, bytes: 0 }, 1)\n\n    await platform.preflight(config.link, (u) => {\n      progress.update(format(u), 1)\n    })\n\n    progress.complete()\n    app.broadcast(encode({ type: 'complete' }))\n  } catch (e) {\n    console.error('[worker] Installation error:', e.message)\n    app.broadcast(encode({ type: 'error', error: e.message }))\n  } finally {\n    // Always reset installing flag to allow retry\n    installing = false\n    if (bootstrapInterval) {\n      clearInterval(bootstrapInterval)\n    }\n  }\n}\n\napp.on('message', async (message) => {\n  const msg = decode(message)\n\n  // Handle decode failure (malformed JSON)\n  if (!msg) {\n    return\n  }\n\n  switch (msg.type) {\n    case 'config':\n      setup(msg.data)\n      break\n    case 'install':\n      await install()\n      break\n  }\n})\n\napp.broadcast(encode({ type: 'ready' }))\n"
  },
  {
    "path": "appling/package.json",
    "content": "{\n  \"private\": true,\n  \"name\": \"PearPass\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Pear Appling for PearPass\",\n  \"engines\": {\n    \"node\": \">=22.0.0\"\n  },\n  \"exports\": {\n    \"./package\": \"./package.json\"\n  },\n  \"files\": [\n    \"app.cjs\",\n    \"lib\"\n  ],\n  \"scripts\": {\n    \"test\": \"npm run lint\",\n    \"lint\": \"prettier . --check\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/tetherto/pearpass-app-desktop.git\"\n  },\n  \"author\": \"Tether Data S.A. de C.V.\",\n  \"license\": \"Apache-2.0\",\n  \"bugs\": {\n    \"url\": \"https://github.com/tetherto/pearpass-app-desktop/issues\"\n  },\n  \"homepage\": \"https://github.com/tetherto/pearpass-app-desktop#readme\",\n  \"dependencies\": {\n    \"appling-native\": \"^1.4.0\",\n    \"bare-thread\": \"^1.1.3\",\n    \"fx-native\": \"^1.1.3\",\n    \"pear-updater-bootstrap\": \"^2.3.0\",\n    \"prettier-bytes\": \"^1.0.4\"\n  },\n  \"devDependencies\": {\n    \"prettier\": \"^3.6.2\",\n    \"prettier-config-holepunch\": \"^2.0.0\"\n  }\n}\n"
  },
  {
    "path": "babel.config.cjs",
    "content": "module.exports = {\n  presets: [\n    [\n      '@babel/preset-env',\n      {\n        targets: { node: 'current' },\n        modules: 'commonjs'\n      }\n    ],\n    '@babel/preset-react',\n    '@babel/preset-typescript'\n  ],\n  env: {\n    test: {\n      // Compile `css.create(...)` / `html.*` calls from react-strict-dom and\n      // @tetherto/pearpass-lib-ui-kit the same way the production bundler does\n      // (see `scripts/bundle-renderer.mjs`). Without this, evaluating those\n      // modules in Jest throws \"Styles must be compiled by '@stylexjs/babel-plugin'\".\n      presets: [\n        [\n          'react-strict-dom/babel-preset',\n          {\n            debug: false,\n            dev: false,\n            rootDir: process.cwd(),\n            platform: 'web'\n          }\n        ]\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "babel.strict-dom.cjs",
    "content": "const dev = process.env.NODE_ENV !== 'production'\n\nmodule.exports = {\n  babelrc: false,\n  configFile: false,\n  parserOpts: {\n    plugins: ['typescript', 'jsx']\n  },\n  presets: [\n    [\n      'react-strict-dom/babel-preset',\n      {\n        debug: dev,\n        dev,\n        rootDir: process.cwd(),\n        platform: 'web'\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": "build-assets/win/AppxManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\n  xmlns:uap3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/3\"\n  xmlns:desktop=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10\"\n  xmlns:desktop6=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10/6\"\n  IgnorableNamespaces=\"rescap desktop6\"\n>\n  <Identity \n  Name=\"PearPass\" \n  Version=\"1.6.0.0\" \n  Publisher=\"CN=&quot;Tether Operations, SA de CV&quot;, O=&quot;Tether Operations, SA de CV&quot;, L=San Salvador, C=SV, SERIALNUMBER=2025120324, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.3=SV\" \n  ProcessorArchitecture=\"x64\" \n  />\n  <Properties>\n    <DisplayName>PearPass</DisplayName>\n    <PublisherDisplayName>PearPass</PublisherDisplayName>\n    <Description>PearPass password manager</Description>\n    <!-- Icon lives under the MSIX assets/ folder -->\n    <Logo>assets\\PearPass.png</Logo>\n    <desktop6:FileSystemWriteVirtualization>disabled</desktop6:FileSystemWriteVirtualization>\n    <desktop6:RegistryWriteVirtualization>disabled</desktop6:RegistryWriteVirtualization>\n  </Properties>\n  <Resources>\n    <Resource Language=\"en-US\" />\n  </Resources>\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Desktop\" MinVersion=\"10.0.19045.0\" MaxVersionTested=\"10.0.19045.0\" />\n  </Dependencies>\n  <Capabilities>\n    <rescap:Capability Name=\"runFullTrust\" />\n    <!-- Required when disabling virtualization flags on desktop -->\n    <rescap:Capability Name=\"unvirtualizedResources\" />\n  </Capabilities>\n  <Applications>\n    <Application Id=\"App\" Executable=\"app\\PearPass.exe\" EntryPoint=\"Windows.FullTrustApplication\">\n      <uap:VisualElements\n        DisplayName=\"PearPass\"\n        Description=\"PearPass password manager\"\n        Square150x150Logo=\"assets\\PearPass.png\"\n        Square44x44Logo=\"assets\\PearPass.png\"\n        BackgroundColor=\"transparent\" />\n      <Extensions>\n        <uap3:Extension Category=\"windows.appExecutionAlias\" Executable=\"app\\PearPass.exe\" EntryPoint=\"Windows.FullTrustApplication\">\n          <uap3:AppExecutionAlias>\n            <desktop:ExecutionAlias Alias=\"PearPass.exe\" />\n          </uap3:AppExecutionAlias>\n        </uap3:Extension>\n      </Extensions>\n    </Application>\n  </Applications>\n</Package>\n\n"
  },
  {
    "path": "docs/Electron-Packaging-And-Runtime.md",
    "content": "# Electron packaging and runtime\n\nThis document describes how the PearPass desktop app is built, packaged, and how the main process, worklet (vault), and renderer communicate.\n\n---\n\n## 1. Architecture overview\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│  Renderer (React)                                               │\n│  - Uses window.electronAPI (from preload) for vault & runtime   │\n└────────────────────────────┬────────────────────────────────────┘\n                             │ IPC (vault:invoke, runtime:*, get-app-path)\n                             ▼\n┌─────────────────────────────────────────────────────────────────┐\n│  Main process (electron/main.cjs)                               │\n│  - Creates window, preload, BrowserWindow                       │\n│  - Starts worklet via pear-runtime or bare-sidecar              │\n│  - Registers IPC handlers; forwards vault calls to vaultClient  │\n└────────────────────────────┬────────────────────────────────────┘\n                             │ stdio / IPC pipe\n                             ▼\n┌─────────────────────────────────────────────────────────────────┐\n│  Worklet (Bare sidecar)                                         │\n│  - Runs vault logic (pearpass-lib-vault-core worklet)           │\n│  - Dev: app.js (ESM). Packaged: app.cjs (CJS bundle)            │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n- **Renderer** never talks to the worklet directly. It calls `window.electronAPI.vaultInvoke(method, args)` (and runtime helpers). The **main process** receives those and forwards them to **PearpassVaultClient**, which speaks to the worklet over a pipe.\n- The **worklet** runs in a separate process (Bare runtime). It uses `bare-*` modules and native addons; the main process only spawns it and connects IPC.\n\n---\n\n## 2. Main process (electron/main.cjs)\n\n- **Entry:** `main` in package.json points to `electron/main.cjs`.\n- **On ready:** Sets log path, registers IPC, then starts the runtime via `startRuntime()` and finally creates the main window.\n- **Runtime start:**\n  - If `runtime-config.cjs.upgrade` is set: uses **pear-runtime** (P2P OTA), configures storage based on `pear-runtime-legacy-storage`, and calls `PearRuntime.run(workletPath)` to launch the vault worklet as a sidecar.\n  - If no upgrade link is set: uses **bare-sidecar** only (`startWorkletOnly()`), spawns the worklet with `new Sidecar(workletPath)` and runs without P2P updates.\n- **Storage layout:** Tries to reuse existing Pear platform storage via `pear-runtime-legacy-storage`. If none is found, it falls back to `app.getPath('userData')/app-storage/by-dkey/<upgrade-key>`.\n- **Flatpak compatibility:** `electron/flatpak-paths.cjs` wraps both `app.getPath('userData')` and any legacy Pear storage path with `getSandboxSafePath()`. Inside Flatpak, host-mapped XDG paths under `~/.var/app/...` are remapped into `~/.config/...` compatibility paths so the vault worklet accepts them.\n- **Packaged app:** With `asar: false` all code and `node_modules` live under `Contents/Resources/app/` on macOS, so the worklet and renderer resolve modules from the real filesystem (no `app.asar` indirection).\n- **IPC:** Handles `get-app-path`, `runtime:getConfig`, `runtime:applyUpdate`, `runtime:restart`, `runtime:checkUpdated`, and `vault:invoke`. Vault methods are forwarded to `vaultClient`; Buffers are serialized as `{ __base64 }`. It also listens for `pearRuntime.updater` events and forwards `runtime:updating` / `runtime:updated` to the renderer to drive the OTA UI.\n\n---\n\n## 3. Worklet: dev vs packaged\n\nThe vault worklet lives in `@tetherto/pearpass-lib-vault-core` (Git dependency) under `src/worklet/`. It is loaded in two different ways so it works in both dev and packaged app.\n\n### 3.1 Dev\n\n- **Path:** `getWorkletPath()` returns  \n  `app.getAppPath()/node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.js`.\n- **Format:** ESM (`app.js`). The Bare loader in dev can run ESM and resolve Node built-ins to its own shims.\n- **No bundle:** Dependencies are required from the real `node_modules` tree.\n\n### 3.2 Packaged\n\n- **Path:** `getWorkletPath()` returns  \n  `process.resourcesPath/app/node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.cjs`.\n- **Format:** CommonJS bundle (`app.cjs`). The Bare runtime used in the packaged app loads the entry as CJS; giving it ESM `app.js` would throw “Cannot use import statement outside a module”.\n- **Bundle:** Produced by `scripts/build.worklet.mjs` (see below). Only the worklet **source** (relative imports) is bundled; all `node_modules` are external so Bare resolves them at runtime and native addons work.\n\n---\n\n## 4. Worklet build (scripts/build.worklet.mjs)\n\n- **Runs as part of `npm run build`** (before `tsc` and the renderer bundle).\n- **Input:** `node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.js` (ESM).\n- **Output:** `node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.cjs` (single CJS file).\n- **Behaviour (current esbuild config):**\n  - `entryPoints`: the ESM worklet entry; `bundle: true`, `platform: 'node'`, `format: 'cjs'`, `target: 'node18'`.\n  - **Externalize Node built-ins and native-heavy modules:** `fs`, `path`, `os`, `net`, `crypto`, `child_process`, `fs/promises`, `require-addon`, `fs-native-extensions`, `sodium-native` are marked as `external` so they resolve at runtime from `node_modules`.\n- **Result:** A CJS bundle that contains only the worklet code; at runtime Bare loads its dependencies from `node_modules` in the packaged app.\n\n---\n\n## 5. Packaging (no asar; mac = electron-builder, win = electron-forge)\n\n- **asar:** Disabled (`\"asar\": false` in `build`). All app code and `node_modules` are real files on disk (no `app.asar`), so the worklet and renderer always resolve modules from the filesystem.\n- **Why no asar:** Electron patches the Node `fs` module so any access to `*.asar` is routed through its ASAR reader. During OTA on macOS, `pear-runtime-updater` mirrors a partially written `app.asar` into the `next` directory; Electron’s patched `fs` then tries to treat that in‑progress file as a valid ASAR and throws `Error: Invalid package ...app.asar`. Turning asar off avoids this class of error and lets the updater see only plain files.\n\n### 5.1 macOS (electron-builder)\n\n- **Tooling:** `electron-builder@23.6.0`.\n- **Build commands:** `npm run dist:mac` (local) and `npm run dist:mac:ci` (CI).\n- **Pipeline:**\n  - `npm run build` → worklet bundle + `tsc` + renderer bundle (`dist/renderer.bundle.js`).\n  - `npx electron-builder --mac` → `dist/mac-arm64/PearPass.app` + DMG.\n  - CI uses `scripts/notarize.cjs` as an `afterSign` hook (`@electron/notarize` + `notarytool`) to sign and notarize the app.\n  - After that, `PearPass.app` is copied into `out/darwin-arm64/` and `pear:build:darwin` produces the Pear drive layout (`by-arch/darwin-arm64/app/PearPass.app/...`).\n\n### 5.2 Windows (electron-forge, MSIX)\n\n- **Tooling:** **Electron Forge** for Windows packaging (electron-builder does not support MSIX).\n- **Build:** Forge produces an MSIX package for the Windows desktop app; CI then stages that MSIX into the Pear drive for the `win32-x64` arch so `PearRuntime` on Windows can install it via `MSIXManager`.\n- **Pear layout:** The staged drive contains `by-arch/win32-x64/app/<name>.msix`, where `<name>` matches the `name` passed to `PearRuntime` in `electron/main.cjs`.\n\n---\n\n## 6. Preload (electron/preload.cjs)\n\n- **Attached to the renderer** via `webPreferences.preload` (with `nodeIntegration: true`, `contextIsolation: false`).\n- **Responsibilities:**\n  1. **App path for fs-native-extensions:** Sends `get-app-path` sync, then sets `global.__dirname` and `global.__filename` to the `fs-native-extensions` path so code that uses it (e.g. via pear-ipc) in the renderer does not break.\n  2. **Renderer API:** Exposes `window.electronAPI` with:\n     - Runtime: `getConfig`, `applyUpdate`, `restart`, `checkUpdated`, `onRuntimeUpdating`, `onRuntimeUpdated`\n     - Vault: `vaultInvoke(method, args)`, `vaultOnUpdate(cb)`\n- The renderer must use this preload; without it there is no `window.electronAPI` and no correct `__dirname`/`__filename` for fs-native-extensions.\n\n---\n\n## 7. Renderer → main → worklet flow\n\n1. Renderer calls e.g. `window.electronAPI.vaultInvoke('someMethod', [arg1, arg2])`.\n2. Preload forwards to `ipcRenderer.invoke('vault:invoke', { method, args })`.\n3. Main process `ipcMain.handle('vault:invoke', …)` receives it, gets `vaultClient[method]`, deserializes args (e.g. `__base64` → Buffer), calls the method on `vaultClient`.\n4. `PearpassVaultClient` sends the call over the pipe to the worklet; worklet runs the vault logic and replies.\n5. Main process serializes the result (e.g. Buffer → `__base64`) and returns to the renderer.\n\n---\n\n## 8. Key files reference\n\n| Role                           | File                                                                             |\n| ------------------------------ | -------------------------------------------------------------------------------- |\n| Main process                   | `electron/main.cjs`                                                              |\n| Preload                        | `electron/preload.cjs`                                                           |\n| Flatpak path helper            | `electron/flatpak-paths.cjs`                                                     |\n| Worklet entry (ESM)            | `node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.js`              |\n| Worklet bundle (CJS, packaged) | `node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.cjs` (generated) |\n| Worklet build script           | `scripts/build.worklet.mjs`                                                      |\n| Renderer bundle                | `scripts/bundle-renderer.mjs` → `dist/renderer.bundle.js`                        |\n| Build pipeline                 | `package.json` scripts: `build`, `dist:*`, `pear:build:*`                        |\n\n---\n\n## 9. Troubleshooting\n\n- **“Cannot use import statement outside a module” in packaged app**  \n  Packaged app must run the CJS worklet (`app.cjs`). Ensure `npm run build` runs the worklet build and `getWorkletPath()` returns `.../app.cjs` when `app.isPackaged` is true.\n\n- **“MODULE_NOT_FOUND” for a package when running from DMG /Applications**  \n  With `asar: false` this usually means the package was not included in `build.files` or was only a devDependency. Ensure it is a runtime dependency and matched by `build.files`.\n\n- **“ADDON_NOT_FOUND” for a native addon**  \n  The worklet bundle must not inline that package. Ensure the module is in the `external` list in `scripts/build.worklet.mjs` (so it is loaded from `node_modules` at runtime) and that the native binary is present in the packaged app.\n\n- **Flatpak build starts but vault/worklet storage init fails**  \n  Ensure `electron/main.cjs` still routes both `app.getPath('userData')` and `pear-runtime-legacy-storage` results through `getSandboxSafePath()` from `electron/flatpak-paths.cjs`. Flatpak commonly exposes XDG directories under `~/.var/app/...`, which the worklet rejects unless they are remapped to the approved `~/.config/...` compatibility location.\n\n- **OTA update appears stuck on Windows**  \n  Confirm that the Pear drive for `by-arch/win32-x64/app/...` contains a valid `.msix` (if `PearRuntime` is using `MSIXManager.addPackage`) and that the filename matches the `name` passed to `PearRuntime` in `electron/main.cjs`.\n"
  },
  {
    "path": "e2e/.gitignore",
    "content": "test-artifacts/\nnode_modules/\nplaywright-report/\n.DS_Store\n.env\n"
  },
  {
    "path": "e2e/components/CreateOrEditPage.js",
    "content": "import { test, expect } from '../fixtures/app.runner.js'\n\nclass CreateOrEditPage {\n  constructor(root) {\n    this.root = root\n  }\n\n  // --- Input fields ---\n\n  getCreateOrEditInputField(field) {\n    const overrides = {\n      website: 'createoredit-input-website-v2-0',\n      attachment: 'createoredit-attachment-upload-v2',\n    }\n    const dashIndex = field.indexOf('-')\n    const testId = overrides[field] ??\n      (dashIndex !== -1\n        ? `createoredit-${field.slice(0, dashIndex)}-input-${field.slice(dashIndex + 1)}-v2`\n        : `createoredit-input-${field}-v2`)\n    return this.root.getByTestId(testId).locator('input').first()\n  }\n\n  getCreateOrEditTextareaField(field) {\n    return this.root.getByTestId(`createoredit-textarea-${field}`)\n  }\n\n  async fillCreateOrEditInput(field, value) {\n    const input = this.getCreateOrEditInputField(field)\n    await input.waitFor({ state: 'visible' })\n    await input.fill('')\n    await input.fill(value)\n  }\n\n  async verifyPasswordToNotHaveValue(password) {\n    const passwordInput = this.getCreateOrEditInputField('password')\n    await expect(passwordInput).toBeVisible()\n    await expect(passwordInput).not.toHaveValue(password)\n  }\n\n  // --- Form buttons ---\n\n  getCreateOrEditButton(name) {\n    const dashIndex = name.indexOf('-')\n    const testId = dashIndex !== -1\n      ? `createoredit-${name.slice(0, dashIndex)}-button-${name.slice(dashIndex + 1)}-v2`\n      : `createoredit-button-${name}-v2`\n    return this.root.getByTestId(testId)\n  }\n\n  async clickOnCreateOrEditButton(button) {\n    const input = this.getCreateOrEditButton(button)\n    await input.waitFor({ state: 'visible' })\n    await input.click()\n  }\n\n  get saveButton() {\n    return this.root.getByTestId('createoredit-button-save')\n  }\n\n  get elementItemCloseButton() {\n    return this.root.getByTestId(/-close-v2$/).first()\n  }\n\n  async clickElementItemCloseButton() {\n    await expect(this.elementItemCloseButton).toBeVisible()\n    await this.elementItemCloseButton.click()\n  }\n\n  // --- Multi-slot website / comment ---\n\n  get detailsWebsite() {\n    return this.root.getByTestId('website-multi-slot-input-slot-0')\n  }\n\n  async verifyDetailsWebsiteCount(expectedCount) {\n    await expect(this.detailsWebsite).toHaveCount(expectedCount)\n  }\n\n  get detailsComment() {\n    return this.root.getByTestId('comments-multi-slot-input-slot-0')\n  }\n\n  async verifyDetailsCommentCount(expectedCount) {\n    await expect(this.detailsComment).toHaveCount(expectedCount)\n  }\n\n  // --- Password generation ---\n\n  get passwordMenu() {\n    return this.root.getByTestId('createoredit-button-generatepassword-v2')\n  }\n\n  async openPasswordMenu() {\n    await expect(this.passwordMenu).toBeVisible()\n    await this.passwordMenu.click()\n  }\n\n  get insertPasswordButton() {\n    return this.root\n      .getByTestId('generatepassword-button-primary-v2')\n      .first()\n  }\n\n  async clickInsertPasswordButton() {\n    await expect(this.insertPasswordButton).toBeVisible()\n    await this.insertPasswordButton.click()\n  }\n\n  // --- Password field ---\n\n  get elementItemPassword() {\n    return this.root.getByPlaceholder('Password')\n  }\n\n  get passwordInput() {\n    return this.root.getByTestId('createoredit-input-password')\n  }\n\n  get elementItemPasswordShowHideFirst() {\n    return this.root\n      .getByTestId('password-field-eye-button')\n      .first()\n  }\n\n  get elementItemPasswordShowHideLast() {\n    return this.root.getByTestId('password-field-eye-button').last()\n  }\n\n  async clickShowHidePasswordButtonFirst() {\n    await expect(this.elementItemPasswordShowHideFirst).toBeVisible()\n    await this.elementItemPasswordShowHideFirst.click()\n  }\n\n  async clickShowHidePasswordButtonLast() {\n    await expect(this.elementItemPasswordShowHideLast).toBeVisible()\n    await this.elementItemPasswordShowHideLast.click()\n  }\n\n  async verifyPasswordType(password_type) {\n    const itemDetail = this.root.getByPlaceholder('Password')\n    await expect(itemDetail).toBeVisible()\n    await expect(itemDetail).toHaveAttribute('type', password_type)\n  }\n\n  // --- Attachment upload ---\n\n  getCreateOrEditUploadAttachment() {\n    return this.root.getByTestId(/-attachment-upload-v2$/).first()\n  }\n\n  async clickOnAttachment() {\n    const input = this.getCreateOrEditUploadAttachment()\n    await input.waitFor({ state: 'visible' })\n    await input.click()\n  }\n\n  get deleteAttachmentButton() {\n    return this.root.getByTestId(/-button-deleteattachment-v2-0$/).first()\n  }\n\n  async clickOnDeleteAttachmentButton() {\n    const deleteButton = this.deleteAttachmentButton\n    await expect(deleteButton).toBeVisible()\n    await deleteButton.click()\n  }\n\n  get loadFile() {\n    return this.root.getByTestId('createoredit-button-loadfile')\n  }\n\n  get fileInput() {\n    return this.root.locator('input[type=\"file\"]').first()\n  }\n\n  async uploadFile() {\n    await this.fileInput.setInputFiles('test-files/TestPhoto.png')\n  }\n\n  get uploadedFileLink() {\n    return this.root\n      .getByTestId('uploadfiles-field-v2')\n      .getByText('TestPhoto.png', { exact: true })\n  }\n\n  get uploadedFile() {\n    return this.root.getByTestId('uploadfiles-button-additem-v2')\n  }\n\n  get uploadedImage() {\n    return this.root.getByAltText('TestPhoto.png')\n  }\n\n  async clickOnUploadedFile() {\n    await expect(this.uploadedFile).toBeVisible()\n    await this.uploadedFile.click()\n  }\n\n  async verifyUploadedFileIsVisible() {\n    await expect(this.uploadedFileLink).toBeVisible()\n    await expect(this.uploadedFileLink).toHaveText('TestPhoto.png')\n  }\n\n  async verifyUploadedImageIsVisible() {\n    await expect(this.uploadedImage).toBeVisible()\n  }\n\n  // --- Custom note fields ---\n\n  get createCustomNote() {\n    return this.root.getByTestId('createcustomfield-option-note')\n  }\n\n  get customNoteInput() {\n    return this.root.getByTestId('createoredit-custom-input-customfield-v2-0').locator('input').first()\n  }\n\n  get customNoteInput_first() {\n    return this.root.getByTestId(/^createoredit-custom-input-customfield-v2-/)\n  }\n\n  async fillCustomNoteInput() {\n    const input = this.customNoteInput\n    await input.waitFor({ state: 'visible' })\n    await input.fill('')\n    await input.fill('Custom Note')\n  }\n\n  async fillCustomNoteInput_first() {\n    const input = this.customNoteInput_first\n    await input.waitFor({ state: 'visible' })\n    await input.fill('')\n    await input.fill('Custom Note')\n  }\n\n  async deleteCustomNote() {\n    const input = this.customNoteInput\n    await input.waitFor({ state: 'visible' })\n    await input.fill('')\n  }\n\n  // --- Folder dropdown ---\n\n  get dropdownFolderMenu() {\n    return this.root.getByTestId('createoredit-select-folder-v2')\n  }\n\n  async openDropdownMenu() {\n    await this.dropdownFolderMenu.waitFor({ state: 'attached' })\n    await this.dropdownFolderMenu.click()\n  }\n\n  async selectFromDropdownMenu(foldername) {\n    const folder = this.root.getByTestId(`createoredit-folder-option-v2-${foldername}`)\n    await expect(folder).toBeVisible()\n    await folder.click()\n  }\n\n  // --- Identity sections ---\n\n  getSection(sectionname) {\n    return this.root.getByTestId(`createoredit-section-${sectionname}`)\n  }\n\n  get identitySection() {\n    return this.root.getByTestId(`createoredit-section-personalinfo`)\n  }\n\n  async clickOnIdentitySection(sectionname) {\n    const section = this.getSection(sectionname)\n    await section.waitFor({ state: 'visible' })\n    await section.click()\n  }\n\n  // --- PassPhrase ---\n\n  get passPhrasePasteButton() {\n    return this.root.getByRole('button', { name: 'Paste recovery phrase' }).first()\n  }\n\n  async clickOnPasteFromClipboard() {\n    const pasteButton = this.passPhrasePasteButton\n    await expect(pasteButton).toBeVisible()\n    await pasteButton.click()\n  }\n\n  // --- Item details (shared verifications) ---\n\n  async verifyItemDetailsValue(labelOrPlaceholder, expectedValue) {\n    const itemDetail = this.getElementItemDetails(labelOrPlaceholder)\n    await expect(itemDetail).toHaveValue(expectedValue)\n  }\n\n  async verifyItemDetailsValueIsNotVisible(labelOrPlaceholder) {\n    const itemDetail = this.getElementItemDetails(labelOrPlaceholder)\n    await expect(itemDetail).not.toBeVisible()\n  }\n\n}\n\nmodule.exports = { CreateOrEditPage }\n"
  },
  {
    "path": "e2e/components/DetailsPage.js",
    "content": "import { test, expect } from '../fixtures/app.runner.js'\n\nclass DetailsPage {\n  constructor(root) {\n    this.root = root\n  }\n\n  // --- General / counter ---\n\n  get itemDetailsCounter() {\n    return this.root\n    .getByTestId('details-header-v2')\n    .locator('input[placeholder]')\n  }\n\n  async verifyDetailsNoItems() {\n    await expect(this.itemDetailsCounter).toHaveCount(0)\n  }\n\n  // --- Title ---\n\n  get getItemDetailsTitle() {\n    return this.root.locator('[data-testid^=\"details-title\"], [data-testid=\"details-header-v2\"]')\n  }\n\n  async verifyTitle(expectedTitle) {\n    await expect(this.getItemDetailsTitle).toContainText(expectedTitle)\n  }\n\n  // --- Item details / multi-slot ---\n\n  getElementItemDetails(labelOrPlaceholder) {\n    const v2LabelMap = {\n      'Email or username': 'credentials-multi-slot-input-slot-0',\n      'Password': 'credentials-multi-slot-input-slot-1',\n      'https://': 'website-multi-slot-input-slot-0',\n      'Name on card': 'card-details-multi-slot-input-slot-0',\n      'Number on card': 'card-details-multi-slot-input-slot-1',\n      'Date of expire': 'card-details-multi-slot-input-slot-2',\n      'Security code': 'card-details-multi-slot-input-slot-3',\n      'Pin code': 'card-details-multi-slot-input-slot-4',\n      'Comment': 'comments-multi-slot-input-slot-0',\n      'Wi-Fi Password': 'credentials-multi-slot-input-slot-0',\n      'Add comment': 'comments-multi-slot-input-slot-0',\n      'Other Field': 'custom-fields-multi-slot-input-slot-0',\n    }\n    const v2TestId = v2LabelMap[labelOrPlaceholder]\n    if (v2TestId) {\n      return this.root.getByTestId(v2TestId).locator('input').first()\n    }\n\n    return this.root\n      .locator('input', {\n        has: this.root.locator('[data-testid=\"details-header\"]', {\n          hasText: labelOrPlaceholder\n        })\n      })\n      .or(this.root.locator(`input[placeholder=\"${labelOrPlaceholder}\"]`))\n  }\n\n  async verifyItemDetailsValue(labelOrPlaceholder, expectedValue) {\n    const itemDetail = this.getElementItemDetails(labelOrPlaceholder)\n    await expect(itemDetail).toHaveValue(expectedValue)\n  }\n\n  async verifyItemDetailsValueIsNotVisible(labelOrPlaceholder) {\n    const itemDetail = this.getElementItemDetails(labelOrPlaceholder)\n    await expect(itemDetail).not.toBeVisible()\n  }\n\n  // --- Comment / note ---\n\n  get getItemDetailsCommentInput() {\n    return this.root.getByTestId('comments-multi-slot-input-slot-0').locator('input')\n  }\n\n  async verifyCustomNoteText(expectedText) {\n    await expect(this.getItemDetailsCommentInput).toBeVisible()\n    await expect(this.getItemDetailsCommentInput).toHaveValue(expectedText)\n  }\n\n  getElementItemDetailsNew() {\n    return this.root.getByTestId('note-multi-slot-input-slot-0').locator('input').first()\n  }\n\n  async verifyNoteText(note_text) {\n    const noteTextDetail = this.getElementItemDetailsNew()\n    await expect(noteTextDetail).toBeVisible()\n    await expect(noteTextDetail).toHaveValue(note_text)\n  }\n\n  // --- Identity ---\n\n  getIdentityDetails(name) {\n    const v2SlotMap = {\n      fullname:               'personal-information-multi-slot-input-slot-0',\n      email:                  'personal-information-multi-slot-input-slot-1',\n      phone:                  'personal-information-multi-slot-input-slot-2',\n      address:                'address-multi-slot-input-slot-0',\n      zip:                    'address-multi-slot-input-slot-1',\n      city:                   'address-multi-slot-input-slot-2',\n      region:                 'address-multi-slot-input-slot-3',\n      country:                'address-multi-slot-input-slot-4',\n      passportfullname:       'passport-multi-slot-input-slot-0',\n      passportnumber:         'passport-multi-slot-input-slot-1',\n      passportissuingcountry: 'passport-multi-slot-input-slot-2',\n      passportdateofissue:    'passport-multi-slot-input-slot-3',\n      passportexpirydate:     'passport-multi-slot-input-slot-4',\n      passportnationality:    'passport-multi-slot-input-slot-5',\n      passportdob:            'passport-multi-slot-input-slot-6',\n      passportgender:         'passport-multi-slot-input-slot-7',\n      idcardnumber:           'identity-card-multi-slot-input-slot-0',\n      idcarddateofissue:      'identity-card-multi-slot-input-slot-1',\n      idcardexpirydate:       'identity-card-multi-slot-input-slot-2',\n      idcardissuingcountry:   'identity-card-multi-slot-input-slot-3',\n      comment:                'comments-multi-slot-input-slot-0',\n      note:                   'comments-multi-slot-input-slot-0',\n    }\n    const v2TestId = v2SlotMap[name]\n    if (v2TestId) {\n      return this.root.getByTestId(v2TestId).locator('input').first()\n    }\n    return this.root.getByTestId(`identitydetails-field-${name}`)\n  }\n\n  async verifyIdentityDetails(name) {\n    const identityDetail = this.getIdentityDetails(name)\n    await expect(identityDetail).toBeVisible()\n  }\n\n  async verifyIdentityDetailsValue(name, expectedValue) {\n    const identityDetail = this.getIdentityDetails(name)\n    await expect(identityDetail).toHaveValue(expectedValue)\n  }\n\n  // --- Recovery phrase ---\n\n  get recoveryPhraseDetails() {\n    return this.root.getByTestId(/passphrase-word-input-\\d+/)\n  }\n\n  async verifyAllRecoveryPhraseWords(expectedWords) {\n    const slots = this.recoveryPhraseDetails\n    const count = await slots.count()\n    for (let i = 0; i < count; i++) {\n      const input = slots.nth(i).locator('input').first()\n      await expect(input).toHaveValue(expectedWords[i])\n    }\n  }\n\n  // --- Attachment / file ---\n\n  get elementItemFileLink() {\n    return this.root\n      .getByTestId('attachment-field-0')\n      .getByText('TestPhoto.png', { exact: true })\n  }\n\n  get uploadedImage() {\n    return this.root.getByAltText('TestPhoto.png')\n  }\n\n  async clickOnUploadedFile() {\n    await expect(this.elementItemFileLink).toBeVisible()\n    await this.elementItemFileLink.click()\n  }\n\n  async verifyUploadedFileIsVisible() {\n    await expect(this.elementItemFileLink).toBeVisible()\n  }\n\n  async verifyUploadedImageIsVisible() {\n    await expect(this.uploadedImage).toBeVisible()\n  }\n\n  // --- Actions bar ---\n\n  get detailsBarActionsButton() {\n    return this.root.getByTestId('details-button-actions-v2')\n  }\n\n  get detailsBarEditButton() {\n    return this.root.getByTestId('details-actions-item-edit-v2')\n  }\n\n  get detailsBarFavoriteButton() {\n    return this.root.getByTestId('details-actions-item-favorite-v2')\n  }\n\n  get detailsBarThreeDots() {\n    return this.root.getByTestId('button-round-icon').first()\n  }\n\n  async openItemBarThreeDotsDropdownMenu() {\n    await expect(this.detailsBarActionsButton).toBeVisible()\n    await this.detailsBarActionsButton.click()\n  }\n\n  async editElement() {\n    await expect(this.detailsBarActionsButton).toBeVisible()\n    await this.detailsBarActionsButton.click()\n    await expect(this.detailsBarEditButton).toBeVisible()\n    await this.detailsBarEditButton.click()\n  }\n\n  get markAsFavoriteButton() {\n    return this.root.locator('[data-testid=\"details-actions-item-favorite-v2\"]').getByText('Add to Favorites', { exact: true })\n  }\n\n  get removeFromFavoritesButton() {\n    return this.root.locator('[data-testid=\"details-actions-item-favorite-v2\"]').getByText('Remove from Favorites', { exact: true })\n  }\n\n  async clickMarkAsFavoriteButton() {\n    await expect(this.detailsBarFavoriteButton).toBeVisible()\n    await this.detailsBarFavoriteButton.click()\n  }\n\n  async clickRemoveFromFavoritesButton() {\n    await expect(this.removeFromFavoritesButton).toBeVisible()\n    await this.removeFromFavoritesButton.click()\n  }\n\n  async clickFavoriteButton() {\n    await expect(this.detailsBarActionsButton).toBeVisible()\n    await this.detailsBarActionsButton.click()\n    await expect(this.detailsBarFavoriteButton).toBeVisible()\n    await this.detailsBarFavoriteButton.click()\n  }\n\n  // --- Close button ---\n\n  get elementItemCloseButton() {\n    return this.root.getByTestId(/-close-v2$/).first()\n  }\n\n  async clickElementItemCloseButton() {\n    await expect(this.elementItemCloseButton).toBeVisible()\n    await this.elementItemCloseButton.click()\n  }\n\n  // --- Folder management ---\n\n  getCreateNewFolderTitleInput() {\n    return this.root.locator(\n      'input[placeholder=\"Enter Name\"]'\n    )\n  }\n\n  get createFolderButton() {\n    return this.root.getByRole('button', { name: 'Create New Folder' });\n  }\n\n  async fillCreateNewFolderTitleInput(value) {\n    await this.getCreateNewFolderTitleInput().fill(value)\n  }\n\n  async clickCreateFolderButton() {\n    const saveBtn = this.root.getByTestId('createfolder-save-v2')\n    await expect(saveBtn).toBeVisible()\n    await saveBtn.click()\n  }\n\n  getItemDetailsFolderName(foldername) {\n    return this.root.getByTestId(`sidebar-folder-${foldername}`)\n  }\n\n  async verifyItemDetailsFolderName(foldername) {\n    const itemDetailsFolder = this.getItemDetailsFolderName(foldername)\n    await expect(itemDetailsFolder).toBeVisible()\n  }\n\n  // --- Record list / favorites ---\n\n  get recordListContainer() {\n    return this.root.getByTestId('recordList-record-container')\n  }\n\n  // --- Password visibility ---\n\n  async clickShowHidePasswordButton() {\n    await expect(this.elementItemPasswordShowHide).toBeVisible()\n    await this.elementItemPasswordShowHide.click()\n  }\n\n  async clickPasswordToggle(slotTestId) {\n    const toggle = this.root.getByTestId(slotTestId).getByTestId('password-field-eye-button')\n    await expect(toggle).toBeVisible()\n    await toggle.click()\n  }\n\n  async verifyPasswordFieldType(slotTestId, expectedType) {\n    const input = this.root.getByTestId(slotTestId).locator('input').first()\n    await expect(input).toBeVisible()\n    await expect(input).toHaveAttribute('type', expectedType)\n  }\n\n}\n\nmodule.exports = { DetailsPage }\n"
  },
  {
    "path": "e2e/components/LoginPage.js",
    "content": "import { test, expect } from '../fixtures/app.runner.js'\n\nclass LoginPage {\n  constructor(root) {\n    this.root = root\n  }\n\n  // --- Title / ready state ---\n\n  get title() {\n    return this.root.locator('h1', { hasText: 'Enter Your Master Password' })\n  }\n\n  async waitForReady(timeout = 30000) {\n    await expect(this.title).toBeVisible({ timeout })\n  }\n\n  // --- Password ---\n\n  get passwordInput() {\n    return this.root.getByTestId('login-password-input-v2').locator('input')\n  }\n\n  async enterPassword(password) {\n    await expect(this.passwordInput).toBeVisible()\n    await this.passwordInput.fill(password)\n  }\n\n  // --- Continue button ---\n\n  get continueButton() {\n    return this.root.getByTestId('login-continue-button-v2')\n  }\n\n  async clickContinue() {\n    await this.continueButton.click()\n  }\n\n  async loginToApplication(password) {\n    await this.waitForReady()\n    await this.enterPassword(password)\n    await this.clickContinue()\n  }\n}\n\nmodule.exports = { LoginPage }\n"
  },
  {
    "path": "e2e/components/MainPage.js",
    "content": "import { test, expect } from '../fixtures/app.runner.js'\n\nclass MainPage {\n  constructor(root) {\n    this.root = root\n  }\n\n  // --- Element list / records ---\n\n  get element() {\n    return this.root.locator('[data-record-id]').first()\n  }\n\n  getElementByPosition(position) {\n    return this.root\n      .locator('[data-record-id]')\n      .nth(position)\n      .locator('span')\n      .last()\n  }\n\n  async clickOnFirstElement() {\n    await expect(this.element).toBeVisible()\n    await this.element.click()\n  }\n\n  async openElementDetails() {\n    await expect(this.element).toBeVisible()\n    await this.element.click()\n  }\n\n  async verifyElementTitle(title) {\n    const row = this.root.locator('[data-record-id]').filter({ hasText: title })\n    await expect(row).toBeVisible()\n  }\n\n  async verifyElementIsNotVisible() {\n    await expect(this.element).not.toBeVisible()\n  }\n\n  async verifyElementByPosition(position, element_name) {\n    await expect(this.getElementByPosition(position)).toHaveText(element_name)\n  }\n\n  async clickElementByPosition(position, element_name) {\n    const element = this.getElementByPosition(position)\n    await expect(element).toContainText(element_name)\n    await element.click()\n  }\n\n  async elementCheckBox(expectedState) {\n    const checkbox = this.element\n      .locator('button[aria-checked]')\n\n    await expect(checkbox)\n      .toHaveAttribute('aria-checked', String(expectedState))\n  }\n\n  // --- Favorites ---\n\n  get mainViewFavoriteIcon() {\n    return this.root.getByTestId('multi-select-favorite')\n  }\n\n  async clickOnMainViewFavoriteIcon() {\n    await expect(this.mainViewFavoriteIcon).toBeVisible()\n    await this.mainViewFavoriteIcon.click()\n  }\n\n  async favoriteIconDisabled() {\n    const favorite1 = this.mainViewFavoriteIcon\n    await expect(favorite1).toHaveAttribute('aria-label', 'Add to Favorites')\n  }\n\n  async favoriteIconEnabled() {\n    const favorite2 = this.mainViewFavoriteIcon\n    await expect(favorite2).toHaveAttribute('aria-label', 'Remove from Favorites')\n  }\n\n  // --- Multi-select ---\n\n  get mainViewHeaderSelect() {\n    return this.root.getByTestId('main-view-header-select')\n  }\n\n  get multipleSelectionButon() {\n    return this.root.getByTestId('main-view-header-select')\n  }\n\n  get multipleSelectDeleteButon() {\n    return this.root.getByTestId('multi-select-delete')\n  }\n\n  get multipleSelectMoveButon() {\n    return this.root.getByTestId('multi-select-move')\n  }\n\n  get multipleSelectCancelButon() {\n    return this.root.getByTestId('multi-select-cancel-button')\n  }\n\n  get multipleSelectCheckerByPosition() {\n    return this.root\n      .getByTestId('recordList-record-container')\n      .nth(`${position}`)\n      .getByTestId('undefined-selected')\n  }\n\n  async clickMainViewHeaderSelect() {\n    await expect(this.mainViewHeaderSelect).toBeVisible()\n    await this.mainViewHeaderSelect.click()\n  }\n\n  async clickMultipleSelectiontButton() {\n    await expect(this.multipleSelectionButon).toBeVisible()\n    await this.multipleSelectionButon.click()\n  }\n\n  async clickMultipleSelectDeletetButton() {\n    await expect(this.multipleSelectDeleteButon).toBeVisible()\n    await this.multipleSelectDeleteButon.click()\n  }\n\n  async clickMultipleSelectMoveButon() {\n    await expect(this.multipleSelectMoveButon).toBeVisible()\n    await this.multipleSelectMoveButon.click()\n  }\n\n  async verifyMultipleSelectDeleteButtonIsEnabled() {\n    await expect(this.multipleSelectDeleteButon).toBeVisible()\n    await expect(this.multipleSelectDeleteButon).toBeEnabled()\n  }\n\n  // --- Add item / plus button ---\n\n  get mainPlusButon() {\n    return this.root.getByTestId('main-plus-button')\n  }\n\n  async clickAddItem(type) {\n    await expect(this.mainPlusButon).toBeVisible()\n    await this.mainPlusButon.click()\n\n    const menuItem = this.root.getByTestId(`add-item-${type}`)\n    await expect(menuItem).toBeVisible()\n    await menuItem.click()\n  }\n\n  // --- Sort ---\n\n  get sortButon() {\n    return this.root.getByTestId('main-view-header-sort-menu')\n  }\n\n  getSortOption(option) {\n    return this.root.getByTestId(`main-view-header-sort-${option}`)\n  }\n\n  async clickSortButton() {\n    await expect(this.sortButon).toBeVisible()\n    await this.sortButon.click()\n  }\n\n  async selectSortOption(option) {\n    const sortOption = this.getSortOption(option)\n    await sortOption.click()\n  }\n\n  // --- Folder management ---\n\n  get createNewFolderinputFolderName() {\n    return this.root.getByTestId('input-field')\n  }\n\n  get createFolderModalButton() {\n    return this.root.getByRole('button', { name: 'Create folder' })\n  }\n\n  getCollectionButton(button_name) {\n    return this.root.getByTestId(`emptycollection-button-create-${button_name}`)\n  }\n\n  async verifyElementFolderName(elementfoldername) {\n    const folderBtn = this.root.getByTestId(`sidebar-folder-${elementfoldername}`)\n    await expect(folderBtn).toBeVisible()\n    await folderBtn.click()\n    await expect(this.root.locator('[data-record-id]').first()).toBeVisible()\n  }\n\n  // --- Move folder ---\n\n  async clickMoveFolderChip(folderName) {\n    const chip = this.root.getByTestId(`movefolder-chip-${folderName}`)\n    await expect(chip).toBeVisible()\n    await chip.click()\n  }\n\n  async clickMoveFolderSubmit() {\n    const submitBtn = this.root.getByTestId('movefolder-submit-v2')\n    await expect(submitBtn).toBeVisible()\n    await expect(submitBtn).toBeEnabled()\n    await submitBtn.click()\n  }\n\n  // --- Empty collection ---\n\n  get emptyCollectionView() {\n    return this.root.getByTestId('empty-collection-v2')\n  }\n\n  async verifyEmptyCollection() {\n    await expect(this.emptyCollectionView).toBeVisible()\n  }\n\n  // --- Details close ---\n\n  get detailsCloseButton() {\n    return this.root.getByTestId('details-button-collapse')\n  }\n\n  async clickDetailsCloseButton() {\n    const collapseBtn = this.root.getByTestId('details-button-collapse')\n    const modalCloseBtn = this.root\n      .getByTestId('modalheader-button-close')\n      .last()\n    const closeBtn = collapseBtn.or(modalCloseBtn)\n    await closeBtn.click({ timeout: 5000 }).catch(() => { })\n  }\n\n  // --- Confirm / delete ---\n\n  async clickYesButton() {\n    await this.root.getByTestId('delete-records-submit-v2').click()\n  }\n\n}\n\nmodule.exports = { MainPage }\n"
  },
  {
    "path": "e2e/components/SettingsPage.js",
    "content": "import { test, expect } from '../fixtures/app.runner.js'\n\nclass SettingsPage {\n  constructor(root) {\n    this.root = root\n  }\n\n  // --- Navigation ---\n\n  getSettingsDropdownSection(section_name) {\n    return this.root.getByTestId(`section-${section_name}`)\n  }\n\n  async verifySettingsDropdownSectionIsVisible(section_name) {\n    const section_dropdown = this.getSettingsDropdownSection(section_name)\n    await expect(section_dropdown).toBeVisible()\n  }\n\n  getSettingsDropdownNavigation(section_navigation_name) {\n    return this.root.getByTestId(`settings-nav-${section_navigation_name}`)\n  }\n\n  async verifySettingsDropdownNavigationIsVisible(section_navigation_name) {\n    const section_navigation = this.getSettingsDropdownNavigation(section_navigation_name)\n    await expect(section_navigation).toBeVisible()\n  }\n\n  get backSettingsButton() {\n    return this.root.getByRole('button', { name: 'Go back' });\n  }\n\n  async clickBackSettingsButton() {\n    await this.backSettingsButton.waitFor({ state: 'visible' });\n    await this.backSettingsButton.click();\n  }\n\n  // --- Dropdowns ---\n\n  getPearPassFunctionDropdown(pearpass_dropdown_id) {\n    return this.root.getByTestId(`settings-${pearpass_dropdown_id}`)\n  }\n\n  async clickPearPassFunctionDropdown(dropdown_id) {\n    const function_dropdown = this.getPearPassFunctionDropdown(dropdown_id)\n    await expect(function_dropdown).toBeVisible()\n    await function_dropdown.click()\n  }\n\n  getPearPassFunctionDropdownOption(dropdown_option) {\n    return this.root.getByTestId(`settings-auto-lock-option-${dropdown_option}`)\n  }\n\n  async verifyPearPassFunctionDropdownOptionIsVisible(dropdown_id) {\n    const function_dropdown =\n      this.getPearPassFunctionDropdownOption(dropdown_id)\n    await expect(function_dropdown).toBeVisible()\n  }\n}\n\nmodule.exports = { SettingsPage }\n"
  },
  {
    "path": "e2e/components/SideMenuPage.js",
    "content": "import { test, expect } from '../fixtures/app.runner.js'\n\nclass SideMenuPage {\n  constructor(root) {\n    this.root = root\n  }\n\n  // --- Exit / lock ---\n\n  get sidebarExitButton() {\n    return this.root.getByTestId('sidebar-lock-app')\n  }\n\n  async clickSidebarExitButton() {\n    await expect(this.sidebarExitButton).toBeVisible()\n    await this.sidebarExitButton.click()\n  }\n\n  // --- Settings ---\n\n  get sidebarSettingsButton() {\n    return this.root.getByTestId('sidebar-settings-button')\n  }\n\n  async clickSidebarSettingsButton() {\n    await expect(this.sidebarSettingsButton).toBeVisible()\n    await this.sidebarSettingsButton.click()\n  }\n\n  // --- Categories ---\n\n  getSidebarCategory(categoryname) {\n    return this.root.getByTestId(`sidebar-category-${categoryname}`)\n  }\n\n  async selectSideBarCategory(name) {\n    const category = this.getSidebarCategory(name)\n    await expect(category).toBeVisible()\n    await expect(category).toBeEnabled()\n    await category.click()\n  }\n\n  // --- Favorites folder ---\n\n  get favoritesFolder() {\n    return this.root.getByTestId('sidebar-folder-favorites').locator('span').last()\n  }\n\n  async verifySideBarFavoritesFolder(items) {\n    await expect(this.favoritesFolder).toBeVisible()\n    await expect(this.favoritesFolder).toHaveAttribute('aria-label', items)\n  }\n\n  // --- Folders ---\n\n  getSideMenuFolder(folderName) {\n    return this.root.getByRole('button', { name: folderName })\n      .and(this.root.locator('[data-testid^=\"sidebar-\"]'))\n  }\n\n  get sidebarAddButton() {\n    return this.root.getByTestId('sidebar-folder-add')\n  }\n\n  get confirmButton() {\n    return this.root.getByTestId('button-primary')\n  }\n\n  get deleteFolderButton() {\n    return this.root.getByTestId('deletefolder-submit-v2')\n  }\n\n  async clickSidebarAddButton() {\n    await expect(this.sidebarAddButton).toBeVisible()\n    await this.sidebarAddButton.click()\n  }\n\n  async createFolder(name) {\n    await this.clickSidebarAddButton()\n    const nameInput = this.root.getByTestId('createfolder-name-v2').locator('input')\n    await expect(nameInput).toBeVisible()\n    await nameInput.fill(name)\n    const saveBtn = this.root.getByTestId('createfolder-save-v2')\n    await expect(saveBtn).toBeVisible()\n    await saveBtn.click()\n    await expect(saveBtn).toBeHidden()\n  }\n\n  async openSideBarFolder(foldername) {\n    await expect(this.getSideMenuFolder(foldername)).toBeVisible()\n    await this.getSideMenuFolder(foldername).click()\n  }\n\n  async deleteMultipleItemsFolder(foldername) {\n    const folder = this.getSideMenuFolder(foldername)\n    await expect(folder).toBeVisible()\n    await folder.click({ button: 'right' })\n    const deleteButton = this.root.getByText('Delete Folder', { exact: true })\n    await expect(deleteButton).toBeVisible()\n    await deleteButton.click()\n  }\n\n  async deleteFolder(foldername) {\n    const folder = this.getSideMenuFolder(foldername)\n    await expect(folder).toBeVisible()\n    await folder.click({ button: 'right' })\n    const deleteButton = this.root.getByText('Delete Folder', { exact: true })\n    await expect(deleteButton).toBeVisible()\n    await deleteButton.click()\n    await expect(deleteButton).toBeHidden()\n  }\n\n  async clickDeleteFolderButton() {\n    await expect(this.deleteFolderButton).toBeVisible()\n    await this.deleteFolderButton.click()\n  }\n\n  async verifySidebarFolderName(foldername) {\n    const folder = this.getSideMenuFolder(foldername)\n    await expect(folder).toBeVisible()\n  }\n}\n\nmodule.exports = { SideMenuPage }\n"
  },
  {
    "path": "e2e/components/Utilities.js",
    "content": "import { test, expect } from '../fixtures/app.runner.js'\n\nclass Utilities {\n  constructor(root) {\n    this.root = root\n  }\n\n  // --- Bulk delete ---\n\n  async deleteAllElements() {\n    const emptyState = this.root.getByTestId('empty-collection-v2')\n\n    while (true) {\n      const emptyVisible = await emptyState.isVisible().catch(() => false)\n      if (emptyVisible) break\n\n      const firstRow = this.root.locator('[data-record-id]').first()\n      const rowVisible = await firstRow\n        .isVisible({ timeout: 3000 })\n        .catch(() => false)\n      if (!rowVisible) break\n\n      const recordId = await firstRow.getAttribute('data-record-id')\n      if (!recordId) break\n\n      await firstRow.click({ button: 'right' })\n\n      const deleteButton = this.root.getByTestId(\n        `record-row-menu-delete-${recordId}`\n      )\n      await expect(deleteButton).toBeVisible({ timeout: 5000 })\n      await deleteButton.click()\n\n      const confirmButton = this.root.getByTestId('delete-records-submit-v2')\n      await expect(confirmButton).toBeVisible({ timeout: 5000 })\n      await confirmButton.click()\n\n      await confirmButton\n        .waitFor({ state: 'hidden', timeout: 5000 })\n        .catch(() => { })\n    }\n  }\n\n  // --- Clipboard ---\n\n  async pasteFromClipboard(locator, text) {\n    await this.root.page().evaluate(async (t) => {\n      await navigator.clipboard.writeText(t)\n    }, text)\n\n    await locator.click()\n    const modifier = process.platform === 'darwin' ? 'Meta' : 'Control'\n    await this.root.page().keyboard.press(`${modifier}+v`)\n  }\n}\n\nmodule.exports = { Utilities }\n"
  },
  {
    "path": "e2e/components/index.js",
    "content": "export { LoginPage } from './LoginPage.js'\nexport { CreateOrEditPage } from './CreateOrEditPage.js'\nexport { DetailsPage } from './DetailsPage.js'\nexport { MainPage } from './MainPage.js'\nexport { SideMenuPage } from './SideMenuPage.js'\nexport { Utilities } from './Utilities.js'\nexport { SettingsPage } from './SettingsPage.js'\n"
  },
  {
    "path": "e2e/fixtures/app.runner.js",
    "content": "import { spawn } from 'node:child_process'\nimport { createRequire } from 'node:module'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport { test as base, expect, chromium } from '@playwright/test'\n\nconst isWindows = os.platform() === 'win32'\n\n/** Real Electron binary path (avoids Windows spawn EINVAL from .cmd without shell). */\nfunction resolveElectronBinary(appDir) {\n  const require = createRequire(path.join(appDir, 'package.json'))\n  return require('electron')\n}\n\nfunction sleep(ms) {\n  return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nasync function connectWithRetries(wsEndpoint, maxRetries) {\n  // Windows needs more retries with shorter delays\n  // Mac works better with exponential backoff\n  const retries = maxRetries ?? (isWindows ? 15 : 10)\n\n  for (let attempt = 0; attempt <= retries; attempt++) {\n    try {\n      // Sleep AFTER first attempt fails, not before\n      if (attempt > 0) {\n        const delay = isWindows ? 1000 : 2 ** attempt * 1000\n        await sleep(delay)\n      }\n\n      console.log(\n        `[CDP] Attempting connection to ${wsEndpoint} (attempt ${attempt + 1}/${retries + 1})`\n      )\n      return await chromium.connectOverCDP(wsEndpoint)\n    } catch (err) {\n      console.log(`[CDP] Connection failed: ${err.message}`)\n      if (attempt === retries) throw err\n    }\n  }\n}\n\nasync function waitForPage(browser, maxRetries = 60) {\n  for (let attempt = 0; attempt <= maxRetries; attempt++) {\n    const contexts = browser.contexts()\n    for (const context of contexts) {\n      const pages = context.pages()\n      // Debug: log all page URLs\n      if (attempt % 5 === 0) {\n        console.log(\n          `[Attempt ${attempt}] Available pages:`,\n          pages.map((p) => p.url())\n        )\n      }\n\n      // Electron loads index.html via file:// on all platforms\n      const page = pages.find((p) => p.url().includes('index.html'))\n\n      if (page) {\n        console.log('[Found] App page:', page.url())\n        return page\n      }\n    }\n    await sleep(1000)\n  }\n\n  // Last resort: return any page that's not blank\n  const contexts = browser.contexts()\n  for (const context of contexts) {\n    const page = context.pages().find((p) => !p.url().startsWith('about:'))\n    if (page) {\n      console.log('[Fallback] Using page:', page.url())\n      return page\n    }\n  }\n\n  return null\n}\n\nasync function launchApp(appDir) {\n  const port = Math.floor(Math.random() * (65535 - 10000 + 1)) + 10000\n\n  console.log(\n    `[Launch] Starting app on port ${port}, platform: ${os.platform()}`\n  )\n\n  const electronBin = resolveElectronBinary(appDir)\n\n  // ELECTRON_RUN_AS_NODE=1 makes Electron behave as plain Node.js, which\n  // prevents require('electron') from returning the built-in API (app, BrowserWindow, etc.)\n  const env = { ...process.env }\n  delete env.ELECTRON_RUN_AS_NODE\n\n  let proc\n  if (isWindows) {\n    proc = spawn(\n      electronBin,\n      ['.', `--remote-debugging-port=${port}`, '--no-sandbox'],\n      {\n        cwd: appDir,\n        stdio: 'inherit',\n        windowsHide: false,\n        env\n      }\n    )\n  } else {\n    // Mac/Linux: use detached process so we can kill the process group on teardown\n    proc = spawn(\n      electronBin,\n      ['.', `--remote-debugging-port=${port}`, '--no-sandbox'],\n      {\n        cwd: appDir,\n        stdio: 'inherit',\n        detached: true,\n        env\n      }\n    )\n    proc.unref()\n  }\n\n  // Give the app time to start before trying to connect\n  // Electron needs time for startRuntime() (P2P + worklet) before the window is created\n  const initialDelay = isWindows ? 5000 : 5000\n  console.log(`[Launch] Waiting ${initialDelay}ms for app to initialize...`)\n  await sleep(initialDelay)\n\n  const browser = await connectWithRetries(`http://localhost:${port}`)\n\n  // Listen for new pages on all contexts\n  for (const context of browser.contexts()) {\n    context.on('page', (p) => console.log('[Event] New page created:', p.url()))\n  }\n\n  const page = await waitForPage(browser)\n\n  if (!page) {\n    // Final debug output\n    const allPages = browser\n      .contexts()\n      .flatMap((c) => c.pages().map((p) => p.url()))\n    console.error('[Debug] All available page URLs:', allPages)\n    throw new Error('Could not find app page')\n  }\n\n  // Wait for page to be fully loaded on all platforms\n  console.log('[Launch] Waiting for page to be ready...')\n  await page.waitForLoadState('domcontentloaded')\n\n  // Windows needs additional settling time\n  if (isWindows) {\n    await sleep(2000)\n  }\n\n  const app = { proc, browser, page, isWindows }\n\n  /**\n   * Returns the current app page. If the page was closed (e.g. app restarted),\n   * tries to find the new page from the browser. Use this in beforeEach to\n   * avoid \"Target page, context or browser has been closed\" errors.\n   */\n  app.getPage = async function getPage() {\n    if (this.page && !this.page.isClosed()) {\n      return this.page\n    }\n    const newPage = await waitForPage(this.browser, 10)\n    if (newPage) {\n      this.page = newPage\n      await this.page.waitForLoadState('domcontentloaded')\n      if (isWindows) await sleep(500)\n      return this.page\n    }\n    throw new Error('App page was closed and no new page could be found')\n  }\n\n  return app\n}\n\nimport { spawnSync } from 'node:child_process'\n\nexport async function teardown({ proc, browser, isWindows }) {\n  try {\n    if (proc?.pid) {\n      console.log(`[Teardown] Killing Electron process PID=${proc.pid} ...`)\n      if (isWindows) {\n        // Windows: koristi taskkill\n        spawnSync('taskkill', ['/PID', String(proc.pid), '/T', '/F'], {\n          stdio: 'inherit'\n        })\n      } else {\n        // Mac/Linux: ubij proces grupu (-pid)\n        process.kill(-proc.pid, 'SIGKILL')\n      }\n    }\n  } catch (e) {\n    console.warn(\n      'Electron process already terminated or could not be killed',\n      e.message\n    )\n  }\n\n  // Mali delay da OS oslobodi port i prozore\n  await new Promise((r) => setTimeout(r, 500))\n\n  // Close CDP browser connection\n  try {\n    if (browser) {\n      console.log('[Teardown] Closing CDP browser connection...')\n      await browser.close()\n    }\n  } catch (e) {\n    console.warn('Browser already closed', e.message)\n  }\n}\n\nexports.test = base.extend({\n  app: [\n    async ({}, use) => {\n      const appDir = path.resolve(__dirname, '..', '..')\n      const app = await launchApp(appDir)\n      await use(app)\n      await teardown(app)\n    },\n    { scope: 'worker' }\n  ]\n})\n\nexports.expect = expect\n"
  },
  {
    "path": "e2e/fixtures/test-data.js",
    "content": "'use strict'\n\n/**\n * Centralized test data for reuse across test suites\n */\nmodule.exports = {\n  // User credentials\n  credentials: {\n    validPassword: 'Test123!',\n    invalidPassword: 'WrongPassword123!'\n  },\n\n  // Vault data\n  vault: {\n    name: 'Test'\n  },\n\n  // Timeouts\n  timeouts: {\n    navigation: 3000,\n    action: 3000\n  },\n\n  // PassPhrase\n  passphrase: {\n    text12:\n      'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12',\n    text24:\n      'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12 word13 word14 word15 word16 word17 word18 word19 word20 word21 word22 word23 word24'\n  }\n}\n"
  },
  {
    "path": "e2e/package.json",
    "content": "{\n  \"name\": \"pearpass-e2e\",\n  \"version\": \"1.0.0\",\n  \"scripts\": {\n    \"test\": \"npx playwright test\",\n    \"test:headed\": \"npx playwright test --headed\",\n    \"test:debug\": \"npx playwright test --debug\",\n    \"report\": \"npx playwright show-report test-artifacts/report\"\n  },\n  \"dependencies\": {\n    \"@playwright/test\": \"^1.52.0\",\n    \"dotenv\": \"^17.3.1\"\n  },\n  \"devDependencies\": {\n    \"clipboardy\": \"^5.1.0\",\n    \"playwright-qase-reporter\": \"^2.2.2\"\n  }\n}\n"
  },
  {
    "path": "e2e/playwright.config.js",
    "content": "import { defineConfig } from '@playwright/test'\nimport dotenv from 'dotenv'\n\ndotenv.config()\n\nexport default defineConfig({\n  timeout: 5 * 60 * 1000,\n  testDir: './specs',\n\n  workers: 1,\n  forbidOnly: !!process.env.CI,\n  maxFailures: process.env.CI ? 5 : undefined,\n  fullyParallel: false,\n\n  retries: 0,\n\n  use: {\n    screenshot: 'only-on-failure',\n    trace: 'on-first-retry',\n    actionTimeout: 30000,\n    navigationTimeout: 60000\n  },\n\n  reporter: [\n    ['list'],\n    ['html', { outputFolder: 'test-artifacts/report', open: 'never' }],\n    [\n      'playwright-qase-reporter',\n      {\n        mode: 'testops',\n        debug: false,\n        testops: {\n          api: {\n            token: process.env.API_TOKEN\n          },\n          project: 'PAS',\n          uploadAttachments: true,\n          run: {\n            title: 'Automated Playwright Run',\n            description: 'Nightly regression tests',\n            complete: true\n          },\n          batch: {\n            size: 100\n          }\n        },\n        framework: {\n          browser: {\n            addAsParameter: true,\n            parameterName: 'Browser'\n          },\n          markAsFlaky: true\n        }\n      }\n    ]\n  ],\n\n  outputDir: 'test-artifacts/results'\n})\n"
  },
  {
    "path": "e2e/scripts/explore.js",
    "content": "'use strict'\nconst { chromium } = require('@playwright/test')\n\nasync function explore() {\n  const browser = await chromium.connectOverCDP('http://localhost:9222')\n  const page = browser\n    .contexts()[0]\n    .pages()\n    .find((p) => p.url().includes('index.html'))\n\n  console.log('Connected to:', page.url())\n  await page.waitForTimeout(2000)\n\n  console.log('\\n=== VISIBLE TEXT ===')\n  console.log(await page.locator('body').innerText())\n\n  console.log('\\n=== BUTTONS ===')\n  const buttons = await page.locator('button').all()\n  for (const btn of buttons) {\n    if (await btn.isVisible()) {\n      console.log('-', await btn.textContent())\n    }\n  }\n\n  console.log('\\n=== INPUTS ===')\n  const inputs = await page.locator('input').all()\n  for (const input of inputs) {\n    if (await input.isVisible()) {\n      const type = await input.getAttribute('type')\n      const placeholder = await input.getAttribute('placeholder')\n      console.log(`- type=\"${type}\" placeholder=\"${placeholder}\"`)\n    }\n  }\n}\n\nexplore().catch(console.error)\n"
  },
  {
    "path": "e2e/specs/01-Login/creatingLoginItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Creating Login Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('login')\n    await utilities.deleteAllElements()\n    try {\n      await sideMenuPage.deleteFolder('Test Folder')\n    } catch (e) {\n      // folder may not exist from a previous run\n    }\n    await mainPage.clickAddItem('login')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    try {\n      await sideMenuPage.deleteFolder('Test Folder')\n    } catch (e) {\n    }\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Creating the \"Login\" item', async () => {\n    qase.id(1928)\n    await createOrEditPage.fillCreateOrEditInput('title', 'Login Title')\n    await createOrEditPage.fillCreateOrEditInput('username', 'Test User')\n    await createOrEditPage.fillCreateOrEditInput('password', 'Test Pass')\n    await createOrEditPage.fillCreateOrEditInput('website', 'https://www.website.co')\n    await createOrEditPage.fillCreateOrEditInput('comment', 'Test Note')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Viewing created item. Verify item details', async () => {\n    qase.id(1929)\n    await mainPage.verifyElementTitle('Login Title')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyItemDetailsValue('Email or username', 'Test User')\n    await detailsPage.verifyItemDetailsValue('Password', 'Test Pass')\n    await detailsPage.verifyItemDetailsValue('https://', 'https://www.website.co')\n    await detailsPage.verifyCustomNoteText('Test Note')\n  })\n\n  test('Password visibility icon displays/hides value', async () => {\n    qase.id(1930)\n    await mainPage.verifyElementTitle('Login Title')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyPasswordFieldType('credentials-multi-slot-input-slot-1', 'password')\n    await detailsPage.clickPasswordToggle('credentials-multi-slot-input-slot-1')\n    await detailsPage.verifyPasswordFieldType('credentials-multi-slot-input-slot-1', 'text')\n  })\n\n  test('Dropdown moves to selected item edit screen', async () => {\n    qase.id(1931)\n    await mainPage.verifyElementTitle('Login Title')\n    await sideMenuPage.clickSidebarAddButton()\n    await detailsPage.fillCreateNewFolderTitleInput('Test Folder')\n    await detailsPage.clickCreateFolderButton()\n    await detailsPage.editElement()\n    await createOrEditPage.openDropdownMenu()\n    await createOrEditPage.selectFromDropdownMenu('Test Folder')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await expect(detailsPage.getItemDetailsFolderName('Test Folder')).toBeVisible()\n    await mainPage.verifyElementFolderName('Test Folder')\n  })\n\n  test('Item moved to folder (and cleanup)', async ({ page }) => {\n    qase.id(1932)\n    await sideMenuPage.verifySidebarFolderName('Test Folder')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.openDropdownMenu()\n    await createOrEditPage.selectFromDropdownMenu('Test Folder')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n\n    await sideMenuPage.deleteFolder('Test Folder')\n  })\n\n  test('Add via Favorite icon', async ({ page }) => {\n    qase.id(1933)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.elementCheckBox(false)\n    await mainPage.clickOnFirstElement()\n    await mainPage.elementCheckBox(true)\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via Favorite icon', async ({ page }) => {\n    qase.id(1934)\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.clickOnFirstElement()\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  test('Add via More options', async ({ page }) => {\n    qase.id(1935)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickMarkAsFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via More options', async ({ page }) => {\n    qase.id(1936)\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickRemoveFromFavoritesButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  // test('Add Custom Note', async ({ page }) => {\n  //   qase.id(1937)\n  //   await mainPage.verifyElementTitle('Login Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await createOrEditPage.clickCreateCustomItem()\n  //   await createOrEditPage.clickCustomItemOptionNote()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n  //   await createOrEditPage.fillCustomNoteInput()\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  // test('Delete Note field', async ({ page }) => {\n  //   qase.id(1938)\n  //   await mainPage.verifyElementTitle('Login Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(2)\n  //   await createOrEditPage.deleteCustomNote()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(1)\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  test('Close via Cross icon', async ({ page }) => {\n    qase.id(1939)\n    await mainPage.verifyElementTitle('Login Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await detailsPage.clickElementItemCloseButton()\n    await mainPage.verifyElementTitle('Login Title')\n  })\n\n  test('View uploaded file in Edit mode', async ({ page }) => {\n    qase.id(1940)\n    await detailsPage.editElement()\n    await createOrEditPage.clickOnAttachment()\n    await createOrEditPage.uploadFile()\n    await createOrEditPage.verifyUploadedFileIsVisible()\n    await createOrEditPage.clickOnUploadedFile()\n\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await detailsPage.verifyUploadedFileIsVisible()\n\n    await detailsPage.clickOnUploadedFile()\n    await detailsPage.verifyUploadedImageIsVisible()\n\n    await createOrEditPage.clickElementItemCloseButton()\n  })\n\n  test('Empty fields not displayed in view mode', async ({ page }) => {\n    qase.id(1942)\n    await mainPage.verifyElementTitle('Login Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('username', '')\n    await createOrEditPage.fillCreateOrEditInput('password', '')\n    await createOrEditPage.fillCreateOrEditInput('website', '')\n    await createOrEditPage.fillCreateOrEditInput('comment', '')\n    await createOrEditPage.clickOnDeleteAttachmentButton()\n\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await mainPage.openElementDetails()\n\n    await detailsPage.verifyDetailsNoItems()\n\n    await test.step('CLOSE DETAILS', async () => {\n      await mainPage.clickDetailsCloseButton()\n    })\n  })\n})\n"
  },
  {
    "path": "e2e/specs/01-Login/creatingLoginItemPassword.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Password', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('login')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('login')\n\n    await createOrEditPage.fillCreateOrEditInput('title', 'Login Title')\n    await createOrEditPage.fillCreateOrEditInput('username', 'Test User')\n    await createOrEditPage.fillCreateOrEditInput('password', 'Test Pass')\n    await createOrEditPage.fillCreateOrEditInput('website', 'https://www.website.co')\n    await createOrEditPage.fillCreateOrEditInput('comment', 'Test Note')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async () => {\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that the password was changed to a generic password, with \"Safe\" strength as the default option.', async () => {\n    qase.id(2000)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.openPasswordMenu()\n    await createOrEditPage.clickInsertPasswordButton()\n    await createOrEditPage.clickShowHidePasswordButtonLast()\n    await createOrEditPage.verifyPasswordToNotHaveValue('Test Pass')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickDetailsCloseButton()\n  })\n\n  test('Verify that password strength updates when the \"special characters\" switch is toggled', async () => {\n    qase.id(2001)\n    const root = page.locator('body')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.openPasswordMenu()\n\n    await expect(root.getByRole('radio', { name: /Random Characters/i })).toBeChecked()\n    await expect(root.getByText('8 chars')).toBeVisible()\n    await expect(root.getByText('Special character')).toBeVisible()\n    const toggle = root.locator('[role=\"switch\"]')\n    await expect(toggle).toHaveAttribute('aria-checked', 'true')\n    await expect(root.getByText('Strong')).toBeVisible()\n\n    await toggle.click()\n    await expect(toggle).toHaveAttribute('aria-checked', 'false')\n    await expect(root.getByText('Strong')).not.toBeVisible()\n\n    await toggle.click()\n    await expect(toggle).toHaveAttribute('aria-checked', 'true')\n    await expect(root.getByText('Strong')).toBeVisible()\n\n    await root.getByTestId('generatepassword-button-discard-v2').click()\n    await createOrEditPage.clickOnCreateOrEditButton('discard')\n    await mainPage.clickDetailsCloseButton()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/01-Login/editingDeletingLoginItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Editing/Deleting Login Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('login')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('login')\n\n    await createOrEditPage.fillCreateOrEditInput('title', 'Login Title')\n    await createOrEditPage.fillCreateOrEditInput('username', 'Test User')\n    await createOrEditPage.fillCreateOrEditInput('password', 'Test Pass')\n    await createOrEditPage.fillCreateOrEditInput('website', 'https://www.website.co')\n    await createOrEditPage.fillCreateOrEditInput('comment', 'Test Note')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that edited \"Login\" item fields are saved correctly', async () => {\n    qase.id(2034)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('title', 'Login Title EDITED')\n    await createOrEditPage.fillCreateOrEditInput('username', 'Test User EDITED')\n    await createOrEditPage.fillCreateOrEditInput('password', 'Test Pass EDITED')\n    await createOrEditPage.fillCreateOrEditInput('website', 'https://www.website1.co')\n    await createOrEditPage.fillCreateOrEditInput('comment', 'Test Note EDITED')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.verifyElementTitle('Login Title EDITED')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyItemDetailsValue('Email or username', 'Test User EDITED')\n    await detailsPage.verifyItemDetailsValue('Password', 'Test Pass EDITED')\n    await detailsPage.verifyItemDetailsValue('https://', 'https://www.website1.co')\n    await detailsPage.verifyCustomNoteText('Test Note EDITED')\n  })\n\n  test('Verify that deleted \"Website\" and custom \"Note\" fields are not saved in the edited \"Login\" item', async () => {\n    qase.id(2035)\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('website', '')\n    await createOrEditPage.fillCreateOrEditInput('comment', '')\n\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n\n    await detailsPage.verifyItemDetailsValue('Email or username', 'Test User EDITED')\n    await detailsPage.verifyItemDetailsValue('Password', 'Test Pass EDITED')\n\n    await createOrEditPage.verifyDetailsWebsiteCount(0)\n    await createOrEditPage.verifyDetailsCommentCount(0)\n  })\n\n  test('Empty fields are not displayed in view mode', async () => {\n    qase.id(2036)\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('username', '')\n    await createOrEditPage.fillCreateOrEditInput('password', '')\n\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await mainPage.openElementDetails()\n\n    await detailsPage.verifyDetailsNoItems()\n  })\n\n  test('Verify that the \"Login\" item is removed after deletion', async () => {\n    qase.id(2037)\n    await utilities.deleteAllElements()\n    await mainPage.verifyElementIsNotVisible()\n  })\n\n  test('Verify that the empty collection view is displayed on the Home screen after deleting the last item', async () => {\n    qase.id(2037)\n    await sideMenuPage.selectSideBarCategory('all')\n    await expect(mainPage.emptyCollectionView).toBeVisible()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/02-CreditCard/creatingCreditCardItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Creating Credit Card Item', async () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await utilities.deleteAllElements()\n    await sideMenuPage.selectSideBarCategory('creditCard')\n    await mainPage.clickAddItem('creditCard')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async ({ app }) => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Creating the \"Credit Card\" item', async ({ page }) => {\n    qase.id(2115)\n    await createOrEditPage.fillCreateOrEditInput('creditcard-title', 'Credit Card Title')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-name', 'John')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-number', '1231 2312')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-expiredate', '12 12')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-securitycode', '111')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-pincode', '5555')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-comment', 'Credit Card Note')\n    await createOrEditPage.clickOnCreateOrEditButton('creditcard-save')\n  })\n\n  test('Viewing created item. Verify item details', async ({ page }) => {\n    qase.id(2116)\n    await mainPage.verifyElementTitle('Credit Card Title')\n    await mainPage.openElementDetails()\n\n    await detailsPage.verifyItemDetailsValue('Name on card', 'John')\n    await detailsPage.verifyItemDetailsValue('Number on card', '1231 2312')\n    await detailsPage.verifyItemDetailsValue('Date of expire', '12 12')\n    await detailsPage.verifyItemDetailsValue('Security code', '111')\n    await detailsPage.verifyItemDetailsValue('Pin code', '5555')\n    await detailsPage.verifyItemDetailsValue('Comment', 'Credit Card Note')\n  })\n\n  test('Password visibility icon displays/hides value', async ({ page }) => {\n    qase.id(2117)\n    await mainPage.verifyElementTitle('Credit Card Title')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyPasswordFieldType('card-details-multi-slot-input-slot-3', 'password')\n    await detailsPage.clickPasswordToggle('card-details-multi-slot-input-slot-3')\n    await detailsPage.verifyPasswordFieldType('card-details-multi-slot-input-slot-3', 'text')\n  })\n\n  test('Add via Favorite icon', async ({ page }) => {\n    qase.id(2120)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.elementCheckBox(false)\n    await mainPage.clickOnFirstElement()\n    await mainPage.elementCheckBox(true)\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via Favorite icon', async ({ page }) => {\n    qase.id(2121)\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.clickOnFirstElement()\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  test('Add via More options', async ({ page }) => {\n    qase.id(2122)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickMarkAsFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via More options', async ({ page }) => {\n    qase.id(2123)\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickRemoveFromFavoritesButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  // test('Add Custom Note', async ({ page }) => {\n  //   qase.id(2124)\n  //   await mainPage.verifyElementTitle('Credit Card Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await createOrEditPage.clickCreateCustomItem()\n  //   await createOrEditPage.clickCustomItemOptionNote()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n  //   await createOrEditPage.fillCustomNoteInput()\n\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  // test('Delete Note field', async ({ page }) => {\n  //   qase.id(2125)\n  //   await mainPage.verifyElementTitle('Credit Card Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(2)\n  //   await createOrEditPage.deleteCustomNote()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(1)\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  test('Close via Cross icon', async ({ page }) => {\n    qase.id(2126)\n    await mainPage.verifyElementTitle('Credit Card Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await detailsPage.clickElementItemCloseButton()\n    await mainPage.verifyElementTitle('Credit Card Title')\n  })\n\n  test('View uploaded file in Edit mode', async ({ page }) => {\n    qase.id(2127)\n    await detailsPage.editElement()\n    await createOrEditPage.clickOnAttachment()\n    await createOrEditPage.uploadFile()\n    await createOrEditPage.verifyUploadedFileIsVisible()\n    await createOrEditPage.clickOnUploadedFile()\n\n    await createOrEditPage.clickOnCreateOrEditButton('creditcard-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n\n    await detailsPage.verifyUploadedFileIsVisible()\n\n    await detailsPage.clickOnUploadedFile()\n    await detailsPage.verifyUploadedImageIsVisible()\n\n    await createOrEditPage.clickElementItemCloseButton()\n  })\n\n  test('Empty fields not displayed in view mode', async ({ page }) => {\n    qase.id(2129)\n    await mainPage.verifyElementTitle('Credit Card Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('creditcard-name', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-number', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-expiredate', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-securitycode', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-pincode', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-comment', '')\n    await createOrEditPage.clickOnDeleteAttachmentButton()\n\n    await createOrEditPage.clickOnCreateOrEditButton('creditcard-save')\n    await mainPage.openElementDetails()\n\n    await detailsPage.verifyDetailsNoItems()\n\n    await test.step('CLOSE DETAILS', async () => {\n      await mainPage.clickDetailsCloseButton()\n    })\n  })\n})\n"
  },
  {
    "path": "e2e/specs/02-CreditCard/editingDeleteCreditCardItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Editing/Deleting Credit Card Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await utilities.deleteAllElements()\n    await sideMenuPage.selectSideBarCategory('creditCard')\n    await mainPage.clickAddItem('creditCard')\n\n    await createOrEditPage.fillCreateOrEditInput('creditcard-title', 'Credit Card Title')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-name', 'John')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-number', '12312312')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-expiredate', '1212')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-securitycode', '111')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-pincode', '111')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-comment', 'Credit Card Note')\n    await createOrEditPage.clickOnCreateOrEditButton('creditcard-save')\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.verifyElementTitle('Credit Card Title')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async ({ app }) => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that edited \"Credit Card\" item fields are saved correctly', async () => {\n    qase.id(2130)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('creditcard-name', 'John EDITED')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-number', '99999999')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-expiredate', '0101')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-securitycode', '222')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-pincode', '222')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-comment', 'Credit Card Note EDITED')\n    await createOrEditPage.clickOnCreateOrEditButton('creditcard-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.verifyElementTitle('Credit Card Title')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyItemDetailsValue('Name on card', 'John EDITED')\n    await detailsPage.verifyItemDetailsValue('Number on card', '9999 9999')\n    await detailsPage.verifyCustomNoteText('Credit Card Note EDITED')\n  })\n\n  test('Empty fields are not displayed in view mode', async ({ page }) => {\n    qase.id(2131)\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('creditcard-name', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-number', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-expiredate', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-securitycode', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-pincode', '')\n    await createOrEditPage.fillCreateOrEditInput('creditcard-comment', '')\n\n    await createOrEditPage.clickOnCreateOrEditButton('creditcard-save')\n    await mainPage.openElementDetails()\n\n    await detailsPage.verifyDetailsNoItems()\n\n    await test.step('CLOSE DETAILS', async () => {\n      await mainPage.clickDetailsCloseButton()\n    })\n  })\n\n  test('Verify that the \"Credit Card\" item is removed after deletion', async () => {\n    qase.id(2133)\n    await utilities.deleteAllElements()\n    await mainPage.verifyElementIsNotVisible()\n  })\n\n  test('Verify that the empty collection view is displayed on the Home screen after deleting the last item', async () => {\n    qase.id(2134)\n    await sideMenuPage.selectSideBarCategory('all')\n    await expect(mainPage.emptyCollectionView).toBeVisible()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/03-WiFi/creatingWiFiItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Creating WiFi Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('wifiPassword')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('wifiPassword')\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async ({ }) => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Creating the \"WiFi\" item', async ({ page }) => {\n    qase.id(2135)\n    await createOrEditPage.fillCreateOrEditInput('wifi-name', 'WiFi Title')\n    await createOrEditPage.fillCreateOrEditInput('wifi-password', 'WiFi Pass')\n    await createOrEditPage.fillCreateOrEditInput('wifi-comment', 'WiFi Note')\n    await createOrEditPage.clickOnCreateOrEditButton('wifi-save')\n  })\n\n  test('Viewing created item. Verify item details', async ({ page }) => {\n    qase.id(2136)\n    await mainPage.openElementDetails()\n    await detailsPage.verifyTitle('WiFi Title')\n    await detailsPage.verifyItemDetailsValue('Wi-Fi Password', 'WiFi Pass')\n    await detailsPage.verifyItemDetailsValue('Add comment', 'WiFi Note')\n  })\n\n  test('Password visibility icon displays/hides value', async ({ page }) => {\n    qase.id(2137)\n    await mainPage.openElementDetails()\n    await mainPage.verifyElementTitle('WiFi Title')\n    await createOrEditPage.verifyPasswordType('password')\n    await createOrEditPage.clickShowHidePasswordButtonFirst()\n    await createOrEditPage.verifyPasswordType('text')\n  })\n\n  test('Add via Favorite icon', async ({ page }) => {\n    qase.id(2140)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.elementCheckBox(false)\n    await mainPage.clickOnFirstElement()\n    await mainPage.elementCheckBox(true)\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via Favorite icon', async ({ page }) => {\n    qase.id(2141)\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.clickOnFirstElement()\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  test('Add via More options', async ({ page }) => {\n    qase.id(2142)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickMarkAsFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via More options', async ({ page }) => {\n    qase.id(2143)\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickRemoveFromFavoritesButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  // test('Add Custom Note', async ({ page }) => {\n  //   qase.id(2144)\n  //   await mainPage.verifyElementTitle('WiFi Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await createOrEditPage.clickCreateCustomItem()\n  //   await createOrEditPage.clickCustomItemOptionNote()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n  //   await createOrEditPage.fillCustomNoteInput()\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  // test('Delete Note field', async ({ page }) => {\n  //   qase.id(2145)\n  //   await mainPage.verifyElementTitle('WiFi Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(2)\n  //   await createOrEditPage.deleteCustomNote()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(1)\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  test('Close via Cross icon', async ({ page }) => {\n    qase.id(2146)\n    await mainPage.verifyElementTitle('WiFi Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await detailsPage.clickElementItemCloseButton()\n    await mainPage.verifyElementTitle('WiFi Title')\n  })\n\n  test('Empty fields not displayed in view mode', async ({ page }) => {\n    qase.id(2147)\n    await mainPage.verifyElementTitle('WiFi Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('wifi-comment', '')\n\n    await createOrEditPage.clickOnCreateOrEditButton('wifi-save')\n    await mainPage.openElementDetails()\n\n    await detailsPage.verifyTitle('WiFi Title')\n\n    await detailsPage.verifyItemDetailsValueIsNotVisible('Add comment')\n    await mainPage.clickDetailsCloseButton()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/03-WiFi/editingDeletingWiFiItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Editing/Deleting WiFi Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('wifiPassword')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('wifiPassword')\n\n    await createOrEditPage.fillCreateOrEditInput('wifi-name', 'WiFi Title')\n    await createOrEditPage.fillCreateOrEditInput('wifi-password', 'WiFi Pass')\n    await createOrEditPage.fillCreateOrEditInput('wifi-comment', 'WiFi Note')\n    await createOrEditPage.clickOnCreateOrEditButton('wifi-save')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async ({ }) => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that edited \"WiFi\" item fields are saved correctly', async ({ page }) => {\n    qase.id(2148)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('wifi-name', 'WiFi Title Edited')\n    await createOrEditPage.fillCreateOrEditInput('wifi-comment', 'WiFi Note Edited')\n    await createOrEditPage.clickOnCreateOrEditButton('wifi-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.verifyElementTitle('WiFi Title Edited')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyItemDetailsValue('Add comment', 'WiFi Note Edited')\n  })\n\n  test('Empty fields are not displayed in view mode', async () => {\n    qase.id(2150)\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('wifi-comment', '')\n    await createOrEditPage.clickOnCreateOrEditButton('wifi-save')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyItemDetailsValueIsNotVisible('Add comment')\n    await mainPage.clickDetailsCloseButton()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/04-Identity/creatingIdentityItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Creating Identity Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('identity')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('identity')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Creating the \"Identity\" item', async ({ page }) => {\n    qase.id(2151)\n    await createOrEditPage.fillCreateOrEditInput('identity-title', 'Identity Title')\n    await createOrEditPage.fillCreateOrEditInput('identity-fullname', 'Identity Fullname')\n    await createOrEditPage.fillCreateOrEditInput('identity-email', 'identitytest@mail.co')\n    await createOrEditPage.fillCreateOrEditInput('identity-phone', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-address', 'Identity Address')\n    await createOrEditPage.fillCreateOrEditInput('identity-zip', 'Identity Zip')\n    await createOrEditPage.fillCreateOrEditInput('identity-city', 'Identity City')\n    await createOrEditPage.fillCreateOrEditInput('identity-region', 'Identity Region')\n    await createOrEditPage.fillCreateOrEditInput('identity-country', 'Identity Country')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportfullname', 'Identity Passport Fullname')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnumber', 'Identity Passport Number')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportissuingcountry', 'Identity Issuing Country')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdateofissue', 'Identity Date of Issue')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportexpirydate', '01/01/2020')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnationality', '01/01/2025')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdob', '01/01/1990')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportgender', 'Identity Gender')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardnumber', 'Identity ID Card Number')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcarddateofissue', '01/01/2025')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardexpirydate', '01/01/2030')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardissuingcountry', 'USA')\n    await createOrEditPage.fillCreateOrEditInput('identity-comment', 'Identity Driving License Note')\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Viewing created item. Verify item details', async ({ page }) => {\n    qase.id(2152)\n    await mainPage.openElementDetails()\n    await detailsPage.verifyIdentityDetailsValue('fullname', 'Identity Fullname')\n    await detailsPage.verifyIdentityDetailsValue('email', 'identitytest@mail.co')\n    await detailsPage.verifyIdentityDetailsValue('address', 'Identity Address')\n    await detailsPage.verifyIdentityDetailsValue('zip', 'Identity Zip')\n    await detailsPage.verifyIdentityDetailsValue('city', 'Identity City')\n    await detailsPage.verifyIdentityDetailsValue('region', 'Identity Region')\n    await detailsPage.verifyIdentityDetailsValue('country', 'Identity Country')\n    await detailsPage.verifyIdentityDetailsValue('passportfullname', 'Identity Passport Fullname')\n    await detailsPage.verifyIdentityDetailsValue('passportnumber', 'Identity Passport Number')\n    await detailsPage.verifyIdentityDetailsValue('passportissuingcountry', 'Identity Issuing Country')\n    await detailsPage.verifyIdentityDetailsValue('passportdateofissue', 'Identity Date of Issue')\n    await detailsPage.verifyIdentityDetailsValue('passportexpirydate', '01/01/2020')\n    await detailsPage.verifyIdentityDetailsValue('passportnationality', '01/01/2025')\n    await detailsPage.verifyIdentityDetailsValue('passportdob', '01/01/1990')\n    await detailsPage.verifyIdentityDetailsValue('passportgender', 'Identity Gender')\n    await detailsPage.verifyIdentityDetailsValue('idcardnumber', 'Identity ID Card Number')\n    await detailsPage.verifyIdentityDetailsValue('idcarddateofissue', '01/01/2025')\n    await detailsPage.verifyIdentityDetailsValue('idcardexpirydate', '01/01/2030')\n    await detailsPage.verifyIdentityDetailsValue('idcardissuingcountry', 'USA')\n    await detailsPage.verifyIdentityDetailsValue('note', 'Identity Driving License Note')\n  })\n\n  test('Add via Favorite icon', async ({ page }) => {\n    qase.id(2156)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.elementCheckBox(false)\n    await mainPage.clickOnFirstElement()\n    await mainPage.elementCheckBox(true)\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via Favorite icon', async ({ page }) => {\n    qase.id(2157)\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.clickOnFirstElement()\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  test('Add via More options', async ({ page }) => {\n    qase.id(2158)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickMarkAsFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via More options', async ({ page }) => {\n    qase.id(2159)\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickRemoveFromFavoritesButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  // test('Add Custom Note', async ({ page }) => {\n  //   qase.id(2160)\n  //   await mainPage.verifyElementTitle('Identity Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await createOrEditPage.clickCreateCustomItem()\n  //   await createOrEditPage.clickCustomItemOptionNote()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n  //   await createOrEditPage.fillCustomNoteInput()\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  // test('Delete Note field', async ({ page }) => {\n  //   qase.id(2161)\n  //   await mainPage.verifyElementTitle('Identity Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(2)\n  //   await createOrEditPage.deleteCustomNote()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(1)\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  test('Close via Cross icon', async ({ page }) => {\n    qase.id(2162)\n    await mainPage.verifyElementTitle('Identity Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await detailsPage.clickElementItemCloseButton()\n    await mainPage.verifyElementTitle('Identity Title')\n  })\n\n  test('View uploaded file in Edit mode', async ({ page }) => {\n    qase.id(2163)\n    await detailsPage.editElement()\n    await createOrEditPage.clickOnAttachment()\n    await createOrEditPage.uploadFile()\n    await createOrEditPage.verifyUploadedFileIsVisible()\n    await createOrEditPage.clickOnUploadedFile()\n\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await detailsPage.verifyUploadedFileIsVisible()\n\n    await detailsPage.clickOnUploadedFile()\n    await detailsPage.verifyUploadedImageIsVisible()\n\n    await createOrEditPage.clickElementItemCloseButton()\n  })\n\n  test('Empty fields not displayed in view mode', async ({ page }) => {\n    qase.id(2165)\n    await mainPage.verifyElementTitle('Identity Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n\n    await createOrEditPage.fillCreateOrEditInput('identity-fullname', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-email', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-phone', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-address', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-zip', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-city', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-region', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-country', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportfullname', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnumber', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportissuingcountry', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdateofissue', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportexpirydate', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnationality', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdob', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportgender', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardnumber', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcarddateofissue', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardexpirydate', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardissuingcountry', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-comment', '')\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n\n    await mainPage.openElementDetails()\n    await detailsPage.verifyDetailsNoItems()\n\n    await mainPage.clickDetailsCloseButton()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/04-Identity/editingDeletingIdentityItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Editing/Deleting Identity Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('identity')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('identity')\n\n    await createOrEditPage.fillCreateOrEditInput('identity-title', 'Identity Title')\n    await createOrEditPage.fillCreateOrEditInput('identity-fullname', 'Identity Fullname')\n    await createOrEditPage.fillCreateOrEditInput('identity-email', 'identitytest@mail.co')\n    await createOrEditPage.fillCreateOrEditInput('identity-phone', '')\n    await createOrEditPage.fillCreateOrEditInput('identity-address', 'Identity Address')\n    await createOrEditPage.fillCreateOrEditInput('identity-zip', 'Identity Zip')\n    await createOrEditPage.fillCreateOrEditInput('identity-city', 'Identity City')\n    await createOrEditPage.fillCreateOrEditInput('identity-region', 'Identity Region')\n    await createOrEditPage.fillCreateOrEditInput('identity-country', 'Identity Country')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportfullname', 'Identity Passport Fullname')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnumber', 'Identity Passport Number')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportissuingcountry', 'Identity Issuing Country')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdateofissue', 'Identity Date of Issue')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportexpirydate', '01/01/2020')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnationality', '01/01/2025')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdob', '01/01/1990')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportgender', 'Identity Gender')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardnumber', 'Identity ID Card Number')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcarddateofissue', '01/01/2025')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardexpirydate', '01/01/2030')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardissuingcountry', 'USA')\n    await createOrEditPage.fillCreateOrEditInput('identity-comment', 'Identity Driving License Note')\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that edited \"Identity\" item fields are saved correctly', async () => {\n    qase.id(2166)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('identity-title', 'Identity Title Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-fullname', 'Identity Fullname Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-email', 'identitytestedited@mail.co')\n    await createOrEditPage.fillCreateOrEditInput('identity-phone', 'Phone Number Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-address', 'Identity Address Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-zip', 'Identity Zip Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-city', 'Identity City Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-region', 'Identity Region Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-country', 'Identity Country Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportfullname', 'Identity Passport Fullname Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnumber', 'Identity Passport Number Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportissuingcountry', 'Identity Issuing Country Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdateofissue', 'Identity Date of Issue Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportexpirydate', '01/01/2022')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportnationality', '01/01/2027')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportdob', '01/01/1991')\n    await createOrEditPage.fillCreateOrEditInput('identity-passportgender', 'Identity Gender Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardnumber', 'Identity ID Card Number Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcarddateofissue', '01/01/2026')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardexpirydate', '01/01/2031')\n    await createOrEditPage.fillCreateOrEditInput('identity-idcardissuingcountry', 'USA Edited')\n    await createOrEditPage.fillCreateOrEditInput('identity-comment', 'Identity Driving License Note Edited')\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.openElementDetails()\n    await detailsPage.verifyIdentityDetailsValue('fullname', 'Identity Fullname Edited')\n    await detailsPage.verifyIdentityDetailsValue('email', 'identitytestedited@mail.co')\n    await detailsPage.verifyIdentityDetailsValue('address', 'Identity Address Edited')\n    await detailsPage.verifyIdentityDetailsValue('zip', 'Identity Zip Edited')\n    await detailsPage.verifyIdentityDetailsValue('city', 'Identity City Edited')\n    await detailsPage.verifyIdentityDetailsValue('region', 'Identity Region Edited')\n    await detailsPage.verifyIdentityDetailsValue('country', 'Identity Country Edited')\n    await detailsPage.verifyIdentityDetailsValue('passportfullname', 'Identity Passport Fullname Edited')\n    await detailsPage.verifyIdentityDetailsValue('passportnumber', 'Identity Passport Number Edited')\n    await detailsPage.verifyIdentityDetailsValue('passportissuingcountry', 'Identity Issuing Country Edited')\n    await detailsPage.verifyIdentityDetailsValue('passportdateofissue', 'Identity Date of Issue Edited')\n    await detailsPage.verifyIdentityDetailsValue('passportexpirydate', '01/01/2022')\n    await detailsPage.verifyIdentityDetailsValue('passportnationality', '01/01/2027')\n    await detailsPage.verifyIdentityDetailsValue('passportdob', '01/01/1991')\n    await detailsPage.verifyIdentityDetailsValue('passportgender', 'Identity Gender Edited')\n    await detailsPage.verifyIdentityDetailsValue('idcardnumber', 'Identity ID Card Number Edited')\n    await detailsPage.verifyIdentityDetailsValue('idcarddateofissue', '01/01/2026')\n    await detailsPage.verifyIdentityDetailsValue('idcardexpirydate', '01/01/2031')\n    await detailsPage.verifyIdentityDetailsValue('idcardissuingcountry', 'USA Edited')\n    await detailsPage.verifyIdentityDetailsValue('note', 'Identity Driving License Note Edited')\n\n  })\n\n  test('Verify that the \"Identity\" item is removed after deletion', async () => {\n    qase.id(2168)\n    await utilities.deleteAllElements()\n    await mainPage.verifyElementIsNotVisible()\n  })\n\n  test('Verify that the empty collection view is displayed on the Home screen after deleting the last item', async () => {\n    qase.id(2169)\n    await sideMenuPage.selectSideBarCategory('all')\n    await expect(mainPage.emptyCollectionView).toBeVisible()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/05-PassPhrase/creatingPassPhraseItem.test.js",
    "content": "import clipboard from 'clipboardy'\nimport { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Creating PassPhrase Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('passPhrase')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('passPhrase')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Creating the \"PassPhrase\" item', async ({ page }) => {\n    qase.id(2209)\n    await createOrEditPage.fillCreateOrEditInput('passphrase-title', 'PassPhrase Title')\n\n    await clipboard.write(\n      'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12'\n    )\n    await createOrEditPage.clickOnPasteFromClipboard()\n    await createOrEditPage.clickOnCreateOrEditButton('passphrase-save')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Viewing created item. Verify item details', async ({ page }) => {\n    qase.id(2210)\n    await mainPage.verifyElementTitle('PassPhrase Title')\n    await mainPage.openElementDetails()\n    await detailsPage.verifyAllRecoveryPhraseWords([\n      'word1',\n      'word2',\n      'word3',\n      'word4',\n      'word5',\n      'word6',\n      'word7',\n      'word8',\n      'word9',\n      'word10',\n      'word11',\n      'word12'\n    ])\n  })\n\n  test('Add via Favorite icon', async ({ page }) => {\n    qase.id(2213)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.elementCheckBox(false)\n    await mainPage.clickOnFirstElement()\n    await mainPage.elementCheckBox(true)\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via Favorite icon', async ({ page }) => {\n    qase.id(2214)\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.clickOnFirstElement()\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  test('Add via More options', async ({ page }) => {\n    qase.id(2215)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickMarkAsFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via More options', async ({ page }) => {\n    qase.id(2216)\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickRemoveFromFavoritesButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  // test('Add Custom Note', async ({ page }) => {\n  //   qase.id(2217);\n  //   await mainPage.verifyElementTitle('PassPhrase Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await createOrEditPage.clickCreateCustomItem()\n  //   await createOrEditPage.clickCustomItemOptionNote()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n  //   await createOrEditPage.fillCustomNoteInput()\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  // test('Delete Note field', async ({ page }) => {\n  //   qase.id(2218);\n  //   await mainPage.verifyElementTitle('PassPhrase Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(2)\n  //   await createOrEditPage.deleteCustomNote()\n  //   await expect(createOrEditPage.customNoteInput_first).toHaveCount(1)\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  test('Close via Cross icon', async ({ page }) => {\n    qase.id(2219)\n    await mainPage.verifyElementTitle('PassPhrase Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await detailsPage.clickElementItemCloseButton()\n    await mainPage.verifyElementTitle('PassPhrase Title')\n  })\n})\n"
  },
  {
    "path": "e2e/specs/05-PassPhrase/editingDeletingPassPhraseItem.test.js",
    "content": "import clipboard from 'clipboardy'\nimport { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Editing/Deleting PassPhrase Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('passPhrase')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('passPhrase')\n\n    await createOrEditPage.fillCreateOrEditInput('passphrase-title', 'PassPhrase Title')\n    await clipboard.write(\n      'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12'\n    )\n    await createOrEditPage.clickOnPasteFromClipboard()\n    await createOrEditPage.clickOnCreateOrEditButton('passphrase-save')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that edited \"PassPhrase\" item fields are saved correctly', async () => {\n    qase.id(2658)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('passphrase-title', 'PassPhrase Title Edited')\n\n    await clipboard.write(testData.passphrase.text24)\n    await createOrEditPage.clickOnPasteFromClipboard()\n    await createOrEditPage.clickOnCreateOrEditButton('passphrase-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.openElementDetails()\n\n    await detailsPage.verifyTitle('PassPhrase Title Edited')\n    await detailsPage.verifyAllRecoveryPhraseWords([\n      'word1',\n      'word2',\n      'word3',\n      'word4',\n      'word5',\n      'word6',\n      'word7',\n      'word8',\n      'word9',\n      'word10',\n      'word11',\n      'word12',\n      'word13',\n      'word14',\n      'word15',\n      'word16',\n      'word17',\n      'word18',\n      'word19',\n      'word20',\n      'word21',\n      'word22',\n      'word23',\n      'word24'\n    ])\n  })\n\n  test('Verify that the \"PassPhrase\" item is removed after deletion', async () => {\n    qase.id(2221)\n    await utilities.deleteAllElements()\n    await mainPage.verifyElementIsNotVisible()\n  })\n\n  test('Verify that the empty collection view is displayed on the Home screen after deleting the last item', async () => {\n    qase.id(2222)\n    await sideMenuPage.selectSideBarCategory('all')\n    await expect(mainPage.emptyCollectionView).toBeVisible()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/06-Note/creatingNoteItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Creating Note Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await utilities.deleteAllElements()\n    await sideMenuPage.selectSideBarCategory('note')\n    await mainPage.clickAddItem('note')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Creating the \"Note\" item', async ({ page }) => {\n    qase.id(2248)\n    await createOrEditPage.fillCreateOrEditInput('note-title', 'Note Title')\n    await createOrEditPage.fillCreateOrEditInput('note-comment', 'Test Note Text')\n    await createOrEditPage.clickOnCreateOrEditButton('note-save')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Viewing created item. Verify item details', async ({ page }) => {\n    qase.id(2249)\n    await mainPage.openElementDetails()\n    await detailsPage.verifyTitle('Note Title')\n    await detailsPage.verifyNoteText('Test Note Text')\n  })\n\n  test('Add via Favorite icon', async ({ page }) => {\n    qase.id(2252)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.elementCheckBox(false)\n    await mainPage.clickOnFirstElement()\n    await mainPage.elementCheckBox(true)\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via Favorite icon', async ({ page }) => {\n    qase.id(2253)\n    await mainPage.clickMainViewHeaderSelect()\n    await mainPage.clickOnFirstElement()\n    await mainPage.clickOnMainViewFavoriteIcon()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  test('Add via More options', async ({ page }) => {\n    qase.id(2254)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickMarkAsFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via More options', async ({ page }) => {\n    qase.id(2255)\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickRemoveFromFavoritesButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  // test('Add Custom Note', async ({ page }) => {\n  // qase.id(2256);\n  //   await mainPage.verifyElementTitle('Note Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await createOrEditPage.clickCreateCustomItem()\n  //   await createOrEditPage.clickCustomItemOptionNote()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n  //   await createOrEditPage.fillCustomNoteInput()\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n  // })\n\n  // test('Delete Note field', async ({ page }) => {\n  // qase.id(2257);\n  //   await mainPage.verifyElementTitle('Note Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(2)\n  //   await createOrEditPage.deleteCustomNote()\n  //   await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await page.waitForTimeout(testData.timeouts.action)\n  //   await mainPage.clickDetailsCloseButton()\n\n  // })\n\n  test('Close via Cross icon', async ({ page }) => {\n    qase.id(2258)\n    await mainPage.verifyElementTitle('Note Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await detailsPage.clickElementItemCloseButton()\n    await mainPage.verifyElementTitle('Note Title')\n  })\n\n  test('View uploaded file in Edit mode', async ({ page }) => {\n    qase.id(2259)\n    await detailsPage.editElement()\n    await createOrEditPage.clickOnAttachment()\n    await createOrEditPage.uploadFile()\n    await createOrEditPage.verifyUploadedFileIsVisible()\n    await createOrEditPage.clickOnUploadedFile()\n\n    await createOrEditPage.clickOnCreateOrEditButton('note-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n\n    await detailsPage.verifyUploadedFileIsVisible()\n\n    await detailsPage.clickOnUploadedFile()\n    await detailsPage.verifyUploadedImageIsVisible()\n\n    await createOrEditPage.clickElementItemCloseButton()\n  })\n\n  test('Empty fields not displayed in view mode', async ({ page }) => {\n    qase.id(2261)\n    await mainPage.verifyElementTitle('Note Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('note-comment', '')\n    await createOrEditPage.clickOnCreateOrEditButton('note-save')\n    await detailsPage.verifyItemDetailsValueIsNotVisible('Add comment')\n  })\n})\n"
  },
  {
    "path": "e2e/specs/06-Note/editingDeleteNoteItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Editing/Deleting Note Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('note')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('note')\n\n    await createOrEditPage.fillCreateOrEditInput('note-title', 'Note Title')\n    await createOrEditPage.fillCreateOrEditInput('note-comment', 'Test Note Text')\n    await createOrEditPage.clickOnCreateOrEditButton('note-save')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that edited \"Note\" item fields are saved correctly', async () => {\n    qase.id(2262)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput('note-title', 'EDITED Note Title')\n    await createOrEditPage.fillCreateOrEditInput('note-comment', 'EDITED Test Note Text')\n    await createOrEditPage.clickOnCreateOrEditButton('note-save')\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.openElementDetails()\n    await detailsPage.verifyTitle('EDITED Note Title')\n    await detailsPage.verifyNoteText('EDITED Test Note Text')\n  })\n\n  test('Verify that the \"Login\" item is removed after deletion', async () => {\n    qase.id(2265)\n    await utilities.deleteAllElements()\n    await mainPage.verifyElementIsNotVisible()\n  })\n\n  test('Verify that the empty collection view is displayed on the Home screen after deleting the last item', async () => {\n    qase.id(2266)\n    await sideMenuPage.selectSideBarCategory('all')\n    await expect(mainPage.emptyCollectionView).toBeVisible()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/07-CustomField/creatingCustomFieldItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Creating Custom Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('custom')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('custom')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Creating the \"Custom\" item', async ({ page }) => {\n    qase.id(2546)\n    await createOrEditPage.fillCreateOrEditInput('custom-title', 'Custom Field Title')\n    await createOrEditPage.clickOnCreateOrEditButton('custom-save')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Viewing created item. Verify item details', async ({ page }) => {\n    qase.id(2547)\n    await mainPage.openElementDetails()\n    await detailsPage.verifyTitle('Custom Field Title')\n  })\n\n  test('Add via Favorite icon', async ({ page }) => {\n    qase.id(2250)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.verifyElementTitle('Custom Field Title')\n    await mainPage.openElementDetails()\n    await detailsPage.clickFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via Favorite icon', async ({ page }) => {\n    qase.id(2251)\n    await mainPage.openElementDetails()\n    await detailsPage.clickFavoriteButton()\n  })\n\n  test('Add via More options', async ({ page }) => {\n    qase.id(2252)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickMarkAsFavoriteButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('1 items')\n  })\n\n  test('Remove via More options', async ({ page }) => {\n    qase.id(2253)\n    await mainPage.openElementDetails()\n    await detailsPage.openItemBarThreeDotsDropdownMenu()\n    await detailsPage.clickRemoveFromFavoritesButton()\n    await sideMenuPage.verifySideBarFavoritesFolder('0 items')\n  })\n\n  test('Add Custom Note', async ({ page }) => {\n    qase.id(2254)\n    await mainPage.verifyElementTitle('Custom Field Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await expect(createOrEditPage.customNoteInput).toHaveCount(1)\n    await createOrEditPage.fillCustomNoteInput()\n    await createOrEditPage.clickOnCreateOrEditButton('custom-save')\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickDetailsCloseButton()\n  })\n\n  test('Delete Note field', async ({ page }) => {\n    qase.id(2255)\n    await mainPage.verifyElementTitle('Custom Field Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await expect(createOrEditPage.customNoteInput_first).toHaveCount(1)\n    await createOrEditPage.deleteCustomNote()\n    await expect(createOrEditPage.customNoteInput_first).toHaveCount(1)\n    await createOrEditPage.clickOnCreateOrEditButton('custom-save')\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickDetailsCloseButton()\n  })\n\n  test('Close via Cross icon', async ({ page }) => {\n    qase.id(2256)\n    await mainPage.verifyElementTitle('Custom Field Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await detailsPage.clickElementItemCloseButton()\n    await mainPage.verifyElementTitle('Custom Field Title')\n  })\n\n  test('View uploaded file in Edit mode', async ({ page }) => {\n    qase.id(2257)\n    await mainPage.verifyElementTitle('Custom Field Title')\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.clickOnAttachment()\n    await createOrEditPage.uploadFile()\n    await createOrEditPage.verifyUploadedFileIsVisible()\n    await createOrEditPage.clickOnUploadedFile()\n    await createOrEditPage.clickOnCreateOrEditButton('custom-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await detailsPage.verifyUploadedFileIsVisible()\n\n    await detailsPage.clickOnUploadedFile()\n    await detailsPage.verifyUploadedImageIsVisible()\n\n    await createOrEditPage.clickElementItemCloseButton()\n    await mainPage.clickDetailsCloseButton()\n  })\n\n  // test('Empty fields not displayed in view mode', async ({ page }) => {\n  // qase.id(2259);\n  //   await mainPage.verifyElementTitle('Custom Field Title')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.editElement()\n  //   await createOrEditPage.fillCreateOrEditTextArea('note', '')\n  //   await createOrEditPage.clickOnCreateOrEditButton('save')\n  //   await mainPage.openElementDetails()\n  //   await detailsPage.verifyItemDetailsValueIsNotVisible('Add comment')\n\n  //   await mainPage.clickDetailsCloseButton()\n\n  // })\n})\n"
  },
  {
    "path": "e2e/specs/07-CustomField/editingDeleteCustomFieldItem.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Editing/Deleting Custom Item', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('custom')\n    await utilities.deleteAllElements()\n    await mainPage.clickAddItem('custom')\n\n    await createOrEditPage.fillCreateOrEditInput('custom-title', 'Custom Field Title')\n    await createOrEditPage.fillCustomNoteInput()\n\n    await createOrEditPage.clickOnCreateOrEditButton('custom-save')\n\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that edited \"Custom\" item fields are saved correctly', async () => {\n    qase.id(2572)\n    await mainPage.openElementDetails()\n    await detailsPage.editElement()\n    await createOrEditPage.fillCreateOrEditInput(\n      'custom-title',\n      'EDITED Custom Field Title'\n    )\n    await createOrEditPage.fillCustomNoteInput()\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await createOrEditPage.clickOnCreateOrEditButton('custom-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.openElementDetails()\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.verifyElementTitle('EDITED Custom Field Title')\n    await detailsPage.verifyItemDetailsValue('Other Field', 'Custom Note')\n    // Verify Note\n  })\n\n  test('Verify that custom \"Note\" fields are not saved in the edited \"Custom\" item', async () => {\n    qase.id(2573)\n    await detailsPage.editElement()\n    await createOrEditPage.deleteCustomNote()\n    await createOrEditPage.clickOnCreateOrEditButton('custom-save')\n    await detailsPage.verifyItemDetailsValueIsNotVisible('Other Field')\n  })\n\n  test('Verify that the \"Custom Field\" item is removed after deletion', async () => {\n    qase.id(2574)\n    await utilities.deleteAllElements()\n    await mainPage.verifyElementIsNotVisible()\n  })\n\n  test('Verify that the empty collection view is displayed on the Home screen after deleting the last item', async () => {\n    qase.id(2575)\n    await sideMenuPage.selectSideBarCategory('all')\n    await expect(mainPage.emptyCollectionView).toBeVisible()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/08-MultipleSelection/multipleSelection.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Multiple Selection', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await utilities.deleteAllElements()\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that selected items in one tab are deleted on \"Delete\" click', async ({\n    page\n  }) => {\n    qase.id(2580)\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.clickAddItem('login')\n    await createOrEditPage.fillCreateOrEditInput('title', 'AAA')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('all')\n\n    await mainPage.clickMultipleSelectiontButton()\n    await mainPage.clickElementByPosition(0, 'AAA')\n\n    await mainPage.clickMultipleSelectDeletetButton()\n    await mainPage.clickYesButton()\n  })\n\n  test('Verify that selected items across tabs are deleted on \"Delete\" click', async ({\n    page\n  }) => {\n    qase.id(2581)\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.clickAddItem('login')\n    await createOrEditPage.fillCreateOrEditInput('title', 'AAA')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('identity')\n    await mainPage.clickAddItem('identity')\n    await createOrEditPage.fillCreateOrEditInput('identity-title', 'BBB')\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.clickMultipleSelectiontButton()\n    await mainPage.clickElementByPosition(0, 'AAA')\n    await mainPage.clickMultipleSelectDeletetButton()\n    await mainPage.clickYesButton()\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('identity')\n    await mainPage.clickMultipleSelectiontButton()\n    await mainPage.clickElementByPosition(0, 'BBB')\n    await mainPage.clickMultipleSelectDeletetButton()\n    await mainPage.clickYesButton()\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Verify that \"Multiple Selection\" button is hidden when no items exist', async ({\n    page\n  }) => {\n    qase.id(2582)\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.verifyEmptyCollection()\n  })\n\n  test('Verify that \"Multiple Selection\" mode can be canceled', async ({\n    page\n  }) => {\n    qase.id(2583)\n    await sideMenuPage.selectSideBarCategory('all')\n    await utilities.deleteAllElements()\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.clickAddItem('login')\n    await createOrEditPage.fillCreateOrEditInput('title', 'AAA')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.clickMultipleSelectiontButton()\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickElementByPosition(0, 'AAA')\n    await mainPage.clickMultipleSelectiontButton()\n  })\n\n  test('Verify that \"Delete\" button is enabled only when items are selected', async ({\n    page\n  }) => {\n    qase.id(2584)\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.clickMultipleSelectiontButton()\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickElementByPosition(0, 'AAA')\n    await mainPage.verifyMultipleSelectDeleteButtonIsEnabled()\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickMultipleSelectiontButton()\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Verify that multiple items can be added to a folder simultaneously', async ({\n    page\n  }) => {\n    qase.id(2585)\n    await sideMenuPage.selectSideBarCategory('all')\n    await utilities.deleteAllElements()\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.createFolder('Test Folder')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.clickAddItem('login')\n    await createOrEditPage.fillCreateOrEditInput('title', 'AAA')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.clickAddItem('login')\n    await createOrEditPage.fillCreateOrEditInput('title', 'BBB')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.clickMultipleSelectiontButton()\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickElementByPosition(0, 'BBB')\n    await mainPage.clickElementByPosition(1, 'AAA')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.clickMultipleSelectMoveButon()\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.clickMoveFolderChip('Test Folder')\n    await mainPage.clickMoveFolderSubmit()\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await mainPage.verifyElementFolderName('Test Folder')\n    await sideMenuPage.deleteMultipleItemsFolder('Test Folder')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.clickDeleteFolderButton()\n  })\n})\n"
  },
  {
    "path": "e2e/specs/09-SortingAndFiltering/sorting.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Sorting test', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await utilities.deleteAllElements()\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify that items are sorted by most recently modified when \"Recent\" is selected', async () => {\n    qase.id(2592)\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.clickAddItem('login')\n    await createOrEditPage.fillCreateOrEditInput('title', 'AAA')\n    await createOrEditPage.clickOnCreateOrEditButton('save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('identity')\n    await mainPage.clickAddItem('identity')\n    await createOrEditPage.fillCreateOrEditInput('identity-title', 'BBB')\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('identity')\n    await mainPage.clickAddItem('identity')\n    await createOrEditPage.fillCreateOrEditInput('identity-title', 'CCC')\n    await createOrEditPage.clickOnCreateOrEditButton('identity-save')\n    await page.waitForTimeout(testData.timeouts.action)\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.verifyElementByPosition(0, 'CCC')\n    await mainPage.verifyElementByPosition(1, 'BBB')\n    await mainPage.verifyElementByPosition(2, 'AAA')\n  })\n\n  test('Verify that items are sorted from newest to oldest when \"Newest to oldest\" is selected', async ({\n    page\n  }) => {\n    qase.id(2593)\n    await mainPage.clickSortButton()\n    await mainPage.selectSortOption('last_updated_newest')\n\n    await mainPage.verifyElementByPosition('0', 'CCC')\n    await mainPage.verifyElementByPosition('1', 'BBB')\n    await mainPage.verifyElementByPosition('2', 'AAA')\n  })\n\n  test('Verify that items are sorted from oldest to newest when \"Oldest to newest\" is selected', async ({\n    page\n  }) => {\n    qase.id(2594)\n    await mainPage.clickSortButton()\n    await mainPage.selectSortOption('last_updated_oldest')\n\n    await mainPage.verifyElementByPosition('0', 'AAA')\n    await mainPage.verifyElementByPosition('1', 'BBB')\n    await mainPage.verifyElementByPosition('2', 'CCC')\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Verify that favorite items are displayed first on the Home screen', async ({\n    page\n  }) => {\n    qase.id(2595)\n    await sideMenuPage.selectSideBarCategory('login')\n    await mainPage.openElementDetails()\n    await detailsPage.clickFavoriteButton()\n\n    await sideMenuPage.selectSideBarCategory('identity')\n    await mainPage.openElementDetails()\n    await detailsPage.clickFavoriteButton()\n\n    await sideMenuPage.selectSideBarCategory('all')\n    await page.waitForTimeout(testData.timeouts.action)\n\n    await mainPage.verifyElementByPosition('0', 'AAA')\n    await mainPage.verifyElementByPosition('1', 'BBB')\n    await mainPage.verifyElementByPosition('2', 'CCC')\n  })\n\n  test('Verify that only favorite items are displayed when \"Favorite\" is selected', async ({\n    page\n  }) => {\n    qase.id(2596)\n    await sideMenuPage.openSideBarFolder('Favorites')\n    await page.waitForTimeout(testData.timeouts.action)\n    await mainPage.verifyElementByPosition('0', 'AAA')\n    await mainPage.verifyElementByPosition('1', 'BBB')\n\n    await sideMenuPage.selectSideBarCategory('all')\n  })\n})\n"
  },
  {
    "path": "e2e/specs/10-Settings/settings.test.js",
    "content": "import { qase } from 'playwright-qase-reporter'\n\nimport {\n  LoginPage,\n  MainPage,\n  SideMenuPage,\n  CreateOrEditPage,\n  Utilities,\n  DetailsPage,\n  SettingsPage\n} from '../../components/index.js'\nimport { test, expect } from '../../fixtures/app.runner.js'\nimport testData from '../../fixtures/test-data.js'\n\ntest.describe('Settings test', () => {\n  test.describe.configure({ mode: 'serial' })\n\n  let loginPage,\n    createOrEditPage,\n    sideMenuPage,\n    mainPage,\n    utilities,\n    detailsPage,\n    page,\n    settingsPage\n\n  test.beforeAll(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    utilities = new Utilities(root)\n    mainPage = new MainPage(root)\n\n    await loginPage.loginToApplication(testData.credentials.validPassword)\n  })\n\n  test.beforeEach(async ({ app }) => {\n    page = await app.getPage()\n    const root = page.locator('body')\n    loginPage = new LoginPage(root)\n    mainPage = new MainPage(root)\n    sideMenuPage = new SideMenuPage(root)\n    createOrEditPage = new CreateOrEditPage(root)\n    utilities = new Utilities(root)\n    detailsPage = new DetailsPage(root)\n    settingsPage = new SettingsPage(root)\n  })\n\n  test.afterAll(async () => {\n    await utilities.deleteAllElements()\n    await sideMenuPage.clickSidebarExitButton()\n  })\n\n  test('Verify Security Settings', async ({ page }) => {\n    qase.id(2605)\n    await sideMenuPage.clickSidebarSettingsButton()\n\n    await settingsPage.verifySettingsDropdownSectionIsVisible('security')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('app-preferences')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('master-password')\n\n    await settingsPage.clickPearPassFunctionDropdown('auto-lock-select')\n    await page.waitForTimeout(testData.timeouts.action)\n    await settingsPage.getPearPassFunctionDropdownOption('seconds_30')\n    await settingsPage.getPearPassFunctionDropdownOption('minutes_1')\n    await settingsPage.getPearPassFunctionDropdownOption('minutes_5')\n    await settingsPage.getPearPassFunctionDropdownOption('minutes_15')\n    await settingsPage.getPearPassFunctionDropdownOption('minutes_30')\n    await settingsPage.getPearPassFunctionDropdownOption('hours_1')\n    await settingsPage.getPearPassFunctionDropdownOption('hours_4')\n    await settingsPage.getPearPassFunctionDropdownOption('never')\n\n    await settingsPage.getPearPassFunctionDropdown('auto-lock-select').click({ force: true })\n    await page.waitForTimeout(testData.timeouts.action)\n  })\n\n  test('Verify Syncing Settings', async ({ page }) => {\n    qase.id(2606)\n    await settingsPage.verifySettingsDropdownSectionIsVisible('syncing')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('blind-peering')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('your-devices')\n  })\n\n  test('Verify Vault Settings', async ({ page }) => {\n    qase.id(2607)\n    await settingsPage.verifySettingsDropdownSectionIsVisible('vault')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('your-vaults')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('import-items')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('export-items')\n  })\n\n  test('Verify Appearance Settings', async ({ page }) => {\n    qase.id(2608)\n    await settingsPage.verifySettingsDropdownSectionIsVisible('appearance')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('language')\n  })\n\n  test('Verify About Settings', async ({ page }) => {\n    qase.id(2609)\n    await settingsPage.verifySettingsDropdownSectionIsVisible('about')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('report-a-problem')\n    await settingsPage.verifySettingsDropdownNavigationIsVisible('app-version')\n\n    await settingsPage.clickBackSettingsButton()\n  })\n})\n"
  },
  {
    "path": "electron/clipboardCleanup.cjs",
    "content": "const { spawn } = require('child_process')\nconst crypto = require('crypto')\nconst fs = require('fs')\nconst path = require('path')\n\nconst DEFAULT_CLIPBOARD_CLEAR_DELAY_MS = 30000\nconst CLIPBOARD_CLEANUP_STATE_FILE = 'pearpass-clipboard-cleanup-current.token'\n\nfunction getClipboardCleanupStatePath(app) {\n  return path.join(app.getPath('temp'), CLIPBOARD_CLEANUP_STATE_FILE)\n}\n\nfunction removeFileIfExists(filePath) {\n  try {\n    fs.unlinkSync(filePath)\n  } catch (err) {\n    if (err && err.code !== 'ENOENT') throw err\n  }\n}\n\nfunction removeClipboardCleanupTokenIfCurrent(statePath, token) {\n  try {\n    const currentToken = fs.readFileSync(statePath, 'utf8')\n    if (currentToken === token) {\n      removeFileIfExists(statePath)\n    }\n  } catch (err) {\n    if (err && err.code !== 'ENOENT') throw err\n  }\n}\n\nfunction spawnDetachedClipboardHelper(secretPath, token, statePath, delayMs) {\n  const helperPath = path.join(__dirname, 'clipboardCleanupHelper.cjs')\n  if (!fs.existsSync(helperPath)) {\n    throw new Error(`Clipboard cleanup helper not found: ${helperPath}`)\n  }\n\n  const child = spawn(\n    process.execPath,\n    [helperPath, secretPath, token, statePath, String(delayMs)],\n    {\n      detached: true,\n      env: { ...process.env, ELECTRON_RUN_AS_NODE: '1' },\n      stdio: 'inherit',\n      windowsHide: true\n    }\n  )\n\n  child.unref()\n}\n\nfunction spawnDetachedWindowsClipboardHelper(\n  secretPath,\n  token,\n  statePath,\n  delayMs\n) {\n  const scriptPath = path.join(__dirname, 'clipboardCleanup.windows.ps1')\n  if (!fs.existsSync(scriptPath)) {\n    throw new Error(`Windows clipboard cleanup script not found: ${scriptPath}`)\n  }\n\n  const child = spawn(\n    'cmd.exe',\n    [\n      '/c',\n      'start',\n      '\"\"',\n      '/min',\n      'powershell.exe',\n      '-NoProfile',\n      '-WindowStyle',\n      'Hidden',\n      '-ExecutionPolicy',\n      'Bypass',\n      '-File',\n      scriptPath,\n      '-SecretPath',\n      secretPath,\n      '-StatePath',\n      statePath,\n      '-Token',\n      token,\n      '-DelayMs',\n      String(delayMs)\n    ],\n    {\n      detached: true,\n      stdio: 'inherit',\n      windowsHide: true\n    }\n  )\n\n  child.unref()\n}\n\nfunction scheduleClipboardCleanup({\n  app,\n  clipboard,\n  logger,\n  isWindows,\n  text,\n  delayMs\n}) {\n  const finalDelayMs =\n    Number.isFinite(delayMs) && delayMs > 0\n      ? delayMs\n      : DEFAULT_CLIPBOARD_CLEAR_DELAY_MS\n  const textToMatch = typeof text === 'string' ? text : clipboard.readText()\n\n  if (typeof textToMatch !== 'string' || textToMatch.length === 0) {\n    return false\n  }\n\n  const token = crypto.randomUUID()\n  const statePath = getClipboardCleanupStatePath(app)\n  const secretPath = path.join(\n    app.getPath('temp'),\n    `pearpass-clipboard-secret-${token}.txt`\n  )\n\n  try {\n    fs.writeFileSync(secretPath, textToMatch, { encoding: 'utf8', mode: 0o600 })\n    fs.writeFileSync(statePath, token, { encoding: 'utf8', mode: 0o600 })\n\n    if (isWindows) {\n      spawnDetachedWindowsClipboardHelper(\n        secretPath,\n        token,\n        statePath,\n        finalDelayMs\n      )\n    } else {\n      spawnDetachedClipboardHelper(secretPath, token, statePath, finalDelayMs)\n    }\n\n    return true\n  } catch (err) {\n    try {\n      removeFileIfExists(secretPath)\n      removeClipboardCleanupTokenIfCurrent(statePath, token)\n    } catch (_) {}\n\n    logger.warn(\n      'MAIN',\n      'Failed to schedule detached clipboard cleanup:',\n      err && err.message ? err.message : err\n    )\n    return false\n  }\n}\n\nmodule.exports = {\n  scheduleClipboardCleanup\n}\n"
  },
  {
    "path": "electron/clipboardCleanup.test.js",
    "content": "/* eslint-env jest */\n\njest.mock('fs', () => ({\n  existsSync: jest.fn(() => true),\n  readFileSync: jest.fn(),\n  unlinkSync: jest.fn(),\n  writeFileSync: jest.fn()\n}))\n\njest.mock('crypto', () => ({\n  randomUUID: jest.fn(() => 'token-1')\n}))\n\njest.mock('child_process', () => ({\n  spawn: jest.fn(() => ({\n    unref: jest.fn()\n  }))\n}))\n\ndescribe('clipboardCleanup', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('uses the Windows script', () => {\n    const path = require('path')\n    const fs = require('fs')\n    const { spawn } = require('child_process')\n    const { scheduleClipboardCleanup } = require('./clipboardCleanup.cjs')\n\n    const app = {\n      getPath: jest.fn((name) =>\n        name === 'temp' ? 'C:\\\\Temp' : `/unknown/${name}`\n      )\n    }\n    const clipboard = {\n      readText: jest.fn(() => 'secret')\n    }\n    const logger = {\n      warn: jest.fn()\n    }\n\n    const result = scheduleClipboardCleanup({\n      app,\n      clipboard,\n      logger,\n      isWindows: true,\n      text: 'secret',\n      delayMs: 30000\n    })\n\n    expect(result).toBe(true)\n    expect(fs.writeFileSync).toHaveBeenNthCalledWith(\n      1,\n      path.join('C:\\\\Temp', 'pearpass-clipboard-secret-token-1.txt'),\n      'secret',\n      { encoding: 'utf8', mode: 0o600 }\n    )\n    expect(fs.writeFileSync).toHaveBeenNthCalledWith(\n      2,\n      path.join('C:\\\\Temp', 'pearpass-clipboard-cleanup-current.token'),\n      'token-1',\n      { encoding: 'utf8', mode: 0o600 }\n    )\n    expect(spawn).toHaveBeenCalledWith(\n      'cmd.exe',\n      expect.arrayContaining([\n        '/c',\n        'start',\n        '\"\"',\n        '/min',\n        'powershell.exe',\n        '-NoProfile',\n        '-WindowStyle',\n        'Hidden',\n        '-ExecutionPolicy',\n        'Bypass',\n        '-File',\n        path.join(process.cwd(), 'electron', 'clipboardCleanup.windows.ps1')\n      ]),\n      expect.objectContaining({\n        detached: true,\n        stdio: 'inherit',\n        windowsHide: true\n      })\n    )\n  })\n})\n"
  },
  {
    "path": "electron/clipboardCleanup.windows.ps1",
    "content": "param(\n  [string]$SecretPath,\n  [string]$StatePath,\n  [string]$Token,\n  [int]$DelayMs\n)\n\ntry {\n  $expected = ''\n\n  try {\n    if (-not (Test-Path -LiteralPath $SecretPath)) {\n      exit 0\n    }\n\n    $expected = [System.IO.File]::ReadAllText($SecretPath, [System.Text.Encoding]::UTF8)\n  } finally {\n    Remove-Item -LiteralPath $SecretPath -Force -ErrorAction SilentlyContinue\n  }\n\n  Start-Sleep -Milliseconds $DelayMs\n\n  $currentToken = ''\n  try {\n    if (Test-Path -LiteralPath $StatePath) {\n      $currentToken = [System.IO.File]::ReadAllText($StatePath, [System.Text.Encoding]::UTF8)\n    }\n  } catch {\n    $currentToken = ''\n  }\n\n  if (-not [string]::Equals($currentToken, $Token, [System.StringComparison]::Ordinal)) {\n    exit 0\n  }\n\n  $clipboardText = ''\n  try {\n    $clipboardText = Get-Clipboard -Raw\n  } catch {\n    $clipboardText = ''\n  }\n\n  if ([string]::Equals($clipboardText, $expected, [System.StringComparison]::Ordinal)) {\n    Set-Clipboard -Value ''\n  }\n\n  $latestToken = ''\n  try {\n    if (Test-Path -LiteralPath $StatePath) {\n      $latestToken = [System.IO.File]::ReadAllText($StatePath, [System.Text.Encoding]::UTF8)\n    }\n  } catch {\n    $latestToken = ''\n  }\n\n  if ([string]::Equals($latestToken, $Token, [System.StringComparison]::Ordinal)) {\n    Remove-Item -LiteralPath $StatePath -Force -ErrorAction SilentlyContinue\n  }\n} catch {\n  exit 1\n}\n"
  },
  {
    "path": "electron/clipboardCleanupHelper.cjs",
    "content": "const { spawnSync } = require('child_process')\nconst fs = require('fs')\n\nconst linuxWaylandClipboard = require('./linuxWaylandClipboard.cjs')\nconst linuxX11Clipboard = require('./linuxX11Clipboard.cjs')\n\nfunction removeFileIfExists(filePath) {\n  try {\n    fs.unlinkSync(filePath)\n  } catch (err) {\n    if (err && err.code !== 'ENOENT') throw err\n  }\n}\n\nfunction readSecretFromFile(secretPath) {\n  try {\n    return fs.readFileSync(secretPath, 'utf8')\n  } finally {\n    removeFileIfExists(secretPath)\n  }\n}\n\nfunction readCurrentToken(statePath) {\n  try {\n    return fs.readFileSync(statePath, 'utf8')\n  } catch (err) {\n    if (err && err.code === 'ENOENT') return ''\n    throw err\n  }\n}\n\nfunction clearCurrentTokenIfMatches(statePath, token) {\n  if (readCurrentToken(statePath) === token) {\n    removeFileIfExists(statePath)\n  }\n}\n\nfunction describeLinuxSession() {\n  const waylandDisplay = process.env.WAYLAND_DISPLAY || ''\n  const sessionType = process.env.XDG_SESSION_TYPE || ''\n  const display = process.env.DISPLAY || ''\n  return `WAYLAND_DISPLAY=${waylandDisplay || '(unset)'} XDG_SESSION_TYPE=${sessionType || '(unset)'} DISPLAY=${display || '(unset)'}`\n}\n\nfunction logLinuxClipboardSkip(sessionLabel) {\n  process.stderr.write(\n    `PearPass clipboard cleanup skipped: ${sessionLabel} clipboard command unavailable or failed. (${describeLinuxSession()})\\n`\n  )\n}\n\nfunction sleep(delayMs) {\n  return new Promise((resolve) => setTimeout(resolve, delayMs))\n}\n\nfunction runClipboardCommand(command, args, input) {\n  return spawnSync(command, args, {\n    encoding: 'utf8',\n    input,\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n}\n\nfunction readClipboard() {\n  if (process.platform === 'darwin') {\n    const result = runClipboardCommand('/usr/bin/pbpaste', [], undefined)\n    if (result.error || result.status !== 0) {\n      throw result.error || new Error('pbpaste failed')\n    }\n    return result.stdout || ''\n  }\n\n  if (process.platform === 'linux') {\n    const isWayland = linuxWaylandClipboard.isWaylandSession()\n    const linuxClipboard = isWayland ? linuxWaylandClipboard : linuxX11Clipboard\n    const sessionLabel = isWayland ? 'Wayland' : 'X11'\n\n    const result = linuxClipboard.readClipboard()\n    if (typeof result === 'string') return result\n\n    logLinuxClipboardSkip(sessionLabel)\n    return null\n  }\n\n  throw new Error(`Unsupported platform: ${process.platform}`)\n}\n\nfunction clearClipboard() {\n  if (process.platform === 'darwin') {\n    const result = runClipboardCommand('/usr/bin/pbcopy', [], '')\n    if (result.error || result.status !== 0) {\n      throw result.error || new Error('pbcopy failed')\n    }\n    return\n  }\n\n  if (process.platform === 'linux') {\n    const isWayland = linuxWaylandClipboard.isWaylandSession()\n    const linuxClipboard = isWayland ? linuxWaylandClipboard : linuxX11Clipboard\n    const sessionLabel = isWayland ? 'Wayland' : 'X11'\n\n    if (linuxClipboard.clearClipboard()) return\n\n    logLinuxClipboardSkip(sessionLabel)\n    return\n  }\n\n  throw new Error(`Unsupported platform: ${process.platform}`)\n}\n\nasync function runClipboardCleanup({\n  secretPath,\n  token,\n  statePath,\n  delayMs = 30000\n}) {\n  const expectedText = readSecretFromFile(secretPath)\n\n  await sleep(delayMs)\n\n  if (readCurrentToken(statePath) !== token) {\n    return false\n  }\n\n  try {\n    const clipboardText = readClipboard()\n\n    if (typeof clipboardText !== 'string') {\n      return false\n    }\n\n    if (clipboardText === expectedText) {\n      clearClipboard()\n    }\n\n    return true\n  } finally {\n    clearCurrentTokenIfMatches(statePath, token)\n  }\n}\n\nasync function main(argv = process.argv) {\n  const [, , secretPath, token, statePath, delayMsArg] = argv\n  const delayMs = Number.parseInt(delayMsArg, 10)\n\n  if (!secretPath || !token || !statePath) {\n    process.exitCode = 1\n    return\n  }\n\n  try {\n    await runClipboardCleanup({\n      secretPath,\n      token,\n      statePath,\n      delayMs: Number.isFinite(delayMs) && delayMs > 0 ? delayMs : 30000\n    })\n  } catch (err) {\n    process.stderr.write(\n      `PearPass clipboard cleanup failed: ${err && err.message ? err.message : err}\\n`\n    )\n    process.exitCode = 1\n  }\n}\n\nif (require.main === module) {\n  main()\n}\n\nmodule.exports = {\n  clearClipboard,\n  clearCurrentTokenIfMatches,\n  logLinuxClipboardSkip,\n  main,\n  readClipboard,\n  readCurrentToken,\n  readSecretFromFile,\n  runClipboardCleanup,\n  sleep\n}\n"
  },
  {
    "path": "electron/clipboardCleanupHelper.test.js",
    "content": "/* eslint-env jest */\n\njest.mock('fs', () => ({\n  readFileSync: jest.fn(),\n  unlinkSync: jest.fn(),\n  existsSync: jest.fn(() => true),\n  promises: {\n    mkdir: jest.fn()\n  }\n}))\n\njest.mock('child_process', () => ({\n  spawnSync: jest.fn(() => ({ status: 0, stdout: '', error: null }))\n}))\n\njest.mock('./linuxWaylandClipboard.cjs', () => ({\n  isWaylandSession: jest.fn(() => false),\n  readClipboard: jest.fn(() => null),\n  clearClipboard: jest.fn(() => false)\n}))\n\njest.mock('./linuxX11Clipboard.cjs', () => ({\n  readClipboard: jest.fn(() => null),\n  clearClipboard: jest.fn(() => false)\n}))\n\nconst originalPlatform = process.platform\n\nconst setPlatform = (platform) => {\n  Object.defineProperty(process, 'platform', {\n    configurable: true,\n    value: platform\n  })\n}\n\nconst loadHelper = () => {\n  jest.resetModules()\n  return require('./clipboardCleanupHelper.cjs')\n}\n\nconst getFs = () => require('fs')\nconst getSpawnSync = () => require('child_process').spawnSync\n\ndescribe('clipboardCleanupHelper', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    jest.useFakeTimers()\n  })\n\n  afterEach(() => {\n    jest.useRealTimers()\n    setPlatform(originalPlatform)\n  })\n\n  it('clears the clipboard only for the latest matching token', async () => {\n    setPlatform('darwin')\n    const helper = loadHelper()\n    const fs = getFs()\n    const spawnSync = getSpawnSync()\n\n    fs.readFileSync\n      .mockReturnValueOnce('secret')\n      .mockReturnValueOnce('token-1')\n      .mockReturnValueOnce('token-1')\n\n    spawnSync\n      .mockReturnValueOnce({ status: 0, stdout: 'secret' })\n      .mockReturnValueOnce({ status: 0, stdout: '' })\n\n    const cleanupPromise = helper.runClipboardCleanup({\n      secretPath: '/tmp/secret.txt',\n      token: 'token-1',\n      statePath: '/tmp/state.token',\n      delayMs: 30000\n    })\n\n    await jest.advanceTimersByTimeAsync(30000)\n    await expect(cleanupPromise).resolves.toBe(true)\n\n    expect(spawnSync).toHaveBeenNthCalledWith(\n      1,\n      '/usr/bin/pbpaste',\n      [],\n      expect.objectContaining({ input: undefined })\n    )\n    expect(spawnSync).toHaveBeenNthCalledWith(\n      2,\n      '/usr/bin/pbcopy',\n      [],\n      expect.objectContaining({ input: '' })\n    )\n    expect(fs.unlinkSync).toHaveBeenCalledWith('/tmp/secret.txt')\n    expect(fs.unlinkSync).toHaveBeenCalledWith('/tmp/state.token')\n  })\n\n  it('does not clear when a newer clipboard token replaced it', async () => {\n    setPlatform('darwin')\n    const helper = loadHelper()\n    const fs = getFs()\n    const spawnSync = getSpawnSync()\n\n    fs.readFileSync.mockReturnValueOnce('secret').mockReturnValueOnce('token-2')\n\n    const cleanupPromise = helper.runClipboardCleanup({\n      secretPath: '/tmp/secret.txt',\n      token: 'token-1',\n      statePath: '/tmp/state.token',\n      delayMs: 30000\n    })\n\n    await jest.advanceTimersByTimeAsync(30000)\n    await expect(cleanupPromise).resolves.toBe(false)\n\n    expect(spawnSync).not.toHaveBeenCalled()\n    expect(fs.unlinkSync).toHaveBeenCalledWith('/tmp/secret.txt')\n    expect(fs.unlinkSync).not.toHaveBeenCalledWith('/tmp/state.token')\n  })\n\n  it('skips Linux cleanup gracefully when no clipboard tool is available', async () => {\n    setPlatform('linux')\n    const helper = loadHelper()\n    const fs = getFs()\n    const linuxX11Clipboard = require('./linuxX11Clipboard.cjs')\n    const stderrSpy = jest\n      .spyOn(process.stderr, 'write')\n      .mockImplementation(() => true)\n\n    fs.readFileSync\n      .mockReturnValueOnce('secret')\n      .mockReturnValueOnce('token-1')\n      .mockReturnValueOnce('token-1')\n\n    const cleanupPromise = helper.runClipboardCleanup({\n      secretPath: '/tmp/secret.txt',\n      token: 'token-1',\n      statePath: '/tmp/state.token',\n      delayMs: 30000\n    })\n\n    await jest.advanceTimersByTimeAsync(30000)\n    await expect(cleanupPromise).resolves.toBe(false)\n\n    expect(linuxX11Clipboard.readClipboard).toHaveBeenCalled()\n    expect(stderrSpy).toHaveBeenCalledWith(\n      expect.stringContaining('PearPass clipboard cleanup skipped:')\n    )\n    expect(fs.unlinkSync).toHaveBeenCalledWith('/tmp/secret.txt')\n    expect(fs.unlinkSync).toHaveBeenCalledWith('/tmp/state.token')\n\n    stderrSpy.mockRestore()\n  })\n})\n"
  },
  {
    "path": "electron/flatpak-paths.cjs",
    "content": "const fs = require('fs')\nconst path = require('path')\n\nfunction isFlatpakRuntime(options = {}) {\n  const env = options.env || process.env\n  const existsSync = options.existsSync || fs.existsSync\n  const flatpakInfoPath = options.flatpakInfoPath || '/.flatpak-info'\n\n  return Boolean(env.FLATPAK_ID) || existsSync(flatpakInfoPath)\n}\n\nfunction isSnapRuntime(options = {}) {\n  const env = options.env || process.env\n  return Boolean(env.SNAP_NAME)\n}\n\nfunction getSnapRealHome(options = {}) {\n  const env = options.env || process.env\n  // $HOME is remapped to ~/snap/<name>/<rev> inside the sandbox; snapd\n  // exposes the real home as SNAP_REAL_HOME.\n  if (!isSnapRuntime(options)) return env.HOME || ''\n  return env.SNAP_REAL_HOME || env.HOME || ''\n}\n\nfunction getHostHome(options = {}) {\n  const env = options.env || process.env\n  if (!isFlatpakRuntime(options)) return env.HOME || ''\n  // Inside flatpak $HOME is remapped to the per-app sandbox home.\n  // With --filesystem=home the real host home is mounted at /home/$USER\n  // and is where host-side browsers (e.g. Chrome) read NativeMessagingHosts.\n  const user = env.USER || env.USERNAME\n  return user ? path.join('/home', user) : env.HOME || ''\n}\n\nfunction getFlatpakCompatRoots(options = {}) {\n  const env = options.env || process.env\n  const homeDir = env.HOME\n\n  if (!homeDir) return null\n\n  return {\n    config: path.join(homeDir, '.config'),\n    data: path.join(homeDir, '.config', 'pearpass-flatpak-data'),\n    cache: path.join(homeDir, '.config', 'pearpass-flatpak-cache')\n  }\n}\n\nfunction mapFlatpakPathToSandbox(targetPath, options = {}) {\n  if (!targetPath || typeof targetPath !== 'string') return targetPath\n\n  const env = options.env || process.env\n  const compatRoots = getFlatpakCompatRoots(options)\n  if (!compatRoots) return targetPath\n\n  const mappings = [\n    [env.XDG_CONFIG_HOME, compatRoots.config],\n    [env.XDG_DATA_HOME, compatRoots.data],\n    [env.XDG_CACHE_HOME, compatRoots.cache]\n  ].filter(([prefix]) => typeof prefix === 'string' && prefix.length > 0)\n\n  for (const [hostPrefix, sandboxPrefix] of mappings) {\n    if (targetPath === hostPrefix) return sandboxPrefix\n    if (targetPath.startsWith(hostPrefix + path.sep)) {\n      return path.join(sandboxPrefix, path.relative(hostPrefix, targetPath))\n    }\n  }\n\n  return targetPath\n}\n\nfunction getSandboxSafePath(targetPath, options = {}) {\n  if (!isFlatpakRuntime(options)) return targetPath\n  return mapFlatpakPathToSandbox(targetPath, options)\n}\n\nmodule.exports = {\n  getFlatpakCompatRoots,\n  getHostHome,\n  getSandboxSafePath,\n  getSnapRealHome,\n  isFlatpakRuntime,\n  isSnapRuntime,\n  mapFlatpakPathToSandbox\n}\n"
  },
  {
    "path": "electron/flatpak-paths.test.js",
    "content": "const {\n  getFlatpakCompatRoots,\n  getSandboxSafePath,\n  getSnapRealHome,\n  isFlatpakRuntime,\n  isSnapRuntime,\n  mapFlatpakPathToSandbox\n} = require('./flatpak-paths.cjs')\n\ndescribe('flatpak path helpers', () => {\n  const env = {\n    HOME: '/home/alvaro',\n    XDG_CONFIG_HOME: '/home/alvaro/.var/app/com.pears.pass/config',\n    XDG_DATA_HOME: '/home/alvaro/.var/app/com.pears.pass/data',\n    XDG_CACHE_HOME: '/home/alvaro/.var/app/com.pears.pass/cache'\n  }\n\n  it('detects flatpak via FLATPAK_ID', () => {\n    expect(isFlatpakRuntime({ env: { FLATPAK_ID: 'com.pears.pass' } })).toBe(\n      true\n    )\n  })\n\n  it('derives flatpak compatibility roots under the user config directory', () => {\n    expect(getFlatpakCompatRoots({ env })).toEqual({\n      config: '/home/alvaro/.config',\n      data: '/home/alvaro/.config/pearpass-flatpak-data',\n      cache: '/home/alvaro/.config/pearpass-flatpak-cache'\n    })\n  })\n\n  it('maps host-side flatpak config paths into sandbox-safe paths', () => {\n    expect(\n      mapFlatpakPathToSandbox(\n        '/home/alvaro/.var/app/com.pears.pass/config/PearPass',\n        { env }\n      )\n    ).toBe('/home/alvaro/.config/PearPass')\n  })\n\n  it('detects snap via SNAP_NAME', () => {\n    expect(isSnapRuntime({ env: { SNAP_NAME: 'pearpass' } })).toBe(true)\n    expect(isSnapRuntime({ env: {} })).toBe(false)\n  })\n\n  it('returns SNAP_REAL_HOME inside snap, HOME otherwise', () => {\n    expect(\n      getSnapRealHome({\n        env: {\n          SNAP_NAME: 'pearpass',\n          SNAP_REAL_HOME: '/home/alvaro',\n          HOME: '/home/alvaro/snap/pearpass/current'\n        }\n      })\n    ).toBe('/home/alvaro')\n    expect(getSnapRealHome({ env: { HOME: '/home/alvaro' } })).toBe(\n      '/home/alvaro'\n    )\n    expect(getSnapRealHome({ env: {} })).toBe('')\n  })\n\n  it('returns sandbox-safe path only when running inside flatpak', () => {\n    const targetPath = '/home/alvaro/.var/app/com.pears.pass/data/PearPass'\n\n    expect(\n      getSandboxSafePath(targetPath, {\n        env: { ...env, FLATPAK_ID: 'com.pears.pass' }\n      })\n    ).toBe('/home/alvaro/.config/pearpass-flatpak-data/PearPass')\n    expect(\n      getSandboxSafePath(targetPath, { env, existsSync: () => false })\n    ).toBe(targetPath)\n  })\n})\n"
  },
  {
    "path": "electron/linuxWaylandClipboard.cjs",
    "content": "const { spawnSync } = require('child_process')\n\nconst {\n  readClipboardWithFallback,\n  clearClipboardWithFallback\n} = require('./linuxWaylandClipboardFallback.cjs')\n\nfunction isWaylandSession() {\n  return (\n    Boolean(process.env.WAYLAND_DISPLAY) ||\n    process.env.XDG_SESSION_TYPE === 'wayland'\n  )\n}\n\nfunction runCommand(command, args, input) {\n  return spawnSync(command, args, {\n    encoding: 'utf8',\n    input,\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n}\n\nfunction readClipboard() {\n  const result = runCommand('wl-paste', ['--no-newline'], undefined)\n\n  if (result.error) {\n    return readClipboardWithFallback()\n  }\n\n  if (result.status === 0) return result.stdout || ''\n  if (result.status === 1) return ''\n\n  process.stderr.write(\n    `[linuxWaylandClipboard] wl-paste exited with unexpected status ${result.status}: ${result.stderr}\\n`\n  )\n  return readClipboardWithFallback()\n}\n\nfunction clearClipboard() {\n  const clearResult = runCommand('wl-copy', ['--clear'], undefined)\n\n  if (!clearResult.error && clearResult.status === 0) return true\n\n  if (clearResult.error) {\n    return clearClipboardWithFallback()\n  }\n\n  process.stderr.write(\n    `[linuxWaylandClipboard] wl-copy --clear failed (status ${clearResult.status}), trying empty input fallback: ${clearResult.stderr}\\n`\n  )\n\n  const emptyResult = runCommand('wl-copy', [], '')\n  if (!emptyResult.error && emptyResult.status === 0) return true\n\n  process.stderr.write(\n    `[linuxWaylandClipboard] wl-copy empty fallback also failed (status ${emptyResult.status}): ${emptyResult.stderr}\\n`\n  )\n\n  return clearClipboardWithFallback()\n}\n\nmodule.exports = {\n  clearClipboard,\n  isWaylandSession,\n  readClipboard\n}\n"
  },
  {
    "path": "electron/linuxWaylandClipboardFallback.cjs",
    "content": "const { spawnSync } = require('child_process')\nconst fs = require('fs')\nconst os = require('os')\nconst path = require('path')\n\nconst TEMP_WL_PASTE_NAME = 'pearpass-wl-paste'\nconst TEMP_WL_COPY_NAME = 'pearpass-wl-copy'\n\nfunction getWlPasteBinaryArchitectureName() {\n  return process.arch === 'arm64' ? 'wl-paste-arm64' : 'wl-paste-x86_64'\n}\n\nfunction getWlCopyBinaryArchitectureName() {\n  return process.arch === 'arm64' ? 'wl-copy-arm64' : 'wl-copy-x86_64'\n}\n\nfunction resolveBundledBinarySourcePath(archName) {\n  const packagedPath = path.join(__dirname, '..', '..', 'bin', archName)\n  if (fs.existsSync(packagedPath)) return packagedPath\n\n  const devPath = path.join(__dirname, '..', 'resources', 'bin', archName)\n  if (fs.existsSync(devPath)) return devPath\n\n  return null\n}\n\nfunction prepareBundledBinary(archName, tempName) {\n  const sourcePath = resolveBundledBinarySourcePath(archName)\n\n  if (!sourcePath) {\n    process.stderr.write(\n      `[linuxWaylandClipboardFallback] Bundled ${archName} binary not found in packaged or dev location.\\n`\n    )\n    return null\n  }\n\n  const destPath = path.join(os.tmpdir(), tempName)\n\n  try {\n    fs.copyFileSync(sourcePath, destPath)\n    fs.chmodSync(destPath, 0o755)\n    return destPath\n  } catch (err) {\n    process.stderr.write(\n      `[linuxWaylandClipboardFallback] Failed to extract bundled binary ${archName}: ${err && err.message ? err.message : err}\\n`\n    )\n    return null\n  }\n}\n\nfunction prepareWlPasteBinary() {\n  return prepareBundledBinary(\n    getWlPasteBinaryArchitectureName(),\n    TEMP_WL_PASTE_NAME\n  )\n}\n\nfunction prepareWlCopyBinary() {\n  return prepareBundledBinary(\n    getWlCopyBinaryArchitectureName(),\n    TEMP_WL_COPY_NAME\n  )\n}\n\nfunction readClipboardWithFallback() {\n  const binaryPath = prepareWlPasteBinary()\n  if (!binaryPath) return null\n\n  const result = spawnSync(binaryPath, ['--no-newline'], {\n    encoding: 'utf8',\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n\n  if (result.error) {\n    process.stderr.write(\n      `[linuxWaylandClipboardFallback] Bundled wl-paste failed to start: ${result.error.message}\\n`\n    )\n    return null\n  }\n\n  if (result.status === 0) return result.stdout || ''\n  if (result.status === 1) return ''\n\n  process.stderr.write(\n    `[linuxWaylandClipboardFallback] Bundled wl-paste exited with unexpected status ${result.status}: ${result.stderr}\\n`\n  )\n  return null\n}\n\nfunction clearClipboardWithFallback() {\n  const binaryPath = prepareWlCopyBinary()\n  if (!binaryPath) return false\n\n  const clearResult = spawnSync(binaryPath, ['--clear'], {\n    encoding: 'utf8',\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n\n  if (!clearResult.error && clearResult.status === 0) return true\n\n  if (clearResult.error) {\n    process.stderr.write(\n      `[linuxWaylandClipboardFallback] Bundled wl-copy --clear failed to start: ${clearResult.error.message}\\n`\n    )\n  } else {\n    process.stderr.write(\n      `[linuxWaylandClipboardFallback] Bundled wl-copy --clear failed (status ${clearResult.status}), trying empty input fallback: ${clearResult.stderr}\\n`\n    )\n  }\n\n  const emptyResult = spawnSync(binaryPath, [], {\n    encoding: 'utf8',\n    input: '',\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n\n  if (!emptyResult.error && emptyResult.status === 0) return true\n\n  process.stderr.write(\n    `[linuxWaylandClipboardFallback] Bundled wl-copy empty fallback also failed (status ${emptyResult.status}): ${emptyResult.stderr}\\n`\n  )\n  return false\n}\n\nmodule.exports = {\n  readClipboardWithFallback,\n  clearClipboardWithFallback\n}\n"
  },
  {
    "path": "electron/linuxX11Clipboard.cjs",
    "content": "const { spawnSync } = require('child_process')\n\nconst {\n  readClipboardWithFallback,\n  clearClipboardWithFallback\n} = require('./linuxX11ClipboardFallback.cjs')\n\nfunction runCommand(command, args, input) {\n  return spawnSync(command, args, {\n    encoding: 'utf8',\n    input,\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n}\n\nfunction readClipboard() {\n  const commands = [\n    ['xsel', ['--clipboard', '--output']],\n    ['xclip', ['-selection', 'clipboard', '-o']]\n  ]\n\n  for (const [command, args] of commands) {\n    const result = runCommand(command, args, undefined)\n    if (!result.error && result.status === 0) {\n      return result.stdout || ''\n    }\n  }\n\n  return readClipboardWithFallback()\n}\n\nfunction clearClipboard() {\n  const commands = [\n    ['xsel', ['--clipboard', '--input']],\n    ['xclip', ['-selection', 'clipboard']]\n  ]\n\n  for (const [command, args] of commands) {\n    const result = runCommand(command, args, '')\n    if (!result.error && result.status === 0) {\n      return true\n    }\n  }\n\n  return clearClipboardWithFallback()\n}\n\nmodule.exports = {\n  clearClipboard,\n  readClipboard\n}\n"
  },
  {
    "path": "electron/linuxX11ClipboardFallback.cjs",
    "content": "const { spawnSync } = require('child_process')\nconst fs = require('fs')\nconst os = require('os')\nconst path = require('path')\n\nconst TEMP_BINARY_NAME = 'pearpass-xsel'\n\n/**\n * Returns the architecture-specific bundled xsel binary filename.\n * @returns {'xsel-arm64' | 'xsel-x86_64'}\n */\nfunction getBinaryArchitectureName() {\n  return process.arch === 'arm64' ? 'xsel-arm64' : 'xsel-x86_64'\n}\n\n/**\n * Resolves the bundled xsel binary source path purely from __dirname.\n * No arguments needed — this file always knows where it lives on disk.\n *\n * Packaged Electron app structure:\n *   resources/app/electron/linuxClipboardFallback.cjs  ← __dirname\n *   resources/bin/xsel-x86_64                          ← extraResources (to: \"bin\")\n *   → path.join(__dirname, '..', '..', 'bin', archName)\n *\n * Dev structure:\n *   <project>/electron/linuxClipboardFallback.cjs  ← __dirname\n *   <project>/resources/bin/xsel-x86_64\n *   → path.join(__dirname, '..', 'resources', 'bin', archName)\n *\n * @returns {string | null} Absolute path to the binary, or null if not found in either location\n */\nfunction resolveBundledBinarySourcePath() {\n  const archName = getBinaryArchitectureName()\n\n  // Packaged: resources/app/electron/ → ../../bin/\n  const packagedPath = path.join(__dirname, '..', '..', 'bin', archName)\n  if (fs.existsSync(packagedPath)) return packagedPath\n\n  // Dev: <project>/electron/ → ../resources/bin/\n  const devPath = path.join(__dirname, '..', 'resources', 'bin', archName)\n  if (fs.existsSync(devPath)) return devPath\n\n  return null\n}\n\n/**\n * Extracts the bundled xsel binary to a temp location and ensures it is\n * executable. Returns the path to the extracted binary, or null if the\n * source binary is not found in any known location.\n *\n * @returns {string | null}\n */\nfunction prepareBundledBinary() {\n  const sourcePath = resolveBundledBinarySourcePath()\n\n  if (!sourcePath) {\n    process.stderr.write(\n      '[linuxClipboardFallback] Bundled xsel binary not found in packaged or dev location.\\n'\n    )\n    return null\n  }\n\n  const destPath = path.join(os.tmpdir(), TEMP_BINARY_NAME)\n\n  try {\n    fs.copyFileSync(sourcePath, destPath)\n    fs.chmodSync(destPath, 0o755)\n    return destPath\n  } catch (err) {\n    process.stderr.write(\n      `[linuxClipboardFallback] Failed to extract bundled binary: ${err && err.message ? err.message : err}\\n`\n    )\n    return null\n  }\n}\n\n/**\n * Reads the clipboard content using the bundled xsel binary.\n * Returns the clipboard text, or null if the fallback is unavailable or fails.\n *\n * @returns {string | null}\n */\nfunction readClipboardWithFallback() {\n  const binaryPath = prepareBundledBinary()\n  if (!binaryPath) return null\n\n  const result = spawnSync(binaryPath, ['--clipboard', '--output'], {\n    encoding: 'utf8',\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n\n  if (!result.error && result.status === 0) {\n    return result.stdout || ''\n  }\n\n  process.stderr.write(\n    `[linuxClipboardFallback] Bundled xsel read failed. status=${result.status}, error=${result.error}\\n`\n  )\n  return null\n}\n\n/**\n * Clears the clipboard using the bundled xsel binary.\n * Returns true on success, false if the fallback is unavailable or fails.\n *\n * @returns {boolean}\n */\nfunction clearClipboardWithFallback() {\n  const binaryPath = prepareBundledBinary()\n  if (!binaryPath) return false\n\n  const result = spawnSync(binaryPath, ['--clipboard', '--input'], {\n    encoding: 'utf8',\n    input: '',\n    stdio: ['pipe', 'pipe', 'pipe']\n  })\n\n  if (!result.error && result.status === 0) {\n    return true\n  }\n\n  process.stderr.write(\n    `[linuxClipboardFallback] Bundled xsel clear failed. status=${result.status}, error=${result.error}\\n`\n  )\n  return false\n}\n\nmodule.exports = {\n  readClipboardWithFallback,\n  clearClipboardWithFallback\n}\n"
  },
  {
    "path": "electron/main.cjs",
    "content": "/* eslint-disable no-unused-vars */\n/* eslint-disable no-underscore-dangle */\n/**\n * Electron main process: creates the window, starts pear-runtime (P2P OTA, bare workers, storage),\n * and registers secure IPC handlers so the renderer can use runtime and vault services.\n */\nconst fs = require('fs')\nconst path = require('path')\n\nconst {\n  app,\n  BrowserWindow,\n  ipcMain,\n  nativeImage,\n  shell,\n  clipboard\n} = require('electron')\nconst PearRuntime = require('pear-runtime')\nconst getPearRuntimeLegacyStorage = require('pear-runtime-legacy-storage')\nconst { isLinux, isWindows, isMac } = require('which-runtime')\n\nconst { scheduleClipboardCleanup } = require('./clipboardCleanup.cjs')\n\nlet debugMode = false\n\n;(async () => {\n  try {\n    const { DEBUG_MODE } = await import('../src/constants/appConstants.js')\n    debugMode = DEBUG_MODE\n  } catch {\n    // fall back to default debugMode = false\n  }\n})()\n\nconst pkg = require('../package.json')\nconst {\n  getSandboxSafePath,\n  isFlatpakRuntime,\n  isSnapRuntime\n} = require('./flatpak-paths.cjs')\nconst runtimeConfig = require('./runtime-config.cjs')\nconst devicePreferences = require('../src/utils/devicePreferences.cjs')\nconst {\n  getLogPaths,\n  removeLogFiles,\n  setupLogging\n} = require('../src/utils/logHelper.cjs')\n\nconst { logger, loggingForced, enableWorkletFileLogging } = setupLogging({\n  app,\n  pkg,\n  debugMode,\n  getStorageDir: () => getStorageDir(),\n  getVaultClient: () => vaultClient\n})\n\n// Effective logging state. Initialized in app.whenReady (after setName, so\n// getStorageDir() resolves correctly). Mutable so the in-app toggle can flip\n// it at runtime via the vault:setLogging IPC.\nlet loggingActive = false\n\n/**\n * Emit a structured startup marker to stderr.\n *\n * The main-process logger is a no-op when DEBUG_MODE=false (i.e. in every\n * packaged build), which means the CI smoke test has no way to observe\n * runtime progress and local failures can't be diagnosed from `journalctl`.\n * This helper writes directly to process.stderr so markers survive regardless\n * of logger configuration. Keep the output format stable — the flatpak smoke\n * test greps for `[PEARPASS] <NAME>` lines.\n */\nfunction emitStartupMarker(name, detail) {\n  try {\n    const hasDetail = typeof detail === 'string' && detail.length > 0\n    const line = hasDetail\n      ? `[PEARPASS] ${name} ${detail}\\n`\n      : `[PEARPASS] ${name}\\n`\n    process.stderr.write(line)\n  } catch {\n    // never let the marker path break startup\n  }\n}\n\n// Enable auto-reload during development for main + renderer code\nif (!app.isPackaged) {\n  try {\n    // Watch the project root; electron-reload will restart Electron or\n    // reload windows when files change. Renderer JS is rebuilt into dist/.\n    require('electron-reload')(path.join(__dirname, '..'), {\n      // Avoid watching node_modules to reduce noise\n      ignored: /node_modules|[\\/\\\\]\\./,\n      awaitWriteFinish: true\n    })\n  } catch (err) {\n    logger.error('MAIN', 'Failed to enable electron-reload:', err)\n  }\n}\n\n/** @type {import('electron').BrowserWindow | null} */\nlet mainWindow = null\n\n/** @type {import('pear-runtime') | null} */\nlet pearRuntime = null\n\n/** @type {import('bare-sidecar') | null} */\nlet workletSidecar = null\n\n/** @type {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient | null} */\nlet vaultClient = null\n\nfunction getExecPath() {\n  if (!app.isPackaged) return null\n  if (isLinux && process.env.APPIMAGE) return process.env.APPIMAGE\n  if (isWindows) return true\n  return path.join(process.resourcesPath, '..', '..')\n}\n\nfunction getWorkletPath() {\n  const workletDir = path.join(\n    'node_modules',\n    '@tetherto/pearpass-lib-vault-core',\n    'src',\n    'worklet'\n  )\n\n  if (app.isPackaged) {\n    // Packaged: Bare runs .js as CJS, so use the CJS bundle from build.worklet.mjs\n    return path.join(process.resourcesPath, 'app', workletDir, 'app.cjs')\n  }\n\n  // Dev: ESM app.js so Bare's loader can resolve fs -> bare-fs etc.\n  const appPath = app.getAppPath()\n  return path.join(appPath, workletDir, 'app.js')\n}\n\nfunction getStorageDir() {\n  return getSandboxSafePath(app.getPath('userData'))\n}\n\n// Resolve storage root for this pear app.\n// 1) If the legacy Pear platform store knows this app (existing install),\n//    use that path for full compatibility.\n// 2) Otherwise, fall back to an Electron-owned per-link directory under\n//    userData so multiple links can coexist on the same machine.\nasync function resolveRuntimeStorageDir() {\n  const { legacyChannelLink, upgrade } = runtimeConfig || {}\n\n  let storageDir = getStorageDir()\n  const linkId = upgrade.replace(/^pear:\\/\\//, '')\n\n  if (isFlatpakRuntime() || isSnapRuntime()) {\n    storageDir = path.join(storageDir, 'app-storage', 'by-dkey', linkId)\n    logger.info('[MAIN]', 'Using sandbox per-link storage root:', storageDir)\n    return storageDir\n  }\n\n  try {\n    const legacyStorageDir = legacyChannelLink\n      ? await getPearRuntimeLegacyStorage(legacyChannelLink)\n      : null\n\n    if (legacyStorageDir) {\n      storageDir = getSandboxSafePath(legacyStorageDir)\n      logger.info('[MAIN]', 'Using pear legacy storage root:', storageDir)\n    } else {\n      storageDir = path.join(storageDir, 'app-storage', 'by-dkey', linkId)\n      logger.warn(\n        'MAIN',\n        'pear-runtime-legacy-storage returned null; using per-link Electron storage:',\n        storageDir\n      )\n    }\n  } catch (err) {\n    storageDir = path.join(getStorageDir(), 'app-storage', 'by-dkey', linkId)\n    logger.warn(\n      'MAIN',\n      'Failed to resolve legacy pear storage, using per-link Electron storage:',\n      legacyChannelLink,\n      err && err.message ? err.message : err,\n      'storageDir=',\n      storageDir\n    )\n  }\n\n  return storageDir\n}\n\nfunction getNativeBridgePath() {\n  const bundleFile = path.join('dist', 'native-messaging-bridge.bundle.cjs')\n\n  if (app.isPackaged) {\n    return path.join(process.resourcesPath, 'app', bundleFile)\n  }\n\n  return path.join(app.getAppPath(), bundleFile)\n}\n\n/**\n * In dev, when PEARPASS_DEV_RESET=1, clear vault/encryption data so the app\n * Only runs when NODE_ENV !== 'production'.\n */\nfunction clearVaultStorageForDevReset(storageDir) {\n  if (process.env.NODE_ENV === 'production') return\n  if (process.env.PEARPASS_DEV_RESET !== '1') return\n\n  const dirs = ['encryption', 'vaults', 'vault', 'pear-runtime']\n  for (const name of dirs) {\n    const dir = path.join(storageDir, name)\n    try {\n      if (fs.existsSync(dir)) {\n        fs.rmSync(dir, { recursive: true, force: true })\n        logger.log('MAIN', `Dev reset: removed ${name} at ${dir}`)\n      }\n    } catch (err) {\n      logger.warn(\n        'MAIN',\n        `Dev reset: failed to remove ${name} at ${dir}:`,\n        err && err.message ? err.message : err\n      )\n    }\n  }\n}\n\nconst WORKLET_READY_TIMEOUT_MS = 15000\nconst WORKLET_READY_SIGNAL = 'WORKLET_READY'\n\nfunction waitForWorkletReady(sidecar) {\n  const ipcStream = sidecar?._process?.stdio?.[3]\n  if (ipcStream) {\n    // Having an IPC pipe is treated as \"ready enough\" — bare-sidecar has\n    // already finished its side of the handshake.\n    emitStartupMarker('WORKLET_READY', 'via=ipc-stream')\n    return Promise.resolve(true)\n  }\n  return new Promise((resolve) => {\n    const timeout = setTimeout(() => {\n      cleanup()\n      emitStartupMarker(\n        'WORKLET_READY_TIMEOUT',\n        `ms=${WORKLET_READY_TIMEOUT_MS}`\n      )\n      resolve(false)\n    }, WORKLET_READY_TIMEOUT_MS)\n    let buffer = ''\n    const onData = (d) => {\n      const s = (d && (typeof d === 'string' ? d : d.toString?.())) || ''\n      buffer += s\n      if (buffer.includes(WORKLET_READY_SIGNAL)) {\n        cleanup()\n        emitStartupMarker('WORKLET_READY', 'via=stdio-signal')\n        resolve(true)\n      }\n    }\n    const cleanup = () => {\n      clearTimeout(timeout)\n      if (sidecar.stderr) sidecar.stderr.removeListener('data', onData)\n      if (sidecar.stdout) sidecar.stdout.removeListener('data', onData)\n    }\n    sidecar.stderr?.on?.('data', onData)\n    sidecar.stdout?.on?.('data', onData)\n  })\n}\n/**\n * Start pear-runtime and the vault worklet (bare worker). Called after app is ready.\n */\nasync function startRuntime() {\n  const upgrade = runtimeConfig.upgrade\n\n  if (!upgrade) {\n    logger.warn(\n      'MAIN',\n      'Pear runtime: no upgrade link configured. Running without P2P OTA.'\n    )\n    await startWorkletOnly()\n    return\n  }\n\n  const storageDir = getStorageDir()\n\n  // to clear local vault/encryption data so the app starts from scratch.\n  clearVaultStorageForDevReset(storageDir)\n  const workletPath = getWorkletPath()\n\n  const { PearpassVaultClient } = await import(\n    '@tetherto/pearpass-lib-vault-core'\n  )\n  const extension = isLinux ? '.AppImage' : isMac ? '.app' : '.msix'\n\n  pearRuntime = new PearRuntime({\n    // pear runtime doesn't care about pear (platform) directory\n    dir: storageDir,\n    upgrade,\n    version: runtimeConfig.version,\n    app: app.isPackaged ? getExecPath() : null,\n    bundled: !!app.isPackaged,\n    name: `${pkg.productName}${extension}`\n  })\n\n  await pearRuntime.ready()\n\n  logger.info('[MAIN]', 'workletPath', workletPath)\n  if (!fs.existsSync(workletPath)) {\n    throw new Error(`Worklet not found: ${workletPath}`)\n  }\n\n  workletSidecar = pearRuntime.run(workletPath)\n  emitStartupMarker('WORKLET_SPAWNED', 'mode=pear-runtime')\n  workletSidecar.on('error', (err) => {\n    logger.error('MAIN', '[worklet IPC error]', err.code || err.message, err)\n  })\n  const ipcStream = workletSidecar._process?.stdio?.[3]\n  if (ipcStream)\n    ipcStream.on('error', (err) => {\n      logger.error(\n        'MAIN',\n        '[worklet IPC pipe error]',\n        err.code || err.message,\n        err\n      )\n    })\n  workletSidecar.stderr?.on('data', (d) =>\n    logger.error('MAIN', '[worklet stderr]', d?.toString?.() || d)\n  )\n  workletSidecar.stdout?.on('data', (d) =>\n    logger.log('MAIN', '[worklet stdout]', d?.toString?.() || d)\n  )\n  workletSidecar._process?.on?.('exit', (code, sig) => {\n    logger.error('MAIN', '[worklet exit] code=', code, 'signal=', sig)\n  })\n  workletSidecar._process?.on?.('error', (err) => {\n    logger.error('MAIN', '[worklet process error]', err)\n  })\n  await waitForWorkletReady(workletSidecar)\n  const storagePath = await resolveRuntimeStorageDir()\n  emitStartupMarker('STORAGE_PATH_SET', storagePath)\n  try {\n    vaultClient = new PearpassVaultClient(workletSidecar, storagePath, {\n      debugMode,\n      logger\n    })\n    emitStartupMarker('VAULT_CLIENT_READY')\n  } catch (error) {\n    emitStartupMarker(\n      'VAULT_CLIENT_ERROR',\n      (error && (error.stack || error.message)) || String(error)\n    )\n    throw error\n  }\n\n  if (loggingActive) {\n    await enableWorkletFileLogging()\n  }\n\n  vaultClient.on('update', () => {\n    if (mainWindow && !mainWindow.isDestroyed()) {\n      mainWindow.webContents.send('vault:update')\n    }\n  })\n\n  pearRuntime.updater.on('updating', () => {\n    if (mainWindow && !mainWindow.isDestroyed()) {\n      logger.info('runtime:updating', 'sending updating event')\n      mainWindow.webContents.send('runtime:updating')\n    }\n  })\n\n  pearRuntime.updater.on('updated', async () => {\n    if (mainWindow && !mainWindow.isDestroyed()) {\n      logger.info('runtime:updated', 'sending updated event')\n      await pearRuntime.updater.applyUpdate()\n      mainWindow.webContents.send('runtime:updated')\n    }\n  })\n}\n\n/**\n * Run only the worklet via bare-sidecar (no P2P runtime). Used when no upgrade link is set (e.g. dev).\n */\nasync function startWorkletOnly() {\n  // When there is no upgrade link, we don't need pear-runtime's full\n  // update machinery – we just need to run the worklet via bare-sidecar.\n  // bare-sidecar is a dependency of pear-runtime and will be hoisted into\n  // this app's node_modules, so we can require it directly.\n  const Sidecar = require('bare-sidecar')\n  const { PearpassVaultClient } = await import(\n    '@tetherto/pearpass-lib-vault-core'\n  )\n\n  const workletPath = getWorkletPath()\n  if (!fs.existsSync(workletPath)) {\n    throw new Error(`Worklet not found: ${workletPath}`)\n  }\n\n  // Dev-only: allow `PEARPASS_DEV_RESET=1 npm run dev` (or `npm run dev:reset`)\n  // to clear local vault/encryption data so the app starts from scratch.\n  clearVaultStorageForDevReset(getStorageDir())\n\n  // In packaged builds, Bare's module resolution uses the process cwd.\n  let previousCwd = null\n  if (app.isPackaged) {\n    const appRoot = path.join(process.resourcesPath, 'app')\n    if (fs.existsSync(appRoot)) {\n      previousCwd = process.cwd()\n      process.chdir(appRoot)\n      logger.log('MAIN', 'Worklet cwd set to', appRoot)\n    }\n  }\n\n  try {\n    workletSidecar = new Sidecar(workletPath)\n  } finally {\n    if (previousCwd !== null) {\n      process.chdir(previousCwd)\n    }\n  }\n  emitStartupMarker('WORKLET_SPAWNED', 'mode=bare-sidecar')\n  workletSidecar.on('error', (err) => {\n    logger.error('MAIN', '[worklet IPC error]', err.code || err.message, err)\n  })\n  const ipcStream = workletSidecar._process?.stdio?.[3]\n  if (ipcStream)\n    ipcStream.on('error', (err) => {\n      logger.error(\n        'MAIN',\n        '[worklet IPC pipe error]',\n        err.code || err.message,\n        err\n      )\n    })\n  workletSidecar.stderr?.on('data', (d) =>\n    logger.error('MAIN', '[worklet stderr]', d?.toString?.() || d)\n  )\n  workletSidecar.stdout?.on('data', (d) =>\n    logger.log('MAIN', '[worklet stdout]', d?.toString?.() || d)\n  )\n  workletSidecar._process?.on?.('exit', (code, sig) => {\n    logger.error('MAIN', '[worklet exit] code=', code, 'signal=', sig)\n  })\n  workletSidecar._process?.on?.('error', (err) => {\n    logger.error('MAIN', '[worklet process error]', err)\n  })\n  await waitForWorkletReady(workletSidecar)\n  const storagePath = getStorageDir()\n  emitStartupMarker('STORAGE_PATH_SET', storagePath)\n  try {\n    vaultClient = new PearpassVaultClient(workletSidecar, storagePath, {\n      debugMode,\n      logger\n    })\n    emitStartupMarker('VAULT_CLIENT_READY')\n  } catch (error) {\n    emitStartupMarker(\n      'VAULT_CLIENT_ERROR',\n      (error && (error.stack || error.message)) || String(error)\n    )\n    throw error\n  }\n\n  if (loggingActive) {\n    await enableWorkletFileLogging()\n  }\n\n  vaultClient.on('update', () => {\n    if (mainWindow && !mainWindow.isDestroyed()) {\n      mainWindow.webContents.send('vault:update')\n    }\n  })\n}\n\nfunction createWindow() {\n  const isV2 = runtimeConfig.designVersion === 2\n  // Resolve app icon per-platform\n  let iconPath = null\n  if (process.platform === 'darwin') {\n    iconPath = app.isPackaged\n      ? path.join(process.resourcesPath, 'assets', 'darwin', 'icon.png')\n      : path.join(__dirname, '..', 'assets', 'darwin', 'icon.png')\n  } else if (process.platform === 'win32') {\n    iconPath = app.isPackaged\n      ? path.join(process.resourcesPath, 'assets', 'win32', 'icon.ico')\n      : path.join(__dirname, '..', 'assets', 'win32', 'icon.ico')\n  } else {\n    iconPath = app.isPackaged\n      ? path.join(process.resourcesPath, 'assets', 'linux', 'icon.png')\n      : path.join(__dirname, '..', 'assets', 'linux', 'icon.png')\n  }\n\n  let iconImage = null\n  try {\n    iconImage = nativeImage.createFromPath(iconPath)\n  } catch {\n    iconImage = null\n  }\n\n  // Set Dock icon explicitly on macOS\n  if (process.platform === 'darwin' && iconImage && !iconImage.isEmpty()) {\n    try {\n      app.dock.setIcon(iconImage)\n    } catch {\n      // ignore dock icon errors\n    }\n  }\n\n  mainWindow = new BrowserWindow({\n    width: 1440,\n    height: 1024,\n    minWidth: 816,\n    ...(isMac && isV2\n      ? {\n          titleBarStyle: 'hidden',\n          trafficLightPosition: { x: 18, y: 12 }\n        }\n      : {}),\n    backgroundColor: '#1F2430',\n    icon: iconPath && iconImage && !iconImage.isEmpty() ? iconPath : undefined,\n    autoHideMenuBar: true,\n    webPreferences: {\n      preload: path.join(__dirname, 'preload.cjs'),\n      nodeIntegration: true,\n      contextIsolation: false,\n      sandbox: false\n    }\n  })\n\n  mainWindow.loadFile(path.join(__dirname, '..', 'index.html'))\n  emitStartupMarker('WINDOW_CREATED')\n\n  // Open external links in the default browser instead of the Electron window\n  mainWindow.webContents.setWindowOpenHandler(({ url }) => {\n    shell.openExternal(url)\n    return { action: 'deny' }\n  })\n\n  mainWindow.webContents.on('will-navigate', (event, url) => {\n    const appUrl = mainWindow.webContents.getURL()\n    if (url !== appUrl) {\n      event.preventDefault()\n      shell.openExternal(url)\n    }\n  })\n\n  mainWindow.on('closed', () => {\n    mainWindow = null\n  })\n}\n\nfunction fromSerializableArg(data) {\n  if (data && typeof data === 'object' && data.__base64) {\n    return Buffer.from(data.__base64, 'base64')\n  }\n  if (data && typeof data === 'object' && !Array.isArray(data)) {\n    const out = {}\n    for (const k of Object.keys(data)) {\n      out[k] = fromSerializableArg(data[k])\n    }\n    return out\n  }\n  if (Array.isArray(data)) {\n    return data.map(fromSerializableArg)\n  }\n  return data\n}\n\nfunction toSerializableArg(value) {\n  if (Buffer.isBuffer(value)) {\n    return { __base64: value.toString('base64') }\n  }\n  if (value && typeof value === 'object' && !Array.isArray(value)) {\n    const out = {}\n    for (const k of Object.keys(value)) {\n      out[k] = toSerializableArg(value[k])\n    }\n    return out\n  }\n  if (Array.isArray(value)) {\n    return value.map(toSerializableArg)\n  }\n  return value\n}\n\nfunction registerIPC() {\n  ipcMain.on('get-app-path', (e) => {\n    e.returnValue = app.getAppPath()\n  })\n\n  ipcMain.handle('app:getVersion', () => app.getVersion())\n\n  ipcMain.handle('runtime:getConfig', async () => {\n    const storage = await resolveRuntimeStorageDir()\n    return {\n      storage,\n      key: runtimeConfig.upgrade || null,\n      upgrade: runtimeConfig.upgrade,\n      version: runtimeConfig.version,\n      productName: runtimeConfig.productName,\n      applink: runtimeConfig.upgrade || '',\n      userDataPath: getStorageDir(),\n      execPath:\n        isWindows && process.windowsStore\n          ? path.join(\n              process.env.LOCALAPPDATA,\n              'Microsoft',\n              'WindowsApps',\n              path.basename(process.execPath)\n            )\n          : process.execPath,\n      bridgePath: getNativeBridgePath()\n    }\n  })\n\n  ipcMain.handle('runtime:applyUpdate', async () => {\n    logger.info(\n      '[MAIN]',\n      'runtime:applyUpdate',\n      pearRuntime?.updater?.applyUpdate\n    )\n    return await pearRuntime.updater.applyUpdate()\n  })\n\n  ipcMain.handle('runtime:restart', async () => {\n    logger.info('[MAIN]', 'runtime:restart')\n    if (isMac || isLinux) {\n      app.relaunch()\n      app.exit(0)\n    } else {\n      app.exit(0)\n    }\n  })\n\n  ipcMain.handle(\n    'runtime:checkUpdated',\n    async () => !!(pearRuntime && pearRuntime.updated)\n  )\n\n  ipcMain.handle('shell:openExternal', async (_event, url) => {\n    await shell.openExternal(url)\n  })\n\n  ipcMain.handle('vault:invoke', async (_event, { method, args }) => {\n    if (!vaultClient) {\n      throw new Error('Vault client not ready')\n    }\n    const fn = vaultClient[method]\n    if (typeof fn !== 'function') {\n      throw new Error(`Unknown vault method: ${method}`)\n    }\n    const rawArgs = args || []\n    const deserialized = rawArgs.map(fromSerializableArg)\n    try {\n      const result = await fn.apply(vaultClient, deserialized)\n      return { ok: true, data: toSerializableArg(result) }\n    } catch (err) {\n      return {\n        ok: false,\n        error: err.message || String(err),\n        code: err.code\n      }\n    }\n  })\n\n  ipcMain.handle('clipboard:clearAfter', async (_event, { text, delayMs }) =>\n    scheduleClipboardCleanup({\n      app,\n      clipboard,\n      logger,\n      isWindows,\n      text,\n      delayMs\n    })\n  )\n\n  ipcMain.handle('vault:openLogsFolder', async () => {\n    const { logsDir, mainPath } = getLogPaths(getStorageDir())\n    fs.mkdirSync(logsDir, { recursive: true })\n    if (fs.existsSync(mainPath)) {\n      shell.showItemInFolder(mainPath)\n    } else {\n      await shell.openPath(logsDir)\n    }\n  })\n\n  ipcMain.handle('vault:isLoggingEnabled', () => ({\n    enabled: loggingActive,\n    forced: loggingForced\n  }))\n\n  ipcMain.handle('vault:setLogging', async (_event, payload) => {\n    if (loggingForced) {\n      return { enabled: true, forced: true }\n    }\n\n    const next = !!(payload && payload.enabled)\n    if (next === loggingActive) {\n      return { enabled: loggingActive, forced: false }\n    }\n\n    loggingActive = next\n    try {\n      devicePreferences.write(getStorageDir(), {\n        loggingEnabled: loggingActive\n      })\n    } catch (err) {\n      logger.warn('MAIN', 'Failed to persist device preferences', err)\n    }\n\n    if (loggingActive) {\n      // Toggle ON: clear any leftover files for a clean session\n      removeLogFiles(getStorageDir())\n      logger.setLogPath(getStorageDir())\n      await enableWorkletFileLogging()\n      return { enabled: true, forced: false }\n    }\n\n    // Toggle OFF: stop worklet writes first, then close main, then delete\n    if (vaultClient) {\n      try {\n        await vaultClient.setLogOptions({ logFile: null })\n      } catch (err) {\n        logger.warn('MAIN', 'setLogOptions(disable) failed', err)\n      }\n    }\n    logger.clearLogPath()\n    removeLogFiles(getStorageDir())\n    return { enabled: false, forced: false }\n  })\n}\n\napp.whenReady().then(async () => {\n  emitStartupMarker('PEARPASS_MAIN_READY')\n  app.setName(pkg.productName)\n  const { loggingEnabled } = devicePreferences.read(getStorageDir())\n  loggingActive = loggingForced || loggingEnabled\n  if (loggingActive) {\n    logger.setLogPath(getStorageDir())\n  }\n  registerIPC()\n  try {\n    await startRuntime()\n  } catch (err) {\n    emitStartupMarker(\n      'STARTUP_ERROR',\n      (err && (err.stack || err.message)) || String(err)\n    )\n    logger.error('MAIN', 'Failed to start runtime/worklet:', err)\n  }\n\n  createWindow()\n\n  app.on('activate', () => {\n    if (BrowserWindow.getAllWindows().length === 0) {\n      createWindow()\n    }\n  })\n})\n\nasync function cleanup() {\n  if (workletSidecar) {\n    try {\n      workletSidecar.destroy()\n    } catch (_) {}\n  }\n  if (pearRuntime && typeof pearRuntime.close === 'function') {\n    try {\n      await pearRuntime.close()\n    } catch (_) {}\n  }\n}\n\napp.on('window-all-closed', async () => {\n  app.quit()\n})\n\napp.on('before-quit', async () => {\n  await cleanup()\n})\n"
  },
  {
    "path": "electron/preload.cjs",
    "content": "/* eslint-disable no-underscore-dangle */\n/**\n * Preload: with contextIsolation false, runs in the same context as the page.\n * Injects Node globals (__dirname, __filename) and Pear placeholder so the original\n */\nconst path = require('path')\n\nconst { ipcRenderer } = require('electron')\n\nconst pkg = require('../package.json')\n\nconst appPath = ipcRenderer.sendSync('get-app-path')\n\n// Required by fs-native-extensions (pulled in via pear-ipc): binding.js uses __filename\nconst fsNativeExtDir = path.join(\n  appPath,\n  'node_modules',\n  'fs-native-extensions'\n)\nglobal.__dirname = fsNativeExtDir\nglobal.__filename = path.join(fsNativeExtDir, 'binding.js')\nglobal.global = global\n\nwindow.electronAPI = {\n  productName: pkg.productName,\n  getAppVersion: () => ipcRenderer.invoke('app:getVersion'),\n  getConfig: () => ipcRenderer.invoke('runtime:getConfig'),\n  onRuntimeUpdating: (cb) => {\n    const sub = () => cb()\n    ipcRenderer.on('runtime:updating', sub)\n    return () => ipcRenderer.removeListener('runtime:updating', sub)\n  },\n  onRuntimeUpdated: (cb) => {\n    const sub = () => cb()\n    ipcRenderer.on('runtime:updated', sub)\n    return () => ipcRenderer.removeListener('runtime:updated', sub)\n  },\n  applyUpdate: () => ipcRenderer.invoke('runtime:applyUpdate'),\n  restart: () => ipcRenderer.invoke('runtime:restart'),\n  checkUpdated: () => ipcRenderer.invoke('runtime:checkUpdated'),\n  clearClipboardAfter: (text, delayMs) =>\n    ipcRenderer.invoke('clipboard:clearAfter', { text, delayMs }),\n  vaultInvoke: (method, args) =>\n    ipcRenderer.invoke('vault:invoke', { method, args }),\n  vaultOnUpdate: (cb) => {\n    const sub = () => cb()\n    ipcRenderer.on('vault:update', sub)\n    return () => ipcRenderer.removeListener('vault:update', sub)\n  },\n  openExternal: (url) => ipcRenderer.invoke('shell:openExternal', url),\n  openLogsFolder: () => ipcRenderer.invoke('vault:openLogsFolder'),\n  isLoggingEnabled: () => ipcRenderer.invoke('vault:isLoggingEnabled'),\n  setLogging: (enabled) =>\n    ipcRenderer.invoke('vault:setLogging', { enabled: !!enabled })\n}\n"
  },
  {
    "path": "electron/preload.test.js",
    "content": "/* eslint-disable no-underscore-dangle */\n/* eslint-env jest */\n\nconst path = require('path')\n\njest.mock('electron', () => ({\n  ipcRenderer: {\n    sendSync: jest.fn(() => '/fake/app/path'),\n    invoke: jest.fn(),\n    on: jest.fn(),\n    removeListener: jest.fn()\n  }\n}))\n\n// Helper to load the preload script fresh for each test\nconst loadPreload = () => {\n  // Ensure we start from a clean module state\n  jest.resetModules()\n\n  return require('./preload.cjs')\n}\n\ndescribe('preload.cjs', () => {\n  beforeEach(() => {\n    // Provide a minimal window shim so preload.cjs can attach electronAPI\n    globalThis.window = globalThis.window || {}\n\n    // Clean up globals that the preload may set\n    delete globalThis.__dirname\n    delete globalThis.__filename\n    if (typeof window !== 'undefined') {\n      delete window.electronAPI\n    }\n\n    jest.clearAllMocks()\n\n    // Load the preload script (which will set globals and window.electronAPI)\n    loadPreload()\n  })\n\n  it('sets Node-related globals correctly', () => {\n    const expectedDir = path.join(\n      '/fake/app/path',\n      'node_modules',\n      'fs-native-extensions'\n    )\n\n    expect(globalThis.__dirname).toBe(expectedDir)\n    expect(globalThis.__filename).toBe(path.join(expectedDir, 'binding.js'))\n  })\n\n  it('exposes electronAPI on window with expected methods', () => {\n    expect(window.electronAPI).toBeDefined()\n    expect(typeof window.electronAPI.getAppVersion).toBe('function')\n    expect(typeof window.electronAPI.getConfig).toBe('function')\n    expect(typeof window.electronAPI.onRuntimeUpdating).toBe('function')\n    expect(typeof window.electronAPI.onRuntimeUpdated).toBe('function')\n    expect(typeof window.electronAPI.applyUpdate).toBe('function')\n    expect(typeof window.electronAPI.restart).toBe('function')\n    expect(typeof window.electronAPI.checkUpdated).toBe('function')\n    expect(typeof window.electronAPI.clearClipboardAfter).toBe('function')\n    expect(typeof window.electronAPI.vaultInvoke).toBe('function')\n    expect(typeof window.electronAPI.vaultOnUpdate).toBe('function')\n  })\n\n  it('routes simple invoke-based APIs through ipcRenderer.invoke', async () => {\n    const { ipcRenderer } = require('electron')\n\n    await window.electronAPI.getAppVersion()\n    await window.electronAPI.getConfig()\n    await window.electronAPI.applyUpdate()\n    await window.electronAPI.restart()\n    await window.electronAPI.checkUpdated()\n    await window.electronAPI.clearClipboardAfter('secret', 30000)\n\n    expect(ipcRenderer.invoke).toHaveBeenCalledWith('app:getVersion')\n    expect(ipcRenderer.invoke).toHaveBeenCalledWith('runtime:getConfig')\n    expect(ipcRenderer.invoke).toHaveBeenCalledWith('runtime:applyUpdate')\n    expect(ipcRenderer.invoke).toHaveBeenCalledWith('runtime:restart')\n    expect(ipcRenderer.invoke).toHaveBeenCalledWith('runtime:checkUpdated')\n    expect(ipcRenderer.invoke).toHaveBeenCalledWith('clipboard:clearAfter', {\n      text: 'secret',\n      delayMs: 30000\n    })\n  })\n\n  it('routes vaultInvoke through ipcRenderer.invoke with payload', async () => {\n    const { ipcRenderer } = require('electron')\n\n    await window.electronAPI.vaultInvoke('doSomething', { foo: 'bar' })\n\n    expect(ipcRenderer.invoke).toHaveBeenCalledWith('vault:invoke', {\n      method: 'doSomething',\n      args: { foo: 'bar' }\n    })\n  })\n\n  it('subscribes and unsubscribes to runtime updating events', () => {\n    const { ipcRenderer } = require('electron')\n    const cb = jest.fn()\n\n    const unsubscribe = window.electronAPI.onRuntimeUpdating(cb)\n\n    expect(ipcRenderer.on).toHaveBeenCalledTimes(1)\n    const [channel, handler] = ipcRenderer.on.mock.calls[0]\n    expect(channel).toBe('runtime:updating')\n    expect(typeof handler).toBe('function')\n\n    // When unsubscribe is called, it should remove the same handler\n    unsubscribe()\n    expect(ipcRenderer.removeListener).toHaveBeenCalledWith(\n      'runtime:updating',\n      handler\n    )\n  })\n\n  it('subscribes and unsubscribes to runtime updated events', () => {\n    const { ipcRenderer } = require('electron')\n    const cb = jest.fn()\n\n    const unsubscribe = window.electronAPI.onRuntimeUpdated(cb)\n\n    expect(ipcRenderer.on).toHaveBeenCalledTimes(1)\n    const [channel, handler] = ipcRenderer.on.mock.calls[0]\n    expect(channel).toBe('runtime:updated')\n    expect(typeof handler).toBe('function')\n\n    unsubscribe()\n    expect(ipcRenderer.removeListener).toHaveBeenCalledWith(\n      'runtime:updated',\n      handler\n    )\n  })\n\n  it('subscribes and unsubscribes to vault update events', () => {\n    const { ipcRenderer } = require('electron')\n    const cb = jest.fn()\n\n    const unsubscribe = window.electronAPI.vaultOnUpdate(cb)\n\n    expect(ipcRenderer.on).toHaveBeenCalledTimes(1)\n    const [channel, handler] = ipcRenderer.on.mock.calls[0]\n    expect(channel).toBe('vault:update')\n    expect(typeof handler).toBe('function')\n\n    unsubscribe()\n    expect(ipcRenderer.removeListener).toHaveBeenCalledWith(\n      'vault:update',\n      handler\n    )\n  })\n})\n"
  },
  {
    "path": "electron/runtime-config.cjs",
    "content": "/**\n * Pear runtime config for P2P OTA updates.\n */\nconst fs = require('fs')\nconst path = require('path')\n\nconst pkg = require('../package.json')\n\nfunction readDesignVersion() {\n  try {\n    const flagsPath = path.join(\n      __dirname,\n      '..',\n      'node_modules',\n      '@tetherto/pearpass-lib-constants',\n      'src',\n      'constants',\n      'flags.js'\n    )\n    const content = fs.readFileSync(flagsPath, 'utf8')\n    const match = content.match(/DESKTOP_DESIGN_VERSION\\s*=\\s*(\\d+)/)\n    return match ? Number(match[1]) : 1\n  } catch {\n    return 1\n  }\n}\nmodule.exports = {\n  upgrade: pkg.upgrade || null,\n  version: pkg.version ?? 0,\n  productName: pkg.productName ?? pkg.name ?? 'PearPass',\n  legacyChannelLink: pkg.legacyChannelLink || null,\n  designVersion: readDesignVersion()\n}\n"
  },
  {
    "path": "electron-builder.linux.json",
    "content": "{\n  \"appId\": \"com.pears.pass\",\n  \"icon\": \"assets/linux/icon.png\",\n  \"asar\": false,\n  \"directories\": {\n    \"output\": \"out\"\n  },\n  \"files\": [\n    \"electron/**/*\",\n    \"dist/**/*\",\n    \"index.html\",\n    \"index.js\",\n    \"packages/**/*\",\n    \"assets/**/*\",\n    \"src/utils/**/*\",\n    \"!**/node_modules/react-native/**/*\",\n    \"!**/node_modules/@react-native/**/*\"\n  ],\n  \"extraResources\": [\n    {\n      \"from\": \"assets\",\n      \"to\": \"assets\"\n    },\n    {\n      \"from\": \"resources/bin\",\n      \"to\": \"bin\"\n    }\n  ],\n  \"linux\": {\n    \"icon\": \"assets/linux/icon.png\",\n    \"target\": [\n      \"AppImage\"\n    ],\n    \"artifactName\": \"${productName}.${ext}\"\n  },\n  \"toolsets\": {\n    \"appimage\": \"1.0.2\"\n  },\n  \"afterPack\": \"scripts/afterPack.cjs\"\n}\n"
  },
  {
    "path": "electron-builder.mac.json",
    "content": "{\n  \"appId\": \"com.pears.pass\",\n  \"icon\": \"assets/darwin/icon.png\",\n  \"asar\": false,\n  \"directories\": {\n    \"output\": \"out\"\n  },\n  \"files\": [\n    \"electron/**/*\",\n    \"dist/**/*\",\n    \"index.html\",\n    \"index.js\",\n    \"packages/**/*\",\n    \"assets/**/*\",\n    \"src/utils/**/*\",\n    \"!**/node_modules/react-native/**/*\",\n    \"!**/node_modules/@react-native/**/*\"\n  ],\n  \"extraResources\": [\n    {\n      \"from\": \"assets\",\n      \"to\": \"assets\"\n    },\n    {\n      \"from\": \"resources/bin\",\n      \"to\": \"bin\"\n    }\n  ],\n  \"mac\": {\n    \"category\": \"public.app-category.utilities\",\n    \"icon\": \"assets/darwin/icon.png\",\n    \"target\": \"dmg\",\n    \"hardenedRuntime\": true,\n    \"gatekeeperAssess\": false\n  },\n  \"afterSign\": \"scripts/notarize.cjs\",\n  \"afterPack\": \"scripts/afterPack.cjs\",\n  \"dmg\": {}\n}\n"
  },
  {
    "path": "eslint.config.js",
    "content": "import { eslintConfig } from '@tetherto/tether-dev-docs'\nimport globals from 'globals'\n\nexport default [\n  { ignores: ['src/PearPass/**'] },\n  ...eslintConfig,\n  {\n    files: ['**/*.test.{js,jsx,mjs,cjs,ts,tsx}'],\n    languageOptions: {\n      globals: globals.jest\n    }\n  },\n  {\n    files: ['**/*.{js,jsx,mjs,cjs}'],\n    rules: {\n      'no-unused-vars': [\n        'error',\n        {\n          varsIgnorePattern: '^React$',\n          ignoreRestSiblings: true\n        }\n      ]\n    }\n  },\n  {\n    files: ['**/*.{ts,tsx}'],\n    rules: {\n      '@typescript-eslint/no-unused-vars': [\n        'error',\n        {\n          argsIgnorePattern: '^_',\n          varsIgnorePattern: '^React$',\n          ignoreRestSiblings: true\n        }\n      ]\n    }\n  }\n]\n"
  },
  {
    "path": "flatpak/appimage/.gitkeep",
    "content": ""
  },
  {
    "path": "flatpak/com.pears.pass.desktop",
    "content": "[Desktop Entry]\nName=PearPass\nGenericName=Password Manager\nComment=A secure, decentralized and fully local password manager\nExec=pearpass %U\nIcon=com.pears.pass\nTerminal=false\nType=Application\nCategories=Utility;Security;\nKeywords=password;manager;vault;security;credentials;encryption;sync;\nStartupNotify=true\nStartupWMClass=PearPass\nMimeType=x-scheme-handler/pearpass;\n\n"
  },
  {
    "path": "flatpak/com.pears.pass.metainfo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Copyright 2024 Tether Data S.A. de C.V. -->\n<component type=\"desktop-application\">\n  <id>com.pears.pass</id>\n\n  <name>PearPass</name>\n  <summary>A secure, decentralized and fully local password manager</summary>\n\n  <developer id=\"io.tether\">\n    <name>Tether Data S.A. de C.V.</name>\n  </developer>\n\n  <metadata_license>CC0-1.0</metadata_license>\n  <project_license>Apache-2.0</project_license>\n\n  <url type=\"homepage\">https://pearpass.io</url>\n  <url type=\"bugtracker\">https://github.com/tetherto/pearpass-app-desktop/issues</url>\n  <url type=\"vcs-browser\">https://github.com/tetherto/pearpass-app-desktop</url>\n\n  <description>\n    <p>\n      PearPass is a distributed password manager powered by Pear Runtime. It provides\n      secure storage of passwords, credit card details, and secure notes, with the\n      ability to distribute and synchronize data across multiple devices.\n    </p>\n    <p>Features:</p>\n    <ul>\n      <li>Secure password, identity, credit card, notes, and custom fields storage</li>\n      <li>Cross-device and cross-platform synchronization</li>\n      <li>Offline access to your credentials</li>\n      <li>Strong encryption for data security</li>\n      <li>Password strength analysis</li>\n      <li>Random password generator</li>\n      <li>Easy-to-use interface</li>\n      <li>Fully decentralized - your data stays on your devices</li>\n    </ul>\n  </description>\n\n  <launchable type=\"desktop-id\">com.pears.pass.desktop</launchable>\n\n  <branding>\n    <color type=\"primary\" scheme_preference=\"light\">#4CAF50</color>\n    <color type=\"primary\" scheme_preference=\"dark\">#1F2430</color>\n  </branding>\n\n  <screenshots>\n    <!-- TODO: Add actual screenshot URLs before submission -->\n    <screenshot type=\"default\">\n      <caption>Main vault view with password entries</caption>\n      <image>https://pearpass.io/screenshots/vault-view.png</image>\n    </screenshot>\n    <screenshot>\n      <caption>Password generator with strength indicator</caption>\n      <image>https://pearpass.io/screenshots/password-generator.png</image>\n    </screenshot>\n    <screenshot>\n      <caption>Secure notes and custom fields</caption>\n      <image>https://pearpass.io/screenshots/secure-notes.png</image>\n    </screenshot>\n  </screenshots>\n\n  <content_rating type=\"oars-1.1\" />\n\n  <releases>\n    <!--\n      Prepend a new <release> entry (newest first) on every release.\n      AppStream renders this as the user-visible changelog in GNOME Software,\n      KDE Discover, snapcraft.io, and flathub. The snap version itself is\n      sourced from package.json via craftctl in snap/snapcraft.yaml, so the\n      list here is for changelog content only — not a build input.\n    -->\n    <release version=\"1.0.1\" date=\"2024-12-19\">\n      <description>\n        <p>Latest stable release of PearPass.</p>\n      </description>\n    </release>\n    <release version=\"1.0.0\" date=\"2024-01-01\">\n      <description>\n        <p>Initial release of PearPass password manager.</p>\n        <ul>\n          <li>Secure password storage with encryption</li>\n          <li>Credit card and secure notes support</li>\n          <li>Cross-device synchronization via Pear Runtime</li>\n          <li>Password strength analysis and generator</li>\n        </ul>\n      </description>\n    </release>\n  </releases>\n\n  <categories>\n    <category>Utility</category>\n    <category>Security</category>\n  </categories>\n\n  <keywords>\n    <keyword>password</keyword>\n    <keyword>password manager</keyword>\n    <keyword>security</keyword>\n    <keyword>vault</keyword>\n    <keyword>credentials</keyword>\n    <keyword>encryption</keyword>\n    <keyword>sync</keyword>\n    <keyword>decentralized</keyword>\n    <keyword>p2p</keyword>\n    <keyword>pear</keyword>\n  </keywords>\n\n  <provides>\n    <binary>pearpass</binary>\n  </provides>\n\n  <requires>\n    <display_length compare=\"ge\">768</display_length>\n  </requires>\n\n  <recommends>\n    <control>keyboard</control>\n    <control>pointing</control>\n  </recommends>\n\n  <supports>\n    <internet>offline-only</internet>\n  </supports>\n</component>\n\n"
  },
  {
    "path": "flatpak/com.pears.pass.yaml",
    "content": "app-id: com.pears.pass\nruntime: org.gnome.Platform\nruntime-version: '49'\nsdk: org.gnome.Sdk\ncommand: pearpass\n\nfinish-args:\n  - --share=ipc\n  - --share=network\n  - --socket=x11\n  - --socket=fallback-x11\n  - --socket=system-bus\n  - --device=dri\n  - --filesystem=home\n  - --filesystem=xdg-config/pear:create\n  - --talk-name=org.freedesktop.Notifications\n  - --talk-name=org.freedesktop.secrets\n  - --system-talk-name=org.freedesktop.DBus\n  - --system-talk-name=org.bluez\n  - --system-talk-name=org.freedesktop.UPower\n\nmodules:\n  - name: pearpass\n    buildsystem: simple\n    build-commands:\n      # ── Extract AppImage ──────────────────────────────────────────────\n      - chmod +x PearPass.AppImage\n      - ./PearPass.AppImage --appimage-extract\n\n      # ── Install extracted AppImage payload ────────────────────────────\n      - mkdir -p /app/lib/pearpass\n      - cp -a squashfs-root/. /app/lib/pearpass/\n\n      # ── Install wrapper script ────────────────────────────────────────\n      - mkdir -p /app/bin\n      - |\n        cat > /app/bin/pearpass <<'WRAPPER'\n        #!/bin/sh\n        APP_ROOT=\"/app/lib/pearpass\"\n        export LD_LIBRARY_PATH=\"$APP_ROOT${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"\n        # Force X11 backend: Wayland auto-detection inside the flatpak sandbox\n        # is unreliable and was producing a black window on CI-built bundles.\n        # X11 works natively on X11 sessions and via XWayland on Wayland sessions.\n        export GDK_BACKEND=x11\n        cd \"$APP_ROOT\"\n        exec \"$APP_ROOT/pearpass-app-desktop\" \\\n          --no-sandbox \\\n          --disable-gpu \\\n          --disable-gpu-sandbox \\\n          --disable-dev-shm-usage \\\n          --enable-features=UseOzonePlatform \\\n          --ozone-platform=x11 \\\n          \"$@\"\n        WRAPPER\n      - chmod +x /app/bin/pearpass\n\n      # ── Native messaging host entry point ────────────────────────────\n      # Invoked via `flatpak run --command=pearpass-native-host com.pears.pass`\n      # by the host-side wrapper script that Chrome's Native Messaging API\n      # launches. Runs the bridge bundle through Electron's embedded Node.\n      - |\n        cat > /app/bin/pearpass-native-host <<'NMHOST'\n        #!/bin/sh\n        # Call the Electron binary directly, bypassing the pearpass-app-desktop\n        # shell launcher which unconditionally injects --no-sandbox. Under\n        # ELECTRON_RUN_AS_NODE=1 the binary runs as Node and rejects that flag,\n        # causing Chrome to see \"Native host has exited\".\n        APP_ROOT=\"/app/lib/pearpass\"\n        export LD_LIBRARY_PATH=\"$APP_ROOT${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"\n        export ELECTRON_RUN_AS_NODE=1\n        exec \"$APP_ROOT/pearpass-app-desktop.bin\" \\\n          \"$APP_ROOT/resources/app/dist/native-messaging-bridge.bundle.cjs\" \\\n          \"$@\"\n        NMHOST\n      - chmod +x /app/bin/pearpass-native-host\n\n      # ── Desktop integration ───────────────────────────────────────────\n      - install -Dm644 com.pears.pass.desktop /app/share/applications/com.pears.pass.desktop\n      - install -Dm644 com.pears.pass.metainfo.xml /app/share/metainfo/com.pears.pass.metainfo.xml\n\n      # ── Install icon (pre-resized to 512x512 by build script) ────────\n      - install -Dm644 icon-512.png /app/share/icons/hicolor/512x512/apps/com.pears.pass.png\n\n    sources:\n      - type: file\n        path: appimage/PearPass.AppImage\n      - type: file\n        path: com.pears.pass.desktop\n      - type: file\n        path: com.pears.pass.metainfo.xml\n      - type: file\n        path: icon-512.png\n\n"
  },
  {
    "path": "forge.config.cjs",
    "content": "const fs = require('fs')\nconst path = require('path')\n\nconst { isWindows } = require('which-runtime')\n\nconst pkg = require('./package.json')\n\nconst appName = pkg.productName ?? pkg.name\n\nfunction getWindowsKitVersion() {\n  const programFiles =\n    process.env['PROGRAMFILES(X86)'] || process.env.PROGRAMFILES\n  if (!programFiles) return undefined\n  const kitsDir = path.join(programFiles, 'Windows Kits')\n  try {\n    for (const kit of fs.readdirSync(kitsDir).sort().reverse()) {\n      const binDir = path.join(kitsDir, kit, 'bin')\n      if (!fs.existsSync(binDir)) continue\n      const version = fs\n        .readdirSync(binDir)\n        .filter((d) => /^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(d))\n        .sort()\n        .pop()\n      if (version) return version\n    }\n  } catch {\n    return undefined\n  }\n}\n\nconst packagerConfig = {\n  icon: path.join(__dirname, 'assets', 'win32', 'icon'),\n  protocols: [{ name: appName, schemes: [pkg.name] }],\n  derefSymlinks: true,\n  ignore: [\n    // RN deps — bundled by esbuild, never required at runtime\n    /(^|\\/)node_modules\\/react-native(\\/|$)/,\n    /(^|\\/)node_modules\\/@react-native(\\/|$)/,\n    /^\\/e2e($|\\/)/,\n    /^\\/docs($|\\/)/,\n  ]\n}\n\n/** @type {import('@electron-forge/shared-types').ForgeConfig} */\nmodule.exports = {\n  packagerConfig,\n\n  makers: [\n    {\n      name: '@electron-forge/maker-msix',\n      config: {\n        appManifest: path.join(\n          __dirname,\n          'build-assets',\n          'win',\n          'AppxManifest.xml'\n        ),\n        packageAssets: path.join(__dirname, 'build-assets', 'icon'),\n        createPri: false,\n        windowsKitVersion: getWindowsKitVersion(),\n        manifestVariables: {\n          publisher:\n            'CN=&quot;Tether Operations, SA de CV&quot;, O=&quot;Tether Operations, SA de CV&quot;, L=San Salvador, C=SV, SERIALNUMBER=2025120324, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.3=SV'\n        },\n        windowsSignOptions: {\n          certificateSha1: '874b95fdc8a490a3d3bab28643902948b2c7ad43',\n          signWithParams: '/sha1 874b95fdc8a490a3d3bab28643902948b2c7ad43',\n          timestampServer: 'http://timestamp.digicert.com',\n          fileDigestAlgorithm: 'sha256',\n          timestampDigestAlgorithm: 'sha256'\n        }\n      }\n    }\n  ],\n\n  hooks: {\n    preMake: async (_config, options) => {\n      const targetArch = options?.arch || process.arch\n      const msixArch = targetArch === 'arm64' ? 'arm64' : 'x64'\n\n      const pkgJson = JSON.parse(\n        fs.readFileSync(path.resolve('package.json'), 'utf8')\n      )\n      const [major, minor, patch] = pkgJson.version\n        .split('-')[0]\n        .split('.')\n        .map(Number)\n      const msixVersion = `${major}.${minor}.${patch}.0`\n      const manifestPath = path.resolve('build-assets/win/AppxManifest.xml')\n      const manifest = fs.readFileSync(manifestPath, 'utf8')\n      fs.writeFileSync(\n        manifestPath,\n        manifest\n          .replace(/Version=\"\\d+\\.\\d+\\.\\d+\\.\\d+\"/, `Version=\"${msixVersion}\"`)\n          .replace(\n            /ProcessorArchitecture=\"\\w+\"/,\n            `ProcessorArchitecture=\"${msixArch}\"`\n          )\n      )\n    },\n    postMake: async (forgeConfig, results) => {\n      for (const result of results) {\n        if (result.platform !== 'win32') continue\n        for (let i = 0; i < result.artifacts.length; i++) {\n          const artifact = result.artifacts[i]\n          if (!artifact.endsWith('.msix')) continue\n          const dir = path.dirname(artifact)\n          const ext = path.extname(artifact)\n          const base = path.basename(artifact, ext)\n          const renamed = path.join(dir, `${base}-${result.arch}${ext}`)\n          fs.renameSync(artifact, renamed)\n          result.artifacts[i] = renamed\n        }\n      }\n    },\n    readPackageJson: async (forgeConfig, packageJson) => {\n      if (process.env.PEARPASS_UPGRADE_LINK) {\n        packageJson.upgrade = process.env.PEARPASS_UPGRADE_LINK\n      }\n      if (process.env.PEARPASS_LEGACY_CHANNEL_LINK) {\n        packageJson.legacyChannelLink = process.env.PEARPASS_LEGACY_CHANNEL_LINK\n      }\n      if (process.env.BUILD_VERSION) {\n        packageJson.version = process.env.BUILD_VERSION\n      }\n      return packageJson\n    }\n  },\n\n  plugins: [\n    {\n      name: 'electron-forge-plugin-universal-prebuilds',\n      config: {}\n    },\n    {\n      name: 'electron-forge-plugin-prune-prebuilds',\n      config: {}\n    }\n  ]\n}\n"
  },
  {
    "path": "index.html",
    "content": "<!doctype html>\n<html>\n  <body style=\"max-width: 100%; min-width: 1080px; min-height: 900px; overflow: auto;\">\n    <div id=\"root\"></div>\n    <link rel=\"stylesheet\" href=\"./dist/renderer.bundle.css\" />\n    <!-- Must run before bundle: pear-ref and similar expect global.Pear at load time -->\n    <script>\n      window.global = window.global || window;\n      window.Pear = window.Pear || { config: { storage: '', key: null, applink: '' }, constructor: {} };\n    </script>\n    <script src=\"./dist/renderer.bundle.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "index.js",
    "content": "import Runtime from 'pear-electron'\nimport Bridge from 'pear-bridge'\n\nconst bridge = new Bridge({ waypoint: '/index.html' })\nawait bridge.ready()\n\nconst runtime = new Runtime()\nconst pipe = await runtime.start({ bridge })\npipe.on('close', () => Pear.exit())\n\nPear.teardown(() => pipe.destroy())\n"
  },
  {
    "path": "jest.config.js",
    "content": "export default {\n  testEnvironment: 'jsdom',\n  transform: {\n    '^.+\\\\.[jt]sx?$': 'babel-jest'\n  },\n  moduleNameMapper: {\n    '^@tetherto/pearpass-lib-ui-theme-provider$':\n      '<rootDir>/node_modules/@tetherto/pearpass-lib-ui-theme-provider/src/index.js',\n    '^pearpass-lib-ui-theme-provider$':\n      '<rootDir>/node_modules/@tetherto/pearpass-lib-ui-theme-provider/src/index.js'\n  },\n  testPathIgnorePatterns: [\n    '/node_modules/',\n    '/.yalc/',\n    '/packages/',\n    '/e2e/',\n    '/dist/'\n  ],\n  transformIgnorePatterns: [\n    'node_modules/(?!(htm|react-strict-dom|@tetherto/pearpass-lib-ui-theme-provider|@tetherto/pearpass-lib-ui-react-components|@tetherto/pear-apps-lib-ui-react-hooks|@tetherto/pear-apps-utils-validator|@tetherto/pearpass-lib-vault|@tetherto/pearpass-lib-vault-core|@tetherto/pearpass-lib-ui-kit|@tetherto/pearpass-utils-password-check|@tetherto/pearpass-utils-password-generator|@tetherto/pear-apps-utils-pattern-search|@tetherto/pear-apps-utils-avatar-initials|@tetherto/pear-apps-lib-feedback|@tetherto/pear-apps-utils-generate-unique-id|@tetherto/pearpass-lib-constants|@tetherto/pear-apps-utils-date|@tetherto/pear-apps-utils-qr)/)'\n  ],\n  globals: {\n    Pear: {\n      config: { tier: 'dev' }\n    }\n  }\n}\n"
  },
  {
    "path": "lingui.config.js",
    "content": "import { defineConfig } from '@lingui/cli'\nimport { formatter } from '@lingui/format-json'\n\nexport default defineConfig({\n  locales: ['en'],\n  sourceLocale: 'en',\n  catalogs: [\n    {\n      path: './src/locales/{locale}/messages',\n      include: ['./src'],\n      exclude: [\n        './src/native-messaging-bridge/node_modules/**',\n        './src/PearPass/**'\n      ]\n    }\n  ],\n  format: formatter({ style: 'minimal' }),\n  compileNamespace: 'es'\n})\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"pearpass-app-desktop\",\n  \"productName\": \"PearPass\",\n  \"version\": \"2.0.0\",\n  \"description\": \"PearPass password manager\",\n  \"author\": \"PearPass\",\n  \"main\": \"electron/main.cjs\",\n  \"upgrade\": \"pear://dbkezmhetxwo95ab1kcojfraw1eryzf7kex5cahykf6b9c3amd6o\",\n  \"legacyChannelLink\": \"pear://tywsat7gz8m65ejx4zjn3773pbdc4j8m66tukis8dgzekraymtzo\",\n  \"build\": {\n    \"appId\": \"com.pears.pass\",\n    \"icon\": \"assets/darwin/icon.png\",\n    \"asar\": false,\n    \"files\": [\n      \"electron/**/*\",\n      \"dist/**/*\",\n      \"index.html\",\n      \"index.js\",\n      \"packages/**/*\",\n      \"assets/**/*\",\n      \"src/utils/**/*\"\n    ],\n    \"extraResources\": [\n      {\n        \"from\": \"assets\",\n        \"to\": \"assets\"\n      },\n      {\n        \"from\": \"resources/bin\",\n        \"to\": \"bin\"\n      }\n    ],\n    \"mac\": {\n      \"category\": \"public.app-category.utilities\",\n      \"icon\": \"assets/darwin/icon.png\",\n      \"target\": \"dmg\",\n      \"hardenedRuntime\": true,\n      \"gatekeeperAssess\": false\n    },\n    \"afterSign\": \"scripts/notarize.cjs\",\n    \"afterPack\": \"scripts/afterPack.cjs\",\n    \"dmg\": {},\n    \"linux\": {\n      \"icon\": \"assets/linux/icon.png\",\n      \"target\": [\n        \"AppImage\"\n      ],\n      \"artifactName\": \"${productName}.${ext}\"\n    },\n    \"toolsets\": {\n      \"appimage\": \"1.0.2\"\n    },\n    \"publish\": [\n      {\n        \"provider\": \"github\",\n        \"owner\": \"tetherto\",\n        \"repo\": \"pearpass-app-desktop\"\n      }\n    ]\n  },\n  \"pear\": {\n    \"name\": \"pearpass-app-desktop\",\n    \"routes\": \".\",\n    \"unrouted\": [\n      \"/packages/pearpass-lib-vault-core/src/worklet/app.js\"\n    ],\n    \"gui\": {\n      \"backgroundColor\": \"#1F2430\",\n      \"height\": \"1024\",\n      \"width\": \"1440\",\n      \"minWidth\": \"816\"\n    },\n    \"links\": [\n      \"https://hooks.slack.com/services/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\",\n      \"https://docs.google.com/forms/d/e/1FAIpQLScLltvRe64VzMDRzOVjGtHWZ3KafLC2zzvkEoJfTzJkFd67OA/*\"\n    ],\n    \"stage\": {\n      \"entrypoints\": [],\n      \"prefetch\": [\n        \"assets\",\n        \"resources\"\n      ],\n      \"ignore\": [\n        \".github\",\n        \"appling\",\n        \".git\",\n        \".gitignore\",\n        \".husky\",\n        \"e2e\",\n        \"scripts\",\n        \"src\",\n        \"tsconfig.json\",\n        \"eslint.config.js\",\n        \"jest.config.js\",\n        \"flatpak\"\n      ]\n    }\n  },\n  \"type\": \"module\",\n  \"license\": \"Apache-2.0\",\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"build:app\": \"lingui extract && lingui compile && tsc\",\n    \"lint:fix\": \"eslint --fix ./src\",\n    \"lint\": \"eslint ./src\",\n    \"build:worklet\": \"node scripts/build.worklet.mjs\",\n    \"build\": \"node scripts/build.worklet.mjs && npm run build:app && node scripts/bundle-renderer.mjs && node scripts/bundle-bridge.mjs\",\n    \"build:prod\": \"cross-env NODE_ENV=production npm run build\",\n    \"bundle:renderer\": \"node scripts/bundle-renderer.mjs\",\n    \"bundle:bridge\": \"node scripts/bundle-bridge.mjs\",\n    \"lingui:extract\": \"lingui extract\",\n    \"lingui:compile\": \"lingui compile\",\n    \"prepare\": \"husky\",\n    \"postinstall\": \"node scripts/patch-electron-dock-name.mjs\",\n    \"watch:packages\": \"nodemon --watch packages --ext js,json --exec \\\"echo 'Packages changed'\\\"\",\n    \"electron\": \"electron .\",\n    \"dev\": \"concurrently -n \\\"TypeScript,Bundle,Bridge,Electron\\\" -c \\\"blue,cyan,magenta,green\\\" \\\"node node_modules/typescript/bin/tsc --watch\\\" \\\"node scripts/bundle-renderer.mjs --watch\\\" \\\"node scripts/bundle-bridge.mjs --watch\\\" \\\"wait-on dist/renderer.bundle.js && electron .\\\"\",\n    \"dev:reset\": \"PEARPASS_DEV_RESET=1 npm run dev\",\n    \"dist:prepare:dev\": \"npm install && npm run build && npm prune --omit=dev && npm install electron --no-save\",\n    \"dist:mac:arm64\": \"npx electron-builder --mac --arm64 -c electron-builder.mac.json --publish never\",\n    \"dist:mac:x64\": \"npx electron-builder --mac --x64 -c electron-builder.mac.json --publish never\",\n    \"dist:mac:arm64:dev\": \"SKIP_NOTARIZE=true CSC_IDENTITY_AUTO_DISCOVERY=false npm run dist:mac:arm64\",\n    \"dist:mac:x64:dev\": \"SKIP_NOTARIZE=true CSC_IDENTITY_AUTO_DISCOVERY=false npm run dist:mac:x64\",\n    \"dist:win:x64\": \"electron-forge make --platform=win32 --arch=x64\",\n    \"dist:win:arm64\": \"electron-forge make --platform=win32 --arch=arm64\",\n    \"dist:linux:x64\": \"npx electron-builder --linux --x64 -c electron-builder.linux.json --publish never\",\n    \"dist:linux:arm64\": \"npx electron-builder --linux --arm64 -c electron-builder.linux.json --publish never\",\n    \"make\": \"npm run build:prod && npm run dist:win:x64 && npm run dist:win:arm64\",\n    \"dist:snap:x64\": \"npx electron-builder --linux snap --x64 --publish never\",\n    \"dist:snap:arm64\": \"npx electron-builder --linux snap --arm64 --publish never\",\n    \"dist:snap:x64:dev\": \"npm run dist:prepare:dev && dist:snap:x64 && npm install\",\n    \"dist:snap:arm64:dev\": \"npm run dist:prepare:dev && dist:snap:arm64 && npm install\",\n    \"pear:build:darwin:arm64\": \"npx pear-build --package=./package.json --darwin-arm64-app ./out/mac-arm64/PearPass.app --target ../pearpass-app-desktop-$npm_package_version\",\n    \"pear:build:darwin:x64\": \"npx pear-build --package=./package.json --darwin-x64-app ./out/mac/PearPass.app --target ../pearpass-app-desktop-$npm_package_version\",\n    \"pear:build:linux:x64\": \"npx pear-build --package=./package.json --linux-x64-app ./out/PearPass.AppImage --target ../pearpass-app-desktop-$npm_package_version\",\n    \"pear:build:linux:arm64\": \"npx pear-build --package=./package.json --linux-arm64-app ./out/PearPass.AppImage --target ../pearpass-app-desktop-$npm_package_version\",\n    \"pear:build:win:x64\": \"npx pear-build --package=./package.json --win32-x64-app ./out/PearPass/PearPass.msix --target ../pearpass-app-desktop-%npm_package_version%\",\n    \"pear:build:win:arm64\": \"npx pear-build --package=./package.json --win32-arm64-app ./out/PearPass/PearPass.msix --target ../pearpass-app-desktop-%npm_package_version%\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"7.26.10\",\n    \"@babel/preset-env\": \"7.26.9\",\n    \"@babel/preset-react\": \"7.26.3\",\n    \"@babel/preset-typescript\": \"^7.28.5\",\n    \"@electron-forge/cli\": \"^7.6.0\",\n    \"@electron-forge/maker-msix\": \"^7.6.0\",\n    \"@electron/notarize\": \"^2.2.1\",\n    \"@lingui/cli\": \"5.1.2\",\n    \"@testing-library/dom\": \"^10.4.1\",\n    \"@testing-library/jest-dom\": \"6.6.3\",\n    \"@testing-library/react\": \"16.2.0\",\n    \"@tetherto/tether-dev-docs\": \"git+https://github.com/tetherto/tether-dev-docs.git\",\n    \"@types/node\": \"25.4.0\",\n    \"@types/react\": \"19.2.7\",\n    \"@types/react-dom\": \"19.2.3\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.46.0\",\n    \"@typescript-eslint/parser\": \"^8.46.0\",\n    \"@vercel/ncc\": \"0.38.3\",\n    \"babel-jest\": \"29.7.0\",\n    \"bare-pack\": \"1.4.8\",\n    \"cmake-pear\": \"2.0.0\",\n    \"concurrently\": \"9.2.1\",\n    \"cross-env\": \"^10.1.0\",\n    \"electron\": \"^33.0.0\",\n    \"electron-builder\": \"^26.8.1\",\n    \"electron-forge-plugin-prune-prebuilds\": \"^1.0.0\",\n    \"electron-forge-plugin-universal-prebuilds\": \"^1.0.0\",\n    \"electron-reload\": \"^2.0.0-alpha.1\",\n    \"esbuild\": \"^0.24.2\",\n    \"eslint\": \"^9.39.3\",\n    \"eslint-config-prettier\": \"9.1.0\",\n    \"eslint-plugin-eslint-plugin\": \"6.4.0\",\n    \"eslint-plugin-import\": \"2.31.0\",\n    \"eslint-plugin-prettier\": \"5.2.1\",\n    \"eslint-plugin-react\": \"7.37.4\",\n    \"globals\": \"15.14.0\",\n    \"husky\": \"9.1.7\",\n    \"jest\": \"29.7.0\",\n    \"jest-environment-jsdom\": \"29.7.0\",\n    \"nodemon\": \"^3.0.0\",\n    \"patch-package\": \"^8.0.1\",\n    \"pear-build\": \"^1.1.0\",\n    \"pear-interface\": \"1.0.0\",\n    \"pear-runtime-updater\": \"^3.0.10\",\n    \"prettier\": \"3.4.2\",\n    \"typescript\": \"5.9.3\",\n    \"wait-on\": \"^8.0.0\",\n    \"which-runtime\": \"^1.3.2\"\n  },\n  \"dependencies\": {\n    \"@lingui/core\": \"5.1.2\",\n    \"@lingui/format-json\": \"5.1.2\",\n    \"@lingui/macro\": \"5.1.2\",\n    \"@lingui/react\": \"5.1.2\",\n    \"@rive-app/react-webgl2\": \"^4.28.1\",\n    \"@tetherto/pear-apps-lib-feedback\": \"git+https://github.com/tetherto/pear-apps-lib-feedback.git\",\n    \"@tetherto/pear-apps-lib-ui-react-hooks\": \"git+https://github.com/tetherto/pear-apps-lib-ui-react-hooks.git\",\n    \"@tetherto/pear-apps-utils-avatar-initials\": \"git+https://github.com/tetherto/pear-apps-utils-avatar-initials.git\",\n    \"@tetherto/pear-apps-utils-date\": \"git+https://github.com/tetherto/pear-apps-utils-date.git\",\n    \"@tetherto/pear-apps-utils-generate-unique-id\": \"git+https://github.com/tetherto/pear-apps-utils-generate-unique-id.git\",\n    \"@tetherto/pear-apps-utils-pattern-search\": \"git+https://github.com/tetherto/pear-apps-utils-pattern-search.git\",\n    \"@tetherto/pear-apps-utils-qr\": \"git+https://github.com/tetherto/pear-apps-utils-qr.git\",\n    \"@tetherto/pear-apps-utils-validator\": \"git+https://github.com/tetherto/pear-apps-utils-validator.git\",\n    \"@tetherto/pearpass-lib-constants\": \"git+https://github.com/tetherto/pearpass-lib-constants.git\",\n    \"@tetherto/pearpass-lib-data-export\": \"git+https://github.com/tetherto/pearpass-lib-data-export.git\",\n    \"@tetherto/pearpass-lib-data-import\": \"git+https://github.com/tetherto/pearpass-lib-data-import.git\",\n    \"@tetherto/pearpass-lib-native-messaging-bridge\": \"git+https://github.com/tetherto/pearpass-lib-native-messaging-bridge.git\",\n    \"@tetherto/pearpass-lib-ui-kit\": \"git+https://github.com/tetherto/pearpass-lib-ui-react-native-components.git#52a0203fac624124e214ffa965eccb840c48d715\",\n    \"@tetherto/pearpass-lib-ui-theme-provider\": \"git+https://github.com/tetherto/pearpass-lib-ui-theme-provider.git\",\n    \"@tetherto/pearpass-lib-vault\": \"git+https://github.com/tetherto/pearpass-lib-vault.git\",\n    \"@tetherto/pearpass-lib-vault-core\": \"git+https://github.com/tetherto/pearpass-lib-vault-core.git#de5403042d35c6f200c37c10c28adfc3c82151b1\",\n    \"@tetherto/pearpass-utils-password-check\": \"git+https://github.com/tetherto/pearpass-utils-password-check.git\",\n    \"@tetherto/pearpass-utils-password-generator\": \"git+https://github.com/tetherto/pearpass-utils-password-generator.git\",\n    \"autopass\": \"~3.3.0\",\n    \"bare-os\": \"3.6.2\",\n    \"bare-subprocess\": \"5.2.1\",\n    \"buffer\": \"6.0.3\",\n    \"compact-encoding\": \"2.18.0\",\n    \"dotenv\": \"17.2.1\",\n    \"electron-updater\": \"^6.8.3\",\n    \"htm\": \"3.1.1\",\n    \"hyperblobs\": \"^2.11.1\",\n    \"hyperdht\": \"^6.29.6\",\n    \"hyperdrive\": \"^13.3.2\",\n    \"jszip\": \"3.10.1\",\n    \"mirror-drive\": \"^1.14.1\",\n    \"pear-aliases\": \"1.0.6\",\n    \"pear-bridge\": \"1.2.4\",\n    \"pear-electron\": \"1.7.25-rc.0\",\n    \"pear-ipc\": \"6.4.0\",\n    \"pear-run\": \"1.0.5\",\n    \"pear-runtime\": \"^1.1.1\",\n    \"pear-runtime-legacy-storage\": \"^1.1.0\",\n    \"react\": \"19.1.0\",\n    \"react-dom\": \"19.1.0\",\n    \"styled-components\": \"6.1.19\"\n  },\n  \"optionalDependencies\": {\n    \"@esbuild/win32-x64\": \"0.24.2\"\n  },\n  \"overrides\": {\n    \"@xmldom/xmldom\": \"^0.8.10\",\n    \"react\": \"19.1.0\",\n    \"react-dom\": \"19.1.0\",\n    \"electron-windows-msix\": \"git+https://github.com/chetasr/electron-windows-msix.git\"\n  }\n}\n"
  },
  {
    "path": "scripts/afterPack.cjs",
    "content": "#!/usr/bin/env node\n/**\n * Electron-builder afterPack hook.\n *\n * 1. Prune native `prebuilds/<platform>-<arch>` dirs that don't match the\n *    current target. Native modules in the bare/holepunch ecosystem ship\n *    prebuilds for every platform (darwin/linux/win32/android/ios × x64/arm64\n *    + simulators).\n *\n * 2. Linux only: remove chrome-sandbox (squashfs/AppImage cannot preserve\n *    SUID bits, so Chromium's setuid sandbox probe crashes before Node.js\n *    even starts) and wrap the real Electron binary with a shell script that\n *    passes --no-sandbox. app.commandLine.appendSwitch('no-sandbox') in\n *    main.cjs is too late — Chromium's zygote sandbox decision happens\n *    before Node.js initializes. The wrapper ensures --no-sandbox reaches\n *    Chromium at process start.\n */\nconst fs = require('fs')\nconst fsp = require('fs/promises')\nconst path = require('path')\n\nconst ARCH_NAMES = {\n  0: 'ia32',\n  1: 'x64',\n  2: 'armv7l',\n  3: 'arm64',\n  4: 'universal'\n}\n\nexports.default = async function afterPack(context) {\n  await prunePrebuilds(context)\n\n  if (context.electronPlatformName === 'linux') {\n    await wrapLinuxNoSandbox(context)\n  }\n}\n\nasync function prunePrebuilds(context) {\n  const { appOutDir, electronPlatformName, arch, packager } = context\n  const archName = ARCH_NAMES[arch] ?? String(arch)\n  const target = `${electronPlatformName}-${archName}`\n\n  let appRoot\n  if (electronPlatformName === 'darwin' || electronPlatformName === 'mas') {\n    const appName = packager.appInfo.productFilename\n    appRoot = path.join(\n      appOutDir,\n      `${appName}.app`,\n      'Contents',\n      'Resources',\n      'app'\n    )\n  } else {\n    appRoot = path.join(appOutDir, 'resources', 'app')\n  }\n\n  const nodeModules = path.join(appRoot, 'node_modules')\n  if (!fs.existsSync(nodeModules)) {\n    console.warn(\n      `afterPack: node_modules not found at ${nodeModules}, skipping prune`\n    )\n    return\n  }\n\n  const stats = { kept: 0, removed: 0, bytes: 0 }\n  await pruneTree(appRoot, target, stats)\n\n  const mb = (stats.bytes / (1024 * 1024)).toFixed(1)\n  console.log(\n    `afterPack: pruned ${stats.removed} prebuild dir(s), kept ${stats.kept} ` +\n      `matching '${target}'/-universal, freed ~${mb} MB`\n  )\n}\n\nasync function pruneTree(base, target, stats) {\n  await pruneOneLevel(path.join(base, 'prebuilds'), target, stats)\n\n  const nm = path.join(base, 'node_modules')\n  const entries = await safeReadDir(nm)\n  await Promise.all(\n    entries.map(async (entry) => {\n      if (!entry.isDirectory()) return\n      const full = path.join(nm, entry.name)\n      if (entry.name.startsWith('@')) {\n        const subs = await safeReadDir(full)\n        await Promise.all(\n          subs.map((sub) =>\n            sub.isDirectory()\n              ? pruneTree(path.join(full, sub.name), target, stats)\n              : null\n          )\n        )\n      } else {\n        await pruneTree(full, target, stats)\n      }\n    })\n  )\n}\n\nasync function pruneOneLevel(dir, target, stats) {\n  const entries = await safeReadDir(dir)\n  for (const entry of entries) {\n    if (!entry.isDirectory()) continue\n    if (entry.name === target || entry.name.endsWith('-universal')) {\n      stats.kept++\n      continue\n    }\n    const full = path.join(dir, entry.name)\n    stats.bytes += await dirSize(full)\n    await fsp.rm(full, { recursive: true, force: true })\n    stats.removed++\n  }\n}\n\nasync function safeReadDir(dir) {\n  try {\n    return await fsp.readdir(dir, { withFileTypes: true })\n  } catch {\n    return []\n  }\n}\n\nasync function dirSize(dir) {\n  let total = 0\n  const stack = [dir]\n  while (stack.length) {\n    const d = stack.pop()\n    let entries\n    try {\n      entries = await fsp.readdir(d, { withFileTypes: true })\n    } catch {\n      continue\n    }\n    for (const e of entries) {\n      const full = path.join(d, e.name)\n      try {\n        if (e.isDirectory()) stack.push(full)\n        else {\n          const s = await fsp.stat(full)\n          total += (s.blocks ?? 0) * 512 || s.size\n        }\n      } catch {}\n    }\n  }\n  return total\n}\n\nasync function wrapLinuxNoSandbox(context) {\n  const appOutDir = context.appOutDir\n\n  // 1. Remove chrome-sandbox (cannot work inside squashfs / AppImage)\n  const sandboxBin = path.join(appOutDir, 'chrome-sandbox')\n  if (fs.existsSync(sandboxBin)) {\n    fs.unlinkSync(sandboxBin)\n    console.log(`afterPack: removed ${sandboxBin}`)\n  }\n\n  // 2. Wrap the real binary so --no-sandbox is on the command line\n  //    before Chromium's early startup\n  const execName = context.packager.executableName\n  const realBin = path.join(appOutDir, execName)\n  const renamedBin = path.join(appOutDir, `${execName}.bin`)\n\n  if (!fs.existsSync(realBin)) {\n    console.warn(\n      `afterPack: executable not found at ${realBin}, skipping wrapper`\n    )\n    return\n  }\n\n  fs.renameSync(realBin, renamedBin)\n\n  const wrapper = [\n    '#!/bin/bash',\n    `exec \"$(dirname \"$(readlink -f \"$0\")\")/${execName}.bin\" --no-sandbox \"$@\"`,\n    ''\n  ].join('\\n')\n\n  fs.writeFileSync(realBin, wrapper, { mode: 0o755 })\n  console.log(`afterPack: created --no-sandbox wrapper for ${execName}`)\n}\n"
  },
  {
    "path": "scripts/apply-flavor.mjs",
    "content": "#!/usr/bin/env node\n/**\n * Apply build-flavor branding to the working tree. CI-only: mutates icon\n * files and config files in place when PEARPASS_FLAVOR=nightly.\n *\n * Swaps nightly icons over the stable paths, rewrites productName/appId in\n * package.json + electron-builder configs, and patches the Windows MSIX\n * AppxManifest.xml identity + display names. No-op for any other flavor.\n */\nimport fs from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst root = path.resolve(__dirname, '..')\n\nconst flavor = process.env.PEARPASS_FLAVOR || 'release'\nif (flavor === 'release') {\n  process.exit(0)\n}\nif (flavor !== 'nightly') {\n  console.error(`[apply-flavor] Unknown PEARPASS_FLAVOR=\"${flavor}\"`)\n  process.exit(1)\n}\n\nconst STABLE_NAME = 'PearPass'\nconst NIGHTLY_NAME = 'PearPass-nightly'\nconst STABLE_APP_ID = 'com.pears.pass'\nconst NIGHTLY_APP_ID = 'com.pears.pass.nightly'\nconst MSIX_STABLE_IDENTITY = 'PearPass'\nconst MSIX_NIGHTLY_IDENTITY = 'PearPass-Nightly'\n\nconst iconSwaps = [\n  ['assets/darwin/icon-nightly.png', 'assets/darwin/icon.png'],\n  ['assets/linux/icon-nightly.png', 'assets/linux/icon.png'],\n  ['assets/win32/icon-nightly.png', 'assets/win32/icon.png'],\n  ['assets/win32/icon-nightly.ico', 'assets/win32/icon.ico'],\n  ['build-assets/icon/PearPass-nightly.png', 'build-assets/icon/PearPass.png']\n]\n\nfor (const [from, to] of iconSwaps) {\n  const src = path.join(root, from)\n  const dst = path.join(root, to)\n  if (!fs.existsSync(src)) {\n    console.error(`[apply-flavor] Missing nightly asset: ${from}`)\n    process.exit(1)\n  }\n  fs.copyFileSync(src, dst)\n  console.log(`[apply-flavor] swapped ${to} <- ${from}`)\n}\n\nfunction rewriteJson(relPath, mutate) {\n  const abs = path.join(root, relPath)\n  const json = JSON.parse(fs.readFileSync(abs, 'utf8'))\n  mutate(json)\n  fs.writeFileSync(abs, JSON.stringify(json, null, 2) + '\\n', 'utf8')\n  console.log(`[apply-flavor] rewrote ${relPath}`)\n}\n\nrewriteJson('package.json', (pkg) => {\n  if (pkg.productName !== STABLE_NAME) {\n    throw new Error(\n      `[apply-flavor] package.json productName is \"${pkg.productName}\", expected \"${STABLE_NAME}\"`\n    )\n  }\n  pkg.productName = NIGHTLY_NAME\n  if (pkg.build?.appId === STABLE_APP_ID) {\n    pkg.build.appId = NIGHTLY_APP_ID\n  }\n})\n\nrewriteJson('electron-builder.mac.json', (cfg) => {\n  if (cfg.appId === STABLE_APP_ID) cfg.appId = NIGHTLY_APP_ID\n})\nrewriteJson('electron-builder.linux.json', (cfg) => {\n  if (cfg.appId === STABLE_APP_ID) cfg.appId = NIGHTLY_APP_ID\n})\n\nconst manifestPath = path.join(root, 'build-assets/win/AppxManifest.xml')\nlet manifest = fs.readFileSync(manifestPath, 'utf8')\n// Order matters: Name=\"PearPass\" is a substring of DisplayName=\"PearPass\", so\n// swap the more specific tokens first to avoid collateral rewrites.\nconst manifestSwaps = [\n  [`DisplayName=\"${MSIX_STABLE_IDENTITY}\"`, `DisplayName=\"${NIGHTLY_NAME}\"`],\n  [\n    `<DisplayName>${MSIX_STABLE_IDENTITY}</DisplayName>`,\n    `<DisplayName>${NIGHTLY_NAME}</DisplayName>`\n  ],\n  // electron-packager derives the .exe name from productName, so the manifest\n  // must point at PearPass-nightly.exe once productName is rewritten.\n  [`app\\\\${STABLE_NAME}.exe`, `app\\\\${NIGHTLY_NAME}.exe`],\n  [`Alias=\"${STABLE_NAME}.exe\"`, `Alias=\"${NIGHTLY_NAME}.exe\"`],\n  [`Name=\"${MSIX_STABLE_IDENTITY}\"`, `Name=\"${MSIX_NIGHTLY_IDENTITY}\"`]\n]\nfor (const [from, to] of manifestSwaps) {\n  if (!manifest.includes(from)) {\n    throw new Error(\n      `[apply-flavor] AppxManifest.xml missing expected token: ${from}`\n    )\n  }\n  manifest = manifest.split(from).join(to)\n}\nfs.writeFileSync(manifestPath, manifest, 'utf8')\nconsole.log('[apply-flavor] rewrote build-assets/win/AppxManifest.xml')\n\nconsole.log(`[apply-flavor] flavor=\"${flavor}\" applied`)\n"
  },
  {
    "path": "scripts/build-flatpak.sh",
    "content": "#!/bin/bash\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\nPROJECT_DIR=\"$(cd \"$SCRIPT_DIR/..\" && pwd)\"\nFLATPAK_DIR=\"$PROJECT_DIR/flatpak\"\nBUILD_DIR=\"$PROJECT_DIR/build/flatpak\"\n\nAPPIMAGE_PATH=\"\"\nARCH=\"\"\nVERSION=\"\"\n\nlog_info()  { echo -e \"\\033[1;34m[INFO]\\033[0m  $*\"; }\nlog_ok()    { echo -e \"\\033[1;32m[OK]\\033[0m    $*\"; }\nlog_error() { echo -e \"\\033[1;31m[ERROR]\\033[0m $*\"; }\n\nusage() {\n    cat <<EOF\nUsage: $(basename \"$0\") --local <AppImage> [--arch arm64|x64]\n\nOptions:\n  --local <path>   Path to a locally-built AppImage (required)\n  --arch <arch>    Target architecture (default: auto-detect)\n  -h, --help       Show this help message\n\nExample:\n  $(basename \"$0\") --local ./dist/PearPass-1.6.0-arm64.AppImage\nEOF\n    exit 0\n}\n\ndetect_arch() {\n    local machine\n    machine=\"$(uname -m)\"\n    case \"$machine\" in\n        x86_64)  echo \"x64\" ;;\n        aarch64|arm64) echo \"arm64\" ;;\n        *) log_error \"Unsupported architecture: $machine\"; exit 1 ;;\n    esac\n}\n\ncheck_prerequisites() {\n    local missing=()\n    command -v flatpak         >/dev/null 2>&1 || missing+=(\"flatpak\")\n    command -v flatpak-builder >/dev/null 2>&1 || missing+=(\"flatpak-builder\")\n\n    if (( ${#missing[@]} )); then\n        log_error \"Missing tools: ${missing[*]}\"\n        log_error \"Install with: sudo apt install ${missing[*]}\"\n        exit 1\n    fi\n\n    # Check runtime & SDK\n    if ! flatpak info org.gnome.Platform//49 >/dev/null 2>&1; then\n        log_error \"Missing org.gnome.Platform//49\"\n        log_error \"Install: flatpak install flathub org.gnome.Platform//49\"\n        exit 1\n    fi\n    if ! flatpak info org.gnome.Sdk//49 >/dev/null 2>&1; then\n        log_error \"Missing org.gnome.Sdk//49\"\n        log_error \"Install: flatpak install flathub org.gnome.Sdk//49\"\n        exit 1\n    fi\n    log_ok \"Prerequisites satisfied\"\n}\n\nparse_args() {\n    while [[ $# -gt 0 ]]; do\n        case \"$1\" in\n            --local)  APPIMAGE_PATH=\"$2\"; shift 2 ;;\n            --arch)   ARCH=\"$2\"; shift 2 ;;\n            -h|--help) usage ;;\n            *) log_error \"Unknown option: $1\"; usage ;;\n        esac\n    done\n\n    if [[ -z \"$APPIMAGE_PATH\" ]]; then\n        log_error \"--local <AppImage> is required\"\n        usage\n    fi\n\n    # Resolve to absolute path without requiring the parent directory to exist.\n    case \"$APPIMAGE_PATH\" in\n        /*) ;;\n        *) APPIMAGE_PATH=\"$PWD/$APPIMAGE_PATH\" ;;\n    esac\n\n    if [[ ! -f \"$APPIMAGE_PATH\" ]]; then\n        local fallback_out=\"$PROJECT_DIR/out/PearPass.AppImage\"\n        local fallback_dist=\"$PROJECT_DIR/dist/PearPass.AppImage\"\n        if [[ \"$(basename \"$APPIMAGE_PATH\")\" == \"PearPass.AppImage\" && -f \"$fallback_out\" ]]; then\n            APPIMAGE_PATH=\"$fallback_out\"\n            log_info \"Using detected AppImage: $APPIMAGE_PATH\"\n        elif [[ \"$(basename \"$APPIMAGE_PATH\")\" == \"PearPass.AppImage\" && -f \"$fallback_dist\" ]]; then\n            APPIMAGE_PATH=\"$fallback_dist\"\n            log_info \"Using detected AppImage: $APPIMAGE_PATH\"\n        else\n            log_error \"AppImage not found: $APPIMAGE_PATH\"\n            log_error \"Expected output is usually ./out/PearPass.AppImage after dist:linux build\"\n            exit 1\n        fi\n    fi\n\n    [[ -z \"$ARCH\" ]] && ARCH=\"$(detect_arch)\"\n    VERSION=\"$(jq -r '.version' \"$PROJECT_DIR/package.json\")\"\n    log_info \"AppImage : $APPIMAGE_PATH\"\n    log_info \"Arch     : $ARCH\"\n    log_info \"Version  : $VERSION\"\n}\n\nprepare_icon() {\n    log_info \"Extracting and resizing icon from AppImage ...\"\n    local tmpdir\n    local src_icon=\"\"\n    tmpdir=\"$(mktemp -d)\"\n    cp \"$APPIMAGE_PATH\" \"$tmpdir/PearPass.AppImage\"\n    chmod +x \"$tmpdir/PearPass.AppImage\"\n    (cd \"$tmpdir\" && ./PearPass.AppImage --appimage-extract >/dev/null 2>&1)\n\n    local dst_icon=\"$FLATPAK_DIR/icon-512.png\"\n\n    for candidate in \\\n        \"$tmpdir/squashfs-root/resources/assets/linux/icon.png\" \\\n        \"$tmpdir/squashfs-root/usr/share/icons/PearPass.png\"\n    do\n        if [[ -f \"$candidate\" ]]; then\n            src_icon=\"$candidate\"\n            break\n        fi\n    done\n\n    if [[ -z \"$src_icon\" ]]; then\n        log_error \"Icon not found inside AppImage (checked resources/assets/linux/icon.png and usr/share/icons/PearPass.png)\"\n        rm -rf \"$tmpdir\"\n        exit 1\n    fi\n\n    # Resize to 512x512 using ffmpeg (widely available)\n    if command -v ffmpeg >/dev/null 2>&1; then\n        ffmpeg -y -i \"$src_icon\" -vf \"scale=512:512\" \"$dst_icon\" 2>/dev/null\n    elif command -v convert >/dev/null 2>&1; then\n        convert \"$src_icon\" -resize 512x512 \"$dst_icon\"\n    elif command -v magick >/dev/null 2>&1; then\n        magick \"$src_icon\" -resize 512x512 \"$dst_icon\"\n    else\n        log_error \"No image resize tool found (need ffmpeg, imagemagick convert, or magick)\"\n        rm -rf \"$tmpdir\"\n        exit 1\n    fi\n\n    rm -rf \"$tmpdir\"\n    log_ok \"Icon resized to 512x512: $dst_icon\"\n}\n\nbuild_flatpak() {\n    log_info \"Staging AppImage into flatpak/appimage/ ...\"\n    mkdir -p \"$FLATPAK_DIR/appimage\"\n    cp \"$APPIMAGE_PATH\" \"$FLATPAK_DIR/appimage/PearPass.AppImage\"\n    chmod +x \"$FLATPAK_DIR/appimage/PearPass.AppImage\"\n\n    log_info \"Building flatpak ...\"\n    mkdir -p \"$BUILD_DIR\"\n\n    flatpak-builder --force-clean \\\n        --repo=\"$BUILD_DIR/repo\" \\\n        \"$BUILD_DIR/build-dir\" \\\n        \"$FLATPAK_DIR/com.pears.pass.yaml\"\n\n    log_ok \"Build complete. Creating bundle ...\"\n\n    local bundle_name=\"pearpass_${VERSION}_${ARCH}.flatpak\"\n    flatpak build-bundle \\\n        \"$BUILD_DIR/repo\" \\\n        \"$BUILD_DIR/$bundle_name\" \\\n        com.pears.pass\n\n    log_ok \"Flatpak bundle: $BUILD_DIR/$bundle_name\"\n    ls -lh \"$BUILD_DIR/$bundle_name\"\n}\n\ncleanup() {\n    log_info \"Cleaning staging files ...\"\n    rm -f \"$FLATPAK_DIR/appimage/PearPass.AppImage\"\n    rm -f \"$FLATPAK_DIR/icon-512.png\"\n}\n\n# ── Main ────────────────────────────────────────────────────────────────\nparse_args \"$@\"\ncheck_prerequisites\nprepare_icon\nbuild_flatpak\ncleanup\n\nlog_ok \"Done!\"\n"
  },
  {
    "path": "scripts/build-snap.sh",
    "content": "#!/bin/bash\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\nPROJECT_DIR=\"$(cd \"$SCRIPT_DIR/..\" && pwd)\"\nSNAP_DIR=\"$PROJECT_DIR/snap\"\nLOCAL_DIR=\"$SNAP_DIR/local\"\nBUILD_DIR=\"$PROJECT_DIR/build/snap\"\n\nAPPIMAGE_PATH=\"\"\nUNPACKED_PATH=\"\"\nARCH=\"\"\nVERSION=\"\"\nSNAP_OUT=\"\"\n\nlog_info()  { echo -e \"\\033[1;34m[INFO]\\033[0m  $*\"; }\nlog_ok()    { echo -e \"\\033[1;32m[OK]\\033[0m    $*\"; }\nlog_error() { echo -e \"\\033[1;31m[ERROR]\\033[0m $*\"; }\n\nusage() {\n    cat <<EOF\nUsage: $(basename \"$0\") (--unpacked <dir> | --local <AppImage>) [--arch arm64|x64]\n\nOptions:\n  --unpacked <dir> Path to electron-builder's linux-*-unpacked directory\n                   (preferred — skips AppImage round-trip and avoids\n                   mksquashfs glibc issues on newer hosts).\n  --local <path>   Path to a locally-built AppImage. Used as a fallback\n                   when --unpacked is unavailable.\n  --arch <arch>    Target architecture (default: auto-detect)\n  -h, --help       Show this help message\n\nExamples:\n  $(basename \"$0\") --unpacked ./out/linux-arm64-unpacked\n  $(basename \"$0\") --local ./out/PearPass.AppImage\nEOF\n    exit 0\n}\n\ndetect_arch() {\n    local machine\n    machine=\"$(uname -m)\"\n    case \"$machine\" in\n        x86_64)  echo \"amd64\" ;;\n        aarch64|arm64) echo \"arm64\" ;;\n        *) log_error \"Unsupported architecture: $machine\"; exit 1 ;;\n    esac\n}\n\ncheck_prerequisites() {\n    local missing=()\n    command -v snapcraft >/dev/null 2>&1 || missing+=(\"snapcraft\")\n\n    if (( ${#missing[@]} )); then\n        log_error \"Missing tools: ${missing[*]}\"\n        log_error \"Install snapcraft: sudo snap install snapcraft --classic\"\n        exit 1\n    fi\n\n    # snapcraft 8+ on core22 needs lxd (default) or multipass as a backend.\n    if ! command -v lxd >/dev/null 2>&1 && ! command -v multipass >/dev/null 2>&1; then\n        log_error \"snapcraft needs an LXD or Multipass backend\"\n        log_error \"  sudo snap install lxd && sudo lxd init --auto && sudo usermod -aG lxd \\$USER\"\n        log_error \"  (then log out and back in, or run: newgrp lxd)\"\n        exit 1\n    fi\n\n    log_ok \"Prerequisites satisfied\"\n}\n\nparse_args() {\n    while [[ $# -gt 0 ]]; do\n        case \"$1\" in\n            --local)    APPIMAGE_PATH=\"${2:?--local requires a path}\"; shift 2 ;;\n            --unpacked)\n                # Bare --unpacked → auto-detect below. --unpacked <dir> → explicit.\n                if [[ $# -ge 2 && \"$2\" != --* ]]; then\n                    UNPACKED_PATH=\"$2\"; shift 2\n                else\n                    shift 1\n                fi\n                ;;\n            --arch)     ARCH=\"${2:?--arch requires a value}\"; shift 2 ;;\n            -h|--help)  usage ;;\n            *) log_error \"Unknown option: $1\"; usage ;;\n        esac\n    done\n\n    [[ -z \"$ARCH\" ]] && ARCH=\"$(detect_arch)\"\n\n    if [[ -z \"$UNPACKED_PATH\" && -z \"$APPIMAGE_PATH\" ]]; then\n        # Match electron-builder's naming: linux-arm64-unpacked for arm64,\n        # linux-unpacked for x64.\n        case \"$ARCH\" in\n            arm64) arch_dir=\"linux-arm64-unpacked\" ;;\n            amd64|x64) arch_dir=\"linux-unpacked\" ;;\n            *) log_error \"Unsupported arch for auto-detect: $ARCH\"; exit 1 ;;\n        esac\n        for candidate in \"$PROJECT_DIR/out/$arch_dir\" \"$PROJECT_DIR/dist/$arch_dir\"; do\n            if [[ -d \"$candidate\" ]]; then\n                UNPACKED_PATH=\"$candidate\"\n                log_info \"Auto-detected unpacked dir: $UNPACKED_PATH\"\n                break\n            fi\n        done\n    fi\n\n    if [[ -z \"$UNPACKED_PATH\" && -z \"$APPIMAGE_PATH\" ]]; then\n        log_error \"Pass --unpacked <dir> or --local <AppImage>\"\n        usage\n    fi\n\n    if [[ -n \"$UNPACKED_PATH\" ]]; then\n        case \"$UNPACKED_PATH\" in /*) ;; *) UNPACKED_PATH=\"$PWD/$UNPACKED_PATH\" ;; esac\n        if [[ ! -d \"$UNPACKED_PATH\" ]]; then\n            log_error \"Unpacked directory not found: $UNPACKED_PATH\"\n            exit 1\n        fi\n    elif [[ -n \"$APPIMAGE_PATH\" ]]; then\n        case \"$APPIMAGE_PATH\" in /*) ;; *) APPIMAGE_PATH=\"$PWD/$APPIMAGE_PATH\" ;; esac\n        if [[ ! -f \"$APPIMAGE_PATH\" ]]; then\n            log_error \"AppImage not found: $APPIMAGE_PATH\"\n            log_error \"Build one first with: npm run dist:linux:<arch>\"\n            exit 1\n        fi\n    fi\n\n    VERSION=\"$(jq -r '.version' \"$PROJECT_DIR/package.json\")\"\n    log_info \"Source   : ${UNPACKED_PATH:-$APPIMAGE_PATH}\"\n    log_info \"Arch     : $ARCH\"\n    log_info \"Version  : $VERSION\"\n}\n\nstage_sources() {\n    mkdir -p \"$LOCAL_DIR\"\n    # Clean stale staging so unpacked/ wins deterministically over PearPass.AppImage.\n    rm -rf \"$LOCAL_DIR/unpacked\" \"$LOCAL_DIR/PearPass.AppImage\"\n\n    if [[ -n \"$UNPACKED_PATH\" ]]; then\n        log_info \"Staging unpacked Electron payload into snap/local/unpacked/ ...\"\n        # Hard-link to avoid duplicating ~1 GB on the same filesystem.\n        cp -al \"$UNPACKED_PATH\" \"$LOCAL_DIR/unpacked\"\n    else\n        log_info \"Staging AppImage into snap/local/ ...\"\n        cp \"$APPIMAGE_PATH\" \"$LOCAL_DIR/PearPass.AppImage\"\n        chmod +x \"$LOCAL_DIR/PearPass.AppImage\"\n    fi\n}\n\nbuild_snap() {\n    log_info \"Building snap (this may take several minutes on first run) ...\"\n    mkdir -p \"$BUILD_DIR\"\n\n    cd \"$PROJECT_DIR\"\n    # `--output <abs-path>` is unreliable across snapcraft+LXD versions,\n    # so we glob the result in PROJECT_DIR instead.\n    snapcraft pack\n    local OUT\n    OUT=\"$(ls -1t \"$PROJECT_DIR\"/pearpass_*_\"${ARCH}\".snap 2>/dev/null | head -n1)\"\n    if [[ -z \"$OUT\" || ! -f \"$OUT\" ]]; then\n        log_error \"snapcraft reported success but no pearpass_*_${ARCH}.snap was found in $PROJECT_DIR\"\n        exit 1\n    fi\n    SNAP_OUT=\"$BUILD_DIR/$(basename \"$OUT\")\"\n    mv -f \"$OUT\" \"$SNAP_OUT\"\n\n    log_ok \"Snap bundle: $SNAP_OUT\"\n    ls -lh \"$SNAP_OUT\"\n}\n\ncleanup() {\n    log_info \"Cleaning staging files ...\"\n    rm -rf \"$LOCAL_DIR/unpacked\"\n    rm -f \"$LOCAL_DIR/PearPass.AppImage\"\n}\n\n# ── Main ────────────────────────────────────────────────────────────────\nparse_args \"$@\"\ncheck_prerequisites\nstage_sources\nbuild_snap\ncleanup\n\nSNAP_NAME=\"$(awk '/^name:/ {print $2; exit}' \"$SNAP_DIR/snapcraft.yaml\")\"\nlog_ok \"Done!\"\nlog_info \"Install with:\"\nlog_info \"  sudo snap install --dangerous $SNAP_OUT\"\nlog_info \"  sudo snap connect ${SNAP_NAME}:browser-native-messaging\"\n"
  },
  {
    "path": "scripts/build.worklet.mjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable no-underscore-dangle */\n/**\n * Bundle the vault worklet (ESM) to CommonJS for the packaged app so Bare can run it.\n * Only worklet source is bundled; all node_modules are external so Bare resolves them at runtime\n */\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport * as esbuild from 'esbuild'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst root = path.join(__dirname, '..')\nconst workletDir = path.join(\n  root,\n  'node_modules',\n  '@tetherto/pearpass-lib-vault-core',\n  'src',\n  'worklet'\n)\n\n/** Externalize any package (non-relative specifier) so node_modules are never inlined. */\nconst externalizeNodeModules = {\n  name: 'externalize-node-modules',\n  setup(build) {\n    build.onResolve({ filter: /^[^./]/ }, (args) => {\n      // Skip Windows absolute paths (e.g. C:\\, F:\\)\n      if (/^[A-Za-z]:[/\\\\]/.test(args.path)) return null\n      return { path: args.path, external: true }\n    })\n  }\n}\n\nasync function buildWorklet() {\n  await esbuild.build({\n    entryPoints: [path.join(workletDir, 'app.js')],\n    bundle: true,\n    platform: 'node',\n    format: 'cjs',\n    target: 'node18',\n    outfile: path.join(workletDir, 'app.cjs'),\n    plugins: [externalizeNodeModules],\n    alias: {\n      fs: 'bare-fs',\n      path: 'bare-path',\n      buffer: 'bare-buffer',\n      crypto: 'bare-crypto',\n      os: 'bare-os'\n    },\n    logLevel: 'info'\n  })\n}\n\nbuildWorklet()\n"
  },
  {
    "path": "scripts/bundle-bridge.mjs",
    "content": "#!/usr/bin/env node\n/**\n * Bundle the native messaging bridge into a single CJS file for Electron (ELECTRON_RUN_AS_NODE).\n * Node built-ins and pear-ipc are external: they resolve at runtime.\n */\nimport * as esbuild from 'esbuild'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst root = path.join(__dirname, '..')\nconst watch = process.argv.includes('--watch')\n\nconst ctx = await esbuild.context({\n  entryPoints: [\n    path.join(\n      root,\n      'node_modules',\n      '@tetherto',\n      'pearpass-lib-native-messaging-bridge',\n      'index.js'\n    )\n  ],\n  bundle: true,\n  outfile: path.join(root, 'dist', 'native-messaging-bridge.bundle.cjs'),\n  platform: 'node',\n  target: ['node18'],\n  format: 'cjs',\n  external: [\n    'fs',\n    'fs/promises',\n    'path',\n    'os',\n    'net',\n    'events',\n    'crypto',\n    'child_process',\n    'pear-ipc'\n  ],\n  logLevel: 'info'\n})\n\nif (watch) {\n  await ctx.watch()\n  console.log('Watching for changes...')\n} else {\n  await ctx.rebuild()\n  ctx.dispose()\n}\n"
  },
  {
    "path": "scripts/bundle-renderer.mjs",
    "content": "#!/usr/bin/env node\n/**\n * Bundle the renderer (app.electron.tsx + deps) into a single file for Electron.\n * Node built-ins are external: they resolve at runtime in the renderer (nodeIntegration: true).\n */\nimport * as esbuild from 'esbuild'\nimport { readFile } from 'fs/promises'\nimport { createRequire } from 'module'\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst root = path.join(__dirname, '..')\nconst watch = process.argv.includes('--watch')\nconst require = createRequire(import.meta.url)\nconst postcss = require('postcss')\nconst babel = require('@babel/core')\nconst fg = require('fast-glob')\nconst reactStrictDomPostcssPlugin = require('react-strict-dom/postcss-plugin')\nconst strictDomBabelConfig = require(path.join(root, 'babel.strict-dom.cjs'))\nconst strictDomCssInclude = [\n  'app.electron.tsx',\n  'src/**/*.{js,jsx,mjs,ts,tsx}',\n  'node_modules/@tetherto/pearpass-lib-ui-kit/dist/**/*.js'\n]\nconst strictDomRuntimePaths = [\n  `${path.sep}node_modules${path.sep}react-strict-dom${path.sep}dist${path.sep}`,\n  `${path.sep}node_modules${path.sep}@tetherto${path.sep}pearpass-lib-ui-kit${path.sep}dist${path.sep}`\n]\n\nfunction shouldTransformStrictDomRuntime(filePath) {\n  return strictDomRuntimePaths.some((runtimePath) => filePath.includes(runtimePath))\n}\n\nfunction getLoader(filePath) {\n  if (filePath.endsWith('.tsx')) return 'tsx'\n  if (filePath.endsWith('.ts')) return 'ts'\n  if (filePath.endsWith('.jsx')) return 'jsx'\n  return 'js'\n}\n\nfunction strictDomBabelPlugin() {\n  return {\n    name: 'strict-dom-babel',\n    setup(build) {\n      build.onLoad({ filter: /\\.[cm]?[jt]sx?$/ }, async (args) => {\n        if (!shouldTransformStrictDomRuntime(args.path)) return null\n\n        const source = await readFile(args.path, 'utf8')\n        const transformed = await babel.transformAsync(source, {\n          filename: args.path,\n          sourceMaps: true,\n          ...strictDomBabelConfig\n        })\n\n        return {\n          contents: transformed?.code ?? source,\n          loader: getLoader(args.path),\n          resolveDir: path.dirname(args.path)\n        }\n      })\n    }\n  }\n}\n\nfunction strictDomCssPlugin() {\n  return {\n    name: 'strict-dom-css',\n    setup(build) {\n      build.onLoad({ filter: /strict\\.css$/ }, async (args) => {\n        const source = await readFile(args.path, 'utf8')\n        const watchFiles = fg.sync(strictDomCssInclude, {\n          cwd: root,\n          absolute: true,\n          onlyFiles: true,\n          dot: false\n        })\n        const result = await postcss([\n          reactStrictDomPostcssPlugin({\n            cwd: root,\n            include: strictDomCssInclude,\n            babelConfig: strictDomBabelConfig,\n            useCSSLayers: true\n          })\n        ]).process(source, { from: args.path })\n\n        return {\n          contents: result.css,\n          loader: 'css',\n          resolveDir: path.dirname(args.path),\n          watchFiles\n        }\n      })\n    }\n  }\n}\n\nconst ctx = await esbuild.context({\n  entryPoints: [path.join(root, 'app.electron.tsx')],\n  bundle: true,\n  outfile: path.join(root, 'dist', 'renderer.bundle.js'),\n  platform: 'browser',\n  target: ['es2020'],\n  format: 'iife',\n  sourcemap: true,\n  define: {\n    'process.env.NODE_ENV': JSON.stringify(\n      process.env.NODE_ENV || 'development'\n    )\n  },\n  loader: {\n    '.js': 'jsx',\n    '.mjs': 'js'\n  },\n  resolveExtensions: [\n    '.web.mjs',\n    '.web.js',\n    '.web.mts',\n    '.web.ts',\n    '.web.jsx',\n    '.web.tsx',\n    '.mjs',\n    '.js',\n    '.mts',\n    '.ts',\n    '.jsx',\n    '.tsx',\n    '.css',\n    '.json'\n  ],\n  plugins: [strictDomBabelPlugin(), strictDomCssPlugin()],\n  jsx: 'automatic',\n  alias: {\n    react: path.join(root, 'node_modules', 'react'),\n    'react-dom': path.join(root, 'node_modules', 'react-dom')\n  },\n  external: [\n    'fs',\n    'path',\n    'os',\n    'net',\n    'crypto',\n    'child_process',\n    'fs/promises',\n    'require-addon',\n    'fs-native-extensions',\n    'sodium-native',\n    'crypto'\n  ],\n  logLevel: 'info'\n})\n\nif (watch) {\n  await ctx.watch()\n  console.log('Watching for changes...')\n} else {\n  await ctx.rebuild()\n  ctx.dispose()\n}\n"
  },
  {
    "path": "scripts/create-linux-tarball.sh",
    "content": "#!/bin/bash\n# PearPass Desktop - Create Linux tar.gz archive from AppImage\n# Creates a consistent archive structure for Flatpak/Snapcraft builds\n#\n# Usage:\n#   ./scripts/create-linux-tarball.sh [--appimage PATH] [--arch x64|arm64] [--output DIR]\n#\n# Default:\n#   --appimage: appling/PearPass.AppImage\n#   --arch: auto-detect from current system\n#   --output: build/\n\nset -euo pipefail\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_ROOT=\"$(cd \"${SCRIPT_DIR}/..\" && pwd)\"\n\n# Default values\nAPPIMAGE_PATH=\"${PROJECT_ROOT}/appling/PearPass.AppImage\"\nARCH=\"\"\nOUTPUT_DIR=\"${PROJECT_ROOT}/build\"\n\n# Colors for output\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[1;33m'\nNC='\\033[0m'\n\nlog_info() { echo -e \"${GREEN}[INFO]${NC} $1\"; }\nlog_warn() { echo -e \"${YELLOW}[WARN]${NC} $1\"; }\nlog_error() { echo -e \"${RED}[ERROR]${NC} $1\"; }\n\ndetect_arch() {\n    local machine=$(uname -m)\n    case \"$machine\" in\n        x86_64) echo \"x64\" ;;\n        aarch64|arm64) echo \"arm64\" ;;\n        *) log_error \"Unsupported architecture: $machine\"; exit 1 ;;\n    esac\n}\n\nparse_args() {\n    while [[ $# -gt 0 ]]; do\n        case \"$1\" in\n            --appimage)\n                APPIMAGE_PATH=\"$2\"\n                shift 2\n                ;;\n            --arch)\n                ARCH=\"$2\"\n                shift 2\n                ;;\n            --output)\n                OUTPUT_DIR=\"$2\"\n                shift 2\n                ;;\n            -h|--help)\n                echo \"Usage: $0 [--appimage PATH] [--arch x64|arm64] [--output DIR]\"\n                exit 0\n                ;;\n            *)\n                log_error \"Unknown option: $1\"\n                exit 1\n                ;;\n        esac\n    done\n\n    if [[ -z \"$ARCH\" ]]; then\n        ARCH=$(detect_arch)\n    fi\n}\n\nmain() {\n    parse_args \"$@\"\n\n    # Validate AppImage exists\n    if [[ ! -f \"$APPIMAGE_PATH\" ]]; then\n        log_error \"AppImage not found: $APPIMAGE_PATH\"\n        exit 1\n    fi\n\n    log_info \"Using AppImage: $APPIMAGE_PATH\"\n    log_info \"Target architecture: $ARCH\"\n\n    # Create temp directory for extraction\n    EXTRACT_DIR=$(mktemp -d)\n    TARBALL_DIR=$(mktemp -d)\n    trap \"rm -rf '$EXTRACT_DIR' '$TARBALL_DIR'\" EXIT\n\n    # Extract AppImage\n    log_info \"Extracting AppImage...\"\n    cd \"$EXTRACT_DIR\"\n    chmod +x \"$APPIMAGE_PATH\"\n    \"$APPIMAGE_PATH\" --appimage-extract > /dev/null 2>&1\n\n    # Create tarball structure\n    mkdir -p \"$TARBALL_DIR/lib\"\n    mkdir -p \"$TARBALL_DIR/pear-pass\"\n\n    # Find and copy binary\n    log_info \"Copying binary...\"\n    BINARY_PATH=$(find squashfs-root -name \"pear-pass\" -type f -executable 2>/dev/null | head -n 1)\n    if [[ -z \"$BINARY_PATH\" ]]; then\n        BINARY_PATH=$(find squashfs-root -name \"pearpass\" -type f -executable 2>/dev/null | head -n 1)\n    fi\n    if [[ -n \"$BINARY_PATH\" ]]; then\n        cp \"$BINARY_PATH\" \"$TARBALL_DIR/pearpass\"\n        chmod +x \"$TARBALL_DIR/pearpass\"\n        log_info \"  Found binary: $BINARY_PATH\"\n    else\n        log_error \"Could not find main binary in AppImage\"\n        log_info \"Available executables:\"\n        find squashfs-root -type f -executable\n        exit 1\n    fi\n\n    # Find and copy app.bundle\n    log_info \"Copying app.bundle...\"\n    BUNDLE_PATH=$(find squashfs-root -name \"app.bundle\" -type f 2>/dev/null | head -n 1)\n    if [[ -n \"$BUNDLE_PATH\" ]]; then\n        cp \"$BUNDLE_PATH\" \"$TARBALL_DIR/pear-pass/app.bundle\"\n        log_info \"  Found bundle: $BUNDLE_PATH\"\n    else\n        log_warn \"app.bundle not found in AppImage\"\n    fi\n\n    # Find and copy native .so libraries\n    log_info \"Copying native libraries...\"\n    SO_COUNT=0\n    while IFS= read -r -d '' so_file; do\n        cp \"$so_file\" \"$TARBALL_DIR/lib/\"\n        ((SO_COUNT++))\n    done < <(find squashfs-root -name \"*.so\" -type f -print0 2>/dev/null) || true\n    log_info \"  Copied $SO_COUNT libraries\"\n\n    # Show contents\n    log_info \"Archive contents:\"\n    find \"$TARBALL_DIR\" -type f | sed 's|'\"$TARBALL_DIR\"'|  |'\n\n    # Create output directory and tarball\n    mkdir -p \"$OUTPUT_DIR\"\n    TARBALL_NAME=\"PearPass.linux.${ARCH}.bin.tar.gz\"\n    cd \"$TARBALL_DIR\"\n    tar -czvf \"$OUTPUT_DIR/$TARBALL_NAME\" . > /dev/null\n\n    log_info \"Created: $OUTPUT_DIR/$TARBALL_NAME\"\n    log_info \"Done!\"\n}\n\nmain \"$@\"\n\n"
  },
  {
    "path": "scripts/notarize.cjs",
    "content": "#!/usr/bin/env node\n/**\n * Electron-builder afterSign hook: notarize the macOS app using the \"notary\" keychain profile.\n * CI must run: xcrun notarytool store-credentials \"notary\" ... before the build.\n */\nconst path = require('path')\n\nconst { notarize } = require('@electron/notarize')\n\nexports.default = async function notarizeHook(context) {\n  const { electronPlatformName, appOutDir, packager } = context\n  if (electronPlatformName !== 'darwin') return\n  if (process.env.SKIP_NOTARIZE === 'true') {\n    console.log('Skipping notarization')\n    return\n  }\n  const appName = packager.appInfo.productFilename\n  const appPath = path.join(appOutDir, `${appName}.app`)\n\n  await notarize({\n    appPath,\n    keychainProfile: 'notary',\n    tool: 'notarytool'\n  })\n}\n"
  },
  {
    "path": "scripts/patch-electron-dock-name.mjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable no-underscore-dangle */\n/**\n * On macOS, make the dock show \"PearPass\" when running `electron .` in development.\n * The dock uses the .app bundle *folder name*, not Info.plist. So we:\n * 1. Rename Electron.app -> PearPass.app\n * 2. Update electron's path.txt so it launches PearPass.app\n * 3. Patch Info.plist in the renamed bundle and clear quarantine (avoid translocation)\n * Run automatically after npm install (postinstall) on darwin only.\n */\nimport { execSync } from 'child_process'\nimport fs from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst root = path.resolve(__dirname, '..')\nconst dist = path.join(root, 'node_modules', 'electron', 'dist')\nconst electronApp = path.join(dist, 'Electron.app')\nconst pathTxt = path.join(root, 'node_modules', 'electron', 'path.txt')\n\nif (process.platform !== 'darwin') {\n  process.exit(0)\n}\n\nlet appName = 'PearPass'\ntry {\n  const pkg = JSON.parse(\n    fs.readFileSync(path.join(root, 'package.json'), 'utf8')\n  )\n  appName = pkg.build?.productName || pkg.productName || appName\n} catch {\n  // keep default\n}\n\n// Sanitize for folder name (no slashes)\nconst appFolderName = `${appName}.app`\nconst renamedApp = path.join(dist, appFolderName)\n\nif (!fs.existsSync(electronApp)) {\n  // Already patched (renamed) or electron not installed\n  if (fs.existsSync(renamedApp)) {\n    process.exit(0)\n  }\n  process.exit(0)\n}\n\ntry {\n  // 1. Rename Electron.app -> PearPass.app (dock uses .app folder name)\n  fs.renameSync(electronApp, renamedApp)\n  console.log(\n    `[patch-electron-dock-name] Renamed Electron.app -> ${appFolderName}`\n  )\n\n  // 2. Update path.txt so \"electron\" CLI launches the renamed app (binary inside is still \"Electron\")\n  const macPath = `${appFolderName}/Contents/MacOS/Electron`\n  fs.writeFileSync(pathTxt, macPath, 'utf8')\n  console.log(`[patch-electron-dock-name] Updated path.txt to ${macPath}`)\n\n  // 3. Patch Info.plist in the renamed bundle\n  const plistPath = path.join(renamedApp, 'Contents', 'Info.plist')\n  const PlistBuddy = '/usr/libexec/PlistBuddy'\n  execSync(`\"${PlistBuddy}\" -c \"Set :CFBundleName ${appName}\" \"${plistPath}\"`, {\n    stdio: 'inherit'\n  })\n  execSync(\n    `\"${PlistBuddy}\" -c \"Set :CFBundleDisplayName ${appName}\" \"${plistPath}\"`,\n    { stdio: 'inherit' }\n  )\n\n  // 4. Clear quarantine so macOS doesn't translocate (run from copy with old name)\n  execSync(`xattr -cr \"${renamedApp}\"`, { stdio: 'ignore' })\n  console.log(\n    `[patch-electron-dock-name] Dock will show \"${appName}\". Quit the app and run again.`\n  )\n} catch (err) {\n  console.warn('[patch-electron-dock-name] Failed:', err.message)\n  process.exit(1)\n}\n"
  },
  {
    "path": "snap/snapcraft.yaml",
    "content": "name: pearpass\nadopt-info: pearpass\ntitle: PearPass\nsummary: A secure, decentralized and fully local password manager\ndescription: |\n  PearPass is a privacy-focused password manager. Vaults sync peer-to-peer\n  between your devices via the Pear runtime — no cloud, no servers, no\n  account.\nlicense: Apache-2.0\nbase: core22\ngrade: stable\nconfinement: strict\ncompression: lzo\n\narchitectures:\n  - build-on: amd64\n  - build-on: arm64\n\napps:\n  pearpass:\n    command: usr/bin/pearpass\n    common-id: com.pears.pass\n    desktop: usr/share/applications/com.pears.pass.desktop\n    extensions: [gnome]\n    plugs:\n      - home\n      - network\n      - network-bind\n      - desktop\n      - desktop-legacy\n      - wayland\n      - x11\n      - unity7\n      - opengl\n      - removable-media\n      - browser-native-messaging\n\n  native-host:\n    # Browsers exec /snap/bin/pearpass.native-host directly (the manifest's\n    # `path` field). snapd routes that to this app slot, which pipes JSON\n    # over stdio through Electron's embedded Node.\n    command: usr/bin/pearpass-native-host\n    extensions: [gnome]\n    plugs:\n      - home\n      - network\n      - network-bind\n\n# Directory-scoped (not file-scoped): file scope's AppArmor expansion\n# `<file>{,/,/**}` blocks mkdir of the parent, and browsers don't create\n# NativeMessagingHosts/ themselves (verified for host + snap Firefox 150).\n# Snap only writes com.pears.pass.json inside each granted dir.\n# brave/current resolves via snap-Brave's revision symlink — smoke-tested\n# with Firefox, retest under snap-Brave.\nplugs:\n  browser-native-messaging:\n    interface: personal-files\n    write:\n      - $HOME/.mozilla/native-messaging-hosts\n      - $HOME/.config/chromium/NativeMessagingHosts\n      - $HOME/.config/google-chrome/NativeMessagingHosts\n      - $HOME/.config/microsoft-edge/NativeMessagingHosts\n      - $HOME/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts\n      - $HOME/snap/chromium/common/chromium/NativeMessagingHosts\n      - $HOME/snap/firefox/common/.mozilla/native-messaging-hosts\n      - $HOME/snap/brave/current/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts\n\nparts:\n  pearpass:\n    plugin: nil\n    source: snap/local\n    build-packages:\n      - jq\n    # stage-packages intentionally empty: Electron bundles ffmpeg/GL/vulkan,\n    # the gnome extension + core22 base provide GTK/NSS/dbus. Add specific\n    # .so files here if a missing-symbol error surfaces at runtime.\n    override-build: |\n      set -eux\n\n      # Snap version follows package.json; `adopt-info: pearpass` lets\n      # this part publish the value via craftctl.\n      craftctl set version=\"$(jq -r .version \"${CRAFT_PROJECT_DIR}/package.json\")\"\n\n      # build-snap.sh stages the Electron payload as either snap/local/unpacked/\n      # (preferred, pre-extracted from electron-builder) or snap/local/PearPass.AppImage\n      # (fallback, extracted here via AppRun).\n      UNPACKED=\"${CRAFT_PART_SRC}/unpacked\"\n      APPIMAGE=\"${CRAFT_PART_SRC}/PearPass.AppImage\"\n\n      install -d \"${CRAFT_PART_INSTALL}/lib/pearpass\"\n\n      if [ -d \"${UNPACKED}\" ]; then\n        cp -a \"${UNPACKED}/.\" \"${CRAFT_PART_INSTALL}/lib/pearpass/\"\n      elif [ -f \"${APPIMAGE}\" ]; then\n        WORKDIR=\"$(mktemp -d)\"\n        cp \"${APPIMAGE}\" \"${WORKDIR}/PearPass.AppImage\"\n        chmod +x \"${WORKDIR}/PearPass.AppImage\"\n        cd \"${WORKDIR}\"\n        ./PearPass.AppImage --appimage-extract >/dev/null\n        cp -a squashfs-root/. \"${CRAFT_PART_INSTALL}/lib/pearpass/\"\n        cd -\n      else\n        echo \"Expected ${UNPACKED}/ or ${APPIMAGE}\" >&2\n        echo \"Stage one via scripts/build-snap.sh, not snapcraft directly.\" >&2\n        exit 1\n      fi\n      chmod +x \"${CRAFT_PART_INSTALL}/lib/pearpass/pearpass-app-desktop\" || true\n      chmod +x \"${CRAFT_PART_INSTALL}/lib/pearpass/pearpass-app-desktop.bin\" || true\n\n      install -d \"${CRAFT_PART_INSTALL}/usr/bin\"\n\n      # Main GUI launcher. --no-sandbox + ozone X11 mirrors the flatpak\n      # launcher; Wayland auto-detect inside snap is unreliable and X11 via\n      # XWayland works on both session types.\n      cat > \"${CRAFT_PART_INSTALL}/usr/bin/pearpass\" <<'WRAPPER'\n      #!/bin/sh\n      APP_ROOT=\"${SNAP}/lib/pearpass\"\n      export LD_LIBRARY_PATH=\"${APP_ROOT}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}\"\n      export GDK_BACKEND=x11\n      cd \"${APP_ROOT}\"\n      exec \"${APP_ROOT}/pearpass-app-desktop\" \\\n        --no-sandbox \\\n        --disable-gpu-sandbox \\\n        --disable-dev-shm-usage \\\n        --enable-features=UseOzonePlatform \\\n        --ozone-platform=x11 \\\n        \"$@\"\n      WRAPPER\n      chmod +x \"${CRAFT_PART_INSTALL}/usr/bin/pearpass\"\n\n      # Native messaging host. Bypass the launcher (which forces\n      # --no-sandbox) and call .bin directly: ELECTRON_RUN_AS_NODE rejects\n      # --no-sandbox and Chrome would see \"Native host has exited\".\n      cat > \"${CRAFT_PART_INSTALL}/usr/bin/pearpass-native-host\" <<'NMHOST'\n      #!/bin/sh\n      APP_ROOT=\"${SNAP}/lib/pearpass\"\n      export LD_LIBRARY_PATH=\"${APP_ROOT}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}\"\n      export ELECTRON_RUN_AS_NODE=1\n      exec \"${APP_ROOT}/pearpass-app-desktop.bin\" \\\n        \"${APP_ROOT}/resources/app/dist/native-messaging-bridge.bundle.cjs\" \\\n        \"$@\"\n      NMHOST\n      chmod +x \"${CRAFT_PART_INSTALL}/usr/bin/pearpass-native-host\"\n\n      # Reuse flatpak desktop entry + metainfo + icon; sed below patches\n      # Exec/Icon for snap-resolved paths.\n      install -Dm644 \"${CRAFT_PROJECT_DIR}/flatpak/com.pears.pass.desktop\" \\\n        \"${CRAFT_PART_INSTALL}/usr/share/applications/com.pears.pass.desktop\"\n      install -Dm644 \"${CRAFT_PROJECT_DIR}/flatpak/com.pears.pass.metainfo.xml\" \\\n        \"${CRAFT_PART_INSTALL}/usr/share/metainfo/com.pears.pass.metainfo.xml\"\n      install -Dm644 \"${CRAFT_PROJECT_DIR}/assets/linux/icon.png\" \\\n        \"${CRAFT_PART_INSTALL}/meta/gui/pearpass.png\"\n\n      sed -i 's|^Exec=.*|Exec=pearpass %U|' \\\n        \"${CRAFT_PART_INSTALL}/usr/share/applications/com.pears.pass.desktop\"\n      sed -i 's|^Icon=.*|Icon=${SNAP}/meta/gui/pearpass.png|' \\\n        \"${CRAFT_PART_INSTALL}/usr/share/applications/com.pears.pass.desktop\"\n"
  },
  {
    "path": "src/app/App/appConfig.js",
    "content": "export const appConfig = {\n  headerWithLogo: ['settings', 'welcome', 'intro']\n}\n"
  },
  {
    "path": "src/app/App/hooks/useInactivity.js",
    "content": "import { useEffect, useRef } from 'react'\n\nimport {\n  closeAllInstances,\n  useUserData,\n  useVaults\n} from '@tetherto/pearpass-lib-vault'\n\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport {\n  getAutoLockTimeoutMs,\n  useAutoLockPreferences\n} from '../../../hooks/useAutoLockPreferences'\nimport { logger } from '../../../utils/logger'\nconst DEDUPE_WINDOW_MS = 50\n\n/**\n * @returns {void}\n */\nexport function useInactivity() {\n  const lastResetAtRef = useRef(0)\n\n  const { setIsLoading } = useLoadingContext()\n  const { navigate } = useRouter()\n  const { refetch: refetchUser } = useUserData()\n  const { closeModal } = useModal()\n  const resetTimerRef = useRef(() => {})\n  const { resetState } = useVaults()\n  const timerRef = useRef(null)\n  const { shouldBypassAutoLock } = useAutoLockPreferences()\n\n  resetTimerRef.current = () => {\n    if (shouldBypassAutoLock) {\n      return\n    }\n\n    const now = Date.now()\n\n    if (now - lastResetAtRef.current < DEDUPE_WINDOW_MS) {\n      return\n    }\n    lastResetAtRef.current = now\n\n    if (timerRef.current) {\n      clearTimeout(timerRef.current)\n    }\n\n    const timeoutMs = getAutoLockTimeoutMs()\n\n    if (timeoutMs === null) {\n      return\n    }\n\n    timerRef.current = setTimeout(async () => {\n      const userData = await refetchUser()\n      logger.info(\n        'INACTIVITY-TIMER',\n        `Inactivity timer triggered, user data: ${JSON.stringify(userData)}`\n      )\n\n      if (!userData.isLoggedIn) {\n        return\n      }\n\n      setIsLoading(true)\n      await closeAllInstances()\n      closeModal()\n      navigate('welcome', { state: NAVIGATION_ROUTES.MASTER_PASSWORD })\n      resetState()\n      setIsLoading(false)\n\n      logger.info('INACTIVITY-TIMER', 'Inactivity timer reset')\n    }, timeoutMs)\n  }\n  const resetTimer = () => resetTimerRef.current()\n\n  const activityEvents = [\n    'mousemove',\n    'keydown',\n    'mousedown',\n    'touchstart',\n    'scroll'\n  ]\n\n  useEffect(() => {\n    if (shouldBypassAutoLock && timerRef.current) {\n      clearTimeout(timerRef.current)\n      timerRef.current = null\n    }\n  }, [shouldBypassAutoLock])\n\n  useEffect(() => {\n    window.addEventListener('reset-timer', resetTimer)\n    return () => {\n      window.removeEventListener('reset-timer', resetTimer)\n    }\n  }, [])\n\n  useEffect(() => {\n    // Handler for IPC activity\n    const handleIPCActivity = () => resetTimer()\n\n    // Handler for settings changes - reset timer with new values\n    const handleSettingsChange = () => resetTimer()\n\n    activityEvents.forEach((event) =>\n      window.addEventListener(event, resetTimer)\n    )\n\n    // Listen for IPC activity events\n    window.addEventListener('ipc-activity', handleIPCActivity)\n\n    // Listen for auto-lock settings changes\n    window.addEventListener('auto-lock-settings-changed', handleSettingsChange)\n\n    resetTimer()\n\n    return () => {\n      activityEvents.forEach((event) =>\n        window.removeEventListener(event, resetTimer)\n      )\n      window.removeEventListener('ipc-activity', handleIPCActivity)\n      window.removeEventListener(\n        'auto-lock-settings-changed',\n        handleSettingsChange\n      )\n      if (timerRef.current) clearTimeout(timerRef.current)\n    }\n  }, [])\n}\n"
  },
  {
    "path": "src/app/App/hooks/useInactivity.test.js",
    "content": "import React from 'react'\n\nimport { render, act } from '@testing-library/react'\n\nconst { useInactivity } = require('./useInactivity')\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  closeAllInstances: jest.fn(() => Promise.resolve()),\n  useVaults: () => ({\n    resetState: jest.fn()\n  }),\n  useUserData: () => ({\n    refetch: jest.fn(() => Promise.resolve({ isLoggedIn: true }))\n  })\n}))\n\njest.mock('../../../hooks/useAutoLockPreferences', () => ({\n  getAutoLockTimeoutMs: jest.fn(() => 500),\n  useAutoLockPreferences: jest.fn(() => ({ shouldBypassAutoLock: false }))\n}))\n\njest.mock('../../../context/LoadingContext', () => ({\n  useLoadingContext: () => ({\n    setIsLoading: jest.fn()\n  })\n}))\n\njest.mock('../../../context/RouterContext', () => ({\n  useRouter: () => ({\n    currentPage: 'home',\n    data: {},\n    navigate: jest.fn()\n  })\n}))\n\njest.mock('../../../context/ModalContext', () => ({\n  useModal: () => ({\n    closeModal: jest.fn()\n  })\n}))\n\ndescribe('useInactivity', () => {\n  let addEventListenerSpy\n  let removeEventListenerSpy\n  let clearTimeoutSpy\n  let setTimeoutSpy\n  let originalClearTimeout\n  let originalSetTimeout\n\n  beforeEach(() => {\n    jest.useFakeTimers()\n    originalClearTimeout = global.clearTimeout\n    originalSetTimeout = global.setTimeout\n    if (typeof global.clearTimeout !== 'function') {\n      global.clearTimeout = () => {}\n    }\n    if (typeof global.setTimeout !== 'function') {\n      global.setTimeout = () => {}\n    }\n    addEventListenerSpy = jest.spyOn(window, 'addEventListener')\n    removeEventListenerSpy = jest.spyOn(window, 'removeEventListener')\n    clearTimeoutSpy = jest.spyOn(global, 'clearTimeout')\n    setTimeoutSpy = jest.spyOn(global, 'setTimeout')\n  })\n\n  afterEach(() => {\n    global.clearTimeout = originalClearTimeout\n    global.setTimeout = originalSetTimeout\n    jest.useRealTimers()\n    jest.clearAllMocks()\n  })\n\n  const TestComponent = () => {\n    useInactivity()\n    return null\n  }\n\n  it('adds and removes event listeners on mount/unmount', () => {\n    const { unmount } = render(<TestComponent />)\n    expect(addEventListenerSpy).toHaveBeenCalled()\n    unmount()\n    expect(removeEventListenerSpy).toHaveBeenCalled()\n  })\n\n  it('registers activity event listeners including reset-timer and ipc-activity', () => {\n    render(<TestComponent />)\n    const expectedEvents = [\n      'reset-timer',\n      'mousemove',\n      'keydown',\n      'mousedown',\n      'touchstart',\n      'scroll',\n      'ipc-activity',\n      'auto-lock-settings-changed'\n    ]\n    expectedEvents.forEach((event) => {\n      expect(addEventListenerSpy).toHaveBeenCalledWith(\n        event,\n        expect.any(Function)\n      )\n    })\n  })\n\n  it('dedupes rapid successive resetTimer calls', () => {\n    render(<TestComponent />)\n    // Grab the last registered listener for, say, mousemove\n    const mouseListener = addEventListenerSpy.mock.calls.find(\n      ([name]) => name === 'mousemove'\n    )[1]\n\n    act(() => {\n      mouseListener()\n      mouseListener()\n    })\n\n    // Only one timeout should be scheduled because of dedupe\n    expect(setTimeoutSpy).toHaveBeenCalledTimes(1)\n  })\n\n  it('schedules and clears timeout on unmount', () => {\n    const { unmount } = render(<TestComponent />)\n    expect(setTimeoutSpy).toHaveBeenCalled()\n    unmount()\n    expect(clearTimeoutSpy).toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/app/App/hooks/useOnExtension.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { HANDLER_EVENTS } from '../../../constants/services'\n\nconst { useOnExtensionExit } = require('./useOnExtensionExit')\n\nconst mockNavigate = jest.fn()\nconst mockResetState = jest.fn()\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useVaults: () => ({\n    resetState: mockResetState\n  })\n}))\n\njest.mock('../../../context/RouterContext', () => ({\n  useRouter: () => ({\n    navigate: mockNavigate\n  })\n}))\n\ndescribe('UseOnExtensionExit', () => {\n  let addEventListenerSpy\n  let removeEventListenerSpy\n\n  beforeEach(() => {\n    addEventListenerSpy = jest.spyOn(window, 'addEventListener')\n    removeEventListenerSpy = jest.spyOn(window, 'removeEventListener')\n  })\n\n  afterEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('should add and remove extension-exit listener on mount/unmount', () => {\n    function TestComponent() {\n      useOnExtensionExit()\n      return null\n    }\n\n    const { unmount } = render(<TestComponent />)\n\n    expect(addEventListenerSpy).toHaveBeenCalledWith(\n      HANDLER_EVENTS.extensionExit,\n      expect.any(Function)\n    )\n\n    unmount()\n\n    expect(removeEventListenerSpy).toHaveBeenCalledWith(\n      HANDLER_EVENTS.extensionExit,\n      expect.any(Function)\n    )\n  })\n\n  it('should call navigate and resetState on extension-exit event', () => {\n    let handler\n    addEventListenerSpy.mockImplementation((event, cb) => {\n      if (event === HANDLER_EVENTS.extensionExit) {\n        handler = cb\n      }\n    })\n\n    function TestComponent() {\n      useOnExtensionExit()\n      return null\n    }\n\n    render(<TestComponent />)\n\n    // Simulate event\n    handler()\n\n    expect(mockNavigate).toHaveBeenCalledWith('welcome', {\n      state: 'masterPassword'\n    })\n    expect(mockResetState).toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/app/App/hooks/useOnExtensionExit.js",
    "content": "import { useEffect } from 'react'\n\nimport { useVaults } from '@tetherto/pearpass-lib-vault'\n\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { HANDLER_EVENTS } from '../../../constants/services'\nimport { useRouter } from '../../../context/RouterContext'\n\nexport const useOnExtensionExit = () => {\n  const { navigate } = useRouter()\n  const { resetState } = useVaults()\n\n  useEffect(() => {\n    const handleExtensionExit = () => {\n      navigate('welcome', { state: NAVIGATION_ROUTES.MASTER_PASSWORD })\n      resetState()\n    }\n\n    window.addEventListener(HANDLER_EVENTS.extensionExit, handleExtensionExit)\n    return () => {\n      window.removeEventListener(\n        HANDLER_EVENTS.extensionExit,\n        handleExtensionExit\n      )\n    }\n  }, [navigate])\n}\n"
  },
  {
    "path": "src/app/App/hooks/useOnExtensionLockOut.js",
    "content": "import { useEffect } from 'react'\n\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { HANDLER_EVENTS } from '../../../constants/services'\nimport { useRouter } from '../../../context/RouterContext'\n\nexport const useOnExtensionLockOut = () => {\n  const { navigate } = useRouter()\n\n  useEffect(() => {\n    const handleExtensionLockOut = () => {\n      navigate('welcome', { state: NAVIGATION_ROUTES.SCREEN_LOCKED })\n    }\n\n    window.addEventListener(\n      HANDLER_EVENTS.extensionLock,\n      handleExtensionLockOut\n    )\n\n    return () => {\n      window.removeEventListener(\n        HANDLER_EVENTS.extensionLock,\n        handleExtensionLockOut\n      )\n    }\n  }, [navigate])\n}\n"
  },
  {
    "path": "src/app/App/hooks/useOnExtensionLockOut.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { useOnExtensionLockOut } from './useOnExtensionLockOut'\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { HANDLER_EVENTS } from '../../../constants/services'\n\nconst mockNavigate = jest.fn()\n\njest.mock('../../../context/RouterContext', () => ({\n  useRouter: () => ({\n    navigate: mockNavigate\n  })\n}))\n\ndescribe('useOnExtensionLockOut', () => {\n  let addEventListenerSpy\n  let removeEventListenerSpy\n\n  beforeEach(() => {\n    addEventListenerSpy = jest.spyOn(window, 'addEventListener')\n    removeEventListenerSpy = jest.spyOn(window, 'removeEventListener')\n  })\n\n  afterEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('should add and remove extension-lock listener on mount/unmount', () => {\n    function TestComponent() {\n      useOnExtensionLockOut()\n      return null\n    }\n\n    const { unmount } = render(<TestComponent />)\n\n    expect(addEventListenerSpy).toHaveBeenCalledWith(\n      HANDLER_EVENTS.extensionLock,\n      expect.any(Function)\n    )\n\n    unmount()\n\n    expect(removeEventListenerSpy).toHaveBeenCalledWith(\n      HANDLER_EVENTS.extensionLock,\n      expect.any(Function)\n    )\n  })\n\n  it('should call navigate with correct params on extension-lock event', () => {\n    let handler\n    addEventListenerSpy.mockImplementation((event, cb) => {\n      if (event === HANDLER_EVENTS.extensionLock) {\n        handler = cb\n      }\n    })\n\n    function TestComponent() {\n      useOnExtensionLockOut()\n      return null\n    }\n\n    render(<TestComponent />)\n\n    handler()\n\n    expect(mockNavigate).toHaveBeenCalledWith('welcome', {\n      state: NAVIGATION_ROUTES.SCREEN_LOCKED\n    })\n  })\n})\n"
  },
  {
    "path": "src/app/App/hooks/useRedirect.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\n\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { useRouter } from '../../../context/RouterContext'\nimport { logger } from '../../../utils/logger'\n\n/**\n * @returns {Object} An object containing:\n * @property {boolean} isLoading - Indicates if the user data is currently loading.\n */\nexport const useRedirect = () => {\n  const [isLoading, setIsLoading] = useState(true)\n\n  const { navigate } = useRouter()\n\n  const { refetch: refetchUser } = useUserData()\n\n  useEffect(() => {\n    ;(async () => {\n      try {\n        setIsLoading(true)\n        const userData = await refetchUser()\n\n        if (userData?.masterPasswordStatus?.isLocked) {\n          navigate('welcome', {\n            state: NAVIGATION_ROUTES.SCREEN_LOCKED\n          })\n          return\n        }\n\n        if (!userData?.hasPasswordSet) {\n          navigate('intro')\n          return\n        }\n\n        navigate('welcome', {\n          state: userData?.hasPasswordSet\n            ? NAVIGATION_ROUTES.MASTER_PASSWORD\n            : NAVIGATION_ROUTES.CREATE_MASTER_PASSWORD\n        })\n      } catch (error) {\n        logger.error('Error fetching user data:', error)\n      } finally {\n        setIsLoading(false)\n      }\n    })()\n  }, [])\n\n  return {\n    isLoading\n  }\n}\n"
  },
  {
    "path": "src/app/App/hooks/useRedirect.test.js",
    "content": "import { renderHook, waitFor } from '@testing-library/react'\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\n\nimport { useRedirect } from './useRedirect'\nimport { useRouter } from '../../../context/RouterContext'\n\n// Mock dependencies\n\njest.mock('@tetherto/pearpass-lib-vault')\njest.mock('../../../context/RouterContext')\njest.mock('../../../utils/logger', () => ({\n  error: jest.fn()\n}))\njest.mock('../../../constants/localStorage', () => ({\n  LOCAL_STORAGE_KEYS: {\n    TOU_ACCEPTED: 'TOU_ACCEPTED'\n  }\n}))\n\nconst mockNavigate = jest.fn()\nconst mockRefetchUser = jest.fn()\n\ndescribe('useRedirect', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n\n    useRouter.mockReturnValue({ navigate: mockNavigate })\n    useUserData.mockReturnValue({\n      isLoading: false,\n      refetch: mockRefetchUser\n    })\n\n    // Mock localStorage\n    Object.defineProperty(window, 'localStorage', {\n      value: {\n        getItem: jest.fn(),\n        setItem: jest.fn(),\n        clear: jest.fn()\n      },\n      writable: true\n    })\n  })\n\n  it('should return isLoading as true when user data is loading', () => {\n    useUserData.mockReturnValue({\n      isLoading: true,\n      refetch: mockRefetchUser\n    })\n\n    const { result } = renderHook(() => useRedirect())\n\n    expect(result.current.isLoading).toBe(true)\n  })\n\n  it('should navigate to \"welcome\" with masterPassword state if password is set and ToU is accepted', async () => {\n    mockRefetchUser.mockResolvedValue({ hasPasswordSet: true })\n    localStorage.getItem.mockReturnValue('true')\n\n    renderHook(() => useRedirect())\n\n    await waitFor(() => {\n      expect(mockNavigate).toHaveBeenCalledWith('welcome', {\n        state: 'masterPassword'\n      })\n    })\n  })\n\n  it('should navigate to \"intro\" if password is not set', async () => {\n    mockRefetchUser.mockResolvedValue({ hasPasswordSet: false })\n    localStorage.getItem.mockReturnValue('true') // ToU accepted doesn't matter here\n\n    renderHook(() => useRedirect())\n\n    await waitFor(() => {\n      expect(mockNavigate).toHaveBeenCalledWith('intro')\n    })\n  })\n\n  it('should navigate to \"intro\" if user data is null', async () => {\n    mockRefetchUser.mockResolvedValue(null)\n\n    renderHook(() => useRedirect())\n\n    await waitFor(() => {\n      expect(mockNavigate).toHaveBeenCalledWith('intro')\n    })\n  })\n})\n"
  },
  {
    "path": "src/app/App/index.js",
    "content": "import { useState, useCallback } from 'react'\n\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\n\nimport { appConfig } from './appConfig'\nimport { useInactivity } from './hooks/useInactivity'\nimport { useOnExtensionExit } from './hooks/useOnExtensionExit'\nimport { useOnExtensionLockOut } from './hooks/useOnExtensionLockOut'\nimport { useRedirect } from './hooks/useRedirect'\nimport { TitleBar } from '../../components/TitleBar'\nimport { AppHeaderContainer } from '../../containers/AppHeaderContainer'\nimport { useRouter } from '../../context/RouterContext'\nimport { usePearUpdate } from '../../hooks/usePearUpdate'\nimport { useSimulatedLoading } from '../../hooks/useSimulatedLoading'\nimport { Routes } from '../Routes'\nimport { ContentFrame, WindowBackground } from './styles'\nimport { isV2 } from '../../utils/designVersion'\n\nexport const App = () => {\n  const { theme } = useTheme()\n  const { currentPage } = useRouter()\n  usePearUpdate()\n  const isSimulatedLoading = useSimulatedLoading()\n  const [isLoadingPageComplete, setIsLoadingPageComplete] = useState(false)\n\n  useInactivity()\n  const { isLoading: isDataLoading } = useRedirect()\n\n  useOnExtensionExit()\n  useOnExtensionLockOut()\n\n  const handleLoadingComplete = useCallback(() => {\n    setIsLoadingPageComplete(true)\n  }, [])\n\n  const showLoadingPage = isV2()\n    ? isDataLoading || !isLoadingPageComplete\n    : !isSimulatedLoading && (isDataLoading || !isLoadingPageComplete)\n\n  if (isV2()) {\n    const useLogoTitleBar = appConfig.headerWithLogo.includes(currentPage)\n    return html`\n      <${WindowBackground} $backgroundColor=${theme.colors.colorBackground}>\n        ${useLogoTitleBar\n          ? html`<${TitleBar} />`\n          : html`<${AppHeaderContainer} />`}\n        <${ContentFrame}\n          $backgroundColor=${theme.colors.colorBackground}\n          $borderColor=${theme.colors.colorBorderPrimary}\n        >\n          <${Routes}\n            isSplashScreenShown=${false}\n            isDataLoading=${showLoadingPage}\n            onLoadingComplete=${handleLoadingComplete}\n          />\n        <//>\n      <//>\n    `\n  }\n\n  return html`\n    <${Routes}\n      isSplashScreenShown=${isSimulatedLoading}\n      isDataLoading=${showLoadingPage}\n      onLoadingComplete=${handleLoadingComplete}\n    />\n  `\n}\n"
  },
  {
    "path": "src/app/App/styles.js",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\nimport styled from 'styled-components'\n\nimport { isV2 } from '../../utils/designVersion'\n\nexport const AppWrapper = styled.div`\n  height: 100%;\n`\n\nexport const WindowBackground = styled.div`\n  ${isV2()\n    ? `\n  position: fixed;\n  inset: 0;\n  width: 100vw;\n  height: 100vh;\n  overflow: hidden;\n  `\n    : `\n  height: 100%;\n  width: 100%;\n  `}\n  background-color: ${({ $backgroundColor }) =>\n    $backgroundColor || 'transparent'};\n  display: flex;\n  flex-direction: column;\n`\nexport const ContentFrame = styled.div`\n  ${isV2()\n    ? `\n  position: relative;\n  z-index: 0;\n  flex: 1 1 0;\n  min-height: 0;\n  min-width: 0;\n  margin: ${rawTokens.spacing8}px;\n  `\n    : `\n  flex: 1 1 auto;\n  `}\n  border-radius: ${isV2()\n    ? process.platform === 'darwin'\n      ? `${rawTokens.radius8}px ${rawTokens.radius8}px ${rawTokens.radius20}px ${rawTokens.radius20}px`\n      : `${rawTokens.radius8}px`\n    : '16px'};\n  border: ${({ $borderColor }) =>\n    isV2() ? `1px solid ${$borderColor || 'transparent'}` : 'none'};\n  overflow: auto;\n  background-color: ${({ $backgroundColor }) =>\n    $backgroundColor || 'transparent'};\n`\n"
  },
  {
    "path": "src/app/Routes/index.js",
    "content": "import { AUTHENTICATOR_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { OtpRefreshProvider, RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { LayoutWithSidebar } from '../../containers/LayoutWithSidebar'\nimport { RecordDetails } from '../../containers/RecordDetails'\nimport { useRouter } from '../../context/RouterContext'\nimport { AuthenticatorView } from '../../pages/AuthenticatorView'\nimport { InitialPage } from '../../pages/InitialPage'\nimport { Intro } from '../../pages/Intro'\nimport { IntroV2 } from '../../pages/Intro/IntroV2'\nimport { LoadingPage } from '../../pages/LoadingPage'\nimport { LoadingPageV2 } from '../../pages/LoadingPage/LoadingPageV2'\nimport { MainView } from '../../pages/MainView'\nimport { MainViewV2 } from '../../pages/MainView/MainViewV2'\nimport { SettingsView } from '../../pages/SettingsView'\nimport { SettingsViewV2 } from '../../pages/SettingsViewV2/SettingsViewV2'\nimport { WelcomePage } from '../../pages/WelcomePage'\nimport { isV2 } from '../../utils/designVersion'\n\n/**\n * @param {Object} props\n * @param {boolean} props.isSplashScreenShown - Shows InitialPage (splash screen)\n * @param {boolean} props.isDataLoading - Shows LoadingPage (with progress bar)\n * @param {() => void} [props.onLoadingComplete] - Callback when LoadingPage finishes\n * @returns {import('react').ReactNode}\n */\nexport const Routes = ({\n  isSplashScreenShown,\n  isDataLoading,\n  onLoadingComplete\n}) => {\n  const { currentPage, data } = useRouter()\n\n  // Show InitialPage during initial splash\n  if (isSplashScreenShown) {\n    if (isV2()) {\n      return html` <${LoadingPageV2} progress=${0} /> `\n    }\n    return html` <${InitialPage} /> `\n  }\n\n  // Show LoadingPage with progress bar during data loading\n  if (isDataLoading || currentPage === 'loading') {\n    return html` <${LoadingPage} onLoadingComplete=${onLoadingComplete} /> `\n  }\n\n  if (currentPage === 'intro') {\n    if (isV2()) {\n      return html` <${IntroV2} /> `\n    }\n    return html` <${Intro} /> `\n  }\n\n  if (currentPage === 'welcome') {\n    return html` <${WelcomePage} /> `\n  }\n\n  if (currentPage === 'settings') {\n    if (isV2()) {\n      return <SettingsViewV2 />\n    } else {\n      return <SettingsView />\n    }\n  }\n\n  if (currentPage === 'vault') {\n    const isAuthenticator =\n      AUTHENTICATOR_ENABLED && data?.recordType === RECORD_TYPES.OTP\n\n    const VersionBasedMainView = isV2() ? MainViewV2 : MainView\n\n    return html`\n      <${OtpRefreshProvider}>\n        <${LayoutWithSidebar}\n          mainView=${isAuthenticator\n            ? html`<${AuthenticatorView} />`\n            : html`<${VersionBasedMainView} />`}\n          sideView=${html`<${RecordDetails} />`}\n          isSideViewOpen=${!!data?.recordId}\n        />\n      <//>\n    `\n  }\n}\n"
  },
  {
    "path": "src/components/AlertBox/index.tsx",
    "content": "import { useRef, useEffect, useState } from 'react'\nimport { IconWrapper, Container, Message } from './styles'\nimport { ErrorIcon, YellowErrorIcon } from '../../lib-react-components'\n\n\nexport enum AlertBoxType {\n  WARNING = 'warning',  \n  ERROR = 'error',  \n}\n\ninterface Props {\n  message: string\n  type?: AlertBoxType\n  testId?: string\n}\n\n/**\n * @param {Object} props\n * @param {string} props.message\n * @param {('warning'|'error')} [props.type='warning']\n * @param {string} [props.testId]\n * @returns {JSX.Element}\n */\nexport const AlertBox = ({ message, type = AlertBoxType.WARNING, testId }: Props): React.ReactElement => {\n  const messageRef = useRef<HTMLDivElement>(null)\n  const [isMultiLine, setIsMultiLine] = useState(false)\n\n  useEffect(() => {\n    if (messageRef.current) {\n      const lineHeight = parseFloat(\n        getComputedStyle(messageRef.current).lineHeight\n      )\n      const height = messageRef.current.offsetHeight\n      setIsMultiLine(height > lineHeight * 1.2)\n    }\n  }, [message])\n\n  return (\n    <Container\n      type={type}\n      $isMultiLine={isMultiLine}\n      data-testid={testId}\n    >\n      <IconWrapper>\n        {type === AlertBoxType.WARNING ? <YellowErrorIcon size=\"18\" /> : <ErrorIcon size=\"18\" />}\n      </IconWrapper>\n\n      <Message ref={messageRef}>{message}</Message>\n    </Container>\n  )\n}\n"
  },
  {
    "path": "src/components/AlertBox/styles.ts",
    "content": "import styled from 'styled-components'\nimport { AlertBoxType } from '.'\n\ninterface ContainerProps {\n  $isMultiLine?: boolean\n  type?: AlertBoxType\n}\n\nexport const Container = styled.div<ContainerProps>`\n  display: flex;\n  width: 100%;\n  padding: 10px;\n  align-items: ${({ $isMultiLine }) =>\n    $isMultiLine ? 'flex-start' : 'center'};\n  gap: 8px;\n  border-radius: 10px;\n  border: 1px solid\n    ${({ theme, type }) =>\n      type === 'warning'\n        ? theme.colors.errorYellow.mode1\n        : theme.colors.errorRed.mode1};\n  background: linear-gradient(\n      0deg,\n      rgba(0, 0, 0, 0.8) 0%,\n      rgba(0, 0, 0, 0.8) 100%\n    ),\n    ${({ theme, type }) =>\n      type === 'warning'\n        ? theme.colors.errorYellow.mode1\n        : theme.colors.errorRed.mode1};\n`\n\nexport const Message = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1.4;\n`\n\nexport const IconWrapper = styled.div`\n  flex-shrink: 0;\n`\n"
  },
  {
    "path": "src/components/AppHeaderV2/AppHeaderV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (\n  colors: ThemeColors,\n) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    padding: '12px 16px',\n    width: '100%',\n    gap: `${rawTokens.spacing16}px`,\n    marginBottom: 0,\n    boxSizing: 'border-box' as const\n  },\n  flexSpacer: {\n    flex: '1 1 0',\n    minWidth: 0\n  },\n  searchWrap: {\n    display: \"flex\",\n    justifyContent: \"center\",\n    width: '100%',\n  },\n  search:{\n    maxWidth: '400px',\n    width: '100%',\n  },\n  searchField: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%',\n    paddingBlock: `${rawTokens.spacing10}px`,\n    paddingInline: `${rawTokens.spacing12}px`,\n    borderRadius: 9999,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderSearchField,\n    backgroundColor: colors.colorSurfaceSearchField,\n    boxSizing: 'border-box' as const\n  },\n\n  actions: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'flex-end' as const,\n    gap: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/components/AppHeaderV2/AppHeaderV2.test.js",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, screen, fireEvent } from '@testing-library/react'\n\nimport { AppHeaderV2, AppHeaderAddItemTrigger } from './AppHeaderV2'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({ i18n: { _: (s) => s } })\n}))\n\njest.mock('./AppHeaderV2.styles', () => ({\n  createStyles: () => ({\n    root: {},\n    searchWrap: {},\n    search: {},\n    actions: {}\n  })\n}))\n\nconst mockTheme = { colors: {} }\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => ({ theme: mockTheme }),\n  SearchField: ({ value, onChangeText, placeholderText, testID }) => (\n    <input\n      data-testid={testID}\n      aria-label=\"search\"\n      value={value}\n      placeholder={placeholderText}\n      onChange={(e) => onChangeText(e.target.value)}\n    />\n  ),\n  Button: ({ children, onClick, 'data-testid': dataTestId }) => (\n    <button type=\"button\" data-testid={dataTestId} onClick={onClick}>\n      {children}\n    </button>\n  )\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  Add: () => null,\n  ImportOutlined: () => null\n}))\n\ndescribe('AppHeaderV2', () => {\n  const defaultProps = {\n    searchValue: '',\n    onSearchChange: jest.fn(),\n    onImportClick: jest.fn(),\n    addItemControl: <span data-testid=\"add-control\">add</span>\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders search, import, and addItemControl', () => {\n    render(<AppHeaderV2 {...defaultProps} />)\n\n    expect(screen.getByTestId('main-search-input')).toBeInTheDocument()\n    expect(screen.getByTestId('main-import-button')).toBeInTheDocument()\n    expect(screen.getByTestId('add-control')).toBeInTheDocument()\n    expect(\n      screen.getByPlaceholderText('Search in All Items')\n    ).toBeInTheDocument()\n    expect(screen.getByText('Import')).toBeInTheDocument()\n  })\n\n  it('uses custom test ids when provided', () => {\n    render(\n      <AppHeaderV2\n        {...defaultProps}\n        searchTestId=\"custom-search\"\n        importTestId=\"custom-import\"\n      />\n    )\n\n    expect(screen.getByTestId('custom-search')).toBeInTheDocument()\n    expect(screen.getByTestId('custom-import')).toBeInTheDocument()\n  })\n\n  it('calls onSearchChange when search value changes', () => {\n    render(<AppHeaderV2 {...defaultProps} searchValue=\"x\" />)\n\n    fireEvent.change(screen.getByTestId('main-search-input'), {\n      target: { value: 'next' }\n    })\n\n    expect(defaultProps.onSearchChange).toHaveBeenCalledWith('next')\n  })\n\n  it('calls onImportClick when import is pressed', () => {\n    render(<AppHeaderV2 {...defaultProps} />)\n\n    fireEvent.click(screen.getByTestId('main-import-button'))\n\n    expect(defaultProps.onImportClick).toHaveBeenCalledTimes(1)\n  })\n})\n\ndescribe('AppHeaderAddItemTrigger', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders Add Item with default test id', () => {\n    render(<AppHeaderAddItemTrigger />)\n\n    expect(screen.getByTestId('main-plus-button')).toBeInTheDocument()\n    expect(screen.getByText('Add Item')).toBeInTheDocument()\n  })\n\n  it('uses custom test id when provided', () => {\n    render(<AppHeaderAddItemTrigger testId=\"plus-custom\" />)\n\n    expect(screen.getByTestId('plus-custom')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/AppHeaderV2/AppHeaderV2.tsx",
    "content": "import React, { type ReactNode } from 'react'\n\nimport { Button, useTheme, SearchField } from '@tetherto/pearpass-lib-ui-kit'\nimport { Add, ImportOutlined } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './AppHeaderV2.styles'\nimport { useTranslation } from '../../hooks/useTranslation'\n\nexport type AppHeaderV2Props = {\n  searchValue: string\n  onSearchChange: (value: string) => void\n  onImportClick: () => void\n  addItemControl: ReactNode\n  searchTestId?: string\n  importTestId?: string\n}\n\nexport const AppHeaderV2 = ({\n  searchValue,\n  onSearchChange,\n  onImportClick,\n  addItemControl,\n  searchTestId = 'main-search-input',\n  importTestId = 'main-import-button',\n}: AppHeaderV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { root, searchWrap, search, actions } = styles\n\n  return (\n    <header style={root} id=\"bar\">\n      <div style={searchWrap}>\n        <div style={search}>\n          <SearchField\n            testID={searchTestId}\n            value={searchValue}\n            onChangeText={onSearchChange}\n            placeholderText={t('Search in All Items')}\n          />\n        </div>\n      </div>\n      <div style={actions}>\n        <Button\n          variant=\"secondary\"\n          size=\"small\"\n          type=\"button\"\n          data-testid={importTestId}\n          onClick={onImportClick}\n          iconBefore={\n            <ImportOutlined\n              width={18}\n              height={18}\n            />\n          }\n        >\n          {t('Import')}\n        </Button>\n        {addItemControl}\n      </div>\n    </header>\n  )\n}\n\ntype AppHeaderAddItemTriggerProps = {\n  testId?: string\n}\n\nexport const AppHeaderAddItemTrigger = ({\n  testId = 'main-plus-button'\n}: AppHeaderAddItemTriggerProps) => {\n  const { t } = useTranslation()\n\n  return (\n    <Button\n      variant=\"primary\"\n      size=\"small\"\n      type=\"button\"\n      data-testid={testId}\n      iconBefore={\n        <Add width={18} height={18} />\n      }\n    >\n      {t('Add Item')}\n    </Button>\n  )\n}\n"
  },
  {
    "path": "src/components/AppHeaderV2/index.ts",
    "content": "export {\n  AppHeaderV2,\n  AppHeaderAddItemTrigger,\n  type AppHeaderV2Props,\n} from './AppHeaderV2'\n"
  },
  {
    "path": "src/components/BackgroundWithGradient.tsx",
    "content": "import React, { useState, useEffect, ReactNode, CSSProperties } from 'react'\nimport styled from 'styled-components'\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\n\ninterface ContainerProps {\n  $backgroundColor: string\n}\n\nconst Container = styled.div<ContainerProps>`\n  position: relative;\n  width: 100%;\n  height: 100%;\n  background-color: ${(props) => props.$backgroundColor};\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n`\n\nconst SVGBackground = styled.svg`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n`\n\ninterface BackgroundWithGradientProps {\n  children?: ReactNode\n  style?: CSSProperties\n  backgroundColor?: string\n  gradientColors?: string[]\n}\n\nexport const BackgroundWithGradient: React.FC<BackgroundWithGradientProps> = ({\n  children,\n  style,\n  backgroundColor: customBg,\n  gradientColors: customGradientColors\n}) => {\n  const { theme } = useTheme()\n  const backgroundColor = customBg || theme.colors.colorSurfacePrimary\n  const gradientColors = customGradientColors || ['#2A3317', backgroundColor]\n\n  const [dimensions, setDimensions] = useState({\n    width: typeof window !== 'undefined' ? window.innerWidth : 0,\n    height: typeof window !== 'undefined' ? window.innerHeight : 0\n  })\n\n  useEffect(() => {\n    const handleResize = () => {\n      setDimensions({\n        width: window.innerWidth,\n        height: window.innerHeight\n      })\n    }\n\n    window.addEventListener('resize', handleResize)\n    return () => window.removeEventListener('resize', handleResize)\n  }, [])\n\n  const radius = Math.max(dimensions.width, dimensions.height) * 0.4\n  const cx = dimensions.width / 2\n  const cy = dimensions.height * 0.45\n\n  return (\n    <Container $backgroundColor={backgroundColor} style={style}>\n      <SVGBackground>\n        <defs>\n          <radialGradient\n            id=\"bg-grad\"\n            cx={cx}\n            cy={cy}\n            r={radius}\n            gradientUnits=\"userSpaceOnUse\"\n          >\n            <stop offset=\"0%\" stopColor={gradientColors[0]} stopOpacity=\"0.7\" />\n            <stop\n              offset=\"60%\"\n              stopColor={gradientColors[1]}\n              stopOpacity=\"0.5\"\n            />\n            <stop offset=\"100%\" stopColor={backgroundColor} stopOpacity=\"0\" />\n          </radialGradient>\n        </defs>\n        <rect width=\"100%\" height=\"100%\" fill=\"url(#bg-grad)\" />\n      </SVGBackground>\n      {children}\n    </Container>\n  )\n}\n"
  },
  {
    "path": "src/components/BadgeTextItem/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { BadgeContainer, BadgeText, BadgeCount } from './styles'\n\n/**\n * @param {{\n *  count: number,\n *  word: string,\n *  isNumberVisible?: boolean\n *  testId?: string\n * }} props\n */\n\nexport const BadgeTextItem = ({\n  count,\n  word,\n  isNumberVisible = true,\n  testId\n}) =>\n  html`<${BadgeContainer} data-testid=${testId}>\n    ${isNumberVisible ? html`<${BadgeCount}>#${count}<//>` : null}\n    <${BadgeText}>${word}<//>\n  <//>`\n"
  },
  {
    "path": "src/components/BadgeTextItem/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { BadgeTextItem } from './index'\n\njest.mock('./styles', () => ({\n  BadgeContainer: ({ children }) => (\n    <div data-testid=\"badge-container\">{children}</div>\n  ),\n  BadgeText: ({ children, title }) => (\n    <span data-testid=\"badge-text\" title={title}>\n      {children}\n    </span>\n  ),\n  BadgeCount: ({ children }) => (\n    <span data-testid=\"badge-count\">{children}</span>\n  )\n}))\n\ndescribe('BadgeTextItem', () => {\n  test('renders word and count by default', () => {\n    render(<BadgeTextItem count={3} word=\"alpha\" />)\n\n    expect(screen.getByTestId('badge-text')).toHaveTextContent('alpha')\n    expect(screen.getByTestId('badge-count')).toHaveTextContent('#3')\n  })\n\n  test('hides count when isNumberVisible is false', () => {\n    render(<BadgeTextItem count={5} word=\"beta\" isNumberVisible={false} />)\n\n    expect(screen.getByTestId('badge-text')).toHaveTextContent('beta')\n    expect(screen.queryByTestId('badge-count')).toBeNull()\n  })\n})\n"
  },
  {
    "path": "src/components/BadgeTextItem/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const BadgeContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  align-items: center;\n  background-color: ${({ theme }) => theme.colors.grey500?.mode1};\n  padding: 13.5px 10px;\n  width: 105px;\n  border-radius: 10px;\n  gap: 5px;\n  font-family: Inter;\n  font-style: normal;\n  font-size: 12px;\n`\n\nexport const BadgeText = styled.span`\n  font-weight: 500;\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  max-width: 70%;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n`\n\nexport const BadgeCount = styled.span`\n  font-weight: 400;\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n`\n"
  },
  {
    "path": "src/components/BannerBox/index.js",
    "content": "import { html } from 'htm/react'\n\nimport {\n  CloseButtonWrapper,\n  Container,\n  HighlightedDescription,\n  Message,\n  Title\n} from './styles'\nimport {\n  ButtonPrimary,\n  ButtonRoundIcon,\n  XIcon\n} from '../../lib-react-components'\n\n/**\n * @param {Object} props\n * @param {Function} props.onClose\n * @param {boolean} props.isVisible\n * @param {string} props.href\n * @param {string} props.title\n * @param {string} props.message\n * @param {string} props.highlightedDescription\n * @param {string} props.buttonText\n * @param {string} props.testId\n * @returns {null|Object}\n */\nexport const BannerBox = ({\n  onClose,\n  isVisible,\n  href,\n  title,\n  message,\n  highlightedDescription,\n  buttonText\n}) => {\n  if (!isVisible) return null\n\n  return html`\n    <${Container} data-testid=\"bannerbox-container\">\n      <${Title}>${title} <//>\n      <${Message}> ${message} <//>\n      <${HighlightedDescription}> ${highlightedDescription} <//>\n\n      <a href=${href}>\n        <${ButtonPrimary} onClick=${onClose} testId=\"bannerbox-button-download\">\n          ${buttonText}\n        <//>\n      </a>\n      <${CloseButtonWrapper}>\n        <${ButtonRoundIcon}\n          testId=\"bannerbox-button-close\"\n          startIcon=${XIcon}\n          onClick=${onClose}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/BannerBox/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  position: absolute;\n  display: flex;\n  bottom: 20px;\n  left: 50%;\n  transform: translateX(-50%);\n  gap: 10px;\n  width: min(90%, 507px);\n  flex-direction: column;\n  align-items: flex-start;\n  padding: 10px;\n\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.primary400.mode1};\n  background-color: ${({ theme }) => theme.colors.grey400.mode1};\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n`\n\nexport const Message = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\nexport const HighlightedDescription = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: Inter;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n`\n\nexport const CloseButtonWrapper = styled.div`\n  display: flex;\n  top: -15px;\n  right: -15px;\n  position: absolute;\n`\n"
  },
  {
    "path": "src/components/ButtonPlusCreateNew/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { Button } from './styles'\nimport { PlusIcon, XIcon } from '../../lib-react-components'\n\n/**\n * @param {{\n *  isOpen: boolean\n *  testId?: string\n * }} props\n */\nexport const ButtonPlusCreateNew = ({ isOpen, testId }) => html`\n  <${Button} data-testid=${testId}>\n    <${isOpen ? XIcon : PlusIcon} color=${colors.black.mode1} />\n  <//>\n`\n"
  },
  {
    "path": "src/components/ButtonPlusCreateNew/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { ButtonPlusCreateNew } from './index'\n\njest.mock('../../lib-react-components', () => ({\n  PlusIcon: () => 'PlusIcon',\n  XIcon: () => 'XIcon'\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-theme-provider', () => ({\n  colors: {\n    black: {\n      mode1: '#000000'\n    }\n  }\n}))\n\njest.mock('./styles', () => ({\n  Button: ({ children }) => <div data-testid=\"button\">{children}</div>\n}))\n\ndescribe('ButtonPlusCreateNew', () => {\n  it('renders PlusIcon when isOpen is false', () => {\n    const { container, getByTestId } = render(\n      <ButtonPlusCreateNew isOpen={false} />\n    )\n    expect(getByTestId('button').textContent).toBe('PlusIcon')\n    expect(container).toMatchSnapshot()\n  })\n\n  it('renders XIcon when isOpen is true', () => {\n    const { container, getByTestId } = render(\n      <ButtonPlusCreateNew isOpen={true} />\n    )\n    expect(getByTestId('button').textContent).toBe('XIcon')\n    expect(container).toMatchSnapshot()\n  })\n\n  it('passes the correct color prop to icons', () => {\n    const { container } = render(<ButtonPlusCreateNew isOpen={false} />)\n    expect(container).toMatchSnapshot()\n  })\n\n  it('uses the Button component from styles', () => {\n    const { getByTestId } = render(<ButtonPlusCreateNew isOpen={false} />)\n    expect(getByTestId('button')).toBeTruthy()\n  })\n})\n"
  },
  {
    "path": "src/components/ButtonPlusCreateNew/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Button = styled.button`\n  display: flex;\n  position: relative;\n  width: 30px;\n  height: 30px;\n  padding: 5px;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  border-radius: 15px;\n  background: ${({ theme }) => theme.colors.primary400.mode1};\n  border: none;\n  cursor: pointer;\n`\n"
  },
  {
    "path": "src/components/CardSingleSetting/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Container, Description, Header, Title } from './styles'\n\n/**\n * @param {{\n *  title: string\n *  description?: string\n *  additionalHeaderContent?: import('react').ReactNode\n *  children: import('react').ReactNode\n * }} props\n */\nexport const CardSingleSetting = ({\n  title,\n  description,\n  children,\n  additionalHeaderContent,\n  testId\n}) => html`\n  <${Container} data-testid=${testId}>\n    <${Header}>\n      <${Title}>${title}<//>\n      ${additionalHeaderContent && additionalHeaderContent}\n    <//>\n    ${description && html` <${Description}>${description}<//> `}\n    <div>${children}<//>\n  <//>\n`\n"
  },
  {
    "path": "src/components/CardSingleSetting/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { CardSingleSetting } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('./styles', () => ({\n  Container: 'div',\n  Content: 'div',\n  Header: 'div',\n  Title: 'h3'\n}))\n\ndescribe('CardSingleSetting', () => {\n  it('renders with title', () => {\n    const { container, getByText } = render(\n      <CardSingleSetting title=\"Test Title\" />\n    )\n    expect(getByText('Test Title')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  it('renders children correctly', () => {\n    const { getByText } = render(\n      <CardSingleSetting title=\"Test Title\">\n        <div>Child Content</div>\n      </CardSingleSetting>\n    )\n    expect(getByText('Child Content')).toBeInTheDocument()\n  })\n\n  it('renders with the correct structure', () => {\n    const { container } = render(\n      <CardSingleSetting title=\"Test Title\">\n        <div>Child Content</div>\n      </CardSingleSetting>\n    )\n\n    const header = container.querySelector('div > div:first-child')\n    const content = container.querySelector('div > div:nth-child(2)')\n\n    expect(header).toBeInTheDocument()\n    expect(content).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/CardSingleSetting/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  padding: 17px 20px;\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\nexport const Header = styled.div`\n  padding-bottom: 15px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  border-bottom: 1px solid ${({ theme }) => theme.colors.white.mode1};\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 700;\n`\n\nexport const Description = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/components/CopyButton/index.tsx",
    "content": "import React from 'react'\nimport { useCopyToClipboard } from '../../hooks/useCopyToClipboard.electron'\nimport { useToast } from '../../context/ToastContext'\nimport { CopyIcon } from '../../lib-react-components'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ninterface CopyButtonProps {\n  value?: string\n  testId?: string\n  text?: string\n  color?: string\n}\n\nconst CopyButton = ({\n  value,\n  testId,\n  text,\n  color\n}: CopyButtonProps): React.ReactElement => {\n  const { t } = useTranslation()\n  const { setToast } = useToast()\n\n  const { copyToClipboard, isCopyToClipboardDisabled } = useCopyToClipboard({\n    onCopy: () => {\n      setToast({\n        message: t('Copied to clipboard'),\n        icon: CopyIcon\n      })\n    }\n  })\n\n  const handleCopy = () => {\n    if (value) {\n      copyToClipboard(value)\n    }\n  }\n\n  if (isCopyToClipboardDisabled) {\n    return <></>\n  }\n\n  return (\n    <div\n      onClick={handleCopy}\n      style={{\n        cursor: 'pointer',\n        display: 'flex',\n        alignItems: 'center',\n        gap: text ? '5px' : '0' // Add gap only if text is present\n      }}\n      data-testid={testId}\n    >\n      <CopyIcon size=\"24\" color={color} />\n      {text && (\n        <span\n          style={{\n            color: color,\n            fontFamily: 'Inter',\n            fontSize: '14px',\n            textAlign: 'center'\n          }}\n        >\n          {text}\n        </span>\n      )}\n    </div>\n  )\n}\n\nexport { CopyButton }\n"
  },
  {
    "path": "src/components/CreateCustomField/index.js",
    "content": "import { useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { ArrowIconWrapper, DropDown, Label, Wrapper } from './styles'\nimport { useOutsideClick } from '../../hooks/useOutsideClick'\nimport {\n  ArrowDownIcon,\n  ArrowUpIcon,\n  CommonFileIcon,\n  PlusIcon,\n  ButtonFilter\n} from '../../lib-react-components'\n\nconst OPTIONS = [\n  // {\n  //   name: 'Email',\n  //   type: 'email',\n  //   icon: EmailIcon\n  // },\n  // {\n  //   name: 'Picture',\n  //   type: 'picture',\n  //   icon: ImageIcon\n  // },\n  {\n    name: 'Comment',\n    type: 'note',\n    icon: CommonFileIcon\n  }\n  // {\n  //   name: 'Pin code',\n  //   type: 'pinCode',\n  //   icon: NineDotsIcon\n  // },\n  // {\n  //   name: 'Date',\n  //   type: 'date',\n  //   icon: CalendarIcon\n  // },\n  // {\n  //   name: 'Website',\n  //   type: 'website',\n  //   icon: WorldIcon\n  // },\n  // {\n  //   name: 'Phone number',\n  //   type: 'phoneNumber',\n  //   icon: PhoneIcon\n  // }\n]\n\n/**\n * @param {{\n *  onCreateCustom: (type: string) => void,\n *  testId?: string,\n *  dataId?: string\n * }} props\n */\nexport const CreateCustomField = ({ onCreateCustom, testId, dataId }) => {\n  const { i18n } = useLingui()\n\n  const [isOpen, setIsOpen] = useState(false)\n\n  const wrapperRef = useOutsideClick({\n    onOutsideClick: () => {\n      setIsOpen(false)\n    }\n  })\n\n  const handleSelect = (type) => {\n    onCreateCustom(type)\n\n    setIsOpen(false)\n  }\n\n  return html`\n    <${Wrapper} ref=${wrapperRef} data-id=${dataId}>\n      <${Label} data-testid=${testId} onClick=${() => setIsOpen(!isOpen)}>\n        <${PlusIcon} size=\"21\" />\n\n        <div>${i18n._('Create Custom')}</div>\n\n        <${ArrowIconWrapper}>\n          <${isOpen ? ArrowUpIcon : ArrowDownIcon} size=\"21\" />\n        <//>\n      <//>\n\n      ${isOpen &&\n      html`<${DropDown}>\n        ${OPTIONS.map(\n          (option) => html`\n            <${ButtonFilter}\n              testId=${`createcustomfield-option-${option.type}`}\n              variant=\"secondary\"\n              startIcon=${option.icon}\n              onClick=${() => handleSelect(option.type)}\n            >\n              ${option.name}\n            <//>\n          `\n        )}\n      <//>`}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/CreateCustomField/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { CreateCustomField } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: { _: (str) => str }\n  })\n}))\n\njest.mock('../../hooks/useOutsideClick', () => ({\n  useOutsideClick: jest.fn()\n}))\n\ndescribe('CreateCustomField component', () => {\n  const mockOnCreateCustom = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders with correct initial state', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <CreateCustomField onCreateCustom={mockOnCreateCustom} />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n\n  test('opens dropdown when clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <CreateCustomField onCreateCustom={mockOnCreateCustom} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Create Custom'))\n\n    expect(getByText('Comment')).toBeInTheDocument()\n  })\n\n  test('calls onCreateCustom when an option is selected', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <CreateCustomField onCreateCustom={mockOnCreateCustom} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Create Custom'))\n    fireEvent.click(getByText('Comment'))\n\n    expect(mockOnCreateCustom).toHaveBeenCalledWith('note')\n  })\n\n  test('closes dropdown after selecting an option', () => {\n    const { getByText, queryByText } = render(\n      <ThemeProvider>\n        <CreateCustomField onCreateCustom={mockOnCreateCustom} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Create Custom'))\n    fireEvent.click(getByText('Comment'))\n\n    expect(queryByText('Comment')).not.toBeInTheDocument()\n  })\n\n  test('toggles dropdown visibility when clicked multiple times', () => {\n    const { getByText, queryByText } = render(\n      <ThemeProvider>\n        <CreateCustomField onCreateCustom={mockOnCreateCustom} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Create Custom'))\n    expect(getByText('Comment')).toBeInTheDocument()\n\n    fireEvent.click(getByText('Create Custom'))\n    expect(queryByText('Comment')).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/CreateCustomField/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  padding: 10px;\n  z-index: 5;\n`\n\nexport const Label = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  cursor: pointer;\n  width: 100%;\n`\n\nexport const ArrowIconWrapper = styled.div`\n  display: flex;\n  margin-left: auto;\n`\n\nexport const DropDown = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  gap: 17px;\n  padding: 10px 10px 0 10px;\n  border-top: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  margin-top: 10px;\n`\n"
  },
  {
    "path": "src/components/CreateNewCategoryPopupContent/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { MenuItem, MenuList } from './styles'\nimport { RECORD_COLOR_BY_TYPE } from '../../constants/recordColorByType'\nimport { RECORD_ICON_BY_TYPE } from '../../constants/recordIconByType'\n\n/**\n * @param {{\n * menuItems: Array<{ name: string; type: string; }>,\n * onClick: (item: { name: string; type: string; }) => void,\n * }}\n */\nexport const CreateNewCategoryPopupContent = ({ menuItems, onClick }) => {\n  const handleMenuItemClick = (e, item) => {\n    e.stopPropagation()\n\n    onClick(item)\n  }\n\n  return html`\n    <${MenuList}>\n      ${menuItems?.map((item) => {\n        const Icon = RECORD_ICON_BY_TYPE?.[item.type]\n\n        return html`<${MenuItem}\n          data-testid=${`createcategory-popup-${item.type}`}\n          color=${RECORD_COLOR_BY_TYPE?.[item.type]}\n          key=${item.type}\n          onClick=${(e) => handleMenuItemClick(e, item)}\n        >\n          ${Icon &&\n          html`<${Icon}\n            size=\"24\"\n            fill=${true}\n            color=${RECORD_COLOR_BY_TYPE?.[item.type]}\n          />`}\n          ${item.name}\n        <//>`\n      })}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/CreateNewCategoryPopupContent/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { CreateNewCategoryPopupContent } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('CreateNewCategoryPopupContent', () => {\n  const mockMenuItems = [\n    { type: 'note', name: 'Note' },\n    { type: 'email', name: 'Email' }\n  ]\n  const mockOnClick = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders menu items correctly', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <CreateNewCategoryPopupContent\n          menuItems={mockMenuItems}\n          onClick={mockOnClick}\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByText('Note')).toBeInTheDocument()\n    expect(getByText('Email')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  it('calls onClick with correct item when menu item is clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <CreateNewCategoryPopupContent\n          menuItems={mockMenuItems}\n          onClick={mockOnClick}\n        />\n      </ThemeProvider>\n    )\n\n    const noteMenuItem = getByText('Note')\n    fireEvent.click(noteMenuItem)\n\n    expect(mockOnClick).toHaveBeenCalledWith(mockMenuItems[0])\n  })\n})\n"
  },
  {
    "path": "src/components/CreateNewCategoryPopupContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const MenuList = styled.div`\n  display: flex;\n  font-family: 'Inter';\n  position: absolute;\n  flex-direction: column;\n  width: 200px;\n  align-items: flex-start;\n  overflow: hidden;\n`\n\nexport const MenuItem = styled.div`\n  display: flex;\n  width: 100%;\n  padding: 5px 9px;\n  gap: 12px;\n  align-self: stretch;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-bottom: none;\n  align-items: center;\n  cursor: pointer;\n  position: relative;\n\n  &:first-child {\n    border-top-left-radius: 10px;\n    border-top-right-radius: 10px;\n  }\n\n  &:last-child {\n    border-bottom-left-radius: 10px;\n    border-bottom-right-radius: 10px;\n    border-bottom: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  }\n\n  &:hover {\n    border-color: ${({ color }) => color};\n  }\n\n  &:hover + div {\n    border-top-color: ${({ color }) => color};\n  }\n`\n"
  },
  {
    "path": "src/components/DropdownSwapVault/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport '@testing-library/jest-dom'\n\njest.mock(\n  '../../containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2',\n  () => ({\n    CreateOrEditVaultModalContentV2: () => null\n  })\n)\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useVault: () => ({\n    refetch: jest.fn(),\n    isVaultProtected: jest.fn()\n  })\n}))\n\njest.mock('../../context/LoadingContext', () => ({\n  useLoadingContext: () => ({\n    setIsLoading: jest.fn()\n  })\n}))\n\njest.mock('../../context/ModalContext', () => ({\n  useModal: () => ({\n    setModal: jest.fn(),\n    closeModal: jest.fn()\n  })\n}))\n\njest.mock('../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (key) => key\n  })\n}))\n\nimport { DropdownSwapVault } from './index'\n\ndescribe('DropdownSwapVault component', () => {\n  const mockVaults = [\n    { id: 'vault2', name: 'vault2' },\n    { id: 'vault3', name: 'vault3' }\n  ]\n  const mockSelectedVault = { id: 'vault1', name: 'vault1' }\n\n  test('renders with selected vault even when vaults array is empty', () => {\n    const { getAllByText } = render(\n      <ThemeProvider>\n        <DropdownSwapVault vaults={[]} selectedVault={mockSelectedVault} />\n      </ThemeProvider>\n    )\n\n    const elements = getAllByText('vault1')\n    expect(elements).toHaveLength(1)\n  })\n\n  test('renders with selected vault', () => {\n    const { getAllByText } = render(\n      <ThemeProvider>\n        <DropdownSwapVault\n          vaults={mockVaults}\n          selectedVault={mockSelectedVault}\n        />\n      </ThemeProvider>\n    )\n\n    const elements = getAllByText('vault1')\n\n    expect(elements).toHaveLength(1)\n  })\n\n  test('displays all vault options when open', () => {\n    const { getByText, getAllByText } = render(\n      <ThemeProvider>\n        <DropdownSwapVault\n          vaults={mockVaults}\n          selectedVault={mockSelectedVault}\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('vault1'))\n    const vaultOptions = getAllByText(/vault[12]/)\n    expect(vaultOptions).toHaveLength(2)\n  })\n})\n"
  },
  {
    "path": "src/components/DropdownSwapVault/index.tsx",
    "content": "import React, { useEffect, useState } from 'react'\n\nimport { html } from 'htm/react'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { useVault, type Vault } from '@tetherto/pearpass-lib-vault'\n\nimport {\n  HeaderContainer,\n  CreateVaultButton,\n  Dropdown,\n  DropdownItem,\n  DropdownItemLabel,\n  HeaderLabel,\n  HeaderLeft,\n  HeaderRight,\n  Wrapper\n} from './styles'\nimport { CreateVaultModalContent } from '../../containers/Modal/CreateVaultModalContent'\nimport { CreateOrEditVaultModalContentV2 } from '../../containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2'\nimport { VaultPasswordFormModalContent } from '../../containers/Modal/VaultPasswordFormModalContent'\nimport { useModal } from '../../context/ModalContext'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { isV2 } from '../../utils/designVersion'\nimport {\n  LockCircleIcon,\n  LockIcon,\n  SmallArrowIcon\n} from '../../lib-react-components'\nimport { logger } from '../../utils/logger'\n\ninterface DropdownSwapVaultProps {\n  vaults?: Vault[]\n  selectedVault?: Vault\n}\n\nexport const DropdownSwapVault = ({ vaults, selectedVault }: DropdownSwapVaultProps) => {\n  const { t } = useTranslation()\n\n  const [isOpen, setIsOpen] = useState(false)\n\n  const { closeModal, setModal } = useModal()\n\n  const { isVaultProtected, refetch: refetchVault } = useVault()\n\n  const [protectedVaultById, setProtectedVaultById] = useState<Record<string, boolean>>({})\n\n  useEffect(() => {\n    if (!isOpen || !vaults?.length) {\n      return\n    }\n\n    let isCancelled = false\n\n    const loadProtected = async () => {\n      const results = await Promise.all(\n        vaults.map(async (vault) => {\n          try {\n            const isProtected = await isVaultProtected(vault.id)\n            return [vault.id, !!isProtected]\n          } catch {\n            return [vault.id, false]\n          }\n        })\n      )\n\n      if (isCancelled) {\n        return\n      }\n\n      setProtectedVaultById(Object.fromEntries(results))\n    }\n\n    loadProtected()\n\n    return () => {\n      isCancelled = true\n    }\n  }, [isOpen, isVaultProtected, vaults])\n\n  const handleVaultUnlock = async ({\n    vault,\n    password\n  }: {\n    vault: Vault\n    password: string\n  }) => {\n    if (!vault.id) {\n      return\n    }\n\n    try {\n      await refetchVault(vault.id, { password })\n      closeModal()\n    } catch (error) {\n      logger.error('DropdownSwapVault', error)\n\n      throw error\n    }\n  }\n\n  const onVaultSelect = async (vault: Vault) => {\n    const cached = protectedVaultById[vault.id]\n    const isProtected = cached ?? (await isVaultProtected(vault.id))\n\n    if (cached === undefined) {\n      setProtectedVaultById((prev) => ({ ...prev, [vault.id]: isProtected }))\n    }\n\n    if (isProtected) {\n      setModal(\n        html`<${VaultPasswordFormModalContent}\n          onSubmit=${async (password: string) =>\n            handleVaultUnlock({ vault, password })}\n          vault=${vault}\n        />`\n      )\n    } else {\n      await refetchVault(vault.id)\n    }\n\n    setIsOpen(false)\n  }\n\n  const handleCreateNewVault = () => {\n    setIsOpen(false)\n\n    const CreateContent = isV2()\n      ? CreateOrEditVaultModalContentV2\n      : CreateVaultModalContent\n\n    setModal(\n      html`<${CreateContent} onClose=${closeModal} onSuccess=${closeModal} />`\n    )\n  }\n\n  if (!selectedVault?.id) {\n    return null\n  }\n\n  return (\n    <Wrapper>\n      <HeaderContainer\n        data-testid=\"dropdownswapvault-container\"\n        isOpen={isOpen}\n        onClick={() => setIsOpen(!isOpen)}\n      >\n        <HeaderLeft>\n          <LockCircleIcon size=\"24\" color={colors.primary400.mode1} />\n          <HeaderLabel>{selectedVault?.name}</HeaderLabel>\n        </HeaderLeft>\n\n        <HeaderRight isOpen={isOpen}>\n          <SmallArrowIcon size=\"20\" color={colors.primary400.mode1} />\n        </HeaderRight>\n      </HeaderContainer>\n\n      <Dropdown isOpen={isOpen}>\n        {vaults?.map((vault, index) => (\n          <DropdownItem\n            data-testid={`dropdownswapvault-option-${vault.id}`}\n            key={vault.id}\n            isOpen={isOpen}\n            delayMs={index * 30}\n            onClick={() => onVaultSelect(vault)}\n          >\n            <DropdownItemLabel>{vault.name}</DropdownItemLabel>\n            {protectedVaultById[vault.id] ? (\n              <LockIcon size=\"25\" color={colors.white.mode1} />\n            ) : null}\n          </DropdownItem>\n        ))}\n\n        <CreateVaultButton\n          data-testid=\"dropdownswapvault-create\"\n          isOpen={isOpen}\n          delayMs={(vaults?.length ?? 0) * 30}\n          onClick={handleCreateNewVault}\n        >\n          {t('Create New Vault')}\n        </CreateVaultButton>\n      </Dropdown>\n    </Wrapper>\n  )\n}\n"
  },
  {
    "path": "src/components/DropdownSwapVault/styles.ts",
    "content": "import styled from 'styled-components'\n\nimport { BASE_TRANSITION_DURATION } from '../../constants/transitions'\n\nconst ROW_VERTICAL_PADDING = 9\nconst ROW_HORIZONTAL_PADDING = 10\nconst ROW_MIN_HEIGHT = 42\n\nexport const Wrapper = styled.div`\n  width: 100%;\n  background: ${({ theme }) => theme.colors.black.mode1};\n  border-radius: 10px;\n`\n\nconst BaseRow = styled.div`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n\n  padding: ${ROW_VERTICAL_PADDING}px ${ROW_HORIZONTAL_PADDING}px;\n  min-height: ${ROW_MIN_HEIGHT}px;\n\n  border-radius: 10px;\n  box-sizing: border-box;\n`\n\nexport const HeaderContainer = styled(BaseRow)<{ isOpen: boolean }>`\n  border: 1px solid\n    ${({ theme, isOpen }) =>\n      isOpen ? theme.colors.primary400.mode1 : 'transparent'};\n  cursor: pointer;\n  user-select: none;\n`\n\nexport const HeaderLeft = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  min-width: 0;\n`\n\nexport const HeaderLabel = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n`\n\nexport const HeaderRight = styled.div<{ isOpen: boolean }>`\n  display: flex;\n  align-items: center;\n\n  & svg {\n    transform: ${({ isOpen }) => (isOpen ? 'rotate(0deg)' : 'rotate(-90deg)')};\n    transition: transform ${BASE_TRANSITION_DURATION}ms ease;\n  }\n`\n\nexport const Dropdown = styled.div<{ isOpen: boolean }>`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n\n  padding: ${({ isOpen }) => (isOpen ? '10px' : '0')};\n\n  max-height: ${({ isOpen }) => (isOpen ? '260px' : '0')};\n  opacity: ${({ isOpen }) => (isOpen ? 1 : 0)};\n  overflow-x: hidden;\n  overflow-y: ${({ isOpen }) => (isOpen ? 'auto' : 'hidden')};\n  pointer-events: ${({ isOpen }) => (isOpen ? 'auto' : 'none')};\n\n  transition:\n    max-height ${BASE_TRANSITION_DURATION}ms ease,\n    opacity ${BASE_TRANSITION_DURATION}ms ease,\n    padding ${BASE_TRANSITION_DURATION}ms ease;\n`\n\nexport const DropdownItem = styled(BaseRow)<{\n  isOpen?: boolean\n  delayMs?: number\n}>`\n  border: 1px solid transparent;\n  background: ${({ theme }) => theme.colors.grey500.mode1};\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n\n  opacity: ${({ isOpen }) => (isOpen ? 1 : 0)};\n  transform: ${({ isOpen }) => (isOpen ? 'translateY(0)' : 'translateY(-6px)')};\n  will-change: transform, opacity;\n\n  transition:\n    opacity ${BASE_TRANSITION_DURATION}ms ease,\n    transform ${BASE_TRANSITION_DURATION}ms ease;\n  transition-delay: ${({ isOpen, delayMs = 0 }) =>\n    isOpen ? `${delayMs}ms` : '0ms'};\n\n  &:hover {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n\n  & svg {\n    flex-shrink: 0;\n  }\n`\n\nexport const DropdownItemLabel = styled.span`\n  flex: 1;\n  min-width: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n`\n\nexport const CreateVaultButton = styled(DropdownItem)`\n  justify-content: flex-start;\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n`\n"
  },
  {
    "path": "src/components/EditFolderPopupContent/index.js",
    "content": "import { useMemo } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useFolders } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { MenuItem, MenuList } from './styles'\nimport { ConfirmationModalContent } from '../../containers/Modal/ConfirmationModalContent'\nimport { CreateFolderModalContent } from '../../containers/Modal/CreateFolderModalContent'\nimport { CreateFolderModalContentV2 } from '../../containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2'\nimport { DeleteFolderModalContentV2 } from '../../containers/Modal/DeleteFolderModalContentV2/DeleteFolderModalContentV2'\nimport { useModal } from '../../context/ModalContext'\nimport { DeleteIcon, FolderIcon } from '../../lib-react-components'\nimport { isV2 } from '../../utils/designVersion'\n\n/**\n *\n * @param {{\n *  name: string\n * }} props\n * @returns\n */\nexport const EditFolderPopupContent = ({ name }) => {\n  const { i18n } = useLingui()\n  const { deleteFolder, data: folderData } = useFolders()\n  const { setModal, closeModal } = useModal()\n\n  const menuItems = useMemo(\n    () => [\n      {\n        name: i18n._('Delete'),\n        type: 'delete',\n        icon: DeleteIcon,\n        onClick: () => {\n          if (isV2()) {\n            const count =\n              folderData?.customFolders?.[name]?.records?.length ?? 0\n            if (count === 1) {\n              deleteFolder(name)\n              closeModal()\n            } else {\n              setModal(\n                <DeleteFolderModalContentV2\n                  folderName={name}\n                  count={count - 1}\n                  onClose={closeModal}\n                />\n              )\n            }\n          } else {\n            setModal(\n              html`<${ConfirmationModalContent}\n                primaryAction=${() => {\n                  deleteFolder(name)\n                  closeModal()\n                }}\n                secondaryAction=${closeModal}\n                title=${i18n._('Are you sure you want to delete this folder?')}\n                text=${i18n._(\n                  'This action will permanently delete the folder and all items contained within it. Are you sure you want to proceed?'\n                )}\n              />`\n            )\n          }\n        }\n      },\n      {\n        name: i18n._('Rename'),\n        type: 'rename',\n        icon: FolderIcon,\n        onClick: () =>\n          isV2()\n            ? setModal(\n                <CreateFolderModalContentV2\n                  initialValues={{ title: name }}\n                  onClose={closeModal}\n                />\n              )\n            : setModal(\n                html`<${CreateFolderModalContent}\n                  initialValues=${{ title: name }}\n                />`\n              )\n      }\n    ],\n    [closeModal, deleteFolder, folderData, i18n, name, setModal]\n  )\n\n  const handleMenuItemClick = (e, item) => {\n    e.stopPropagation()\n\n    item.onClick()\n  }\n\n  return html`\n    <${MenuList}>\n      ${menuItems?.map((item) => {\n        const Icon = item.icon\n\n        return html`<${MenuItem}\n          data-testid=${`folder-menuitem-${item.type}`}\n          key=${item.type}\n          onClick=${(e) => handleMenuItemClick(e, item)}\n        >\n          ${Icon && html`<${Icon} size=\"24\" />`} ${item.name}\n        <//>`\n      })}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/EditFolderPopupContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const MenuList = styled.div`\n  display: flex;\n  font-family: 'Inter';\n  position: absolute;\n  flex-direction: column;\n  width: 200px;\n  align-items: flex-start;\n  overflow: hidden;\n`\n\nexport const MenuItem = styled.div`\n  display: flex;\n  width: 100%;\n  padding: 5px 9px;\n  align-items: center;\n  gap: 12px;\n  align-self: stretch;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-bottom: none;\n  cursor: pointer;\n  position: relative;\n\n  &:first-child {\n    border-top-left-radius: 10px;\n    border-top-right-radius: 10px;\n  }\n\n  &:last-child {\n    border-bottom-left-radius: 10px;\n    border-bottom-right-radius: 10px;\n    border-bottom: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  }\n\n  &:hover {\n    border-color: ${({ color }) => color};\n  }\n\n  &:hover + div {\n    border-top-color: ${({ color }) => color};\n  }\n`\n"
  },
  {
    "path": "src/components/EmptyCollectionView/index.js",
    "content": "import { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport {\n  CollectionsContainer,\n  CollectionsTitle,\n  CollectionsWrapper\n} from './styles'\nimport { RECORD_ICON_BY_TYPE } from '../../constants/recordIconByType'\nimport { useRouter } from '../../context/RouterContext'\nimport { useCreateOrEditRecord } from '../../hooks/useCreateOrEditRecord'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ButtonCreate } from '../../lib-react-components'\n\n/**\n * @param {{\n *  selectedFolder?: string\n *  isFavoritesView?: boolean\n *  isSearchActive?: boolean\n * }} props\n */\nexport const EmptyCollectionView = ({\n  selectedFolder,\n  isFavoritesView,\n  isSearchActive\n}) => {\n  const { data } = useRouter()\n  const { t } = useTranslation()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n\n  const createCollectionOptions = [\n    { text: t('Create a login'), type: RECORD_TYPES.LOGIN },\n    { text: t('Create an identity'), type: RECORD_TYPES.IDENTITY },\n    {\n      text: t('Create a credit card'),\n      type: RECORD_TYPES.CREDIT_CARD\n    },\n    { text: t('Save a Wi-fi'), type: RECORD_TYPES.WIFI_PASSWORD },\n    { text: t('Save a Recovery phrase'), type: RECORD_TYPES.PASS_PHRASE },\n    { text: t('Create a note'), type: RECORD_TYPES.NOTE },\n    { text: t('Create a custom element'), type: RECORD_TYPES.CUSTOM }\n  ]\n\n  return html`\n    <${CollectionsWrapper}\n      data-testid=\"empty-collection-view\"\n      $isSearchActive=${isSearchActive}\n    >\n      <${CollectionsContainer}>\n        <${CollectionsTitle}>\n          <span>\n            ${isSearchActive\n              ? t('No result found.')\n              : t('This collection is empty.')}\n          </span>\n\n          ${!isSearchActive &&\n          html`<p>\n            ${t('Create a new element or pass to another collection')}\n          </p>`}\n        <//>\n\n        ${!isSearchActive &&\n        createCollectionOptions\n          .filter(\n            (option) =>\n              data.recordType === 'all' || option.type === data.recordType\n          )\n          .map(\n            (option) => html`\n              <${ButtonCreate}\n                key=${option.type}\n                testId=${`emptycollection-button-create-${option.type}`}\n                startIcon=${RECORD_ICON_BY_TYPE[option.type]}\n                onClick=${() =>\n                  handleCreateOrEditRecord({\n                    recordType: option.type,\n                    selectedFolder,\n                    isFavorite: isFavoritesView ? true : undefined\n                  })}\n              >\n                ${option.text}\n              <//>\n            `\n          )}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/EmptyCollectionView/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { EmptyCollectionView } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../context/RouterContext', () => ({\n  useRouter: () => ({\n    data: {\n      recordType: 'all'\n    }\n  })\n}))\n\nconst mockHandleCreateOrEditRecord = jest.fn()\njest.mock('../../hooks/useCreateOrEditRecord', () => ({\n  useCreateOrEditRecord: () => ({\n    handleCreateOrEditRecord: mockHandleCreateOrEditRecord\n  })\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: { _: (str) => str }\n  })\n}))\n\ndescribe('EmptyCollectionView component', () => {\n  const renderComponent = () =>\n    render(\n      <ThemeProvider>\n        <EmptyCollectionView selectedFolder=\"test-folder\" isFavoritesView />\n      </ThemeProvider>\n    )\n\n  test('renders empty collection message', () => {\n    const { container, getByText } = renderComponent()\n    expect(getByText('This collection is empty.')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('displays all create options when recordType is \"all\"', () => {\n    const { getByText } = renderComponent()\n    expect(getByText('Create a login')).toBeInTheDocument()\n    expect(getByText('Create an identity')).toBeInTheDocument()\n    expect(getByText('Create a credit card')).toBeInTheDocument()\n    expect(getByText('Create a note')).toBeInTheDocument()\n    expect(getByText('Create a custom element')).toBeInTheDocument()\n  })\n  test('buttons are clickable and trigger handleCreateOrEditRecord', () => {\n    const { getByText } = renderComponent()\n    const loginButton = getByText('Create a login')\n\n    fireEvent.click(loginButton)\n    expect(mockHandleCreateOrEditRecord).toHaveBeenCalledWith({\n      recordType: 'login',\n      selectedFolder: 'test-folder',\n      isFavorite: true\n    })\n  })\n\n  test('displays help text', () => {\n    const { getByText } = renderComponent()\n    expect(\n      getByText('Create a new element or pass to another collection')\n    ).toBeInTheDocument()\n  })\n\n  describe('when isSearchActive is true', () => {\n    const renderSearchComponent = () =>\n      render(\n        <ThemeProvider>\n          <EmptyCollectionView\n            selectedFolder=\"test-folder\"\n            isFavoritesView\n            isSearchActive\n          />\n        </ThemeProvider>\n      )\n\n    test('renders \"No result found.\" message', () => {\n      const { getByText } = renderSearchComponent()\n      expect(getByText('No result found.')).toBeInTheDocument()\n    })\n\n    test('does not render empty collection message', () => {\n      const { queryByText } = renderSearchComponent()\n      expect(queryByText('This collection is empty.')).not.toBeInTheDocument()\n    })\n\n    test('does not render help text', () => {\n      const { queryByText } = renderSearchComponent()\n      expect(\n        queryByText('Create a new element or pass to another collection')\n      ).not.toBeInTheDocument()\n    })\n\n    test('does not render create buttons', () => {\n      const { queryByText } = renderSearchComponent()\n      expect(queryByText('Create a login')).not.toBeInTheDocument()\n      expect(queryByText('Create an identity')).not.toBeInTheDocument()\n      expect(queryByText('Create a credit card')).not.toBeInTheDocument()\n      expect(queryByText('Create a note')).not.toBeInTheDocument()\n      expect(queryByText('Create a custom element')).not.toBeInTheDocument()\n    })\n  })\n})\n"
  },
  {
    "path": "src/components/EmptyCollectionView/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const CollectionsWrapper = styled.div`\n  display: flex;\n  width: 100%;\n  height: 100%;\n  justify-content: center;\n  align-items: ${({ $isSearchActive }) =>\n    $isSearchActive ? 'flex-start' : 'center'};\n  padding-top: ${({ $isSearchActive }) => ($isSearchActive ? '20%' : '0')};\n`\n\nexport const CollectionsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 300px;\n  gap: 10px;\n`\n\nexport const CollectionsTitle = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n  margin-bottom: 20px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 600;\n\n  & span {\n    font-weight: 600;\n  }\n\n  & p {\n    font-weight: 400;\n  }\n`\n"
  },
  {
    "path": "src/components/FileDropArea/index.js",
    "content": "import { useRef, useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { DropAreaWrapper, HiddenInput, Label } from './styles'\n\n/**\n * @param {{\n *  label: import('react').ReactNode,\n *  onFileDrop: (files: File[]) => void,\n *  accepts: string,\n * }} props\n */\nexport const FileDropArea = ({ label, onFileDrop, accepts }) => {\n  const fileInputRef = useRef(null)\n  const [isDragging, setIsDragging] = useState(false)\n\n  const handleAreaClick = () => {\n    fileInputRef.current?.click()\n  }\n\n  const handleFileChange = (event) => {\n    const files = event.target.files\n\n    onFileDrop?.(files)\n  }\n\n  const handleDragOver = (event) => {\n    event.preventDefault()\n\n    setIsDragging(true)\n  }\n\n  const handleDragLeave = () => {\n    setIsDragging(false)\n  }\n\n  const handleDrop = (event) => {\n    event.preventDefault()\n\n    const files = Array.from(event.dataTransfer.files)\n\n    onFileDrop?.(files)\n  }\n\n  return html` <${DropAreaWrapper}\n    onClick=${handleAreaClick}\n    onDragOver=${handleDragOver}\n    onDragLeave=${handleDragLeave}\n    onDrop=${handleDrop}\n    isDragging=${isDragging}\n  >\n    <${Label}> ${label} <//>\n    <${HiddenInput}\n      ref=${fileInputRef}\n      type=\"file\"\n      accept=${accepts}\n      onChange=${handleFileChange}\n    />\n  <//>`\n}\n"
  },
  {
    "path": "src/components/FileDropArea/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { FileDropArea } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('FileDropArea component', () => {\n  const mockOnFileDrop = jest.fn()\n  const testLabel = 'Drop files here'\n\n  const renderComponent = () =>\n    render(\n      <ThemeProvider>\n        <FileDropArea label={testLabel} onFileDrop={mockOnFileDrop} />\n      </ThemeProvider>\n    )\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders the label correctly', () => {\n    const { getByText, container } = renderComponent()\n    expect(getByText(testLabel)).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('triggers file input click when area is clicked', () => {\n    const { getByText, container } = renderComponent()\n    const dropArea = getByText(testLabel)\n    const fileInput = container.querySelector('input[type=\"file\"]')\n\n    const mockClick = jest.spyOn(fileInput, 'click')\n    fireEvent.click(dropArea)\n\n    expect(mockClick).toHaveBeenCalled()\n  })\n\n  test('calls onFileDrop when files are selected via input', () => {\n    const { container } = renderComponent()\n    const fileInput = container.querySelector('input[type=\"file\"]')\n\n    const testFiles = [\n      new File(['test content'], 'test.txt', { type: 'text/plain' })\n    ]\n    Object.defineProperty(fileInput, 'files', {\n      value: testFiles\n    })\n\n    fireEvent.change(fileInput)\n    expect(mockOnFileDrop).toHaveBeenCalledWith(testFiles)\n  })\n\n  test('handles file drop correctly', () => {\n    const { getByText } = renderComponent()\n    const dropArea = getByText(testLabel)\n\n    const testFiles = [\n      new File(['test content'], 'test.txt', { type: 'text/plain' })\n    ]\n\n    fireEvent.drop(dropArea, {\n      dataTransfer: {\n        files: testFiles\n      }\n    })\n\n    expect(mockOnFileDrop).toHaveBeenCalledWith(testFiles)\n  })\n})\n"
  },
  {
    "path": "src/components/FileDropArea/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const DropAreaWrapper = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  min-height: 83px;\n  border-radius: 10px;\n  width: 100%;\n  border: 1px dashed ${({ theme }) => theme.colors.grey100.mode1};\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  opacity: ${({ isDragging }) => (isDragging ? 0.5 : 1)};\n`\n\nexport const Label = styled.div`\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 500;\n`\n\nexport const HiddenInput = styled.input`\n  display: none;\n`\n"
  },
  {
    "path": "src/components/FileUploadContent/index.js",
    "content": "import { useRef, useState } from 'react'\n\nimport {\n  MAX_FILE_SIZE_MB,\n  MAX_FILE_SIZE_BYTES\n} from '@tetherto/pearpass-lib-constants'\nimport { html } from 'htm/react'\n\nimport { ContentWrapper, FileSizeWarning, HiddenInput } from './styles'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ButtonSecondary } from '../../lib-react-components'\nimport { YellowErrorIcon } from '../../lib-react-components'\nimport { FileDropArea } from '../FileDropArea'\n\nexport const FileUploadContent = ({\n  accepts,\n  isTypeImage,\n  handleFileChange\n}) => {\n  const { t } = useTranslation()\n  const [isFileSizeWarning, setIsFileSizeWarning] = useState(false)\n  const fileInputRef = useRef(null)\n\n  const handleBrowseClick = () => {\n    fileInputRef.current?.click()\n  }\n\n  const onFileChange = (files) => {\n    const file = files?.[0]\n\n    if (!file) return\n\n    if (file.size > MAX_FILE_SIZE_BYTES) {\n      setIsFileSizeWarning(true)\n      return\n    }\n\n    if (isFileSizeWarning) {\n      setIsFileSizeWarning(false)\n    }\n\n    handleFileChange(files)\n  }\n\n  return html` <${ContentWrapper}>\n      <${FileDropArea}\n        onFileDrop=${onFileChange}\n        accepts=${accepts}\n        label=${isTypeImage\n          ? t('Drop picture here...')\n          : t('Drop file here...')}\n      />\n    <//>\n\n    ${isFileSizeWarning\n      ? html` <${FileSizeWarning}>\n          <${YellowErrorIcon} size=\"18\" />\n          ${t(\n            `Your picture is too large. Please upload one that’s ${MAX_FILE_SIZE_MB} MB or smaller.`\n          )}\n        <//>`\n      : html`<${FileSizeWarning}>\n          ${t(`Maximum file size: ${MAX_FILE_SIZE_MB} MB.`)}\n        <//>`}\n\n    <${ButtonSecondary} onClick=${handleBrowseClick}>\n      ${t('Browse folders')}\n    <//>\n\n    <${HiddenInput}\n      ref=${fileInputRef}\n      type=\"file\"\n      accept=${accepts}\n      onChange=${(event) => onFileChange(event?.target?.files)}\n    />`\n}\n"
  },
  {
    "path": "src/components/FileUploadContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ContentWrapper = styled.div`\n  width: 100%;\n`\n\nexport const HiddenInput = styled.input`\n  display: none;\n`\n\nexport const FileSizeWarning = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n`\n"
  },
  {
    "path": "src/components/FolderDropdown/FolderDropdownV2.tsx",
    "content": "import { useMemo } from 'react'\n\nimport {\n  Button,\n  ContextMenu,\n  MultiSlotInput,\n  NavbarListItem,\n  SelectField,\n  rawTokens,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { Close, CreateNewFolder, Folder, KeyboardArrowBottom } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useFolders } from '@tetherto/pearpass-lib-vault'\n\nimport { CreateFolderModalContentV2 } from '../../containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2'\nimport { useModal } from '../../context/ModalContext'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { sortByName } from '../../utils/sortByName'\n\ntype FolderDropdownV2Props = {\n  selectedFolder?: string\n  onFolderSelect: (name: string) => void\n}\n\nexport const FolderDropdownV2 = ({\n  selectedFolder,\n  onFolderSelect\n}: FolderDropdownV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { setModal, closeModal } = useModal()\n  const { data: folders } = useFolders()\n\n  const folderOptions = useMemo(() => {\n    return sortByName(\n      Object.values(\n        (folders?.customFolders ?? {}) as Record<string, { name: string }>\n      )\n    ).map((f) => f.name)\n  }, [folders])\n\n  const handleCreateFolder = () => {\n    setModal(\n      <CreateFolderModalContentV2\n        onClose={closeModal}\n        onCreate={(folderName: string) => {\n          onFolderSelect(folderName)\n        }}\n      />\n    )\n  }\n\n  return (\n    <ContextMenu\n      fullWidth\n      trigger={\n        <MultiSlotInput testID='createoredit-folder-slot-v2'>\n          <SelectField\n            label={t('Folder')}\n            value={selectedFolder ?? ''}\n            placeholder={t('Choose Folder')}\n            testID='createoredit-select-folder-v2'\n            rightSlot={\n              <div style={{ display: 'flex', alignItems: 'center', gap: rawTokens.spacing6 }}>\n                {selectedFolder && (\n                  <Button\n                    variant='tertiary'\n                    size='small'\n                    type='button'\n                    aria-label={t('Clear folder')}\n                    iconBefore={\n                      <Close\n                        width={16}\n                        height={16}\n                        color={theme.colors.colorTextPrimary}\n                      />\n                    }\n                    onClick={(e) => {\n                      e.stopPropagation()\n                      onFolderSelect(selectedFolder)\n                    }}\n                    data-testid='createoredit-folder-clear-v2'\n                  />\n                )}\n                <KeyboardArrowBottom color={theme.colors.colorTextPrimary} />\n              </div>\n            }\n          />\n        </MultiSlotInput>\n      }\n    >\n      {folderOptions.map((name) => (\n        <NavbarListItem\n          key={name}\n          icon={\n            <Folder\n              width={16}\n              height={16}\n              color={theme.colors.colorTextPrimary}\n            />\n          }\n          iconSize={16}\n          label={name}\n          selected={selectedFolder === name}\n          onClick={() => onFolderSelect(name)}\n          testID={`createoredit-folder-option-v2-${name}`}\n        />\n      ))}\n      <NavbarListItem\n        icon={\n          <CreateNewFolder\n            width={16}\n            height={16}\n            color={theme.colors.colorTextPrimary}\n          />\n        }\n        iconSize={16}\n        label={t('Add New Folder')}\n        onClick={handleCreateFolder}\n        testID='createoredit-folder-create-v2'\n      />\n    </ContextMenu>\n  )\n}\n\n"
  },
  {
    "path": "src/components/FolderDropdown/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useFolders } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateFolderModalContent } from '../../containers/Modal/CreateFolderModalContent'\nimport { CreateFolderModalContentV2 } from '../../containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2'\nimport { useModal } from '../../context/ModalContext'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { PlusIcon, StarIcon } from '../../lib-react-components'\nimport { isV2 } from '../../utils/designVersion'\nimport { FAVORITES_FOLDER_ID } from '../../utils/isFavorite'\nimport { sortByName } from '../../utils/sortByName'\nimport { MenuDropdown } from '../MenuDropdown'\nimport { DropDownItem } from '../MenuDropdown/styles'\n\nconst NO_FOLDER = 'no-folder'\n\n/**\n * @param {{\n *  selectedFolder?: {\n *    name: string;\n *    icon?: React.ReactNode;\n *  },\n *  onFolderSelect: (folder: {\n *    name: string;\n *    icon?: React.ReactNode;\n *   }) => void\n *  testId?: string\n * }} props\n */\nexport const FolderDropdown = ({ selectedFolder, onFolderSelect, testId }) => {\n  const { data: folders } = useFolders()\n\n  const { t } = useTranslation()\n  const { setModal, closeModal } = useModal()\n\n  const customFolders = React.useMemo(() => {\n    const mappedFolders = sortByName(\n      Object.values(folders?.customFolders ?? {})\n    ).map((folder) => ({ name: folder.name }))\n\n    if (selectedFolder) {\n      mappedFolders.unshift({ name: t('No Folder'), type: NO_FOLDER })\n    }\n\n    return mappedFolders\n  }, [folders])\n\n  const isFavorite = selectedFolder === FAVORITES_FOLDER_ID\n  const name = isFavorite ? t('Favorite') : selectedFolder\n  const icon = isFavorite ? StarIcon : undefined\n\n  const handleCreateNewFolder = () => {\n    isV2()\n      ? setModal(\n          <CreateFolderModalContentV2\n            onClose={() => closeModal()}\n            onCreate={(folderData) =>\n              onFolderSelect({ name: folderData?.folder })\n            }\n          />\n        )\n      : setModal(html`\n          <${CreateFolderModalContent}\n            onCreate=${(folderData) =>\n              onFolderSelect({ name: folderData?.folder })}\n          />\n        `)\n  }\n\n  const handleFolderSelect = (folder) => {\n    onFolderSelect(folder.type === NO_FOLDER ? undefined : folder)\n  }\n  useEffect(() => {\n    if (!selectedFolder) {\n      return\n    }\n\n    const existingFolders = Object.values(folders?.customFolders ?? {})\n    const exists = existingFolders.some(\n      (folder) => folder.name === selectedFolder\n    )\n\n    if (!exists) {\n      onFolderSelect(undefined)\n    }\n  }, [folders, onFolderSelect, selectedFolder])\n\n  const CreteNewFolderComponent = html`\n    <${DropDownItem}\n      data-testid=\"menudropdown-create-new\"\n      onClick=${() => handleCreateNewFolder()}\n    >\n      <${PlusIcon} size=\"24\" />\n      ${t('Create new')}\n    <//>\n  `\n\n  return html`\n    <${MenuDropdown}\n      testId=${testId}\n      selectedItem=${{ name, icon }}\n      onItemSelect=${handleFolderSelect}\n      items=${customFolders}\n      bottomComponent=${CreteNewFolderComponent}\n    />\n  `\n}\n"
  },
  {
    "path": "src/components/FolderDropdown/index.test.js",
    "content": "import React from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { useFolders } from '@tetherto/pearpass-lib-vault'\n\nimport { FolderDropdown } from './index'\nimport '@testing-library/jest-dom'\n\nconst mockSetModal = jest.fn()\n\njest.mock(\n  '../../containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2',\n  () => ({\n    CreateFolderModalContentV2: function MockCreateFolderModalContentV2() {\n      return null\n    }\n  })\n)\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useFolders: jest.fn()\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: jest.fn()\n}))\n\njest.mock('../../context/ModalContext', () => ({\n  useModal: jest.fn(() => ({\n    setModal: mockSetModal,\n    closeModal: jest.fn()\n  }))\n}))\n\njest.mock('../MenuDropdown', () => ({\n  MenuDropdown: ({ selectedItem, onItemSelect, items, bottomComponent }) => (\n    <div data-testid=\"menu-dropdown\">\n      <div data-testid=\"selected-item\">{selectedItem.name}</div>\n      <div data-testid=\"items\">\n        {items.map((item, index) => (\n          <button\n            key={index}\n            data-testid={`item-${item.name}`}\n            onClick={() => onItemSelect(item)}\n          >\n            {item.name}\n          </button>\n        ))}\n      </div>\n      <div data-testid=\"bottom-component\">{bottomComponent}</div>\n    </div>\n  )\n}))\n\njest.mock('../MenuDropdown/styles', () => ({\n  DropDownItem: ({ children, ...rest }) => (\n    <div data-testid=\"mock-dropdown-item\" {...rest}>\n      {children}\n    </div>\n  )\n}))\n\ndescribe('FolderDropdown', () => {\n  const mockOnFolderSelect = jest.fn()\n  const mockFolders = {\n    customFolders: {\n      folder1: { name: 'Personal' },\n      folder2: { name: 'Work' },\n      folder3: { name: 'Finance' }\n    }\n  }\n\n  beforeEach(() => {\n    useFolders.mockReturnValue({ data: mockFolders })\n    useLingui.mockReturnValue({ i18n: { _: (text) => text } })\n    mockOnFolderSelect.mockClear()\n    mockSetModal.mockClear()\n  })\n\n  test('renders with correct custom folders', () => {\n    render(\n      <FolderDropdown\n        selectedFolder=\"Personal\"\n        onFolderSelect={mockOnFolderSelect}\n      />\n    )\n\n    expect(screen.getByTestId('selected-item')).toHaveTextContent('Personal')\n    expect(screen.getByTestId('item-Personal')).toBeInTheDocument()\n    expect(screen.getByTestId('item-Work')).toBeInTheDocument()\n    expect(screen.getByTestId('item-Finance')).toBeInTheDocument()\n    // Bottom \"Create new\" component is rendered\n    expect(screen.getByTestId('bottom-component')).toBeInTheDocument()\n  })\n\n  test('handles favorites folder correctly', () => {\n    render(\n      <FolderDropdown\n        selectedFolder=\"favorites\"\n        onFolderSelect={mockOnFolderSelect}\n      />\n    )\n\n    expect(screen.getByTestId('selected-item')).toHaveTextContent('Favorite')\n  })\n\n  test('calls onFolderSelect when folder is selected', () => {\n    render(\n      <FolderDropdown\n        selectedFolder=\"Personal\"\n        onFolderSelect={mockOnFolderSelect}\n      />\n    )\n\n    fireEvent.click(screen.getByTestId('item-Work'))\n    expect(mockOnFolderSelect).toHaveBeenCalledWith({ name: 'Work' })\n  })\n\n  test('handles empty folders gracefully', () => {\n    useFolders.mockReturnValue({ data: null })\n\n    render(\n      <FolderDropdown\n        selectedFolder=\"Personal\"\n        onFolderSelect={mockOnFolderSelect}\n      />\n    )\n\n    expect(screen.getByTestId('items')).toBeInTheDocument()\n    expect(screen.queryByTestId('item-Personal')).not.toBeInTheDocument()\n  })\n\n  test('handles undefined selectedFolder', () => {\n    render(<FolderDropdown onFolderSelect={mockOnFolderSelect} />)\n\n    expect(screen.getByTestId('selected-item')).toBeInTheDocument()\n    expect(screen.getByTestId('selected-item').textContent).toBe('')\n  })\n\n  test('clears selectedFolder when it no longer exists', () => {\n    useFolders.mockReturnValue({\n      data: {\n        customFolders: {\n          folder1: { name: 'Other' }\n        }\n      }\n    })\n\n    render(\n      <FolderDropdown\n        selectedFolder=\"NonExisting\"\n        onFolderSelect={mockOnFolderSelect}\n      />\n    )\n\n    expect(mockOnFolderSelect).toHaveBeenCalledWith(undefined)\n  })\n\n  test('opens create-folder modal and selects newly created folder', () => {\n    render(\n      <FolderDropdown\n        selectedFolder=\"Personal\"\n        onFolderSelect={mockOnFolderSelect}\n      />\n    )\n\n    const createButton = screen.getByTestId('menudropdown-create-new')\n    fireEvent.click(createButton)\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n\n    const modalElement = mockSetModal.mock.calls[0][0]\n    expect(typeof modalElement.props.onCreate).toBe('function')\n\n    mockOnFolderSelect.mockClear()\n\n    // Simulate onCreate being called with an object that contains folder field\n    modalElement.props.onCreate({ folder: 'NewFolder' })\n    expect(mockOnFolderSelect).toHaveBeenCalledTimes(1)\n    expect(mockOnFolderSelect).toHaveBeenCalledWith({ name: 'NewFolder' })\n  })\n})\n"
  },
  {
    "path": "src/components/FolderDropdown/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nexport const Label = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isHidden'].includes(prop)\n})`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  cursor: pointer;\n  white-space: nowrap;\n\n  ${({ isHidden }) => {\n    if (isHidden) {\n      return css`\n        opacity: 0;\n        pointer-events: none;\n        padding: 5px;\n      `\n    }\n  }}\n`\n\nexport const MainWrapper = styled.div`\n  position: relative;\n`\n\nexport const Wrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isOpen'].includes(prop)\n})`\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border: 1px solid\n    ${({ theme, isOpen }) =>\n      isOpen ? theme.colors.primary400.mode1 : theme.colors.grey100.mode1};\n  padding: 5px;\n  top: 0;\n  left: 0;\n  position: absolute;\n  z-index: 5;\n\n  &:hover {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n\n    & ${Label} path {\n      stroke: ${({ theme }) => theme.colors.primary400.mode1};\n    }\n  }\n`\n\nexport const DropDown = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  padding: 4px 5px 0 30px;\n`\n\nexport const DropDownItem = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  white-space: nowrap;\n  cursor: pointer;\n`\n\nexport const FolderIconWrapper = styled.div`\n  flex-shrink: 0;\n`\n"
  },
  {
    "path": "src/components/FormGroup/index.js",
    "content": "import { useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { Collapse, TitleWrapper, Wrapper } from './styles'\nimport { ArrowDownIcon, ArrowUpIcon } from '../../lib-react-components'\n\n/**\n * @param {{\n *  title?: string,\n *  isCollapse?: boolean\n *  defaultOpenState?: boolean\n *  children: import('react').ReactNode\n *  testId?: string\n * }} props\n */\nexport const FormGroup = ({\n  title,\n  isCollapse,\n  children,\n  defaultOpenState = true,\n  testId\n}) => {\n  const [isOpen, setIsOpen] = useState(defaultOpenState)\n\n  if (!children) {\n    return\n  }\n\n  return html`\n    <${Wrapper}>\n      ${!!title?.length &&\n      isCollapse &&\n      html`\n        <${TitleWrapper}\n          data-testid=${testId}\n          onClick=${() => setIsOpen(!isOpen)}\n        >\n          <${isOpen ? ArrowUpIcon : ArrowDownIcon} />\n          ${title}\n        <//>\n      `}\n      ${isOpen && html` <${Collapse}> ${children} <//> `}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/FormGroup/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { FormGroup } from './index'\n\nimport '@testing-library/jest-dom'\n\njest.mock('../../lib-react-components', () => ({\n  ArrowDownIcon: () => <div data-testid=\"arrow-down-icon\">ArrowDown</div>,\n  ArrowUpIcon: () => <div data-testid=\"arrow-up-icon\">ArrowUp</div>\n}))\n\ndescribe('FormGroup', () => {\n  const mockTitle = 'Test Title'\n  const mockChildren = <div data-testid=\"test-children\">Test Children</div>\n\n  test('renders with children and title when isCollapse is true', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormGroup title={mockTitle} isCollapse={true}>\n          {mockChildren}\n        </FormGroup>\n      </ThemeProvider>\n    )\n\n    expect(screen.getByText(mockTitle)).toBeInTheDocument()\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n    expect(screen.getByTestId('arrow-up-icon')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders without title section when isCollapse is false', () => {\n    render(\n      <FormGroup title={mockTitle} isCollapse={false}>\n        {mockChildren}\n      </FormGroup>\n    )\n\n    expect(screen.queryByText(mockTitle)).not.toBeInTheDocument()\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n  })\n\n  test('toggles collapse state when title is clicked', () => {\n    render(\n      <ThemeProvider>\n        <FormGroup title={mockTitle} isCollapse={true}>\n          {mockChildren}\n        </FormGroup>\n      </ThemeProvider>\n    )\n\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n    expect(screen.getByTestId('arrow-up-icon')).toBeInTheDocument()\n\n    fireEvent.click(screen.getByText(mockTitle))\n\n    expect(screen.queryByTestId('test-children')).not.toBeInTheDocument()\n    expect(screen.queryByTestId('arrow-up-icon')).not.toBeInTheDocument()\n    expect(screen.getByTestId('arrow-down-icon')).toBeInTheDocument()\n\n    fireEvent.click(screen.getByText(mockTitle))\n\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n    expect(screen.getByTestId('arrow-up-icon')).toBeInTheDocument()\n  })\n\n  test('does not render when children is not provided', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormGroup title={mockTitle} isCollapse={true} />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toBeNull()\n  })\n\n  test('renders without title when title is empty string', () => {\n    render(\n      <ThemeProvider>\n        <FormGroup title=\"\" isCollapse={true}>\n          {mockChildren}\n        </FormGroup>\n      </ThemeProvider>\n    )\n\n    expect(screen.queryByTestId('arrow-up-icon')).not.toBeInTheDocument()\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n  })\n\n  test('renders without title when title is undefined', () => {\n    render(<FormGroup isCollapse={true}>{mockChildren}</FormGroup>)\n\n    expect(screen.queryByTestId('arrow-up-icon')).not.toBeInTheDocument()\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/FormGroup/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`\n\nexport const TitleWrapper = styled.div`\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n  cursor: pointer;\n  align-self: flex-start;\n`\n\nexport const Collapse = styled.div`\n  width: 100%;\n`\n"
  },
  {
    "path": "src/components/FormModalHeaderWrapper/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Buttons, FormModalHeaderWrapperComponent, Main } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode,\n *  buttons: import('react').ReactNode\n * }} props\n */\nexport const FormModalHeaderWrapper = ({ children, buttons }) =>\n  html` <${FormModalHeaderWrapperComponent}>\n    <${Main}> ${children} <//>\n    <${Buttons}> ${buttons} <//>\n  <//>`\n"
  },
  {
    "path": "src/components/FormModalHeaderWrapper/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { FormModalHeaderWrapper } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('FormModalHeaderWrapper', () => {\n  const mockChildren = <div data-testid=\"test-children\">Test Children</div>\n  const mockButtons = <div data-testid=\"test-buttons\">Test Buttons</div>\n\n  test('renders children and buttons correctly', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormModalHeaderWrapper children={mockChildren} buttons={mockButtons} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n    expect(screen.getByTestId('test-buttons')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders without children', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormModalHeaderWrapper buttons={mockButtons} />\n      </ThemeProvider>\n    )\n\n    expect(screen.queryByTestId('test-children')).not.toBeInTheDocument()\n    expect(screen.getByTestId('test-buttons')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders without buttons', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormModalHeaderWrapper children={mockChildren} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n    expect(screen.queryByTestId('test-buttons')).not.toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders with empty content', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormModalHeaderWrapper />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/components/FormModalHeaderWrapper/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const FormModalHeaderWrapperComponent = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`\n\nexport const Main = styled.div`\n  display: flex;\n`\n\nexport const Buttons = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n`\n"
  },
  {
    "path": "src/components/FormWrapper/index.js",
    "content": "import styled from 'styled-components'\n\nexport const FormWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n"
  },
  {
    "path": "src/components/FormWrapper/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { FormWrapper } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('FormWrapper', () => {\n  test('renders correctly', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormWrapper />\n      </ThemeProvider>\n    )\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders with children', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <FormWrapper>\n          <div>Test Child</div>\n        </FormWrapper>\n      </ThemeProvider>\n    )\n    expect(getByText('Test Child')).toBeInTheDocument()\n  })\n\n  test('renders multiple children in correct order', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <FormWrapper>\n          <div>First Child</div>\n          <div>Second Child</div>\n          <div>Third Child</div>\n        </FormWrapper>\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/components/ImportDataOption/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { AcceptedTypes, Container, Title } from './styles'\nimport { UploadFilesModalContent } from '../../containers/Modal/UploadImageModalContent'\nimport { useModal } from '../../context/ModalContext'\n\n/**\n * @param {Object} props\n * @param {string} props.title\n * @param {string[]} props.accepts\n * * @param {(files: FileList) => void} [props.onFilesSelected]\n */\nexport const ImportDataOption = ({\n  title,\n  accepts,\n  onFilesSelected,\n  testId\n}) => {\n  const { setModal } = useModal()\n\n  const handleClick = () => {\n    setModal(\n      html`<${UploadFilesModalContent}\n        type=${'file'}\n        closeOnChange=${false}\n        accepts=${accepts.join(',')}\n        onFilesSelected=${onFilesSelected}\n      />`\n    )\n  }\n\n  return html` <${Container} data-testid=${testId} onClick=${handleClick}>\n    <${Title}>${title}<//>\n    <${AcceptedTypes}>${accepts.join(', ')}<//>\n  <//>`\n}\n"
  },
  {
    "path": "src/components/ImportDataOption/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  display: flex;\n  width: 150px;\n  height: 100px;\n  padding: 14px 2px;\n  flex-direction: column;\n  align-items: center;\n  gap: 6px;\n\n  cursor: pointer;\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n`\n\nexport const AcceptedTypes = styled.span`\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/components/InitialPageWrapper/index.js",
    "content": "import { html } from 'htm/react'\n\nimport {\n  Background,\n  BottomGradient,\n  ContentWrapper,\n  LeftSpotlightWrapper,\n  LogoContainer,\n  PageContent,\n  PearPass\n} from './styles'\nimport { LogoLock } from '../../svgs/LogoLock'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  isAuthScreen: boolean\n * }} props\n */\nexport const InitialPageWrapper = ({ children, isAuthScreen = false }) => html`\n  <${Background} isAuthScreen=${isAuthScreen}>\n    <${LeftSpotlightWrapper} isAuthScreen=${isAuthScreen} />\n\n    <${PageContent} isAuthScreen=${isAuthScreen}>\n      <${LogoContainer}>\n        <${LogoLock} width=\"42\" height=\"57\" />\n        <${PearPass}>${window.electronAPI?.productName ?? 'PearPass'}<//>\n      <//>\n\n      <${ContentWrapper}> ${children} <//>\n    <//>\n\n    <${BottomGradient} isAuthScreen=${isAuthScreen} />\n  <//>\n`\n"
  },
  {
    "path": "src/components/InitialPageWrapper/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { InitialPageWrapper } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('InitialPageWrapper', () => {\n  const mockChildren = <div data-testid=\"test-children\">Test Children</div>\n\n  test('renders children correctly', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InitialPageWrapper children={mockChildren} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByTestId('test-children')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders without children', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InitialPageWrapper />\n      </ThemeProvider>\n    )\n\n    expect(screen.queryByTestId('test-children')).not.toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/components/InitialPageWrapper/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Background = styled.div`\n  position: relative;\n  background-color: ${({ theme, isAuthScreen }) =>\n    isAuthScreen ? theme.colors.grey500.mode1 : theme.colors.black.mode1};\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n`\n\nexport const LogoContainer = styled.div`\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: 15px;\n  z-index: 10;\n  text-align: start;\n  height: 55px;\n  width: 311px;\n`\n\nexport const PearPass = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: 68px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n  height: 55px;\n`\n\nexport const PageContent = styled.div`\n  position: relative;\n  color: white;\n  width: 100%;\n  height: 100%;\n  padding-top: 42px;\n  padding: 42px 110px 0 110px;\n  display: flex;\n  flex-direction: column;\n  align-items: ${({ isAuthScreen }) =>\n    isAuthScreen ? 'center' : 'flex-start'};\n`\n\nexport const ContentWrapper = styled.div`\n  flex: 1;\n  z-index: 2;\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`\n\nexport const LeftSpotlightWrapper = styled.div`\n  display: ${({ isAuthScreen }) => (isAuthScreen ? 'none' : 'block')};\n\n  position: absolute;\n  left: -5%;\n  bottom: 0;\n\n  width: 25%;\n  height: 100%;\n  flex-shrink: 0;\n\n  border-radius: 1194.565px;\n  opacity: 0.3;\n  background: #b0d944;\n  filter: blur(250px);\n`\n\nexport const MiddleSmallSpotlightWrapper = styled.div`\n  position: absolute;\n  right: 0;\n  top: 50%;\n  transform: translateY(-50%);\n`\n\nexport const RightSpotlightWrapper = styled.div`\n  width: 40%;\n  height: 40%;\n  position: absolute;\n  right: 0;\n`\n\nexport const BottomGradient = styled.div`\n  display: ${({ isAuthScreen }) => (isAuthScreen ? 'block' : 'none')};\n\n  z-index: 1;\n  transform: translate(-50%, 95%);\n  opacity: 0.7;\n  bottom: 0;\n  left: 50%;\n  width: 85%;\n  height: 25%;\n  position: absolute;\n  border-radius: 100%;\n  background: #b0d944;\n  filter: blur(90px);\n`\n"
  },
  {
    "path": "src/components/InputFieldNote/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { CommonFileIcon, InputField } from '../../lib-react-components'\n\n/**\n * @param {{\n *  value?: string,\n *  onChange?: (e?: string) => void,\n *  icon?: import('react').FC,\n *  label?: string,\n *  error?: string,\n *  additionalItems?: import('react').ReactNode,\n *  placeholder?: string,\n *  isDisabled?: boolean,\n *  onClick?: () => void,\n *  type?: 'text' | 'password' | 'url',\n *  variant?: 'default' | 'outline',\n *  testId?: string\n * }} props\n */\n// UI displays this as \"Comment\"\nexport const InputFieldNote = (props) => {\n  const { i18n } = useLingui()\n\n  return html`<${InputField}\n    testId=${props.testId}\n    label=${i18n._('Comment')}\n    placeholder=${i18n._('Add comment')}\n    variant=\"outline\"\n    icon=${CommonFileIcon}\n    ...${props}\n  />`\n}\n"
  },
  {
    "path": "src/components/InputFieldNote/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { InputFieldNote } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (str) => str\n    }\n  }),\n  I18nProvider: ({ children }) => children\n}))\n\ndescribe('InputFieldNote', () => {\n  test('renders with default props', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputFieldNote />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders with custom value', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputFieldNote value=\"Test note\" />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n    expect(screen.getByDisplayValue('Test note')).toBeInTheDocument()\n  })\n\n  test('renders with custom icon', () => {\n    const CustomIcon = () => <div data-testid=\"custom-icon\">Custom Icon</div>\n    render(\n      <ThemeProvider>\n        <InputFieldNote icon={CustomIcon} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByTestId('custom-icon')).toBeInTheDocument()\n  })\n\n  test('renders with error message', () => {\n    render(\n      <ThemeProvider>\n        <InputFieldNote error=\"Error message\" />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByText('Error message')).toBeInTheDocument()\n  })\n\n  test('calls onChange when input changes', () => {\n    const handleChange = jest.fn()\n    render(\n      <ThemeProvider>\n        <InputFieldNote onChange={handleChange} />\n      </ThemeProvider>\n    )\n\n    const input = screen.getByPlaceholderText('Add comment')\n    fireEvent.change(input, { target: { value: 'New note' } })\n\n    expect(handleChange).toHaveBeenCalled()\n  })\n\n  test('renders with disabled state', () => {\n    render(\n      <ThemeProvider>\n        <InputFieldNote isDisabled={true} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByPlaceholderText('Add comment')).toHaveAttribute(\n      'readonly'\n    )\n  })\n\n  test('renders with custom variant', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputFieldNote variant=\"default\" />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/components/InputPearpassPassword/index.js",
    "content": "import { useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport {\n  AdditionalItems,\n  IconWrapper,\n  Input,\n  InputAreaWrapper,\n  InputWrapper,\n  MainWrapper,\n  NoticeWrapper\n} from './styles'\nimport {\n  ButtonRoundIcon,\n  EyeClosedIcon,\n  EyeIcon,\n  LockCircleIcon,\n  NoticeText\n} from '../../lib-react-components'\n\n/**\n * @param {{\n *  value: string,\n *  olaceholder?: string,\n *  onChange: (value: string) => void,\n *  isDisabled: boolean,\n *  error: string,\n * }} props\n */\nexport const InputPearpassPassword = ({\n  value,\n  placeholder,\n  onChange,\n  isDisabled,\n  error,\n  isFilled = false\n}) => {\n  const [isPasswordVisible] = useState(false)\n\n  const handleChange = (e) => {\n    if (isDisabled) {\n      return\n    }\n    onChange?.(e.target.value)\n  }\n\n  return html`\n    <${InputWrapper} isFilled=${isFilled}>\n      <${IconWrapper}> <${LockCircleIcon} size=\"24\" /> <//>\n\n      <${MainWrapper}>\n        <${InputAreaWrapper}>\n          <${Input}\n            placeholder=${placeholder}\n            value=${value}\n            onChange=${handleChange}\n            disabled=${isDisabled}\n            type=${isPasswordVisible ? 'text' : 'password'}\n          />\n        <//>\n        ${!!error?.length &&\n        html` <${NoticeWrapper}>\n          <${NoticeText} text=${error} type=\"error\" />\n        <//>`}\n      <//>\n\n      <${AdditionalItems}>\n        <${ButtonRoundIcon}\n          startIcon=${isPasswordVisible ? EyeClosedIcon : EyeIcon}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/InputPearpassPassword/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const InputWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n  position: relative;\n\n  border-radius: 10px;\n  border: 1px solid;\n  border-color: ${({ theme }) => theme.colors.grey100.mode1};\n  margin-top: 0;\n  padding: 5px 10px;\n\n  &:hover,\n  &:focus-within {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n  background: ${({ isFilled }) =>\n    isFilled\n      ? 'linear-gradient(180deg, rgba(255, 255, 255, 0.00) -8.33%, #A8E408 115.48%)'\n      : 'linear-gradient(180deg, rgba(255, 255, 255, 0) -8.33%, rgba(153, 153, 153, 0.31) 189.29%)'};\n\n  box-shadow:\n    4px 4px 12px 0px rgba(216, 216, 216, 0.49),\n    0px 0.5px 4px 0px rgba(255, 255, 255, 0.4) inset;\n  backdrop-filter: blur(7px);\n`\n\nexport const MainWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n`\n\nexport const IconWrapper = styled.div`\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  align-self: 'stretch';\n`\n\nexport const InputAreaWrapper = styled.div`\n  flex: 1;\n  position: relative;\n  overflow-x: auto;\n  white-space: nowrap;\n  display: flex;\n  align-items: center;\n`\n\nexport const Input = styled.input`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n  pointer-events: ${({ disabled }) => (disabled ? 'none' : 'auto')};\n  width: 100%;\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n  }\n`\n\nexport const NoticeWrapper = styled.div`\n  margin-top: 2px;\n`\n\nexport const AdditionalItems = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  gap: 10px;\n  align-self: center;\n`\n"
  },
  {
    "path": "src/components/InputSearch/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { Container, IconWrapper, Input, QuantityWrapper } from './styles'\nimport { LockCircleIcon } from '../../lib-react-components'\n\n/**\n * @param {{\n *  value: string\n *  onChange: (event: import('react').ChangeEvent<HTMLInputElement>) => void\n *  quantity?: number\n *  testId?: string\n * }} props\n */\nexport const InputSearch = ({ value, onChange, quantity, testId }) => {\n  const { i18n } = useLingui()\n  return html`\n    <${Container}>\n      <${IconWrapper}>\n        <${LockCircleIcon} />\n      <//>\n      <${Input}\n        data-testid=${testId}\n        placeholder=${i18n._('Search...')}\n        value=${value}\n        onChange=${onChange}\n      />\n      <${QuantityWrapper}>${value?.length ? quantity : null}<//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/InputSearch/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { InputSearch } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (str) => str\n    }\n  }),\n  I18nProvider: ({ children }) => children\n}))\n\njest.mock('../../lib-react-components', () => ({\n  LockCircleIcon: () => <div data-testid=\"lock-circle-icon\">LockCircleIcon</div>\n}))\n\ndescribe('InputSearch', () => {\n  test('renders with default props', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputSearch value=\"\" onChange={jest.fn()} />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders with custom value', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputSearch value=\"Test search\" onChange={jest.fn()} />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n    expect(screen.getByDisplayValue('Test search')).toBeInTheDocument()\n  })\n\n  test('displays quantity when value is not empty', () => {\n    render(\n      <ThemeProvider>\n        <InputSearch value=\"Test\" onChange={jest.fn()} quantity={5} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByText('5')).toBeInTheDocument()\n  })\n\n  test('does not display quantity when value is empty', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputSearch value=\"\" onChange={jest.fn()} quantity={5} />\n      </ThemeProvider>\n    )\n\n    expect(container.textContent).not.toContain('5')\n  })\n\n  test('calls onChange when input changes', () => {\n    const handleChange = jest.fn()\n    render(\n      <ThemeProvider>\n        <InputSearch value=\"\" onChange={handleChange} />\n      </ThemeProvider>\n    )\n\n    const input = screen.getByPlaceholderText('Search...')\n    fireEvent.change(input, { target: { value: 'New search' } })\n\n    expect(handleChange).toHaveBeenCalled()\n  })\n\n  test('renders lock circle icon', () => {\n    render(\n      <ThemeProvider>\n        <InputSearch value=\"\" onChange={jest.fn()} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByTestId('lock-circle-icon')).toBeInTheDocument()\n  })\n\n  test('has correct placeholder text', () => {\n    render(\n      <ThemeProvider>\n        <InputSearch value=\"\" onChange={jest.fn()} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByPlaceholderText('Search...')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/InputSearch/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  width: 100%;\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  border-radius: 15px;\n  padding: 6px 10px;\n  background: ${({ theme }) => theme.colors.black.mode1};\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n`\n\nexport const IconWrapper = styled.label`\n  display: flex;\n  flex-grow: 0;\n`\n\nexport const Input = styled.input`\n  all: unset;\n  display: flex;\n  width: 100%;\n  flex: 1;\n  color: ${({ theme }) => theme.colors.grey200.mode1};\n  align-self: stretch;\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 500;\n`\n\nexport const QuantityWrapper = styled.div`\n  flex-grow: 0;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-weight: 200;\n`\n"
  },
  {
    "path": "src/components/ListItem/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport {\n  SelectedListItemIconContainer,\n  ListItemActions,\n  ListItemContainer,\n  ListItemDate,\n  ListItemDescription,\n  ListItemInfo,\n  ListItemName\n} from './styles'\nimport {\n  BrushIcon,\n  CheckIcon,\n  DeleteIcon,\n  LockCircleIcon,\n  ShareIcon\n} from '../../lib-react-components'\n\nexport const ListItem = ({\n  itemName,\n  itemDateText,\n  onClick,\n  onShareClick,\n  onEditClick,\n  onDeleteClick,\n  isSelected,\n  testId,\n  editTestId,\n  deleteTestId\n}) => html`\n  <${ListItemContainer}\n    isSelected=${isSelected}\n    onClick=${onClick}\n    data-testid=${testId}\n  >\n    <${ListItemInfo}>\n      ${isSelected\n        ? html` <${SelectedListItemIconContainer}>\n            <${CheckIcon} size=\"24\" color=${colors.black.mode1} />\n          <//>`\n        : html`<${LockCircleIcon} size=\"24\" />`}\n\n      <${ListItemDescription}>\n        <${ListItemName}>${itemName}<//>\n        ${itemDateText && html`<${ListItemDate}> ${itemDateText}<//>`}\n      <//>\n    <//>\n\n    <${ListItemActions}>\n      ${onShareClick &&\n      html`\n        <span onClick=${onShareClick}>\n          <${ShareIcon} />\n        </span>\n      `}\n      ${onEditClick &&\n      html`<span data-testid=${editTestId} onClick=${onEditClick}>\n        <${BrushIcon}\n      /></span>`}\n      ${onDeleteClick &&\n      html`<span data-testid=${deleteTestId} onClick=${onDeleteClick}\n        ><${DeleteIcon}\n      /></span>`}\n    <//>\n  <//>\n`\n"
  },
  {
    "path": "src/components/ListItem/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ListItem } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../lib-react-components', () => ({\n  BrushIcon: () => <svg data-testid=\"brush-icon\" />,\n  DeleteIcon: () => <svg data-testid=\"delete-icon\" />,\n  LockCircleIcon: () => <svg data-testid=\"lock-icon\" />,\n  ShareIcon: () => <svg data-testid=\"share-icon\" />\n}))\n\ndescribe('Item Component', () => {\n  const dummyItem = {\n    name: 'vault-123',\n    createdAt: 'Created 13/06/2025'\n  }\n\n  test('renders Item component correctly and matches snapshot', () => {\n    const { asFragment } = render(\n      <ThemeProvider>\n        <ListItem\n          itemName={dummyItem.name}\n          itemDateText={dummyItem.createdAt}\n          onClick={() => {}}\n          onShareClick={() => {}}\n          onEditClick={() => {}}\n          onDeleteClick={() => {}}\n        />\n      </ThemeProvider>\n    )\n    expect(asFragment()).toMatchSnapshot()\n  })\n\n  test('calls onClick when Item container is clicked', () => {\n    const onClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ListItem\n          itemName={dummyItem.name}\n          itemDateText={dummyItem.createdAt}\n          onClick={onClick}\n          onShareClick={() => {}}\n          onEditClick={() => {}}\n          onDeleteClick={() => {}}\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(container.firstChild)\n    expect(onClick).toHaveBeenCalled()\n  })\n\n  test('calls onShareClick when share icon is clicked', () => {\n    const onShareClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ListItem\n          itemName={dummyItem.name}\n          itemDateText={dummyItem.createdAt}\n          onClick={() => {}}\n          onShareClick={onShareClick}\n          onEditClick={() => {}}\n          onDeleteClick={() => {}}\n        />\n      </ThemeProvider>\n    )\n    const shareIcon = container.querySelector('[data-testid=\"share-icon\"]')\n    expect(shareIcon).toBeInTheDocument()\n\n    fireEvent.click(shareIcon.parentElement)\n    expect(onShareClick).toHaveBeenCalled()\n  })\n\n  test('calls onEditClick when brush icon is clicked', () => {\n    const onEditClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ListItem\n          itemName={dummyItem.name}\n          itemDateText={dummyItem.createdAt}\n          onClick={() => {}}\n          onShareClick={() => {}}\n          onEditClick={onEditClick}\n          onDeleteClick={() => {}}\n        />\n      </ThemeProvider>\n    )\n    const brushIcon = container.querySelector('[data-testid=\"brush-icon\"]')\n    expect(brushIcon).toBeInTheDocument()\n    fireEvent.click(brushIcon.parentElement)\n    expect(onEditClick).toHaveBeenCalled()\n  })\n\n  test('matches snapshot when action icons are clicked', () => {\n    const { asFragment, container } = render(\n      <ThemeProvider>\n        <ListItem\n          itemName={dummyItem.name}\n          itemDateText={dummyItem.createdAt}\n          onClick={() => {}}\n          onShareClick={() => {}}\n          onEditClick={() => {}}\n          onDeleteClick={() => {}}\n        />\n      </ThemeProvider>\n    )\n\n    expect(asFragment()).toMatchSnapshot('initial state')\n\n    const shareIcon = container.querySelector('[data-testid=\"share-icon\"]')\n    const brushIcon = container.querySelector('[data-testid=\"brush-icon\"]')\n    const deleteIcon = container.querySelector('[data-testid=\"delete-icon\"]')\n\n    fireEvent.click(shareIcon.parentElement)\n    fireEvent.click(brushIcon.parentElement)\n    fireEvent.click(deleteIcon.parentElement)\n\n    expect(asFragment()).toMatchSnapshot('after action icons clicked')\n  })\n})\n"
  },
  {
    "path": "src/components/ListItem/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ListItemContainer = styled.div`\n  display: flex;\n  width: 100%;\n  padding: 5px 10px;\n  align-items: center;\n  justify-content: space-between;\n  border-radius: 10px;\n  background-color: ${({ isSelected }) =>\n    isSelected ? 'rgba(134, 170, 172, 0.2)' : 'transparent'};\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  cursor: pointer;\n\n  &:hover {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\nexport const ListItemInfo = styled.div`\n  display: flex;\n  gap: 10px;\n  align-items: center;\n`\n\nexport const ListItemDescription = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: flex-start;\n  gap: 4px;\n`\nexport const ListItemName = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 400;\n`\nexport const ListItemDate = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 10px;\n  font-style: normal;\n  font-weight: 300;\n`\n\nexport const ListItemActions = styled.div`\n  display: flex;\n  gap: 12px;\n  align-items: center;\n`\n\nexport const SelectedListItemIconContainer = styled.div`\n  display: flex;\n  width: 30px;\n  height: 30px;\n  padding: 5px;\n  justify-content: center;\n  align-items: center;\n  gap: 10px;\n  flex-shrink: 0;\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.primary400.mode1};\n`\n"
  },
  {
    "path": "src/components/LoadingOverlay/index.js",
    "content": "import styled from 'styled-components'\n\nexport const LoadingOverlay = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 4000;\n  cursor: wait;\n`\n"
  },
  {
    "path": "src/components/LoadingOverlay/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { LoadingOverlay } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('LoadingOverlay', () => {\n  test('renders correctly', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <LoadingOverlay data-testid=\"loading-overlay\" />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n\n  test('passes props correctly', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <LoadingOverlay\n          data-testid=\"loading-overlay\"\n          id=\"test-id\"\n          className=\"test-class\"\n        />\n      </ThemeProvider>\n    )\n\n    const overlay = getByTestId('loading-overlay')\n    expect(overlay).toHaveAttribute('id', 'test-id')\n    expect(overlay).toHaveClass('test-class')\n  })\n})\n"
  },
  {
    "path": "src/components/MenuDropdown/MenuDropdownItem/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { FolderIcon } from '../../../lib-react-components'\nimport { DropDownItem } from '../styles'\n\n/**\n * @param {{\n *    onClick: () => void,\n *    item: {name: string, icon?: import('react').ReactNode},\n *    testId?: string\n *  }} props\n */\nexport const MenuDropdownItem = ({ item, onClick, testId }) => html`\n  <${DropDownItem} onClick=${() => onClick?.()} data-testid=${testId}>\n    <${item.icon ?? FolderIcon} size=\"24\" color=${item.color ?? undefined} />\n\n    ${item.name}\n  <//>\n`\n"
  },
  {
    "path": "src/components/MenuDropdown/MenuDropdownItem/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { MenuDropdownItem } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('MenuDropdownItem', () => {\n  const mockOnClick = jest.fn()\n\n  beforeEach(() => {\n    mockOnClick.mockClear()\n  })\n\n  test('renders correctly with name', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <MenuDropdownItem item={{ name: 'Test Item' }} onClick={mockOnClick} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByText('Test Item')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('calls onClick when clicked', async () => {\n    render(\n      <ThemeProvider>\n        <MenuDropdownItem item={{ name: 'Test Item' }} onClick={mockOnClick} />\n      </ThemeProvider>\n    )\n\n    const item = screen.getByText('Test Item')\n\n    item.click()\n\n    expect(mockOnClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with custom icon when provided', () => {\n    const CustomIcon = () => <div data-testid=\"custom-icon\">Custom</div>\n\n    render(\n      <ThemeProvider>\n        <MenuDropdownItem\n          item={{ name: 'Test Item', icon: CustomIcon }}\n          onClick={mockOnClick}\n        />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByTestId('custom-icon')).toBeInTheDocument()\n  })\n\n  test('renders with default FolderIcon when no icon is provided', () => {\n    render(\n      <ThemeProvider>\n        <MenuDropdownItem item={{ name: 'Test Item' }} onClick={mockOnClick} />\n      </ThemeProvider>\n    )\n\n    expect(screen.getByText('Test Item')).toBeInTheDocument()\n  })\n\n  test('renders with custom color when provided', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <MenuDropdownItem\n          item={{ name: 'Test Item', color: 'red' }}\n          onClick={mockOnClick}\n        />\n      </ThemeProvider>\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n\n  test('does not throw when onClick is not provided', () => {\n    expect(() => {\n      render(\n        <ThemeProvider>\n          <MenuDropdownItem item={{ name: 'Test Item' }} />\n        </ThemeProvider>\n      )\n    }).not.toThrow()\n  })\n})\n"
  },
  {
    "path": "src/components/MenuDropdown/MenuDropdownLabel/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { ArrowDownIcon, ArrowUpIcon } from '../../../lib-react-components'\nimport { MenuDropdownItem } from '../MenuDropdownItem'\nimport { Label } from '../styles'\n\n/**\n * @param {{\n *    isHidden: boolean,\n *    selectedItem?: {name: string, icon?: import('react').ReactNode},\n *    isOpen: boolean,\n *    setIsOpen?: (isOpen: boolean) => void,\n *    testId?: string\n *  }} props\n */\nexport const MenuDropdownLabel = ({\n  isHidden,\n  selectedItem,\n  isOpen,\n  setIsOpen,\n  testId\n}) => {\n  const { i18n } = useLingui()\n\n  return html`\n    <${Label}\n      isHidden=${isHidden}\n      onClick=${() => setIsOpen?.(!isOpen)}\n      data-testid=${testId}\n    >\n      <${isOpen ? ArrowUpIcon : ArrowDownIcon} size=\"24\" />\n\n      ${selectedItem?.name\n        ? html`\n            <${MenuDropdownItem}\n              testId=${`menudropdown-item-${selectedItem.name}`}\n              item=${selectedItem}\n            />\n          `\n        : i18n._('No folder')}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/MenuDropdown/MenuDropdownLabel/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { MenuDropdownLabel } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../../lib-react-components', () => ({\n  ArrowDownIcon: () => <div data-testid=\"arrow-down-icon\" />,\n  ArrowUpIcon: () => <div data-testid=\"arrow-up-icon\" />\n}))\n\njest.mock('../MenuDropdownItem', () => ({\n  MenuDropdownItem: ({ item }) => (\n    <div data-testid=\"menu-dropdown-item\">{item.name}</div>\n  )\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: { _: (str) => str }\n  })\n}))\n\ndescribe('MenuDropdownLabel', () => {\n  const mockSetIsOpen = jest.fn()\n\n  beforeEach(() => {\n    mockSetIsOpen.mockClear()\n  })\n\n  const renderComponent = (props) =>\n    render(\n      <ThemeProvider>\n        <MenuDropdownLabel\n          isHidden={false}\n          isOpen={false}\n          setIsOpen={mockSetIsOpen}\n          {...props}\n        />\n      </ThemeProvider>\n    )\n\n  test('renders ArrowDownIcon when closed', () => {\n    const { container } = renderComponent({ isOpen: false })\n    expect(screen.getByTestId('arrow-down-icon')).toBeInTheDocument()\n    expect(screen.queryByTestId('arrow-up-icon')).not.toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders ArrowUpIcon when open', () => {\n    renderComponent({ isOpen: true })\n    expect(screen.getByTestId('arrow-up-icon')).toBeInTheDocument()\n    expect(screen.queryByTestId('arrow-down-icon')).not.toBeInTheDocument()\n  })\n\n  test('renders \"No folder\" when no selectedItem is provided', () => {\n    renderComponent()\n    expect(screen.getByText('No folder')).toBeInTheDocument()\n  })\n\n  test('renders MenuDropdownItem when selectedItem is provided', () => {\n    const selectedItem = { name: 'Test Folder' }\n    renderComponent({ selectedItem })\n    expect(screen.getByTestId('menu-dropdown-item')).toBeInTheDocument()\n    expect(screen.getByText('Test Folder')).toBeInTheDocument()\n  })\n\n  test('calls setIsOpen when clicked', () => {\n    renderComponent({ isOpen: false })\n    screen.getByText('No folder').click()\n    expect(mockSetIsOpen).toHaveBeenCalledWith(true)\n  })\n\n  test('toggles isOpen value when clicked', () => {\n    renderComponent({ isOpen: true })\n    screen.getByText('No folder').click()\n    expect(mockSetIsOpen).toHaveBeenCalledWith(false)\n  })\n\n  test('does not call setIsOpen when it is not provided', () => {\n    renderComponent({ setIsOpen: undefined })\n    expect(() => {\n      screen.getByText('No folder').click()\n    }).not.toThrow()\n  })\n})\n"
  },
  {
    "path": "src/components/MenuDropdown/index.js",
    "content": "import React, { useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { MenuDropdownItem } from './MenuDropdownItem'\nimport { MenuDropdownLabel } from './MenuDropdownLabel'\nimport { DropDown, MainWrapper, Wrapper } from './styles'\nimport { useOutsideClick } from '../../hooks/useOutsideClick'\n\n/**\n * @param {{\n *    selectedItem?: {name: string, icon?: import('react').ReactNode},\n *    onItemSelect: (item: {name: string, icon?: import('react').ReactNode}) => void,\n *    items: Array<{name: string, icon?: import('react').ReactNode}>,\n *    bottomComponent?: import('react').ReactNode,\n *    testId?: string\n *  }} props\n */\nexport const MenuDropdown = ({\n  selectedItem,\n  onItemSelect,\n  items,\n  bottomComponent,\n  testId\n}) => {\n  const [isOpen, setIsOpen] = useState(false)\n\n  const currentItems = React.useMemo(\n    () => items.filter((item) => item?.name !== selectedItem?.name),\n    [items, selectedItem]\n  )\n\n  const wrapperRef = useOutsideClick({\n    onOutsideClick: () => {\n      setIsOpen(false)\n    }\n  })\n\n  const handleFolderSelect = (item) => {\n    onItemSelect(item)\n\n    setIsOpen(false)\n  }\n\n  return html`\n    <${MainWrapper} data-testid=${testId} ref=${wrapperRef}>\n      <${MenuDropdownLabel}\n        isHidden\n        selectedItem=${selectedItem}\n        isOpen=${isOpen}\n        testId=\"menudropdown-defaultlabel-hidden\"\n      />\n\n      <${Wrapper} isOpen=${isOpen}>\n        <${MenuDropdownLabel}\n          selectedItem=${selectedItem}\n          isOpen=${isOpen}\n          setIsOpen=${setIsOpen}\n          testId=${`menudropdown-defaultlabel-${selectedItem?.name || 'No folder'}`}\n        />\n\n        ${isOpen &&\n        html`<${DropDown}>\n          ${currentItems.map(\n            (item) => html`\n              <${MenuDropdownItem}\n                key=${item.name}\n                testId=${`menudropdown-item-${item.name}`}\n                item=${item}\n                onClick=${() => handleFolderSelect(item)}\n              />\n            `\n          )}\n          ${bottomComponent && bottomComponent}\n        <//>`}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/MenuDropdown/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { MenuDropdown } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('./MenuDropdownItem', () => ({\n  MenuDropdownItem: ({ item, onClick }) => (\n    <div data-testid=\"menu-dropdown-item\" onClick={onClick}>\n      {item.name}\n    </div>\n  )\n}))\n\njest.mock('./MenuDropdownLabel', () => ({\n  MenuDropdownLabel: ({ selectedItem, isOpen, setIsOpen }) => (\n    <div\n      data-testid=\"menu-dropdown-label\"\n      onClick={() => setIsOpen && setIsOpen(!isOpen)}\n    >\n      {selectedItem ? selectedItem.name : 'No selected item'}\n      {isOpen ? 'Open' : 'Closed'}\n    </div>\n  )\n}))\n\njest.mock('../../hooks/useOutsideClick', () => ({\n  useOutsideClick: jest.fn()\n}))\n\ndescribe('MenuDropdown', () => {\n  const mockOnItemSelect = jest.fn()\n  const mockItems = [{ name: 'Item 1' }, { name: 'Item 2' }, { name: 'Item 3' }]\n\n  beforeEach(() => {\n    mockOnItemSelect.mockClear()\n  })\n\n  const renderComponent = (props = {}) =>\n    render(\n      <ThemeProvider>\n        <MenuDropdown\n          items={mockItems}\n          onItemSelect={mockOnItemSelect}\n          {...props}\n        />\n      </ThemeProvider>\n    )\n\n  test('renders both dropdown labels', () => {\n    const { container } = renderComponent()\n    const labels = screen.getAllByTestId('menu-dropdown-label')\n    expect(labels).toHaveLength(2)\n    expect(container).toMatchSnapshot()\n  })\n\n  test('does not show dropdown items when closed', () => {\n    renderComponent()\n    expect(screen.queryAllByTestId('menu-dropdown-item')).toHaveLength(0)\n  })\n\n  test('shows dropdown items when open', () => {\n    renderComponent()\n\n    const visibleLabel = screen.getAllByTestId('menu-dropdown-label')[1]\n    fireEvent.click(visibleLabel)\n\n    expect(screen.getAllByTestId('menu-dropdown-item')).toHaveLength(3)\n  })\n\n  test('filters out selected item from dropdown options', () => {\n    const selectedItem = mockItems[0]\n    renderComponent({ selectedItem })\n\n    const visibleLabel = screen.getAllByTestId('menu-dropdown-label')[1]\n    fireEvent.click(visibleLabel)\n\n    const shownItems = screen.getAllByTestId('menu-dropdown-item')\n    expect(shownItems).toHaveLength(2)\n    expect(shownItems[0]).toHaveTextContent('Item 2')\n    expect(shownItems[1]).toHaveTextContent('Item 3')\n  })\n\n  test('calls onItemSelect when an item is clicked', () => {\n    renderComponent()\n\n    const visibleLabel = screen.getAllByTestId('menu-dropdown-label')[1]\n    fireEvent.click(visibleLabel)\n\n    const items = screen.getAllByTestId('menu-dropdown-item')\n    fireEvent.click(items[1])\n\n    expect(mockOnItemSelect).toHaveBeenCalledWith(mockItems[1])\n  })\n\n  test('closes dropdown after item selection', () => {\n    renderComponent()\n\n    const visibleLabel = screen.getAllByTestId('menu-dropdown-label')[1]\n    fireEvent.click(visibleLabel)\n\n    const items = screen.getAllByTestId('menu-dropdown-item')\n    fireEvent.click(items[0])\n\n    expect(screen.queryAllByTestId('menu-dropdown-item')).toHaveLength(0)\n  })\n\n  test('renders bottomComponent when provided', () => {\n    const bottom = <div data-testid=\"bottom-component\">Bottom</div>\n\n    renderComponent({ bottomComponent: bottom })\n\n    const visibleLabel = screen.getAllByTestId('menu-dropdown-label')[1]\n    fireEvent.click(visibleLabel)\n\n    expect(screen.getByTestId('bottom-component')).toBeInTheDocument()\n    expect(screen.getByTestId('bottom-component')).toHaveTextContent('Bottom')\n  })\n})\n"
  },
  {
    "path": "src/components/MenuDropdown/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nexport const Label = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isHidden'].includes(prop)\n})`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  cursor: pointer;\n  white-space: nowrap;\n\n  ${({ isHidden }) => {\n    if (isHidden) {\n      return css`\n        opacity: 0;\n        pointer-events: none;\n        padding: 4px 10px;\n      `\n    }\n  }}\n`\n\nexport const MainWrapper = styled.div`\n  position: relative;\n`\n\nexport const Wrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isOpen'].includes(prop)\n})`\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border: 1px solid\n    ${({ theme, isOpen }) =>\n      isOpen ? theme.colors.primary400.mode1 : theme.colors.grey100.mode1};\n  padding: 4px 10px;\n  top: 0;\n  left: 0;\n  position: absolute;\n  z-index: ${({ isOpen }) => (isOpen ? 6 : 5)};\n\n  &:hover {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n\n    & ${Label} path {\n      stroke: ${({ theme }) => theme.colors.primary400.mode1};\n    }\n  }\n`\n\nexport const DropDown = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  padding: 4px 5px 0 30px;\n`\n\nexport const DropDownItem = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  white-space: nowrap;\n  cursor: pointer;\n`\n\nexport const FolderIconWrapper = styled.div`\n  flex-shrink: 0;\n`\n"
  },
  {
    "path": "src/components/NoticeContainer/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Container } from './styles'\nimport { YellowErrorIcon } from '../../lib-react-components'\n\nexport const NoticeContainer = ({ text }) => html`\n  <${Container}>\n    <${YellowErrorIcon} size=\"19\" />\n    ${text}\n  <//>\n`\n"
  },
  {
    "path": "src/components/NoticeContainer/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  display: inline-flex;\n  justify-content: center;\n  padding: 10px;\n  align-items: center;\n  gap: 8px;\n\n  border-radius: 10px;\n  border: 1px solid #bd8610;\n  background: linear-gradient(\n    0deg,\n    #bd8610 -14.1%,\n    rgba(70, 70, 70, 0.05) 125.68%\n  );\n  box-shadow:\n    4px 4px 12px 0px rgba(216, 216, 216, 0.5),\n    0px 0.5px 4px 0px rgba(255, 255, 255, 0.25) inset;\n  backdrop-filter: blur(7px);\n\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/components/OnboardingShell/index.tsx",
    "content": "import React from 'react'\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { BackgroundWithGradient } from '../BackgroundWithGradient'\n\nimport {\n  ContentWrapper,\n  Panel,\n  ShellViewport,\n  SolidBackground,\n  Stage\n} from './styles'\n\ninterface OnboardingShellProps {\n  background: 'gradient' | 'solid'\n  children: React.ReactNode\n}\n\nexport const OnboardingShell = ({\n  background,\n  children\n}: OnboardingShellProps): React.ReactElement => {\n  const { theme } = useTheme()\n\n  const content = (\n    <Stage>\n      <Panel $isSolid={background === 'solid'}>\n        <ContentWrapper>{children}</ContentWrapper>\n      </Panel>\n    </Stage>\n  )\n\n  if (background === 'gradient') {\n    return (\n      <ShellViewport>\n        <BackgroundWithGradient>{content}</BackgroundWithGradient>\n      </ShellViewport>\n    )\n  }\n\n  return (\n    <ShellViewport>\n      <SolidBackground $backgroundColor={theme.colors.colorSurfacePrimary}>\n        {content}\n      </SolidBackground>\n    </ShellViewport>\n  )\n}\n"
  },
  {
    "path": "src/components/OnboardingShell/styles.ts",
    "content": "import styled from 'styled-components'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\ninterface SolidBackgroundProps {\n  $backgroundColor: string\n}\n\nexport const ShellViewport = styled.div`\n  display: flex;\n  width: 100%;\n  height: 100%;\n  min-height: 100%;\n  box-sizing: border-box;\n  overflow: hidden;\n\n  & > * {\n    flex: 1 1 auto;\n    min-height: 0;\n  }\n`\n\nexport const SolidBackground = styled.div<SolidBackgroundProps>`\n  width: 100%;\n  height: 100%;\n  background-color: ${({ $backgroundColor }) => $backgroundColor};\n`\n\nexport const Stage = styled.div`\n  width: 100%;\n  height: 100%;\n`\n\nexport const Panel = styled.div<{ $isSolid?: boolean }>`\n  position: relative;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  background: transparent;\n  box-shadow: ${({ $isSolid }) =>\n    $isSolid\n      ? 'none'\n      : `inset 0 1px 0 rgba(255, 255, 255, 0.03),\n    0 20px 60px rgba(0, 0, 0, 0.28)`};\n\n  &::after {\n    content: '';\n    display: ${({ $isSolid }) => ($isSolid ? 'none' : 'block')};\n    position: absolute;\n    inset: 0;\n    pointer-events: none;\n    background: linear-gradient(\n      180deg,\n      rgba(255, 255, 255, 0.03) 0%,\n      rgba(255, 255, 255, 0) 18%\n    );\n  }\n`\n\nexport const ContentWrapper = styled.div`\n  position: relative;\n  display: flex;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n  padding: 27px 32px;\n  text-align: center;\n\n  @media (max-height: 820px) {\n    padding: 27px ${rawTokens.spacing24}px;\n  }\n\n  @media (max-width: 1100px) {\n    padding: 27px ${rawTokens.spacing24}px;\n  }\n`\n\nexport const SharedVideo = styled.video`\n  width: 282px;\n  height: 282px;\n  flex: 0 0 auto;\n  object-fit: contain;\n  z-index: 10;\n  mix-blend-mode: screen;\n  background: transparent;\n  isolation: isolate;\n  filter: saturate(1.05) brightness(1.02);\n`\n"
  },
  {
    "path": "src/components/OtpCodeField/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { OtpCodeField } from './index'\n\nconst mockGenerateNext = jest.fn()\nconst mockUseOtp = jest.fn()\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useOtp: (...args) => mockUseOtp(...args),\n  formatOtpCode: (code) => {\n    if (!code) return ''\n    const mid = Math.ceil(code.length / 2)\n    return code.slice(0, mid) + ' ' + code.slice(mid)\n  },\n  OTP_TYPE: { TOTP: 'TOTP', HOTP: 'HOTP' }\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (msg) => msg\n    }\n  })\n}))\n\njest.mock('../CopyButton', () => ({\n  CopyButton: ({ value, testId }) => (\n    <button data-testid={testId}>Copy {value}</button>\n  )\n}))\n\njest.mock('../../lib-react-components', () => ({\n  InputField: ({\n    label,\n    value,\n    additionalItems,\n    belowInputContent,\n    testId\n  }) => (\n    <div data-testid={testId}>\n      <span data-testid=\"otp-label\">{label}</span>\n      <span data-testid=\"otp-value\">{value}</span>\n      <div data-testid=\"otp-additional\">{additionalItems}</div>\n      {belowInputContent && (\n        <div data-testid=\"otp-below-input\">{belowInputContent}</div>\n      )}\n    </div>\n  ),\n  LockIcon: () => <span>LockIcon</span>\n}))\n\njest.mock('../TimerBar', () => ({\n  TimerBar: ({ timeRemaining }) => (\n    <div data-testid=\"otp-progress-bar\">{timeRemaining}s</div>\n  )\n}))\n\nconst useOtp = mockUseOtp\n\ndescribe('OtpCodeField', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders TOTP code with progress bar', () => {\n    useOtp.mockReturnValue({\n      code: '123456',\n      timeRemaining: 20,\n      type: 'TOTP',\n      period: 30,\n      generateNext: null,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeField\n        recordId=\"rec-1\"\n        otpPublic={{\n          type: 'TOTP',\n          digits: 6,\n          period: 30,\n          currentCode: '123456',\n          timeRemaining: 20\n        }}\n      />\n    )\n\n    expect(screen.getByTestId('otp-label')).toHaveTextContent(\n      'Authenticator Token'\n    )\n    expect(screen.getByTestId('otp-value')).toHaveTextContent('123 456')\n    expect(screen.getByTestId('otp-progress-bar')).toHaveTextContent('20s')\n    expect(screen.getByTestId('otp-copy-button')).toBeInTheDocument()\n  })\n\n  test('renders HOTP code with Next Code button', () => {\n    useOtp.mockReturnValue({\n      code: '111222',\n      timeRemaining: null,\n      type: 'HOTP',\n      period: null,\n      generateNext: mockGenerateNext,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeField\n        recordId=\"rec-1\"\n        otpPublic={{\n          type: 'HOTP',\n          digits: 6,\n          currentCode: '111222'\n        }}\n      />\n    )\n\n    expect(screen.getByTestId('otp-value')).toHaveTextContent('111 222')\n    expect(screen.getByTestId('otp-next-code-button')).toHaveTextContent(\n      'Next Code'\n    )\n    expect(screen.queryByTestId('otp-progress-bar')).not.toBeInTheDocument()\n  })\n\n  test('HOTP Next Code button calls generateNext', () => {\n    useOtp.mockReturnValue({\n      code: '111222',\n      timeRemaining: null,\n      type: 'HOTP',\n      period: null,\n      generateNext: mockGenerateNext,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeField\n        recordId=\"rec-1\"\n        otpPublic={{\n          type: 'HOTP',\n          digits: 6,\n          currentCode: '111222'\n        }}\n      />\n    )\n\n    fireEvent.click(screen.getByTestId('otp-next-code-button'))\n    expect(mockGenerateNext).toHaveBeenCalledTimes(1)\n  })\n\n  test('formats codes with odd digit count correctly', () => {\n    useOtp.mockReturnValue({\n      code: '1234567',\n      timeRemaining: 20,\n      type: 'TOTP',\n      period: 30,\n      generateNext: null,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeField\n        recordId=\"rec-1\"\n        otpPublic={{\n          type: 'TOTP',\n          digits: 7,\n          period: 30,\n          currentCode: '1234567',\n          timeRemaining: 20\n        }}\n      />\n    )\n\n    // 7 digits: mid = 4, so \"1234 567\"\n    expect(screen.getByTestId('otp-value')).toHaveTextContent('1234 567')\n  })\n})\n"
  },
  {
    "path": "src/components/OtpCodeField/index.ts",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\nimport { useOtp, formatOtpCode, OTP_TYPE } from '@tetherto/pearpass-lib-vault'\n\nimport { InputField, LockIcon } from '../../lib-react-components'\nimport { CopyButton } from '../CopyButton'\nimport { TimerBar } from '../TimerBar'\nimport type { OtpPublic } from '@tetherto/pearpass-lib-vault/src/types'\n\ninterface OtpCodeFieldProps {\n  recordId: string\n  otpPublic: OtpPublic\n  testId?: string\n}\n\nexport const OtpCodeField = ({ recordId, otpPublic, testId }: OtpCodeFieldProps) => {\n  const { i18n } = useLingui()\n  const { code, timeRemaining, type, period, generateNext, isLoading } = useOtp(\n    {\n      recordId,\n      otpPublic\n    }\n  )\n\n  const formattedCode = formatOtpCode(code)\n  const isTOTP = type === OTP_TYPE.TOTP\n  const hasTimeData = isTOTP && timeRemaining !== null\n\n  const timerBar = isTOTP\n    ? html`\n        <div style=${{ visibility: hasTimeData ? 'visible' : 'hidden', width: '100%' }}>\n          <${TimerBar} timeRemaining=${timeRemaining} period=${period} />\n        </div>\n      `\n    : null\n\n  return html`\n    <${InputField}\n      testId=${testId || 'otp-code-field'}\n      label=${i18n._('Authenticator Token')}\n      value=${formattedCode}\n      variant=\"outline\"\n      icon=${LockIcon}\n      isDisabled\n      belowInputContent=${timerBar}\n      additionalItems=${html`\n        ${type === OTP_TYPE.HOTP &&\n        generateNext &&\n        html`\n          <button\n            onClick=${generateNext}\n            disabled=${isLoading}\n            data-testid=\"otp-next-code-button\"\n            className=\"inline-flex items-center gap-1 rounded-md border border-grey100-mode1 bg-transparent px-2 py-1 text-xs font-medium text-white-mode1 outline-none hover:border-primary400-mode1 disabled:cursor-not-allowed disabled:opacity-50\"\n          >\n            ${i18n._('Next Code')}\n          </button>\n        `}\n        <${CopyButton} value=${code} testId=\"otp-copy-button\" />\n      `}\n    />\n  `\n}\n"
  },
  {
    "path": "src/components/OtpCodeField/utils.ts",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nexport const getTimerColor = (expiring: boolean): string =>\n  expiring ? colors.errorRed.mode1 : colors.primary400.mode1\n"
  },
  {
    "path": "src/components/OtpCodeFieldV2/index.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\nconst mockGenerateNext = jest.fn()\nconst mockUseOtp = jest.fn()\nconst mockCopyToClipboard = jest.fn()\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useOtp: (...args: unknown[]) => mockUseOtp(...args),\n  formatOtpCode: (code: string | null) => {\n    if (!code) return ''\n    const mid = Math.ceil(code.length / 2)\n    return code.slice(0, mid) + ' ' + code.slice(mid)\n  },\n  OTP_TYPE: { TOTP: 'TOTP', HOTP: 'HOTP' },\n  useTimerAnimation: (timeRemaining: number | null, period: number) => ({\n    noTransition: false,\n    expiring: timeRemaining !== null && timeRemaining <= 5,\n    targetTime: timeRemaining ?? period\n  })\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: { _: (msg: string) => msg }\n  })\n}))\n\njest.mock('../../hooks/useCopyToClipboard.electron', () => ({\n  useCopyToClipboard: () => ({\n    copyToClipboard: mockCopyToClipboard\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  Button: ({\n    children,\n    onClick,\n    disabled,\n    'data-testid': testId,\n    'aria-label': ariaLabel,\n    iconBefore\n  }: {\n    children?: React.ReactNode\n    onClick?: () => void\n    disabled?: boolean\n    'data-testid'?: string\n    'aria-label'?: string\n    iconBefore?: React.ReactNode\n  }) => (\n    <button\n      type=\"button\"\n      data-testid={testId}\n      aria-label={ariaLabel}\n      disabled={disabled}\n      onClick={onClick}\n    >\n      {iconBefore}\n      {children}\n    </button>\n  ),\n  Text: ({\n    children,\n    color\n  }: {\n    children?: React.ReactNode\n    color?: string\n  }) => <span data-color={color}>{children}</span>,\n  useTheme: () => ({\n    theme: {\n      colors: {\n        colorTextPrimary: '#fff',\n        colorTextSecondary: '#aaa',\n        colorTextDestructive: '#f00',\n        colorPrimary: '#0f0',\n        colorBorderPrimary: '#333',\n        colorSurfacePrimary: '#000'\n      }\n    }\n  }),\n  rawTokens: {\n    spacing2: 2,\n    spacing8: 8,\n    spacing12: 12,\n    radius8: 8\n  }\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  ContentCopy: () => <span data-testid=\"content-copy-icon\" />\n}))\n\nimport { OtpCodeFieldV2 } from './index'\n\nconst useOtp = mockUseOtp\n\ndescribe('OtpCodeFieldV2', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders TOTP code with timer and copy button', () => {\n    useOtp.mockReturnValue({\n      code: '123456',\n      timeRemaining: 20,\n      type: 'TOTP',\n      period: 30,\n      generateNext: null,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeFieldV2\n        recordId=\"rec-1\"\n        otpPublic={\n          {\n            type: 'TOTP',\n            digits: 6,\n            period: 30,\n            currentCode: '123456',\n            timeRemaining: 20\n          } as Parameters<typeof OtpCodeFieldV2>[0]['otpPublic']\n        }\n      />\n    )\n\n    expect(screen.getByText('Authenticator Token')).toBeInTheDocument()\n    expect(screen.getByText('123 456')).toBeInTheDocument()\n    expect(screen.getByText('20s')).toBeInTheDocument()\n    expect(screen.getByTestId('otp-code-field-v2-copy')).toBeInTheDocument()\n    expect(\n      screen.queryByTestId('otp-code-field-v2-next-code')\n    ).not.toBeInTheDocument()\n  })\n\n  test('copy button calls copyToClipboard with the code', () => {\n    useOtp.mockReturnValue({\n      code: '123456',\n      timeRemaining: 20,\n      type: 'TOTP',\n      period: 30,\n      generateNext: null,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeFieldV2\n        recordId=\"rec-1\"\n        otpPublic={\n          {\n            type: 'TOTP',\n            digits: 6,\n            period: 30,\n            currentCode: '123456',\n            timeRemaining: 20\n          } as Parameters<typeof OtpCodeFieldV2>[0]['otpPublic']\n        }\n      />\n    )\n\n    fireEvent.click(screen.getByTestId('otp-code-field-v2-copy'))\n    expect(mockCopyToClipboard).toHaveBeenCalledWith('123456')\n  })\n\n  test('renders HOTP code with Next Code button (no timer)', () => {\n    useOtp.mockReturnValue({\n      code: '111222',\n      timeRemaining: null,\n      type: 'HOTP',\n      period: null,\n      generateNext: mockGenerateNext,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeFieldV2\n        recordId=\"rec-1\"\n        otpPublic={\n          {\n            type: 'HOTP',\n            digits: 6,\n            currentCode: '111222'\n          } as Parameters<typeof OtpCodeFieldV2>[0]['otpPublic']\n        }\n      />\n    )\n\n    expect(screen.getByText('111 222')).toBeInTheDocument()\n    expect(\n      screen.getByTestId('otp-code-field-v2-next-code').textContent\n    ).toContain('Next Code')\n    expect(screen.queryByText(/s$/)).not.toBeInTheDocument()\n  })\n\n  test('HOTP Next Code button calls generateNext', () => {\n    useOtp.mockReturnValue({\n      code: '111222',\n      timeRemaining: null,\n      type: 'HOTP',\n      period: null,\n      generateNext: mockGenerateNext,\n      isLoading: false\n    })\n\n    render(\n      <OtpCodeFieldV2\n        recordId=\"rec-1\"\n        otpPublic={\n          {\n            type: 'HOTP',\n            digits: 6,\n            currentCode: '111222'\n          } as Parameters<typeof OtpCodeFieldV2>[0]['otpPublic']\n        }\n      />\n    )\n\n    fireEvent.click(screen.getByTestId('otp-code-field-v2-next-code'))\n    expect(mockGenerateNext).toHaveBeenCalledTimes(1)\n  })\n})\n"
  },
  {
    "path": "src/components/OtpCodeFieldV2/index.tsx",
    "content": "import React from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { Button, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { ContentCopy } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport {\n  OTP_TYPE,\n  formatOtpCode,\n  useOtp,\n  useTimerAnimation\n} from '@tetherto/pearpass-lib-vault'\n\nimport type { OtpPublic } from '@tetherto/pearpass-lib-vault/src/types'\n\nimport { useCopyToClipboard } from '../../hooks/useCopyToClipboard.electron'\nimport { createStyles } from './styles'\n\nconst TIMER_ANIMATION_DURATION = 1000\n\ninterface OtpCodeFieldV2Props {\n  recordId: string\n  otpPublic: OtpPublic\n  isGrouped?: boolean\n  testID?: string\n}\n\nexport const OtpCodeFieldV2 = ({\n  recordId,\n  otpPublic,\n  isGrouped = false,\n  testID\n}: OtpCodeFieldV2Props) => {\n  const { i18n } = useLingui()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const { code, timeRemaining, type, period, generateNext, isLoading } = useOtp(\n    {\n      recordId,\n      otpPublic\n    }\n  )\n\n  const formattedCode = formatOtpCode(code)\n  const isTOTP = type === OTP_TYPE.TOTP\n  const isHOTP = type === OTP_TYPE.HOTP\n\n  const { noTransition, expiring, targetTime } = useTimerAnimation(\n    timeRemaining,\n    period ?? 30\n  )\n\n  const progress =\n    timeRemaining !== null && period ? (targetTime / period) * 100 : 0\n\n  const timerColor = expiring\n    ? theme.colors.colorTextDestructive\n    : theme.colors.colorPrimary\n\n  const cardStyle = isGrouped ? styles.cardGrouped : styles.card\n\n  return (\n    <div style={cardStyle} data-testid={testID || 'otp-code-field-v2'}>\n      <div style={styles.topRow}>\n        <div style={styles.innerColumn}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {i18n._('Authenticator Token')}\n          </Text>\n          <Text variant=\"labelEmphasized\">{formattedCode || ''}</Text>\n        </div>\n        <Button\n          variant=\"tertiary\"\n          size=\"small\"\n          data-testid=\"otp-code-field-v2-copy\"\n          aria-label={i18n._('Copy code')}\n          iconBefore={<ContentCopy color={theme.colors.colorTextPrimary} />}\n          onClick={() => code && copyToClipboard(code)}\n        />\n      </div>\n\n      {isTOTP && (\n        <div style={styles.timerRow}>\n          <div style={styles.timerTrack}>\n            <div\n              style={{\n                ...styles.timerFill,\n                background: timerColor,\n                width: `${progress}%`,\n                transition: noTransition\n                  ? 'none'\n                  : `width ${TIMER_ANIMATION_DURATION}ms linear`\n              }}\n            />\n          </div>\n          <div style={styles.timerLabel}>\n            <Text variant=\"caption\" color={timerColor}>\n              {timeRemaining !== null ? `${timeRemaining}s` : ''}\n            </Text>\n          </div>\n        </div>\n      )}\n\n      {isHOTP && generateNext && (\n        <Button\n          variant=\"secondary\"\n          size=\"small\"\n          fullWidth\n          disabled={isLoading}\n          data-testid=\"otp-code-field-v2-next-code\"\n          onClick={generateNext}\n        >\n          {i18n._('Next Code')}\n        </Button>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/components/OtpCodeFieldV2/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  card: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    padding: `${rawTokens.spacing12}px`,\n    borderWidth: '1px',\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    borderRadius: `${rawTokens.radius8}px`,\n    backgroundColor: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const\n  },\n  cardGrouped: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    padding: `${rawTokens.spacing12}px`,\n    backgroundColor: 'transparent',\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    boxSizing: 'border-box' as const\n  },\n  topRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing8}px`\n  },\n  innerColumn: {\n    flex: 1,\n    minWidth: 0,\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing2}px`\n  },\n  timerRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing8}px`\n  },\n  timerTrack: {\n    flex: 1,\n    height: 6,\n    borderRadius: `${rawTokens.radius8}px`,\n    backgroundColor: colors.colorBorderPrimary,\n    overflow: 'hidden' as const\n  },\n  timerFill: {\n    height: '100%',\n    borderRadius: `${rawTokens.radius8}px`\n  },\n  timerLabel: {\n    minWidth: 28,\n    textAlign: 'right' as const\n  }\n})\n"
  },
  {
    "path": "src/components/Overlay/index.js",
    "content": "import { useRef } from 'react'\n\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\n\nimport { OverlayComponent } from './styles'\nimport { BASE_TRANSITION_DURATION } from '../../constants/transitions'\nimport { useAnimatedVisibility } from '../../hooks/useAnimatedVisibility'\n\n/**\n * @param {{\n *  isOpen: boolean\n *  onClick: () => void\n *  type: 'default' | 'blur'\n * }} props\n */\nexport const Overlay = ({ isOpen, onClick, type = 'default' }) => {\n  const { theme } = useTheme()\n  const nodeRef = useRef(null)\n  const { isShown, isRendered } = useAnimatedVisibility({\n    isOpen: isOpen,\n    transitionDuration: BASE_TRANSITION_DURATION,\n    nodeRef,\n    propertyName: 'opacity'\n  })\n\n  if (!isRendered) {\n    return null\n  }\n\n  return html`\n    <${OverlayComponent}\n      ref=${nodeRef}\n      type=${type}\n      isShown=${isShown}\n      scrim=${theme.colors.colorScrim}\n      onClick=${() => onClick?.()}\n    />\n  `\n}\n"
  },
  {
    "path": "src/components/Overlay/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { Overlay } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../hooks/useAnimatedVisibility', () => ({\n  useAnimatedVisibility: jest.fn().mockImplementation(({ isOpen }) => ({\n    isShown: isOpen,\n    isRendered: isOpen\n  }))\n}))\n\ndescribe('Overlay', () => {\n  const mockOnClick = jest.fn()\n\n  beforeEach(() => {\n    mockOnClick.mockClear()\n    jest.clearAllMocks()\n  })\n\n  const renderComponent = (props = {}) =>\n    render(\n      <ThemeProvider>\n        <Overlay isOpen={false} onClick={mockOnClick} {...props} />\n      </ThemeProvider>\n    )\n\n  test('does not render when isRendered is false', () => {\n    require('../../hooks/useAnimatedVisibility').useAnimatedVisibility.mockReturnValue(\n      {\n        isShown: false,\n        isRendered: false\n      }\n    )\n\n    const { container } = renderComponent()\n    expect(container).toBeEmptyDOMElement()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders when isRendered is true', async () => {\n    require('../../hooks/useAnimatedVisibility').useAnimatedVisibility.mockReturnValue(\n      {\n        isShown: true,\n        isRendered: true\n      }\n    )\n\n    const { container } = renderComponent({ isOpen: true })\n\n    expect(container.querySelector('div[type=\"default\"]')).toBeInTheDocument()\n  })\n\n  test('calls onClick when clicked', () => {\n    require('../../hooks/useAnimatedVisibility').useAnimatedVisibility.mockReturnValue(\n      {\n        isShown: true,\n        isRendered: true\n      }\n    )\n\n    const { container } = renderComponent({ isOpen: true })\n    fireEvent.click(container.querySelector('div[type=\"default\"]'))\n    expect(mockOnClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('passes type prop to OverlayComponent', () => {\n    require('../../hooks/useAnimatedVisibility').useAnimatedVisibility.mockReturnValue(\n      {\n        isShown: true,\n        isRendered: true\n      }\n    )\n\n    const { container } = renderComponent({ isOpen: true, type: 'blur' })\n    expect(container.querySelector('div[type=\"blur\"]')).toBeInTheDocument()\n  })\n\n  test('uses default type when not provided', () => {\n    require('../../hooks/useAnimatedVisibility').useAnimatedVisibility.mockReturnValue(\n      {\n        isShown: true,\n        isRendered: true\n      }\n    )\n\n    const { container } = renderComponent({ isOpen: true })\n    expect(container.querySelector('div[type=\"default\"]')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/Overlay/styles.js",
    "content": "import styled from 'styled-components'\n\nimport { BASE_TRANSITION_DURATION } from '../../constants/transitions'\n\nconst SCRIM_BLUR = 'rgba(0, 0, 0, 0.5)'\n\nexport const OverlayComponent = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isShown', 'scrim'].includes(prop)\n})`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  opacity: ${({ isShown }) => (isShown ? 1 : 0)};\n  transition: opacity ${BASE_TRANSITION_DURATION}ms ease-in-out;\n  background: ${({ type, scrim }) => {\n    if (type === 'default') {\n      return scrim\n    }\n\n    if (type === 'blur') {\n      return SCRIM_BLUR\n    }\n  }};\n  backdrop-filter: ${({ type }) => {\n    if (type === 'default') {\n      return 'none'\n    }\n\n    if (type === 'blur') {\n      return 'blur(10px)'\n    }\n  }};\n`\n"
  },
  {
    "path": "src/components/PasswordFieldStrengthIndicator/index.test.tsx",
    "content": "import React from 'react'\nimport { render, fireEvent } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { PasswordFieldStrengthIndicator } from './index'\nimport { PassType } from '../../shared/types'\n\n// mocks\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  PasswordField: jest.fn(({ onChange, ...props }) => (\n    <input\n      data-testid={props.testID}\n      value={props.value}\n      onChange={(e) => onChange(e)}\n    />\n  ))\n}))\n\njest.mock('../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (key: string) => key\n  })\n}))\n\njest.mock('../../utils/getPasswordStrengthInfo', () => ({\n  getPasswordStrength: jest.fn()\n}))\n\njest.mock('../../constants/password', () => ({\n  STRENGTH_MAP: {\n    error: 'vulnerable',\n    warning: 'decent',\n    success: 'strong'\n  }\n}))\n\ndescribe('PasswordFieldStrengthIndicator', () => {\n  const mockOnChange = jest.fn()\n  const mockOnBlur = jest.fn()\n  const mockSetPasswordType = jest.fn()\n\n  const baseProps = {\n    label: 'Password',\n    placeholder: 'Enter Password',\n    testID: 'password-input',\n    passwordType: PassType.Password,\n    setPasswordType: mockSetPasswordType,\n    passwordField: {\n      name: 'password',\n      value: '123456',\n      onChange: mockOnChange,\n      onBlur: mockOnBlur,\n      error: ''\n    }\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders input with value', () => {\n    const { getByTestId } = render(\n      <PasswordFieldStrengthIndicator {...baseProps} />\n    )\n\n    expect(getByTestId('password-input')).toHaveValue('123456')\n  })\n\n  test('calls passwordField.onChange on input change', () => {\n    const { getByTestId } = render(\n      <PasswordFieldStrengthIndicator {...baseProps} />\n    )\n\n    fireEvent.change(getByTestId('password-input'), {\n      target: { value: 'newpass' }\n    })\n\n    expect(mockOnChange).toHaveBeenCalledWith('newpass')\n  })\n\n  test('resets passwordType when not Password', () => {\n    const { getByTestId } = render(\n      <PasswordFieldStrengthIndicator\n        {...baseProps}\n        passwordType={PassType.PassPhrase}\n      />\n    )\n\n    fireEvent.change(getByTestId('password-input'), {\n      target: { value: 'newpass' }\n    })\n\n    expect(mockSetPasswordType).toHaveBeenCalledWith(PassType.Password)\n  })\n\n  test('does not reset passwordType if already Password', () => {\n    const { getByTestId } = render(\n      <PasswordFieldStrengthIndicator {...baseProps} />\n    )\n\n    fireEvent.change(getByTestId('password-input'), {\n      target: { value: 'newpass' }\n    })\n\n    expect(mockSetPasswordType).not.toHaveBeenCalled()\n  })\n\n  test('passes error when provided', () => {\n    const { getByTestId } = render(\n      <PasswordFieldStrengthIndicator\n        {...baseProps}\n        passwordField={{\n          ...baseProps.passwordField,\n          error: 'Required'\n        }}\n      />\n    )\n\n    const input = getByTestId('password-input')\n    expect(input).toBeInTheDocument()\n  })\n\n  test('computes password strength and maps indicator', () => {\n    const { getPasswordStrength } = require('../../utils/getPasswordStrengthInfo')\n    const { PasswordField } = require('@tetherto/pearpass-lib-ui-kit')\n\n    getPasswordStrength.mockReturnValue({ strengthType: 'success' })\n\n    render(<PasswordFieldStrengthIndicator {...baseProps} />)\n\n    expect(getPasswordStrength).toHaveBeenCalledWith('123456', PassType.Password)\n    expect(PasswordField).toHaveBeenLastCalledWith(\n      expect.objectContaining({ passwordIndicator: 'strong' }),\n      undefined\n    )\n  })\n\n  test('handles undefined password strength', () => {\n    const {\n      getPasswordStrength\n    } = require('../../utils/getPasswordStrengthInfo')\n\n    getPasswordStrength.mockReturnValue(undefined)\n\n    render(<PasswordFieldStrengthIndicator {...baseProps} />)\n\n    expect(getPasswordStrength).toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/components/PasswordFieldStrengthIndicator/index.tsx",
    "content": "import React, { useMemo } from 'react'\nimport {\n  PasswordField,\n  PasswordIndicatorVariant\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { PassType } from '../../shared/types'\nimport { getPasswordStrength } from '../../utils/getPasswordStrengthInfo'\nimport { STRENGTH_MAP } from '../../constants/password'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ninterface IPasswordField {\n  onChange: (value: string) => void\n  onBlur: (event: React.FocusEvent<HTMLInputElement>) => void\n  name: string\n  value: string\n  error: string\n}\n\ninterface IPasswordFieldStrengthIndicatorProps {\n  label?: string\n  placeholder?: string\n  passwordField: IPasswordField\n  testID: string\n  passwordType: PassType\n  setPasswordType: React.Dispatch<React.SetStateAction<PassType>>\n}\n\nexport const PasswordFieldStrengthIndicator = ({\n  label = 'Password',\n  placeholder = 'Enter Password',\n  passwordType,\n  setPasswordType,\n  passwordField,\n  testID\n}: IPasswordFieldStrengthIndicatorProps) => {\n  const { t } = useTranslation()\n  const passwordStrength = useMemo(() => {\n    return getPasswordStrength(passwordField.value, passwordType)\n  }, [passwordField.value, passwordType])\n\n  const passwordIndicator: PasswordIndicatorVariant | undefined =\n    passwordStrength ? STRENGTH_MAP[passwordStrength.strengthType] : undefined\n\n  return (\n    <PasswordField\n      label={t(label)}\n      placeholder={t(placeholder)}\n      value={passwordField.value}\n      onChange={(e) => {\n        passwordField.onChange(e.target.value)\n        if (passwordType !== PassType.Password) {\n          setPasswordType(PassType.Password)\n        }\n      }}\n      error={passwordField.error || undefined}\n      testID={testID}\n      passwordIndicator={passwordIndicator}\n    />\n  )\n}\n"
  },
  {
    "path": "src/components/PopupMenu/index.js",
    "content": "import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport {\n  MenuCard,\n  MenuTrigger,\n  MenuWrapper,\n  TRANSITION_DURATION\n} from './styles'\nimport { getHorizontal } from './utils/getHorizontal'\nimport { getVertical } from './utils/getVertical'\nimport { useOutsideClick } from '../../hooks/useOutsideClick'\nimport { toSentenceCase } from '../../utils/toSentenceCase'\n\n/**\n * @param {{\n *  isOpen: boolean,\n *  setIsOpen: (isOpen: boolean) => void,\n *  content: import('react').ReactNode,\n *  children: import('react').ReactNode,\n *  direction: 'top' | 'bottom' | 'left' | 'right' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft'\n *  displayOnHover?: boolean\n *  testId?: string\n * }} props\n */\nexport const PopupMenu = ({\n  isOpen,\n  setIsOpen,\n  children,\n  content,\n  direction = 'bottomLeft',\n  displayOnHover = false,\n  testId\n}) => {\n  const boxRef = useRef(null)\n  const closeTimeoutRef = useRef(null)\n\n  const [shouldRender, setShouldRender] = useState(false)\n\n  const handleClose = useCallback(() => {\n    if (displayOnHover) {\n      closeTimeoutRef.current = setTimeout(() => {\n        setIsOpen(false)\n      }, 100)\n    } else {\n      setIsOpen(false)\n    }\n  }, [setIsOpen, displayOnHover])\n\n  const handleOpen = useCallback(() => {\n    if (closeTimeoutRef.current) {\n      clearTimeout(closeTimeoutRef.current)\n      closeTimeoutRef.current = null\n    }\n    setIsOpen(true)\n  }, [setIsOpen])\n\n  const wrapperRef = useOutsideClick({\n    onOutsideClick: () => {\n      handleClose()\n    }\n  })\n\n  const handleToggle = useCallback(() => {\n    setIsOpen(!isOpen)\n  }, [isOpen, setIsOpen])\n\n  const { newDirection, newPositions } = useMemo(() => {\n    const {\n      right = 0,\n      left = 0,\n      top = 0,\n      bottom = 0\n    } = boxRef.current?.getBoundingClientRect() || {}\n\n    const width =\n      boxRef.current?.children[0]?.getBoundingClientRect().width ?? 0\n    const height =\n      boxRef.current?.children[0]?.getBoundingClientRect().height ?? 0\n\n    const screenWidth = window.innerWidth\n    const screenHeight = window.innerHeight\n\n    const positionToSet = {\n      horizontal: getHorizontal(direction),\n      vertical: getVertical(direction)\n    }\n\n    const rightPosition = screenWidth - right\n    const leftPosition = left\n    const topPosition = top\n    const bottomPosition = screenHeight - bottom\n\n    const newPositions = {\n      right: rightPosition - (positionToSet.horizontal === 'right' ? width : 0),\n      left: leftPosition - (positionToSet.horizontal === 'left' ? width : 0),\n      top: topPosition - (positionToSet.vertical === 'top' ? height : 0),\n      bottom:\n        bottomPosition - (positionToSet.vertical === 'bottom' ? height : 0),\n      width: width,\n      height: height\n    }\n\n    if (newPositions.top < 0) {\n      positionToSet.vertical = 'bottom'\n    }\n\n    if (newPositions.bottom < 0) {\n      positionToSet.vertical = 'top'\n    }\n\n    if (newPositions.left < 0) {\n      positionToSet.horizontal = 'right'\n    }\n\n    if (newPositions.right < 0) {\n      positionToSet.horizontal = 'left'\n    }\n\n    return {\n      newDirection: `${positionToSet.vertical}${\n        positionToSet.vertical\n          ? toSentenceCase(positionToSet.horizontal)\n          : positionToSet.horizontal\n      }`,\n      newPositions: newPositions\n    }\n  }, [boxRef, direction, shouldRender])\n\n  const contentOrigin = useMemo(() => {\n    if (!wrapperRef.current) {\n      return { top: 0, left: 0 }\n    }\n\n    const {\n      top = 0,\n      bottom = 0,\n      left = 0,\n      right = 0,\n      width = 0,\n      height = 0\n    } = wrapperRef.current.getBoundingClientRect() || {}\n\n    switch (newDirection) {\n      case 'top':\n        return {\n          top: top,\n          left: left + width / 2\n        }\n      case 'bottom':\n        return {\n          top: bottom,\n          left: left + width / 2\n        }\n      case 'left':\n        return {\n          top: top + height / 2,\n          left: left\n        }\n      case 'right':\n        return {\n          top: top + height / 2,\n          left: right\n        }\n      case 'topRight':\n        return { top: top, left: left }\n      case 'topLeft':\n        return { top: top, left: right }\n      case 'bottomRight':\n        return { top: bottom, left: left }\n      case 'bottomLeft':\n        return {\n          top: bottom,\n          left: right\n        }\n      default:\n        return { top: 0, left: 0 }\n    }\n  }, [newDirection, wrapperRef, isOpen, shouldRender])\n\n  const getScrollableAncestors = (element) => {\n    const scrollableAncestors = []\n    let parent = element.parentElement\n\n    while (parent) {\n      const overflowX = window.getComputedStyle(parent).overflowX\n      const overflowY = window.getComputedStyle(parent).overflowY\n\n      if (\n        ['auto', 'scroll'].includes(overflowX) ||\n        ['auto', 'scroll'].includes(overflowY)\n      ) {\n        scrollableAncestors.push(parent)\n      }\n\n      parent = parent.parentElement\n    }\n\n    return scrollableAncestors\n  }\n\n  useEffect(() => {\n    if (!wrapperRef.current) {\n      return\n    }\n\n    const scrollableAncestors = getScrollableAncestors(wrapperRef.current)\n\n    if (isOpen) {\n      window.addEventListener('scroll', handleClose)\n      window.addEventListener('resize', handleClose)\n\n      scrollableAncestors.forEach((ancestor) => {\n        ancestor.addEventListener('scroll', handleClose)\n      })\n    }\n\n    return () => {\n      window.removeEventListener('scroll', handleClose)\n      window.removeEventListener('resize', handleClose)\n\n      scrollableAncestors.forEach((ancestor) => {\n        ancestor.removeEventListener('scroll', handleClose)\n      })\n    }\n  }, [wrapperRef, isOpen, handleClose])\n\n  useEffect(() => {\n    if (isOpen) {\n      setShouldRender(true)\n    } else {\n      const timer = setTimeout(() => {\n        setShouldRender(false)\n      }, TRANSITION_DURATION)\n\n      return () => {\n        clearTimeout(timer)\n      }\n    }\n  }, [isOpen])\n\n  useEffect(\n    () => () => {\n      if (closeTimeoutRef.current) {\n        clearTimeout(closeTimeoutRef.current)\n      }\n    },\n    []\n  )\n\n  return html`\n    <${MenuWrapper}\n      ref=${wrapperRef}\n      onMouseEnter=${displayOnHover ? handleOpen : undefined}\n      onMouseLeave=${displayOnHover ? handleClose : undefined}\n    >\n      <${MenuTrigger}\n        data-testid=${testId}\n        onClick=${!displayOnHover && handleToggle}\n      >\n        ${children}\n      <//>\n\n      <${MenuCard}\n        ref=${boxRef}\n        direction=${newDirection}\n        top=${contentOrigin.top}\n        left=${contentOrigin.left}\n        isOpen=${isOpen}\n        shouldRender=${shouldRender}\n        height=${newPositions.height}\n        width=${newPositions.width}\n      >\n        ${content}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/PopupMenu/index.test.js",
    "content": "import React, { useState } from 'react'\n\nimport { render, fireEvent, waitFor, act } from '@testing-library/react'\n\nimport { PopupMenu } from './index'\nimport { TRANSITION_DURATION } from './styles'\nimport '@testing-library/jest-dom'\n\nconst PopupMenuWrapper = ({\n  children,\n  content,\n  direction = 'bottomLeft',\n  initialOpen = false\n}) => {\n  const [isOpen, setIsOpen] = useState(initialOpen)\n  return (\n    <PopupMenu\n      isOpen={isOpen}\n      setIsOpen={setIsOpen}\n      content={content}\n      direction={direction}\n    >\n      {children}\n    </PopupMenu>\n  )\n}\n\ndescribe('PopupMenu Component', () => {\n  beforeEach(() => {\n    jest.useFakeTimers()\n  })\n\n  afterEach(() => {\n    jest.runOnlyPendingTimers()\n    jest.useRealTimers()\n  })\n\n  test('toggles open state when trigger is clicked (by opacity)', async () => {\n    const { getByText, container } = render(\n      <PopupMenuWrapper content={<div>Menu Content</div>}>\n        <button>Toggle Menu</button>\n      </PopupMenuWrapper>\n    )\n\n    const menuContentInitial = getByText('Menu Content')\n    const menuCardInitial = menuContentInitial.parentElement\n    const computedStyle = window.getComputedStyle(menuCardInitial)\n    expect(computedStyle.opacity).toBe('0')\n\n    fireEvent.click(getByText('Toggle Menu'))\n    await waitFor(() => {\n      const menuContentOpen = getByText('Menu Content')\n      const menuCardOpen = menuContentOpen.parentElement\n      const computedStyleOpen = window.getComputedStyle(menuCardOpen)\n      expect(computedStyleOpen.opacity).toBe('1')\n    })\n\n    fireEvent.click(getByText('Toggle Menu'))\n    act(() => {\n      jest.advanceTimersByTime(TRANSITION_DURATION)\n    })\n    await waitFor(() => {\n      const menuContentClosed = getByText('Menu Content')\n      const menuCardClosed = menuContentClosed.parentElement\n      const computedStyleClosed = window.getComputedStyle(menuCardClosed)\n      expect(computedStyleClosed.opacity).toBe('0')\n    })\n\n    expect(container).toMatchSnapshot()\n  })\n\n  test('closes menu when clicking outside', async () => {\n    const { getByText } = render(\n      <div>\n        <div data-testid=\"outside-element\">Outside Element</div>\n        <PopupMenuWrapper content={<div>Menu Content</div>}>\n          <button>Toggle Menu</button>\n        </PopupMenuWrapper>\n      </div>\n    )\n\n    fireEvent.click(getByText('Toggle Menu'))\n\n    await waitFor(() => {\n      const menuContent = getByText('Menu Content')\n      const menuCard = menuContent.parentElement\n      expect(window.getComputedStyle(menuCard).opacity).toBe('1')\n    })\n\n    fireEvent.mouseDown(getByText('Outside Element'))\n\n    act(() => {\n      jest.advanceTimersByTime(TRANSITION_DURATION)\n    })\n    await waitFor(() => {\n      const menuContent = getByText('Menu Content')\n      const menuCard = menuContent.parentElement\n      expect(window.getComputedStyle(menuCard).opacity).toBe('0')\n    })\n  })\n\n  test('removes content from the DOM after transition completes', async () => {\n    const { getByText } = render(\n      <PopupMenuWrapper content={<div>Menu Content</div>} initialOpen={true}>\n        <button>Toggle Menu</button>\n      </PopupMenuWrapper>\n    )\n\n    const menuContent = getByText('Menu Content')\n    const menuCard = menuContent.parentElement\n    expect(window.getComputedStyle(menuCard).visibility).toBe('visible')\n\n    fireEvent.click(getByText('Toggle Menu'))\n\n    expect(window.getComputedStyle(menuCard).opacity).toBe('0')\n    expect(window.getComputedStyle(menuCard).visibility).toBe('visible')\n\n    act(() => {\n      jest.advanceTimersByTime(TRANSITION_DURATION)\n    })\n    await waitFor(() => {\n      expect(window.getComputedStyle(menuCard).visibility).toBe('hidden')\n    })\n  })\n\n  test('handles window resize by closing the menu', async () => {\n    const { getByText } = render(\n      <PopupMenuWrapper content={<div>Menu Content</div>}>\n        <button>Toggle Menu</button>\n      </PopupMenuWrapper>\n    )\n\n    fireEvent.click(getByText('Toggle Menu'))\n\n    await waitFor(() => {\n      const menuContent = getByText('Menu Content')\n      const menuCard = menuContent.parentElement\n      expect(window.getComputedStyle(menuCard).opacity).toBe('1')\n    })\n\n    fireEvent(window, new Event('resize'))\n\n    act(() => {\n      jest.advanceTimersByTime(TRANSITION_DURATION)\n    })\n    await waitFor(() => {\n      const menuContent = getByText('Menu Content')\n      const menuCard = menuContent.parentElement\n      expect(window.getComputedStyle(menuCard).opacity).toBe('0')\n    })\n  })\n})\n"
  },
  {
    "path": "src/components/PopupMenu/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const TRANSITION_DURATION = 250\n\nconst TRANSFORM_BY_DIRECTION = {\n  top: 'translate(-100%, calc(-100% - 10px))',\n  right: 'translate(10px, -50%)',\n  bottom: 'translate(-50%, 10px)',\n  left: 'translate(10px, -50%)',\n  topRight: 'translate(0, calc(-100% - 10px))',\n  topLeft: 'translate(-100%, calc(-100% - 10px))',\n  bottomRight: 'translate(0, 10px)',\n  bottomLeft: 'translate(-100%, 10px)'\n}\n\nexport const MenuWrapper = styled.div`\n  position: relative;\n  display: inline-block;\n`\n\nexport const MenuCard = styled.div.withConfig({\n  shouldForwardProp: (prop) =>\n    ![\n      'direction',\n      'isOpen',\n      'top',\n      'left',\n      'height',\n      'width',\n      'shouldRender'\n    ].includes(prop)\n})`\n  height: ${({ height }) => height}px;\n  width: ${({ width }) => width}px;\n  position: fixed;\n  z-index: 20000;\n  left: ${({ left }) => left}px;\n  top: ${({ top }) => top}px;\n  opacity: ${({ isOpen }) => (isOpen ? 1 : 0)};\n  visibility: ${({ shouldRender }) => (shouldRender ? 'visible' : 'hidden')};\n  pointer-events: ${({ isOpen }) => (isOpen ? 'auto' : 'none')};\n  transition:\n    opacity ${TRANSITION_DURATION}ms ease-in-out,\n    visibility ${TRANSITION_DURATION}ms ease-in-out;\n\n  & {\n    transform: ${({ direction }) => TRANSFORM_BY_DIRECTION[direction]};\n  }\n\n  @keyframes identifier {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n`\n\nexport const MenuTrigger = styled.div`\n  cursor: pointer;\n`\n"
  },
  {
    "path": "src/components/PopupMenu/utils/getHorizontal.js",
    "content": "/**\n * @param {'left' | 'right' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft'} direction\n * @returns {'left' | 'right' | ''}\n */\nexport const getHorizontal = (direction) => {\n  if (direction?.toLowerCase().includes('left')) {\n    return 'left'\n  }\n  if (direction?.toLowerCase().includes('right')) {\n    return 'right'\n  }\n  return ''\n}\n"
  },
  {
    "path": "src/components/PopupMenu/utils/getHorizontal.test.js",
    "content": "import { getHorizontal } from './getHorizontal'\n\ndescribe('getHorizontal', () => {\n  it('should return \"left\" when direction contains \"left\"', () => {\n    expect(getHorizontal('left')).toBe('left')\n    expect(getHorizontal('topLeft')).toBe('left')\n    expect(getHorizontal('bottomLeft')).toBe('left')\n  })\n\n  it('should return \"right\" when direction contains \"right\"', () => {\n    expect(getHorizontal('right')).toBe('right')\n    expect(getHorizontal('topRight')).toBe('right')\n    expect(getHorizontal('bottomRight')).toBe('right')\n  })\n\n  it('should return empty string when direction does not contain \"left\" or \"right\"', () => {\n    expect(getHorizontal('top')).toBe('')\n    expect(getHorizontal('bottom')).toBe('')\n    expect(getHorizontal('')).toBe('')\n  })\n\n  it('should handle undefined input', () => {\n    expect(getHorizontal(undefined)).toBe('')\n  })\n\n  it('should be case insensitive', () => {\n    expect(getHorizontal('LEFT')).toBe('left')\n    expect(getHorizontal('Right')).toBe('right')\n    expect(getHorizontal('topLEFT')).toBe('left')\n    expect(getHorizontal('bottomRIGHT')).toBe('right')\n  })\n})\n"
  },
  {
    "path": "src/components/PopupMenu/utils/getVertical.js",
    "content": "/**\n * @param {'top' | 'bottom' | 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft'} direction\n * @returns {'top' | 'bottom' | ''}\n */\nexport const getVertical = (direction) => {\n  if (direction?.includes('top')) {\n    return 'top'\n  }\n  if (direction?.includes('bottom')) {\n    return 'bottom'\n  }\n  return ''\n}\n"
  },
  {
    "path": "src/components/PopupMenu/utils/getVertical.test.js",
    "content": "import { getVertical } from './getVertical'\n\ndescribe('getVertical', () => {\n  test('should return \"top\" when direction includes \"top\"', () => {\n    expect(getVertical('top')).toBe('top')\n    expect(getVertical('topRight')).toBe('top')\n    expect(getVertical('topLeft')).toBe('top')\n  })\n\n  test('should return \"bottom\" when direction includes \"bottom\"', () => {\n    expect(getVertical('bottom')).toBe('bottom')\n    expect(getVertical('bottomRight')).toBe('bottom')\n    expect(getVertical('bottomLeft')).toBe('bottom')\n  })\n\n  test('should return empty string for other directions', () => {\n    expect(getVertical('left')).toBe('')\n    expect(getVertical('right')).toBe('')\n    expect(getVertical('')).toBe('')\n    expect(getVertical(null)).toBe('')\n    expect(getVertical(undefined)).toBe('')\n  })\n})\n"
  },
  {
    "path": "src/components/RadioSelect/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { RadioOption, RadioSelectWrapper, Title } from './styles'\nimport { ButtonRadio } from '../../lib-react-components'\n\n/**\n * @param {{\n *  title?: string,\n *  options: { label: string, value: string }[],\n *  selectedOption: string,\n *  onChange: (value: string) => void,\n *  optionStyle?: object,\n *  titleStyle?: object,\n *  buttonType?: 'button' | 'submit',\n *  disabled?: boolean\n * }} props\n */\nexport const RadioSelect = ({\n  title,\n  options,\n  selectedOption,\n  onChange,\n  optionStyle,\n  titleStyle,\n  buttonType = 'button',\n  disabled = false\n}) => {\n  const handleChange = (value) => {\n    onChange(value)\n  }\n\n  return html`\n    <${RadioSelectWrapper} data-testid=\"radioselect-container\">\n      ${title && html`<${Title} style=${titleStyle}>${title}<//>`}\n      ${options.map(\n        (option) => html`\n          <${RadioOption}\n            key=${option.value}\n            onClick=${() => handleChange(option.value)}\n            style=${optionStyle}\n            data-testid=\"radioselect-${option.value}-${selectedOption ===\n            option.value\n              ? 'active'\n              : 'inactive'}\"\n          >\n            <${ButtonRadio}\n              type=${buttonType}\n              isActive=${selectedOption === option.value}\n              disabled=${disabled}\n            />\n            ${option.label}\n          <//>\n        `\n      )}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/RadioSelect/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { RadioSelect } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('./styles', () => ({\n  RadioSelectWrapper: ({ children }) => (\n    <div data-testid=\"radio-select-wrapper\">{children}</div>\n  ),\n  Title: ({ children }) => <div data-testid=\"title\">{children}</div>,\n  RadioOption: ({ children, onClick }) => (\n    <div data-testid=\"radio-option\" onClick={onClick}>\n      {children}\n    </div>\n  )\n}))\n\njest.mock('../../lib-react-components', () => ({\n  ButtonRadio: ({ isActive }) => (\n    <div data-testid=\"button-radio\" data-active={isActive ? 'true' : 'false'}>\n      {isActive ? 'Active' : 'Inactive'}\n    </div>\n  )\n}))\n\ndescribe('RadioSelect', () => {\n  const mockOptions = [\n    { label: 'Option 1', value: 'option1' },\n    { label: 'Option 2', value: 'option2' },\n    { label: 'Option 3', value: 'option3' }\n  ]\n  const mockTitle = 'Select an option'\n  const mockOnChange = jest.fn()\n\n  beforeEach(() => {\n    mockOnChange.mockClear()\n  })\n\n  const renderComponent = (props = {}) =>\n    render(\n      <ThemeProvider>\n        <RadioSelect\n          title={mockTitle}\n          options={mockOptions}\n          selectedOption=\"option1\"\n          onChange={mockOnChange}\n          {...props}\n        />\n      </ThemeProvider>\n    )\n\n  test('renders the component with title and options', () => {\n    const { container } = renderComponent()\n    expect(screen.getByTestId('title')).toHaveTextContent(mockTitle)\n    expect(screen.getAllByTestId('radio-option')).toHaveLength(3)\n    expect(container).toMatchSnapshot()\n  })\n\n  test('correctly marks the selected option', () => {\n    renderComponent({ selectedOption: 'option2' })\n    const radioButtons = screen.getAllByTestId('button-radio')\n\n    expect(radioButtons[0]).toHaveAttribute('data-active', 'false')\n    expect(radioButtons[1]).toHaveAttribute('data-active', 'true')\n    expect(radioButtons[2]).toHaveAttribute('data-active', 'false')\n  })\n\n  test('calls onChange when an option is clicked', () => {\n    renderComponent()\n\n    const radioOptions = screen.getAllByTestId('radio-option')\n    fireEvent.click(radioOptions[1])\n\n    expect(mockOnChange).toHaveBeenCalledWith('option2')\n  })\n\n  test('renders all option labels correctly', () => {\n    renderComponent()\n\n    const radioOptions = screen.getAllByTestId('radio-option')\n    expect(radioOptions[0]).toHaveTextContent('Option 1')\n    expect(radioOptions[1]).toHaveTextContent('Option 2')\n    expect(radioOptions[2]).toHaveTextContent('Option 3')\n  })\n\n  test('handles empty options array', () => {\n    renderComponent({ options: [] })\n    expect(screen.queryAllByTestId('radio-option')).toHaveLength(0)\n  })\n\n  test('maintains selection state between renders', () => {\n    const { rerender } = renderComponent({ selectedOption: 'option1' })\n\n    expect(screen.getAllByTestId('button-radio')[0]).toHaveAttribute(\n      'data-active',\n      'true'\n    )\n\n    rerender(\n      <ThemeProvider>\n        <RadioSelect\n          title={mockTitle}\n          options={mockOptions}\n          selectedOption=\"option3\"\n          onChange={mockOnChange}\n        />\n      </ThemeProvider>\n    )\n\n    expect(screen.getAllByTestId('button-radio')[2]).toHaveAttribute(\n      'data-active',\n      'true'\n    )\n  })\n})\n"
  },
  {
    "path": "src/components/RadioSelect/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const RadioSelectWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n`\n\nexport const Title = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n`\n\nexport const RadioOption = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  cursor: pointer;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 600;\n  margin-top: 10px;\n\n  & + & {\n    margin-top: 5px;\n  }\n`\n"
  },
  {
    "path": "src/components/Record/index.js",
    "content": "import { useState } from 'react'\n\nimport { generateAvatarInitials } from '@tetherto/pear-apps-utils-avatar-initials'\nimport { formatOtpCode } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { RECORD_COLOR_BY_TYPE } from '../../constants/recordColorByType'\nimport { useRecordActionItems } from '../../hooks/useRecordActionItems'\nimport { KebabMenuIcon } from '../../lib-react-components'\nimport { CopyButton } from '../CopyButton'\nimport { PopupMenu } from '../PopupMenu'\nimport { RecordActionsPopupContent } from '../RecordActionsPopupContent'\nimport { RecordAvatar } from '../RecordAvatar'\nimport {\n  OtpCodeText,\n  RecordActions,\n  RecordInformation,\n  RecordName,\n  RecordRightSection,\n  RecordWrapper\n} from './styles'\n\n/**\n *\n * @param {{\n *  record: {\n *    id: string\n *    createdAt: number\n *    updatedAt: number\n *    isFavorite: boolean\n *    vaultId: string\n *    folder: string\n *    type: 'note' | 'creditCard' | 'custom' | 'identity' | 'login'\n *    data: {\n *      title: string\n *      [key: string]: any\n *    }\n *  },\n *  isSelected: boolean,\n *  onClick: () => void\n *  onSelect: () => void,\n *  testId?: string,\n *  dataId?: string,\n *  otpCode?: string | null\n * }} props\n */\nexport const Record = ({\n  record,\n  isSelected = false,\n  onClick,\n  onSelect,\n  testId,\n  dataId,\n  otpCode,\n  recordType\n}) => {\n  const [isOpen, setIsOpen] = useState()\n\n  const folderName = record?.folder\n\n  const { actions } = useRecordActionItems({\n    record,\n    recordType,\n    onSelect,\n    excludeTypes: ['edit'],\n    onClose: () => {\n      setIsOpen(false)\n    }\n  })\n\n  const handleActionMenuToggle = (e) => {\n    e.stopPropagation()\n\n    setIsOpen(!isOpen)\n  }\n\n  const domain = record.type === 'login' ? record?.data?.websites?.[0] : null\n\n  const formattedOtp = otpCode ? formatOtpCode(otpCode) : null\n\n  return html`\n    <${RecordWrapper}\n      open=${isOpen}\n      isSelected=${isSelected}\n      onClick=${onClick}\n      data-testid=${testId}\n      data-id=${dataId}\n    >\n      <${RecordInformation}>\n        <${RecordAvatar}\n          websiteDomain=${domain}\n          initials=${generateAvatarInitials(record?.data?.title)}\n          isSelected=${isSelected}\n          isFavorite=${record?.isFavorite}\n          color=${RECORD_COLOR_BY_TYPE[record?.type]}\n        />\n\n        <${RecordName}>\n          <span>${record?.data?.title}</span>\n\n          <p>${folderName}</p>\n        <//>\n      <//>\n\n      <${RecordRightSection}>\n        ${formattedOtp &&\n        html`\n          <${OtpCodeText} data-testid=\"record-otp-code\"> ${formattedOtp} <//>\n          <span onClick=${(e) => e.stopPropagation()}>\n            <${CopyButton} value=${otpCode} testId=\"record-otp-copy-button\" />\n          </span>\n        `}\n        ${!isSelected &&\n        html` <${RecordActions}>\n          <${PopupMenu}\n            side=\"right\"\n            align=\"right\"\n            isOpen=${isOpen}\n            setIsOpen=${setIsOpen}\n            content=${html`\n              <${RecordActionsPopupContent} menuItems=${actions} />\n            `}\n          >\n            <div\n              onClick=${handleActionMenuToggle}\n              data-testid=\"list-item-threedots\"\n            >\n              <${KebabMenuIcon} />\n            </div>\n          <//>\n        <//>`}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/Record/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent, waitFor } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { Record } from './index'\nimport '@testing-library/jest-dom/'\n\njest.mock('../../hooks/useRecordActionItems', () => ({\n  useRecordActionItems: () => ({\n    actions: [\n      { label: 'Action 1', onClick: jest.fn() },\n      { label: 'Action 2', onClick: jest.fn() }\n    ]\n  })\n}))\n\njest.mock('../RecordActionsPopupContent', () => ({\n  RecordActionsPopupContent: () => (\n    <div data-testid=\"record-actions-popup-content\">\n      RecordActionsPopupContent\n    </div>\n  )\n}))\n\njest.mock('../../lib-react-components', () => ({\n  KebabMenuIcon: () => <svg data-testid=\"kebab-icon\" />\n}))\n\njest.mock('../RecordAvatar', () => ({\n  RecordAvatar: () => <div>RecordAvatar</div>\n}))\n\ndescribe('Record Component', () => {\n  const dummyRecord = {\n    id: '1',\n    createdAt: 1630000000000,\n    updatedAt: 1630000000000,\n    isFavorite: false,\n    vaultId: 'vault-1',\n    folder: 'Test Folder',\n    type: 'note',\n    data: {\n      title: 'Test Record Title',\n      avatarSrc: ''\n    }\n  }\n\n  test('renders Record component correctly when not selected', () => {\n    const { asFragment } = render(\n      <ThemeProvider>\n        <Record\n          record={dummyRecord}\n          isSelected={false}\n          onClick={() => {}}\n          onSelect={() => {}}\n        />\n      </ThemeProvider>\n    )\n    expect(asFragment()).toMatchSnapshot()\n  })\n\n  test('renders Record component correctly when selected', () => {\n    const { asFragment } = render(\n      <ThemeProvider>\n        <Record\n          record={dummyRecord}\n          isSelected={true}\n          onClick={() => {}}\n          onSelect={() => {}}\n        />\n      </ThemeProvider>\n    )\n    expect(asFragment()).toMatchSnapshot()\n  })\n\n  test('toggles action menu when kebab icon is clicked (snapshot test)', async () => {\n    const { container, asFragment } = render(\n      <ThemeProvider>\n        <Record\n          record={dummyRecord}\n          isSelected={false}\n          onClick={() => {}}\n          onSelect={() => {}}\n        />\n      </ThemeProvider>\n    )\n\n    expect(asFragment()).toMatchSnapshot('initial state')\n\n    const kebabIcon = container.querySelector('[data-testid=\"kebab-icon\"]')\n    expect(kebabIcon).toBeInTheDocument()\n\n    fireEvent.click(kebabIcon)\n\n    await waitFor(() => {\n      expect(\n        container.querySelector('[data-testid=\"record-actions-popup-content\"]')\n      ).toBeInTheDocument()\n    })\n\n    expect(asFragment()).toMatchSnapshot('after toggle')\n  })\n})\n"
  },
  {
    "path": "src/components/Record/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nexport const RecordWrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isSelected', 'open'].includes(prop)\n})`\n  width: 100%;\n  height: auto;\n  display: flex;\n  min-height: 45px;\n  padding: 5px 10px;\n  justify-content: space-between;\n  align-items: center;\n  align-self: stretch;\n  border-radius: 10px;\n  background: transparent;\n  cursor: pointer;\n\n  ${({ isSelected }) =>\n    isSelected &&\n    css`\n      background: rgba(134, 170, 172, 0.4);\n    `}\n\n  ${({ open }) =>\n    open &&\n    css`\n      background: rgba(134, 170, 172, 0.2);\n      pointer-events: auto;\n    `}\n    \n  &:hover {\n    background: ${({ isSelected }) =>\n      !isSelected && 'rgba(134, 170, 172, 0.2)'};\n  }\n`\n\nexport const RecordInformation = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n`\n\nexport const RecordName = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: start;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n\n  & p {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n    font-size: 12px;\n  }\n`\n\nexport const RecordRightSection = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-left: auto;\n  flex-shrink: 0;\n`\n\nexport const OtpCodeText = styled.span`\n  font-family: 'Inter';\n  font-variant-numeric: tabular-nums;\n  font-size: 18px;\n  font-weight: 600;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  white-space: nowrap;\n`\n\nexport const RecordActions = styled.div`\n  display: flex;\n  align-items: center;\n`\n"
  },
  {
    "path": "src/components/RecordActionsPopupContent/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { MenuCard, MenuItem } from './styles'\nimport { RECORD_ACTION_ICON_BY_TYPE } from '../../constants/recordActions'\n\n/**\n * @param {{\n *  menuItems: Array<{\n *    name: string,\n *    type: string,\n *    click?: () => void,\n *  }>,\n *  variant: 'default' | 'compact',\n *  onClick?: () => void,\n * }}\n */\nexport const RecordActionsPopupContent = ({\n  variant = 'default',\n  menuItems,\n  onClick\n}) => html`\n  <${MenuCard} variant=${variant}>\n    ${menuItems.map(\n      (item) => html`\n        <${MenuItem}\n          data-testid=${`recordaction-item-${item.type}`}\n          data-id=${item.dataId}\n          key=${item.type}\n          variant=${variant}\n          onClick=${(e) => {\n            e.stopPropagation()\n\n            if (item.click) {\n              item.click()\n              return\n            }\n\n            onClick?.()\n          }}\n        >\n          <${RECORD_ACTION_ICON_BY_TYPE[item.type]} size=\"24\" />\n\n          <p>${item.name}</p>\n        <//>\n      `\n    )}\n  <//>\n`\n"
  },
  {
    "path": "src/components/RecordActionsPopupContent/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { RecordActionsPopupContent } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../constants/recordActions', () => ({\n  RECORD_ACTION_ICON_BY_TYPE: {\n    edit: () => <svg data-testid=\"edit-icon\" />,\n    delete: () => <svg data-testid=\"delete-icon\" />\n  }\n}))\n\ndescribe('RecordActionsPopupContent Component', () => {\n  const mockMenuItems = [\n    { name: 'Edit', type: 'edit', click: jest.fn() },\n    { name: 'Delete', type: 'delete', click: jest.fn() }\n  ]\n\n  test('renders correctly with default variant', () => {\n    const { asFragment, getByText } = render(\n      <ThemeProvider>\n        <RecordActionsPopupContent menuItems={mockMenuItems} />\n      </ThemeProvider>\n    )\n\n    expect(getByText('Edit')).toBeInTheDocument()\n    expect(getByText('Delete')).toBeInTheDocument()\n    expect(asFragment()).toMatchSnapshot()\n  })\n\n  test('renders correctly with compact variant', () => {\n    const { asFragment } = render(\n      <ThemeProvider>\n        <RecordActionsPopupContent\n          menuItems={mockMenuItems}\n          variant=\"compact\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(asFragment()).toMatchSnapshot()\n  })\n\n  test('calls item.click when menu item is clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <RecordActionsPopupContent menuItems={mockMenuItems} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Edit'))\n    expect(mockMenuItems[0].click).toHaveBeenCalledTimes(1)\n\n    fireEvent.click(getByText('Delete'))\n    expect(mockMenuItems[1].click).toHaveBeenCalledTimes(1)\n  })\n\n  test('calls onClick prop when menu item without click handler is clicked', () => {\n    const onClickMock = jest.fn()\n    const itemsWithoutClick = [\n      { name: 'Edit', type: 'edit' },\n      { name: 'Delete', type: 'delete' }\n    ]\n\n    const { getByText } = render(\n      <ThemeProvider>\n        <RecordActionsPopupContent\n          menuItems={itemsWithoutClick}\n          onClick={onClickMock}\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Edit'))\n    expect(onClickMock).toHaveBeenCalledTimes(1)\n  })\n})\n"
  },
  {
    "path": "src/components/RecordActionsPopupContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const MenuCard = styled.div`\n  position: absolute;\n  font-family: 'Inter';\n  font-size: ${({ variant }) => (variant === 'default' ? '14px' : '10px')};\n  align-items: flex-start;\n  display: flex;\n  padding: ${({ variant }) => (variant === 'default' ? '4px 8px' : '5px 5px')};\n  flex-direction: column;\n  gap: 4px;\n  overflow: hidden;\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  min-width: 150px;\n`\n\nexport const MenuItem = styled.div`\n  display: flex;\n  padding: 8px 0px;\n  align-items: center;\n  gap: 5px;\n  align-self: stretch;\n  word-break: keep-all;\n  white-space: nowrap;\n  cursor: pointer;\n  color: ${({ theme }) => theme.colors.white.mode1};\n\n  &:not(:last-child) {\n    border-bottom: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  }\n`\n"
  },
  {
    "path": "src/components/RecordAvatar/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { RecordAvatar } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../lib-react-components', () => ({\n  CheckIcon: (props) => <svg data-testid=\"check-icon\" {...props} />,\n  StarIcon: (props) => <svg data-testid=\"star-icon\" {...props} />\n}))\n\nconst mockUseFavicon = jest.fn()\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  ...jest.requireActual('@tetherto/pearpass-lib-vault'),\n  useFavicon: (params) => mockUseFavicon(params)\n}))\n\ndescribe('RecordAvatar Component', () => {\n  const defaultProps = {\n    initials: 'AB',\n    color: '#FF5500'\n  }\n\n  beforeEach(() => {\n    mockUseFavicon.mockReset()\n    mockUseFavicon.mockReturnValue({\n      faviconSrc: null,\n      isLoading: false,\n      hasError: false\n    })\n    global.URL.createObjectURL = jest.fn(() => 'blob:test-url')\n  })\n\n  test('calls useFavicon with domain', () => {\n    render(\n      <ThemeProvider>\n        <RecordAvatar {...defaultProps} websiteDomain=\"https://example.com\" />\n      </ThemeProvider>\n    )\n\n    expect(mockUseFavicon).toHaveBeenCalledWith({ url: 'https://example.com' })\n  })\n\n  test('calls useFavicon with undefined when no websiteDomain', () => {\n    render(\n      <ThemeProvider>\n        <RecordAvatar {...defaultProps} />\n      </ThemeProvider>\n    )\n\n    expect(mockUseFavicon).toHaveBeenCalledWith({ url: undefined })\n  })\n\n  test('renders image when useFavicon returns faviconSrc', () => {\n    mockUseFavicon.mockReturnValue({\n      faviconSrc: 'blob:test-url',\n      isLoading: false,\n      hasError: false\n    })\n\n    const { container } = render(\n      <ThemeProvider>\n        <RecordAvatar {...defaultProps} websiteDomain=\"https://test.com\" />\n      </ThemeProvider>\n    )\n\n    const img = container.querySelector('img')\n    expect(img).toBeInTheDocument()\n    expect(img).toHaveAttribute('src', 'blob:test-url')\n  })\n\n  test('renders initials fallback if favicon returns null', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <RecordAvatar {...defaultProps} websiteDomain=\"https://test.com\" />\n      </ThemeProvider>\n    )\n\n    expect(getByText('AB')).toBeInTheDocument()\n  })\n\n  test('renders check icon instead of favorite when both isSelected and isFavorite are true', () => {\n    const { getByTestId, queryByTestId } = render(\n      <ThemeProvider>\n        <RecordAvatar {...defaultProps} isSelected={true} isFavorite={true} />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('check-icon')).toBeInTheDocument()\n    expect(queryByTestId('star-icon')).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/RecordAvatar/index.tsx",
    "content": "import React from 'react'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport {\n  AvatarAlt,\n  AvatarContainer,\n  AvatarImage,\n  AvatarSize,\n  FavoriteIcon,\n  SelectedAvatarContainer\n} from './styles'\nimport { CheckIcon, StarIcon } from '../../lib-react-components'\nimport { useFavicon } from '@tetherto/pearpass-lib-vault'\n\ninterface Props {\n  websiteDomain: string\n  initials: string\n  size: AvatarSize\n  isSelected: boolean\n  isFavorite: boolean\n  color: string\n  testId?: string\n}\n\nexport const RecordAvatar = (props: Props): React.ReactElement => {\n  const { websiteDomain, initials, size, isSelected, isFavorite, color, testId } = props\n\n  const { faviconSrc, isLoading } = useFavicon({ url: websiteDomain })\n\n  if (isSelected) {\n    return (\n      <SelectedAvatarContainer data-testid={`${testId}-selected`}>\n        <CheckIcon size=\"21\" color={colors.black.mode1} />\n      </SelectedAvatarContainer>\n    )\n  }\n\n  const isFaviconLoaded = faviconSrc && !isLoading\n\n  return (\n    <AvatarContainer size={size} data-testid={testId}>\n      {isFaviconLoaded && <AvatarImage src={faviconSrc} />}\n\n      {!isFaviconLoaded && (\n        <AvatarAlt color={color} size={size}>\n          {initials}\n        </AvatarAlt>\n      )}\n\n      {isFavorite && (\n        <FavoriteIcon data-testid={`avatar-favorite-${initials}`}>\n          <StarIcon size=\"18\" fill={true} color={colors.primary400.mode1} />\n        </FavoriteIcon>\n      )}\n    </AvatarContainer>\n  )\n}\n"
  },
  {
    "path": "src/components/RecordAvatar/styles.ts",
    "content": "import styled from 'styled-components'\n\nexport type AvatarSize = 'md' | 'sm'\n\nconst AVATAR_CONTAINER_SIZE = '30px'\n\ninterface AvatarContainerProps {\n  size?: AvatarSize\n}\n\ninterface AvatarAltProps {\n  color: string\n  size?: AvatarSize\n}\n\nconst getAvatarHeight = (size?: AvatarSize): string => {\n  return size === 'sm' ? '21px' : AVATAR_CONTAINER_SIZE\n}\n\nconst getAvatarBorderRadius = (size?: AvatarSize): string => {\n  return size === 'sm' ? '7px' : '10px'\n}\n\nconst getAvatarFontSize = (size?: AvatarSize): string => {\n  return size === 'sm' ? '12px' : '16px'\n}\n\nexport const AvatarContainer = styled.div<AvatarContainerProps>`\n  position: relative;\n  display: flex;\n  height: ${({ size }) => getAvatarHeight(size)};\n  aspect-ratio: 1/1;\n  padding: 2px;\n  justify-content: center;\n  align-items: center;\n  border-radius: ${({ size }) => getAvatarBorderRadius(size)};\n  background: ${({ theme }) => theme.colors.secondary400.mode1};\n  min-width: 0;\n  flex-shrink: 0;\n`\n\nexport const AvatarAlt = styled.div<AvatarAltProps>`\n  color: ${({ color }) => color};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: ${({ size }) => getAvatarFontSize(size)};\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n`\n\nexport const SelectedAvatarContainer = styled.div`\n  display: flex;\n  width: ${AVATAR_CONTAINER_SIZE};\n  height: ${AVATAR_CONTAINER_SIZE};\n  padding: 5px;\n  justify-content: center;\n  align-items: center;\n  gap: 10px;\n  flex-shrink: 0;\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.primary400.mode1};\n`\n\nexport const FavoriteIcon = styled.div`\n  position: absolute;\n  right: -6px;\n  bottom: -9px;\n\n  & > svg {\n    fill: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const AvatarImage = styled.img`\n  min-width: 0;\n  display: flex;\n  object-fit: cover;\n`\n"
  },
  {
    "path": "src/components/RecordItemIcon/RecordItemIcon.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors, size: number) => ({\n  wrapper: {\n    width: size,\n    height: size,\n    borderRadius: `${rawTokens.radius8}px`,\n    overflow: 'hidden' as const,\n    backgroundColor: colors.colorSurfaceHover,\n    display: 'flex' as const,\n    justifyContent: 'center' as const,\n    alignItems: 'center' as const,\n    flexShrink: 0\n  },\n\n  image: {\n    width: size,\n    height: size,\n    borderRadius: `${rawTokens.radius8}px`,\n    objectFit: 'contain' as const\n  }\n})\n"
  },
  {
    "path": "src/components/RecordItemIcon/RecordItemIcon.tsx",
    "content": "import React from 'react'\n\nimport { generateAvatarInitials } from '@tetherto/pear-apps-utils-avatar-initials'\nimport { Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { useFavicon } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './RecordItemIcon.styles'\nimport { RECORD_COLOR_BY_TYPE } from '../../constants/recordColorByType'\n\ntype RecordLike = {\n  type: string\n  data?: {\n    title?: string\n    websites?: string[]\n  }\n}\n\ntype RecordItemIconProps = {\n  record: RecordLike\n  size?: number\n  testId?: string\n}\n\nexport const RecordItemIcon = ({\n  record,\n  size = 32,\n  testId\n}: RecordItemIconProps) => {\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors, size)\n\n  const websiteDomain =\n    record.type === 'login' ? record.data?.websites?.[0] : undefined\n  const { faviconSrc, isLoading } = useFavicon({ url: websiteDomain ?? '' })\n\n  const showFavicon = !!faviconSrc && !isLoading\n  const initials = generateAvatarInitials(record.data?.title ?? '')\n  const color =\n    RECORD_COLOR_BY_TYPE[record.type as keyof typeof RECORD_COLOR_BY_TYPE] ??\n    theme.colors.colorTextPrimary\n\n  return (\n    <div style={styles.wrapper} data-testid={testId}>\n      {showFavicon ? (\n        <img src={faviconSrc} alt=\"\" style={styles.image} />\n      ) : (\n        <Text\n          variant={size >= 32 ? 'labelEmphasized' : 'caption'}\n          color={color}\n        >\n          {initials}\n        </Text>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/components/RecordItemIcon/index.ts",
    "content": "export { RecordItemIcon } from './RecordItemIcon'\n"
  },
  {
    "path": "src/components/RecordSortActionsPopupContent/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { MenuCard, MenuItem } from './styles'\nimport { CheckIcon } from '../../lib-react-components'\n\n/**\n * @param {{\n * menuItems: Array<string>,\n * onClick: (type: 'recent' | 'newToOld' | 'oldToNew') => void,\n * }}\n */\nexport const RecordSortActionsPopupContent = ({\n  menuItems,\n  onClick,\n  onClose,\n  selectedType\n}) => {\n  const handleMenuItemClick = (e, type) => {\n    e.stopPropagation()\n\n    onClick(type)\n\n    onClose()\n  }\n\n  return html`\n    <${MenuCard}>\n      ${menuItems.map(\n        (item) => html`\n          <${MenuItem}\n            key=${item.name}\n            data-testid=${`sort-option-${item.type}`}\n            onClick=${(e) => handleMenuItemClick(e, item.type)}\n          >\n            <div>\n              <${item.icon} size=\"24\" />\n\n              ${item.name}\n            </div>\n\n            ${selectedType === item.type && html`<${CheckIcon} size=\"24\" />`}\n          <//>\n        `\n      )}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/RecordSortActionsPopupContent/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { RecordSortActionsPopupContent } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../lib-react-components', () => ({\n  CheckIcon: () => <svg data-testid=\"check-icon\" />\n}))\n\ndescribe('RecordSortActionsPopupContent Component', () => {\n  const mockMenuItems = [\n    {\n      name: 'Recent',\n      type: 'recent',\n      icon: () => <svg data-testid=\"recent-icon\" />\n    },\n    {\n      name: 'Newest First',\n      type: 'newToOld',\n      icon: () => <svg data-testid=\"new-to-old-icon\" />\n    },\n    {\n      name: 'Oldest First',\n      type: 'oldToNew',\n      icon: () => <svg data-testid=\"old-to-new-icon\" />\n    }\n  ]\n\n  const mockOnClick = jest.fn()\n  const mockOnClose = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with all menu items', () => {\n    const { getByText, queryAllByTestId, container } = render(\n      <ThemeProvider>\n        <RecordSortActionsPopupContent\n          menuItems={mockMenuItems}\n          onClick={mockOnClick}\n          onClose={mockOnClose}\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByText('Recent')).toBeInTheDocument()\n    expect(getByText('Newest First')).toBeInTheDocument()\n    expect(getByText('Oldest First')).toBeInTheDocument()\n    expect(queryAllByTestId(/.*-icon/).length).toBe(3)\n    expect(container).toMatchSnapshot()\n  })\n\n  test('shows check icon for selected item', () => {\n    const { queryAllByTestId } = render(\n      <ThemeProvider>\n        <RecordSortActionsPopupContent\n          menuItems={mockMenuItems}\n          onClick={mockOnClick}\n          onClose={mockOnClose}\n          selectedType=\"newToOld\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(queryAllByTestId('check-icon').length).toBe(1)\n  })\n\n  test('calls onClick and onClose when menu item is clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <RecordSortActionsPopupContent\n          menuItems={mockMenuItems}\n          onClick={mockOnClick}\n          onClose={mockOnClose}\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Recent'))\n    expect(mockOnClick).toHaveBeenCalledWith('recent')\n    expect(mockOnClose).toHaveBeenCalled()\n  })\n\n  test('renders correctly with no selected item', () => {\n    const { queryAllByTestId } = render(\n      <ThemeProvider>\n        <RecordSortActionsPopupContent\n          menuItems={mockMenuItems}\n          onClick={mockOnClick}\n          onClose={mockOnClose}\n          selectedType={null}\n        />\n      </ThemeProvider>\n    )\n\n    expect(queryAllByTestId('check-icon').length).toBe(0)\n  })\n\n  test('renders correctly with empty menu items', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <RecordSortActionsPopupContent\n          menuItems={[]}\n          onClick={mockOnClick}\n          onClose={mockOnClose}\n        />\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toBeEmptyDOMElement()\n  })\n})\n"
  },
  {
    "path": "src/components/RecordSortActionsPopupContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const MenuCard = styled.div`\n  position: absolute;\n  font-family: 'Inter';\n  font-size: 10px;\n  align-items: flex-start;\n  display: flex;\n  padding: 5px;\n  flex-direction: column;\n  gap: 3px;\n  overflow: hidden;\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n`\n\nexport const MenuItem = styled.div`\n  display: flex;\n  padding: 4px 0px;\n  align-items: center;\n  justify-content: space-between;\n  gap: 5px;\n  align-self: stretch;\n  word-break: keep-all;\n  white-space: nowrap;\n  cursor: pointer;\n  color: ${({ theme }) => theme.colors.white.mode1};\n\n  & > div:first-child {\n    display: flex;\n    align-items: center;\n    gap: 5px;\n  }\n`\n"
  },
  {
    "path": "src/components/RecordTypeMenu/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { useRecordMenuItems } from '../../hooks/useRecordMenuItems'\nimport { MenuDropdown } from '../MenuDropdown'\n\n/**\n * @param {{\n *  selectedRecord?: {\n *    name: string;\n *    icon?: React.ReactNode;\n *  },\n *  onRecordSelect: (record: {\n *    name: string;\n *    icon?: React.ReactNode;\n *  }) => void,\n *  testId?: string\n * }} props\n */\nexport const RecordTypeMenu = ({ selectedRecord, onRecordSelect, testId }) => {\n  const { defaultItems } = useRecordMenuItems()\n\n  const selectedItem = defaultItems.filter(\n    (item) => item.type === selectedRecord\n  )?.[0]\n\n  return html`\n    <${MenuDropdown}\n      selectedItem=${selectedItem}\n      onItemSelect=${onRecordSelect}\n      items=${defaultItems}\n      testId=${testId}\n    />\n  `\n}\n"
  },
  {
    "path": "src/components/RecordTypeMenu/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { RecordTypeMenu } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../hooks/useRecordMenuItems', () => ({\n  useRecordMenuItems: () => ({\n    defaultItems: [\n      {\n        name: 'Login',\n        type: 'login',\n        icon: () => <svg data-testid=\"login-icon\" />\n      },\n      {\n        name: 'Card',\n        type: 'card',\n        icon: () => <svg data-testid=\"card-icon\" />\n      },\n      {\n        name: 'Note',\n        type: 'note',\n        icon: () => <svg data-testid=\"note-icon\" />\n      }\n    ]\n  })\n}))\n\njest.mock('../MenuDropdown', () => ({\n  MenuDropdown: ({ selectedItem, onItemSelect, items }) => (\n    <div data-testid=\"menu-dropdown\">\n      <div data-testid=\"selected-item\">{selectedItem?.name}</div>\n      <ul>\n        {items.map((item) => (\n          <li\n            key={item.type}\n            data-testid={`menu-item-${item.type}`}\n            onClick={() => onItemSelect(item)}\n          >\n            {item.name}\n            {item.icon && item.icon()}\n          </li>\n        ))}\n      </ul>\n    </div>\n  )\n}))\n\ndescribe('RecordTypeMenu Component', () => {\n  const mockOnRecordSelect = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with no selected record', () => {\n    const { getByTestId, container } = render(\n      <ThemeProvider>\n        <RecordTypeMenu onRecordSelect={mockOnRecordSelect} />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('menu-dropdown')).toBeInTheDocument()\n    expect(getByTestId('selected-item')).toBeEmptyDOMElement()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('passes the correct selected item when selectedRecord is provided', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <RecordTypeMenu\n          selectedRecord=\"card\"\n          onRecordSelect={mockOnRecordSelect}\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('selected-item')).toHaveTextContent('Card')\n  })\n\n  test('calls onRecordSelect when a menu item is clicked', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <RecordTypeMenu onRecordSelect={mockOnRecordSelect} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByTestId('menu-item-login'))\n    expect(mockOnRecordSelect).toHaveBeenCalledTimes(1)\n    expect(mockOnRecordSelect).toHaveBeenCalledWith({\n      name: 'Login',\n      type: 'login',\n      icon: expect.any(Function)\n    })\n  })\n\n  test('renders all menu items from useRecordMenuItems hook', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <RecordTypeMenu onRecordSelect={mockOnRecordSelect} />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('menu-item-login')).toBeInTheDocument()\n    expect(getByTestId('menu-item-card')).toBeInTheDocument()\n    expect(getByTestId('menu-item-note')).toBeInTheDocument()\n  })\n\n  test('handles case when selectedRecord does not match any item', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <RecordTypeMenu\n          selectedRecord=\"non-existent\"\n          onRecordSelect={mockOnRecordSelect}\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('selected-item')).toBeEmptyDOMElement()\n  })\n})\n"
  },
  {
    "path": "src/components/Select/SelectItem/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { SelectItemWrapper } from './styles'\n\n/**\n * @param {{\n *    onClick: () => void,\n *    item: { label: string }\n *  }} props\n */\nexport const SelectItem = ({ item, onClick, testId }) => html`\n  <${SelectItemWrapper} data-testid=${testId} onClick=${() => onClick?.()}>\n    ${item.label}\n  <//>\n`\n"
  },
  {
    "path": "src/components/Select/SelectItem/index.test.js",
    "content": "import React from 'react'\n\nimport { fireEvent, render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SelectItem } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('SelectItem Component', () => {\n  const mockOnClick = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with item name', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <SelectItem item={{ label: 'English' }} onClick={mockOnClick} />\n      </ThemeProvider>\n    )\n\n    expect(getByText('English')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('calls onClick when clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <SelectItem item={{ label: 'English' }} onClick={mockOnClick} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('English'))\n    expect(mockOnClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders correctly with a different item name', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <SelectItem item={{ label: 'Spanish' }} onClick={mockOnClick} />\n      </ThemeProvider>\n    )\n\n    expect(getByText('Spanish')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/components/Select/SelectItem/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const SelectItemWrapper = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  padding: 5px 10px;\n  font-weight: 400;\n  line-height: normal;\n  cursor: pointer;\n  white-space: nowrap;\n`\n"
  },
  {
    "path": "src/components/Select/SelectLabel/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Label } from './styles'\nimport { ArrowDownIcon, ArrowUpIcon } from '../../../lib-react-components'\n\n/**\n * @param {{\n *    selectedItem?: { label: string },\n *    isOpen: boolean,\n *    setIsOpen?: (isOpen: boolean) => void,\n *    placeholder: string\n *  }} props\n */\nexport const SelectLabel = ({\n  selectedItem,\n  isOpen,\n  setIsOpen,\n  placeholder,\n  testId\n}) => html`\n  <${Label} data-testid=${testId} onClick=${() => setIsOpen?.(!isOpen)}>\n    <span> ${selectedItem?.label || placeholder} </span>\n    <${isOpen ? ArrowUpIcon : ArrowDownIcon} size=\"24\" />\n  <//>\n`\n"
  },
  {
    "path": "src/components/Select/SelectLabel/index.test.js",
    "content": "import React from 'react'\n\nimport { fireEvent, render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SelectLabel } from './index'\n\nimport '@testing-library/jest-dom'\n\ndescribe('SelectLabel Component', () => {\n  const mockSetIsOpen = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with placeholder when no selected item', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <SelectLabel\n          isOpen={false}\n          setIsOpen={mockSetIsOpen}\n          placeholder=\"Select an option\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByText('Select an option')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders correctly with selected item', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <SelectLabel\n          selectedItem={{ label: 'English' }}\n          isOpen={false}\n          setIsOpen={mockSetIsOpen}\n          placeholder=\"Select an option\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByText('English')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders ArrowDownIcon when isOpen is false', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <SelectLabel\n          isOpen={false}\n          setIsOpen={mockSetIsOpen}\n          placeholder=\"Select an option\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(container.querySelector('svg')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders ArrowUpIcon when isOpen is true', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <SelectLabel\n          isOpen={true}\n          setIsOpen={mockSetIsOpen}\n          placeholder=\"Select an option\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(container.querySelector('svg')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('calls setIsOpen with the correct value when clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <SelectLabel\n          isOpen={false}\n          setIsOpen={mockSetIsOpen}\n          placeholder=\"Select an option\"\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Select an option'))\n    expect(mockSetIsOpen).toHaveBeenCalledTimes(1)\n    expect(mockSetIsOpen).toHaveBeenCalledWith(true)\n  })\n})\n"
  },
  {
    "path": "src/components/Select/SelectLabel/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Label = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  width: 100%;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-radius: 10px;\n  padding: 7px 10px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 700;\n  line-height: normal;\n  cursor: pointer;\n  white-space: nowrap;\n`\n"
  },
  {
    "path": "src/components/Select/index.js",
    "content": "import { useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { SelectItem } from './SelectItem'\nimport { SelectLabel } from './SelectLabel'\nimport { SelectWrapper, SelectDropdown } from './styles'\nimport { useOutsideClick } from '../../hooks/useOutsideClick'\n\n/**\n * @param {{\n *    selectedItem?: { label: string },\n *    onItemSelect: (item: { label: string, value: string }) => void,\n *    items: Array<{ label: string, value: string }>,\n *    placeholder: string\n *  }} props\n */\nexport const Select = ({\n  selectedItem,\n  onItemSelect,\n  items,\n  placeholder,\n  testId\n}) => {\n  const [isOpen, setIsOpen] = useState(false)\n\n  const wrapperRef = useOutsideClick({\n    onOutsideClick: () => {\n      setIsOpen(false)\n    }\n  })\n\n  const handleSelect = (item) => {\n    onItemSelect(item)\n    setIsOpen(false)\n  }\n\n  return html`\n    <${SelectWrapper} ref=${wrapperRef}>\n      <${SelectLabel}\n        selectedItem=${selectedItem}\n        isOpen=${isOpen}\n        setIsOpen=${setIsOpen}\n        placeholder=${placeholder}\n        testId=${testId}\n      />\n\n      ${isOpen &&\n      html`<${SelectDropdown}>\n        ${items.map(\n          (item) => html`\n            <${SelectItem}\n              key=${item.label}\n              item=${item}\n              testId=${item.testId}\n              onClick=${() => handleSelect(item)}\n            />\n          `\n        )}\n      <//>`}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/Select/index.test.js",
    "content": "import React from 'react'\n\nimport { fireEvent, render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { Select } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('Select Component', () => {\n  const mockOnItemSelect = jest.fn()\n\n  const items = [\n    { label: 'English' },\n    { label: 'Italian' },\n    { label: 'Spanish' },\n    { label: 'French' }\n  ]\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with placeholder when no selected item', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <Select\n          items={items}\n          onItemSelect={mockOnItemSelect}\n          placeholder=\"Select a language\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByText('Select a language')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders correctly with a selected item', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <Select\n          selectedItem={{ label: 'English' }}\n          items={items}\n          onItemSelect={mockOnItemSelect}\n          placeholder=\"Select a language\"\n        />\n      </ThemeProvider>\n    )\n\n    expect(getByText('English')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('opens dropdown when label is clicked', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <Select\n          items={items}\n          onItemSelect={mockOnItemSelect}\n          placeholder=\"Select a language\"\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Select a language'))\n    expect(getByText('English')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('calls onItemSelect with the correct item when an option is clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <Select\n          items={items}\n          onItemSelect={mockOnItemSelect}\n          placeholder=\"Select a language\"\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Select a language'))\n    fireEvent.click(getByText('Italian'))\n\n    expect(mockOnItemSelect).toHaveBeenCalledTimes(1)\n    expect(mockOnItemSelect).toHaveBeenCalledWith({ label: 'Italian' })\n  })\n\n  test('closes dropdown when an option is selected', () => {\n    const { getByText, queryByText } = render(\n      <ThemeProvider>\n        <Select\n          items={items}\n          onItemSelect={mockOnItemSelect}\n          placeholder=\"Select a language\"\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Select a language'))\n    fireEvent.click(getByText('Italian'))\n\n    expect(queryByText('Italian')).not.toBeInTheDocument()\n  })\n\n  test('closes dropdown when clicking outside', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <Select\n          items={items}\n          onItemSelect={mockOnItemSelect}\n          placeholder=\"Select a language\"\n        />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(getByText('Select a language'))\n    fireEvent.mouseDown(document.body)\n\n    expect(container.querySelector('ul')).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/Select/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const SelectWrapper = styled.div`\n  position: relative;\n`\nexport const SelectDropdown = styled.div`\n  margin-top: 1px;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-radius: 10px;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  padding: 7px 0;\n`\n"
  },
  {
    "path": "src/components/SidebarCategory/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport {\n  CategoryButton,\n  CategoryDescription,\n  CategoryIconWrapper,\n  CategoryName,\n  CategoryQuantity\n} from './styles'\n\n/**\n * @param {{\n *  size: 'default' | 'tight',\n *  isSelected: boolean,\n *  categoryName: string,\n *  quantity: number,\n *  color: string,\n *  icon: import('react').ReactNode,\n *  onClick: () => void,\n *  testId?: string\n * }} props\n */\nexport const SidebarCategory = ({\n  size = 'default',\n  isSelected = false,\n  categoryName,\n  quantity = 0,\n  color,\n  icon,\n  onClick,\n  testId\n}) => html`\n  <${CategoryButton}\n    size=${size}\n    color=${color}\n    isSelected=${isSelected}\n    onClick=${onClick}\n    data-testid=${testId}\n  >\n    <${CategoryDescription} size=${size}>\n      <${CategoryIconWrapper} isSelected=${isSelected} color=${color}>\n        <${icon}\n          color=${isSelected ? colors.black.mode1 : color}\n          fill=${true}\n          size=\"24px\"\n        />\n      <//>\n\n      <${CategoryName}>${categoryName}<//>\n    <//>\n\n    <${CategoryQuantity} size=${size}>${quantity}<//>\n  <//>\n`\n"
  },
  {
    "path": "src/components/SidebarCategory/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SidebarCategory } from './index'\nimport '@testing-library/jest-dom'\n\nconst MockIcon = () => <div data-testid=\"mock-icon\">Icon</div>\n\ndescribe('SidebarCategory Component', () => {\n  const defaultProps = {\n    categoryName: 'Test Category',\n    quantity: 5,\n    color: '#ff0000',\n    icon: MockIcon,\n    onClick: jest.fn(),\n    isSelected: false,\n    size: 'default'\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with default props', () => {\n    const { container, getByText, getByTestId } = render(\n      <ThemeProvider>\n        <SidebarCategory {...defaultProps} />\n      </ThemeProvider>\n    )\n    expect(\n      getByText((content) => content.includes('Test Category'))\n    ).toBeInTheDocument()\n    expect(getByText('5')).toBeInTheDocument()\n    expect(getByTestId('mock-icon')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('calls onClick handler when clicked', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <SidebarCategory {...defaultProps} />{' '}\n      </ThemeProvider>\n    )\n    fireEvent.click(getByText('Test Category'))\n    expect(defaultProps.onClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with zero quantity', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <SidebarCategory {...defaultProps} quantity={0} />{' '}\n      </ThemeProvider>\n    )\n    expect(getByText('0')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/SidebarCategory/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nexport const CategoryButton = styled.button.withConfig({\n  shouldForwardProp: (prop) => !['size', 'color', 'isSelected'].includes(prop)\n})`\n  display: flex;\n  font-family: 'Inter';\n  font-size: 16px;\n  line-height: normal;\n  flex-direction: row;\n  justify-content: space-between;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border-radius: 10px;\n  border: 1px solid transparent;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  cursor: pointer;\n  position: relative;\n\n  &:hover {\n    border-color: ${({ color }) => color};\n  }\n\n  ${({ size }) =>\n    size === 'default' &&\n    css`\n      flex: 1;\n      min-width: 121px;\n      padding: 10px 9px;\n    `}\n\n  ${({ size }) =>\n    size === 'tight' &&\n    css`\n      width: 100%;\n      padding: 5px 9px;\n      align-items: center;\n    `}\n  \n    ${({ isSelected, theme, color }) =>\n    isSelected &&\n    css`\n      background: ${color};\n      color: ${theme.colors.black.mode1};\n    `}\n`\n\nexport const CategoryDescription = styled.div`\n  display: flex;\n  gap: 2px;\n  white-space: nowrap;\n  font-weight: 600;\n  width: 100%;\n  text-align: left;\n\n  ${({ size }) =>\n    size === 'default' &&\n    css`\n      flex-direction: column;\n    `}\n\n  ${({ size }) =>\n    size === 'tight' &&\n    css`\n      align-items: center;\n      flex-direction: row;\n    `}\n`\n\nexport const CategoryIconWrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isSelected', 'color'].includes(prop)\n})`\n  display: flex;\n`\n\nexport const CategoryName = styled.span`\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: 100%;\n`\n\nexport const CategoryQuantity = styled.span.withConfig({\n  shouldForwardProp: (prop) => !['size'].includes(prop)\n})`\n  font-weight: 300;\n  position: ${({ size }) => (size === 'default' ? 'absolute' : '')};\n  top: ${({ size }) => (size === 'default' ? '8px' : '')};\n  right: 9px;\n`\n"
  },
  {
    "path": "src/components/SidebarFolder/index.js",
    "content": "import React, { useState } from 'react'\n\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { FolderIcon, KebabMenuIcon, PlusIcon } from '../../lib-react-components'\nimport { EditFolderPopupContent } from '../EditFolderPopupContent'\nimport { PopupMenu } from '../PopupMenu'\nimport {\n  AddIconWrapper,\n  FolderName,\n  NestedFolder,\n  NestedFoldersContainer,\n  NestedItem\n} from './styles'\n\n/**\n * @param {{\n *  isOpen: boolean\n *  onClick: () => void\n *  onAddClick: () => void\n *  isRoot: boolean\n *  name: string\n *  icon: string\n *  isActive: boolean\n *  hasMenu?: boolean\n * }} props\n */\nexport const SidebarFolder = ({\n  onClick,\n  onAddClick,\n  isRoot,\n  name,\n  icon: Icon,\n  isActive,\n  hasMenu = true\n}) => {\n  const [isNewPopupMenuOpen, setIsNewPopupMenuOpen] = useState(false)\n\n  return html`\n    <${React.Fragment}>\n      <${NestedFoldersContainer}>\n        <${NestedItem}>\n          <${NestedFolder}\n            isActive=${isActive}\n            data-testid=\"sidebar-folder\"\n            onClick=${onClick}\n          >\n            ${!isRoot &&\n            html`\n              <${Icon ?? FolderIcon}\n                size=\"24\"\n                color=${isActive ? colors.primary400.mode1 : undefined}\n              />\n            `}\n\n            <${FolderName}>${name}<//>\n\n            ${!isRoot &&\n            hasMenu &&\n            html` <${PopupMenu}\n              side=\"right\"\n              align=\"right\"\n              isOpen=${isNewPopupMenuOpen}\n              setIsOpen=${setIsNewPopupMenuOpen}\n              content=${html` <${EditFolderPopupContent} name=${name} /> `}\n              testId=\"sidebar-folder-options\"\n            >\n              <${KebabMenuIcon} />\n            <//>`}\n          <//>\n        <//>\n\n        ${isRoot &&\n        html`\n          <${AddIconWrapper}\n            data-testid=\"sidebarfolder-button-add\"\n            onClick=${() => onAddClick()}\n          >\n            <${PlusIcon} color=${colors.primary400.mode1} size=\"24\" />\n          <//>\n        `}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/SidebarFolder/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SidebarFolder } from './index'\n\nimport '@testing-library/jest-dom'\n\nconst MockIcon = () => <div data-testid=\"mock-icon\">Icon</div>\n\njest.mock('../PopupMenu', () => ({\n  PopupMenu: ({ title, children }) => (\n    <div data-testid=\"card-single-setting\" data-title={title}>\n      {children}\n    </div>\n  )\n}))\n\njest.mock('../EditFolderPopupContent', () => ({\n  EditFolderPopupContent: ({ title, children }) => (\n    <div data-testid=\"edit-folder-popup-content\" data-title={title}>\n      {children}\n    </div>\n  )\n}))\n\njest.mock('../../lib-react-components', () => ({\n  FolderIcon: () => <div data-testid=\"mock-folder-icon\"></div>,\n  KebabMenuIcon: () => <div data-testid=\"mock-kebab-icon\"></div>,\n  PlusIcon: () => <div data-testid=\"mock-plus-icon\"></div>\n}))\n\ndescribe('SidebarFolder Component', () => {\n  const defaultProps = {\n    isOpen: false,\n    onClick: jest.fn(),\n    onDropDown: jest.fn(),\n    onAddClick: jest.fn(),\n    isRoot: false,\n    name: 'Test Folder',\n    icon: MockIcon,\n    isActive: false\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with default props', () => {\n    const { getByText, getByTestId } = render(\n      <ThemeProvider>\n        <SidebarFolder {...defaultProps} />\n      </ThemeProvider>\n    )\n    expect(getByText('Test Folder')).toBeInTheDocument()\n    expect(getByTestId('mock-icon')).toBeInTheDocument()\n  })\n\n  test('calls onClick handler when clicked', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <SidebarFolder {...defaultProps} />\n      </ThemeProvider>\n    )\n    const wrapper = getByTestId('sidebar-folder')\n    fireEvent.click(wrapper)\n\n    expect(defaultProps.onClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with custom icon when provided', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <SidebarFolder {...defaultProps} />\n      </ThemeProvider>\n    )\n    expect(getByTestId('mock-icon')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/components/SidebarFolder/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const NestedFoldersContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n`\n\nexport const NestedItem = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  cursor: pointer;\n  flex: 1;\n  min-width: 0;\n`\n\nexport const NestedFolder = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isActive'].includes(prop)\n})`\n  display: flex;\n  flex: 1;\n  color: ${({ theme, isActive }) =>\n    isActive ? theme.colors.primary400.mode1 : undefined};\n  align-items: center;\n  gap: 10px;\n  min-width: 0;\n`\n\nexport const AddIconWrapper = styled.div`\n  cursor: pointer;\n`\n\nexport const FolderName = styled.span`\n  flex: 1;\n  cursor: pointer;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  min-width: 0;\n`\n"
  },
  {
    "path": "src/components/SidebarSearch/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { SearchInput, SearchLabelIcon, SidebarSearchContainer } from './styles'\nimport { SearchIcon } from '../../lib-react-components'\n\n/**\n * @param {{\n *  value: string\n *  onChange: (value: string) => void\n *  testId?: string\n * }} props\n */\nexport const SidebarSearch = ({ value, onChange, testId }) => {\n  const { i18n } = useLingui()\n\n  const handleSearch = (e) => {\n    onChange(e.target.value)\n  }\n\n  return html`\n    <${SidebarSearchContainer}>\n      <${SearchLabelIcon}>\n        <${SearchIcon} size=\"24\" />\n      <//>\n\n      <${SearchInput}\n        data-testid=${testId}\n        type=\"search\"\n        value=${value}\n        onChange=${handleSearch}\n        placeholder=${i18n._('Search...')}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/SidebarSearch/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SidebarSearch } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('../../lib-react-components', () => ({\n  SearchIcon: () => <div data-testid=\"search-icon\">SearchIcon</div>\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: { _: (str) => str }\n  })\n}))\n\ndescribe('SidebarSearch Component', () => {\n  const defaultProps = {\n    value: '',\n    onChange: jest.fn()\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with default props', () => {\n    const { container, getByTestId } = render(\n      <ThemeProvider>\n        <SidebarSearch {...defaultProps} />\n      </ThemeProvider>\n    )\n    expect(getByTestId('search-icon')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('calls onChange handler when input changes', () => {\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <SidebarSearch {...defaultProps} />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Search...')\n    fireEvent.change(input, { target: { value: 'test search' } })\n    expect(defaultProps.onChange).toHaveBeenCalledWith('test search')\n  })\n\n  test('displays the current value in the input', () => {\n    const props = {\n      ...defaultProps,\n      value: 'current search'\n    }\n    const { getByDisplayValue } = render(\n      <ThemeProvider>\n        <SidebarSearch {...props} />\n      </ThemeProvider>\n    )\n    expect(getByDisplayValue('current search')).toBeInTheDocument()\n  })\n\n  test('has the correct placeholder text', () => {\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <SidebarSearch {...defaultProps} />\n      </ThemeProvider>\n    )\n    expect(getByPlaceholderText('Search...')).toBeInTheDocument()\n  })\n\n  test('input has search type attribute', () => {\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <SidebarSearch {...defaultProps} />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Search...')\n    expect(input).toHaveAttribute('type', 'search')\n  })\n})\n"
  },
  {
    "path": "src/components/SidebarSearch/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const SidebarSearchContainer = styled.div`\n  height: 29px;\n  font-family: 'Inter';\n  font-size: 16px;\n  display: flex;\n  align-items: center;\n  padding: 5px 30px;\n  position: relative;\n`\n\nexport const SearchLabelIcon = styled.label`\n  position: absolute;\n  left: 4px;\n\n  & path {\n    stroke: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const SearchInput = styled.input`\n  border: none;\n  background: transparent;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  padding: 0;\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 500;\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey200.mode1};\n  }\n\n  &:focus {\n    border: none;\n    box-shadow: none;\n    outline: none;\n  }\n\n  &::-webkit-search-cancel-button {\n    appearance: none;\n  }\n`\n"
  },
  {
    "path": "src/components/SwitchWithLabel/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { ContentWrapper, Description, Label, Wrapper } from './styles'\nimport { Switch } from '../../lib-react-components'\n\n/**\n * @param {{\n *  isOn?: boolean,\n *  onChange?: (isOn: boolean) => void\n *  label?: string,\n *  description?: string,\n *  isLabelBold?: boolean\n *  isSwitchFirst?: boolean\n *  stretch?: boolean\n *  disabled?: boolean,\n *  testId?: string\n * }} props\n */\nexport const SwitchWithLabel = ({\n  isOn,\n  onChange,\n  label,\n  description,\n  isLabelBold,\n  isSwitchFirst = false,\n  stretch = true,\n  disabled = false,\n  testId\n}) => {\n  const toggleSwitch = () => {\n    if (!disabled) {\n      onChange?.(!isOn)\n    }\n  }\n\n  return html`\n    <${Wrapper}\n      isSwitchFirst=${isSwitchFirst}\n      stretch=${stretch}\n      onClick=${toggleSwitch}\n      data-testid=${testId}\n    >\n      <${ContentWrapper}>\n        <${Label} isBold=${isLabelBold}> ${label} <//>\n        ${description && html`<${Description}> ${description} <//>`}\n      <//>\n      <${Switch}\n        testId=${`switchwithlabel-switch-${isOn ? 'on' : 'off'}`}\n        isOn=${isOn}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/SwitchWithLabel/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport '@testing-library/jest-dom'\nimport { SwitchWithLabel } from './index'\n\njest.mock('../../lib-react-components', () => ({\n  Switch: ({ isOn }) => (\n    <div data-testid=\"switch\" data-is-on={isOn}>\n      Switch Component\n    </div>\n  )\n}))\n\ndescribe('SwitchWithLabel Component', () => {\n  const defaultProps = {\n    isOn: false,\n    onChange: jest.fn(),\n    label: 'Test Label',\n    isLabelBold: false\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with default props', () => {\n    const { container, getByText, getByTestId } = render(\n      <ThemeProvider>\n        <SwitchWithLabel {...defaultProps} />\n      </ThemeProvider>\n    )\n\n    expect(getByText('Test Label')).toBeInTheDocument()\n    expect(getByTestId('switch')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  test('calls onChange handler when clicked', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <SwitchWithLabel {...defaultProps} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(container.firstChild)\n    expect(defaultProps.onChange).toHaveBeenCalledWith(true)\n  })\n\n  test('toggles from on to off when clicked', () => {\n    const props = {\n      ...defaultProps,\n      isOn: true\n    }\n\n    const { container } = render(\n      <ThemeProvider>\n        <SwitchWithLabel {...props} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(container.firstChild)\n    expect(props.onChange).toHaveBeenCalledWith(false)\n  })\n\n  test('renders switch with correct isOn state', () => {\n    const props = {\n      ...defaultProps,\n      isOn: true\n    }\n\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <SwitchWithLabel {...props} />\n      </ThemeProvider>\n    )\n\n    const switchComponent = getByTestId('switch')\n    expect(switchComponent).toHaveAttribute('data-is-on', 'true')\n  })\n\n  test('does not throw when onChange is not provided', () => {\n    const props = {\n      ...defaultProps,\n      onChange: undefined\n    }\n\n    const { container } = render(\n      <ThemeProvider>\n        <SwitchWithLabel {...props} />\n      </ThemeProvider>\n    )\n\n    expect(() => {\n      fireEvent.click(container.firstChild)\n    }).not.toThrow()\n  })\n})\n"
  },
  {
    "path": "src/components/SwitchWithLabel/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  flex-direction: ${({ isSwitchFirst }) =>\n    isSwitchFirst ? 'row-reverse' : 'row'};\n  justify-content: ${({ stretch, isSwitchFirst }) =>\n    stretch ? 'space-between' : isSwitchFirst ? 'flex-end' : 'flex-start'};\n  gap: 8px;\n  cursor: pointer;\n`\n\nexport const ContentWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n`\n\nexport const Label = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isBold'].includes(prop)\n})`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: ${({ isBold }) => (isBold ? '600' : '400')};\n`\n\nexport const Description = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 300;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/components/TimerBar/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { TimerBar } from './index'\n\nconst mockUseTimerAnimation = jest.fn()\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useTimerAnimation: (...args) => mockUseTimerAnimation(...args)\n}))\n\njest.mock('../OtpCodeField/utils', () => ({\n  getTimerColor: (expiring) => (expiring ? '#red' : '#green')\n}))\n\njest.mock('./styles', () => ({\n  styles: {\n    wrapper: {},\n    track: {},\n    fill: {},\n    timer: {}\n  }\n}))\n\ndescribe('TimerBar', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: false,\n      expiring: false,\n      targetTime: 20\n    })\n  })\n\n  test('renders timer text with timeRemaining', () => {\n    const { container } = render(<TimerBar timeRemaining={15} period={30} />)\n\n    expect(container.querySelector('span')).toHaveTextContent('15s')\n  })\n\n  test('sets progress to 0 when timeRemaining is null', () => {\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: false,\n      expiring: false,\n      targetTime: 0\n    })\n\n    const { container } = render(<TimerBar timeRemaining={null} period={30} />)\n\n    const fill = container.querySelectorAll('div')[2]\n    expect(fill.style.width).toBe('0%')\n  })\n\n  test('sets progress to 0 when period is 0', () => {\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: false,\n      expiring: false,\n      targetTime: 10\n    })\n\n    const { container } = render(<TimerBar timeRemaining={10} period={0} />)\n\n    const fill = container.querySelectorAll('div')[2]\n    expect(fill.style.width).toBe('0%')\n  })\n\n  test('applies noTransition style when set', () => {\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: true,\n      expiring: false,\n      targetTime: 30\n    })\n\n    const { container } = render(<TimerBar timeRemaining={30} period={30} />)\n\n    const fill = container.querySelectorAll('div')[2]\n    expect(fill.style.transition).toBe('none')\n  })\n\n  test('applies linear transition when noTransition is false', () => {\n    const { container } = render(<TimerBar timeRemaining={20} period={30} />)\n\n    const fill = container.querySelectorAll('div')[2]\n    expect(fill.style.transition).toBe('width 1s linear')\n  })\n\n  test('passes animated prop to useTimerAnimation', () => {\n    render(<TimerBar timeRemaining={20} period={30} animated={false} />)\n\n    expect(mockUseTimerAnimation).toHaveBeenCalledWith(20, 30, false)\n  })\n\n  test('defaults animated to true', () => {\n    render(<TimerBar timeRemaining={20} period={30} />)\n\n    expect(mockUseTimerAnimation).toHaveBeenCalledWith(20, 30, true)\n  })\n})\n"
  },
  {
    "path": "src/components/TimerBar/index.ts",
    "content": "import { html } from 'htm/react'\nimport { useTimerAnimation } from '@tetherto/pearpass-lib-vault'\n\nimport { getTimerColor } from '../OtpCodeField/utils'\nimport { styles } from './styles'\n\ninterface TimerBarProps {\n  timeRemaining: number | null\n  period: number\n  animated?: boolean\n}\n\nexport const TimerBar = ({ timeRemaining, period, animated = true }: TimerBarProps) => {\n  const { noTransition, expiring, targetTime } = useTimerAnimation(\n    timeRemaining,\n    period,\n    animated\n  )\n\n  const progress =\n    timeRemaining !== null && period ? (targetTime / period) * 100 : 0\n\n  const color = getTimerColor(expiring)\n\n  return html`\n    <div style=${styles.wrapper}>\n      <div style=${styles.track}>\n        <div\n          style=${{\n            ...styles.fill,\n            background: color,\n            width: `${progress}%`,\n            transition: noTransition ? 'none' : 'width 1s linear'\n          }}\n        />\n      </div>\n      <span style=${{ ...styles.timer, color }}>\n        ${timeRemaining}s\n      </span>\n    </div>\n  `\n}\n"
  },
  {
    "path": "src/components/TimerBar/styles.ts",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nexport const styles = {\n  wrapper: {\n    display: 'flex',\n    alignItems: 'center',\n    gap: 8,\n    padding: '4px 10px 6px',\n    width: '100%'\n  },\n  track: {\n    flex: 1,\n    height: 6,\n    borderRadius: 20,\n    background: `${colors.grey100.mode1}33`,\n    overflow: 'hidden'\n  },\n  fill: {\n    height: '100%',\n    borderRadius: 10\n  },\n  timer: {\n    fontFamily: 'Inter',\n    fontSize: 12,\n    fontWeight: 500,\n    minWidth: 22,\n    textAlign: 'right' as const\n  }\n}\n"
  },
  {
    "path": "src/components/TimerCircle/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { TimerCircle } from './index'\n\nconst mockUseTimerAnimation = jest.fn()\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useTimerAnimation: (...args) => mockUseTimerAnimation(...args)\n}))\n\njest.mock('../OtpCodeField/utils', () => ({\n  getTimerColor: (expiring) => (expiring ? '#red' : '#green')\n}))\n\njest.mock('./styles', () => ({\n  styles: {\n    wrapper: {},\n    svg: {},\n    circleBg: {}\n  }\n}))\n\nconst CIRCUMFERENCE = 2 * Math.PI * 5.5\n\ndescribe('TimerCircle', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: false,\n      expiring: false,\n      targetTime: 20\n    })\n  })\n\n  test('renders svg with correct viewBox', () => {\n    const { container } = render(<TimerCircle timeRemaining={20} period={30} />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toHaveAttribute('viewBox', '0 0 14 14')\n  })\n\n  test('renders two circles', () => {\n    const { container } = render(<TimerCircle timeRemaining={20} period={30} />)\n\n    const circles = container.querySelectorAll('circle')\n    expect(circles).toHaveLength(2)\n  })\n\n  test('computes dashOffset from targetTime and period', () => {\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: false,\n      expiring: false,\n      targetTime: 15\n    })\n\n    const { container } = render(<TimerCircle timeRemaining={15} period={30} />)\n\n    const fillCircle = container.querySelectorAll('circle')[1]\n    const expectedOffset = (1 - 15 / 30) * CIRCUMFERENCE\n    expect(fillCircle).toHaveAttribute(\n      'stroke-dashoffset',\n      String(expectedOffset)\n    )\n  })\n\n  test('sets dashOffset to 0 when timeRemaining is null', () => {\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: false,\n      expiring: false,\n      targetTime: 0\n    })\n\n    const { container } = render(\n      <TimerCircle timeRemaining={null} period={30} />\n    )\n\n    const fillCircle = container.querySelectorAll('circle')[1]\n    expect(fillCircle).toHaveAttribute('stroke-dashoffset', '0')\n  })\n\n  test('applies noTransition style', () => {\n    mockUseTimerAnimation.mockReturnValue({\n      noTransition: true,\n      expiring: false,\n      targetTime: 30\n    })\n\n    const { container } = render(<TimerCircle timeRemaining={30} period={30} />)\n\n    const fillCircle = container.querySelectorAll('circle')[1]\n    expect(fillCircle.style.transition).toBe('none')\n  })\n\n  test('applies linear transition when noTransition is false', () => {\n    const { container } = render(<TimerCircle timeRemaining={20} period={30} />)\n\n    const fillCircle = container.querySelectorAll('circle')[1]\n    expect(fillCircle.style.transition).toBe('stroke-dashoffset 1s linear')\n  })\n\n  test('passes animated prop to useTimerAnimation', () => {\n    render(<TimerCircle timeRemaining={20} period={30} animated={false} />)\n\n    expect(mockUseTimerAnimation).toHaveBeenCalledWith(20, 30, false)\n  })\n\n  test('defaults animated to true', () => {\n    render(<TimerCircle timeRemaining={20} period={30} />)\n\n    expect(mockUseTimerAnimation).toHaveBeenCalledWith(20, 30, true)\n  })\n})\n"
  },
  {
    "path": "src/components/TimerCircle/index.ts",
    "content": "import { html } from 'htm/react'\nimport { useTimerAnimation } from '@tetherto/pearpass-lib-vault'\n\nimport { getTimerColor } from '../OtpCodeField/utils'\nimport { styles } from './styles'\n\nconst SIZE = 14\nconst RADIUS = 5.5\nconst STROKE_WIDTH = 1.5\nconst CENTER = SIZE / 2\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS\n\ninterface TimerCircleProps {\n  timeRemaining: number | null\n  period: number\n  animated?: boolean\n}\n\nexport const TimerCircle = ({ timeRemaining, period, animated = true }: TimerCircleProps) => {\n  const { noTransition, expiring, targetTime } = useTimerAnimation(\n    timeRemaining,\n    period,\n    animated\n  )\n\n  const dashOffset =\n    timeRemaining !== null ? (1 - targetTime / period) * CIRCUMFERENCE : 0\n\n  const color = getTimerColor(expiring)\n\n  return html`\n    <div style=${styles.wrapper}>\n      <svg\n        width=${SIZE}\n        height=${SIZE}\n        viewBox=\"0 0 ${SIZE} ${SIZE}\"\n        style=${styles.svg}\n      >\n        <circle\n          cx=${CENTER}\n          cy=${CENTER}\n          r=${RADIUS}\n          style=${styles.circleBg}\n        />\n        <circle\n          cx=${CENTER}\n          cy=${CENTER}\n          r=${RADIUS}\n          fill=\"none\"\n          stroke=${color}\n          strokeWidth=${STROKE_WIDTH}\n          strokeLinecap=\"round\"\n          strokeDasharray=${CIRCUMFERENCE}\n          strokeDashoffset=${dashOffset}\n          style=${{ transition: noTransition ? 'none' : 'stroke-dashoffset 1s linear' }}\n        />\n      </svg>\n    </div>\n  `\n}\n"
  },
  {
    "path": "src/components/TimerCircle/styles.ts",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nexport const styles = {\n  wrapper: {\n    width: 14,\n    height: 14,\n    flexShrink: 0\n  },\n  svg: {\n    width: 14,\n    height: 14,\n    transform: 'rotate(-90deg)'\n  },\n  circleBg: {\n    fill: 'none',\n    stroke: `${colors.grey100.mode1}33`,\n    strokeWidth: 1.5\n  }\n}\n"
  },
  {
    "path": "src/components/TitleBar/index.js",
    "content": "import { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\nimport styled from 'styled-components'\n\nimport { PearpassLogo } from '../../svgs/PearpassLogo'\nimport { isV2 } from '../../utils/designVersion'\n\nconst BarInner = styled.div`\n  position: relative;\n  display: flex;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center;\n  padding: 12px 16px;\n`\n\nconst Brand = styled.div`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  min-height: 20px;\n  user-select: none;\n`\n\nexport const TitleBar = () => {\n  if (!isV2()) return null\n  if (process.platform !== 'darwin') return null\n\n  const { theme } = useTheme()\n  const backgroundColor = theme.colors.colorBackground\n\n  return html`\n    <div\n      id=\"bar\"\n      style=${{\n        backgroundColor\n      }}\n    >\n      <${BarInner}>\n        <${Brand}>\n          <${PearpassLogo} />\n        <//>\n      <//>\n    </div>\n  `\n}\n"
  },
  {
    "path": "src/components/Toasts/index.js",
    "content": "import { Snackbar } from '@tetherto/pearpass-lib-ui-kit'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { ToastContainer, ToastStack } from './styles'\nimport { isV2 } from '../../utils/designVersion'\n\n/**\n * @param {{\n *  toasts: Array.<{\n *    message: string\n *    icon?: import('react').ElementType\n *  }>\n * }} props\n */\nexport const Toasts = ({ toasts }) => {\n  const v2 = isV2()\n\n  return html`\n    <${ToastStack}>\n      ${toasts?.map((toast, index) => {\n        const Icon = toast.icon\n        if (v2) {\n          return html`\n            <${Snackbar}\n              key=${index}\n              text=${toast.message}\n              icon=${Icon ? html`<${Icon} />` : undefined}\n            />\n          `\n        }\n        return html`\n          <${ToastContainer} key=${index}>\n            ${Icon && html`<${Icon} color=${colors.black.mode1} />`}\n            ${toast.message}\n          <//>\n        `\n      })}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/components/Toasts/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { Toasts } from './index'\nimport '@testing-library/jest-dom'\n\njest.mock('./styles', () => ({\n  ToastContainer: ({ children }) => (\n    <div data-testid=\"toast-container\">{children}</div>\n  ),\n  ToastStack: ({ children }) => <div data-testid=\"toast-stack\">{children}</div>\n}))\n\nconst mockSnackbar = jest.fn(({ text, icon }) => (\n  <div data-testid=\"snackbar\">\n    {icon ? <div data-testid=\"snackbar-icon\">{icon}</div> : null}\n    <span>{text}</span>\n  </div>\n))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  Snackbar: (props) => mockSnackbar(props)\n}))\n\njest.mock('../../utils/designVersion', () => ({\n  isV2: () => true\n}))\n\ndescribe('Toasts Component', () => {\n  const mockIcon = jest.fn(() => <div data-testid=\"mock-icon\">Icon</div>)\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders correctly with toasts', () => {\n    const toasts = [\n      { message: 'Success message', icon: mockIcon },\n      { message: 'Error message', icon: null }\n    ]\n\n    const { getByTestId, getAllByTestId, getByText, container } = render(\n      <ThemeProvider>\n        <Toasts toasts={toasts} />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('toast-stack')).toBeInTheDocument()\n    expect(getAllByTestId('snackbar')).toHaveLength(2)\n    expect(getByText('Success message')).toBeInTheDocument()\n    expect(getByText('Error message')).toBeInTheDocument()\n    expect(getByTestId('mock-icon')).toBeInTheDocument()\n    expect(mockSnackbar).toHaveBeenCalledTimes(2)\n    expect(mockSnackbar).toHaveBeenNthCalledWith(\n      1,\n      expect.objectContaining({\n        text: 'Success message',\n        icon: expect.anything()\n      })\n    )\n    expect(mockSnackbar).toHaveBeenNthCalledWith(\n      2,\n      expect.objectContaining({\n        text: 'Error message',\n        icon: undefined\n      })\n    )\n    expect(container).toMatchSnapshot()\n  })\n\n  test('renders correctly with empty toasts array', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <Toasts toasts={[]} />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('toast-stack')).toBeInTheDocument()\n    expect(mockSnackbar).not.toHaveBeenCalled()\n  })\n\n  test('renders correctly with undefined toasts', () => {\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <Toasts toasts={undefined} />\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('toast-stack')).toBeInTheDocument()\n    expect(mockSnackbar).not.toHaveBeenCalled()\n  })\n\n  test('passes icon through to Snackbar', () => {\n    const toasts = [{ message: 'Test message', icon: mockIcon }]\n\n    render(\n      <ThemeProvider>\n        <Toasts toasts={toasts} />\n      </ThemeProvider>\n    )\n\n    expect(mockSnackbar).toHaveBeenCalledWith(\n      expect.objectContaining({\n        text: 'Test message',\n        icon: expect.anything()\n      })\n    )\n  })\n})\n"
  },
  {
    "path": "src/components/Toasts/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ToastStack = styled.div`\n  position: fixed;\n  left: 50%;\n  transform: translateX(-50%);\n  bottom: 23.5px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  z-index: 1000;\n`\n\nexport const ToastContainer = styled.div`\n  display: flex;\n  padding: 5px 10px;\n  justify-content: center;\n  align-items: center;\n  gap: 7px;\n\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.white.mode1};\n  box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.25);\n\n  color: ${({ theme }) => theme.colors.black.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/components/WebsiteButton/index.tsx",
    "content": "import React from 'react'\nimport { OutsideLinkIcon } from '../../lib-react-components/icons/OutsideLinkIcon'\n\ninterface WebsiteButtonProps {\n  url?: string\n  testId?: string\n}\n\nconst WebsiteButton = ({ url, testId }: WebsiteButtonProps): React.ReactElement => {\n  const handleWebsiteClick = () => {\n    if (!url?.length) {\n      return\n    }\n\n    window.open(url, '_blank')\n  }\n\n  return (\n    <div\n      onClick={handleWebsiteClick}\n      style={{ cursor: 'pointer', display: 'flex', alignItems: 'center' }}\n      data-testid={testId}\n    >\n      <OutsideLinkIcon size=\"24\" />\n    </div>\n  )\n}\n\nexport { WebsiteButton }\n"
  },
  {
    "path": "src/constants/appConstants.js",
    "content": "export const DEBUG_MODE = false\n"
  },
  {
    "path": "src/constants/feedback.js",
    "content": "import {\n  TEST_SLACK_WEBHOOK_URL_PATH as _TEST_SLACK_WEBHOOK_URL_PATH,\n  SLACK_WEBHOOK_URL_PATH as _SLACK_WEBHOOK_URL_PATH,\n  TEST_GOOGLE_FORM_KEY as _TEST_GOOGLE_FORM_KEY,\n  GOOGLE_FORM_KEY as _GOOGLE_FORM_KEY,\n  TEST_GOOGLE_FORM_MAPPING_TIMESTAMP,\n  TEST_GOOGLE_FORM_MAPPING_TOPIC,\n  TEST_GOOGLE_FORM_MAPPING_APP,\n  TEST_GOOGLE_FORM_MAPPING_OPERATING_SYSTEM,\n  TEST_GOOGLE_FORM_MAPPING_DEVICE_MODEL,\n  TEST_GOOGLE_FORM_MAPPING_MESSAGE,\n  TEST_GOOGLE_FORM_MAPPING_APP_VERSION,\n  GOOGLE_FORM_MAPPING_TIMESTAMP,\n  GOOGLE_FORM_MAPPING_TOPIC,\n  GOOGLE_FORM_MAPPING_APP,\n  GOOGLE_FORM_MAPPING_OPERATING_SYSTEM,\n  GOOGLE_FORM_MAPPING_DEVICE_MODEL,\n  GOOGLE_FORM_MAPPING_MESSAGE,\n  GOOGLE_FORM_MAPPING_APP_VERSION\n} from '@tetherto/pearpass-lib-constants'\n\nimport { isDev } from '../utils/envGetter'\n\nexport const SLACK_WEBHOOK_URL_PATH = isDev()\n  ? _TEST_SLACK_WEBHOOK_URL_PATH\n  : _SLACK_WEBHOOK_URL_PATH\n\nexport const GOOGLE_FORM_KEY = isDev()\n  ? _TEST_GOOGLE_FORM_KEY\n  : _GOOGLE_FORM_KEY\n\nexport const GOOGLE_FORM_MAPPING = isDev()\n  ? {\n      timestamp: TEST_GOOGLE_FORM_MAPPING_TIMESTAMP,\n      topic: TEST_GOOGLE_FORM_MAPPING_TOPIC,\n      app: TEST_GOOGLE_FORM_MAPPING_APP,\n      operatingSystem: TEST_GOOGLE_FORM_MAPPING_OPERATING_SYSTEM,\n      deviceModel: TEST_GOOGLE_FORM_MAPPING_DEVICE_MODEL,\n      message: TEST_GOOGLE_FORM_MAPPING_MESSAGE,\n      appVersion: TEST_GOOGLE_FORM_MAPPING_APP_VERSION\n    }\n  : {\n      timestamp: GOOGLE_FORM_MAPPING_TIMESTAMP,\n      topic: GOOGLE_FORM_MAPPING_TOPIC,\n      app: GOOGLE_FORM_MAPPING_APP,\n      operatingSystem: GOOGLE_FORM_MAPPING_OPERATING_SYSTEM,\n      deviceModel: GOOGLE_FORM_MAPPING_DEVICE_MODEL,\n      message: GOOGLE_FORM_MAPPING_MESSAGE,\n      appVersion: GOOGLE_FORM_MAPPING_APP_VERSION\n    }\n"
  },
  {
    "path": "src/constants/formFields.js",
    "content": "const ATTACHMENTS_FIELD_KEY = 'attachments'\n\nexport { ATTACHMENTS_FIELD_KEY }\n"
  },
  {
    "path": "src/constants/layout.ts",
    "content": "// Shared height for v2 column headers so they line up across columns.\nexport const HEADER_MIN_HEIGHT = 44\n\n// Bottom fade on scroll areas; list also pads by this to keep the last row visible.\nexport const FADE_GRADIENT_HEIGHT = 70\n"
  },
  {
    "path": "src/constants/localStorage.js",
    "content": "export const LOCAL_STORAGE_KEYS = {\n  NATIVE_MESSAGING_ENABLED: 'native-messaging-enabled',\n  TOU_ACCEPTED: 'tou-accepted',\n  COPY_TO_CLIPBOARD_DISABLED: 'copy-to-clipboard-disabled',\n  PASSWORD_CHANGE_REMINDER_ENABLED: 'password-change-reminder-enabled',\n  AUTO_LOCK_ENABLED: 'auto-lock-enabled',\n  AUTO_LOCK_TIMEOUT_MS: 'auto-lock-timeout-ms',\n  NM_CLIENT_PUBLIC_KEY: 'nm-client-public-key',\n  EXTENSION_DIALOG_DISMISSED: 'extension-dialog-dismissed'\n}\n"
  },
  {
    "path": "src/constants/meta.js",
    "content": "export const META_URL = import.meta.url\n"
  },
  {
    "path": "src/constants/navigation.js",
    "content": "export const NAVIGATION_ROUTES = {\n  CREATE_MASTER_PASSWORD: 'createMasterPassword',\n  MASTER_PASSWORD: 'masterPassword',\n  VAULTS: 'vaults',\n  LOAD_VAULT: 'loadVault',\n  UPLOAD_BACKUP_FILE: 'uploadBackupFile',\n  VAULT_PASSWORD: 'vaultPassword',\n  NEW_VAULT_CREDENTIALS: 'newVaultCredentials',\n  SCREEN_LOCKED: 'screenLocked'\n}\n"
  },
  {
    "path": "src/constants/pairing.js",
    "content": "/**\n * Pairing states for tracking extension pairing confirmation\n */\nexport const PAIRING_STATES = {\n  PENDING: 'PENDING', // getIdentity called, desktop identity key pinned\n  CONFIRMED: 'CONFIRMED' // confirmPairing succeeded, final pairing confirmed\n}\n"
  },
  {
    "path": "src/constants/password.ts",
    "content": "import { PasswordIndicatorVariant } from '@tetherto/pearpass-lib-ui-kit'\n\nconst STRENGTH_MAP: Record<string, PasswordIndicatorVariant> = {\n  error: 'vulnerable',\n  warning: 'decent',\n  success: 'strong'\n}\n\nexport { STRENGTH_MAP }\n"
  },
  {
    "path": "src/constants/pearpassLinks.js",
    "content": "export const CHROME_EXTENSION_STORE_LINK =\n  'https://chromewebstore.google.com/detail/pdeffakfmcdnjjafophphgmddmigpejh'\n"
  },
  {
    "path": "src/constants/recordActions.js",
    "content": "import {\n  CheckIcon,\n  MoveToIcon,\n  DeleteIcon,\n  StarIcon\n} from '../lib-react-components'\n\n/**\n * @type {Record<string, import('react').ElementType>}\n */\nexport const RECORD_ACTION_ICON_BY_TYPE = {\n  select: CheckIcon,\n  favorite: StarIcon,\n  move: MoveToIcon,\n  delete: DeleteIcon\n}\n"
  },
  {
    "path": "src/constants/recordColorByType.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nexport const RECORD_COLOR_BY_TYPE = {\n  all: colors.primary400.dark,\n  login: colors.categoryLogin.dark,\n  identity: colors.categoryIdentity.dark,\n  creditCard: colors.categoryCreditCard.dark,\n  note: colors.categoryNote.dark,\n  custom: colors.categoryCustom.dark,\n  password: colors.categoryPassword.dark,\n  wifiPassword: colors.categoryWifiPassword.dark,\n  passPhrase: colors.categoryPassPhrase.dark\n}\n"
  },
  {
    "path": "src/constants/recordIconByType.js",
    "content": "import {\n  CreditCardIcon,\n  FullBodyIcon,\n  KeyIcon,\n  LockIcon,\n  NoteIcon,\n  PasswordIcon,\n  UserIcon,\n  PassPhraseIcon\n} from '../lib-react-components'\nimport { WifiIcon } from '../lib-react-components/icons/WifiIcon'\n\nexport const RECORD_ICON_BY_TYPE = {\n  all: KeyIcon,\n  login: UserIcon,\n  identity: FullBodyIcon,\n  creditCard: CreditCardIcon,\n  note: NoteIcon,\n  custom: LockIcon,\n  password: PasswordIcon,\n  wifiPassword: WifiIcon,\n  passPhrase: PassPhraseIcon\n}\n"
  },
  {
    "path": "src/constants/securityErrors.js",
    "content": "/**\n * Error codes for security-related operations\n */\nexport const SecurityErrorCodes = {\n  // Pairing errors\n  PAIRING_TOKEN_REQUIRED: 'PAIRING_TOKEN_REQUIRED',\n  INVALID_PAIRING_TOKEN: 'INVALID_PAIRING_TOKEN',\n  INVALID_PAIRING_SECRET: 'INVALID_PAIRING_SECRET',\n  CLIENT_PUBLIC_KEY_REQUIRED: 'CLIENT_PUBLIC_KEY_REQUIRED',\n  CLIENT_ALREADY_PAIRED: 'CLIENT_ALREADY_PAIRED',\n  MISSING_CLIENT_PUBLIC_KEY: 'MISSING_CLIENT_PUBLIC_KEY',\n  NO_PENDING_PAIRING: 'NO_PENDING_PAIRING',\n  CLIENT_KEY_MISMATCH: 'CLIENT_KEY_MISMATCH',\n\n  // Handshake errors\n  NATIVE_MESSAGING_DISABLED: 'NATIVE_MESSAGING_DISABLED',\n  NOT_PAIRED: 'NOT_PAIRED',\n  CLIENT_NOT_PAIRED: 'CLIENT_NOT_PAIRED',\n  MISSING_EPHEMERAL_PUBLIC_KEY: 'MISSING_EPHEMERAL_PUBLIC_KEY',\n  MISSING_SESSION_ID: 'MISSING_SESSION_ID',\n  MISSING_CLIENT_SIGNATURE: 'MISSING_CLIENT_SIGNATURE',\n  SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n  IDENTITY_KEYS_UNAVAILABLE: 'IDENTITY_KEYS_UNAVAILABLE',\n\n  // Validation errors\n  INVALID_CLIENT_PUBLIC_KEY: 'INVALID_CLIENT_PUBLIC_KEY',\n  INVALID_CLIENT_SIGNATURE: 'INVALID_CLIENT_SIGNATURE',\n  INVALID_TRANSCRIPT: 'INVALID_TRANSCRIPT',\n  CLIENT_SIGNATURE_INVALID: 'CLIENT_SIGNATURE_INVALID',\n\n  // Secure request errors\n  INVALID_SECURE_PAYLOAD: 'INVALID_SECURE_PAYLOAD',\n  CLIENT_NOT_VERIFIED: 'CLIENT_NOT_VERIFIED',\n  DECRYPT_FAILED: 'DECRYPT_FAILED',\n  INVALID_SEQ: 'INVALID_SEQ',\n  REPLAY_DETECTED: 'REPLAY_DETECTED',\n\n  // Method registry errors\n  UNKNOWN_METHOD: 'UNKNOWN_METHOD',\n  DESKTOP_NOT_AUTHENTICATED: 'DESKTOP_NOT_AUTHENTICATED',\n\n  // Auto lock errors\n  MISSING_AUTO_LOCK_TIMEOUT_MS: 'MISSING_AUTO_LOCK_TIMEOUT_MS',\n  INVALID_AUTO_LOCK_ENABLED: 'INVALID_AUTO_LOCK_ENABLED'\n}\n"
  },
  {
    "path": "src/constants/services.js",
    "content": "export const HANDLER_EVENTS = {\n  extensionLock: 'extension-lock',\n  extensionExit: 'extension-exit'\n}\n"
  },
  {
    "path": "src/constants/sortOptions.ts",
    "content": "export const SORT_KEYS = {\n  TITLE_AZ: 'title_az',\n  LAST_UPDATED_NEWEST: 'last_updated_newest',\n  LAST_UPDATED_OLDEST: 'last_updated_oldest',\n  DATE_ADDED_NEWEST: 'date_added_newest',\n  DATE_ADDED_OLDEST: 'date_added_oldest'\n} as const\n\nexport type SortKey = (typeof SORT_KEYS)[keyof typeof SORT_KEYS]\n\nexport const SORT_BY_TYPE: Record<\n  SortKey,\n  { key: string; direction: 'asc' | 'desc' }\n> = {\n  [SORT_KEYS.TITLE_AZ]: { key: 'data.title', direction: 'asc' },\n  [SORT_KEYS.LAST_UPDATED_NEWEST]: { key: 'updatedAt', direction: 'desc' },\n  [SORT_KEYS.LAST_UPDATED_OLDEST]: { key: 'updatedAt', direction: 'asc' },\n  [SORT_KEYS.DATE_ADDED_NEWEST]: { key: 'createdAt', direction: 'desc' },\n  [SORT_KEYS.DATE_ADDED_OLDEST]: { key: 'createdAt', direction: 'asc' }\n}\n"
  },
  {
    "path": "src/constants/timeConstants.js",
    "content": "export const COPY_FEEDBACK_DISPLAY_TIME = 2000\n"
  },
  {
    "path": "src/constants/transitions.js",
    "content": "export const BASE_TRANSITION_DURATION = 300\n"
  },
  {
    "path": "src/containers/AppHeaderContainer/AppHeaderContainer.test.js",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, screen, fireEvent } from '@testing-library/react'\n\nlet mockAuthenticatorEnabled = false\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  get AUTHENTICATOR_ENABLED() {\n    return mockAuthenticatorEnabled\n  }\n}))\n\njest.mock('../../utils/designVersion', () => ({\n  isV2: jest.fn()\n}))\n\nconst mockNavigate = jest.fn()\nconst mockSetModal = jest.fn()\n\njest.mock('../../context/RouterContext', () => ({\n  useRouter: jest.fn()\n}))\n\njest.mock('../../context/ModalContext', () => ({\n  useModal: () => ({\n    setModal: mockSetModal\n  })\n}))\n\njest.mock('../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (key) => key\n  })\n}))\n\njest.mock('../../hooks/useRecordMenuItems', () => ({\n  useRecordMenuItems: jest.fn()\n}))\n\njest.mock('../../hooks/useCreateOrEditRecord', () => ({\n  useCreateOrEditRecord: jest.fn()\n}))\n\njest.mock('../../components/PopupMenu', () => ({\n  PopupMenu: ({ children }) => <div data-testid=\"popup-menu\">{children}</div>\n}))\n\njest.mock('../../components/CreateNewCategoryPopupContent', () => ({\n  CreateNewCategoryPopupContent: () => (\n    <div data-testid=\"create-new-category-popup\" />\n  )\n}))\n\njest.mock('../../components/AppHeaderV2', () => {\n  const React = require('react')\n  return {\n    AppHeaderV2: jest.fn((props) =>\n      React.createElement(\n        'div',\n        { 'data-testid': 'app-header-v2-mock' },\n        React.createElement('input', {\n          'data-testid': 'mock-search',\n          value: props.searchValue,\n          onChange: (e) => props.onSearchChange(e.target.value)\n        }),\n        React.createElement(\n          'button',\n          {\n            type: 'button',\n            'data-testid': 'mock-import',\n            onClick: props.onImportClick\n          },\n          'Import'\n        ),\n        props.addItemControl\n      )\n    ),\n    AppHeaderAddItemTrigger: () =>\n      React.createElement(\n        'button',\n        { type: 'button', 'data-testid': 'add-item-trigger' },\n        'Add'\n      )\n  }\n})\n\njest.mock('../Modal/ImportItemOrVaultModalContentV2', () => ({\n  ImportItemOrVaultModalContentV2: () => null\n}))\n\nimport { AppHeaderContainer } from './AppHeaderContainer'\nimport { AppHeaderV2 } from '../../components/AppHeaderV2'\nimport { AppHeaderContextProvider } from '../../context/AppHeaderContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { useCreateOrEditRecord } from '../../hooks/useCreateOrEditRecord'\nimport { useRecordMenuItems } from '../../hooks/useRecordMenuItems'\nimport { isV2 } from '../../utils/designVersion'\n\nconst renderWithHeaderContext = (ui) =>\n  render(<AppHeaderContextProvider>{ui}</AppHeaderContextProvider>)\n\ndescribe('AppHeaderContainer', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockAuthenticatorEnabled = false\n    isV2.mockReturnValue(true)\n    mockNavigate.mockReset()\n    mockSetModal.mockReset()\n    useRouter.mockReturnValue({\n      currentPage: 'vault',\n      data: { folder: 'folder-1', recordType: 'login' },\n      navigate: mockNavigate\n    })\n    useRecordMenuItems.mockReturnValue({\n      categoriesItems: [],\n      defaultItems: [],\n      popupItems: []\n    })\n    useCreateOrEditRecord.mockReturnValue({\n      handleCreateOrEditRecord: jest.fn()\n    })\n  })\n\n  it('returns null when design is not v2', () => {\n    isV2.mockReturnValue(false)\n\n    const { container } = renderWithHeaderContext(<AppHeaderContainer />)\n\n    expect(container.firstChild).toBeNull()\n    expect(AppHeaderV2).not.toHaveBeenCalled()\n  })\n\n  it('returns null when current page is not vault', () => {\n    useRouter.mockReturnValue({\n      currentPage: 'settings',\n      data: {},\n      navigate: mockNavigate\n    })\n\n    const { container } = renderWithHeaderContext(<AppHeaderContainer />)\n\n    expect(container.firstChild).toBeNull()\n    expect(AppHeaderV2).not.toHaveBeenCalled()\n  })\n\n  it('renders AppHeaderV2 on authenticator vault when AUTHENTICATOR_ENABLED', () => {\n    mockAuthenticatorEnabled = true\n    useRouter.mockReturnValue({\n      currentPage: 'vault',\n      data: { recordType: 'otp' },\n      navigate: mockNavigate\n    })\n\n    renderWithHeaderContext(<AppHeaderContainer />)\n\n    expect(screen.getByTestId('app-header-v2-mock')).toBeInTheDocument()\n    expect(AppHeaderV2).toHaveBeenCalled()\n  })\n\n  it('renders AppHeaderV2 on vault when v2 and not blocked', () => {\n    renderWithHeaderContext(<AppHeaderContainer />)\n\n    expect(screen.getByTestId('app-header-v2-mock')).toBeInTheDocument()\n    expect(AppHeaderV2).toHaveBeenCalled()\n  })\n\n  it('opens import modal on import', () => {\n    renderWithHeaderContext(<AppHeaderContainer />)\n\n    fireEvent.click(screen.getByTestId('mock-import'))\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n  })\n\n  it('wires search to header context state', () => {\n    renderWithHeaderContext(<AppHeaderContainer />)\n\n    fireEvent.change(screen.getByTestId('mock-search'), {\n      target: { value: 'find-me' }\n    })\n\n    expect(screen.getByTestId('mock-search')).toHaveValue('find-me')\n  })\n})\n"
  },
  {
    "path": "src/containers/AppHeaderContainer/AppHeaderContainer.tsx",
    "content": "import React from 'react'\nimport { AUTHENTICATOR_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { ContextMenu, NavbarListItem, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  AccountCircleOutlined,\n  AssignmentInd,\n  CreditCard,\n  FormatQuote,\n  GridView,\n  Key,\n  Note,\n  QrCode,\n  WiFi\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\n\nimport {\n  AppHeaderAddItemTrigger,\n  AppHeaderV2\n} from '../../components/AppHeaderV2'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { useAppHeaderContext } from '../../context/AppHeaderContext'\nimport { useCreateOrEditRecord } from '../../hooks/useCreateOrEditRecord'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { isV2 } from '../../utils/designVersion'\nimport { isFavorite } from '../../utils/isFavorite'\nimport { ImportItemOrVaultModalContentV2 } from '../Modal/ImportItemOrVaultModalContentV2'\n\nexport const AppHeaderContainer = () => {\n  const { currentPage, data: routerData } = useRouter()\n  const { setModal } = useModal()\n  const {\n    searchValue,\n    setSearchValue,\n    isAddMenuOpen,\n    setIsAddMenuOpen\n  } = useAppHeaderContext()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const { theme } = useTheme()\n  const { t } = useTranslation()\n\n  if (!isV2()) {\n    return null\n  }\n\n  if (currentPage !== 'vault') {\n    return null\n  }\n\n  const isFavoritesView = isFavorite(routerData?.folder ?? '')\n  const selectedFolder =\n    routerData?.folder && !isFavoritesView ? routerData.folder : undefined\n\n  const iconColor = theme.colors.colorTextPrimary\n\n  const addItems = [\n    { type: RECORD_TYPES.LOGIN,         label: t('Logins'),            icon: <AccountCircleOutlined color={iconColor} /> },\n    { type: RECORD_TYPES.CREDIT_CARD,   label: t('Credit Card'),       icon: <CreditCard color={iconColor} /> },\n    { type: RECORD_TYPES.IDENTITY,      label: t('Identities'),        icon: <AssignmentInd color={iconColor} /> },\n    { type: RECORD_TYPES.NOTE,          label: t('Notes'),             icon: <Note color={iconColor} /> },\n    { type: RECORD_TYPES.PASS_PHRASE,   label: t('Recovery Phrases'),  icon: <FormatQuote color={iconColor} /> },\n    { type: RECORD_TYPES.WIFI_PASSWORD, label: t('Wi-Fi'),             icon: <WiFi color={iconColor} /> },\n    { type: 'password',                 label: t('Password'),          icon: <Key color={iconColor} /> },\n    { type: RECORD_TYPES.CUSTOM,        label: t('Other'),             icon: <GridView color={iconColor} /> },\n    ...(AUTHENTICATOR_ENABLED\n      ? [{ type: RECORD_TYPES.OTP, label: t('Authenticator Code'), icon: <QrCode color={iconColor} /> }]\n      : [])\n  ]\n\n  const handleImportClick = () => {\n    setModal(<ImportItemOrVaultModalContentV2 />)\n  }\n\n  const addItemControl = (\n    <ContextMenu\n      trigger={<AppHeaderAddItemTrigger testId=\"main-plus-button\" />}\n      open={isAddMenuOpen}\n      onOpenChange={setIsAddMenuOpen}\n      testID=\"add-item-menu\"\n    >\n      {addItems.map(item => (\n        <NavbarListItem\n          key={item.type}\n          size=\"small\"\n          icon={item.icon}\n          label={item.label}\n          testID={`add-item-${item.type}`}\n          onClick={() => {\n            handleCreateOrEditRecord({\n              recordType: item.type,\n              selectedFolder,\n              isFavorite: isFavoritesView ? true : undefined\n            })\n            setIsAddMenuOpen(false)\n          }}\n        />\n      ))}\n    </ContextMenu>\n  )\n\n  return (\n    <AppHeaderV2\n      searchValue={searchValue}\n      onSearchChange={(val) => setSearchValue(val)}\n      onImportClick={handleImportClick}\n      addItemControl={addItemControl}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/AppHeaderContainer/index.ts",
    "content": "export { AppHeaderContainer } from './AppHeaderContainer'\n"
  },
  {
    "path": "src/containers/AttachmentField/index.js",
    "content": "import { html } from 'htm/react'\n\nimport {\n  AdditionalItems,\n  AttachmentName,\n  IconWrapper,\n  InputAreaWrapper,\n  Label,\n  MainWrapper,\n  Wrapper\n} from './styles'\nimport { useModal } from '../../context/ModalContext'\nimport { CommonFileIcon } from '../../lib-react-components'\nimport { isV2 } from '../../utils/designVersion'\nimport { DisplayPictureModalContent } from '../Modal/DisplayPictureModalContent'\nimport { DisplayPictureModalContentV2 } from '../Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2'\n\nconst imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp']\n\nconst getExtension = (filename) => filename?.split('.').pop()?.toLowerCase()\n\nexport const AttachmentField = ({\n  attachment,\n  label,\n  additionalItems,\n  testId\n}) => {\n  const { setModal } = useModal()\n\n  const isImage = attachment?.name\n    ? imageExtensions.includes(getExtension(attachment.name))\n    : false\n\n  const handleDownload = (e) => {\n    e.stopPropagation()\n\n    if (!attachment?.buffer || !attachment?.name) {\n      return\n    }\n\n    const blob = new Blob([attachment.buffer])\n    const url = URL.createObjectURL(blob)\n\n    if (isImage) {\n      const ModalContentComponent = isV2()\n        ? DisplayPictureModalContentV2\n        : DisplayPictureModalContent\n\n      setModal(<ModalContentComponent url={url} name={attachment.name} />)\n    } else {\n      const a = document.createElement('a')\n      a.href = url\n      a.download = attachment.name\n      document.body.appendChild(a)\n      a.click()\n      document.body.removeChild(a)\n      URL.revokeObjectURL(url)\n    }\n  }\n\n  return html`\n    <${Wrapper} data-testid=${testId}>\n      <${IconWrapper}> <${CommonFileIcon} size=\"21\" /> <//>\n      <${MainWrapper}>\n        <${Label}> ${label} <//>\n\n        <${InputAreaWrapper}>\n          <${AttachmentName} href=\"#\" onClick=${handleDownload}>\n            ${attachment.name}\n          <//>\n        <//>\n      <//>\n\n      ${!!additionalItems &&\n      html`\n        <${AdditionalItems} onMouseDown=${(e) => e.stopPropagation()}>\n          ${additionalItems}\n        <//>\n      `}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/AttachmentField/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  width: 100%;\n  position: relative;\n  border: 1px solid;\n  border-color: ${({ theme }) => theme.colors.grey100.mode1};\n  border-bottom: none;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  margin-top: 0;\n  padding: 8px 10px;\n\n  &:first-child {\n    border-top-left-radius: 10px;\n    border-top-right-radius: 10px;\n  }\n\n  &:last-child {\n    border-bottom-left-radius: 10px;\n    border-bottom-right-radius: 10px;\n    border-bottom: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  }\n\n  &:hover,\n  &:focus-within {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n\n  &:hover + &,\n  &:focus-within + & {\n    border-top-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const InputAreaWrapper = styled.div`\n  position: relative;\n  margin-top: 5px;\n  overflow-x: auto;\n  white-space: nowrap;\n  display: flex;\n  align-items: center;\n`\n\nexport const IconWrapper = styled.div`\n  display: flex;\n  flex-shrink: 0;\n  margin-top: 9px;\n`\n\nexport const MainWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n`\n\nexport const AttachmentName = styled.a`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n  padding: 1px 0px;\n  height: 21.5px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n`\n\nexport const Label = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n`\n\nexport const AdditionalItems = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  gap: 10px;\n  align-self: center;\n`\n"
  },
  {
    "path": "src/containers/AuthenticationCard/index.js",
    "content": "import { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\nimport {\n  stringToBuffer,\n  clearBuffer\n} from '@tetherto/pearpass-lib-vault/src/utils/buffer'\nimport { html } from 'htm/react'\n\nimport { ButtonWrapper, CardContainer, CardTitle, Title } from './styles.js'\nimport { useGlobalLoading } from '../../context/LoadingContext.js'\nimport { useTranslation } from '../../hooks/useTranslation.js'\nimport {\n  ButtonPrimary,\n  PearPassPasswordField\n} from '../../lib-react-components/index.js'\nimport { logger } from '../../utils/logger.js'\n\n/**\n * Authentication card component that provides master password input form for authentication.\n * Validates the master password and calls the onSuccess callback upon successful authentication.\n *\n * @param {Object} props - Component props\n * @param {string} props.title - The title displayed at the top of the card\n * @param {string} props.buttonLabel - The label text for the submit button\n * @param {React.ReactNode} [props.descriptionComponent] - Optional component to display additional description or content below the password field\n * @param {Function} [props.onSuccess] - Optional callback function invoked after successful authentication, receives the password as an argument\n * @param {Function} [props.onError] - Optional callback function invoked after failed authentication, receives the error and setErrors function\n * @param {Object} [props.style] - Optional CSS styles to apply to the card container\n * @returns {React.ReactElement} The authentication card component\n */\nexport const AuthenticationCard = ({\n  title,\n  buttonLabel,\n  descriptionComponent,\n  onSuccess,\n  onError,\n  style\n}) => {\n  const { t } = useTranslation()\n\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required'))\n  })\n\n  const { logIn } = useUserData()\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: { password: '' },\n    validate: (values) => schema.validate(values)\n  })\n\n  const onSubmit = async (values) => {\n    if (isLoading) {\n      return\n    }\n\n    if (!values.password) {\n      setErrors({\n        password: t('Password is required')\n      })\n\n      return\n    }\n\n    const passwordBuffer = stringToBuffer(values.password)\n    try {\n      setIsLoading(true)\n\n      await logIn({ password: passwordBuffer })\n\n      await onSuccess?.(passwordBuffer)\n\n      setIsLoading(false)\n    } catch (error) {\n      setIsLoading(false)\n\n      if (onError) {\n        await onError(error, setErrors)\n      } else {\n        setErrors({\n          password: t('Invalid password')\n        })\n      }\n\n      logger.error(\n        'AuthenticationCard',\n        'Error unlocking with master password:',\n        error\n      )\n    } finally {\n      clearBuffer(passwordBuffer)\n    }\n  }\n\n  return html`\n    <${CardContainer} onSubmit=${handleSubmit(onSubmit)} style=${style}>\n      <${CardTitle}>\n        <${Title} data-testid=\"login-title\"> ${title}<//>\n      <//>\n\n      <${PearPassPasswordField}\n        testId=\"login-password-input\"\n        placeholder=${t('Master password')}\n        ...${register('password')}\n      />\n\n      ${descriptionComponent}\n\n      <${ButtonWrapper}>\n        <${ButtonPrimary} testId=\"login-continue-button\" type=\"submit\">\n          ${buttonLabel}\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/AuthenticationCard/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const CardContainer = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 25px;\n  justify-content: center;\n  width: 609px;\n`\n\nexport const CardTitle = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  justify-content: center;\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\n\nexport const ButtonWrapper = styled.div`\n  align-self: center;\n`\n"
  },
  {
    "path": "src/containers/BaseInitialPage/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport {\n  GreenText,\n  PageContainer,\n  PageContentContainer,\n  PearHand,\n  Title\n} from './styles'\nimport { InitialPageWrapper } from '../../components/InitialPageWrapper'\n\n/**\n * @param {Object} props - Component props.\n * @param {React.ReactNode} props.children - Child components to be rendered inside the page.\n * @returns {JSX.Element} The rendered initial page layout.\n */\nexport const BaseInitialPage = ({ children }) => {\n  const { i18n } = useLingui()\n\n  return html`\n    <${InitialPageWrapper}>\n      <${PageContainer}>\n        <${PageContentContainer}>\n          <div>\n            <${Title}>\n              ${i18n._('Protect')}${' '}\n\n              <${GreenText}>${i18n._('your digital')}<//>\n              ${' '} ${i18n._('life')}\n            <//>\n            ${children}\n          </div>\n\n          <${PearHand} src=\"assets/images/pear_lock_clear.png\" alt=\"pearHand\" />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/BaseInitialPage/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const PageContainer = styled.div`\n  width: 100%;\n  height: 100%;\n`\n\nexport const PearHand = styled.img`\n  position: relative;\n  width: 50%;\n  max-width: 585px;\n  aspect-ratio: 1/1;\n`\n\nexport const PageContentContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-top: 180px;\n`\n\nexport const Title = styled.span`\n  flex: 1;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  max-width: 700px;\n  font-family: 'Humble Nostalgia';\n  font-size: clamp(1rem, 8vw, 10rem);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.1;\n`\n\nexport const GreenText = styled.span`\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n`\n"
  },
  {
    "path": "src/containers/CustomFields/index.tsx",
    "content": "import React from 'react'\n\nimport { FormGroup } from '../../components/FormGroup'\nimport { InputFieldNote } from '../../components/InputFieldNote'\nimport { ButtonRoundIcon, DeleteIcon } from '../../lib-react-components'\nimport { CopyButton } from '../../components/CopyButton'\n\ninterface CustomField {\n  id: string\n  type: 'note'\n  props: Record<string, unknown>\n}\n\ninterface CustomFieldsProps {\n  register: (name: string, index: number) => {\n    name: string;\n    value: string;\n    error?: string;\n    onChange: (e: unknown) => void;\n  }\n  customFields?: CustomField[]\n  onClick?: () => void\n  areInputsDisabled: boolean\n  removeItem?: (index: number) => void\n}\n\n/**\n * @param {{\n * register: (name: string, index: number) => {\n *   name: string;\n *   value: string;\n *   error?: string;\n *   onChange: (e: unknown) => void;\n * }\n *  customFields?: {\n *      id: string\n *      type: 'note'\n *      props: Record<string, unknown>\n *  }[]\n *  onClick?: () => void\n *  areInputsDisabled: boolean\n *  removeItem?: () => void\n * }} props\n */\nexport const CustomFields: React.FC<CustomFieldsProps> = ({\n  customFields,\n  register,\n  areInputsDisabled,\n  removeItem,\n  onClick\n}) => {\n  return (\n    <React.Fragment>\n      {customFields?.map((customField, index) => {\n        if (customField.type === 'note') {\n          return (\n            <FormGroup key={customField.id}>\n              <InputFieldNote\n                testId={`customfields-input-note-${index}`}\n                onClick={onClick}\n                isDisabled={areInputsDisabled}\n                {...customField.props}\n                additionalItems={\n                  <React.Fragment>\n                    {areInputsDisabled && (\n                      <CopyButton value={register('note', index).value} />\n                    )}\n\n                    {!areInputsDisabled && (\n                      <ButtonRoundIcon\n                        testId=\"customfields-button-remove\"\n                        startIcon={DeleteIcon}\n                        onClick={() => removeItem?.(index)}\n                      />\n                    )}\n                  </React.Fragment>\n                }\n                {...register('note', index)}\n              />\n            </FormGroup>\n          )\n        }\n        return null\n      })}\n    </React.Fragment>\n  )\n}"
  },
  {
    "path": "src/containers/EmptyCollectionViewV2/EmptyCollectionViewV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const CONTENT_MAX_WIDTH = 500\nexport const BUTTONS_MAX_WIDTH = 350\nexport const ILLUSTRATION_HEIGHT = 151\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    flex: 1,\n    paddingInline: `${rawTokens.spacing12}px`,\n    paddingBlock: '60px',\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  content: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%',\n    maxWidth: `${CONTENT_MAX_WIDTH}px`\n  },\n\n  illustration: {\n    width: '100%',\n    height: `${ILLUSTRATION_HEIGHT}px`,\n    overflow: 'hidden' as const,\n    flexShrink: 0,\n    display: 'flex' as const,\n    justifyContent: 'center',\n  },\n\n  textBlock: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing6}px`,\n    width: '100%',\n    textAlign: 'center' as const\n  },\n\n  descriptionParagraph: {\n    margin: 0\n  },\n\n  ctas: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    gap: `${rawTokens.spacing12}px`,\n    width: '100%'\n  },\n\n  ctaButton: {\n    width: '100%',\n    maxWidth: `${BUTTONS_MAX_WIDTH}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/EmptyCollectionViewV2/EmptyCollectionViewV2.tsx",
    "content": "import React, { useMemo } from 'react'\n\nimport { Button, Text, Title, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { Add, ImportExport } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport {\n  ILLUSTRATION_HEIGHT,\n  createStyles\n} from './EmptyCollectionViewV2.styles'\nimport { useAppHeaderContext } from '../../context/AppHeaderContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { useRecordMenuItemsV2 } from '../../hooks/useRecordMenuItemsV2'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { SettingsItemKey } from '../../pages/SettingsViewV2/SettingsViewV2'\nimport { ItemCardIllustration } from '../../svgs/ItemCardIllustration'\n\ntype EmptyCollectionViewV2Props = {\n  recordType?: string\n  selectedFolder?: string\n  isFavoritesView?: boolean\n}\n\nexport const EmptyCollectionViewV2 = ({\n  recordType = 'all',\n  selectedFolder,\n  isFavoritesView = false\n}: EmptyCollectionViewV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { navigate } = useRouter()\n  const { setIsAddMenuOpen } = useAppHeaderContext()\n  const { categoriesItems } = useRecordMenuItemsV2()\n  const styles = createStyles()\n\n  const handleAddItem = () => {\n    setIsAddMenuOpen(true)\n  }\n\n  const handleImport = () => {\n    navigate('settings', { initialTab: SettingsItemKey.ImportItems })\n  }\n\n  const categoryLabel = categoriesItems.find(\n    (item) => item.type === recordType\n  )?.label\n\n  const { title, descriptionParagraphs } = useMemo<{\n    title: string\n    descriptionParagraphs: string[]\n  }>(() => {\n    if (isFavoritesView) {\n      return {\n        title: t('No favorite items'),\n        descriptionParagraphs: [t('Mark items as favorites')]\n      }\n    }\n\n    if (selectedFolder) {\n      return {\n        title: t('Empty folder'),\n        descriptionParagraphs: [\n          t('Start adding items or save existing ones in the {folder} folder', {\n            folder: selectedFolder\n          })\n        ]\n      }\n    }\n\n    if (recordType !== 'all' && categoryLabel) {\n      return {\n        title: t('No item of type {category}', { category: categoryLabel }),\n        descriptionParagraphs: [\n          t('Start adding items of type {category} in your vault', {\n            category: categoryLabel\n          })\n        ]\n      }\n    }\n\n    return {\n      title: t('No item saved'),\n      descriptionParagraphs: [\n        t('Start using PearPass by creating your first item'),\n        t('or import your items from a different password manager')\n      ]\n    }\n  }, [isFavoritesView, selectedFolder, recordType, categoryLabel, t])\n\n  return (\n    <div style={styles.container} data-testid=\"empty-collection-v2\">\n      <div style={styles.content}>\n        <div style={styles.illustration}>\n          <ItemCardIllustration width={null} height={ILLUSTRATION_HEIGHT} />\n        </div>\n\n        <div style={styles.textBlock}>\n          <Title as=\"h2\" data-testid=\"empty-collection-v2-title\">\n            {title}\n          </Title>\n          {descriptionParagraphs.map((paragraph, index) => (\n            <Text\n              key={index}\n              as=\"p\"\n              variant=\"label\"\n              color={theme.colors.colorTextSecondary}\n              style={\n                styles.descriptionParagraph as unknown as React.ComponentProps<\n                  typeof Text\n                >['style']\n              }\n            >\n              {paragraph}\n            </Text>\n          ))}\n        </div>\n\n        {!isFavoritesView && (\n          <div style={styles.ctas}>\n            <div style={styles.ctaButton}>\n              <Button\n                variant=\"primary\"\n                size=\"small\"\n                fullWidth\n                data-testid=\"empty-collection-v2-add\"\n                iconBefore={<Add width={16} height={16} />}\n                onClick={handleAddItem}\n              >\n                {t('Add Item')}\n              </Button>\n            </div>\n            <div style={styles.ctaButton}>\n              <Button\n                variant=\"secondary\"\n                size=\"small\"\n                fullWidth\n                data-testid=\"empty-collection-v2-import\"\n                iconBefore={\n                  <ImportExport\n                    width={16}\n                    height={16}\n                    color={theme.colors.colorTextPrimary}\n                  />\n                }\n                onClick={handleImport}\n              >\n                {t('Import Items')}\n              </Button>\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/EmptyCollectionViewV2/index.ts",
    "content": "export { EmptyCollectionViewV2 } from './EmptyCollectionViewV2'\n"
  },
  {
    "path": "src/containers/EmptyResultsViewV2/EmptyResultsViewV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    flex: 1,\n    gap: `${rawTokens.spacing16}px`,\n    paddingInline: `${rawTokens.spacing16}px`,\n    paddingBlock: `${rawTokens.spacing24}px`,\n    width: '100%'\n  },\n\n  text: {\n    textAlign: 'center' as const\n  }\n})\n"
  },
  {
    "path": "src/containers/EmptyResultsViewV2/EmptyResultsViewV2.tsx",
    "content": "import React from 'react'\n\nimport { Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { createStyles } from './EmptyResultsViewV2.styles'\nimport { useTranslation } from '../../hooks/useTranslation'\n\nexport const EmptyResultsViewV2 = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  return (\n    <div style={styles.container} data-testid=\"empty-results-v2\">\n      <Text\n        variant=\"bodyEmphasized\"\n        color={theme.colors.colorTextPrimary}\n      >\n        {t('No result found.')}\n      </Text>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/EmptyResultsViewV2/index.ts",
    "content": "export { EmptyResultsViewV2 } from './EmptyResultsViewV2'\n"
  },
  {
    "path": "src/containers/ImagesField/index.js",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport {\n  AddContainer,\n  Body,\n  Container,\n  DeleteIconWrapper,\n  DeleteOverlay,\n  Header,\n  ImageContainer,\n  Photo,\n  Title\n} from './styles'\nimport { useModal } from '../../context/ModalContext'\nimport { DeleteIcon, ImageIcon, PlusIcon } from '../../lib-react-components'\nimport { isV2 } from '../../utils/designVersion'\nimport { DisplayPictureModalContent } from '../Modal/DisplayPictureModalContent'\nimport { DisplayPictureModalContentV2 } from '../Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2'\n\n/**\n * @param {{\n *  title: string\n *  pictures: { buffer: ArrayBuffer, name: string }[]\n *  onAdd?: () => void\n *  onRemove?: (index: number) => void\n *  testId?: string\n * }} props\n */\nexport const ImagesField = ({\n  title,\n  pictures = [],\n  onAdd,\n  onRemove,\n  testId\n}) => {\n  const { setModal } = useModal()\n\n  const pictureUrls = useMemo(\n    () =>\n      pictures.map((picture) => ({\n        url: URL.createObjectURL(new Blob([picture.buffer])),\n        name: picture.name\n      })),\n    [pictures]\n  )\n\n  useEffect(\n    () => () => {\n      pictureUrls.forEach((p) => URL.revokeObjectURL(p.url))\n    },\n    [pictureUrls]\n  )\n\n  const handlePictureClick = (url, name) => {\n    const ModalContentComponent = isV2()\n      ? DisplayPictureModalContentV2\n      : DisplayPictureModalContent\n\n    setModal(<ModalContentComponent url={url} name={name} />)\n  }\n\n  const handleRemove = (e, index) => {\n    e.stopPropagation()\n    onRemove?.(index)\n  }\n\n  return html`\n    <${Container} data-testid=${testId}>\n      <${Header}>\n        <${ImageIcon} />\n        <${Title}>${title}<//>\n      <//>\n      <${Body}>\n        ${pictureUrls?.map(\n          (picture, idx) => html`\n            <${ImageContainer}\n              onClick=${() => handlePictureClick(picture.url, picture.name)}\n              key=${idx}\n            >\n              <${Photo} src=${picture.url} alt=\"attachment\" />\n\n              ${onRemove &&\n              html`<${DeleteOverlay}>\n                <${DeleteIconWrapper} onClick=${(e) => handleRemove(e, idx)}>\n                  <${DeleteIcon} size=\"24\" color=${colors.black.mode1} />\n                <//>\n              <//>`}\n            <//>\n          `\n        )}\n        ${!!onAdd &&\n        html` <${AddContainer}\n          data-testid=${testId ? `${testId}-add` : undefined}\n          onClick=${onAdd}\n        >\n          <${PlusIcon} color=${colors.primary400.mode1} />\n        <//>`}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/ImagesField/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  margin-top: 10px;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  padding: 10px;\n\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n`\n\nexport const Header = styled.div`\n  display: flex;\n  gap: 10px;\n`\n\nexport const Title = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const Body = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  min-height: 50px;\n`\n\nexport const ImageContainer = styled.div`\n  display: flex;\n  align-items: center;\n  width: 90px;\n  height: 50px;\n  border-radius: 10px;\n  overflow: hidden;\n  position: relative;\n  border: 1px solid ${({ theme }) => theme.colors.primary400.mode1};\n`\n\nexport const DeleteOverlay = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  opacity: 0;\n  transition: opacity 0.3s ease;\n  &:hover {\n    opacity: 1;\n  }\n`\n\nexport const DeleteIconWrapper = styled.div`\n  width: 20px;\n  height: 20px;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 50%;\n  background-color: ${({ theme }) => theme.colors.primary400.mode1};\n  cursor: pointer;\n`\n\nexport const Photo = styled.img`\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n`\n\nexport const AddContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 90px;\n  height: 50px;\n  border-radius: 10px;\n  border: 2px solid ${({ theme }) => theme.colors.primary400.mode1};\n  cursor: pointer;\n`\n"
  },
  {
    "path": "src/containers/LayoutWithSidebar/index.js",
    "content": "import { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\n\nimport {\n  ContentWrapper,\n  ContentWrapperV2,\n  LayoutWrapper,\n  SideBarWrapper,\n  SideViewWrapper\n} from './styles'\nimport { isV2 } from '../../utils/designVersion'\nimport { Sidebar } from '../Sidebar'\nimport { SidebarV2 } from '../Sidebar/SidebarV2'\n\n/**\n * @typedef LayoutWithSidebarProps\n * @property {import('react').ReactNode} mainView\n * @property {import('react').ReactNode} sideView\n * @property {boolean} isSideViewOpen\n */\n\n/**\n * @param {LayoutWithSidebarProps} props\n */\n\nexport const LayoutWithSidebar = ({ mainView, sideView, isSideViewOpen }) => {\n  const { theme } = useTheme()\n  const isV2Design = isV2()\n  const VersionBasedContentWrapper = isV2Design\n    ? ContentWrapperV2\n    : ContentWrapper\n\n  const v2SideViewStyle = {\n    flexBasis: 0,\n    flexShrink: isSideViewOpen ? 0 : 1,\n    flexGrow: isSideViewOpen ? 1 : 0,\n    minWidth: isSideViewOpen ? '250px' : 0,\n    overflowX: 'hidden',\n    overflowY: isSideViewOpen ? 'auto' : 'hidden',\n    backgroundColor: theme.colors.colorSurfacePrimary,\n    borderLeftWidth: isSideViewOpen ? 1 : 0,\n    borderLeftStyle: 'solid',\n    borderLeftColor: theme.colors.colorBorderPrimary,\n    transition:\n      'flex-grow 150ms ease, border-left-width 150ms ease, min-width 150ms ease'\n  }\n\n  const v2MainViewStyle =\n    isV2Design && isSideViewOpen\n      ? {\n          flex: '0 1 350px',\n          minWidth: '300px',\n          transition: 'flex 150ms ease'\n        }\n      : {}\n\n  return html`\n    <${LayoutWrapper}>\n      <${SideBarWrapper}>\n        ${isV2Design ? html`<${SidebarV2} />` : html`<${Sidebar} />`}\n      <//>\n\n      <${VersionBasedContentWrapper} style=${v2MainViewStyle}> ${mainView} <//>\n\n      ${isV2Design\n        ? sideView && html`<div style=${v2SideViewStyle}>${sideView}</div>`\n        : isSideViewOpen && sideView\n          ? html`<${SideViewWrapper}>${sideView}<//>`\n          : null}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/LayoutWithSidebar/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const LayoutWrapper = styled.div`\n  display: flex;\n  width: 100%;\n  height: 100%;\n`\n\nexport const SideBarWrapper = styled.div`\n  flex-shrink: 0;\n`\n\nexport const ContentWrapper = styled.div`\n  position: relative;\n  flex: 1;\n  padding: 29px 15px 0;\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n`\n\nexport const ContentWrapperV2 = styled.div`\n  flex: 1;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  align-self: stretch;\n`\n\nexport const SideViewWrapper = styled.div`\n  flex: 1;\n  overflow-y: auto;\n  background: ${({ theme }) => theme.colors.grey500.mode1};\n  border-left: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  padding: 24px 27px 0 27px;\n`\n"
  },
  {
    "path": "src/containers/MainViewHeader/MainViewHeader.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { HEADER_MIN_HEIGHT } from '../../constants/layout'\n\nexport const SORT_MENU_WIDTH = 260\n\nexport const createStyles = (colors: ThemeColors) => ({\n  container: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    height: `${HEADER_MIN_HEIGHT}px`,\n    paddingInline: `${rawTokens.spacing12}px`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    backgroundColor: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const,\n    flexShrink: 0\n  },\n\n  breadcrumbWrapper: {\n    flex: 1,\n    minWidth: 0,\n    display: 'flex' as const,\n    alignItems: 'center' as const\n  },\n\n  actions: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/MainViewHeader/MainViewHeader.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\nimport { SORT_KEYS } from '../../constants/sortOptions'\n\nlet mockRouterData: Record<string, unknown> = {}\n\njest.mock('../../context/RouterContext', () => ({\n  useRouter: () => ({ data: mockRouterData })\n}))\n\njest.mock('../../hooks/useTranslation', () => ({\n  useTranslation: () => ({ t: (key: string) => key })\n}))\n\njest.mock('../../hooks/useRecordMenuItemsV2', () => ({\n  ALL_ITEMS_TYPE: 'all',\n  useRecordMenuItemsV2: () => ({\n    categoriesItems: [\n      { type: 'all', label: 'All Items' },\n      { type: 'login', label: 'Logins' }\n    ]\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => {\n  const React = require('react')\n  return {\n    useTheme: () => ({\n      theme: {\n        colors: {\n          colorTextPrimary: '#fff',\n          colorBorderPrimary: '#222',\n          colorSurfacePrimary: '#000'\n        }\n      }\n    }),\n    rawTokens: new Proxy({}, { get: () => 0 }),\n    Breadcrumb: ({\n      items,\n      actions\n    }: {\n      items: string[]\n      actions?: React.ReactNode\n    }) =>\n      React.createElement(\n        'nav',\n        { 'data-testid': 'breadcrumb' },\n        [\n          React.createElement(\n            'span',\n            { key: 'items', 'data-testid': 'breadcrumb-items' },\n            items.join(' > ')\n          ),\n          actions\n        ]\n      ),\n    Button: ({\n      children,\n      onClick,\n      disabled,\n      ...rest\n    }: {\n      children?: React.ReactNode\n      onClick?: () => void\n      disabled?: boolean\n      [key: string]: unknown\n    }) =>\n      React.createElement(\n        'button',\n        { type: 'button', onClick, disabled, ...rest },\n        children\n      ),\n    ContextMenu: ({\n      trigger,\n      children,\n      open\n    }: {\n      trigger: React.ReactNode\n      children: React.ReactNode\n      open?: boolean\n    }) =>\n      React.createElement('div', { 'data-testid': 'context-menu' }, [\n        React.createElement('div', { key: 'trigger' }, trigger),\n        open\n          ? React.createElement('div', { key: 'menu', role: 'menu' }, children)\n          : null\n      ]),\n    NavbarListItem: ({\n      label,\n      onClick,\n      testID\n    }: {\n      label?: string\n      onClick?: () => void\n      testID?: string\n    }) =>\n      React.createElement(\n        'button',\n        { type: 'button', 'data-testid': testID, onClick },\n        label\n      )\n  }\n})\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => {\n  const React = require('react')\n  const Icon = (name: string) => () =>\n    React.createElement('span', { 'data-icon': name })\n  return {\n    CalendarToday: Icon('CalendarToday'),\n    Check: Icon('Check'),\n    Checklist: Icon('Checklist'),\n    FilterList: Icon('FilterList'),\n    SortByAlpha: Icon('SortByAlpha')\n  }\n})\n\nimport { MainViewHeader } from './MainViewHeader'\n\ndescribe('MainViewHeader', () => {\n  const baseProps = {\n    sortKey: SORT_KEYS.LAST_UPDATED_NEWEST,\n    setSortKey: jest.fn(),\n    isMultiSelectOn: false,\n    setIsMultiSelectOn: jest.fn()\n  }\n\n  beforeEach(() => {\n    mockRouterData = {}\n    jest.clearAllMocks()\n  })\n\n  it('renders the breadcrumb, select and sort controls', () => {\n    render(<MainViewHeader {...baseProps} />)\n    expect(screen.getByTestId('breadcrumb-items').textContent).toBe(\n      'All Items > All Folders'\n    )\n    expect(screen.getByTestId('main-view-header-select')).toBeInTheDocument()\n    expect(screen.getByTestId('main-view-header-sort')).toBeInTheDocument()\n  })\n\n  it('toggles multi-select via the select button', () => {\n    const setIsMultiSelectOn = jest.fn()\n    render(\n      <MainViewHeader\n        {...baseProps}\n        setIsMultiSelectOn={setIsMultiSelectOn}\n      />\n    )\n    fireEvent.click(screen.getByTestId('main-view-header-select'))\n    expect(setIsMultiSelectOn).toHaveBeenCalledWith(true)\n  })\n\n  it('deactivates multi-select when already active and the select button is clicked', () => {\n    const setIsMultiSelectOn = jest.fn()\n    render(\n      <MainViewHeader\n        {...baseProps}\n        isMultiSelectOn\n        setIsMultiSelectOn={setIsMultiSelectOn}\n      />\n    )\n    fireEvent.click(screen.getByTestId('main-view-header-select'))\n    expect(setIsMultiSelectOn).toHaveBeenCalledWith(false)\n  })\n\n  it('reflects router data in the breadcrumb', () => {\n    mockRouterData = { recordType: 'login', folder: 'Work' }\n    render(<MainViewHeader {...baseProps} />)\n    expect(screen.getByTestId('breadcrumb-items').textContent).toBe(\n      'Logins > Work'\n    )\n  })\n})\n"
  },
  {
    "path": "src/containers/MainViewHeader/MainViewHeader.tsx",
    "content": "import React, { useMemo, useState } from 'react'\n\nimport {\n  Breadcrumb,\n  Button,\n  ContextMenu,\n  NavbarListItem,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  CalendarToday,\n  Check,\n  Checklist,\n  FilterList,\n  SortByAlpha\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles, SORT_MENU_WIDTH } from './MainViewHeader.styles'\nimport { SORT_KEYS, type SortKey } from '../../constants/sortOptions'\nimport { useRouter } from '../../context/RouterContext'\nimport {\n  ALL_ITEMS_TYPE,\n  useRecordMenuItemsV2\n} from '../../hooks/useRecordMenuItemsV2'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { isFavorite } from '../../utils/isFavorite'\n\ntype MainViewHeaderProps = {\n  sortKey: SortKey\n  setSortKey: (key: SortKey) => void\n  isMultiSelectOn: boolean\n  setIsMultiSelectOn: (value: boolean) => void\n}\n\nexport const MainViewHeader = ({\n  sortKey,\n  setSortKey,\n  isMultiSelectOn,\n  setIsMultiSelectOn\n}: MainViewHeaderProps) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { data: routerData } = useRouter()\n  const { categoriesItems } = useRecordMenuItemsV2()\n  const styles = createStyles(theme.colors)\n  const [isSortOpen, setIsSortOpen] = useState(false)\n\n  const recordType = routerData?.recordType ?? ALL_ITEMS_TYPE\n  const categoryLabel =\n    categoriesItems.find((item) => item.type === recordType)?.label ??\n    t('All Items')\n\n  const folder = routerData?.folder\n  const folderLabel = isFavorite(folder ?? '')\n    ? t('Favorites')\n    : folder\n      ? folder\n      : t('All Folders')\n\n  const sortOptions = useMemo<\n    Array<{ key: SortKey; label: string; Icon: React.ComponentType<{ color?: string }> }>\n  >(\n    () => [\n      { key: SORT_KEYS.TITLE_AZ, label: t('Title (A-Z)'), Icon: SortByAlpha },\n      {\n        key: SORT_KEYS.LAST_UPDATED_NEWEST,\n        label: t('Last Updated (Newest first)'),\n        Icon: CalendarToday\n      },\n      {\n        key: SORT_KEYS.LAST_UPDATED_OLDEST,\n        label: t('Last Updated (Oldest first)'),\n        Icon: CalendarToday\n      },\n      {\n        key: SORT_KEYS.DATE_ADDED_NEWEST,\n        label: t('Date Added (Newest first)'),\n        Icon: CalendarToday\n      },\n      {\n        key: SORT_KEYS.DATE_ADDED_OLDEST,\n        label: t('Date Added (Oldest first)'),\n        Icon: CalendarToday\n      }\n    ],\n    [t]\n  )\n\n  const handleSelectSort = (key: SortKey) => {\n    setSortKey(key)\n    setIsSortOpen(false)\n  }\n\n  const iconStyle = { color: theme.colors.colorTextPrimary }\n\n  return (\n    <div style={styles.container} data-testid=\"main-view-header\">\n      <div style={styles.breadcrumbWrapper}>\n        <Breadcrumb\n          items={[categoryLabel, folderLabel]}\n          actions={\n            <div style={styles.actions}>\n              <Button\n                variant=\"tertiary\"\n                size=\"small\"\n                onClick={() => setIsMultiSelectOn(!isMultiSelectOn)}\n                data-testid=\"main-view-header-select\"\n                aria-label={\n                  isMultiSelectOn\n                    ? t('Exit multi-select')\n                    : t('Toggle multi-select')\n                }\n                aria-pressed={isMultiSelectOn}\n                iconBefore={<Checklist style={iconStyle} />}\n              />\n\n              <ContextMenu\n                open={isSortOpen}\n                onOpenChange={setIsSortOpen}\n                menuWidth={SORT_MENU_WIDTH}\n                testID=\"main-view-header-sort-menu\"\n                trigger={\n                  <Button\n                    variant=\"tertiary\"\n                    size=\"small\"\n                    data-testid=\"main-view-header-sort\"\n                    aria-label={t('Sort items')}\n                    iconBefore={<FilterList style={iconStyle} />}\n                  />\n                }\n              >\n                {sortOptions.map(({ key, label, Icon }) => (\n                  <NavbarListItem\n                    key={key}\n                    size=\"small\"\n                    label={label}\n                    testID={`main-view-header-sort-${key}`}\n                    icon={<Icon color={theme.colors.colorTextPrimary} />}\n                    additionalItems={\n                      sortKey === key ? (\n                        <Check color={theme.colors.colorTextPrimary} />\n                      ) : undefined\n                    }\n                    onClick={() => handleSelectSort(key)}\n                  />\n                ))}\n              </ContextMenu>\n            </div>\n          }\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/AddDeviceModalContent/ScanQRExpireTimer.tsx",
    "content": "import { useCountDown } from '@tetherto/pear-apps-lib-ui-react-hooks'\n\nimport { ExpireTime } from './styles'\n\ninterface Props {\n  initialSeconds?: number\n  onFinish?: () => void\n  withSuffix?: boolean\n}\n\nexport const ScanQRExpireTimer = ({\n  initialSeconds = 120,\n  onFinish,\n  withSuffix = false\n}: Props) => {\n  const expireTime = useCountDown({\n    initialSeconds,\n    onFinish\n  })\n\n  return (\n    <ExpireTime>\n      {' '}\n      {expireTime}\n      {withSuffix ? 's' : ''}{' '}\n    </ExpireTime>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/AddDeviceModalContent/index.ts",
    "content": "import os from 'os'\n\nimport { useEffect, useState } from 'react'\nimport type { ClipboardEvent } from 'react'\n\nimport { html } from 'htm/react'\nimport { generateQRCodeSVG } from '@tetherto/pear-apps-utils-qr'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport {\n  authoriseCurrentProtectedVault,\n  useInvite,\n  useVault,\n  usePair\n} from '@tetherto/pearpass-lib-vault'\nimport { InputFieldWrapper } from './styles'\nimport { PasteIconWrapper } from './styles'\nimport {\n  BackgroundSection,\n  Content,\n  CopyText,\n  ExpireText,\n  HeaderTitle,\n  PairTabs,\n  PairTab,\n  QRCode,\n  QRCodeCopy,\n  QRCodeCopyWrapper,\n  QRCodeSection,\n  QRCodeText,\n  LoadVaultNotice,\n  PairingDescription\n} from './styles'\nimport { AlertBox } from '../../../components/AlertBox'\nimport { FormModalHeaderWrapper } from '../../../components/FormModalHeaderWrapper'\nimport { useModal } from '../../../context/ModalContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useAutoLockPreferences } from '../../../hooks/useAutoLockPreferences'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  CopyIcon,\n  TimeIcon,\n  UserSecurityIcon\n} from '../../../lib-react-components'\nimport { InputField } from '../../../lib-react-components/components/InputField'\nimport { PasteIcon } from '../../../lib-react-components/icons/PasteIcon'\nimport { ModalContent } from '../ModalContent'\nimport { VaultPasswordFormModalContent } from '../VaultPasswordFormModalContent'\nimport { ScanQRExpireTimer } from './ScanQRExpireTimer'\n\nexport const AddDeviceModalContent = () => {\n  const { t } = useTranslation()\n  const { setToast } = useToast()\n  const { closeModal } = useModal()\n  const [qrSvg, setQrSvg] = useState('')\n  const [isProtected, setIsProtected] = useState(true)\n  const [scanQRStep, setScanQRStep] = useState(true)\n  const {\n    data: vaultData,\n    isVaultProtected,\n    refetch: refetchVault,\n    addDevice\n  } = useVault()\n  const { createInvite, deleteInvite, data } = useInvite()\n  const [inviteCode, setInviteCodeId] = useState('')\n  const {\n    pairActiveVault,\n    isLoading: isPairing,\n    cancelPairActiveVault\n  } = usePair()\n  const { navigate } = useRouter()\n  const { setShouldBypassAutoLock } = useAutoLockPreferences()\n\n  const { copyToClipboard, isCopied } = useCopyToClipboard()\n\n  useEffect(() => {\n    setShouldBypassAutoLock(true)\n    return () => setShouldBypassAutoLock(false)\n  }, [setShouldBypassAutoLock])\n\n  useGlobalLoading({ isLoading: isPairing })\n\n  useEffect(() => {\n    createInvite()\n\n    return () => {\n      deleteInvite()\n    }\n  }, [])\n\n  useEffect(() => {\n    if (data?.publicKey) {\n      generateQRCodeSVG(data?.publicKey, { type: 'svg', margin: 0 }).then(\n        (value: string) => setQrSvg(value)\n      )\n    }\n  }, [data])\n\n  useEffect(() => {\n    const checkProtection = async () => {\n      const result = await isVaultProtected(vaultData?.id)\n      setIsProtected(result)\n    }\n    checkProtection()\n  }, [vaultData?.id])\n\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === 'Escape' && isPairing) {\n        cancelPairActiveVault()\n      }\n    }\n\n    window.addEventListener('keydown', handleKeyDown)\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown)\n    }\n  }, [cancelPairActiveVault, isPairing])\n\n  if (isProtected) {\n    return html`<${VaultPasswordFormModalContent}\n      onSubmit=${async (password: string) => {\n        if (await authoriseCurrentProtectedVault(password)) {\n          setIsProtected(false)\n        }\n      }}\n      vault=${vaultData}\n    />`\n  }\n\n  const handleLoadVault = async (code: string) => {\n    try {\n      const vaultId = await pairActiveVault(code)\n\n      if (!vaultId) {\n        throw new Error('Vault ID is empty')\n      }\n\n      await refetchVault(vaultId)\n\n      await addDevice(os.hostname() + ' ' + os.platform() + ' ' + os.release())\n\n      navigate('vault', {\n        recordType: 'all'\n      })\n      closeModal()\n    } catch {\n      setInviteCodeId('')\n      setToast({ message: t('Something went wrong, please check invite code') })\n    }\n  }\n\n  const handleChange = (value: string) => {\n    if (isPairing) {\n      return\n    }\n\n    setInviteCodeId(value)\n  }\n\n  const processPastedText = (pastedText: string) => {\n    if (pastedText) {\n      setInviteCodeId(pastedText)\n      setTimeout(() => {\n        if (!isPairing) {\n          handleLoadVault(pastedText)\n        }\n      }, 0)\n    }\n  }\n\n  const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n    const pastedText = e.clipboardData?.getData('text')\n    processPastedText(pastedText)\n  }\n\n  const handlePasteClick = async () => {\n    try {\n      const pastedText = await navigator.clipboard.readText()\n      processPastedText(pastedText)\n    } catch {\n      setToast({\n        message: t('Failed to paste from clipboard'),\n      })\n    }\n  }\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}>\n          <${HeaderTitle}>\n            <${UserSecurityIcon} />\n\n            ${t('Add a device')}\n          <//>\n        <//>\n      `}\n    >\n      <${Content}>\n        <${PairingDescription}>\n          ${t(\n    scanQRStep\n      ? 'Scan this QR code or paste the vault key into the PearPass app on your other device to connect it to your account. This method keeps your account secure.'\n      : 'Paste the vault key from the PearPass app on your other device to connect it to your account. This method keeps your account secure.'\n  )}\n        <//>\n        <${PairTabs}>\n          <${PairTab}\n            type=\"button\"\n            $active=${scanQRStep}\n            onClick=${() => setScanQRStep(true)}\n          >\n            ${t('Share this vault')}\n          <//>\n          <${PairTab}\n            type=\"button\"\n            $active=${!scanQRStep}\n            onClick=${() => setScanQRStep(false)}\n          >\n            ${t('Import vault')}\n          <//>\n        <//>\n        ${scanQRStep\n      ? html`\n              <${QRCodeSection}>\n                <${QRCodeText}> ${t('Scan this QR code while in the PearPass App')} <//>\n\n                <${QRCode}\n                  style=${{ width: '200px', height: '200px' }}\n                  dangerouslySetInnerHTML=${{ __html: qrSvg }}\n                />\n              <//>\n\n              <${BackgroundSection}>\n                <${ExpireText}>\n                  ${t('Expires in')}\n                  <${ScanQRExpireTimer} onFinish=${closeModal} />\n                <//>\n\n                <${TimeIcon} color=${colors.primary400.mode1} />\n              <//>\n\n              <${BackgroundSection}\n                onClick=${() => {\n          if (data?.publicKey) {\n            copyToClipboard(data.publicKey)\n          } else {\n            setToast({\n              message: t('Invite code not found')\n            })\n          }\n        }}\n              >\n                <${QRCodeCopyWrapper}>\n                  <${QRCodeCopy}>\n                    <${QRCodeText}>\n                      ${t('Copy vault key')}\n                    <//>\n                    <${CopyIcon} color=${colors.primary400.mode1} />\n                  <//>\n                  <${CopyText}>\n                    ${isCopied ? t('Copied!') : data?.publicKey || ''}\n                  <//>\n                <//>\n              <//>\n\n              <${AlertBox}\n                message=${t(\n          'Keep this code private. Anyone with it can connect a device to your vault.'\n        )}\n              />\n            `\n      : html`\n              <${InputFieldWrapper}>\n                <${InputField}\n                  testId=\"add-device-input-code\"\n                  label=${t('Vault key')}\n                  placeholder=${t('Insert vault key...')}\n                  variant=\"outline\"\n                  onChange=${handleChange}\n                  value=${inviteCode}\n                  onPaste=${handlePaste}\n                  additionalItems=${html`<${PasteIconWrapper}\n                    onClick=${handlePasteClick}\n                  >\n                    <${PasteIcon} color=${colors.primary400.mode1} size=\"16\" />\n                    ${t('Paste')}\n                  <//>`}\n                />\n              <//>\n              ${isPairing &&\n        html`\n                <${LoadVaultNotice}> ${t('Click Escape to cancel pairing')} <//>\n              `}\n            `}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/AddDeviceModalContent/styles.ts",
    "content": "import styled, { css } from 'styled-components'\n\nexport const HeaderTitle = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 500;\n`\nexport const PairingDescription = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  text-align: center;\n  margin-bottom: 10px;\n`\n\nexport const PairTabs = styled.div`\n  display: flex;\n  align-items: stretch;\n  justify-content: center;\n  gap: 4px;\n  width: 100%;\n  border: 2px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-radius: 10px;\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n`\n\nexport const PairTab = styled.button<{ $active?: boolean }>`\n  flex: 1;\n  padding: 8px 14px;\n  border: none;\n  outline: none;\n  cursor: pointer;\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition:\n    background-color 0.15s ease-in-out,\n    color 0.15s ease-in-out,\n    border-color 0.15s ease-in-out;\n  background-color: transparent;\n  border-radius: 7px;\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  ${({ $active }) =>\n    $active &&\n    css`\n      background-color: ${({ theme }) => theme.colors.primary400.mode1};\n      color: ${({ theme }) => theme.colors.black.dark};\n    `}\n`\n\nexport const Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 15px;\n`\n\nexport const QRCodeSection = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  align-items: center;\n`\n\nexport const QRCodeText = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 500;\n`\n\nexport const QRCodeCopy = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n`\nexport const QRCodeCopyWrapper = styled.div`\n  max-width: 100%;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n`\n\nexport const QRCode = styled.div`\n  width: 226px;\n  height: 226px;\n  padding: 15px;\n  border-radius: 10px;\n  background-color: ${({ theme }) => theme.colors.white.mode1};\n`\n\nexport const BackgroundSection = styled.div`\n  max-width: 100%;\n  display: flex;\n  padding: 7px 10px;\n  justify-content: center;\n  align-items: center;\n  gap: 10px;\n  border-radius: 10px;\n  background-color: ${({ theme }) => theme.colors.grey400.mode1};\n  cursor: ${({ onClick }) => (onClick ? 'pointer' : 'default')};\n`\n\nexport const ExpireText = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 500;\n`\n\nexport const ExpireTime = styled.span`\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n`\n\nexport const CopyText = styled.div`\n  color: ${({ theme }) => theme.colors.grey200.mode1};\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 500;\n  flex: 1;\n  min-width: 0;\n  width: 100%;\n`\n\nexport const WarningSection = styled.div`\n  display: flex;\n  padding: 10px;\n  align-items: flex-start;\n  gap: 8px;\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.errorYellow.mode1};\n  background: linear-gradient(\n      0deg,\n      rgba(0, 0, 0, 0.8) 0%,\n      rgba(0, 0, 0, 0.8) 100%\n    ),\n    ${({ theme }) => theme.colors.errorYellow.mode1};\n`\n\nexport const WarningText = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 500;\n`\n\nexport const IconWrapper = styled.div`\n  flex-shrink: 0;\n`\n\nexport const PasteIconWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 10px;\n  background-color: ${({ theme }) => theme.colors.black.dark};\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  padding: 9px 15px;\n  cursor: pointer;\n  gap: 7px;\n  font-family: 'Inter';\n  font-size: 12px;\n`\n\nexport const InputFieldWrapper = styled.div`\n  width: 100%;\n\n  > div {\n    border-top-left-radius: 10px;\n    border-top-right-radius: 10px;\n  }\n`\n\nexport const LoadVaultNotice = styled.div`\n  white-space: nowrap;\n  width: 100%;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: left;\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/containers/Modal/AddDeviceModalContentV2/AddDeviceModalContentV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  divider: {\n    width: '100%',\n    height: 1,\n    backgroundColor: colors.colorBorderPrimary,\n    flexShrink: 0,\n    border: 'none',\n    padding: 0,\n    margin: 0\n  },\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: rawTokens.spacing12,\n    boxSizing: 'border-box' as const\n  },\n  accessPanel: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'stretch' as const,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    borderRadius: rawTokens.radius8,\n    backgroundColor: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const\n  },\n  qrWrap: {\n    display: 'flex' as const,\n    justifyContent: 'center' as const,\n    alignItems: 'center' as const,\n    marginTop: rawTokens.spacing24,\n    marginBottom: rawTokens.spacing16,\n  },\n  qrInner: {\n    width: 160,\n    height: 160,\n    padding: rawTokens.spacing10,\n    borderRadius: rawTokens.radius8,\n    backgroundColor: '#FFFFFF',\n    boxSizing: 'border-box' as const,\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n  },\n  timerRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    gap: rawTokens.spacing8,\n    flexWrap: 'wrap' as const,\n    marginBottom: rawTokens.spacing24,\n  },\n  timerTextRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    flexWrap: 'wrap' as const,\n    gap: rawTokens.spacing4\n  },\n  vaultLinkSection: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: rawTokens.spacing4,\n    width: '100%',\n    minWidth: 0,\n    padding: rawTokens.spacing12,\n    boxSizing: 'border-box' as const\n  },\n  vaultLinkTextColumn: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'stretch' as const,\n    gap: rawTokens.spacing8,\n    flex: '1 1 auto' as const,\n    minWidth: 0\n  },\n  vaultLinkValue: {\n    display: 'block' as const,\n    minWidth: 0,\n    maxWidth: '100%',\n    overflow: 'hidden' as const,\n    textOverflow: 'ellipsis' as const,\n    whiteSpace: 'nowrap' as const\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/AddDeviceModalContentV2/AddDeviceModalContentV2.tsx",
    "content": "import React, { useEffect, useState } from 'react'\n\nimport { generateQRCodeSVG } from '@tetherto/pear-apps-utils-qr'\nimport {\n  AlertMessage,\n  Button,\n  Dialog,\n  RingSpinner,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { ContentCopy } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useInvite, useVault } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './AddDeviceModalContentV2.styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useAutoLockPreferences } from '../../../hooks/useAutoLockPreferences'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { ScanQRExpireTimer } from '../AddDeviceModalContent/ScanQRExpireTimer'\n\nexport const AddDeviceModalContentV2 = () => {\n  const { t } = useTranslation()\n  const { setToast } = useToast()\n  const { closeModal } = useModal()\n  const { theme } = useTheme()\n  const { colors } = theme\n  const [qrSvg, setQrSvg] = useState('')\n  const { createInvite, deleteInvite, data } = useInvite()\n  const { data: vault } = useVault()\n  const { setShouldBypassAutoLock } = useAutoLockPreferences()\n  const { copyToClipboard, isCopied } = useCopyToClipboard()\n\n  useEffect(() => {\n    setShouldBypassAutoLock(true)\n    return () => setShouldBypassAutoLock(false)\n  }, [setShouldBypassAutoLock])\n\n  useEffect(() => {\n    if (!data?.publicKey) {\n      createInvite()\n    }\n\n    return () => {\n      deleteInvite()\n    }\n    // `data?.publicKey` intentionally excluded: this is a mount/unmount\n    // lifecycle - create once on open, delete once on close.\n  }, [createInvite, deleteInvite])\n\n  useEffect(() => {\n    if (data?.publicKey) {\n      generateQRCodeSVG(data.publicKey, { type: 'svg', margin: 0 }).then(\n        (value: string) => setQrSvg(value)\n      )\n    }\n  }, [data])\n\n  const styles = createStyles(colors)\n\n  const handleCopyKey = () => {\n    if (data?.publicKey) {\n      copyToClipboard(data.publicKey)\n    } else {\n      setToast({\n        message: t('Invite code not found')\n      })\n    }\n  }\n\n  const displayLink = isCopied ? t('Copied!') : (data?.publicKey ?? '')\n\n  return (\n    <Dialog\n      title={t('Share {name}', { name: vault?.name ?? '' })}\n      onClose={closeModal}\n      testID=\"add-device-dialog-v2\"\n      closeButtonTestID=\"add-device-close-v2\"\n    >\n      <div style={styles.body}>\n        <Text variant=\"caption\" color={colors.colorTextSecondary}>\n          {t('Access Code')}\n        </Text>\n        <div style={styles.accessPanel}>\n          <div style={styles.qrWrap}>\n            <div\n              style={styles.qrInner}\n              dangerouslySetInnerHTML={{ __html: qrSvg }}\n            />\n          </div>\n          <div style={styles.timerRow}>\n            <RingSpinner />\n            <div style={styles.timerTextRow}>\n              <Text as=\"span\" variant=\"label\" color={colors.colorTextSecondary}>\n                {t('Code expires in')}\n              </Text>\n              <ScanQRExpireTimer withSuffix onFinish={closeModal} />\n            </div>\n          </div>\n          <div role=\"separator\" style={styles.divider} />\n          <div style={styles.vaultLinkSection}>\n            <div style={styles.vaultLinkTextColumn}>\n              <Text variant=\"caption\" color={colors.colorTextSecondary}>\n                {t('Vault Link')}\n              </Text>\n              <div style={styles.vaultLinkValue} title={data?.publicKey ?? ''}>\n                <Text as=\"span\" variant=\"label\" color={colors.colorTextPrimary}>\n                  {displayLink}\n                </Text>\n              </div>\n            </div>\n            <Button\n              variant=\"tertiary\"\n              size=\"small\"\n              aria-label={t('Copy vault key')}\n              data-testid=\"add-device-v2-copy-link\"\n              onClick={handleCopyKey}\n            >\n              <ContentCopy\n                width={24}\n                height={24}\n                color={colors.colorTextPrimary}\n              />\n            </Button>\n          </div>\n        </div>\n        <AlertMessage\n          variant=\"info\"\n          size=\"small\"\n          title=\"\"\n          description={t(\n            'Keep your vault private. Only pair with your own trusted devices. Pairing grants full access to your PearPass data.'\n          )}\n          testID=\"pairing-disclaimer\"\n        />\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/AuthenticationModalContentV2/index.tsx",
    "content": "import React, { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  Button,\n  Dialog,\n  Form,\n  PasswordField,\n  Text\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { KeyboardArrowRightRound } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\nimport {\n  clearBuffer,\n  stringToBuffer\n} from '@tetherto/pearpass-lib-vault/src/utils/buffer'\n\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { createStyles } from './styles'\n\nexport type AuthenticationModalContentV2Props = {\n  open?: boolean\n  onClose?: () => void\n  onSuccess?: (password: Uint8Array) => Promise<void>\n  onError?: (\n    error: unknown,\n    setErrors: (errors: Record<string, string>) => void\n  ) => Promise<void>\n}\n\nexport const AuthenticationModalContentV2 = ({\n  open,\n  onClose,\n  onSuccess,\n  onError\n}: AuthenticationModalContentV2Props) => {\n  const styles = createStyles()\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n\n  const handleClose = onClose ?? closeModal\n\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required'))\n  })\n\n  const { logIn } = useUserData()\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: { password: '' },\n    validate: (values: { password: string }) => schema.validate(values)\n  })\n\n  const onSubmit = async (values: { password: string }) => {\n    if (isLoading) {\n      return\n    }\n\n    if (!values.password) {\n      setErrors({ password: t('Password is required') })\n      return\n    }\n\n    const passwordBuffer = stringToBuffer(values.password)\n\n    try {\n      setIsLoading(true)\n      await logIn({ password: passwordBuffer })\n      await onSuccess?.(passwordBuffer)\n      setIsLoading(false)\n    } catch (error) {\n      setIsLoading(false)\n\n      if (onError) {\n        await onError(error, setErrors)\n      } else {\n        setErrors({ password: t('Invalid password') })\n      }\n    } finally {\n      clearBuffer(passwordBuffer)\n    }\n  }\n\n  const { onChange: onChangePassword, ...passwordFieldProps } =\n    register('password')\n\n  return (\n    <Dialog\n      title={t('Verification Required')}\n      open={open}\n      onClose={handleClose}\n      testID=\"authentication-dialog-v2\"\n      closeButtonTestID=\"authentication-close-v2\"\n      footer={\n        <Button\n          variant=\"primary\"\n          size=\"small\"\n          type=\"button\"\n          isLoading={isLoading}\n          iconAfter={<KeyboardArrowRightRound />}\n          onClick={() => handleSubmit(onSubmit)()}\n          data-testid=\"authentication-continue-v2\"\n        >\n          {t('Continue')}\n        </Button>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.container as React.ComponentProps<typeof Form>['style']}\n        testID=\"authentication-form-v2\"\n      >\n        <Text as=\"p\" variant=\"body\" data-testid=\"authentication-description-v2\">\n          {t('Use your Master Password to authorize this action.')}\n        </Text>\n\n        <PasswordField\n          label={t('Password')}\n          placeholder={t('Enter Master Password')}\n          {...passwordFieldProps}\n          onChange={(e) => onChangePassword(e.target.value)}\n          error={passwordFieldProps.error || undefined}\n          testID=\"authentication-password-v2\"\n        />\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/AuthenticationModalContentV2/styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing16}px`,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/BlindPeersModalContent/index.js",
    "content": "import React, { useEffect, useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport {\n  BLIND_PEER_FORM_NAME,\n  BLIND_PEERS_FORM_NAME,\n  BLIND_PEER_TYPE\n} from '@tetherto/pearpass-lib-constants'\nimport { useBlindMirrors } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport {\n  ActionsContainer,\n  ContentWrapper,\n  FormWrapper,\n  HeaderWrapper\n} from './styles'\nimport { RadioSelect } from '../../../components/RadioSelect'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  ButtonPrimary,\n  ButtonSecondary,\n  ButtonSingleInput,\n  CompoundField,\n  DeleteIcon,\n  InputField,\n  PlusIcon\n} from '../../../lib-react-components'\nimport { ModalContent } from '../ModalContent'\n\nconst { DEFAULT, PERSONAL } = BLIND_PEER_TYPE\n/**\n * @component\n * @param {Object} props\n * @param {(data: { blindPeerType: 'default' | 'personal', blindPeers?: string[] }) => void} props.onConfirm\n * @param {() => void} props.onClose\n */\nexport const BlindPeersModalContent = ({ onConfirm, onClose }) => {\n  const { t } = useTranslation()\n  const { data: blindMirrorsData } = useBlindMirrors()\n  const isEditMode = blindMirrorsData.length > 0\n  const [selectedOption, setSelectedOption] = useState(DEFAULT)\n\n  const getInitialValues = () => {\n    const manualPeers = blindMirrorsData.filter((item) => !item.isDefault)\n\n    if (manualPeers.length > 0) {\n      return {\n        blindPeers: manualPeers.map((item) => ({\n          name: BLIND_PEER_FORM_NAME,\n          blindPeer: item.key\n        }))\n      }\n    }\n    return {\n      blindPeers: [\n        {\n          name: BLIND_PEER_FORM_NAME,\n          blindPeer: ''\n        }\n      ]\n    }\n  }\n\n  const { registerArray } = useForm({\n    initialValues: getInitialValues()\n  })\n\n  const {\n    value: blindPeersList,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray(BLIND_PEERS_FORM_NAME)\n\n  useEffect(() => {\n    if (isEditMode && blindMirrorsData.length > 0) {\n      setSelectedOption(blindMirrorsData[0].isDefault ? DEFAULT : PERSONAL)\n    }\n  }, [isEditMode, blindMirrorsData.length])\n\n  const radioOptions = [\n    { label: t('Automatic blind peers'), value: DEFAULT },\n    { label: t('Manual blind peers'), value: PERSONAL }\n  ]\n\n  const handleOptionChange = (option) => {\n    setSelectedOption(option)\n  }\n\n  const handleBlindPeersConfirm = async () => {\n    if (selectedOption === DEFAULT) {\n      onConfirm({ blindPeerType: DEFAULT, isEditMode })\n    } else if (selectedOption === PERSONAL) {\n      const blindPeers = blindPeersList\n        .map((peer) => peer.blindPeer?.trim())\n        .filter((peer) => peer && peer.length > 0)\n\n      if (blindPeers.length === 0) {\n        return\n      }\n\n      onConfirm({ blindPeerType: PERSONAL, blindPeers, isEditMode })\n    }\n  }\n\n  return html`\n    <${ModalContent}\n      onClose=${onClose}\n      headerChildren=${html`\n        <${HeaderWrapper}> ${t('Choose your Blind Peer')} <//>\n      `}\n    >\n      <${ContentWrapper}>\n        <${RadioSelect}\n          options=${radioOptions}\n          selectedOption=${selectedOption}\n          onChange=${handleOptionChange}\n        />\n\n        <${FormWrapper} isOpen=${selectedOption === PERSONAL}>\n          <${CompoundField}>\n            ${blindPeersList.map(\n              (blindPeer, index) => html`\n                <${React.Fragment} key=${blindPeer.id}>\n                  <${InputField}\n                    label=${'#' + (index + 1) + ' ' + t('Blind Peer')}\n                    placeholder=${t('Add here your code...')}\n                    isFirst=${index === 0}\n                    ...${registerItem(BLIND_PEER_FORM_NAME, index)}\n                    additionalItems=${index === 0\n                      ? html`\n                          <${ButtonSingleInput}\n                            startIcon=${PlusIcon}\n                            onClick=${() => addItem({ name: 'website' })}\n                          >\n                            ${t('Add Peer')}\n                          <//>\n                        `\n                      : html`\n                          <${ButtonSingleInput}\n                            startIcon=${DeleteIcon}\n                            onClick=${() => removeItem(index)}\n                          >\n                            ${t('Remove Peer')}\n                          <//>\n                        `}\n                  />\n                <//>\n              `\n            )}\n          <//>\n        <//>\n\n        <${ActionsContainer}>\n          <${ButtonPrimary} onClick=${handleBlindPeersConfirm}>\n            ${t('Confirm')}\n          <//>\n          <${ButtonSecondary} onClick=${onClose}> ${t('Cancel')} <//>\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/BlindPeersModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const HeaderWrapper = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 20px;\n  font-weight: 700;\n`\n\nexport const ContentWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n\nexport const FormWrapper = styled.div`\n  max-height: 400px;\n  overflow-y: auto;\n  pointer-events: ${({ isOpen }) => (isOpen ? 'auto' : 'none')};\n  max-height: ${({ isOpen }) => (isOpen ? '300px' : '0')};\n  transition: max-height 0.5s ease;\n`\n\nexport const ActionsContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`\n"
  },
  {
    "path": "src/containers/Modal/BrowserExtensionDialogV2/index.tsx",
    "content": "import React from 'react'\n\nimport { Button, Dialog, Text, Title } from '@tetherto/pearpass-lib-ui-kit'\nimport { OpenInNew } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { createStyles } from './styles'\nimport { LOCAL_STORAGE_KEYS } from '../../../constants/localStorage'\nimport { CHROME_EXTENSION_STORE_LINK } from '../../../constants/pearpassLinks'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\nexport const BrowserExtensionDialogV2 = () => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  const handleDismiss = () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.EXTENSION_DIALOG_DISMISSED, 'true')\n    closeModal()\n  }\n\n  const handleDownload = () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.EXTENSION_DIALOG_DISMISSED, 'true')\n    window.electronAPI?.openExternal(CHROME_EXTENSION_STORE_LINK)\n    closeModal()\n  }\n\n  return (\n    <Dialog\n      title={t('Improve your sign-in experience')}\n      onClose={handleDismiss}\n      footer={\n        <>\n          <Button variant=\"secondary\" size=\"small\" onClick={handleDismiss}>\n            {t(\"I'll do it later\")}\n          </Button>\n          <Button variant=\"primary\" size=\"small\" onClick={handleDownload} iconBefore={<OpenInNew width={16} height={16} />}>\n            {t('Download Extension')}\n          </Button>\n        </>\n      }\n    >\n      <div style={styles.body}>\n        <img\n          src=\"assets/images/browser_mockup.svg\"\n          alt=\"\"\n          style={styles.browserMockup}\n        />\n\n        <div style={styles.textContent}>\n          {/* @ts-ignore */}\n          <Title as=\"h2\" style={styles.heading}>\n            {t(\"You've got the app.\")}{'\\n'}\n            {t('Now unlock the full experience.')}\n          </Title>\n          {/* @ts-ignore */}\n          <Text as=\"p\" variant=\"label\" style={styles.description}>\n            {t('Install the browser extension to autofill passwords, save new logins with one click, and sign in instantly —')}{'\\n'}\n            {t('right where you browse.')}{'\\n\\n'}\n            {t('No copy-paste. No interruptions. Just seamless security.')}\n          </Text>\n        </div>\n\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/BrowserExtensionDialogV2/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'flex-start',\n    padding: rawTokens.spacing8,\n    gap: rawTokens.spacing32,\n    position: 'relative' as const\n  },\n  browserMockup: {\n    width: '100%',\n    borderRadius: rawTokens.radius8,\n    height: '80px',\n    objectFit: 'cover' as const,\n    userSelect: 'none' as const,\n    pointerEvents: 'none' as const\n  },\n  textContent: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: rawTokens.spacing12,\n    width: '100%',\n    textAlign: 'center' as const,\n    lineHeight: 'normal'\n  },\n  heading: {\n    whiteSpace: 'pre-wrap' as const\n  },\n  description: {\n    color: colors.colorTextSecondary,\n    whiteSpace: 'pre-wrap' as const\n  },\n})\n"
  },
  {
    "path": "src/containers/Modal/ConfirmationModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { ButtonWrapper, HeaderWrapper, TextWrapper } from './styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { ButtonPrimary, ButtonSecondary } from '../../../lib-react-components'\nimport { ModalContent } from '../ModalContent'\n\n/**\n * @param {{\n *    title: string\n *    text: string\n *    primaryAction: () => void\n *    secondaryAction: () => void\n *    primaryLabel: string\n *    secondaryLabel: string\n * }} props\n */\nexport const ConfirmationModalContent = (props) => {\n  const { i18n } = useLingui()\n\n  const {\n    title = i18n._('Are you sure?'),\n    text = i18n._('Are you sure you want to proceed?'),\n    primaryAction,\n    secondaryAction,\n    primaryLabel = i18n._('Confirm'),\n    secondaryLabel = i18n._('Cancel')\n  } = props\n\n  const { closeModal } = useModal()\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      headerChildren=${html` <${HeaderWrapper}> ${title} <//> `}\n    >\n      <${TextWrapper}> ${text} <//>\n\n      <${ButtonWrapper}>\n        <${ButtonPrimary}\n          data-testid=\"confirmation-button-confirm\"\n          onClick=${primaryAction}\n        >\n          ${primaryLabel}\n        <//>\n\n        <${ButtonSecondary}\n          data-testid=\"confirmation-button-cancel\"\n          onClick=${secondaryAction}\n        >\n          ${secondaryLabel}\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/ConfirmationModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const HeaderWrapper = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n`\n\nexport const TextWrapper = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n  padding-top: 5px;\n`\n\nexport const ButtonWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  padding-top: 20px;\n  gap: 15px;\n`\n"
  },
  {
    "path": "src/containers/Modal/CreateFileEncryptionPassword/index.tsx",
    "content": "import { html } from 'htm/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\n\nimport { FormModalHeaderWrapper } from '../../../components/FormModalHeaderWrapper'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  ButtonPrimary,\n  PearPassPasswordField\n} from '../../../lib-react-components'\nimport { logger } from '../../../utils/logger'\nimport { ModalContent } from '../ModalContent'\nimport { Description, Header, Title, UnlockVaultContainer } from './styles'\n\ninterface props {\n  onSubmit: (password: string) => Promise<void>\n}\n\n/**\n *\n * @param {Object} props\n * @param {(password: string) => Promise<void>} props.onSubmit\n */\nexport const CreateFileEncryptionPassword = ({ onSubmit }: props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { setIsLoading } = useLoadingContext()\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required')),\n    confirmPassword: Validator.string().required(\n      t('Confirm password is required')\n    )\n  })\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: {\n      password: '',\n      confirmPassword: ''\n    },\n    validate: (values: { password: string; confirmPassword: string }) =>\n      schema.validate(values)\n  })\n\n  const submit = async (values: {\n    password: string\n    confirmPassword: string\n  }) => {\n    try {\n      if (values.password !== values.confirmPassword) {\n        setErrors({\n          confirmPassword: t('Passwords do not match')\n        })\n        return\n      }\n\n      setIsLoading(true)\n\n      await onSubmit?.(values.password)\n\n      setIsLoading(false)\n    } catch (error) {\n      logger.error('CreateFileEncryptionPassword', error)\n\n      setIsLoading(false)\n\n      setErrors({\n        password: t('Invalid password')\n      })\n    }\n  }\n\n  return html` <${ModalContent}\n    onClose=${closeModal}\n    headerChildren=${html`\n      <${FormModalHeaderWrapper}>\n        <${Header}>\n          <${Title}> ${t('Are you sure to encrypt your Vault?')} <//>\n          <${Description}>\n            ${t('This will create a password for your exported file.')}<//\n          >\n        <//>\n      <//>\n    `}\n  >\n    <${UnlockVaultContainer} onSubmit=${handleSubmit(submit)}>\n      <${PearPassPasswordField}\n        placeholder=${t('Set file password')}\n        ...${register('password')}\n      />\n      <${PearPassPasswordField}\n        placeholder=${t('Repeat file password')}\n        ...${register('confirmPassword')}\n      />\n\n      <${ButtonPrimary} type=\"submit\"> ${t('Export')} <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateFileEncryptionPassword/styles.ts",
    "content": "import styled from 'styled-components'\n\nexport const Header = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n`\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\nexport const Description = styled.span`\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\nexport const VaultsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 15px;\n`\nexport const UnlockVaultContainer = styled.form`\n  display: flex;\n  flex-direction: column;\n  align-items: self-start;\n  gap: 20px;\n`\n"
  },
  {
    "path": "src/containers/Modal/CreateFolderModalContent/index.js",
    "content": "import React from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { useCreateFolder, useFolders } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { HeaderWrapper } from './styles'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport {\n  InputField,\n  ButtonLittle,\n  SaveIcon\n} from '../../../lib-react-components'\nimport { ModalContent } from '../ModalContent'\n\n/**\n * @param {{\n *  onCreate: (folderName: string) => void\n *  initialValues: {title: string}\n * }} props\n */\nexport const CreateFolderModalContent = ({ onCreate, initialValues }) => {\n  const { i18n } = useLingui()\n  const { closeModal } = useModal()\n  const { renameFolder } = useFolders()\n\n  const { isLoading, createFolder } = useCreateFolder({\n    onCompleted: (folderData) => {\n      onCreate?.(folderData)\n\n      closeModal()\n    }\n  })\n\n  useGlobalLoading({ isLoading })\n\n  const { data } = useFolders()\n\n  const customFolders = Object.values(data?.customFolders ?? {})\n\n  const schema = Validator.object({\n    title: Validator.string()\n      .required(i18n._('Title is required'))\n      .refine((value) => {\n        const isDuplicate = customFolders.some(\n          (folder) => folder.name === value\n        )\n\n        if (isDuplicate) {\n          return i18n._('Folder already exists')\n        }\n\n        return null\n      })\n  })\n\n  const { register, handleSubmit } = useForm({\n    initialValues: {\n      title: initialValues?.title ?? ''\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const onSubmit = async (values) => {\n    if (initialValues) {\n      await renameFolder(initialValues.title, values.title)\n      closeModal()\n    } else {\n      createFolder(values.title)\n    }\n  }\n\n  return html`\n    <${React.Fragment}>\n      <${ModalContent}\n        onSubmit=${handleSubmit(onSubmit)}\n        onClose=${closeModal}\n        headerChildren=${html`\n          <${HeaderWrapper}>\n            <${ButtonLittle}\n              data-testid=\"createfolder-button-submit\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${!!initialValues ? i18n._('Save') : i18n._('Create folder')}\n            <//>\n          <//>\n        `}\n      >\n        <${InputField}\n          data-testid=\"input-folder-name\"\n          label=${i18n._('Title')}\n          placeholder=${i18n._('Insert folder name')}\n          variant=\"outline\"\n          autoFocus\n          ...${register('title')}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateFolderModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const HeaderWrapper = styled.div`\n  display: flex;\n  justify-content: flex-end;\n`\n"
  },
  {
    "path": "src/containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing16}px`,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2.tsx",
    "content": "import React, { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { Button, Dialog, Form, InputField } from '@tetherto/pearpass-lib-ui-kit'\nimport { useCreateFolder, useFolders } from '@tetherto/pearpass-lib-vault'\nimport { createStyles } from './CreateFolderModalContentV2.styles'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\nexport interface CreateFolderModalContentV2Props {\n  onClose: () => void\n  onCreate?: (folderName: string) => void\n  onRename?: (newFolderName: string, previousFolderName: string) => void\n  initialValues?: { title: string }\n}\n\nexport const CreateFolderModalContentV2 = ({\n  onClose,\n  onCreate,\n  onRename,\n  initialValues\n}: CreateFolderModalContentV2Props) => {\n  const { t } = useTranslation()\n  const styles = createStyles()\n\n  const isRename = !!initialValues\n\n  const { renameFolder, data } = useFolders()\n  const customFolders = Object.values(data?.customFolders ?? {})\n\n  const [isRenameLoading, setIsRenameLoading] = useState(false)\n\n  const { isLoading: isCreateLoading, createFolder } = useCreateFolder({\n    onCompleted: (folderData: { folder: string }) => {\n      onCreate?.(folderData.folder)\n      onClose()\n    }\n  })\n\n  const isLoading = isRename ? isRenameLoading : isCreateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string()\n      .required(t('Title is required'))\n      .refine((value: string) => {\n        if (isRename && value === initialValues?.title) {\n          return null\n        }\n\n        const isDuplicate = (customFolders as { name: string }[]).some(\n          (folder: { name: string }) => folder.name === value\n        )\n\n        if (isDuplicate) {\n          return t('Folder already exists')\n        }\n\n        return null\n      })\n  })\n\n  const { register, handleSubmit, values } = useForm({\n    initialValues: {\n      title: initialValues?.title ?? ''\n    },\n    validate: (formValues: { title: string }) => schema.validate(formValues)\n  })\n\n  const onSubmit = async (formValues: { title: string }) => {\n    if (isLoading) return\n\n    if (isRename) {\n      try {\n        setIsRenameLoading(true)\n        await renameFolder(initialValues.title, formValues.title)\n        onRename?.(formValues.title, initialValues.title)\n        onClose()\n      } finally {\n        setIsRenameLoading(false)\n      }\n    } else {\n      createFolder(formValues.title)\n    }\n  }\n\n  const isSaveDisabled = !values?.title?.trim() || isLoading\n\n  const titleField = register('title')\n\n  return (\n    <Dialog\n      title={isRename ? t('Rename Folder') : t('Create New Folder')}\n      onClose={onClose}\n      testID=\"createfolder-dialog-v2\"\n      closeButtonTestID=\"createfolder-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={onClose}\n            data-testid=\"createfolder-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isSaveDisabled}\n            isLoading={isLoading}\n            onClick={handleSubmit(onSubmit)}\n            data-testid=\"createfolder-save-v2\"\n          >\n            {isRename ? t('Save') : t('Create New Folder')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createfolder-form-v2\"\n      >\n        <InputField\n          label={t('Folder Name')}\n          placeholder={t('Enter Name')}\n          value={titleField.value ?? ''}\n          onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n            titleField.onChange(e.target.value)\n          }\n          error={titleField.error || undefined}\n          testID=\"createfolder-name-v2\"\n        />\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditAuthenticatorModalContent/CreateOrEditAuthenticatorModalContent.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditAuthenticatorModalContent/CreateOrEditAuthenticatorModalContent.tsx",
    "content": "import React from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  AttachmentField as UiKitAttachmentField,\n  Button,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { useCreateRecord, useRecords } from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  TrashOutlined,\n  UploadFileFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { html } from 'htm/react'\nimport { createStyles } from './CreateOrEditAuthenticatorModalContent.styles'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { UploadFilesModalContentV2 } from '../../UploadFilesModalContentV2'\n\nexport type CreateOrEditAuthenticatorModalContentProps = {\n  initialRecord?: {\n    data: {\n      title: string\n      note: string\n      attachments: { id: string; name: string }[]\n      [key: string]: unknown\n    }\n    folder?: string\n    isFavorite?: boolean\n    attachments?: { id: string; name: string }[]\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange?: (type: string) => void\n}\n\nexport const CreateOrEditAuthenticatorModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite\n}: CreateOrEditAuthenticatorModalContentProps) => {\n  const { t } = useTranslation()\n  const { closeModal, setModal } = useModal()\n  const { theme } = useTheme()\n  const styles = createStyles()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Title is required')),\n    otpSecret: Validator.string(),\n    note: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      otpSecret:\n        initialRecord?.data?.otpInput ??\n        (initialRecord?.data?.otp as { secret?: string } | undefined)?.secret ??\n        '',\n      note: initialRecord?.data?.note ?? '',\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (formValues: Record<string, unknown>) =>\n      schema.validate(formValues)\n  })\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const otpInput = (formValues.otpSecret as string)?.trim() || undefined\n\n    const data = {\n      type: RECORD_TYPES.LOGIN,\n      folder: selectedFolder ?? initialRecord?.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        note: formValues.note,\n        attachments: formValues.attachments,\n        otpInput\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContentV2}\n        type=${'file'}\n        onFilesSelected=${(files: File[]) =>\n          handleFileSelect({\n            files: files as unknown as FileList,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const otpSecretField = register('otpSecret')\n  const noteField = register('note')\n\n  return (\n    <Dialog\n      title={\n        isEdit\n          ? t('Edit Authenticator Code Item')\n          : t('New Authenticator Code Item')\n      }\n      onClose={closeModal}\n      testID='createoredit-authenticator-dialog'\n      closeButtonTestID='createoredit-authenticator-close'\n      footer={\n        <>\n          <Button\n            variant='secondary'\n            size='small'\n            type='button'\n            onClick={closeModal}\n            data-testid='createoredit-authenticator-button-discard'\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant='primary'\n            size='small'\n            type='button'\n            disabled={isLoading || (!isEdit && !values.title?.trim())}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid='createoredit-authenticator-button-save'\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID='createoredit-authenticator-form'\n      >\n        <InputField\n          label={t('Title')}\n          placeholder={t('Enter Title')}\n          value={titleField.value}\n          onChange={(e) => titleField.onChange(e.target.value)}\n          error={titleField.error || undefined}\n          testID='createoredit-authenticator-input-title'\n        />\n\n        <MultiSlotInput testID='createoredit-authenticator-otp-slot'>\n          <PasswordField\n            label={t('Authenticator Secret Key')}\n            placeholder={t('Enter your key or URI')}\n            value={otpSecretField.value}\n            onChange={(e) => otpSecretField.onChange(e.target.value)}\n            error={otpSecretField.error || undefined}\n            testID='createoredit-authenticator-input-otpsecret'\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant='caption' color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <MultiSlotInput testID='createoredit-authenticator-comment-slot'>\n          <InputField\n            label={t('Comment')}\n            placeholder={t('Enter Comment')}\n            value={noteField.value}\n            onChange={(e) => noteField.onChange(e.target.value)}\n            error={noteField.error || undefined}\n            testID='createoredit-authenticator-input-comment'\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID='createoredit-authenticator-attachments-slot'\n          actions={\n            <Button\n              variant='tertiaryAccent'\n              size='small'\n              type='button'\n              iconBefore={<Add width={16} height={16} />}\n              onClick={handleFileLoad}\n              data-testid='createoredit-authenticator-button-addattachment'\n            >\n              {t('Add Another Attachment')}\n            </Button>\n          }\n        >\n          {values.attachments.length > 0\n            ? values.attachments.map(\n                (\n                  attachment: {\n                    id?: string\n                    tempId?: string\n                    name: string\n                  },\n                  index: number\n                ) => (\n                  <UiKitAttachmentField\n                    key={attachment.id || attachment.tempId}\n                    label={t('Attachment')}\n                    value={attachment.name}\n                    testID={`createoredit-authenticator-attachment-${index}`}\n                    rightSlot={\n                      <Button\n                        variant='tertiary'\n                        size='small'\n                        type='button'\n                        aria-label={t('Delete File')}\n                        iconBefore={\n                          <TrashOutlined\n                            width={16}\n                            height={16}\n                            color={theme.colors.colorTextPrimary}\n                          />\n                        }\n                        onClick={() =>\n                          setValue(\n                            ATTACHMENTS_FIELD_KEY,\n                            getFilteredAttachmentsById(\n                              values.attachments,\n                              attachment\n                            )\n                          )\n                        }\n                        data-testid={`createoredit-authenticator-button-deleteattachment-${index}`}\n                      />\n                    }\n                  />\n                )\n              )\n            : null}\n          <UiKitAttachmentField\n            label={t('Attachment')}\n            placeholder={t('Add or Drop File / Photos')}\n            onClick={handleFileLoad}\n            testID='createoredit-authenticator-attachment-upload'\n            rightSlot={\n              <UploadFileFilled\n                width={16}\n                height={16}\n                color={theme.colors.colorTextPrimary}\n              />\n            }\n          />\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditCreditCardModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  RECORD_TYPES,\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateCustomField } from '../../../../components/CreateCustomField'\nimport { FolderDropdown } from '../../../../components/FolderDropdown'\nimport { FormGroup } from '../../../../components/FormGroup'\nimport { FormModalHeaderWrapper } from '../../../../components/FormModalHeaderWrapper'\nimport { FormWrapper } from '../../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../../components/InputFieldNote'\nimport { RecordTypeMenu } from '../../../../components/RecordTypeMenu'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport {\n  ButtonLittle,\n  ButtonSingleInput,\n  CalendarIcon,\n  CreditCardIcon,\n  DeleteIcon,\n  ImageIcon,\n  InputField,\n  NineDotsIcon,\n  PasswordField,\n  SaveIcon,\n  UserIcon\n} from '../../../../lib-react-components'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { AttachmentField } from '../../../AttachmentField'\nimport { CustomFields } from '../../../CustomFields'\nimport { ModalContent } from '../../ModalContent'\nimport { DropdownsWrapper } from '../../styles'\nimport { UploadFilesModalContent } from '../../UploadImageModalContent'\n\n/**\n * @param {{\n *   initialRecord: {\n *   data: {\n *    title: string\n *    name: string\n *    number: string\n *    expireDate: string\n *    securityCode: string\n *    pinCode: string\n *    note: string\n *    customFields: {\n *       type: string\n *       name: string\n *    }[]\n *    attachments: { id: string, name: string}[]\n *  }\n * }\n *  selectedFolder?: string\n *  isFavorite?: boolean\n *  onTypeChange: (type: string) => void\n * }} props\n */\nexport const CreateOrEditCreditCardModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange\n}) => {\n  const { i18n } = useLingui()\n\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record created successfully')\n      })\n    }\n  })\n\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record updated successfully')\n      })\n    }\n  })\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(i18n._('Title is required')),\n    name: Validator.string(),\n    number: Validator.string().numeric(\n      i18n._('Number on card must be a number')\n    ),\n    expireDate: Validator.string(),\n    securityCode: Validator.string().numeric(i18n._('Note must be a string')),\n    pinCode: Validator.string().numeric(i18n._('Pin code must be a number')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string().required(i18n._('Comment is required'))\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required(),\n        buffer: Validator.object({})\n      })\n    )\n  })\n\n  const { values, register, handleSubmit, registerArray, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      name: initialRecord?.data?.name ?? '',\n      number: initialRecord?.data?.number ?? '',\n      expireDate: initialRecord?.data?.expireDate ?? '',\n      securityCode: initialRecord?.data?.securityCode ?? '',\n      pinCode: initialRecord?.data?.pinCode ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const {\n    value: list,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray('customFields')\n\n  const onSubmit = (values) => {\n    const data = {\n      type: RECORD_TYPES.CREDIT_CARD,\n      folder: values.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        title: values.title,\n        name: values.name,\n        number: values.number,\n        expireDate: values.expireDate,\n        securityCode: values.securityCode,\n        pinCode: values.pinCode,\n        note: values.note,\n        customFields: values.customFields,\n        attachments: values.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleRecordTypeChange = (item) => {\n    onTypeChange(item)\n  }\n\n  const handleExpireDateChange = (inputValue) => {\n    let value = inputValue.replace(/\\D/g, '')\n\n    if (value.length > 4) {\n      value = value.slice(0, 4)\n    }\n\n    if (value.length > 2) {\n      value = `${value.slice(0, 2)} ${value.slice(2)}`\n    }\n\n    setValue('expireDate', value)\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContent}\n        type=${'file'}\n        onFilesSelected=${(files) =>\n          handleFileSelect({\n            files,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const handleNumericInputChange = (value, field) => {\n    setValue(field, value.replace(/\\D/g, ''))\n  }\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      onSubmit=${handleSubmit(onSubmit)}\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}\n          buttons=${html`\n            <${ButtonLittle}\n              testId=\"createoredit-button-loadfile\"\n              startIcon=${ImageIcon}\n              onClick=${handleFileLoad}\n            >\n              ${i18n._('Load file')}\n            <//>\n            <${ButtonLittle}\n              testId=\"createoredit-button-save\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${i18n._('Save')}\n            <//>\n          `}\n        >\n          <${DropdownsWrapper}>\n            <${FolderDropdown}\n              testId=\"createoredit-dropdown-folder\"\n              selectedFolder=${values?.folder}\n              onFolderSelect=${(folder) => setValue('folder', folder?.name)}\n            />\n            ${!initialRecord &&\n            html` <${RecordTypeMenu}\n              testId=\"createoredit-dropdown-recordtype\"\n              selectedRecord=${RECORD_TYPES.CREDIT_CARD}\n              onRecordSelect=${(record) => handleRecordTypeChange(record?.type)}\n            />`}\n          <//>\n        <//>\n      `}\n    >\n      <${FormWrapper}>\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-title\"\n            label=${i18n._('Title')}\n            placeholder=${i18n._('Insert title')}\n            variant=\"outline\"\n            ...${register('title')}\n          />\n        <//>\n\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-fullname\"\n            label=${i18n._('Full name')}\n            placeholder=${i18n._('Full name')}\n            variant=\"outline\"\n            icon=${UserIcon}\n            ...${register('name')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-number\"\n            label=${i18n._('Number on card')}\n            placeholder=\"1234 1234 1234 1234 \"\n            variant=\"outline\"\n            icon=${CreditCardIcon}\n            ...${register('number')}\n            value=${values.number.replace(/(.{4})/g, '$1 ').trim()}\n            onChange=${(value) => handleNumericInputChange(value, 'number')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-expiredate\"\n            label=${i18n._('Date of expire')}\n            placeholder=\"MM YY\"\n            variant=\"outline\"\n            icon=${CalendarIcon}\n            value=${values.expireDate}\n            onChange=${handleExpireDateChange}\n          />\n\n          <${PasswordField}\n            testId=\"createoredit-input-securitycode\"\n            label=${i18n._('Security code')}\n            placeholder=\"123\"\n            variant=\"outline\"\n            icon=${CreditCardIcon}\n            ...${register('securityCode')}\n            onChange=${(value) =>\n              handleNumericInputChange(value, 'securityCode')}\n          />\n\n          <${PasswordField}\n            testId=\"createoredit-input-pincode\"\n            label=${i18n._('Pin code')}\n            placeholder=\"1234\"\n            variant=\"outline\"\n            icon=${NineDotsIcon}\n            ...${register('pinCode')}\n            onChange=${(value) => handleNumericInputChange(value, 'pinCode')}\n          />\n        <//>\n\n        ${values.attachments.length > 0 &&\n        html`\n          <${FormGroup}>\n            ${values.attachments.map(\n              (attachment) =>\n                html`<${AttachmentField}\n                  testId=\"createoredit-attachment\"\n                  key=${attachment.id || attachment.tempId}\n                  attachment=${attachment}\n                  label=${i18n._('File')}\n                  additionalItems=${html`\n                    <${ButtonSingleInput}\n                      testId=\"createoredit-button-deleteattachment\"\n                      startIcon=${DeleteIcon}\n                      onClick=${() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )}\n                    >\n                      ${i18n._('Delete File')}\n                    <//>\n                  `}\n                />`\n            )}\n          <//>\n        `}\n\n        <${FormGroup}>\n          <${InputFieldNote}\n            testId=\"createoredit-input-note\"\n            ...${register('note')}\n          />\n        <//>\n\n        <${CustomFields}\n          customFields=${list}\n          register=${registerItem}\n          removeItem=${removeItem}\n        />\n\n        <${FormGroup}>\n          <${CreateCustomField}\n            testId=\"createoredit-button-createcustom\"\n            onCreateCustom=${(type) => addItem({ type: type, name: type })}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditCreditCardModalContentV2/CreateOrEditCreditCardModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditCreditCardModalContentV2/CreateOrEditCreditCardModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  AttachmentField as UiKitAttachmentField,\n  Button,\n  DateField,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { useCreateRecord, useRecords } from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  TrashOutlined,\n  UploadFileFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { html } from 'htm/react'\n\nimport { createStyles } from './CreateOrEditCreditCardModalContentV2.styles'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { UploadFilesModalContentV2 } from '../../UploadFilesModalContentV2'\nimport { FolderDropdownV2 } from '../../../../components/FolderDropdown/FolderDropdownV2'\n\nexport type CreateOrEditCreditCardModalContentV2Props = {\n  initialRecord?: {\n    data: {\n      title: string\n      name: string\n      number: string\n      expireDate: string\n      securityCode: string\n      pinCode: string\n      note: string\n      customFields: { type: string; name: string }[]\n      attachments: { id: string; name: string }[]\n      [key: string]: unknown\n    }\n    folder?: string\n    isFavorite?: boolean\n    attachments?: { id: string; name: string }[]\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange: (type: string) => void\n}\n\nconst formatCardNumber = (raw: string): string => {\n  const digits = raw.replace(/\\D/g, '').slice(0, 16)\n  return digits.match(/.{1,4}/g)?.join(' ') ?? digits\n}\n\nconst formatExpireDate = (raw: string): string => {\n  const digits = raw.replace(/\\D/g, '').slice(0, 4)\n  return digits.length > 2 ? `${digits.slice(0, 2)} ${digits.slice(2)}` : digits\n}\n\nexport const CreateOrEditCreditCardModalContentV2 = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange: _onTypeChange\n}: CreateOrEditCreditCardModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Title is required')),\n    name: Validator.string(),\n    number: Validator.string(),\n    expireDate: Validator.string(),\n    securityCode: Validator.string().numeric(t('Should contain only numbers')),\n    pinCode: Validator.string().numeric(t('Should contain only numbers')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string()\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      name: initialRecord?.data?.name ?? '',\n      number: initialRecord?.data?.number ?? '',\n      expireDate: initialRecord?.data?.expireDate ?? '',\n      securityCode: initialRecord?.data?.securityCode ?? '',\n      pinCode: initialRecord?.data?.pinCode ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields?.length\n        ? initialRecord.data.customFields\n        : [{ type: 'note', name: 'note', note: '' }],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (formValues: Record<string, unknown>) =>\n      schema.validate(formValues)\n  })\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const data = {\n      type: RECORD_TYPES.CREDIT_CARD,\n      folder: formValues.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        name: formValues.name,\n        number: formValues.number,\n        expireDate: formValues.expireDate,\n        securityCode: formValues.securityCode,\n        pinCode: formValues.pinCode,\n        note: formValues.note,\n        customFields: (\n          (formValues.customFields as Array<{ type: string; note?: string }>) ??\n          []\n        ).filter((f) => f.note?.trim().length),\n        attachments: formValues.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContentV2}\n        type=${'file'}\n        onFilesSelected=${(files: File[]) =>\n          handleFileSelect({\n            files: files as unknown as FileList,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const nameField = register('name')\n  const securityCodeField = register('securityCode')\n  const pinCodeField = register('pinCode')\n  const noteField = register('note')\n\n  return (\n    <Dialog\n      title={isEdit ? t('Edit Credit Card Item') : t('New Credit Card Item')}\n      onClose={closeModal}\n      testID=\"createoredit-creditcard-dialog-v2\"\n      closeButtonTestID=\"createoredit-creditcard-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"createoredit-creditcard-button-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isLoading || (!isEdit && !values.title?.trim())}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid=\"createoredit-creditcard-button-save-v2\"\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createoredit-creditcard-form-v2\"\n      >\n        <InputField\n          label={t('Title')}\n          placeholder={t('Enter Title')}\n          value={titleField.value}\n          onChange={(e) => titleField.onChange(e.target.value)}\n          error={titleField.error || undefined}\n          testID=\"createoredit-creditcard-input-title-v2\"\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Details')}\n          </Text>\n        </div>\n\n        <MultiSlotInput testID=\"createoredit-creditcard-details-slot-v2\">\n          <InputField\n            label={t('Cardholder Name')}\n            placeholder={t('Enter Name')}\n            value={nameField.value}\n            onChange={(e) => nameField.onChange(e.target.value)}\n            error={nameField.error || undefined}\n            testID=\"createoredit-creditcard-input-name-v2\"\n          />\n          <InputField\n            label={t('Card Number')}\n            placeholder={t('Enter Card Number')}\n            value={values.number}\n            onChange={(e) => setValue('number', formatCardNumber(e.target.value))}\n            testID=\"createoredit-creditcard-input-number-v2\"\n          />\n          <DateField\n            label={t('Expiration Date')}\n            placeholder={t('Enter Expiration Date')}\n            value={values.expireDate}\n            onChange={(e) => setValue('expireDate', formatExpireDate(e.target.value))}\n            pickerMode=\"month-year\"\n            testID=\"createoredit-creditcard-input-expiredate-v2\"\n          />\n          <PasswordField\n            label={t('Security Code')}\n            placeholder={t('Enter Security Code')}\n            value={securityCodeField.value}\n            onChange={(e) =>\n              securityCodeField.onChange(e.target.value.replace(/\\D/g, ''))\n            }\n            error={securityCodeField.error || undefined}\n            testID=\"createoredit-creditcard-input-securitycode-v2\"\n          />\n          <PasswordField\n            label={t('PIN')}\n            placeholder={t('Enter PIN')}\n            value={pinCodeField.value}\n            onChange={(e) =>\n              pinCodeField.onChange(e.target.value.replace(/\\D/g, ''))\n            }\n            error={pinCodeField.error || undefined}\n            testID=\"createoredit-creditcard-input-pincode-v2\"\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <FolderDropdownV2\n          selectedFolder={values?.folder}\n          onFolderSelect={(name) =>\n            setValue('folder', name === values.folder ? '' : name)\n          }\n        />\n\n        <MultiSlotInput testID=\"createoredit-creditcard-comment-slot-v2\">\n          <InputField\n            label={t('Comment')}\n            placeholder={t('Enter Comment')}\n            value={noteField.value}\n            onChange={(e) => noteField.onChange(e.target.value)}\n            error={noteField.error || undefined}\n            testID=\"createoredit-creditcard-input-comment-v2\"\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID=\"createoredit-creditcard-attachments-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={handleFileLoad}\n              data-testid=\"createoredit-creditcard-button-addattachment-v2\"\n            >\n              {t('Add Another Attachment')}\n            </Button>\n          }\n        >\n          {values.attachments.length > 0\n            ? values.attachments.map(\n              (\n                attachment: {\n                  id?: string\n                  tempId?: string\n                  name: string\n                },\n                index: number\n              ) => (\n                <UiKitAttachmentField\n                  key={attachment.id || attachment.tempId}\n                  label={t('Attachment')}\n                  value={attachment.name}\n                  testID={`createoredit-creditcard-attachment-v2-${index}`}\n                  rightSlot={\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Delete File')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )\n                      }\n                      data-testid={`createoredit-creditcard-button-deleteattachment-v2-${index}`}\n                    />\n                  }\n                />\n              )\n            )\n            : null}\n          <UiKitAttachmentField\n            label={t('Attachment')}\n            placeholder={t('Add or Drop File / Photos')}\n            onClick={handleFileLoad}\n            testID=\"createoredit-creditcard-attachment-upload-v2\"\n            rightSlot={\n              <UploadFileFilled\n                width={16}\n                height={16}\n                color={theme.colors.colorTextPrimary}\n              />\n            }\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID=\"createoredit-creditcard-hiddenmessage-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() => addCustomField({ type: 'note', name: 'note' })}\n              data-testid=\"createoredit-creditcard-button-addhiddenmessage-v2\"\n            >\n              {t('Add Another Message')}\n            </Button>\n          }\n        >\n          {customFieldsList.map((field: { id: string }, index: number) => {\n            const fieldReg = registerCustomFieldItem('note', index)\n            const canRemove = customFieldsList.length > 1\n            return (\n              <PasswordField\n                key={field.id}\n                label={t('Hidden Message')}\n                placeholder={t('Enter Hidden Message')}\n                value={fieldReg.value}\n                onChange={(e) => fieldReg.onChange(e.target.value)}\n                error={fieldReg.error || undefined}\n                testID={`createoredit-creditcard-input-hiddenmessage-v2-${index}`}\n                rightSlot={\n                  canRemove ? (\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Remove')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeCustomFieldItem(index)}\n                      data-testid={`createoredit-creditcard-button-removehiddenmessage-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditCustomModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  RECORD_TYPES,\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateCustomField } from '../../../../components/CreateCustomField'\nimport { FolderDropdown } from '../../../../components/FolderDropdown'\nimport { FormGroup } from '../../../../components/FormGroup'\nimport { FormModalHeaderWrapper } from '../../../../components/FormModalHeaderWrapper'\nimport { FormWrapper } from '../../../../components/FormWrapper'\nimport { RecordTypeMenu } from '../../../../components/RecordTypeMenu'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport {\n  ButtonLittle,\n  ButtonSingleInput,\n  DeleteIcon,\n  ImageIcon,\n  InputField,\n  SaveIcon\n} from '../../../../lib-react-components'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { AttachmentField } from '../../../AttachmentField'\nimport { CustomFields } from '../../../CustomFields'\nimport { ModalContent } from '../../ModalContent'\nimport { DropdownsWrapper } from '../../styles'\nimport { UploadFilesModalContent } from '../../UploadImageModalContent'\n\n/**\n * @param {{\n *  initialRecord: {\n *    data: {\n *      title: string\n *      customFields: {\n *          note: string\n *          type: string\n *     }[]\n *    attachments: { id: string, name: string}[]\n *   }\n *  }\n *  selectedFolder?: string\n *  isFavorite?: boolean\n *  onTypeChange: (type: string) => void\n * }} props\n * @returns\n */\nexport const CreateOrEditCustomModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange\n}) => {\n  const { i18n } = useLingui()\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record created successfully')\n      })\n    }\n  })\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record updated successfully')\n      })\n    }\n  })\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(i18n._('Title is required')),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string().required(i18n._('Comment is required'))\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title || '',\n      customFields: initialRecord?.data?.customFields || [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const {\n    value: list,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (values) => {\n    const data = {\n      type: RECORD_TYPES.CUSTOM,\n      folder: values.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        title: values.title,\n        customFields: values.customFields,\n        attachments: values.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords(\n        [\n          {\n            ...initialRecord,\n            ...data\n          }\n        ],\n        onError\n      )\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleRecordTypeChange = (item) => {\n    onTypeChange(item)\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContent}\n        type=${'file'}\n        onFilesSelected=${(files) =>\n          handleFileSelect({\n            files,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  return html`\n    <${ModalContent}\n      onSubmit=${handleSubmit(onSubmit)}\n      onClose=${closeModal}\n      closeButtonDataId=\"custom-close-button\"\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}\n          buttons=${html`\n            <${ButtonLittle}\n              testId=\"createoredit-button-loadfile\"\n              startIcon=${ImageIcon}\n              onClick=${handleFileLoad}\n            >\n              ${i18n._('Load file')}\n            <//>\n            <${ButtonLittle}\n              testId=\"createoredit-button-save\"\n              dataId=\"custom-save-button\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${i18n._('Save')}\n            <//>\n          `}\n        >\n          <${DropdownsWrapper}>\n            <${FolderDropdown}\n              testId=\"createoredit-dropdown-folder\"\n              selectedFolder=${values?.folder}\n              onFolderSelect=${(folder) => setValue('folder', folder?.name)}\n            />\n            ${!initialRecord &&\n            html` <${RecordTypeMenu}\n              testId=\"createoredit-dropdown-recordtype\"\n              selectedRecord=${RECORD_TYPES.CUSTOM}\n              onRecordSelect=${(record) => handleRecordTypeChange(record?.type)}\n            />`}\n          <//>\n        <//>\n      `}\n    >\n      <${FormWrapper}>\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-title\"\n            dataId=\"custom-title-input\"\n            label=${i18n._('Title')}\n            placeholder=${i18n._('Insert title')}\n            variant=\"outline\"\n            ...${register('title')}\n          />\n        <//>\n\n        ${values.attachments.length > 0 &&\n        html`\n          <${FormGroup}>\n            ${values.attachments.map(\n              (attachment) =>\n                html`<${AttachmentField}\n                  testId=\"createoredit-attachment\"\n                  key=${attachment.id || attachment.tempId}\n                  attachment=${attachment}\n                  label=${i18n._('File')}\n                  additionalItems=${html`\n                    <${ButtonSingleInput}\n                      startIcon=${DeleteIcon}\n                      onClick=${() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )}\n                    >\n                      ${i18n._('Delete File')}\n                    <//>\n                  `}\n                />`\n            )}\n          <//>\n        `}\n\n        <div data-id=\"custom-field\">\n          <${CustomFields}\n            customFields=${list}\n            register=${registerItem}\n            removeItem=${removeItem}\n          />\n        </div>\n\n        <${FormGroup}>\n          <${CreateCustomField}\n            testId=\"createoredit-button-createcustom\"\n            dataId=\"custom-add-field-button\"\n            onCreateCustom=${(type) => addItem({ type: type, name: type })}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditCustomModalContentV2/CreateOrEditCustomModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditCustomModalContentV2/CreateOrEditCustomModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  AttachmentField as UiKitAttachmentField,\n  Button,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { useCreateRecord, useRecords } from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  TrashOutlined,\n  UploadFileFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { html } from 'htm/react'\n\nimport { createStyles } from './CreateOrEditCustomModalContentV2.styles'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { UploadFilesModalContentV2 } from '../../UploadFilesModalContentV2'\nimport { FolderDropdownV2 } from '../../../../components/FolderDropdown/FolderDropdownV2'\n\nexport type CreateOrEditCustomModalContentV2Props = {\n  initialRecord?: {\n    data: {\n      title: string\n      note?: string\n      customFields: { type: string; name?: string; note?: string }[]\n      attachments: { id: string; name: string }[]\n      [key: string]: unknown\n    }\n    folder?: string\n    isFavorite?: boolean\n    attachments?: { id: string; name: string }[]\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange: (type: string) => void\n}\n\nexport const CreateOrEditCustomModalContentV2 = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange: _onTypeChange\n}: CreateOrEditCustomModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Title is required')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string()\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields?.length\n        ? initialRecord.data.customFields\n        : [{ type: 'note', name: 'note', note: '' }],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (formValues: Record<string, unknown>) =>\n      schema.validate(formValues)\n  })\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const data = {\n      type: RECORD_TYPES.CUSTOM,\n      folder: formValues.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        note: formValues.note,\n        customFields: (\n          (formValues.customFields as Array<{ type: string; note?: string }>) ??\n          []\n        ).filter((f) => f.note?.trim().length),\n        attachments: formValues.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContentV2}\n        type=${'file'}\n        onFilesSelected=${(files: File[]) =>\n          handleFileSelect({\n            files: files as unknown as FileList,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const noteField = register('note')\n\n  return (\n    <Dialog\n      title={isEdit ? t('Edit Other Item') : t('New Other Item')}\n      onClose={closeModal}\n      testID=\"createoredit-custom-dialog-v2\"\n      closeButtonTestID=\"createoredit-custom-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"createoredit-custom-button-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isLoading || (!isEdit && !values.title?.trim())}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid=\"createoredit-custom-button-save-v2\"\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createoredit-custom-form-v2\"\n      >\n        <InputField\n          label={t('Title')}\n          placeholder={t('Enter Title')}\n          value={titleField.value}\n          onChange={(e) => titleField.onChange(e.target.value)}\n          error={titleField.error || undefined}\n          testID=\"createoredit-custom-input-title-v2\"\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <FolderDropdownV2\n          selectedFolder={values?.folder}\n          onFolderSelect={(name) =>\n            setValue('folder', name === values.folder ? '' : name)\n          }\n        />\n\n        <MultiSlotInput testID=\"createoredit-custom-comments-slot-v2\">\n          <InputField\n            label={t('Comment')}\n            placeholder={t('Enter Comment')}\n            value={noteField.value}\n            onChange={(e) => noteField.onChange(e.target.value)}\n            error={noteField.error || undefined}\n            testID=\"createoredit-custom-input-comment-v2\"\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID=\"createoredit-custom-attachments-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={handleFileLoad}\n              data-testid=\"createoredit-custom-button-addattachment-v2\"\n            >\n              {t('Add Another Attachment')}\n            </Button>\n          }\n        >\n          {values.attachments.length > 0\n            ? values.attachments.map(\n              (\n                attachment: {\n                  id?: string\n                  tempId?: string\n                  name: string\n                },\n                index: number\n              ) => (\n                <UiKitAttachmentField\n                  key={attachment.id || attachment.tempId}\n                  label={t('Attachment')}\n                  value={attachment.name}\n                  testID={`createoredit-custom-attachment-v2-${index}`}\n                  rightSlot={\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Delete File')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )\n                      }\n                      data-testid={`createoredit-custom-button-deleteattachment-v2-${index}`}\n                    />\n                  }\n                />\n              )\n            )\n            : null}\n          <UiKitAttachmentField\n            label={t('Attachment')}\n            placeholder={t('Add or Drop File / Photos')}\n            onClick={handleFileLoad}\n            testID=\"createoredit-custom-attachment-upload-v2\"\n            rightSlot={\n              <UploadFileFilled\n                width={16}\n                height={16}\n                color={theme.colors.colorTextPrimary}\n              />\n            }\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID=\"createoredit-custom-hiddenmessage-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() =>\n                addCustomField({ type: 'note', name: 'note', note: '' })\n              }\n              data-testid=\"createoredit-custom-button-addhiddenmessage-v2\"\n            >\n              {t('Add Another Message')}\n            </Button>\n          }\n        >\n          {customFieldsList.map((field: { id: string }, index: number) => {\n            const fieldReg = registerCustomFieldItem('note', index)\n            const canRemove = customFieldsList.length > 1\n            return (\n              <PasswordField\n                key={field.id}\n                label={t('Hidden Message')}\n                placeholder={t('Enter Hidden Message')}\n                value={fieldReg.value}\n                onChange={(e) => fieldReg.onChange(e.target.value)}\n                error={fieldReg.error || undefined}\n                testID={`createoredit-custom-input-hiddenmessage-v2-${index}`}\n                rightSlot={\n                  canRemove ? (\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Remove')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeCustomFieldItem(index)}\n                      data-testid={`createoredit-custom-button-removehiddenmessage-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditIdentityModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { DATE_FORMAT } from '@tetherto/pearpass-lib-constants'\nimport {\n  RECORD_TYPES,\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateCustomField } from '../../../../components/CreateCustomField'\nimport { FolderDropdown } from '../../../../components/FolderDropdown'\nimport { FormGroup } from '../../../../components/FormGroup'\nimport { FormModalHeaderWrapper } from '../../../../components/FormModalHeaderWrapper'\nimport { FormWrapper } from '../../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../../components/InputFieldNote'\nimport { RecordTypeMenu } from '../../../../components/RecordTypeMenu'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport {\n  ButtonLittle,\n  ButtonSingleInput,\n  CalendarIcon,\n  DeleteIcon,\n  EmailIcon,\n  GenderIcon,\n  GroupIcon,\n  ImageIcon,\n  InputField,\n  NationalityIcon,\n  PhoneIcon,\n  SaveIcon,\n  UserIcon\n} from '../../../../lib-react-components'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { AttachmentField } from '../../../AttachmentField'\nimport { CustomFields } from '../../../CustomFields'\nimport { ImagesField } from '../../../ImagesField'\nimport { ModalContent } from '../../ModalContent'\nimport { DropdownsWrapper } from '../../styles'\nimport { UploadFilesModalContent } from '../../UploadImageModalContent'\n\n/**\n * @param {{\n *   initialRecord: {\n *     data: {\n *       title: string\n *       fullName: string\n *       email: string\n *       phoneNumber: string\n *       address: string\n *       zip: string\n *       city: string\n *       region: string\n *       country: string\n *       note: string\n *       customFields: {\n *         note: string\n *         type: string\n *       }[]\n *       passportFullName: string\n *       passportNumber: string\n *       passportIssuingCountry: string\n *       passportDateOfIssue: string\n *       passportExpiryDate: string\n *       passportNationality: string\n *       passportDob: string\n *       passportGender: string\n *       passportPicture: { id: string, name: string}[]\n *       idCardNumber: string\n *       idCardDateOfIssue: string\n *       idCardExpiryDate: string\n *       idCardIssuingCountry: string\n *       idCardPicture: { id: string, name: string}[]\n *       drivingLicenseNumber: string\n *       drivingLicenseDateOfIssue: string\n *       drivingLicenseExpiryDate: string\n *       drivingLicenseIssuingCountry: string\n *       drivingLicensePicture: { id: string, name: string}[]\n *       attachments: { id: string, name: string}[]\n *     }\n *     folder?: string\n *   }\n *   selectedFolder?: string\n *   isFavorite?: boolean\n *   onTypeChange: (type: string) => void\n * }} props\n */\nexport const CreateOrEditIdentityModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange\n}) => {\n  const { i18n } = useLingui()\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record created successfully')\n      })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record updated successfully')\n      })\n    }\n  })\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n\n  const schema = Validator.object({\n    title: Validator.string().required(i18n._('Title is required')),\n    fullName: Validator.string(),\n    email: Validator.string().email(i18n._('Invalid email format')),\n    phoneNumber: Validator.string(),\n    address: Validator.string(),\n    zip: Validator.string(),\n    city: Validator.string(),\n    region: Validator.string(),\n    country: Validator.string(),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string().required(i18n._('Comment is required'))\n      })\n    ),\n    folder: Validator.string(),\n    passportFullName: Validator.string(),\n    passportNumber: Validator.string(),\n    passportIssuingCountry: Validator.string(),\n    passportDateOfIssue: Validator.string(),\n    passportExpiryDate: Validator.string(),\n    passportNationality: Validator.string(),\n    passportDob: Validator.string(),\n    passportGender: Validator.string(),\n    passportPicture: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    ),\n    idCardNumber: Validator.string(),\n    idCardDateOfIssue: Validator.string(),\n    idCardExpiryDate: Validator.string(),\n    idCardIssuingCountry: Validator.string(),\n    idCardPicture: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    ),\n    drivingLicenseNumber: Validator.string(),\n    drivingLicenseDateOfIssue: Validator.string(),\n    drivingLicenseExpiryDate: Validator.string(),\n    drivingLicenseIssuingCountry: Validator.string(),\n    drivingLicensePicture: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    ),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      fullName: initialRecord?.data?.fullName ?? '',\n      email: initialRecord?.data?.email ?? '',\n      phoneNumber: initialRecord?.data?.phoneNumber ?? '',\n      address: initialRecord?.data?.address ?? '',\n      zip: initialRecord?.data?.zip ?? '',\n      city: initialRecord?.data?.city ?? '',\n      region: initialRecord?.data?.region ?? '',\n      country: initialRecord?.data?.country ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields || [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      passportFullName: initialRecord?.data?.passportFullName ?? '',\n      passportNumber: initialRecord?.data?.passportNumber ?? '',\n      passportIssuingCountry: initialRecord?.data?.passportIssuingCountry ?? '',\n      passportDateOfIssue: initialRecord?.data?.passportDateOfIssue ?? '',\n      passportExpiryDate: initialRecord?.data?.passportExpiryDate ?? '',\n      passportNationality: initialRecord?.data?.passportNationality ?? '',\n      passportDob: initialRecord?.data?.passportDob ?? '',\n      passportGender: initialRecord?.data?.passportGender ?? '',\n      passportPicture: initialRecord?.data?.passportPicture || [],\n      idCardNumber: initialRecord?.data?.idCardNumber ?? '',\n      idCardDateOfIssue: initialRecord?.data?.idCardDateOfIssue ?? '',\n      idCardExpiryDate: initialRecord?.data?.idCardExpiryDate ?? '',\n      idCardIssuingCountry: initialRecord?.data?.idCardIssuingCountry ?? '',\n      idCardPicture: initialRecord?.data?.idCardPicture || [],\n      drivingLicenseNumber: initialRecord?.data?.drivingLicenseNumber ?? '',\n      drivingLicenseDateOfIssue:\n        initialRecord?.data?.drivingLicenseDateOfIssue ?? '',\n      drivingLicenseExpiryDate:\n        initialRecord?.data?.drivingLicenseExpiryDate ?? '',\n      drivingLicenseIssuingCountry:\n        initialRecord?.data?.drivingLicenseIssuingCountry ?? '',\n      drivingLicensePicture: initialRecord?.data?.drivingLicensePicture || [],\n      attachments: initialRecord?.attachments || []\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const {\n    value: list,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [\n      ATTACHMENTS_FIELD_KEY,\n      'passportPicture',\n      'idCardPicture',\n      'drivingLicensePicture'\n    ],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (values) => {\n    const data = {\n      type: RECORD_TYPES.IDENTITY,\n      folder: values.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        title: values.title,\n        fullName: values.fullName,\n        email: values.email,\n        phoneNumber: values.phoneNumber,\n        address: values.address,\n        zip: values.zip,\n        city: values.city,\n        region: values.region,\n        country: values.country,\n        note: values.note,\n        customFields: values.customFields,\n        passportFullName: values.passportFullName,\n        passportNumber: values.passportNumber,\n        passportIssuingCountry: values.passportIssuingCountry,\n        passportDateOfIssue: values.passportDateOfIssue,\n        passportExpiryDate: values.passportExpiryDate,\n        passportNationality: values.passportNationality,\n        passportDob: values.passportDob,\n        passportGender: values.passportGender,\n        passportPicture: values.passportPicture,\n        idCardNumber: values.idCardNumber,\n        idCardDateOfIssue: values.idCardDateOfIssue,\n        idCardExpiryDate: values.idCardExpiryDate,\n        idCardIssuingCountry: values.idCardIssuingCountry,\n        idCardPicture: values.idCardPicture,\n        drivingLicenseNumber: values.drivingLicenseNumber,\n        drivingLicenseDateOfIssue: values.drivingLicenseDateOfIssue,\n        drivingLicenseExpiryDate: values.drivingLicenseExpiryDate,\n        drivingLicenseIssuingCountry: values.drivingLicenseIssuingCountry,\n        drivingLicensePicture: values.drivingLicensePicture,\n        attachments: values.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords(\n        [\n          {\n            ...initialRecord,\n            ...data\n          }\n        ],\n        onError\n      )\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = (fieldName) => {\n    setModal(\n      html`<${UploadFilesModalContent}\n        type=${'file'}\n        onFilesSelected=${(files) =>\n          handleFileSelect({\n            files,\n            fieldName,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const handleAttachmentRemove = (fieldName, index) => {\n    const updatedAttachments = values[fieldName].filter(\n      (_, idx) => idx !== index\n    )\n    setValue(fieldName, updatedAttachments)\n  }\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      onSubmit=${handleSubmit(onSubmit)}\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}\n          buttons=${html`\n            <${ButtonLittle}\n              testId=\"createoredit-button-loadfile\"\n              startIcon=${ImageIcon}\n              onClick=${() => handleFileLoad(ATTACHMENTS_FIELD_KEY)}\n            >\n              ${i18n._('Load file')}\n            <//>\n            <${ButtonLittle}\n              testId=\"createoredit-button-save\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${i18n._('Save')}\n            <//>\n          `}\n        >\n          <${DropdownsWrapper}>\n            <${FolderDropdown}\n              testId=\"createoredit-dropdown-folder\"\n              selectedFolder=${values?.folder}\n              onFolderSelect=${(folder) => setValue('folder', folder?.name)}\n            />\n            ${!initialRecord &&\n            html` <${RecordTypeMenu}\n              testId=\"createoredit-dropdown-recordtype\"\n              selectedRecord=${RECORD_TYPES.IDENTITY}\n              onRecordSelect=${(record) => onTypeChange(record?.type)}\n            />`}\n          <//>\n        <//>\n      `}\n    >\n      <${FormWrapper}>\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-title\"\n            label=${i18n._('Title')}\n            placeholder=${i18n._('Insert title')}\n            variant=\"outline\"\n            ...${register('title')}\n          />\n        <//>\n\n        <${FormGroup}\n          testId=\"createoredit-section-personalinfo\"\n          title=${i18n._('Personal information')}\n          isCollapse\n        >\n          <${InputField}\n            testId=\"createoredit-input-fullname\"\n            label=${i18n._('Full name')}\n            placeholder=${i18n._('Full name')}\n            variant=\"outline\"\n            icon=${UserIcon}\n            ...${register('fullName')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-email\"\n            label=${i18n._('Email')}\n            placeholder=${i18n._('Insert email')}\n            variant=\"outline\"\n            icon=${EmailIcon}\n            ...${register('email')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-phonenumber\"\n            label=${i18n._('Phone number ')}\n            placeholder=${i18n._('Phone number ')}\n            variant=\"outline\"\n            icon=${PhoneIcon}\n            ...${register('phoneNumber')}\n          />\n        <//>\n\n        <${FormGroup}\n          testId=\"createoredit-section-address\"\n          title=${i18n._('Detail of address')}\n          isCollapse\n        >\n          <${InputField}\n            testId=\"createoredit-input-address\"\n            label=${i18n._('Address')}\n            placeholder=${i18n._('Address')}\n            variant=\"outline\"\n            ...${register('address')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-zip\"\n            label=${i18n._('ZIP')}\n            placeholder=${i18n._('Insert zip')}\n            variant=\"outline\"\n            ...${register('zip')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-city\"\n            label=${i18n._('City')}\n            placeholder=${i18n._('City')}\n            variant=\"outline\"\n            ...${register('city')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-region\"\n            label=${i18n._('Region')}\n            placeholder=${i18n._('Region')}\n            variant=\"outline\"\n            ...${register('region')}\n          />\n\n          <${InputField}\n            testId=\"createoredit-input-country\"\n            label=${i18n._('Country')}\n            placeholder=${i18n._('Country')}\n            variant=\"outline\"\n            ...${register('country')}\n          />\n        <//>\n\n        <${FormGroup}\n          testId=\"createoredit-section-passport\"\n          defaultOpenState=${false}\n          title=${i18n._('Passport')}\n          isCollapse\n        >\n          <div>\n            <${InputField}\n              testId=\"createoredit-input-passportfullname\"\n              label=${i18n._('Full name')}\n              placeholder=\"John Smith\"\n              variant=\"outline\"\n              icon=${UserIcon}\n              ...${register('passportFullName')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-passportnumber\"\n              label=${i18n._('Passport number')}\n              placeholder=${i18n._('Insert numbers')}\n              variant=\"outline\"\n              icon=${GroupIcon}\n              ...${register('passportNumber')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-passportissuingcountry\"\n              label=${i18n._('Issuing country')}\n              placeholder=${i18n._('Insert country')}\n              variant=\"outline\"\n              icon=${NationalityIcon}\n              ...${register('passportIssuingCountry')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-passportdateofissue\"\n              label=${i18n._('Date of issue')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              icon=${CalendarIcon}\n              ...${register('passportDateOfIssue')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-passportexpirydate\"\n              label=${i18n._('Expiry Date')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              icon=${CalendarIcon}\n              ...${register('passportExpiryDate')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-passportnationality\"\n              label=${i18n._('Nationality')}\n              placeholder=${i18n._('Insert your nationality')}\n              variant=\"outline\"\n              icon=${NationalityIcon}\n              ...${register('passportNationality')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-passportdob\"\n              label=${i18n._('Date of birth')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              icon=${CalendarIcon}\n              ...${register('passportDob')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-passportgender\"\n              label=${i18n._('Gender')}\n              placeholder=${i18n._('M/F')}\n              variant=\"outline\"\n              icon=${GenderIcon}\n              ...${register('passportGender')}\n            />\n          <//>\n          <${ImagesField}\n            testId=\"createoredit-imagesfield-passportimages\"\n            title=${i18n._('Passport Images')}\n            onAdd=${() => handleFileLoad('passportPicture')}\n            pictures=${values.passportPicture}\n            onRemove=${(index) =>\n              handleAttachmentRemove('passportPicture', index)}\n          />\n        <//>\n\n        <${FormGroup}\n          testId=\"createoredit-section-idcard\"\n          defaultOpenState=${false}\n          title=${i18n._('Identity card')}\n          isCollapse\n        >\n          <div>\n            <${InputField}\n              testId=\"createoredit-input-idcardnumber\"\n              label=${i18n._('ID number')}\n              placeholder=\"123456789\"\n              variant=\"outline\"\n              icon=${GroupIcon}\n              ...${register('idCardNumber')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-idcarddateofissue\"\n              label=${i18n._('Creation date')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              icon=${CalendarIcon}\n              ...${register('idCardDateOfIssue')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-idcardexpirydate\"\n              label=${i18n._('Expiry date')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              icon=${CalendarIcon}\n              ...${register('idCardExpiryDate')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-idcardissuingcountry\"\n              label=${i18n._('Issue country')}\n              placeholder=${i18n._('Insert country')}\n              variant=\"outline\"\n              icon=${NationalityIcon}\n              ...${register('idCardIssuingCountry')}\n            />\n          <//>\n          <${ImagesField}\n            testId=\"createoredit-imagesfield-idcardimages\"\n            title=${i18n._('Identity Card Images')}\n            onAdd=${() => handleFileLoad('idCardPicture')}\n            pictures=${values.idCardPicture}\n            onRemove=${(index) =>\n              handleAttachmentRemove('idCardPicture', index)}\n          />\n        <//>\n\n        <${FormGroup}\n          testId=\"createoredit-section-drivinglicense\"\n          defaultOpenState=${false}\n          title=${i18n._('Driving license')}\n          isCollapse\n        >\n          <div>\n            <${InputField}\n              testId=\"createoredit-input-drivinglicensenumber\"\n              label=${i18n._('ID number')}\n              placeholder=\"123456789\"\n              variant=\"outline\"\n              icon=${GroupIcon}\n              ...${register('drivingLicenseNumber')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-drivinglicensedateofissue\"\n              label=${i18n._('Creation date')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              icon=${CalendarIcon}\n              ...${register('drivingLicenseDateOfIssue')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-drivinglicenseexpirydate\"\n              label=${i18n._('Expiry date')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              icon=${CalendarIcon}\n              ...${register('drivingLicenseExpiryDate')}\n            />\n\n            <${InputField}\n              testId=\"createoredit-input-drivinglicenseissuingcountry\"\n              label=${i18n._('Issue country')}\n              placeholder=${i18n._('Insert country')}\n              variant=\"outline\"\n              icon=${NationalityIcon}\n              ...${register('drivingLicenseIssuingCountry')}\n            />\n          <//>\n          <${ImagesField}\n            testId=\"createoredit-imagesfield-drivinglicenseimages\"\n            title=${i18n._('Driving License Images')}\n            onAdd=${() => handleFileLoad('drivingLicensePicture')}\n            pictures=${values.drivingLicensePicture}\n            onRemove=${(index) =>\n              handleAttachmentRemove('drivingLicensePicture', index)}\n          />\n        <//>\n\n        ${values.attachments.length > 0 &&\n        html`\n          <${FormGroup}>\n            ${values.attachments.map(\n              (attachment, index) =>\n                html`<${AttachmentField}\n                  testId=\"createoredit-attachment\"\n                  attachment=${attachment}\n                  label=${i18n._('File')}\n                  additionalItems=${html`\n                    <${ButtonSingleInput}\n                      testId=\"createoredit-button-deleteattachment\"\n                      startIcon=${DeleteIcon}\n                      onClick=${() =>\n                        handleAttachmentRemove(ATTACHMENTS_FIELD_KEY, index)}\n                    >\n                      ${i18n._('Delete File')}\n                    <//>\n                  `}\n                />`\n            )}\n          <//>\n        `}\n\n        <${FormGroup}>\n          <${InputFieldNote}\n            testId=\"createoredit-input-note\"\n            ...${register('note')}\n          />\n        <//>\n\n        <${CustomFields}\n          customFields=${list}\n          register=${registerItem}\n          removeItem=${removeItem}\n        />\n\n        <${FormGroup}>\n          <${CreateCustomField}\n            testId=\"createoredit-button-createcustom\"\n            onCreateCustom=${(type) => addItem({ type: type, name: type })}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditIdentityModalContentV2/CreateOrEditIdentityModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditIdentityModalContentV2/CreateOrEditIdentityModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  AttachmentField as UiKitAttachmentField,\n  Button,\n  DateField,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { useCreateRecord, useRecords } from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  TrashOutlined,\n  UploadFileFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { html } from 'htm/react'\n\nimport { createStyles } from './CreateOrEditIdentityModalContentV2.styles'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { UploadFilesModalContentV2 } from '../../UploadFilesModalContentV2'\nimport { FolderDropdownV2 } from '../../../../components/FolderDropdown/FolderDropdownV2'\n\ntype IdentityData = {\n  title: string\n  fullName: string\n  email: string\n  phoneNumber: string\n  address: string\n  zip: string\n  city: string\n  region: string\n  country: string\n  note: string\n  customFields: { type: string; note?: string }[]\n  passportFullName: string\n  passportNumber: string\n  passportIssuingCountry: string\n  passportDateOfIssue: string\n  passportExpiryDate: string\n  passportNationality: string\n  passportDob: string\n  passportGender: string\n  idCardNumber: string\n  idCardDateOfIssue: string\n  idCardExpiryDate: string\n  idCardIssuingCountry: string\n  drivingLicenseNumber: string\n  drivingLicenseDateOfIssue: string\n  drivingLicenseExpiryDate: string\n  drivingLicenseIssuingCountry: string\n  attachments: { id: string; name: string }[]\n}\n\nexport type CreateOrEditIdentityModalContentV2Props = {\n  initialRecord?: {\n    data: Partial<IdentityData> & Record<string, unknown>\n    folder?: string\n    isFavorite?: boolean\n    attachments?: { id: string; name: string }[]\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange: (type: string) => void\n}\n\nexport const CreateOrEditIdentityModalContentV2 = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange: _onTypeChange\n}: CreateOrEditIdentityModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Title is required')),\n    fullName: Validator.string(),\n    email: Validator.string().email(t('Invalid email format')),\n    phoneNumber: Validator.string(),\n    address: Validator.string(),\n    zip: Validator.string(),\n    city: Validator.string(),\n    region: Validator.string(),\n    country: Validator.string(),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string()\n      })\n    ),\n    folder: Validator.string(),\n    passportFullName: Validator.string(),\n    passportNumber: Validator.string(),\n    passportIssuingCountry: Validator.string(),\n    passportDateOfIssue: Validator.string(),\n    passportExpiryDate: Validator.string(),\n    passportNationality: Validator.string(),\n    passportDob: Validator.string(),\n    passportGender: Validator.string(),\n    idCardNumber: Validator.string(),\n    idCardDateOfIssue: Validator.string(),\n    idCardExpiryDate: Validator.string(),\n    idCardIssuingCountry: Validator.string(),\n    drivingLicenseNumber: Validator.string(),\n    drivingLicenseDateOfIssue: Validator.string(),\n    drivingLicenseExpiryDate: Validator.string(),\n    drivingLicenseIssuingCountry: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      fullName: initialRecord?.data?.fullName ?? '',\n      email: initialRecord?.data?.email ?? '',\n      phoneNumber: initialRecord?.data?.phoneNumber ?? '',\n      address: initialRecord?.data?.address ?? '',\n      zip: initialRecord?.data?.zip ?? '',\n      city: initialRecord?.data?.city ?? '',\n      region: initialRecord?.data?.region ?? '',\n      country: initialRecord?.data?.country ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields?.length\n        ? initialRecord.data.customFields\n        : [{ type: 'note', note: '' }],\n      folder: selectedFolder ?? initialRecord?.folder,\n      passportFullName: initialRecord?.data?.passportFullName ?? '',\n      passportNumber: initialRecord?.data?.passportNumber ?? '',\n      passportIssuingCountry: initialRecord?.data?.passportIssuingCountry ?? '',\n      passportDateOfIssue: initialRecord?.data?.passportDateOfIssue ?? '',\n      passportExpiryDate: initialRecord?.data?.passportExpiryDate ?? '',\n      passportNationality: initialRecord?.data?.passportNationality ?? '',\n      passportDob: initialRecord?.data?.passportDob ?? '',\n      passportGender: initialRecord?.data?.passportGender ?? '',\n      idCardNumber: initialRecord?.data?.idCardNumber ?? '',\n      idCardDateOfIssue: initialRecord?.data?.idCardDateOfIssue ?? '',\n      idCardExpiryDate: initialRecord?.data?.idCardExpiryDate ?? '',\n      idCardIssuingCountry: initialRecord?.data?.idCardIssuingCountry ?? '',\n      drivingLicenseNumber: initialRecord?.data?.drivingLicenseNumber ?? '',\n      drivingLicenseDateOfIssue:\n        initialRecord?.data?.drivingLicenseDateOfIssue ?? '',\n      drivingLicenseExpiryDate:\n        initialRecord?.data?.drivingLicenseExpiryDate ?? '',\n      drivingLicenseIssuingCountry:\n        initialRecord?.data?.drivingLicenseIssuingCountry ?? '',\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (formValues: Record<string, unknown>) =>\n      schema.validate(formValues)\n  })\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const data = {\n      type: RECORD_TYPES.IDENTITY,\n      folder: formValues.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        fullName: formValues.fullName,\n        email: formValues.email,\n        phoneNumber: formValues.phoneNumber,\n        address: formValues.address,\n        zip: formValues.zip,\n        city: formValues.city,\n        region: formValues.region,\n        country: formValues.country,\n        note: formValues.note,\n        customFields: (\n          (formValues.customFields as Array<{ type: string; note?: string }>) ??\n          []\n        ).filter((f) => f.note?.trim().length),\n        passportFullName: formValues.passportFullName,\n        passportNumber: formValues.passportNumber,\n        passportIssuingCountry: formValues.passportIssuingCountry,\n        passportDateOfIssue: formValues.passportDateOfIssue,\n        passportExpiryDate: formValues.passportExpiryDate,\n        passportNationality: formValues.passportNationality,\n        passportDob: formValues.passportDob,\n        passportGender: formValues.passportGender,\n        idCardNumber: formValues.idCardNumber,\n        idCardDateOfIssue: formValues.idCardDateOfIssue,\n        idCardExpiryDate: formValues.idCardExpiryDate,\n        idCardIssuingCountry: formValues.idCardIssuingCountry,\n        drivingLicenseNumber: formValues.drivingLicenseNumber,\n        drivingLicenseDateOfIssue: formValues.drivingLicenseDateOfIssue,\n        drivingLicenseExpiryDate: formValues.drivingLicenseExpiryDate,\n        drivingLicenseIssuingCountry: formValues.drivingLicenseIssuingCountry,\n        attachments: formValues.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContentV2}\n        type=${'file'}\n        onFilesSelected=${(files: File[]) =>\n          handleFileSelect({\n            files: files as unknown as FileList,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const fullNameField = register('fullName')\n  const emailField = register('email')\n  const phoneNumberField = register('phoneNumber')\n  const addressField = register('address')\n  const zipField = register('zip')\n  const cityField = register('city')\n  const regionField = register('region')\n  const countryField = register('country')\n  const noteField = register('note')\n  const passportFullNameField = register('passportFullName')\n  const passportNumberField = register('passportNumber')\n  const passportIssuingCountryField = register('passportIssuingCountry')\n  const passportNationalityField = register('passportNationality')\n  const passportGenderField = register('passportGender')\n  const idCardNumberField = register('idCardNumber')\n  const idCardIssuingCountryField = register('idCardIssuingCountry')\n  const drivingLicenseNumberField = register('drivingLicenseNumber')\n  const drivingLicenseIssuingCountryField = register('drivingLicenseIssuingCountry')\n\n  return (\n    <Dialog\n      title={isEdit ? t('Edit Identity Item') : t('New Identity Item')}\n      onClose={closeModal}\n      testID=\"createoredit-identity-dialog-v2\"\n      closeButtonTestID=\"createoredit-identity-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"createoredit-identity-button-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isLoading || (!isEdit && !values.title?.trim())}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid=\"createoredit-identity-button-save-v2\"\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createoredit-identity-form-v2\"\n      >\n        <InputField\n          label={t('Title')}\n          placeholder={t('Enter Title')}\n          value={titleField.value}\n          onChange={(e) => titleField.onChange(e.target.value)}\n          error={titleField.error || undefined}\n          testID=\"createoredit-identity-input-title-v2\"\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Personal Information')}\n          </Text>\n        </div>\n\n        <MultiSlotInput testID=\"createoredit-identity-personal-slot-v2\">\n          <InputField\n            label={t('Fullname')}\n            placeholder={t('Enter Name')}\n            value={fullNameField.value}\n            onChange={(e) => fullNameField.onChange(e.target.value)}\n            error={fullNameField.error || undefined}\n            testID=\"createoredit-identity-input-fullname-v2\"\n          />\n          <InputField\n            label={t('Email')}\n            placeholder={t('Enter Email Address')}\n            value={emailField.value}\n            onChange={(e) => emailField.onChange(e.target.value)}\n            error={emailField.error || undefined}\n            testID=\"createoredit-identity-input-email-v2\"\n          />\n          <InputField\n            label={t('Phone Number')}\n            placeholder={t('Enter Phone Number')}\n            value={phoneNumberField.value}\n            onChange={(e) => phoneNumberField.onChange(e.target.value)}\n            error={phoneNumberField.error || undefined}\n            testID=\"createoredit-identity-input-phone-v2\"\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Address Details')}\n          </Text>\n        </div>\n\n        <MultiSlotInput testID=\"createoredit-identity-address-slot-v2\">\n          <InputField\n            label={t('Street Address')}\n            placeholder={t('Enter Street Name With Number')}\n            value={addressField.value}\n            onChange={(e) => addressField.onChange(e.target.value)}\n            error={addressField.error || undefined}\n            testID=\"createoredit-identity-input-address-v2\"\n          />\n          <InputField\n            label={t('Country')}\n            placeholder={t('Enter Country')}\n            value={countryField.value}\n            onChange={(e) => countryField.onChange(e.target.value)}\n            error={countryField.error || undefined}\n            testID=\"createoredit-identity-input-country-v2\"\n          />\n          <InputField\n            label={t('City')}\n            placeholder={t('Enter City')}\n            value={cityField.value}\n            onChange={(e) => cityField.onChange(e.target.value)}\n            error={cityField.error || undefined}\n            testID=\"createoredit-identity-input-city-v2\"\n          />\n          <InputField\n            label={t('Region / State / Province')}\n            placeholder={t('Enter Region, State or Province')}\n            value={regionField.value}\n            onChange={(e) => regionField.onChange(e.target.value)}\n            error={regionField.error || undefined}\n            testID=\"createoredit-identity-input-region-v2\"\n          />\n          <InputField\n            label={t('ZIP / Postal code')}\n            placeholder={t('Enter ZIP, or Postal Code')}\n            value={zipField.value}\n            onChange={(e) => zipField.onChange(e.target.value)}\n            error={zipField.error || undefined}\n            testID=\"createoredit-identity-input-zip-v2\"\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Passport Details')}\n          </Text>\n        </div>\n\n        <MultiSlotInput testID=\"createoredit-identity-passport-slot-v2\">\n          <InputField\n            label={t('Fullname')}\n            placeholder={t('Enter Name as Shown on Passport')}\n            value={passportFullNameField.value}\n            onChange={(e) => passportFullNameField.onChange(e.target.value)}\n            error={passportFullNameField.error || undefined}\n            testID=\"createoredit-identity-input-passportfullname-v2\"\n          />\n          <InputField\n            label={t('Passport Number')}\n            placeholder={t('Enter Passport Number')}\n            value={passportNumberField.value}\n            onChange={(e) => passportNumberField.onChange(e.target.value)}\n            error={passportNumberField.error || undefined}\n            testID=\"createoredit-identity-input-passportnumber-v2\"\n          />\n          <InputField\n            label={t('Issuing Country')}\n            placeholder={t('Enter Issuing Country')}\n            value={passportIssuingCountryField.value}\n            onChange={(e) => passportIssuingCountryField.onChange(e.target.value)}\n            error={passportIssuingCountryField.error || undefined}\n            testID=\"createoredit-identity-input-passportissuingcountry-v2\"\n          />\n          <DateField\n            label={t('Date of Birth')}\n            placeholder={t('Enter DD/MM/YYYY')}\n            value={values.passportDob}\n            onChange={(e) => setValue('passportDob', e.target.value)}\n            testID=\"createoredit-identity-input-passportdob-v2\"\n          />\n          <DateField\n            label={t('Date of Issue')}\n            placeholder={t('Enter DD/MM/YYYY')}\n            value={values.passportDateOfIssue}\n            onChange={(e) => setValue('passportDateOfIssue', e.target.value)}\n            testID=\"createoredit-identity-input-passportdateofissue-v2\"\n          />\n          <DateField\n            label={t('Expiry Date')}\n            placeholder={t('Enter DD/MM/YYYY')}\n            value={values.passportExpiryDate}\n            onChange={(e) => setValue('passportExpiryDate', e.target.value)}\n            testID=\"createoredit-identity-input-passportexpirydate-v2\"\n          />\n          <InputField\n            label={t('Nationality')}\n            placeholder={t('Enter Nationality')}\n            value={passportNationalityField.value}\n            onChange={(e) => passportNationalityField.onChange(e.target.value)}\n            error={passportNationalityField.error || undefined}\n            testID=\"createoredit-identity-input-passportnationality-v2\"\n          />\n          <InputField\n            label={t('Gender')}\n            placeholder={t('Enter Gender')}\n            value={passportGenderField.value}\n            onChange={(e) => passportGenderField.onChange(e.target.value)}\n            error={passportGenderField.error || undefined}\n            testID=\"createoredit-identity-input-passportgender-v2\"\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Identity Card Details')}\n          </Text>\n        </div>\n\n        <MultiSlotInput testID=\"createoredit-identity-idcard-slot-v2\">\n          <InputField\n            label={t('ID Number')}\n            placeholder={t('Enter Your ID Number')}\n            value={idCardNumberField.value}\n            onChange={(e) => idCardNumberField.onChange(e.target.value)}\n            error={idCardNumberField.error || undefined}\n            testID=\"createoredit-identity-input-idcardnumber-v2\"\n          />\n          <DateField\n            label={t('Date of Issue')}\n            placeholder={t('Enter DD/MM/YYYY')}\n            value={values.idCardDateOfIssue}\n            onChange={(e) => setValue('idCardDateOfIssue', e.target.value)}\n            testID=\"createoredit-identity-input-idcarddateofissue-v2\"\n          />\n          <DateField\n            label={t('Expiry Date')}\n            placeholder={t('Enter DD/MM/YYYY')}\n            value={values.idCardExpiryDate}\n            onChange={(e) => setValue('idCardExpiryDate', e.target.value)}\n            testID=\"createoredit-identity-input-idcardexpirydate-v2\"\n          />\n          <InputField\n            label={t('Issuing Country')}\n            placeholder={t('Enter Issuing Country')}\n            value={idCardIssuingCountryField.value}\n            onChange={(e) => idCardIssuingCountryField.onChange(e.target.value)}\n            error={idCardIssuingCountryField.error || undefined}\n            testID=\"createoredit-identity-input-idcardissuingcountry-v2\"\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Driving License Details')}\n          </Text>\n        </div>\n\n        <MultiSlotInput testID=\"createoredit-identity-drivinglicense-slot-v2\">\n          <InputField\n            label={t('ID Number')}\n            placeholder={t('Enter Your ID Number')}\n            value={drivingLicenseNumberField.value}\n            onChange={(e) => drivingLicenseNumberField.onChange(e.target.value)}\n            error={drivingLicenseNumberField.error || undefined}\n            testID=\"createoredit-identity-input-drivinglicensenumber-v2\"\n          />\n          <DateField\n            label={t('Date of Issue')}\n            placeholder={t('Enter DD/MM/YYYY')}\n            value={values.drivingLicenseDateOfIssue}\n            onChange={(e) => setValue('drivingLicenseDateOfIssue', e.target.value)}\n            testID=\"createoredit-identity-input-drivinglicensedateofissue-v2\"\n          />\n          <DateField\n            label={t('Expiry Date')}\n            placeholder={t('Enter DD/MM/YYYY')}\n            value={values.drivingLicenseExpiryDate}\n            onChange={(e) => setValue('drivingLicenseExpiryDate', e.target.value)}\n            testID=\"createoredit-identity-input-drivinglicenseexpirydate-v2\"\n          />\n          <InputField\n            label={t('Issuing Country')}\n            placeholder={t('Enter Issuing Country')}\n            value={drivingLicenseIssuingCountryField.value}\n            onChange={(e) => drivingLicenseIssuingCountryField.onChange(e.target.value)}\n            error={drivingLicenseIssuingCountryField.error || undefined}\n            testID=\"createoredit-identity-input-drivinglicenseissuingcountry-v2\"\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <FolderDropdownV2\n          selectedFolder={values?.folder}\n          onFolderSelect={(name) =>\n            setValue('folder', name === values.folder ? '' : name)\n          }\n        />\n\n        <InputField\n          label={t('Comment')}\n          placeholder={t('Enter Comment')}\n          value={noteField.value}\n          onChange={(e) => noteField.onChange(e.target.value)}\n          error={noteField.error || undefined}\n          testID=\"createoredit-identity-input-comment-v2\"\n        />\n\n        <MultiSlotInput\n          testID=\"createoredit-identity-attachments-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={handleFileLoad}\n              data-testid=\"createoredit-identity-button-addattachment-v2\"\n            >\n              {t('Add Another Attachment')}\n            </Button>\n          }\n        >\n          {values.attachments.length > 0\n            ? values.attachments.map(\n              (\n                attachment: {\n                  id?: string\n                  tempId?: string\n                  name: string\n                },\n                index: number\n              ) => (\n                <UiKitAttachmentField\n                  key={attachment.id || attachment.tempId}\n                  label={t('Attachment')}\n                  value={attachment.name}\n                  testID={`createoredit-identity-attachment-v2-${index}`}\n                  rightSlot={\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Delete File')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )\n                      }\n                      data-testid={`createoredit-identity-button-deleteattachment-v2-${index}`}\n                    />\n                  }\n                />\n              )\n            )\n            : null}\n          <UiKitAttachmentField\n            label={t('Attachment')}\n            placeholder={t('Add or Drop File / Photos')}\n            onClick={handleFileLoad}\n            testID=\"createoredit-identity-attachment-upload-v2\"\n            rightSlot={\n              <UploadFileFilled\n                width={16}\n                height={16}\n                color={theme.colors.colorTextPrimary}\n              />\n            }\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID=\"createoredit-identity-customfields-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() => addCustomField({ type: 'note', note: '' })}\n              data-testid=\"createoredit-identity-button-addcustomfield-v2\"\n            >\n              {t('Add Another Message')}\n            </Button>\n          }\n        >\n          {customFieldsList.map((field: { id: string }, index: number) => {\n            const fieldReg = registerCustomFieldItem('note', index)\n            const canRemove = customFieldsList.length > 1\n            return (\n              <PasswordField\n                key={field.id}\n                label={t('Hidden Message')}\n                placeholder={t('Enter Hidden Message')}\n                value={fieldReg.value}\n                onChange={(e) => fieldReg.onChange(e.target.value)}\n                error={fieldReg.error || undefined}\n                testID={`createoredit-identity-input-customfield-v2-${index}`}\n                rightSlot={\n                  canRemove ? (\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Remove')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeCustomFieldItem(index)}\n                      data-testid={`createoredit-identity-button-removecustomfield-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditLoginModalContent/index.js",
    "content": "import React from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { AUTHENTICATOR_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport {\n  RECORD_TYPES,\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateCustomField } from '../../../../components/CreateCustomField'\nimport { FolderDropdown } from '../../../../components/FolderDropdown'\nimport { FormGroup } from '../../../../components/FormGroup'\nimport { FormModalHeaderWrapper } from '../../../../components/FormModalHeaderWrapper'\nimport { FormWrapper } from '../../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../../components/InputFieldNote'\nimport { RecordTypeMenu } from '../../../../components/RecordTypeMenu'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useCreateOrEditRecord } from '../../../../hooks/useCreateOrEditRecord'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport {\n  ButtonLittle,\n  ButtonRoundIcon,\n  ButtonSingleInput,\n  CompoundField,\n  DeleteIcon,\n  ImageIcon,\n  InputField,\n  KeyIcon,\n  LockIcon,\n  PasswordField,\n  PasswordIcon,\n  PlusIcon,\n  SaveIcon,\n  UserIcon,\n  WorldIcon\n} from '../../../../lib-react-components'\nimport { addHttps } from '../../../../utils/addHttps'\nimport { formatPasskeyDate } from '../../../../utils/formatPasskeyDate'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { AttachmentField } from '../../../AttachmentField'\nimport { CustomFields } from '../../../CustomFields'\nimport { ModalContent } from '../../ModalContent'\nimport { DropdownsWrapper } from '../../styles'\nimport { UploadFilesModalContent } from '../../UploadImageModalContent'\n\n/**\n * @param {{\n *   initialRecord: {\n *   data: {\n *    title: string\n *    username: string\n *    password: string\n *    note: string\n *    websites: string[]\n *    customFields: {\n *        type: string\n *        name: string\n *     }[]\n *    attachments: { id: string, name: string}[]\n *    }\n *  }\n *  selectedFolder?: string\n *  isFavorite?: boolean\n *  onTypeChange: (type: string) => void\n * }} props\n */\nexport const CreateOrEditLoginModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange\n}) => {\n  const { i18n } = useLingui()\n  const { closeModal, setModal } = useModal()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record created successfully')\n      })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record updated successfully')\n      })\n    }\n  })\n\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(i18n._('Title is required')),\n    username: Validator.string(),\n    password: Validator.string(),\n    otpSecret: Validator.string(),\n    note: Validator.string(),\n    websites: Validator.array().items(\n      Validator.object({\n        website: Validator.string().website('Wrong format of website')\n      })\n    ),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string().required(i18n._('Comment is required'))\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    ),\n    passwordUpdatedAt: Validator.number()\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      username: initialRecord?.data?.username ?? '',\n      password: initialRecord?.data?.password ?? '',\n      otpSecret:\n        initialRecord?.data?.otpInput ?? initialRecord?.data?.otp?.secret ?? '',\n      note: initialRecord?.data?.note ?? '',\n      websites: initialRecord?.data?.websites?.length\n        ? initialRecord?.data?.websites.map((website) => ({ website }))\n        : [{ name: 'website' }],\n      customFields: initialRecord?.data.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? [],\n      credential: initialRecord?.data?.credential?.id ?? '',\n      passkeyCreatedAt: initialRecord?.data?.passkeyCreatedAt\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const {\n    value: websitesList,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray('websites')\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (values) => {\n    const otpInput = values.otpSecret?.trim() || undefined\n\n    const data = {\n      type: RECORD_TYPES.LOGIN,\n      folder: values.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: values.title,\n        username: values.username,\n        password: values.password,\n        note: values.note,\n        websites: values.websites\n          .filter((website) => !!website?.website?.trim().length)\n          .map((website) => addHttps(website.website)),\n        customFields: values.customFields,\n        attachments: values.attachments,\n        passwordUpdatedAt: initialRecord?.data?.passwordUpdatedAt,\n        otpInput\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords(\n        [\n          {\n            ...initialRecord,\n            ...data\n          }\n        ],\n        onError\n      )\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleRecordTypeChange = (type) => {\n    onTypeChange(type)\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContent}\n        type=${'file'}\n        onFilesSelected=${(files) =>\n          handleFileSelect({\n            files,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      onSubmit=${handleSubmit(onSubmit)}\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}\n          buttons=${html`\n            <${ButtonLittle}\n              key=${'createoredit-button-loadfile'}\n              testId=\"createoredit-button-loadfile\"\n              startIcon=${ImageIcon}\n              onClick=${handleFileLoad}\n            >\n              ${i18n._('Load file')}\n            <//>\n            <${ButtonLittle}\n              key=${'createoredit-button-save'}\n              testId=\"createoredit-button-save\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${i18n._('Save')}\n            <//>\n          `}\n        >\n          <${DropdownsWrapper}>\n            <${FolderDropdown}\n              testId=\"createoredit-dropdown-folder\"\n              selectedFolder=${values?.folder}\n              onFolderSelect=${(folder) => setValue('folder', folder?.name)}\n            />\n            ${!initialRecord &&\n            html` <${RecordTypeMenu}\n              testId=\"createoredit-dropdown-recordtype\"\n              selectedRecord=${RECORD_TYPES.LOGIN}\n              onRecordSelect=${(record) => handleRecordTypeChange(record?.type)}\n            />`}\n          <//>\n        <//>\n      `}\n    >\n      <${FormWrapper}>\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-title\"\n            label=${i18n._('Title')}\n            placeholder=${i18n._('Insert title')}\n            variant=\"outline\"\n            ...${register('title')}\n          />\n        <//>\n\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-username\"\n            label=${i18n._('Email or username')}\n            placeholder=${i18n._('Email or username')}\n            variant=\"outline\"\n            icon=${UserIcon}\n            ...${register('username')}\n          />\n\n          <${PasswordField}\n            testId=\"createoredit-input-password\"\n            label=${i18n._('Password')}\n            placeholder=${i18n._('Password')}\n            variant=\"outline\"\n            icon=${KeyIcon}\n            hasStrongness\n            additionalItems=${html`\n              <${ButtonRoundIcon}\n                testId=\"createoredit-button-generatepassword\"\n                startIcon=${PasswordIcon}\n                onClick=${() =>\n                  handleCreateOrEditRecord({\n                    recordType: 'password',\n                    setValue: (value) => setValue('password', value)\n                  })}\n              />\n            `}\n            ...${register('password')}\n          />\n        <//>\n\n        ${!!values?.credential &&\n        html`\n          <${FormGroup}>\n            <${InputField}\n              label=${i18n._('Passkey')}\n              value=${formatPasskeyDate(values.passkeyCreatedAt) ||\n              i18n._('Passkey Stored')}\n              variant=\"outline\"\n              icon=${KeyIcon}\n              isDisabled\n            />\n          <//>\n        `}\n        ${AUTHENTICATOR_ENABLED &&\n        html`\n          <${FormGroup}>\n            <${PasswordField}\n              testId=\"createoredit-input-otpsecret\"\n              label=${i18n._('Authenticator Secret Key')}\n              placeholder=${i18n._('Enter Secret Key or otpauth:// URI')}\n              variant=\"outline\"\n              icon=${LockIcon}\n              ...${register('otpSecret')}\n            />\n          <//>\n        `}\n\n        <${CompoundField}>\n          ${websitesList.map(\n            (website, index) => html`\n              <${React.Fragment} key=${website.id}>\n                <${InputField}\n                  testId=\"createoredit-input-website\"\n                  label=${i18n._('Website')}\n                  placeholder=${i18n._('https://')}\n                  icon=${WorldIcon}\n                  ...${registerItem('website', index)}\n                  additionalItems=${index === 0\n                    ? html`\n                        <${ButtonSingleInput}\n                          testId=\"createoredit-button-addwebsite\"\n                          startIcon=${PlusIcon}\n                          onClick=${() => addItem({ name: 'website' })}\n                        >\n                          ${i18n._('Add website')}\n                        <//>\n                      `\n                    : html`\n                        <${ButtonSingleInput}\n                          testId=\"createoredit-button-removewebsite\"\n                          startIcon=${DeleteIcon}\n                          onClick=${() => removeItem(index)}\n                        >\n                          ${i18n._('Remove website')}\n                        <//>\n                      `}\n                />\n              <//>\n            `\n          )}\n        <//>\n\n        ${values.attachments.length > 0 &&\n        html`\n          <${FormGroup}>\n            ${values.attachments.map(\n              (attachment) =>\n                html`<${AttachmentField}\n                  testId=\"createoredit-attachment\"\n                  key=${attachment.id || attachment.tempId}\n                  attachment=${attachment}\n                  label=${i18n._('File')}\n                  additionalItems=${html`\n                    <${ButtonSingleInput}\n                      testId=\"createoredit-button-deleteattachment\"\n                      startIcon=${DeleteIcon}\n                      onClick=${() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )}\n                    >\n                      ${i18n._('Delete File')}\n                    <//>\n                  `}\n                />`\n            )}\n          <//>\n        `}\n\n        <${FormGroup}>\n          <${InputFieldNote}\n            testId=\"createoredit-input-note\"\n            ...${register('note')}\n          />\n        <//>\n\n        <${CustomFields}\n          customFields=${customFieldsList}\n          register=${registerCustomFieldItem}\n          removeItem=${removeCustomFieldItem}\n        />\n\n        <${FormGroup}>\n          <${CreateCustomField}\n            testId=\"createoredit-button-createcustom\"\n            onCreateCustom=${(type) =>\n              addCustomField({ type: type, name: type })}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditLoginModalContentV2/CreateOrEditLoginModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditLoginModalContentV2/CreateOrEditLoginModalContentV2.tsx",
    "content": "import React, { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\n// @ts-ignore - declaration file is incomplete\nimport { AUTHENTICATOR_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport {\n  AttachmentField as UiKitAttachmentField,\n  Button,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme,\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport {\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  SyncLock,\n  TrashOutlined,\n  UploadFileFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { html } from 'htm/react'\nimport { createStyles } from './CreateOrEditLoginModalContentV2.styles'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useCreateOrEditRecord } from '../../../../hooks/useCreateOrEditRecord'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport { addHttps } from '../../../../utils/addHttps'\nimport { formatPasskeyDate } from '../../../../utils/formatPasskeyDate'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { UploadFilesModalContentV2 } from '../../UploadFilesModalContentV2'\nimport { FolderDropdownV2 } from '../../../../components/FolderDropdown/FolderDropdownV2'\nimport { PassType } from '../../../../shared/types'\nimport { PasswordFieldStrengthIndicator } from '../../../../components/PasswordFieldStrengthIndicator'\n\nexport type CreateOrEditLoginModalContentV2Props = {\n  initialRecord?: {\n    data: {\n      title: string\n      username: string\n      password: string\n      note: string\n      websites: string[]\n      customFields: { type: string; name: string }[]\n      attachments: { id: string; name: string }[]\n      otpInput?: string\n      otp?: { secret?: string }\n      credential?: { id: string }\n      passkeyCreatedAt?: number\n      passwordUpdatedAt?: number\n      [key: string]: unknown\n    }\n    folder?: string\n    isFavorite?: boolean\n    attachments?: { id: string; name: string }[]\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange: (type: string) => void\n}\n\nexport const CreateOrEditLoginModalContentV2 = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange: _onTypeChange\n}: CreateOrEditLoginModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal, setModal } = useModal()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const [passwordType, setPasswordType] = useState<PassType>(PassType.Password)\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Title is required')),\n    username: Validator.string(),\n    password: Validator.string(),\n    otpSecret: Validator.string(),\n    note: Validator.string(),\n    websites: Validator.array().items(\n      Validator.object({\n        website: Validator.string().website('Wrong format of website')\n      })\n    ),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string()\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    ),\n    passwordUpdatedAt: Validator.number()\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      username: initialRecord?.data?.username ?? '',\n      password: initialRecord?.data?.password ?? '',\n      otpSecret:\n        initialRecord?.data?.otpInput ?? initialRecord?.data?.otp?.secret ?? '',\n      note: initialRecord?.data?.note ?? '',\n      websites: initialRecord?.data?.websites?.length\n        ? initialRecord.data.websites.map((website: string) => ({ website }))\n        : [{ name: 'website' }],\n      customFields: initialRecord?.data?.customFields?.length\n        ? initialRecord.data.customFields\n        : [{ type: 'note', name: 'note', note: '' }],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? [],\n      credential: initialRecord?.data?.credential?.id ?? '',\n      passkeyCreatedAt: initialRecord?.data?.passkeyCreatedAt\n    },\n    validate: (formValues: Record<string, unknown>) =>\n      schema.validate(formValues)\n  })\n\n  const {\n    value: websitesList,\n    addItem: addWebsite,\n    registerItem: registerWebsiteItem,\n    removeItem: removeWebsite\n  } = registerArray('websites')\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const otpInput = (formValues.otpSecret as string)?.trim() || undefined\n\n    const data = {\n      type: RECORD_TYPES.LOGIN,\n      folder: formValues.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        username: formValues.username,\n        password: formValues.password,\n        note: formValues.note,\n        websites: (formValues.websites as Array<{ website?: string }>)\n          .filter((website) => !!website?.website?.trim().length)\n          .map((website) => addHttps(website.website!)),\n        customFields: (\n          (formValues.customFields as Array<{ type: string; note?: string }>) ??\n          []\n        ).filter((f) => f.note?.trim().length),\n        attachments: formValues.attachments,\n        passwordUpdatedAt: initialRecord?.data?.passwordUpdatedAt,\n        otpInput\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContentV2}\n        type=${'file'}\n        onFilesSelected=${(files: File[]) =>\n          handleFileSelect({\n            files: files as unknown as FileList,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const usernameField = register('username')\n  const passwordField = register('password')\n  const otpSecretField = register('otpSecret')\n  const noteField = register('note')\n\n  return (\n    <Dialog\n      title={isEdit ? t('Edit Login Item') : t('New Login Item')}\n      onClose={closeModal}\n      testID='createoredit-login-dialog-v2'\n      closeButtonTestID='createoredit-login-close-v2'\n      footer={\n        <>\n          <Button\n            variant='secondary'\n            size='small'\n            type='button'\n            onClick={closeModal}\n            data-testid='createoredit-button-discard-v2'\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant='primary'\n            size='small'\n            type='button'\n            disabled={isLoading || (!isEdit && !values.title?.trim())}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid='createoredit-button-save-v2'\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID='createoredit-form-v2'\n      >\n        <InputField\n          label={t('Title')}\n          placeholder={t('Enter Title')}\n          value={titleField.value}\n          onChange={(e) => titleField.onChange(e.target.value)}\n          error={titleField.error || undefined}\n          testID='createoredit-input-title-v2'\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant='caption' color={theme.colors.colorTextSecondary}>\n            {t('Credentials')}\n          </Text>\n        </div>\n\n        <MultiSlotInput\n          testID='createoredit-credentials-slot-v2'\n          actions={\n            <Button\n              variant='tertiaryAccent'\n              size='small'\n              type='button'\n              iconBefore={<SyncLock width={16} height={16} />}\n              onClick={() =>\n                handleCreateOrEditRecord({\n                  recordType: 'password',\n                  setValue: (value: string, type: PassType) => {\n                    setValue('password', value)\n                    setPasswordType(\n                      type === PassType.PassPhrase\n                        ? PassType.PassPhrase\n                        : PassType.Password\n                    )\n                  }\n                })\n              }\n              data-testid='createoredit-button-generatepassword-v2'\n            >\n              {t('Generate Password')}\n            </Button>\n          }\n        >\n          <InputField\n            label={t('Email / Username')}\n            placeholder={t('Enter Email / Username')}\n            value={usernameField.value}\n            onChange={(e) => usernameField.onChange(e.target.value)}\n            error={usernameField.error || undefined}\n            testID='createoredit-input-username-v2'\n          />\n          <PasswordFieldStrengthIndicator\n            passwordField={passwordField}\n            passwordType={passwordType}\n            setPasswordType={setPasswordType}\n            testID='createoredit-input-password-v2'\n          />\n        </MultiSlotInput>\n\n        {AUTHENTICATOR_ENABLED ? (\n          <MultiSlotInput testID='createoredit-authenticator-slot-v2'>\n            <PasswordField\n              label={t('Authenticator Secret Key')}\n              placeholder={t('Enter your key or URI')}\n              value={otpSecretField.value}\n              onChange={(e) => otpSecretField.onChange(e.target.value)}\n              error={otpSecretField.error || undefined}\n              testID='createoredit-input-otpsecret-v2'\n            />\n          </MultiSlotInput>\n        ) : null}\n\n        {!!values?.credential ? (\n          <InputField\n            label={t('Passkey')}\n            value={\n              formatPasskeyDate(values.passkeyCreatedAt) || t('Passkey Stored')\n            }\n            placeholder=''\n            disabled\n            testID='createoredit-input-passkey-v2'\n          />\n        ) : null}\n\n        <div style={styles.sectionLabel}>\n          <Text variant='caption' color={theme.colors.colorTextSecondary}>\n            {t('Details')}\n          </Text>\n        </div>\n\n        <MultiSlotInput\n          testID='createoredit-websites-slot-v2'\n          actions={\n            <Button\n              variant='tertiaryAccent'\n              size='small'\n              type='button'\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() => addWebsite({ name: 'website' })}\n              data-testid='createoredit-button-addwebsite-v2'\n            >\n              {t('Add Another Website')}\n            </Button>\n          }\n        >\n          {websitesList.map((website: { id: string }, index: number) => {\n            const websiteField = registerWebsiteItem('website', index)\n            return (\n              <InputField\n                key={website.id}\n                label={t('Website')}\n                placeholder={t('Enter Website')}\n                value={websiteField.value}\n                onChange={(e) => websiteField.onChange(e.target.value)}\n                error={websiteField.error || undefined}\n                testID={`createoredit-input-website-v2-${index}`}\n                rightSlot={\n                  index > 0 ? (\n                    <Button\n                      variant='tertiary'\n                      size='small'\n                      type='button'\n                      aria-label={t('Remove website')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeWebsite(index)}\n                      data-testid={`createoredit-button-removewebsite-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant='caption' color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <FolderDropdownV2\n          selectedFolder={values?.folder}\n          onFolderSelect={(name) =>\n            setValue('folder', name === values.folder ? '' : name)\n          }\n        />\n\n        <MultiSlotInput testID='createoredit-comment-slot-v2'>\n          <InputField\n            label={t('Comment')}\n            placeholder={t('Enter Comment')}\n            value={noteField.value}\n            onChange={(e) => noteField.onChange(e.target.value)}\n            error={noteField.error || undefined}\n            testID='createoredit-input-comment-v2'\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID='createoredit-attachments-slot-v2'\n          actions={\n            <Button\n              variant='tertiaryAccent'\n              size='small'\n              type='button'\n              iconBefore={<Add width={16} height={16} />}\n              onClick={handleFileLoad}\n              data-testid='createoredit-button-addattachment-v2'\n            >\n              {t('Add Another Attachment')}\n            </Button>\n          }\n        >\n          {values.attachments.length > 0\n            ? values.attachments.map(\n              (\n                attachment: {\n                  id?: string\n                  tempId?: string\n                  name: string\n                },\n                index: number\n              ) => (\n                <UiKitAttachmentField\n                  key={attachment.id || attachment.tempId}\n                  label={t('Attachment')}\n                  value={attachment.name}\n                  testID={`createoredit-attachment-v2-${index}`}\n                  rightSlot={\n                    <Button\n                      variant='tertiary'\n                      size='small'\n                      type='button'\n                      aria-label={t('Delete File')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )\n                      }\n                      data-testid={`createoredit-button-deleteattachment-v2-${index}`}\n                    />\n                  }\n                />\n              )\n            )\n            : null}\n          <UiKitAttachmentField\n            label={t('Attachment')}\n            placeholder={t('Add or Drop File / Photos')}\n            onClick={handleFileLoad}\n            testID='createoredit-attachment-upload-v2'\n            rightSlot={\n              <UploadFileFilled\n                width={16}\n                height={16}\n                color={theme.colors.colorTextPrimary}\n              />\n            }\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID='createoredit-hiddenmessage-slot-v2'\n          actions={\n            <Button\n              variant='tertiaryAccent'\n              size='small'\n              type='button'\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() => addCustomField({ type: 'note', name: 'note' })}\n              data-testid='createoredit-button-addhiddenmessage-v2'\n            >\n              {t('Add Another Message')}\n            </Button>\n          }\n        >\n          {customFieldsList.map((field: { id: string }, index: number) => {\n            const fieldReg = registerCustomFieldItem('note', index)\n            const canRemove = customFieldsList.length > 1\n            return (\n              <PasswordField\n                key={field.id}\n                label={t('Hidden Message')}\n                placeholder={t('Enter Hidden Message')}\n                value={fieldReg.value}\n                onChange={(e) => fieldReg.onChange(e.target.value)}\n                error={fieldReg.error || undefined}\n                testID={`createoredit-input-hiddenmessage-v2-${index}`}\n                rightSlot={\n                  canRemove ? (\n                    <Button\n                      variant='tertiary'\n                      size='small'\n                      type='button'\n                      aria-label={t('Remove')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeCustomFieldItem(index)}\n                      data-testid={`createoredit-button-removehiddenmessage-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditNoteModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  RECORD_TYPES,\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateCustomField } from '../../../../components/CreateCustomField'\nimport { FolderDropdown } from '../../../../components/FolderDropdown'\nimport { FormGroup } from '../../../../components/FormGroup'\nimport { FormModalHeaderWrapper } from '../../../../components/FormModalHeaderWrapper'\nimport { FormWrapper } from '../../../../components/FormWrapper'\nimport { RecordTypeMenu } from '../../../../components/RecordTypeMenu'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport {\n  ButtonLittle,\n  ButtonSingleInput,\n  DeleteIcon,\n  ImageIcon,\n  InputField,\n  SaveIcon,\n  TextArea\n} from '../../../../lib-react-components'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { AttachmentField } from '../../../AttachmentField'\nimport { CustomFields } from '../../../CustomFields'\nimport { ModalContent } from '../../ModalContent'\nimport { DropdownsWrapper } from '../../styles'\nimport { UploadFilesModalContent } from '../../UploadImageModalContent'\n\n/**\n * @param {{\n *   initialRecord: {\n *    data: {\n *     title: string\n *     note: string\n *     customFields: {\n *        type: string\n *        name: string\n *      }[]\n *    attachments: { id: string, name: string}[]\n *    }\n *    }\n *  selectedFolder?: string\n *  isFavorite?: boolean\n *  onTypeChange: (type: string) => void\n * }} props\n */\nexport const CreateOrEditNoteModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange\n}) => {\n  const { i18n } = useLingui()\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record created successfully')\n      })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record updated successfully')\n      })\n    }\n  })\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(i18n._('Title is required')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string().required(i18n._('Comment is required'))\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const {\n    value: list,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (values) => {\n    const data = {\n      type: RECORD_TYPES.NOTE,\n      folder: values.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        title: values.title,\n        note: values.note,\n        customFields: values.customFields,\n        attachments: values.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords(\n        [\n          {\n            ...initialRecord,\n            ...data\n          }\n        ],\n        onError\n      )\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContent}\n        type=${'file'}\n        onFilesSelected=${(files) =>\n          handleFileSelect({\n            files,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  return html`\n    <${ModalContent}\n      onSubmit=${handleSubmit(onSubmit)}\n      onClose=${closeModal}\n      closeButtonDataId=\"note-close-button\"\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}\n          buttons=${html`\n            <${ButtonLittle}\n              testId=\"createoredit-button-loadfile\"\n              dataId=\"note-load-file-button\"\n              startIcon=${ImageIcon}\n              onClick=${handleFileLoad}\n            >\n              ${i18n._('Load file')}\n            <//>\n            <${ButtonLittle}\n              testId=\"createoredit-button-save\"\n              dataId=\"note-save-button\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${i18n._('Save')}\n            <//>\n          `}\n        >\n          <${DropdownsWrapper}>\n            <${FolderDropdown}\n              testId=\"createoredit-dropdown-folder\"\n              selectedFolder=${values?.folder}\n              onFolderSelect=${(folder) => setValue('folder', folder?.name)}\n            />\n\n            ${!initialRecord &&\n            html` <${RecordTypeMenu}\n              testId=\"createoredit-dropdown-recordtype\"\n              selectedRecord=${RECORD_TYPES.NOTE}\n              onRecordSelect=${(record) => onTypeChange(record?.type)}\n            />`}\n          <//>\n        <//>\n      `}\n    >\n      <${FormWrapper}>\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-title\"\n            dataId=\"note-title-input\"\n            label=${i18n._('Title')}\n            placeholder=${i18n._('Insert title')}\n            variant=\"outline\"\n            ...${register('title')}\n          />\n        <//>\n\n        <${FormGroup}>\n          <${TextArea}\n            testId=\"createoredit-textarea-note\"\n            dataId=\"note-content-textarea\"\n            ...${register('note')}\n            placeholder=${i18n._('Write a comment...')}\n          />\n        <//>\n\n        ${values.attachments.length > 0 &&\n        html`\n          <${FormGroup}>\n            ${values.attachments.map(\n              (attachment) =>\n                html`<${AttachmentField}\n                  testId=\"createoredit-attachment\"\n                  key=${attachment.id || attachment.tempId}\n                  attachment=${attachment}\n                  label=${i18n._('File')}\n                  additionalItems=${html`\n                    <${ButtonSingleInput}\n                      startIcon=${DeleteIcon}\n                      onClick=${() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )}\n                    >\n                      ${i18n._('Delete File')}\n                    <//>\n                  `}\n                />`\n            )}\n          <//>\n        `}\n\n        <${CustomFields}\n          customFields=${list}\n          register=${registerItem}\n          removeItem=${removeItem}\n        />\n\n        <${FormGroup}>\n          <${CreateCustomField}\n            testId=\"createoredit-button-createcustom\"\n            onCreateCustom=${(type) => addItem({ type: type, name: type })}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditNoteModalContentV2/CreateOrEditNoteModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditNoteModalContentV2/CreateOrEditNoteModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  AttachmentField as UiKitAttachmentField,\n  Button,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { useCreateRecord, useRecords } from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  TrashOutlined,\n  UploadFileFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { html } from 'htm/react'\n\nimport { createStyles } from './CreateOrEditNoteModalContentV2.styles'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { UploadFilesModalContentV2 } from '../../UploadFilesModalContentV2'\nimport { FolderDropdownV2 } from '../../../../components/FolderDropdown/FolderDropdownV2'\n\nexport type CreateOrEditNoteModalContentV2Props = {\n  initialRecord?: {\n    data: {\n      title: string\n      note: string\n      customFields: { type: string; name: string }[]\n      attachments: { id: string; name: string }[]\n      [key: string]: unknown\n    }\n    folder?: string\n    isFavorite?: boolean\n    attachments?: { id: string; name: string }[]\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange: (type: string) => void\n}\n\nexport const CreateOrEditNoteModalContentV2 = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange: _onTypeChange\n}: CreateOrEditNoteModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal, setModal } = useModal()\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Title is required')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string()\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields?.length\n        ? initialRecord.data.customFields\n        : [{ type: 'note', note: '' }],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (formValues: Record<string, unknown>) =>\n      schema.validate(formValues)\n  })\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const data = {\n      type: RECORD_TYPES.NOTE,\n      folder: formValues.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        note: formValues.note,\n        customFields: (\n          (formValues.customFields as Array<{ type: string; note?: string }>) ??\n          []\n        ).filter((f) => f.note?.trim().length),\n        attachments: formValues.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContentV2}\n        type=${'file'}\n        onFilesSelected=${(files: File[]) =>\n          handleFileSelect({\n            files: files as unknown as FileList,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const noteField = register('note')\n\n  return (\n    <Dialog\n      title={isEdit ? t('Edit Note Item') : t('New Note Item')}\n      onClose={closeModal}\n      testID=\"createoredit-note-dialog-v2\"\n      closeButtonTestID=\"createoredit-note-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"createoredit-note-button-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isLoading || (!isEdit && !values.title?.trim())}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid=\"createoredit-note-button-save-v2\"\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createoredit-note-form-v2\"\n      >\n        <InputField\n          label={t('Title')}\n          placeholder={t('Enter Title')}\n          value={titleField.value}\n          onChange={(e) => titleField.onChange(e.target.value)}\n          error={titleField.error || undefined}\n          testID=\"createoredit-note-input-title-v2\"\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Details')}\n          </Text>\n        </div>\n\n        <InputField\n          label={t('Note')}\n          placeholder={t('Enter Note')}\n          value={noteField.value}\n          onChange={(e) => noteField.onChange(e.target.value)}\n          error={noteField.error || undefined}\n          testID=\"createoredit-note-input-note-v2\"\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <FolderDropdownV2\n          selectedFolder={values?.folder}\n          onFolderSelect={(name) =>\n            setValue('folder', name === values.folder ? '' : name)\n          }\n        />\n\n        <MultiSlotInput\n          testID=\"createoredit-note-attachments-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={handleFileLoad}\n              data-testid=\"createoredit-note-button-addattachment-v2\"\n            >\n              {t('Add Another Attachment')}\n            </Button>\n          }\n        >\n          {values.attachments.length > 0\n            ? values.attachments.map(\n              (\n                attachment: {\n                  id?: string\n                  tempId?: string\n                  name: string\n                },\n                index: number\n              ) => (\n                <UiKitAttachmentField\n                  key={attachment.id || attachment.tempId}\n                  label={t('Attachment')}\n                  value={attachment.name}\n                  testID={`createoredit-note-attachment-v2-${index}`}\n                  rightSlot={\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Delete File')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )\n                      }\n                      data-testid={`createoredit-note-button-deleteattachment-v2-${index}`}\n                    />\n                  }\n                />\n              )\n            )\n            : null}\n          <UiKitAttachmentField\n            label={t('Attachment')}\n            placeholder={t('Add or Drop File / Photos')}\n            onClick={handleFileLoad}\n            testID=\"createoredit-note-attachment-upload-v2\"\n            rightSlot={\n              <UploadFileFilled\n                width={16}\n                height={16}\n                color={theme.colors.colorTextPrimary}\n              />\n            }\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID=\"createoredit-note-hiddenmessage-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() => addCustomField({ type: 'note', note: '' })}\n              data-testid=\"createoredit-note-button-addhiddenmessage-v2\"\n            >\n              {t('Add Another Message')}\n            </Button>\n          }\n        >\n          {customFieldsList.map((field: { id: string }, index: number) => {\n            const fieldReg = registerCustomFieldItem('note', index)\n            const canRemove = customFieldsList.length > 1\n            return (\n              <PasswordField\n                key={field.id}\n                label={t('Hidden Message')}\n                placeholder={t('Enter Hidden Message')}\n                value={fieldReg.value}\n                onChange={(e) => fieldReg.onChange(e.target.value)}\n                error={fieldReg.error || undefined}\n                testID={`createoredit-note-input-hiddenmessage-v2-${index}`}\n                rightSlot={\n                  canRemove ? (\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Remove')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeCustomFieldItem(index)}\n                      data-testid={`createoredit-note-button-removehiddenmessage-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditPassPhraseModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  RECORD_TYPES,\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateCustomField } from '../../../../components/CreateCustomField'\nimport { FolderDropdown } from '../../../../components/FolderDropdown'\nimport { FormGroup } from '../../../../components/FormGroup'\nimport { FormModalHeaderWrapper } from '../../../../components/FormModalHeaderWrapper'\nimport { FormWrapper } from '../../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../../components/InputFieldNote'\nimport { RecordTypeMenu } from '../../../../components/RecordTypeMenu'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport {\n  ButtonLittle,\n  InputField,\n  SaveIcon\n} from '../../../../lib-react-components'\nimport { CubeIcon } from '../../../../lib-react-components/icons/CubeIcon'\nimport { CustomFields } from '../../../CustomFields'\nimport { PassPhrase } from '../../../PassPhrase'\nimport { ModalContent } from '../../ModalContent'\nimport { DropdownsWrapper } from '../../styles'\n\n/**\n * @param {{\n *   initialRecord: {\n *    data: {\n *     title: string\n *     passPhrase: string\n *     note: string\n *     customFields: {\n *        type: string\n *        name: string\n *      }[]\n *     }\n *    }\n *  selectedFolder?: string\n *  isFavorite?: boolean\n *  onTypeChange: (type: string) => void\n * }} props\n */\nexport const CreateOrEditPassPhraseModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange\n}) => {\n  const { i18n } = useLingui()\n  const { closeModal } = useModal()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record created successfully')\n      })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record updated successfully')\n      })\n    }\n  })\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(i18n._('Title is required')),\n    passPhrase: Validator.string().required(i18n._('PassPhrase is required')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string().required(i18n._('Comment is required'))\n      })\n    ),\n    folder: Validator.string()\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      passPhrase: initialRecord?.data?.passPhrase ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const {\n    value: list,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray('customFields')\n\n  const onSubmit = (values) => {\n    const data = {\n      type: RECORD_TYPES.PASS_PHRASE,\n      folder: values.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        title: values.title,\n        passPhrase: values.passPhrase,\n        note: values.note,\n        customFields: values.customFields\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords(\n        [\n          {\n            ...initialRecord,\n            ...data\n          }\n        ],\n        onError\n      )\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  return html`\n    <${ModalContent}\n      onSubmit=${handleSubmit(onSubmit)}\n      onClose=${closeModal}\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}\n          buttons=${html`\n            <${ButtonLittle}\n              testId=\"createoredit-button-save\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${i18n._('Save')}\n            <//>\n          `}\n        >\n          <${DropdownsWrapper}>\n            <${FolderDropdown}\n              testId=\"createoredit-dropdown-folder\"\n              selectedFolder=${values?.folder}\n              onFolderSelect=${(folder) => setValue('folder', folder?.name)}\n            />\n\n            ${!initialRecord &&\n            html` <${RecordTypeMenu}\n              testId=\"createoredit-dropdown-recordtype\"\n              selectedRecord=${RECORD_TYPES.PASS_PHRASE}\n              onRecordSelect=${(record) => onTypeChange(record?.type)}\n            />`}\n          <//>\n        <//>\n      `}\n    >\n      <${FormWrapper}>\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-title\"\n            icon=${CubeIcon}\n            label=${i18n._('Application')}\n            placeholder=${i18n._('Insert Application name')}\n            variant=\"outline\"\n            ...${register('title')}\n          />\n        <//>\n        <${FormGroup}>\n          <${PassPhrase} isCreateOrEdit ...${register('passPhrase')} />\n        <//>\n\n        <${FormGroup}>\n          <${InputFieldNote} ...${register('note')} />\n        <//>\n        <${CustomFields}\n          customFields=${list}\n          register=${registerItem}\n          removeItem=${removeItem}\n        />\n\n        <${FormGroup}>\n          <${CreateCustomField}\n            onCreateCustom=${(type) => addItem({ type: type, name: type })}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditPassPhraseModalContentV2/CreateOrEditPassPhraseModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditPassPhraseModalContentV2/CreateOrEditPassPhraseModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { VALID_WORD_COUNTS } from '@tetherto/pearpass-lib-constants'\nimport {\n  Button,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { useCreateRecord, useRecords } from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  TrashOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './CreateOrEditPassPhraseModalContentV2.styles'\nimport { PassPhraseV2 } from '../../../PassPhrase/PassPhraseV2'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { FolderDropdownV2 } from '../../../../components/FolderDropdown/FolderDropdownV2'\n\nexport type CreateOrEditPassPhraseModalContentV2Props = {\n  initialRecord?: {\n    data: {\n      title: string\n      passPhrase: string\n      note: string\n      customFields: { type: string; name: string }[]\n      [key: string]: unknown\n    }\n    folder?: string\n    isFavorite?: boolean\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange: (type: string) => void\n}\n\nconst parsePassphraseText = (text: string): string[] =>\n  text\n    .trim()\n    .split(/[-\\s]+/)\n    .map((word) => word.trim())\n    .filter((word) => word.length > 0)\n\nexport const CreateOrEditPassPhraseModalContentV2 = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange: _onTypeChange\n}: CreateOrEditPassPhraseModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Title is required')),\n    passPhrase: Validator.string().required(t('Recovery phrase is required')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string()\n      })\n    ),\n    folder: Validator.string()\n  })\n\n  const { register, handleSubmit, registerArray, setValue, values } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      passPhrase: initialRecord?.data?.passPhrase ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields?.length\n        ? initialRecord.data.customFields\n        : [{ type: 'note', note: '' }],\n      folder: selectedFolder ?? initialRecord?.folder\n    },\n    validate: (formValues: Record<string, unknown>) => {\n      const validationErrors =\n        (schema.validate(formValues) as Record<string, string | undefined>) ?? {}\n      const wordCount = parsePassphraseText(\n        (formValues.passPhrase as string) ?? ''\n      ).length\n\n      if (!wordCount) {\n        validationErrors.passPhrase = t('Recovery phrase is required')\n      } else if (!VALID_WORD_COUNTS.includes(wordCount)) {\n        validationErrors.passPhrase = t('Recovery phrase must contain 12 or 24 words')\n      }\n\n      return validationErrors\n    }\n  })\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const data = {\n      type: RECORD_TYPES.PASS_PHRASE,\n      folder: formValues.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        passPhrase: formValues.passPhrase,\n        note: formValues.note,\n        customFields: (\n          (formValues.customFields as Array<{ type: string; note?: string }>) ??\n          []\n        ).filter((f) => f.note?.trim().length)\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const noteField = register('note')\n  const passPhraseField = register('passPhrase')\n\n  return (\n    <Dialog\n      title={isEdit ? t('Edit Recovery Phrase Item') : t('New Recovery Phrase Item')}\n      onClose={closeModal}\n      testID=\"createoredit-passphrase-dialog-v2\"\n      closeButtonTestID=\"createoredit-passphrase-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"createoredit-passphrase-button-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isLoading || (!isEdit && (!values.title?.trim() || !values.passPhrase?.trim()))}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid=\"createoredit-passphrase-button-save-v2\"\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createoredit-passphrase-form-v2\"\n      >\n        <InputField\n          label={t('Title')}\n          placeholder={t('Enter Title')}\n          value={titleField.value}\n          onChange={(e) => titleField.onChange(e.target.value)}\n          error={titleField.error || undefined}\n          testID=\"createoredit-passphrase-input-title-v2\"\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Details')}\n          </Text>\n        </div>\n\n        <PassPhraseV2\n          isCreateOrEdit\n          value={passPhraseField.value}\n          onChange={(val) => setValue('passPhrase', val)}\n          error={passPhraseField.error || undefined}\n        />\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <FolderDropdownV2\n          selectedFolder={values?.folder}\n          onFolderSelect={(name) =>\n            setValue('folder', name === values.folder ? '' : name)\n          }\n        />\n\n        <MultiSlotInput testID=\"createoredit-passphrase-comments-slot-v2\">\n          <InputField\n            label={t('Comment')}\n            placeholder={t('Enter Comment')}\n            value={noteField.value}\n            onChange={(e) => noteField.onChange(e.target.value)}\n            error={noteField.error || undefined}\n            testID=\"createoredit-passphrase-input-comment-v2\"\n          />\n        </MultiSlotInput>\n\n        <MultiSlotInput\n          testID=\"createoredit-passphrase-hiddenmessage-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() => addCustomField({ type: 'note', note: '' })}\n              data-testid=\"createoredit-passphrase-button-addhiddenmessage-v2\"\n            >\n              {t('Add Another Message')}\n            </Button>\n          }\n        >\n          {customFieldsList.map((field: { id: string }, index: number) => {\n            const fieldReg = registerCustomFieldItem('note', index)\n            const canRemove = customFieldsList.length > 1\n            return (\n              <PasswordField\n                key={field.id}\n                label={t('Hidden Message')}\n                placeholder={t('Enter Hidden Message')}\n                value={fieldReg.value}\n                onChange={(e) => fieldReg.onChange(e.target.value)}\n                error={fieldReg.error || undefined}\n                testID={`createoredit-passphrase-input-hiddenmessage-v2-${index}`}\n                rightSlot={\n                  canRemove ? (\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Remove')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeCustomFieldItem(index)}\n                      data-testid={`createoredit-passphrase-button-removehiddenmessage-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditWifiModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  RECORD_TYPES,\n  useCreateRecord,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateCustomField } from '../../../../components/CreateCustomField'\nimport { FolderDropdown } from '../../../../components/FolderDropdown'\nimport { FormGroup } from '../../../../components/FormGroup'\nimport { FormModalHeaderWrapper } from '../../../../components/FormModalHeaderWrapper'\nimport { FormWrapper } from '../../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../../components/InputFieldNote'\nimport { RecordTypeMenu } from '../../../../components/RecordTypeMenu'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../../constants/formFields'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useCreateOrEditRecord } from '../../../../hooks/useCreateOrEditRecord'\nimport { useGetMultipleFiles } from '../../../../hooks/useGetMultipleFiles'\nimport {\n  ButtonLittle,\n  ButtonRoundIcon,\n  ButtonSingleInput,\n  DeleteIcon,\n  ImageIcon,\n  InputField,\n  PasswordField,\n  PasswordIcon,\n  SaveIcon\n} from '../../../../lib-react-components'\nimport { WifiIcon } from '../../../../lib-react-components/icons/WifiIcon'\nimport { getFilteredAttachmentsById } from '../../../../utils/getFilteredAttachmentsById'\nimport { handleFileSelect } from '../../../../utils/handleFileSelect'\nimport { AttachmentField } from '../../../AttachmentField'\nimport { CustomFields } from '../../../CustomFields'\nimport { ModalContent } from '../../ModalContent'\nimport { DropdownsWrapper } from '../../styles'\nimport { UploadFilesModalContent } from '../../UploadImageModalContent'\n\n/**\n * @param {{\n *   initialRecord: {\n *    data: {\n *     title: string\n *     password: string\n *     note: string\n *     customFields: {\n *        type: string\n *        name: string\n *      }[]\n *    attachments: { id: string, name: string}[]\n *    }\n *    }\n *  selectedFolder?: string\n *  isFavorite?: boolean\n *  onTypeChange: (type: string) => void\n * }} props\n */\nexport const CreateOrEditWifiModalContent = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange\n}) => {\n  const { i18n } = useLingui()\n  const { closeModal, setModal } = useModal()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const { setToast } = useToast()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record created successfully')\n      })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n\n      setToast({\n        message: i18n._('Record updated successfully')\n      })\n    }\n  })\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(i18n._('Title is required')),\n    password: Validator.string().required(i18n._('Password is required')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string().required(i18n._('Comment is required'))\n      })\n    ),\n    folder: Validator.string(),\n    attachments: Validator.array().items(\n      Validator.object({\n        id: Validator.string(),\n        name: Validator.string().required()\n      })\n    )\n  })\n\n  const { register, handleSubmit, registerArray, values, setValue } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      password: initialRecord?.data?.password ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const {\n    value: list,\n    addItem,\n    registerItem,\n    removeItem\n  } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const onSubmit = (values) => {\n    const data = {\n      type: RECORD_TYPES.WIFI_PASSWORD,\n      folder: values.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        title: values.title,\n        password: values.password,\n        note: values.note,\n        customFields: values.customFields,\n        attachments: values.attachments\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords(\n        [\n          {\n            ...initialRecord,\n            ...data\n          }\n        ],\n        onError\n      )\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const handleFileLoad = () => {\n    setModal(\n      html`<${UploadFilesModalContent}\n        type=${'file'}\n        onFilesSelected=${(files) =>\n          handleFileSelect({\n            files,\n            fieldName: ATTACHMENTS_FIELD_KEY,\n            setValue,\n            values\n          })}\n      />`\n    )\n  }\n\n  return html`\n    <${ModalContent}\n      onSubmit=${handleSubmit(onSubmit)}\n      onClose=${closeModal}\n      headerChildren=${html`\n        <${FormModalHeaderWrapper}\n          buttons=${html`\n            <${ButtonLittle}\n              testId=\"createoredit-button-loadfile\"\n              startIcon=${ImageIcon}\n              onClick=${handleFileLoad}\n            >\n              ${i18n._('Load file')}\n            <//>\n            <${ButtonLittle}\n              testId=\"createoredit-button-save\"\n              startIcon=${SaveIcon}\n              type=\"submit\"\n            >\n              ${i18n._('Save')}\n            <//>\n          `}\n        >\n          <${DropdownsWrapper}>\n            <${FolderDropdown}\n              testId=\"createoredit-dropdown-folder\"\n              selectedFolder=${values?.folder}\n              onFolderSelect=${(folder) => setValue('folder', folder?.name)}\n            />\n\n            ${!initialRecord &&\n            html` <${RecordTypeMenu}\n              testId=\"createoredit-dropdown-recordtype\"\n              selectedRecord=${RECORD_TYPES.WIFI_PASSWORD}\n              onRecordSelect=${(record) => onTypeChange(record?.type)}\n            />`}\n          <//>\n        <//>\n      `}\n    >\n      <${FormWrapper}>\n        <${FormGroup}>\n          <${InputField}\n            testId=\"createoredit-input-wifiname\"\n            icon=${WifiIcon}\n            label=${i18n._('Wi-Fi Name')}\n            placeholder=${i18n._('Insert Wi-Fi Name')}\n            variant=\"outline\"\n            ...${register('title')}\n          />\n        <//>\n        <${FormGroup}>\n          <${PasswordField}\n            testId=\"createoredit-input-wifipassword\"\n            icon=${PasswordIcon}\n            label=${i18n._('Wi-Fi Password')}\n            placeholder=${i18n._('Insert Wi-Fi Password')}\n            variant=\"outline\"\n            additionalItems=${html`\n              <${ButtonRoundIcon}\n                testId=\"createoredit-button-generatepassword\"\n                startIcon=${PasswordIcon}\n                onClick=${() =>\n                  handleCreateOrEditRecord({\n                    recordType: 'password',\n                    setValue: (value) => setValue('password', value)\n                  })}\n              />\n            `}\n            ...${register('password')}\n          />\n        <//>\n\n        <${FormGroup}>\n          <${InputFieldNote}\n            testId=\"createoredit-input-note\"\n            ...${register('note')}\n          />\n        <//>\n\n        ${values.attachments.length > 0 &&\n        html`\n          <${FormGroup}>\n            ${values.attachments.map(\n              (attachment) =>\n                html`<${AttachmentField}\n                  testId=\"createoredit-attachment\"\n                  key=${attachment.id || attachment.tempId}\n                  attachment=${attachment}\n                  label=${i18n._('File')}\n                  additionalItems=${html`\n                    <${ButtonSingleInput}\n                      testId=\"createoredit-button-deleteattachment\"\n                      startIcon=${DeleteIcon}\n                      onClick=${() =>\n                        setValue(\n                          ATTACHMENTS_FIELD_KEY,\n                          getFilteredAttachmentsById(\n                            values.attachments,\n                            attachment\n                          )\n                        )}\n                    >\n                      ${i18n._('Delete File')}\n                    <//>\n                  `}\n                />`\n            )}\n          <//>\n        `}\n\n        <${CustomFields}\n          customFields=${list}\n          register=${registerItem}\n          removeItem=${removeItem}\n        />\n\n        <${FormGroup}>\n          <${CreateCustomField}\n            testId=\"createoredit-button-createcustom\"\n            onCreateCustom=${(type) => addItem({ type: type, name: type })}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditWifiModalContentV2/CreateOrEditWifiModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  sectionLabel: {\n    marginTop: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/CreateOrEditWifiModalContentV2/CreateOrEditWifiModalContentV2.tsx",
    "content": "import React, { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  Button,\n  Dialog,\n  Form,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { useCreateRecord, useRecords } from '@tetherto/pearpass-lib-vault'\nimport {\n  Add,\n  SyncLock,\n  TrashOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './CreateOrEditWifiModalContentV2.styles'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useCreateOrEditRecord } from '../../../../hooks/useCreateOrEditRecord'\nimport { PasswordFieldStrengthIndicator } from '../../../../components/PasswordFieldStrengthIndicator'\nimport { PassType } from '../../../../shared/types'\nimport { FolderDropdownV2 } from '../../../../components/FolderDropdown/FolderDropdownV2'\n\nexport type CreateOrEditWifiModalContentV2Props = {\n  initialRecord?: {\n    data: {\n      title: string\n      password: string\n      note: string\n      customFields: { type: string; name: string }[]\n      [key: string]: unknown\n    }\n    folder?: string\n    isFavorite?: boolean\n    [key: string]: unknown\n  }\n  selectedFolder?: string\n  isFavorite?: boolean\n  onTypeChange: (type: string) => void\n}\n\nexport const CreateOrEditWifiModalContentV2 = ({\n  initialRecord,\n  selectedFolder,\n  isFavorite,\n  onTypeChange: _onTypeChange\n}: CreateOrEditWifiModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const [passwordType, setPasswordType] = useState<PassType>(PassType.Password)\n\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const { createRecord, isLoading: isCreateLoading } = useCreateRecord({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record created successfully') })\n    }\n  })\n\n  const { updateRecords, isLoading: isUpdateLoading } = useRecords({\n    onCompleted: () => {\n      closeModal()\n      setToast({ message: t('Record updated successfully') })\n    }\n  })\n\n  const onError = (error: { message: string }) => {\n    setToast({ message: error.message })\n  }\n\n  const isLoading = isCreateLoading || isUpdateLoading\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    title: Validator.string().required(t('Name is required')),\n    password: Validator.string().required(t('Password is required')),\n    note: Validator.string(),\n    customFields: Validator.array().items(\n      Validator.object({\n        note: Validator.string()\n      })\n    ),\n    folder: Validator.string()\n  })\n\n  const { register, handleSubmit, registerArray, setValue, values } = useForm({\n    initialValues: {\n      title: initialRecord?.data?.title ?? '',\n      password: initialRecord?.data?.password ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields?.length\n        ? initialRecord.data.customFields\n        : [{ type: 'note', note: '' }],\n      folder: selectedFolder ?? initialRecord?.folder\n    },\n    validate: (formValues: Record<string, unknown>) =>\n      schema.validate(formValues)\n  })\n\n  const {\n    value: customFieldsList,\n    addItem: addCustomField,\n    registerItem: registerCustomFieldItem,\n    removeItem: removeCustomFieldItem\n  } = registerArray('customFields')\n\n  const onSubmit = (formValues: Record<string, unknown>) => {\n    const data = {\n      type: RECORD_TYPES.WIFI_PASSWORD,\n      folder: formValues.folder,\n      isFavorite: initialRecord?.isFavorite ?? isFavorite,\n      data: {\n        ...(initialRecord?.data ? initialRecord.data : {}),\n        title: formValues.title,\n        password: formValues.password,\n        note: formValues.note,\n        customFields: (\n          (formValues.customFields as Array<{ type: string; note?: string }>) ??\n          []\n        ).filter((f) => f.note?.trim().length)\n      }\n    }\n\n    if (initialRecord) {\n      updateRecords([{ ...initialRecord, ...data }], onError)\n    } else {\n      createRecord(data, onError)\n    }\n  }\n\n  const isEdit = !!initialRecord\n\n  const titleField = register('title')\n  const passwordField = register('password')\n  const noteField = register('note')\n\n  return (\n    <Dialog\n      title={isEdit ? t('Edit Wi-Fi Item') : t('New Wi-Fi Item')}\n      onClose={closeModal}\n      testID=\"createoredit-wifi-dialog-v2\"\n      closeButtonTestID=\"createoredit-wifi-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"createoredit-wifi-button-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isLoading || (!isEdit && (!values.title?.trim() || !values.password?.trim()))}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            data-testid=\"createoredit-wifi-button-save-v2\"\n          >\n            {isEdit ? t('Save') : t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(onSubmit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createoredit-wifi-form-v2\"\n      >\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Credentials')}\n          </Text>\n        </div>\n\n        <MultiSlotInput\n          testID=\"createoredit-wifi-credentials-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<SyncLock width={16} height={16} />}\n              onClick={() =>\n                handleCreateOrEditRecord({\n                  recordType: 'password',\n                  setValue: (value: string, type: PassType) => {\n                    setValue('password', value)\n                    setPasswordType(type === PassType.PassPhrase ? PassType.PassPhrase : PassType.Password)\n                  }\n                })\n              }\n              data-testid=\"createoredit-wifi-button-generatepassword-v2\"\n            >\n              {t('Generate Password')}\n            </Button>\n          }\n        >\n          <InputField\n            label={t('Wi-Fi Name')}\n            placeholder={t('Enter Name of Network')}\n            value={titleField.value}\n            onChange={(e) => titleField.onChange(e.target.value)}\n            error={titleField.error || undefined}\n            testID=\"createoredit-wifi-input-name-v2\"\n          />\n          <PasswordFieldStrengthIndicator\n            testID=\"createoredit-wifi-input-password-v2\"\n            passwordField={passwordField}\n            passwordType={passwordType}\n            setPasswordType={setPasswordType}\n          />\n        </MultiSlotInput>\n\n        <div style={styles.sectionLabel}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n        </div>\n\n        <FolderDropdownV2\n          selectedFolder={values?.folder}\n          onFolderSelect={(name) =>\n            setValue('folder', name === values.folder ? '' : name)\n          }\n        />\n\n        <InputField\n          label={t('Comment')}\n          placeholder={t('Enter Comment')}\n          value={noteField.value}\n          onChange={(e) => noteField.onChange(e.target.value)}\n          error={noteField.error || undefined}\n          testID=\"createoredit-wifi-input-comment-v2\"\n        />\n\n        <MultiSlotInput\n          testID=\"createoredit-wifi-hiddenmessage-slot-v2\"\n          actions={\n            <Button\n              variant=\"tertiaryAccent\"\n              size=\"small\"\n              type=\"button\"\n              iconBefore={<Add width={16} height={16} />}\n              onClick={() => addCustomField({ type: 'note', note: '' })}\n              data-testid=\"createoredit-wifi-button-addhiddenmessage-v2\"\n            >\n              {t('Add Another Message')}\n            </Button>\n          }\n        >\n          {customFieldsList.map((field: { id: string }, index: number) => {\n            const fieldReg = registerCustomFieldItem('note', index)\n            const canRemove = customFieldsList.length > 1\n            return (\n              <PasswordField\n                key={field.id}\n                label={t('Hidden Message')}\n                placeholder={t('Enter Hidden Message')}\n                value={fieldReg.value}\n                onChange={(e) => fieldReg.onChange(e.target.value)}\n                error={fieldReg.error || undefined}\n                testID={`createoredit-wifi-input-hiddenmessage-v2-${index}`}\n                rightSlot={\n                  canRemove ? (\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      type=\"button\"\n                      aria-label={t('Remove')}\n                      iconBefore={\n                        <TrashOutlined\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() => removeCustomFieldItem(index)}\n                      data-testid={`createoredit-wifi-button-removehiddenmessage-v2-${index}`}\n                    />\n                  ) : undefined\n                }\n              />\n            )\n          })}\n        </MultiSlotInput>\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditCategoryWrapper/index.js",
    "content": "import { useState } from 'react'\n\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CreateOrEditAuthenticatorModalContent } from './CreateOrEditAuthenticatorModalContent/CreateOrEditAuthenticatorModalContent'\nimport { CreateOrEditCreditCardModalContent } from './CreateOrEditCreditCardModalContent'\nimport { CreateOrEditCreditCardModalContentV2 } from './CreateOrEditCreditCardModalContentV2/CreateOrEditCreditCardModalContentV2'\nimport { CreateOrEditCustomModalContent } from './CreateOrEditCustomModalContent'\nimport { CreateOrEditCustomModalContentV2 } from './CreateOrEditCustomModalContentV2/CreateOrEditCustomModalContentV2'\nimport { CreateOrEditIdentityModalContent } from './CreateOrEditIdentityModalContent'\nimport { CreateOrEditIdentityModalContentV2 } from './CreateOrEditIdentityModalContentV2/CreateOrEditIdentityModalContentV2'\nimport { CreateOrEditLoginModalContent } from './CreateOrEditLoginModalContent'\nimport { CreateOrEditLoginModalContentV2 } from './CreateOrEditLoginModalContentV2/CreateOrEditLoginModalContentV2'\nimport { CreateOrEditNoteModalContent } from './CreateOrEditNoteModalContent'\nimport { CreateOrEditNoteModalContentV2 } from './CreateOrEditNoteModalContentV2/CreateOrEditNoteModalContentV2'\nimport { CreateOrEditPassPhraseModalContent } from './CreateOrEditPassPhraseModalContent'\nimport { CreateOrEditPassPhraseModalContentV2 } from './CreateOrEditPassPhraseModalContentV2/CreateOrEditPassPhraseModalContentV2'\nimport { CreateOrEditWifiModalContent } from './CreateOrEditWifiModalContent'\nimport { CreateOrEditWifiModalContentV2 } from './CreateOrEditWifiModalContentV2/CreateOrEditWifiModalContentV2'\nimport { isV2 } from '../../../utils/designVersion'\n\nexport const CreateOrEditCategoryWrapper = ({\n  initialRecord,\n  selectedFolder,\n  recordType,\n  isFavorite\n}) => {\n  const [currentRecordType, setCurrentRecordType] = useState(recordType)\n\n  if (currentRecordType === RECORD_TYPES.OTP) {\n    return html`<${CreateOrEditAuthenticatorModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n\n  if (currentRecordType === RECORD_TYPES.LOGIN) {\n    if (isV2()) {\n      return html`<${CreateOrEditLoginModalContentV2}\n        initialRecord=${initialRecord}\n        selectedFolder=${selectedFolder}\n        isFavorite=${isFavorite}\n        onTypeChange=${setCurrentRecordType}\n      />`\n    }\n\n    return html`<${CreateOrEditLoginModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n\n  if (currentRecordType === RECORD_TYPES.CREDIT_CARD) {\n    if (isV2()) {\n      return html`<${CreateOrEditCreditCardModalContentV2}\n        initialRecord=${initialRecord}\n        selectedFolder=${selectedFolder}\n        isFavorite=${isFavorite}\n        onTypeChange=${setCurrentRecordType}\n      />`\n    }\n\n    return html`<${CreateOrEditCreditCardModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n\n  if (currentRecordType === RECORD_TYPES.IDENTITY) {\n    if (isV2()) {\n      return html`<${CreateOrEditIdentityModalContentV2}\n        initialRecord=${initialRecord}\n        selectedFolder=${selectedFolder}\n        isFavorite=${isFavorite}\n        onTypeChange=${setCurrentRecordType}\n      />`\n    }\n\n    return html`<${CreateOrEditIdentityModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n\n  if (currentRecordType === RECORD_TYPES.NOTE) {\n    if (isV2()) {\n      return html`<${CreateOrEditNoteModalContentV2}\n        initialRecord=${initialRecord}\n        selectedFolder=${selectedFolder}\n        isFavorite=${isFavorite}\n        onTypeChange=${setCurrentRecordType}\n      />`\n    }\n\n    return html`<${CreateOrEditNoteModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n\n  if (currentRecordType === RECORD_TYPES.WIFI_PASSWORD) {\n    if (isV2()) {\n      return html`<${CreateOrEditWifiModalContentV2}\n        initialRecord=${initialRecord}\n        selectedFolder=${selectedFolder}\n        isFavorite=${isFavorite}\n        onTypeChange=${setCurrentRecordType}\n      />`\n    }\n\n    return html`<${CreateOrEditWifiModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n\n  if (currentRecordType === RECORD_TYPES.PASS_PHRASE) {\n    if (isV2()) {\n      return html`<${CreateOrEditPassPhraseModalContentV2}\n        initialRecord=${initialRecord}\n        selectedFolder=${selectedFolder}\n        isFavorite=${isFavorite}\n        onTypeChange=${setCurrentRecordType}\n      />`\n    }\n\n    return html`<${CreateOrEditPassPhraseModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n\n  if (currentRecordType === RECORD_TYPES.CUSTOM) {\n    if (isV2()) {\n      return html`<${CreateOrEditCustomModalContentV2}\n        initialRecord=${initialRecord}\n        selectedFolder=${selectedFolder}\n        isFavorite=${isFavorite}\n        onTypeChange=${setCurrentRecordType}\n      />`\n    }\n\n    return html`<${CreateOrEditCustomModalContent}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n      onTypeChange=${setCurrentRecordType}\n    />`\n  }\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing16}px`,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2.tsx",
    "content": "import React, { useEffect, useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { Button, Dialog, Form, InputField } from '@tetherto/pearpass-lib-ui-kit'\nimport { useCreateVault, useVault, type Vault } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './CreateOrEditVaultModalContentV2.styles'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { getDeviceName } from '../../../utils/getDeviceName'\nimport { logger } from '../../../utils/logger'\n\nexport type CreateOrEditVaultModalContentV2Props = {\n  onClose: () => void\n  onSuccess?: () => void\n  vault?: Vault\n  shouldRedirectToMain?: boolean\n}\n\nexport const CreateOrEditVaultModalContentV2 = ({\n  onClose,\n  onSuccess,\n  vault,\n  shouldRedirectToMain = true\n}: CreateOrEditVaultModalContentV2Props) => {\n  const isEditMode = !!vault\n  const { t } = useTranslation()\n  const { navigate } = useRouter()\n  const styles = createStyles()\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    name: Validator.string().required(t('Name is required'))\n  })\n\n  const { addDevice, updateUnprotectedVault, refetch: refetchVault } = useVault()\n  const { createVault } = useCreateVault()\n\n  const { register, handleSubmit, values } = useForm({\n    initialValues: {\n      name: vault?.name ?? ''\n    },\n    validate: (formValues: { name: string }) => schema.validate(formValues)\n  })\n\n  useEffect(() => {\n    if (isEditMode) {\n      void refetchVault()\n    }\n    // TODO: refetchVault ref changes on every vault state update; including it\n    //  would re-trigger this effect in an infinite loop.\n    //  Make it have stable reference by wrapping in useCallback.\n  }, [isEditMode])\n\n  const nameField = register('name')\n\n  const nameOk = values.name.trim().length > 0\n  const isSaveDisabled = !nameOk || isLoading\n\n  const submit = async (formValues: { name: string }) => {\n    if (isLoading) {\n      return\n    }\n\n    if (isEditMode && vault) {\n      try {\n        setIsLoading(true)\n        await updateUnprotectedVault(vault.id, { name: formValues.name })\n        setIsLoading(false)\n        onSuccess?.()\n      } catch (error) {\n        setIsLoading(false)\n        logger.error(\n          'CreateOrEditVaultModalContentV2',\n          'Error renaming vault:',\n          error\n        )\n      }\n      return\n    }\n\n    try {\n      setIsLoading(true)\n\n      await createVault({\n        name: formValues.name,\n        password: ''\n      })\n\n      await addDevice(getDeviceName())\n\n      onSuccess?.()\n      if(shouldRedirectToMain) {\n        navigate('vault', { recordType: 'all' })\n      }\n      setIsLoading(false)\n    } catch (error) {\n      setIsLoading(false)\n      logger.error(\n        'CreateOrEditVaultModalContentV2',\n        'Error creating vault:',\n        error\n      )\n    }\n  }\n\n  const nameError = nameField.error\n\n  return (\n    <Dialog\n      title={isEditMode ? t('Rename Vault') : t('Create New Vault')}\n      onClose={onClose}\n      testID=\"createvault-dialog-v2\"\n      closeButtonTestID=\"createvault-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={onClose}\n            data-testid=\"createvault-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isSaveDisabled}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(submit)()}\n            data-testid=\"createvault-save-v2\"\n          >\n            {t('Save')}\n          </Button>\n        </>\n      }\n    >\n      <Form\n        onSubmit={handleSubmit(submit)}\n        style={styles.form as React.ComponentProps<typeof Form>['style']}\n        testID=\"createvault-form-v2\"\n      >\n        <InputField\n          label={t('Vault Name')}\n          placeholderText={t('Enter Name')}\n          value={nameField.value}\n          onChangeText={(v) => nameField.onChange(v)}\n          variant={nameError ? 'error' : 'default'}\n          errorMessage={nameError || undefined}\n          testID=\"createvault-name-v2\"\n        />\n      </Form>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateVaultModalContent/index.js",
    "content": "import { useMemo, useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { PROTECTED_VAULT_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { useCreateVault, useVault } from '@tetherto/pearpass-lib-vault'\nimport { checkPasswordStrength } from '@tetherto/pearpass-utils-password-check'\nimport { html } from 'htm/react'\n\nimport {\n  AccordionContent,\n  AccordionFields,\n  AccordionRow,\n  AccordionSection,\n  Actions,\n  BackButton,\n  BackButtonTitle,\n  CancelButton,\n  ContinueButtonWrapper,\n  FieldGroup,\n  HeaderTitle,\n  InputIconWrapper,\n  InputRow,\n  InputRowLeft,\n  VaultNameRow,\n  InputText,\n  Label,\n  PasswordErrorRow,\n  PasswordRequirements,\n  PasswordRowRight,\n  PasswordStrength,\n  RequirementsItem,\n  RequirementsList,\n  IconOnlyButton,\n  RoundArrowButton,\n  Wrapper\n} from './styles'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  ButtonPrimary,\n  ErrorIcon,\n  EyeClosedIcon,\n  EyeIcon,\n  LockCircleIcon,\n  OkayIcon,\n  YellowErrorIcon,\n  NoticeText,\n  SmallArrowIcon\n} from '../../../lib-react-components'\nimport { getDeviceName } from '../../../utils/getDeviceName'\nimport { logger } from '../../../utils/logger'\nimport { ModalContent } from '../ModalContent'\n\n/**\n * @param {{\n *  onClose: () => void\n *  onSuccess?: () => void\n * }} props\n */\nexport const CreateVaultModalContent = ({ onClose, onSuccess }) => {\n  const { t } = useTranslation()\n  const { navigate } = useRouter()\n\n  const [isPasswordOpen, setIsPasswordOpen] = useState(false)\n  const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n  const [isPasswordConfirmVisible, setIsPasswordConfirmVisible] =\n    useState(false)\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const schema = Validator.object({\n    name: Validator.string().required(t('Name is required')),\n    password: Validator.string(),\n    passwordConfirm: Validator.string()\n  })\n\n  const { addDevice } = useVault()\n  const { createVault } = useCreateVault()\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: {\n      name: '',\n      password: '',\n      passwordConfirm: ''\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const nameField = register('name')\n\n  const { onChange: onPasswordChange, ...passwordField } = register('password')\n  const { onChange: onPasswordConfirmChange, ...passwordConfirmField } =\n    register('passwordConfirm')\n\n  const passwordStrengthResult = useMemo(\n    () =>\n      checkPasswordStrength(passwordField.value || '', {\n        rules: {\n          length: 12\n        },\n        errors: {\n          minLength: t('Password must be at least 12 characters long'),\n          hasLowerCase: t('Password is missing a lowercase letter'),\n          hasUpperCase: t('Password is missing an uppercase letter'),\n          hasNumbers: t('Password is missing a number'),\n          hasSymbols: t('Password is missing a special character')\n        }\n      }),\n    [passwordField.value, t]\n  )\n\n  const strengthIcon = useMemo(() => {\n    switch (passwordStrengthResult.strengthType) {\n      case 'error':\n        return ErrorIcon\n      case 'warning':\n        return YellowErrorIcon\n      case 'success':\n        return OkayIcon\n      default:\n        return null\n    }\n  }, [passwordStrengthResult.strengthType])\n\n  const submit = async (values) => {\n    if (isLoading) {\n      return\n    }\n\n    if (values.password) {\n      const strengthResult = checkPasswordStrength(values.password, {\n        rules: { length: 12 },\n        errors: {\n          minLength: t('Password must be at least 12 characters long'),\n          hasLowerCase: t('Password is missing a lowercase letter'),\n          hasUpperCase: t('Password is missing an uppercase letter'),\n          hasNumbers: t('Password is missing a number'),\n          hasSymbols: t('Password is missing a special character')\n        }\n      })\n\n      if (!strengthResult.success) {\n        setErrors({\n          password:\n            strengthResult.errors?.[0] || t('Password is not strong enough')\n        })\n        return\n      }\n\n      if (values.password !== values.passwordConfirm) {\n        setErrors({\n          passwordConfirm: t('Passwords do not match')\n        })\n\n        return\n      }\n    }\n\n    try {\n      setIsLoading(true)\n\n      await createVault({\n        name: values.name,\n        password: values.password\n      })\n\n      await addDevice(getDeviceName())\n\n      onSuccess?.()\n      navigate('vault', { recordType: 'all' })\n\n      setIsLoading(false)\n    } catch (error) {\n      setIsLoading(false)\n      logger.error('CreateVaultModalContent', 'Error creating vault:', error)\n    }\n  }\n\n  return html` <${ModalContent}\n    onClose=${onClose}\n    onSubmit=${handleSubmit(submit)}\n    showCloseButton=${false}\n    borderColor=${colors.grey400.mode1}\n    borderRadius=\"20px\"\n    headerChildren=${html`\n      <${BackButtonTitle}>\n        <${BackButton}\n          type=\"button\"\n          onClick=${onClose}\n          data-testid=\"createvault-back\"\n        >\n          <${SmallArrowIcon} color=${colors.primary400.mode1} size=\"20\" />\n        <//>\n        <${HeaderTitle}>${t('Create new Vault')}<//>\n      <//>\n    `}\n  >\n    <${Wrapper}>\n      <${FieldGroup}>\n        <${VaultNameRow}>\n          <${InputRowLeft}>\n            <${InputIconWrapper}>\n              <${LockCircleIcon} size=\"24\" color=${colors.white.mode1} />\n            <//>\n            <${InputText}\n              placeholder=${t('Insert Vault name...')}\n              autoFocus\n              value=${nameField.value}\n              disabled=${nameField.isDisabled}\n              onChange=${(e) => nameField.onChange?.(e.target.value)}\n            />\n          <//>\n        <//>\n\n        ${!!nameField.error?.length &&\n        html`<${NoticeText} text=${nameField.error} type=\"error\" />`}\n      <//>\n\n      ${PROTECTED_VAULT_ENABLED\n        ? html`\n            <${AccordionSection}>\n              <${AccordionRow}>\n                <${Label}>${t('Set Vault Password (optional)')}<//>\n                <${RoundArrowButton}\n                  type=\"button\"\n                  $isOpen=${isPasswordOpen}\n                  onClick=${() => setIsPasswordOpen(!isPasswordOpen)}\n                  data-testid=\"createvault-password-toggle\"\n                >\n                  <${SmallArrowIcon}\n                    color=${colors.primary400.mode1}\n                    size=\"20\"\n                  />\n                <//>\n              <//>\n              <${AccordionContent} $isOpen=${isPasswordOpen}>\n                <${AccordionFields}>\n                  <${InputRow}>\n                    <${InputRowLeft}>\n                      <${InputText}\n                        placeholder=${t('Create Vault Password (optional)')}\n                        value=${passwordField.value}\n                        disabled=${passwordField.isDisabled}\n                        type=${isPasswordVisible ? 'text' : 'password'}\n                        onChange=${(e) => onPasswordChange?.(e.target.value)}\n                      />\n                    <//>\n                    <${PasswordRowRight}>\n                      ${passwordField.value?.length\n                        ? html`\n                            <${PasswordStrength}\n                              strength=${passwordStrengthResult.type}\n                            >\n                              ${strengthIcon && html`<${strengthIcon} />`}\n                              ${t(passwordStrengthResult.strengthText)}\n                            <//>\n                          `\n                        : null}\n                      <${IconOnlyButton}\n                        type=\"button\"\n                        onClick=${() =>\n                          setIsPasswordVisible(!isPasswordVisible)}\n                        data-testid=\"createvault-password-visibility\"\n                      >\n                        ${isPasswordVisible\n                          ? html`\n                              <${EyeClosedIcon}\n                                color=${colors.primary400.mode1}\n                              />\n                            `\n                          : html`\n                              <${EyeIcon} color=${colors.primary400.mode1} />\n                            `}\n                      <//>\n                    <//>\n                  <//>\n                  <${InputRow}>\n                    <${InputRowLeft}>\n                      <${InputText}\n                        placeholder=${t('Repeat Vault Password')}\n                        value=${passwordConfirmField.value}\n                        disabled=${passwordConfirmField.isDisabled}\n                        type=${isPasswordConfirmVisible ? 'text' : 'password'}\n                        onChange=${(e) =>\n                          onPasswordConfirmChange?.(e.target.value)}\n                      />\n                    <//>\n                    <${PasswordRowRight}>\n                      <${IconOnlyButton}\n                        type=\"button\"\n                        onClick=${() =>\n                          setIsPasswordConfirmVisible(\n                            !isPasswordConfirmVisible\n                          )}\n                        data-testid=\"createvault-passwordconfirm-visibility\"\n                      >\n                        ${isPasswordConfirmVisible\n                          ? html`\n                              <${EyeClosedIcon}\n                                color=${colors.primary400.mode1}\n                              />\n                            `\n                          : html`\n                              <${EyeIcon} color=${colors.primary400.mode1} />\n                            `}\n                      <//>\n                    <//>\n                  <//>\n                  ${passwordConfirmField.error?.length\n                    ? html`\n                        <${PasswordErrorRow}>\n                          <${ErrorIcon} />\n                          ${passwordConfirmField.error}\n                        <//>\n                      `\n                    : passwordField.error?.length\n                      ? html`\n                          <${PasswordErrorRow}>\n                            <${ErrorIcon} />\n                            ${passwordField.error}\n                          <//>\n                        `\n                      : passwordField.value?.length &&\n                          passwordStrengthResult.errors?.length\n                        ? html`\n                            <${PasswordErrorRow}>\n                              <${ErrorIcon} />\n                              ${passwordStrengthResult.errors[0]}\n                            <//>\n                          `\n                        : null}\n                  <${PasswordRequirements}>\n                    <span>\n                      ${t(\n                        'Your password must be at least 12 characters long and include at least one of each:'\n                      )}\n                    </span>\n                    <${RequirementsList}>\n                      <${RequirementsItem}>${t('Uppercase Letter (A-Z)')}<//>\n                      <${RequirementsItem}>${t('Lowercase Letter (a-z)')}<//>\n                      <${RequirementsItem}>${t('Number (0-9)')}<//>\n                      <${RequirementsItem}>\n                        ${t('Special Character (! @ # $...)')}\n                      <//>\n                    <//>\n                    <span>\n                      ${t('Note: Avoid common words and personal information.')}\n                    </span>\n                  <//>\n                <//>\n              <//>\n            <//>\n          `\n        : null}\n\n      <${Actions}>\n        <${ContinueButtonWrapper}>\n          <${ButtonPrimary}\n            type=\"submit\"\n            size=\"lg\"\n            testId=\"createvault-continue\"\n          >\n            ${t('Continue')}\n          <//>\n        <//>\n\n        <${CancelButton}\n          type=\"button\"\n          onClick=${onClose}\n          data-testid=\"createvault-cancel\"\n        >\n          ${t('Cancel')}\n        <//>\n      <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/CreateVaultModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const BackButtonTitle = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 12px;\n`\n\nexport const RoundIconButton = styled.button`\n  display: inline-flex;\n  width: 42px;\n  height: 42px;\n  padding: 9px;\n  justify-content: center;\n  align-items: center;\n  border: 1px solid ${({ theme }) => theme.colors.black.mode1};\n  border-radius: 30px;\n  cursor: pointer;\n  background: ${({ theme }) => theme.colors.black.mode1};\n\n  &:hover {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const BackButton = styled(RoundIconButton)`\n  & svg {\n    transform: rotate(90deg);\n  }\n`\n\nexport const HeaderTitle = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 20px;\n  font-weight: 700;\n`\n\nexport const Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 25px;\n`\n\nexport const FieldGroup = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`\n\nexport const InputRow = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n  padding: 10px;\n  min-height: 62px;\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n`\n\nexport const VaultNameRow = styled(InputRow)`\n  padding: 14px 16px;\n`\n\nexport const InputRowLeft = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  min-width: 0;\n  flex: 1;\n`\n\nexport const InputIconWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n`\n\nexport const InputText = styled.input`\n  flex: 1;\n  min-width: 0;\n  border: none;\n  background: transparent;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n  outline: none;\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n    font-weight: 700;\n  }\n`\n\nexport const Label = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n`\n\nexport const AccordionSection = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`\n\nexport const AccordionRow = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n`\n\nexport const RoundArrowButton = styled(RoundIconButton)`\n  & svg {\n    transform: ${({ $isOpen }) =>\n      $isOpen ? 'rotate(0deg)' : 'rotate(-90deg)'};\n    transition: transform 0.2s ease;\n  }\n`\n\nexport const IconOnlyButton = styled.button`\n  display: inline-flex;\n  width: 42px;\n  height: 42px;\n  padding: 9px;\n  justify-content: center;\n  align-items: center;\n  border: none;\n  background: transparent;\n  border-radius: 30px;\n  cursor: pointer;\n\n  &:hover {\n    opacity: 0.9;\n  }\n`\n\nexport const AccordionFields = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`\n\nexport const AccordionContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  overflow: hidden;\n\n  padding-top: ${({ $isOpen }) => ($isOpen ? '10px' : '0')};\n  max-height: ${({ $isOpen }) => ($isOpen ? '520px' : '0')};\n\n  transition:\n    max-height 0.25s ease,\n    padding-top 0.25s ease;\n`\n\nexport const PasswordRowRight = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: 10px;\n`\n\nexport const PasswordStrength = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['strength'].includes(prop)\n})`\n  display: flex;\n  align-items: center;\n  gap: 5px;\n\n  color: ${({ theme, strength }) => {\n    switch (strength) {\n      case 'safe':\n        return theme.colors.primary400.mode1\n      case 'vulnerable':\n        return theme.colors.errorRed.dark\n      case 'weak':\n        return theme.colors.errorYellow.mode1\n      default:\n        return theme.colors.white.mode1\n    }\n  }};\n\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n`\n\nexport const PasswordErrorRow = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n  gap: 5px;\n  width: 100%;\n\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n  color: ${({ theme }) => theme.colors.errorRed.mode1};\n`\n\nexport const PasswordRequirements = styled.div`\n  width: 100%;\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n  line-height: normal;\n`\n\nexport const RequirementsList = styled.ul`\n  margin: 0;\n  padding-left: 20px;\n  list-style-type: disc;\n`\n\nexport const RequirementsItem = styled.li`\n  font-size: 12px;\n`\n\nexport const Actions = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 18px;\n`\n\nexport const ContinueButtonWrapper = styled.div`\n  flex: 1;\n  max-width: 260px;\n\n  & > button {\n    width: 100%;\n    height: 42px;\n    max-width: 260px;\n    padding: 9px 40px;\n    font-size: 14px;\n    font-weight: 700;\n  }\n`\n\nexport const CancelButton = styled.button`\n  flex: 1;\n  max-width: 260px;\n  height: 42px;\n  min-height: 42px;\n  padding: 9px 40px;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  background: transparent;\n  border: none;\n  cursor: pointer;\n\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n  line-height: 17px;\n\n  &:hover {\n    opacity: 0.9;\n  }\n`\n"
  },
  {
    "path": "src/containers/Modal/DecryptFilePassword/index.tsx",
    "content": "import { html } from 'htm/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\n\nimport { FormModalHeaderWrapper } from '../../../components/FormModalHeaderWrapper'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  ButtonPrimary,\n  PearPassPasswordField\n} from '../../../lib-react-components'\nimport { logger } from '../../../utils/logger'\nimport { ModalContent } from '../ModalContent'\nimport {\n  Description,\n  Header,\n  Title,\n  UnlockVaultContainer\n} from '../CreateFileEncryptionPassword/styles'\n\ninterface props {\n  onSubmit: (password: string) => Promise<void>\n}\n\n/**\n *\n * @param {Object} props\n * @param {(password: string) => Promise<void>} props.onSubmit\n */\nexport const DecryptFilePassword = ({ onSubmit }: props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { setIsLoading } = useLoadingContext()\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: {\n      password: ''\n    },\n    validate: (values: { password: string }) => schema.validate(values)\n  })\n\n  const submit = async (values: { password: string }) => {\n    try {\n      setIsLoading(true)\n\n      await onSubmit?.(values.password)\n\n      setIsLoading(false)\n      closeModal()\n    } catch (error) {\n      logger.error('DecryptFilePassword', error)\n\n      setIsLoading(false)\n\n      setErrors({\n        password: t('Invalid password or corrupted file')\n      })\n    }\n  }\n\n  return html` <${ModalContent}\n    onClose=${closeModal}\n    headerChildren=${html`\n      <${FormModalHeaderWrapper}>\n        <${Header}>\n          <${Title}> ${t('Enter decryption password')} <//>\n          <${Description}>\n            ${t('Enter the password used to encrypt this file.')}<//\n          >\n        <//>\n      <//>\n    `}\n  >\n    <${UnlockVaultContainer} onSubmit=${handleSubmit(submit)}>\n      <${PearPassPasswordField}\n        placeholder=${t('File password')}\n        ...${register('password')}\n      />\n\n      <${ButtonPrimary} type=\"submit\"> ${t('Import')} <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/DeleteFolderModalContentV2/DeleteFolderModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing16}px`,\n    whiteSpace: 'pre-line' as const\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/DeleteFolderModalContentV2/DeleteFolderModalContentV2.tsx",
    "content": "import { useState } from 'react'\n\nimport { UNSUPPORTED } from '@tetherto/pearpass-lib-constants'\nimport {\n  Button,\n  Dialog,\n  Radio,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { useFolders, useRecords } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './DeleteFolderModalContentV2.styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\ninterface DeleteFolderModalContentV2Props {\n  folderName: string\n  count: number\n  onClose: () => void\n}\n\nenum DeleteOption {\n  DeleteFolder = 'deleteFolder',\n  DeleteFolderAndItems = 'deleteFolderAndItems'\n}\n\nexport const DeleteFolderModalContentV2 = ({\n  folderName,\n  count,\n  onClose\n}: DeleteFolderModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles()\n  const { closeModal } = useModal()\n  const { data: routerData, navigate } = useRouter() as {\n    data: Record<string, unknown>\n    navigate: (page: string, data: Record<string, unknown>) => void\n  }\n\n  const { deleteFolder, data: folderData } = useFolders()\n  const { updateRecords } = useRecords()\n\n  const [selected, setSelected] = useState<DeleteOption>(\n    DeleteOption.DeleteFolderAndItems\n  )\n\n  const handleClose = () => {\n    onClose()\n  }\n\n  const navigateAwayIfNeeded = () => {\n    if (routerData?.folder === folderName) {\n      navigate('vault', { recordType: 'all' })\n    }\n  }\n\n  const handleDelete = async () => {\n    if (selected === DeleteOption.DeleteFolder) {\n      // Folder entries can include markers without data/type; skip them.\n      const folderRecords =\n        folderData?.customFolders?.[folderName]?.records ?? []\n      const realRecords = folderRecords.filter(\n        (r: { data?: unknown; type?: unknown }) => !!r.data && !!r.type\n      )\n      await updateRecords(realRecords.map((r) => ({ ...r, folder: null })))\n      // Items are now at root; remove the folder marker record.\n      await deleteFolder(folderName)\n    } else {\n      await deleteFolder(folderName)\n    }\n\n    navigateAwayIfNeeded()\n    closeModal()\n  }\n\n  const options = [\n    ...(!UNSUPPORTED\n      ? [\n          {\n            value: DeleteOption.DeleteFolder,\n            label: t('Delete Folder'),\n            description: t(\n              'Only the folder will be removed.\\nYour items will be moved to the All Folder list.'\n            )\n          }\n        ]\n      : []),\n    {\n      value: DeleteOption.DeleteFolderAndItems,\n      label: t('Delete Folder and Items'),\n      description: t(\n        'This will permanently remove the folder and all {count} items inside.\\nThis action cannot be undone.',\n        { count }\n      )\n    }\n  ]\n\n  const isDeleteFolderOnlySelected =\n    !UNSUPPORTED && selected === DeleteOption.DeleteFolder\n\n  return (\n    <Dialog\n      title={t('Delete Folder')}\n      onClose={handleClose}\n      testID=\"deletefolder-dialog-v2\"\n      closeButtonTestID=\"deletefolder-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={handleClose}\n            data-testid=\"deletefolder-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          {isDeleteFolderOnlySelected ? (\n            <Button\n              variant=\"primary\"\n              size=\"small\"\n              type=\"button\"\n              onClick={handleDelete}\n              data-testid=\"deletefolder-submit-v2\"\n            >\n              {t('Delete Folder')}\n            </Button>\n          ) : (\n            <Button\n              variant=\"destructive\"\n              size=\"small\"\n              type=\"button\"\n              onClick={handleDelete}\n              data-testid=\"deletefolder-submit-v2\"\n            >\n              {t('Delete Folder and Items')}\n            </Button>\n          )}\n        </>\n      }\n    >\n      <div style={styles.body}>\n        <Text color={theme.colors.colorTextSecondary}>\n          {t('This folder contains {count} items.', { count })}\n        </Text>\n        <Radio\n          options={options}\n          value={selected}\n          onChange={(value) => setSelected(value as DeleteOption)}\n          testID=\"deletefolder-radio-v2\"\n        />\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/DeleteRecordsModalContentV2/DeleteRecordsModalContentV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { FADE_GRADIENT_HEIGHT } from '../../../constants/layout'\nimport { withAlpha } from '../../../utils/withAlpha'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  itemsListHeader: {\n    marginBottom: `${rawTokens.spacing16}px`\n  },\n  itemRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing12}px`,\n    width: '100%'\n  },\n  itemText: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing4}px`,\n    minWidth: 0,\n    flex: 1\n  },\n  itemsListWrapper: {\n    position: 'relative' as const,\n    width: '100%'\n  },\n  itemsList: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%',\n    maxHeight: '220px',\n    overflowY: 'auto' as const,\n    paddingLeft: `${rawTokens.spacing12}px`\n  },\n  fadeGradient: {\n    position: 'absolute' as const,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    height: FADE_GRADIENT_HEIGHT,\n    pointerEvents: 'none' as const,\n    background: `linear-gradient(180deg, ${withAlpha(colors.colorSurfacePrimary, 0)} 0%, ${colors.colorSurfacePrimary} 100%)`\n  },\n  confirmText: {\n    marginTop: `${rawTokens.spacing16}px`,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/DeleteRecordsModalContentV2/DeleteRecordsModalContentV2.tsx",
    "content": "import React, { useRef } from 'react'\n\nimport { Button, Dialog, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { useRecords } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './DeleteRecordsModalContentV2.styles'\nimport { RecordItemIcon } from '../../../components/RecordItemIcon'\nimport { FADE_GRADIENT_HEIGHT } from '../../../constants/layout'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useScrollOverflow } from '../../../hooks/useScrollOverflow'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { getRecordSubtitle } from '../../../utils/getRecordSubtitle'\nimport type { VaultRecord } from '../../../utils/groupRecordsByTimePeriod'\n\ntype DeleteRecordsModalContentV2Props = {\n  records: VaultRecord[]\n  onCompleted?: () => void\n  onConfirm?: () => Promise<void> | void\n  dialogTitle?: string\n  confirmText?: string\n  submitLabel?: string\n}\n\nexport const DeleteRecordsModalContentV2 = ({\n  records,\n  onCompleted,\n  onConfirm,\n  dialogTitle: dialogTitleOverride,\n  confirmText: confirmTextOverride,\n  submitLabel: submitLabelOverride\n}: DeleteRecordsModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { closeModal } = useModal()\n\n  const { deleteRecords, isLoading } = useRecords({\n    onCompleted: closeModal\n  })\n\n  useGlobalLoading({ isLoading })\n\n  const itemsListRef = useRef<HTMLDivElement>(null)\n  const hasItemsOverflow = useScrollOverflow(itemsListRef, [records.length])\n\n  const count = records.length\n  const isSingle = count === 1\n\n  const dialogTitle = dialogTitleOverride ?? (isSingle\n    ? t('Delete 1 Item')\n    : t('Delete {count} Items', { count }))\n\n  const confirmText = confirmTextOverride ?? (isSingle\n    ? t('Are you sure to delete the selected item?')\n    : t('Are you sure to delete the selected items?'))\n\n  const selectedLabel = isSingle ? t('Selected Item') : t('Selected Items')\n\n  const submitLabel = submitLabelOverride ?? (isSingle ? t('Delete Item') : t('Delete Items'))\n\n  const handleDelete = async () => {\n    if (!count || isLoading) return\n    if (onConfirm) {\n      await onConfirm()\n    } else {\n      await deleteRecords(records.map((r) => r.id))\n    }\n    onCompleted?.()\n  }\n\n  return (\n    <Dialog\n      title={dialogTitle}\n      onClose={closeModal}\n      testID=\"delete-records-dialog-v2\"\n      closeButtonTestID=\"delete-records-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"delete-records-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"destructive\"\n            size=\"small\"\n            type=\"button\"\n            disabled={!count || isLoading}\n            isLoading={isLoading}\n            onClick={handleDelete}\n            data-testid=\"delete-records-submit-v2\"\n          >\n            {submitLabel}\n          </Button>\n        </>\n      }\n    >\n      <div style={styles.body}>\n        <div style={styles.itemsListHeader}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {selectedLabel}\n          </Text>\n        </div>\n\n        {count > 0 && (\n          <div style={styles.itemsListWrapper}>\n            <div\n              ref={itemsListRef}\n              style={{\n                ...styles.itemsList,\n                paddingBottom: hasItemsOverflow ? FADE_GRADIENT_HEIGHT : 0\n              }}\n            >\n              {records.map((record) => {\n                const subtitle = getRecordSubtitle(record)\n                const titleText = record.data?.title ?? ''\n                return (\n                  <div key={record.id} style={styles.itemRow}>\n                    <RecordItemIcon record={record} size={32} />\n                    <div style={styles.itemText}>\n                      <Text>{titleText}</Text>\n                      {subtitle ? (\n                        <Text\n                          variant=\"caption\"\n                          color={theme.colors.colorTextSecondary}\n                        >\n                          {subtitle}\n                        </Text>\n                      ) : null}\n                    </div>\n                  </div>\n                )\n              })}\n            </div>\n            {hasItemsOverflow ? (\n              <div style={styles.fadeGradient} aria-hidden=\"true\" />\n            ) : null}\n          </div>\n        )}\n\n        <div style={styles.confirmText}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {confirmText}\n          </Text>\n        </div>\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/DeleteRecordsModalContentV2/index.ts",
    "content": "export { DeleteRecordsModalContentV2 } from './DeleteRecordsModalContentV2'\n"
  },
  {
    "path": "src/containers/Modal/DeleteVaultModalContent/DeviceList.tsx",
    "content": "import React, { useMemo } from 'react'\n\nimport { html } from 'htm/react'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport {\n  CheckIcon,\n  ComputerIcon,\n  PhoneIcon\n} from '../../../lib-react-components'\nimport { CheckIconWrapper, DeviceItem, DevicesList } from './styles'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { Device } from './types'\n\nexport const DeviceList = ({\n  devices = [],\n  value,\n  readOnly = false,\n  onChange,\n  currentDeviceId,\n}: {\n  devices: Device[]\n  value: string[]\n  readOnly?: boolean\n  onChange?: (next: string[]) => void\n  currentDeviceId?: string\n}) => {\n  const { t } = useTranslation()\n  const selected = useMemo(() => new Set(value ?? []), [value])\n\n  const toggle = (deviceKey: string) => {\n    if (readOnly) {\n      return\n    }\n    if (currentDeviceId && deviceKey === currentDeviceId) {\n      return\n    }\n\n    const next = new Set(selected)\n    if (next.has(deviceKey)) next.delete(deviceKey)\n    else next.add(deviceKey)\n\n    if (currentDeviceId) next.add(currentDeviceId)\n\n    onChange?.(Array.from(next))\n  }\n\n  const renderDeviceIcon = (device: Device, isSelected: boolean, isCurrentDevice: boolean) => {\n    // @TODO: there is no way to tell if the device is mobile, so we are hardcoding it to false for now.\n    const isMobile = false;\n    const BaseIcon = isMobile ? PhoneIcon : ComputerIcon\n\n    if (readOnly) {\n      return html`<${BaseIcon} width=\"20\" height=\"20\" />`\n    }\n\n    if (isCurrentDevice || isSelected) {\n      const tickColor = isCurrentDevice\n        ? colors.grey100.mode1\n        : colors.black.mode1\n      return html`\n        <${CheckIconWrapper} $isCurrentDevice=${isCurrentDevice}>\n          <${CheckIcon} size=\"20\" color=${tickColor} />\n        <//>\n      `\n    }\n\n    return html`<${BaseIcon} width=\"20\" height=\"20\" />`\n  }\n\n  return html`\n    <${DevicesList} role=\"list\">\n      ${devices.map((device) => {\n        const { id, name } = device\n        const isCurrentDevice = id === currentDeviceId\n        const isSelected = selected.has(id) || isCurrentDevice\n        const label = isCurrentDevice ? t('This device') : name\n\n        return html`\n          <${DeviceItem}\n            key=${id}\n            role=\"checkbox\"\n            aria-checked=${isSelected}\n            aria-disabled=${readOnly || isCurrentDevice}\n            isSelected=${isSelected}\n            isDisabled=${readOnly || isCurrentDevice}\n            onClick=${readOnly ? undefined : () => toggle(id)}\n          >\n            ${renderDeviceIcon(device, isSelected, isCurrentDevice)}\n            <div>${label}</div>\n          <//>\n        `\n      })}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/DeleteVaultModalContent/__tests__/DeleteVaultModalContent.test.tsx",
    "content": "import React from 'react'\nimport '@testing-library/jest-dom'\n\nimport { render, screen, fireEvent, waitFor } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { DeleteVaultModalContent } from '../index'\nimport { ModalProvider } from '../../../../context/ModalContext'\nimport { LoadingProvider } from '../../../../context/LoadingContext'\n\nlet mockProtectedFlag = false\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  get PROTECTED_VAULT_ENABLED() {\n    return mockProtectedFlag\n  }\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({ i18n: { _: (s: string) => s } })\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => {\n  const actual = jest.requireActual<typeof import('@tetherto/pearpass-lib-vault')>('@tetherto/pearpass-lib-vault')\n\n  const mockLogIn = jest.fn()\n  const mockAuthorise = jest.fn()\n\n  return {\n    ...actual,\n    useVault: () => ({\n      data: {\n        id: 'vault-1',\n        devices: [\n          { id: 'd1', name: 'Device 1', createdAt: Date.now(), vaultId: 'v1' },\n          { id: 'd2', name: 'Device 2', createdAt: Date.now(), vaultId: 'v1' }\n        ]\n      },\n      refetch: jest.fn(),\n      isVaultProtected: jest.fn<() => Promise<boolean>>().mockResolvedValue(true)\n    }),\n    useUserData: () => ({\n      logIn: mockLogIn\n    }),\n    authoriseCurrentProtectedVault: mockAuthorise,\n    __testMocks: { mockLogIn, mockAuthorise }\n  }\n})\n\nconst { __testMocks } = require('@tetherto/pearpass-lib-vault')\nconst { mockLogIn, mockAuthorise } = __testMocks\n\njest.mock('../../../../utils/getDeviceName', () => ({\n  getDeviceName: () => 'Device 1'\n}))\n\n// Basic render helper\nconst renderWithProviders = (ui: React.ReactElement) =>\n  render(\n    <ThemeProvider>\n      <LoadingProvider>\n        <ModalProvider>{ui}</ModalProvider>\n      </LoadingProvider>\n    </ThemeProvider>\n  )\n\ndescribe('DeleteVaultModalContent', () => {\n  beforeEach(() => {\n    mockProtectedFlag = false\n    mockLogIn.mockReset()\n    mockAuthorise.mockReset()\n  })\n\n  test('renders delete flow copy by default (unprotected flag)', async () => {\n    mockProtectedFlag = false\n\n    renderWithProviders(<DeleteVaultModalContent vaultId=\"vault-1\" />)\n\n    expect(\n      screen.getByText('Are you sure you want to delete this vault?')\n    ).toBeInTheDocument()\n    expect(\n      screen.getByText('Select additional devices to delete the vault from')\n    ).toBeInTheDocument()\n  })\n\n  test('submits delete flow when PROTECTED_VAULT_ENABLED is false (master password only)', async () => {\n    mockProtectedFlag = false\n    mockLogIn.mockResolvedValueOnce(undefined)\n    mockAuthorise.mockResolvedValueOnce(undefined)\n\n    renderWithProviders(<DeleteVaultModalContent vaultId=\"vault-1\" />)\n\n    // Step 1: go to confirm step\n    fireEvent.click(screen.getByText('Continue'))\n\n    // Only masterPassword is validated when flag is false\n    fireEvent.change(screen.getByPlaceholderText('Insert master password'), {\n      target: { value: 'master-secret' }\n    })\n\n    // Submit\n    fireEvent.click(screen.getByText('Delete vault'))\n\n    await waitFor(() => {\n      expect(mockLogIn).toHaveBeenCalledTimes(1)\n      expect(mockAuthorise).not.toHaveBeenCalled()\n    })\n  })\n\n  test('submits delete flow when PROTECTED_VAULT_ENABLED is true (master + vault passwords)', async () => {\n    mockProtectedFlag = true\n    mockLogIn.mockResolvedValueOnce(undefined)\n    mockAuthorise.mockResolvedValueOnce(undefined)\n\n    renderWithProviders(<DeleteVaultModalContent vaultId=\"vault-1\" />)\n\n    // Step 1: go to confirm step\n    fireEvent.click(screen.getByText('Continue'))\n\n    // Wait for the vault password field to appear (protected vault flow)\n    await waitFor(() =>\n      expect(\n        screen.getByPlaceholderText('Insert vault password')\n      ).toBeInTheDocument()\n    )\n\n    // Fill in vault & master passwords\n    fireEvent.change(screen.getByPlaceholderText('Insert vault password'), {\n      target: { value: 'vault-secret' }\n    })\n    fireEvent.change(screen.getByPlaceholderText('Insert master password'), {\n      target: { value: 'master-secret' }\n    })\n\n    // Submit\n    fireEvent.click(screen.getByText('Delete vault'))\n\n    await waitFor(() => {\n      expect(mockLogIn).toHaveBeenCalledTimes(1)\n      expect(mockAuthorise).toHaveBeenCalledTimes(1)\n    })\n  })\n})\n\n"
  },
  {
    "path": "src/containers/Modal/DeleteVaultModalContent/__tests__/DeviceList.test.tsx",
    "content": "import React from 'react'\nimport '@testing-library/jest-dom'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { DeviceList } from '../DeviceList'\nimport { Device } from '../types'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({ i18n: { _: (s: string) => s } })\n}))\n\nconst renderWithTheme = (ui: React.ReactElement) =>\n  render(<ThemeProvider>{ui}</ThemeProvider>)\n\nconst devices: Device[] = [\n  {\n    id: 'current-id',\n    name: 'Current device name',\n    createdAt: Date.now(),\n    vaultId: 'vault-1'\n  },\n  {\n    id: 'other-id',\n    name: 'Other device',\n    createdAt: Date.now(),\n    vaultId: 'vault-1'\n  }\n]\n\ndescribe('DeviceList', () => {\n  test('renders current device label as \"This device\" and keeps it selected', () => {\n    const onChange = jest.fn()\n\n    renderWithTheme(\n      <DeviceList\n        devices={devices}\n        value={['current-id']}\n        currentDeviceId=\"current-id\"\n        onChange={onChange}\n      />\n    )\n\n    expect(screen.getByText('This device')).toBeInTheDocument()\n    expect(screen.getByText('Other device')).toBeInTheDocument()\n\n    // Clicking current device should not toggle selection or call onChange\n    fireEvent.click(screen.getByText('This device'))\n    expect(onChange).not.toHaveBeenCalled()\n  })\n\n  test('toggles selection for non-current devices and always includes current device in payload', () => {\n    const onChange = jest.fn()\n\n    renderWithTheme(\n      <DeviceList\n        devices={devices}\n        value={['current-id']}\n        currentDeviceId=\"current-id\"\n        onChange={onChange}\n      />\n    )\n\n    // Click on other device to select it\n    fireEvent.click(screen.getByText('Other device'))\n\n    expect(onChange).toHaveBeenCalledTimes(1)\n    const [nextSelection] = onChange.mock.calls[0] as [string[]]\n\n    expect(nextSelection.sort()).toEqual(['current-id', 'other-id'].sort())\n  })\n\n  test('read-only mode uses original device icons and disables interaction', () => {\n    const onChange = jest.fn()\n\n    renderWithTheme(\n      <DeviceList\n        devices={devices}\n        value={['current-id', 'other-id']}\n        currentDeviceId=\"current-id\"\n        readOnly\n        onChange={onChange}\n      />\n    )\n\n    // Items are rendered as checkboxes but disabled\n    const items = screen.getAllByRole('checkbox')\n    items.forEach((item) => {\n      expect(item).toHaveAttribute('aria-disabled', 'true')\n    })\n\n    // Clicks should not fire onChange in read-only mode\n    fireEvent.click(screen.getByText('Other device'))\n    expect(onChange).not.toHaveBeenCalled()\n  })\n})\n\n"
  },
  {
    "path": "src/containers/Modal/DeleteVaultModalContent/index.tsx",
    "content": "import { useEffect, useMemo, useState } from 'react'\n\nimport { html } from 'htm/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  authoriseCurrentProtectedVault,\n  useUserData,\n  useVault\n} from '@tetherto/pearpass-lib-vault'\n\nimport { DeviceList } from './DeviceList'\nimport {\n  Content,\n  DeleteVaultButton,\n  InputWrapper,\n  ModalActions,\n  ModalTitle,\n  ModalHeaderWrapper,\n  Wrapper,\n  ModalDescription\n} from './styles'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  ButtonPrimary,\n  ButtonSecondary,\n  DeleteIcon,\n  PearPassPasswordFieldV2\n} from '../../../lib-react-components'\nimport { getDeviceName } from '../../../utils/getDeviceName'\nimport { logger } from '../../../utils/logger'\nimport { ModalContent } from '../ModalContent'\nimport { clearBuffer, stringToBuffer } from '@tetherto/pearpass-lib-vault/src/utils/buffer'\nimport {PROTECTED_VAULT_ENABLED} from '@tetherto/pearpass-lib-constants'\nimport { FlowType, Device, DeleteVaultModalContentProps } from './types'\n\nexport const DeleteVaultModalContent = ({\n  vaultId,\n  flowType = FlowType.DELETE\n}: DeleteVaultModalContentProps) => {\n  const isKickOutFlow = flowType === FlowType.KICK_OUT\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { setIsLoading } = useLoadingContext()\n  const [isProtected, setIsProtected] = useState(false || PROTECTED_VAULT_ENABLED)\n  const [isConfirmStep, setIsConfirmStep] = useState<boolean>(false)\n  const [selectedDeviceIds, setSelectedDeviceIds] = useState<string[]>([])\n  const {\n    data: vaultData,\n    refetch: refetchVault,\n    isVaultProtected\n  } = useVault()\n  const { logIn } = useUserData()\n  \n  useEffect(() => {\n    if (PROTECTED_VAULT_ENABLED) {\n    const checkProtection = async () => {\n      const isProtectedVault = await isVaultProtected(vaultId)\n      setIsProtected(isProtectedVault)\n    }\n    checkProtection()\n   }\n  }, [vaultId, PROTECTED_VAULT_ENABLED])\n\n  const currentDeviceName = useMemo(() => getDeviceName(), [])\n  const devices = (vaultData as Record<string, unknown> | undefined)?.devices\n\n  const baseDevices = useMemo<Device[]>(\n    () =>\n      devices && Array.isArray(devices)\n        ? (devices as Device[])\n        : [],\n    [devices]\n  )\n\n  const devicesWithCurrent = useMemo<Device[]>(() => {\n    const existingCurrent = baseDevices.find(\n      (d) => d?.name === currentDeviceName\n    )\n\n    if (existingCurrent) {\n      // Ensure current device is always shown first in the list.\n      return [\n        existingCurrent,\n        ...baseDevices.filter((device) => device.id !== existingCurrent.id)\n      ]\n    }\n\n    // Current device is not listed in vault devices - prepend manually.\n    const currentDevice = {\n      id: 'current-device',\n      name: currentDeviceName,\n      createdAt: Date.now(),\n      vaultId: vaultId ?? vaultData?.id ?? '',\n    }\n\n    return [currentDevice, ...baseDevices]\n  }, [baseDevices, currentDeviceName, vaultData?.id, vaultId])\n\n  const currentDeviceId = useMemo<string>(() => {\n    const existingCurrent = baseDevices.find(\n      (d) => d?.name === currentDeviceName\n    )\n    return existingCurrent?.id ?? 'current-device'\n  }, [baseDevices, currentDeviceName])\n\n  const getSchema = () =>\n    Validator.object({\n      masterPassword: isConfirmStep\n        ? Validator.string().required(t('Master password is required'))\n        : Validator.string(),\n      vaultPassword:\n        isConfirmStep && isProtected\n          ? Validator.string().required(t('Vault password is required'))\n          : Validator.string()\n    })\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: { masterPassword: '', vaultPassword: '' },\n    validate: (values: { masterPassword: string; vaultPassword: string }) =>\n      getSchema().validate(values)\n  })\n\n  const masterPasswordField = register('masterPassword')\n  const vaultPasswordField = register('vaultPassword')\n\n  useEffect(() => {\n    if (currentDeviceId && !selectedDeviceIds.includes(currentDeviceId)) {\n      setSelectedDeviceIds((prev) =>\n        prev.length ? [currentDeviceId, ...prev] : [currentDeviceId]\n      )\n    }\n  }, [currentDeviceId, selectedDeviceIds])\n\n  const handleOptionChange = (nextSelection: string[]) => {\n    setSelectedDeviceIds(nextSelection)\n  }\n\n  const handleContinue = handleSubmit(() => {\n    setIsConfirmStep(true)\n  })\n\n  const onSubmit = async (values: {\n    masterPassword: string\n    vaultPassword: string\n  }) => {\n    if (!values.masterPassword) {\n      setErrors({\n        masterPassword: t('Master password is required')\n      })\n      return\n    }\n\n    const passwordBuffer = stringToBuffer(values.masterPassword)\n    setIsLoading(true)\n\n    try {\n      await (logIn as unknown as (params: { password: Buffer<ArrayBufferLike> }) => Promise<void>)({\n        password: passwordBuffer\n      })\n    } catch (error) {\n      setErrors({\n        masterPassword: t('Invalid master password')\n      })\n      logger.error('DeleteVaultModalContent', 'Error validating master password:', error)\n      clearBuffer(passwordBuffer)\n      setIsLoading(false)\n      return\n    }\n\n    clearBuffer(passwordBuffer)\n\n    if (isProtected) {\n      if (!values.vaultPassword) {\n        setErrors({\n          vaultPassword: t('Vault password is required')\n        })\n        setIsLoading(false)\n        return\n      }\n\n      try {\n        await authoriseCurrentProtectedVault(values.vaultPassword)\n      } catch (error) {\n        setErrors({\n          vaultPassword: t('Invalid vault password')\n        })\n        logger.error(\n          'DeleteVaultModalContent',\n          'Error validating vault password:',\n          error\n        )\n        setIsLoading(false)\n        return\n      }\n    }\n    // 3. TODO: implement delete / kick-off logic here using selectedDeviceIds.\n    setIsLoading(false)\n    // closeModal()\n  }\n\n  useEffect(() => {\n    refetchVault()\n  }, [])\n\n  return html` <${ModalContent}\n    onClose=${closeModal}\n    headerChildren=${html`\n      <${ModalHeaderWrapper}>\n        <${ModalTitle}>\n          ${isKickOutFlow\n            ? ''\n            : t('Are you sure you want to delete this vault?')}\n        <//>\n        <${ModalDescription}>\n          ${isKickOutFlow\n            ? ''\n            : isConfirmStep\n              ? html`\n                  ${t(\n                    'Confirm with your passwords to permanently delete this vault from the devices below.'\n                  )}\n                `\n              : html`\n                  ${t('This will permanently delete all items in this vault. ')}\n                  <br />\n                  ${t('This action cannot be undone.')}\n                `}\n        <//>\n      <//>\n    `}\n  >\n    <${Wrapper}>\n      <${Content}>\n        ${!isConfirmStep\n          ? html`\n              <${ModalDescription} marginBottom=${15}>\n                ${isKickOutFlow\n                  ? ''\n                  : t('Select additional devices to delete the vault from')}\n              <//>\n              <${DeviceList}\n                devices=${devicesWithCurrent}\n                value=${selectedDeviceIds}\n                currentDeviceId=${currentDeviceId}\n                onChange=${handleOptionChange}\n              />\n            `\n          : html`\n              <${DeviceList}\n                devices=${devicesWithCurrent.filter((d) =>\n                  selectedDeviceIds.includes(d.id)\n                )}\n                value=${selectedDeviceIds}\n                readOnly=${true}\n                currentDeviceId=${currentDeviceId}\n              />\n\n              <${InputWrapper}>\n                <${PearPassPasswordFieldV2}\n                  placeholder=${t('Insert master password')}\n                  isDisabled=${false}\n                  ...${masterPasswordField}\n                />\n                ${isProtected &&\n                html`\n                  <${PearPassPasswordFieldV2}\n                    placeholder=${t('Insert vault password')}\n                    isDisabled=${false}\n                    ...${vaultPasswordField}\n                  />\n                `}\n              <//>\n            `}\n\n        <${ModalActions}>\n          ${!isConfirmStep\n            ? html`\n                <${ButtonPrimary} onClick=${handleContinue}>\n                  ${t('Continue')}\n                <//>\n                <${ButtonSecondary} onClick=${closeModal}> ${t('Cancel')} <//>\n              `\n            : html`\n                <${DeleteVaultButton} onClick=${handleSubmit(onSubmit)}>\n                  <${DeleteIcon} size=\"20\" /> ${isKickOutFlow\n                    ? t('')\n                    : t('Delete vault')}\n                <//>\n                <${ButtonSecondary} onClick=${() => setIsConfirmStep(false)}>\n                  ${t('Back')}\n                <//>\n              `}\n        <//>\n      <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/DeleteVaultModalContent/styles.ts",
    "content": "import styled from 'styled-components'\n\nexport const ModalHeaderWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  margin-bottom: 10px;\n`\nexport const ModalTitle = styled.h2`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: left;\n  font-family: Inter;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n  margin-bottom: 10px;\n`\nexport const ModalDescription = styled.p.withConfig({\n  shouldForwardProp: (prop) => prop !== 'marginBottom'\n})<{\n  marginBottom?: number\n}>`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: left;\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n  margin-bottom: ${({ marginBottom }) => marginBottom ?? 0}px;\n`\nexport const Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n`\n\nexport const Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 25;\n  width: 100%;\n`\nexport const InputWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: 100%;\n  margin-bottom: 25px;\n`\nexport const InputLabel = styled.label`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\nexport const ModalActions = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 10px;\n  align-items: center;\n  width: 100%;\n  button {\n    flex: 1;\n  }\n  & > button:last-child {\n    border: none;\n  }\n`\n\nexport const DevicesList = styled.div.withConfig({\n  shouldForwardProp: (prop) => prop !== 'isConfirmStep'\n})<{\n  isConfirmStep?: boolean\n}>`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: 100%;\n  margin-bottom: 25px;\n`\n\nexport const DeviceItem = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isSelected', 'isDisabled'].includes(prop)\n})<{\n  isSelected?: boolean\n  isDisabled?: boolean\n}>`\n  display: flex;\n  align-items: center;\n  padding: 10px;\n  width: 100%;\n  background-color: ${({ theme, isSelected }) =>\n    isSelected ? theme.colors.grey350.mode1 : theme.colors.grey400.mode1};\n  border-radius: 10px;\n  color: ${({ theme }) => theme.colors.white.mode1} !important;\n  gap: 10px;\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n  cursor: ${({ isDisabled }) => (isDisabled ? 'not-allowed' : 'pointer')};\n  opacity: ${({ isDisabled }) => (isDisabled ? 0.7 : 1)};\n  border: 1px solid\n    ${({ theme, isSelected, isDisabled }) =>\n      isSelected && !isDisabled\n        ? theme.colors.primary400.mode1\n        : 'transparent'};\n\n  &:hover {\n    border-color: ${({ theme, isDisabled }) =>\n      isDisabled ? 'transparent' : theme.colors.primary400.mode1};\n  }\n`\n\nexport const CheckIconWrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => prop !== '$isCurrentDevice'\n})<{\n  $isCurrentDevice?: boolean\n}>`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 20px;\n  height: 20px;\n  border-radius: 8px;\n  background-color: ${({ theme, $isCurrentDevice }) =>\n    $isCurrentDevice\n      ? theme.colors.grey300.mode1\n      : theme.colors.primary400.mode1};\n`\n\nexport const DeleteVaultButton = styled.button`\n  box-sizing: border-box;\n  background: ${({ theme }) => theme.colors.errorRed.mode1};\n  color: ${({ theme }) => theme.colors.white.mode1};\n  padding: 10px 15px;\n  border: none;\n  cursor: pointer;\n  border-radius: 10px;\n  font-size: 14px;\n  font-family: 'Inter';\n  font-weight: 600;\n  line-height: 17px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n\n  & svg path {\n    fill: ${({ theme }) => theme.colors.white.mode1};\n  }\n\n  &:hover {\n    background: ${({ theme }) => theme.colors.errorRed.mode1};\n  }\n\n  &:active {\n    background: ${({ theme }) => theme.colors.errorRed.mode1};\n  }\n`\n"
  },
  {
    "path": "src/containers/Modal/DeleteVaultModalContent/types.ts",
    "content": "enum FlowType {\n  DELETE = 'delete',\n  KICK_OUT = 'kickOut'\n}\n\ntype DeleteVaultModalContentProps = {\n  vaultId?: string\n  flowType?: FlowType\n}\n\ninterface Device {\n  id: string\n  name: string\n  createdAt: number\n  vaultId: string\n}\n\nexport { FlowType }\nexport type { Device, DeleteVaultModalContentProps }\n"
  },
  {
    "path": "src/containers/Modal/DisplayPictureModalContent/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { useModal } from '../../../context/ModalContext'\nimport { ModalContent } from '../ModalContent'\nimport { Content, HeaderContainer, Name } from './styles'\n\nexport const DisplayPictureModalContent = ({ url, name }) => {\n  const { closeModal } = useModal()\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      headerChildren=${html`\n        <${HeaderContainer}>\n          <${Name}>${name}<//>\n        <//>\n      `}\n    >\n      <${Content}>\n        <img src=${url} alt=${name} />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/DisplayPictureModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Content = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  border-radius: 10px;\n  overflow: hidden;\n\n  img {\n    max-width: 100%;\n    max-height: 447px;\n    object-fit: contain;\n    border-radius: 10px;\n  }\n`\n\nexport const HeaderContainer = styled.div`\n  display: flex;\n  align-items: center;\n  flex: 1;\n  justify-content: space-between;\n  flex-shrink: 0;\n  width: 100%;\n`\n\nexport const Name = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const ShareIconWrapper = styled.div`\n  margin-left: auto;\n  display: flex;\n  padding: 2.5px;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n  border-radius: 50%;\n  background: ${({ theme }) => theme.colors.black.dark};\n  flex-shrink: 0;\n`\n"
  },
  {
    "path": "src/containers/Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  body: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    width: '100%',\n    borderRadius: `${rawTokens.radius8}px`,\n    overflow: 'hidden' as const\n  },\n  image: {\n    maxWidth: '100%',\n    maxHeight: '600px',\n    objectFit: 'contain' as const,\n    borderRadius: `${rawTokens.radius8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport { Button, Dialog } from '@tetherto/pearpass-lib-ui-kit'\nimport { Download } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './DisplayPictureModalContentV2.styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\nexport interface DisplayPictureModalContentV2Props {\n  url: string\n  name: string\n}\n\nexport const DisplayPictureModalContentV2 = ({\n  url,\n  name\n}: DisplayPictureModalContentV2Props) => {\n  const { t } = useTranslation()\n  const styles = createStyles()\n  const { closeModal } = useModal()\n\n  const handleDownload = () => {\n    const a = document.createElement('a')\n    a.href = url\n    a.download = name\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n  }\n\n  return (\n    <Dialog\n      title={name}\n      onClose={closeModal}\n      testID=\"displaypicture-dialog-v2\"\n      closeButtonTestID=\"displaypicture-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"displaypicture-discard-v2\"\n          >\n            {t('Close')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={handleDownload}\n            iconBefore={<Download width={16} height={16} />}\n            data-testid=\"displaypicture-download-v2\"\n          >\n            {t('Download')}\n          </Button>\n        </>\n      }\n    >\n      <div style={styles.body}>\n        <img src={url} alt={name} style={styles.image} />\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/ExtensionPairingModalContent/ExtensionPairingModalContentV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing16}px`\n  },\n  instructionsBox: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    padding: `${rawTokens.spacing16}px`,\n    backgroundColor: colors.colorSurfaceHover,\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.radius8}px`\n  },\n  instructionRow: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`,\n    flexWrap: 'wrap' as const\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/ExtensionPairingModalContent/ExtensionPairingModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport {\n  Button,\n  Dialog,\n  InputField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  ContentCopy,\n  Extension,\n  PearpassLogo\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './ExtensionPairingModalContentV2.styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\ntype ExtensionPairingModalContentV2Props = {\n  onCopy: () => void\n  pairingToken: string | null\n  loadingPairing: boolean\n}\n\nexport const ExtensionPairingModalContentV2 = ({\n  onCopy,\n  pairingToken,\n  loadingPairing\n}: ExtensionPairingModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  return (\n    <Dialog\n      title={t('Pair Code for Browser Extension')}\n      onClose={closeModal}\n      testID=\"extension-pairing-dialog-v2\"\n      closeButtonTestID=\"extension-pairing-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"extension-pairing-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={onCopy}\n            disabled={!pairingToken || loadingPairing}\n            iconBefore={<ContentCopy width={16} height={16} />}\n            data-testid=\"extension-pairing-copy-v2\"\n          >\n            {t('Copy Code')}\n          </Button>\n        </>\n      }\n    >\n      <div style={styles.body}>\n        <InputField\n          label={t('Pair Code')}\n          value={loadingPairing ? '' : (pairingToken ?? '')}\n          readOnly\n          copyable\n          onCopy={onCopy}\n          disabled={loadingPairing}\n          testID=\"extension-pairing-token-v2\"\n        />\n\n        <div style={styles.instructionsBox}>\n          <Text as=\"p\" variant=\"label\">\n            {t('1. Open your browser')}\n          </Text>\n          <div style={styles.instructionRow}>\n            <Text as=\"span\" variant=\"label\">\n              {t('2. Click the')}\n            </Text>\n            <Extension\n              width={16}\n              height={16}\n              color={theme.colors.colorPrimary}\n            />\n            <Text as=\"span\" variant=\"label\">\n              {t('icon in the toolbar')}\n            </Text>\n          </div>\n          <div style={styles.instructionRow}>\n            <Text as=\"span\" variant=\"label\">\n              {t('3. Find and click')}\n            </Text>\n            <PearpassLogo\n              width={16}\n              height={16}\n              color={theme.colors.colorPrimary}\n            />\n            {/* @ts-ignore */}\n            <Text as=\"span\" variant=\"label\" color={theme.colors.colorPrimary}>\n              {t('PearPass')}\n            </Text>\n            <Text as=\"span\" variant=\"label\">\n              {t('in the extensions list')}\n            </Text>\n          </div>\n          <Text as=\"p\" variant=\"label\">\n            {t('4. If prompted, pin the extension')}\n          </Text>\n          <Text as=\"p\" variant=\"label\">\n            {t('5. Paste this pairing code and confirm')}\n          </Text>\n        </div>\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/ExtensionPairingModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport {\n  ModalActions,\n  ModalContainer,\n  ModalContent,\n  ModalDescription,\n  ModalHeader,\n  ModalTitle\n} from './styles'\nimport { AlertBox } from '../../../components/AlertBox'\nimport {\n  ListItemContainer,\n  ListItemDate,\n  ListItemDescription,\n  ListItemInfo,\n  ListItemName\n} from '../../../components/ListItem/styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { ButtonSecondary } from '../../../lib-react-components'\nimport { Description } from '../../../pages/SettingsView/ExportTab/styles'\n\nexport const ExtensionPairingModalContent = ({\n  onCopy,\n  pairingToken,\n  loadingPairing,\n  copyFeedback,\n  tokenCreationDate,\n  fingerprint\n}) => {\n  const { i18n } = useLingui()\n  const { closeModal } = useModal()\n\n  const formatCreationDate = (isoDate) => {\n    if (!isoDate) return ''\n    try {\n      const date = new Date(isoDate)\n      return i18n._('Created on {date} at {time}', {\n        date: date.toLocaleDateString(),\n        time: date.toLocaleTimeString()\n      })\n    } catch {\n      return ''\n    }\n  }\n\n  return html`\n    <${ModalContainer}>\n      <${ModalHeader}>\n        <${ModalTitle}> ${i18n._('Extension Pairing')} <//>\n        <${ModalDescription}>\n          ${i18n._(\n            'Click below to copy the pairing token to your clipboard, then paste it in your browser extension to establish secure communication.'\n          )}\n        <//>\n      <//>\n      <${ModalContent}>\n        <${ListItemContainer}\n          onClick=${onCopy}\n          style=${{\n            cursor: pairingToken && !loadingPairing ? 'pointer' : 'default',\n            transition: 'background-color 0.2s',\n            borderRadius: '8px'\n          }}\n          onMouseEnter=${(e) => {\n            if (pairingToken && !loadingPairing) {\n              e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.05)'\n            }\n          }}\n          onMouseLeave=${(e) => {\n            e.currentTarget.style.backgroundColor = 'transparent'\n          }}\n        >\n          <${ListItemInfo}>\n            <${ListItemDescription}>\n              <${ListItemName}\n                style=${{\n                  fontFamily: 'monospace',\n                  fontSize: '16px',\n                  fontWeight: 'bold'\n                }}\n                >${loadingPairing\n                  ? i18n._('Loading...')\n                  : pairingToken || i18n._('Unavailable')}<//\n              >\n              <${ListItemDate}\n                >${copyFeedback || formatCreationDate(tokenCreationDate)}<//\n              >\n            <//>\n          <//>\n        <//>\n\n        <${AlertBox}\n          message=${i18n._(\n            'Security Note: Only enter this token in the official PearPass browser extension. Never share it with anyone or enter it on websites.'\n          )}\n        />\n        <${Description}\n          style=${{\n            display: 'block',\n            marginTop: '8px',\n            fontSize: '12px',\n            color: '#666'\n          }}\n        >\n          ${i18n._('Fingerprint (for verification): ')}${loadingPairing\n            ? ''\n            : fingerprint\n              ? fingerprint.slice(0, 16) + '...'\n              : ''}\n        <//>\n      <//>\n      <${ModalActions}>\n        <${ButtonSecondary} onClick=${closeModal}> ${i18n._('Close')} <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/ExtensionPairingModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ModalContainer = styled.div`\n  position: relative;\n  display: flex;\n  width: 480px;\n  padding: 20px;\n  flex-direction: column;\n  justify-content: center;\n  align-items: flex-start;\n  gap: 15px;\n\n  border-radius: 20px;\n  border: 1px ${({ theme }) => theme.colors.grey300.mode1};\n  background: ${({ theme }) => theme.colors.grey500.mode1};\n  box-shadow: 5px 5px 10px 0 rgba(0, 0, 0, 0.25);\n`\n\nexport const ModalHeader = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  align-self: stretch;\n`\n\nexport const ModalTitle = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n`\n\nexport const ModalDescription = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const ModalContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n  align-self: stretch;\n`\n\nexport const ModalActions = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: flex-start;\n  gap: 25px;\n  align-self: stretch;\n`\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordModalContentV2/GeneratePasswordModalContentV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%'\n  },\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n  groupedCard: {\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.spacing8}px`,\n    overflow: 'hidden' as const,\n    backgroundColor: colors.colorSurfacePrimary\n  },\n  generatedPasswordBlock: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    gap: `${rawTokens.spacing16}px`,\n    padding: `${rawTokens.spacing24}px ${rawTokens.spacing12}px`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    textAlign: 'center' as const,\n    wordBreak: 'break-all' as const\n  },\n  optionRow: {\n    padding: `${rawTokens.spacing12}px`,\n    cursor: 'pointer' as const\n  },\n  optionRowDivider: {\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`\n  },\n  singleRowCard: {\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.spacing8}px`,\n    backgroundColor: colors.colorSurfacePrimary,\n    padding: `${rawTokens.spacing20}px ${rawTokens.spacing12}px`\n  },\n  sliderRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n  sliderLabel: {\n    width: 72,\n    flexShrink: 0\n  },\n  slider: {\n    flex: 1,\n    minWidth: 0\n  },\n  settingRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'space-between' as const,\n    gap: `${rawTokens.spacing12}px`,\n    padding: `${rawTokens.spacing12}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordModalContentV2/GeneratePasswordModalContentV2.tsx",
    "content": "import React, { useMemo, useState } from 'react'\n\nimport {\n  checkPassphraseStrength,\n  checkPasswordStrength\n} from '@tetherto/pearpass-utils-password-check'\nimport { PassType } from '../../../shared/types'\nimport {\n  generatePassphrase,\n  generatePassword\n} from '@tetherto/pearpass-utils-password-generator'\nimport {\n  Button,\n  Dialog,\n  PasswordIndicator,\n  Radio,\n  Slider,\n  Text,\n  Title,\n  ToggleSwitch,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport type { PasswordIndicatorVariant } from '@tetherto/pearpass-lib-ui-kit'\nimport { ContentCopy } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './GeneratePasswordModalContentV2.styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n// @ts-ignore - JS module without type declarations\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\n\nconst PASSWORD_OPTIONS = {\n  password: 'password',\n  passphrase: 'passphrase'\n} as const\n\ntype PasswordOption = (typeof PASSWORD_OPTIONS)[keyof typeof PASSWORD_OPTIONS]\n\ntype PasswordRules = {\n  specialCharacters: boolean\n  characters: number\n}\n\ntype PassphraseRules = {\n  capitalLetters: boolean\n  symbols: boolean\n  numbers: boolean\n  words: number\n}\n\nconst STRENGTH_TO_INDICATOR: Record<string, PasswordIndicatorVariant> = {\n  vulnerable: 'vulnerable',\n  weak: 'decent',\n  safe: 'strong'\n}\n\nexport type GeneratePasswordModalContentV2Props = {\n  onPasswordInsert?: (pass: string, type: PassType) => void\n}\n\nconst renderHighlightedPassword = (\n  text: string,\n  primaryColor: string,\n  secondaryColor: string\n) => {\n  const parts = text.split(/(\\d+|[^a-zA-Z\\d\\s])/g)\n\n  return parts.map((part, index) => {\n    if (!part) return null\n\n    if (/^\\d+$/.test(part)) {\n      return (\n        <span key={`${part}-${index}`} style={{ color: primaryColor }}>\n          {part}\n        </span>\n      )\n    }\n\n    if (/[^a-zA-Z\\d\\s]/.test(part)) {\n      return (\n        <span key={`${part}-${index}`} style={{ color: secondaryColor }}>\n          {part}\n        </span>\n      )\n    }\n\n    return <span key={`${part}-${index}`}>{part}</span>\n  })\n}\n\nexport const GeneratePasswordModalContentV2 = ({\n  onPasswordInsert\n}: GeneratePasswordModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { setToast } = useToast()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  const { copyToClipboard } = useCopyToClipboard({\n    onCopy: () => setToast({ message: t('Copied to clipboard') })\n  })\n\n  const [selectedOption, setSelectedOption] = useState<PasswordOption>(\n    PASSWORD_OPTIONS.password\n  )\n  const [selectedRules, setSelectedRules] = useState<{\n    password: PasswordRules\n    passphrase: PassphraseRules\n  }>({\n    password: { specialCharacters: true, characters: 8 },\n    passphrase: {\n      capitalLetters: true,\n      symbols: true,\n      numbers: true,\n      words: 8\n    }\n  })\n\n  const generatedValue = useMemo(() => {\n    if (selectedOption === PASSWORD_OPTIONS.passphrase) {\n      return (\n        generatePassphrase(\n          selectedRules.passphrase.capitalLetters,\n          selectedRules.passphrase.symbols,\n          selectedRules.passphrase.numbers,\n          selectedRules.passphrase.words\n        ) as string[]\n      ).join('-')\n    }\n\n    return generatePassword(selectedRules.password.characters, {\n      includeSpecialChars: selectedRules.password.specialCharacters,\n      lowerCase: true,\n      upperCase: true,\n      numbers: true\n    }) as string\n  }, [selectedOption, selectedRules])\n\n  const strength = useMemo(() => {\n    if (selectedOption === PASSWORD_OPTIONS.passphrase) {\n      return checkPassphraseStrength(generatedValue.split('-'))\n    }\n    return checkPasswordStrength(generatedValue)\n  }, [generatedValue, selectedOption])\n\n  const indicatorVariant: PasswordIndicatorVariant =\n    STRENGTH_TO_INDICATOR[(strength as { type: string }).type] ?? 'vulnerable'\n\n  const isAllPassphraseRulesSelected =\n    selectedRules.passphrase.capitalLetters &&\n    selectedRules.passphrase.symbols &&\n    selectedRules.passphrase.numbers\n\n  const handlePasswordRuleChange = (\n    key: keyof PasswordRules,\n    value: boolean | number\n  ) => {\n    setSelectedRules((prev) => ({\n      ...prev,\n      password: { ...prev.password, [key]: value }\n    }))\n  }\n\n  const handlePassphraseRuleChange = (\n    key: keyof PassphraseRules,\n    value: boolean | number\n  ) => {\n    setSelectedRules((prev) => ({\n      ...prev,\n      passphrase: { ...prev.passphrase, [key]: value }\n    }))\n  }\n\n  const handlePassphraseToggle = (rule: 'all' | keyof PassphraseRules) => {\n    if (rule === 'all') {\n      const nextValue = !isAllPassphraseRulesSelected\n      setSelectedRules((prev) => ({\n        ...prev,\n        passphrase: {\n          ...prev.passphrase,\n          capitalLetters: nextValue,\n          symbols: nextValue,\n          numbers: nextValue\n        }\n      }))\n      return\n    }\n    handlePassphraseRuleChange(rule, !selectedRules.passphrase[rule])\n  }\n\n  const handlePrimaryAction = () => {\n    if (onPasswordInsert) {\n      onPasswordInsert(\n        generatedValue,\n        selectedOption === PASSWORD_OPTIONS.passphrase\n          ? PassType.PassPhrase\n          : PassType.Password\n      )\n      closeModal()\n      return\n    }\n    copyToClipboard(generatedValue)\n    closeModal()\n  }\n\n  const passphraseRules: {\n    key: 'all' | keyof PassphraseRules\n    label: string\n    value: boolean\n  }[] = [\n    { key: 'all', label: t('Select all'), value: isAllPassphraseRulesSelected },\n    {\n      key: 'capitalLetters',\n      label: t('Capital letters'),\n      value: selectedRules.passphrase.capitalLetters\n    },\n    {\n      key: 'symbols',\n      label: t('Symbols'),\n      value: selectedRules.passphrase.symbols\n    },\n    {\n      key: 'numbers',\n      label: t('Numbers'),\n      value: selectedRules.passphrase.numbers\n    }\n  ]\n\n  return (\n    <Dialog\n      title={t('New Password Item')}\n      onClose={closeModal}\n      testID='generatepassword-dialog-v2'\n      closeButtonTestID='generatepassword-close-v2'\n      footer={\n        <>\n          <Button\n            variant='secondary'\n            size='small'\n            type='button'\n            onClick={closeModal}\n            data-testid='generatepassword-button-discard-v2'\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant='primary'\n            size='small'\n            type='button'\n            iconBefore={\n              onPasswordInsert ? undefined : (\n                <ContentCopy width={16} height={16} />\n              )\n            }\n            onClick={handlePrimaryAction}\n            data-testid='generatepassword-button-primary-v2'\n          >\n            {onPasswordInsert ? t('Use Password') : t('Copy Password')}\n          </Button>\n        </>\n      }\n    >\n      <div style={styles.body}>\n        <div style={styles.section}>\n          <Text variant='caption' color={theme.colors.colorTextSecondary}>\n            {t('Generated Password')}\n          </Text>\n\n          <div style={styles.groupedCard}>\n            <div style={styles.generatedPasswordBlock}>\n              <Title as='h3'>\n                {renderHighlightedPassword(\n                  generatedValue,\n                  theme.colors.colorPrimary,\n                  theme.colors.colorTextSecondary\n                )}\n              </Title>\n              <PasswordIndicator variant={indicatorVariant} />\n            </div>\n\n            {[\n              {\n                key: PASSWORD_OPTIONS.passphrase,\n                label: t('Memorable Password'),\n                description: t(\n                  'Memorable password using random words, numbers, and symbols.'\n                )\n              },\n              {\n                key: PASSWORD_OPTIONS.password,\n                label: t('Random Characters'),\n                description: t(\n                  'A fully random mix of letters, numbers, and symbols.'\n                )\n              }\n            ].map((option, index, options) => (\n              <div\n                key={option.key}\n                onClick={() => setSelectedOption(option.key)}\n                style={{\n                  ...styles.optionRow,\n                  ...(index < options.length - 1 ? styles.optionRowDivider : {})\n                }}\n              >\n                <Radio\n                  builtIn\n                  options={[\n                    {\n                      value: option.key,\n                      label: option.label,\n                      description: option.description\n                    }\n                  ]}\n                  value={selectedOption === option.key ? option.key : undefined}\n                  onChange={() => setSelectedOption(option.key)}\n                />\n              </div>\n            ))}\n          </div>\n        </div>\n\n        <div style={styles.section}>\n          <Text variant='caption' color={theme.colors.colorTextSecondary}>\n            {t('Password Length')}\n          </Text>\n\n          <div style={styles.singleRowCard}>\n            <div style={styles.sliderRow}>\n              <div style={styles.sliderLabel}>\n                <Text variant='bodyEmphasized'>\n                  {selectedOption === PASSWORD_OPTIONS.passphrase\n                    ? `${selectedRules.passphrase.words} ${t('Words')}`\n                    : `${selectedRules.password.characters} ${t('Chars')}`}\n                </Text>\n              </div>\n\n              <div style={styles.slider}>\n                <Slider\n                  minimumValue={\n                    selectedOption === PASSWORD_OPTIONS.passphrase ? 6 : 4\n                  }\n                  maximumValue={\n                    selectedOption === PASSWORD_OPTIONS.passphrase ? 36 : 32\n                  }\n                  step={1}\n                  value={\n                    selectedOption === PASSWORD_OPTIONS.passphrase\n                      ? selectedRules.passphrase.words\n                      : selectedRules.password.characters\n                  }\n                  onValueChange={(value: number) => {\n                    if (selectedOption === PASSWORD_OPTIONS.passphrase) {\n                      handlePassphraseRuleChange('words', value)\n                      return\n                    }\n                    handlePasswordRuleChange('characters', value)\n                  }}\n                />\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <div style={styles.section}>\n          <Text variant='caption' color={theme.colors.colorTextSecondary}>\n            {t('Password settings')}\n          </Text>\n\n          <div style={styles.groupedCard}>\n            {selectedOption === PASSWORD_OPTIONS.passphrase ? (\n              passphraseRules.map((rule, index, rules) => (\n                <div\n                  key={rule.key}\n                  style={{\n                    ...styles.settingRow,\n                    ...(index < rules.length - 1 ? styles.optionRowDivider : {})\n                  }}\n                >\n                  <Text variant='bodyEmphasized'>{rule.label}</Text>\n                  <ToggleSwitch\n                    checked={rule.value}\n                    onChange={() => handlePassphraseToggle(rule.key)}\n                    aria-label={rule.label}\n                  />\n                </div>\n              ))\n            ) : (\n              <div style={styles.settingRow}>\n                <Text variant='bodyEmphasized'>\n                  {t('Special character (!&*)')}\n                </Text>\n                <ToggleSwitch\n                  checked={selectedRules.password.specialCharacters}\n                  onChange={() =>\n                    handlePasswordRuleChange(\n                      'specialCharacters',\n                      !selectedRules.password.specialCharacters\n                    )\n                  }\n                  aria-label={t('Special character toggle')}\n                />\n              </div>\n            )}\n          </div>\n        </div>\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordSideDrawerContent/PassphraseChecker/index.js",
    "content": "import { checkPassphraseStrength } from '@tetherto/pearpass-utils-password-check'\nimport { html } from 'htm/react'\n\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { HighlightString, NoticeText } from '../../../../lib-react-components'\nimport { PasswordWrapper } from '../styles'\n\n/**\n * @param {{\n *  pass: Array<string>\n *  rules: {\n *   capitalLetters: boolean,\n *   symbols: boolean,\n *   numbers: boolean,\n *   words: number\n *  }\n * }} props\n */\nexport const PassphraseChecker = ({ pass }) => {\n  const { t } = useTranslation()\n\n  const { strengthText, strengthType } = checkPassphraseStrength(pass)\n\n  return html` <${PasswordWrapper}>\n    <${HighlightString}\n      testId=${`passphrasecheck-text-${pass}`}\n      text=${pass && pass.join('-')}\n    />\n    <${NoticeText}\n      testId=${`passphrasecheck-strength-${strengthType}`}\n      text=${t(strengthText)}\n      type=${strengthType}\n    />\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordSideDrawerContent/PassphraseGenerator/index..js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { Slider } from '../../../../lib-react-components'\nimport { RuleSelector } from '../RuleSelector'\nimport {\n  SliderContainer,\n  SliderLabel,\n  SliderWrapper,\n  SwitchWrapper\n} from '../styles'\n\n/**\n * @param {{\n *  onRuleChange: (optionName: string, value: any) => void\n *  rules: {\n *   capitalLetters: boolean,\n *   symbols: boolean,\n *   numbers: boolean,\n *   words: number\n *  }\n * }} props\n */\nexport const PassphraseGenerator = ({ onRuleChange, rules }) => {\n  const { i18n } = useLingui()\n\n  const ruleOptions = [\n    { name: 'all', label: i18n._('Select All') },\n    { name: 'capitalLetters', label: i18n._('Capital Letters') },\n    { name: 'symbols', label: i18n._('Symbols') },\n    { name: 'numbers', label: i18n._('Numbers') }\n  ]\n\n  const handleRuleChange = (newRules) => {\n    onRuleChange('passphrase', { ...rules, ...newRules })\n  }\n\n  const handleSliderValueChange = (value) => {\n    onRuleChange('passphrase', { ...rules, words: value })\n  }\n\n  const selectableRules = { ...rules }\n  delete selectableRules.words\n\n  return html`\n    <${SliderWrapper}>\n      <${SliderLabel}> ${rules.words} ${' '} ${i18n._('words')} <//>\n\n      <${SliderContainer}>\n        <${Slider}\n          value=${rules.words}\n          onChange=${handleSliderValueChange}\n          min=${6}\n          max=${36}\n          step=${1}\n        />\n      <//>\n    <//>\n\n    <${SwitchWrapper}>\n      <${RuleSelector}\n        rules=${ruleOptions}\n        selectedRules=${selectableRules}\n        setRules=${handleRuleChange}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordSideDrawerContent/PasswordChecker/index.js",
    "content": "import { checkPasswordStrength } from '@tetherto/pearpass-utils-password-check'\nimport { html } from 'htm/react'\n\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { HighlightString, NoticeText } from '../../../../lib-react-components'\nimport { PasswordWrapper } from '../styles'\n/**\n * @param {{\n *  pass: string\n *  rules: {\n *    specialCharacters: boolean,\n *    characters: number\n *  }\n * }} props\n */\nexport const PasswordChecker = ({ pass }) => {\n  const { t } = useTranslation()\n\n  const { strengthText, strengthType } = checkPasswordStrength(pass)\n\n  return html` <${PasswordWrapper}>\n    <${HighlightString} testId=${`passwordcheck-text-${pass}`} text=${pass} />\n    <${NoticeText}\n      testId=${`passwordcheck-strength-${strengthType}`}\n      text=${t(strengthText)}\n      type=${strengthType}\n    />\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordSideDrawerContent/PasswordGenerator/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { Slider } from '../../../../lib-react-components'\nimport { RuleSelector } from '../RuleSelector'\nimport {\n  SliderContainer,\n  SliderLabel,\n  SliderWrapper,\n  SwitchWrapper\n} from '../styles'\n\n/**\n * @param {{\n *  onRuleChange: (optionName: string, value: any) => void\n *  rules: {\n *   specialCharacters: boolean,\n *   characters: number\n *  }\n * }} props\n */\nexport const PasswordGenerator = ({ onRuleChange, rules }) => {\n  const { i18n } = useLingui()\n\n  const ruleOptions = [\n    { name: 'specialCharacters', label: i18n._('Special character') + ' (!&*)' }\n  ]\n\n  const handleRuleChange = (newRules) => {\n    onRuleChange('password', { ...rules, ...newRules })\n  }\n\n  const handleSliderValueChange = (value) => {\n    onRuleChange('password', { ...rules, characters: value })\n  }\n\n  const selectableRules = { ...rules }\n  delete selectableRules.characters\n\n  return html`\n    <${SliderWrapper} data-testid=\"passwordgenerator-characterslider-container\">\n      <${SliderLabel}> ${rules.characters} ${' '} ${i18n._('characters')} <//>\n\n      <${SliderContainer}>\n        <${Slider}\n          testId=${`passwordgenerator-characterSlider-${rules.characters}`}\n          value=${rules.characters}\n          onChange=${handleSliderValueChange}\n          min=${4}\n          max=${32}\n          step=${1}\n        />\n      <//>\n    <//>\n\n    <${SwitchWrapper}>\n      <${RuleSelector}\n        rules=${ruleOptions}\n        selectedRules=${selectableRules}\n        setRules=${handleRuleChange}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordSideDrawerContent/RuleSelector/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { SwitchWithLabel } from '../../../../components/SwitchWithLabel'\n\n/**\n * @param {{\n *  rules: Array<{\n *  label: string,\n *  name: string\n *  }>\n *  setRules: () => void,\n *  selectedRules: Record<string, boolean>,\n *  isSwitchFirst?: boolean,\n *  stretch?: boolean\n * }} props\n */\nexport const RuleSelector = ({\n  rules,\n  selectedRules,\n  setRules,\n  isSwitchFirst = false,\n  stretch = true\n}) => {\n  const isAllRuleSelected = Object.values(selectedRules).every(\n    (value) => value === true\n  )\n\n  const handleSwitchToggle = (ruleName) => {\n    const updatedRules = { ...selectedRules }\n\n    if (ruleName === 'all') {\n      Object.keys(updatedRules).forEach((rule) => {\n        updatedRules[rule] = !isAllRuleSelected\n      })\n    } else {\n      updatedRules[ruleName] = !updatedRules[ruleName]\n    }\n\n    setRules(updatedRules)\n  }\n\n  return html`${rules.map(\n    (rule) =>\n      html`<${SwitchWithLabel}\n        label=${rule.label}\n        description=${rule.description}\n        isSwitchFirst=${isSwitchFirst}\n        isOn=${selectedRules[rule.name] || isAllRuleSelected}\n        onChange=${() => handleSwitchToggle(rule.name)}\n        isLabelBold\n        stretch=${stretch}\n        testId=${rule.testId || `ruleselector-switchwithlabel-${rule.name}`}\n      />`\n  )} `\n}\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordSideDrawerContent/index.js",
    "content": "import { useMemo, useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport {\n  generatePassphrase,\n  generatePassword\n} from '@tetherto/pearpass-utils-password-generator'\nimport { html } from 'htm/react'\n\nimport { RadioSelect } from '../../../components/RadioSelect'\nimport { useModal } from '../../../context/ModalContext'\nimport { ModalHeader } from '../ModalHeader'\nimport { PassphraseChecker } from './PassphraseChecker'\nimport { PassphraseGenerator } from './PassphraseGenerator/index.'\nimport { PasswordChecker } from './PasswordChecker'\nimport { PasswordGenerator } from './PasswordGenerator'\nimport { HeaderButtonWrapper, RadioWrapper, Wrapper } from './styles'\nimport { useToast } from '../../../context/ToastContext'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { ButtonLittle, CopyIcon } from '../../../lib-react-components'\n\n/**\n * @param {{\n * onPasswordInsert: (pass: string) => void\n * }} props\n */\nexport const GeneratePasswordSideDrawerContent = ({ onPasswordInsert }) => {\n  const { i18n } = useLingui()\n  const { closeModal } = useModal()\n  const { setToast } = useToast()\n  const { copyToClipboard } = useCopyToClipboard({\n    onCopy: () => {\n      setToast({\n        message: i18n._('Copied to clipboard'),\n        icon: CopyIcon\n      })\n    }\n  })\n\n  const [selectedOption, setSelectedOption] = useState('password')\n  const [selectedRules, setSelectedRules] = useState({\n    password: {\n      specialCharacters: true,\n      characters: 8\n    },\n    passphrase: {\n      capitalLetters: true,\n      symbols: true,\n      numbers: true,\n      words: 8\n    }\n  })\n\n  const pass = useMemo(() => {\n    if (selectedOption === 'passphrase') {\n      return generatePassphrase(\n        selectedRules.passphrase.capitalLetters,\n        selectedRules.passphrase.symbols,\n        selectedRules.passphrase.numbers,\n        selectedRules.passphrase.words\n      )\n    }\n    return generatePassword(selectedRules.password.characters, {\n      includeSpecialChars: selectedRules.password.specialCharacters,\n      lowerCase: true,\n      upperCase: true,\n      numbers: true\n    })\n  }, [selectedOption, selectedRules])\n\n  const radioOptions = [\n    { label: i18n._('Password'), value: 'password' },\n    { label: i18n._('Passphrase'), value: 'passphrase' }\n  ]\n\n  const handleRuleChange = (optionName, value) => {\n    setSelectedRules((prevRules) => ({\n      ...prevRules,\n      [optionName]: value\n    }))\n  }\n\n  const handleCopyAndClose = () => {\n    const copyText = selectedOption === 'passphrase' ? pass.join('-') : pass\n\n    copyToClipboard(copyText)\n    closeModal()\n  }\n\n  const handleInsertPassword = () => {\n    const passText = selectedOption === 'passphrase' ? pass.join('-') : pass\n    onPasswordInsert(passText)\n    closeModal()\n  }\n\n  return html`\n    <${Wrapper}>\n      <${ModalHeader} onClose=${closeModal}>\n        <${HeaderButtonWrapper}>\n          ${onPasswordInsert\n            ? html`<${ButtonLittle}\n                testId=\"passwordGenerator-button-insertpassword\"\n                onClick=${handleInsertPassword}\n              >\n                ${i18n._('Insert password')}\n              <//> `\n            : html`<${ButtonLittle}\n                testId=\"passwordGenerator-button-copyandclose\"\n                onClick=${handleCopyAndClose}\n              >\n                ${i18n._('Copy and close')}\n              <//> `}\n        <//>\n      <//>\n\n      ${selectedOption === 'passphrase'\n        ? html` <${PassphraseChecker} pass=${pass} />`\n        : html` <${PasswordChecker} pass=${pass} />`}\n\n      <${RadioWrapper}>\n        <${RadioSelect}\n          title=${i18n._('Type')}\n          options=${radioOptions}\n          selectedOption=${selectedOption}\n          onChange=${setSelectedOption}\n        />\n      <//>\n\n      ${selectedOption === 'passphrase'\n        ? html` <${PassphraseGenerator}\n            onRuleChange=${handleRuleChange}\n            rules=${selectedRules.passphrase}\n          />`\n        : html`<${PasswordGenerator}\n            onRuleChange=${handleRuleChange}\n            rules=${selectedRules.password}\n          />`}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/GeneratePasswordSideDrawerContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  width: 100%;\n  height: 100%;\n  overflow-y: auto;\n  padding: 20px;\n`\n\nexport const HeaderChildrenWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n`\n\nexport const CloseIconWrapper = styled.div`\n  margin-left: auto;\n  display: flex;\n  padding: 2.5px;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n  border-radius: 50%;\n  background: ${({ theme }) => theme.colors.black.dark};\n  flex-shrink: 0;\n`\n\nexport const HeaderButtonWrapper = styled.div`\n  display: flex;\n  justify-content: flex-end;\n`\n\nexport const PasswordWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  margin-top: 42px;\n  min-height: 20px;\n  gap: 8px;\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 400;\n  text-align: center;\n\n  & > div > div {\n    font-size: 10px;\n  }\n`\n\nexport const RadioWrapper = styled.div`\n  margin-top: 32px;\n`\n\nexport const SliderWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-top: 10px;\n  padding: 10px 0;\n  border-top: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  border-bottom: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n`\n\nexport const SliderContainer = styled.div`\n  width: 240px;\n`\n\nexport const SliderLabel = styled.div`\n  flex: 1;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 400;\n`\n\nexport const SwitchWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  margin-top: 9px;\n  gap: 9px;\n`\n"
  },
  {
    "path": "src/containers/Modal/ImportItemOrVaultModalContentV2/ImportItemOrVaultModalContentV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  divider: {\n    width: '100%',\n    height: 1,\n    backgroundColor: colors.colorBorderPrimary,\n    flexShrink: 0,\n    border: 'none',\n    padding: 0,\n    margin: 0\n  },\n  bodyColumn: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    width: '100%',\n    alignItems: 'stretch' as const\n  },\n  inputSection: {\n    marginTop: rawTokens.spacing12,\n    boxSizing: 'border-box' as const,\n  },\n  sectionLabel: {\n    color: colors.colorTextSecondary,\n    fontFamily: rawTokens.fontPrimary,\n    fontSize: rawTokens.fontSize12,\n    fontWeight: rawTokens.weightMedium,\n    marginBottom: rawTokens.spacing8\n  },\n  pairingHint:{\n    marginTop: rawTokens.spacing12,\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/ImportItemOrVaultModalContentV2/index.tsx",
    "content": "import os from 'os'\nimport type { ChangeEvent } from 'react'\nimport React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport { Button, Dialog, InputField, useTheme, Text } from '@tetherto/pearpass-lib-ui-kit'\nimport { ContentPaste } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useVault, usePair } from '@tetherto/pearpass-lib-vault'\nimport { useModal } from '../../../context/ModalContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useAutoLockPreferences } from '../../../hooks/useAutoLockPreferences'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { createStyles } from './ImportItemOrVaultModalContentV2.styles'\nimport { ImportVaultPreviewModalContent } from '../ImportVaultPreviewModalContent'\n\nexport const ImportItemOrVaultModalContentV2 = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { colors } = theme\n  const { setToast } = useToast()\n  const { closeModal, setModal } = useModal()\n\n  const [shareLink, setShareLink] = useState('')\n  const { refetch: refetchVault, addDevice } = useVault()\n  const {\n    pairActiveVault,\n    isLoading: isPairing,\n    cancelPairActiveVault\n  } = usePair()\n  const { setShouldBypassAutoLock } = useAutoLockPreferences()\n  const shareLinkInputRef = useRef<HTMLInputElement | null>(null)\n\n  useEffect(() => {\n    setShouldBypassAutoLock(true)\n    return () => setShouldBypassAutoLock(false)\n  }, [setShouldBypassAutoLock])\n\n  useGlobalLoading({ isLoading: isPairing })\n\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === 'Escape' && isPairing) {\n        cancelPairActiveVault()\n      }\n    }\n\n    window.addEventListener('keydown', handleKeyDown)\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown)\n    }\n  }, [cancelPairActiveVault, isPairing])\n\n  const handleLoadVault = useCallback(\n    async (code: string) => {\n      try {\n        const vaultId = await pairActiveVault(code)\n\n        if (!vaultId) {\n          throw new Error('Vault ID is empty')\n        }\n\n        await refetchVault(vaultId)\n\n        await addDevice(\n          os.hostname() + ' ' + os.platform() + ' ' + os.release()\n        )\n\n        setModal(<ImportVaultPreviewModalContent />, {\n          replace: true\n        })\n      } catch {\n        setShareLink('')\n        setToast({\n          message: t('Something went wrong, please check invite code')\n        })\n      }\n    },\n    [pairActiveVault, refetchVault, addDevice, setModal, setToast, t]\n  )\n\n  const handleChange = (value: string) => {\n    if (isPairing) {\n      return\n    }\n    setShareLink(value)\n  }\n\n  const processPastedText = useCallback(\n    (pastedText: string) => {\n      const text = (pastedText ?? '').trim()\n      if (!text) {\n        return\n      }\n      setShareLink(text)\n      setTimeout(() => {\n        if (!isPairing) {\n          void handleLoadVault(text)\n        }\n      }, 0)\n    },\n    [isPairing, handleLoadVault]\n  )\n\n  const handlePaste = useCallback(\n    (e: ClipboardEvent) => {\n      const pastedText = e.clipboardData?.getData('text')\n      processPastedText(pastedText ?? '')\n    },\n    [processPastedText]\n  )\n\n  useLayoutEffect(() => {\n    const el = shareLinkInputRef.current\n    if (!el) {\n      return\n    }\n    const listener = (event: Event) => {\n      handlePaste(event as ClipboardEvent)\n    }\n    el.addEventListener('paste', listener)\n    return () => {\n      el.removeEventListener('paste', listener)\n    }\n  }, [handlePaste])\n\n  const handlePasteClick = async () => {\n    try {\n      const pastedText = await navigator.clipboard.readText()\n      processPastedText(pastedText)\n    } catch {\n      setToast({\n        message: t('Failed to paste from clipboard')\n      })\n    }\n  }\n\n  const handleContinue = () => {\n    const trimmed = shareLink.trim()\n    if (!trimmed || isPairing) {\n      return\n    }\n    void handleLoadVault(trimmed)\n  }\n\n  const styles = createStyles(colors)\n\n  const canContinue = Boolean(shareLink.trim()) && !isPairing\n\n  return (\n    <Dialog\n      title={t('Import Vault')}\n      onClose={closeModal}\n      testID=\"import-vault-dialog-v2\"\n      closeButtonTestID=\"import-vault-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            data-testid=\"import-modal-discard\"\n            onClick={closeModal}\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            data-testid=\"import-modal-continue\"\n            disabled={!canContinue}\n            onClick={handleContinue}\n          >\n            {t('Continue')}\n          </Button>\n        </>\n      }\n    >\n      <div style={styles.bodyColumn}>\n          <Text variant=\"caption\" color={colors.colorTextSecondary}>{t('Share Link')}</Text>\n        <div style={styles.inputSection}>\n          <InputField\n            label={t('Vault Link')}\n            placeholder={t('Enter Share Link')}\n            inputRef={shareLinkInputRef}\n            onChange={(e: ChangeEvent<HTMLInputElement>) =>\n              handleChange(e.target.value)\n            }\n            value={shareLink}\n            testID=\"import-share-link-input\"\n            rightSlot={\n              <Button\n                variant=\"tertiary\"\n                size=\"small\"\n                aria-label={t('Paste from clipboard')}\n                data-testid=\"import-share-link-paste\"\n                onClick={handlePasteClick}\n                iconBefore={\n                  <ContentPaste\n                    width={18}\n                    height={18}\n                    color={colors.colorTextPrimary}\n                  />\n                }\n              />\n            }\n          />\n        </div>\n        {isPairing && (\n          <div style={styles.pairingHint}>\n            <Text variant=\"caption\" color={colors.colorTextSecondary}>\n              {t('Click Escape to cancel pairing')}\n            </Text>\n          </div>\n        )}\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/ImportVaultPreviewModalContent/ImportVaultPreviewModalContent.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  bodyColumn: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    width: '100%',\n    alignItems: 'stretch' as const,\n    flex: '1 1 auto' as const,\n    minHeight: 0\n  },\n  vaultPanel: {\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    borderRadius: rawTokens.radius8,\n    backgroundColor: colors.colorSurfacePrimary,\n    overflow: 'hidden' as const,\n    boxSizing: 'border-box' as const,\n    marginTop: `${rawTokens.spacing12}px`,\n  },\n  lockBadge: {\n    width: 32,\n    height: 32,\n    borderRadius: rawTokens.radius8,\n    backgroundColor: colors.colorSurfaceHover,\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    flexShrink: 0\n  },\n  recordsScroll: {\n    maxHeight: 280,\n    overflowY: 'auto' as const,\n    boxSizing: 'border-box' as const\n  },\n  recordsListWrapper: {\n    margin: rawTokens.spacing12,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    borderRadius: rawTokens.radius8,\n    boxSizing: 'border-box' as const\n  },\n  chevronWrap: {\n    display: 'inline-flex' as const,\n    transition: 'transform 0.15s ease'\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/ImportVaultPreviewModalContent/index.tsx",
    "content": "import { useCallback, useMemo, useState } from 'react'\n\nimport { generateAvatarInitials } from '@tetherto/pear-apps-utils-avatar-initials'\nimport { useRecords, useVault } from '@tetherto/pearpass-lib-vault'\nimport { Button, Dialog, ListItem, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { ExpandMore, LockOutlined } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { RecordAvatar } from '../../../components/RecordAvatar'\nimport { RECORD_COLOR_BY_TYPE } from '../../../constants/recordColorByType'\nimport { createStyles } from './ImportVaultPreviewModalContent.styles'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { VaultRecord } from '../../../shared/types'\n\nfunction loginWebsiteUrl(record: VaultRecord): string {\n  if (record.type !== 'login') {\n    return ''\n  }\n  const first = record.data?.websites?.[0]\n  if (typeof first === 'string') {\n    return first\n  }\n  if (first && typeof first === 'object' && typeof first.website === 'string') {\n    return first.website\n  }\n  return ''\n}\n\nfunction getRecordSubtitle(record: VaultRecord): string | undefined {\n  const d = record.data\n  if (!d) {\n    return undefined\n  }\n  if (record.type === 'login') {\n    if (typeof d.username === 'string' && d.username) {\n      return d.username\n    }\n    if (typeof d.email === 'string' && d.email) {\n      return d.email\n    }\n    const url = loginWebsiteUrl(record)\n    if (url) {\n      return url\n    }\n  }\n  return undefined\n}\n\nexport const ImportVaultPreviewModalContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { colors } = theme\n  const { closeModal } = useModal()\n  const { navigate } = useRouter()\n  const { data: vaultData } = useVault()\n  const [isVaultExpanded, setIsVaultExpanded] = useState(true)\n\n  const { data: records, isLoading } = useRecords({\n    shouldSkip: false,\n    variables: {\n      filters: {\n        searchPattern: '',\n        type: '',\n        folder: '',\n        isFavorite: false\n      },\n      sort: { key: 'updatedAt', direction: 'desc' }\n    }\n  })\n\n  useGlobalLoading({ isLoading })\n\n  const styles = createStyles(colors)\n\n  const recordList = useMemo(\n    () => (Array.isArray(records) ? records : []),\n    [records]\n  )\n\n  const hasRecords = recordList.length > 0\n\n  const vaultSubtitle = useMemo(() => {\n    const n = recordList.length\n    return `${n} ${t('Items')}`\n  }, [recordList.length, t])\n\n  const handleContinue = useCallback(() => {\n    navigate('vault', { recordType: 'all' })\n    closeModal()\n  }, [navigate, closeModal])\n\n  const vaultName = vaultData?.name ?? vaultData?.id ?? t('Vault')\n\n  const lockIcon = (\n    <div style={styles.lockBadge}>\n      <span\n        style={{\n          display: 'inline-flex',\n          filter: `drop-shadow(0 0 3px ${colors.colorPrimary}99)`\n        }}\n      >\n        <LockOutlined width={18} height={18} color={colors.colorPrimary} />\n      </span>\n    </div>\n  )\n\n  const chevron = (\n    <div\n      style={{\n        ...styles.chevronWrap,\n        transform: isVaultExpanded ? 'rotate(180deg)' : 'rotate(0deg)'\n      }}\n    >\n      <ExpandMore width={16} height={16} color={colors.colorTextPrimary} />\n    </div>\n  )\n\n  const recordsInner = recordList.map((record) => {\n    const recordType = record.type as keyof typeof RECORD_COLOR_BY_TYPE\n    const avatarColor =\n      RECORD_COLOR_BY_TYPE[recordType] ?? RECORD_COLOR_BY_TYPE.custom\n    const domain = loginWebsiteUrl(record)\n\n    return (\n      <ListItem\n        key={record.id}\n        icon={\n          <RecordAvatar\n            websiteDomain={domain}\n            initials={generateAvatarInitials(record.data?.title)}\n            size=\"md\"\n            isSelected={false}\n            isFavorite={!!record.isFavorite}\n            color={avatarColor}\n            testId={`import-vault-preview-avatar-${record.id}`}\n          />\n        }\n        title={record.data?.title ?? record.type}\n        subtitle={getRecordSubtitle(record)}\n        showDivider={false}\n        testID={`import-vault-preview-record-${record.id}`}\n      />\n    )\n  })\n\n  const recordsBody = (\n    <div style={styles.recordsListWrapper}>{recordsInner}</div>\n  )\n\n  return (\n    <Dialog\n      title={t('Import Vault')}\n      onClose={closeModal}\n      testID=\"import-vault-preview-dialog-v2\"\n      closeButtonTestID=\"import-vault-preview-close-v2\"\n      footer={\n        <Button\n          variant=\"primary\"\n          size=\"small\"\n          type=\"button\"\n          data-testid=\"import-vault-preview-continue\"\n          onClick={handleContinue}\n        >\n          {t('Continue')}\n        </Button>\n      }\n    >\n      <div style={styles.bodyColumn}>\n        <div>\n          <Text variant=\"caption\" color={colors.colorTextSecondary}>{t('Vault Found')}</Text>\n          <div style={styles.vaultPanel}>\n            <ListItem\n              icon={lockIcon}\n              title={vaultName}\n              subtitle={vaultSubtitle}\n              rightElement={hasRecords ? chevron : undefined}\n              onClick={\n                hasRecords ? () => setIsVaultExpanded((v) => !v) : undefined\n              }\n              testID=\"import-vault-preview-toggle\"\n            />\n            {hasRecords && isVaultExpanded && (\n              <div style={styles.recordsScroll}>{recordsBody}</div>\n            )}\n          </div>\n        </div>\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/ModalContent/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Wrapper } from './styles'\nimport { ModalHeader } from '../ModalHeader'\n\n/**\n * @param {{\n *  onClose: () => void\n *  headerChildren: import('react').ReactNode\n *  children: import('react').ReactNode\n *  onSubmit?: () => void\n *  showCloseButton?: boolean\n *  borderColor?: string\n *  borderRadius?: string\n *  closeButtonDataId?: string\n * }} props\n */\nexport const ModalContent = ({\n  onClose,\n  onSubmit,\n  headerChildren,\n  children,\n  showCloseButton = true,\n  borderColor,\n  borderRadius,\n  closeButtonDataId\n}) => html`\n  <${Wrapper} $borderColor=${borderColor} $borderRadius=${borderRadius}>\n    <${onSubmit ? 'form' : 'div'}\n      onSubmit=${(e) => {\n        e.preventDefault()\n        onSubmit?.()\n      }}\n    >\n      <${ModalHeader}\n        onClose=${onClose}\n        showCloseButton=${showCloseButton}\n        closeButtonDataId=${closeButtonDataId}\n      >\n        ${headerChildren}\n      <//>\n\n      <div>${children}</div>\n    <//>\n  <//>\n`\n"
  },
  {
    "path": "src/containers/Modal/ModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  width: 640px;\n  max-height: 85vh;\n  overflow-y: auto;\n  padding: 20px;\n  border-radius: ${({ $borderRadius }) => $borderRadius ?? '10px'};\n  border: 1px solid\n    ${({ theme, $borderColor }) => $borderColor ?? theme.colors.grey300.dark};\n  background: ${({ theme }) => theme.colors.grey500.dark};\n  box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n  position: relative;\n`\n"
  },
  {
    "path": "src/containers/Modal/ModalHeader/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Header, HeaderChildrenWrapper } from './styles'\nimport { ButtonRoundIcon, XIcon } from '../../../lib-react-components'\n\n/**\n * @param {{\n *  onClose: () => void\n *  children: import('react').ReactNode\n *  showCloseButton?: boolean\n *  closeButtonDataId?: string\n * }} props\n */\nexport const ModalHeader = ({\n  onClose,\n  children,\n  showCloseButton = true,\n  closeButtonDataId\n}) => html`\n  <${Header}>\n    <${HeaderChildrenWrapper}> ${children} <//>\n\n    ${showCloseButton &&\n    html`<${ButtonRoundIcon}\n      onClick=${onClose}\n      startIcon=${XIcon}\n      testId=\"modalheader-button-close\"\n      dataId=${closeButtonDataId}\n    />`}\n  <//>\n`\n"
  },
  {
    "path": "src/containers/Modal/ModalHeader/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Header = styled.div`\n  display: flex;\n  align-items: center;\n  margin-bottom: 15px;\n  gap: 10px;\n`\n\nexport const HeaderChildrenWrapper = styled.div`\n  flex: 1;\n`\n\nexport const CloseIconWrapper = styled.div`\n  margin-left: auto;\n  display: flex;\n  padding: 4px;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n  border-radius: 50%;\n  background: ${({ theme }) => theme.colors.black.dark};\n  flex-shrink: 0;\n`\n"
  },
  {
    "path": "src/containers/Modal/ModifyMasterVaultModalContent/index.js",
    "content": "import { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\nimport {\n  stringToBuffer,\n  clearBuffer\n} from '@tetherto/pearpass-lib-vault/src/utils/buffer'\nimport { validatePasswordChange } from '@tetherto/pearpass-utils-password-check'\nimport { html } from 'htm/react'\n\nimport {\n  Content,\n  InputLabel,\n  InputWrapper,\n  ModalActions,\n  ModalTitle\n} from './styles'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation.js'\nimport {\n  ButtonPrimary,\n  ButtonSecondary,\n  PearPassPasswordField\n} from '../../../lib-react-components'\nimport { logger } from '../../../utils/logger'\nimport { ModalContent } from '../ModalContent'\n\nexport const ModifyMasterVaultModalContent = () => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n\n  const { updateMasterPassword } = useUserData()\n\n  const { setIsLoading } = useLoadingContext()\n\n  const errors = {\n    minLength: t(`Password must be at least 8 characters long`),\n    hasLowerCase: t('Password must contain at least one lowercase letter'),\n    hasUpperCase: t('Password must contain at least one uppercase letter'),\n    hasNumbers: t('Password must contain at least one number'),\n    hasSymbols: t('Password must contain at least one special character')\n  }\n\n  const schema = Validator.object({\n    currentPassword: Validator.string().required(t('Invalid password')),\n    newPassword: Validator.string().required(t('Password is required')),\n    repeatPassword: Validator.string().required(t('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors, setValue } = useForm({\n    initialValues: { currentPassword: '', newPassword: '', repeatPassword: '' },\n    validate: (values) => schema.validate(values)\n  })\n\n  const onSubmit = async (values) => {\n    const { currentPassword, newPassword, repeatPassword } = values\n    const result = validatePasswordChange({\n      currentPassword,\n      newPassword,\n      repeatPassword,\n      messages: {\n        newPasswordMustDiffer: t(\n          'New password must be different from the current password'\n        ),\n        passwordsDontMatch: t('Passwords do not match')\n      },\n      config: { errors }\n    })\n\n    if (!result.success) {\n      setErrors({\n        [result.field]: result.error\n      })\n\n      if (result.field === 'newPassword') {\n        setValue('repeatPassword', '')\n      }\n      return\n    }\n\n    const newPasswordBuffer = stringToBuffer(values.newPassword)\n    const currentPasswordBuffer = stringToBuffer(values.currentPassword)\n    try {\n      setIsLoading(true)\n\n      await updateMasterPassword({\n        newPassword: newPasswordBuffer,\n        currentPassword: currentPasswordBuffer\n      })\n\n      setIsLoading(false)\n      closeModal()\n    } catch (error) {\n      setIsLoading(false)\n      logger.error(\n        'ModifyMasterVaultModalContent',\n        'Error updating master password:',\n        error\n      )\n      setErrors({\n        currentPassword: t('Invalid password')\n      })\n    } finally {\n      clearBuffer(newPasswordBuffer)\n      clearBuffer(currentPasswordBuffer)\n    }\n  }\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      headerChildren=${html` <${ModalTitle}>\n        ${t('Update master password')}\n      <//>`}\n    >\n      <${Content}>\n        <${InputWrapper}>\n          <${InputLabel}> ${t('Insert old password')} <//>\n          <${PearPassPasswordField}\n            ...${register('currentPassword')}\n            testId=\"master-password-current-input\"\n          />\n        <//>\n        <${InputWrapper}>\n          <${InputLabel}> ${t('Create new password')} <//>\n          <${PearPassPasswordField}\n            ...${register('newPassword')}\n            testId=\"master-password-new-input\"\n          />\n        <//>\n        <${InputWrapper}>\n          <${InputLabel}> ${t('Repeat new password')} <//>\n          <${PearPassPasswordField}\n            ...${register('repeatPassword')}\n            testId=\"master-password-repeat-input\"\n          />\n        <//>\n        <${ModalActions}>\n          <${ButtonPrimary}\n            testId=\"master-password-save-button\"\n            onClick=${handleSubmit(onSubmit)}\n          >\n            ${t('Save')}\n          <//>\n          <${ButtonSecondary}\n            testId=\"master-password-cancel-button\"\n            onClick=${closeModal}\n          >\n            ${t('Cancel')}\n          <//>\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/ModifyMasterVaultModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ModalContentWrapper = styled.div`\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n  padding: 20px;\n  width: 480px;\n  background-color: ${({ theme }) => theme.colors.grey500.mode1};\n  border-radius: 20px;\n  border: 1px solid ${({ theme }) => theme.colors.grey400.mode1};\n  box-shadow: 5px 5px 10px 0px rgba(0, 0, 0, 0.25);\n  z-index: 10;\n`\n\nexport const ModalHeader = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n`\nexport const ModalTitle = styled.h2`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: Inter;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n`\n\nexport const CloseButton = styled.div`\n  position: absolute;\n  top: 20px;\n  right: 20px;\n  cursor: pointer;\n`\n\nexport const Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  width: 100%;\n`\nexport const InputWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: 100%;\n`\nexport const InputLabel = styled.label`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\nexport const ModalActions = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 25px;\n  align-items: center;\n  width: 100%;\n`\n"
  },
  {
    "path": "src/containers/Modal/ModifyVaultModalContent/index.js",
    "content": "import { useEffect, useState, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { PROTECTED_VAULT_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { useVault } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { RadioSelect } from '../../../components/RadioSelect'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  ButtonPrimary,\n  ButtonSecondary,\n  PearPassInputField,\n  PearPassPasswordField\n} from '../../../lib-react-components'\nimport { logger } from '../../../utils/logger'\nimport { ModalContent } from '../ModalContent'\nimport {\n  Content,\n  InputLabel,\n  InputWrapper,\n  ModalActions,\n  ModalTitle,\n  Wrapper\n} from './styles'\n\nconst UPDATE_MODE = {\n  NAME: 'name',\n  PASSWORD: 'password'\n}\n\nexport const ModifyVaultModalContent = ({ vaultId, vaultName }) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n\n  const {\n    isVaultProtected,\n    updateUnprotectedVault,\n    updateProtectedVault,\n    refetch: refetchVault\n  } = useVault()\n\n  const [isProtected, setIsProtected] = useState(false)\n  const [selectedOption, setSelectedOption] = useState(UPDATE_MODE.NAME)\n  const { setIsLoading } = useLoadingContext()\n\n  const radioOptions = useMemo(\n    () =>\n      PROTECTED_VAULT_ENABLED\n        ? [\n            { label: t('Change Vault Name'), value: UPDATE_MODE.NAME },\n            { label: t('Change Vault Password'), value: UPDATE_MODE.PASSWORD }\n          ]\n        : [],\n    [t, PROTECTED_VAULT_ENABLED]\n  )\n\n  const getInitialValues = (option) => {\n    if (option === UPDATE_MODE.PASSWORD) {\n      return {\n        currentPassword: '',\n        newPassword: '',\n        repeatPassword: ''\n      }\n    } else {\n      return {\n        name: vaultName,\n        currentPassword: ''\n      }\n    }\n  }\n\n  const getSchema = () => {\n    if (selectedOption === UPDATE_MODE.PASSWORD) {\n      return Validator.object({\n        currentPassword: isProtected\n          ? Validator.string().required(t`Current password is required`)\n          : Validator.string(),\n        newPassword: Validator.string().required(t`New password is required`),\n        repeatPassword: Validator.string().required(t`Please repeat password`)\n      })\n    } else {\n      return Validator.object({\n        name: Validator.string().required(t`Name is required`),\n        currentPassword: isProtected\n          ? Validator.string().required(t`Current password is required`)\n          : Validator.string()\n      })\n    }\n  }\n\n  const { register, handleSubmit, setErrors, setValues } = useForm({\n    initialValues: getInitialValues(selectedOption),\n    validate: (values) => getSchema().validate(values)\n  })\n\n  const handleOptionChange = (option) => {\n    setSelectedOption(option)\n    setValues(getInitialValues(option))\n    setErrors({})\n  }\n\n  const onSubmit = async (values) => {\n    if (values.newPassword !== values.repeatPassword) {\n      setErrors({\n        repeatPassword: t('Passwords do not match')\n      })\n\n      return\n    }\n\n    if (isProtected && !values.currentPassword?.length) {\n      setErrors({\n        currentPassword: t('Current password is required')\n      })\n\n      return\n    }\n\n    try {\n      setIsLoading(true)\n\n      const name = selectedOption === UPDATE_MODE.NAME ? values.name : vaultName\n      const password =\n        selectedOption === UPDATE_MODE.PASSWORD ? values.newPassword : undefined\n\n      if (isProtected) {\n        await updateProtectedVault(vaultId, {\n          name,\n          password,\n          currentPassword: values.currentPassword\n        })\n      } else {\n        await updateUnprotectedVault(vaultId, {\n          name,\n          password\n        })\n      }\n\n      setIsLoading(false)\n\n      closeModal()\n    } catch (error) {\n      setIsLoading(false)\n      logger.error('ModifyVaultModalContent', 'Error updating vault:', error)\n      setErrors({\n        currentPassword: t('Invalid password')\n      })\n    }\n  }\n\n  useEffect(() => {\n    const checkProtection = async () => {\n      const result = await isVaultProtected(vaultId)\n      setIsProtected(result)\n    }\n    checkProtection()\n  }, [vaultId])\n\n  useEffect(() => {\n    refetchVault()\n  }, [])\n\n  return html` <${ModalContent}\n    onClose=${closeModal}\n    headerChildren=${html` <${ModalTitle}> ${t('Modify Vault')} <//>`}\n  >\n    <${Wrapper}>\n      <${RadioSelect}\n        options=${radioOptions}\n        selectedOption=${selectedOption}\n        onChange=${handleOptionChange}\n      />\n\n      <${Content}>\n        ${selectedOption === UPDATE_MODE.NAME &&\n        html`\n          <${InputWrapper}>\n            <${InputLabel}> ${t('Insert vault name')} <//>\n            <${PearPassInputField} ...${register('name')} />\n          <//>\n        `}\n        ${isProtected &&\n        PROTECTED_VAULT_ENABLED &&\n        html`\n          <${InputWrapper}>\n            <${InputLabel}> ${t('Insert old password')} <//>\n            <${PearPassPasswordField} ...${register('currentPassword')} />\n          <//>\n        `}\n        ${selectedOption === UPDATE_MODE.PASSWORD &&\n        html`\n          <${InputWrapper}>\n            <${InputLabel}> ${t('Create new password')} <//>\n            <${PearPassPasswordField} ...${register('newPassword')} />\n          <//>\n          <${InputWrapper}>\n            <${InputLabel}> ${t('Repeat new password')} <//>\n            <${PearPassPasswordField} ...${register('repeatPassword')} />\n          <//>\n        `}\n        <${ModalActions}>\n          <${ButtonPrimary} onClick=${handleSubmit(onSubmit)}>\n            ${t('Continue')}\n          <//>\n          <${ButtonSecondary} onClick=${closeModal}> ${t('Cancel')} <//>\n        <//>\n      <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/ModifyVaultModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ModalTitle = styled.h2`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: Inter;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n`\n\nexport const Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n`\n\nexport const Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  width: 100%;\n`\nexport const InputWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: 100%;\n`\nexport const InputLabel = styled.label`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\nexport const ModalActions = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 25px;\n  align-items: center;\n  width: 100%;\n`\n"
  },
  {
    "path": "src/containers/Modal/MoveFolderModalContent/index.js",
    "content": "import React from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useRecords, useFolders } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { FolderList, HeaderWrapper } from './styles'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport {\n  ButtonFolder,\n  ButtonSingleInput,\n  NewFolderIcon\n} from '../../../lib-react-components'\nimport { isV2 } from '../../../utils/designVersion'\nimport { sortByName } from '../../../utils/sortByName'\nimport { CreateFolderModalContent } from '../CreateFolderModalContent'\nimport { CreateFolderModalContentV2 } from '../CreateFolderModalContentV2/CreateFolderModalContentV2'\nimport { ModalContent } from '../ModalContent'\n\n/**\n * @param {{\n *  records: {\n *    id: string\n *    folder?: string\n *  }[]\n *  onCompleted?: () => void\n * }} props\n */\nexport const MoveFolderModalContent = ({ records, onCompleted }) => {\n  const { i18n } = useLingui()\n  const { closeModal, setModal } = useModal()\n\n  const { updateFolder, isLoading: isUpdating } = useRecords({\n    onCompleted: closeModal\n  })\n  const { data: folders, isLoading: isLoadingFolders } = useFolders()\n\n  const isLoading = isUpdating || isLoadingFolders\n\n  useGlobalLoading({ isLoading })\n\n  const filteredFolders = React.useMemo(() => {\n    const excludedFolder = records?.length === 1 ? records[0].folder : null\n    const customFolders = Object.values(folders?.customFolders ?? {})\n\n    return sortByName(\n      customFolders.filter((folder) => folder.name !== excludedFolder)\n    )\n  }, [folders, records])\n\n  const handleMove = async (folderName) => {\n    const recordIds = records.map((record) => record.id)\n    await updateFolder(recordIds, folderName)\n\n    onCompleted?.()\n  }\n\n  const handleCreateClick = () => {\n    isV2()\n      ? setModal(\n          <CreateFolderModalContentV2\n            onClose={closeModal}\n            onCreate={(folderData) => handleMove(folderData.folder)}\n          />\n        )\n      : setModal(html`\n          <${CreateFolderModalContent}\n            onCreate=${(folderData) => handleMove(folderData.folder)}\n          />\n        `)\n  }\n\n  return html`\n    <${React.Fragment}>\n      <${ModalContent}\n        onClose=${closeModal}\n        headerChildren=${html`\n          <${HeaderWrapper}>\n            ${i18n._('Select a folder or create a new folder')}\n          <//>\n        `}\n      >\n        <${FolderList}>\n          ${filteredFolders.map(\n            (folder) => html`\n              <${ButtonFolder}\n                key=${folder.name}\n                onClick=${() => handleMove(folder.name)}\n              >\n                ${folder.name}\n              <//>\n            `\n          )}\n        <//>\n\n        <${ButtonSingleInput}\n          startIcon=${NewFolderIcon}\n          onClick=${() => handleCreateClick()}\n        >\n          ${i18n._('Create new folder')}\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/MoveFolderModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const HeaderWrapper = styled.div`\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n`\n\nexport const FolderList = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  gap: 15px;\n  margin-bottom: 15px;\n`\n"
  },
  {
    "path": "src/containers/Modal/MoveFolderModalContentV2/MoveFolderModalContentV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { FADE_GRADIENT_HEIGHT } from '../../../constants/layout'\nimport { withAlpha } from '../../../utils/withAlpha'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  itemsListHeader: {\n    marginBottom: `${rawTokens.spacing16}px`,\n  },\n  itemRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing12}px`,\n    width: '100%'\n  },\n  itemText: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing4}px`,\n    minWidth: 0,\n    flex: 1\n  },\n  itemsListWrapper: {\n    position: 'relative' as const,\n    width: '100%'\n  },\n  itemsList: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%',\n    maxHeight: '220px',\n    overflowY: 'auto' as const,\n    paddingLeft: `${rawTokens.spacing12}px`,\n  },\n  fadeGradient: {\n    position: 'absolute' as const,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    height: FADE_GRADIENT_HEIGHT,\n    pointerEvents: 'none' as const,\n    background: `linear-gradient(180deg, ${withAlpha(colors.colorSurfacePrimary, 0)} 0%, ${colors.colorSurfacePrimary} 100%)`\n  },\n  destinationHint: {\n    marginTop: `${rawTokens.spacing16}px`,\n    width: '100%'\n  },\n  chipRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    flexWrap: 'wrap' as const,\n    gap: `${rawTokens.spacing12}px`,\n    width: '100%',\n    maxHeight: '100px',\n    overflowY: 'auto' as const,\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/MoveFolderModalContentV2/MoveFolderModalContentV2.tsx",
    "content": "import React, { useEffect, useMemo, useRef, useState } from 'react'\n\n// @ts-ignore - JS module without type declarations\nimport { generateAvatarInitials } from '@tetherto/pear-apps-utils-avatar-initials'\nimport { Button, Dialog, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { useFolders, useRecords } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './MoveFolderModalContentV2.styles'\nimport { RECORD_COLOR_BY_TYPE } from '../../../constants/recordColorByType'\nimport { FADE_GRADIENT_HEIGHT } from '../../../constants/layout'\nimport { useModal } from '../../../context/ModalContext'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useScrollOverflow } from '../../../hooks/useScrollOverflow'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { Folder, Layers } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { RecordAvatar } from '../../../components/RecordAvatar'\n\nconst CHIP_ID_ALL = '__all__'\n\nexport type MoveFolderRecord = Record<string, unknown> & {\n  id: string\n  folder?: string | null\n  type: string\n  data?: {\n    title?: string\n    username?: string\n    email?: string\n    websites?: string[]\n    [key: string]: unknown\n  }\n}\n\nexport type MoveFolderModalContentV2Props = {\n  records: MoveFolderRecord[]\n  onCompleted?: () => void\n}\n\ntype FolderOption = {\n  id: string\n  label: string\n  icon: React.ReactNode\n}\n\nfunction getRecordSubtitle(record: MoveFolderRecord): string {\n  if ([\"login\", 'identity'].includes(record.type)) {\n    const u = record.data?.username\n    const e = record.data?.email\n    const w = record.data?.websites?.[0]\n    return String(u || e || w || '')\n  }\n  if (record.folder) {\n    return String(record.folder)\n  }\n  return ''\n}\n\nexport const MoveFolderModalContentV2 = ({\n  records,\n  onCompleted\n}: MoveFolderModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { closeModal } = useModal()\n\n  const { data: folders, isLoading: isLoadingFolders } = useFolders()\n\n  const { updateFolder, updateRecords, isLoading: isUpdating } = useRecords({\n    onCompleted: closeModal\n  })\n\n  const isLoading = isUpdating || isLoadingFolders\n\n  useGlobalLoading({ isLoading })\n\n  const iconColor = theme.colors.colorTextPrimary\n\n  const folderOptions = useMemo<FolderOption[]>(() => {\n    const customFolders = Object.values(\n      (folders?.customFolders ?? {}) as Record<string, { name: string }>\n    )\n\n    const customOptions = customFolders\n      .sort((a, b) => a.name.localeCompare(b.name))\n      .map(({ name }) => ({\n        id: name,\n        label: name,\n        icon: <Folder width={20} height={20} style={{ color: iconColor }} />\n      }))\n\n    return [\n      {\n        id: CHIP_ID_ALL,\n        label: t('All Items'),\n        icon: <Layers width={20} height={20} style={{ color: iconColor }} />\n      },\n      ...customOptions\n    ]\n  }, [folders, iconColor, t])\n\n  // Preselect the chip the records currently sit at\n  const defaultSelectedId = useMemo<string | null>(() => {\n    if (records.length === 0) return null\n    const firstFolder = records[0].folder\n    if (!records.every((r) => r.folder === firstFolder)) return null\n    if (!firstFolder) return CHIP_ID_ALL\n    return folders?.customFolders?.[firstFolder] ? firstFolder : null\n  }, [records, folders])\n\n  const [selectedId, setSelectedId] = useState<string | null>(defaultSelectedId)\n\n  useEffect(() => {\n    setSelectedId(defaultSelectedId)\n  }, [defaultSelectedId])\n\n  const atDestination =\n    !!selectedId &&\n    records.length > 0 &&\n    (selectedId === CHIP_ID_ALL\n      ? records.every((r) => !r.folder)\n      : records.every((r) => r.folder === selectedId))\n\n  const isMoveDisabled = isLoading || !selectedId || atDestination\n\n  const itemsListRef = useRef<HTMLDivElement>(null)\n  const hasItemsOverflow = useScrollOverflow(itemsListRef, [records.length])\n\n  const isSingle = records.length === 1\n  const moveDialogTitle = isSingle\n    ? t('Move 1 item')\n    : t('Move {count} items', { count: records.length })\n  const moveSubmitLabel = isSingle ? t('Move item') : t('Move items')\n  const selectedItemsLabel = isSingle ? t('Selected Item') : t('Selected Items')\n  const destinationHintLabel = isSingle\n    ? t('Choose the destination folder of this item')\n    : t('Choose the destination folder of these items')\n\n  const handleMove = async () => {\n    if (!selectedId || isMoveDisabled) return\n    if (selectedId === CHIP_ID_ALL) {\n      await updateRecords(records.map((r) => ({ ...r, folder: null })))\n    } else {\n      await updateFolder(records.map((r) => r.id), selectedId)\n    }\n    onCompleted?.()\n  }\n\n  const {\n    body,\n    itemRow,\n    itemText,\n    itemsList,\n    itemsListWrapper,\n    fadeGradient,\n    destinationHint,\n    chipRow,\n    itemsListHeader\n  } = styles\n  return (\n    <Dialog\n      title={moveDialogTitle}\n      onClose={closeModal}\n      testID=\"movefolder-dialog-v2\"\n      closeButtonTestID=\"movefolder-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"movefolder-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={isMoveDisabled}\n            isLoading={isLoading}\n            onClick={handleMove}\n            data-testid=\"movefolder-submit-v2\"\n          >\n            {moveSubmitLabel}\n          </Button>\n        </>\n      }\n    >\n      <div style={body}>\n        <div style={itemsListHeader}>\n        <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n          {selectedItemsLabel}\n        </Text>\n        </div>\n\n        {records.length > 0 ? (\n          <div style={itemsListWrapper}>\n            <div\n              ref={itemsListRef}\n              style={{\n                ...itemsList,\n                paddingBottom: hasItemsOverflow ? FADE_GRADIENT_HEIGHT : 0\n              }}\n            >\n              {records.map((record, index) => {\n                const domain =\n                  record.type === 'login'\n                    ? record.data?.websites?.[0] ?? null\n                    : null\n                const subtitle = getRecordSubtitle(record)\n                const titleText = record.data?.title ?? ''\n                return (\n                  <div key={record.id} style={itemRow}>\n                    <RecordAvatar\n                      websiteDomain={domain ?? ''}\n                      initials={generateAvatarInitials(\n                        record.data?.title ?? ''\n                      )}\n                      size=\"md\"\n                      isSelected={false}\n                      // Designs intentionally omit the favorite badge in this list.\n                      isFavorite={false}\n                      color={\n                        RECORD_COLOR_BY_TYPE[\n                          record.type as keyof typeof RECORD_COLOR_BY_TYPE\n                        ] ?? RECORD_COLOR_BY_TYPE.custom\n                      }\n                      testId={`movefolder-avatar-v2-${index}`}\n                    />\n                    <div style={itemText}>\n                      <Text>{titleText}</Text>\n                      {subtitle ? (\n                        <Text\n                          variant=\"caption\"\n                          color={theme.colors.colorTextSecondary}\n                        >\n                          {subtitle}\n                        </Text>\n                      ) : null}\n                    </div>\n                  </div>\n                )\n              })}\n            </div>\n            {hasItemsOverflow ? (\n              <div style={fadeGradient} aria-hidden=\"true\" />\n            ) : null}\n          </div>\n        ) : null}\n\n        <div style={destinationHint}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {destinationHintLabel}\n          </Text>\n        </div>\n\n        <div style={chipRow}>\n          {folderOptions.map((opt) => {\n            const { id, label, icon } = opt\n            const selected = id === selectedId\n            return (\n              <Button\n                key={id}\n                variant=\"secondary\"\n                size=\"small\"\n                pressed={selected}\n                iconBefore={icon}\n                data-testid={`movefolder-chip-${id}`}\n                onClick={() =>\n                  setSelectedId((prev) => (prev === id ? null : id))\n                }\n              >\n                {label}\n              </Button>\n            )\n          })}\n        </div>\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/PairedDevicesModalContent/index.tsx",
    "content": "import React, { useMemo } from 'react'\n\nimport { formatDate } from '@tetherto/pear-apps-utils-date'\nimport {\n  Button,\n  Dialog,\n  ListItem,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  Devices,\n  LaptopMac,\n  LaptopWindows,\n  PhoneIphone,\n  Tablet\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useVault } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\nconst getDeviceDisplayName = (\n  deviceName: string | undefined,\n  t: (value: string) => string\n): string => {\n  if (!deviceName) return t('Unknown Device')\n\n  const lowerName = deviceName.toLowerCase()\n\n  if (lowerName.startsWith('ios')) return t('iPhone')\n  if (lowerName.startsWith('android')) return t('Android')\n\n  return deviceName\n}\n\nconst getDeviceIcon = (deviceName?: string) => {\n  if (!deviceName) return Devices\n\n  const lowerName = deviceName.toLowerCase()\n\n  if (lowerName.startsWith('ios') || lowerName.includes('iphone'))\n    return PhoneIphone\n  if (lowerName.startsWith('android')) return PhoneIphone\n  if (lowerName.includes('ipad') || lowerName.includes('tablet')) return Tablet\n  if (\n    lowerName.includes('mac') ||\n    lowerName.includes('imac') ||\n    lowerName.includes('darwin') ||\n    lowerName.includes('macbook')\n  )\n    return LaptopMac\n  if (lowerName.includes('windows')) return LaptopWindows\n\n  return Devices\n}\n\nexport const PairedDevicesModalContent = () => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  const { data: vaultData } = useVault()\n\n  const devices = useMemo(\n    () => (Array.isArray(vaultData?.devices) ? vaultData.devices : []),\n    [vaultData]\n  )\n\n  return (\n    <Dialog\n      title={t('Paired Devices')}\n      onClose={closeModal}\n      testID=\"see-devices-dialog\"\n      closeButtonTestID=\"see-devices-close\"\n      footer={\n        <Button\n          size=\"small\"\n          type=\"button\"\n          onClick={closeModal}\n          data-testid=\"see-devices-close-button\"\n        >\n          {t('Understood')}\n        </Button>\n      }\n    >\n      {devices.length === 0 ? (\n        <div style={styles.emptyState}>\n          <Text as=\"p\" variant=\"body\" color={theme.colors.colorTextSecondary}>\n            {t('No devices synced yet')}\n          </Text>\n        </div>\n      ) : (\n        <div style={styles.list}>\n          {devices.map((device, index) => {\n            const deviceName = getDeviceDisplayName(device.name, t)\n            const DeviceIcon = getDeviceIcon(device.name)\n            const createdAt = device.createdAt\n              ? formatDate(device.createdAt, 'dd-mmm-yyyy', ' ')\n              : null\n\n            return (\n              <ListItem\n                key={device.id ?? `${deviceName}-${index}`}\n                icon={\n                  <div style={styles.iconWrap}>\n                    <DeviceIcon\n                      width={16}\n                      height={16}\n                      color={theme.colors.colorAccentActive}\n                    />\n                  </div>\n                }\n                title={deviceName}\n                subtitle={\n                  createdAt ? `${t('Paired on')} ${createdAt}` : undefined\n                }\n                testID={`see-devices-item-${device.id ?? index}`}\n              />\n            )\n          })}\n        </div>\n      )}\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/PairedDevicesModalContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  list: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const\n  },\n  iconWrap: {\n    width: '32px',\n    height: '32px',\n    borderRadius: `${rawTokens.radius8}px`,\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    flexShrink: 0,\n    backgroundColor: colors.colorSurfaceHover\n  },\n  emptyState: {\n    display: 'flex' as const,\n    justifyContent: 'center' as const,\n    alignItems: 'center' as const,\n    padding: `${rawTokens.spacing24}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/SideDrawer/index.js",
    "content": "import { useRef } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { SideDrawerWrapper } from './styles'\nimport { BASE_TRANSITION_DURATION } from '../../../constants/transitions'\nimport { useAnimatedVisibility } from '../../../hooks/useAnimatedVisibility'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  isOpen: boolean\n * }} props\n */\nexport const SideDrawer = ({ children, isOpen }) => {\n  const nodeRef = useRef(null)\n  const { isShown, isRendered } = useAnimatedVisibility({\n    isOpen: isOpen,\n    transitionDuration: BASE_TRANSITION_DURATION,\n    nodeRef,\n    propertyName: 'transform'\n  })\n\n  if (!isRendered) {\n    return null\n  }\n\n  return html`\n    <${SideDrawerWrapper} ref=${nodeRef} isShown=${isShown}> ${children} <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/SideDrawer/styles.js",
    "content": "import styled from 'styled-components'\n\nimport { BASE_TRANSITION_DURATION } from '../../../constants/transitions'\n\nexport const SideDrawerWrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isShown'].includes(prop)\n})`\n  position: fixed;\n  bottom: 0;\n  right: 0;\n  width: 400px;\n  height: calc(100% - var(--title-bar-height));\n  background: ${({ theme }) => theme.colors.grey500.mode1};\n  box-shadow: -4px 4px 4px 0px rgba(0, 0, 0, 0.25);\n  transform: ${({ isShown }) =>\n    isShown ? 'translateX(0)' : 'translateX(100%)'};\n  transition: transform ${BASE_TRANSITION_DURATION}ms ease-in-out;\n`\n"
  },
  {
    "path": "src/containers/Modal/UnsavedChangesModalContent/UnsavedChangesModalContent.tsx",
    "content": "import { Button, Dialog, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\ntype UnsavedChangesModalContentProps = {\n  description?: string\n  onSave: () => void | Promise<void>\n  onDiscard: () => void\n}\n\nexport const UnsavedChangesModalContent = ({\n  description,\n  onSave,\n  onDiscard\n}: UnsavedChangesModalContentProps) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { closeModal } = useModal()\n\n  return (\n    <Dialog\n      title={t('Unsaved Changes')}\n      onClose={closeModal}\n      testID=\"unsaved-changes-dialog\"\n      closeButtonTestID=\"unsaved-changes-close\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={onDiscard}\n            data-testid=\"unsaved-changes-discard\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={() => void onSave()}\n            data-testid=\"unsaved-changes-save\"\n          >\n            {t('Save Changes')}\n          </Button>\n        </>\n      }\n    >\n      <Text variant=\"label\" color={theme.colors.colorTextSecondary}>\n        {description ??\n          t(\n            'You have unsaved changes. Would you like to save them before leaving?'\n          )}\n      </Text>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/UnsavedChangesModalContent/index.ts",
    "content": "export { UnsavedChangesModalContent } from './UnsavedChangesModalContent'\n"
  },
  {
    "path": "src/containers/Modal/UpdateRequiredModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { useCountDown } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { html } from 'htm/react'\n\nimport {\n  ButtonWrapper,\n  Container,\n  Description,\n  Timer,\n  TimerTitle,\n  TimerWrapper,\n  Title\n} from './styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { ButtonPrimary } from '../../../lib-react-components'\n\n/**\n * @param {{\n *  onUpdate: () => void\n * }} props\n */\nexport const UpdateRequiredModalContent = ({ onUpdate }) => {\n  const { closeModal } = useModal()\n  const { i18n } = useLingui()\n\n  const handleUpdateApp = () => {\n    onUpdate?.()\n    closeModal()\n  }\n\n  const expireTime = useCountDown({\n    initialSeconds: 120,\n    onFinish: handleUpdateApp\n  })\n\n  return html` <${Container}>\n    <${Title}> ${i18n._('Update Required')} <//>\n    <${Description}>\n      ${i18n._(\n        'Find out what exciting features and updates await you in this version.'\n      )}\n    <//>\n\n    <${TimerWrapper}>\n      <${TimerTitle}> ${i18n._('App will restart in:')} <//>\n      <${Timer}> ${expireTime} <//>\n    <//>\n\n    <${ButtonWrapper}>\n      <${ButtonPrimary} onClick=${handleUpdateApp}> ${i18n._('Update App')} <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/UpdateRequiredModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  position: relative;\n  display: flex;\n  width: 380px;\n  padding: 20px;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 8px;\n\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25);\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n  letter-spacing: -0.32px;\n`\n\nexport const Description = styled.span`\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 150%; /* 21px */\n  letter-spacing: -0.28px;\n`\n\nexport const ButtonWrapper = styled.div`\n  display: flex;\n  width: 100%;\n\n  & > * {\n    width: 100%;\n  }\n`\n\nexport const TimerWrapper = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n`\n\nexport const TimerTitle = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: 150%; /* 21px */\n  letter-spacing: -0.28px;\n`\n\nexport const Timer = styled.span`\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 150%; /* 21px */\n  letter-spacing: -0.28px;\n`\n"
  },
  {
    "path": "src/containers/Modal/UpdateRequiredModalContentV2/UpdateRequiredModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing16}px`,\n    width: '100%'\n  },\n  timerRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'space-between' as const,\n    width: '100%'\n  },\n  footer: {\n    display: 'flex' as const,\n    justifyContent: 'flex-end' as const,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/UpdateRequiredModalContentV2/UpdateRequiredModalContentV2.tsx",
    "content": "import React from 'react'\n\nimport { useCountDown } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Button, Dialog, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { createStyles } from './UpdateRequiredModalContentV2.styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\nexport type UpdateRequiredModalContentV2Props = {\n  onUpdate: () => void\n}\n\nexport const UpdateRequiredModalContentV2 = ({\n  onUpdate\n}: UpdateRequiredModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const { theme } = useTheme()\n  const styles = createStyles()\n\n  const handleUpdateApp = () => {\n    onUpdate?.()\n    closeModal()\n  }\n\n  const expireTime = useCountDown({\n    initialSeconds: 120,\n    onFinish: handleUpdateApp\n  })\n\n  return (\n    <Dialog\n      title={t('Update App')}\n      testID=\"updaterequired-dialog-v2\"\n      closeOnOutsideClick={false}\n      hideCloseButton\n      footer={\n        <div style={styles.footer}>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={handleUpdateApp}\n            data-testid=\"updaterequired-update-v2\"\n          >\n            {t('Update App')}\n          </Button>\n        </div>\n      }\n    >\n      <div style={styles.body}>\n        <Text as=\"p\" variant=\"label\" color={theme.colors.colorTextSecondary} data-testid=\"updaterequired-description-v2\">\n          {t(\n            'A newer version of PearPass is available. Please update to the latest version to continue using the app.'\n          )}\n        </Text>\n        <div style={styles.timerRow}>\n          <Text\n            as=\"span\"\n            variant=\"label\"\n            color={theme.colors.colorTextSecondary}\n            data-testid=\"updaterequired-timer-label-v2\"\n          >\n            {t('App will restart in:')}\n          </Text>\n          <Text\n            as=\"span\"\n            variant=\"label\"\n            color={theme.colors.colorTextPrimary}\n            data-testid=\"updaterequired-timer-value-v2\"\n          >\n            {expireTime}\n          </Text>\n        </div>\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/UploadFilesModalContentV2/UploadFilesModalContentV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/Modal/UploadFilesModalContentV2/UploadFilesModalContentV2.tsx",
    "content": "import React, { useState } from 'react'\n\nimport {\n  Button,\n  Dialog,\n  UploadField\n} from '@tetherto/pearpass-lib-ui-kit'\nimport type { UploadedFile } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { createStyles } from './UploadFilesModalContentV2.styles'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\nexport type UploadFilesModalContentV2Props = {\n  type?: 'file' | 'image'\n  accepts?: string\n  onFilesSelected?: (files: File[]) => void\n}\n\nexport const UploadFilesModalContentV2 = ({\n  type = 'file',\n  accepts,\n  onFilesSelected\n}: UploadFilesModalContentV2Props) => {\n  const { t } = useTranslation()\n  const { closeModal } = useModal()\n  const styles = createStyles()\n\n  const [files, setFiles] = useState<UploadedFile[]>([])\n\n  const isTypeImage = type === 'image'\n  const acceptedFormats = accepts\n    ? accepts.split(',').map((a) => a.trim()).filter(Boolean)\n    : undefined\n\n  const handleSubmit = () => {\n    if (!files.length) return\n    onFilesSelected?.(files.map((f) => f.file))\n    closeModal()\n  }\n\n  return (\n    <Dialog\n      title={isTypeImage ? t('Upload Picture') : t('Upload Attachment')}\n      onClose={closeModal}\n      testID=\"uploadfiles-dialog-v2\"\n      closeButtonTestID=\"uploadfiles-close-v2\"\n      footer={\n        <>\n          <Button\n            variant=\"secondary\"\n            size=\"small\"\n            type=\"button\"\n            onClick={closeModal}\n            data-testid=\"uploadfiles-button-discard-v2\"\n          >\n            {t('Discard')}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            type=\"button\"\n            disabled={files.length === 0}\n            onClick={handleSubmit}\n            data-testid=\"uploadfiles-button-additem-v2\"\n          >\n            {t('Add Item')}\n          </Button>\n        </>\n      }\n    >\n      <div style={styles.body}>\n        <UploadField\n          files={files}\n          onFilesChange={setFiles}\n          allowDragAndDrop\n          acceptedFormats={acceptedFormats}\n          uploadLinkText={t('Upload file')}\n          uploadSuffixText={t('or drag and drop it here')}\n          testID=\"uploadfiles-field-v2\"\n        />\n      </div>\n    </Dialog>\n  )\n}\n"
  },
  {
    "path": "src/containers/Modal/UploadFilesModalContentV2/index.ts",
    "content": "export { UploadFilesModalContentV2 } from './UploadFilesModalContentV2'\nexport type { UploadFilesModalContentV2Props } from './UploadFilesModalContentV2'\n"
  },
  {
    "path": "src/containers/Modal/UploadImageModalContent/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { ContentWrapper, HeaderWrapper } from './styles'\nimport { FileUploadContent } from '../../../components/FileUploadContent'\nimport { useModal } from '../../../context/ModalContext'\nimport { CommonFileIcon, ImageIcon } from '../../../lib-react-components'\nimport { ModalContent } from '../ModalContent'\n\n/**\n * @component\n * @param {Object} props\n * @param {'file'|'image'} props.type\n * @param {string} props.accepts\n * @param {boolean} [props.closeOnChange=true]\n * @returns {JSX.Element}\n */\n\nexport const UploadFilesModalContent = ({\n  accepts,\n  type,\n  onFilesSelected,\n  closeOnChange = true\n}) => {\n  const isTypeImage = type === 'image'\n\n  const { i18n } = useLingui()\n  const { closeModal } = useModal()\n\n  const handleFileChange = (files) => {\n    if (files && files.length > 0) {\n      onFilesSelected?.(files)\n    }\n\n    if (closeOnChange) {\n      closeModal()\n    }\n  }\n\n  return html`\n    <${ModalContent}\n      onClose=${closeModal}\n      headerChildren=${html`\n        <${HeaderWrapper}>\n          ${isTypeImage\n            ? html` <${ImageIcon} size=\"21\" />\n                ${i18n._('Upload picture')}`\n            : html`\n                <${CommonFileIcon} size=\"21\" />\n                ${i18n._('Upload file')}\n              `}\n        <//>\n      `}\n    >\n      <${ContentWrapper}>\n        <${FileUploadContent}\n          accepts=${accepts}\n          isTypeImage=${isTypeImage}\n          handleFileChange=${handleFileChange}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Modal/UploadImageModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const HeaderWrapper = styled.div`\n  display: flex;\n  gap: 8px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 500;\n`\n\nexport const ContentWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 16px;\n`\n"
  },
  {
    "path": "src/containers/Modal/VaultPasswordFormModalContent/index.js",
    "content": "import { useMemo } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { html } from 'htm/react'\n\nimport { Description, Header, Title, UnlockVaultContainer } from './styles'\nimport { FormModalHeaderWrapper } from '../../../components/FormModalHeaderWrapper'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport {\n  ButtonPrimary,\n  PearPassPasswordField\n} from '../../../lib-react-components'\nimport { logger } from '../../../utils/logger'\nimport { ModalContent } from '../ModalContent'\n\n/**\n *\n * @param {Object} props\n * @param {Object} props.vault\n * @param {string} props.vault.id\n * @param {string} [props.vault.name]\n * @param {(password: string) => Promise<void> | void} [props.onSubmit]\n */\nexport const VaultPasswordFormModalContent = ({ vault, onSubmit }) => {\n  const { i18n } = useLingui()\n  const { closeModal } = useModal()\n  const { setIsLoading } = useLoadingContext()\n\n  const schema = Validator.object({\n    password: Validator.string().required(i18n._('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: {\n      password: ''\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const submit = async (values) => {\n    if (!vault.id) {\n      return\n    }\n\n    try {\n      setIsLoading(true)\n\n      await onSubmit?.(values.password)\n\n      setIsLoading(false)\n    } catch (error) {\n      logger.error('VaultPasswordFormModalContent', error)\n\n      setIsLoading(false)\n\n      setErrors({\n        password: i18n._('Invalid password')\n      })\n    }\n  }\n\n  const titles = useMemo(\n    () => ({\n      title: i18n._('Enter Your Vault Password'),\n      description: i18n._(\n        'Unlock your {vaultName} Vault to access your stored passwords.',\n        {\n          vaultName: vault.name ?? vault.id\n        }\n      )\n    }),\n    []\n  )\n\n  return html` <${ModalContent}\n    onClose=${closeModal}\n    headerChildren=${html`\n      <${FormModalHeaderWrapper}>\n        <${Header}>\n          <${Title}> ${titles.title} <//>\n          <${Description}> ${titles.description}<//>\n        <//>\n      <//>\n    `}\n  >\n    <${UnlockVaultContainer} onSubmit=${handleSubmit(submit)}>\n      <${PearPassPasswordField} ...${register('password')} />\n\n      <${ButtonPrimary} type=\"submit\"> ${i18n._('Unlock Vault')} <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/containers/Modal/VaultPasswordFormModalContent/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Header = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n`\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\nexport const Description = styled.span`\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\nexport const VaultsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 15px;\n`\nexport const UnlockVaultContainer = styled.form`\n  display: flex;\n  flex-direction: column;\n  align-items: self-start;\n  gap: 20px;\n`\n"
  },
  {
    "path": "src/containers/Modal/index.js",
    "content": "import { ModalWrapper } from './styles'\n\nexport { ModalWrapper }\n"
  },
  {
    "path": "src/containers/Modal/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ModalWrapper = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 500;\n`\n\nexport const DropdownsWrapper = styled.div`\n  display: flex;\n  gap: 20px;\n`\n"
  },
  {
    "path": "src/containers/MultiSelectActionsBar/MultiSelectActionsBar.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { HEADER_MIN_HEIGHT } from '../../constants/layout'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  container: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'space-between' as const,\n    gap: `${rawTokens.spacing8}px`,\n    height: `${HEADER_MIN_HEIGHT}px`,\n    paddingInline: `${rawTokens.spacing12}px`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    backgroundColor: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const,\n    flexShrink: 0\n  },\n\n  label: {\n    overflow: 'hidden' as const,\n    textOverflow: 'ellipsis' as const,\n    whiteSpace: 'nowrap' as const,\n    minWidth: 0\n  },\n\n  actions: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`,\n    flexShrink: 0\n  },\n\n  buttonWrapper: {\n    position: 'relative' as const,\n    display: 'inline-flex' as const\n  },\n\n  tooltip: {\n    // Right-anchor so the tooltip grows leftward into the screen — the actions\n    // bar sits at the right edge, and centered tooltips overflow the viewport.\n    position: 'absolute' as const,\n    top: '100%',\n    right: 0,\n    transform: 'translateY(6px)',\n    zIndex: 10,\n    pointerEvents: 'none' as const,\n    whiteSpace: 'nowrap' as const\n  },\n\n  destructiveDivider: {\n    width: '1px',\n    height: '12px',\n    backgroundColor: colors.colorBorderPrimary,\n    marginInline: `${rawTokens.spacing4}px`,\n    flexShrink: 0\n  }\n})\n"
  },
  {
    "path": "src/containers/MultiSelectActionsBar/MultiSelectActionsBar.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\njest.mock('../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (key: string, values?: Record<string, unknown>) => {\n      if (!values) return key\n      return Object.entries(values).reduce(\n        (acc, [k, v]) => acc.replace(`{${k}}`, String(v)),\n        key\n      )\n    }\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => {\n  const React = require('react')\n  return {\n    useTheme: () => ({\n      theme: {\n        colors: {\n          colorTextPrimary: '#fff',\n          colorBorderPrimary: '#222',\n          colorSurfacePrimary: '#000'\n        }\n      }\n    }),\n    rawTokens: new Proxy({}, { get: () => 0 }),\n    Button: ({\n      children,\n      onClick,\n      disabled,\n      ...rest\n    }: {\n      children?: React.ReactNode\n      onClick?: () => void\n      disabled?: boolean\n      [key: string]: unknown\n    }) =>\n      React.createElement(\n        'button',\n        { type: 'button', onClick, disabled, ...rest },\n        children\n      ),\n    Snackbar: ({ text, testID }: { text: string; testID?: string }) =>\n      React.createElement(\n        'div',\n        { 'data-testid': testID ?? 'snackbar' },\n        text\n      ),\n    Text: ({\n      children,\n      ...rest\n    }: {\n      children?: React.ReactNode\n      [key: string]: unknown\n    }) => React.createElement('span', { ...rest }, children)\n  }\n})\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => {\n  const React = require('react')\n  const Icon = (name: string) => () =>\n    React.createElement('span', { 'data-icon': name })\n  return {\n    DriveFileMoveOutlined: Icon('DriveFileMoveOutlined'),\n    StarFilled: Icon('StarFilled'),\n    StarOutlined: Icon('StarOutlined'),\n    TrashOutlined: Icon('TrashOutlined')\n  }\n})\n\nimport { MultiSelectActionsBar } from './MultiSelectActionsBar'\n\ndescribe('MultiSelectActionsBar', () => {\n  const baseProps = {\n    selectedCount: 3,\n    allSelectedFavorited: false,\n    canMove: true,\n    onMove: jest.fn(),\n    onToggleFavorite: jest.fn(),\n    onDelete: jest.fn()\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders count label and all three action buttons', () => {\n    render(<MultiSelectActionsBar {...baseProps} />)\n    expect(screen.getByTestId('multi-select-count').textContent).toBe(\n      '3 Items selected'\n    )\n    expect(screen.getByTestId('multi-select-move')).toBeInTheDocument()\n    expect(screen.getByTestId('multi-select-favorite')).toBeInTheDocument()\n    expect(screen.getByTestId('multi-select-delete')).toBeInTheDocument()\n  })\n\n  it('uses singular label when exactly one item is selected', () => {\n    render(<MultiSelectActionsBar {...baseProps} selectedCount={1} />)\n    expect(screen.getByTestId('multi-select-count').textContent).toBe(\n      '1 Item selected'\n    )\n  })\n\n  it('disables all action buttons when no records are selected', () => {\n    render(<MultiSelectActionsBar {...baseProps} selectedCount={0} />)\n    expect(screen.getByTestId('multi-select-move')).toBeDisabled()\n    expect(screen.getByTestId('multi-select-favorite')).toBeDisabled()\n    expect(screen.getByTestId('multi-select-delete')).toBeDisabled()\n  })\n\n  it('disables only the move button when no folders exist', () => {\n    render(<MultiSelectActionsBar {...baseProps} canMove={false} />)\n    expect(screen.getByTestId('multi-select-move')).toBeDisabled()\n    expect(screen.getByTestId('multi-select-favorite')).not.toBeDisabled()\n    expect(screen.getByTestId('multi-select-delete')).not.toBeDisabled()\n  })\n\n  it('invokes the matching handlers when action buttons are clicked', () => {\n    const onMove = jest.fn()\n    const onToggleFavorite = jest.fn()\n    const onDelete = jest.fn()\n    render(\n      <MultiSelectActionsBar\n        {...baseProps}\n        onMove={onMove}\n        onToggleFavorite={onToggleFavorite}\n        onDelete={onDelete}\n      />\n    )\n    fireEvent.click(screen.getByTestId('multi-select-move'))\n    fireEvent.click(screen.getByTestId('multi-select-favorite'))\n    fireEvent.click(screen.getByTestId('multi-select-delete'))\n    expect(onMove).toHaveBeenCalledTimes(1)\n    expect(onToggleFavorite).toHaveBeenCalledTimes(1)\n    expect(onDelete).toHaveBeenCalledTimes(1)\n  })\n\n  it('shows a snackbar tooltip on hover over the move button', () => {\n    render(<MultiSelectActionsBar {...baseProps} />)\n    expect(\n      screen.queryByTestId('multi-select-move-tooltip')\n    ).not.toBeInTheDocument()\n\n    const move = screen.getByTestId('multi-select-move')\n    const wrapper = move.parentElement as HTMLElement\n    fireEvent.mouseEnter(wrapper)\n    expect(screen.getByTestId('multi-select-move-tooltip').textContent).toBe(\n      'Move to Another Folder'\n    )\n\n    fireEvent.mouseLeave(wrapper)\n    expect(\n      screen.queryByTestId('multi-select-move-tooltip')\n    ).not.toBeInTheDocument()\n  })\n\n  it('swaps favorite tooltip wording based on allSelectedFavorited', () => {\n    const { rerender } = render(<MultiSelectActionsBar {...baseProps} />)\n    const wrapper = screen.getByTestId('multi-select-favorite')\n      .parentElement as HTMLElement\n    fireEvent.mouseEnter(wrapper)\n    expect(screen.getByTestId('multi-select-favorite-tooltip').textContent).toBe(\n      'Add to Favorites'\n    )\n    fireEvent.mouseLeave(wrapper)\n\n    rerender(<MultiSelectActionsBar {...baseProps} allSelectedFavorited />)\n    const wrapper2 = screen.getByTestId('multi-select-favorite')\n      .parentElement as HTMLElement\n    fireEvent.mouseEnter(wrapper2)\n    expect(\n      screen.getByTestId('multi-select-favorite-tooltip').textContent\n    ).toBe('Remove from Favorites')\n  })\n})\n"
  },
  {
    "path": "src/containers/MultiSelectActionsBar/MultiSelectActionsBar.tsx",
    "content": "import React, { useState } from 'react'\n\nimport { Button, Snackbar, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  DriveFileMoveOutlined,\n  StarFilled,\n  StarOutlined,\n  TrashOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './MultiSelectActionsBar.styles'\nimport { useTranslation } from '../../hooks/useTranslation'\n\ntype MultiSelectActionsBarProps = {\n  selectedCount: number\n  allSelectedFavorited: boolean\n  canMove: boolean\n  onMove: () => void\n  onToggleFavorite: () => void\n  onDelete: () => void\n}\n\ntype HoverButtonProps = {\n  tooltip: string\n  tooltipTestId: string\n  children: React.ReactNode\n  wrapperStyle: React.CSSProperties\n  tooltipStyle: React.CSSProperties\n}\n\nconst HoverButton = ({\n  tooltip,\n  tooltipTestId,\n  children,\n  wrapperStyle,\n  tooltipStyle\n}: HoverButtonProps) => {\n  const [isHovered, setIsHovered] = useState(false)\n\n  return (\n    <span\n      style={wrapperStyle}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n      onFocus={() => setIsHovered(true)}\n      onBlur={() => setIsHovered(false)}\n    >\n      {children}\n      {isHovered && (\n        <div style={tooltipStyle} role=\"tooltip\" data-testid={tooltipTestId}>\n          <Snackbar text={tooltip} />\n        </div>\n      )}\n    </span>\n  )\n}\n\nexport const MultiSelectActionsBar = ({\n  selectedCount,\n  allSelectedFavorited,\n  canMove,\n  onMove,\n  onToggleFavorite,\n  onDelete\n}: MultiSelectActionsBarProps) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  const hasSelection = selectedCount > 0\n  const isMoveDisabled = !hasSelection || !canMove\n  const isFavoriteDisabled = !hasSelection\n  const isDeleteDisabled = !hasSelection\n  const FavoriteIcon = allSelectedFavorited ? StarFilled : StarOutlined\n\n  const iconColor = (disabled: boolean) =>\n    disabled ? theme.colors.colorTextDisabled : theme.colors.colorTextPrimary\n\n  const moveIconStyle = { color: iconColor(isMoveDisabled) }\n  const favoriteIconStyle = { color: iconColor(isFavoriteDisabled) }\n  const deleteIconStyle = { color: iconColor(isDeleteDisabled) }\n\n  const selectedLabel =\n    selectedCount === 1\n      ? t('1 Item selected')\n      : t('{count} Items selected', { count: selectedCount })\n\n  const favoriteLabel = allSelectedFavorited\n    ? t('Remove from Favorites')\n    : t('Add to Favorites')\n\n  return (\n    <div style={styles.container} data-testid=\"multi-select-actions-bar\">\n      <div style={styles.label}>\n        <Text variant=\"labelEmphasized\" data-testid=\"multi-select-count\">\n          {selectedLabel}\n        </Text>\n      </div>\n\n      <div style={styles.actions}>\n        <HoverButton\n          tooltip={t('Move to Another Folder')}\n          tooltipTestId=\"multi-select-move-tooltip\"\n          wrapperStyle={styles.buttonWrapper}\n          tooltipStyle={styles.tooltip}\n        >\n          <Button\n            variant=\"tertiary\"\n            size=\"small\"\n            onClick={onMove}\n            disabled={isMoveDisabled}\n            data-testid=\"multi-select-move\"\n            aria-label={t('Move items')}\n            iconBefore={<DriveFileMoveOutlined style={moveIconStyle} />}\n          />\n        </HoverButton>\n\n        <HoverButton\n          tooltip={favoriteLabel}\n          tooltipTestId=\"multi-select-favorite-tooltip\"\n          wrapperStyle={styles.buttonWrapper}\n          tooltipStyle={styles.tooltip}\n        >\n          <Button\n            variant=\"tertiary\"\n            size=\"small\"\n            onClick={onToggleFavorite}\n            disabled={isFavoriteDisabled}\n            data-testid=\"multi-select-favorite\"\n            aria-label={favoriteLabel}\n            iconBefore={<FavoriteIcon style={favoriteIconStyle} />}\n          />\n        </HoverButton>\n\n        <div style={styles.destructiveDivider} aria-hidden=\"true\" />\n\n        <Button\n          variant=\"destructive\"\n          size=\"small\"\n          onClick={onDelete}\n          disabled={isDeleteDisabled}\n          data-testid=\"multi-select-delete\"\n          aria-label={t('Delete items')}\n          iconBefore={<TrashOutlined style={deleteIconStyle} />}\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/MultiSelectActionsBar/index.ts",
    "content": "export { MultiSelectActionsBar } from './MultiSelectActionsBar'\n"
  },
  {
    "path": "src/containers/PassPhrase/PassPhraseSettings.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { PASSPHRASE_TYPE_OPTIONS } from '@tetherto/pearpass-lib-constants'\nimport { html } from 'htm/react'\n\nimport {\n  PassPraseSettingsContainer,\n  PassPraseSettingsRandomWordContainer,\n  PassPraseSettingsRandomWordText,\n  SwitchWrapper\n} from './styles'\nimport { RadioSelect } from '../../components/RadioSelect'\nimport { SwitchWithLabel } from '../../components/SwitchWithLabel'\n\n/**\n * @param {{\n *   selectedType: number,\n *   setSelectedType: (value: number) => void,\n *   withRandomWord: boolean,\n *   setWithRandomWord: (value: boolean) => void,\n *   isDisabled: boolean,\n *   testId?: string\n * }} props\n */\nexport const PassPhraseSettings = ({\n  selectedType,\n  setSelectedType,\n  withRandomWord,\n  setWithRandomWord,\n  isDisabled,\n  testId\n}) => {\n  const { i18n } = useLingui()\n\n  return html`\n    <${PassPraseSettingsContainer} data-testid=${testId}>\n      <${RadioSelect}\n        title=${i18n._('Type')}\n        options=${PASSPHRASE_TYPE_OPTIONS.map((option) => ({\n          label: i18n._('{count} words', { count: option.value }),\n          value: option.value\n        }))}\n        selectedOption=${selectedType}\n        onChange=${(value) => setSelectedType(value)}\n        optionStyle=${{ fontSize: 12, fontWeight: 400 }}\n        titleStyle=${{ fontSize: 12, marginBottom: 5, fontWeight: 500 }}\n        disabled=${isDisabled}\n      />\n\n      <${PassPraseSettingsRandomWordContainer}>\n        <${PassPraseSettingsRandomWordText}>${i18n._('+1 random word')}<//>\n        <${SwitchWrapper}>\n          <${SwitchWithLabel}\n            testId=\"passphrase-random-word-toggle\"\n            isOn=${withRandomWord}\n            onChange=${(value) => setWithRandomWord(value)}\n            disabled=${isDisabled}\n          />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/PassPhrase/PassPhraseV2.styles.ts",
    "content": "import { rawTokens, type ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (\n  colors: ThemeColors,\n  { hasError }: { hasError: boolean }\n) => ({\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    width: '100%'\n  },\n  groupContainer: {\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderRadius: `${rawTokens.spacing8}px`,\n    overflow: 'hidden' as const,\n    backgroundColor: colors.colorSurfacePrimary,\n    borderColor: hasError\n      ? colors.colorSurfaceDestructiveElevated\n      : colors.colorBorderPrimary\n  },\n  optionSection: {\n    padding: `${rawTokens.spacing12}px`,\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n  headerRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'flex-start' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n  headerInfo: { flex: 1 },\n  grid: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    flexWrap: 'wrap' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n  wordInputWrapper: {\n    width: `calc(50% - ${rawTokens.spacing12 / 2}px)`\n  },\n  optionSectionWithBorder: {\n    borderTop: `1px solid ${colors.colorBorderPrimary}`\n  },\n  copyIconWrapper:{\n    display: \"flex\",\n    justifyContent: 'space-between',\n    alignItems: \"center\"\n  }\n})\n"
  },
  {
    "path": "src/containers/PassPhrase/PassPhraseV2.tsx",
    "content": "import React, { useEffect, useRef, useState } from 'react'\n\nimport {\n  DEFAULT_SELECTED_TYPE,\n  PASSPHRASE_WORD_COUNTS,\n  VALID_WORD_COUNTS\n} from '@tetherto/pearpass-lib-constants'\nimport {\n  Button,\n  FieldError,\n  InputField,\n  Radio,\n  useTheme,\n  Text\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  ContentCopy,\n  ContentPaste\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { useCopyToClipboard } from '../../hooks/useCopyToClipboard.electron'\nimport { usePasteFromClipboard } from '../../hooks/usePasteFromClipboard'\nimport { useToast } from '../../context/ToastContext'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { createStyles } from './PassPhraseV2.styles'\n\ntype PassPhraseV2Props = {\n  error?: string\n  isCreateOrEdit?: boolean\n  onChange?: (value: string) => void\n  value?: string\n}\n\nconst parsePassphraseText = (text: string): string[] =>\n  text\n    .trim()\n    .split(/[-\\s]+/)\n    .map((word) => word.trim())\n    .filter((word) => word.length > 0)\n\nconst isValidRange = (wordCount: number): boolean =>\n  !wordCount || VALID_WORD_COUNTS.includes(wordCount)\n\nconst getWordLabel = (index: number): string => {\n  const position = index + 1\n  const remainder10 = position % 10\n  const remainder100 = position % 100\n\n  let suffix = 'th'\n  if (remainder10 === 1 && remainder100 !== 11) suffix = 'st'\n  else if (remainder10 === 2 && remainder100 !== 12) suffix = 'nd'\n  else if (remainder10 === 3 && remainder100 !== 13) suffix = 'rd'\n\n  return `${position}${suffix} Word`\n}\n\nconst getSelectedTypeForWords = (wordCount: number): number => {\n  if (\n    wordCount === PASSPHRASE_WORD_COUNTS.STANDARD_24 ||\n    wordCount === PASSPHRASE_WORD_COUNTS.WITH_RANDOM_24\n  ) {\n    return PASSPHRASE_WORD_COUNTS.STANDARD_24\n  }\n  if (\n    wordCount === PASSPHRASE_WORD_COUNTS.STANDARD_12 ||\n    wordCount === PASSPHRASE_WORD_COUNTS.WITH_RANDOM_12\n  ) {\n    return PASSPHRASE_WORD_COUNTS.STANDARD_12\n  }\n  return DEFAULT_SELECTED_TYPE\n}\n\nexport const PassPhraseV2 = ({\n  error,\n  isCreateOrEdit = false,\n  onChange,\n  value = ''\n}: PassPhraseV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { copyToClipboard } = useCopyToClipboard()\n  const { pasteFromClipboard } = usePasteFromClipboard()\n  const { setToast } = useToast()\n  const lastCommittedValueRef = useRef(value)\n\n  const initialWords = parsePassphraseText(value)\n\n  const [selectedType, setSelectedType] = useState<number>(\n    getSelectedTypeForWords(initialWords.length)\n  )\n  const [passphraseWords, setPassphraseWords] = useState<string[]>(initialWords)\n\n  const detectAndUpdateSettings = (words: string[]) => {\n    setSelectedType(getSelectedTypeForWords(words.length))\n  }\n\n  useEffect(() => {\n    if (value === lastCommittedValueRef.current) return\n    if (!value?.trim().length) {\n      setPassphraseWords([])\n      lastCommittedValueRef.current = value\n      return\n    }\n    const words = parsePassphraseText(value)\n    setPassphraseWords(words)\n    detectAndUpdateSettings(words)\n    lastCommittedValueRef.current = value\n  }, [value])\n\n  const handlePasteFromClipboard = async () => {\n    const pastedText = await pasteFromClipboard()\n    if (!pastedText) return\n\n    const words = parsePassphraseText(pastedText)\n\n    if (!isValidRange(words.length)) {\n      setToast({ message: t('Only 12 or 24 words are allowed') })\n      return\n    }\n\n    setPassphraseWords(words)\n    detectAndUpdateSettings(words)\n    lastCommittedValueRef.current = pastedText\n    onChange?.(pastedText)\n  }\n\n  const expandedWords = Array.from(\n    { length: Math.max(selectedType, passphraseWords.length || selectedType) },\n    (_, index) => passphraseWords[index] ?? ''\n  )\n\n  const handleWordChange = (index: number, nextValue: string) => {\n    const sanitized = nextValue.replace(/\\s+/g, '').trim()\n    const nextWords = [...expandedWords]\n    nextWords[index] = sanitized\n    setPassphraseWords(nextWords)\n\n    const serialized = nextWords.filter(Boolean).join(' ')\n    lastCommittedValueRef.current = serialized\n    onChange?.(serialized)\n  }\n\n  const handleTypeSelect = (wordCount: number) => {\n    setSelectedType(wordCount)\n\n    if (passphraseWords.length > wordCount) {\n      const nextWords = passphraseWords.slice(0, wordCount)\n      setPassphraseWords(nextWords)\n      const serialized = nextWords.filter(Boolean).join(' ')\n      lastCommittedValueRef.current = serialized\n      onChange?.(serialized)\n    }\n  }\n\n  const optionsToRender = isCreateOrEdit\n    ? [PASSPHRASE_WORD_COUNTS.STANDARD_12, PASSPHRASE_WORD_COUNTS.STANDARD_24]\n    : [selectedType]\n  const detailWords = passphraseWords.length\n    ? passphraseWords\n    : parsePassphraseText(value)\n\n  const styles = createStyles(theme.colors, { hasError: !!error })\n\n  return (\n    <div style={styles.section}>\n      <div style={styles.groupContainer}>\n        {!isCreateOrEdit ? (\n          <div style={styles.optionSection}>\n            <div style={styles.copyIconWrapper}>\n              <Text variant='caption'>{t(`Recovery Phrase`)}</Text>\n              <Button\n                variant=\"tertiary\"\n                size=\"small\"\n                type=\"button\"\n                aria-label={t('Copy recovery phrase')}\n                iconBefore={\n                  <ContentCopy\n                    width={16}\n                    height={16}\n                    color={theme.colors.colorTextPrimary}\n                  />\n                }\n                onClick={() => {\n                  copyToClipboard(value)\n                }}\n              />\n\n            </div>\n            <div style={styles.grid}>\n              {detailWords.map((word, inputIndex) => (\n                <div\n                  key={`details-word-${inputIndex}`}\n                  style={styles.wordInputWrapper}\n                >\n                  <InputField\n                    label={getWordLabel(inputIndex)}\n                    value={word}\n                    placeholder={t('Enter Word')}\n                    readOnly\n                    testID={`passphrase-word-input-${inputIndex}`}\n                  />\n                </div>\n              ))}\n            </div>\n          </div>\n        ) : (\n          optionsToRender.map((wordCount: number, index: number) => {\n            const isSelected = selectedType === wordCount\n            const description = t(\n              `Paste or enter ${wordCount} words. Optional +1 works only when pasted`\n            )\n            const borderStyle: React.CSSProperties =\n              index > 0 ? styles.optionSectionWithBorder : {}\n\n            return (\n              <div\n                key={wordCount}\n                style={{ ...styles.optionSection, ...borderStyle }}\n              >\n                <div style={styles.headerRow}>\n                  <div style={styles.headerInfo}>\n                    <Radio\n                      builtIn\n                      options={[\n                        {\n                          value: String(wordCount),\n                          label: `${wordCount} Words`,\n                          description\n                        }\n                      ]}\n                      value={isSelected ? String(wordCount) : undefined}\n                      onChange={\n                        isCreateOrEdit\n                          ? () => handleTypeSelect(wordCount)\n                          : undefined\n                      }\n                      disabled={!isCreateOrEdit}\n                    />\n                  </div>\n\n                  <Button\n                    variant=\"tertiary\"\n                    size=\"small\"\n                    type=\"button\"\n                    aria-label={\n                      isCreateOrEdit\n                        ? t('Paste recovery phrase')\n                        : t('Copy recovery phrase')\n                    }\n                    iconBefore={\n                      isCreateOrEdit ? (\n                        <ContentPaste\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      ) : (\n                        <ContentCopy\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      )\n                    }\n                    onClick={() => {\n                      if (isCreateOrEdit) {\n                        handleTypeSelect(wordCount)\n                        void handlePasteFromClipboard()\n                        return\n                      }\n                      copyToClipboard(value)\n                    }}\n                  />\n                </div>\n\n                {isSelected ? (\n                  <div style={styles.grid}>\n                    {expandedWords.map((word, inputIndex) => (\n                      <div\n                        key={`${wordCount}-${inputIndex}`}\n                        style={styles.wordInputWrapper}\n                      >\n                        <InputField\n                          label={getWordLabel(inputIndex)}\n                          value={word}\n                          placeholder={t('Enter Word')}\n                          onChange={(e) =>\n                            handleWordChange(inputIndex, e.target.value)\n                          }\n                          readOnly={!isCreateOrEdit}\n                          testID={`passphrase-word-input-${inputIndex}`}\n                        />\n                      </div>\n                    ))}\n                  </div>\n                ) : null}\n              </div>\n            )\n          })\n        )}\n      </div>\n\n      {!!error?.length && <FieldError>{error}</FieldError>}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/PassPhrase/__tests__/PassPhrase.test.js",
    "content": "import React from 'react'\nimport '@testing-library/jest-dom'\n\nimport { render, screen, fireEvent, waitFor } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { PassPhrase } from '../'\n\n// i18n returns key\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({ i18n: { _: (s) => s } })\n}))\n\n// Styles\njest.mock('../styles', () => ({\n  Container: ({ children }) => <div data-testid=\"container\">{children}</div>,\n  PassPhraseHeader: ({ children }) => (\n    <div data-testid=\"header\">{children}</div>\n  ),\n  HeaderText: ({ children }) => <h1 data-testid=\"title\">{children}</h1>,\n  PasteButton: ({ children, onClick, type, ...props }) => (\n    <button data-testid={props['data-testid']} onClick={onClick} type={type}>\n      {children}\n    </button>\n  ),\n  CopyPasteText: ({ children }) => (\n    <span data-testid=\"copy-paste-text\">{children}</span>\n  ),\n  PassPhraseContainer: ({ children }) => (\n    <div data-testid=\"words\">{children}</div>\n  ),\n  ErrorContainer: ({ children }) => (\n    <div data-testid=\"error-container\">{children}</div>\n  ),\n  ErrorText: ({ children }) => <div data-testid=\"error-text\">{children}</div>\n}))\n// Icons and shared components\njest.mock('../../../lib-react-components', () => ({\n  CopyIcon: () => <i data-testid=\"copy-icon\" />,\n  PasteIcon: () => <i data-testid=\"paste-icon\" />,\n  PassPhraseIcon: () => <i data-testid=\"pp-icon\" />,\n  ErrorIcon: () => <i data-testid=\"error-icon\" />\n}))\n\n// Badge item capture\nconst mockBadgeCalls = []\njest.mock('../../../components/BadgeTextItem', () => ({\n  BadgeTextItem: (props) => {\n    mockBadgeCalls.push(props)\n    return (\n      <div data-testid=\"badge-item\">\n        #{props.count}:{props.word}\n      </div>\n    )\n  }\n}))\n\n// PassPhraseSettings capture\nconst mockSettingsCalls = []\njest.mock('../PassPhraseSettings', () => ({\n  PassPhraseSettings: (props) => {\n    mockSettingsCalls.push(props)\n    return <div data-testid=\"settings\" />\n  }\n}))\n\n// Hooks\nconst mockCopy = jest.fn()\njest.mock('../../../hooks/useCopyToClipboard.electron', () => ({\n  useCopyToClipboard: () => ({ copyToClipboard: mockCopy })\n}))\n\nconst mockPaste = jest.fn()\njest.mock('../../../hooks/usePasteFromClipboard', () => ({\n  usePasteFromClipboard: () => ({ pasteFromClipboard: mockPaste })\n}))\n\nconst mockSetToast = jest.fn()\njest.mock('../../../context/ToastContext', () => ({\n  useToast: () => ({ setToast: mockSetToast })\n}))\n\ndescribe('PassPhrase (container)', () => {\n  const renderComponent = (props = {}) =>\n    render(\n      <ThemeProvider>\n        <PassPhrase\n          isCreateOrEdit={false}\n          onChange={jest.fn()}\n          value=\"\"\n          error=\"\"\n          {...props}\n        />\n      </ThemeProvider>\n    )\n\n  beforeEach(() => {\n    mockBadgeCalls.length = 0\n    mockSettingsCalls.length = 0\n    mockCopy.mockReset()\n    mockPaste.mockReset()\n    mockSetToast.mockReset()\n  })\n\n  test('renders header and no words initially', () => {\n    renderComponent()\n    expect(screen.getByTestId('pp-icon')).toBeInTheDocument()\n    expect(screen.getByTestId('title')).toHaveTextContent('Recovery phrase')\n    expect(screen.getByTestId('words').children.length).toBe(0)\n  })\n\n  test('renders BadgeTextItem for each word in value', () => {\n    renderComponent({ value: 'alpha@ !beta ,.gamma' })\n    expect(screen.getAllByTestId('badge-item')).toHaveLength(3)\n    expect(mockBadgeCalls.map((c) => c.word)).toEqual([\n      'alpha@',\n      '!beta',\n      ',.gamma'\n    ])\n    expect(mockBadgeCalls.map((c) => c.count)).toEqual([1, 2, 3])\n  })\n\n  test('copy button copies when not create/edit', () => {\n    renderComponent({ value: 'one two' })\n    fireEvent.click(screen.getByTestId('passphrase-button-copy'))\n    expect(mockCopy).toHaveBeenCalledWith('one two')\n  })\n\n  test('paste button pastes, updates list, and calls onChange in create/edit', async () => {\n    const onChange = jest.fn()\n    const value =\n      'fo1o-1bar-3bam,.z-q#ux-quux-corge-gra.!ult-garpl&&!@y-waldo-!red-pl@ugh-%@xyzzy'\n    mockPaste.mockResolvedValueOnce(value) // 12 words\n    renderComponent({ isCreateOrEdit: true, onChange, value: '' })\n\n    fireEvent.click(screen.getByTestId('passphrase-button-paste'))\n\n    await waitFor(() => expect(onChange).toHaveBeenCalledWith(value))\n    expect(mockPaste).toHaveBeenCalledTimes(1)\n    // After paste we should have badges for words\n\n    const splittedVal = value.split('-')\n    expect(mockBadgeCalls.length).toBe(splittedVal.length)\n    mockBadgeCalls.forEach((c) => {\n      expect(c.word).toBe(splittedVal[c.count - 1])\n    })\n  })\n\n  test('renders settings in create/edit, disabled when words present', async () => {\n    mockPaste.mockResolvedValueOnce('a b c d e f g h i j k l') // 12 words\n    renderComponent({ isCreateOrEdit: true })\n\n    // Initially with zero words: settings shown and not disabled\n    expect(screen.getByTestId('settings')).toBeInTheDocument()\n    expect(mockSettingsCalls[0].isDisabled).toBe(false)\n\n    fireEvent.click(screen.getByTestId('passphrase-button-paste'))\n    await waitFor(() => expect(mockBadgeCalls.length).toBe(12))\n\n    const lastSettings = mockSettingsCalls[mockSettingsCalls.length - 1]\n    expect(lastSettings.isDisabled).toBe(true)\n  })\n\n  test('shows error text when error prop is provided', () => {\n    renderComponent({ error: 'Oops!' })\n    expect(screen.getByTestId('error-text')).toHaveTextContent('Oops!')\n  })\n\n  test('13 words: switch is on and radio selected to 12', () => {\n    const thirteen =\n      'one two three four five six seven eight nine ten eleven twelve rand'\n    renderComponent({ isCreateOrEdit: true, value: thirteen })\n\n    // Last settings props reflect current state\n    const last = mockSettingsCalls[mockSettingsCalls.length - 1]\n    expect(last.withRandomWord).toBe(true)\n    expect(last.selectedType).toBe(12)\n  })\n\n  test('25 words: switch is on and radio selected to 24', () => {\n    const twentyFive = 'a-b-c-d-!-@-g-h-i-j-k-l-(-)-o-p-q-r-s-3-u-v-w-x-y'\n\n    renderComponent({ isCreateOrEdit: true, value: twentyFive })\n\n    const last = mockSettingsCalls[mockSettingsCalls.length - 1]\n    expect(last.withRandomWord).toBe(true)\n    expect(last.selectedType).toBe(24)\n  })\n\n  test('after paste: settings are disabled', async () => {\n    mockPaste.mockResolvedValueOnce(\n      'one two three four five six seven eight nine ten eleven twelve'\n    )\n    renderComponent({ isCreateOrEdit: true })\n    fireEvent.click(screen.getByTestId('passphrase-button-paste'))\n    await waitFor(() => expect(mockBadgeCalls.length).toBe(12))\n    const last = mockSettingsCalls[mockSettingsCalls.length - 1]\n    expect(last.isDisabled).toBe(true)\n  })\n\n  test('shows error toast when pasting invalid word count', async () => {\n    const onChange = jest.fn()\n    mockPaste.mockResolvedValueOnce('one-two-three-four-five')\n    renderComponent({ isCreateOrEdit: true, onChange, value: '' })\n\n    fireEvent.click(screen.getByTestId('passphrase-button-paste'))\n\n    await waitFor(() => {\n      expect(mockSetToast).toHaveBeenCalledWith({\n        message: 'Only 12 or 24 words are allowed',\n        icon: expect.anything()\n      })\n    })\n\n    expect(onChange).not.toHaveBeenCalled()\n    expect(mockBadgeCalls.length).toBe(0)\n  })\n})\n"
  },
  {
    "path": "src/containers/PassPhrase/__tests__/PassPhraseSettings.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { PASSPHRASE_WORD_COUNTS } from '@tetherto/pearpass-lib-constants'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport '@testing-library/jest-dom'\n\nimport { PassPhraseSettings } from '../PassPhraseSettings'\n\njest.mock('../styles', () => ({\n  PassPraseSettingsContainer: ({ children }) => (\n    <div data-testid=\"settings-container\">{children}</div>\n  ),\n  PassPraseSettingsRandomWordContainer: ({ children }) => (\n    <div data-testid=\"random-word-container\">{children}</div>\n  ),\n  PassPraseSettingsRandomWordText: ({ children }) => (\n    <div data-testid=\"random-word-text\">{children}</div>\n  ),\n  SwitchWrapper: ({ children }) => (\n    <div data-testid=\"switch-wrapper\">{children}</div>\n  )\n}))\n\n// Mock i18n to handle translation with interpolation\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (key, values) => {\n        if (values?.count !== undefined) {\n          return `${values.count} words`\n        }\n        return key\n      }\n    }\n  })\n}))\n\n// Capture props passed into children\nconst mockRadioSelectSpy = jest.fn()\nconst mockSwitchWithLabelSpy = jest.fn()\n\njest.mock('../../../components/RadioSelect', () => ({\n  RadioSelect: (props) => {\n    mockRadioSelectSpy(props)\n    return (\n      <button data-testid=\"radio-select\" onClick={() => props.onChange(24)}>\n        {props.title}\n      </button>\n    )\n  }\n}))\n\njest.mock('../../../components/SwitchWithLabel', () => ({\n  SwitchWithLabel: (props) => {\n    mockSwitchWithLabelSpy(props)\n    return (\n      <button\n        data-testid=\"switch-with-label\"\n        onClick={() => props.onChange(true)}\n        disabled={props.disabled}\n      >\n        toggle\n      </button>\n    )\n  }\n}))\n\ndescribe('PassPhraseSettings', () => {\n  const renderComponent = (overrideProps = {}) => {\n    const defaultProps = {\n      selectedType: PASSPHRASE_WORD_COUNTS.STANDARD_12,\n      setSelectedType: jest.fn(),\n      withRandomWord: false,\n      setWithRandomWord: jest.fn(),\n      isDisabled: false\n    }\n\n    const props = { ...defaultProps, ...overrideProps }\n\n    const utils = render(\n      <ThemeProvider>\n        <PassPhraseSettings {...props} />\n      </ThemeProvider>\n    )\n\n    return { ...utils, props }\n  }\n\n  beforeEach(() => {\n    mockRadioSelectSpy.mockClear()\n    mockSwitchWithLabelSpy.mockClear()\n  })\n\n  test('renders and passes correct props to RadioSelect', () => {\n    const { props } = renderComponent()\n\n    const radio = screen.getByTestId('radio-select')\n    expect(radio).toBeInTheDocument()\n    expect(radio).toHaveTextContent('Type')\n\n    const passed = mockRadioSelectSpy.mock.calls[0][0]\n    expect(passed.selectedOption).toBe(props.selectedType)\n    expect(passed.disabled).toBe(false)\n    expect(passed.options.map((o) => o.value)).toEqual([\n      PASSPHRASE_WORD_COUNTS.STANDARD_12,\n      PASSPHRASE_WORD_COUNTS.STANDARD_24\n    ])\n    expect(passed.options.map((o) => o.label)).toEqual([\n      `${PASSPHRASE_WORD_COUNTS.STANDARD_12} words`,\n      `${PASSPHRASE_WORD_COUNTS.STANDARD_24} words`\n    ])\n  })\n\n  test('invokes setSelectedType when RadioSelect triggers onChange', () => {\n    const { props } = renderComponent()\n\n    fireEvent.click(screen.getByTestId('radio-select'))\n    expect(props.setSelectedType).toHaveBeenCalledWith(\n      PASSPHRASE_WORD_COUNTS.STANDARD_24\n    )\n  })\n\n  test('renders and toggles SwitchWithLabel', () => {\n    const { props } = renderComponent({ withRandomWord: false })\n\n    const passed = mockSwitchWithLabelSpy.mock.calls[0][0]\n    expect(passed.isOn).toBe(false)\n    expect(passed.disabled).toBe(false)\n\n    fireEvent.click(screen.getByTestId('switch-with-label'))\n    expect(props.setWithRandomWord).toHaveBeenCalledWith(true)\n  })\n\n  test('forwards disabled to children', () => {\n    renderComponent({ isDisabled: true })\n\n    const radioProps = mockRadioSelectSpy.mock.calls[0][0]\n    const switchProps = mockSwitchWithLabelSpy.mock.calls[0][0]\n    expect(radioProps.disabled).toBe(true)\n    expect(switchProps.disabled).toBe(true)\n  })\n})\n"
  },
  {
    "path": "src/containers/PassPhrase/index.js",
    "content": "import { useState, useEffect } from 'react'\n\nimport {\n  PASSPHRASE_WORD_COUNTS,\n  VALID_WORD_COUNTS,\n  DEFAULT_SELECTED_TYPE\n} from '@tetherto/pearpass-lib-constants'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { PassPhraseSettings } from './PassPhraseSettings'\nimport {\n  Container,\n  PassPhraseHeader,\n  HeaderText,\n  PasteButton,\n  CopyPasteText,\n  PassPhraseContainer,\n  ErrorContainer,\n  ErrorText\n} from './styles'\nimport { BadgeTextItem } from '../../components/BadgeTextItem'\nimport { CopyButton } from '../../components/CopyButton'\nimport { useToast } from '../../context/ToastContext'\nimport { usePasteFromClipboard } from '../../hooks/usePasteFromClipboard'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport {\n  PassPhraseIcon,\n  ErrorIcon,\n  PasteIcon\n} from '../../lib-react-components'\n/**\n * @param {{\n *  isCreateOrEdit: boolean,\n *  onChange: (value: string) => void,\n *  value: string,\n *  error: string,\n *  testId?: string\n * }} props\n */\n\nexport const PassPhrase = ({\n  isCreateOrEdit,\n  onChange,\n  value,\n  error,\n  testId\n}) => {\n  const { t } = useTranslation()\n  const { setToast } = useToast()\n  const [selectedType, setSelectedType] = useState(DEFAULT_SELECTED_TYPE)\n  const [withRandomWord, setWithRandomWord] = useState(false)\n  const [passphraseWords, setPassphraseWords] = useState([])\n\n  const { pasteFromClipboard } = usePasteFromClipboard()\n\n  const parsePassphraseText = (text) =>\n    text\n      .trim()\n      .split(/[-\\s]+/)\n      .map((word) => word.trim())\n      .filter((word) => word.length > 0)\n\n  const detectAndUpdateSettings = (words) => {\n    const wordCount = words.length\n    if (\n      wordCount === PASSPHRASE_WORD_COUNTS.STANDARD_12 ||\n      wordCount === PASSPHRASE_WORD_COUNTS.WITH_RANDOM_12\n    ) {\n      setSelectedType(PASSPHRASE_WORD_COUNTS.STANDARD_12)\n      setWithRandomWord(wordCount === PASSPHRASE_WORD_COUNTS.WITH_RANDOM_12)\n    } else if (\n      wordCount === PASSPHRASE_WORD_COUNTS.STANDARD_24 ||\n      wordCount === PASSPHRASE_WORD_COUNTS.WITH_RANDOM_24\n    ) {\n      setSelectedType(PASSPHRASE_WORD_COUNTS.STANDARD_24)\n      setWithRandomWord(wordCount === PASSPHRASE_WORD_COUNTS.WITH_RANDOM_24)\n    }\n  }\n\n  const isValidRange = (wordCount) =>\n    !wordCount || VALID_WORD_COUNTS.includes(wordCount)\n\n  const handlePasteFromClipboard = async () => {\n    const pastedText = await pasteFromClipboard()\n\n    if (pastedText) {\n      const words = parsePassphraseText(pastedText)\n      if (!isValidRange(words.length)) {\n        setToast({\n          message: t('Only 12 or 24 words are allowed'),\n          icon: ErrorIcon\n        })\n        return\n      }\n      setPassphraseWords(words)\n      detectAndUpdateSettings(words)\n      if (onChange) {\n        onChange(pastedText)\n      }\n    }\n  }\n\n  useEffect(() => {\n    if (value) {\n      const words = parsePassphraseText(value)\n      setPassphraseWords(words)\n      detectAndUpdateSettings(words)\n    }\n  }, [value])\n\n  const isCreateOrEditWithValidRange =\n    isCreateOrEdit && isValidRange(passphraseWords.length)\n  return html`\n    <${Container} data-testid=${testId}>\n      <${PassPhraseHeader}>\n        <${PassPhraseIcon} />\n        <${HeaderText}>${t('Recovery phrase 2')}<//>\n      <//>\n      <${PassPhraseContainer} data-testid=\"passphrase-words-container\">\n        ${passphraseWords.map(\n          (word, i) =>\n            html`<${BadgeTextItem}\n              testId=${`passphrase-word-${i + 1}`}\n              key=${`${word}-${i}`}\n              count=${i + 1}\n              word=${word || ''}\n            />`\n        )}\n      <//>\n\n      ${isCreateOrEdit\n        ? html`\n            <${PasteButton}\n              type=\"button\"\n              data-testid=\"passphrase-button-paste\"\n              withExtraBottomSpace=${!isCreateOrEditWithValidRange}\n              onClick=${handlePasteFromClipboard}\n            >\n              <${PasteIcon} color=${colors.primary400?.mode1} />\n              <${CopyPasteText}>${t('Paste from clipboard')}<//>\n            <//>\n          `\n        : html`\n            <div style=${{ display: 'flex', justifyContent: 'center' }}>\n              <${CopyButton}\n                value=${value}\n                testId=\"passphrase-button-copy\"\n                text=${t('Copy')}\n                color=${colors.primary400?.mode1}\n                withExtraBottomSpace=${!isCreateOrEditWithValidRange}\n              />\n            </div>\n          `}\n      ${isCreateOrEditWithValidRange &&\n      html`<${PassPhraseSettings}\n        testId=\"passphrase-settings\"\n        selectedType=${selectedType}\n        setSelectedType=${setSelectedType}\n        withRandomWord=${withRandomWord}\n        setWithRandomWord=${setWithRandomWord}\n        isDisabled=${!!passphraseWords.length}\n      />`}\n      ${!!error?.length &&\n      html`<${ErrorContainer}>\n        <${ErrorIcon} size=\"10\" />\n        <${ErrorText}>${error}<//>\n      <//>`}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/PassPhrase/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const PassPraseSettingsContainer = styled.div`\n  font-size: 12px;\n  background-color: ${({ theme }) => theme.colors.grey350.mode1};\n  border-radius: 10px;\n  padding: 10px;\n  gap: 15px;\n  display: flex;\n  flex-direction: column;\n`\n\nexport const PassPraseSettingsTitle = styled.div`\n  font-size: 14px;\n  font-weight: 400;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: Inter;\n`\n\nexport const PassPraseSettingsRandomWordContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n`\n\nexport const PassPraseSettingsRandomWordText = styled.div`\n  font-size: 12px;\n  font-weight: 400;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: Inter;\n`\n\nexport const SwitchWrapper = styled.div`\n  transform: scale(1.2);\n`\n\nexport const Container = styled.div`\n  background-color: ${({ theme }) => theme.colors.grey400?.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey100?.mode1};\n  border-radius: 10px;\n  padding: 10px;\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n`\n\nexport const PassPhraseHeader = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 10px;\n`\n\nexport const HeaderText = styled.span`\n  color: ${({ theme }) => theme.colors.white?.mode1};\n  font-family: Inter;\n  font-size: 12px;\n  font-weight: 400;\n`\n\nexport const PasteButton = styled.button`\n  display: flex;\n  flex-direction: row;\n  justify-content: center;\n  align-items: center;\n  gap: 10px;\n  color: ${({ theme }) => theme.colors.primary400?.mode1};\n  background: transparent;\n  border: none;\n  cursor: pointer;\n  margin-bottom: ${({ withExtraBottomSpace }) =>\n    withExtraBottomSpace ? '10px' : '0'};\n`\n\nexport const CopyPasteText = styled.span`\n  color: ${({ theme }) => theme.colors.primary400?.mode1};\n  font-family: Inter;\n  font-size: 14px;\n  text-align: center;\n  display: inline-flex;\n`\n\nexport const PassPhraseContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  row-gap: 15px;\n  justify-content: space-around;\n`\n\nexport const ErrorContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 5px;\n`\n\nexport const ErrorText = styled.span`\n  color: ${({ theme }) => theme.colors.categoryIdentity.mode1};\n  font-family: Inter;\n  font-size: 10px;\n  font-weight: 500;\n`\n"
  },
  {
    "path": "src/containers/RecordDetails/CreditCardDetailsForm/CreditCardDetailsFormV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/CreditCardDetailsForm/CreditCardDetailsFormV2.tsx",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport {\n  AttachmentField,\n  InputField,\n  MultiSlotInput,\n  PasswordField\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\n\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useModal } from '../../../context/ModalContext'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { DisplayPictureModalContentV2 } from '../../Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2'\nimport { createStyles } from './CreditCardDetailsFormV2.styles'\nimport { toReadOnlyFieldProps } from './utils'\n\ntype Attachment = {\n  id?: string\n  tempId?: string\n  name: string\n  buffer?: ArrayBuffer | Uint8Array\n}\n\ntype CustomField = {\n  type: string\n  name?: string\n  note?: string\n}\n\ntype CreditCardRecord = {\n  id: string\n  folder?: string\n  attachments?: Attachment[]\n  data: {\n    title?: string\n    name?: string\n    number?: string\n    expireDate?: string\n    securityCode?: string\n    pinCode?: string\n    note?: string\n    customFields?: CustomField[]\n  }\n}\n\ntype CreditCardDetailsFormV2Props = {\n  initialRecord?: CreditCardRecord\n  selectedFolder?: string\n}\n\ntype CreditCardDetailsFormValues = {\n  name: string\n  number: string\n  expireDate: string\n  securityCode: string\n  pinCode: string\n  note: string\n  customFields: CustomField[]\n  folder?: string\n  attachments: Attachment[]\n}\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp']\n\nconst getExtension = (filename?: string) =>\n  filename?.split('.').pop()?.toLowerCase() ?? ''\n\nexport const CreditCardDetailsFormV2 = ({\n  initialRecord,\n  selectedFolder\n}: CreditCardDetailsFormV2Props) => {\n  const { t } = useTranslation()\n  const styles = createStyles()\n  const { setModal } = useModal()\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const initialValues = useMemo<CreditCardDetailsFormValues>(\n    () => ({\n      name: initialRecord?.data?.name ?? '',\n      number: initialRecord?.data?.number ?? '',\n      expireDate: initialRecord?.data?.expireDate ?? '',\n      securityCode: initialRecord?.data?.securityCode ?? '',\n      pinCode: initialRecord?.data?.pinCode ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, setValues, values, setValue } = useForm({ initialValues })\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasName = !!values.name?.length\n  const hasNumber = !!values.number?.length\n  const hasExpireDate = !!values.expireDate?.length\n  const hasSecurityCode = !!values.securityCode?.length\n  const hasPinCode = !!values.pinCode?.length\n  const hasNote = !!values.note?.length\n  const hasCustomFields = !!values.customFields?.length\n  const hasAttachments = !!values.attachments?.length\n\n  const handleAttachmentPress = (attachment: Attachment) => {\n    if (!attachment?.buffer || !attachment?.name) return\n\n    const blob = new Blob([attachment.buffer as BlobPart])\n    const url = URL.createObjectURL(blob)\n    const isImage = IMAGE_EXTENSIONS.includes(getExtension(attachment.name))\n\n    if (isImage) {\n      setModal(\n        html`<${DisplayPictureModalContentV2}\n          url=${url}\n          name=${attachment.name}\n        />`\n      )\n      return\n    }\n\n    const a = document.createElement('a')\n    a.href = url\n    a.download = attachment.name\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  return (\n    <div style={styles.container}>\n      {(hasName ||\n        hasNumber ||\n        hasExpireDate ||\n        hasSecurityCode ||\n        hasPinCode) && (\n        <MultiSlotInput testID=\"card-details-multi-slot-input\">\n          {hasName && (\n            <InputField\n              label={t('Cardholder Name')}\n              placeholder={t('John Smith')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"card-details-multi-slot-input-slot-0\"\n              {...toReadOnlyFieldProps(register('name'))}\n            />\n          )}\n\n          {hasNumber && (\n            <InputField\n              label={t('Card Number')}\n              placeholder={t('1234 1234 1234 1234')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"card-details-multi-slot-input-slot-1\"\n              {...toReadOnlyFieldProps(register('number'))}\n            />\n          )}\n\n          {hasExpireDate && (\n            <InputField\n              label={t('Expiration Date')}\n              placeholder={t('MM YY')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"card-details-multi-slot-input-slot-2\"\n              {...toReadOnlyFieldProps(register('expireDate'))}\n            />\n          )}\n\n          {hasSecurityCode && (\n            <PasswordField\n              label={t('Security Code')}\n              placeholder={t('123')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"card-details-multi-slot-input-slot-3\"\n              {...toReadOnlyFieldProps(register('securityCode'))}\n            />\n          )}\n\n          {hasPinCode && (\n            <PasswordField\n              label={t('PIN')}\n              placeholder={t('1234')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"card-details-multi-slot-input-slot-4\"\n              {...toReadOnlyFieldProps(register('pinCode'))}\n            />\n          )}\n        </MultiSlotInput>\n      )}\n\n      {hasAttachments && (\n        <MultiSlotInput testID=\"attachments-multi-slot-input\">\n          {(values.attachments as Attachment[]).map((attachment, index) => (\n            <AttachmentField\n              key={attachment?.id || attachment?.tempId || attachment.name}\n              label={t('Attachment')}\n              value={attachment?.name ?? ''}\n              isGrouped\n              testID={`attachment-field-${index}`}\n              onClick={() => handleAttachmentPress(attachment)}\n            />\n          ))}\n        </MultiSlotInput>\n      )}\n\n      {hasNote && (\n        <MultiSlotInput testID=\"comments-multi-slot-input\">\n          <InputField\n            label={t('Comment')}\n            placeholder={t('Add comment')}\n            readOnly\n            copyable\n            onCopy={copyToClipboard}\n            isGrouped\n            testID=\"comments-multi-slot-input-slot-0\"\n            {...toReadOnlyFieldProps(register('note'))}\n          />\n        </MultiSlotInput>\n      )}\n\n      {hasCustomFields && (\n        <MultiSlotInput testID=\"hidden-messages-multi-slot-input\">\n          {(values.customFields as CustomField[]).map((field, index) => (\n            <PasswordField\n              key={`${field.type}-${index}`}\n              label={t('Hidden Message')}\n              value={field.note ?? ''}\n              placeholder={t('Enter Hidden Message')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID={`hidden-messages-multi-slot-input-slot-${index}`}\n            />\n          ))}\n        </MultiSlotInput>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/CreditCardDetailsForm/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { html } from 'htm/react'\n\nimport { CopyButton } from '../../../components/CopyButton'\nimport { FormGroup } from '../../../components/FormGroup'\nimport { FormWrapper } from '../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../components/InputFieldNote'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport {\n  CalendarIcon,\n  CreditCardIcon,\n  InputField,\n  NineDotsIcon,\n  PasswordField,\n  UserIcon\n} from '../../../lib-react-components'\nimport { AttachmentField } from '../../AttachmentField'\nimport { CustomFields } from '../../CustomFields'\n\n/**\n * @param {{\n *   initialRecord: {\n *   data: {\n *    title: string\n *    name: string\n *    number: string\n *    expireDate: string\n *    securityCode: string\n *    pinCode: string\n *    note: string\n *    customFields: {\n *       type: string\n *       name: string\n *    }[]\n *    attachments: { id: string, name: string}[]\n *  }\n * }\n *  selectedFolder?: string\n * }} props\n */\nexport const CreditCardDetailsForm = ({ initialRecord, selectedFolder }) => {\n  const { i18n } = useLingui()\n\n  const initialValues = React.useMemo(\n    () => ({\n      name: initialRecord?.data?.name ?? '',\n      number: initialRecord?.data?.number ?? '',\n      expireDate: initialRecord?.data?.expireDate ?? '',\n      securityCode: initialRecord?.data?.securityCode ?? '',\n      pinCode: initialRecord?.data?.pinCode ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, registerArray, setValues, values, setValue } = useForm({\n    initialValues\n  })\n\n  const { value: list, registerItem } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  return html`\n    <${FormWrapper}>\n      <${FormGroup}>\n        ${!!values?.name?.length &&\n        html`\n          <${InputField}\n            label=${i18n._('Full name')}\n            placeholder=${i18n._('Full name')}\n            variant=\"outline\"\n            icon=${UserIcon}\n            isDisabled\n            ...${register('name')}\n            additionalItems=${html` <${CopyButton} value=${values.name} /> `}\n          />\n        `}\n        ${!!values?.number?.length &&\n        html`\n          <${InputField}\n            label=${i18n._('Number on card')}\n            placeholder=\"1234 1234 1234 1234 \"\n            variant=\"outline\"\n            icon=${CreditCardIcon}\n            isDisabled\n            ...${register('number')}\n            value=${values.number.replace(/(.{4})/g, '$1 ').trim()}\n            additionalItems=${html`\n              <${CopyButton} value=${values.number.replace(/\\s/g, '')} />\n            `}\n          />\n        `}\n        ${!!values?.expireDate?.length &&\n        html`\n          <${InputField}\n            label=${i18n._('Date of expire')}\n            placeholder=\"MM YY\"\n            variant=\"outline\"\n            icon=${CalendarIcon}\n            isDisabled\n            ...${register('expireDate')}\n            additionalItems=${html`\n              <${CopyButton} value=${values.expireDate} />\n            `}\n          />\n        `}\n        ${!!values?.securityCode?.length &&\n        html`\n          <${PasswordField}\n            label=${i18n._('Security code')}\n            placeholder=\"123\"\n            variant=\"outline\"\n            icon=${CreditCardIcon}\n            isDisabled\n            ...${register('securityCode')}\n            additionalItems=${html`\n              <${CopyButton} value=${values.securityCode} />\n            `}\n          />\n        `}\n        ${!!values?.pinCode?.length &&\n        html`\n          <${PasswordField}\n            label=${i18n._('Pin code')}\n            placeholder=\"1234\"\n            variant=\"outline\"\n            icon=${NineDotsIcon}\n            isDisabled\n            ...${register('pinCode')}\n            additionalItems=${html` <${CopyButton} value=${values.pinCode} /> `}\n          />\n        `}\n      <//>\n\n      ${values?.attachments?.length > 0 &&\n      html`\n        <${FormGroup}>\n          ${values.attachments.map(\n            (attachment) => html`\n              <${AttachmentField}\n                label=${i18n._('File')}\n                attachment=${attachment}\n              />\n            `\n          )}\n        <//>\n      `}\n\n      <${FormGroup}>\n        ${!!values?.note?.length &&\n        html`\n          <${InputFieldNote}\n            isDisabled\n            ...${register('note')}\n            additionalItems=${html` <${CopyButton} value=${values.note} /> `}\n          />\n        `}\n      <//>\n\n      <${CustomFields}\n        areInputsDisabled=${true}\n        customFields=${list}\n        register=${registerItem}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/CreditCardDetailsForm/utils.ts",
    "content": "type FieldRegistration = {\n  name: string\n  value: string\n  onChange?: unknown\n  error?: string\n}\n\nexport const toReadOnlyFieldProps = (field: FieldRegistration) => ({\n  name: field.name,\n  value: field.value\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/CustomDetailsForm/CustomDetailsFormV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/CustomDetailsForm/CustomDetailsFormV2.tsx",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport {\n  AttachmentField,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\n\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useModal } from '../../../context/ModalContext'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { DisplayPictureModalContentV2 } from '../../Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2'\nimport { createStyles } from './CustomDetailsFormV2.styles'\n\ntype Attachment = {\n  id?: string\n  tempId?: string\n  name: string\n  buffer?: ArrayBuffer | Uint8Array\n}\n\ntype CustomField = {\n  type: string\n  name?: string\n  note?: string\n}\n\ntype CustomRecord = {\n  id: string\n  folder?: string\n  attachments?: Attachment[]\n  data: {\n    title?: string\n    note?: string\n    customFields?: CustomField[]\n  }\n}\n\ntype CustomDetailsFormV2Props = {\n  initialRecord?: CustomRecord\n  selectedFolder?: string\n}\n\ntype CustomDetailsFormValues = {\n  note: string\n  customFields: CustomField[]\n  folder?: string\n  attachments: Attachment[]\n}\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp']\n\nconst getExtension = (filename?: string) =>\n  filename?.split('.').pop()?.toLowerCase() ?? ''\n\nexport const CustomDetailsFormV2 = ({\n  initialRecord,\n  selectedFolder\n}: CustomDetailsFormV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles()\n  const { setModal } = useModal()\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const initialValues = useMemo<CustomDetailsFormValues>(\n    () => ({\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { setValues, values, setValue } = useForm({ initialValues })\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasCustomFields = !!values.customFields?.length\n  const hasAttachments = !!values.attachments?.length\n  const hasNote = !!(values.note as string)?.length\n\n  const handleAttachmentPress = (attachment: Attachment) => {\n    if (!attachment?.buffer || !attachment?.name) return\n\n    const blob = new Blob([attachment.buffer as BlobPart])\n    const url = URL.createObjectURL(blob)\n    const isImage = IMAGE_EXTENSIONS.includes(getExtension(attachment.name))\n\n    if (isImage) {\n      setModal(\n        html`<${DisplayPictureModalContentV2}\n          url=${url}\n          name=${attachment.name}\n        />`\n      )\n      return\n    }\n\n    const a = document.createElement('a')\n    a.href = url\n    a.download = attachment.name\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  return (\n    <div style={styles.container}>\n      {(hasAttachments || hasCustomFields || hasNote) && (\n        <div style={styles.section}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n\n          {hasNote && (\n            <MultiSlotInput testID=\"comments-multi-slot-input\">\n              <InputField\n                label={t('Comment')}\n                value={(values.note as string) ?? ''}\n                placeholder={t('Enter Comment')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"comments-multi-slot-input-slot-0\"\n              />\n            </MultiSlotInput>\n          )}\n\n          {hasAttachments && (\n            <MultiSlotInput testID=\"attachments-multi-slot-input\">\n              {(values.attachments as Attachment[]).map((attachment, index) => (\n                <AttachmentField\n                  key={attachment?.id || attachment?.tempId || attachment.name}\n                  label={t('Attachment')}\n                  value={attachment?.name ?? ''}\n                  isGrouped\n                  testID={`attachment-field-${index}`}\n                  onClick={() => handleAttachmentPress(attachment)}\n                />\n              ))}\n            </MultiSlotInput>\n          )}\n\n          {hasCustomFields && (\n            <MultiSlotInput testID=\"hidden-messages-multi-slot-input\">\n              {(values.customFields as CustomField[]).map((field, index) => (\n                <PasswordField\n                  key={`${field.type}-${index}`}\n                  label={t('Hidden Message')}\n                  value={field.note ?? ''}\n                  placeholder={t('Enter Hidden Message')}\n                  readOnly\n                  copyable\n                  onCopy={copyToClipboard}\n                  isGrouped\n                  testID={`hidden-messages-multi-slot-input-slot-${index}`}\n                />\n              ))}\n            </MultiSlotInput>\n          )}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/CustomDetailsForm/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { html } from 'htm/react'\n\nimport { FormGroup } from '../../../components/FormGroup'\nimport { FormWrapper } from '../../../components/FormWrapper'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { AttachmentField } from '../../AttachmentField'\nimport { CustomFields } from '../../CustomFields'\n\n/**\n *\n * @param {{\n *  initialRecord: {\n *    data: {\n *      title: string\n *      customFields: {\n *          note: string\n *          type: string\n *     }[]\n *    attachments: { id: string, name: string}[]\n *   }\n *  }\n *  selectedFolder?: string\n * }} props\n * @returns\n */\nexport const CustomDetailsForm = ({ initialRecord, selectedFolder }) => {\n  const { i18n } = useLingui()\n\n  const initialValues = React.useMemo(\n    () => ({\n      customFields: initialRecord?.data?.customFields || [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { registerArray, setValues, setValue, values } = useForm({\n    initialValues\n  })\n\n  const { value: list, registerItem } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  return html`\n    <${FormWrapper} data-id=\"custom-details\">\n      <${CustomFields}\n        areInputsDisabled=${true}\n        customFields=${list}\n        register=${registerItem}\n      />\n\n      ${values?.attachments?.length > 0 &&\n      html`\n        <${FormGroup}>\n          ${values.attachments.map(\n            (attachment) => html`\n              <${AttachmentField}\n                label=${i18n._('File')}\n                attachment=${attachment}\n              />\n            `\n          )}\n        <//>\n      `}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/IdentityDetailsForm/IdentityDetailsFormV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/IdentityDetailsForm/IdentityDetailsFormV2.tsx",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { DATE_FORMAT } from '@tetherto/pearpass-lib-constants'\nimport {\n  AttachmentField,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\n\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useModal } from '../../../context/ModalContext'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { DisplayPictureModalContentV2 } from '../../Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2'\nimport { createStyles } from './IdentityDetailsFormV2.styles'\nimport { toReadOnlyFieldProps } from './utils'\n\ntype Attachment = {\n  id?: string\n  tempId?: string\n  name: string\n  buffer?: ArrayBuffer | Uint8Array\n}\n\ntype CustomField = {\n  type: string\n  name?: string\n  note?: string\n}\n\ntype IdentityRecord = {\n  id: string\n  folder?: string\n  attachments?: Attachment[]\n  data: {\n    title?: string\n    fullName?: string\n    email?: string\n    phoneNumber?: string\n    address?: string\n    zip?: string\n    city?: string\n    region?: string\n    country?: string\n    note?: string\n    customFields?: CustomField[]\n    passportFullName?: string\n    passportNumber?: string\n    passportIssuingCountry?: string\n    passportDateOfIssue?: string\n    passportExpiryDate?: string\n    passportNationality?: string\n    passportDob?: string\n    passportGender?: string\n    passportPicture?: Attachment[]\n    idCardNumber?: string\n    idCardDateOfIssue?: string\n    idCardExpiryDate?: string\n    idCardIssuingCountry?: string\n    idCardPicture?: Attachment[]\n    drivingLicenseNumber?: string\n    drivingLicenseDateOfIssue?: string\n    drivingLicenseExpiryDate?: string\n    drivingLicenseIssuingCountry?: string\n    drivingLicensePicture?: Attachment[]\n  }\n}\n\ntype FileFieldName =\n  | 'attachments'\n  | 'passportPicture'\n  | 'idCardPicture'\n  | 'drivingLicensePicture'\n\ntype AttachmentSource = {\n  attachment: Attachment\n  fieldName: FileFieldName\n}\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp']\n\nconst getExtension = (filename?: string) =>\n  filename?.split('.').pop()?.toLowerCase() ?? ''\n\nconst getAttachmentKey = (\n  attachment: Pick<Attachment, 'id' | 'name'>,\n  fieldName: FileFieldName,\n  index: number\n) => {\n  if (attachment.id) return `id:${attachment.id}`\n  if (attachment.name) return `name:${attachment.name}`\n  return `${fieldName}:${index}`\n}\n\nconst buildIdentityAttachmentSources = (values: {\n  attachments?: Attachment[]\n  passportPicture?: Attachment[]\n  idCardPicture?: Attachment[]\n  drivingLicensePicture?: Attachment[]\n}): AttachmentSource[] => {\n  const sources: AttachmentSource[] = []\n  const indexByKey = new Map<string, number>()\n  const groups: Array<{ fieldName: FileFieldName; items: Attachment[] }> = [\n    { fieldName: 'attachments', items: values.attachments ?? [] },\n    { fieldName: 'passportPicture', items: values.passportPicture ?? [] },\n    { fieldName: 'idCardPicture', items: values.idCardPicture ?? [] },\n    { fieldName: 'drivingLicensePicture', items: values.drivingLicensePicture ?? [] }\n  ]\n\n  groups.forEach(({ fieldName, items }) => {\n    items.forEach((attachment, index) => {\n      const key = getAttachmentKey(attachment, fieldName, index)\n      const existing = indexByKey.get(key)\n      if (existing === undefined) {\n        indexByKey.set(key, sources.length)\n        sources.push({ attachment, fieldName })\n        return\n      }\n      const prev = sources[existing]\n      if (!prev.attachment.buffer && attachment.buffer) {\n        sources[existing] = {\n          ...prev,\n          attachment: { ...prev.attachment, ...attachment }\n        }\n      }\n    })\n  })\n\n  return sources\n}\n\ntype IdentityDetailsFormV2Props = {\n  initialRecord?: IdentityRecord\n  selectedFolder?: string\n}\n\ntype IdentityDetailsFormValues = {\n  fullName: string\n  email: string\n  phoneNumber: string\n  address: string\n  zip: string\n  city: string\n  region: string\n  country: string\n  note: string\n  customFields: CustomField[]\n  folder?: string\n  passportFullName: string\n  passportNumber: string\n  passportIssuingCountry: string\n  passportDateOfIssue: string\n  passportExpiryDate: string\n  passportNationality: string\n  passportDob: string\n  passportGender: string\n  passportPicture: Attachment[]\n  idCardNumber: string\n  idCardDateOfIssue: string\n  idCardExpiryDate: string\n  idCardIssuingCountry: string\n  idCardPicture: Attachment[]\n  drivingLicenseNumber: string\n  drivingLicenseDateOfIssue: string\n  drivingLicenseExpiryDate: string\n  drivingLicenseIssuingCountry: string\n  drivingLicensePicture: Attachment[]\n  attachments: Attachment[]\n}\n\nexport const IdentityDetailsFormV2 = ({\n  initialRecord,\n  selectedFolder\n}: IdentityDetailsFormV2Props) => {\n  const { t } = useTranslation()\n  const styles = createStyles()\n  const { setModal } = useModal()\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const initialValues = useMemo<IdentityDetailsFormValues>(\n    () => ({\n      fullName: initialRecord?.data?.fullName ?? '',\n      email: initialRecord?.data?.email ?? '',\n      phoneNumber: initialRecord?.data?.phoneNumber ?? '',\n      address: initialRecord?.data?.address ?? '',\n      zip: initialRecord?.data?.zip ?? '',\n      city: initialRecord?.data?.city ?? '',\n      region: initialRecord?.data?.region ?? '',\n      country: initialRecord?.data?.country ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      passportFullName: initialRecord?.data?.passportFullName ?? '',\n      passportNumber: initialRecord?.data?.passportNumber ?? '',\n      passportIssuingCountry: initialRecord?.data?.passportIssuingCountry ?? '',\n      passportDateOfIssue: initialRecord?.data?.passportDateOfIssue ?? '',\n      passportExpiryDate: initialRecord?.data?.passportExpiryDate ?? '',\n      passportNationality: initialRecord?.data?.passportNationality ?? '',\n      passportDob: initialRecord?.data?.passportDob ?? '',\n      passportGender: initialRecord?.data?.passportGender ?? '',\n      passportPicture: initialRecord?.data?.passportPicture ?? [],\n      idCardNumber: initialRecord?.data?.idCardNumber ?? '',\n      idCardDateOfIssue: initialRecord?.data?.idCardDateOfIssue ?? '',\n      idCardExpiryDate: initialRecord?.data?.idCardExpiryDate ?? '',\n      idCardIssuingCountry: initialRecord?.data?.idCardIssuingCountry ?? '',\n      idCardPicture: initialRecord?.data?.idCardPicture ?? [],\n      drivingLicenseNumber: initialRecord?.data?.drivingLicenseNumber ?? '',\n      drivingLicenseDateOfIssue:\n        initialRecord?.data?.drivingLicenseDateOfIssue ?? '',\n      drivingLicenseExpiryDate:\n        initialRecord?.data?.drivingLicenseExpiryDate ?? '',\n      drivingLicenseIssuingCountry:\n        initialRecord?.data?.drivingLicenseIssuingCountry ?? '',\n      drivingLicensePicture: initialRecord?.data?.drivingLicensePicture ?? [],\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, setValues, values, setValue } = useForm({ initialValues })\n\n  useGetMultipleFiles({\n    fieldNames: [\n      ATTACHMENTS_FIELD_KEY,\n      'passportPicture',\n      'idCardPicture',\n      'drivingLicensePicture'\n    ],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasPersonalInformation =\n    !!values.fullName?.length ||\n    !!values.email?.length ||\n    !!values.phoneNumber?.length\n\n  const hasAddress =\n    !!values.address?.length ||\n    !!values.zip?.length ||\n    !!values.city?.length ||\n    !!values.region?.length ||\n    !!values.country?.length\n\n  const hasPassport =\n    !!values.passportFullName?.length ||\n    !!values.passportNumber?.length ||\n    !!values.passportIssuingCountry?.length ||\n    !!values.passportDateOfIssue?.length ||\n    !!values.passportExpiryDate?.length ||\n    !!values.passportNationality?.length ||\n    !!values.passportDob?.length ||\n    !!values.passportGender?.length\n\n  const hasIdCard =\n    !!values.idCardNumber?.length ||\n    !!values.idCardDateOfIssue?.length ||\n    !!values.idCardExpiryDate?.length ||\n    !!values.idCardIssuingCountry?.length\n\n  const hasDrivingLicense =\n    !!values.drivingLicenseNumber?.length ||\n    !!values.drivingLicenseDateOfIssue?.length ||\n    !!values.drivingLicenseExpiryDate?.length ||\n    !!values.drivingLicenseIssuingCountry?.length\n\n  const attachmentSources = useMemo(\n    () =>\n      buildIdentityAttachmentSources({\n        attachments: values.attachments,\n        passportPicture: values.passportPicture,\n        idCardPicture: values.idCardPicture,\n        drivingLicensePicture: values.drivingLicensePicture\n      }),\n    [\n      values.attachments,\n      values.passportPicture,\n      values.idCardPicture,\n      values.drivingLicensePicture\n    ]\n  )\n  const hasAttachments = attachmentSources.length > 0\n\n  const hasNote = !!values.note?.length\n  const hasCustomFields = !!values.customFields?.length\n\n  const handleAttachmentPress = (attachment: Attachment) => {\n    if (!attachment?.buffer || !attachment?.name) return\n\n    const blob = new Blob([attachment.buffer as BlobPart])\n    const url = URL.createObjectURL(blob)\n    const isImage = IMAGE_EXTENSIONS.includes(getExtension(attachment.name))\n\n    if (isImage) {\n      setModal(\n        html`<${DisplayPictureModalContentV2}\n          url=${url}\n          name=${attachment.name}\n        />`\n      )\n      return\n    }\n\n    const a = document.createElement('a')\n    a.href = url\n    a.download = attachment.name\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  return (\n    <div style={styles.container}>\n      {hasPersonalInformation && (\n        <div style={styles.section}>\n          <Text variant=\"caption\">{t('Personal Information')}</Text>\n\n          <MultiSlotInput testID=\"personal-information-multi-slot-input\">\n            {!!values.fullName?.length && (\n              <InputField\n                label={t('Full Name')}\n                placeholder={t('John Smith')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"personal-information-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('fullName'))}\n              />\n            )}\n\n            {!!values.email?.length && (\n              <InputField\n                label={t('Email')}\n                placeholder={t('Insert email')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"personal-information-multi-slot-input-slot-1\"\n                {...toReadOnlyFieldProps(register('email'))}\n              />\n            )}\n\n            {!!values.phoneNumber?.length && (\n              <InputField\n                label={t('Phone Number')}\n                placeholder={t('Insert phone number')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"personal-information-multi-slot-input-slot-2\"\n                {...toReadOnlyFieldProps(register('phoneNumber'))}\n              />\n            )}\n          </MultiSlotInput>\n        </div>\n      )}\n\n      {hasAddress && (\n        <div style={styles.section}>\n          <Text variant=\"caption\">{t('Address')}</Text>\n\n          <MultiSlotInput testID=\"address-multi-slot-input\">\n            {!!values.address?.length && (\n              <InputField\n                label={t('Address')}\n                placeholder={t('Insert address')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"address-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('address'))}\n              />\n            )}\n\n            {!!values.zip?.length && (\n              <InputField\n                label={t('ZIP')}\n                placeholder={t('Insert ZIP')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"address-multi-slot-input-slot-1\"\n                {...toReadOnlyFieldProps(register('zip'))}\n              />\n            )}\n\n            {!!values.city?.length && (\n              <InputField\n                label={t('City')}\n                placeholder={t('Insert city')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"address-multi-slot-input-slot-2\"\n                {...toReadOnlyFieldProps(register('city'))}\n              />\n            )}\n\n            {!!values.region?.length && (\n              <InputField\n                label={t('Region')}\n                placeholder={t('Insert region')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"address-multi-slot-input-slot-3\"\n                {...toReadOnlyFieldProps(register('region'))}\n              />\n            )}\n\n            {!!values.country?.length && (\n              <InputField\n                label={t('Country')}\n                placeholder={t('Insert country')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"address-multi-slot-input-slot-4\"\n                {...toReadOnlyFieldProps(register('country'))}\n              />\n            )}\n          </MultiSlotInput>\n        </div>\n      )}\n\n      {hasPassport && (\n        <div style={styles.section}>\n          <Text variant=\"caption\">{t('Passport')}</Text>\n\n          <MultiSlotInput testID=\"passport-multi-slot-input\">\n            {!!values.passportFullName?.length && (\n              <InputField\n                label={t('Full Name')}\n                placeholder={t('John Smith')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('passportFullName'))}\n              />\n            )}\n\n            {!!values.passportNumber?.length && (\n              <InputField\n                label={t('Passport Number')}\n                placeholder={t('Insert numbers')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-1\"\n                {...toReadOnlyFieldProps(register('passportNumber'))}\n              />\n            )}\n\n            {!!values.passportIssuingCountry?.length && (\n              <InputField\n                label={t('Issuing Country')}\n                placeholder={t('Insert country')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-2\"\n                {...toReadOnlyFieldProps(register('passportIssuingCountry'))}\n              />\n            )}\n\n            {!!values.passportDateOfIssue?.length && (\n              <InputField\n                label={t('Date of Issue')}\n                placeholder={DATE_FORMAT}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-3\"\n                {...toReadOnlyFieldProps(register('passportDateOfIssue'))}\n              />\n            )}\n\n            {!!values.passportExpiryDate?.length && (\n              <InputField\n                label={t('Expiry Date')}\n                placeholder={DATE_FORMAT}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-4\"\n                {...toReadOnlyFieldProps(register('passportExpiryDate'))}\n              />\n            )}\n\n            {!!values.passportNationality?.length && (\n              <InputField\n                label={t('Nationality')}\n                placeholder={t('Insert your nationality')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-5\"\n                {...toReadOnlyFieldProps(register('passportNationality'))}\n              />\n            )}\n\n            {!!values.passportDob?.length && (\n              <InputField\n                label={t('Date of Birth')}\n                placeholder={DATE_FORMAT}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-6\"\n                {...toReadOnlyFieldProps(register('passportDob'))}\n              />\n            )}\n\n            {!!values.passportGender?.length && (\n              <InputField\n                label={t('Gender')}\n                placeholder={t('M/F')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"passport-multi-slot-input-slot-7\"\n                {...toReadOnlyFieldProps(register('passportGender'))}\n              />\n            )}\n          </MultiSlotInput>\n        </div>\n      )}\n\n      {hasIdCard && (\n        <div style={styles.section}>\n          <Text variant=\"caption\">{t('Identity Card')}</Text>\n\n          <MultiSlotInput testID=\"identity-card-multi-slot-input\">\n            {!!values.idCardNumber?.length && (\n              <InputField\n                label={t('ID Number')}\n                placeholder={t('123456789')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"identity-card-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('idCardNumber'))}\n              />\n            )}\n\n            {!!values.idCardDateOfIssue?.length && (\n              <InputField\n                label={t('Creation Date')}\n                placeholder={DATE_FORMAT}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"identity-card-multi-slot-input-slot-1\"\n                {...toReadOnlyFieldProps(register('idCardDateOfIssue'))}\n              />\n            )}\n\n            {!!values.idCardExpiryDate?.length && (\n              <InputField\n                label={t('Expiry Date')}\n                placeholder={DATE_FORMAT}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"identity-card-multi-slot-input-slot-2\"\n                {...toReadOnlyFieldProps(register('idCardExpiryDate'))}\n              />\n            )}\n\n            {!!values.idCardIssuingCountry?.length && (\n              <InputField\n                label={t('Issuing Country')}\n                placeholder={t('Insert country')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"identity-card-multi-slot-input-slot-3\"\n                {...toReadOnlyFieldProps(register('idCardIssuingCountry'))}\n              />\n            )}\n          </MultiSlotInput>\n        </div>\n      )}\n\n      {hasDrivingLicense && (\n        <div style={styles.section}>\n          <Text variant=\"caption\">{t('Driving License')}</Text>\n\n          <MultiSlotInput testID=\"driving-license-multi-slot-input\">\n            {!!values.drivingLicenseNumber?.length && (\n              <InputField\n                label={t('ID Number')}\n                placeholder={t('123456789')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"driving-license-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('drivingLicenseNumber'))}\n              />\n            )}\n\n            {!!values.drivingLicenseDateOfIssue?.length && (\n              <InputField\n                label={t('Creation Date')}\n                placeholder={DATE_FORMAT}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"driving-license-multi-slot-input-slot-1\"\n                {...toReadOnlyFieldProps(register('drivingLicenseDateOfIssue'))}\n              />\n            )}\n\n            {!!values.drivingLicenseExpiryDate?.length && (\n              <InputField\n                label={t('Expiry Date')}\n                placeholder={DATE_FORMAT}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"driving-license-multi-slot-input-slot-2\"\n                {...toReadOnlyFieldProps(register('drivingLicenseExpiryDate'))}\n              />\n            )}\n\n            {!!values.drivingLicenseIssuingCountry?.length && (\n              <InputField\n                label={t('Issuing Country')}\n                placeholder={t('Insert country')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"driving-license-multi-slot-input-slot-3\"\n                {...toReadOnlyFieldProps(\n                  register('drivingLicenseIssuingCountry')\n                )}\n              />\n            )}\n          </MultiSlotInput>\n        </div>\n      )}\n\n      {hasAttachments && (\n        <div style={styles.section}>\n          <Text variant=\"caption\">{t('Attachments')}</Text>\n\n          <MultiSlotInput testID=\"attachments-multi-slot-input\">\n            {attachmentSources.map(({ attachment }, index) => (\n              <AttachmentField\n                key={\n                  attachment?.id ||\n                  attachment?.tempId ||\n                  attachment.name ||\n                  `attachment-${index}`\n                }\n                label={t('Attachment')}\n                value={attachment?.name ?? ''}\n                isGrouped\n                testID={`attachment-field-${index}`}\n                onClick={() => handleAttachmentPress(attachment)}\n              />\n            ))}\n          </MultiSlotInput>\n        </div>\n      )}\n      {(hasNote || hasCustomFields) && (\n        <div style={styles.section}>\n          <Text variant=\"caption\">{t('Additional')}</Text>\n\n          {hasNote && (\n            <MultiSlotInput testID=\"comments-multi-slot-input\">\n              <InputField\n                label={t('Comment')}\n                placeholder={t('Enter Comment')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"comments-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('note'))}\n              />\n            </MultiSlotInput>\n          )}\n\n          {hasCustomFields && (\n            <MultiSlotInput testID=\"hidden-messages-multi-slot-input\">\n              {(values.customFields as CustomField[]).map((field, index) => (\n                <PasswordField\n                  key={`${field.type}-${index}`}\n                  label={t('Hidden Message')}\n                  value={field.note ?? ''}\n                  placeholder={t('Enter Hidden Message')}\n                  readOnly\n                  copyable\n                  onCopy={copyToClipboard}\n                  isGrouped\n                  testID={`hidden-messages-multi-slot-input-slot-${index}`}\n                />\n              ))}\n            </MultiSlotInput>\n          )}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/IdentityDetailsForm/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { DATE_FORMAT } from '@tetherto/pearpass-lib-constants'\nimport { html } from 'htm/react'\n\nimport { CopyButton } from '../../../components/CopyButton'\nimport { FormGroup } from '../../../components/FormGroup'\nimport { FormWrapper } from '../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../components/InputFieldNote'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport {\n  EmailIcon,\n  InputField,\n  PhoneIcon,\n  UserIcon\n} from '../../../lib-react-components'\nimport { AttachmentField } from '../../AttachmentField'\nimport { CustomFields } from '../../CustomFields'\nimport { ImagesField } from '../../ImagesField'\n\n/**\n * @param {{\n *   initialRecord: {\n *    data: {\n *     title: string\n *     fullName: string\n *     email: string\n *     phoneNumber: string\n *     address: string\n *     zip: string\n *     city: string\n *     region: string\n *     country: string\n *     note: string\n *     customFields: {\n *       note: string\n *       type: string\n *     }[]\n *     attachments: { id: string, name: string}[]\n *   }\n *  }\n *  selectedFolder?: string\n * }} props\n */\nexport const IdentityDetailsForm = ({ initialRecord, selectedFolder }) => {\n  const { i18n } = useLingui()\n  const initialValues = React.useMemo(\n    () => ({\n      fullName: initialRecord?.data?.fullName ?? '',\n      email: initialRecord?.data?.email ?? '',\n      phoneNumber: initialRecord?.data?.phoneNumber ?? '',\n      address: initialRecord?.data?.address ?? '',\n      zip: initialRecord?.data?.zip ?? '',\n      city: initialRecord?.data?.city ?? '',\n      region: initialRecord?.data?.region ?? '',\n      country: initialRecord?.data?.country ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields || [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      passportFullName: initialRecord?.data?.passportFullName ?? '',\n      passportNumber: initialRecord?.data?.passportNumber ?? '',\n      passportIssuingCountry: initialRecord?.data?.passportIssuingCountry ?? '',\n      passportDateOfIssue: initialRecord?.data?.passportDateOfIssue ?? '',\n      passportExpiryDate: initialRecord?.data?.passportExpiryDate ?? '',\n      passportNationality: initialRecord?.data?.passportNationality ?? '',\n      passportDob: initialRecord?.data?.passportDob ?? '',\n      passportGender: initialRecord?.data?.passportGender ?? '',\n      passportPicture: initialRecord?.data?.passportPicture ?? [],\n      idCardNumber: initialRecord?.data?.idCardNumber ?? '',\n      idCardDateOfIssue: initialRecord?.data?.idCardDateOfIssue ?? '',\n      idCardExpiryDate: initialRecord?.data?.idCardExpiryDate ?? '',\n      idCardIssuingCountry: initialRecord?.data?.idCardIssuingCountry ?? '',\n      idCardPicture: initialRecord?.data?.idCardPicture ?? [],\n      drivingLicenseNumber: initialRecord?.data?.drivingLicenseNumber ?? '',\n      drivingLicenseDateOfIssue:\n        initialRecord?.data?.drivingLicenseDateOfIssue ?? '',\n      drivingLicenseExpiryDate:\n        initialRecord?.data?.drivingLicenseExpiryDate ?? '',\n      drivingLicenseIssuingCountry:\n        initialRecord?.data?.drivingLicenseIssuingCountry ?? '',\n      drivingLicensePicture: initialRecord?.data?.drivingLicensePicture ?? [],\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, registerArray, setValues, values, setValue } = useForm({\n    initialValues\n  })\n\n  const { value: list, registerItem } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [\n      ATTACHMENTS_FIELD_KEY,\n      'passportPicture',\n      'idCardPicture',\n      'drivingLicensePicture'\n    ],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasFullName = !!values?.fullName?.length\n  const hasEmail = !!values?.email?.length\n  const hasPhoneNumber = !!values?.phoneNumber?.length\n  const hasAddress = !!values?.address?.length\n  const hasZip = !!values?.zip?.length\n  const hasCity = !!values?.city?.length\n  const hasRegion = !!values?.region?.length\n  const hasCountry = !!values?.country?.length\n  const hasNote = !!values?.note?.length\n  const hasCustomFields = !!list.length\n  const hasPassportFullName = !!values?.passportFullName?.length\n  const hasPassportNumber = !!values?.passportNumber?.length\n  const hasPassportIssuingCountry = !!values?.passportIssuingCountry?.length\n  const hasPassportDateOfIssue = !!values?.passportDateOfIssue?.length\n  const hasPassportExpiryDate = !!values?.passportExpiryDate?.length\n  const hasPassportNationality = !!values?.passportNationality?.length\n  const hasPassportDob = !!values?.passportDob?.length\n  const hasPassportGender = !!values?.passportGender?.length\n  const hasPassportPicture = !!values?.passportPicture?.length\n  const hasIdCardNumber = !!values?.idCardNumber?.length\n  const hasIdCardDateOfIssue = !!values?.idCardDateOfIssue?.length\n  const hasIdCardExpiryDate = !!values?.idCardExpiryDate?.length\n  const hasIdCardIssuingCountry = !!values?.idCardIssuingCountry?.length\n  const hasIdCardPicture = !!values?.idCardPicture?.length\n  const hasDrivingLicenseNumber = !!values?.drivingLicenseNumber?.length\n  const hasDrivingLicenseDateOfIssue =\n    !!values?.drivingLicenseDateOfIssue?.length\n  const hasDrivingLicenseExpiryDate = !!values?.drivingLicenseExpiryDate?.length\n  const hasDrivingLicenseIssuingCountry =\n    !!values?.drivingLicenseIssuingCountry?.length\n  const hasDrivingLicensePicture = !!values?.drivingLicensePicture?.length\n\n  const hasPassport =\n    hasPassportFullName ||\n    hasPassportNumber ||\n    hasPassportIssuingCountry ||\n    hasPassportDateOfIssue ||\n    hasPassportExpiryDate ||\n    hasPassportNationality ||\n    hasPassportDob ||\n    hasPassportGender ||\n    hasPassportPicture\n\n  const hasIdCard =\n    hasIdCardNumber ||\n    hasIdCardDateOfIssue ||\n    hasIdCardExpiryDate ||\n    hasIdCardIssuingCountry ||\n    hasIdCardPicture\n\n  const hasDrivingLicense =\n    hasDrivingLicenseNumber ||\n    hasDrivingLicenseDateOfIssue ||\n    hasDrivingLicenseExpiryDate ||\n    hasDrivingLicenseIssuingCountry ||\n    hasDrivingLicensePicture\n\n  return html`\n    <${FormWrapper}>\n      ${(hasFullName || hasEmail || hasPhoneNumber) &&\n      html` <${FormGroup}\n        testId=\"identitydetails-section-personalinfo\"\n        title=${i18n._('Personal information')}\n        isCollapse\n      >\n        ${!!values?.fullName?.length &&\n        html`\n          <${InputField}\n            testId=\"identitydetails-field-fullname\"\n            label=${i18n._('Full name')}\n            placeholder=${i18n._('Full name')}\n            variant=\"outline\"\n            icon=${UserIcon}\n            isDisabled\n            ...${register('fullName')}\n            additionalItems=${html`\n              <${CopyButton} value=${values.fullName} />\n            `}\n          />\n        `}\n        ${!!values?.email?.length &&\n        html` <${InputField}\n          testId=\"identitydetails-field-email\"\n          label=${i18n._('Email')}\n          placeholder=${i18n._('Insert email')}\n          variant=\"outline\"\n          icon=${EmailIcon}\n          isDisabled\n          ...${register('email')}\n          additionalItems=${html` <${CopyButton} value=${values.email} /> `}\n        />`}\n        ${!!values?.phoneNumber?.length &&\n        html`\n          <${InputField}\n            testId=\"identitydetails-field-phonenumber\"\n            label=${i18n._('Phone number ')}\n            placeholder=${i18n._('Phone number ')}\n            variant=\"outline\"\n            icon=${PhoneIcon}\n            isDisabled\n            ...${register('phoneNumber')}\n            additionalItems=${html`\n              <${CopyButton} value=${values.phoneNumber} />\n            `}\n          />\n        `}\n      <//>`}\n      ${(hasAddress || hasZip || hasCity || hasRegion || hasCountry) &&\n      html`\n        <${FormGroup}\n          testId=\"identitydetails-section-address\"\n          title=${i18n._('Detail of address')}\n          isCollapse\n        >\n          ${!!values?.address?.length &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-address\"\n              label=${i18n._('Address')}\n              placeholder=${i18n._('Address')}\n              variant=\"outline\"\n              isDisabled\n              ...${register('address')}\n              additionalItems=${html`\n                <${CopyButton} value=${values.address} />\n              `}\n            />\n          `}\n          ${!!values?.zip?.length &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-zip\"\n              label=${i18n._('ZIP')}\n              placeholder=${i18n._('Insert zip')}\n              variant=\"outline\"\n              isDisabled\n              ...${register('zip')}\n              additionalItems=${html` <${CopyButton} value=${values.zip} /> `}\n            />\n          `}\n          ${!!values?.city?.length &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-city\"\n              label=${i18n._('City')}\n              placeholder=${i18n._('City')}\n              variant=\"outline\"\n              isDisabled\n              ...${register('city')}\n              additionalItems=${html` <${CopyButton} value=${values.city} /> `}\n            />\n          `}\n          ${!!values?.region?.length &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-region\"\n              label=${i18n._('Region')}\n              placeholder=${i18n._('Region')}\n              variant=\"outline\"\n              isDisabled\n              ...${register('region')}\n              additionalItems=${html`\n                <${CopyButton} value=${values.region} />\n              `}\n            />\n          `}\n          ${!!values?.country?.length &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-country\"\n              label=${i18n._('Country')}\n              placeholder=${i18n._('Country')}\n              variant=\"outline\"\n              isDisabled\n              ...${register('country')}\n              additionalItems=${html`\n                <${CopyButton} value=${values.country} />\n              `}\n            />\n          `}\n        <//>\n      `}\n      ${hasPassport &&\n      html`\n        <${FormGroup}\n          testId=\"identitydetails-section-passport\"\n          title=${i18n._('Passport')}\n          isCollapse\n        >\n          <div>\n            ${hasPassportFullName &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportfullname\"\n                label=${i18n._('Full name')}\n                placeholder=${i18n._('John Smith')}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportFullName')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportFullName} />\n                `}\n              />\n            `}\n            ${hasPassportNumber &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportnumber\"\n                label=${i18n._('Passport number')}\n                placeholder=${i18n._('Insert numbers')}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportNumber')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportNumber} />\n                `}\n              />\n            `}\n            ${hasPassportIssuingCountry &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportissuingcountry\"\n                label=${i18n._('Issuing country')}\n                placeholder=${i18n._('Insert country')}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportIssuingCountry')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportIssuingCountry} />\n                `}\n              />\n            `}\n            ${hasPassportDateOfIssue &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportdateofissue\"\n                label=${i18n._('Date of issue')}\n                placeholder=${DATE_FORMAT}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportDateOfIssue')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportDateOfIssue} />\n                `}\n              />\n            `}\n            ${hasPassportExpiryDate &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportexpirydate\"\n                label=${i18n._('Expiry date')}\n                placeholder=${DATE_FORMAT}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportExpiryDate')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportExpiryDate} />\n                `}\n              />\n            `}\n            ${hasPassportNationality &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportnationality\"\n                label=${i18n._('Nationality')}\n                placeholder=${i18n._('Insert your nationality')}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportNationality')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportNationality} />\n                `}\n              />\n            `}\n            ${hasPassportDob &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportdob\"\n                label=${i18n._('Date of birth')}\n                placeholder=${DATE_FORMAT}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportDob')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportDob} />\n                `}\n              />\n            `}\n            ${hasPassportGender &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-passportgender\"\n                label=${i18n._('Gender')}\n                placeholder=${i18n._('M/F')}\n                variant=\"outline\"\n                isDisabled\n                ...${register('passportGender')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.passportGender} />\n                `}\n              />\n            `}\n          <//>\n          ${hasPassportPicture &&\n          html` <${ImagesField}\n            testId=\"identitydetails-imagesfield-passport\"\n            title=${i18n._('Passport Images')}\n            pictures=${values.passportPicture}\n          />`}\n        <//>\n      `}\n      ${hasIdCard &&\n      html`\n        <${FormGroup}\n          testId=\"identitydetails-section-idcard\"\n          title=${i18n._('Identity Card')}\n          isCollapse\n        >\n          <div>\n            ${hasIdCardNumber &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-idcardnumber\"\n                label=${i18n._('ID card number')}\n                placeholder=\"123456789\"\n                variant=\"outline\"\n                isDisabled\n                ...${register('idCardNumber')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.idCardNumber} />\n                `}\n              />\n            `}\n            ${hasIdCardDateOfIssue &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-idcarddateofissue\"\n                label=${i18n._('Creation date')}\n                placeholder=${DATE_FORMAT}\n                variant=\"outline\"\n                isDisabled\n                ...${register('idCardDateOfIssue')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.idCardDateOfIssue} />\n                `}\n              />\n            `}\n            ${hasIdCardExpiryDate &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-idcardexpirydate\"\n                label=${i18n._('Expiry date')}\n                placeholder=${DATE_FORMAT}\n                variant=\"outline\"\n                isDisabled\n                ...${register('idCardExpiryDate')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.idCardExpiryDate} />\n                `}\n              />\n            `}\n            ${hasIdCardIssuingCountry &&\n            html`\n              <${InputField}\n                testId=\"identitydetails-field-idcardissuingcountry\"\n                label=${i18n._('Issuing country')}\n                placeholder=${i18n._('Insert country')}\n                variant=\"outline\"\n                isDisabled\n                ...${register('idCardIssuingCountry')}\n                additionalItems=${html`\n                  <${CopyButton} value=${values.idCardIssuingCountry} />\n                `}\n              />\n            `}\n          <//>\n          ${hasIdCardPicture &&\n          html` <${ImagesField}\n            testId=\"identitydetails-imagesfield-idcard\"\n            title=${i18n._('Identity Card Images')}\n            pictures=${values.idCardPicture}\n          />`}\n        <//>\n      `}\n      ${hasDrivingLicense &&\n      html` <${FormGroup}\n        testId=\"identitydetails-section-drivinglicense\"\n        title=${i18n._('Driving license')}\n        isCollapse\n      >\n        <div>\n          ${hasDrivingLicenseNumber &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-drivinglicensenumber\"\n              label=${i18n._('Driving license number')}\n              placeholder=\"123456789\"\n              variant=\"outline\"\n              isDisabled\n              ...${register('drivingLicenseNumber')}\n              additionalItems=${html`\n                <${CopyButton} value=${values.drivingLicenseNumber} />\n              `}\n            />\n          `}\n          ${hasDrivingLicenseDateOfIssue &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-drivinglicensedateofissue\"\n              label=${i18n._('Creation date')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              isDisabled\n              ...${register('drivingLicenseDateOfIssue')}\n              additionalItems=${html`\n                <${CopyButton} value=${values.drivingLicenseDateOfIssue} />\n              `}\n            />\n          `}\n          ${hasDrivingLicenseExpiryDate &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-drivinglicenseexpirydate\"\n              label=${i18n._('Expiry date')}\n              placeholder=${DATE_FORMAT}\n              variant=\"outline\"\n              isDisabled\n              ...${register('drivingLicenseExpiryDate')}\n              additionalItems=${html`\n                <${CopyButton} value=${values.drivingLicenseExpiryDate} />\n              `}\n            />\n          `}\n          ${hasDrivingLicenseIssuingCountry &&\n          html`\n            <${InputField}\n              testId=\"identitydetails-field-drivinglicenseissuingcountry\"\n              label=${i18n._('Issuing country')}\n              placeholder=${i18n._('Insert country')}\n              variant=\"outline\"\n              isDisabled\n              ...${register('drivingLicenseIssuingCountry')}\n              additionalItems=${html`\n                <${CopyButton} value=${values.drivingLicenseIssuingCountry} />\n              `}\n            />\n          `}\n        <//>\n        ${hasDrivingLicensePicture &&\n        html` <${ImagesField}\n          testId=\"identitydetails-imagesfield-drivinglicense\"\n          title=${i18n._('Driving License Images')}\n          pictures=${values.drivingLicensePicture}\n        />`}\n      <//>`}\n      ${values?.attachments?.length > 0 &&\n      html`\n        <${FormGroup}>\n          ${values.attachments.map(\n            (attachment) => html`\n              <${AttachmentField}\n                testId=\"identitydetails-attachment\"\n                label=${i18n._('File')}\n                attachment=${attachment}\n              />\n            `\n          )}\n        <//>\n      `}\n      ${hasNote &&\n      html`\n        <${FormGroup}>\n          <${InputFieldNote}\n            testId=\"identitydetails-field-note\"\n            isDisabled\n            ...${register('note')}\n            additionalItems=${html` <${CopyButton} value=${values.note} /> `}\n          />\n        <//>\n      `}\n      ${hasCustomFields &&\n      html`\n        <${FormGroup}>\n          <${CustomFields}\n            areInputsDisabled=${true}\n            customFields=${list}\n            register=${registerItem}\n          />\n        <//>\n      `}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/IdentityDetailsForm/utils.ts",
    "content": "type FieldRegistration = {\n  name: string\n  value: string\n  onChange?: unknown\n  error?: string\n}\n\nexport const toReadOnlyFieldProps = (field: FieldRegistration) => ({\n  name: field.name,\n  value: field.value\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/LoginRecordDetailsForm/LoginRecordDetailsFormV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    justifyContent: 'space-between' as const,\n    gap: `${rawTokens.spacing16}px`,\n    width: '100%'\n  },\n  topContent: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/LoginRecordDetailsForm/LoginRecordDetailsFormV2.tsx",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\n// @ts-ignore - declaration file is missing\nimport { isBefore, subtractDateUnits } from '@tetherto/pear-apps-utils-date'\nimport {\n  AlertMessage,\n  AttachmentField,\n  Button,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { OpenInNew } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { html } from 'htm/react'\n\nimport { OtpCodeFieldV2 } from '../../../components/OtpCodeFieldV2'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useModal } from '../../../context/ModalContext'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { addHttps } from '../../../utils/addHttps'\nimport { formatPasskeyDate } from '../../../utils/formatPasskeyDate'\nimport { isPasswordChangeReminderDisabled } from '../../../utils/isPasswordChangeReminderDisabled'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { DisplayPictureModalContentV2 } from '../../Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2'\nimport { createStyles } from './LoginRecordDetailsFormV2.styles'\nimport { toReadOnlyFieldProps } from './utils'\n\ntype Attachment = {\n  id?: string\n  tempId?: string\n  name: string\n  buffer?: ArrayBuffer | Uint8Array\n}\n\ntype CustomField = {\n  type: string\n  name: string\n  note?: string\n}\n\ntype LoginRecord = {\n  id: string\n  folder?: string\n  attachments?: Attachment[]\n  otpPublic?: unknown\n  data: {\n    title?: string\n    username?: string\n    password?: string\n    note?: string\n    websites?: string[]\n    customFields?: CustomField[]\n    credential?: { id: string }\n    passkeyCreatedAt?: number | string | Date | null\n    passwordUpdatedAt?: number | string | Date\n  }\n}\n\ntype LoginRecordDetailsFormV2Props = {\n  initialRecord?: LoginRecord\n  selectedFolder?: string\n}\n\ntype LoginRecordDetailsFormValues = {\n  username: string\n  password: string\n  note: string\n  websites: string[]\n  customFields: CustomField[]\n  folder?: string\n  attachments: Attachment[]\n  credential: string\n  passkeyCreatedAt: number | string | Date | null\n}\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp']\n\nconst getExtension = (filename?: string) =>\n  filename?.split('.').pop()?.toLowerCase() ?? ''\n\nexport const LoginRecordDetailsFormV2 = ({\n  initialRecord,\n  selectedFolder\n}: LoginRecordDetailsFormV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles()\n  const { setModal } = useModal()\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const initialValues = useMemo<LoginRecordDetailsFormValues>(\n    () => ({\n      username: initialRecord?.data?.username ?? '',\n      password: initialRecord?.data?.password ?? '',\n      note: initialRecord?.data?.note ?? '',\n      websites: initialRecord?.data?.websites ?? [],\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? [],\n      credential: initialRecord?.data?.credential?.id ?? '',\n      passkeyCreatedAt: initialRecord?.data?.passkeyCreatedAt ?? null\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, setValues, values, setValue } = useForm({\n    initialValues\n  })\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasUsername = !!values.username?.length\n  const hasPassword = !!values.password?.length\n  const hasPasskey = !!values.credential\n  const hasWebsites = !!values.websites?.length\n  const hasNote = !!values.note?.length\n  const hasCustomFields = !!values.customFields?.length\n  const hasAttachments = !!values.attachments?.length\n\n  const isPasswordSixMonthsOld = () => {\n    const passwordUpdatedAt = initialRecord?.data?.passwordUpdatedAt\n    return (\n      !!passwordUpdatedAt &&\n      isBefore(passwordUpdatedAt, subtractDateUnits(6, 'month'))\n    )\n  }\n\n  const shouldShowSecurityWarning =\n    !isPasswordChangeReminderDisabled() && isPasswordSixMonthsOld()\n\n  const handleAttachmentPress = (attachment: Attachment) => {\n    if (!attachment?.buffer || !attachment?.name) return\n\n    const blob = new Blob([attachment.buffer as BlobPart])\n    const url = URL.createObjectURL(blob)\n    const isImage = IMAGE_EXTENSIONS.includes(getExtension(attachment.name))\n\n    if (isImage) {\n      setModal(\n        html`<${DisplayPictureModalContentV2}\n          url=${url}\n          name=${attachment.name}\n        />`\n      )\n      return\n    }\n\n    const a = document.createElement('a')\n    a.href = url\n    a.download = attachment.name\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n\n  return (\n    <div style={styles.container}>\n      <div style={styles.topContent}>\n        {(hasUsername || hasPassword || !!initialRecord?.otpPublic) && (\n          <MultiSlotInput testID=\"credentials-multi-slot-input\">\n            {hasUsername && (\n              <InputField\n                label={t('Email / Username')}\n                placeholder={t('Email / Username')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"credentials-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('username'))}\n              />\n            )}\n\n            {hasPassword && (\n              <PasswordField\n                label={t('Password')}\n                placeholder={t('Password')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"credentials-multi-slot-input-slot-1\"\n                {...toReadOnlyFieldProps(register('password'))}\n              />\n            )}\n\n            {!!initialRecord?.otpPublic && !!initialRecord?.id && (\n              <OtpCodeFieldV2\n                key={initialRecord.id}\n                recordId={initialRecord.id}\n                otpPublic={\n                  initialRecord.otpPublic as Parameters<\n                    typeof OtpCodeFieldV2\n                  >[0]['otpPublic']\n                }\n                isGrouped\n              />\n            )}\n          </MultiSlotInput>\n        )}\n\n        {hasWebsites &&\n          values.websites.map((website: string, index: number) => (\n            <MultiSlotInput\n              key={`${website}-${index}`}\n              testID={`website-multi-slot-input-${index}`}\n            >\n              <InputField\n                label={t('Website')}\n                value={website}\n                placeholder={t('Enter Website')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID={`website-multi-slot-input-slot-${index}`}\n                rightSlot={\n                  website?.length ? (\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      aria-label={t('Open website')}\n                      iconBefore={\n                        <OpenInNew\n                          width={16}\n                          height={16}\n                          color={theme.colors.colorTextPrimary}\n                        />\n                      }\n                      onClick={() =>\n                        window.open(\n                          addHttps(website) as unknown as string,\n                          '_blank',\n                          'noopener,noreferrer'\n                        )\n                      }\n                    />\n                  ) : undefined\n                }\n              />\n            </MultiSlotInput>\n          ))}\n\n        {hasPasskey && (\n          <InputField\n            label={t('Passkey')}\n            placeholder={t('Passkey')}\n            value={\n              formatPasskeyDate(values.passkeyCreatedAt) || t('Passkey Stored')\n            }\n            readOnly\n            testID=\"passkey-input\"\n          />\n        )}\n\n        {hasAttachments && (\n          <MultiSlotInput testID=\"attachments-multi-slot-input\">\n            {values.attachments.map((attachment: Attachment, index: number) => (\n              <AttachmentField\n                key={attachment?.id || attachment?.tempId || attachment.name}\n                label={t('Attachment')}\n                value={attachment?.name ?? ''}\n                isGrouped\n                testID={`attachment-field-${index}`}\n                onClick={() => handleAttachmentPress(attachment)}\n              />\n            ))}\n          </MultiSlotInput>\n        )}\n\n        {hasNote && (\n          <MultiSlotInput testID=\"comments-multi-slot-input\">\n            <InputField\n              label={t('Comment')}\n              placeholder={t('Add comment')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"comments-multi-slot-input-slot-0\"\n              {...toReadOnlyFieldProps(register('note'))}\n            />\n          </MultiSlotInput>\n        )}\n\n        {hasCustomFields && (\n          <MultiSlotInput testID=\"hidden-messages-multi-slot-input\">\n            {values.customFields.map((field: CustomField, index: number) => (\n              <PasswordField\n                key={`${field.type}-${index}`}\n                label={t('Hidden Message')}\n                value={field.note ?? ''}\n                placeholder={t('Enter Hidden Message')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID={`hidden-messages-multi-slot-input-slot-${index}`}\n              />\n            ))}\n          </MultiSlotInput>\n        )}\n      </div>\n\n      {shouldShowSecurityWarning && (\n        <AlertMessage\n          variant=\"error\"\n          size=\"big\"\n          title={t('Password Warning')}\n          description={t(\n            \"It's been 6 months since you last updated this password. Consider changing it to keep your account secure.\"\n          )}\n        />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/LoginRecordDetailsForm/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { isBefore, subtractDateUnits } from '@tetherto/pear-apps-utils-date'\nimport { html } from 'htm/react'\n\nimport { AlertBox } from '../../../components/AlertBox'\nimport { CopyButton } from '../../../components/CopyButton'\nimport { FormGroup } from '../../../components/FormGroup'\nimport { FormWrapper } from '../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../components/InputFieldNote'\nimport { OtpCodeField } from '../../../components/OtpCodeField'\nimport { WebsiteButton } from '../../../components/WebsiteButton'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport {\n  CompoundField,\n  InputField,\n  KeyIcon,\n  PasswordField,\n  UserIcon,\n  WorldIcon\n} from '../../../lib-react-components'\nimport { formatPasskeyDate } from '../../../utils/formatPasskeyDate'\nimport { isPasswordChangeReminderDisabled } from '../../../utils/isPasswordChangeReminderDisabled'\nimport { AttachmentField } from '../../AttachmentField'\nimport { CustomFields } from '../../CustomFields'\n\n/**\n * @param {{\n *   initialRecord: {\n *   data: {\n *    title: string\n *    username: string\n *    password: string\n *    note: string\n *    websites: string[]\n *    customFields: {\n *        type: string\n *        name: string\n *     }[]\n *    attachments: { id: string, name: string}[]\n *    }\n *  }\n *  selectedFolder?: string\n * }} props\n */\nexport const LoginRecordDetailsForm = ({ initialRecord, selectedFolder }) => {\n  const { i18n } = useLingui()\n\n  const initialValues = React.useMemo(\n    () => ({\n      username: initialRecord?.data?.username ?? '',\n      password: initialRecord?.data?.password ?? '',\n      note: initialRecord?.data?.note ?? '',\n      websites: initialRecord?.data?.websites?.length\n        ? initialRecord?.data?.websites.map((website) => ({ website }))\n        : [{ name: 'website' }],\n      customFields: initialRecord?.data.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? [],\n      credential: initialRecord?.data?.credential?.id ?? '',\n      passkeyCreatedAt: initialRecord?.data?.passkeyCreatedAt\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, registerArray, setValues, values, setValue } = useForm({\n    initialValues\n  })\n\n  const { value: websitesList, registerItem } = registerArray('websites')\n\n  const { value: customFieldsList, registerItem: registerCustomFieldItem } =\n    registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  const isPasswordSixMonthsOld = () => {\n    const { passwordUpdatedAt } = initialRecord?.data || {}\n    return (\n      !!passwordUpdatedAt &&\n      isBefore(passwordUpdatedAt, subtractDateUnits(6, 'month'))\n    )\n  }\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  return html`\n    ${!isPasswordChangeReminderDisabled() &&\n    isPasswordSixMonthsOld() &&\n    html`\n      <${AlertBox}\n        message=${html`\n          ${i18n._(\"It's been 6 months since you last updated this password\")}\n          <br />\n          ${i18n._('Consider changing it to keep your account secure.')}\n        `}\n      />\n    `}\n    <${FormWrapper}>\n      <${FormGroup}>\n        ${!!values?.username?.length &&\n        html`\n          <${InputField}\n            label=${i18n._('Email or username')}\n            placeholder=${i18n._('Email or username')}\n            variant=\"outline\"\n            icon=${UserIcon}\n            isDisabled\n            ...${register('username')}\n            additionalItems=${html`\n              <${CopyButton} value=${values.username} />\n            `}\n          />\n        `}\n        ${!!values?.password?.length &&\n        html`\n          <${PasswordField}\n            label=${i18n._('Password')}\n            placeholder=${i18n._('Password')}\n            variant=\"outline\"\n            icon=${KeyIcon}\n            isDisabled\n            ...${register('password')}\n            additionalItems=${html`\n              <${CopyButton} value=${values.password} />\n            `}\n          />\n        `}\n      <//>\n\n      ${!!values?.credential &&\n      html`\n        <${FormGroup}>\n          <${InputField}\n            label=${i18n._('Passkey')}\n            value=${formatPasskeyDate(values.passkeyCreatedAt) ||\n            i18n._('Passkey Stored')}\n            variant=\"outline\"\n            icon=${KeyIcon}\n            isDisabled\n          />\n        <//>\n      `}\n      ${!!initialRecord?.otpPublic &&\n      html`\n        <${FormGroup}>\n          <${OtpCodeField}\n            key=${initialRecord.id}\n            recordId=${initialRecord.id}\n            otpPublic=${initialRecord.otpPublic}\n          />\n        <//>\n      `}\n      ${!!values?.websites?.length &&\n      html`\n        <${CompoundField}>\n          ${websitesList.map(\n            (website, index) => html`\n              <${React.Fragment} key=${website.id}>\n                <${InputField}\n                  label=${i18n._('Website')}\n                  placeholder=${i18n._('https://')}\n                  icon=${WorldIcon}\n                  ...${registerItem('website', index)}\n                  isDisabled\n                  additionalItems=${html`\n                    <${WebsiteButton}\n                      url=${registerItem('website', index).value}\n                    />\n                    <${CopyButton}\n                      value=${registerItem('website', index).value}\n                    />\n                  `}\n                />\n              <//>\n            `\n          )}\n        <//>\n      `}\n      ${values?.attachments?.length > 0 &&\n      html`\n        <${FormGroup}>\n          ${values.attachments.map(\n            (attachment) => html`\n              <${AttachmentField}\n                label=${i18n._('File')}\n                attachment=${attachment}\n              />\n            `\n          )}\n        <//>\n      `}\n\n      <${FormGroup}>\n        ${!!values?.note?.length &&\n        html`\n          <${InputFieldNote}\n            ...${register('note')}\n            isDisabled\n            additionalItems=${html` <${CopyButton} value=${values.note} /> `}\n          />\n        `}\n      <//>\n\n      <${CustomFields}\n        customFields=${customFieldsList}\n        register=${registerCustomFieldItem}\n        areInputsDisabled=${true}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/LoginRecordDetailsForm/utils.ts",
    "content": "type FieldRegistration = {\n  name: string\n  value: string\n  onChange?: unknown\n  error?: string\n}\n\nexport const toReadOnlyFieldProps = (field: FieldRegistration) => ({\n  name: field.name,\n  value: field.value\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/NoteDetailsForm/NoteDetailsFormV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/NoteDetailsForm/NoteDetailsFormV2.tsx",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport {\n  AttachmentField,\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { html } from 'htm/react'\n\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useModal } from '../../../context/ModalContext'\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { DisplayPictureModalContentV2 } from '../../Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2'\nimport { createStyles } from './NoteDetailsFormV2.styles'\nimport { toReadOnlyFieldProps } from './utils'\n\ntype Attachment = {\n  id?: string\n  tempId?: string\n  name: string\n  buffer?: ArrayBuffer | Uint8Array\n}\n\ntype CustomField = {\n  type: string\n  name?: string\n  note?: string\n}\n\ntype NoteRecord = {\n  id: string\n  folder?: string\n  attachments?: Attachment[]\n  data: {\n    title?: string\n    note?: string\n    customFields?: CustomField[]\n  }\n}\n\ntype NoteDetailsFormV2Props = {\n  initialRecord?: NoteRecord\n  selectedFolder?: string\n}\n\ntype NoteDetailsFormValues = {\n  note: string\n  customFields: CustomField[]\n  folder?: string\n  attachments: Attachment[]\n}\n\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp']\n\nconst getExtension = (filename?: string) =>\n  filename?.split('.').pop()?.toLowerCase() ?? ''\n\nexport const NoteDetailsFormV2 = ({\n  initialRecord,\n  selectedFolder\n}: NoteDetailsFormV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles()\n  const { setModal } = useModal()\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const initialValues = useMemo<NoteDetailsFormValues>(\n    () => ({\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, setValues, values, setValue } = useForm({ initialValues })\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasNote = !!values.note?.length\n  const hasCustomFields = !!values.customFields?.length\n  const hasAttachments = !!values.attachments?.length\n\n  const handleAttachmentPress = (attachment: Attachment) => {\n    if (!attachment?.buffer || !attachment?.name) return\n\n    const blob = new Blob([attachment.buffer as BlobPart])\n    const url = URL.createObjectURL(blob)\n    const isImage = IMAGE_EXTENSIONS.includes(getExtension(attachment.name))\n\n    if (isImage) {\n      setModal(\n        html`<${DisplayPictureModalContentV2}\n          url=${url}\n          name=${attachment.name}\n        />`\n      )\n      return\n    }\n\n    const a = document.createElement('a')\n    a.href = url\n    a.download = attachment.name\n    document.body.appendChild(a)\n    a.click()\n    document.body.removeChild(a)\n    URL.revokeObjectURL(url)\n  }\n  \n  return (\n    <div style={styles.container}>\n      {hasNote && (\n        <div style={styles.section}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Details')}\n          </Text>\n\n          <MultiSlotInput testID=\"note-multi-slot-input\">\n            <InputField\n              label={t('Note')}\n              placeholder={t('Enter Note')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"note-multi-slot-input-slot-0\"\n              {...toReadOnlyFieldProps(register('note'))}\n            />\n          </MultiSlotInput>\n        </div>\n      )}\n\n      {(hasAttachments || hasCustomFields) && (\n        <div style={styles.section}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n\n          {hasAttachments && (\n            <MultiSlotInput testID=\"attachments-multi-slot-input\">\n              {(values.attachments as Attachment[]).map((attachment, index) => (\n                <AttachmentField\n                  key={attachment?.id || attachment?.tempId || attachment.name}\n                  label={t('Attachment')}\n                  value={attachment?.name ?? ''}\n                  isGrouped\n                  testID={`attachment-field-${index}`}\n                  onClick={() => handleAttachmentPress(attachment)}\n                />\n              ))}\n            </MultiSlotInput>\n          )}\n\n          {hasCustomFields && (\n            <MultiSlotInput testID=\"hidden-messages-multi-slot-input\">\n              {(values.customFields as CustomField[]).map((field, index) => (\n                <PasswordField\n                  key={`${field.type}-${index}`}\n                  label={t('Hidden Message')}\n                  value={field.note ?? ''}\n                  placeholder={t('Enter Hidden Message')}\n                  readOnly\n                  copyable\n                  onCopy={copyToClipboard}\n                  isGrouped\n                  testID={`hidden-messages-multi-slot-input-slot-${index}`}\n                />\n              ))}\n            </MultiSlotInput>\n          )}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/NoteDetailsForm/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { html } from 'htm/react'\n\nimport { CopyButton } from '../../../components/CopyButton'\nimport { FormGroup } from '../../../components/FormGroup'\nimport { FormWrapper } from '../../../components/FormWrapper'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { TextArea } from '../../../lib-react-components'\nimport { AttachmentField } from '../../AttachmentField'\nimport { CustomFields } from '../../CustomFields'\n\n/**\n * @param {{\n *   initialRecord: {\n *    data: {\n *     title: string\n *     note: string\n *     customFields: {\n *        type: string\n *        name: string\n *      }[]\n *    attachments: { id: string, name: string}[]\n *     }\n *    }\n *  selectedFolder?: string\n * }} props\n */\nexport const NoteDetailsForm = ({ initialRecord, selectedFolder }) => {\n  const { i18n } = useLingui()\n\n  const initialValues = React.useMemo(\n    () => ({\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, registerArray, setValues, values, setValue } = useForm({\n    initialValues\n  })\n\n  const { value: list, registerItem } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  return html`\n    <${FormWrapper} data-id=\"note-details\">\n      <${FormGroup}>\n        ${!!values?.note?.length &&\n        html`\n          <${TextArea}\n            ...${register('note')}\n            placeholder=${i18n._('Write a comment...')}\n            isDisabled\n            additionalItems=${html`<${CopyButton} value=${values.note} />`}\n          />\n        `}\n      <//>\n      ${values?.attachments?.length > 0 &&\n      html`\n        <${FormGroup}>\n          ${values.attachments.map(\n            (attachment) => html`\n              <${AttachmentField}\n                key=${attachment.id}\n                label=${i18n._('File')}\n                attachment=${attachment}\n              />\n            `\n          )}\n        <//>\n      `}\n      <${CustomFields}\n        areInputsDisabled=${true}\n        customFields=${list}\n        register=${registerItem}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/NoteDetailsForm/utils.ts",
    "content": "type FieldRegistration = {\n  name: string\n  value: string\n  onChange?: unknown\n  error?: string\n}\n\nexport const toReadOnlyFieldProps = (field: FieldRegistration) => ({\n  name: field.name,\n  value: field.value\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/PassPhraseDetailsForm/PassPhraseDetailsFormV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/PassPhraseDetailsForm/PassPhraseDetailsFormV2.tsx",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport {\n  InputField,\n  MultiSlotInput,\n  PasswordField\n} from '@tetherto/pearpass-lib-ui-kit'\n\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { PassPhraseV2 } from '../../PassPhrase/PassPhraseV2'\nimport { createStyles } from './PassPhraseDetailsFormV2.styles'\nimport { toReadOnlyFieldProps } from './utils'\n\ntype CustomField = {\n  type: string\n  name?: string\n  note?: string\n}\n\ntype PassPhraseRecord = {\n  id: string\n  folder?: string\n  data: {\n    title?: string\n    passPhrase?: string\n    note?: string\n    customFields?: CustomField[]\n  }\n}\n\ntype PassPhraseDetailsFormV2Props = {\n  initialRecord?: PassPhraseRecord\n  selectedFolder?: string\n}\n\ntype PassPhraseDetailsFormValues = {\n  title: string\n  passPhrase: string\n  note: string\n  customFields: CustomField[]\n  folder?: string\n}\n\nexport const PassPhraseDetailsFormV2 = ({\n  initialRecord,\n  selectedFolder\n}: PassPhraseDetailsFormV2Props) => {\n  const { t } = useTranslation()\n  const styles = createStyles()\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const initialValues = useMemo<PassPhraseDetailsFormValues>(\n    () => ({\n      title: initialRecord?.data?.title ?? '',\n      passPhrase: initialRecord?.data?.passPhrase ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, setValues, values } = useForm({ initialValues })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasPassPhrase = !!values.passPhrase?.length\n  const hasNote = !!values.note?.length\n  const hasCustomFields = !!values.customFields?.length\n\n  return (\n    <div style={styles.container}>\n      {hasPassPhrase && <PassPhraseV2 value={values.passPhrase} />}\n\n      {hasNote && (\n        <MultiSlotInput testID=\"comments-multi-slot-input\">\n          <InputField\n            label={t('Comment')}\n            placeholder={t('Enter Comment')}\n            readOnly\n            copyable\n            onCopy={copyToClipboard}\n            isGrouped\n            testID=\"comments-multi-slot-input-slot-0\"\n            {...toReadOnlyFieldProps(register('note'))}\n          />\n        </MultiSlotInput>\n      )}\n\n      {hasCustomFields && (\n        <MultiSlotInput testID=\"hidden-messages-multi-slot-input\">\n          {(values.customFields as CustomField[]).map((field, index) => (\n            <PasswordField\n              key={`${field.type}-${index}`}\n              label={t('Hidden Message')}\n              value={field.note ?? ''}\n              placeholder={t('Enter Hidden Message')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID={`hidden-messages-multi-slot-input-slot-${index}`}\n            />\n          ))}\n        </MultiSlotInput>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/PassPhraseDetailsForm/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { html } from 'htm/react'\n\nimport { CopyButton } from '../../../components/CopyButton'\nimport { FormGroup } from '../../../components/FormGroup'\nimport { FormWrapper } from '../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../components/InputFieldNote'\nimport { CustomFields } from '../../CustomFields'\nimport { PassPhrase } from '../../PassPhrase'\n\n/**\n * @param {{\n *   initialRecord: {\n *    data: {\n *     title: string\n *     passPhrase: string\n *     note: string\n *     customFields: {\n *        type: string\n *        name: string\n *      }[]\n *     }\n *    }\n *  selectedFolder?: string\n * }} props\n */\nexport const PassPhraseDetailsForm = ({ initialRecord, selectedFolder }) => {\n  const initialValues = React.useMemo(\n    () => ({\n      title: initialRecord?.data?.title ?? '',\n      passPhrase: initialRecord?.data?.passPhrase ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, registerArray, setValues, values } = useForm({\n    initialValues\n  })\n\n  const { value: list, registerItem } = registerArray('customFields')\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  return html`\n    <${FormWrapper} data-testid=\"recoveryphrase-details\">\n      <${FormGroup}>\n        ${!!values?.passPhrase?.length &&\n        html`<${PassPhrase} ...${register('passPhrase')} /> `}\n      <//>\n\n      <${FormGroup}>\n        ${!!values?.note?.length &&\n        html`\n          <${InputFieldNote}\n            ...${register('note')}\n            additionalItems=${html` <${CopyButton} value=${values.note} /> `}\n            isDisabled\n          />\n        `}\n      <//>\n\n      <${CustomFields}\n        areInputsDisabled=${true}\n        customFields=${list}\n        register=${registerItem}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/PassPhraseDetailsForm/utils.ts",
    "content": "type FieldRegistration = {\n  name: string\n  value: string\n  onChange?: unknown\n  error?: string\n}\n\nexport const toReadOnlyFieldProps = (field: FieldRegistration) => ({\n  name: field.name,\n  value: field.value\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/RecordDetailsContent/index.js",
    "content": "import { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { isV2 } from '../../../utils/designVersion'\nimport { CreditCardDetailsForm } from '../CreditCardDetailsForm'\nimport { CreditCardDetailsFormV2 } from '../CreditCardDetailsForm/CreditCardDetailsFormV2'\nimport { CustomDetailsForm } from '../CustomDetailsForm'\nimport { CustomDetailsFormV2 } from '../CustomDetailsForm/CustomDetailsFormV2'\nimport { IdentityDetailsForm } from '../IdentityDetailsForm'\nimport { IdentityDetailsFormV2 } from '../IdentityDetailsForm/IdentityDetailsFormV2'\nimport { LoginRecordDetailsForm } from '../LoginRecordDetailsForm'\nimport { LoginRecordDetailsFormV2 } from '../LoginRecordDetailsForm/LoginRecordDetailsFormV2'\nimport { NoteDetailsForm } from '../NoteDetailsForm'\nimport { NoteDetailsFormV2 } from '../NoteDetailsForm/NoteDetailsFormV2'\nimport { PassPhraseDetailsForm } from '../PassPhraseDetailsForm'\nimport { PassPhraseDetailsFormV2 } from '../PassPhraseDetailsForm/PassPhraseDetailsFormV2'\nimport { WifiDetailsForm } from '../WifiDetailsForm'\nimport { WifiDetailsFormV2 } from '../WifiDetailsForm/WifiDetailsFormV2'\n\n/**\n * @param {{\n *   record: {\n *      type: 'note' | 'creditCard' | 'custom' | 'identity' | 'login'\n *    }\n *  selectedFolder?: string\n * }} props\n */\nexport const RecordDetailsContent = ({ record, selectedFolder }) => {\n  if (record?.type === RECORD_TYPES.CREDIT_CARD) {\n    const CreditCardForm = isV2()\n      ? CreditCardDetailsFormV2\n      : CreditCardDetailsForm\n    return html`<${CreditCardForm}\n      initialRecord=${record}\n      selectedFolder=${selectedFolder}\n    />`\n  }\n  if (record?.type === RECORD_TYPES.CUSTOM) {\n    const CustomForm = isV2() ? CustomDetailsFormV2 : CustomDetailsForm\n    return html`<${CustomForm}\n      initialRecord=${record}\n      selectedFolder=${selectedFolder}\n    />`\n  }\n  if (record?.type === RECORD_TYPES.IDENTITY) {\n    const IdentityForm = isV2() ? IdentityDetailsFormV2 : IdentityDetailsForm\n    return html`<${IdentityForm}\n      initialRecord=${record}\n      selectedFolder=${selectedFolder}\n    />`\n  }\n  if (record?.type === RECORD_TYPES.LOGIN) {\n    const LoginForm = isV2() ? LoginRecordDetailsFormV2 : LoginRecordDetailsForm\n    return html`<${LoginForm}\n      initialRecord=${record}\n      selectedFolder=${selectedFolder}\n    />`\n  }\n  if (record?.type === RECORD_TYPES.NOTE) {\n    const NoteForm = isV2() ? NoteDetailsFormV2 : NoteDetailsForm\n    return html`<${NoteForm}\n      initialRecord=${record}\n      selectedFolder=${selectedFolder}\n    />`\n  }\n  if (record?.type === RECORD_TYPES.WIFI_PASSWORD) {\n    const WifiForm = isV2() ? WifiDetailsFormV2 : WifiDetailsForm\n    return html`<${WifiForm}\n      initialRecord=${record}\n      selectedFolder=${selectedFolder}\n    />`\n  }\n  if (record?.type === RECORD_TYPES.PASS_PHRASE) {\n    const PassPhraseForm = isV2()\n      ? PassPhraseDetailsFormV2\n      : PassPhraseDetailsForm\n    return html`<${PassPhraseForm}\n      initialRecord=${record}\n      selectedFolder=${selectedFolder}\n    />`\n  }\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/RecordDetailsV2.styles.ts",
    "content": "import { rawTokens, type ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { HEADER_MIN_HEIGHT } from '../../constants/layout'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    width: '100%',\n    height: '100%',\n    backgroundColor: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const,\n    overflowY: 'auto' as const\n  },\n  header: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    height: `${HEADER_MIN_HEIGHT}px`,\n    paddingInline: `${rawTokens.spacing12}px`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    boxSizing: 'border-box' as const,\n    flexShrink: 0\n  },\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    padding: `${rawTokens.spacing16}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/RecordDetailsV2.tsx",
    "content": "import React, { useEffect, useState } from 'react'\n\nimport {\n  Button,\n  ContextMenu,\n  ItemScreenHeader,\n  NavbarListItem,\n  rawTokens,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  KeyboardTab,\n  ContentCopy,\n  DriveFileMoveOutlined,\n  EditOutlined,\n  MoreVert,\n  StarBorder,\n  StarFilled,\n  TrashOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n// @ts-expect-error - declaration file is incomplete\nimport { RECORD_TYPES, useRecordById } from '@tetherto/pearpass-lib-vault'\n\nimport { RecordItemIcon } from '../../components/RecordItemIcon'\nimport { useRouter } from '../../context/RouterContext'\nimport { useRecordActionItems } from '../../hooks/useRecordActionItems'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { RecordDetailsContent } from './RecordDetailsContent'\nimport { createStyles } from './RecordDetailsV2.styles'\n\ntype RecordAction = {\n  type: 'favorite' | 'edit' | 'move' | 'delete' | 'copy' | string\n  name: string\n  click?: () => void\n}\n\nconst ACTION_ICON_BY_TYPE: Record<\n  string,\n  React.ComponentType<{ color?: string }>\n> = {\n  copy: ContentCopy,\n  move: DriveFileMoveOutlined,\n  edit: EditOutlined,\n  delete: TrashOutlined\n}\n\nconst getActionIcon = (\n  action: RecordAction,\n  isFavorite: boolean,\n  textColor: string,\n  destructiveColor: string\n): React.ReactElement => {\n  if (action.type === 'favorite') {\n    const FavoriteIcon = isFavorite ? StarFilled : StarBorder\n    return <FavoriteIcon color={textColor} />\n  }\n  const Icon = ACTION_ICON_BY_TYPE[action.type] ?? MoreVert\n  const iconColor = action.type === 'delete' ? destructiveColor : textColor\n  return <Icon color={iconColor} />\n}\n\ntype RecordShape = {\n  id: string\n  type: string\n  isFavorite?: boolean\n  folder?: string\n  data?: {\n    title?: string\n    websites?: string[]\n  }\n}\n\nexport const RecordDetailsV2 = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const [isMenuOpen, setIsMenuOpen] = useState(false)\n  const { currentPage, data: routerData, navigate } = useRouter()\n\n  const { data: record } = useRecordById({\n    variables: { id: routerData.recordId }\n  }) as { data?: RecordShape }\n\n  const { actions } = useRecordActionItems({\n    excludeTypes: ['select', 'pin'],\n    record,\n    recordType:\n      routerData?.recordType === RECORD_TYPES.OTP\n        ? RECORD_TYPES.OTP\n        : undefined,\n    onClose: () => setIsMenuOpen(false)\n  })\n\n  const handleCollapse = () => {\n    navigate(currentPage, { ...routerData, recordId: '' })\n  }\n\n  useEffect(() => {\n    if (routerData.recordId && !record) handleCollapse()\n  }, [record, routerData.recordId])\n\n  if (!record) return null\n\n  const title = record?.data?.title ?? ''\n\n  const avatar = (\n    <RecordItemIcon\n      record={record}\n      size={24}\n      testId={`details-avatar-v2-${record.type}`}\n    />\n  )\n\n  const headerActions = (\n    <div\n      style={{\n        display: 'flex',\n        alignItems: 'center',\n        gap: `${rawTokens.spacing8}px`\n      }}\n    >\n      <ContextMenu\n        open={isMenuOpen}\n        onOpenChange={setIsMenuOpen}\n        trigger={\n          <Button\n            variant=\"tertiary\"\n            size=\"small\"\n            aria-label={t('More actions')}\n            iconBefore={<MoreVert color={theme.colors.colorTextPrimary} />}\n            data-testid=\"details-button-actions-v2\"\n          />\n        }\n      >\n        {(actions as RecordAction[]).map((action, index, list) => (\n          <NavbarListItem\n            key={action.name}\n            label={action.name}\n            icon={getActionIcon(\n              action,\n              !!record?.isFavorite,\n              theme.colors.colorTextPrimary,\n              theme.colors.colorSurfaceDestructiveElevated\n            )}\n            variant={action.type === 'delete' ? 'destructive' : 'default'}\n            showDivider={list[index + 1]?.type === 'delete'}\n            onClick={() => {\n              setIsMenuOpen(false)\n              action.click?.()\n            }}\n            testID={`details-actions-item-${action.type}-v2`}\n          />\n        ))}\n      </ContextMenu>\n      <Button\n        variant=\"tertiary\"\n        size=\"small\"\n        aria-label={t('Close')}\n        iconBefore={<KeyboardTab color={theme.colors.colorTextPrimary} />}\n        onClick={handleCollapse}\n        data-testid=\"details-button-close-v2\"\n      />\n    </div>\n  )\n\n  return (\n    <div style={styles.root} data-testid=\"details-header-v2\">\n      <div style={styles.header}>\n        <ItemScreenHeader title={title} icon={avatar} actions={headerActions} />\n      </div>\n\n      <div style={styles.body}>\n        <RecordDetailsContent\n          record={\n            record as unknown as Parameters<\n              typeof RecordDetailsContent\n            >[0]['record']\n          }\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/WifiDetailsForm/WifiDetailsFormV2.styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/WifiDetailsForm/WifiDetailsFormV2.tsx",
    "content": "import { useEffect, useMemo } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport {\n  InputField,\n  MultiSlotInput,\n  PasswordField,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\n\nimport { useCopyToClipboard } from '../../../hooks/useCopyToClipboard.electron'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { WifiPasswordQRCodeV2 } from '../../WifiPasswordQRCode/WifiPasswordQRCodeV2'\nimport { createStyles } from './WifiDetailsFormV2.styles'\nimport { toReadOnlyFieldProps } from './utils'\n\ntype CustomField = {\n  type: string\n  name?: string\n  note?: string\n}\n\ntype WifiRecord = {\n  id: string\n  folder?: string\n  data: {\n    title?: string\n    password?: string\n    note?: string\n    customFields?: CustomField[]\n  }\n}\n\ntype WifiDetailsFormV2Props = {\n  initialRecord?: WifiRecord\n  selectedFolder?: string\n}\n\ntype WifiDetailsFormValues = {\n  title: string\n  password: string\n  note: string\n  customFields: CustomField[]\n  folder?: string\n}\n\nexport const WifiDetailsFormV2 = ({\n  initialRecord,\n  selectedFolder\n}: WifiDetailsFormV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles()\n  const { copyToClipboard } = useCopyToClipboard()\n\n  const initialValues = useMemo<WifiDetailsFormValues>(\n    () => ({\n      title: initialRecord?.data?.title ?? '',\n      password: initialRecord?.data?.password ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, setValues, values } = useForm({ initialValues })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  const hasPassword = !!values.password?.length\n  const hasNote = !!values.note?.length\n  const hasCustomFields = !!values.customFields?.length\n\n  return (\n    <div style={styles.container}>\n      {hasPassword && (\n        <div style={styles.section}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Credentials')}\n          </Text>\n\n          <MultiSlotInput testID=\"credentials-multi-slot-input\">\n            <PasswordField\n              label={t('Wi-Fi Password')}\n              placeholder={t('Insert Wi-Fi Password')}\n              readOnly\n              copyable\n              onCopy={copyToClipboard}\n              isGrouped\n              testID=\"credentials-multi-slot-input-slot-0\"\n              {...toReadOnlyFieldProps(register('password'))}\n            />\n            <WifiPasswordQRCodeV2\n              ssid={values.title}\n              password={values.password}\n            />\n          </MultiSlotInput>\n        </div>\n      )}\n\n      {(hasNote || hasCustomFields) && (\n        <div style={styles.section}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Additional')}\n          </Text>\n\n          {hasNote && (\n            <MultiSlotInput testID=\"comments-multi-slot-input\">\n              <InputField\n                label={t('Comment')}\n                placeholder={t('Add comment')}\n                readOnly\n                copyable\n                onCopy={copyToClipboard}\n                isGrouped\n                testID=\"comments-multi-slot-input-slot-0\"\n                {...toReadOnlyFieldProps(register('note'))}\n              />\n            </MultiSlotInput>\n          )}\n\n          {hasCustomFields && (\n            <MultiSlotInput testID=\"hidden-messages-multi-slot-input\">\n              {(values.customFields as CustomField[]).map((field, index) => (\n                <PasswordField\n                  key={`${field.type}-${index}`}\n                  label={t('Hidden Message')}\n                  value={field.note ?? ''}\n                  placeholder={t('Enter Hidden Message')}\n                  readOnly\n                  copyable\n                  onCopy={copyToClipboard}\n                  isGrouped\n                  testID={`hidden-messages-multi-slot-input-slot-${index}`}\n                />\n              ))}\n            </MultiSlotInput>\n          )}\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/WifiDetailsForm/index.js",
    "content": "import React, { useEffect } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { html } from 'htm/react'\n\nimport { CopyButton } from '../../../components/CopyButton'\nimport { FormGroup } from '../../../components/FormGroup'\nimport { FormWrapper } from '../../../components/FormWrapper'\nimport { InputFieldNote } from '../../../components/InputFieldNote'\nimport { ATTACHMENTS_FIELD_KEY } from '../../../constants/formFields'\nimport { useGetMultipleFiles } from '../../../hooks/useGetMultipleFiles'\nimport { PasswordField, PasswordIcon } from '../../../lib-react-components'\nimport { AttachmentField } from '../../AttachmentField'\nimport { CustomFields } from '../../CustomFields'\nimport { WifiPasswordQRCode } from '../../WifiPasswordQRCode'\n\n/**\n * @param {{\n *   initialRecord: {\n *    data: {\n *     title: string\n *     password: string\n *     note: string\n *     customFields: {\n *        type: string\n *        name: string\n *      }[]\n *    attachments: { id: string, name: string}[]\n *     }\n *    }\n *  selectedFolder?: string\n * }} props\n */\nexport const WifiDetailsForm = ({ initialRecord, selectedFolder }) => {\n  const { i18n } = useLingui()\n\n  const initialValues = React.useMemo(\n    () => ({\n      password: initialRecord?.data?.password ?? '',\n      note: initialRecord?.data?.note ?? '',\n      customFields: initialRecord?.data?.customFields ?? [],\n      folder: selectedFolder ?? initialRecord?.folder,\n      attachments: initialRecord?.attachments ?? []\n    }),\n    [initialRecord, selectedFolder]\n  )\n\n  const { register, registerArray, setValues, values, setValue } = useForm({\n    initialValues\n  })\n\n  const { value: list, registerItem } = registerArray('customFields')\n\n  useGetMultipleFiles({\n    fieldNames: [ATTACHMENTS_FIELD_KEY],\n    updateValues: setValue,\n    initialRecord\n  })\n\n  useEffect(() => {\n    setValues(initialValues)\n  }, [initialValues, setValues])\n\n  return html`\n    <${FormWrapper}>\n      <${FormGroup}>\n        ${!!values?.password?.length &&\n        html`\n          <${PasswordField}\n            testId=\"wifidetails-field-password\"\n            label=${i18n._('Password')}\n            placeholder=${i18n._('Password')}\n            belowInputContent=${html`\n              <${WifiPasswordQRCode}\n                ssid=${initialRecord?.data?.title}\n                password=${values?.password}\n              />\n            `}\n            variant=\"outline\"\n            icon=${PasswordIcon}\n            isDisabled\n            ...${register('password')}\n            additionalItems=${html`\n              <${CopyButton} value=${values.password} />\n            `}\n          />\n        `}\n      <//>\n\n      <${FormGroup}>\n        ${!!values?.note?.length &&\n        html`\n          <${InputFieldNote}\n            testId=\"wifidetails-field-note\"\n            ...${register('note')}\n            isDisabled\n            additionalItems=${html` <${CopyButton} value=${values.note} /> `}\n          />\n        `}\n      <//>\n      ${values?.attachments?.length > 0 &&\n      html`\n        <${FormGroup}>\n          ${values.attachments.map(\n            (attachment) => html`\n              <${AttachmentField}\n                testId=\"wifidetails-attachment\"\n                key=${attachment.id}\n                label=${i18n._('File')}\n                attachment=${attachment}\n              />\n            `\n          )}\n        <//>\n      `}\n      <${CustomFields}\n        areInputsDisabled=${true}\n        customFields=${list}\n        register=${registerItem}\n      />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/WifiDetailsForm/utils.ts",
    "content": "type FieldRegistration = {\n  name: string\n  value: string\n  onChange?: unknown\n  error?: string\n}\n\nexport const toReadOnlyFieldProps = (field: FieldRegistration) => ({\n  name: field.name,\n  value: field.value\n})\n"
  },
  {
    "path": "src/containers/RecordDetails/index.js",
    "content": "import React, { useEffect, useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { generateAvatarInitials } from '@tetherto/pear-apps-utils-avatar-initials'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { useRecordById, useRecords } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { RecordDetailsContent } from './RecordDetailsContent'\nimport { RecordDetailsV2 } from './RecordDetailsV2'\nimport {\n  Fields,\n  FavoriteButtonWrapper,\n  FolderWrapper,\n  Header,\n  HeaderRight,\n  RecordActions,\n  Title,\n  RecordInfo\n} from './styles'\nimport { PopupMenu } from '../../components/PopupMenu'\nimport { RecordActionsPopupContent } from '../../components/RecordActionsPopupContent'\nimport { RecordAvatar } from '../../components/RecordAvatar'\nimport { RECORD_COLOR_BY_TYPE } from '../../constants/recordColorByType'\nimport { useRouter } from '../../context/RouterContext'\nimport { useCreateOrEditRecord } from '../../hooks/useCreateOrEditRecord'\nimport { useRecordActionItems } from '../../hooks/useRecordActionItems'\nimport {\n  BrushIcon,\n  ButtonLittle,\n  ButtonRoundIcon,\n  CollapseIcon,\n  FolderIcon,\n  KebabMenuIcon,\n  StarIcon\n} from '../../lib-react-components'\nimport { isV2 } from '../../utils/designVersion'\n\nexport const RecordDetails = () => {\n  if (isV2()) {\n    return html`<${RecordDetailsV2} />`\n  }\n\n  return html`<${RecordDetailsV1} />`\n}\n\nconst RecordDetailsV1 = () => {\n  const { i18n } = useLingui()\n\n  const [isOpen, setIsOpen] = useState(false)\n\n  const { currentPage, data: routerData, navigate } = useRouter()\n\n  const { data: record } = useRecordById({\n    variables: { id: routerData.recordId }\n  })\n\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const { updateFavoriteState } = useRecords()\n\n  const DATA_ID_PREFIX_BY_TYPE = {\n    note: 'note',\n    custom: 'custom'\n  }\n\n  const dataIdPrefix = DATA_ID_PREFIX_BY_TYPE[record?.type]\n\n  const { actions: rawActions } = useRecordActionItems({\n    excludeTypes: ['select', 'pin'],\n    record: record,\n    onClose: () => {\n      setIsOpen(false)\n    }\n  })\n\n  const actions = dataIdPrefix\n    ? rawActions.map((action) =>\n        action.type === 'delete'\n          ? { ...action, dataId: `${dataIdPrefix}-delete-button` }\n          : action\n      )\n    : rawActions\n\n  const handleEdit = () => {\n    handleCreateOrEditRecord({\n      recordType: record?.type,\n      initialRecord: record\n    })\n  }\n\n  const handleCollapseRecordDetails = () => {\n    navigate(currentPage, { ...routerData, recordId: '' })\n  }\n\n  useEffect(() => {\n    if (!record) {\n      handleCollapseRecordDetails()\n    }\n  }, [record])\n\n  if (!record) {\n    return null\n  }\n\n  const domain = record.type === 'login' ? record?.data?.websites?.[0] : null\n\n  return html`\n    <${React.Fragment}>\n      <${Header} data-testid=\"details-header\">\n        <${RecordInfo}>\n          <${RecordAvatar}\n            testId=${`details-avatar-${generateAvatarInitials(record?.data?.title)}`}\n            websiteDomain=${domain}\n            initials=${generateAvatarInitials(record?.data?.title)}\n            isFavorite=${record?.isFavorite}\n            color=${RECORD_COLOR_BY_TYPE[record?.type]}\n          />\n          <div>\n            <${Title} data-testid=${`details-title-${record?.id}`}>\n              ${record?.data?.title}\n            <//>\n\n            ${!!record?.folder &&\n            html`\n              <${FolderWrapper}\n                data-testid=${`details-folder-${record?.folder ?? 'none'}`}\n              >\n                <${FolderIcon} size=\"24\" color=${colors.grey200.mode1} />\n                ${record?.folder}\n              <//>\n            `}\n          </div>\n        <//>\n\n        <${HeaderRight}>\n          <${FavoriteButtonWrapper}\n            data-testid=\"details-button-favorite\"\n            favorite=${record?.isFavorite}\n            onClick=${() =>\n              updateFavoriteState([record?.id], !record?.isFavorite)}\n          >\n            <${StarIcon}\n              size=\"24\"\n              fill=${record?.isFavorite}\n              color=${colors.primary400.mode1}\n            />\n          <//>\n\n          <${ButtonLittle}\n            testId=\"details-button-edit\"\n            dataId=${dataIdPrefix ? `${dataIdPrefix}-edit-button` : undefined}\n            startIcon=${BrushIcon}\n            onClick=${handleEdit}\n          >\n            ${i18n._('Edit')}\n          <//>\n\n          <${RecordActions}>\n            <${PopupMenu}\n              side=\"right\"\n              align=\"right\"\n              isOpen=${isOpen}\n              setIsOpen=${setIsOpen}\n              content=${html`\n                <${RecordActionsPopupContent} menuItems=${actions} />\n              `}\n            >\n              <${ButtonRoundIcon}\n                data-testid=\"details-button-actions\"\n                startIcon=${KebabMenuIcon}\n              />\n            <//>\n          <//>\n\n          <${ButtonRoundIcon}\n            testId=\"details-close-button\"\n            startIcon=${CollapseIcon}\n            onClick=${handleCollapseRecordDetails}\n          />\n        <//>\n      <//>\n      <${Fields}>\n        <${RecordDetailsContent} record=${record} />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/RecordDetails/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Header = styled.div`\n  display: flex;\n  justify-content: space-between;\n`\n\nexport const RecordInfo = styled.div`\n  display: flex;\n  gap: 10px;\n  align-items: center;\n`\n\nexport const Title = styled.div`\n  color: ${({ theme }) => theme.colors.white.dark};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n`\n\nexport const FolderWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  color: ${({ theme }) => theme.colors.grey200.dark};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n  margin-top: 2px;\n`\n\nexport const HeaderRight = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n`\n\nexport const FavoriteButtonWrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['favorite'].includes(prop)\n})`\n  display: flex;\n  cursor: pointer;\n\n  & path {\n    fill: ${({ favorite, theme }) => favorite && theme.colors.primary400.mode1};\n  }\n`\n\nexport const Fields = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n  margin-top: 15px;\n  padding-bottom: 24px;\n`\n\nexport const RecordActions = styled.div`\n  display: flex;\n`\n"
  },
  {
    "path": "src/containers/RecordListView/RecordListViewV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { FADE_GRADIENT_HEIGHT } from '../../constants/layout'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  wrapper: {\n    position: 'relative' as const,\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    flex: 1,\n    minHeight: 0,\n    width: '100%'\n  },\n\n  scrollArea: {\n    flex: 1,\n    minHeight: 0,\n    overflowY: 'auto' as const,\n    overflowX: 'hidden' as const,\n    paddingInline: `${rawTokens.spacing12}px`,\n    paddingTop: `${rawTokens.spacing12}px`,\n    paddingBottom: `${FADE_GRADIENT_HEIGHT}px`,\n    display: 'flex' as const,\n    flexDirection: 'column' as const\n  },\n\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: 2\n  },\n\n  sectionHeader: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`,\n    paddingBlock: `${rawTokens.spacing8}px`,\n    paddingInline: `${rawTokens.spacing4}px`,\n    background: 'transparent',\n    border: 'none',\n    cursor: 'pointer' as const,\n    userSelect: 'none' as const,\n    color: colors.colorTextSecondary,\n    width: '100%'\n  },\n\n  staticSectionHeader: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`,\n    paddingBlock: `${rawTokens.spacing8}px`,\n    paddingInline: `${rawTokens.spacing4}px`,\n    background: 'transparent',\n    border: 'none',\n    userSelect: 'none' as const,\n    color: colors.colorTextPrimary,\n    width: '100%'\n  },\n\n  sectionHeaderChevron: {\n    width: 16,\n    height: 16,\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    transition: 'transform 150ms ease',\n    flexShrink: 0\n  },\n\n  sectionHeaderChevronCollapsed: {\n    transform: 'rotate(-90deg)'\n  },\n\n  sectionList: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: 1\n  },\n\n  recordRow: {\n    cursor: 'pointer' as const\n  },\n\n  divider: {\n    width: '100%',\n    height: 1,\n    alignSelf: 'stretch' as const,\n    backgroundColor: colors.colorBorderPrimary,\n    marginBlock: `${rawTokens.spacing8}px`,\n    flexShrink: 0\n  },\n\n  rowRightElement: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`\n  },\n\n  rowChevron: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    transform: 'rotate(-90deg)'\n  },\n\n  fadeGradient: {\n    position: 'absolute' as const,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    height: FADE_GRADIENT_HEIGHT,\n    pointerEvents: 'none' as const,\n    background: `linear-gradient(180deg, ${colors.colorSurfacePrimary}00 0%, ${colors.colorSurfacePrimary} 100%)`\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordListView/RecordListViewV2.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\nimport type { RecordSection } from '../../utils/groupRecordsByTimePeriod'\n\nconst mockNavigate = jest.fn()\nlet mockRouterData: Record<string, unknown> = {}\n\njest.mock('../../context/RouterContext', () => ({\n  useRouter: () => ({\n    currentPage: 'vault',\n    data: mockRouterData,\n    navigate: (...args: unknown[]) => mockNavigate(...args)\n  })\n}))\n\njest.mock('../../hooks/useTranslation', () => ({\n  useTranslation: () => ({ t: (key: string) => key })\n}))\n\njest.mock('../../components/RecordItemIcon', () => {\n  const React = require('react')\n  return {\n    RecordItemIcon: ({ record }: { record: { id: string } }) =>\n      React.createElement('div', {\n        'data-testid': `record-icon-${record.id}`\n      })\n  }\n})\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => {\n  const React = require('react')\n  return {\n    useTheme: () => ({\n      theme: {\n        colors: {\n          colorTextSecondary: '#888',\n          colorSurfaceDestructiveElevated: '#f00',\n          colorBorderPrimary: '#222',\n          colorSurfacePrimary: '#000'\n        }\n      }\n    }),\n    rawTokens: new Proxy({}, { get: () => 0 }),\n    ListItem: ({\n      title,\n      subtitle,\n      onClick,\n      testID,\n      isSelected,\n      selectionMode,\n      rightElement\n    }: {\n      title: string\n      subtitle?: string\n      onClick?: () => void\n      testID?: string\n      isSelected?: boolean\n      selectionMode?: string\n      rightElement?: React.ReactNode\n    }) =>\n      React.createElement(\n        'button',\n        {\n          type: 'button',\n          'data-testid': testID,\n          'data-selected': isSelected ? 'true' : 'false',\n          'data-selection-mode': selectionMode,\n          onClick\n        },\n        [\n          React.createElement('span', { key: 'title' }, title),\n          subtitle\n            ? React.createElement('span', { key: 'subtitle' }, subtitle)\n            : null,\n          rightElement\n            ? React.createElement(\n                'div',\n                { key: 'right', 'data-testid': `${testID}-right` },\n                rightElement\n              )\n            : null\n        ]\n      )\n  }\n})\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => {\n  const React = require('react')\n  const Stub = (name: string) =>\n    React.forwardRef((_: Record<string, unknown>, _ref: unknown) =>\n      React.createElement('span', { 'data-icon': name })\n    )\n  return {\n    ExpandMore: Stub('ExpandMore'),\n    StarFilled: Stub('StarFilled'),\n    ErrorFilled: Stub('ErrorFilled')\n  }\n})\n\njest.mock('./RecordRowContextMenuV2', () => {\n  return {\n    RecordRowContextMenuV2: () => null\n  }\n})\n\nimport { RecordListViewV2 } from './RecordListViewV2'\n\nconst makeSection = (\n  key: string,\n  titles: string[],\n  extras?: Partial<RecordSection>\n): RecordSection => ({\n  key,\n  title: key,\n  data: titles.map((title, i) => ({\n    id: `${key}-${i}`,\n    type: 'login',\n    data: { title, username: `${title.toLowerCase()}@example.com` }\n  })),\n  ...extras\n})\n\ndescribe('RecordListViewV2', () => {\n  beforeEach(() => {\n    mockRouterData = {}\n    mockNavigate.mockReset()\n  })\n\n  it('renders sections with titles translated and rows per record', () => {\n    const sections: RecordSection[] = [\n      makeSection('favorites', ['Fav One'], { isFavorites: true }),\n      makeSection('today', ['Today Item'])\n    ]\n    render(<RecordListViewV2 sections={sections} />)\n\n    expect(screen.getByText('Favorites')).toBeInTheDocument()\n    expect(screen.getByText('Today')).toBeInTheDocument()\n    expect(screen.getByText('Fav One')).toBeInTheDocument()\n    expect(screen.getByText('Today Item')).toBeInTheDocument()\n  })\n\n  it('collapses a section when its header is clicked', () => {\n    const sections: RecordSection[] = [makeSection('today', ['Row'])]\n    render(<RecordListViewV2 sections={sections} />)\n\n    expect(screen.getByText('Row')).toBeInTheDocument()\n    fireEvent.click(screen.getByTestId('record-list-section-today'))\n    expect(screen.queryByText('Row')).not.toBeInTheDocument()\n  })\n\n  it('navigates to record details on row click when not in multi-select', () => {\n    mockRouterData = { recordType: 'login' }\n    const sections: RecordSection[] = [makeSection('today', ['Row'])]\n    render(<RecordListViewV2 sections={sections} />)\n\n    fireEvent.click(screen.getByTestId('record-list-item-today-0'))\n    expect(mockNavigate).toHaveBeenCalledWith('vault', {\n      recordId: 'today-0',\n      recordType: 'login'\n    })\n  })\n\n  it('toggles selection instead of navigating when multi-select is on', () => {\n    const setSelectedRecords = jest.fn()\n    const sections: RecordSection[] = [makeSection('today', ['Row A', 'Row B'])]\n    render(\n      <RecordListViewV2\n        sections={sections}\n        isMultiSelectOn\n        selectedRecords={['today-0']}\n        setSelectedRecords={setSelectedRecords}\n      />\n    )\n\n    fireEvent.click(screen.getByTestId('record-list-item-today-1'))\n    expect(mockNavigate).not.toHaveBeenCalled()\n    expect(setSelectedRecords).toHaveBeenCalledTimes(1)\n    const updater = setSelectedRecords.mock.calls[0][0] as (\n      prev: string[]\n    ) => string[]\n    expect(updater(['today-0'])).toEqual(['today-0', 'today-1'])\n    expect(updater(['today-0', 'today-1'])).toEqual(['today-0'])\n  })\n\n  it('renders a divider between each pair of sections but not after the last', () => {\n    const sections: RecordSection[] = [\n      makeSection('today', ['A']),\n      makeSection('yesterday', ['B']),\n      makeSection('older', ['C'])\n    ]\n    render(<RecordListViewV2 sections={sections} />)\n    expect(screen.getAllByRole('separator')).toHaveLength(2)\n    expect(screen.getByTestId('record-list-divider-today')).toBeInTheDocument()\n    expect(\n      screen.getByTestId('record-list-divider-yesterday')\n    ).toBeInTheDocument()\n    expect(\n      screen.queryByTestId('record-list-divider-older')\n    ).not.toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/containers/RecordListView/RecordListViewV2.tsx",
    "content": "import React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { ListItem, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  ErrorFilled,\n  ExpandMore,\n  StarFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles } from './RecordListViewV2.styles'\nimport { RecordRowContextMenuV2 } from './RecordRowContextMenuV2'\nimport { RecordItemIcon } from '../../components/RecordItemIcon'\nimport { useRouter } from '../../context/RouterContext'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { getRecordSubtitle } from '../../utils/getRecordSubtitle'\nimport type {\n  RecordSection,\n  VaultRecord\n} from '../../utils/groupRecordsByTimePeriod'\n\nconst ROW_RECORD_ID_ATTR = 'data-record-id'\n\ntype RecordListViewV2Props = {\n  sections: RecordSection[]\n  isMultiSelectOn?: boolean\n  selectedRecords?: string[]\n  setSelectedRecords?: (\n    updater: string[] | ((prev: string[]) => string[])\n  ) => void\n  setIsMultiSelectOn?: (value: boolean) => void\n}\n\ntype ActiveContextMenu = {\n  record: VaultRecord\n  position: { x: number; y: number }\n}\n\nconst SECTION_TITLE_KEYS: Record<string, string> = {\n  favorites: 'Favorites',\n  all: 'All Items',\n  today: 'Today',\n  yesterday: 'Yesterday',\n  thisWeek: 'This Week',\n  thisMonth: 'This Month',\n  older: 'Older'\n}\n\nexport const RecordListViewV2 = ({\n  sections,\n  isMultiSelectOn = false,\n  selectedRecords = [],\n  setSelectedRecords,\n  setIsMultiSelectOn\n}: RecordListViewV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { currentPage, navigate, data: routeData } = useRouter()\n  const styles = createStyles(theme.colors)\n\n  const [collapsedSections, setCollapsedSections] = useState<\n    Record<string, boolean>\n  >({})\n  const [activeMenu, setActiveMenu] = useState<ActiveContextMenu | null>(null)\n\n  const allRecords = useMemo(\n    () => sections.flatMap((s) => s.data),\n    [sections]\n  )\n\n  const toggleSection = useCallback((key: string) => {\n    setCollapsedSections((prev) => ({ ...prev, [key]: !prev[key] }))\n  }, [])\n\n  const selectedRecordsSet = useMemo(\n    () => new Set(selectedRecords),\n    [selectedRecords]\n  )\n\n  const handleRecordPress = useCallback(\n    (record: VaultRecord) => {\n      if (isMultiSelectOn) {\n        setSelectedRecords?.((prev) =>\n          prev.includes(record.id)\n            ? prev.filter((id) => id !== record.id)\n            : [...prev, record.id]\n        )\n        return\n      }\n      const isAlreadyOpen = routeData?.recordId === record.id\n      navigate(currentPage, {\n        recordId: isAlreadyOpen ? '' : record.id,\n        recordType: routeData?.recordType\n      })\n    },\n    [\n      isMultiSelectOn,\n      setSelectedRecords,\n      navigate,\n      currentPage,\n      routeData?.recordId,\n      routeData?.recordType\n    ]\n  )\n\n  const handleRowContextMenu = useCallback(\n    (event: React.MouseEvent, record: VaultRecord) => {\n      if (isMultiSelectOn) return\n      event.preventDefault()\n      setActiveMenu({\n        record,\n        position: { x: event.clientX, y: event.clientY }\n      })\n    },\n    [isMultiSelectOn]\n  )\n\n  // The overlay covers rows while open; re-target right-clicks via the\n  // element stack at the cursor.\n  useEffect(() => {\n    if (!activeMenu) return\n    const handler = (event: MouseEvent) => {\n      event.preventDefault()\n      const stack = document.elementsFromPoint(event.clientX, event.clientY)\n      let recordId: string | null = null\n      for (const el of stack) {\n        const row = (el as HTMLElement).closest?.(`[${ROW_RECORD_ID_ATTR}]`) as\n          | HTMLElement\n          | null\n        if (row) {\n          recordId = row.getAttribute(ROW_RECORD_ID_ATTR)\n          break\n        }\n      }\n      const next = recordId\n        ? allRecords.find((r) => r.id === recordId)\n        : undefined\n      setActiveMenu(\n        next\n          ? { record: next, position: { x: event.clientX, y: event.clientY } }\n          : null\n      )\n    }\n    document.addEventListener('contextmenu', handler, true)\n    return () => document.removeEventListener('contextmenu', handler, true)\n  }, [activeMenu, allRecords])\n\n  const iconColor = theme.colors.colorTextSecondary\n  const alertColor = theme.colors.colorSurfaceDestructiveElevated\n\n  return (\n    <div style={styles.wrapper}>\n      <div style={styles.scrollArea} data-testid=\"record-list-v2\">\n        {sections.map((section, sectionIndex) => {\n          const isCollapsed = !!collapsedSections[section.key]\n          const labelKey = SECTION_TITLE_KEYS[section.key] ?? section.title\n          const label = t(labelKey)\n          const isLastSection = sectionIndex === sections.length - 1\n\n          return (\n            <React.Fragment key={section.key}>\n              <div style={styles.section}>\n                <button\n                  type=\"button\"\n                  style={styles.sectionHeader}\n                  onClick={() => toggleSection(section.key)}\n                  data-testid={`record-list-section-${section.key}`}\n                >\n                  <div\n                    style={{\n                      ...styles.sectionHeaderChevron,\n                      ...(isCollapsed\n                        ? styles.sectionHeaderChevronCollapsed\n                        : {})\n                    }}\n                  >\n                    <ExpandMore width={16} height={16} color={iconColor} />\n                  </div>\n\n                  {section.isFavorites && (\n                    <StarFilled width={14} height={14} color={iconColor} />\n                  )}\n\n                  <span>{label}</span>\n                </button>\n\n                {!isCollapsed && (\n                  <div style={styles.sectionList}>\n                    {section.data.map((record) => {\n                      const isSelected = selectedRecordsSet.has(record.id)\n                      return (\n                        <div\n                          key={record.id}\n                          {...{ [ROW_RECORD_ID_ATTR]: record.id }}\n                          onContextMenu={(event) =>\n                            handleRowContextMenu(event, record)\n                          }\n                        >\n                          <ListItem\n                            icon={<RecordItemIcon record={record} />}\n                            iconSize={32}\n                            title={record.data?.title ?? ''}\n                            subtitle={getRecordSubtitle(record) || undefined}\n                            selectionMode={\n                              isMultiSelectOn ? 'multi' : 'none'\n                            }\n                            isSelected={isSelected}\n                            onSelect={() => handleRecordPress(record)}\n                            onClick={() => handleRecordPress(record)}\n                            testID={`record-list-item-${record.id}`}\n                            isCheckboxSelectable={false}\n                            style={\n                              styles.recordRow as React.ComponentProps<\n                                typeof ListItem\n                              >['style']\n                            }\n                            rightElement={\n                              !isMultiSelectOn ? (\n                                <div style={styles.rowRightElement}>\n                                  {record.hasSecurityAlert && (\n                                    <ErrorFilled\n                                      width={20}\n                                      height={20}\n                                      color={alertColor}\n                                    />\n                                  )}\n                                  <div style={styles.rowChevron}>\n                                    <ExpandMore\n                                      width={20}\n                                      height={20}\n                                      color={iconColor}\n                                    />\n                                  </div>\n                                </div>\n                              ) : undefined\n                            }\n                          />\n                        </div>\n                      )\n                    })}\n                  </div>\n                )}\n              </div>\n              {!isLastSection && (\n                <div\n                  style={styles.divider}\n                  role=\"separator\"\n                  data-testid={`record-list-divider-${section.key}`}\n                />\n              )}\n            </React.Fragment>\n          )\n        })}\n      </div>\n\n      <div style={styles.fadeGradient} aria-hidden=\"true\" />\n\n      {activeMenu && (\n        <RecordRowContextMenuV2\n          key={activeMenu.record.id}\n          record={activeMenu.record}\n          open\n          position={activeMenu.position}\n          onOpenChange={(open) => {\n            if (!open) setActiveMenu(null)\n          }}\n          setIsMultiSelectOn={setIsMultiSelectOn}\n          setSelectedRecords={setSelectedRecords}\n        />\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordListView/RecordRowContextMenuV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const RECORD_ROW_CONTEXT_MENU_WIDTH = 240\n\nexport const createStyles = (colors: ThemeColors) => ({\n  menuDivider: {\n    width: '100%',\n    height: 1,\n    border: 'none',\n    margin: 0,\n    marginBlock: rawTokens.spacing4,\n    backgroundColor: colors.colorBorderPrimary,\n    flexShrink: 0\n  }\n})\n"
  },
  {
    "path": "src/containers/RecordListView/RecordRowContextMenuV2.tsx",
    "content": "import React, {\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState\n} from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { UNSUPPORTED } from '@tetherto/pearpass-lib-constants'\nimport { NavbarListItem, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  CheckBox,\n  CopyAll,\n  DriveFileMoveOutlined,\n  EditOutlined,\n  Share,\n  StarOutlined,\n  TrashOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n// @ts-expect-error - declaration file is incomplete\nimport { useCreateRecord, useRecords, vaultGetFile } from '@tetherto/pearpass-lib-vault'\n\nimport {\n  createStyles,\n  RECORD_ROW_CONTEXT_MENU_WIDTH\n} from './RecordRowContextMenuV2.styles'\nimport { useModal } from '../../context/ModalContext'\nimport { useCreateOrEditRecord } from '../../hooks/useCreateOrEditRecord'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { logger } from '../../utils/logger'\nimport type { VaultRecord } from '../../utils/groupRecordsByTimePeriod'\nimport { DeleteRecordsModalContentV2 } from '../Modal/DeleteRecordsModalContentV2'\nimport { MoveFolderModalContentV2 } from '../Modal/MoveFolderModalContentV2/MoveFolderModalContentV2'\n\nconst VIEWPORT_MARGIN = 8\n\nconst MENU_BOX_SHADOW =\n  '0 185px 52px 0 rgba(8,10,5,0.01), 0 118px 47px 0 rgba(8,10,5,0.06), 0 67px 40px 0 rgba(8,10,5,0.20), 0 30px 30px 0 rgba(8,10,5,0.34), 0 7px 16px 0 rgba(8,10,5,0.39)'\n\ntype RecordRowContextMenuV2Props = {\n  record: VaultRecord\n  open: boolean\n  position: { x: number; y: number }\n  onOpenChange: (open: boolean) => void\n  setIsMultiSelectOn?: (value: boolean) => void\n  setSelectedRecords?: (\n    updater: string[] | ((prev: string[]) => string[])\n  ) => void\n}\n\ntype FileAttachment = { id: string; name: string }\n\nexport const RecordRowContextMenuV2 = ({\n  record,\n  open,\n  position,\n  onOpenChange,\n  setIsMultiSelectOn,\n  setSelectedRecords\n}: RecordRowContextMenuV2Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { setModal } = useModal()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const { updateFavoriteState } = useRecords() as {\n    updateFavoriteState: (ids: string[], value: boolean) => Promise<void> | void\n  }\n  const { createRecord } = useCreateRecord()\n\n  const close = useCallback(() => onOpenChange(false), [onOpenChange])\n\n  const handleEdit = useCallback(() => {\n    close()\n    handleCreateOrEditRecord({\n      recordType: record.type,\n      initialRecord: record\n    })\n  }, [close, handleCreateOrEditRecord, record])\n\n  const handleToggleFavorite = useCallback(() => {\n    close()\n    void updateFavoriteState([record.id], !record.isFavorite)\n  }, [close, updateFavoriteState, record.id, record.isFavorite])\n\n  const handleSelectItem = useCallback(() => {\n    close()\n    setIsMultiSelectOn?.(true)\n    setSelectedRecords?.((prev) =>\n      prev.includes(record.id) ? prev : [...prev, record.id]\n    )\n  }, [close, setIsMultiSelectOn, setSelectedRecords, record.id])\n\n  const handleShareItem = useCallback(() => {\n    close()\n  }, [close])\n\n  const handleMove = useCallback(() => {\n    close()\n    setModal(<MoveFolderModalContentV2 records={[record]} />)\n  }, [close, setModal, record])\n\n  const fetchFileBuffers = useCallback(\n    async (files: FileAttachment[] | undefined) => {\n      if (!files?.length) return []\n      return Promise.all(\n        files.map(async ({ id, name }) => {\n          const buffer = await vaultGetFile(`record/${record.id}/file/${id}`)\n          return { name, buffer }\n        })\n      )\n    },\n    [record.id]\n  )\n\n  const handleDuplicate = useCallback(async () => {\n    close()\n    try {\n      const data: Record<string, unknown> = { ...(record.data ?? {}) }\n\n      data.attachments = await fetchFileBuffers(\n        record.data?.attachments as FileAttachment[] | undefined\n      )\n\n      if (record.type === 'identity') {\n        data.passportPicture = await fetchFileBuffers(\n          record.data?.passportPicture as FileAttachment[] | undefined\n        )\n        data.idCardPicture = await fetchFileBuffers(\n          record.data?.idCardPicture as FileAttachment[] | undefined\n        )\n        data.drivingLicensePicture = await fetchFileBuffers(\n          record.data?.drivingLicensePicture as FileAttachment[] | undefined\n        )\n      }\n\n      await createRecord({\n        type: record.type,\n        folder: record.folder,\n        isFavorite: record.isFavorite,\n        data\n      })\n    } catch (error) {\n      logger.error('RecordRowContextMenuV2', 'Failed to duplicate record', error)\n    }\n  }, [close, createRecord, fetchFileBuffers, record])\n\n  const handleDelete = useCallback(() => {\n    close()\n    setModal(<DeleteRecordsModalContentV2 records={[record]} />)\n  }, [close, setModal, record])\n\n  const textPrimary = theme.colors.colorTextPrimary\n  const destructive = theme.colors.colorSurfaceDestructiveElevated\n\n  const items = useMemo(\n    () => [\n      {\n        key: 'edit',\n        label: t('Edit'),\n        icon: <EditOutlined color={textPrimary} />,\n        onClick: handleEdit\n      },\n      {\n        key: 'favorite',\n        label: record.isFavorite\n          ? t('Remove from Favorites')\n          : t('Add to Favorites'),\n        icon: <StarOutlined color={textPrimary} />,\n        onClick: handleToggleFavorite\n      },\n      {\n        key: 'select',\n        label: t('Select Item'),\n        icon: <CheckBox color={textPrimary} />,\n        onClick: handleSelectItem\n      },\n      ...(UNSUPPORTED\n        ? [\n            {\n              key: 'share',\n              label: t('Share Item'),\n              icon: <Share color={textPrimary} />,\n              onClick: handleShareItem\n            }\n          ]\n        : []),\n      {\n        key: 'move',\n        label: t('Move to Another Folder'),\n        icon: <DriveFileMoveOutlined color={textPrimary} />,\n        onClick: handleMove\n      },\n      {\n        key: 'duplicate',\n        label: t('Duplicate'),\n        icon: <CopyAll color={textPrimary} />,\n        onClick: handleDuplicate\n      }\n    ],\n    [\n      t,\n      textPrimary,\n      record.isFavorite,\n      handleEdit,\n      handleToggleFavorite,\n      handleSelectItem,\n      handleShareItem,\n      handleMove,\n      handleDuplicate\n    ]\n  )\n\n  const menuRef = useRef<HTMLDivElement>(null)\n  // null until measured — keeps the menu hidden to avoid a one-frame flash.\n  const [coords, setCoords] = useState<{\n    top: number\n    left: number\n  } | null>(null)\n\n  useLayoutEffect(() => {\n    if (!open) {\n      setCoords(null)\n      return\n    }\n    const el = menuRef.current\n    if (!el) return\n\n    const rect = el.getBoundingClientRect()\n    const viewportWidth =\n      typeof window !== 'undefined' ? window.innerWidth : Infinity\n    const viewportHeight =\n      typeof window !== 'undefined' ? window.innerHeight : Infinity\n\n    const maxLeft = Math.max(\n      VIEWPORT_MARGIN,\n      viewportWidth - rect.width - VIEWPORT_MARGIN\n    )\n    const left = Math.min(Math.max(position.x, VIEWPORT_MARGIN), maxLeft)\n\n    const fitsBelow =\n      position.y + rect.height <= viewportHeight - VIEWPORT_MARGIN\n    const top = fitsBelow\n      ? position.y\n      : Math.max(VIEWPORT_MARGIN, position.y - rect.height)\n\n    setCoords({ top, left })\n  }, [open, position.x, position.y])\n\n  useEffect(() => {\n    if (!open) return\n    const handler = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') close()\n    }\n    document.addEventListener('keydown', handler)\n    return () => document.removeEventListener('keydown', handler)\n  }, [open, close])\n\n  if (!open || typeof document === 'undefined') return null\n\n  const visibility = coords === null ? 'hidden' : 'visible'\n  const top = coords?.top ?? position.y\n  const left = coords?.left ?? position.x\n\n  return createPortal(\n    <>\n      <div\n        onClick={close}\n        onContextMenu={(event) => event.preventDefault()}\n        style={{\n          position: 'fixed',\n          inset: 0,\n          backgroundColor: 'transparent',\n          zIndex: 999\n        }}\n      />\n      <div\n        ref={menuRef}\n        role=\"menu\"\n        data-testid={`record-row-menu-${record.id}`}\n        onClick={close}\n        style={{\n          position: 'fixed',\n          top,\n          left,\n          width: RECORD_ROW_CONTEXT_MENU_WIDTH,\n          visibility,\n          display: 'flex',\n          flexDirection: 'column',\n          alignItems: 'flex-start',\n          gap: 4,\n          backgroundColor: theme.colors.colorSurfacePrimary,\n          border: `1px solid ${theme.colors.colorBorderPrimary}`,\n          borderRadius: 8,\n          paddingBlock: 4,\n          paddingInline: 4,\n          zIndex: 1000,\n          boxSizing: 'border-box',\n          boxShadow: MENU_BOX_SHADOW\n        }}\n      >\n        {items.map((item) => (\n          <NavbarListItem\n            key={item.key}\n            size=\"small\"\n            icon={item.icon}\n            label={item.label}\n            onClick={item.onClick}\n            testID={`record-row-menu-${item.key}-${record.id}`}\n          />\n        ))}\n        <hr\n          style={styles.menuDivider}\n          data-testid={`record-row-menu-divider-${record.id}`}\n        />\n        <NavbarListItem\n          size=\"small\"\n          variant=\"destructive\"\n          icon={<TrashOutlined color={destructive} />}\n          label={t('Delete Item')}\n          onClick={handleDelete}\n          testID={`record-row-menu-delete-${record.id}`}\n        />\n      </div>\n    </>,\n    document.body\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordListView/index.tsx",
    "content": "import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { Dispatch, SetStateAction } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useRecords } from '@tetherto/pearpass-lib-vault'\n\nimport {\n  ActionsSection,\n  DatePeriod,\n  Folder,\n  LeftActions,\n  RecordsSection,\n  RightActions,\n  ViewWrapper\n} from './styles'\nimport { isStartOfLast14DaysGroup, isStartOfLast7DaysGroup } from './utils'\nimport { PopupMenu } from '../../components/PopupMenu'\nimport { Record } from '../../components/Record'\nimport { RecordSortActionsPopupContent } from '../../components/RecordSortActionsPopupContent'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport {\n  ArrowUpAndDown,\n  ButtonFilter,\n  DeleteIcon,\n  FolderIcon,\n  MoveToIcon,\n  MultiSelectionIcon,\n  StarIcon,\n  TimeIcon,\n  XIcon\n} from '../../lib-react-components'\nimport { FAVORITES_FOLDER_ID } from '../../utils/isFavorite'\nimport { isV2 } from '../../utils/designVersion'\nimport { ConfirmationModalContent } from '../Modal/ConfirmationModalContent'\nimport { MoveFolderModalContent } from '../Modal/MoveFolderModalContent'\nimport { MoveFolderModalContentV2 } from '../Modal/MoveFolderModalContentV2/MoveFolderModalContentV2'\n\nconst ITEM_HEIGHT_RECORD = 45\nconst ITEM_HEIGHT_HEADER = 30\nconst ITEM_GAP = 5\nconst OVERSCAN = 5\n\ntype VirtualItem =\n  | { kind: 'header'; label: string; index: number }\n  | { kind: 'record'; record: RecordItem; index: number }\n\ntype SortType = 'recent' | 'newToOld' | 'oldToNew'\n\ntype RecordItem = {\n  id: string\n  createdAt: number\n  updatedAt: number\n  isFavorite: boolean\n  vaultId: string\n  folder: string\n  type: 'note' | 'creditCard' | 'custom' | 'identity' | 'login'\n  data?: {\n    title?: string\n    [key: string]: unknown\n  }\n  otpPublic?: {\n    currentCode?: string | null\n  }\n}\n\ntype SortAction = {\n  name: string\n  icon: React.ComponentType\n  type: SortType\n}\n\ntype RecordListViewProps = {\n  records: RecordItem[]\n  selectedRecords: RecordItem[]\n  setSelectedRecords: Dispatch<SetStateAction<RecordItem[]>>\n  sortType: SortType\n  setSortType: (type: SortType) => void\n}\n\nconst PopupMenuComponent = PopupMenu as React.ComponentType<{\n  direction:\n    | 'top'\n    | 'bottom'\n    | 'left'\n    | 'right'\n    | 'topRight'\n    | 'topLeft'\n    | 'bottomRight'\n    | 'bottomLeft'\n  isOpen: boolean\n  setIsOpen: (value: boolean) => void\n  content: React.ReactNode\n  children: React.ReactNode\n}>\nconst RecordComponent = Record as React.ComponentType<{\n  testId: string\n  dataId: string\n  record: RecordItem\n  isSelected: boolean\n  otpCode: string | null\n  onSelect: (record: RecordItem, isSelected: boolean) => void\n  onClick: (record: RecordItem, isSelected: boolean) => void\n}>\nconst RecordSortActionsPopupContentComponent =\n  RecordSortActionsPopupContent as unknown as React.ComponentType<{\n    onClick: (type: SortType) => void\n    onClose: () => void\n    selectedType: SortType\n    menuItems: SortAction[]\n  }>\n\nexport const RecordListView = ({\n  records,\n  selectedRecords,\n  setSelectedRecords,\n  sortType,\n  setSortType\n}: RecordListViewProps) => {\n  const { i18n } = useLingui()\n  const { currentPage, navigate, data: routeData } = useRouter()\n  const { setModal, closeModal } = useModal()\n\n  const { deleteRecords } = useRecords()\n\n  const [isSortPopupOpen, setIsSortPopupOpen] = useState(false)\n  const [isMultiSelect, setIsMultiSelect] = useState(false)\n\n  const navigateRef = useRef(navigate)\n  const currentPageRef = useRef(currentPage)\n  const recordTypeRef = useRef(routeData.recordType)\n  const isMultiSelectRef = useRef(isMultiSelect)\n\n  navigateRef.current = navigate\n  currentPageRef.current = currentPage\n  recordTypeRef.current = routeData.recordType\n  isMultiSelectRef.current = isMultiSelect\n\n  const sortActions: SortAction[] = [\n    { name: i18n._('Recent'), icon: TimeIcon, type: 'recent' },\n    {\n      name: i18n._('Newest to oldest'),\n      icon: ArrowUpAndDown,\n      type: 'newToOld'\n    },\n    { name: i18n._('Oldest to newest'), icon: ArrowUpAndDown, type: 'oldToNew' }\n  ]\n\n  const selectedRecordIds = useMemo(\n    () => new Set(selectedRecords.map((r) => r.id)),\n    [selectedRecords]\n  )\n\n  // Refs & scroll state\n  const scrollContainerRef = useRef<HTMLDivElement>(null)\n  const [scrollTop, setScrollTop] = useState(0)\n  const [containerHeight, setContainerHeight] = useState(600)\n\n  const handleScroll = useCallback(() => {\n    if (scrollContainerRef.current) setScrollTop(scrollContainerRef.current.scrollTop)\n  }, [])\n\n  useEffect(() => {\n    const el = scrollContainerRef.current\n    if (!el) return\n    el.addEventListener('scroll', handleScroll, { passive: true })\n    return () => el.removeEventListener('scroll', handleScroll)\n  }, [handleScroll])\n\n  useEffect(() => {\n    const el = scrollContainerRef.current\n    if (!el) return\n    const ro = new ResizeObserver(([entry]) => setContainerHeight(entry.contentRect.height))\n    ro.observe(el)\n    return () => ro.disconnect()\n  }, [])\n\n  const flatItems = useMemo((): VirtualItem[] => {\n    const result: VirtualItem[] = []\n    records.forEach((record, originalIndex) => {\n      if (!record?.data) return\n      if (isStartOfLast7DaysGroup(record, originalIndex, records))\n        result.push({ kind: 'header', label: i18n._('Last 7 days'), index: result.length })\n      if (isStartOfLast14DaysGroup(record, originalIndex, records))\n        result.push({ kind: 'header', label: i18n._('Last 14 days'), index: result.length })\n      result.push({ kind: 'record', record, index: result.length })\n    })\n    return result\n  }, [records, i18n])\n\n  const itemHeights = useMemo(\n    () =>\n      flatItems.map((item) =>\n        item.kind === 'header' ? ITEM_HEIGHT_HEADER : ITEM_HEIGHT_RECORD\n      ),\n    [flatItems]\n  )\n\n  const itemOffsets = useMemo((): number[] => {\n    let top = 0\n    return flatItems.map((_, i) => {\n      const offset = top\n      const h = itemHeights[i]\n      top += h + (i < flatItems.length - 1 ? ITEM_GAP : 0)\n      return offset\n    })\n  }, [flatItems, itemHeights])\n\n  const totalHeight = useMemo(() => {\n    if (!flatItems.length) return 0\n    const last = flatItems.length - 1\n    return itemOffsets[last] + itemHeights[last]\n  }, [flatItems.length, itemHeights, itemOffsets])\n\n  const { startIndex, endIndex } = useMemo(() => {\n    if (!flatItems.length) return { startIndex: 0, endIndex: -1 }\n    const viewTop = scrollTop\n    const viewBottom = scrollTop + containerHeight\n\n    let lo = 0, hi = flatItems.length - 1\n    while (lo < hi) {\n      const mid = (lo + hi) >> 1\n      const h = itemHeights[mid]\n      if (itemOffsets[mid] + h <= viewTop) lo = mid + 1\n      else hi = mid\n    }\n    let end = lo\n    while (end < flatItems.length - 1 && itemOffsets[end + 1] < viewBottom) end++\n\n    return {\n      startIndex: Math.max(0, lo - OVERSCAN),\n      endIndex: Math.min(flatItems.length - 1, end + OVERSCAN)\n    }\n  }, [scrollTop, containerHeight, flatItems, itemHeights, itemOffsets])\n\n  const isRecordsSelected = selectedRecords.length > 0\n  const isFavorite = routeData.folder === FAVORITES_FOLDER_ID\n\n  const selectedSortAction =\n    sortActions.find((action) => action.type === sortType) ?? sortActions[0]\n\n  const openRecordDetails = useCallback((record: RecordItem) => {\n    navigateRef.current(currentPageRef.current, {\n      recordId: record?.id,\n      recordType: recordTypeRef.current\n    })\n  }, [])\n\n  const handleSelect = useCallback(\n    (record: RecordItem, isSelected: boolean) => {\n      setIsMultiSelect(true)\n\n      setSelectedRecords((prev) =>\n        isSelected\n          ? prev.filter((selectedRecord) => selectedRecord.id !== record?.id)\n          : [...prev, record]\n      )\n    },\n    [setSelectedRecords]\n  )\n\n  const handleRecordClick = useCallback(\n    (record: RecordItem, isSelected: boolean) => {\n      if (isMultiSelectRef.current) {\n        handleSelect(record, isSelected)\n        return\n      }\n\n      openRecordDetails(record)\n    },\n    [handleSelect, openRecordDetails]\n  )\n\n  const handleSortTypeChange = (type: SortType) => {\n    setSortType(type)\n  }\n\n  const onClearSelection = () => {\n    setSelectedRecords([])\n\n    setIsMultiSelect(false)\n  }\n\n  const handleDeleteConfirm = async () => {\n    await deleteRecords(selectedRecords.map((record) => record?.id))\n\n    onClearSelection()\n\n    closeModal()\n  }\n\n  const handleDelete = async () => {\n    setModal(\n      <ConfirmationModalContent\n        title={i18n._('Are you sure to delete this item(s)?')}\n        text={i18n._('This is permanent and cannot be undone')}\n        primaryLabel={i18n._('No')}\n        secondaryLabel={i18n._('Yes')}\n        secondaryAction={handleDeleteConfirm}\n        primaryAction={closeModal}\n      />\n    )\n  }\n\n  const handleMoveClick = () => {\n    const VersionBasedMoveFolderModalContent = isV2() ? MoveFolderModalContentV2 : MoveFolderModalContent\n\n    setModal(\n      <VersionBasedMoveFolderModalContent\n        records={selectedRecords}\n        onCompleted={() => onClearSelection()}\n      />\n    )\n  }\n\n  return (\n    <ViewWrapper>\n      <ActionsSection>\n        <LeftActions>\n          {isMultiSelect ? (\n            <>\n              <ButtonFilter\n                testId=\"multi-select-move-button\"\n                isDisabled={!isRecordsSelected}\n                startIcon={MoveToIcon}\n                onClick={handleMoveClick}\n              >\n                {i18n._('Move')}\n              </ButtonFilter>\n\n              <ButtonFilter\n                testId=\"multi-select-delete-button\"\n                isDisabled={!isRecordsSelected}\n                startIcon={DeleteIcon}\n                onClick={handleDelete}\n              >\n                {i18n._('Delete')}\n              </ButtonFilter>\n            </>\n          ) : (\n            <PopupMenuComponent\n              direction=\"bottomLeft\"\n              isOpen={isSortPopupOpen}\n              setIsOpen={setIsSortPopupOpen}\n              content={\n                <RecordSortActionsPopupContentComponent\n                  onClick={handleSortTypeChange}\n                  onClose={() => setIsSortPopupOpen(false)}\n                  selectedType={sortType}\n                  menuItems={sortActions}\n                />\n              }\n            >\n              <ButtonFilter\n                testId=\"sort-dropdown-button\"\n                startIcon={selectedSortAction.icon}\n                onClick={() => setIsSortPopupOpen((prev) => !prev)}\n              >\n                {selectedSortAction.name}\n              </ButtonFilter>\n            </PopupMenuComponent>\n          )}\n        </LeftActions>\n\n        <RightActions>\n          {isMultiSelect ? (\n            <ButtonFilter\n              testId=\"multi-select-cancel-button\"\n              onClick={onClearSelection}\n              startIcon={XIcon}\n            >\n              {i18n._('Cancel')}\n            </ButtonFilter>\n          ) : (\n            <ButtonFilter\n              testId=\"multi-select-button\"\n              onClick={() => setIsMultiSelect(true)}\n              startIcon={MultiSelectionIcon}\n            >\n              {i18n._('Multiple selection')}\n            </ButtonFilter>\n          )}\n        </RightActions>\n      </ActionsSection>\n\n      {!isMultiSelect &&\n        !!routeData?.folder?.length &&\n        (isFavorite ? (\n          <Folder>\n            <StarIcon /> {i18n._('Favorite')}\n          </Folder>\n        ) : (\n          <Folder>\n            <FolderIcon /> {routeData.folder}\n          </Folder>\n        ))}\n\n      <RecordsSection ref={scrollContainerRef} style={{ height: totalHeight || undefined }}>\n        {flatItems.slice(startIndex, endIndex + 1).map((item) => {\n          const top = itemOffsets[item.index]\n          if (item.kind === 'header') {\n            return (\n              <DatePeriod\n                key={`header-${item.label}`}\n                style={{ position: 'absolute', top, left: 0, right: 0, height: ITEM_HEIGHT_HEADER }}\n              >\n                {item.label}\n              </DatePeriod>\n            )\n          }\n          const { record } = item\n\n          const isSelected = selectedRecordIds.has(record.id)\n          return (\n            <div\n              key={record.id}\n              style={{ position: 'absolute', top, left: 0, right: 0, height: ITEM_HEIGHT_RECORD }}\n            >\n              <RecordComponent\n                testId=\"recordList-record-container\"\n                dataId={`${record.type}-list-item`}\n                record={record}\n                isSelected={selectedRecordIds.has(record.id)}\n                otpCode={record?.otpPublic?.currentCode ?? null}\n                onSelect={() => handleSelect(record, isSelected)}\n                onClick={() => handleRecordClick(record, isSelected)}\n              />\n            </div>\n          )\n        })}\n      </RecordsSection>\n    </ViewWrapper>\n  )\n}\n"
  },
  {
    "path": "src/containers/RecordListView/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ViewWrapper = styled.div`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 13px;\n`\n\nexport const ActionsSection = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n`\n\nexport const LeftActions = styled.div`\n  display: flex;\n  gap: 10px;\n`\n\nexport const RightActions = styled.div`\n  display: flex;\n`\n\nexport const Folder = styled.div`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: Inter;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const RecordsSection = styled.div`\n  width: 100%;\n  flex: 1;\n  min-height: 0;\n  overflow-y: auto;\n  position: relative;\n`\n\nexport const DatePeriod = styled.div`\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/containers/RecordListView/utils.js",
    "content": "import { MS_PER_WEEK } from '@tetherto/pearpass-lib-constants'\n/**\n * @param {{\n *  record: {\n *      updatedAt: number\n *  }\n * }}\n * @returns {boolean}\n */\nexport const isRecordInLast7Days = (record) => {\n  const now = Date.now()\n  const sevenDaysAgo = now - MS_PER_WEEK\n\n  return record?.updatedAt >= sevenDaysAgo\n}\n\n/**\n * @param {{\n *  record: {\n *      updatedAt: number\n *  }\n * }}\n * @returns {boolean}\n */\nexport const isRecordInLast14Days = (record) => {\n  const now = Date.now()\n  const fourteenDaysAgo = now - MS_PER_WEEK * 2\n  const sevenDaysAgo = now - MS_PER_WEEK\n\n  return (\n    record?.updatedAt >= fourteenDaysAgo && record?.updatedAt < sevenDaysAgo\n  )\n}\n\n/**\n * @param {{\n *  record: {\n *   isFavorite: boolean,\n *   updatedAt: number\n *  },\n *  index: number,\n *  sortedRecords: Array<{\n *    isFavorite: boolean,\n *    updatedAt: number\n *  }>\n * }}\n * @returns {boolean}\n */\nexport const isStartOfLast7DaysGroup = (record, index, sortedRecords) => {\n  const prevRecord = sortedRecords[index - 1]\n  const prevIsFavorite = prevRecord?.isFavorite\n\n  const isInLast7Days = isRecordInLast7Days(record)\n\n  return !record?.isFavorite && isInLast7Days && (index === 0 || prevIsFavorite)\n}\n\n/**\n * @param {{\n *  record: {\n *      updatedAt: number\n *  },\n *   index: number,\n *   sortedRecords: Array<{\n *    isFavorite: boolean\n *    updatedAt: number\n *  }>\n * }}\n * @returns {boolean}\n */\nexport const isStartOfLast14DaysGroup = (record, index, sortedRecords) => {\n  const prevRecord = sortedRecords[index - 1]\n  const prevIsFavorite = prevRecord?.isFavorite\n  const prevIsInLast7Days = prevRecord && isRecordInLast7Days(prevRecord)\n\n  const isInLast14Days = isRecordInLast14Days(record)\n\n  return (\n    !record?.isFavorite &&\n    isInLast14Days &&\n    (index === 0 || prevIsFavorite || prevIsInLast7Days)\n  )\n}\n"
  },
  {
    "path": "src/containers/Sidebar/SidebarCategories/index.js",
    "content": "import { useRecordCountsByType } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { CategoriesContainer } from './styles'\nimport { SidebarCategory } from '../../../components/SidebarCategory'\nimport { RECORD_COLOR_BY_TYPE } from '../../../constants/recordColorByType'\nimport { RECORD_ICON_BY_TYPE } from '../../../constants/recordIconByType'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useRecordMenuItems } from '../../../hooks/useRecordMenuItems'\n\n/**\n *\n * @param {{\n *  sidebarSize: 'default' | 'tight'\n * }} props\n */\nexport const SideBarCategories = ({ sidebarSize = 'default' }) => {\n  const { navigate, data: routerData } = useRouter()\n\n  const { menuItems } = useRecordMenuItems()\n  const { data: recordCountData } = useRecordCountsByType()\n\n  const handleRecordClick = (type) => {\n    navigate('vault', { ...routerData, recordType: type, folder: undefined })\n  }\n\n  return html`\n    <${CategoriesContainer} size=${sidebarSize}>\n      ${menuItems.map((record) => {\n        const count = recordCountData[record?.type] || 0\n        return html`\n          <${SidebarCategory}\n            testId=${`sidebar-category-${record?.type}`}\n            key=${record?.type}\n            categoryName=${record?.name}\n            color=${RECORD_COLOR_BY_TYPE[record?.type]}\n            quantity=${count}\n            isSelected=${routerData.recordType === record?.type}\n            icon=${RECORD_ICON_BY_TYPE[record?.type]}\n            onClick=${() => handleRecordClick(record?.type)}\n            size=${sidebarSize}\n          />\n        `\n      })}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Sidebar/SidebarCategories/styles.js",
    "content": "import styled from 'styled-components'\n\nimport { isV2 } from '../../../utils/designVersion'\n\nexport const CategoriesContainer = styled.div`\n  display: flex;\n  width: 100%;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  row-gap: ${({ size }) => (size === 'default' ? '8px' : '10px')};\n  column-gap: 12px;\n  ${isV2() && 'flex-shrink: 0;'}\n`\n"
  },
  {
    "path": "src/containers/Sidebar/SidebarV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { FADE_GRADIENT_HEIGHT, HEADER_MIN_HEIGHT } from '../../constants/layout'\n\nexport const SIDEBAR_WIDTH_EXPANDED = 250\nexport const SIDEBAR_WIDTH_COLLAPSED = 57\n\nconst SIDEBAR_HORIZONTAL_PADDING = rawTokens.spacing12\nconst FOLDERS_HEADER_HORIZONTAL_PADDING = rawTokens.spacing4\n\n// Icon (16) + padding (4×2) + border (1×2).\nconst COLLAPSED_SMALL_ICON_BUTTON_WIDTH = 26\nconst COLLAPSED_CHEVRON_WIDTH = 16\n\n// translateX offsets to re-center a flex-anchored child in the collapsed column.\nexport const COLLAPSE_BUTTON_CENTER_SHIFT_PX =\n  (SIDEBAR_WIDTH_COLLAPSED - COLLAPSED_SMALL_ICON_BUTTON_WIDTH) / 2 -\n  (SIDEBAR_WIDTH_COLLAPSED -\n    SIDEBAR_HORIZONTAL_PADDING -\n    COLLAPSED_SMALL_ICON_BUTTON_WIDTH)\n\nexport const FOLDERS_CHEVRON_CENTER_SHIFT_PX =\n  (SIDEBAR_WIDTH_COLLAPSED - COLLAPSED_CHEVRON_WIDTH) / 2 -\n  (SIDEBAR_HORIZONTAL_PADDING + FOLDERS_HEADER_HORIZONTAL_PADDING)\n\nexport const FOLDER_CONTEXT_MENU_WIDTH = 220\n\nexport const createStyles = (colors: ThemeColors, isCollapsed: boolean) => ({\n  wrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    height: '100%',\n    width: isCollapsed ? SIDEBAR_WIDTH_COLLAPSED : SIDEBAR_WIDTH_EXPANDED,\n    backgroundColor: colors.colorSurfacePrimary,\n    borderRight: `1px solid ${colors.colorBorderPrimary}`,\n    boxSizing: 'border-box' as const,\n    overflow: 'hidden' as const,\n    transition: 'width 150ms ease'\n  },\n\n  vaultSelector: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: rawTokens.spacing8,\n    width: '100%',\n    height: HEADER_MIN_HEIGHT,\n    padding: rawTokens.spacing12,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    backgroundColor: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const,\n    flexShrink: 0\n  },\n\n  vaultIconHidden: {\n    display: 'none' as const\n  },\n\n  vaultNameGroup: {\n    flex: 1,\n    minWidth: 0\n  },\n\n  vaultNameGroupHidden: {\n    display: 'none' as const\n  },\n\n  vaultNameRow: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: rawTokens.spacing4,\n    minWidth: 0,\n    cursor: 'pointer' as const,\n    userSelect: 'none' as const\n  },\n\n  vaultNameText: {\n    minWidth: 0,\n    overflow: 'hidden' as const,\n    textOverflow: 'ellipsis' as const,\n    whiteSpace: 'nowrap' as const,\n    color: colors.colorTextPrimary\n  },\n\n  chevron: {\n    flexShrink: 0,\n    transition: 'transform 150ms ease'\n  },\n\n  chevronFlipped: {\n    transform: 'rotate(180deg)'\n  },\n\n  collapseButtonSlot: {\n    marginInlineStart: 'auto' as const,\n    display: 'flex' as const,\n    // Use the individual-transform properties so `translate` can animate\n    // while `rotate` flips instantly.\n    translate: `${isCollapsed ? COLLAPSE_BUTTON_CENTER_SHIFT_PX : 0}px`,\n    rotate: `${isCollapsed ? 180 : 0}deg`,\n    transition: 'translate 150ms ease'\n  },\n\n  scrollContainer: {\n    position: 'relative' as const,\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    flex: 1,\n    minHeight: 0\n  },\n\n  scrollArea: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    flex: 1,\n    minHeight: 0,\n    gap: rawTokens.spacing8,\n    paddingInline: rawTokens.spacing12,\n    paddingTop: rawTokens.spacing12,\n    paddingBottom: FADE_GRADIENT_HEIGHT,\n    overflowY: 'auto' as const,\n    overflowX: 'hidden' as const\n  },\n\n  fadeGradient: {\n    position: 'absolute' as const,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    height: FADE_GRADIENT_HEIGHT,\n    pointerEvents: 'none' as const,\n    background: `linear-gradient(180deg, ${colors.colorSurfacePrimary}00 0%, ${colors.colorSurfacePrimary} 100%)`\n  },\n\n  sectionList: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: 1,\n    width: '100%'\n  },\n\n  divider: {\n    width: '100%',\n    height: 1,\n    backgroundColor: colors.colorBorderPrimary,\n    border: 'none',\n    margin: 0,\n    flexShrink: 0\n  },\n\n  foldersHeader: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: rawTokens.spacing4,\n    height: 32,\n    padding: `${rawTokens.spacing8}px ${rawTokens.spacing4}px`,\n    borderRadius: rawTokens.radius8,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  foldersHeaderToggle: {\n    flex: 1,\n    minWidth: 0\n  },\n\n  foldersHeaderToggleInner: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: rawTokens.spacing4,\n    cursor: 'pointer' as const,\n    userSelect: 'none' as const\n  },\n\n  // Kept mounted and allowed to shrink so the chevron keeps its size when collapsed.\n  foldersHeaderLabel: {\n    opacity: isCollapsed ? 0 : 1,\n    transition: 'opacity 150ms ease',\n    minWidth: 0,\n    overflow: 'hidden' as const,\n    whiteSpace: 'nowrap' as const\n  },\n\n  // Anchors the right-click ContextMenu so it opens just below the row,\n  // aligned to its right edge, regardless of where the cursor was clicked.\n  folderRow: {\n    position: 'relative' as const,\n    width: '100%'\n  },\n\n  folderRowMenuAnchor: {\n    position: 'absolute' as const,\n    bottom: 0,\n    right: 0\n  },\n\n  folderRowMenuTrigger: {\n    display: 'block' as const,\n    width: 0,\n    height: 0\n  },\n\n  footerSection: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: isCollapsed ? ('center' as const) : ('stretch' as const),\n    gap: 1,\n    padding: rawTokens.spacing12,\n    borderTop: `1px solid ${colors.colorBorderPrimary}`,\n    backgroundColor: colors.colorSurfacePrimary,\n    flexShrink: 0\n  }\n})\n"
  },
  {
    "path": "src/containers/Sidebar/SidebarV2.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen, waitFor } from '@testing-library/react'\n\nconst mockNavigate = jest.fn()\nconst mockCloseAllInstances = jest.fn()\nconst mockResetState = jest.fn()\nconst mockSetIsLoading = jest.fn()\nconst mockDeleteFolder = jest.fn()\nconst mockSetModal = jest.fn()\nconst mockCloseModal = jest.fn()\n\nlet mockRouterData: Record<string, unknown> = {}\nlet mockFoldersData: {\n  customFolders: Record<\n    string,\n    { name: string; records: Array<{ data?: unknown }> }\n  >\n  favorites: { records: unknown[] }\n} = { customFolders: {}, favorites: { records: [] } }\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  AUTHENTICATOR_ENABLED: false\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  RECORD_TYPES: {\n    LOGIN: 'login',\n    IDENTITY: 'identity',\n    CREDIT_CARD: 'credit_card',\n    NOTE: 'note',\n    CUSTOM: 'custom',\n    WIFI_PASSWORD: 'wifi_password',\n    PASS_PHRASE: 'pass_phrase'\n  },\n  closeAllInstances: (...args: unknown[]) => mockCloseAllInstances(...args),\n  useFolders: () => ({\n    data: mockFoldersData,\n    deleteFolder: mockDeleteFolder\n  }),\n  useRecordCountsByType: () => ({ data: {} }),\n  useVault: () => ({ data: { name: 'Test Vault' } }),\n  useVaults: () => ({ resetState: mockResetState })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => {\n  const React = require('react')\n  return {\n    useTheme: () => ({ theme: { colors: {} } }),\n    rawTokens: new Proxy({}, { get: () => 0 }),\n    Button: ({ onClick, 'data-testid': dataTestId, 'aria-label': ariaLabel }: {\n      onClick?: () => void\n      'data-testid'?: string\n      'aria-label'?: string\n    }) =>\n      React.createElement('button', {\n        type: 'button',\n        'data-testid': dataTestId,\n        'aria-label': ariaLabel,\n        onClick\n      }),\n    NavbarListItem: ({\n      label,\n      onClick,\n      onContextMenu,\n      testID\n    }: {\n      label?: string\n      onClick?: (e: React.MouseEvent) => void\n      onContextMenu?: (e: React.MouseEvent) => void\n      testID?: string\n    }) =>\n      React.createElement(\n        'button',\n        { type: 'button', 'data-testid': testID, onClick, onContextMenu },\n        label\n      ),\n    ContextMenu: ({\n      open,\n      children,\n      testID\n    }: {\n      open?: boolean\n      children?: React.ReactNode\n      testID?: string\n    }) =>\n      open\n        ? React.createElement(\n            'div',\n            { role: 'menu', 'data-testid': testID },\n            children\n          )\n        : null,\n    Text: ({ children }: { children: React.ReactNode }) =>\n      React.createElement('span', null, children)\n  }\n})\n\njest.mock(\n  '@tetherto/pearpass-lib-ui-kit/components/Pressable',\n  () => {\n    const React = require('react')\n    return {\n      Pressable: ({\n        children,\n        onClick,\n        'data-testid': dataTestId\n      }: {\n        children: React.ReactNode\n        onClick?: () => void\n        'data-testid'?: string\n      }) =>\n        React.createElement(\n          'button',\n          { type: 'button', 'data-testid': dataTestId, onClick },\n          children\n        )\n    }\n  },\n  { virtual: true }\n)\n\nconst iconStub = () => null\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  Add: iconStub,\n  Close: iconStub,\n  CreateNewFolder: iconStub,\n  EditOutlined: iconStub,\n  ExpandMore: iconStub,\n  Folder: iconStub,\n  FolderCopy: iconStub,\n  Layers: iconStub,\n  LockFilled: iconStub,\n  LockOutlined: iconStub,\n  MenuOpen: iconStub,\n  SettingsOutlined: iconStub,\n  StarBorder: iconStub,\n  StarFilled: iconStub,\n  TrashOutlined: iconStub,\n  TwoFactorAuthenticationOutlined: iconStub,\n  AccountCircleFilled: iconStub,\n  AccountCircleOutlined: iconStub,\n  AssignmentInd: iconStub,\n  CreditCard: iconStub,\n  FormatQuote: iconStub,\n  GridView: iconStub,\n  LayerFilled: iconStub,\n  Note: iconStub,\n  WiFi: iconStub\n}))\n\njest.mock('../../context/RouterContext', () => ({\n  useRouter: () => ({ navigate: mockNavigate, data: mockRouterData })\n}))\n\njest.mock('../../context/ModalContext', () => ({\n  useModal: () => ({ setModal: mockSetModal, closeModal: mockCloseModal })\n}))\n\njest.mock('../../context/LoadingContext', () => ({\n  useLoadingContext: () => ({ setIsLoading: mockSetIsLoading })\n}))\n\njest.mock('../../hooks/useTranslation', () => ({\n  useTranslation: () => ({ t: (s: string) => s })\n}))\n\njest.mock('../Modal/CreateFolderModalContentV2/CreateFolderModalContentV2', () => {\n  const React = require('react')\n  return {\n    CreateFolderModalContentV2: (props: { initialValues?: { title: string } }) =>\n      React.createElement('div', {\n        'data-testid': 'mock-create-folder-modal',\n        'data-initial-title': props.initialValues?.title ?? ''\n      })\n  }\n})\n\njest.mock('../Modal/DeleteFolderModalContentV2/DeleteFolderModalContentV2', () => {\n  const React = require('react')\n  return {\n    DeleteFolderModalContentV2: (props: { folderName: string; count: number }) =>\n      React.createElement('div', {\n        'data-testid': 'mock-delete-folder-modal',\n        'data-folder-name': props.folderName,\n        'data-count': String(props.count)\n      })\n  }\n})\n\nimport { SidebarV2 } from './SidebarV2'\n\nconst makeFolder = (\n  name: string,\n  itemCount: number\n): { name: string; records: Array<{ data?: unknown }> } => ({\n  name,\n  records: Array.from({ length: itemCount }, () => ({ data: {} }))\n})\n\ndescribe('SidebarV2 — lock app flow', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockRouterData = {}\n    mockFoldersData = { customFolders: {}, favorites: { records: [] } }\n  })\n\n  it('closes instances, navigates to master password, and resets vault state', async () => {\n    mockCloseAllInstances.mockImplementation(() => Promise.resolve())\n\n    render(<SidebarV2 />)\n\n    fireEvent.click(screen.getByTestId('sidebar-lock-app'))\n\n    await waitFor(() => {\n      expect(mockCloseAllInstances).toHaveBeenCalledTimes(1)\n    })\n    expect(mockNavigate).toHaveBeenCalledWith('welcome', {\n      state: 'masterPassword'\n    })\n    expect(mockResetState).toHaveBeenCalledTimes(1)\n    expect(mockSetIsLoading).toHaveBeenNthCalledWith(1, true)\n    expect(mockSetIsLoading).toHaveBeenLastCalledWith(false)\n  })\n\n  it('navigates to settings when Settings is clicked', async () => {\n    render(<SidebarV2 />)\n\n    fireEvent.click(screen.getByTestId('sidebar-settings-button'))\n\n    expect(mockNavigate).toHaveBeenCalledWith('settings', {})\n  })\n})\n\ndescribe('SidebarV2 — folder context menu', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockRouterData = {}\n    mockFoldersData = {\n      customFolders: {\n        work: makeFolder('work', 2),\n        empty: makeFolder('empty', 0),\n        other: makeFolder('other', 1)\n      },\n      favorites: { records: [] }\n    }\n  })\n\n  it('opens the menu with Rename and Delete on right-click', () => {\n    render(<SidebarV2 />)\n\n    expect(screen.queryByTestId('sidebar-folder-menu-work')).toBeNull()\n\n    fireEvent.contextMenu(screen.getByTestId('sidebar-folder-work'))\n\n    expect(screen.getByTestId('sidebar-folder-menu-work')).toBeInTheDocument()\n    expect(\n      screen.getByTestId('sidebar-folder-menu-rename-work')\n    ).toBeInTheDocument()\n    expect(\n      screen.getByTestId('sidebar-folder-menu-delete-work')\n    ).toBeInTheDocument()\n  })\n\n  it('Rename opens CreateFolderModalContentV2 prefilled with the folder title', () => {\n    render(<SidebarV2 />)\n\n    fireEvent.contextMenu(screen.getByTestId('sidebar-folder-work'))\n    fireEvent.click(screen.getByTestId('sidebar-folder-menu-rename-work'))\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n    const modal = mockSetModal.mock.calls[0][0] as React.ReactElement\n    render(modal)\n    const instance = screen.getByTestId('mock-create-folder-modal')\n    expect(instance.getAttribute('data-initial-title')).toBe('work')\n  })\n\n  it('Delete on an empty folder calls deleteFolder directly (no modal)', () => {\n    render(<SidebarV2 />)\n\n    fireEvent.contextMenu(screen.getByTestId('sidebar-folder-empty'))\n    fireEvent.click(screen.getByTestId('sidebar-folder-menu-delete-empty'))\n\n    expect(mockDeleteFolder).toHaveBeenCalledWith('empty')\n    expect(mockSetModal).not.toHaveBeenCalled()\n  })\n\n  it('Delete on an empty active folder navigates away to All Folders', () => {\n    mockRouterData = { folder: 'empty', recordType: 'all' }\n    render(<SidebarV2 />)\n\n    fireEvent.contextMenu(screen.getByTestId('sidebar-folder-empty'))\n    fireEvent.click(screen.getByTestId('sidebar-folder-menu-delete-empty'))\n\n    expect(mockDeleteFolder).toHaveBeenCalledWith('empty')\n    expect(mockNavigate).toHaveBeenCalledWith('vault', { recordType: 'all' })\n  })\n\n  it('Delete on a non-empty folder opens DeleteFolderModalContentV2 with the item count', () => {\n    render(<SidebarV2 />)\n\n    fireEvent.contextMenu(screen.getByTestId('sidebar-folder-work'))\n    fireEvent.click(screen.getByTestId('sidebar-folder-menu-delete-work'))\n\n    expect(mockDeleteFolder).not.toHaveBeenCalled()\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n    const modal = mockSetModal.mock.calls[0][0] as React.ReactElement\n    render(modal)\n    const instance = screen.getByTestId('mock-delete-folder-modal')\n    expect(instance.getAttribute('data-folder-name')).toBe('work')\n    expect(instance.getAttribute('data-count')).toBe('2')\n  })\n\n  it('opening one folder menu closes any other open menu', () => {\n    render(<SidebarV2 />)\n\n    fireEvent.contextMenu(screen.getByTestId('sidebar-folder-work'))\n    expect(screen.getByTestId('sidebar-folder-menu-work')).toBeInTheDocument()\n\n    fireEvent.contextMenu(screen.getByTestId('sidebar-folder-other'))\n    expect(screen.getByTestId('sidebar-folder-menu-other')).toBeInTheDocument()\n    expect(screen.queryByTestId('sidebar-folder-menu-work')).toBeNull()\n  })\n})\n"
  },
  {
    "path": "src/containers/Sidebar/SidebarV2.tsx",
    "content": "import React, { useMemo, useState } from 'react'\n\nimport { AUTHENTICATOR_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport {\n  closeAllInstances,\n  useFolders,\n  useRecordCountsByType,\n  useVault,\n  useVaults,\n  RECORD_TYPES\n} from '@tetherto/pearpass-lib-vault'\nimport {\n  Button,\n  ContextMenu,\n  NavbarListItem,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { Pressable } from '@tetherto/pearpass-lib-ui-kit/components/Pressable'\nimport {\n  Close,\n  CreateNewFolder,\n  EditOutlined,\n  ExpandMore,\n  Folder,\n  FolderCopy,\n  LockFilled,\n  LockOutlined,\n  MenuOpen,\n  SettingsOutlined,\n  StarBorder,\n  StarFilled,\n  TrashOutlined,\n  TwoFactorAuthenticationOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport {\n  createStyles,\n  FOLDER_CONTEXT_MENU_WIDTH,\n  FOLDERS_CHEVRON_CENTER_SHIFT_PX\n} from './SidebarV2.styles'\nimport { VaultSelector } from './VaultSelector/VaultSelector'\nimport { NAVIGATION_ROUTES } from '../../constants/navigation'\nimport { useLoadingContext } from '../../context/LoadingContext'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { useRecordMenuItemsV2 } from '../../hooks/useRecordMenuItemsV2'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { FAVORITES_FOLDER_ID } from '../../utils/isFavorite'\nimport { sortByName } from '../../utils/sortByName'\nimport { CreateFolderModalContentV2 } from '../Modal/CreateFolderModalContentV2/CreateFolderModalContentV2'\nimport { DeleteFolderModalContentV2 } from '../Modal/DeleteFolderModalContentV2/DeleteFolderModalContentV2'\n\nexport const SidebarV2 = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n\n  const [isCollapsed, setIsCollapsed] = useState(false)\n  const [isVaultSelectorOpen, setIsVaultSelectorOpen] = useState(false)\n  const [openFolderMenu, setOpenFolderMenu] = useState<string | null>(null)\n  const styles = createStyles(theme.colors, isCollapsed)\n\n  const { navigate, data: routerData } = useRouter()\n  const { data: vaultData } = useVault()\n  const { data: foldersData, deleteFolder } = useFolders()\n  const { data: recordCounts } = useRecordCountsByType()\n  const { resetState } = useVaults()\n  const { setModal, closeModal } = useModal()\n  const { setIsLoading } = useLoadingContext()\n\n  const [isFoldersExpanded, setIsFoldersExpanded] = useState(true)\n\n  const { categoriesItems } = useRecordMenuItemsV2()\n\n  const isAuthenticatorActive = routerData?.recordType === RECORD_TYPES.OTP\n  const activeCategory = isAuthenticatorActive\n    ? null\n    : (routerData?.recordType ?? null)\n  const isFavoritesActive = routerData?.folder === FAVORITES_FOLDER_ID\n  const selectedFolderName =\n    routerData?.folder && !isFavoritesActive ? routerData.folder : null\n\n  const customFolders = useMemo(() => {\n    const raw = Object.values(foldersData?.customFolders ?? {}) as Array<{\n      name: string\n      records: Array<{ data?: unknown }>\n    }>\n\n    return sortByName(\n      raw.map((folder) => ({\n        name: folder.name,\n        count: folder.records.filter((record) => !!record.data).length\n      }))\n    )\n  }, [foldersData])\n\n  const favoritesCount =\n    (foldersData?.favorites?.records?.length as number | undefined) ?? 0\n\n  const currentRecordType = routerData?.recordType ?? 'all'\n  const currentFolder = routerData?.folder\n  // Folder selection doesn't apply in authenticator mode; fall back to \"all\"\n  // so clicking a folder exits authenticator cleanly instead of landing on the\n  // nonsensical { recordType: RECORD_TYPES.OTP, folder: X } state.\n  const folderClickRecordType = isAuthenticatorActive ? 'all' : currentRecordType\n\n  const handleCategoryClick = (type: string) => {\n    navigate('vault', {\n      recordType: type,\n      ...(currentFolder ? { folder: currentFolder } : {})\n    })\n  }\n\n  const handleFolderClick = (folderId: string) => {\n    navigate('vault', { recordType: folderClickRecordType, folder: folderId })\n  }\n\n  const handleAllFoldersClick = () => {\n    navigate('vault', { recordType: folderClickRecordType })\n  }\n\n  const handleAddFolderClick = () => {\n    setModal(<CreateFolderModalContentV2 onClose={closeModal} />)\n  }\n\n  const handleRenameFolder = (folderName: string) => {\n    setModal(\n      <CreateFolderModalContentV2\n        initialValues={{ title: folderName }}\n        onClose={closeModal}\n        onRename={(newName, previousName) => {\n          if (routerData?.folder === previousName) {\n            navigate('vault', {\n              recordType: currentRecordType,\n              folder: newName\n            })\n          }\n        }}\n      />\n    )\n  }\n\n  const handleDeleteFolder = (folderName: string, count: number) => {\n    if (count === 0) {\n      void deleteFolder(folderName)\n      if (routerData?.folder === folderName) {\n        navigate('vault', { recordType: currentRecordType })\n      }\n      return\n    }\n    setModal(\n      <DeleteFolderModalContentV2\n        folderName={folderName}\n        count={count}\n        onClose={closeModal}\n      />\n    )\n  }\n\n  const handleSettingsClick = () => {\n    navigate('settings', {})\n  }\n\n  const handleLockApp = async () => {\n    setIsLoading(true)\n    try {\n      await closeAllInstances()\n      navigate('welcome', { state: NAVIGATION_ROUTES.MASTER_PASSWORD })\n      resetState()\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  const isAllFoldersActive = !isAuthenticatorActive && !routerData?.folder\n\n  const iconTextPrimary = { color: theme.colors.colorTextPrimary }\n  const iconTextSecondary = { color: theme.colors.colorTextSecondary }\n\n  const renderCollapseButton = () => (\n    <div style={styles.collapseButtonSlot}>\n      <Button\n        variant=\"tertiary\"\n        size=\"small\"\n        onClick={() => setIsCollapsed((value) => !value)}\n        data-testid=\"sidebar-collapse-toggle\"\n        aria-label={isCollapsed ? t('Expand sidebar') : t('Collapse sidebar')}\n        iconBefore={<MenuOpen style={iconTextPrimary} />}\n      />\n    </div>\n  )\n\n  const renderVaultHeader = () => {\n    const chevronStyle = {\n      ...iconTextPrimary,\n      ...styles.chevron,\n      ...(isVaultSelectorOpen ? styles.chevronFlipped : {})\n    }\n\n    const showCloseButton = !isCollapsed && isVaultSelectorOpen\n    const rightButton = showCloseButton ? (\n      <Button\n        variant=\"tertiary\"\n        size=\"small\"\n        onClick={() => setIsVaultSelectorOpen(false)}\n        data-testid=\"sidebar-vault-selector-close\"\n        aria-label={t('Close vault selector')}\n        iconBefore={<Close style={iconTextPrimary} />}\n      />\n    ) : (\n      renderCollapseButton()\n    )\n\n    return (\n      <div style={styles.vaultSelector} data-testid=\"sidebar-vault-selector\">\n        <div style={isCollapsed ? styles.vaultIconHidden : undefined}>\n          <LockFilled width={16} height={16} style={iconTextPrimary} />\n        </div>\n        <div\n          style={{\n            ...styles.vaultNameGroup,\n            ...(isCollapsed ? styles.vaultNameGroupHidden : {})\n          }}\n        >\n          <Pressable\n            onClick={() => setIsVaultSelectorOpen((value) => !value)}\n            data-testid=\"sidebar-vault-selector-toggle\"\n            aria-label={\n              isVaultSelectorOpen\n                ? t('Close vault selector')\n                : t('Open vault selector')\n            }\n          >\n            <div style={styles.vaultNameRow}>\n              <div style={styles.vaultNameText}>\n                <Text variant=\"labelEmphasized\">\n                  {vaultData?.name ?? t('Personal')}\n                </Text>\n              </div>\n              <ExpandMore width={16} height={16} style={chevronStyle} />\n            </div>\n          </Pressable>\n        </div>\n        {rightButton}\n      </div>\n    )\n  }\n\n  return (\n    <aside style={styles.wrapper} data-testid=\"sidebar-v2\">\n      {renderVaultHeader()}\n\n      <div style={styles.scrollContainer}>\n        <div style={styles.scrollArea}>\n        {isVaultSelectorOpen && (\n          <VaultSelector onClose={() => setIsVaultSelectorOpen(false)} />\n        )}\n\n        {!isVaultSelectorOpen && (\n          <>\n            <div style={styles.sectionList}>\n              {categoriesItems.map((item) => {\n            const selected = activeCategory === item.type\n            const Icon = selected ? item.FilledIcon : item.OutlinedIcon\n            const iconColor = selected\n              ? theme.colors.colorTextPrimary\n              : theme.colors.colorTextSecondary\n\n            return (\n              <NavbarListItem\n                key={item.type}\n                testID={`sidebar-category-${item.type}`}\n                label={item.label}\n                count={isCollapsed ? undefined : recordCounts?.[item.type] ?? 0}\n                selected={selected}\n                variant={selected ? 'default' : 'secondary'}\n                size=\"small\"\n                icon={<Icon color={iconColor} />}\n                onClick={() => handleCategoryClick(item.type)}\n              />\n            )\n          })}\n        </div>\n\n        <hr style={styles.divider} />\n\n        <div style={styles.sectionList}>\n          <div style={styles.foldersHeader}>\n            <div style={styles.foldersHeaderToggle}>\n              <Pressable\n                onClick={() => setIsFoldersExpanded((value) => !value)}\n                data-testid=\"sidebar-folders-toggle\"\n                aria-label={t('Folders')}\n              >\n                <div style={styles.foldersHeaderToggleInner}>\n                  <ExpandMore\n                    width={16}\n                    height={16}\n                    style={{\n                      ...iconTextSecondary,\n                      ...styles.chevron,\n                      transform: `translateX(${\n                        isCollapsed ? FOLDERS_CHEVRON_CENTER_SHIFT_PX : 0\n                      }px) rotate(${!isFoldersExpanded ? -90 : 0}deg)`\n                    }}\n                  />\n                  <div style={styles.foldersHeaderLabel}>\n                    <Text\n                      variant=\"labelEmphasized\"\n                      color={theme.colors.colorTextSecondary}\n                    >\n                      {t('Folders')}\n                    </Text>\n                  </div>\n                </div>\n              </Pressable>\n            </div>\n\n            {!isCollapsed && (\n              <Button\n                variant=\"tertiary\"\n                size=\"small\"\n                onClick={handleAddFolderClick}\n                data-testid=\"sidebar-folder-add\"\n                aria-label={t('Add folder')}\n                iconBefore={<CreateNewFolder style={iconTextSecondary} />}\n              />\n            )}\n          </div>\n\n          {isFoldersExpanded && (\n            <>\n              <NavbarListItem\n                testID=\"sidebar-folder-all\"\n                label={t('All Folders')}\n                count={isCollapsed ? undefined : recordCounts?.all ?? 0}\n                selected={isAllFoldersActive}\n                variant={isAllFoldersActive ? 'default' : 'secondary'}\n                size=\"small\"\n                icon={\n                  <FolderCopy\n                    color={\n                      isAllFoldersActive\n                        ? theme.colors.colorTextPrimary\n                        : theme.colors.colorTextSecondary\n                    }\n                  />\n                }\n                onClick={handleAllFoldersClick}\n              />\n\n              <NavbarListItem\n                testID=\"sidebar-folder-favorites\"\n                label={t('Favorites')}\n                count={isCollapsed ? undefined : favoritesCount}\n                selected={isFavoritesActive}\n                variant={isFavoritesActive ? 'default' : 'secondary'}\n                size=\"small\"\n                icon={\n                  isFavoritesActive ? (\n                    <StarFilled color={theme.colors.colorTextPrimary} />\n                  ) : (\n                    <StarBorder color={theme.colors.colorTextSecondary} />\n                  )\n                }\n                onClick={() => handleFolderClick(FAVORITES_FOLDER_ID)}\n              />\n\n              {customFolders.map((folder) => (\n                <FolderRow\n                  key={folder.name}\n                  folder={folder}\n                  selected={selectedFolderName === folder.name}\n                  isCollapsed={isCollapsed}\n                  menuOpen={openFolderMenu === folder.name}\n                  onMenuOpenChange={(open) =>\n                    setOpenFolderMenu(open ? folder.name : null)\n                  }\n                  styles={styles}\n                  theme={theme}\n                  onSelect={handleFolderClick}\n                  onRename={handleRenameFolder}\n                  onDelete={handleDeleteFolder}\n                  t={t}\n                />\n              ))}\n            </>\n          )}\n        </div>\n          </>\n        )}\n        </div>\n        <div style={styles.fadeGradient} aria-hidden=\"true\" />\n      </div>\n\n      {AUTHENTICATOR_ENABLED && (\n        <div style={styles.footerSection}>\n          <NavbarListItem\n            testID=\"sidebar-authenticator\"\n            label={t('Authenticator')}\n            size=\"small\"\n            selected={routerData?.recordType === RECORD_TYPES.OTP}\n            variant={\n              routerData?.recordType === RECORD_TYPES.OTP\n                ? 'default'\n                : 'secondary'\n            }\n            icon={\n              <TwoFactorAuthenticationOutlined\n                color={\n                  routerData?.recordType === RECORD_TYPES.OTP\n                    ? theme.colors.colorTextPrimary\n                    : theme.colors.colorTextSecondary\n                }\n              />\n            }\n            onClick={() => navigate('vault', { recordType: RECORD_TYPES.OTP })}\n          />\n        </div>\n      )}\n\n      <div style={styles.footerSection}>\n        <NavbarListItem\n          testID=\"sidebar-settings-button\"\n          label={t('Settings')}\n          size=\"small\"\n          variant=\"default\"\n          icon={<SettingsOutlined color={theme.colors.colorTextPrimary} />}\n          onClick={handleSettingsClick}\n        />\n        <NavbarListItem\n          testID=\"sidebar-lock-app\"\n          label={t('Lock App')}\n          size=\"small\"\n          variant=\"default\"\n          icon={<LockOutlined color={theme.colors.colorTextPrimary} />}\n          onClick={handleLockApp}\n        />\n      </div>\n    </aside>\n  )\n}\n\ntype FolderRowProps = {\n  folder: { name: string; count: number }\n  selected: boolean\n  isCollapsed: boolean\n  menuOpen: boolean\n  onMenuOpenChange: (open: boolean) => void\n  styles: ReturnType<typeof createStyles>\n  theme: ReturnType<typeof useTheme>['theme']\n  onSelect: (folderName: string) => void\n  onRename: (folderName: string) => void\n  onDelete: (folderName: string, count: number) => void\n  t: ReturnType<typeof useTranslation>['t']\n}\n\nconst FolderRow = ({\n  folder,\n  selected,\n  isCollapsed,\n  menuOpen,\n  onMenuOpenChange,\n  styles,\n  theme,\n  onSelect,\n  onRename,\n  onDelete,\n  t\n}: FolderRowProps) => {\n  const iconColor = selected\n    ? theme.colors.colorTextPrimary\n    : theme.colors.colorTextSecondary\n\n  const withMenuClose = (handler: () => void) => () => {\n    onMenuOpenChange(false)\n    handler()\n  }\n\n  return (\n    <div style={styles.folderRow}>\n      <NavbarListItem\n        testID={`sidebar-folder-${folder.name}`}\n        label={folder.name}\n        count={isCollapsed ? undefined : folder.count}\n        selected={selected}\n        variant={selected ? 'default' : 'secondary'}\n        size=\"small\"\n        icon={<Folder color={iconColor} />}\n        onClick={() => onSelect(folder.name)}\n        onContextMenu={(e: React.MouseEvent) => {\n          e.preventDefault()\n          onMenuOpenChange(true)\n        }}\n      />\n      <div style={styles.folderRowMenuAnchor}>\n        <ContextMenu\n          open={menuOpen}\n          onOpenChange={onMenuOpenChange}\n          menuWidth={FOLDER_CONTEXT_MENU_WIDTH}\n          testID={`sidebar-folder-menu-${folder.name}`}\n          trigger={<span style={styles.folderRowMenuTrigger} />}\n        >\n          <NavbarListItem\n            size=\"small\"\n            icon={<EditOutlined color={theme.colors.colorTextPrimary} />}\n            label={t('Rename Folder')}\n            testID={`sidebar-folder-menu-rename-${folder.name}`}\n            onClick={withMenuClose(() => onRename(folder.name))}\n          />\n          <NavbarListItem\n            size=\"small\"\n            variant=\"destructive\"\n            icon={\n              <TrashOutlined\n                color={theme.colors.colorSurfaceDestructiveElevated}\n              />\n            }\n            label={t('Delete Folder')}\n            testID={`sidebar-folder-menu-delete-${folder.name}`}\n            onClick={withMenuClose(() => onDelete(folder.name, folder.count))}\n          />\n        </ContextMenu>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/Sidebar/VaultSelector/VaultSelector.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const VAULT_ACTIONS_MENU_WIDTH = 215\n\nexport const createStyles = (colors: ThemeColors) => ({\n  wrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: rawTokens.spacing4,\n    width: '100%'\n  },\n\n  titleRow: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: rawTokens.spacing4,\n    padding: `${rawTokens.spacing8}px ${rawTokens.spacing4}px`,\n    borderRadius: rawTokens.radius8,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  titleLabel: {\n    flex: 1,\n    minWidth: 0\n  },\n\n  list: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: 1,\n    width: '100%',\n    cursor: 'pointer' as const\n  },\n\n  vaultRow: {\n    minHeight: '58px',\n    gap: `${rawTokens.spacing8}px`,\n    paddingInline: `${rawTokens.spacing8}px`\n  },\n\n  rowActions: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing8}px`\n  },\n\n  iconActionButton: {\n    paddingInline: '0',\n    paddingBlock: '0',\n    borderWidth: '0'\n  },\n\n  menuGroup: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    width: '100%'\n  },\n\n  menuDivider: {\n    width: '100%',\n    height: 1,\n    backgroundColor: colors.colorBorderPrimary,\n    border: 'none',\n    margin: 0,\n    flexShrink: 0\n  }\n})\n"
  },
  {
    "path": "src/containers/Sidebar/VaultSelector/VaultSelector.tsx",
    "content": "import React, { useMemo, useState } from 'react'\n\nimport { UNSUPPORTED } from '@tetherto/pearpass-lib-constants'\nimport {\n  useInvite,\n  useVault,\n  useVaults,\n  type Vault\n} from '@tetherto/pearpass-lib-vault'\nimport {\n  Button,\n  ContextMenu,\n  ListItem,\n  NavbarListItem,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  Add,\n  Devices,\n  EditOutlined,\n  Key,\n  LockFilled,\n  MoreVert,\n  PersonAddAlt,\n  Share,\n  TrashOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { createStyles, VAULT_ACTIONS_MENU_WIDTH } from './VaultSelector.styles'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { sortByName } from '../../../utils/sortByName'\nimport { AddDeviceModalContentV2 } from '../../Modal/AddDeviceModalContentV2/AddDeviceModalContentV2'\nimport { CreateOrEditVaultModalContentV2 } from '../../Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2'\nimport { DeleteVaultModalContent } from '../../Modal/DeleteVaultModalContent'\nimport { ModifyVaultModalContent } from '../../Modal/ModifyVaultModalContent'\nimport { PairedDevicesModalContent } from '../../Modal/PairedDevicesModalContent'\nimport { useVaultSwitch } from '../../../hooks/useVaultSwitch'\n\ntype VaultSelectorProps = {\n  onClose?: () => void\n}\n\nexport const VaultSelector = ({ onClose }: VaultSelectorProps = {}) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { setIsLoading } = useLoadingContext()\n  const { setModal, closeModal } = useModal()\n  const { switchVault } = useVaultSwitch()\n\n  const { data: vaultsData } = useVaults()\n  const { data: activeVault } = useVault()\n  const { data: inviteData, createInvite } = useInvite()\n\n  const vaults = useMemo<Vault[]>(\n    () => sortByName(vaultsData ?? []),\n    [vaultsData]\n  )\n\n  const iconPrimary = { color: theme.colors.colorTextPrimary }\n  const iconSecondary = { color: theme.colors.colorTextSecondary }\n  const iconDestructive = {\n    color: theme.colors.colorSurfaceDestructiveElevated\n  }\n\n  const openInviteModal = async (vault: Vault) => {\n    if (inviteData?.vaultId !== vault.id) {\n      setIsLoading(true)\n      try {\n        await createInvite()\n      } finally {\n        setIsLoading(false)\n      }\n    }\n    setModal(<AddDeviceModalContentV2 />)\n  }\n\n  const handleCreate = () => {\n    setModal(\n      <CreateOrEditVaultModalContentV2\n        onClose={closeModal}\n        onSuccess={() => {\n          closeModal()\n          onClose?.()\n        }}\n      />\n    )\n  }\n\n  const handleVaultClick = (vault: Vault) => {\n    if (activeVault?.id !== vault.id) {\n      void switchVault(vault)\n    }\n    onClose?.()\n  }\n\n  const handleInvite = (vault: Vault) => {\n    openInviteModal(vault)\n  }\n\n  const handleRename = (vault: Vault) => {\n    setModal(\n      <CreateOrEditVaultModalContentV2\n        vault={vault}\n        onClose={closeModal}\n        onSuccess={closeModal}\n      />\n    )\n  }\n\n  const handleSetPassword = (vault: Vault) => {\n    void switchVault(vault, () => {\n      setModal(\n        <ModifyVaultModalContent vaultId={vault.id} vaultName={vault.name} />\n      )\n    })\n  }\n\n  const handleDelete = (vault: Vault) => {\n    setModal(<DeleteVaultModalContent vaultId={vault.id} />)\n  }\n\n  const handleViewDevices = () => {\n    setModal(<PairedDevicesModalContent />)\n  }\n\n  return (\n    <div style={styles.wrapper} data-testid=\"vault-selector\">\n      <div style={styles.titleRow}>\n        <div style={styles.titleLabel}>\n          <Text\n            variant=\"labelEmphasized\"\n            color={theme.colors.colorTextSecondary}\n          >\n            {t('Vaults')}\n          </Text>\n        </div>\n        <Button\n          variant=\"tertiary\"\n          size=\"small\"\n          data-testid=\"vault-selector-create\"\n          aria-label={t('Create new vault')}\n          onClick={handleCreate}\n          iconBefore={<Add style={iconSecondary} />}\n        />\n      </div>\n\n      <div style={styles.list}>\n        {vaults.map((vault) => (\n          <VaultRow\n            key={vault.id}\n            vault={vault}\n            isActive={vault.id === activeVault?.id}\n            iconPrimary={iconPrimary}\n            iconDestructive={iconDestructive}\n            styles={styles}\n            onSelect={handleVaultClick}\n            onInvite={handleInvite}\n            onRename={handleRename}\n            onViewDevices={handleViewDevices}\n            onManageMembers={handleInvite}\n            onSetPassword={handleSetPassword}\n            onDelete={handleDelete}\n          />\n        ))}\n      </div>\n    </div>\n  )\n}\n\ntype VaultRowProps = {\n  vault: Vault\n  isActive: boolean\n  iconPrimary: { color: string }\n  iconDestructive: { color: string }\n  styles: ReturnType<typeof createStyles>\n  onSelect: (vault: Vault) => void\n  onInvite: (vault: Vault) => void\n  onRename: (vault: Vault) => void\n  onViewDevices: () => void\n  onManageMembers: (vault: Vault) => void\n  onSetPassword: (vault: Vault) => void\n  onDelete: (vault: Vault) => void\n}\n\nconst VaultRow = ({\n  vault,\n  isActive,\n  iconPrimary,\n  iconDestructive,\n  styles,\n  onSelect,\n  onInvite,\n  onRename,\n  onViewDevices,\n  onManageMembers,\n  onSetPassword,\n  onDelete\n}: VaultRowProps) => {\n  const { t } = useTranslation()\n  const [menuOpen, setMenuOpen] = useState(false)\n\n  const withMenuClose = (handler: (vault: Vault) => void) => () => {\n    setMenuOpen(false)\n    handler(vault)\n  }\n\n  const stopPropagation = (event: React.MouseEvent) => {\n    event.stopPropagation()\n  }\n\n  const actionButtonStyle = styles.iconActionButton as React.ComponentProps<\n    typeof Button\n  >['style']\n\n  const rightElement = (\n    <div\n      style={styles.rowActions}\n      onClick={stopPropagation}\n      data-testid={`vault-row-actions-${vault.id}`}\n    >\n      <Button\n        variant=\"tertiary\"\n        size=\"small\"\n        data-testid={`vault-row-invite-${vault.id}`}\n        aria-label={t('Invite to vault')}\n        onClick={() => onInvite(vault)}\n        style={actionButtonStyle}\n        iconBefore={\n          <PersonAddAlt width={16} height={16} color={iconPrimary.color} />\n        }\n      />\n      <ContextMenu\n        open={menuOpen}\n        onOpenChange={setMenuOpen}\n        menuWidth={VAULT_ACTIONS_MENU_WIDTH}\n        testID={`vault-row-menu-${vault.id}`}\n        trigger={\n          <Button\n            variant=\"tertiary\"\n            size=\"small\"\n            aria-label={t('Vault actions')}\n            style={actionButtonStyle}\n            iconBefore={\n              <MoreVert width={16} height={16} color={iconPrimary.color} />\n            }\n          />\n        }\n      >\n        <div style={styles.menuGroup}>\n          <NavbarListItem\n            size=\"small\"\n            icon={<EditOutlined color={iconPrimary.color} />}\n            label={t('Rename')}\n            testID={`vault-row-rename-${vault.id}`}\n            onClick={withMenuClose(onRename)}\n          />\n          <NavbarListItem\n            size=\"small\"\n            icon={<Devices width={16} height={16} color={iconPrimary.color} />}\n            label={t('View Paired Devices')}\n            testID={`vault-row-devices-${vault.id}`}\n            onClick={() => {\n              setMenuOpen(false)\n              onViewDevices()\n            }}\n          />\n          {UNSUPPORTED && (\n            <>\n              <NavbarListItem\n                size=\"small\"\n                icon={<Share color={iconPrimary.color} />}\n                label={t('Manage Members')}\n                testID={`vault-row-members-${vault.id}`}\n                onClick={withMenuClose(onManageMembers)}\n              />\n              <NavbarListItem\n                size=\"small\"\n                icon={<Key color={iconPrimary.color} />}\n                label={t('Set Vault Password')}\n                testID={`vault-row-password-${vault.id}`}\n                onClick={withMenuClose(onSetPassword)}\n              />\n            </>\n          )}\n        </div>\n        {UNSUPPORTED && (\n          <>\n            <hr style={styles.menuDivider} />\n            <div style={styles.menuGroup}>\n              <NavbarListItem\n                size=\"small\"\n                variant=\"destructive\"\n                icon={<TrashOutlined color={iconDestructive.color} />}\n                label={t('Delete')}\n                testID={`vault-row-delete-${vault.id}`}\n                onClick={withMenuClose(onDelete)}\n              />\n            </div>\n          </>\n        )}\n      </ContextMenu>\n    </div>\n  )\n\n  return (\n    <ListItem\n      icon={<LockFilled color={iconPrimary.color} />}\n      iconSize={16}\n      title={vault.name}\n      selected={isActive}\n      style={styles.vaultRow as React.ComponentProps<typeof ListItem>['style']}\n      testID={`vault-row-${vault.id}`}\n      onClick={() => onSelect(vault)}\n      rightElement={isActive ? rightElement : undefined}\n    />\n  )\n}\n"
  },
  {
    "path": "src/containers/Sidebar/index.js",
    "content": "import React, { useEffect, useMemo, useState } from 'react'\n\nimport { matchPatternToValue } from '@tetherto/pear-apps-utils-pattern-search'\nimport { AUTHENTICATOR_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport {\n  closeAllInstances,\n  useFolders,\n  useVault,\n  useVaults,\n  RECORD_TYPES\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { SideBarCategories } from './SidebarCategories'\nimport {\n  FoldersWrapper,\n  LogoWrapper,\n  PearPass,\n  SettingsContainer,\n  SettingsSeparator,\n  SidebarAuthenticatorSection,\n  sideBarContent,\n  SidebarNestedFoldersContainer,\n  SidebarSettings,\n  SidebarWrapper\n} from './styles'\nimport { DropdownSwapVault } from '../../components/DropdownSwapVault'\nimport { SidebarFolder } from '../../components/SidebarFolder'\nimport { SidebarSearch } from '../../components/SidebarSearch'\nimport { NAVIGATION_ROUTES } from '../../constants/navigation'\nimport { useLoadingContext } from '../../context/LoadingContext'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { useTranslation } from '../../hooks/useTranslation.js'\nimport {\n  ButtonThin,\n  ExitIcon,\n  LockIcon,\n  SettingsIcon,\n  StarIcon,\n  UserSecurityIcon\n} from '../../lib-react-components'\nimport { LogoLock } from '../../svgs/LogoLock'\nimport { isV2 } from '../../utils/designVersion'\nimport { FAVORITES_FOLDER_ID } from '../../utils/isFavorite'\nimport { sortByName } from '../../utils/sortByName'\nimport { AddDeviceModalContent } from '../Modal/AddDeviceModalContent'\nimport { AddDeviceModalContentV2 } from '../Modal/AddDeviceModalContentV2/AddDeviceModalContentV2'\nimport { CreateFolderModalContent } from '../Modal/CreateFolderModalContent'\nimport { CreateFolderModalContentV2 } from '../Modal/CreateFolderModalContentV2/CreateFolderModalContentV2'\n\n/**\n * @param {{\n *    sidebarSize?: 'default' | 'tight'\n * }} props\n */\nexport const Sidebar = ({ sidebarSize = 'tight' }) => {\n  const { t } = useTranslation()\n  const { navigate, data: routerData } = useRouter()\n\n  const [searchValue, setSearchValue] = useState('')\n\n  const { setIsLoading } = useLoadingContext()\n\n  const { data } = useFolders()\n\n  const {\n    data: vaultsData,\n    resetState,\n    refetch: refetchMasterVault\n  } = useVaults()\n\n  const { data: vaultData } = useVault()\n\n  const vaults = useMemo(\n    () => sortByName(vaultsData?.filter((vault) => vault.id !== vaultData?.id)),\n    [vaultsData, vaultData]\n  )\n\n  const handleSettingsClick = () => {\n    navigate('settings', {})\n  }\n\n  const openMainView = () => {\n    navigate('vault', { recordType: 'all' })\n  }\n\n  const handleExitVault = async () => {\n    setIsLoading(true)\n    await closeAllInstances()\n    navigate('welcome', { state: NAVIGATION_ROUTES.MASTER_PASSWORD })\n    resetState()\n    setIsLoading(false)\n  }\n\n  const folders = React.useMemo(() => {\n    const { customFolders } = data || {}\n\n    const otherFolders = Object.values(customFolders ?? {})\n      .map(({ name }) => ({\n        name,\n        id: name,\n        isActive: routerData?.folder === name\n      }))\n      .sort((a, b) => a.name.localeCompare(b.name))\n\n    const filteredFolders = searchValue\n      ? otherFolders.filter((folder) =>\n          matchPatternToValue(searchValue, folder.name)\n        )\n      : otherFolders\n\n    const allItemsFolder = {\n      name: t('All Items'),\n      id: 'allItems',\n      isRoot: true,\n      isActive: !routerData?.folder && routerData?.recordType === 'all'\n    }\n\n    const favoritesFolder = {\n      name: t('Favorites'),\n      id: FAVORITES_FOLDER_ID,\n      icon: StarIcon,\n      isActive: routerData?.folder === FAVORITES_FOLDER_ID\n    }\n\n    return [allItemsFolder, favoritesFolder, ...filteredFolders]\n  }, [data, t, routerData, searchValue])\n\n  const { setModal, closeModal } = useModal()\n\n  const handleAddDevice = () => {\n    setModal(isV2() ? <AddDeviceModalContentV2 /> : <AddDeviceModalContent />)\n  }\n\n  const handleAddFolderClick = () => {\n    isV2()\n      ? setModal(<CreateFolderModalContentV2 onClose={closeModal} />)\n      : setModal(html`<${CreateFolderModalContent} />`)\n  }\n\n  const handleFolderClick = (id) => {\n    if (id === 'allItems') {\n      navigate('vault', { recordType: 'all' })\n      return\n    }\n\n    if (id === RECORD_TYPES.OTP) {\n      navigate('vault', { recordType: RECORD_TYPES.OTP })\n      return\n    }\n\n    navigate('vault', { recordType: 'all', folder: id })\n  }\n\n  useEffect(() => {\n    refetchMasterVault()\n  }, [])\n\n  return html`\n    <${SidebarWrapper} size=${sidebarSize}>\n      <${LogoWrapper} onClick=${openMainView}>\n        <${LogoLock} width=\"20\" height=\"26\" />\n        <${PearPass}>${window.electronAPI?.productName ?? 'PearPass'}<//>\n      <//>\n\n      <${sideBarContent}>\n        <${DropdownSwapVault} vaults=${vaults} selectedVault=${vaultData} />\n\n        <${SideBarCategories} sidebarSize=${sidebarSize} />\n\n        ${data &&\n        html`\n          <${SidebarNestedFoldersContainer}>\n            <${SidebarSearch}\n              testId=\"sidebar-folder-search\"\n              value=${searchValue}\n              onChange=${setSearchValue}\n            />\n\n            <${FoldersWrapper}>\n              ${folders.map(({ id, isRoot, name, icon, isActive }) => {\n                const hasMenu = id !== FAVORITES_FOLDER_ID && !isRoot\n\n                return html`<${SidebarFolder}\n                  key=${id}\n                  isOpen=${false}\n                  onClick=${() => handleFolderClick(id)}\n                  onAddClick=${handleAddFolderClick}\n                  isRoot=${isRoot}\n                  name=${name}\n                  icon=${icon}\n                  isActive=${isActive}\n                  hasMenu=${hasMenu}\n                />`\n              })}\n            <//>\n\n            ${AUTHENTICATOR_ENABLED &&\n            html`\n              <${SidebarAuthenticatorSection}>\n                <${SidebarFolder}\n                  key=\"authenticator\"\n                  isOpen=${false}\n                  onClick=${() => handleFolderClick(RECORD_TYPES.OTP)}\n                  name=${t('Authenticator')}\n                  icon=${LockIcon}\n                  isActive=${routerData?.recordType === RECORD_TYPES.OTP}\n                  hasMenu=${false}\n                />\n              <//>\n            `}\n          <//>\n        `}\n      <//>\n\n      <${SidebarSettings}>\n        <${SettingsContainer}\n          data-testid=\"sidebar-settings-button\"\n          onClick=${handleSettingsClick}\n        >\n          <${SettingsIcon} size=\"24\" />\n          ${t('Settings')}\n        <//>\n\n        <${SettingsSeparator} />\n\n        <${ButtonThin}\n          testId=\"sidebar-adddevice-button\"\n          startIcon=${UserSecurityIcon}\n          onClick=${handleAddDevice}\n        >\n          ${t('Add a Device')}\n        <//>\n\n        <${ButtonThin}\n          testId=\"sidebar-exit-button\"\n          startIcon=${ExitIcon}\n          onClick=${handleExitVault}\n        >\n          ${t('Exit Vault')}\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/Sidebar/styles.js",
    "content": "import styled from 'styled-components'\n\nimport { isV2 } from '../../utils/designVersion'\n\nexport const SidebarWrapper = styled.div`\n  display: flex;\n  gap: 20px;\n  padding: 25px 20px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  width: ${({ size }) => (size === 'tight' ? '245px' : '296px')};\n  height: 100%;\n  flex-direction: column;\n  justify-content: space-between;\n  align-items: flex-start;\n  align-self: stretch;\n  border-right: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  background: ${({ theme }) => theme.colors.grey500.mode1};\n  height: 100%;\n`\n\nexport const LogoWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  cursor: pointer;\n`\n\nexport const PearPass = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: 32px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n  height: 26px;\n`\n\nexport const sideBarContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  width: 100%;\n  gap: 20px;\n  min-height: 0;\n  overflow: hidden;\n  ${isV2() &&\n  `\n    overflow-y: auto;\n    overflow-x: hidden;\n    padding-right: 4px;\n    \n    &::-webkit-scrollbar {\n      width: 4px;\n    }\n    &::-webkit-scrollbar-thumb {\n      background: rgba(255, 255, 255, 0.1);\n      border-radius: 10px;\n    }\n    &::-webkit-scrollbar-track {\n      background: transparent;\n    }\n    padding-bottom: 20px;\n  `}\n`\n\nexport const SidebarNestedFoldersContainer = styled.div`\n  padding: 10px 0;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  ${isV2() ? 'flex-shrink: 0;' : 'flex: 1; min-height: 0;'}\n`\n\nexport const FoldersWrapper = styled.div`\n  overflow-y: ${isV2() ? 'visible' : 'auto'};\n  display: flex;\n  flex-direction: column;\n  ${isV2() ? 'flex-shrink: 0;' : 'min-height: 0;'}\n`\n\nexport const SidebarAuthenticatorSection = styled.div`\n  margin-top: 8px;\n  padding-top: 8px;\n  border-top: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  flex-shrink: 0;\n`\n\nexport const SidebarSettings = styled.div`\n  width: 100%;\n  flex-grow: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`\n\nexport const SettingsContainer = styled.div`\n  display: flex;\n  align-items: center;\n  padding: 0px 5px;\n  gap: 5px;\n  cursor: pointer;\n`\n\nexport const SettingsSeparator = styled.div`\n  width: 100%;\n  height: 2px;\n  background: ${({ theme }) => theme.colors.grey300.mode1};\n`\n"
  },
  {
    "path": "src/containers/WifiPasswordQRCode/WifiPasswordQRCodeV2.tsx",
    "content": "import { useEffect, useState } from 'react'\n\nimport { generateQRCodeSVG } from '@tetherto/pear-apps-utils-qr'\nimport { rawTokens, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { logger } from '../../utils/logger'\n\ninterface Props {\n  ssid?: string\n  password?: string\n  encryptionType?: string\n  isHidden?: boolean\n}\n\nexport const WifiPasswordQRCodeV2 = ({\n  ssid,\n  password,\n  encryptionType = 'WPA',\n  isHidden = false\n}: Props) => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const [qrCodeSvg, setQrCodeSvg] = useState('')\n\n  useEffect(() => {\n    if (!ssid || !password) {\n      setQrCodeSvg('')\n      return\n    }\n    const wifiString = `WIFI:T:${encryptionType};S:${ssid};P:${password};H:${isHidden};;`\n    generateQRCodeSVG(wifiString, { type: 'svg', margin: 0 })\n      .then((svg: string) => setQrCodeSvg(svg))\n      .catch((err: unknown) => logger.error('Error generating QR code:', err))\n  }, [ssid, password, encryptionType, isHidden])\n\n  if (!ssid || !password || !qrCodeSvg) return null\n\n  return (\n    <div\n      data-testid=\"wifidetails-qrcode-v2\"\n      style={{\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n        gap: `${rawTokens.spacing20}px`,\n        padding: `${rawTokens.spacing24}px ${rawTokens.spacing20}px`\n      }}\n    >\n      <Text variant=\"label\" color={theme.colors.colorTextSecondary}>\n        {t('Scan QR Code to connect with the Wi-Fi')}\n      </Text>\n      <div\n        style={{\n          padding: `${rawTokens.spacing12}px`,\n          borderRadius: `${rawTokens.radius8}px`,\n          backgroundColor: theme.colors.colorSurfaceHover,\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center'\n        }}\n      >\n        <div\n          style={{ width: 188, height: 188 }}\n          dangerouslySetInnerHTML={{ __html: qrCodeSvg }}\n        />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/containers/WifiPasswordQRCode/index.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { generateQRCodeSVG } from '@tetherto/pear-apps-utils-qr'\nimport { html } from 'htm/react'\n\nimport { Container, QRCode, QrContainer, Title } from './styles'\nimport { logger } from '../../utils/logger'\n\n/**\n * @param {{\n *   ssid: string\n *   password: string\n *   encryptionType?: string\n *   isHidden?: boolean\n * }} props\n */\nexport const WifiPasswordQRCode = ({\n  ssid,\n  password,\n  encryptionType = 'WPA',\n  isHidden = false\n}) => {\n  const { i18n } = useLingui()\n\n  const [qrCodeSvg, setQrCodeSvg] = useState('')\n\n  const generateWifiQRString = (\n    ssid,\n    password,\n    encryptionType = 'WPA',\n    isHidden = false\n  ) => `WIFI:T:${encryptionType};S:${ssid};P:${password};H:${isHidden};;`\n\n  useEffect(() => {\n    if (ssid && password) {\n      const wifiString = generateWifiQRString(\n        ssid,\n        password,\n        encryptionType,\n        isHidden\n      )\n\n      generateQRCodeSVG(wifiString, { type: 'svg', margin: 0 })\n        .then((svgString) => {\n          setQrCodeSvg(svgString)\n        })\n        .catch((error) => {\n          logger.error('Error generating QR code:', error)\n        })\n    }\n  }, [ssid, password, encryptionType, isHidden])\n\n  if (!ssid || !password || !qrCodeSvg) {\n    return null\n  }\n\n  return html`\n    <${Container} data-testid=\"wifidetails-qrcode\">\n      <${Title}> ${i18n._(`Scan the QR-Code to connect to the Wi-Fi`)} <//>\n      <${QrContainer}>\n        <${QRCode}\n          style=${{ width: '200px', height: '200px' }}\n          dangerouslySetInnerHTML=${{ __html: qrCodeSvg }}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/containers/WifiPasswordQRCode/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  width: 100%;\n  display: flex;\n  padding: 20px 10px;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  align-self: stretch;\n\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.grey500.mode1};\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n`\n\nexport const QrContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`\n\nexport const QRCode = styled.div`\n  width: 226px;\n  height: 226px;\n  padding: 15px;\n  border-radius: 10px;\n  background-color: ${({ theme }) => theme.colors.white.mode1};\n`\n"
  },
  {
    "path": "src/context/AppHeaderContext.test.js",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, screen, act } from '@testing-library/react'\nimport { renderHook } from '@testing-library/react'\n\nimport {\n  AppHeaderContextProvider,\n  useAppHeaderContext\n} from './AppHeaderContext'\n\nconst Consumer = () => {\n  const { searchValue, setSearchValue, isAddMenuOpen, setIsAddMenuOpen } =\n    useAppHeaderContext()\n\n  return (\n    <div>\n      <span data-testid=\"search\">{searchValue}</span>\n      <span data-testid=\"menu-open\">{String(isAddMenuOpen)}</span>\n      <button\n        type=\"button\"\n        data-testid=\"set-search\"\n        onClick={() => setSearchValue('hello')}\n      >\n        set\n      </button>\n      <button\n        type=\"button\"\n        data-testid=\"toggle-menu\"\n        onClick={() => setIsAddMenuOpen((open) => !open)}\n      >\n        toggle\n      </button>\n    </div>\n  )\n}\n\ndescribe('AppHeaderContext', () => {\n  it('throws when useAppHeaderContext is used outside AppHeaderContextProvider', () => {\n    const spy = jest.spyOn(console, 'error').mockImplementation(() => {})\n\n    expect(() => {\n      renderHook(() => useAppHeaderContext())\n    }).toThrow(\n      'useAppHeaderContext must be used within AppHeaderContextProvider'\n    )\n\n    spy.mockRestore()\n  })\n\n  it('provides default state', () => {\n    render(\n      <AppHeaderContextProvider>\n        <Consumer />\n      </AppHeaderContextProvider>\n    )\n\n    expect(screen.getByTestId('search')).toHaveTextContent('')\n    expect(screen.getByTestId('menu-open')).toHaveTextContent('false')\n  })\n\n  it('updates searchValue and isAddMenuOpen via setters', () => {\n    render(\n      <AppHeaderContextProvider>\n        <Consumer />\n      </AppHeaderContextProvider>\n    )\n\n    act(() => {\n      screen.getByTestId('set-search').click()\n    })\n    expect(screen.getByTestId('search')).toHaveTextContent('hello')\n\n    act(() => {\n      screen.getByTestId('toggle-menu').click()\n    })\n    expect(screen.getByTestId('menu-open')).toHaveTextContent('true')\n\n    act(() => {\n      screen.getByTestId('toggle-menu').click()\n    })\n    expect(screen.getByTestId('menu-open')).toHaveTextContent('false')\n  })\n})\n"
  },
  {
    "path": "src/context/AppHeaderContext.tsx",
    "content": "import React, {\n  createContext,\n  useContext,\n  useMemo,\n  useState,\n  type Dispatch,\n  type ReactNode,\n  type SetStateAction\n} from 'react'\n\nexport type AppHeaderContextState = {\n  searchValue: string\n  setSearchValue: Dispatch<SetStateAction<string>>\n  isAddMenuOpen: boolean\n  setIsAddMenuOpen: Dispatch<SetStateAction<boolean>>\n}\n\nconst AppHeaderContext = createContext<AppHeaderContextState | null>(null)\n\nexport const AppHeaderContextProvider = ({\n  children\n}: {\n  children: ReactNode\n}) => {\n  const [searchValue, setSearchValue] = useState('')\n  const [isAddMenuOpen, setIsAddMenuOpen] = useState(false)\n\n  const value = useMemo(\n    (): AppHeaderContextState => ({\n      searchValue,\n      setSearchValue,\n      isAddMenuOpen,\n      setIsAddMenuOpen\n    }),\n    [searchValue, isAddMenuOpen]\n  )\n\n  return (\n    <AppHeaderContext.Provider value={value}>\n      {children}\n    </AppHeaderContext.Provider>\n  )\n}\n\nexport const useAppHeaderContext = (): AppHeaderContextState => {\n  const ctx = useContext(AppHeaderContext)\n  if (!ctx) {\n    throw new Error(\n      'useAppHeaderContext must be used within AppHeaderContextProvider'\n    )\n  }\n  return ctx\n}\n"
  },
  {
    "path": "src/context/BannerContext.js",
    "content": "import { createContext, useContext, useEffect, useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { BannerBox } from '../components/BannerBox'\nimport { CHROME_EXTENSION_STORE_LINK } from '../constants/pearpassLinks'\nimport { useTranslation } from '../hooks/useTranslation'\nimport { isNativeMessagingIPCRunning } from '../services/nativeMessagingIPCServer'\nimport { getNativeMessagingEnabled } from '../services/nativeMessagingPreferences'\n\nconst BannerContext = createContext()\n\nexport const BannerProvider = ({ children }) => {\n  const { t } = useTranslation()\n\n  const [visible, setVisible] = useState(false)\n\n  useEffect(() => {\n    const enabled = getNativeMessagingEnabled()\n    const isRunning = isNativeMessagingIPCRunning()\n\n    if (!enabled || !isRunning) {\n      setVisible(true)\n    }\n  }, [])\n\n  const showBanner = () => {\n    setVisible(true)\n  }\n\n  const hideBanner = () => {\n    setVisible(false)\n  }\n\n  return html`\n    <${BannerContext.Provider}\n      value=${{\n        visible,\n        showBanner,\n        hideBanner\n      }}\n    >\n      ${children}\n      ${visible &&\n      html`\n        <${BannerBox}\n          onClose=${hideBanner}\n          isVisible=${visible}\n          href=${CHROME_EXTENSION_STORE_LINK}\n          title=${t('You’ve got the app. Now unlock the full experience.')}\n          message=${t(\n            'Install our browser extension to autofill passwords, save new logins in a click, and log in instantly,right where you browse.'\n          )}\n          highlightedDescription=${t(\n            'No more copy-paste. No more interruptions. Just seamless security.'\n          )}\n          buttonText=${t('Download now')}\n        />\n      `}\n    <//>\n  `\n}\n\nexport const useBanner = () => useContext(BannerContext)\n"
  },
  {
    "path": "src/context/LoadingContext.js",
    "content": "import {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useState\n} from 'react'\n\nimport { html } from 'htm/react'\n\nimport { LoadingOverlay } from '../components/LoadingOverlay'\n\nconst LoadingContext = createContext()\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n * }} props\n */\nexport const LoadingProvider = ({ children }) => {\n  // Ref-counted so concurrent callers don't stomp each other's loading state.\n  const [count, setCount] = useState(0)\n\n  const setIsLoading = useCallback((isLoading) => {\n    setCount((prev) => {\n      if (isLoading) return prev + 1\n      return prev > 0 ? prev - 1 : 0\n    })\n  }, [])\n\n  const isLoading = count > 0\n\n  return html`\n    <${LoadingContext.Provider} value=${{ isLoading, setIsLoading }}>\n      ${children} ${isLoading && html`<${LoadingOverlay} />`}\n    <//>\n  `\n}\n\n/**\n * @returns {{\n *  isLoading: boolean,\n *  setIsLoading: (isLoading: boolean) => void\n * }}\n */\nexport const useLoadingContext = () => useContext(LoadingContext)\n\n/**\n * @param {{\n *  isLoading: boolean\n * }} props\n */\nexport const useGlobalLoading = ({ isLoading }) => {\n  const { setIsLoading } = useLoadingContext()\n\n  useEffect(() => {\n    if (isLoading !== true) return\n    setIsLoading(true)\n    return () => setIsLoading(false)\n  }, [isLoading, setIsLoading])\n}\n"
  },
  {
    "path": "src/context/LoadingContext.test.js",
    "content": "import React from 'react'\n\nimport { render, act } from '@testing-library/react'\n\nimport {\n  LoadingProvider,\n  useLoadingContext,\n  useGlobalLoading\n} from './LoadingContext'\nimport '@testing-library/jest-dom'\n\njest.mock('../components/LoadingOverlay', () => ({\n  LoadingOverlay: () => 'LoadingOverlay'\n}))\n\ndescribe('LoadingContext', () => {\n  describe('LoadingProvider', () => {\n    it('should render children', () => {\n      const { getByText } = render(\n        <LoadingProvider>\n          <div>Test Child</div>\n        </LoadingProvider>\n      )\n\n      expect(getByText('Test Child')).toBeInTheDocument()\n    })\n\n    it('should show LoadingOverlay when loading', () => {\n      const { container } = render(\n        <LoadingProvider>\n          <div>Test Child</div>\n        </LoadingProvider>\n      )\n\n      expect(container.innerHTML).not.toContain('LoadingOverlay')\n\n      const TestComponent = () => {\n        const { setIsLoading } = useLoadingContext()\n        return <button onClick={() => setIsLoading(true)}>Load</button>\n      }\n\n      const { getByText } = render(\n        <LoadingProvider>\n          <TestComponent />\n        </LoadingProvider>\n      )\n\n      act(() => {\n        getByText('Load').click()\n      })\n\n      expect(container.innerHTML).toContain('Test Child')\n    })\n  })\n\n  describe('useLoadingContext', () => {\n    it('should provide loading state and setter', () => {\n      let contextValue\n\n      const TestComponent = () => {\n        contextValue = useLoadingContext()\n        return null\n      }\n\n      render(\n        <LoadingProvider>\n          <TestComponent />\n        </LoadingProvider>\n      )\n\n      expect(contextValue.isLoading).toBe(false)\n      expect(typeof contextValue.setIsLoading).toBe('function')\n\n      act(() => {\n        contextValue.setIsLoading(true)\n      })\n\n      expect(contextValue.isLoading).toBe(true)\n    })\n\n    it('should stay loading until every acquire is released', () => {\n      let contextValue\n\n      const TestComponent = () => {\n        contextValue = useLoadingContext()\n        return null\n      }\n\n      render(\n        <LoadingProvider>\n          <TestComponent />\n        </LoadingProvider>\n      )\n\n      act(() => {\n        contextValue.setIsLoading(true)\n        contextValue.setIsLoading(true)\n      })\n      expect(contextValue.isLoading).toBe(true)\n\n      act(() => {\n        contextValue.setIsLoading(false)\n      })\n      expect(contextValue.isLoading).toBe(true)\n\n      act(() => {\n        contextValue.setIsLoading(false)\n      })\n      expect(contextValue.isLoading).toBe(false)\n    })\n\n    it('should clamp release at zero so stray falses do not underflow', () => {\n      let contextValue\n\n      const TestComponent = () => {\n        contextValue = useLoadingContext()\n        return null\n      }\n\n      render(\n        <LoadingProvider>\n          <TestComponent />\n        </LoadingProvider>\n      )\n\n      act(() => {\n        contextValue.setIsLoading(false)\n        contextValue.setIsLoading(false)\n        contextValue.setIsLoading(true)\n      })\n\n      expect(contextValue.isLoading).toBe(true)\n    })\n  })\n\n  describe('useGlobalLoading', () => {\n    it('should set loading state based on props', () => {\n      let contextValue\n\n      const TestComponent = ({ isLoading }) => {\n        useGlobalLoading({ isLoading })\n        contextValue = useLoadingContext()\n        return null\n      }\n\n      const { rerender } = render(\n        <LoadingProvider>\n          <TestComponent isLoading={false} />\n        </LoadingProvider>\n      )\n\n      expect(contextValue.isLoading).toBe(false)\n\n      rerender(\n        <LoadingProvider>\n          <TestComponent isLoading={true} />\n        </LoadingProvider>\n      )\n\n      expect(contextValue.isLoading).toBe(true)\n    })\n\n    it('should not set loading state when isLoading is not boolean', () => {\n      let contextValue\n\n      const TestComponent = ({ isLoading }) => {\n        useGlobalLoading({ isLoading })\n        contextValue = useLoadingContext()\n        return null\n      }\n\n      render(\n        <LoadingProvider>\n          <TestComponent isLoading={undefined} />\n        </LoadingProvider>\n      )\n\n      expect(contextValue.isLoading).toBe(false)\n    })\n\n    it('should not release a concurrent imperative acquire when its own isLoading flips to false', () => {\n      let contextValue\n\n      const TestComponent = ({ isLoading }) => {\n        useGlobalLoading({ isLoading })\n        contextValue = useLoadingContext()\n        return null\n      }\n\n      const { rerender } = render(\n        <LoadingProvider>\n          <TestComponent isLoading={false} />\n        </LoadingProvider>\n      )\n\n      act(() => {\n        contextValue.setIsLoading(true)\n      })\n      expect(contextValue.isLoading).toBe(true)\n\n      rerender(\n        <LoadingProvider>\n          <TestComponent isLoading={true} />\n        </LoadingProvider>\n      )\n      rerender(\n        <LoadingProvider>\n          <TestComponent isLoading={false} />\n        </LoadingProvider>\n      )\n\n      expect(contextValue.isLoading).toBe(true)\n    })\n  })\n})\n"
  },
  {
    "path": "src/context/ModalContext.js",
    "content": "import {\n  createContext,\n  useState,\n  useContext,\n  useEffect,\n  useCallback,\n  useMemo,\n  useRef\n} from 'react'\n\nimport { generateUniqueId } from '@tetherto/pear-apps-utils-generate-unique-id'\nimport { html } from 'htm/react'\n\nimport { Overlay } from '../components/Overlay'\nimport { BASE_TRANSITION_DURATION } from '../constants/transitions'\nimport { ModalWrapper } from '../containers/Modal'\nimport { SideDrawer } from '../containers/Modal/SideDrawer'\n\n// Pad past the overlay fade so unmount lands after `transitionend`.\nexport const STACK_CLEANUP_BUFFER = 100\n\nconst ModalContext = createContext()\n\nconst getTopModal = (modalStack) => modalStack[modalStack.length - 1]\n\nconst DEFAULT_MODAL_PARAMS = {\n  hasOverlay: true,\n  overlayType: 'default',\n  modalType: 'default',\n  closable: true,\n  replace: false\n}\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n * }} props\n */\nexport const ModalProvider = ({ children }) => {\n  const [modalStack, setModalStack] = useState([])\n  // Ids that already have a removal timer pending, to avoid duplicates.\n  const scheduledIdsRef = useRef(new Set())\n\n  const isOpen = !!modalStack.length\n\n  const setModal = useCallback((content, params) => {\n    setModalStack((prevState) => {\n      if (params?.replace) {\n        return [\n          {\n            content,\n            id: generateUniqueId(),\n            isOpen: true,\n            params: { ...DEFAULT_MODAL_PARAMS, ...params }\n          }\n        ]\n      }\n\n      return [\n        ...prevState,\n        {\n          content,\n          id: generateUniqueId(),\n          isOpen: true,\n          params: { ...DEFAULT_MODAL_PARAMS, ...params }\n        }\n      ]\n    })\n  }, [])\n\n  const closeModal = useCallback(() => {\n    setModalStack((prevState) => {\n      // Skip entries already closing so a rapid second close hits the modal\n      // beneath one mid-transition.\n      for (let i = prevState.length - 1; i >= 0; i--) {\n        if (prevState[i].isOpen) {\n          const next = [...prevState]\n          next[i] = { ...next[i], isOpen: false }\n          return next\n        }\n      }\n      return prevState\n    })\n  }, [])\n\n  // Drops closing entries after their fade. Runs as an effect because the\n  // state closeModal flips isn't visible until the next render.\n  useEffect(() => {\n    const closingEntries = modalStack.filter(\n      (m) => !m.isOpen && !scheduledIdsRef.current.has(m.id)\n    )\n    if (closingEntries.length === 0) return\n\n    closingEntries.forEach(({ id }) => {\n      scheduledIdsRef.current.add(id)\n      setTimeout(() => {\n        setModalStack((prev) => prev.filter((m) => m.id !== id))\n        scheduledIdsRef.current.delete(id)\n      }, BASE_TRANSITION_DURATION + STACK_CLEANUP_BUFFER)\n    })\n  }, [modalStack])\n\n  useEffect(() => {\n    const handleKeydown = (event) => {\n      if (event.key === 'Escape' && isOpen) {\n        const topModal = getTopModal(modalStack)\n        if (topModal?.params?.closable !== false) {\n          void closeModal()\n        }\n      }\n    }\n\n    window.addEventListener('keydown', handleKeydown)\n\n    return () => {\n      window.removeEventListener('keydown', handleKeydown)\n    }\n  }, [isOpen])\n\n  const contextValue = useMemo(\n    () => ({ isOpen, setModal, closeModal }),\n    [isOpen, setModal, closeModal]\n  )\n\n  return html`\n    <${ModalContext.Provider} value=${contextValue}>\n      ${children}\n      ${modalStack?.map(\n        ({ content, id, isOpen, params }) => html`\n          <${ModalWrapper} key=${id}>\n            ${params.hasOverlay &&\n            html`<${Overlay}\n              onClick=${params?.closable ? closeModal : undefined}\n              type=${params.overlayType}\n              isOpen=${isOpen}\n            /> `}\n            ${params.modalType === 'sideDrawer' &&\n            html`<${SideDrawer} isOpen=${isOpen}> ${content} <//>`}\n            ${params.modalType === 'default' && isOpen && content}\n          <//>\n        `\n      )}\n    <//>\n  `\n}\n\n/**\n * @returns {{\n *   isOpen: boolean,\n *   setModal: (content: any, params?: any) => void,\n *   closeModal: () => void\n * }}\n */\nexport const useModal = () => useContext(ModalContext)\n"
  },
  {
    "path": "src/context/ModalContext.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent, act } from '@testing-library/react'\n\nimport { ModalProvider, STACK_CLEANUP_BUFFER, useModal } from './ModalContext'\nimport { BASE_TRANSITION_DURATION } from '../constants/transitions'\nimport '@testing-library/jest-dom'\n\nconst CLOSE_DURATION = BASE_TRANSITION_DURATION + STACK_CLEANUP_BUFFER\n\njest.mock('@tetherto/pear-apps-utils-generate-unique-id', () => {\n  let n = 0\n  return { generateUniqueId: jest.fn(() => `id-${n++}`) }\n})\n\njest.mock('../components/Overlay', () => ({\n  Overlay: ({ onClick, type, isOpen }) => (\n    <div data-testid=\"overlay\" onClick={onClick}>\n      Overlay: {type}, isOpen: {isOpen.toString()}\n    </div>\n  )\n}))\n\njest.mock('../containers/Modal', () => ({\n  ModalWrapper: ({ children }) => (\n    <div data-testid=\"modal-wrapper\">{children}</div>\n  )\n}))\n\njest.mock('../containers/Modal/SideDrawer', () => ({\n  SideDrawer: ({ children, isOpen }) => (\n    <div data-testid=\"side-drawer\" data-open={isOpen.toString()}>\n      {children}\n    </div>\n  )\n}))\n\nconst TestComponent = () => {\n  const { setModal, closeModal, isOpen } = useModal()\n\n  return (\n    <div>\n      <button\n        onClick={() =>\n          setModal(<div data-testid=\"modal-content\">Modal Content</div>)\n        }\n      >\n        Open Modal\n      </button>\n      <button onClick={closeModal}>Close Modal</button>\n      <div data-testid=\"is-open\">{isOpen.toString()}</div>\n    </div>\n  )\n}\n\nconst StackedModalsTestComponent = () => {\n  const { setModal, closeModal } = useModal()\n  return (\n    <div>\n      <button onClick={() => setModal(<div data-testid=\"modal-A\">A</div>)}>\n        open A\n      </button>\n      <button onClick={() => setModal(<div data-testid=\"modal-B\">B</div>)}>\n        open B\n      </button>\n      <button onClick={closeModal}>close</button>\n    </div>\n  )\n}\n\nconst TestSideDrawerComponent = () => {\n  const { setModal, isOpen } = useModal()\n\n  return (\n    <div>\n      <button\n        onClick={() =>\n          setModal(\n            <div data-testid=\"side-drawer-content\">Side Drawer Content</div>,\n            { modalType: 'sideDrawer' }\n          )\n        }\n      >\n        Open Side Drawer Modal\n      </button>\n      <div data-testid=\"is-open\">{isOpen.toString()}</div>\n    </div>\n  )\n}\n\ndescribe('ModalProvider', () => {\n  beforeEach(() => {\n    jest.useFakeTimers()\n  })\n\n  afterEach(() => {\n    jest.runOnlyPendingTimers()\n    jest.useRealTimers()\n  })\n\n  test('renders children', () => {\n    render(\n      <ModalProvider>\n        <div data-testid=\"child\">Child Content</div>\n      </ModalProvider>\n    )\n    expect(screen.getByTestId('child')).toBeInTheDocument()\n  })\n\n  test('opens and closes default modal using setModal and closeModal', () => {\n    render(\n      <ModalProvider>\n        <TestComponent />\n      </ModalProvider>\n    )\n\n    expect(screen.getByTestId('is-open').textContent).toBe('false')\n\n    fireEvent.click(screen.getByText('Open Modal'))\n    expect(screen.getByTestId('is-open').textContent).toBe('true')\n    expect(screen.getByTestId('modal-content')).toBeInTheDocument()\n\n    fireEvent.click(screen.getByText('Close Modal'))\n\n    act(() => {\n      jest.advanceTimersByTime(CLOSE_DURATION)\n    })\n\n    expect(screen.queryByTestId('modal-content')).not.toBeInTheDocument()\n  })\n\n  test('closes modal on Escape key press', () => {\n    render(\n      <ModalProvider>\n        <TestComponent />\n      </ModalProvider>\n    )\n\n    fireEvent.click(screen.getByText('Open Modal'))\n    expect(screen.getByTestId('modal-content')).toBeInTheDocument()\n\n    fireEvent.keyDown(window, { key: 'Escape', code: 'Escape' })\n\n    act(() => {\n      jest.advanceTimersByTime(CLOSE_DURATION)\n    })\n\n    expect(screen.queryByTestId('modal-content')).not.toBeInTheDocument()\n  })\n\n  test('closes modal on overlay click', () => {\n    render(\n      <ModalProvider>\n        <TestComponent />\n      </ModalProvider>\n    )\n\n    fireEvent.click(screen.getByText('Open Modal'))\n    expect(screen.getByTestId('modal-content')).toBeInTheDocument()\n\n    fireEvent.click(screen.getByTestId('overlay'))\n\n    act(() => {\n      jest.advanceTimersByTime(CLOSE_DURATION)\n    })\n\n    expect(screen.queryByTestId('modal-content')).not.toBeInTheDocument()\n  })\n\n  test('removes wrapper from stack after close, not just content', () => {\n    render(\n      <ModalProvider>\n        <TestComponent />\n      </ModalProvider>\n    )\n\n    fireEvent.click(screen.getByText('Open Modal'))\n    expect(screen.getAllByTestId('modal-wrapper').length).toBe(1)\n\n    fireEvent.click(screen.getByText('Close Modal'))\n    act(() => {\n      jest.advanceTimersByTime(CLOSE_DURATION)\n    })\n\n    expect(screen.queryAllByTestId('modal-wrapper').length).toBe(0)\n  })\n\n  test('closes stacked modals sequentially', () => {\n    render(\n      <ModalProvider>\n        <StackedModalsTestComponent />\n      </ModalProvider>\n    )\n\n    fireEvent.click(screen.getByText('open A'))\n    fireEvent.click(screen.getByText('open B'))\n    expect(screen.getAllByTestId('modal-wrapper').length).toBe(2)\n\n    fireEvent.click(screen.getByText('close'))\n    act(() => {\n      jest.advanceTimersByTime(CLOSE_DURATION)\n    })\n    expect(screen.queryByTestId('modal-B')).not.toBeInTheDocument()\n    expect(screen.getByTestId('modal-A')).toBeInTheDocument()\n    expect(screen.getAllByTestId('modal-wrapper').length).toBe(1)\n\n    fireEvent.click(screen.getByText('close'))\n    act(() => {\n      jest.advanceTimersByTime(CLOSE_DURATION)\n    })\n    expect(screen.queryByTestId('modal-A')).not.toBeInTheDocument()\n    expect(screen.queryAllByTestId('modal-wrapper').length).toBe(0)\n  })\n\n  test('rapid double-close targets the modal beneath one mid-transition', () => {\n    render(\n      <ModalProvider>\n        <StackedModalsTestComponent />\n      </ModalProvider>\n    )\n\n    fireEvent.click(screen.getByText('open A'))\n    fireEvent.click(screen.getByText('open B'))\n    fireEvent.click(screen.getByText('close'))\n    fireEvent.click(screen.getByText('close'))\n\n    act(() => {\n      jest.advanceTimersByTime(CLOSE_DURATION)\n    })\n\n    expect(screen.queryByTestId('modal-A')).not.toBeInTheDocument()\n    expect(screen.queryByTestId('modal-B')).not.toBeInTheDocument()\n    expect(screen.queryAllByTestId('modal-wrapper').length).toBe(0)\n  })\n\n  test('renders sideDrawer modal correctly', () => {\n    render(\n      <ModalProvider>\n        <TestSideDrawerComponent />\n      </ModalProvider>\n    )\n\n    fireEvent.click(screen.getByText('Open Side Drawer Modal'))\n\n    expect(screen.getByTestId('side-drawer')).toBeInTheDocument()\n    expect(screen.getByTestId('side-drawer-content')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/context/RouterContext.d.ts",
    "content": "import type { ReactNode } from 'react'\n\n/** Shape of `data` passed to `navigate` and read from `useRouter().data` */\nexport type RouterData = {\n  recordId?: string\n  recordType?: string\n  folder?: string\n  vaultId?: string\n  initialTab?: string\n} & Record<string, unknown>\n\nexport type RouterContextValue = {\n  currentPage: string\n  data: RouterData\n  navigate: (page: string, data?: RouterData) => void\n}\n\nexport declare function RouterProvider(props: {\n  children: ReactNode\n}): ReactNode\n\nexport declare function useRouter(): RouterContextValue\n"
  },
  {
    "path": "src/context/RouterContext.js",
    "content": "import { createContext, useState, useContext } from 'react'\n\nimport { html } from 'htm/react'\n\nconst RouterContext = createContext()\n\n/**\n * @typedef RouterProviderProps\n * @property {import('react').ReactNode} children React node to be rendered inside\n */\n\n/**\n * @param {RouterProviderProps} props\n */\nexport const RouterProvider = ({ children }) => {\n  const [state, setState] = useState({\n    currentPage: 'loading',\n    data: {\n      recordId: '',\n      recordType: 'all'\n    }\n  })\n\n  const navigate = (page, data = {}) => {\n    setState({ currentPage: page, data })\n  }\n\n  return html`\n    <${RouterContext.Provider} value=${{ ...state, navigate }}> ${children} <//>\n  `\n}\n\n/**\n * @returns {{\n *   currentPage: string,\n *   data: Object.<string, any>,\n *   navigate: (currentPage: string, data: Object.<string, any>) => void\n * }}\n */\nexport const useRouter = () => useContext(RouterContext)\n"
  },
  {
    "path": "src/context/RouterContext.test.js",
    "content": "import React from 'react'\n\nimport { render, act } from '@testing-library/react'\n\nimport { RouterProvider, useRouter } from './RouterContext'\n\nconst TestComponent = () => {\n  const { currentPage, data, navigate } = useRouter()\n  return (\n    <div>\n      <div data-testid=\"current-page\">{currentPage}</div>\n      <div data-testid=\"record-id\">{data.recordId}</div>\n      <div data-testid=\"record-type\">{data.recordType}</div>\n      <button\n        data-testid=\"navigate-button\"\n        onClick={() =>\n          navigate('test-page', { recordId: '123', recordType: 'password' })\n        }\n      >\n        Navigate\n      </button>\n    </div>\n  )\n}\n\ndescribe('RouterContext', () => {\n  test('should provide initial router state', () => {\n    const { getByTestId } = render(\n      <RouterProvider>\n        <TestComponent />\n      </RouterProvider>\n    )\n\n    expect(getByTestId('current-page').textContent).toBe('loading')\n    expect(getByTestId('record-id').textContent).toBe('')\n    expect(getByTestId('record-type').textContent).toBe('all')\n  })\n\n  test('should navigate to a new page with data', () => {\n    const { getByTestId } = render(\n      <RouterProvider>\n        <TestComponent />\n      </RouterProvider>\n    )\n\n    expect(getByTestId('current-page').textContent).toBe('loading')\n\n    act(() => {\n      getByTestId('navigate-button').click()\n    })\n\n    expect(getByTestId('current-page').textContent).toBe('test-page')\n    expect(getByTestId('record-id').textContent).toBe('123')\n    expect(getByTestId('record-type').textContent).toBe('password')\n  })\n\n  test('should handle multiple navigation events', () => {\n    const MultiNavComponent = () => {\n      const { currentPage, navigate } = useRouter()\n      return (\n        <div>\n          <div data-testid=\"current-page\">{currentPage}</div>\n          <button data-testid=\"nav1\" onClick={() => navigate('page1')}>\n            Nav1\n          </button>\n          <button data-testid=\"nav2\" onClick={() => navigate('page2')}>\n            Nav2\n          </button>\n        </div>\n      )\n    }\n\n    const { getByTestId } = render(\n      <RouterProvider>\n        <MultiNavComponent />\n      </RouterProvider>\n    )\n\n    expect(getByTestId('current-page').textContent).toBe('loading')\n\n    act(() => {\n      getByTestId('nav1').click()\n    })\n    expect(getByTestId('current-page').textContent).toBe('page1')\n\n    act(() => {\n      getByTestId('nav2').click()\n    })\n    expect(getByTestId('current-page').textContent).toBe('page2')\n  })\n})\n"
  },
  {
    "path": "src/context/ToastContext.js",
    "content": "import { createContext, useState, useContext } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { Toasts } from '../components/Toasts'\n\nconst ToastContext = createContext()\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n * }} props\n */\nexport const ToastProvider = ({ children }) => {\n  const [stack, setStack] = useState([])\n\n  const setToast = (data) => {\n    setStack((prev) => [...prev, data])\n\n    setTimeout(() => {\n      setStack((prev) => prev.slice(1))\n    }, 3000)\n  }\n\n  return html`\n    <${ToastContext.Provider} value=${{ setToast }}>\n      ${children}\n      <${Toasts} toasts=${stack} />\n    <//>\n  `\n}\n\n/**\n * @returns {{\n *  setToast: (data: { message: string, icon?: import('react').ElementType }) => void\n * }}\n */\nexport const useToast = () => useContext(ToastContext)\n"
  },
  {
    "path": "src/context/ToastContext.test.js",
    "content": "import React from 'react'\n\nimport { render, act } from '@testing-library/react'\n\nimport { ToastProvider, useToast } from './ToastContext'\nimport { Toasts } from '../components/Toasts'\n\njest.mock('../components/Toasts', () => ({\n  Toasts: jest.fn(() => null)\n}))\n\njest.useFakeTimers()\n\nconst TestComponent = ({ onToast }) => {\n  const { setToast } = useToast()\n  React.useEffect(() => {\n    if (onToast) {\n      onToast(setToast)\n    }\n  }, [onToast])\n  return null\n}\n\ndescribe('ToastContext', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    jest.clearAllTimers()\n  })\n\n  it('should provide toast context', () => {\n    const mockSetToast = jest.fn()\n\n    render(\n      <ToastProvider>\n        <TestComponent onToast={mockSetToast} />\n      </ToastProvider>\n    )\n\n    expect(mockSetToast).toHaveBeenCalled()\n    expect(typeof mockSetToast.mock.calls[0][0]).toBe('function')\n  })\n\n  it('should add toast to stack when setToast is called', () => {\n    let setToastFn\n    const toastData = { message: 'Test toast', icon: 'test-icon' }\n\n    render(\n      <ToastProvider>\n        <TestComponent\n          onToast={(fn) => {\n            setToastFn = fn\n          }}\n        />\n      </ToastProvider>\n    )\n\n    act(() => {\n      setToastFn(toastData)\n    })\n\n    // Find the call with toasts\n    const callsWithToasts = Toasts.mock.calls.filter(\n      (call) => call[0].toasts.length > 0\n    )\n    expect(callsWithToasts.length).toBeGreaterThan(0)\n    expect(callsWithToasts[callsWithToasts.length - 1][0]).toEqual(\n      expect.objectContaining({\n        toasts: [toastData]\n      })\n    )\n  })\n\n  it('should remove toast after timeout', () => {\n    let setToastFn\n    const toastData = { message: 'Test toast', icon: 'test-icon' }\n\n    render(\n      <ToastProvider>\n        <TestComponent\n          onToast={(fn) => {\n            setToastFn = fn\n          }}\n        />\n      </ToastProvider>\n    )\n\n    act(() => {\n      setToastFn(toastData)\n    })\n\n    // Verify toast was added\n    const callsWithToasts = Toasts.mock.calls.filter(\n      (call) => call[0].toasts.length > 0\n    )\n    expect(callsWithToasts.length).toBeGreaterThan(0)\n    expect(callsWithToasts[callsWithToasts.length - 1][0]).toEqual(\n      expect.objectContaining({\n        toasts: [toastData]\n      })\n    )\n\n    act(() => {\n      jest.advanceTimersByTime(3000)\n    })\n\n    // Find the last call with empty toasts\n    const lastCall = Toasts.mock.calls[Toasts.mock.calls.length - 1]\n    expect(lastCall[0].toasts).toEqual([])\n  })\n\n  it('should handle multiple toasts', () => {\n    let setToastFn\n    const toast1 = { message: 'Test toast 1', icon: 'icon-1' }\n    const toast2 = { message: 'Test toast 2', icon: 'icon-2' }\n\n    render(\n      <ToastProvider>\n        <TestComponent\n          onToast={(fn) => {\n            setToastFn = fn\n          }}\n        />\n      </ToastProvider>\n    )\n\n    act(() => {\n      setToastFn(toast1)\n      setToastFn(toast2)\n    })\n\n    // Find the call with two toasts\n    const callsWithTwoToasts = Toasts.mock.calls.filter(\n      (call) => call[0].toasts.length === 2\n    )\n    expect(callsWithTwoToasts.length).toBeGreaterThan(0)\n    expect(callsWithTwoToasts[callsWithTwoToasts.length - 1][0]).toEqual(\n      expect.objectContaining({\n        toasts: [toast1, toast2]\n      })\n    )\n  })\n})\n"
  },
  {
    "path": "src/context/UnsavedChangesContext.tsx",
    "content": "import React, {\n  createContext,\n  ReactNode,\n  useCallback,\n  useContext,\n  useMemo,\n  useRef\n} from 'react'\n\nexport type UnsavedChangesGuard = {\n  hasUnsavedChanges: boolean\n  description: string\n  save: () => Promise<boolean>\n}\n\ntype UnsavedChangesContextValue = {\n  setGuard: (guard: UnsavedChangesGuard | null) => void\n  getGuard: () => UnsavedChangesGuard | null\n}\n\nconst UnsavedChangesContext = createContext<UnsavedChangesContextValue | null>(\n  null\n)\n\ntype UnsavedChangesProviderProps = {\n  children: ReactNode\n}\n\nexport const UnsavedChangesProvider = ({\n  children\n}: UnsavedChangesProviderProps) => {\n  const guardRef = useRef<UnsavedChangesGuard | null>(null)\n\n  const setGuard = useCallback((guard: UnsavedChangesGuard | null) => {\n    guardRef.current = guard\n  }, [])\n\n  const getGuard = useCallback(() => guardRef.current, [])\n\n  const value = useMemo(() => ({ setGuard, getGuard }), [setGuard, getGuard])\n\n  return (\n    <UnsavedChangesContext.Provider value={value}>\n      {children}\n    </UnsavedChangesContext.Provider>\n  )\n}\n\nexport const useUnsavedChanges = () => {\n  const ctx = useContext(UnsavedChangesContext)\n  if (!ctx) {\n    throw new Error(\n      'useUnsavedChanges must be used within an UnsavedChangesProvider'\n    )\n  }\n  return ctx\n}\n"
  },
  {
    "path": "src/electron/index.js",
    "content": "/**\n * Electron entry helpers: config and vault client when running inside Electron.\n * Use these when window.electronAPI is defined (Electron); otherwise use Pear + createOrGetPipe.\n */\n\nimport { createElectronVaultClientProxy } from './vaultClientProxy'\n\nlet configPromise = null\nlet vaultClientPromise = null\n\n/**\n * @returns {Promise<{ storage: string, key: string | null, upgrade: string | null, version: string | number, applink: string }>}\n */\nexport function getElectronConfig() {\n  if (!configPromise && typeof window !== 'undefined' && window.electronAPI) {\n    configPromise = window.electronAPI.getConfig()\n  }\n  return configPromise || Promise.resolve(null)\n}\n\n/**\n * @returns {Promise<import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient | null>}\n */\nexport function getElectronVaultClient() {\n  if (\n    !vaultClientPromise &&\n    typeof window !== 'undefined' &&\n    window.electronAPI\n  ) {\n    vaultClientPromise = Promise.resolve(\n      createElectronVaultClientProxy(window.electronAPI)\n    )\n  }\n  return vaultClientPromise || Promise.resolve(null)\n}\n\n/**\n * Runtime update APIs (for usePearUpdate).\n */\nexport const electronRuntime =\n  typeof window !== 'undefined' && window.electronAPI\n    ? {\n        onUpdating: (cb) => window.electronAPI.onRuntimeUpdating(cb),\n        onUpdated: (cb) => window.electronAPI.onRuntimeUpdated(cb),\n        applyUpdate: () => window.electronAPI.applyUpdate(),\n        restart: () => window.electronAPI.restart(),\n        checkUpdated: () => window.electronAPI.checkUpdated()\n      }\n    : null\n\nexport function isElectron() {\n  return typeof window !== 'undefined' && !!window.electronAPI\n}\n"
  },
  {
    "path": "src/electron/vaultClientProxy.js",
    "content": "/* eslint-disable no-underscore-dangle */\n/**\n * Renderer-side proxy for PearpassVaultClient when running in Electron.\n * Forwards every method call to the main process via IPC; main process holds\n * the real client connected to the bare worklet. Buffer args must be sent as\n * { __base64: base64String }; Buffer return values come back as { __base64 }.\n */\nimport EventEmitter from 'events'\n\nfunction isBufferLike(value) {\n  return (\n    value instanceof Uint8Array ||\n    (typeof Buffer !== 'undefined' && Buffer.isBuffer(value))\n  )\n}\n\nfunction toSerializableArg(value) {\n  if (isBufferLike(value)) {\n    const b =\n      typeof Buffer !== 'undefined' ? Buffer.from(value) : new Uint8Array(value)\n    const base64 =\n      typeof b.toString === 'function'\n        ? b.toString('base64')\n        : btoa(String.fromCharCode(...new Uint8Array(b)))\n    return { __base64: base64 }\n  }\n  if (value && typeof value === 'object' && !Array.isArray(value)) {\n    const out = {}\n    for (const k of Object.keys(value)) {\n      out[k] = toSerializableArg(value[k])\n    }\n    return out\n  }\n  if (Array.isArray(value)) {\n    return value.map(toSerializableArg)\n  }\n  return value\n}\n\nfunction fromSerializableData(data) {\n  if (data && typeof data === 'object' && data.__base64) {\n    const bin = atob(data.__base64)\n    const bytes = new Uint8Array(bin.length)\n    for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i)\n    return typeof Buffer !== 'undefined' ? Buffer.from(bytes) : bytes\n  }\n  if (data && typeof data === 'object' && !Array.isArray(data)) {\n    const out = {}\n    for (const k of Object.keys(data)) {\n      out[k] = fromSerializableData(data[k])\n    }\n    return out\n  }\n  if (Array.isArray(data)) {\n    return data.map(fromSerializableData)\n  }\n  return data\n}\n\nconst VAULT_METHODS = [\n  'setStoragePath',\n  'vaultsInit',\n  'vaultsGetStatus',\n  'vaultsGet',\n  'vaultsClose',\n  'vaultsAdd',\n  'activeVaultGetFile',\n  'activeVaultRemoveFile',\n  'vaultsList',\n  'activeVaultInit',\n  'activeVaultGetStatus',\n  'recordFailedMasterPassword',\n  'getMasterPasswordStatus',\n  'resetFailedAttempts',\n  'createMasterPassword',\n  'initWithPassword',\n  'updateMasterPassword',\n  'initWithCredentials',\n  'activeVaultClose',\n  'activeVaultAdd',\n  'activeVaultRemove',\n  'activeVaultList',\n  'activeVaultGet',\n  'activeVaultCreateInvite',\n  'activeVaultDeleteInvite',\n  'pairActiveVault',\n  'cancelPairActiveVault',\n  'initListener',\n  'getBlindMirrors',\n  'addBlindMirrors',\n  'removeBlindMirror',\n  'addDefaultBlindMirrors',\n  'removeAllBlindMirrors',\n  'encryptionInit',\n  'encryptExportData',\n  'encryptionGetStatus',\n  'encryptionGet',\n  'encryptionAdd',\n  'hashPassword',\n  'encryptVaultKeyWithHashedPassword',\n  'encryptVaultWithKey',\n  'getDecryptionKey',\n  'decryptVaultKey',\n  'encryptionClose',\n  'closeAllInstances',\n  'activeVaultAddFile',\n  'activeVaultGetFile',\n  'beginBackground',\n  'endBackground',\n  'generateOtpCodesByIds',\n  'generateHotpNext',\n  'addOtpToRecord',\n  'removeOtpFromRecord',\n  'fetchFavicon',\n  'decryptExportData'\n]\n\n/**\n * Creates a proxy that implements the vault client interface over IPC.\n * Extends EventEmitter so removeAllListeners, removeListener, on, once, etc. are always available.\n * @param {{ vaultInvoke: (method: string, args: any[]) => Promise<{ok: boolean, data?: any, error?: string}>, vaultOnUpdate: (cb: () => void) => () => void }} api\n * @returns {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient}\n */\nexport function createElectronVaultClientProxy(api) {\n  class ElectronVaultClientProxy extends EventEmitter {\n    constructor() {\n      super()\n      api.vaultOnUpdate(() => this.emit('update'))\n      for (const method of VAULT_METHODS) {\n        this[method] = async (...args) => {\n          const serialized = args.map(toSerializableArg)\n          const result = await api.vaultInvoke(method, serialized)\n          if (!result.ok) {\n            const err = new Error(result.error || 'Vault request failed')\n            if (result.code) err.code = result.code\n            throw err\n          }\n          return fromSerializableData(result.data)\n        }\n      }\n    }\n  }\n  return new ElectronVaultClientProxy()\n}\n"
  },
  {
    "path": "src/electron/vaultClientProxy.test.js",
    "content": "/* eslint-disable no-underscore-dangle */\n\nimport { createElectronVaultClientProxy } from './vaultClientProxy'\n\n// Ensure btoa/atob exist in the Jest environment\nif (typeof globalThis.btoa === 'undefined') {\n  globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64')\n}\nif (typeof globalThis.atob === 'undefined') {\n  globalThis.atob = (b64) => Buffer.from(b64, 'base64').toString('binary')\n}\n\ndescribe('createElectronVaultClientProxy', () => {\n  let vaultInvoke\n  let vaultOnUpdate\n  let unsubscribe\n  let updateCallback\n  let client\n\n  beforeEach(() => {\n    vaultInvoke = jest.fn().mockResolvedValue({ ok: true, data: null })\n    unsubscribe = jest.fn()\n    updateCallback = null\n\n    vaultOnUpdate = jest.fn((cb) => {\n      updateCallback = cb\n      return unsubscribe\n    })\n\n    const api = { vaultInvoke, vaultOnUpdate }\n    client = createElectronVaultClientProxy(api)\n  })\n\n  test('subscribes to vaultOnUpdate and re-emits update events', () => {\n    const handler = jest.fn()\n    client.on('update', handler)\n\n    expect(vaultOnUpdate).toHaveBeenCalledTimes(1)\n    expect(typeof updateCallback).toBe('function')\n\n    // Simulate an update from the main process\n    updateCallback()\n\n    expect(handler).toHaveBeenCalledTimes(1)\n  })\n\n  test('creates proxy methods that forward to vaultInvoke', async () => {\n    const args = [{ foo: 'bar' }, 42]\n\n    await client.vaultsInit(...args)\n\n    expect(vaultInvoke).toHaveBeenCalledTimes(1)\n    const [method, forwardedArgs] = vaultInvoke.mock.calls[0]\n    expect(method).toBe('vaultsInit')\n    expect(forwardedArgs).toHaveLength(args.length)\n    expect(forwardedArgs[0]).toEqual({ foo: 'bar' })\n    expect(forwardedArgs[1]).toBe(42)\n  })\n\n  test('serializes buffer-like arguments to base64 objects', async () => {\n    const bytes = Uint8Array.from([1, 2, 3, 4])\n\n    await client.hashPassword(bytes)\n\n    expect(vaultInvoke).toHaveBeenCalledTimes(1)\n    const [method, forwardedArgs] = vaultInvoke.mock.calls[0]\n    expect(method).toBe('hashPassword')\n\n    const serialized = forwardedArgs[0]\n    expect(serialized).toHaveProperty('__base64')\n\n    const decoded = Buffer.from(serialized.__base64, 'base64')\n    expect(Array.from(decoded)).toEqual([1, 2, 3, 4])\n  })\n\n  test('serializes nested objects and arrays containing buffer-like values', async () => {\n    const payload = {\n      meta: 'test',\n      data: [Uint8Array.from([9, 8, 7])]\n    }\n\n    await client.encryptVaultWithKey(payload)\n\n    const [method, forwardedArgs] = vaultInvoke.mock.calls[0]\n    expect(method).toBe('encryptVaultWithKey')\n\n    const serialized = forwardedArgs[0]\n    expect(serialized.meta).toBe('test')\n    expect(Array.isArray(serialized.data)).toBe(true)\n    expect(serialized.data[0]).toHaveProperty('__base64')\n  })\n\n  test('deserializes base64 data from vaultInvoke into Buffer/Uint8Array', async () => {\n    const bytes = Uint8Array.from([5, 6, 7])\n    const base64 = Buffer.from(bytes).toString('base64')\n\n    vaultInvoke.mockResolvedValueOnce({\n      ok: true,\n      data: { __base64: base64 }\n    })\n\n    const result = await client.getDecryptionKey('some-id')\n\n    expect(vaultInvoke).toHaveBeenCalledWith(\n      'getDecryptionKey',\n      expect.any(Array)\n    )\n    expect(result instanceof Uint8Array || Buffer.isBuffer(result)).toBe(true)\n    expect(Array.from(result)).toEqual([5, 6, 7])\n  })\n\n  test('throws an Error when vaultInvoke indicates failure and preserves error code', async () => {\n    vaultInvoke.mockResolvedValueOnce({\n      ok: false,\n      error: 'Something went wrong',\n      code: 'E_VAULT'\n    })\n\n    await expect(client.vaultsGetStatus()).rejects.toMatchObject({\n      message: 'Something went wrong',\n      code: 'E_VAULT'\n    })\n  })\n})\n"
  },
  {
    "path": "src/hooks/__tests__/useTranslation.test.js",
    "content": "import { jest } from '@jest/globals'\nimport { useLingui } from '@lingui/react'\nimport { renderHook, act } from '@testing-library/react'\n\njest.mock('@lingui/react', () => ({\n  useLingui: jest.fn()\n}))\n\nimport { useTranslation } from '../useTranslation'\n\ndescribe('useTranslation', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('returns an object with a t function', () => {\n    const translateMock = jest.fn((key) => `translated:${key}`)\n    useLingui.mockReturnValue({ i18n: { _: translateMock } })\n\n    const { result } = renderHook(() => useTranslation())\n\n    expect(result.current).toHaveProperty('t')\n    expect(typeof result.current.t).toBe('function')\n  })\n\n  test('t calls i18n._ with the provided key and returns translation', () => {\n    const translateMock = jest.fn((key) => `translated:${key}`)\n    useLingui.mockReturnValue({ i18n: { _: translateMock } })\n\n    const { result } = renderHook(() => useTranslation())\n\n    let output\n    act(() => {\n      output = result.current.t('hello.world')\n    })\n\n    expect(translateMock).toHaveBeenCalledTimes(1)\n    expect(translateMock).toHaveBeenCalledWith('hello.world')\n    expect(output).toBe('translated:hello.world')\n  })\n\n  test('t passes interpolation values as the second argument to i18n._', () => {\n    const translateMock = jest.fn((key, values) =>\n      values !== null ? `${key}|${JSON.stringify(values)}` : key\n    )\n    useLingui.mockReturnValue({ i18n: { _: translateMock } })\n\n    const { result } = renderHook(() => useTranslation())\n\n    let output\n    act(() => {\n      output = result.current.t('and {count} more', { count: 2 })\n    })\n\n    expect(translateMock).toHaveBeenCalledTimes(1)\n    expect(translateMock).toHaveBeenCalledWith('and {count} more', {\n      count: 2\n    })\n    expect(output).toBe('and {count} more|{\"count\":2}')\n  })\n\n  test('t reference is stable when i18n instance does not change', () => {\n    const translateMock = jest.fn((key) => key)\n    const i18nInstance = { _: translateMock }\n    useLingui.mockReturnValue({ i18n: i18nInstance })\n\n    const { result, rerender } = renderHook(() => useTranslation())\n    const firstT = result.current.t\n\n    rerender()\n    const secondT = result.current.t\n\n    expect(secondT).toBe(firstT)\n  })\n\n  test('t reference updates when i18n instance changes', () => {\n    const translateMock1 = jest.fn((key) => key)\n    const translateMock2 = jest.fn((key) => key)\n\n    const i18n1 = { _: translateMock1 }\n    const i18n2 = { _: translateMock2 }\n\n    useLingui\n      .mockReturnValueOnce({ i18n: i18n1 })\n      .mockReturnValue({ i18n: i18n2 })\n\n    const { result, rerender } = renderHook(() => useTranslation())\n    const firstT = result.current.t\n\n    rerender()\n    const secondT = result.current.t\n\n    expect(secondT).not.toBe(firstT)\n  })\n})\n"
  },
  {
    "path": "src/hooks/useAnimatedVisibility.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport { BASE_TRANSITION_DURATION } from '../constants/transitions'\n\nconst SAFETY_BUFFER = 100\n\n/**\n * @param {{\n *  isOpen: boolean\n *  transitionDuration?: number\n *  nodeRef?: import('react').RefObject<HTMLElement>\n *  propertyName?: string\n * }} params\n * @returns {{\n *  isShown: boolean\n *  isRendered: boolean\n * }}\n */\nexport const useAnimatedVisibility = ({\n  isOpen,\n  transitionDuration = BASE_TRANSITION_DURATION,\n  nodeRef,\n  propertyName\n}) => {\n  const [isShown, setIsShown] = useState(false)\n\n  useEffect(() => {\n    if (isOpen) {\n      setIsShown(true)\n      return\n    }\n\n    const node = nodeRef?.current ?? null\n    const useTransitionEnd = !!(node && propertyName)\n    let done = false\n\n    const finish = () => {\n      if (done) return\n      done = true\n      setIsShown(false)\n    }\n\n    const handleTransitionEnd = (event) => {\n      if (event.target !== node) return\n      if (event.propertyName !== propertyName) return\n      finish()\n    }\n\n    if (useTransitionEnd) {\n      node.addEventListener('transitionend', handleTransitionEnd)\n    }\n\n    const fallbackDelay = useTransitionEnd\n      ? transitionDuration + SAFETY_BUFFER\n      : transitionDuration\n    const fallbackTimer = setTimeout(finish, fallbackDelay)\n\n    return () => {\n      if (useTransitionEnd) {\n        node.removeEventListener('transitionend', handleTransitionEnd)\n      }\n      clearTimeout(fallbackTimer)\n    }\n  }, [isOpen, transitionDuration, nodeRef, propertyName])\n\n  return { isShown: isShown && isOpen, isRendered: isShown || isOpen }\n}\n"
  },
  {
    "path": "src/hooks/useAnimatedVisibility.test.js",
    "content": "import { useRef } from 'react'\n\nimport { renderHook, act } from '@testing-library/react'\n\nimport { useAnimatedVisibility } from './useAnimatedVisibility'\n\njest.useFakeTimers()\n\nconst SAFETY_BUFFER = 100\n\ndescribe('useAnimatedVisibility', () => {\n  test('initial state when isOpen is false', () => {\n    const { result } = renderHook(() =>\n      useAnimatedVisibility({ isOpen: false })\n    )\n\n    expect(result.current.isShown).toBe(false)\n    expect(result.current.isRendered).toBe(false)\n  })\n\n  test('initial state when isOpen is true', () => {\n    const { result } = renderHook(() => useAnimatedVisibility({ isOpen: true }))\n\n    expect(result.current.isShown).toBe(true)\n    expect(result.current.isRendered).toBe(true)\n  })\n\n  test('transitions from closed to open', () => {\n    const { result, rerender } = renderHook(\n      (props) => useAnimatedVisibility(props),\n      { initialProps: { isOpen: false } }\n    )\n\n    expect(result.current.isShown).toBe(false)\n    expect(result.current.isRendered).toBe(false)\n\n    rerender({ isOpen: true })\n\n    expect(result.current.isShown).toBe(true)\n    expect(result.current.isRendered).toBe(true)\n  })\n\n  test('transitions from open to closed', () => {\n    const { result, rerender } = renderHook(\n      (props) => useAnimatedVisibility(props),\n      { initialProps: { isOpen: true, transitionDuration: 300 } }\n    )\n\n    expect(result.current.isShown).toBe(true)\n    expect(result.current.isRendered).toBe(true)\n\n    rerender({ isOpen: false, transitionDuration: 300 })\n\n    expect(result.current.isShown).toBe(false)\n    expect(result.current.isRendered).toBe(true)\n\n    act(() => {\n      jest.advanceTimersByTime(300)\n    })\n\n    expect(result.current.isShown).toBe(false)\n    expect(result.current.isRendered).toBe(false)\n  })\n\n  test('uses custom transition duration', () => {\n    const customDuration = 500\n    const { result, rerender } = renderHook(\n      (props) => useAnimatedVisibility(props),\n      { initialProps: { isOpen: true, transitionDuration: customDuration } }\n    )\n\n    rerender({ isOpen: false, transitionDuration: customDuration })\n\n    expect(result.current.isRendered).toBe(true)\n\n    act(() => {\n      jest.advanceTimersByTime(customDuration - 10)\n    })\n\n    expect(result.current.isRendered).toBe(true)\n\n    act(() => {\n      jest.advanceTimersByTime(10)\n    })\n\n    expect(result.current.isRendered).toBe(false)\n  })\n\n  describe('with nodeRef + propertyName', () => {\n    const renderWithNode = (node, initialProps = {}) =>\n      renderHook(\n        (props) => {\n          const ref = useRef(node)\n          return useAnimatedVisibility({\n            ...props,\n            nodeRef: ref,\n            propertyName: 'opacity'\n          })\n        },\n        {\n          initialProps: {\n            isOpen: true,\n            transitionDuration: 300,\n            ...initialProps\n          }\n        }\n      )\n\n    test('finalizes on matching transitionend before the fallback timer', () => {\n      const node = document.createElement('div')\n      const { result, rerender } = renderWithNode(node)\n\n      rerender({ isOpen: false, transitionDuration: 300 })\n      expect(result.current.isRendered).toBe(true)\n\n      act(() => {\n        const event = new Event('transitionend')\n        Object.defineProperty(event, 'propertyName', { value: 'opacity' })\n        Object.defineProperty(event, 'target', { value: node })\n        node.dispatchEvent(event)\n      })\n\n      expect(result.current.isRendered).toBe(false)\n    })\n\n    test('ignores transitionend for a different property', () => {\n      const node = document.createElement('div')\n      const { result, rerender } = renderWithNode(node)\n\n      rerender({ isOpen: false, transitionDuration: 300 })\n\n      act(() => {\n        const event = new Event('transitionend')\n        Object.defineProperty(event, 'propertyName', { value: 'transform' })\n        Object.defineProperty(event, 'target', { value: node })\n        node.dispatchEvent(event)\n      })\n\n      // Still rendered: the transform transitionend doesn't match opacity.\n      expect(result.current.isRendered).toBe(true)\n    })\n\n    test('ignores transitionend bubbling up from a descendant', () => {\n      const node = document.createElement('div')\n      const child = document.createElement('span')\n      node.appendChild(child)\n\n      const { result, rerender } = renderWithNode(node)\n      rerender({ isOpen: false, transitionDuration: 300 })\n\n      act(() => {\n        const event = new Event('transitionend', { bubbles: true })\n        Object.defineProperty(event, 'propertyName', { value: 'opacity' })\n        Object.defineProperty(event, 'target', { value: child })\n        child.dispatchEvent(event)\n      })\n\n      expect(result.current.isRendered).toBe(true)\n    })\n\n    test('falls back after transitionDuration + SAFETY_BUFFER if no event fires', () => {\n      const node = document.createElement('div')\n      const { result, rerender } = renderWithNode(node)\n\n      rerender({ isOpen: false, transitionDuration: 300 })\n\n      act(() => {\n        jest.advanceTimersByTime(300 + SAFETY_BUFFER - 1)\n      })\n      expect(result.current.isRendered).toBe(true)\n\n      act(() => {\n        jest.advanceTimersByTime(1)\n      })\n      expect(result.current.isRendered).toBe(false)\n    })\n\n    test('does not double-fire when transitionend and fallback both occur', () => {\n      const node = document.createElement('div')\n      const { result, rerender } = renderWithNode(node)\n\n      rerender({ isOpen: false, transitionDuration: 300 })\n\n      act(() => {\n        const event = new Event('transitionend')\n        Object.defineProperty(event, 'propertyName', { value: 'opacity' })\n        Object.defineProperty(event, 'target', { value: node })\n        node.dispatchEvent(event)\n      })\n      expect(result.current.isRendered).toBe(false)\n\n      // Fallback timer firing after the listener already finalized must be a\n      // no-op — not flip state back to a stale value.\n      act(() => {\n        jest.advanceTimersByTime(SAFETY_BUFFER + 300)\n      })\n      expect(result.current.isRendered).toBe(false)\n    })\n\n    test('removes the transitionend listener on unmount', () => {\n      const node = document.createElement('div')\n      const removeSpy = jest.spyOn(node, 'removeEventListener')\n\n      const { rerender, unmount } = renderWithNode(node)\n      rerender({ isOpen: false, transitionDuration: 300 })\n\n      unmount()\n\n      expect(removeSpy).toHaveBeenCalledWith(\n        'transitionend',\n        expect.any(Function)\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/hooks/useAutoLockPreferences.test.js",
    "content": "// Mock the constants module before imports\nconst DEFAULT_AUTO_LOCK_TIMEOUT = 300000\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  DEFAULT_AUTO_LOCK_TIMEOUT: 300000,\n  AUTO_LOCK_ENABLED: true\n}))\n\nimport { renderHook, act } from '@testing-library/react'\n\nimport {\n  useAutoLockPreferences,\n  getAutoLockTimeoutMs,\n  isAutoLockEnabled,\n  AutoLockProvider\n} from './useAutoLockPreferences'\nimport { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\n\ndescribe('useAutoLockPreferences', () => {\n  beforeEach(() => {\n    localStorage.clear()\n    jest.clearAllMocks()\n  })\n\n  describe('initial state', () => {\n    it('should default isAutoLockEnabled to true when localStorage is empty', () => {\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n      expect(result.current.isAutoLockEnabled).toBe(true)\n    })\n\n    it('should default timeoutMs to DEFAULT_AUTO_LOCK_TIMEOUT when localStorage is empty', () => {\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n      expect(result.current.timeoutMs).toBe(DEFAULT_AUTO_LOCK_TIMEOUT)\n    })\n\n    it('should return false for isAutoLockEnabled when localStorage is set to \"false\"', () => {\n      localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'false')\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n      expect(result.current.isAutoLockEnabled).toBe(false)\n    })\n\n    it('should return stored timeoutMs from localStorage', () => {\n      const customTimeout = 60000\n      localStorage.setItem(\n        LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS,\n        String(customTimeout)\n      )\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n      expect(result.current.timeoutMs).toBe(customTimeout)\n    })\n  })\n\n  describe('setAutoLockEnabled', () => {\n    it('should set isAutoLockEnabled to false and update localStorage', () => {\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n\n      act(() => {\n        result.current.setAutoLockEnabled(false)\n      })\n\n      expect(result.current.isAutoLockEnabled).toBe(false)\n      expect(localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED)).toBe(\n        'false'\n      )\n    })\n\n    it('should set isAutoLockEnabled to true and remove localStorage key', () => {\n      localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'false')\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n\n      act(() => {\n        result.current.setAutoLockEnabled(true)\n      })\n\n      expect(result.current.isAutoLockEnabled).toBe(true)\n      expect(localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED)).toBe(\n        null\n      )\n    })\n\n    it('should dispatch auto-lock-settings-changed event when enabling', () => {\n      const dispatchEventSpy = jest.spyOn(window, 'dispatchEvent')\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n\n      act(() => {\n        result.current.setAutoLockEnabled(true)\n      })\n\n      expect(dispatchEventSpy).toHaveBeenCalledWith(\n        expect.objectContaining({ type: 'auto-lock-settings-changed' })\n      )\n    })\n\n    it('should dispatch auto-lock-settings-changed event when disabling', () => {\n      const dispatchEventSpy = jest.spyOn(window, 'dispatchEvent')\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n\n      act(() => {\n        result.current.setAutoLockEnabled(false)\n      })\n\n      expect(dispatchEventSpy).toHaveBeenCalledWith(\n        expect.objectContaining({ type: 'auto-lock-settings-changed' })\n      )\n    })\n  })\n\n  describe('setTimeoutMs', () => {\n    it('should update timeoutMs state and localStorage', () => {\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n      const newTimeout = 120000\n\n      act(() => {\n        result.current.setTimeoutMs(newTimeout)\n      })\n\n      expect(result.current.timeoutMs).toBe(newTimeout)\n      expect(\n        localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS)\n      ).toBe(String(newTimeout))\n    })\n\n    it('supports null timeout and stores \"null\"', () => {\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n\n      act(() => {\n        result.current.setTimeoutMs(null)\n      })\n\n      expect(result.current.timeoutMs).toBeNull()\n      expect(\n        localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS)\n      ).toBe('null')\n    })\n\n    it('should dispatch auto-lock-settings-changed event', () => {\n      const dispatchEventSpy = jest.spyOn(window, 'dispatchEvent')\n      const { result } = renderHook(() => useAutoLockPreferences(), {\n        wrapper: AutoLockProvider\n      })\n\n      act(() => {\n        result.current.setTimeoutMs(60000)\n      })\n\n      expect(dispatchEventSpy).toHaveBeenCalledWith(\n        expect.objectContaining({ type: 'auto-lock-settings-changed' })\n      )\n    })\n  })\n})\n\ndescribe('getAutoLockTimeoutMs', () => {\n  beforeEach(() => {\n    localStorage.clear()\n  })\n\n  it('should return DEFAULT_AUTO_LOCK_TIMEOUT when localStorage is empty', () => {\n    expect(getAutoLockTimeoutMs()).toBe(DEFAULT_AUTO_LOCK_TIMEOUT)\n  })\n\n  it('should return stored timeout from localStorage', () => {\n    const customTimeout = 300000\n    localStorage.setItem(\n      LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS,\n      String(customTimeout)\n    )\n    expect(getAutoLockTimeoutMs()).toBe(customTimeout)\n  })\n\n  it('returns null when localStorage value is \"null\"', () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS, 'null')\n    expect(getAutoLockTimeoutMs()).toBeNull()\n  })\n})\n\ndescribe('isAutoLockEnabled', () => {\n  beforeEach(() => {\n    localStorage.clear()\n  })\n\n  it('should return true when localStorage is empty', () => {\n    expect(isAutoLockEnabled()).toBe(true)\n  })\n\n  it('should return false when localStorage is set to \"false\"', () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'false')\n    expect(isAutoLockEnabled()).toBe(false)\n  })\n\n  it('should return true for any value other than \"false\"', () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'true')\n    expect(isAutoLockEnabled()).toBe(true)\n\n    localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'random')\n    expect(isAutoLockEnabled()).toBe(true)\n  })\n})\n\ndescribe('storage sync events', () => {\n  beforeEach(() => {\n    localStorage.clear()\n    jest.clearAllMocks()\n  })\n\n  it('updates enabled state on apply-auto-lock-enabled event', () => {\n    const { result } = renderHook(() => useAutoLockPreferences(), {\n      wrapper: AutoLockProvider\n    })\n    expect(result.current.isAutoLockEnabled).toBe(true)\n\n    act(() => {\n      localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'false')\n      window.dispatchEvent(new Event('apply-auto-lock-enabled'))\n    })\n\n    expect(result.current.isAutoLockEnabled).toBe(false)\n  })\n\n  it('updates timeout state on apply-auto-lock-timeout event', () => {\n    const { result } = renderHook(() => useAutoLockPreferences(), {\n      wrapper: AutoLockProvider\n    })\n    const newTimeout = 1234\n\n    act(() => {\n      localStorage.setItem(\n        LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS,\n        String(newTimeout)\n      )\n      window.dispatchEvent(new Event('apply-auto-lock-timeout'))\n    })\n\n    expect(result.current.timeoutMs).toBe(newTimeout)\n  })\n})\n"
  },
  {
    "path": "src/hooks/useAutoLockPreferences.ts",
    "content": "import {\n  createContext,\n  createElement,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState\n} from 'react'\n\nimport { DEFAULT_AUTO_LOCK_TIMEOUT, AUTO_LOCK_ENABLED } from '@tetherto/pearpass-lib-constants'\n\nimport { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\nimport { applyAutoLockEnabled, applyAutoLockTimeout } from '../utils/autoLock'\n\n\ntype AutoLockContextValue = {\n  shouldBypassAutoLock: boolean\n  setShouldBypassAutoLock: (value: boolean) => void\n  isAutoLockEnabled: boolean\n  timeoutMs: number | null\n  setAutoLockEnabled: (enabled: boolean) => void\n  setTimeoutMs: (ms: number | null) => void\n}\n\nconst AutoLockContext = createContext<AutoLockContextValue>({\n  shouldBypassAutoLock: false,\n  setShouldBypassAutoLock: () => { },\n  isAutoLockEnabled: true,\n  timeoutMs: DEFAULT_AUTO_LOCK_TIMEOUT,\n  setAutoLockEnabled: () => { },\n  setTimeoutMs: () => { }\n})\n\nexport const AutoLockProvider = ({ children }: { children: React.ReactNode }) => {\n  const [shouldBypassAutoLock, setShouldBypassAutoLock] = useState(false)\n\n  const [autoLockEnabled, setAutoLockEnabledState] = useState<boolean>(() => {\n    if (!AUTO_LOCK_ENABLED) {\n      return false\n    }\n    const stored = localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED)\n    return stored !== 'false'\n  })\n\n  const [timeoutMs, setTimeoutMsState] = useState<number | null>(() => {\n    if (!AUTO_LOCK_ENABLED) {\n      return DEFAULT_AUTO_LOCK_TIMEOUT\n    }\n    const stored = localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS)\n    if (stored === 'null') {\n      return null\n    }\n    return stored ? Number(stored) : DEFAULT_AUTO_LOCK_TIMEOUT\n  })\n\n  useEffect(() => {\n    const syncFromStorage = () => {\n      setAutoLockEnabledState(isAutoLockEnabled())\n    }\n\n    window.addEventListener('apply-auto-lock-enabled', syncFromStorage)\n\n    return () => {\n      window.removeEventListener(\n        'apply-auto-lock-enabled',\n        syncFromStorage\n      )\n    }\n  }, [])\n\n\n  useEffect(() => {\n    const syncFromStorage = () => {\n      setTimeoutMsState(getAutoLockTimeoutMs())\n    }\n\n    window.addEventListener('apply-auto-lock-timeout', syncFromStorage)\n\n    return () => {\n      window.removeEventListener(\n        'apply-auto-lock-timeout',\n        syncFromStorage\n      )\n    }\n  }, [])\n\n\n\n  const setAutoLockEnabled = useCallback((enabled: boolean) => {\n    applyAutoLockEnabled(enabled)\n    setAutoLockEnabledState(enabled)\n  }, [])\n\n\n  const setTimeoutMs = useCallback((ms: number | null) => {\n    applyAutoLockTimeout(ms)\n    setTimeoutMsState(ms)\n  }, [])\n\n  const value = useMemo<AutoLockContextValue>(\n    () => ({\n      shouldBypassAutoLock,\n      setShouldBypassAutoLock,\n      isAutoLockEnabled: autoLockEnabled,\n      timeoutMs,\n      setAutoLockEnabled,\n      setTimeoutMs\n    }),\n    [shouldBypassAutoLock, autoLockEnabled, timeoutMs, setAutoLockEnabled, setTimeoutMs]\n  )\n\n  return createElement(AutoLockContext.Provider, { value }, children)\n}\n\nexport const useAutoLockPreferences = () => useContext(AutoLockContext)\n\nexport function getAutoLockTimeoutMs(): number | null {\n  if (!AUTO_LOCK_ENABLED) {\n    return DEFAULT_AUTO_LOCK_TIMEOUT\n  }\n  const stored = localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS)\n  if (stored === 'null') {\n    return null\n  }\n  return stored ? Number(stored) : DEFAULT_AUTO_LOCK_TIMEOUT\n}\n\nexport function isAutoLockEnabled(): boolean {\n  const stored = localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED)\n  return stored !== 'false'\n}\n"
  },
  {
    "path": "src/hooks/useConnectExtension.js",
    "content": "import React, { useState } from 'react'\n\nimport { CopyIcon } from '../lib-react-components'\nimport { useCopyToClipboard } from './useCopyToClipboard.electron'\nimport { useTranslation } from './useTranslation'\nimport { COPY_FEEDBACK_DISPLAY_TIME } from '../constants/timeConstants'\nimport { ExtensionPairingModalContent } from '../containers/Modal/ExtensionPairingModalContent'\nimport { ExtensionPairingModalContentV2 } from '../containers/Modal/ExtensionPairingModalContent/ExtensionPairingModalContentV2'\nimport { useGlobalLoading } from '../context/LoadingContext.js'\nimport { useModal } from '../context/ModalContext'\nimport { useToast } from '../context/ToastContext'\nimport { getElectronConfig } from '../electron'\nimport { createOrGetPearpassClient } from '../services/createOrGetPearpassClient'\nimport {\n  isNativeMessagingIPCRunning,\n  startNativeMessagingIPC,\n  stopNativeMessagingIPC\n} from '../services/nativeMessagingIPCServer'\nimport {\n  getNativeMessagingEnabled,\n  setNativeMessagingEnabled\n} from '../services/nativeMessagingPreferences'\nimport {\n  getFingerprint,\n  getOrCreateIdentity,\n  getPairingToken,\n  resetIdentity\n} from '../services/security/appIdentity'\nimport { clearAllSessions } from '../services/security/sessionStore.js'\nimport { isV2 } from '../utils/designVersion'\nimport {\n  setupNativeMessaging,\n  killNativeMessagingHostProcesses,\n  cleanupNativeMessaging\n} from '../utils/nativeMessagingSetup'\n\nexport const useConnectExtension = () => {\n  const { setModal } = useModal()\n  const { setToast } = useToast()\n  const { t } = useTranslation()\n\n  const { copyToClipboard } = useCopyToClipboard({\n    onCopy: () => setToast({ message: t('Copied!'), icon: CopyIcon })\n  })\n\n  const [isBrowserExtensionEnabled, setIsBrowserExtensionEnabled] = useState(\n    getNativeMessagingEnabled() && isNativeMessagingIPCRunning()\n  )\n\n  const handleSetupExtension = async () => {\n    // Setup native messaging for the extension\n    const config = await getElectronConfig()\n    const result = await setupNativeMessaging({\n      userDataPath: config.userDataPath,\n      execPath: config.execPath,\n      bridgePath: config.bridgePath\n    })\n\n    if (result.success) {\n      // Kill any existing native host so Chrome respawns it and re-reads the manifest\n      await killNativeMessagingHostProcesses()\n      // Start native messaging IPC server\n      const client = createOrGetPearpassClient()\n      await startNativeMessagingIPC(client)\n      setNativeMessagingEnabled(true)\n      setIsBrowserExtensionEnabled(true)\n      setToast({\n        message: t('PearPass ready for extension connection.')\n      })\n    } else {\n      const errorMessage = result.message || t('Setup failed')\n      throw new Error(errorMessage)\n    }\n  }\n\n  const handleStopNativeMessaging = async () => {\n    clearAllSessions()\n    await stopNativeMessagingIPC()\n\n    // Ensure any running native host is terminated so it cannot continue talking\n    await killNativeMessagingHostProcesses()\n\n    // Clean unused manifest file and make sure browser cannot respawn the host while off\n    await cleanupNativeMessaging().catch(() => {})\n\n    resetState()\n\n    setNativeMessagingEnabled(false)\n\n    // Reset identity to force re-pairing\n    // This prevents extensions from reconnecting without a new pairing token\n    const client = createOrGetPearpassClient()\n    await resetIdentity(client)\n  }\n\n  // Pairing info state\n  const [isExtensionConnectionLoading, setIsExtensionConnectionLoading] =\n    useState(false)\n  useGlobalLoading({ isLoading: isExtensionConnectionLoading })\n  const [copyFeedback, setCopyFeedback] = useState('')\n\n  const resetState = () => {\n    setIsBrowserExtensionEnabled(false)\n    setIsExtensionConnectionLoading(false)\n    setCopyFeedback('')\n  }\n\n  const loadPairingInfo = async (reset = false) => {\n    const client = createOrGetPearpassClient()\n\n    const id = reset\n      ? // Reset pairing - generate new identity and clear sessions\n        await resetIdentity(client)\n      : // Just load existing identity\n        await getOrCreateIdentity(client)\n\n    // Mark pairing as approved for this identity so that nmBeginHandshake is allowed\n    await client\n      .encryptionAdd('nm.identity.pairingApproved', 'true')\n      .catch(() => {})\n\n    const pairingToken = await getPairingToken(client, id.ed25519PublicKey)\n    const fingerprint = getFingerprint(id.ed25519PublicKey)\n    const result = {\n      pairingToken,\n      fingerprint,\n      tokenCreationDate: id.creationDate\n    }\n\n    if (reset) {\n      // Show feedback when new token is generated\n      setCopyFeedback(t('New pairing token generated!'))\n      setTimeout(() => setCopyFeedback(''), COPY_FEEDBACK_DISPLAY_TIME)\n    }\n\n    return result\n  }\n\n  const toggleBrowserExtension = async (isOn) => {\n    if (isOn) {\n      setIsExtensionConnectionLoading(true)\n      return handleSetupExtension()\n        .then(loadPairingInfo)\n        .then(({ pairingToken, fingerprint, tokenCreationDate }) => {\n          setModal(\n            isV2() ? (\n              <ExtensionPairingModalContentV2\n                onCopy={() => copyToClipboard(pairingToken)}\n                pairingToken={pairingToken}\n                loadingPairing={isExtensionConnectionLoading}\n              />\n            ) : (\n              <ExtensionPairingModalContent\n                onCopy={() => copyToClipboard(pairingToken)}\n                pairingToken={pairingToken}\n                loadingPairing={isExtensionConnectionLoading}\n                copyFeedback={copyFeedback}\n                tokenCreationDate={tokenCreationDate}\n                fingerprint={fingerprint}\n              />\n            ),\n            { replace: true }\n          )\n        })\n        .catch((error) => {\n          setToast({ message: t('Error: ') + error.message })\n        })\n        .finally(() => {\n          setIsExtensionConnectionLoading(false)\n        })\n    }\n\n    return handleStopNativeMessaging()\n  }\n\n  return {\n    toggleBrowserExtension,\n    isBrowserExtensionEnabled\n  }\n}\n"
  },
  {
    "path": "src/hooks/useConnectExtension.test.js",
    "content": "jest.mock('sodium-native', () => ({\n  crypto_sign_keypair: jest.fn(),\n  crypto_sign_ed25519_pk_to_curve25519: jest.fn(),\n  crypto_sign_ed25519_sk_to_curve25519: jest.fn(),\n  crypto_kx_keypair: jest.fn(),\n  crypto_kx_server_session_keys: jest.fn(),\n  crypto_kx_client_session_keys: jest.fn(),\n  crypto_secretbox_easy: jest.fn(),\n  crypto_secretbox_open_easy: jest.fn(),\n  randombytes_buf: jest.fn(),\n  sodium_malloc: jest.fn((size) => Buffer.alloc(size)),\n  crypto_sign_PUBLICKEYBYTES: 32,\n  crypto_sign_SECRETKEYBYTES: 64,\n  crypto_kx_PUBLICKEYBYTES: 32,\n  crypto_kx_SECRETKEYBYTES: 32,\n  crypto_kx_SESSIONKEYBYTES: 32,\n  crypto_secretbox_NONCEBYTES: 24,\n  crypto_secretbox_MACBYTES: 16\n}))\njest.mock(\n  '../containers/Modal/ExtensionPairingModalContent/ExtensionPairingModalContentV2',\n  () => ({ ExtensionPairingModalContentV2: () => null })\n)\njest.mock('../containers/Modal/ExtensionPairingModalContent', () => ({\n  ExtensionPairingModalContent: () => null\n}))\n\nimport { act, renderHook, waitFor } from '@testing-library/react'\n\nimport { useConnectExtension } from './useConnectExtension'\nimport { createOrGetPearpassClient } from '../services/createOrGetPearpassClient'\nimport {\n  isNativeMessagingIPCRunning,\n  startNativeMessagingIPC,\n  stopNativeMessagingIPC\n} from '../services/nativeMessagingIPCServer'\nimport {\n  getNativeMessagingEnabled,\n  setNativeMessagingEnabled\n} from '../services/nativeMessagingPreferences'\nimport {\n  getFingerprint,\n  getOrCreateIdentity,\n  getPairingToken\n} from '../services/security/appIdentity'\nimport {\n  killNativeMessagingHostProcesses,\n  setupNativeMessaging\n} from '../utils/nativeMessagingSetup'\n\nconst mockSetModal = jest.fn()\nconst mockSetToast = jest.fn()\n\njest.mock('../context/ModalContext', () => ({\n  useModal: () => ({ setModal: mockSetModal })\n}))\njest.mock('../context/ToastContext', () => ({\n  useToast: () => ({ setToast: mockSetToast })\n}))\njest.mock('../context/LoadingContext', () => ({\n  useGlobalLoading: jest.fn()\n}))\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({ i18n: { _: (msg) => msg } })\n}))\n\njest.mock('../services/createOrGetPearpassClient', () => ({\n  createOrGetPearpassClient: jest.fn()\n}))\njest.mock('../services/nativeMessagingIPCServer', () => ({\n  isNativeMessagingIPCRunning: jest.fn(),\n  startNativeMessagingIPC: jest.fn(),\n  stopNativeMessagingIPC: jest.fn()\n}))\njest.mock('../services/nativeMessagingPreferences', () => ({\n  getNativeMessagingEnabled: jest.fn(),\n  setNativeMessagingEnabled: jest.fn()\n}))\njest.mock('../services/security/appIdentity', () => ({\n  getFingerprint: jest.fn(),\n  getOrCreateIdentity: jest.fn(),\n  getPairingToken: jest.fn(),\n  resetIdentity: jest.fn()\n}))\njest.mock('../utils/nativeMessagingSetup', () => ({\n  setupNativeMessaging: jest.fn(),\n  cleanupNativeMessaging: jest.fn().mockResolvedValue(),\n  killNativeMessagingHostProcesses: jest.fn().mockResolvedValue()\n}))\njest.mock('../electron', () => ({\n  getElectronConfig: jest.fn().mockResolvedValue({\n    userDataPath: '/mock/user/data',\n    execPath: '/mock/exec/path',\n    bridgePath: '/mock/bridge/path'\n  })\n}))\n\ndescribe('useConnectExtension', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('initializes extension state if enabled and running', () => {\n    getNativeMessagingEnabled.mockReturnValue(true)\n    isNativeMessagingIPCRunning.mockReturnValue(true)\n\n    const { result } = renderHook(() => useConnectExtension())\n    expect(result.current.isBrowserExtensionEnabled).toBe(true)\n  })\n\n  it('does not enable if not running or not enabled', () => {\n    getNativeMessagingEnabled.mockReturnValue(false)\n    isNativeMessagingIPCRunning.mockReturnValue(false)\n\n    const { result } = renderHook(() => useConnectExtension())\n    expect(result.current.isBrowserExtensionEnabled).toBe(false)\n  })\n\n  it('connects extension successfully via toggleBrowserExtension', async () => {\n    const fakeIdentity = {\n      ed25519PublicKey: 'pubkey',\n      creationDate: '2023-01-01'\n    }\n\n    setupNativeMessaging.mockResolvedValue({ success: true })\n    startNativeMessagingIPC.mockResolvedValue()\n    killNativeMessagingHostProcesses.mockResolvedValue()\n    createOrGetPearpassClient.mockReturnValue({\n      encryptionAdd: jest.fn().mockResolvedValue(undefined)\n    })\n    getOrCreateIdentity.mockResolvedValue(fakeIdentity)\n    getPairingToken.mockResolvedValue('PAIRCODE-ABCD')\n    getFingerprint.mockReturnValue('ABCD1234')\n\n    const { result } = renderHook(() => useConnectExtension())\n\n    await act(async () => {\n      await result.current.toggleBrowserExtension(true)\n    })\n\n    expect(setupNativeMessaging).toHaveBeenCalled()\n    expect(killNativeMessagingHostProcesses).toHaveBeenCalled()\n    expect(startNativeMessagingIPC).toHaveBeenCalled()\n    expect(setNativeMessagingEnabled).toHaveBeenCalledWith(true)\n    expect(mockSetModal).toHaveBeenCalled()\n  })\n\n  it('handles setup failure gracefully via toggleBrowserExtension', async () => {\n    setupNativeMessaging.mockResolvedValue({ success: false, message: 'fail' })\n    createOrGetPearpassClient.mockReturnValue({})\n\n    const { result } = renderHook(() => useConnectExtension())\n\n    await act(async () => {\n      await result.current.toggleBrowserExtension(true)\n    })\n\n    expect(setupNativeMessaging).toHaveBeenCalled()\n    expect(startNativeMessagingIPC).not.toHaveBeenCalled()\n    expect(mockSetToast).toHaveBeenCalled()\n  })\n\n  it('stops native messaging when toggled off', async () => {\n    stopNativeMessagingIPC.mockResolvedValue()\n\n    const { result } = renderHook(() => useConnectExtension())\n\n    await act(async () => {\n      await result.current.toggleBrowserExtension(false)\n    })\n\n    expect(stopNativeMessagingIPC).toHaveBeenCalled()\n    expect(setNativeMessagingEnabled).toHaveBeenCalledWith(false)\n  })\n\n  it('loads pairing info on enable', async () => {\n    const fakeIdentity = {\n      ed25519PublicKey: 'pubkey',\n      creationDate: '2023-01-01'\n    }\n\n    setupNativeMessaging.mockResolvedValue({ success: true })\n    startNativeMessagingIPC.mockResolvedValue()\n    killNativeMessagingHostProcesses.mockResolvedValue()\n    getOrCreateIdentity.mockResolvedValue(fakeIdentity)\n    getPairingToken.mockResolvedValue('PAIRCODE-ABCD')\n    getFingerprint.mockReturnValue('ABCD1234')\n\n    getNativeMessagingEnabled.mockReturnValue(false)\n    isNativeMessagingIPCRunning.mockReturnValue(false)\n    createOrGetPearpassClient.mockReturnValue({\n      encryptionAdd: jest.fn().mockResolvedValue(undefined)\n    })\n\n    const { result } = renderHook(() => useConnectExtension())\n\n    await act(async () => {\n      await result.current.toggleBrowserExtension(true)\n    })\n\n    await waitFor(() => {\n      expect(getOrCreateIdentity).toHaveBeenCalled()\n      expect(getPairingToken).toHaveBeenCalled()\n      expect(getFingerprint).toHaveBeenCalledWith('pubkey')\n    })\n  })\n})\n"
  },
  {
    "path": "src/hooks/useCopyToClipboard.electron.js",
    "content": "/**\n * Electron renderer implementation: uses Clipboard API only.\n * No pear-run / pear-ipc so the bundle doesn't pull in Node-only deps (__filename, etc.).\n * Optional: clear clipboard after delay can be added via IPC to main later.\n */\nimport React, { useState, useEffect } from 'react'\n\nimport { CLIPBOARD_CLEAR_TIMEOUT } from '@tetherto/pearpass-lib-constants'\nimport { Check } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { useTranslation } from './useTranslation'\nimport { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\nimport { useToast } from '../context/ToastContext'\nimport { logger } from '../utils/logger'\n\n/**\n * @param {{ onCopy?: () => void }} props\n * @returns {{ isCopied: boolean, copyToClipboard: (text: string) => boolean, isCopyToClipboardDisabled: boolean }}\n */\nexport const useCopyToClipboard = ({ onCopy } = {}) => {\n  const { t } = useTranslation()\n  const toastCtx = useToast()\n  const setToast = toastCtx?.setToast\n  const [isCopyToClipboardDisabled, setIsCopyToClipboardDisabled] =\n    useState(true)\n  const [isCopied, setIsCopied] = useState(false)\n\n  useEffect(() => {\n    const disabled = localStorage.getItem(\n      LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED\n    )\n    setIsCopyToClipboardDisabled(disabled === 'true')\n  }, [])\n\n  const copyToClipboard = (text) => {\n    if (isCopyToClipboardDisabled) return false\n    if (!text || typeof text !== 'string') {\n      logger.error('useCopyToClipboard', 'Text to copy is invalid or undefined')\n      return false\n    }\n    if (!navigator.clipboard) {\n      logger.error('useCopyToClipboard', 'Clipboard API is not available')\n      return false\n    }\n    navigator.clipboard.writeText(text).then(\n      () => {\n        setIsCopied(true)\n        if (onCopy) {\n          onCopy()\n        } else {\n          setToast?.({ message: t('Copied to Clipboard'), icon: Check })\n        }\n        // Clear clipboard automatically after delay\n        if (window.electronAPI) {\n          window.electronAPI.clearClipboardAfter?.(\n            text,\n            CLIPBOARD_CLEAR_TIMEOUT\n          )\n        }\n      },\n      (err) => {\n        logger.error(\n          'useCopyToClipboard',\n          'Failed to copy text to clipboard',\n          err\n        )\n      }\n    )\n    return true\n  }\n\n  return { isCopied, copyToClipboard, isCopyToClipboardDisabled }\n}\n"
  },
  {
    "path": "src/hooks/useCopyToClipboard.electron.test.js",
    "content": "import { act, renderHook, waitFor } from '@testing-library/react'\n\nimport { useCopyToClipboard } from './useCopyToClipboard.electron'\nimport { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\nimport { logger } from '../utils/logger'\n\njest.mock('../utils/logger', () => ({\n  logger: {\n    error: jest.fn()\n  }\n}))\njest.mock('./useTranslation', () => ({\n  useTranslation: () => ({\n    t: (value) => value\n  })\n}))\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  CLIPBOARD_CLEAR_TIMEOUT: 1000\n}))\n\ndescribe('useCopyToClipboard.electron', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    localStorage.clear()\n    window.electronAPI = {\n      clearClipboardAfter: jest.fn()\n    }\n\n    Object.defineProperty(navigator, 'clipboard', {\n      configurable: true,\n      writable: true,\n      value: {\n        writeText: jest.fn().mockResolvedValue(undefined)\n      }\n    })\n  })\n\n  it('starts with isCopied set to false', () => {\n    const { result } = renderHook(() => useCopyToClipboard())\n    expect(result.current.isCopied).toBe(false)\n  })\n\n  it('reads disabled flag from localStorage on mount', async () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED, 'true')\n    const { result } = renderHook(() => useCopyToClipboard())\n\n    await waitFor(() => {\n      expect(result.current.isCopyToClipboardDisabled).toBe(true)\n    })\n  })\n\n  it('enables copy when disabled flag is not true', async () => {\n    const { result } = renderHook(() => useCopyToClipboard())\n\n    await waitFor(() => {\n      expect(result.current.isCopyToClipboardDisabled).toBe(false)\n    })\n  })\n\n  it('does not copy when disabled', async () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED, 'true')\n    const { result } = renderHook(() => useCopyToClipboard())\n\n    await waitFor(() => {\n      expect(result.current.isCopyToClipboardDisabled).toBe(true)\n    })\n\n    let copied\n    await act(async () => {\n      copied = result.current.copyToClipboard('secret')\n    })\n\n    expect(copied).toBe(false)\n    expect(navigator.clipboard.writeText).not.toHaveBeenCalled()\n  })\n\n  it('copies text and sets isCopied on success', async () => {\n    const onCopy = jest.fn()\n    const { result } = renderHook(() => useCopyToClipboard({ onCopy }))\n\n    await waitFor(() => {\n      expect(result.current.isCopyToClipboardDisabled).toBe(false)\n    })\n\n    let copied\n    await act(async () => {\n      copied = result.current.copyToClipboard('secret')\n    })\n\n    expect(copied).toBe(true)\n    expect(navigator.clipboard.writeText).toHaveBeenCalledWith('secret')\n\n    await waitFor(() => {\n      expect(result.current.isCopied).toBe(true)\n      expect(onCopy).toHaveBeenCalledTimes(1)\n    })\n    expect(window.electronAPI.clearClipboardAfter).toHaveBeenCalledWith(\n      'secret',\n      1000\n    )\n  })\n\n  it('logs and returns false when text is invalid', async () => {\n    const { result } = renderHook(() => useCopyToClipboard())\n\n    await waitFor(() => {\n      expect(result.current.isCopyToClipboardDisabled).toBe(false)\n    })\n\n    let copied\n    await act(async () => {\n      copied = result.current.copyToClipboard(undefined)\n    })\n\n    expect(copied).toBe(false)\n    expect(logger.error).toHaveBeenCalledWith(\n      'useCopyToClipboard',\n      'Text to copy is invalid or undefined'\n    )\n    expect(navigator.clipboard.writeText).not.toHaveBeenCalled()\n  })\n\n  it('logs and returns false when Clipboard API is unavailable', async () => {\n    const { result } = renderHook(() => useCopyToClipboard())\n\n    await waitFor(() => {\n      expect(result.current.isCopyToClipboardDisabled).toBe(false)\n    })\n\n    Object.defineProperty(navigator, 'clipboard', {\n      configurable: true,\n      writable: true,\n      value: undefined\n    })\n\n    let copied\n    await act(async () => {\n      copied = result.current.copyToClipboard('secret')\n    })\n\n    expect(copied).toBe(false)\n    expect(logger.error).toHaveBeenCalledWith(\n      'useCopyToClipboard',\n      'Clipboard API is not available'\n    )\n  })\n\n  it('logs write failure when clipboard write rejects', async () => {\n    const error = new Error('copy failed')\n    navigator.clipboard.writeText.mockRejectedValueOnce(error)\n\n    const { result } = renderHook(() => useCopyToClipboard())\n\n    await waitFor(() => {\n      expect(result.current.isCopyToClipboardDisabled).toBe(false)\n    })\n\n    let copied\n    await act(async () => {\n      copied = result.current.copyToClipboard('secret')\n      await Promise.resolve()\n    })\n\n    expect(copied).toBe(true)\n    await waitFor(() => {\n      expect(logger.error).toHaveBeenCalledWith(\n        'useCopyToClipboard',\n        'Failed to copy text to clipboard',\n        error\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/hooks/useCreateOrEditRecord.d.ts",
    "content": "import { PassType } from '../shared/types'\n\nexport type CreateOrEditRecordParams = {\n  recordType: string\n  initialRecord?: unknown\n  selectedFolder?: string\n  isFavorite?: boolean\n  setValue?: (value: string, type: PassType) => void\n}\n\nexport function useCreateOrEditRecord(): {\n  handleCreateOrEditRecord: (params: CreateOrEditRecordParams) => void\n}\n"
  },
  {
    "path": "src/hooks/useCreateOrEditRecord.js",
    "content": "import { html } from 'htm/react'\n\nimport { CreateOrEditCategoryWrapper } from '../containers/Modal/CreateOrEditCategoryWrapper'\nimport { GeneratePasswordModalContentV2 } from '../containers/Modal/GeneratePasswordModalContentV2/GeneratePasswordModalContentV2'\nimport { GeneratePasswordSideDrawerContent } from '../containers/Modal/GeneratePasswordSideDrawerContent'\nimport { useModal } from '../context/ModalContext'\nimport { isV2 } from '../utils/designVersion'\n\nexport const useCreateOrEditRecord = () => {\n  const { setModal } = useModal()\n\n  const getModalContentByRecordType = ({\n    recordType,\n    initialRecord,\n    selectedFolder,\n    isFavorite\n  }) => html`\n    <${CreateOrEditCategoryWrapper}\n      recordType=${recordType}\n      initialRecord=${initialRecord}\n      selectedFolder=${selectedFolder}\n      isFavorite=${isFavorite}\n    />\n  `\n\n  const getSideDrawerContentByRecordType = ({ recordType, setValue }) => {\n    if (recordType === 'password') {\n      return html`<${GeneratePasswordSideDrawerContent}\n        onPasswordInsert=${setValue}\n      />`\n    }\n  }\n\n  const getGeneratePasswordV2Content = ({ setValue }) => html`\n    <${GeneratePasswordModalContentV2} onPasswordInsert=${setValue} />\n  `\n\n  /**\n   * @param {{\n   *   recordType: string,\n   *   initialRecord?: unknown,\n   *   selectedFolder?: string,\n   *   isFavorite?: boolean,\n   *   setValue?: (value: string, type: import('../shared/types').PassType) => void\n   * }} options\n   */\n  const handleCreateOrEditRecord = (options) => {\n    const { recordType, initialRecord, selectedFolder, isFavorite, setValue } =\n      options\n\n    if (recordType === 'password') {\n      if (isV2()) {\n        setModal(getGeneratePasswordV2Content({ setValue }))\n        return\n      }\n\n      setModal(getSideDrawerContentByRecordType({ recordType, setValue }), {\n        modalType: 'sideDrawer'\n      })\n\n      return\n    }\n\n    setModal(\n      getModalContentByRecordType({\n        recordType,\n        initialRecord,\n        selectedFolder,\n        isFavorite\n      })\n    )\n  }\n\n  return {\n    handleCreateOrEditRecord\n  }\n}\n"
  },
  {
    "path": "src/hooks/useCreateOrEditRecord.test.js",
    "content": "import { renderHook } from '@testing-library/react'\n\nimport { useCreateOrEditRecord } from './useCreateOrEditRecord'\nimport { useModal } from '../context/ModalContext'\nimport '@testing-library/jest-dom'\n\njest.mock(\n  '../containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2',\n  () => ({\n    CreateFolderModalContentV2: function MockCreateFolderModalContentV2() {\n      return null\n    }\n  })\n)\n\njest.mock(\n  '../containers/Modal/DisplayPictureModalContentV2/DisplayPictureModalContentV2',\n  () => ({\n    DisplayPictureModalContentV2: function MockDisplayPictureModalContentV2() {\n      return null\n    }\n  })\n)\n\njest.mock('../containers/Modal/CreateOrEditCategoryWrapper', () => ({\n  CreateOrEditCategoryWrapper: function MockCreateOrEditCategoryWrapper() {\n    return null\n  }\n}))\n\njest.mock(\n  '../containers/Modal/GeneratePasswordModalContentV2/GeneratePasswordModalContentV2',\n  () => ({\n    GeneratePasswordModalContentV2:\n      function MockGeneratePasswordModalContentV2() {\n        return null\n      }\n  })\n)\n\njest.mock('../context/ModalContext', () => ({\n  useModal: jest.fn()\n}))\n\njest.mock('@tetherto/pear-apps-utils-generate-unique-id', () => ({\n  generateUniqueId: jest.fn(() => 'mocked-unique-id')\n}))\n\njest.mock('../utils/designVersion', () => ({\n  isV2: () => true\n}))\n\ndescribe('useCreateOrEditRecord', () => {\n  const setModalMock = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    useModal.mockReturnValue({ setModal: setModalMock })\n  })\n\n  it('should return handleCreateOrEditRecord function', () => {\n    const { result } = renderHook(() => useCreateOrEditRecord())\n    expect(typeof result.current.handleCreateOrEditRecord).toBe('function')\n  })\n\n  it('should call setModal for password record type', () => {\n    const { result } = renderHook(() => useCreateOrEditRecord())\n    const setValue = jest.fn()\n\n    result.current.handleCreateOrEditRecord({\n      recordType: 'password',\n      setValue\n    })\n\n    expect(setModalMock).toHaveBeenCalledTimes(1)\n    expect(setModalMock.mock.calls[0][1]).toBeUndefined()\n  })\n\n  it('should call setModal with category wrapper content for non-password record types', () => {\n    const { result } = renderHook(() => useCreateOrEditRecord())\n\n    result.current.handleCreateOrEditRecord({\n      recordType: 'login',\n      initialRecord: { id: '123' },\n      selectedFolder: 'folder1'\n    })\n\n    expect(setModalMock).toHaveBeenCalledTimes(1)\n    expect(setModalMock.mock.calls[0][1]).toBeUndefined()\n  })\n\n  it('should handle various record types', () => {\n    const { result } = renderHook(() => useCreateOrEditRecord())\n    const recordTypes = ['login', 'creditCard', 'identity', 'note', 'custom']\n\n    recordTypes.forEach((recordType) => {\n      setModalMock.mockClear()\n      result.current.handleCreateOrEditRecord({ recordType })\n      expect(setModalMock).toHaveBeenCalledTimes(1)\n    })\n  })\n})\n"
  },
  {
    "path": "src/hooks/useCustomFields.js",
    "content": "import { useState } from 'react'\n\nimport { generateUniqueId } from '@tetherto/pear-apps-utils-generate-unique-id'\n\n/**\n * @param {{\n *  customFields?: {\n *      id: string,\n *      type: string,\n *      props: any\n *  }[]\n * }} props\n * @returns {{\n *  customFields: {id: string, type: string, props: any}[],\n *  createCustomField: (type: string, props: any) => void,\n *  setCustomFields: React.Dispatch<React.SetStateAction<{id: string, type: string, props: any}[]>>\n * }}\n */\nexport const useCustomFields = ({\n  customFields: initialCustomFields = []\n} = {}) => {\n  const [customFields, setCustomFields] = useState(initialCustomFields)\n\n  const createCustomField = (type, props) => {\n    const id = generateUniqueId()\n\n    return {\n      id,\n      type,\n      props: {\n        ...props\n      }\n    }\n  }\n\n  return {\n    customFields,\n    createCustomField,\n    setCustomFields\n  }\n}\n"
  },
  {
    "path": "src/hooks/useCustomFields.test.js",
    "content": "import { renderHook, act } from '@testing-library/react'\nimport { generateUniqueId } from '@tetherto/pear-apps-utils-generate-unique-id'\n\nimport { useCustomFields } from './useCustomFields'\n\njest.mock('@tetherto/pear-apps-utils-generate-unique-id', () => ({\n  generateUniqueId: jest.fn()\n}))\n\ndescribe('useCustomFields', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    generateUniqueId.mockReturnValue('test-id-123')\n  })\n\n  test('should initialize with empty customFields by default', () => {\n    const { result } = renderHook(() => useCustomFields())\n\n    expect(result.current.customFields).toEqual([])\n  })\n\n  test('should initialize with provided customFields', () => {\n    const initialCustomFields = [\n      { id: 'field1', type: 'text', props: { label: 'Field 1' } }\n    ]\n\n    const { result } = renderHook(() =>\n      useCustomFields({ customFields: initialCustomFields })\n    )\n\n    expect(result.current.customFields).toEqual(initialCustomFields)\n  })\n\n  test('should create a custom field with the correct structure', () => {\n    const { result } = renderHook(() => useCustomFields())\n\n    const newField = result.current.createCustomField('text', {\n      label: 'New Field'\n    })\n\n    expect(generateUniqueId).toHaveBeenCalledTimes(1)\n    expect(newField).toEqual({\n      id: 'test-id-123',\n      type: 'text',\n      props: { label: 'New Field' }\n    })\n  })\n\n  test('should update customFields with setCustomFields', () => {\n    const { result } = renderHook(() => useCustomFields())\n\n    const newCustomFields = [\n      { id: 'field1', type: 'text', props: { label: 'Field 1' } }\n    ]\n\n    act(() => {\n      result.current.setCustomFields(newCustomFields)\n    })\n\n    expect(result.current.customFields).toEqual(newCustomFields)\n  })\n\n  test('should handle multiple custom fields', () => {\n    generateUniqueId.mockReturnValueOnce('id-1').mockReturnValueOnce('id-2')\n\n    const { result } = renderHook(() => useCustomFields())\n\n    const field1 = result.current.createCustomField('text', {\n      label: 'Field 1'\n    })\n    const field2 = result.current.createCustomField('checkbox', {\n      label: 'Field 2',\n      checked: false\n    })\n\n    act(() => {\n      result.current.setCustomFields([field1, field2])\n    })\n\n    expect(result.current.customFields).toEqual([\n      { id: 'id-1', type: 'text', props: { label: 'Field 1' } },\n      {\n        id: 'id-2',\n        type: 'checkbox',\n        props: { label: 'Field 2', checked: false }\n      }\n    ])\n  })\n})\n"
  },
  {
    "path": "src/hooks/useGetMultipleFiles.js",
    "content": "import { useEffect } from 'react'\n\nimport { vaultGetFile } from '@tetherto/pearpass-lib-vault'\n\nimport { logger } from '../utils/logger'\n\n/**\n * @param {object} [param0]\n * @param {string[]} [param0.fieldNames]\n * @param {(name: string, value: unknown) => void} [param0.updateValues]\n * @param {{ data?: Record<string, unknown> } | undefined} [param0.initialRecord]\n */\nexport const useGetMultipleFiles = ({\n  fieldNames,\n  updateValues,\n  initialRecord\n} = {}) => {\n  const getFilesAsync = async (fieldName) => {\n    const attachments = initialRecord?.data?.[fieldName] || []\n\n    if (!attachments.length) {\n      return\n    }\n\n    try {\n      const files = await Promise.all(\n        attachments.map(async (attachment) => {\n          const file = await vaultGetFile(\n            `record/${initialRecord.id}/file/${attachment.id}`\n          )\n          return { ...attachment, buffer: file }\n        })\n      )\n\n      updateValues(fieldName, files)\n    } catch (error) {\n      logger.error('useGetMultipleFiles', 'Error retrieving files:', error)\n    }\n  }\n\n  useEffect(() => {\n    ;(async () => {\n      await Promise.all(\n        fieldNames.map(async (fieldName) => {\n          if (!fieldName || !updateValues || !initialRecord) {\n            return\n          }\n          await getFilesAsync(fieldName)\n        })\n      )\n    })()\n  }, [initialRecord])\n}\n"
  },
  {
    "path": "src/hooks/useGetMultipleFiles.test.js",
    "content": "import { renderHook, waitFor } from '@testing-library/react'\nimport { vaultGetFile } from '@tetherto/pearpass-lib-vault'\n\nimport { useGetMultipleFiles } from './useGetMultipleFiles'\nimport { logger } from '../utils/logger'\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  vaultGetFile: jest.fn()\n}))\n\njest.mock('../utils/logger', () => ({\n  logger: { error: jest.fn() }\n}))\n\ndescribe('useGetMultipleFiles', () => {\n  const mockUpdateValues = jest.fn()\n  const initialRecord = {\n    id: 'rec-1',\n    data: {\n      fieldA: [\n        { id: 'file-1', name: 'file1.txt' },\n        { id: 'file-2', name: 'file2.txt' }\n      ],\n      fieldB: []\n    }\n  }\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('fetches files for each field and calls updateValues', async () => {\n    vaultGetFile\n      .mockResolvedValueOnce('buffer1')\n      .mockResolvedValueOnce('buffer2')\n\n    await renderHook(() =>\n      useGetMultipleFiles({\n        fieldNames: ['fieldA', 'fieldB'],\n        updateValues: mockUpdateValues,\n        initialRecord\n      })\n    )\n\n    await waitFor(() => {\n      expect(vaultGetFile).toHaveBeenCalledTimes(2)\n      expect(vaultGetFile).toHaveBeenCalledWith('record/rec-1/file/file-1')\n      expect(vaultGetFile).toHaveBeenCalledWith('record/rec-1/file/file-2')\n\n      expect(mockUpdateValues).toHaveBeenCalledWith('fieldA', [\n        { id: 'file-1', name: 'file1.txt', buffer: 'buffer1' },\n        { id: 'file-2', name: 'file2.txt', buffer: 'buffer2' }\n      ])\n      expect(mockUpdateValues).toHaveBeenCalledTimes(1)\n    })\n  })\n\n  it('does not call updateValues if attachments are empty', async () => {\n    await renderHook(() =>\n      useGetMultipleFiles({\n        fieldNames: ['fieldB'],\n        updateValues: mockUpdateValues,\n        initialRecord\n      })\n    )\n\n    await Promise.resolve()\n\n    expect(vaultGetFile).not.toHaveBeenCalled()\n    expect(mockUpdateValues).not.toHaveBeenCalled()\n  })\n\n  it('logs error if getFile throws', async () => {\n    vaultGetFile.mockRejectedValueOnce(new Error('fail'))\n\n    await renderHook(() =>\n      useGetMultipleFiles({\n        fieldNames: ['fieldA'],\n        updateValues: mockUpdateValues,\n        initialRecord\n      })\n    )\n\n    await waitFor(() => {\n      expect(logger.error).toHaveBeenCalledWith(\n        'useGetMultipleFiles',\n        'Error retrieving files:',\n        expect.any(Error)\n      )\n      expect(mockUpdateValues).not.toHaveBeenCalled()\n    })\n  })\n\n  it('does nothing if fieldNames, updateValues, or initialRecord are missing', async () => {\n    await renderHook(() =>\n      useGetMultipleFiles({\n        fieldNames: [],\n        updateValues: mockUpdateValues,\n        initialRecord\n      })\n    )\n    await renderHook(() =>\n      useGetMultipleFiles({\n        fieldNames: ['fieldA'],\n        updateValues: null,\n        initialRecord\n      })\n    )\n    await renderHook(() =>\n      useGetMultipleFiles({\n        fieldNames: ['fieldA'],\n        updateValues: mockUpdateValues,\n        initialRecord: null\n      })\n    )\n\n    await Promise.resolve()\n\n    expect(vaultGetFile).not.toHaveBeenCalled()\n    expect(mockUpdateValues).not.toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/hooks/useLanguageOptions.js",
    "content": "import { useMemo } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { LANGUAGES } from '@tetherto/pearpass-lib-constants'\n\nexport const useLanguageOptions = () => {\n  const { i18n } = useLingui()\n\n  const languageOptions = useMemo(() => {\n    const languageLabelByValue = {\n      en: i18n._('English'),\n      it: i18n._('Italian'),\n      es: i18n._('Spanish'),\n      fr: i18n._('French')\n    }\n\n    return LANGUAGES.map((lang) => ({\n      label: languageLabelByValue[lang.value],\n      value: lang.value,\n      testId: `settings-language-${lang.value}`\n    }))\n  }, [LANGUAGES, i18n])\n\n  return {\n    languageOptions\n  }\n}\n"
  },
  {
    "path": "src/hooks/useLanguageOptions.test.js",
    "content": "import { renderHook } from '@testing-library/react'\n\nimport { useLanguageOptions } from './useLanguageOptions'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: { _: (str) => str }\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  LANGUAGES: [\n    { value: 'en' },\n    { value: 'it' },\n    { value: 'es' },\n    { value: 'fr' }\n  ]\n}))\n\ndescribe('useLanguageOptions', () => {\n  afterEach(() => {\n    jest.clearAllMocks()\n  })\n  it('should return language options with correct labels and values', () => {\n    const { result } = renderHook(() => useLanguageOptions())\n\n    expect(result.current.languageOptions).toEqual([\n      { label: 'English', value: 'en', testId: 'settings-language-en' },\n      { label: 'Italian', value: 'it', testId: 'settings-language-it' },\n      { label: 'Spanish', value: 'es', testId: 'settings-language-es' },\n      { label: 'French', value: 'fr', testId: 'settings-language-fr' }\n    ])\n  })\n\n  it('should memoize the language options', () => {\n    const { result, rerender } = renderHook(() => useLanguageOptions())\n    const firstResult = result.current.languageOptions\n\n    rerender()\n\n    expect(result.current.languageOptions).toStrictEqual(firstResult)\n  })\n})\n"
  },
  {
    "path": "src/hooks/useOutsideClick.js",
    "content": "import { useEffect, useRef } from 'react'\n\n/**\n * @typedef UseOutsideClickParams\n * @property {(event: Event) => void} onOutsideClick\n */\n\n/**\n * @param {UseOutsideClickParams} params\n * @returns {import('react').MutableRefObject<null>}\n */\n\nexport const useOutsideClick = ({ onOutsideClick }) => {\n  const ref = useRef(null)\n\n  useEffect(() => {\n    const handleListener = (event) => {\n      if (ref?.current && ref.current.contains(event.target)) {\n        return\n      }\n\n      onOutsideClick(event)\n    }\n\n    document.addEventListener('mousedown', handleListener)\n    document.addEventListener('touchstart', handleListener)\n\n    return () => {\n      document.removeEventListener('mousedown', handleListener)\n      document.removeEventListener('touchstart', handleListener)\n    }\n  }, [])\n\n  return ref\n}\n"
  },
  {
    "path": "src/hooks/useOutsideClick.test.js",
    "content": "import { renderHook, fireEvent } from '@testing-library/react'\n\nimport { useOutsideClick } from './useOutsideClick'\n\ndescribe('useOutsideClick', () => {\n  beforeEach(() => {\n    const div = document.createElement('div')\n    document.body.appendChild(div)\n  })\n\n  afterEach(() => {\n    document.body.innerHTML = ''\n    jest.clearAllMocks()\n  })\n\n  test('should add event listeners on mount', () => {\n    const addEventListenerSpy = jest.spyOn(document, 'addEventListener')\n    const mockOnOutsideClick = jest.fn()\n\n    renderHook(() => useOutsideClick({ onOutsideClick: mockOnOutsideClick }))\n\n    expect(addEventListenerSpy).toHaveBeenCalledWith(\n      'mousedown',\n      expect.any(Function)\n    )\n    expect(addEventListenerSpy).toHaveBeenCalledWith(\n      'touchstart',\n      expect.any(Function)\n    )\n  })\n\n  test('should remove event listeners on unmount', () => {\n    const removeEventListenerSpy = jest.spyOn(document, 'removeEventListener')\n    const mockOnOutsideClick = jest.fn()\n\n    const { unmount } = renderHook(() =>\n      useOutsideClick({ onOutsideClick: mockOnOutsideClick })\n    )\n    unmount()\n\n    expect(removeEventListenerSpy).toHaveBeenCalledWith(\n      'mousedown',\n      expect.any(Function)\n    )\n    expect(removeEventListenerSpy).toHaveBeenCalledWith(\n      'touchstart',\n      expect.any(Function)\n    )\n  })\n\n  test('should call onOutsideClick when clicking outside the ref element', () => {\n    const mockOnOutsideClick = jest.fn()\n\n    const { result } = renderHook(() =>\n      useOutsideClick({ onOutsideClick: mockOnOutsideClick })\n    )\n\n    const divElement = document.createElement('div')\n    document.body.appendChild(divElement)\n\n    Object.defineProperty(result.current, 'current', {\n      value: divElement,\n      writable: true\n    })\n\n    const outsideElement = document.createElement('button')\n    document.body.appendChild(outsideElement)\n\n    fireEvent.mouseDown(outsideElement)\n\n    expect(mockOnOutsideClick).toHaveBeenCalled()\n  })\n\n  test('should not call onOutsideClick when clicking inside the ref element', () => {\n    const mockOnOutsideClick = jest.fn()\n\n    const { result } = renderHook(() =>\n      useOutsideClick({ onOutsideClick: mockOnOutsideClick })\n    )\n\n    const divElement = document.createElement('div')\n    document.body.appendChild(divElement)\n\n    Object.defineProperty(result.current, 'current', {\n      value: divElement,\n      writable: true\n    })\n\n    fireEvent.mouseDown(divElement)\n\n    expect(mockOnOutsideClick).not.toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/hooks/usePasteFromClipboard.js",
    "content": "import { useCallback } from 'react'\n\nimport { useLingui } from '@lingui/react'\n\nimport { useToast } from '../context/ToastContext'\n/**\n * @returns {{\n *   pasteFromClipboard: () => Promise<string|null>\n * }}\n */\n\nexport const usePasteFromClipboard = () => {\n  const { i18n } = useLingui()\n  const { setToast } = useToast()\n\n  const pasteFromClipboard = useCallback(async () => {\n    try {\n      let text = ''\n      if (typeof navigator !== 'undefined' && navigator?.clipboard?.readText) {\n        text = await navigator.clipboard.readText()\n      } else {\n        throw new Error('Clipboard API not available')\n      }\n\n      if (!text?.length) {\n        setToast({\n          message: i18n._('No text found in clipboard')\n        })\n        return null\n      }\n\n      setToast({\n        message: i18n._('Pasted from clipboard!')\n      })\n\n      return text\n    } catch {\n      setToast({\n        message: i18n._('Failed to paste from clipboard')\n      })\n      return null\n    }\n  }, [i18n, setToast])\n\n  return { pasteFromClipboard }\n}\n"
  },
  {
    "path": "src/hooks/usePasteFromClipboard.test.js",
    "content": "import React from 'react'\n\nimport { render, act } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { usePasteFromClipboard } from './usePasteFromClipboard'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({ i18n: { _: (s) => s } })\n}))\n\nconst mockSetToast = jest.fn()\njest.mock('../context/ToastContext', () => ({\n  useToast: () => ({ setToast: mockSetToast })\n}))\n\nlet exposedPaste\nconst HookHost = () => {\n  const { pasteFromClipboard } = usePasteFromClipboard()\n  exposedPaste = pasteFromClipboard\n  return null\n}\n\ndescribe('usePasteFromClipboard', () => {\n  const originalNavigator = global.navigator\n\n  const renderHost = () => {\n    render(<HookHost />)\n  }\n\n  afterEach(() => {\n    mockSetToast.mockReset()\n    // Restore navigator between tests\n    Object.defineProperty(global, 'navigator', {\n      value: originalNavigator,\n      configurable: true\n    })\n  })\n\n  test('returns text and shows success toast when clipboard has text', async () => {\n    const readText = jest.fn().mockResolvedValue('hello world')\n    Object.defineProperty(global, 'navigator', {\n      value: { clipboard: { readText } },\n      configurable: true\n    })\n\n    renderHost()\n    let result\n    await act(async () => {\n      result = await exposedPaste()\n    })\n\n    expect(readText).toHaveBeenCalled()\n    expect(result).toBe('hello world')\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'Pasted from clipboard!'\n    })\n  })\n\n  test('returns null and warns when clipboard text is empty', async () => {\n    const readText = jest.fn().mockResolvedValue('')\n    Object.defineProperty(global, 'navigator', {\n      value: { clipboard: { readText } },\n      configurable: true\n    })\n\n    renderHost()\n    let result\n    await act(async () => {\n      result = await exposedPaste()\n    })\n\n    expect(readText).toHaveBeenCalled()\n    expect(result).toBeNull()\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'No text found in clipboard'\n    })\n  })\n\n  test('returns null and shows failure toast when API unavailable or throws', async () => {\n    // Case: navigator missing clipboard API\n    Object.defineProperty(global, 'navigator', {\n      value: {},\n      configurable: true\n    })\n\n    renderHost()\n    let result\n    await act(async () => {\n      result = await exposedPaste()\n    })\n\n    expect(result).toBeNull()\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'Failed to paste from clipboard'\n    })\n\n    mockSetToast.mockReset()\n\n    // Case: readText throws\n    const readText = jest.fn().mockRejectedValue(new Error('boom'))\n    Object.defineProperty(global, 'navigator', {\n      value: { clipboard: { readText } },\n      configurable: true\n    })\n\n    await act(async () => {\n      result = await exposedPaste()\n    })\n\n    expect(readText).toHaveBeenCalled()\n    expect(result).toBeNull()\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'Failed to paste from clipboard'\n    })\n  })\n})\n"
  },
  {
    "path": "src/hooks/usePearUpdate.js",
    "content": "/** @typedef {import('pear-interface')} */\n\nimport { useEffect, useRef } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { UpdateRequiredModalContent } from '../containers/Modal/UpdateRequiredModalContent'\nimport { UpdateRequiredModalContentV2 } from '../containers/Modal/UpdateRequiredModalContentV2/UpdateRequiredModalContentV2'\nimport { useModal } from '../context/ModalContext'\nimport { isV2 } from '../utils/designVersion'\n\nexport const usePearUpdate = () => {\n  const { setModal } = useModal()\n  const modalShownRef = useRef(false)\n  const electronAPI = window.electronAPI\n\n  const showUpdateRequiredModal = () => {\n    if (modalShownRef.current || !Pear.config.key) return\n\n    setModal(\n      isV2()\n        ? html`<${UpdateRequiredModalContentV2} onUpdate=${handleUpdateApp} />`\n        : html`<${UpdateRequiredModalContent} onUpdate=${handleUpdateApp} />`,\n      { closable: false }\n    )\n\n    modalShownRef.current = true\n  }\n\n  const onPearEvent = (name, listener) => {\n    if (!electronAPI) return () => {}\n\n    if (name === 'updated') {\n      return electronAPI.onRuntimeUpdated(() => listener('updated'))\n    }\n\n    return () => {}\n  }\n\n  useEffect(() => {\n    // DEV: preserve hot-reload behaviour driven by Pear core.\n    const checkUpdated = async () => {\n      const isUpdated = await electronAPI.checkUpdated()\n      if (isUpdated) {\n        showUpdateRequiredModal()\n      }\n    }\n    checkUpdated()\n    if (!Pear.config.key) {\n      const onPearUpdate = () => {\n        Pear.reload()\n      }\n      Pear.updates(onPearUpdate)\n      return () => {\n        Pear.updates(() => {})\n      }\n    }\n\n    const offUpdated = onPearEvent('updated', async () => {\n      showUpdateRequiredModal()\n    })\n\n    return () => {\n      offUpdated?.()\n    }\n  }, [])\n}\n\nasync function handleUpdateApp() {\n  const electronAPI = window.electronAPI\n  if (!electronAPI) return\n  electronAPI.restart()\n}\n"
  },
  {
    "path": "src/hooks/usePearUpdate.test.js",
    "content": "import { act, renderHook, waitFor } from '@testing-library/react'\n\nimport { usePearUpdate } from './usePearUpdate'\nimport { UpdateRequiredModalContent } from '../containers/Modal/UpdateRequiredModalContent'\nimport { UpdateRequiredModalContentV2 } from '../containers/Modal/UpdateRequiredModalContentV2/UpdateRequiredModalContentV2'\nimport { useModal } from '../context/ModalContext'\nimport { isV2 } from '../utils/designVersion'\n\nglobal.Pear = {\n  updates: jest.fn(),\n  restart: jest.fn(),\n  reload: jest.fn(),\n  updated: jest.fn(() => Promise.resolve(false)),\n  config: { tier: 'prod', key: 'some-key' }\n}\n\nwindow.electronAPI = {\n  checkUpdated: jest.fn(() => Promise.resolve(false)),\n  onRuntimeUpdated: jest.fn(() => () => {}),\n  restart: jest.fn()\n}\n\njest.mock('../context/ModalContext', () => ({\n  useModal: jest.fn()\n}))\n\njest.mock('../utils/designVersion', () => ({\n  isV2: jest.fn()\n}))\n\njest.mock(\n  '../containers/Modal/UpdateRequiredModalContentV2/UpdateRequiredModalContentV2',\n  () => ({\n    UpdateRequiredModalContentV2: function UpdateRequiredModalContentV2() {\n      return null\n    }\n  })\n)\n\ndescribe('usePearUpdate', () => {\n  let setModalMock\n\n  beforeEach(() => {\n    setModalMock = jest.fn()\n    useModal.mockReturnValue({ setModal: setModalMock })\n    isV2.mockReturnValue(true)\n    Pear.updates.mockClear()\n    Pear.restart.mockClear()\n    Pear.reload.mockClear()\n    Pear.updated.mockClear()\n    Pear.config.tier = 'prod'\n    Pear.config.key = 'some-key'\n    window.electronAPI.checkUpdated.mockClear()\n    window.electronAPI.onRuntimeUpdated.mockClear()\n    window.electronAPI.restart.mockClear()\n    window.electronAPI.checkUpdated.mockResolvedValue(false)\n  })\n\n  it('subscribes to electron runtime updates in prod mode', () => {\n    renderHook(() => usePearUpdate())\n    expect(window.electronAPI.onRuntimeUpdated).toHaveBeenCalledTimes(1)\n  })\n\n  it('shows modal when checkUpdated resolves with isUpdated true', async () => {\n    window.electronAPI.checkUpdated.mockResolvedValue(true)\n\n    await act(async () => {\n      renderHook(() => usePearUpdate())\n    })\n\n    await waitFor(() => {\n      expect(setModalMock).toHaveBeenCalledTimes(1)\n    })\n    expect(Pear.restart).not.toHaveBeenCalled()\n    expect(Pear.reload).not.toHaveBeenCalled()\n  })\n\n  it('shows modal when onRuntimeUpdated fires (prod)', async () => {\n    window.electronAPI.checkUpdated.mockResolvedValue(true)\n    let updateCallback\n    window.electronAPI.onRuntimeUpdated.mockImplementation((cb) => {\n      updateCallback = cb\n      return () => {}\n    })\n\n    renderHook(() => usePearUpdate())\n\n    await act(async () => {\n      updateCallback()\n    })\n\n    expect(setModalMock).toHaveBeenCalledTimes(1)\n  })\n\n  it('ignores updates in dev mode (no key)', async () => {\n    Pear.config.key = null\n    renderHook(() => usePearUpdate())\n\n    const callback = Pear.updates.mock.calls[0][0]\n    await act(async () => {\n      await callback({ diff: [{ key: '/app/file.js' }] })\n    })\n\n    expect(setModalMock).not.toHaveBeenCalled()\n    expect(Pear.restart).not.toHaveBeenCalled()\n    expect(Pear.reload).toHaveBeenCalled()\n  })\n\n  it('triggers restart when update handler is called', async () => {\n    window.electronAPI.checkUpdated.mockResolvedValue(true)\n\n    await act(async () => {\n      renderHook(() => usePearUpdate())\n    })\n\n    await waitFor(() => {\n      expect(setModalMock).toHaveBeenCalled()\n    })\n    const modalElement = setModalMock.mock.calls[0][0]\n    await act(async () => {\n      modalElement.props.onUpdate()\n    })\n    expect(window.electronAPI.restart).toHaveBeenCalled()\n  })\n\n  it('uses UpdateRequiredModalContentV2 when isV2() is true', async () => {\n    isV2.mockReturnValue(true)\n    window.electronAPI.checkUpdated.mockResolvedValue(true)\n    let updateCallback\n    window.electronAPI.onRuntimeUpdated.mockImplementation((cb) => {\n      updateCallback = cb\n      return () => {}\n    })\n    await act(async () => {\n      renderHook(() => usePearUpdate())\n    })\n    await act(async () => {\n      updateCallback()\n    })\n\n    expect(setModalMock).toHaveBeenCalledTimes(1)\n    const modalElement = setModalMock.mock.calls[0][0]\n    expect(modalElement.type).toBe(UpdateRequiredModalContentV2)\n  })\n\n  it('uses UpdateRequiredModalContent when isV2() is false', async () => {\n    isV2.mockReturnValue(false)\n    window.electronAPI.checkUpdated.mockResolvedValue(true)\n    let updateCallback\n    window.electronAPI.onRuntimeUpdated.mockImplementation((cb) => {\n      updateCallback = cb\n      return () => {}\n    })\n    await act(async () => {\n      renderHook(() => usePearUpdate())\n    })\n    await act(async () => {\n      updateCallback()\n    })\n\n    expect(setModalMock).toHaveBeenCalledTimes(1)\n    const modalElement = setModalMock.mock.calls[0][0]\n    expect(modalElement.type).toBe(UpdateRequiredModalContent)\n  })\n})\n"
  },
  {
    "path": "src/hooks/useRecordActionItems.d.ts",
    "content": "export type RecordActionItem = {\n  name: string\n  type: string\n  click?: () => void\n}\n\nexport function useRecordActionItems(params?: {\n  excludeTypes?: string[]\n  record?: { id?: string; type?: string; isFavorite?: boolean } & Record<\n    string,\n    unknown\n  >\n  recordType?: 'login' | 'otp'\n  onSelect?: () => void\n  onClose?: () => void\n}): {\n  actions: RecordActionItem[]\n}\n"
  },
  {
    "path": "src/hooks/useRecordActionItems.js",
    "content": "import React from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { RECORD_TYPES, useRecords } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { useCreateOrEditRecord } from './useCreateOrEditRecord'\nimport { ConfirmationModalContent } from '../containers/Modal/ConfirmationModalContent'\nimport { DeleteRecordsModalContentV2 } from '../containers/Modal/DeleteRecordsModalContentV2'\nimport { MoveFolderModalContent } from '../containers/Modal/MoveFolderModalContent'\nimport { MoveFolderModalContentV2 } from '../containers/Modal/MoveFolderModalContentV2/MoveFolderModalContentV2'\nimport { useModal } from '../context/ModalContext'\nimport { useRouter } from '../context/RouterContext'\nimport { useToast } from '../context/ToastContext'\nimport { isV2 } from '../utils/designVersion'\n\n/**\n * @param {{\n *  excludeType: Array<string>\n *  record: {\n *    id: string\n *  }\n *  onSelect: () => void\n *  onClose: () => void\n * }}\n *\n * @returns {{\n *  actions: Array<{\n *  name: string,\n *  type: string\n * }>}}\n */\nexport const useRecordActionItems = ({\n  excludeTypes = [],\n  record,\n  recordType,\n  onSelect,\n  onClose\n} = {}) => {\n  const { i18n } = useLingui()\n  const { setModal, closeModal } = useModal()\n  const { data: routerData, navigate, currentPage } = useRouter()\n  const { setToast } = useToast()\n\n  const { deleteRecords, updateRecords, updateFavoriteState } = useRecords()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n\n  const isOtpContext =\n    recordType === RECORD_TYPES.OTP ||\n    routerData?.recordType === RECORD_TYPES.OTP\n  const isAuthenticatorLoginRecord =\n    isOtpContext && record?.type === RECORD_TYPES.LOGIN\n\n  const handleStripOtp = async () => {\n    const { otpInput, otp, ...restData } = record?.data ?? {}\n    const { otpPublic, ...recordWithoutOtp } = record ?? {}\n    const updatedRecord = { ...recordWithoutOtp, data: restData }\n    try {\n      await updateRecords([updatedRecord])\n      if (routerData?.recordId === record?.id) {\n        navigate(currentPage, { ...routerData, recordId: undefined })\n      }\n      closeModal?.()\n    } catch (err) {\n      setToast({\n        message: err?.message ?? i18n._('Failed to remove authenticator code')\n      })\n    }\n  }\n\n  const handleDeleteConfirm = () => {\n    if (routerData?.recordId === record?.id) {\n      navigate(currentPage, { ...routerData, recordId: undefined })\n    }\n\n    deleteRecords([record?.id])\n\n    closeModal?.()\n  }\n\n  const handleDelete = () => {\n    if (isV2()) {\n      setModal(\n        <DeleteRecordsModalContentV2\n          records={[record]}\n          onConfirm={isAuthenticatorLoginRecord ? handleStripOtp : undefined}\n          dialogTitle={\n            isAuthenticatorLoginRecord\n              ? i18n._('Remove Authenticator Code')\n              : undefined\n          }\n          confirmText={\n            isAuthenticatorLoginRecord\n              ? i18n._(\n                  'Are you sure you want to remove the authenticator code from this login record?'\n                )\n              : undefined\n          }\n          submitLabel={\n            isAuthenticatorLoginRecord ? i18n._('Remove') : undefined\n          }\n        />\n      )\n    } else {\n      setModal(\n        <ConfirmationModalContent\n          title={i18n._('Are you sure to delete this item?')}\n          text={i18n._('This is permanent and cannot be undone')}\n          primaryLabel={i18n._('No')}\n          secondaryLabel={i18n._('Yes')}\n          secondaryAction={handleDeleteConfirm}\n          primaryAction={closeModal}\n        />\n      )\n    }\n    onClose?.()\n  }\n\n  const handleFavoriteToggle = () => {\n    updateFavoriteState([record?.id], !record?.isFavorite)\n\n    onClose?.()\n  }\n\n  const handleSelect = () => {\n    onSelect?.(record)\n\n    onClose?.()\n  }\n\n  const handleEdit = () => {\n    handleCreateOrEditRecord({\n      recordType: isOtpContext ? RECORD_TYPES.OTP : record?.type,\n      initialRecord: record\n    })\n\n    onClose?.()\n  }\n\n  const handleMoveClick = () => {\n    const VersionBasedMoveFolderModalContent = isV2()\n      ? MoveFolderModalContentV2\n      : MoveFolderModalContent\n\n    setModal(html`\n      <${VersionBasedMoveFolderModalContent} records=${[record]} />\n    `)\n\n    onClose?.()\n  }\n\n  const v2Actions = [\n    { name: i18n._('Select element'), type: 'select', click: handleSelect },\n    { name: i18n._('Edit'), type: 'edit', click: handleEdit },\n    {\n      name: i18n._(\n        record?.isFavorite ? 'Remove from Favorites' : 'Add to Favorites'\n      ),\n      type: 'favorite',\n      click: handleFavoriteToggle\n    },\n    {\n      name: i18n._('Move to Another Folder'),\n      type: 'move',\n      click: handleMoveClick\n    },\n    { name: i18n._('Delete Item'), type: 'delete', click: handleDelete }\n  ]\n\n  const v1Actions = [\n    { name: i18n._('Select element'), type: 'select', click: handleSelect },\n    {\n      name: i18n._(\n        record?.isFavorite ? 'Remove from Favorites' : 'Mark as favorite'\n      ),\n      type: 'favorite',\n      click: handleFavoriteToggle\n    },\n    {\n      name: i18n._('Move to another folder'),\n      type: 'move',\n      click: handleMoveClick\n    },\n    { name: i18n._('Delete element'), type: 'delete', click: handleDelete }\n  ]\n\n  const defaultActions = isV2() ? v2Actions : v1Actions\n\n  const filteredActions = excludeTypes.length\n    ? defaultActions.filter((action) => !excludeTypes.includes(action.type))\n    : defaultActions\n\n  return { actions: filteredActions }\n}\n"
  },
  {
    "path": "src/hooks/useRecordActionItems.test.js",
    "content": "import { renderHook } from '@testing-library/react'\n\nimport { useRecordActionItems } from './useRecordActionItems'\nimport { useModal } from '../context/ModalContext'\nimport { useRouter } from '../context/RouterContext'\nimport { isV2 } from '../utils/designVersion'\n\nconst mockDeleteRecord = jest.fn()\nconst mockUpdateRecords = jest.fn().mockResolvedValue(undefined)\nconst mockUpdateFavoriteState = jest.fn()\n\njest.mock(\n  '../containers/Modal/MoveFolderModalContentV2/MoveFolderModalContentV2',\n  () => ({\n    MoveFolderModalContentV2: () => null\n  })\n)\n\njest.mock('../containers/Modal/DeleteRecordsModalContentV2', () => ({\n  DeleteRecordsModalContentV2: () => null\n}))\n\njest.mock('../utils/designVersion', () => ({\n  isV2: jest.fn().mockReturnValue(true)\n}))\n\njest.mock(\n  '../containers/Modal/CreateFolderModalContentV2/CreateFolderModalContentV2',\n  () => ({\n    CreateFolderModalContentV2: function MockCreateFolderModalContentV2() {\n      return null\n    }\n  })\n)\n\njest.mock('../context/ModalContext', () => ({\n  useModal: jest.fn()\n}))\n\njest.mock('../context/ToastContext', () => ({\n  useToast: () => ({ setToast: jest.fn() })\n}))\n\njest.mock('../context/RouterContext', () => ({\n  useRouter: jest.fn()\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  RECORD_TYPES: { LOGIN: 'login', OTP: 'otp' },\n  useRecords: () => ({\n    deleteRecords: mockDeleteRecord,\n    updateRecords: mockUpdateRecords,\n    updateFavoriteState: mockUpdateFavoriteState\n  })\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (text) => text\n    }\n  })\n}))\n\njest.mock('./useCreateOrEditRecord', () => ({\n  useCreateOrEditRecord: () => ({\n    handleCreateOrEditRecord: jest.fn()\n  })\n}))\n\ndescribe('useRecordActionItems', () => {\n  const mockRecord = { id: '123', isFavorite: false }\n  const mockOnSelect = jest.fn()\n  const mockOnClose = jest.fn()\n\n  const mockSetModal = jest.fn()\n  const mockCloseModal = jest.fn()\n  const mockNavigate = jest.fn()\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    isV2.mockReturnValue(true)\n\n    useModal.mockReturnValue({\n      setModal: mockSetModal,\n      closeModal: mockCloseModal\n    })\n\n    useRouter.mockReturnValue({\n      data: {},\n      navigate: mockNavigate,\n      currentPage: 'somePage'\n    })\n  })\n\n  test('returns correct actions when no excludeTypes provided', () => {\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        record: mockRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    expect(result.current.actions).toHaveLength(5)\n    expect(result.current.actions[0].type).toBe('select')\n    expect(result.current.actions[1].type).toBe('edit')\n    expect(result.current.actions[2].type).toBe('favorite')\n    expect(result.current.actions[3].type).toBe('move')\n    expect(result.current.actions[4].type).toBe('delete')\n  })\n\n  test('filters actions based on excludeTypes', () => {\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        excludeTypes: ['delete', 'move'],\n        record: mockRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    expect(result.current.actions).toHaveLength(3)\n    expect(result.current.actions[0].type).toBe('select')\n    expect(result.current.actions[1].type).toBe('edit')\n    expect(result.current.actions[2].type).toBe('favorite')\n  })\n\n  test('handles select action', () => {\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        record: mockRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    result.current.actions[0].click()\n    expect(mockOnSelect).toHaveBeenCalledWith(mockRecord)\n    expect(mockOnClose).toHaveBeenCalled()\n  })\n\n  test('handles favorite toggle action', () => {\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        record: mockRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    const favoriteAction = result.current.actions.find(\n      (action) => action.type === 'favorite'\n    )\n    favoriteAction.click()\n    expect(mockUpdateFavoriteState).toHaveBeenCalledWith([mockRecord.id], true)\n    expect(mockOnClose).toHaveBeenCalled()\n  })\n\n  test('handles move action', () => {\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        record: mockRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    const moveAction = result.current.actions.find(\n      (action) => action.type === 'move'\n    )\n    moveAction.click()\n    expect(mockSetModal).toHaveBeenCalled()\n    expect(mockOnClose).toHaveBeenCalled()\n  })\n\n  test('handles delete action', () => {\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        record: mockRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    const deleteAction = result.current.actions.find(\n      (action) => action.type === 'delete'\n    )\n    deleteAction.click()\n    expect(mockSetModal).toHaveBeenCalled()\n    expect(mockOnClose).toHaveBeenCalled()\n  })\n\n  test('handles delete confirmation', () => {\n    isV2.mockReturnValue(false)\n\n    useRouter.mockReturnValue({\n      data: { recordId: '123' },\n      navigate: mockNavigate,\n      currentPage: 'somePage'\n    })\n\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        record: mockRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    const deleteAction = result.current.actions.find(\n      (action) => action.type === 'delete'\n    )\n    deleteAction.click()\n\n    const confirmationAction =\n      mockSetModal.mock.calls[0][0].props.secondaryAction\n\n    confirmationAction()\n\n    expect(mockNavigate).toHaveBeenCalledWith('somePage', {\n      recordId: undefined\n    })\n    expect(mockDeleteRecord).toHaveBeenCalledWith(['123'])\n    expect(mockCloseModal).toHaveBeenCalled()\n  })\n\n  test('strips OTP fields from login record when deleting in authenticator context', async () => {\n    const otpLoginRecord = {\n      id: '123',\n      type: 'login',\n      isFavorite: false,\n      otpPublic: { currentCode: '169462', timeRemaining: 18 },\n      data: {\n        title: 'Test Account',\n        username: 'user@test.com',\n        otpInput: 'JBSWY3DPEHPK3PXP',\n        otp: {\n          secret: 'JBSWY3DPEHPK3PXP',\n          type: 'TOTP',\n          algorithm: 'SHA1',\n          digits: 6,\n          period: 30\n        }\n      }\n    }\n\n    useRouter.mockReturnValue({\n      data: { recordId: '123', recordType: 'otp' },\n      navigate: mockNavigate,\n      currentPage: 'vault'\n    })\n\n    const { result } = renderHook(() =>\n      useRecordActionItems({\n        record: otpLoginRecord,\n        onSelect: mockOnSelect,\n        onClose: mockOnClose\n      })\n    )\n\n    const deleteAction = result.current.actions.find(\n      (action) => action.type === 'delete'\n    )\n    deleteAction.click()\n\n    const onConfirm = mockSetModal.mock.calls[0][0].props.onConfirm\n    expect(onConfirm).toBeDefined()\n    await onConfirm()\n\n    expect(mockUpdateRecords).toHaveBeenCalledTimes(1)\n    const updatedRecord = mockUpdateRecords.mock.calls[0][0][0]\n    expect(updatedRecord.data.otpInput).toBeUndefined()\n    expect(updatedRecord.data.otp).toBeUndefined()\n    expect(updatedRecord.otpPublic).toBeUndefined()\n    expect(updatedRecord.data.title).toBe('Test Account')\n    expect(updatedRecord.data.username).toBe('user@test.com')\n\n    expect(mockDeleteRecord).not.toHaveBeenCalled()\n    expect(mockNavigate).toHaveBeenCalledWith('vault', {\n      recordType: 'otp',\n      recordId: undefined\n    })\n    expect(mockCloseModal).toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/hooks/useRecordMenuItems.js",
    "content": "import { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\n\nimport { useTranslation } from './useTranslation'\nimport { RECORD_COLOR_BY_TYPE } from '../constants/recordColorByType'\nimport { RECORD_ICON_BY_TYPE } from '../constants/recordIconByType'\n\n/**\n * @returns {{\n * categoriesItems: Array<{\n *  name: string,\n *  type: string\n *  }>,\n * defaultItems: Array<{\n *  name: string,\n *  type: string\n *  }>,\n * popupItems: Array<{\n *  name: string,\n *  type: string\n * }>}}\n */\n\nexport const useRecordMenuItems = () => {\n  const { t } = useTranslation()\n  const defaultItems = [\n    {\n      name: t('Login'),\n      type: RECORD_TYPES.LOGIN,\n      icon: RECORD_ICON_BY_TYPE.login,\n      color: RECORD_COLOR_BY_TYPE.login\n    },\n    {\n      name: t('Identity'),\n      type: RECORD_TYPES.IDENTITY,\n      icon: RECORD_ICON_BY_TYPE.identity,\n      color: RECORD_COLOR_BY_TYPE.identity\n    },\n    {\n      name: t('Credit Card'),\n      type: RECORD_TYPES.CREDIT_CARD,\n      icon: RECORD_ICON_BY_TYPE.creditCard,\n      color: RECORD_COLOR_BY_TYPE.creditCard\n    },\n    {\n      name: t('Wi-Fi'),\n      type: RECORD_TYPES.WIFI_PASSWORD,\n      icon: RECORD_ICON_BY_TYPE.wifiPassword,\n      color: RECORD_COLOR_BY_TYPE.wifiPassword\n    },\n    {\n      name: t('Recovery phrase'),\n      type: RECORD_TYPES.PASS_PHRASE,\n      icon: RECORD_ICON_BY_TYPE.passPhrase,\n      color: RECORD_COLOR_BY_TYPE.passPhrase\n    },\n    {\n      name: t('Note'),\n      type: RECORD_TYPES.NOTE,\n      icon: RECORD_ICON_BY_TYPE.note,\n      color: RECORD_COLOR_BY_TYPE.note\n    },\n\n    {\n      name: t('Custom'),\n      type: RECORD_TYPES.CUSTOM,\n      icon: RECORD_ICON_BY_TYPE.custom,\n      color: RECORD_COLOR_BY_TYPE.custom\n    }\n  ]\n\n  const menuItems = [\n    {\n      name: t('All'),\n      type: 'all'\n    },\n    ...defaultItems\n  ]\n\n  const popupItems = [\n    ...defaultItems,\n    {\n      name: t('Password'),\n      type: 'password'\n    }\n  ]\n\n  return { menuItems, popupItems, defaultItems }\n}\n"
  },
  {
    "path": "src/hooks/useRecordMenuItems.test.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { renderHook } from '@testing-library/react'\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\n\nimport { useRecordMenuItems } from './useRecordMenuItems'\nimport { RECORD_COLOR_BY_TYPE } from '../constants/recordColorByType'\nimport { RECORD_ICON_BY_TYPE } from '../constants/recordIconByType'\n\njest.mock('@lingui/react', () => ({\n  useLingui: jest.fn()\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  RECORD_TYPES: {\n    LOGIN: 'login',\n    IDENTITY: 'identity',\n    CREDIT_CARD: 'credit_card',\n    NOTE: 'note',\n    CUSTOM: 'custom',\n    WIFI_PASSWORD: 'wifi_password',\n    PASS_PHRASE: 'pass_phrase'\n  }\n}))\n\ndescribe('useRecordMenuItems', () => {\n  const mockI18n = {\n    _: jest.fn((str) => str)\n  }\n\n  beforeEach(() => {\n    useLingui.mockReturnValue({ i18n: mockI18n })\n  })\n\n  it('should return menu items with correct structure', () => {\n    const { result } = renderHook(() => useRecordMenuItems())\n\n    expect(result.current).toHaveProperty('menuItems')\n    expect(result.current).toHaveProperty('popupItems')\n    expect(result.current).toHaveProperty('defaultItems')\n  })\n\n  it('should have \"All\" as first menuItem', () => {\n    const { result } = renderHook(() => useRecordMenuItems())\n\n    expect(result.current.menuItems[0]).toEqual({\n      name: 'All',\n      type: 'all'\n    })\n  })\n\n  it('should have default items in menuItems after \"All\"', () => {\n    const { result } = renderHook(() => useRecordMenuItems())\n\n    expect(result.current.menuItems[1].type).toBe(RECORD_TYPES.LOGIN)\n    expect(result.current.menuItems[2].type).toBe(RECORD_TYPES.IDENTITY)\n    expect(result.current.menuItems[3].type).toBe(RECORD_TYPES.CREDIT_CARD)\n    expect(result.current.menuItems[4].type).toBe(RECORD_TYPES.WIFI_PASSWORD)\n    expect(result.current.menuItems[5].type).toBe(RECORD_TYPES.PASS_PHRASE)\n    expect(result.current.menuItems[6].type).toBe(RECORD_TYPES.NOTE)\n    expect(result.current.menuItems[7].type).toBe(RECORD_TYPES.CUSTOM)\n  })\n\n  it('should include icons and colors in default items', () => {\n    const { result } = renderHook(() => useRecordMenuItems())\n\n    const loginItem = result.current.defaultItems.find(\n      (item) => item.type === RECORD_TYPES.LOGIN\n    )\n    expect(loginItem.icon).toBe(RECORD_ICON_BY_TYPE.login)\n    expect(loginItem.color).toBe(RECORD_COLOR_BY_TYPE.login)\n  })\n\n  it('should include \"Password\" in popupItems but not in defaultItems', () => {\n    const { result } = renderHook(() => useRecordMenuItems())\n\n    const passwordInPopup = result.current.popupItems.find(\n      (item) => item.type === 'password'\n    )\n    const passwordInDefault = result.current.defaultItems.find(\n      (item) => item.type === 'password'\n    )\n\n    expect(passwordInPopup).toBeTruthy()\n    expect(passwordInPopup.name).toBe('Password')\n    expect(passwordInDefault).toBeFalsy()\n  })\n\n  it('should call i18n._ for all item names', () => {\n    renderHook(() => useRecordMenuItems())\n\n    expect(mockI18n._).toHaveBeenCalledWith('Login')\n    expect(mockI18n._).toHaveBeenCalledWith('Identity')\n    expect(mockI18n._).toHaveBeenCalledWith('Credit Card')\n    expect(mockI18n._).toHaveBeenCalledWith('Wi-Fi')\n    expect(mockI18n._).toHaveBeenCalledWith('Recovery phrase')\n    expect(mockI18n._).toHaveBeenCalledWith('Note')\n    expect(mockI18n._).toHaveBeenCalledWith('Custom')\n    expect(mockI18n._).toHaveBeenCalledWith('All')\n    expect(mockI18n._).toHaveBeenCalledWith('Password')\n  })\n})\n"
  },
  {
    "path": "src/hooks/useRecordMenuItemsV2.test.ts",
    "content": "import { renderHook } from '@testing-library/react'\n\nimport { ALL_ITEMS_TYPE, useRecordMenuItemsV2 } from './useRecordMenuItemsV2'\n\njest.mock('./useTranslation', () => ({\n  useTranslation: () => ({ t: (s: string) => s })\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  RECORD_TYPES: {\n    LOGIN: 'login',\n    IDENTITY: 'identity',\n    CREDIT_CARD: 'credit_card',\n    NOTE: 'note',\n    CUSTOM: 'custom',\n    WIFI_PASSWORD: 'wifi_password',\n    PASS_PHRASE: 'pass_phrase'\n  }\n}))\n\nconst iconStub = () => null\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  AccountCircleFilled: iconStub,\n  AccountCircleOutlined: iconStub,\n  AssignmentInd: iconStub,\n  CreditCard: iconStub,\n  FormatQuote: iconStub,\n  GridView: iconStub,\n  LayerFilled: iconStub,\n  Layers: iconStub,\n  Note: iconStub,\n  WiFi: iconStub\n}))\n\ndescribe('useRecordMenuItemsV2', () => {\n  it('returns categoriesItems and defaultItems', () => {\n    const { result } = renderHook(() => useRecordMenuItemsV2())\n\n    expect(result.current).toHaveProperty('categoriesItems')\n    expect(result.current).toHaveProperty('defaultItems')\n  })\n\n  it('prepends ALL_ITEMS_TYPE (\"All Items\") to categoriesItems', () => {\n    const { result } = renderHook(() => useRecordMenuItemsV2())\n\n    expect(result.current.categoriesItems[0]).toMatchObject({\n      type: ALL_ITEMS_TYPE,\n      label: 'All Items'\n    })\n  })\n\n  it('orders defaultItems to match the Figma sidebar order', () => {\n    const { result } = renderHook(() => useRecordMenuItemsV2())\n\n    expect(result.current.defaultItems.map((i) => i.type)).toEqual([\n      'login',\n      'credit_card',\n      'identity',\n      'note',\n      'pass_phrase',\n      'wifi_password',\n      'custom'\n    ])\n  })\n\n  it('uses pluralized labels', () => {\n    const { result } = renderHook(() => useRecordMenuItemsV2())\n\n    const labels = Object.fromEntries(\n      result.current.defaultItems.map((i) => [i.type, i.label])\n    )\n\n    expect(labels).toMatchObject({\n      login: 'Logins',\n      credit_card: 'Credit Card',\n      identity: 'Identities',\n      note: 'Notes',\n      pass_phrase: 'Recovery Phrases',\n      wifi_password: 'Wi-Fi',\n      custom: 'Other'\n    })\n  })\n\n  it('provides both OutlinedIcon and FilledIcon per item', () => {\n    const { result } = renderHook(() => useRecordMenuItemsV2())\n\n    for (const item of result.current.categoriesItems) {\n      expect(typeof item.OutlinedIcon).toBe('function')\n      expect(typeof item.FilledIcon).toBe('function')\n    }\n  })\n})\n"
  },
  {
    "path": "src/hooks/useRecordMenuItemsV2.ts",
    "content": "import React, { useMemo } from 'react'\n\nimport { RECORD_TYPES } from '@tetherto/pearpass-lib-vault'\nimport {\n  AccountCircleFilled,\n  AccountCircleOutlined,\n  AssignmentInd,\n  CreditCard,\n  FormatQuote,\n  GridView,\n  LayerFilled,\n  Layers,\n  Note,\n  WiFi\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { useTranslation } from './useTranslation'\n\ntype IconComponent = React.ComponentType<React.SVGProps<SVGSVGElement>>\n\nexport type RecordMenuItemV2 = {\n  type: string\n  label: string\n  OutlinedIcon: IconComponent\n  FilledIcon: IconComponent\n}\n\nexport const ALL_ITEMS_TYPE = 'all'\n\nexport const useRecordMenuItemsV2 = () => {\n  const { t } = useTranslation()\n\n  const defaultItems: RecordMenuItemV2[] = useMemo(\n    () => [\n      {\n        type: RECORD_TYPES.LOGIN,\n        label: t('Logins'),\n        OutlinedIcon: AccountCircleOutlined,\n        FilledIcon: AccountCircleFilled\n      },\n      {\n        type: RECORD_TYPES.CREDIT_CARD,\n        label: t('Credit Card'),\n        OutlinedIcon: CreditCard,\n        FilledIcon: CreditCard\n      },\n      {\n        type: RECORD_TYPES.IDENTITY,\n        label: t('Identities'),\n        OutlinedIcon: AssignmentInd,\n        FilledIcon: AssignmentInd\n      },\n      {\n        type: RECORD_TYPES.NOTE,\n        label: t('Notes'),\n        OutlinedIcon: Note,\n        FilledIcon: Note\n      },\n      {\n        type: RECORD_TYPES.PASS_PHRASE,\n        label: t('Recovery Phrases'),\n        OutlinedIcon: FormatQuote,\n        FilledIcon: FormatQuote\n      },\n      {\n        type: RECORD_TYPES.WIFI_PASSWORD,\n        label: t('Wi-Fi'),\n        OutlinedIcon: WiFi,\n        FilledIcon: WiFi\n      },\n      {\n        type: RECORD_TYPES.CUSTOM,\n        label: t('Other'),\n        OutlinedIcon: GridView,\n        FilledIcon: GridView\n      }\n    ],\n    [t]\n  )\n\n  const categoriesItems: RecordMenuItemV2[] = useMemo(\n    () => [\n      {\n        type: ALL_ITEMS_TYPE,\n        label: t('All Items'),\n        OutlinedIcon: Layers,\n        FilledIcon: LayerFilled\n      },\n      ...defaultItems\n    ],\n    [t, defaultItems]\n  )\n\n  return { categoriesItems, defaultItems }\n}\n"
  },
  {
    "path": "src/hooks/useRiveWithRetry.ts",
    "content": "import { useRive } from '@rive-app/react-webgl2'\nimport { UseRiveParameters, UseRiveOptions, RiveState } from '@rive-app/react-webgl2'\nimport { useState, useCallback, useMemo } from 'react'\n\nconst MAX_RETRIES = 20\nconst RETRY_DELAY_MS = 1000\n\ntype UseRiveWithRetryReturn = RiveState & {\n  key: string\n}\n\nexport const useRiveWithRetry = (params: {\n  riveParams: UseRiveParameters\n  riveOptions?: Partial<UseRiveOptions>\n}): UseRiveWithRetryReturn => {\n  const { riveParams, riveOptions } = params\n  const [retryCount, setRetryCount] = useState(0)\n\n  const handleLoadError = useCallback(\n    (_err: unknown): void => {\n\n      if (retryCount < MAX_RETRIES) {\n        setTimeout(() => {\n          setRetryCount((prev) => prev + 1)\n        }, RETRY_DELAY_MS)\n      }\n    },\n    [retryCount]\n  )\n\n  const modifiedParams = useMemo((): UseRiveParameters => {\n    if (!riveParams) return null\n\n    return {\n      ...riveParams,\n      onLoadError: handleLoadError,\n    }\n  }, [riveParams, handleLoadError])\n\n  const riveState = useRive(modifiedParams, riveOptions)\n\n  const key = useMemo((): string => `retry-rive-${retryCount}`, [retryCount])\n\n  return { ...riveState, key }\n}\n"
  },
  {
    "path": "src/hooks/useScrollOverflow.test.js",
    "content": "import { useRef } from 'react'\n\nimport { renderHook, act } from '@testing-library/react'\n\nimport { useScrollOverflow } from './useScrollOverflow'\n\nfunction MockResizeObserver(callback) {\n  this.callback = callback\n  this.observed = new Set()\n  MockResizeObserver.lastInstance = this\n}\nMockResizeObserver.prototype.observe = function (el) {\n  this.observed.add(el)\n}\nMockResizeObserver.prototype.disconnect = function () {\n  this.observed.clear()\n}\nMockResizeObserver.prototype.fire = function () {\n  this.callback([], this)\n}\nMockResizeObserver.lastInstance = null\n\nfunction MockMutationObserver(callback) {\n  this.callback = callback\n  MockMutationObserver.lastInstance = this\n}\nMockMutationObserver.prototype.observe = function () {}\nMockMutationObserver.prototype.disconnect = function () {}\nMockMutationObserver.prototype.fire = function () {\n  this.callback([], this)\n}\nMockMutationObserver.lastInstance = null\n\nconst setRect = (el, rect) => {\n  el.getBoundingClientRect = () => ({\n    top: 0,\n    left: 0,\n    right: 0,\n    width: 0,\n    height: 0,\n    bottom: 0,\n    x: 0,\n    y: 0,\n    toJSON: () => ({}),\n    ...rect\n  })\n}\n\nconst setClientHeight = (el, h) => {\n  Object.defineProperty(el, 'clientHeight', {\n    configurable: true,\n    value: h\n  })\n}\n\nconst buildContainer = ({\n  containerHeight,\n  lastChildBottom,\n  childCount = 1\n}) => {\n  const container = document.createElement('div')\n  setRect(container, {\n    top: 0,\n    bottom: containerHeight,\n    height: containerHeight\n  })\n  setClientHeight(container, containerHeight)\n  container.scrollTop = 0\n  for (let i = 0; i < childCount - 1; i++) {\n    container.appendChild(document.createElement('div'))\n  }\n  const last = document.createElement('div')\n  setRect(last, { top: lastChildBottom - 20, bottom: lastChildBottom })\n  container.appendChild(last)\n  return container\n}\n\ndescribe('useScrollOverflow', () => {\n  const realResizeObserver = global.ResizeObserver\n  const realMutationObserver = global.MutationObserver\n\n  beforeEach(() => {\n    global.ResizeObserver = MockResizeObserver\n    global.MutationObserver = MockMutationObserver\n    MockResizeObserver.lastInstance = null\n    MockMutationObserver.lastInstance = null\n  })\n\n  afterEach(() => {\n    global.ResizeObserver = realResizeObserver\n    global.MutationObserver = realMutationObserver\n  })\n\n  const renderWith = (container, deps = []) =>\n    renderHook(() => {\n      const ref = useRef(container)\n      return useScrollOverflow(ref, deps)\n    })\n\n  it('returns false when the container has no children', () => {\n    const container = document.createElement('div')\n    setClientHeight(container, 100)\n    setRect(container, { bottom: 100, height: 100 })\n    const { result } = renderWith(container)\n    expect(result.current).toBe(false)\n  })\n\n  it('returns false when the last child fits within the container', () => {\n    const container = buildContainer({\n      containerHeight: 220,\n      lastChildBottom: 200\n    })\n    const { result } = renderWith(container)\n    expect(result.current).toBe(false)\n  })\n\n  it('returns true when the last child extends past the container height', () => {\n    const container = buildContainer({\n      containerHeight: 220,\n      lastChildBottom: 400\n    })\n    const { result } = renderWith(container)\n    expect(result.current).toBe(true)\n  })\n\n  it('ignores absolutely-positioned descendants that inflate scrollHeight', () => {\n    // The defining test: emulate what a favorite badge does. scrollHeight is\n    // huge, but the last child (an actual list row) sits within the viewport.\n    const container = buildContainer({\n      containerHeight: 220,\n      lastChildBottom: 180\n    })\n    Object.defineProperty(container, 'scrollHeight', {\n      configurable: true,\n      value: 9999\n    })\n    const { result } = renderWith(container)\n    expect(result.current).toBe(false)\n  })\n\n  it('treats sub-pixel overhang as non-overflow', () => {\n    const container = buildContainer({\n      containerHeight: 220,\n      lastChildBottom: 220.3\n    })\n    const { result } = renderWith(container)\n    expect(result.current).toBe(false)\n  })\n\n  it('re-measures when ResizeObserver fires', () => {\n    const container = buildContainer({\n      containerHeight: 220,\n      lastChildBottom: 200\n    })\n    const { result } = renderWith(container)\n    expect(result.current).toBe(false)\n\n    // Simulate a child resize that pushes the last row past the bottom.\n    const last = container.lastElementChild\n    setRect(last, { top: 280, bottom: 300 })\n\n    act(() => {\n      MockResizeObserver.lastInstance.fire()\n    })\n\n    expect(result.current).toBe(true)\n  })\n\n  it('re-measures when MutationObserver fires (children added)', () => {\n    const container = buildContainer({\n      containerHeight: 220,\n      lastChildBottom: 200\n    })\n    const { result } = renderWith(container)\n    expect(result.current).toBe(false)\n\n    const newLast = document.createElement('div')\n    setRect(newLast, { top: 380, bottom: 400 })\n    container.appendChild(newLast)\n\n    act(() => {\n      MockMutationObserver.lastInstance.fire()\n    })\n\n    expect(result.current).toBe(true)\n  })\n\n  it('disconnects observers on unmount', () => {\n    const container = buildContainer({\n      containerHeight: 220,\n      lastChildBottom: 200\n    })\n    const ro = []\n    const mo = []\n    global.ResizeObserver = function (cb) {\n      MockResizeObserver.call(this, cb)\n      this.disconnected = false\n      ro.push(this)\n    }\n    global.ResizeObserver.prototype = Object.create(\n      MockResizeObserver.prototype\n    )\n    global.ResizeObserver.prototype.disconnect = function () {\n      MockResizeObserver.prototype.disconnect.call(this)\n      this.disconnected = true\n    }\n\n    global.MutationObserver = function (cb) {\n      MockMutationObserver.call(this, cb)\n      this.disconnected = false\n      mo.push(this)\n    }\n    global.MutationObserver.prototype = Object.create(\n      MockMutationObserver.prototype\n    )\n    global.MutationObserver.prototype.disconnect = function () {\n      this.disconnected = true\n    }\n\n    const { unmount } = renderWith(container)\n    unmount()\n\n    expect(ro.every((o) => o.disconnected)).toBe(true)\n    expect(mo.every((o) => o.disconnected)).toBe(true)\n  })\n})\n"
  },
  {
    "path": "src/hooks/useScrollOverflow.ts",
    "content": "import { RefObject, useLayoutEffect, useState } from 'react'\n\nconst SUBPIXEL_TOLERANCE = 0.5\n\nconst measureOverflow = (element: HTMLElement): boolean => {\n  // Use last child's rect, not scrollHeight: absolutely positioned descendants\n  // (e.g. favorite badges) inflate scrollHeight and produce false positives.\n  const last = element.lastElementChild\n  if (!last) return false\n  const elementRect = element.getBoundingClientRect()\n  const lastRect = last.getBoundingClientRect()\n  const lastBottomInContent =\n    lastRect.bottom - elementRect.top + element.scrollTop\n  return lastBottomInContent - element.clientHeight > SUBPIXEL_TOLERANCE\n}\n\nexport const useScrollOverflow = (\n  ref: RefObject<HTMLElement | null>,\n  deps: ReadonlyArray<unknown> = []\n): boolean => {\n  const [hasOverflow, setHasOverflow] = useState(false)\n\n  useLayoutEffect(() => {\n    const element = ref.current\n    if (!element) {\n      setHasOverflow(false)\n      return\n    }\n\n    const check = () => setHasOverflow(measureOverflow(element))\n\n    check()\n\n    const ro = new ResizeObserver(check)\n    ro.observe(element)\n    // Also observe children: container is clamped at maxHeight, so its own\n    // box doesn't resize when children reflow (e.g. favicon load).\n    const observeChildren = () => {\n      for (const child of Array.from(element.children)) {\n        ro.observe(child)\n      }\n    }\n    observeChildren()\n\n    const mo = new MutationObserver(() => {\n      observeChildren()\n      check()\n    })\n    mo.observe(element, { childList: true })\n\n    return () => {\n      ro.disconnect()\n      mo.disconnect()\n    }\n  }, deps)\n\n  return hasOverflow\n}\n"
  },
  {
    "path": "src/hooks/useSimulatedLoading.js",
    "content": "import { useState, useEffect } from 'react'\n\n/**\n * @param {number} duration\n * @returns {boolean}\n */\nexport const useSimulatedLoading = (duration = 2000) => {\n  const [loading, setLoading] = useState(true)\n\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      setLoading(false)\n    }, duration)\n\n    return () => clearTimeout(timer)\n  }, [duration])\n\n  return loading\n}\n"
  },
  {
    "path": "src/hooks/useSimulatedLoading.test.js",
    "content": "import { renderHook, act } from '@testing-library/react'\n\nimport { useSimulatedLoading } from './useSimulatedLoading'\n\ndescribe('useSimulatedLoading', () => {\n  beforeEach(() => {\n    jest.useFakeTimers()\n  })\n\n  afterEach(() => {\n    jest.useRealTimers()\n  })\n\n  it('should initially return true', () => {\n    const { result } = renderHook(() => useSimulatedLoading())\n    expect(result.current).toBe(true)\n  })\n\n  it('should return false after the duration', () => {\n    const { result } = renderHook(() => useSimulatedLoading(1000))\n\n    expect(result.current).toBe(true)\n\n    act(() => {\n      jest.advanceTimersByTime(1000)\n    })\n\n    expect(result.current).toBe(false)\n  })\n\n  it('should use the default duration when not provided', () => {\n    const { result } = renderHook(() => useSimulatedLoading())\n\n    expect(result.current).toBe(true)\n\n    act(() => {\n      jest.advanceTimersByTime(1999)\n    })\n    expect(result.current).toBe(true)\n\n    act(() => {\n      jest.advanceTimersByTime(1)\n    })\n    expect(result.current).toBe(false)\n  })\n\n  it('should clear timeout on unmount', () => {\n    const clearTimeoutSpy = jest.spyOn(global, 'clearTimeout')\n    const { unmount } = renderHook(() => useSimulatedLoading())\n\n    unmount()\n\n    expect(clearTimeoutSpy).toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/hooks/useTranslation.ts",
    "content": "import { useCallback } from 'react'\nimport { useLingui } from '@lingui/react'\n\n/** Values for ICU-style placeholders in messages, e.g. `t('Hello {name}', { name: 'Ada' })` */\nexport type TranslationValues = Record<string, unknown>\n\n/**\n * Custom hook for handling translations using Lingui\n * @returns {Object} Object containing the translation function\n * @returns {Function} t - Translation function: `t(key)` or `t(key, values)` for interpolated messages\n */\nexport const useTranslation = () => {\n  const { i18n } = useLingui()\n\n  const t = useCallback(\n    (key: string, values?: TranslationValues): string => {\n      if (values === undefined) {\n        return i18n._(key)\n      }\n      return i18n._(key, values)\n    },\n    [i18n]\n  )\n\n  return {\n    t\n  }\n}\n"
  },
  {
    "path": "src/hooks/useVaultSwitch.test.tsx",
    "content": "import React from 'react'\n\nimport { act, renderHook } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { type Vault, useVault } from '@tetherto/pearpass-lib-vault'\n\nimport { useVaultSwitch } from './useVaultSwitch'\n\nconst mockSetIsLoading = jest.fn()\nconst mockSetModal = jest.fn()\nconst mockCloseModal = jest.fn()\nconst mockRefetchVault = jest.fn(() => Promise.resolve())\nconst mockIsVaultProtected = jest.fn(() => Promise.resolve(false))\nconst mockLoggerError = jest.fn()\n\nconst vaultA: Vault = { id: 'vault-a', name: 'Alpha' }\nconst vaultB: Vault = { id: 'vault-b', name: 'Bravo' }\n\nconst mockUseVault = jest.mocked(useVault)\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useVault: jest.fn()\n}))\n\njest.mock('../context/LoadingContext', () => ({\n  useLoadingContext: () => ({ setIsLoading: mockSetIsLoading })\n}))\n\njest.mock('../context/ModalContext', () => ({\n  useModal: () => ({\n    setModal: mockSetModal,\n    closeModal: mockCloseModal\n  })\n}))\n\njest.mock('../utils/logger', () => ({\n  logger: {\n    error: (...args: unknown[]) => mockLoggerError(...args)\n  }\n}))\n\njest.mock('../containers/Modal/VaultPasswordFormModalContent', () => ({\n  VaultPasswordFormModalContent: () => null\n}))\n\ndescribe('useVaultSwitch', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n\n    mockIsVaultProtected.mockResolvedValue(false)\n    mockRefetchVault.mockResolvedValue(undefined)\n\n    mockUseVault.mockReturnValue({\n      data: vaultA,\n      isVaultProtected: mockIsVaultProtected,\n      refetch: mockRefetchVault\n    } as unknown as ReturnType<typeof useVault>)\n  })\n\n  it('returns switchVault', () => {\n    const { result } = renderHook(() => useVaultSwitch())\n\n    expect(result.current).toEqual({ switchVault: expect.any(Function) })\n  })\n\n  it('when target is already active, runs onSuccess only (no refetch or password check)', async () => {\n    const onSuccess = jest.fn(async () => {})\n    const { result } = renderHook(() => useVaultSwitch())\n\n    await act(async () => {\n      await result.current.switchVault(vaultA, onSuccess)\n    })\n\n    expect(mockIsVaultProtected).not.toHaveBeenCalled()\n    expect(mockRefetchVault).not.toHaveBeenCalled()\n    expect(mockSetModal).not.toHaveBeenCalled()\n    expect(onSuccess).toHaveBeenCalledTimes(1)\n    expect(mockSetIsLoading).toHaveBeenCalledWith(true)\n    expect(mockSetIsLoading).toHaveBeenCalledWith(false)\n  })\n\n  it('when target is another vault and unprotected, refetches then runs onSuccess', async () => {\n    const onSuccess = jest.fn<() => void | Promise<void>>()\n    const { result } = renderHook(() => useVaultSwitch())\n\n    await act(async () => {\n      await result.current.switchVault(vaultB, onSuccess)\n    })\n\n    expect(mockIsVaultProtected).toHaveBeenCalledWith('vault-b')\n    expect(mockRefetchVault).toHaveBeenCalledWith('vault-b')\n    expect(mockRefetchVault).toHaveBeenCalledTimes(1)\n    expect(onSuccess).toHaveBeenCalledTimes(1)\n    expect(mockSetModal).not.toHaveBeenCalled()\n    expect(mockSetIsLoading).toHaveBeenCalledWith(false)\n  })\n\n  it('when vault is protected, opens password modal instead of refetching immediately', async () => {\n    mockIsVaultProtected.mockResolvedValueOnce(true)\n\n    const onSuccess = jest.fn<() => void | Promise<void>>()\n    const { result } = renderHook(() => useVaultSwitch())\n\n    await act(async () => {\n      await result.current.switchVault(vaultB, onSuccess)\n    })\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n    expect(mockRefetchVault).not.toHaveBeenCalled()\n    expect(onSuccess).not.toHaveBeenCalled()\n\n    const modalEl = mockSetModal.mock.calls[0][0] as React.ReactElement<{\n      vault: Vault\n      onSubmit: (password: string) => Promise<void>\n    }>\n    expect(modalEl.props.vault).toEqual(vaultB)\n    expect(typeof modalEl.props.onSubmit).toBe('function')\n  })\n\n  it('when protected, modal onSubmit refetches with password, closes modal, and runs onSuccess', async () => {\n    mockIsVaultProtected.mockResolvedValueOnce(true)\n\n    const onSuccess = jest.fn<() => void | Promise<void>>()\n    const { result } = renderHook(() => useVaultSwitch())\n\n    await act(async () => {\n      await result.current.switchVault(vaultB, onSuccess)\n    })\n\n    const modalEl = mockSetModal.mock.calls[0][0] as React.ReactElement<{\n      onSubmit: (password: string) => Promise<void>\n    }>\n\n    await act(async () => {\n      await modalEl.props.onSubmit('secret-password')\n    })\n\n    expect(mockRefetchVault).toHaveBeenCalledWith('vault-b', {\n      password: 'secret-password'\n    })\n    expect(mockCloseModal).toHaveBeenCalled()\n    expect(onSuccess).toHaveBeenCalledTimes(1)\n  })\n\n  it('logs and rethrows when refetch fails for an unprotected vault', async () => {\n    const err = new Error('network')\n    mockRefetchVault.mockRejectedValueOnce(err)\n\n    const { result } = renderHook(() => useVaultSwitch())\n\n    let thrown: unknown\n    const noopSuccess = async () => {}\n    await act(async () => {\n      try {\n        await result.current.switchVault(vaultB, noopSuccess)\n      } catch (e) {\n        thrown = e\n      }\n    })\n\n    expect(thrown).toBe(err)\n    expect(mockLoggerError).toHaveBeenCalledWith(\n      'useVaultSwitch',\n      'Error switching to vault:',\n      err\n    )\n  })\n})\n"
  },
  {
    "path": "src/hooks/useVaultSwitch.tsx",
    "content": "import React, { useCallback } from 'react'\n\nimport { useVault, type Vault } from '@tetherto/pearpass-lib-vault'\n\nimport { VaultPasswordFormModalContent } from '../containers/Modal/VaultPasswordFormModalContent'\nimport { useLoadingContext } from '../context/LoadingContext'\nimport { useModal } from '../context/ModalContext'\nimport { logger } from '../utils/logger'\n/**\n * Switch active vault with the same flow everywhere: optional password modal\n * when the vault is protected, then {@link refetch} and an optional success callback.\n */\nexport function useVaultSwitch() {\n  const { setIsLoading } = useLoadingContext()\n  const { setModal, closeModal } = useModal()\n  const {\n    data: activeVault,\n    isVaultProtected,\n    refetch: refetchVault\n  } = useVault()\n\n  const switchVault = useCallback(\n    async (\n      vault: Vault,\n      onSuccess: () => void | Promise<void> = async () => {}\n    ) => {\n      setIsLoading(true)\n\n      try {\n        if (vault.id === activeVault?.id) {\n          await onSuccess()\n          return\n        }\n\n        const isProtected = await isVaultProtected(vault.id)\n\n        if (isProtected) {\n          setModal(\n            <VaultPasswordFormModalContent\n              vault={vault}\n              onSubmit={async (password: string) => {\n                setIsLoading(true)\n                try {\n                  await refetchVault(vault.id, { password })\n                  closeModal()\n                  await onSuccess()\n                } finally {\n                  setIsLoading(false)\n                }\n              }}\n            />\n          )\n          return\n        }\n\n        await refetchVault(vault.id)\n        await onSuccess()\n      } catch (error) {\n        logger.error('useVaultSwitch', 'Error switching to vault:', error)\n        throw error\n      } finally {\n        setIsLoading(false)\n      }\n    },\n    [activeVault?.id, closeModal, isVaultProtected, setIsLoading, setModal]\n  )\n\n  return { switchVault }\n}\n"
  },
  {
    "path": "src/hooks/useWindowResize.js",
    "content": "import { useState, useEffect } from 'react'\n\nimport { useThrottle } from '@tetherto/pear-apps-lib-ui-react-hooks'\n\n/**\n * Hook to get the window size with throttling.\n * @param {number} delay - The throttle delay in milliseconds.\n * @returns {{ width: number, height: number }} - The throttled window size.\n */\nexport const useWindowResize = (interval = 350) => {\n  const [windowSize, setWindowSize] = useState({\n    width: window.innerWidth,\n    height: window.innerHeight\n  })\n\n  const { throttle } = useThrottle({ value: windowSize, interval: interval })\n\n  useEffect(() => {\n    const handleResize = () => {\n      throttle(() => {\n        setWindowSize({\n          width: window.innerWidth,\n          height: window.innerHeight\n        })\n      })\n    }\n\n    window.addEventListener('resize', handleResize)\n\n    return () => {\n      window.removeEventListener('resize', handleResize)\n    }\n  }, [throttle])\n\n  return windowSize\n}\n"
  },
  {
    "path": "src/hooks/useWindowResize.test.js",
    "content": "import { renderHook, act } from '@testing-library/react'\nimport { useThrottle } from '@tetherto/pear-apps-lib-ui-react-hooks'\n\nimport { useWindowResize } from './useWindowResize'\n\njest.mock('@tetherto/pear-apps-lib-ui-react-hooks', () => ({\n  useThrottle: jest.fn()\n}))\n\ndescribe('useWindowResize', () => {\n  const originalInnerWidth = window.innerWidth\n  const originalInnerHeight = window.innerHeight\n\n  const mockThrottle = jest.fn((callback) => callback())\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n\n    useThrottle.mockReturnValue({\n      throttle: mockThrottle,\n      value: { width: window.innerWidth, height: window.innerHeight }\n    })\n\n    Object.defineProperty(window, 'innerWidth', {\n      writable: true,\n      value: originalInnerWidth\n    })\n    Object.defineProperty(window, 'innerHeight', {\n      writable: true,\n      value: originalInnerHeight\n    })\n  })\n\n  afterAll(() => {\n    Object.defineProperty(window, 'innerWidth', {\n      writable: true,\n      value: originalInnerWidth\n    })\n    Object.defineProperty(window, 'innerHeight', {\n      writable: true,\n      value: originalInnerHeight\n    })\n  })\n\n  test('should initialize with current window dimensions', () => {\n    const { result } = renderHook(() => useWindowResize())\n\n    expect(result.current).toEqual({\n      width: window.innerWidth,\n      height: window.innerHeight\n    })\n  })\n\n  test('should update dimensions when window resizes', () => {\n    const { result } = renderHook(() => useWindowResize())\n\n    act(() => {\n      Object.defineProperty(window, 'innerWidth', {\n        writable: true,\n        value: 1024\n      })\n      Object.defineProperty(window, 'innerHeight', {\n        writable: true,\n        value: 768\n      })\n\n      window.dispatchEvent(new Event('resize'))\n    })\n\n    expect(mockThrottle).toHaveBeenCalled()\n    expect(result.current).toEqual({\n      width: 1024,\n      height: 768\n    })\n  })\n\n  test('should use the provided interval for throttling', () => {\n    const customInterval = 500\n    renderHook(() => useWindowResize(customInterval))\n\n    expect(useThrottle).toHaveBeenCalledWith({\n      value: expect.any(Object),\n      interval: customInterval\n    })\n  })\n\n  test('should use default interval of 350ms when not specified', () => {\n    renderHook(() => useWindowResize())\n\n    expect(useThrottle).toHaveBeenCalledWith({\n      value: expect.any(Object),\n      interval: 350\n    })\n  })\n\n  test('should remove event listener on unmount', () => {\n    const removeEventListenerSpy = jest.spyOn(window, 'removeEventListener')\n\n    const { unmount } = renderHook(() => useWindowResize())\n    unmount()\n\n    expect(removeEventListenerSpy).toHaveBeenCalledWith(\n      'resize',\n      expect.any(Function)\n    )\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonCreate/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { ButtonContainer, IconWrapper } from './styles'\n\n/**\n * @param {{\n *    startIcon?: import('react').ElementType,\n *    endIcon?: import('react').ElementType,\n *    children: import('react').ReactNode,\n *    type?: 'button' | 'submit',\n *    onClick: () => void,\n *    testId?: string\n * }} props\n */\nexport const ButtonCreate = ({\n  startIcon,\n  endIcon,\n  children,\n  type = 'button',\n  onClick,\n  testId\n}) => html`\n  <${ButtonContainer}\n    onClick=${() => onClick()}\n    type=${type}\n    data-testid=${testId}\n  >\n    <${IconWrapper}>\n      ${startIcon &&\n      html`<${startIcon} color=${colors.black.mode1} size=\"24\" />`}\n    <//>\n    ${children}\n    <${IconWrapper}>\n      ${endIcon && html`<${endIcon} color=${colors.black.mode1} size=\"24\" />`}\n    <//>\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonCreate/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonCreate } from './index'\nimport { ArrowDownIcon } from '../../icons/ArrowDownIcon'\n\nimport '@testing-library/jest-dom'\n\nconst DummyIcon = ArrowDownIcon\n\ndescribe('ButtonCreate Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonCreate onClick={handleClick}>Click Me</ButtonCreate>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Click Me')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with startIcon and endIcon correctly', () => {\n    const handleClick = jest.fn()\n\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <ButtonCreate\n          onClick={handleClick}\n          startIcon={DummyIcon}\n          endIcon={DummyIcon}\n        >\n          Icon Button\n        </ButtonCreate>\n      </ThemeProvider>\n    )\n\n    expect(getByText('Icon Button')).toBeInTheDocument()\n\n    const icons = container.querySelectorAll('svg')\n\n    expect(icons.length).toBe(2)\n\n    icons.forEach((icon) => {\n      expect(icon.getAttribute('width')).toBe('24')\n      expect(icon.getAttribute('height')).toBe('24')\n    })\n  })\n\n  test('matches snapshot', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonCreate\n          onClick={handleClick}\n          startIcon={DummyIcon}\n          endIcon={DummyIcon}\n        >\n          Snapshot Button\n        </ButtonCreate>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('renders with testId attribute', () => {\n    const handleClick = jest.fn()\n    const { getByTestId } = render(\n      <ThemeProvider>\n        <ButtonCreate onClick={handleClick} testId=\"test-button-id\">\n          Test Button\n        </ButtonCreate>\n      </ThemeProvider>\n    )\n\n    expect(getByTestId('test-button-id')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonCreate/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ButtonContainer = styled.button`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  position: relative;\n  width: 100%;\n  padding: 8px;\n  background: ${({ theme }) => theme.colors.primary300.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-radius: 10px;\n  cursor: pointer;\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 600;\n\n  &:hover {\n    background: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const IconWrapper = styled.div`\n  display: flex;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonFilter/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Button } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  variant?: 'primary' | 'secondary'\n *  startIcon?: import('react').ElementType\n *  isDisabled?: boolean\n *  type?: 'button' | 'submit'\n *  onClick: () => void,\n *  testId?: string\n * }} props\n */\nexport const ButtonFilter = ({\n  children,\n  startIcon,\n  variant = 'primary',\n  type = 'button',\n  isDisabled,\n  onClick,\n  testId\n}) => {\n  const handleClick = isDisabled ? () => {} : onClick\n\n  return html`\n    <${Button}\n      variant=${variant}\n      isDisabled=${isDisabled}\n      type=${type}\n      onClick=${handleClick}\n      data-testid=${testId}\n      aria-disabled=${isDisabled}\n    >\n      ${startIcon && html`<${startIcon} size=\"24\" />`} ${children}\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonFilter/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonFilter } from './index'\nimport { ArrowDownIcon } from '../../icons/ArrowDownIcon'\nimport '@testing-library/jest-dom'\n\nconst DummyIcon = ArrowDownIcon\n\ndescribe('ButtonFilter Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonFilter onClick={handleClick}>Filter Me</ButtonFilter>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Filter Me')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with startIcon correctly for primary variant', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonFilter onClick={handleClick} startIcon={DummyIcon}>\n          Primary Filter\n        </ButtonFilter>\n      </ThemeProvider>\n    )\n\n    const dummyIcon = container.querySelector('svg')\n\n    expect(dummyIcon).toBeInTheDocument()\n    expect(dummyIcon.getAttribute('width')).toBe('24')\n    expect(dummyIcon.getAttribute('height')).toBe('24')\n  })\n\n  test('renders with startIcon correctly for secondary variant', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonFilter\n          onClick={handleClick}\n          startIcon={DummyIcon}\n          variant=\"secondary\"\n        >\n          Secondary Filter\n        </ButtonFilter>\n      </ThemeProvider>\n    )\n\n    const dummyIcon = container.querySelector('svg')\n\n    expect(dummyIcon).toBeInTheDocument()\n    expect(dummyIcon.getAttribute('width')).toBe('24')\n    expect(dummyIcon.getAttribute('height')).toBe('24')\n  })\n\n  test('matches snapshot', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonFilter onClick={handleClick} startIcon={DummyIcon}>\n          Snapshot Filter\n        </ButtonFilter>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('does not call onClick when disabled', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonFilter onClick={handleClick} isDisabled>\n          Disabled Filter\n        </ButtonFilter>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Disabled Filter')\n    fireEvent.click(buttonText)\n    expect(handleClick).not.toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonFilter/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nconst getDisabledGradient = (theme) =>\n  `linear-gradient(0deg, rgba(5, 11, 6, 0.40) 0%, rgba(5, 11, 6, 0.40) 100%), ${theme.colors.secondary200.mode1};`\n\nexport const Button = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isDisabled'].includes(prop)\n})`\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n  cursor: pointer;\n  pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'auto')};\n\n  ${({ variant, theme, isDisabled }) => {\n    if (variant === 'primary') {\n      return css`\n        border-radius: 10px;\n        background: ${isDisabled\n          ? getDisabledGradient(theme)\n          : theme.colors.secondary200.mode1};\n        padding: 4px;\n        color: ${theme.colors.secondary400.mode1};\n\n        & svg path {\n          fill: ${theme.colors.secondary400.mode1};\n        }\n\n        &:hover {\n          background: ${theme.colors.secondary100.mode1};\n        }\n      `\n    }\n\n    if (variant === 'secondary') {\n      return css`\n        border-radius: 10px;\n        background: ${theme.colors.grey500.mode1};\n        padding: 5px 8px;\n        color: ${theme.colors.white.mode1};\n\n        & svg path {\n          fill: ${theme.colors.white.mode1};\n        }\n\n        &:hover {\n          background: ${theme.colors.grey100.mode1};\n          color: ${theme.colors.black.mode1};\n\n          & svg path {\n            fill: ${theme.colors.black.mode1};\n          }\n        }\n      `\n    }\n  }};\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonFolder/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Button } from './styles'\nimport { FolderIcon } from '../../icons/FolderIcon'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  type?: 'button' | 'submit'\n *  onClick: () => void\n * }} props\n */\nexport const ButtonFolder = ({ children, type = 'button', onClick }) => html`\n  <${Button} onClick=${onClick} type=${type}>\n    ${html`<${FolderIcon} size=\"21\" />`} ${children}\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonFolder/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonFolder } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('ButtonFolder Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonFolder onClick={handleClick}>Open Folder</ButtonFolder>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Open Folder')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders FolderIcon with correct size', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonFolder onClick={handleClick}>Open Folder</ButtonFolder>\n      </ThemeProvider>\n    )\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg.getAttribute('width')).toBe('21')\n    expect(svg.getAttribute('height')).toBe('21')\n  })\n\n  test('matches snapshot', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonFolder onClick={handleClick}>Snapshot Folder</ButtonFolder>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonFolder/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Button = styled.div`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 10px;\n  gap: 10px;\n  border-radius: 10px;\n  cursor: pointer;\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 500;\n  background: 'transparent';\n  color: ${({ theme }) => theme.colors.white.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.primary400.mode1};\n\n  & svg path {\n    fill: ${({ theme }) => theme.colors.white.mode1};\n  }\n\n  &:hover {\n    border: 1px solid ${({ theme }) => theme.colors.primary300.mode1};\n    background: ${({ theme }) => theme.colors.primary300.mode1};\n    color: ${({ theme }) => theme.colors.black.mode1};\n\n    & svg path {\n      fill: ${({ theme }) => theme.colors.black.mode1};\n    }\n  }\n\n  &:active {\n    border: 1px solid ${({ theme }) => theme.colors.primary400.mode1};\n    background: ${({ theme }) => theme.colors.primary400.mode1};\n    color: ${({ theme }) => theme.colors.black.mode1};\n\n    & svg path {\n      fill: ${({ theme }) => theme.colors.black.mode1};\n    }\n  }\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonLittle/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Button } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  variant?: 'primary' | 'secondary'\n *  startIcon?: import('react').ElementType\n *  type?: 'button' | 'submit'\n *  onClick: () => void,\n *  testId?: string,\n *  dataId?: string\n * }} props\n */\nexport const ButtonLittle = ({\n  children,\n  startIcon,\n  variant = 'primary',\n  type = 'button',\n  onClick,\n  testId,\n  dataId\n}) => html`\n  <${Button}\n    data-testid=${testId}\n    data-id=${dataId}\n    type=${type}\n    variant=${variant}\n    onClick=${onClick}\n    isIconOnly=${!children}\n  >\n    ${startIcon && html`<${startIcon} size=\"24px\" />`} ${children}\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonLittle/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonLittle } from './index'\nimport { ArrowDownIcon } from '../../icons/ArrowDownIcon'\n\nimport '@testing-library/jest-dom'\n\nconst DummyIcon = ArrowDownIcon\n\ndescribe('ButtonLittle Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonLittle onClick={handleClick}>Little Button</ButtonLittle>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Little Button')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with startIcon correctly', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonLittle onClick={handleClick} startIcon={DummyIcon}>\n          Little Button\n        </ButtonLittle>\n      </ThemeProvider>\n    )\n\n    const dummyIcon = container.querySelector('svg')\n\n    expect(dummyIcon).toBeInTheDocument()\n    expect(dummyIcon.getAttribute('width')).toBe('24px')\n    expect(dummyIcon.getAttribute('height')).toBe('24px')\n  })\n\n  test('renders as icon-only when no children provided', () => {\n    const handleClick = jest.fn()\n    const { queryByText, container } = render(\n      <ThemeProvider>\n        <ButtonLittle onClick={handleClick} startIcon={DummyIcon} />\n      </ThemeProvider>\n    )\n\n    const text = queryByText(/./)\n    expect(text).toBeNull()\n\n    const dummyIcon = container.querySelector('svg')\n\n    expect(dummyIcon).toBeInTheDocument()\n  })\n\n  test('applies type prop correctly', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonLittle onClick={handleClick} type=\"submit\">\n          Submit Button\n        </ButtonLittle>\n      </ThemeProvider>\n    )\n\n    const buttonElement = container.querySelector('button')\n    expect(buttonElement).toBeInTheDocument()\n    expect(buttonElement.getAttribute('type')).toBe('submit')\n  })\n\n  test('matches snapshot', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonLittle onClick={handleClick} startIcon={DummyIcon}>\n          Snapshot Little Button\n        </ButtonLittle>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonLittle/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nexport const Button = styled.button.withConfig({\n  shouldForwardProp: (prop) => !['isIconOnly'].includes(prop)\n})`\n  width: fit-content;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: ${({ isIconOnly }) => (isIconOnly ? '50%' : '10px')};\n  padding: 4px 10px;\n  gap: 5px;\n  cursor: pointer;\n  font-weight: 500;\n  font-family: 'Inter';\n\n  ${({ variant, theme }) => {\n    if (variant === 'primary') {\n      return css`\n        background: ${theme.colors.primary300.mode1};\n        color: ${theme.colors.black.mode1};\n        border: 1px solid ${theme.colors.primary300.mode1};\n\n        & svg path {\n          fill: ${theme.colors.black.mode1};\n        }\n\n        &:hover {\n          border: 1px solid ${theme.colors.primary400.mode1};\n          background: ${theme.colors.primary400.mode1};\n        }\n      `\n    }\n\n    if (variant === 'secondary') {\n      return css`\n        background: ${theme.colors.black.mode1};\n        color: ${theme.colors.primary300.mode1};\n        border: 1px solid ${theme.colors.black.mode1};\n\n        & svg path {\n          fill: ${theme.colors.primary300.mode1};\n        }\n\n        &:hover {\n          border-color: ${theme.colors.primary400.mode1};\n          color: ${theme.colors.primary400.mode1};\n\n          & svg path {\n            fill: ${theme.colors.primary400.mode1};\n          }\n        }\n      `\n    }\n  }};\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonPrimary/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Button } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode,\n *  size?: 'sm' | 'md' | 'lg',\n *  onClick: () => void\n *  type?: 'button' | 'submit'\n *  testId?: string\n *  width?: string\n * }} props\n */\nexport const ButtonPrimary = ({\n  children,\n  size = 'md',\n  onClick,\n  type = 'button',\n  testId = 'button-primary',\n  width\n}) => html`\n  <${Button}\n    size=${size}\n    onClick=${onClick}\n    type=${type}\n    data-testid=${testId}\n    width=${width}\n  >\n    ${children}\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonPrimary/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonPrimary } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('ButtonPrimary Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonPrimary onClick={handleClick}>Primary Button</ButtonPrimary>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Primary Button')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('applies type prop correctly', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonPrimary onClick={handleClick} type=\"submit\">\n          Submit Button\n        </ButtonPrimary>\n      </ThemeProvider>\n    )\n\n    const buttonElement = container.querySelector('button')\n    expect(buttonElement).toBeInTheDocument()\n    expect(buttonElement.getAttribute('type')).toBe('submit')\n  })\n\n  test('matches snapshot with default size (\"md\")', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonPrimary onClick={handleClick}>Snapshot Button</ButtonPrimary>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot with small size (\"sm\")', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonPrimary onClick={handleClick} size=\"sm\">\n          Small Button\n        </ButtonPrimary>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot with large size (\"lg\")', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonPrimary onClick={handleClick} size=\"lg\">\n          Large Button\n        </ButtonPrimary>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonPrimary/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Button = styled.button`\n  ${({ width }) => width && `width: ${width};`}\n  box-sizing: border-box;\n  background: ${({ theme }) => theme.colors.primary400.mode1};\n  color: ${({ theme }) => theme.colors.black.mode1};\n  padding: 10px 15px;\n  border: none;\n  cursor: pointer;\n  border-radius: 10px;\n  font-size: ${({ size }) => {\n    switch (size) {\n      case 'sm':\n        return '12px'\n      case 'lg':\n        return '16px'\n      default:\n        return '14px'\n    }\n  }};\n  font-family: 'Inter';\n  font-weight: 600;\n  line-height: 17px;\n\n  &:hover {\n    background: ${({ theme }) => theme.colors.primary300.mode1};\n  }\n\n  &:active {\n    background: ${({ theme }) => theme.colors.primary500.mode1};\n  }\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonRadio/index.js",
    "content": "import { ButtonRadio } from './styles'\n\nexport { ButtonRadio }\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonRadio/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonRadio } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('ButtonRadio Component', () => {\n  test('handles onClick event', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonRadio onClick={handleClick} />\n      </ThemeProvider>\n    )\n\n    fireEvent.click(container.querySelector('button'))\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders as a button element', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonRadio onClick={() => {}} />\n      </ThemeProvider>\n    )\n\n    expect(container.querySelector('button')).toBeInTheDocument()\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonRadio/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ButtonRadio = styled.button.withConfig({\n  shouldForwardProp: (prop) => !['isActive'].includes(prop)\n})`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 15px;\n  height: 15px;\n  flex-shrink: 0;\n  border-radius: 50%;\n  background: transparent;\n  border: 2px solid\n    ${({ theme, isActive }) =>\n      isActive ? theme.colors.primary400.mode1 : theme.colors.primary300.mode1};\n  padding: 2px;\n  cursor: pointer;\n\n  &:before {\n    content: '';\n    width: 100%;\n    height: 100%;\n    border-radius: 50%;\n    background: ${({ theme }) => theme.colors.primary400.mode1};\n    opacity: ${({ isActive }) => (isActive ? 1 : 0)};\n    transition: opacity 300ms ease-in-out;\n  }\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonRoundIcon/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { Button } from './styles'\n\n/**\n * @param {{\n *  children?: import('react').ReactNode\n *  startIcon: import('react').ElementType\n *  onClick: () => void\n *  iconSize?: string,\n *  testId?: string,\n *  dataId?: string\n * }} props\n */\nexport const ButtonRoundIcon = ({\n  children,\n  startIcon,\n  onClick,\n  iconSize,\n  testId = 'button-round-icon',\n  dataId\n}) => html`\n  <${Button}\n    type=\"button\"\n    onClick=${onClick}\n    data-testid=${testId}\n    data-id=${dataId}\n  >\n    ${startIcon &&\n    html`<${startIcon}\n      color=${colors.primary400.mode1}\n      size=${iconSize || '24'}\n    />`}\n    ${children}\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonRoundIcon/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonRoundIcon } from './index'\nimport { ArrowDownIcon } from '../../icons/ArrowDownIcon'\nimport '@testing-library/jest-dom'\n\nconst DummyIcon = ArrowDownIcon\n\ndescribe('ButtonRoundIcon Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText, getByRole } = render(\n      <ThemeProvider>\n        <ButtonRoundIcon onClick={handleClick}>Round Button</ButtonRoundIcon>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Round Button')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(getByRole('button'))\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with startIcon correctly', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonRoundIcon onClick={handleClick} startIcon={DummyIcon}>\n          Round Button With Icon\n        </ButtonRoundIcon>\n      </ThemeProvider>\n    )\n\n    const icons = container.querySelectorAll('svg')\n    expect(icons.length).toBe(1)\n    icons.forEach((icon) => {\n      expect(icon.getAttribute('width') || icon.getAttribute('size')).toBe('24')\n      expect(icon.getAttribute('height') || icon.getAttribute('size')).toBe(\n        '24'\n      )\n    })\n  })\n\n  test('does not render startIcon if not provided', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonRoundIcon onClick={() => {}}>No Icon</ButtonRoundIcon>\n      </ThemeProvider>\n    )\n    const icons = container.querySelectorAll('svg')\n    expect(icons.length).toBe(0)\n  })\n\n  test('matches snapshot for default rendering', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonRoundIcon onClick={handleClick} startIcon={DummyIcon}>\n          Snapshot Round Button\n        </ButtonRoundIcon>\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('renders correctly when children is a React element', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonRoundIcon onClick={handleClick} startIcon={DummyIcon}>\n          <span>Element Child</span>\n        </ButtonRoundIcon>\n      </ThemeProvider>\n    )\n    expect(getByText('Element Child')).toBeInTheDocument()\n  })\n\n  test('button has type=\"button\"', () => {\n    const { getByRole } = render(\n      <ThemeProvider>\n        <ButtonRoundIcon onClick={() => {}}>Type Button</ButtonRoundIcon>\n      </ThemeProvider>\n    )\n    expect(getByRole('button')).toHaveAttribute('type', 'button')\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonRoundIcon/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Button = styled.button`\n  display: inline-flex;\n  width: 30px;\n  height: 30px;\n  padding: 4px;\n  justify-content: center;\n  align-items: center;\n  border: 1px solid ${({ theme }) => theme.colors.black.mode1};\n  border-radius: 50%;\n  cursor: pointer;\n  background: ${({ theme }) => theme.colors.black.mode1};\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n\n  &:hover {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonSecondary/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Button } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode,\n *  size?: 'sm' | 'md' | 'lg',\n *  onClick: () => void\n *  type?: 'button' | 'submit'\n *  disabled?: boolean\n * }} props\n */\n\nexport const ButtonSecondary = ({\n  children,\n  size = 'md',\n  onClick,\n  type = 'button',\n  disabled = false,\n  testId\n}) => html`\n  <${Button}\n    size=${size}\n    onClick=${onClick}\n    type=${type}\n    disabled=${disabled}\n    data-testid=${testId}\n  >\n    ${children}\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonSecondary/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonSecondary } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('ButtonSecondary Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonSecondary onClick={handleClick}>\n          Secondary Button\n        </ButtonSecondary>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Secondary Button')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('applies type prop correctly', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonSecondary onClick={handleClick} type=\"submit\">\n          Submit Button\n        </ButtonSecondary>\n      </ThemeProvider>\n    )\n\n    const buttonElement = container.querySelector('button')\n    expect(buttonElement).toBeInTheDocument()\n    expect(buttonElement.getAttribute('type')).toBe('submit')\n  })\n\n  test('matches snapshot with default size (\"md\")', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonSecondary onClick={handleClick}>Snapshot Button</ButtonSecondary>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot with small size (\"sm\")', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonSecondary onClick={handleClick} size=\"sm\">\n          Small Button\n        </ButtonSecondary>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot with large size (\"lg\")', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonSecondary onClick={handleClick} size=\"lg\">\n          Large Button\n        </ButtonSecondary>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonSecondary/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Button = styled.button`\n  background: transparent;\n  box-sizing: border-box;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  padding: 10px 15px;\n  border: none;\n  cursor: pointer;\n  border-radius: 10px;\n  border: 1px solid ${({ theme }) => theme.colors.primary400.mode1};\n  font-size: ${({ size }) => {\n    switch (size) {\n      case 'sm':\n        return '12px'\n      case 'lg':\n        return '16px'\n      default:\n        return '14px'\n    }\n  }};\n  font-family: 'Inter';\n  font-weight: 600;\n  line-height: 17px;\n  opacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n  pointer-events: ${({ disabled }) => (disabled ? 'none' : 'auto')};\n\n  &:hover {\n    background: ${({ theme }) => theme.colors.grey400.mode1};\n    box-shadow: 0 0 0 1px ${({ theme }) => theme.colors.primary500.mode1};\n  }\n\n  &:active {\n    background: ${({ theme }) => theme.colors.black.mode1};\n  }\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonSingleInput/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Button } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  startIcon: import('react').ElementType\n *  variant: 'default' | 'bordered',\n *  rounded: 'default' | 'md'\n *  type?: 'button' | 'submit'\n *  onClick: () => void,\n *  testId?: string\n * }} props\n */\nexport const ButtonSingleInput = ({\n  children,\n  startIcon,\n  variant = 'default',\n  rounded = 'default',\n  type = 'button',\n  onClick,\n  testId = 'button-single-input'\n}) => html`\n  <${Button}\n    data-testid=${testId}\n    onClick=${onClick}\n    variant=${variant}\n    rounded=${rounded}\n    type=${type}\n  >\n    ${startIcon && html`<${startIcon} size=\"24\" />`} ${children}\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonSingleInput/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonSingleInput } from './index'\nimport { ArrowDownIcon } from '../../icons/ArrowDownIcon'\n\nimport '@testing-library/jest-dom'\n\nconst DummyIcon = ArrowDownIcon\n\ndescribe('ButtonSingleInput Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonSingleInput onClick={handleClick} startIcon={DummyIcon}>\n          Single Input Button\n        </ButtonSingleInput>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Single Input Button')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders startIcon correctly with size \"20\"', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonSingleInput onClick={handleClick} startIcon={DummyIcon}>\n          Single Input Button\n        </ButtonSingleInput>\n      </ThemeProvider>\n    )\n\n    const dummyIcon = container.querySelector('svg')\n    expect(dummyIcon).toBeInTheDocument()\n    expect(dummyIcon.getAttribute('width')).toBe('24')\n    expect(dummyIcon.getAttribute('height')).toBe('24')\n  })\n\n  test('matches snapshot with default props', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonSingleInput onClick={handleClick} startIcon={DummyIcon}>\n          Snapshot Button\n        </ButtonSingleInput>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot with variant \"bordered\" and rounded \"md\"', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonSingleInput\n          onClick={handleClick}\n          startIcon={DummyIcon}\n          variant=\"bordered\"\n          rounded=\"md\"\n        >\n          Bordered Button\n        </ButtonSingleInput>\n      </ThemeProvider>\n    )\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonSingleInput/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Button = styled.button.withConfig({\n  shouldForwardProp: (prop) => !['variant'].includes(prop)\n})`\n  width: fit-content;\n  display: inline-flex;\n  padding: 5px 10px;\n  border: 1px solid\n    ${({ theme, variant }) =>\n      variant === 'bordered'\n        ? theme.colors.primary400.mode1\n        : theme.colors.black.mode1};\n  align-items: center;\n  gap: 7px;\n  border-radius: 10px;\n  cursor: pointer;\n  background: ${({ theme }) => theme.colors.black.mode1};\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 500;\n\n  & svg path {\n    fill: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n\n  &:hover {\n    border-color: 1px solid ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonThin/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Button } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  startIcon: import('react').ElementType\n *  endIcon: import('react').ElementType\n *  variant: 'black' | 'grey'\n *  type?: 'button' | 'submit'\n *  onClick: () => void,\n *  testId?: string\n * }} props\n */\nexport const ButtonThin = ({\n  children,\n  startIcon,\n  endIcon,\n  variant = 'black',\n  type = 'button',\n  onClick,\n  testId = 'button-thin'\n}) => html`\n  <${Button}\n    data-testid=${testId}\n    variant=${variant}\n    onClick=${onClick}\n    type=${type}\n  >\n    ${startIcon && html`<${startIcon} size=\"24\" />`} ${children}\n    ${endIcon && html`<${endIcon} size=\"24\" />`}\n  <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonThin/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { ButtonThin } from './index'\nimport { ArrowDownIcon } from '../../icons/ArrowDownIcon'\nimport '@testing-library/jest-dom'\n\nconst DummyIcon = ArrowDownIcon\n\ndescribe('ButtonThin Component', () => {\n  test('renders correctly with children and onClick handler', () => {\n    const handleClick = jest.fn()\n    const { getByText } = render(\n      <ThemeProvider>\n        <ButtonThin onClick={handleClick}>Thin Button</ButtonThin>\n      </ThemeProvider>\n    )\n\n    const buttonText = getByText('Thin Button')\n    expect(buttonText).toBeInTheDocument()\n\n    fireEvent.click(buttonText)\n    expect(handleClick).toHaveBeenCalledTimes(1)\n  })\n\n  test('renders with startIcon and endIcon correctly', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonThin\n          onClick={handleClick}\n          startIcon={DummyIcon}\n          endIcon={DummyIcon}\n        >\n          Thin Button With Icons\n        </ButtonThin>\n      </ThemeProvider>\n    )\n\n    const icons = container.querySelectorAll('svg')\n    expect(icons.length).toBe(2)\n    icons.forEach((icon) => {\n      expect(icon.getAttribute('width')).toBe('24')\n      expect(icon.getAttribute('height')).toBe('24')\n    })\n  })\n\n  test('matches snapshot for default variant', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonThin\n          onClick={handleClick}\n          startIcon={DummyIcon}\n          endIcon={DummyIcon}\n        >\n          Snapshot Thin Button\n        </ButtonThin>\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot for grey variant', () => {\n    const handleClick = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <ButtonThin\n          onClick={handleClick}\n          startIcon={DummyIcon}\n          endIcon={DummyIcon}\n          variant=\"grey\"\n        >\n          Grey Thin Button\n        </ButtonThin>\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/ButtonThin/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nexport const Button = styled.div`\n  width: fit-content;\n  height: auto;\n  display: inline-flex;\n  padding: 5px 10px;\n  border: 1px solid transparent;\n  align-items: center;\n  gap: 7px;\n  border-radius: 10px;\n  cursor: pointer;\n\n  ${({ variant, theme }) => {\n    if (variant === 'black') {\n      return css`\n        background: ${theme.colors.black.mode1};\n        color: ${theme.colors.primary300.mode1};\n\n        & svg path {\n          fill: ${theme.colors.primary300.mode1};\n        }\n\n        &:hover {\n          border: 1px solid ${theme.colors.primary400.mode1};\n          color: ${theme.colors.primary400.mode1};\n\n          & svg path {\n            fill: ${theme.colors.primary400.mode1};\n          }\n        }\n      `\n    }\n\n    if (variant === 'grey') {\n      return css`\n        background: ${theme.colors.grey300.mode1};\n        color: ${theme.colors.white.mode1};\n      `\n    }\n  }};\n`\n"
  },
  {
    "path": "src/lib-react-components/components/CompoundField/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { CompoundFieldComponent } from './styles'\n\n/**\n * @param {{\n *  children: import('react').ReactNode\n *  isDisabled?: boolean\n * }} props\n */\n\nexport const CompoundField = ({ children, isDisabled }) => html`\n  <${CompoundFieldComponent} isDisabled=${isDisabled}> ${children} <//>\n`\n"
  },
  {
    "path": "src/lib-react-components/components/CompoundField/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { CompoundField } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('CompoundField Component', () => {\n  test('renders children correctly', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <CompoundField>\n          <div>Compound Field Content</div>\n        </CompoundField>\n      </ThemeProvider>\n    )\n    expect(getByText('Compound Field Content')).toBeInTheDocument()\n  })\n\n  test('matches snapshot when not disabled', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <CompoundField>Compound Field Content</CompoundField>\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot when disabled', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <CompoundField isDisabled>Compound Field Content</CompoundField>\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/CompoundField/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const CompoundFieldComponent = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isDisabled'].includes(prop)\n})`\n  border-radius: 10px;\n  padding: 8px 10px;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.dark};\n  background-color: ${({ theme }) => theme.colors.grey400.dark};\n\n  &:hover {\n    border-color: ${({ theme, isDisabled }) =>\n      isDisabled ? theme.colors.grey100.dark : theme.colors.primary300.mode1};\n  }\n  max-height: 100%;\n  overflow-y: auto;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/HighlightString/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { HighlightedText, NumberSpan, SymbolSpan } from './styles'\n\n/**\n *\n * @param {{\n *  text: string,\n *  testId: string,\n * }} props\n */\nexport const HighlightString = ({ text, testId }) => {\n  const highlightText = (text) => {\n    const regex = /(\\d+|[^a-zA-Z\\d\\s])/g\n    const parts = text.split(regex)\n\n    return parts.map((part, index) => {\n      if (/^\\d+$/.test(part)) {\n        return html`<${NumberSpan} key=${index}>${part}<//>`\n      }\n\n      if (/[^a-zA-Z\\d\\s]/.test(part)) {\n        return html`<${SymbolSpan} key=${index}>${part}<//>`\n      }\n\n      return part\n    })\n  }\n\n  return html`<${HighlightedText} data-testid=${testId}>\n    ${highlightText(text)}\n  <//>`\n}\n"
  },
  {
    "path": "src/lib-react-components/components/HighlightString/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { HighlightString } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('HighlightString Component', () => {\n  test('renders plain text without numbers or symbols', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <HighlightString text=\"Hello world\" />\n      </ThemeProvider>\n    )\n    expect(getByText('Hello world')).toBeInTheDocument()\n  })\n\n  test('renders and highlights numbers and symbols correctly', () => {\n    const { container, getByText } = render(\n      <ThemeProvider>\n        <HighlightString text=\"Hello 123!\" />\n      </ThemeProvider>\n    )\n\n    expect(container).toHaveTextContent('Hello 123!')\n\n    const numberElement = getByText('123')\n    expect(numberElement).toBeInTheDocument()\n\n    const symbolElement = getByText('!')\n    expect(symbolElement).toBeInTheDocument()\n\n    expect(numberElement.tagName.toLowerCase()).toBe('span')\n    expect(symbolElement.tagName.toLowerCase()).toBe('span')\n  })\n\n  test('matches snapshot', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <HighlightString text=\"Test 42, wow!\" />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/HighlightString/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const HighlightedText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  span {\n    white-space: pre-wrap;\n  }\n`\n\nexport const NumberSpan = styled.span`\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  font-weight: bold;\n`\n\nexport const SymbolSpan = styled.span`\n  color: ${({ theme }) => theme.colors.categoryLogin.mode1};\n  font-weight: bold;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/InputField/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { InputField } from './index'\nimport { ArrowDownIcon } from '../../icons/ArrowDownIcon'\nimport '@testing-library/jest-dom'\n\nconst DummyIcon = ArrowDownIcon\n\ndescribe('InputField Component', () => {\n  test('renders label, placeholder, and error message', () => {\n    const { getByText, getByPlaceholderText } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"test value\"\n          label=\"Test Label\"\n          placeholder=\"Enter text\"\n          error=\"Error occurred\"\n        />\n      </ThemeProvider>\n    )\n    expect(getByText('Test Label')).toBeInTheDocument()\n    expect(getByPlaceholderText('Enter text')).toBeInTheDocument()\n    expect(getByText('Error occurred')).toBeInTheDocument()\n  })\n\n  test('calls onChange when input changes if not disabled', () => {\n    const handleChange = jest.fn()\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <InputField value=\"\" placeholder=\"Enter text\" onChange={handleChange} />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Enter text')\n    fireEvent.change(input, { target: { value: 'new value' } })\n    expect(handleChange).toHaveBeenCalledWith('new value')\n  })\n\n  test('does not call onChange when disabled', () => {\n    const handleChange = jest.fn()\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"\"\n          placeholder=\"Enter text\"\n          onChange={handleChange}\n          isDisabled={true}\n        />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Enter text')\n    fireEvent.change(input, { target: { value: 'should not change' } })\n    expect(handleChange).not.toHaveBeenCalled()\n  })\n\n  test('calls onClick when outer element is clicked and focuses input', () => {\n    const handleClick = jest.fn()\n    const { container, getByPlaceholderText } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"click test\"\n          placeholder=\"Enter text\"\n          onClick={handleClick}\n        />\n      </ThemeProvider>\n    )\n    const outerElement = container.firstChild\n    fireEvent.click(outerElement)\n    expect(handleClick).toHaveBeenCalledWith('click test')\n    const input = getByPlaceholderText('Enter text')\n    expect(document.activeElement).toBe(input)\n  })\n\n  test('renders overlay correctly: visible when not focused, hidden when focused', async () => {\n    const overlayText = 'Overlay Content'\n    const { queryByText, getByPlaceholderText } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"overlay test\"\n          placeholder=\"Enter text\"\n          overlay={overlayText}\n        />\n      </ThemeProvider>\n    )\n    expect(queryByText(overlayText)).toBeInTheDocument()\n\n    const input = getByPlaceholderText('Enter text')\n    fireEvent.focus(input)\n    expect(queryByText(overlayText)).not.toBeInTheDocument()\n  })\n\n  test('renders icon if provided', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"icon test\"\n          placeholder=\"Enter text\"\n          icon={DummyIcon}\n        />\n      </ThemeProvider>\n    )\n    const icon = container.querySelector('svg')\n    expect(icon).toBeInTheDocument()\n  })\n\n  test('renders additionalItems if provided', () => {\n    const additionalItemText = 'Additional'\n    const { getByText } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"additional test\"\n          placeholder=\"Enter text\"\n          additionalItems={<div>{additionalItemText}</div>}\n        />\n      </ThemeProvider>\n    )\n    expect(getByText(additionalItemText)).toBeInTheDocument()\n  })\n\n  test('matches snapshot for default variant', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"snapshot test\"\n          placeholder=\"Enter text\"\n          label=\"Label\"\n        />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot for outline variant', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <InputField\n          value=\"outline snapshot\"\n          placeholder=\"Enter text\"\n          label=\"Outline Label\"\n          variant=\"outline\"\n        />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('autoFocus prop focuses input automatically', () => {\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <InputField value=\"autofocus test\" placeholder=\"Enter text\" autoFocus />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Enter text')\n    expect(document.activeElement).toBe(input)\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/InputField/index.tsx",
    "content": "import React, { useRef, useState } from 'react'\n\nimport {\n  MainWrapper,\n  Label,\n  Input,\n  AdditionalItems,\n  IconWrapper,\n  DefaultInputWrapper,\n  OutlineInputWrapper,\n  NoticeWrapper,\n  InputAreaWrapper,\n  InputOverlay,\n  InsideWrapper\n} from './styles'\nimport { NoticeText } from '../NoticeText'\n\ntype InputType = 'text' | 'password' | 'url'\ntype InputVariant = 'default' | 'outline'\n\ninterface Props {\n  value?: string\n  onChange?: (value: string) => void\n  icon?: React.FC<{ size: string }>\n  label?: string\n  error?: string\n  additionalItems?: React.ReactNode\n  belowInputContent?: React.ReactNode\n  placeholder?: string\n  isDisabled?: boolean\n  onClick?: (value: string) => void\n  type?: InputType\n  variant?: InputVariant\n  overlay?: React.ReactNode\n  autoFocus?: boolean\n  testId?: string\n  dataId?: string\n  onPaste?: (e: React.ClipboardEvent<HTMLInputElement>) => void\n}\n\nconst InputField = (props: Props): React.ReactElement => {\n  const {\n    value,\n    onChange,\n    icon: Icon,\n    label,\n    error,\n    additionalItems,\n    belowInputContent,\n    placeholder,\n    isDisabled,\n    onClick,\n    type = 'text',\n    variant = 'default',\n    overlay,\n    autoFocus,\n    testId = 'input-field',\n    dataId,\n    onPaste\n  } = props\n\n  const inputRef = useRef<HTMLInputElement>(null)\n  const [isFocused, setIsFocused] = useState<boolean>(false)\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n    if (isDisabled) {\n      return\n    }\n    onChange?.(e.target.value)\n  }\n\n  const handleClick = (): void => {\n    inputRef.current?.focus()\n    onClick?.(value || '')\n\n    if (!isDisabled) {\n      setIsFocused(true)\n    }\n  }\n\n  const getStyedWrapperByVariant = (): typeof DefaultInputWrapper | typeof OutlineInputWrapper => {\n    if (variant === 'outline') {\n      return OutlineInputWrapper\n    }\n    return DefaultInputWrapper\n  }\n\n  const StyledWrapper = getStyedWrapperByVariant()\n\n  return (\n    <StyledWrapper onClick={handleClick}>\n      <InsideWrapper>\n        {Icon && (\n          <IconWrapper>\n            <Icon size=\"24\" />\n          </IconWrapper>\n        )}\n\n        <MainWrapper>\n          <Label>{label}</Label>\n\n          <InputAreaWrapper>\n            <Input\n              data-testid={testId}\n              data-id={dataId}\n              ref={inputRef}\n              value={value}\n              onChange={handleChange}\n              placeholder={placeholder}\n              readOnly={isDisabled}\n              onFocus={() => setIsFocused(true)}\n              onBlur={() => setIsFocused(false)}\n              type={type}\n              hasOverlay={!!overlay && !isFocused}\n              autoFocus={autoFocus}\n              isDisabled={isDisabled}\n              onPaste={onPaste}\n            />\n\n            {!isFocused && <InputOverlay>{overlay}</InputOverlay>}\n          </InputAreaWrapper>\n\n          {!!error?.length && (\n            <NoticeWrapper>\n              <NoticeText text={error} type=\"error\" />\n            </NoticeWrapper>\n          )}\n        </MainWrapper>\n\n        {!!additionalItems && (\n          <AdditionalItems onMouseDown={(e) => e.stopPropagation()}>\n            {additionalItems}\n          </AdditionalItems>\n        )}\n      </InsideWrapper>\n      {!!belowInputContent && belowInputContent}\n    </StyledWrapper>\n  )\n}\n\nexport { InputField }\n"
  },
  {
    "path": "src/lib-react-components/components/InputField/styles.ts",
    "content": "import styled from 'styled-components'\n\ninterface InputProps {\n    hasOverlay?: boolean\n    isDisabled?: boolean\n    type?: string\n}\n\nexport const InputWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 10px;\n  width: 100%;\n  position: relative;\n`\n\nexport const OutlineInputWrapper = styled(InputWrapper)`\n  border: 1px solid;\n  border-color: ${({ theme }) => theme.colors.grey100.mode1};\n  border-bottom: none;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  margin-top: 0;\n  padding: 8px 10px;\n\n  &:first-child {\n    border-top-left-radius: 10px;\n    border-top-right-radius: 10px;\n  }\n\n  &:last-child {\n    border-bottom-left-radius: 10px;\n    border-bottom-right-radius: 10px;\n    border-bottom: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  }\n\n  &:hover,\n  &:focus-within {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n\n  &:hover + &,\n  &:focus-within + & {\n    border-top-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const DefaultInputWrapper = styled(InputWrapper)`\n  &:not(:first-child) {\n    margin-top: 10px;\n    padding-top: 10px;\n    border-top: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  }\n`\n\nexport const InsideWrapper = styled.div`\n  display: flex;\n  align-items: flex-start;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n  position: relative;\n`\n\nexport const IconWrapper = styled.div`\n  display: flex;\n  flex-shrink: 0;\n  margin-top: 9px;\n`\n\nexport const MainWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n`\n\nexport const Label = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n`\n\nexport const InputAreaWrapper = styled.div`\n  position: relative;\n  margin-top: 5px;\n  overflow-x: auto;\n  white-space: nowrap;\n  display: flex;\n  align-items: center;\n`\n\nconst getInputColor = (params: {\n    theme: { colors: Record<string, Record<string, string>> }\n    type?: string\n    hasOverlay?: boolean\n}): string => {\n    const { theme, type, hasOverlay } = params\n\n    if (hasOverlay) {\n        return 'transparent'\n    }\n\n    if (type === 'url') {\n        return theme.colors.primary400.mode1\n    }\n\n    return theme.colors.white.mode1\n}\n\nexport const Input = styled.input.withConfig({\n    shouldForwardProp: (prop) => !['hasOverlay', 'isDisabled'].includes(prop)\n}) <InputProps>`\n  color: ${({ theme, type, hasOverlay }) =>\n        getInputColor({ theme, type, hasOverlay })};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n  caret-color: ${({ theme, hasOverlay }) =>\n        hasOverlay ? theme.colors.primary400.mode1 : ''};\n  width: 100%;\n  user-select: ${({ isDisabled }) => (isDisabled ? 'none' : 'auto')};\n  cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'text')};\n\n  &::selection {\n    color: ${({ hasOverlay }) => (hasOverlay ? 'transparent' : '')};\n  }\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n  }\n`\n\nexport const InputOverlay = styled.div`\n  position: absolute;\n  top: 0;\n  left: -6px;\n  width: 100%;\n  height: 100%;\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n  z-index: 1;\n  pointer-events: none;\n  display: flex;\n  align-items: center;\n  padding: 8px;\n  white-space: nowrap;\n\n  & span {\n    display: flex;\n    white-space: nowrap;\n  }\n`\n\nexport const NoticeWrapper = styled.div`\n  margin-top: 2px;\n`\n\nexport const AdditionalItems = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  gap: 10px;\n  align-self: center;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/NoticeText/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { NoticeTextComponent, NoticeTextWrapper } from './styles'\nimport { ErrorIcon } from '../../icons/ErrorIcon'\nimport { OkayIcon } from '../../icons/OkayIcon'\nimport { YellowErrorIcon } from '../../icons/YellowErrorIcon'\n\n/**\n * @param {{\n *  text: string\n *  type: 'success' | 'error' | 'warning'\n *  testId?: string\n * }} props\n */\nexport const NoticeText = ({ text, type = 'success', testId }) => {\n  const getIconByType = () => {\n    switch (type) {\n      case 'success':\n        return OkayIcon\n      case 'error':\n        return ErrorIcon\n      case 'warning':\n        return YellowErrorIcon\n      default:\n        return null\n    }\n  }\n\n  return html`\n    <${NoticeTextWrapper}>\n      <${getIconByType()} size=\"10px\" />\n      <${NoticeTextComponent} data-testid=${testId} type=${type}> ${text} <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/NoticeText/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { NoticeText } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('NoticeText Component', () => {\n  test('renders success type correctly', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <NoticeText text=\"Success message\" type=\"success\" />\n      </ThemeProvider>\n    )\n    expect(getByText('Success message')).toBeInTheDocument()\n\n    const svgElement = container.querySelector('svg')\n    expect(svgElement).toBeInTheDocument()\n    expect(svgElement.getAttribute('width')).toBe('10px')\n  })\n\n  test('renders error type correctly', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <NoticeText text=\"Error message\" type=\"error\" />\n      </ThemeProvider>\n    )\n    expect(getByText('Error message')).toBeInTheDocument()\n    const svgElement = container.querySelector('svg')\n    expect(svgElement).toBeInTheDocument()\n    expect(svgElement.getAttribute('width')).toBe('10px')\n  })\n\n  test('renders warning type correctly', () => {\n    const { getByText, container } = render(\n      <ThemeProvider>\n        <NoticeText text=\"Warning message\" type=\"warning\" />\n      </ThemeProvider>\n    )\n    expect(getByText('Warning message')).toBeInTheDocument()\n    const svgElement = container.querySelector('svg')\n    expect(svgElement).toBeInTheDocument()\n    expect(svgElement.getAttribute('width')).toBe('10px')\n  })\n\n  test('matches snapshot for success type', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <NoticeText text=\"Snapshot Success\" type=\"success\" />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/NoticeText/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const NoticeTextWrapper = styled.div`\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  gap: 5px;\n`\n\nexport const NoticeTextComponent = styled.div`\n  color: ${({ theme, type }) => {\n    switch (type) {\n      case 'success':\n        return theme.colors.primary400.mode1\n      case 'error':\n        return theme.colors.errorRed.dark\n      case 'warning':\n        return theme.colors.errorYellow.mode1\n      default:\n        return theme.colors.white.mode1\n    }\n  }};\n  font-family: 'Inter';\n  font-size: 8px;\n  font-weight: 500;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/PasswordField/index.js",
    "content": "import React, { useState } from 'react'\n\nimport {\n  checkPassphraseStrength,\n  checkPasswordStrength\n} from '@tetherto/pearpass-utils-password-check'\nimport { html } from 'htm/react'\n\nimport { PasswordStrongnessWrapper } from './styles'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { ErrorIcon } from '../../icons/ErrorIcon'\nimport { EyeClosedIcon } from '../../icons/EyeClosedIcon'\nimport { EyeIcon } from '../../icons/EyeIcon'\nimport { KeyIcon } from '../../icons/KeyIcon'\nimport { OkayIcon } from '../../icons/OkayIcon'\nimport { YellowErrorIcon } from '../../icons/YellowErrorIcon'\nimport { ButtonRoundIcon } from '../ButtonRoundIcon'\nimport { HighlightString } from '../HighlightString'\nimport { InputField } from '../InputField'\n\nconst PASSWORD_STRENGTH_ICONS = {\n  error: ErrorIcon,\n  warning: YellowErrorIcon,\n  success: OkayIcon\n}\n\n/**\n * @param {{\n *  value: string,\n *  onChange: (value: string) => void,\n *  label: string,\n *  error: string,\n *  passType: 'password' | 'passphrase',\n *  additionalItems: import('react').ReactNode,\n *  belowInputContent: import('react').ReactNode,\n *  placeholder: string,\n *  isDisabled: boolean,\n *  hasStrongness: boolean,\n *  onClick: () => void,\n *  variant?: 'default' | 'outline'\n *  icon: import('react').ReactNode,\n *  testId?: string\n * }} props\n */\nexport const PasswordField = ({\n  value,\n  onChange,\n  label,\n  error,\n  passType = 'password',\n  additionalItems,\n  belowInputContent,\n  placeholder,\n  isDisabled,\n  hasStrongness = false,\n  onClick,\n  variant = 'default',\n  icon,\n  testId = 'password-field'\n}) => {\n  const { t } = useTranslation()\n  const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n\n  const handleChange = (value) => {\n    onChange?.(value)\n  }\n\n  const getPasswordStrongness = () => {\n    if (!value?.length) {\n      return null\n    }\n\n    const { success, type, strengthType, strengthText } =\n      passType === 'password'\n        ? checkPasswordStrength(value)\n        : checkPassphraseStrength(value)\n\n    if (!success) {\n      return null\n    }\n\n    const icon = PASSWORD_STRENGTH_ICONS[strengthType]\n\n    return html`\n      <${PasswordStrongnessWrapper} strength=${type}>\n        <${icon} />\n        ${t(strengthText)}\n      <//>\n    `\n  }\n\n  return html`\n    <${InputField}\n      testId=${testId}\n      label=${label || 'Password'}\n      icon=${icon || KeyIcon}\n      isDisabled=${isDisabled}\n      value=${value}\n      overlay=${isPasswordVisible\n        ? html` <${HighlightString} text=${value} /> `\n        : null}\n      onChange=${handleChange}\n      onClick=${onClick}\n      placeholder=${placeholder}\n      error=${error}\n      variant=${variant}\n      belowInputContent=${belowInputContent}\n      additionalItems=${html`\n        <${React.Fragment}>\n          ${!!hasStrongness && getPasswordStrongness()}\n\n          <${ButtonRoundIcon}\n            testId=\"passwordfield-button-togglevisibility\"\n            startIcon=${isPasswordVisible ? EyeClosedIcon : EyeIcon}\n            onClick=${(e) => {\n              e.stopPropagation()\n              setIsPasswordVisible(!isPasswordVisible)\n            }}\n          />\n\n          ${additionalItems}\n        <//>\n      `}\n      type=${isPasswordVisible ? 'text' : 'password'}\n    />\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/PasswordField/index.test.js",
    "content": "import React from 'react'\n\njest.mock('@lingui/react', () => ({\n  useLingui: jest.fn(() => ({\n    i18n: { _: (key) => key }\n  }))\n}))\n\njest.mock('@tetherto/pearpass-utils-password-check', () => ({\n  checkPasswordStrength: jest.fn(),\n  checkPassphraseStrength: jest.fn(),\n  PASSWORD_STRENGTH: {\n    SAFE: 'safe',\n    VULNERABLE: 'vulnerable',\n    WEAK: 'weak'\n  }\n}))\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { checkPasswordStrength } from '@tetherto/pearpass-utils-password-check'\n\nimport { PasswordField } from './index'\nimport '@testing-library/jest-dom'\n\nconst DummyAdditionalItem = () => (\n  <div data-testid=\"additional-item\">Additional</div>\n)\n\ndescribe('PasswordField Component', () => {\n  const setup = (props) =>\n    render(\n      <ThemeProvider>\n        <PasswordField {...props} />\n      </ThemeProvider>\n    )\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  test('renders label, placeholder, and error message', () => {\n    const { getByText, getByPlaceholderText } = setup({\n      value: 'secret',\n      label: 'Password',\n      error: 'Error occurred',\n      placeholder: 'Enter password',\n      onChange: jest.fn(),\n      onClick: jest.fn(),\n      isDisabled: false\n    })\n\n    expect(getByText('Password')).toBeInTheDocument()\n    expect(getByPlaceholderText('Enter password')).toBeInTheDocument()\n    expect(getByText('Error occurred')).toBeInTheDocument()\n  })\n\n  test('calls onChange when input value changes', () => {\n    const handleChange = jest.fn()\n    const { getByPlaceholderText } = setup({\n      value: '',\n      placeholder: 'Enter password',\n      onChange: handleChange\n    })\n\n    const input = getByPlaceholderText('Enter password')\n    fireEvent.change(input, { target: { value: 'newpass' } })\n    expect(handleChange).toHaveBeenCalledWith('newpass')\n  })\n\n  test('toggles password visibility when toggle button is clicked', () => {\n    const { container, getByPlaceholderText, queryByText } = setup({\n      value: 'secret',\n      placeholder: 'Enter password',\n      onChange: jest.fn()\n    })\n\n    const input = getByPlaceholderText('Enter password')\n    expect(input).toHaveAttribute('type', 'password')\n\n    const toggleButton = container.querySelector('button')\n    expect(toggleButton).toBeInTheDocument()\n\n    fireEvent.click(toggleButton)\n\n    expect(input).toHaveAttribute('type', 'text')\n\n    expect(queryByText('secret')).toBeInTheDocument()\n\n    fireEvent.click(toggleButton)\n    expect(input).toHaveAttribute('type', 'password')\n  })\n\n  test('displays password strongness as \"Strong\" when safe', () => {\n    checkPasswordStrength.mockReturnValue({\n      success: true,\n      type: 'strong',\n      strengthType: 'success',\n      strengthText: 'Strong'\n    })\n\n    const { getByText } = setup({\n      value: 'safePassword',\n      label: 'Password',\n      onChange: jest.fn(),\n      hasStrongness: true,\n      passType: 'password'\n    })\n\n    expect(getByText('Strong')).toBeInTheDocument()\n  })\n\n  test('displays password strongness as \"Weak\" when not safe', () => {\n    checkPasswordStrength.mockReturnValue({\n      success: true,\n      type: 'weak',\n      strengthType: 'error',\n      strengthText: 'Weak'\n    })\n\n    const { getByText } = setup({\n      value: 'weak',\n      label: 'Password',\n      onChange: jest.fn(),\n      hasStrongness: true,\n      passType: 'password'\n    })\n\n    expect(getByText('Weak')).toBeInTheDocument()\n  })\n\n  test('renders additionalItems if provided', () => {\n    const { getByTestId } = setup({\n      value: 'secret',\n      placeholder: 'Enter password',\n      onChange: jest.fn(),\n      additionalItems: <DummyAdditionalItem />\n    })\n\n    expect(getByTestId('additional-item')).toBeInTheDocument()\n  })\n\n  test('matches snapshot for default variant', () => {\n    const { container } = setup({\n      value: 'snapshot test',\n      label: 'Password',\n      placeholder: 'Enter password',\n      onChange: jest.fn(),\n      variant: 'default'\n    })\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot for outline variant', () => {\n    const { container } = setup({\n      value: 'outline snapshot',\n      label: 'Password',\n      placeholder: 'Enter password',\n      onChange: jest.fn(),\n      variant: 'outline'\n    })\n\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/PasswordField/styles.js",
    "content": "import { PASSWORD_STRENGTH } from '@tetherto/pearpass-utils-password-check'\nimport styled from 'styled-components'\n\nexport const PasswordStrongnessWrapper = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isStrong'].includes(prop)\n})`\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  color: ${({ theme, strength }) => {\n    switch (strength) {\n      case PASSWORD_STRENGTH.SAFE:\n        return theme.colors.primary400.mode1\n      case PASSWORD_STRENGTH.VULNERABLE:\n        return theme.colors.errorRed.dark\n      case PASSWORD_STRENGTH.WEAK:\n        return theme.colors.errorYellow.mode1\n      default:\n        return theme.colors.white.mode1\n    }\n  }};\n  font-family: 'Inter';\n  font-size: 8px;\n  font-weight: 500;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassInputField/index.js",
    "content": "import { html } from 'htm/react'\n\nimport {\n  Input,\n  InputAreaWrapper,\n  InputWrapper,\n  MainWrapper,\n  NoticeWrapper\n} from './styles'\nimport { NoticeText } from '../../../lib-react-components'\n\n/**\n * @param {{\n *  value: string,\n *  onChange: (value: string) => void,\n *  placeholder: string,\n *  isDisabled: boolean,\n *  error: string,\n * }} props\n */\nexport const PearPassInputField = ({\n  placeholder,\n  value,\n  onChange,\n  isDisabled,\n  error\n}) => {\n  const handleChange = (e) => {\n    if (isDisabled) {\n      return\n    }\n    onChange?.(e.target.value)\n  }\n\n  return html`\n    <${InputWrapper}>\n      <${MainWrapper}>\n        <${InputAreaWrapper}>\n          <${Input}\n            value=${value}\n            onChange=${handleChange}\n            disabled=${isDisabled}\n            placeholder=${placeholder}\n          />\n        <//>\n        ${!!error?.length &&\n        html` <${NoticeWrapper}>\n          <${NoticeText} text=${error} type=\"error\" />\n        <//>`}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassInputField/index.test.js",
    "content": "import React from 'react'\n\njest.mock('@tetherto/pearpass-utils-password-check', () => ({\n  checkPasswordStrength: jest.fn(),\n  checkPassphraseStrength: jest.fn()\n}))\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport '@testing-library/jest-dom'\nimport { PearPassInputField } from '.'\n\ndescribe('PearPassInputField Component', () => {\n  test('renders placeholder and error message', () => {\n    const { getByPlaceholderText, getByText } = render(\n      <ThemeProvider>\n        <PearPassInputField\n          value=\"test value\"\n          placeholder=\"Enter text\"\n          error=\"Error occurred\"\n        />\n      </ThemeProvider>\n    )\n    expect(getByPlaceholderText('Enter text')).toBeInTheDocument()\n    expect(getByText('Error occurred')).toBeInTheDocument()\n  })\n\n  test('calls onChange when input changes if not disabled', () => {\n    const handleChange = jest.fn()\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <PearPassInputField\n          value=\"\"\n          placeholder=\"Enter text\"\n          onChange={handleChange}\n        />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Enter text')\n    fireEvent.change(input, { target: { value: 'new value' } })\n    expect(handleChange).toHaveBeenCalledWith('new value')\n  })\n\n  test('does not call onChange when disabled', () => {\n    const handleChange = jest.fn()\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <PearPassInputField\n          value=\"\"\n          placeholder=\"Enter text\"\n          onChange={handleChange}\n          isDisabled={true}\n        />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Enter text')\n    fireEvent.change(input, { target: { value: 'should not change' } })\n    expect(handleChange).not.toHaveBeenCalled()\n  })\n\n  test('displays an error message when error prop is provided', () => {\n    const { getByText } = render(\n      <ThemeProvider>\n        <PearPassInputField\n          value=\"test\"\n          placeholder=\"Enter text\"\n          error=\"This field is required\"\n        />\n      </ThemeProvider>\n    )\n    expect(getByText('This field is required')).toBeInTheDocument()\n  })\n\n  test('does not display error message when error prop is empty', () => {\n    const { queryByText } = render(\n      <ThemeProvider>\n        <PearPassInputField value=\"test\" placeholder=\"Enter text\" error=\"\" />\n      </ThemeProvider>\n    )\n    expect(queryByText('This field is required')).not.toBeInTheDocument()\n  })\n\n  test('renders input as disabled when isDisabled is true', () => {\n    const { getByPlaceholderText } = render(\n      <ThemeProvider>\n        <PearPassInputField\n          value=\"test\"\n          placeholder=\"Enter text\"\n          isDisabled={true}\n        />\n      </ThemeProvider>\n    )\n    const input = getByPlaceholderText('Enter text')\n    expect(input).toBeDisabled()\n  })\n\n  test('matches snapshot for default variant', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <PearPassInputField\n          value=\"snapshot test\"\n          placeholder=\"Enter text\"\n          label=\"Label\"\n        />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot for outline variant', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <PearPassInputField\n          value=\"outline snapshot\"\n          placeholder=\"Enter text\"\n          label=\"Outline Label\"\n          variant=\"outline\"\n        />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassInputField/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const InputWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n  position: relative;\n\n  border-radius: 10px;\n  border: 1px solid;\n  border-color: ${({ theme }) => theme.colors.grey100.mode1};\n  margin-top: 0;\n  padding: 10px 10px;\n\n  &:hover,\n  &:focus-within {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const MainWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n`\n\nexport const InputAreaWrapper = styled.div`\n  flex: 1;\n  position: relative;\n  overflow-x: auto;\n  white-space: nowrap;\n  display: flex;\n  align-items: center;\n`\n\nexport const Input = styled.input`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n  pointer-events: ${({ disabled }) => (disabled ? 'none' : 'auto')};\n  width: 100%;\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n  }\n`\n\nexport const NoticeWrapper = styled.div`\n  margin-top: 2px;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassPasswordField/index.js",
    "content": "import { useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport {\n  AdditionalItems,\n  IconWrapper,\n  Input,\n  InputAreaWrapper,\n  InputWrapper,\n  MainWrapper,\n  NoticeWrapper\n} from './styles'\nimport { EyeClosedIcon } from '../../icons/EyeClosedIcon'\nimport { EyeIcon } from '../../icons/EyeIcon'\nimport { LockCircleIcon } from '../../icons/LockCircleIcon'\nimport { ButtonRoundIcon } from '../ButtonRoundIcon'\nimport { NoticeText } from '../NoticeText'\n\n/**\n * @param {{\n *  value: string,\n *  placeholder?: string,\n *  onChange: (value: string) => void,\n *  isDisabled: boolean,\n *  error: string,\n *  testId?: string\n *  errorTestId?: string\n * }} props\n */\nexport const PearPassPasswordField = ({\n  value,\n  placeholder,\n  onChange,\n  isDisabled,\n  error,\n  testId = 'pearpass-password-field'\n}) => {\n  const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n\n  const handleChange = (e) => {\n    if (isDisabled) {\n      return\n    }\n    onChange?.(e.target.value)\n  }\n\n  return html`\n    <${InputWrapper}>\n      <${IconWrapper}> <${LockCircleIcon} size=\"24\" /> <//>\n\n      <${MainWrapper}>\n        <${InputAreaWrapper}>\n          <${Input}\n            data-testid=${testId}\n            placeholder=${placeholder}\n            value=${value}\n            onChange=${handleChange}\n            disabled=${isDisabled}\n            type=${isPasswordVisible ? 'text' : 'password'}\n          />\n        <//>\n        ${!!error?.length &&\n        html` <${NoticeWrapper}>\n          <${NoticeText}\n            text=${error}\n            type=\"error\"\n            testId=${`password-error-${error}`}\n          />\n        <//>`}\n      <//>\n\n      <${AdditionalItems}>\n        <${ButtonRoundIcon}\n          testId=\"password-visibility-button\"\n          startIcon=${isPasswordVisible ? EyeClosedIcon : EyeIcon}\n          onClick=${() => setIsPasswordVisible(!isPasswordVisible)}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassPasswordField/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { PearPassPasswordField } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('PearPassPasswordField Component', () => {\n  test('renders input with type \"password\" initially and displays LockCircleIcon', () => {\n    const { getByDisplayValue, container } = render(\n      <ThemeProvider>\n        <PearPassPasswordField\n          value=\"secret\"\n          onChange={jest.fn()}\n          isDisabled={false}\n          error=\"\"\n        />\n      </ThemeProvider>\n    )\n    const input = getByDisplayValue('secret')\n    expect(input).toBeInTheDocument()\n    expect(input).toHaveAttribute('type', 'password')\n\n    const iconSvg = container.querySelector('svg')\n    expect(iconSvg).toBeInTheDocument()\n    expect(iconSvg.getAttribute('width')).toBe('24')\n  })\n\n  test('calls onChange when input value changes if not disabled', () => {\n    const handleChange = jest.fn()\n    const { getByDisplayValue } = render(\n      <ThemeProvider>\n        <PearPassPasswordField\n          value=\"\"\n          onChange={handleChange}\n          isDisabled={false}\n          error=\"\"\n        />\n      </ThemeProvider>\n    )\n    const input = getByDisplayValue('')\n    fireEvent.change(input, { target: { value: 'newsecret' } })\n    expect(handleChange).toHaveBeenCalledWith('newsecret')\n  })\n\n  test('does not call onChange when disabled', () => {\n    const handleChange = jest.fn()\n    const { getByDisplayValue } = render(\n      <ThemeProvider>\n        <PearPassPasswordField\n          value=\"\"\n          onChange={handleChange}\n          isDisabled={true}\n          error=\"\"\n        />\n      </ThemeProvider>\n    )\n    const input = getByDisplayValue('')\n    fireEvent.change(input, { target: { value: 'newsecret' } })\n    expect(handleChange).not.toHaveBeenCalled()\n  })\n\n  test('toggles password visibility when toggle button is clicked', () => {\n    const { getByDisplayValue, container } = render(\n      <ThemeProvider>\n        <PearPassPasswordField\n          value=\"secret\"\n          onChange={jest.fn()}\n          isDisabled={false}\n          error=\"\"\n        />\n      </ThemeProvider>\n    )\n    const input = getByDisplayValue('secret')\n    expect(input).toHaveAttribute('type', 'password')\n\n    const toggleButton = container.querySelector('button')\n    expect(toggleButton).toBeInTheDocument()\n\n    fireEvent.click(toggleButton)\n    expect(input).toHaveAttribute('type', 'text')\n\n    fireEvent.click(toggleButton)\n    expect(input).toHaveAttribute('type', 'password')\n  })\n\n  test('renders error message when error prop is provided', () => {\n    const errorMessage = 'Error occurred'\n    const { getByText } = render(\n      <ThemeProvider>\n        <PearPassPasswordField\n          value=\"secret\"\n          onChange={jest.fn()}\n          isDisabled={false}\n          error={errorMessage}\n        />\n      </ThemeProvider>\n    )\n    expect(getByText(errorMessage)).toBeInTheDocument()\n  })\n\n  test('matches snapshot', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <PearPassPasswordField\n          value=\"snapshot\"\n          onChange={jest.fn()}\n          isDisabled={false}\n          error=\"\"\n        />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassPasswordField/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const InputWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n  position: relative;\n\n  border-radius: 10px;\n  border: 1px solid;\n  border-color: ${({ theme }) => theme.colors.grey100.mode1};\n  margin-top: 0;\n  padding: 5px 10px;\n\n  &:hover,\n  &:focus-within {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const MainWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n`\n\nexport const IconWrapper = styled.div`\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  align-self: 'stretch';\n`\n\nexport const InputAreaWrapper = styled.div`\n  flex: 1;\n  position: relative;\n  overflow-x: auto;\n  white-space: nowrap;\n  display: flex;\n  align-items: center;\n`\n\nexport const Input = styled.input`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n  pointer-events: ${({ disabled }) => (disabled ? 'none' : 'auto')};\n  width: 100%;\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n  }\n`\n\nexport const NoticeWrapper = styled.div`\n  margin-top: 2px;\n`\n\nexport const AdditionalItems = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  gap: 10px;\n  align-self: center;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassPasswordFieldV2/index.test.ts",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { PearPassPasswordFieldV2 } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('PearPassPasswordFieldV2 Component', () => {\n  const renderWithTheme = (ui: React.ReactElement) =>\n    render(\n      React.createElement(\n        ThemeProvider as React.ComponentType<{ children: React.ReactNode }>,\n        null,\n        ui\n      )\n    )\n\n  test('renders input with type \"password\" initially', () => {\n    const { getByTestId } = renderWithTheme(\n      React.createElement(PearPassPasswordFieldV2, {\n        value: 'secret',\n        placeholder: 'Insert master password',\n        onChange: jest.fn(),\n        isDisabled: false,\n        error: ''\n      })\n    )\n\n    const input = getByTestId('@tetherto/pearpass-password-field-v2') as HTMLInputElement\n    expect(input).toBeInTheDocument()\n    expect(input).toHaveAttribute('type', 'password')\n    expect(input.value).toBe('secret')\n  })\n\n  test('calls onChange when input value changes if not disabled', () => {\n    const handleChange = jest.fn()\n    const { getByTestId } = renderWithTheme(\n      React.createElement(PearPassPasswordFieldV2, {\n        value: '',\n        placeholder: 'Insert master password',\n        onChange: handleChange,\n        isDisabled: false,\n        error: ''\n      })\n    )\n\n    const input = getByTestId('@tetherto/pearpass-password-field-v2')\n    fireEvent.change(input, { target: { value: 'newsecret' } })\n    expect(handleChange).toHaveBeenCalledWith('newsecret')\n  })\n\n  test('does not call onChange when disabled', () => {\n    const handleChange = jest.fn()\n    const { getByTestId } = renderWithTheme(\n      React.createElement(PearPassPasswordFieldV2, {\n        value: '',\n        placeholder: 'Insert master password',\n        onChange: handleChange,\n        isDisabled: true,\n        error: ''\n      })\n    )\n\n    const input = getByTestId('@tetherto/pearpass-password-field-v2')\n    fireEvent.change(input, { target: { value: 'newsecret' } })\n    expect(handleChange).not.toHaveBeenCalled()\n  })\n\n  test('toggles password visibility when toggle control is clicked', () => {\n    const { getByTestId } = renderWithTheme(\n      React.createElement(PearPassPasswordFieldV2, {\n        value: 'secret',\n        placeholder: 'Insert master password',\n        onChange: jest.fn(),\n        isDisabled: false,\n        error: ''\n      })\n    )\n\n    const input = getByTestId('@tetherto/pearpass-password-field-v2')\n    const toggle = getByTestId('@tetherto/pearpass-password-field-v2-toggle')\n\n    expect(input).toHaveAttribute('type', 'password')\n\n    fireEvent.click(toggle)\n    expect(input).toHaveAttribute('type', 'text')\n\n    fireEvent.click(toggle)\n    expect(input).toHaveAttribute('type', 'password')\n  })\n\n  test('renders error message when error prop is provided', () => {\n    const errorMessage = 'Error occurred'\n    const { getByText } = renderWithTheme(\n      React.createElement(PearPassPasswordFieldV2, {\n        value: 'secret',\n        placeholder: 'Insert master password',\n        onChange: jest.fn(),\n        isDisabled: false,\n        error: errorMessage\n      })\n    )\n    expect(getByText(errorMessage)).toBeInTheDocument()\n  })\n\n})\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassPasswordFieldV2/index.tsx",
    "content": "import { useState } from 'react'\n\nimport { html } from 'htm/react'\n\nimport {\n  AdditionalItems,\n  Input,\n  InputAreaWrapper,\n  InputWrapper,\n  MainWrapper,\n  NoticeWrapper\n} from './styles'\nimport { EyeClosedIcon } from '../../icons/EyeClosedIcon'\nimport { EyeIcon } from '../../icons/EyeIcon'\nimport { NoticeText } from '../NoticeText'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { PearPassPasswordFieldV2Props } from './types'\n\nexport const PearPassPasswordFieldV2 = ({\n  value,\n  placeholder,\n  onChange,\n  isDisabled,\n  error,\n  testId = '@tetherto/pearpass-password-field-v2'\n}: PearPassPasswordFieldV2Props) => {\n  const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    if (isDisabled) {\n      return\n    }\n    onChange?.(e.target.value)\n  }\n\n  return html`\n    <${InputWrapper}>\n      <${MainWrapper}>\n        <${InputAreaWrapper}>\n          <${Input}\n            data-testid=${testId}\n            placeholder=${placeholder}\n            value=${value}\n            onChange=${handleChange}\n            disabled=${isDisabled}\n            type=${isPasswordVisible ? 'text' : 'password'}\n          />\n        <//>\n        ${!!error?.length &&\n        html` <${NoticeWrapper}>\n          <${NoticeText}\n            text=${error}\n            type=\"error\"\n            testId=${`password-error-${error}`}\n          />\n        <//>`}\n      <//>\n\n      <${AdditionalItems}>\n        <div\n          data-testid=${`${testId}-toggle`}\n          onClick=${() => setIsPasswordVisible(!isPasswordVisible)}\n        >\n          ${isPasswordVisible\n            ? html`<${EyeClosedIcon} color=${colors.primary400.mode1} />`\n            : html`<${EyeIcon} color=${colors.primary400.mode1} />`}\n        </div>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassPasswordFieldV2/styles.ts",
    "content": "import styled from 'styled-components'\n\nexport const InputWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n  position: relative;\n\n  border-radius: 10px;\n  margin-top: 0;\n  padding: 20px 20px 20px 10px;\n  background-color: ${({ theme }) => theme.colors.grey400.mode1};\n`\n\nexport const MainWrapper = styled.div`\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n`\n\nexport const IconWrapper = styled.div`\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  align-self: 'stretch';\n`\n\nexport const InputAreaWrapper = styled.div`\n  flex: 1;\n  position: relative;\n  overflow-x: auto;\n  white-space: nowrap;\n  display: flex;\n  align-items: center;\n`\n\nexport const Input = styled.input`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 700;\n  pointer-events: ${({ disabled }) => (disabled ? 'none' : 'auto')};\n  width: 100%;\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n  }\n`\n\nexport const NoticeWrapper = styled.div`\n  margin-top: 2px;\n`\n\nexport const AdditionalItems = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  gap: 10px;\n  align-self: center;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/PearPassPasswordFieldV2/types.ts",
    "content": "export type PearPassPasswordFieldV2Props = {\n    value: string\n    placeholder: string\n    onChange: (value: string) => void\n    isDisabled: boolean\n    error: string\n    testId?: string\n  }\n  "
  },
  {
    "path": "src/lib-react-components/components/Slider/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { StyledRange } from './styles'\n\n/**\n * @param {{\n *  value: number,\n *  onChange: (value: number) => void,\n *  testId?: string,\n * }} props\n */\nexport const Slider = ({\n  value,\n  onChange,\n  min = 0,\n  max = 100,\n  step = 1,\n  testId = 'slider'\n}) => {\n  const handleChange = (event) => {\n    const value = event.target.value\n    onChange?.(parseFloat(value))\n  }\n\n  return html`\n    <${StyledRange}\n      value=${value}\n      onChange=${handleChange}\n      min=${min}\n      max=${max}\n      step=${step}\n      data-testid=${testId}\n    />\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/Slider/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { Slider } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('Slider Component', () => {\n  test('renders with correct attributes', () => {\n    const { getByRole } = render(\n      <ThemeProvider>\n        <Slider value={30} onChange={() => {}} min={10} max={50} step={5} />\n      </ThemeProvider>\n    )\n\n    const slider = getByRole('slider')\n    expect(slider).toHaveAttribute('min', '10')\n    expect(slider).toHaveAttribute('max', '50')\n    expect(slider).toHaveAttribute('step', '5')\n    expect(slider.value).toBe('30')\n  })\n\n  test('calls onChange with correct numeric value on change', () => {\n    const handleChange = jest.fn()\n    const { getByRole } = render(\n      <ThemeProvider>\n        <Slider value={20} onChange={handleChange} />\n      </ThemeProvider>\n    )\n    const slider = getByRole('slider')\n    fireEvent.change(slider, { target: { value: '40' } })\n\n    expect(handleChange).toHaveBeenCalledWith(40)\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/Slider/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const StyledRange = styled.input.attrs({ type: 'range' })`\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  cursor: pointer;\n  outline: none;\n  border-radius: 15px;\n  height: 10px;\n  background: ${({ theme, value = 0, max = 0, min = 0 }) => {\n    const maxValue = parseFloat(max)\n    const minValue = parseFloat(min)\n    const progress = ((value - minValue) / (maxValue - minValue)) * 100\n\n    return `linear-gradient(to right, ${theme.colors.primary300.mode1} ${progress}%, ${theme.colors.grey200.mode1} ${progress}%)`\n  }};\n\n  &::-webkit-slider-runnable-track {\n  }\n\n  &::-webkit-slider-thumb {\n    -webkit-appearance: none;\n    appearance: none;\n    height: 15px;\n    width: 15px;\n    background-color: ${({ theme }) => theme.colors.primary400.mode1};\n    border-radius: 50%;\n    border: none;\n    transition: 300ms ease-in-out;\n\n    &:hover {\n      box-shadow: 0 0 0 4px\n        ${({ theme }) => `${theme.colors.primary400.mode1}66`};\n    }\n  }\n\n  &:active::-webkit-slider-thumb {\n    box-shadow: 0 0 0 4px ${({ theme }) => `${theme.colors.primary400.mode1}66`};\n  }\n\n  &:focus::-webkit-slider-thumb {\n    box-shadow: 0 0 0 4px ${({ theme }) => `${theme.colors.primary400.mode1}66`};\n  }\n`\n"
  },
  {
    "path": "src/lib-react-components/components/Switch/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { SwitchBackground, SwitchThumb } from './styles'\n\n/**\n * @param {{\n *  isOn: boolean,\n *  onChange: (isOn: boolean) => void,\n *  testId?: string\n * }} props\n */\nexport const Switch = ({ isOn, onChange, testId = 'switch' }) => {\n  const toggleSwitch = () => {\n    onChange?.(!isOn)\n  }\n\n  return html`\n    <${SwitchBackground}\n      onClick=${toggleSwitch}\n      isOn=${isOn}\n      data-testid=${testId}\n    >\n      <${SwitchThumb} isOn=${isOn} />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/Switch/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { Switch } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('Switch Component', () => {\n  test('toggles switch correctly when clicked', () => {\n    const handleChange = jest.fn()\n    const { container } = render(\n      <ThemeProvider>\n        <Switch isOn={true} onChange={handleChange} />\n      </ThemeProvider>\n    )\n\n    const background = container.firstChild\n    fireEvent.click(background)\n    expect(handleChange).toHaveBeenCalledWith(false)\n  })\n\n  test('matches snapshot when switched on', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <Switch isOn={true} onChange={() => {}} />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot when switched off', () => {\n    const { container } = render(\n      <ThemeProvider>\n        <Switch isOn={false} onChange={() => {}} />\n      </ThemeProvider>\n    )\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/Switch/styles.js",
    "content": "import styled from 'styled-components'\n\nconst TRANSITION_PROPERTIES = '300ms ease-in-out'\n\nexport const SwitchBackground = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isOn'].includes(prop)\n})`\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  width: 30px;\n  height: 16px;\n  background-color: ${({ theme, isOn }) =>\n    isOn ? theme.colors.grey400.mode1 : theme.colors.grey100.mode1};\n  border-radius: 8px;\n  position: relative;\n  transition: background-color ${TRANSITION_PROPERTIES};\n`\n\nexport const SwitchThumb = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isOn'].includes(prop)\n})`\n  width: 16px;\n  height: 16px;\n  background-color: ${({ isOn, theme }) =>\n    isOn ? theme.colors.primary400.mode1 : theme.colors.grey400.mode1};\n  border: 1px solid\n    ${({ theme, isOn }) =>\n      isOn ? theme.colors.primary400.mode1 : theme.colors.grey200.mode1};\n  border-radius: 50%;\n  position: absolute;\n  top: -1px;\n  left: ${({ isOn }) => (isOn ? '14px' : '0')};\n  transition:\n    left ${TRANSITION_PROPERTIES},\n    background-color ${TRANSITION_PROPERTIES};\n`\n"
  },
  {
    "path": "src/lib-react-components/components/TextArea/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { TextArea } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('TextArea Component', () => {\n  const setup = (props) =>\n    render(\n      <ThemeProvider>\n        <TextArea {...props} />\n      </ThemeProvider>\n    )\n\n  test('renders with correct value and placeholder for default variant', () => {\n    const { getByPlaceholderText } = setup({\n      value: 'initial text',\n      placeholder: 'Enter text here',\n      isDisabled: false,\n      onChange: jest.fn(),\n      onClick: jest.fn(),\n      variant: 'default'\n    })\n    const textAreaElement = getByPlaceholderText('Enter text here')\n    expect(textAreaElement).toBeInTheDocument()\n    expect(textAreaElement.value).toBe('initial text')\n  })\n\n  test('renders with correct value and placeholder for report variant', () => {\n    const { getByPlaceholderText } = setup({\n      value: 'report text',\n      placeholder: 'Report text here',\n      isDisabled: false,\n      onChange: jest.fn(),\n      onClick: jest.fn(),\n      variant: 'report'\n    })\n    const textAreaElement = getByPlaceholderText('Report text here')\n    expect(textAreaElement).toBeInTheDocument()\n    expect(textAreaElement.value).toBe('report text')\n  })\n\n  test('calls onChange when input value changes if not disabled', () => {\n    const handleChange = jest.fn()\n    const { getByPlaceholderText } = setup({\n      value: 'initial',\n      placeholder: 'Type here',\n      isDisabled: false,\n      onChange: handleChange,\n      onClick: jest.fn(),\n      variant: 'default'\n    })\n    const textAreaElement = getByPlaceholderText('Type here')\n    fireEvent.change(textAreaElement, { target: { value: 'changed text' } })\n    expect(handleChange).toHaveBeenCalledWith('changed text')\n  })\n\n  test('does not call onChange when disabled', () => {\n    const handleChange = jest.fn()\n    const { getByPlaceholderText } = setup({\n      value: 'initial',\n      placeholder: 'Type here',\n      isDisabled: true,\n      onChange: handleChange,\n      onClick: jest.fn(),\n      variant: 'default'\n    })\n    const textAreaElement = getByPlaceholderText('Type here')\n    fireEvent.change(textAreaElement, { target: { value: 'new text' } })\n    expect(handleChange).not.toHaveBeenCalled()\n  })\n\n  test('calls onClick when clicked if not disabled', () => {\n    const handleClick = jest.fn()\n    const { getByPlaceholderText } = setup({\n      value: 'clickable text',\n      placeholder: 'Click here',\n      isDisabled: false,\n      onChange: jest.fn(),\n      onClick: handleClick,\n      variant: 'default'\n    })\n    const textAreaElement = getByPlaceholderText('Click here')\n    fireEvent.click(textAreaElement)\n    expect(handleClick).toHaveBeenCalledWith('clickable text')\n  })\n\n  test('does not call onClick when disabled', () => {\n    const handleClick = jest.fn()\n    const { getByPlaceholderText } = setup({\n      value: 'non-clickable text',\n      placeholder: 'No click',\n      isDisabled: true,\n      onChange: jest.fn(),\n      onClick: handleClick,\n      variant: 'default'\n    })\n    const textAreaElement = getByPlaceholderText('No click')\n    fireEvent.click(textAreaElement)\n    expect(handleClick).not.toHaveBeenCalled()\n  })\n\n  test('matches snapshot for default variant', () => {\n    const { container } = setup({\n      value: 'snapshot default',\n      placeholder: 'Enter text here',\n      isDisabled: false,\n      onChange: jest.fn(),\n      onClick: jest.fn(),\n      variant: 'default'\n    })\n    expect(container.firstChild).toMatchSnapshot()\n  })\n\n  test('matches snapshot for report variant', () => {\n    const { container } = setup({\n      value: 'snapshot report',\n      placeholder: 'Report here',\n      isDisabled: false,\n      onChange: jest.fn(),\n      onClick: jest.fn(),\n      variant: 'report'\n    })\n    expect(container.firstChild).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/components/TextArea/index.tsx",
    "content": "import React from 'react'\nimport { html } from 'htm/react'\n\nimport {\n  Wrapper,\n  TextAreaWrapper,\n  AdditionalItemsWrapper,\n  TextAreaComponent,\n  ReportTextAreaComponent\n} from './styles'\n\ntype Variant = 'default' | 'report'\n\ninterface Props {\n  value?: string\n  onChange?: (value: string) => void\n  placeholder?: string\n  isDisabled?: boolean\n  onClick?: (value: string) => void\n  variant?: Variant\n  testId?: string\n  dataId?: string\n  additionalItems?: React.ReactNode\n}\n\nexport const TextArea = ({\n  value = '',\n  onChange,\n  placeholder,\n  isDisabled = false,\n  onClick,\n  variant = 'default',\n  testId = 'text-area',\n  dataId,\n  additionalItems\n}: Props) => {\n  const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n    if (isDisabled) {\n      return\n    }\n    onChange?.(e.target.value)\n  }\n\n  const handleClick = () => {\n    if (isDisabled) {\n      return\n    }\n    onClick?.(value)\n  }\n\n  const TextAreaEl = variant === 'report' ? ReportTextAreaComponent : TextAreaComponent\n\n  return html`\n    <${Wrapper} data-id=${dataId} onClick=${handleClick}>\n      <${TextAreaWrapper}>\n        <${TextAreaEl}\n          data-testid=${testId}\n          value=${value}\n          onChange=${handleChange}\n          placeholder=${placeholder}\n          readOnly=${isDisabled}\n          isDisabled=${isDisabled}\n          hasAdditionalItems=${!!additionalItems}\n        />\n        ${!!additionalItems && html`\n          <${AdditionalItemsWrapper} onMouseDown=${(e: React.MouseEvent) => e.stopPropagation()}>\n            ${additionalItems}\n          </${AdditionalItemsWrapper}>\n        `}\n      </${TextAreaWrapper}>\n    </${Wrapper}>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/components/TextArea/styles.ts",
    "content": "import styled, { css } from 'styled-components'\n\ninterface TextAreaStyledProps {\n  isDisabled?: boolean\n  hasAdditionalItems?: boolean\n}\n\nconst textareaBaseStyles = css<TextAreaStyledProps>`\n  width: 100%;\n  pointer-events: auto;\n  cursor: ${({ isDisabled }) => (isDisabled ? 'pointer' : 'text')};\n  user-select: ${({ isDisabled }) => (isDisabled ? 'none' : 'text')};\n  font-family: 'Inter';\n  font-weight: 700;\n  resize: none;\n  outline: none;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  color: ${({ theme }) => theme.colors.white.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-radius: 10px;\n  padding: 8px 10px;\n  padding-right: ${({ hasAdditionalItems }) => (hasAdditionalItems ? '40px' : '10px')};\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n  }\n\n  &::selection {\n    background: ${({ theme }) => theme.colors.primary400.mode1};\n    color: ${({ theme }) => theme.colors.white.mode1};\n  }\n\n  &:focus {\n    outline: none;\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const TextAreaComponent = styled.textarea.withConfig({\n  shouldForwardProp: (prop: string) => !['isDisabled', 'hasAdditionalItems'].includes(prop)\n}) <TextAreaStyledProps>`\n  ${textareaBaseStyles}\n  height: 233px;\n  font-size: 16px;\n`\n\nexport const ReportTextAreaComponent = styled.textarea.withConfig({\n  shouldForwardProp: (prop: string) => !['isDisabled', 'hasAdditionalItems'].includes(prop)\n}) <TextAreaStyledProps>`\n  ${textareaBaseStyles}\n  height: 70px;\n  padding: 11px 12px;\n  padding-right: ${({ hasAdditionalItems }) => (hasAdditionalItems ? '50px' : '12px')};\n  font-size: 12px;\n  font-weight: 600;\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey300.mode1};\n  }\n`\n\nexport const Wrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n`\n\nexport const TextAreaWrapper = styled.div`\n  flex: 1;\n  position: relative;\n  display: flex;\n`\n\nexport const AdditionalItemsWrapper = styled.div`\n  position: absolute;\n  top: 8px;\n  right: 10px;\n  display: flex;\n  justify-content: flex-end;\n  align-items: flex-start;\n  gap: 10px;\n  flex-shrink: 0;\n  z-index: 2;\n  pointer-events: auto;\n`\n"
  },
  {
    "path": "src/lib-react-components/components/TooltipWrapper/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { Wrapper } from './styles'\n\nexport const TooltipWrapper = ({ children }) =>\n  html`<${Wrapper}>${children}<//>`\n"
  },
  {
    "path": "src/lib-react-components/components/TooltipWrapper/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  display: flex;\n  width: max-content;\n  flex-direction: column;\n  border-radius: 10px;\n  padding: 10px;\n  background-color: ${({ theme }) => theme.colors.grey500.mode1};\n  box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\n`\n"
  },
  {
    "path": "src/lib-react-components/icons/AboutIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const AboutIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M11.5 16.5H12.5V11H11.5V16.5ZM12 9.577C12.1743 9.577 12.3205 9.518 12.4385 9.4C12.5565 9.282 12.6155 9.13583 12.6155 8.9615C12.6155 8.78717 12.5565 8.641 12.4385 8.523C12.3205 8.40517 12.1743 8.34625 12 8.34625C11.8257 8.34625 11.6795 8.40517 11.5615 8.523C11.4435 8.641 11.3845 8.78717 11.3845 8.9615C11.3845 9.13583 11.4435 9.282 11.5615 9.4C11.6795 9.518 11.8257 9.577 12 9.577ZM12.0033 21C10.7587 21 9.58867 20.7638 8.493 20.2915C7.3975 19.8192 6.4445 19.1782 5.634 18.3685C4.8235 17.5588 4.18192 16.6067 3.70925 15.512C3.23642 14.4175 3 13.2479 3 12.0033C3 10.7587 3.23617 9.58867 3.7085 8.493C4.18083 7.3975 4.82183 6.4445 5.6315 5.634C6.44117 4.8235 7.39333 4.18192 8.488 3.70925C9.5825 3.23642 10.7521 3 11.9967 3C13.2413 3 14.4113 3.23617 15.507 3.7085C16.6025 4.18083 17.5555 4.82183 18.366 5.6315C19.1765 6.44117 19.8181 7.39333 20.2908 8.488C20.7636 9.5825 21 10.7521 21 11.9967C21 13.2413 20.7638 14.4113 20.2915 15.507C19.8192 16.6025 19.1782 17.5555 18.3685 18.366C17.5588 19.1765 16.6067 19.8181 15.512 20.2908C14.4175 20.7636 13.2479 21 12.0033 21ZM12 20C14.2333 20 16.125 19.225 17.675 17.675C19.225 16.125 20 14.2333 20 12C20 9.76667 19.225 7.875 17.675 6.325C16.125 4.775 14.2333 4 12 4C9.76667 4 7.875 4.775 6.325 6.325C4.775 7.875 4 9.76667 4 12C4 14.2333 4.775 16.125 6.325 17.675C7.875 19.225 9.76667 20 12 20Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/AppearanceIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const AppearanceIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M11.9615 21C10.7358 21 9.57883 20.7632 8.4905 20.2895C7.402 19.8157 6.45167 19.1727 5.6395 18.3605C4.82733 17.5483 4.18433 16.5948 3.7105 15.5C3.23683 14.4052 3 13.2385 3 12C3 10.7448 3.242 9.56983 3.726 8.475C4.21 7.38017 4.86958 6.42758 5.70475 5.61725C6.54008 4.80708 7.51992 4.16833 8.64425 3.701C9.76858 3.23367 10.9667 3 12.2385 3C13.4052 3 14.5161 3.19708 15.5712 3.59125C16.6263 3.98558 17.5548 4.53242 18.3568 5.23175C19.1586 5.93108 19.7996 6.76442 20.2798 7.73175C20.7599 8.69908 21 9.75392 21 10.8962C21 12.4411 20.5545 13.6779 19.6635 14.6067C18.7725 15.5356 17.5513 16 16 16H14.227C13.8077 16 13.4567 16.1442 13.174 16.4327C12.8913 16.7212 12.75 17.0693 12.75 17.477C12.75 17.8948 12.875 18.2496 13.125 18.5413C13.375 18.8329 13.5 19.1692 13.5 19.55C13.5 20.0372 13.3638 20.4007 13.0913 20.6405C12.8189 20.8802 12.4423 21 11.9615 21ZM6.5 12.5C6.7795 12.5 7.016 12.4032 7.2095 12.2095C7.40317 12.016 7.5 11.7795 7.5 11.5C7.5 11.2205 7.40317 10.984 7.2095 10.7905C7.016 10.5968 6.7795 10.5 6.5 10.5C6.2205 10.5 5.984 10.5968 5.7905 10.7905C5.59683 10.984 5.5 11.2205 5.5 11.5C5.5 11.7795 5.59683 12.016 5.7905 12.2095C5.984 12.4032 6.2205 12.5 6.5 12.5ZM9.5 8.5C9.7795 8.5 10.016 8.40317 10.2095 8.2095C10.4032 8.016 10.5 7.7795 10.5 7.5C10.5 7.2205 10.4032 6.984 10.2095 6.7905C10.016 6.59683 9.7795 6.5 9.5 6.5C9.2205 6.5 8.984 6.59683 8.7905 6.7905C8.59683 6.984 8.5 7.2205 8.5 7.5C8.5 7.7795 8.59683 8.016 8.7905 8.2095C8.984 8.40317 9.2205 8.5 9.5 8.5ZM14.5 8.5C14.7795 8.5 15.016 8.40317 15.2095 8.2095C15.4032 8.016 15.5 7.7795 15.5 7.5C15.5 7.2205 15.4032 6.984 15.2095 6.7905C15.016 6.59683 14.7795 6.5 14.5 6.5C14.2205 6.5 13.984 6.59683 13.7905 6.7905C13.5968 6.984 13.5 7.2205 13.5 7.5C13.5 7.7795 13.5968 8.016 13.7905 8.2095C13.984 8.40317 14.2205 8.5 14.5 8.5ZM17.5 12.5C17.7795 12.5 18.016 12.4032 18.2095 12.2095C18.4032 12.016 18.5 11.7795 18.5 11.5C18.5 11.2205 18.4032 10.984 18.2095 10.7905C18.016 10.5968 17.7795 10.5 17.5 10.5C17.2205 10.5 16.984 10.5968 16.7905 10.7905C16.5968 10.984 16.5 11.2205 16.5 11.5C16.5 11.7795 16.5968 12.016 16.7905 12.2095C16.984 12.4032 17.2205 12.5 17.5 12.5ZM11.9615 20C12.1372 20 12.2708 19.9615 12.3625 19.8845C12.4542 19.8077 12.5 19.6962 12.5 19.55C12.5 19.3167 12.375 19.0673 12.125 18.802C11.875 18.5365 11.75 18.0999 11.75 17.4923C11.75 16.7666 11.9917 16.1698 12.475 15.702C12.9583 15.234 13.55 15 14.25 15H16C17.2538 15 18.234 14.6311 18.9405 13.8933C19.6468 13.1554 20 12.1564 20 10.8962C20 8.86675 19.2196 7.21 17.6587 5.926C16.0977 4.642 14.291 4 12.2385 4C9.93333 4 7.984 4.775 6.3905 6.325C4.79683 7.875 4 9.76667 4 12C4 14.2167 4.77917 16.1042 6.3375 17.6625C7.89583 19.2208 9.7705 20 11.9615 20Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ArrowDownIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ArrowDownIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3.19236 8.1636L4.25586 7.1001L12.5001 15.3443L20.7444 7.1001L21.8079 8.1636L12.5001 17.4713L3.19236 8.1636Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ArrowLeftIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ArrowLeftIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M16.4113 21.5608L7.10352 12.2531L16.4113 2.94531L17.4748 4.00881L9.23052 12.2531L17.4748 20.4973L16.4113 21.5608Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ArrowRightIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ArrowRightIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M8.38479 21.9202L7.32129 20.8567L15.5655 12.6124L7.32129 4.36819L8.38479 3.30469L17.6925 12.6124L8.38479 21.9202Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ArrowUpAndDown/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ArrowUpAndDown = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M14 17.7456L17.3077 14.4379L16.6 13.7301L14.5 15.8186V11.1301H13.5V15.8186L11.4 13.7301L10.6923 14.4379L14 17.7456ZM9.5 13.1301H10.5V8.44163L12.6 10.5301L13.3077 9.82238L10 6.51463L6.69225 9.82238L7.4 10.5301L9.5 8.44163V13.1301ZM12.0033 21.1301C10.7587 21.1301 9.58867 20.894 8.493 20.4216C7.3975 19.9493 6.4445 19.3083 5.634 18.4986C4.8235 17.689 4.18192 16.7368 3.70925 15.6421C3.23642 14.5476 3 13.378 3 12.1334C3 10.8889 3.23617 9.71879 3.7085 8.62313C4.18083 7.52763 4.82183 6.57463 5.6315 5.76413C6.44117 4.95363 7.39333 4.31204 8.488 3.83938C9.5825 3.36654 10.7521 3.13013 11.9967 3.13013C13.2413 3.13013 14.4113 3.36629 15.507 3.83863C16.6025 4.31096 17.5555 4.95196 18.366 5.76163C19.1765 6.57129 19.8181 7.52346 20.2908 8.61813C20.7636 9.71263 21 10.8822 21 12.1269C21 13.3714 20.7638 14.5415 20.2915 15.6371C19.8192 16.7326 19.1782 17.6856 18.3685 18.4961C17.5588 19.3066 16.6067 19.9482 15.512 20.4209C14.4175 20.8937 13.2479 21.1301 12.0033 21.1301ZM12 20.1301C14.2333 20.1301 16.125 19.3551 17.675 17.8051C19.225 16.2551 20 14.3635 20 12.1301C20 9.89679 19.225 8.00513 17.675 6.45513C16.125 4.90513 14.2333 4.13013 12 4.13013C9.76667 4.13013 7.875 4.90513 6.325 6.45513C4.775 8.00513 4 9.89679 4 12.1301C4 14.3635 4.775 16.2551 6.325 17.8051C7.875 19.3551 9.76667 20.1301 12 20.1301Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ArrowUpIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ArrowUpIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3.17234 16.3761L12.4801 7.06836L21.7878 16.3761L20.7243 17.4396L12.4801 9.19536L4.23584 17.4396L3.17234 16.3761Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/AutoFillIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const AutoFillIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M4.405 11.6158C3.7375 11.6158 3.16983 11.3809 2.702 10.9111C2.234 10.4412 2 9.87073 2 9.19956C2 8.5284 2.23358 7.96206 2.70075 7.50056C3.16792 7.03906 3.73525 6.80831 4.40275 6.80831C5.07008 6.80831 5.63775 7.04015 6.10575 7.50381C6.57375 7.96748 6.80775 8.53048 6.80775 9.19281C6.80775 9.86598 6.57417 10.4381 6.107 10.9093C5.63967 11.3803 5.07233 11.6158 4.405 11.6158ZM3 17.2121V15.9813H21V17.2121H3ZM12.0013 11.5968C11.3337 11.5968 10.766 11.3631 10.298 10.8958C9.83017 10.4286 9.59625 9.8614 9.59625 9.19406C9.59625 8.52656 9.82983 7.95881 10.297 7.49081C10.7642 7.02298 11.3314 6.78906 11.9988 6.78906C12.6663 6.78906 13.234 7.02265 13.702 7.48981C14.1698 7.95698 14.4038 8.52431 14.4038 9.19181C14.4038 9.85915 14.1702 10.4268 13.703 10.8948C13.2358 11.3628 12.6686 11.5968 12.0013 11.5968ZM19.5972 11.5968C18.9299 11.5968 18.3623 11.3631 17.8943 10.8958C17.4263 10.4286 17.1923 9.8614 17.1923 9.19406C17.1923 8.52656 17.4258 7.95881 17.893 7.49081C18.3603 7.02298 18.9277 6.78906 19.595 6.78906C20.2625 6.78906 20.8302 7.02265 21.298 7.48981C21.766 7.95698 22 8.52431 22 9.19181C22 9.85915 21.7664 10.4268 21.2992 10.8948C20.8321 11.3628 20.2647 11.5968 19.5972 11.5968Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/BackIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const BackIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M7.6256 12.8379L13.4178 18.6301L12.7043 19.3379L5.70435 12.3379L12.7043 5.33789L13.4178 6.04564L7.6256 11.8379H19.7043V12.8379H7.6256Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/BrushIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const BrushIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M2 22.3097V20.3097H22V22.3097H2ZM6 15.1367H7.073L15.873 6.34243L15.3405 5.79043L14.7943 5.26343L6 14.0634V15.1367ZM5 16.1367V13.6367L16.952 1.69043L19.4405 4.19618L7.5 16.1367H5ZM15.873 6.34243L15.3405 5.79043L14.7943 5.26343L15.873 6.34243Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/CalendarIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const CalendarIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M11.7308 14.2691V12.7309H13.2692V14.2691H11.7308ZM7.73075 14.2691V12.7309H9.26925V14.2691H7.73075ZM15.7308 14.2691V12.7309H17.2693V14.2691H15.7308ZM11.7308 18.1154V16.5769H13.2692V18.1154H11.7308ZM7.73075 18.1154V16.5769H9.26925V18.1154H7.73075ZM15.7308 18.1154V16.5769H17.2693V18.1154H15.7308ZM4.5 21.1154V5.11539H7.8845V2.88464H8.9615V5.11539H16.1155V2.88464H17.1155V5.11539H20.5V21.1154H4.5ZM5.5 20.1154H19.5V10.7309H5.5V20.1154ZM5.5 9.73064H19.5V6.11539H5.5V9.73064Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/CheckIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const CheckIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M9.8423 17.6296L4.87305 12.6604L5.58655 11.9469L9.8423 16.2026L18.998 7.04688L19.7115 7.76037L9.8423 17.6296Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/CollapseIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const CollapseIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M9.56738 20V4H10.5674V20H9.56738ZM12.9519 15.6345V8.3845L16.4329 12L12.9519 15.6345Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/CommonFileIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const CommonFileIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M8.3845 12.8077H15.6155V11.8077H8.3845V12.8077ZM8.3845 15.577H15.6155V14.577H8.3845V15.577ZM8.3845 18.3462H12.6155V17.3462H8.3845V18.3462ZM5 21.5V3.5H14.5L19 8V21.5H5ZM14 8.5V4.5H6V20.5H18V8.5H14Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ComputerIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * Simple desktop/computer icon.\n *\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ComputerIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M1 18.8845V17.8845H4.6155V17.1152H3V5.11523H21V17.1152H19.3845V17.8845H23V18.8845H1ZM4 16.1152H20V6.11523H4V16.1152Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/CopyIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const CopyIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M8.57373 18.0664V4.06641H19.5737V18.0664H8.57373ZM9.57373 17.0664H18.5737V5.06641H9.57373V17.0664ZM5.57373 21.0664V7.68191H6.57373V20.0664H15.9582V21.0664H5.57373Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/CreditCardIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const CreditCardIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M3.50684 19.3379V5.33789H21.5068V19.3379H3.50684ZM4.50684 11.5301H20.5068V9.14564H4.50684V11.5301Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3.50684 19.0254V5.02539H21.5068V19.0254H3.50684ZM4.50684 8.83314H20.5068V6.02539H4.50684V8.83314ZM4.50684 18.0254H20.5068V11.2176H4.50684V18.0254Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/CubeIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\n\nexport const CubeIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 17 20\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M7.79688 17.7113V10.2843L1.29688 6.52081V13.9478L7.79688 17.7113ZM8.79688 17.7113L15.2969 13.9478V6.52081L8.79688 10.2843V17.7113ZM8.29688 9.42481L14.7219 5.71131L8.29688 1.99781L1.87188 5.71131L8.29688 9.42481ZM0.296875 14.5458V5.44981L8.29688 0.851562L16.2969 5.44981V14.5458L8.29688 19.1441L0.296875 14.5458Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/DeleteIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const DeleteIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M6 20.3847V6.38473H5V5.38473H9V4.61548H15V5.38473H19V6.38473H18V20.3847H6ZM7 19.3847H17V6.38473H7V19.3847ZM9.80775 17.3847H10.8078V8.38473H9.80775V17.3847ZM13.1923 17.3847H14.1923V8.38473H13.1923V17.3847Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/EmailIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const EmailIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3 19.0254V5.02539H21V19.0254H3ZM12 12.1409L4 6.90989V18.0254H20V6.90989L12 12.1409ZM12 11.0254L19.6923 6.02539H4.30775L12 11.0254ZM4 6.90989V6.02539V18.0254V6.90989Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ErrorIcon/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ErrorIcon = (props) => {\n  const { width, height } = getIconProps({\n    ...props,\n    color: props.color || colors.errorRed.mode1\n  })\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M10 19C14.9706 19 19 14.9706 19 10C19 5.02944 14.9706 1 10 1C5.02944 1 1 5.02944 1 10C1 14.9706 5.02944 19 10 19Z\"\n        fill=${colors.errorRed.dark}\n        stroke=${colors.errorRed.mode1}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M11.2984 4.64795L11.0613 11.97H8.94356L8.70653 4.64795H11.2984ZM9.99986 15.3502C9.6323 15.3502 9.31627 15.2196 9.05176 14.9585C8.79069 14.6975 8.66016 14.3814 8.66016 14.0104C8.66016 13.6463 8.79069 13.3354 9.05176 13.0778C9.31627 12.8167 9.6323 12.6862 9.99986 12.6862C10.3537 12.6862 10.6646 12.8167 10.9325 13.0778C11.2039 13.3354 11.3396 13.6463 11.3396 14.0104C11.3396 14.2578 11.276 14.4828 11.1489 14.6855C11.0253 14.8881 10.8621 15.0496 10.6594 15.1698C10.4602 15.29 10.2403 15.3502 9.99986 15.3502Z\"\n        fill=${colors.white.mode1}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ExitIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ExitIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M4.18164 20.2856V4.28564H12.2009V5.28564H5.18164V19.2856H12.2009V20.2856H4.18164ZM16.6431 15.8241L15.9411 15.1049L18.2604 12.7856H9.37389V11.7856H18.2604L15.9411 9.46639L16.6431 8.74715L20.1816 12.2856L16.6431 15.8241Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/EyeClosedIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const EyeClosedIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M15.4454 12.2923L14.6492 11.4961C14.7992 10.6231 14.5518 9.86733 13.9069 9.22883C13.2621 8.59033 12.5095 8.34608 11.6492 8.49608L10.8529 7.69983C11.0209 7.63067 11.1963 7.57875 11.3789 7.54408C11.5616 7.50958 11.7683 7.49233 11.9992 7.49233C13.0183 7.49233 13.8821 7.8465 14.5904 8.55483C15.2988 9.26316 15.6529 10.1269 15.6529 11.1461C15.6529 11.3769 15.6357 11.5901 15.6012 11.7856C15.5665 11.9811 15.5146 12.15 15.4454 12.2923ZM18.6069 15.3653L17.8492 14.6961C18.4825 14.2127 19.045 13.6836 19.5367 13.1086C20.0283 12.5336 20.4492 11.8794 20.7992 11.1461C19.9658 9.46275 18.77 8.12525 17.2117 7.13358C15.6533 6.14192 13.9158 5.64608 11.9992 5.64608C11.5158 5.64608 11.0408 5.67942 10.5742 5.74608C10.1075 5.81275 9.64917 5.91275 9.19917 6.04608L8.41842 5.26533C8.99926 5.04617 9.59025 4.88816 10.1914 4.79133C10.7928 4.6945 11.3953 4.64608 11.9992 4.64608C14.1697 4.64608 16.1549 5.24258 17.9549 6.43558C19.7549 7.62842 21.0773 9.19858 21.9222 11.1461C21.5645 11.9499 21.1117 12.7053 20.5637 13.4123C20.0155 14.1195 19.3633 14.7705 18.6069 15.3653ZM19.7222 20.7846L15.8299 16.9038C15.3876 17.1 14.8386 17.2727 14.1829 17.4221C13.5271 17.5714 12.7992 17.6461 11.9992 17.6461C9.81584 17.6461 7.83059 17.0496 6.04342 15.8566C4.25626 14.6637 2.93384 13.0936 2.07617 11.1461C2.46451 10.2627 2.97667 9.4355 3.61267 8.66433C4.24851 7.89316 4.92734 7.24608 5.64917 6.72308L2.86067 3.92308L3.56842 3.21533L20.4299 20.0768L19.7222 20.7846ZM6.35692 7.43058C5.78376 7.83842 5.19784 8.37433 4.59917 9.03833C4.00051 9.7025 3.53384 10.4051 3.19917 11.1461C4.03251 12.8294 5.22834 14.1669 6.78667 15.1586C8.34501 16.1502 10.0825 16.6461 11.9992 16.6461C12.5762 16.6461 13.1576 16.59 13.7434 16.4778C14.3293 16.3657 14.7697 16.2525 15.0647 16.1383L13.4337 14.4961C13.276 14.5846 13.0562 14.6573 12.7742 14.7143C12.4922 14.7713 12.2338 14.7998 11.9992 14.7998C10.98 14.7998 10.1163 14.4457 9.40792 13.7373C8.69959 13.029 8.34542 12.1652 8.34542 11.1461C8.34542 10.9242 8.37392 10.6755 8.43092 10.3998C8.48792 10.1243 8.56067 9.89492 8.64917 9.71158L6.35692 7.43058Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/EyeIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const EyeIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M12.0037 15.6538C13.0198 15.6538 13.8821 15.2981 14.5904 14.5868C15.2988 13.8754 15.6529 13.0117 15.6529 11.9955C15.6529 10.9793 15.2973 10.1171 14.5859 9.40875C13.8746 8.70042 13.0108 8.34625 11.9947 8.34625C10.9785 8.34625 10.1163 8.70192 9.40792 9.41325C8.69959 10.1246 8.34542 10.9883 8.34542 12.0045C8.34542 13.0207 8.70109 13.8829 9.41242 14.5913C10.1238 15.2996 10.9875 15.6538 12.0037 15.6538ZM11.9992 14.7C11.2492 14.7 10.6117 14.4375 10.0867 13.9125C9.56167 13.3875 9.29917 12.75 9.29917 12C9.29917 11.25 9.56167 10.6125 10.0867 10.0875C10.6117 9.5625 11.2492 9.3 11.9992 9.3C12.7492 9.3 13.3867 9.5625 13.9117 10.0875C14.4367 10.6125 14.6992 11.25 14.6992 12C14.6992 12.75 14.4367 13.3875 13.9117 13.9125C13.3867 14.4375 12.7492 14.7 11.9992 14.7ZM12.0019 18.5C9.83592 18.5 7.86192 17.9106 6.07992 16.7317C4.29792 15.5529 2.96334 13.9757 2.07617 12C2.96334 10.0243 4.29701 8.44708 6.07717 7.26825C7.85734 6.08942 9.83042 5.5 11.9964 5.5C14.1624 5.5 16.1364 6.08942 17.9184 7.26825C19.7004 8.44708 21.035 10.0243 21.9222 12C21.035 13.9757 19.7013 15.5529 17.9212 16.7317C16.141 17.9106 14.1679 18.5 12.0019 18.5ZM11.9992 17.5C13.8825 17.5 15.6117 17.0042 17.1867 16.0125C18.7617 15.0208 19.9658 13.6833 20.7992 12C19.9658 10.3167 18.7617 8.97917 17.1867 7.9875C15.6117 6.99583 13.8825 6.5 11.9992 6.5C10.1158 6.5 8.38667 6.99583 6.81167 7.9875C5.23667 8.97917 4.03251 10.3167 3.19917 12C4.03251 13.6833 5.23667 15.0208 6.81167 16.0125C8.38667 17.0042 10.1158 17.5 11.9992 17.5Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/FolderIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const FolderIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3 19V5H9.59625L11.5963 7H21V19H3ZM4 18H20V8H11.1943L9.19425 6H4V18Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/FullBodyIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const FullBodyIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M10.2761 21.8758V15.3066H8.50684V7.79883H15.5838V15.2988H13.8146V21.8758H10.2761ZM12.0453 6.18358C11.58 6.18358 11.1816 6.01783 10.8501 5.68633C10.5188 5.355 10.3531 4.95666 10.3531 4.49133C10.3531 4.02583 10.5188 3.62741 10.8501 3.29608C11.1816 2.96458 11.58 2.79883 12.0453 2.79883C12.5107 2.79883 12.9091 2.96458 13.2406 3.29608C13.5719 3.62741 13.7376 4.02583 13.7376 4.49133C13.7376 4.95666 13.5719 5.355 13.2406 5.68633C12.9091 6.01783 12.5107 6.18358 12.0453 6.18358Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M10.2761 22.1043V15.5351H8.50684V8.02734H15.5838V15.5273H13.8146V22.1043H10.2761ZM12.0453 6.41209C11.58 6.41209 11.1816 6.24634 10.8501 5.91484C10.5188 5.58351 10.3531 5.18518 10.3531 4.71984C10.3531 4.25434 10.5188 3.85593 10.8501 3.52459C11.1816 3.19309 11.58 3.02734 12.0453 3.02734C12.5107 3.02734 12.9091 3.19309 13.2406 3.52459C13.5719 3.85593 13.7376 4.25434 13.7376 4.71984C13.7376 5.18518 13.5719 5.58351 13.2406 5.91484C12.9091 6.24634 12.5107 6.41209 12.0453 6.41209Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/GenderIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const GenderIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M19.4297 6.88965H18.5059V3.87109L13.7666 8.56934C13.7855 8.5969 13.8028 8.62556 13.8213 8.65332C14.4891 9.47182 14.8232 10.4343 14.8232 11.541C14.8232 12.7307 14.4254 13.7643 13.6289 14.6416C12.8323 15.5186 11.8426 16.0232 10.6602 16.1562V18.9541H12.5107V19.8789H10.6602V21.7295H9.73438V19.8789H7.88379V18.9541H9.73438V16.1562C8.55182 16.0233 7.56226 15.5186 6.76562 14.6416C5.96916 13.7643 5.57038 12.7307 5.57031 11.541V11.5117C5.57031 10.2244 6.01834 9.13197 6.91406 8.23535C7.80996 7.33869 8.90248 6.88965 10.1904 6.88965C10.6126 6.88968 11.0203 6.95213 11.4141 7.07422C12.015 7.22898 12.5635 7.50471 13.0605 7.90137C13.076 7.91201 13.092 7.92183 13.1074 7.93262L17.8457 3.19434H14.8096V2.27051H19.4297V6.88965ZM10.1943 7.85059C9.17141 7.85059 8.29934 8.21166 7.57812 8.93457C6.85694 9.65776 6.49619 10.531 6.49609 11.5537C6.49609 11.6014 6.49745 11.6492 6.49902 11.6963C6.54007 12.6388 6.89895 13.4484 7.57715 14.125C8.29935 14.8452 9.17196 15.2051 10.1934 15.2051C11.2147 15.205 12.0856 14.844 12.8057 14.1221C13.5257 13.3999 13.8857 12.5281 13.8857 11.5068C13.8857 11.1265 13.8354 10.7672 13.7354 10.4287C13.5638 9.87316 13.2568 9.37379 12.8135 8.93164C12.0903 8.21054 11.2171 7.85061 10.1943 7.85059Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/GroupIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const GroupIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M9.58384 16.3287C9.84017 16.3287 10.0581 16.2389 10.2376 16.0594C10.4171 15.8799 10.5068 15.6619 10.5068 15.4054C10.5068 15.1491 10.4171 14.9312 10.2376 14.7517C10.0581 14.5722 9.84017 14.4824 9.58384 14.4824C9.32734 14.4824 9.10934 14.5722 8.92984 14.7517C8.75034 14.9312 8.66059 15.1491 8.66059 15.4054C8.66059 15.6619 8.75034 15.8799 8.92984 16.0594C9.10934 16.2389 9.32734 16.3287 9.58384 16.3287ZM9.58384 10.4824C9.84017 10.4824 10.0581 10.3927 10.2376 10.2132C10.4171 10.0337 10.5068 9.81576 10.5068 9.55942C10.5068 9.30292 10.4171 9.08492 10.2376 8.90542C10.0581 8.72592 9.84017 8.63617 9.58384 8.63617C9.32734 8.63617 9.10934 8.72592 8.92984 8.90542C8.75034 9.08492 8.66059 9.30292 8.66059 9.55942C8.66059 9.81576 8.75034 10.0337 8.92984 10.2132C9.10934 10.3927 9.32734 10.4824 9.58384 10.4824ZM15.4298 16.3287C15.6863 16.3287 15.9043 16.2389 16.0838 16.0594C16.2633 15.8799 16.3531 15.6619 16.3531 15.4054C16.3531 15.1491 16.2633 14.9312 16.0838 14.7517C15.9043 14.5722 15.6863 14.4824 15.4298 14.4824C15.1735 14.4824 14.9556 14.5722 14.7761 14.7517C14.5966 14.9312 14.5068 15.1491 14.5068 15.4054C14.5068 15.6619 14.5966 15.8799 14.7761 16.0594C14.9556 16.2389 15.1735 16.3287 15.4298 16.3287ZM15.4298 10.4824C15.6863 10.4824 15.9043 10.3927 16.0838 10.2132C16.2633 10.0337 16.3531 9.81576 16.3531 9.55942C16.3531 9.30292 16.2633 9.08492 16.0838 8.90542C15.9043 8.72592 15.6863 8.63617 15.4298 8.63617C15.1735 8.63617 14.9556 8.72592 14.7761 8.90542C14.5966 9.08492 14.5068 9.30292 14.5068 9.55942C14.5068 9.81576 14.5966 10.0337 14.7761 10.2132C14.9556 10.3927 15.1735 10.4824 15.4298 10.4824ZM4.50684 20.4824V4.48242H20.5068V20.4824H4.50684ZM5.50684 19.4824H19.5068V5.48242H5.50684V19.4824Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ImageIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ImageIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M8 17H17.1538L14.327 13.2308L11.7115 16.5385L9.9615 14.423L8 17ZM4.5 20.5V4.5H20.5V20.5H4.5ZM5.5 19.5H19.5V5.5H5.5V19.5ZM8.99775 10C9.27492 10 9.51125 9.903 9.70675 9.709C9.90225 9.515 10 9.27942 10 9.00225C10 8.72508 9.903 8.48875 9.709 8.29325C9.515 8.09775 9.27942 8 9.00225 8C8.72508 8 8.48875 8.097 8.29325 8.291C8.09775 8.485 8 8.72058 8 8.99775C8 9.27492 8.097 9.51125 8.291 9.70675C8.485 9.90225 8.72058 10 8.99775 10Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/InfoIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const InfoIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M11.5 16.5H12.5V11H11.5V16.5ZM12 9.577C12.1743 9.577 12.3205 9.518 12.4385 9.4C12.5565 9.282 12.6155 9.13583 12.6155 8.9615C12.6155 8.78717 12.5565 8.641 12.4385 8.523C12.3205 8.40517 12.1743 8.34625 12 8.34625C11.8257 8.34625 11.6795 8.40517 11.5615 8.523C11.4435 8.641 11.3845 8.78717 11.3845 8.9615C11.3845 9.13583 11.4435 9.282 11.5615 9.4C11.6795 9.518 11.8257 9.577 12 9.577ZM12.0033 21C10.7587 21 9.58867 20.7638 8.493 20.2915C7.3975 19.8192 6.4445 19.1782 5.634 18.3685C4.8235 17.5588 4.18192 16.6067 3.70925 15.512C3.23642 14.4175 3 13.2479 3 12.0033C3 10.7587 3.23617 9.58867 3.7085 8.493C4.18083 7.3975 4.82183 6.4445 5.6315 5.634C6.44117 4.8235 7.39333 4.18192 8.488 3.70925C9.5825 3.23642 10.7521 3 11.9967 3C13.2413 3 14.4113 3.23617 15.507 3.7085C16.6025 4.18083 17.5555 4.82183 18.366 5.6315C19.1765 6.44117 19.8181 7.39333 20.2908 8.488C20.7636 9.5825 21 10.7521 21 11.9967C21 13.2413 20.7638 14.4113 20.2915 15.507C19.8192 16.6025 19.1782 17.5555 18.3685 18.366C17.5588 19.1765 16.6067 19.8181 15.512 20.2908C14.4175 20.7636 13.2479 21 12.0033 21ZM12 20C14.2333 20 16.125 19.225 17.675 17.675C19.225 16.125 20 14.2333 20 12C20 9.76667 19.225 7.875 17.675 6.325C16.125 4.775 14.2333 4 12 4C9.76667 4 7.875 4.775 6.325 6.325C4.775 7.875 4 9.76667 4 12C4 14.2333 4.775 16.125 6.325 17.675C7.875 19.225 9.76667 20 12 20Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/KebabMenuIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const KebabMenuIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M12 18.5384C11.725 18.5384 11.4896 18.4405 11.2938 18.2447C11.0979 18.0488 11 17.8134 11 17.5384C11 17.2634 11.0979 17.028 11.2938 16.8322C11.4896 16.6363 11.725 16.5384 12 16.5384C12.275 16.5384 12.5104 16.6363 12.7063 16.8322C12.9021 17.028 13 17.2634 13 17.5384C13 17.8134 12.9021 18.0488 12.7063 18.2447C12.5104 18.4405 12.275 18.5384 12 18.5384ZM12 12.9999C11.725 12.9999 11.4896 12.902 11.2938 12.7062C11.0979 12.5103 11 12.2749 11 11.9999C11 11.7249 11.0979 11.4895 11.2938 11.2937C11.4896 11.0978 11.725 10.9999 12 10.9999C12.275 10.9999 12.5104 11.0978 12.7063 11.2937C12.9021 11.4895 13 11.7249 13 11.9999C13 12.2749 12.9021 12.5103 12.7063 12.7062C12.5104 12.902 12.275 12.9999 12 12.9999ZM12 7.46143C11.725 7.46143 11.4896 7.36351 11.2938 7.16768C11.0979 6.97184 11 6.73643 11 6.46143C11 6.18643 11.0979 5.95101 11.2938 5.75518C11.4896 5.55934 11.725 5.46143 12 5.46143C12.275 5.46143 12.5104 5.55934 12.7063 5.75518C12.9021 5.95101 13 6.18643 13 6.46143C13 6.73643 12.9021 6.97184 12.7063 7.16768C12.5104 7.36351 12.275 7.46143 12 7.46143Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/KeyIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const KeyIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M7.33378 13.9149C7.84661 13.9149 8.28253 13.7354 8.64153 13.3764C9.00053 13.0174 9.18003 12.5815 9.18003 12.0686C9.18003 11.5558 9.00053 11.1199 8.64153 10.7609C8.28253 10.4019 7.84661 10.2224 7.33378 10.2224C6.82094 10.2224 6.38503 10.4019 6.02603 10.7609C5.66703 11.1199 5.48753 11.5558 5.48753 12.0686C5.48753 12.5815 5.66703 13.0174 6.02603 13.3764C6.38503 13.7354 6.82094 13.9149 7.33378 13.9149ZM7.33378 16.7994C6.00044 16.7994 4.87861 16.3443 3.96828 15.4341C3.05811 14.5238 2.60303 13.402 2.60303 12.0686C2.60303 10.7353 3.05811 9.61347 3.96828 8.70314C4.87861 7.79297 6.00044 7.33789 7.33378 7.33789C8.46578 7.33789 9.44619 7.65714 10.275 8.29564C11.1039 8.93397 11.6349 9.69164 11.8683 10.5686H20.9165L22.4108 12.0629L19.93 14.6974L18.103 13.3186L16.276 14.7609L14.7183 13.5686H11.8683C11.6311 14.461 11.0953 15.2225 10.2608 15.8531C9.42611 16.484 8.45044 16.7994 7.33378 16.7994Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M6.91162 14.0257C6.56679 14.0257 6.27545 13.9068 6.03762 13.6689C5.79979 13.4311 5.68087 13.1398 5.68087 12.7949C5.68087 12.4501 5.79979 12.1588 6.03762 11.9209C6.27545 11.6831 6.56679 11.5642 6.91162 11.5642C7.25645 11.5642 7.54779 11.6831 7.78562 11.9209C8.02345 12.1588 8.14237 12.4501 8.14237 12.7949C8.14237 13.1398 8.02345 13.4311 7.78562 13.6689C7.54779 13.9068 7.25645 14.0257 6.91162 14.0257ZM6.91162 17.7949C5.52695 17.7949 4.34745 17.3078 3.37312 16.3334C2.39879 15.3591 1.91162 14.1796 1.91162 12.7949C1.91162 11.4103 2.39879 10.2308 3.37312 9.25642C4.34745 8.28209 5.52695 7.79492 6.91162 7.79492C7.93862 7.79492 8.86462 8.07309 9.68962 8.62942C10.5146 9.18592 11.1168 9.90776 11.4961 10.7949H20.7001L22.7001 12.7949L19.5079 15.9487L17.7961 14.6604L15.9886 15.9872L14.2096 14.7949H11.4961C11.1168 15.6693 10.5146 16.3878 9.68962 16.9507C8.86462 17.5135 7.93862 17.7949 6.91162 17.7949ZM6.91162 16.7949C7.89629 16.7949 8.73637 16.4988 9.43187 15.9064C10.1274 15.3141 10.5725 14.6103 10.7674 13.7949H14.5271L15.9579 14.7622L17.8154 13.4294L19.4366 14.6507L21.2924 12.7949L20.2924 11.7949H10.7674C10.5725 10.9796 10.1274 10.2758 9.43187 9.68342C8.73637 9.09109 7.89629 8.79492 6.91162 8.79492C5.81162 8.79492 4.86995 9.18659 4.08662 9.96992C3.30329 10.7533 2.91162 11.6949 2.91162 12.7949C2.91162 13.8949 3.30329 14.8366 4.08662 15.6199C4.86995 16.4033 5.81162 16.7949 6.91162 16.7949Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/LockCircleIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const LockCircleIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M12.5033 21C11.2587 21 10.0887 20.7638 8.993 20.2915C7.8975 19.8192 6.9445 19.1782 6.134 18.3685C5.3235 17.5588 4.68192 16.6067 4.20925 15.512C3.73642 14.4175 3.5 13.2479 3.5 12.0033C3.5 10.7587 3.73617 9.58867 4.2085 8.493C4.68083 7.3975 5.32183 6.4445 6.1315 5.634C6.94117 4.8235 7.89333 4.18192 8.988 3.70925C10.0825 3.23642 11.2521 3 12.4967 3C13.7413 3 14.9113 3.23617 16.007 3.7085C17.1025 4.18083 18.0555 4.82183 18.866 5.6315C19.6765 6.44117 20.3181 7.39333 20.7908 8.488C21.2636 9.5825 21.5 10.7521 21.5 11.9967C21.5 13.2413 21.2638 14.4113 20.7915 15.507C20.3192 16.6025 19.6782 17.5555 18.8685 18.366C18.0588 19.1765 17.1067 19.8181 16.012 20.2908C14.9175 20.7636 13.7479 21 12.5033 21ZM12.5 20C14.7333 20 16.625 19.225 18.175 17.675C19.725 16.125 20.5 14.2333 20.5 12C20.5 9.76667 19.725 7.875 18.175 6.325C16.625 4.775 14.7333 4 12.5 4C10.2667 4 8.375 4.775 6.825 6.325C5.275 7.875 4.5 9.76667 4.5 12C4.5 14.2333 5.275 16.125 6.825 17.675C8.375 19.225 10.2667 20 12.5 20Z\"\n        fill=${color}\n      />\n      <path\n        d=\"M12.5 12.75C13.7426 12.75 14.75 11.7426 14.75 10.5C14.75 9.25736 13.7426 8.25 12.5 8.25C11.2574 8.25 10.25 9.25736 10.25 10.5C10.25 11.7426 11.2574 12.75 12.5 12.75Z\"\n        stroke=${color}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M12.553 12.75V15.75\"\n        stroke=${color}\n        strokeLinecap=\"square\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/LockIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const LockIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M5.50684 21.3379V9.33789H8.50684V7.33789C8.50684 6.22372 8.895 5.27856 9.67134 4.50239C10.4475 3.72606 11.3927 3.33789 12.5068 3.33789C13.621 3.33789 14.5662 3.72606 15.3423 4.50239C16.1187 5.27856 16.5068 6.22372 16.5068 7.33789V9.33789H19.5068V21.3379H5.50684ZM12.5068 16.8379C12.9287 16.8379 13.2841 16.6933 13.5731 16.4041C13.8623 16.1151 14.0068 15.7597 14.0068 15.3379C14.0068 14.9161 13.8623 14.5606 13.5731 14.2716C13.2841 13.9825 12.9287 13.8379 12.5068 13.8379C12.085 13.8379 11.7296 13.9825 11.4406 14.2716C11.1514 14.5606 11.0068 14.9161 11.0068 15.3379C11.0068 15.7597 11.1514 16.1151 11.4406 16.4041C11.7296 16.6933 12.085 16.8379 12.5068 16.8379ZM9.50684 9.33789H15.5068V7.33789C15.5068 6.50456 15.2152 5.79622 14.6318 5.21289C14.0485 4.62956 13.3402 4.33789 12.5068 4.33789C11.6735 4.33789 10.9652 4.62956 10.3818 5.21289C9.7985 5.79622 9.50684 6.50456 9.50684 7.33789V9.33789Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M5.50684 21.0254V9.02539H8.50684V7.02539C8.50684 5.91122 8.895 4.96606 9.67134 4.18989C10.4475 3.41356 11.3927 3.02539 12.5068 3.02539C13.621 3.02539 14.5662 3.41356 15.3423 4.18989C16.1187 4.96606 16.5068 5.91122 16.5068 7.02539V9.02539H19.5068V21.0254H5.50684ZM6.50684 20.0254H18.5068V10.0254H6.50684V20.0254ZM12.5068 16.5254C12.9287 16.5254 13.2841 16.3808 13.5731 16.0916C13.8623 15.8026 14.0068 15.4472 14.0068 15.0254C14.0068 14.6036 13.8623 14.2481 13.5731 13.9591C13.2841 13.67 12.9287 13.5254 12.5068 13.5254C12.085 13.5254 11.7296 13.67 11.4406 13.9591C11.1514 14.2481 11.0068 14.6036 11.0068 15.0254C11.0068 15.4472 11.1514 15.8026 11.4406 16.0916C11.7296 16.3808 12.085 16.5254 12.5068 16.5254ZM9.50684 9.02539H15.5068V7.02539C15.5068 6.19206 15.2152 5.48372 14.6318 4.90039C14.0485 4.31706 13.3402 4.02539 12.5068 4.02539C11.6735 4.02539 10.9652 4.31706 10.3818 4.90039C9.7985 5.48372 9.50684 6.19206 9.50684 7.02539V9.02539Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/MoveToIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const MoveToIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3.50684 19.9551V5.95508H10.1031L12.1031 7.95508H21.5068V19.9551H3.50684ZM4.50684 18.9551H20.5068V8.95508H11.7011L9.70109 6.95508H4.50684V18.9551ZM13.8991 14.4551L11.9856 16.3686L12.6933 17.0763L15.8146 13.9551L12.6933 10.8338L11.9856 11.5416L13.8991 13.4551H9.19909V14.4551H13.8991Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/MultiSelectionIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const MultiSelectionIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M6.69994 17.3107L1.74219 12.353L2.45569 11.6452L6.70569 15.8952L7.39794 15.203L8.10569 15.9107L6.69994 17.3107ZM12.3499 17.3107L7.39219 12.353L8.09994 11.6395L12.3499 15.8895L21.5499 6.68945L22.2577 7.40295L12.3499 17.3107ZM11.6577 12.353L10.9442 11.6452L15.8942 6.6952L16.6077 7.40295L11.6577 12.353Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/NationalityIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const NationalityIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M6.774 18.5095V10.5095H7.774V18.5095H6.774ZM11.774 18.5095V10.5095H12.774V18.5095H11.774ZM3.8125 21.5095V20.5095H20.7355V21.5095H3.8125ZM16.774 18.5095V10.5095H17.774V18.5095H16.774ZM3.8125 8.5095V7.66325L12.274 3.625L20.7355 7.66325V8.5095H3.8125ZM6.45475 7.5095H18.0933L12.274 4.7595L6.45475 7.5095Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/NewFolderIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const NewFolderIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3.50684 19.0254V5.02539H10.1031L12.1031 7.02539H21.5068V19.0254H3.50684ZM4.50684 18.0254H20.5068V8.02539H11.6976L9.70109 6.02539H4.50684V18.0254ZM15.0068 15.5254H16.0068V13.5254H18.0068V12.5254H16.0068V10.5254H15.0068V12.5254H13.0068V13.5254H15.0068V15.5254Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/NineDotsIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const NineDotsIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 17 17\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M4.58384 13.1841C4.84017 13.1841 5.05809 13.0944 5.23759 12.9149C5.41709 12.7354 5.50684 12.5174 5.50684 12.2609C5.50684 12.0046 5.41709 11.7866 5.23759 11.6071C5.05809 11.4276 4.84017 11.3379 4.58384 11.3379C4.32734 11.3379 4.10934 11.4276 3.92984 11.6071C3.75034 11.7866 3.66059 12.0046 3.66059 12.2609C3.66059 12.5174 3.75034 12.7354 3.92984 12.9149C4.10934 13.0944 4.32734 13.1841 4.58384 13.1841ZM4.58384 5.33789C4.84017 5.33789 5.05809 5.24814 5.23759 5.06864C5.41709 4.88914 5.50684 4.67122 5.50684 4.41489C5.50684 4.15839 5.41709 3.94039 5.23759 3.76089C5.05809 3.58139 4.84017 3.49164 4.58384 3.49164C4.32734 3.49164 4.10934 3.58139 3.92984 3.76089C3.75034 3.94039 3.66059 4.15839 3.66059 4.41489C3.66059 4.67122 3.75034 4.88914 3.92984 5.06864C4.10934 5.24814 4.32734 5.33789 4.58384 5.33789ZM4.58384 9.26089C4.84017 9.26089 5.05809 9.17114 5.23759 8.99164C5.41709 8.81214 5.50684 8.59422 5.50684 8.33789C5.50684 8.08156 5.41709 7.86364 5.23759 7.68414C5.05809 7.50464 4.84017 7.41489 4.58384 7.41489C4.32734 7.41489 4.10934 7.50464 3.92984 7.68414C3.75034 7.86364 3.66059 8.08156 3.66059 8.33789C3.66059 8.59422 3.75034 8.81214 3.92984 8.99164C4.10934 9.17114 4.32734 9.26089 4.58384 9.26089ZM12.4298 13.1841C12.6863 13.1841 12.9043 13.0944 13.0838 12.9149C13.2633 12.7354 13.3531 12.5174 13.3531 12.2609C13.3531 12.0046 13.2633 11.7866 13.0838 11.6071C12.9043 11.4276 12.6863 11.3379 12.4298 11.3379C12.1735 11.3379 11.9556 11.4276 11.7761 11.6071C11.5966 11.7866 11.5068 12.0046 11.5068 12.2609C11.5068 12.5174 11.5966 12.7354 11.7761 12.9149C11.9556 13.0944 12.1735 13.1841 12.4298 13.1841ZM12.4298 5.33789C12.6863 5.33789 12.9043 5.24814 13.0838 5.06864C13.2633 4.88914 13.3531 4.67122 13.3531 4.41489C13.3531 4.15839 13.2633 3.94039 13.0838 3.76089C12.9043 3.58139 12.6863 3.49164 12.4298 3.49164C12.1735 3.49164 11.9556 3.58139 11.7761 3.76089C11.5966 3.94039 11.5068 4.15839 11.5068 4.41489C11.5068 4.67122 11.5966 4.88914 11.7761 5.06864C11.9556 5.24814 12.1735 5.33789 12.4298 5.33789ZM12.4298 9.26089C12.6863 9.26089 12.9043 9.17114 13.0838 8.99164C13.2633 8.81214 13.3531 8.59422 13.3531 8.33789C13.3531 8.08156 13.2633 7.86364 13.0838 7.68414C12.9043 7.50464 12.6863 7.41489 12.4298 7.41489C12.1735 7.41489 11.9556 7.50464 11.7761 7.68414C11.5966 7.86364 11.5068 8.08156 11.5068 8.33789C11.5068 8.59422 11.5966 8.81214 11.7761 8.99164C11.9556 9.17114 12.1735 9.26089 12.4298 9.26089ZM8.50684 5.33789C8.76317 5.33789 8.98109 5.24814 9.16059 5.06864C9.34009 4.88914 9.42984 4.67122 9.42984 4.41489C9.42984 4.15839 9.34009 3.94039 9.16059 3.76089C8.98109 3.58139 8.76317 3.49164 8.50684 3.49164C8.2505 3.49164 8.03259 3.58139 7.85309 3.76089C7.67359 3.94039 7.58384 4.15839 7.58384 4.41489C7.58384 4.67122 7.67359 4.88914 7.85309 5.06864C8.03259 5.24814 8.2505 5.33789 8.50684 5.33789ZM8.50684 13.1841C8.76317 13.1841 8.98109 13.0944 9.16059 12.9149C9.34009 12.7354 9.42984 12.5174 9.42984 12.2609C9.42984 12.0046 9.34009 11.7866 9.16059 11.6071C8.98109 11.4276 8.76317 11.3379 8.50684 11.3379C8.2505 11.3379 8.03259 11.4276 7.85309 11.6071C7.67359 11.7866 7.58384 12.0046 7.58384 12.2609C7.58384 12.5174 7.67359 12.7354 7.85309 12.9149C8.03259 13.0944 8.2505 13.1841 8.50684 13.1841ZM8.50684 9.26089C8.76317 9.26089 8.98109 9.17114 9.16059 8.99164C9.34009 8.81214 9.42984 8.59422 9.42984 8.33789C9.42984 8.08156 9.34009 7.86364 9.16059 7.68414C8.98109 7.50464 8.76317 7.41489 8.50684 7.41489C8.2505 7.41489 8.03259 7.50464 7.85309 7.68414C7.67359 7.86364 7.58384 8.08156 7.58384 8.33789C7.58384 8.59422 7.67359 8.81214 7.85309 8.99164C8.03259 9.17114 8.2505 9.26089 8.50684 9.26089ZM0.506836 16.3379V0.337891H16.5068V16.3379H0.506836ZM1.50684 15.3379H15.5068V1.33789H1.50684V15.3379Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/NoteIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const NoteIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M8.63081 21.4628V8.45709H21.6308V17.0398L17.2078 21.4628H8.63081ZM20.6308 16.4628H16.6308V20.4628L20.6308 16.4628ZM5.64231 18.2686L3.38281 5.47434L16.1771 3.21484L16.6808 6.07834H6.24831V18.1603L5.64231 18.2686Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M8.63081 21.9199V8.91412H21.6308V17.4969L17.2078 21.9199H8.63081ZM9.63081 20.9199H16.6308V16.9199H20.6308V9.91987H9.63081V20.9199ZM5.64231 18.7256L3.38281 5.93138L16.1771 3.67188L16.6808 6.53537H15.6693L15.3596 4.82363L4.53456 6.74863L6.24631 16.3794V18.6199L5.64231 18.7256Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/OkayIcon/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const OkayIcon = (props) => {\n  const { width, height } = getIconProps({\n    ...props,\n    color: props.color || colors.primary400.mode1\n  })\n\n  return html`\n    <svg\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21Z\"\n        fill=${colors.primary300.mode1}\n        stroke=${colors.primary400.mode1}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M10.311 16.1445L6.38184 12.2154L7.36412 11.2331L10.311 14.18L16.6355 7.85547L17.6177 8.83775L10.311 16.1445Z\"\n        fill=${colors.white.mode1}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/OutsideLinkIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const OutsideLinkIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M4 20V4H11.2308V5H5V19H19V12.7692H20V20H4ZM9.7385 14.9692L9.03075 14.2615L18.2923 5H14V4H20V10H19V5.70775L9.7385 14.9692Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/PassPhraseIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\n\nexport const PassPhraseIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M8 16.7856H14V15.7856H8V16.7856ZM8 12.7856H17V11.7856H8V12.7856ZM8 8.78564H17V7.78564H8V8.78564ZM4.5 20.2856V4.28564H20.5V20.2856H4.5Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M8.29688 16.5H14.2969V15.5H8.29688V16.5ZM8.29688 12.5H17.2969V11.5H8.29688V12.5ZM8.29688 8.5H17.2969V7.5H8.29688V8.5ZM4.79688 20V4H20.7969V20H4.79688ZM5.79688 19H19.7969V5H5.79688V19Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/PasswordIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const PasswordIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M4.91184 11.9537C4.24434 11.9537 3.67667 11.7188 3.20884 11.249C2.74084 10.7791 2.50684 10.2086 2.50684 9.53745C2.50684 8.86629 2.74042 8.29995 3.20759 7.83845C3.67475 7.37695 4.24209 7.1462 4.90959 7.1462C5.57692 7.1462 6.14459 7.37804 6.61259 7.8417C7.08059 8.30537 7.31459 8.86837 7.31459 9.5307C7.31459 10.2039 7.081 10.776 6.61384 11.2472C6.1465 11.7182 5.57917 11.9537 4.91184 11.9537ZM3.50684 17.55V16.3192H21.5068V17.55H3.50684ZM12.5081 11.9347C11.8406 11.9347 11.2728 11.701 10.8048 11.2337C10.337 10.7665 10.1031 10.1993 10.1031 9.53195C10.1031 8.86445 10.3367 8.2967 10.8038 7.8287C11.271 7.36087 11.8383 7.12695 12.5056 7.12695C13.1731 7.12695 13.7408 7.36054 14.2088 7.8277C14.6767 8.29487 14.9106 8.8622 14.9106 9.5297C14.9106 10.197 14.677 10.7647 14.2098 11.2327C13.7427 11.7007 13.1754 11.9347 12.5081 11.9347ZM20.1041 11.9347C19.4368 11.9347 18.8691 11.701 18.4011 11.2337C17.9331 10.7665 17.6991 10.1993 17.6991 9.53195C17.6991 8.86445 17.9327 8.2967 18.3998 7.8287C18.8672 7.36087 19.4345 7.12695 20.1018 7.12695C20.7693 7.12695 21.337 7.36054 21.8048 7.8277C22.2728 8.29487 22.5068 8.8622 22.5068 9.5297C22.5068 10.197 22.2733 10.7647 21.8061 11.2327C21.3389 11.7007 20.7716 11.9347 20.1041 11.9347Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/PasteIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\n\nexport const PasteIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 17 18\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M0.5 17.6933V1.69334H6.752C6.8455 1.30234 7.05317 0.973845 7.375 0.707845C7.69683 0.441678 8.07183 0.308594 8.5 0.308594C8.93583 0.308594 9.31375 0.441678 9.63375 0.707845C9.95358 0.973845 10.1603 1.30234 10.2538 1.69334H16.5V17.6933H0.5ZM1.5 16.6933H15.5V2.69334H12.5V4.92409H4.5V2.69334H1.5V16.6933ZM8.50325 2.92409C8.73308 2.92409 8.92467 2.84634 9.078 2.69084C9.23117 2.53551 9.30775 2.34293 9.30775 2.11309C9.30775 1.88326 9.23 1.69176 9.0745 1.53859C8.919 1.38543 8.72642 1.30884 8.49675 1.30884C8.26692 1.30884 8.07533 1.38651 7.922 1.54184C7.76883 1.69734 7.69225 1.89001 7.69225 2.11984C7.69225 2.34968 7.77 2.54118 7.9255 2.69434C8.081 2.84751 8.27358 2.92409 8.50325 2.92409Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/PhoneIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const PhoneIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M12.0466 6.56166C12.2649 6.56166 12.4475 6.48782 12.5943 6.34016C12.7412 6.19232 12.8146 6.00924 12.8146 5.79091C12.8146 5.57257 12.7408 5.39007 12.5931 5.24341C12.4453 5.09657 12.2622 5.02316 12.0438 5.02316C11.8255 5.02316 11.643 5.09699 11.4963 5.24466C11.3495 5.39232 11.2761 5.57532 11.2761 5.79366C11.2761 6.01199 11.3499 6.19457 11.4976 6.34141C11.6453 6.48824 11.8283 6.56166 12.0466 6.56166ZM6.00684 22.2539V2.25391H18.0838V7.08466H19.0068V10.7694H18.0838V22.2539H6.00684ZM7.00684 21.2539H17.0838V3.25391H7.00684V21.2539Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/PinIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const PinIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M15.5069 12.5109L17.0839 14.0879V15.0879H13.0069V20.0879L12.5069 20.5879L12.0069 20.0879V15.0879H7.92993V14.0879L9.50693 12.5109V5.08789H8.50693V4.08789H16.5069V5.08789H15.5069V12.5109ZM9.35693 14.0879H15.6569L14.5069 12.9379V5.08789H10.5069V12.9379L9.35693 14.0879Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/PlusIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const PlusIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M11.6816 20.2856V12.7856H4.18164V11.7856H11.6816V4.28564H12.6816V11.7856H20.1816V12.7856H12.6816V20.2856H11.6816Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/SaveIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const SaveIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M20.5 7.423V20H4.5V4H17.077L20.5 7.423ZM19.5 7.85L16.65 5H5.5V19H19.5V7.85ZM12.4955 16.5385C13.0498 16.5385 13.5225 16.3445 13.9135 15.9565C14.3045 15.5685 14.5 15.0973 14.5 14.543C14.5 13.9887 14.306 13.516 13.918 13.125C13.53 12.734 13.0588 12.5385 12.5045 12.5385C11.9502 12.5385 11.4775 12.7325 11.0865 13.1205C10.6955 13.5085 10.5 13.9797 10.5 14.534C10.5 15.0883 10.694 15.561 11.082 15.952C11.47 16.343 11.9412 16.5385 12.4955 16.5385ZM7.26925 9.76925H14.6923V6.76925H7.26925V9.76925Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/SearchIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const SearchIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M19.9846 20.4778L13.7231 14.2163C13.2231 14.6419 12.6481 14.9714 11.9981 15.2048C11.3481 15.4381 10.6949 15.5548 10.0386 15.5548C8.43694 15.5548 7.08136 15.0003 5.97186 13.8915C4.86253 12.7827 4.30786 11.4279 4.30786 9.82726C4.30786 8.22643 4.86228 6.87051 5.97111 5.75951C7.07994 4.64868 8.4347 4.09326 10.0354 4.09326C11.6362 4.09326 12.9921 4.64793 14.1031 5.75726C15.2139 6.86676 15.7694 8.22234 15.7694 9.82401C15.7694 10.5188 15.6463 11.1913 15.4001 11.8413C15.1539 12.4913 14.8309 13.047 14.4309 13.5085L20.6924 19.7703L19.9846 20.4778ZM10.0386 14.5548C11.3654 14.5548 12.4856 14.098 13.3991 13.1845C14.3126 12.2712 14.7694 11.151 14.7694 9.82401C14.7694 8.49701 14.3126 7.37685 13.3991 6.46351C12.4856 5.55001 11.3654 5.09326 10.0386 5.09326C8.71161 5.09326 7.59144 5.55001 6.67811 6.46351C5.76461 7.37685 5.30786 8.49701 5.30786 9.82401C5.30786 11.151 5.76461 12.2712 6.67811 13.1845C7.59144 14.098 8.71161 14.5548 10.0386 14.5548Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/SecurityIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const SecurityIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M12 20.9431C9.991 20.3469 8.32208 19.1299 6.99325 17.2921C5.66442 15.4543 5 13.3841 5 11.0816V5.67384L12 3.05859L19 5.67384V11.0816C19 13.3841 18.3356 15.4543 17.0068 17.2921C15.6779 19.1299 14.009 20.3469 12 20.9431ZM12 19.8816C13.7333 19.3316 15.1667 18.2316 16.3 16.5816C17.4333 14.9316 18 13.0983 18 11.0816V6.35659L12 4.12584L6 6.35659V11.0816C6 13.0983 6.56667 14.9316 7.7 16.5816C8.83333 18.2316 10.2667 19.3316 12 19.8816Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/SettingsIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const SettingsIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M10.3162 21.2856L9.9547 18.3934C9.63554 18.2972 9.29037 18.1459 8.9192 17.9394C8.54804 17.7331 8.23237 17.512 7.9722 17.2761L5.3047 18.4106L3.43945 15.1606L5.7452 13.4221C5.7157 13.2415 5.69137 13.0553 5.6722 12.8636C5.65287 12.672 5.6432 12.4857 5.6432 12.3049C5.6432 12.1369 5.65287 11.9603 5.6722 11.7751C5.69137 11.5898 5.7157 11.3811 5.7452 11.1491L3.43945 9.41064L5.3047 6.19914L7.95295 7.3144C8.25162 7.06573 8.5747 6.84139 8.9222 6.64139C9.26954 6.44139 9.60729 6.28689 9.93545 6.17789L10.3162 3.28564H14.0472L14.4087 6.19715C14.792 6.33181 15.1308 6.48631 15.425 6.66064C15.7191 6.83498 16.022 7.0529 16.3337 7.3144L19.0587 6.19914L20.924 9.41064L18.5412 11.2069C18.5964 11.4132 18.6272 11.6026 18.6337 11.7751C18.64 11.9475 18.6432 12.1176 18.6432 12.2856C18.6432 12.4408 18.6368 12.6046 18.624 12.7769C18.6111 12.9494 18.5816 13.1581 18.5355 13.4029L20.8797 15.1606L19.0145 18.4106L16.3337 17.2569C16.022 17.5184 15.7085 17.7427 15.3932 17.9299C15.0779 18.1171 14.7497 18.2651 14.4087 18.3741L14.0472 21.2856H10.3162ZM11.1817 20.2856H13.1375L13.5067 17.5779C14.0105 17.4446 14.464 17.2616 14.8672 17.0289C15.2705 16.7962 15.6811 16.4773 16.099 16.0721L18.5932 17.1356L19.5875 15.4356L17.399 13.7914C17.4823 13.5067 17.5375 13.2449 17.5645 13.0059C17.5913 12.7667 17.6047 12.5266 17.6047 12.2856C17.6047 12.0318 17.5913 11.7917 17.5645 11.5654C17.5375 11.3392 17.4823 11.0902 17.399 10.8184L19.626 9.13564L18.6317 7.43564L16.0797 8.5049C15.7772 8.1729 15.3795 7.86164 14.8865 7.57114C14.3936 7.28081 13.9273 7.08823 13.4875 6.99339L13.1817 4.28564H11.1875L10.876 6.97414C10.3721 7.08181 9.90895 7.25523 9.48645 7.49439C9.06412 7.73339 8.64395 8.0619 8.22595 8.4799L5.7317 7.43564L4.73745 9.13564L6.9067 10.7549C6.82337 10.9792 6.76504 11.2228 6.7317 11.4856C6.69837 11.7485 6.6817 12.0216 6.6817 12.3049C6.6817 12.5587 6.69837 12.8106 6.7317 13.0606C6.76504 13.3106 6.81695 13.5542 6.88745 13.7914L4.73745 15.4356L5.7317 17.1356L8.2067 16.0856C8.59904 16.4818 9.00637 16.7995 9.4287 17.0386C9.8512 17.2776 10.3272 17.4638 10.8567 17.5971L11.1817 20.2856ZM12.1547 14.7856C12.8522 14.7856 13.4433 14.5433 13.928 14.0586C14.4125 13.5741 14.6547 12.9831 14.6547 12.2856C14.6547 11.5881 14.4125 10.9971 13.928 10.5126C13.4433 10.028 12.8522 9.78564 12.1547 9.78564C11.4535 9.78564 10.8615 10.028 10.3787 10.5126C9.89604 10.9971 9.6547 11.5881 9.6547 12.2856C9.6547 12.9831 9.89604 13.5741 10.3787 14.0586C10.8615 14.5433 11.4535 14.7856 12.1547 14.7856Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/ShareIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const ShareIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M18.1108 21.5493C17.4473 21.5493 16.8847 21.3175 16.423 20.8538C15.9615 20.3902 15.7308 19.8272 15.7308 19.1648C15.7308 19.0648 15.775 18.8122 15.8635 18.4071L8.6655 14.1338C8.45 14.3838 8.18567 14.5796 7.8725 14.7213C7.55917 14.863 7.2235 14.9338 6.8655 14.9338C6.20833 14.9338 5.64983 14.6999 5.19 14.2321C4.73 13.7641 4.5 13.2031 4.5 12.5493C4.5 11.8955 4.73 11.3346 5.19 10.8666C5.64983 10.3987 6.20833 10.1648 6.8655 10.1648C7.2235 10.1648 7.55917 10.2356 7.8725 10.3773C8.18567 10.519 8.45 10.7148 8.6655 10.9648L15.8635 6.71082C15.8173 6.58132 15.7837 6.45282 15.7625 6.32532C15.7413 6.19765 15.7308 6.06715 15.7308 5.93382C15.7308 5.27148 15.963 4.70848 16.4275 4.24482C16.8922 3.78115 17.4563 3.54932 18.12 3.54932C18.7837 3.54932 19.3462 3.78157 19.8077 4.24607C20.2692 4.71073 20.5 5.2749 20.5 5.93857C20.5 6.60207 20.2682 7.16465 19.8045 7.62632C19.3408 8.08782 18.7778 8.31857 18.1155 8.31857C17.7538 8.31857 17.4205 8.24448 17.1155 8.09632C16.8103 7.94832 16.55 7.74932 16.3345 7.49932L9.1365 11.7723C9.18267 11.9018 9.21633 12.0304 9.2375 12.1581C9.25867 12.2856 9.26925 12.416 9.26925 12.5493C9.26925 12.6826 9.25867 12.8131 9.2375 12.9406C9.21633 13.0682 9.18267 13.1968 9.1365 13.3263L16.3345 17.5993C16.55 17.3493 16.8103 17.1503 17.1155 17.0023C17.4205 16.8541 17.7538 16.7801 18.1155 16.7801C18.7778 16.7801 19.3408 17.0123 19.8045 17.4768C20.2682 17.9415 20.5 18.5056 20.5 19.1693C20.5 19.833 20.2678 20.3956 19.8033 20.8571C19.3386 21.3186 18.7744 21.5493 18.1108 21.5493ZM18.1155 20.5493C18.5077 20.5493 18.8365 20.4167 19.102 20.1513C19.3673 19.8858 19.5 19.557 19.5 19.1648C19.5 18.7725 19.3673 18.4436 19.102 18.1781C18.8365 17.9127 18.5077 17.7801 18.1155 17.7801C17.7232 17.7801 17.3943 17.9127 17.1288 18.1781C16.8634 18.4436 16.7308 18.7725 16.7308 19.1648C16.7308 19.557 16.8634 19.8858 17.1288 20.1513C17.3943 20.4167 17.7232 20.5493 18.1155 20.5493ZM6.8655 13.9338C7.26317 13.9338 7.5965 13.8011 7.8655 13.5358C8.13467 13.2705 8.26925 12.9416 8.26925 12.5493C8.26925 12.157 8.13467 11.8281 7.8655 11.5628C7.5965 11.2975 7.26317 11.1648 6.8655 11.1648C6.4785 11.1648 6.15417 11.2975 5.8925 11.5628C5.63083 11.8281 5.5 12.157 5.5 12.5493C5.5 12.9416 5.63083 13.2705 5.8925 13.5358C6.15417 13.8011 6.4785 13.9338 6.8655 13.9338ZM18.1155 7.31857C18.5077 7.31857 18.8365 7.1859 19.102 6.92057C19.3673 6.65507 19.5 6.32615 19.5 5.93382C19.5 5.54165 19.3673 5.21282 19.102 4.94732C18.8365 4.68198 18.5077 4.54932 18.1155 4.54932C17.7232 4.54932 17.3943 4.68198 17.1288 4.94732C16.8634 5.21282 16.7308 5.54165 16.7308 5.93382C16.7308 6.32615 16.8634 6.65507 17.1288 6.92057C17.3943 7.1859 17.7232 7.31857 18.1155 7.31857Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/SmallArrowIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const SmallArrowIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M10 13.0312L5 8.03125L6.0625 6.96875L10 10.9062L13.9375 6.96875L15 8.03125L10 13.0312Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/StarIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n *  fill?: boolean;\n * }} props\n */\nexport const StarIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M8.13251 19.207L9.37301 13.8935L5.24976 10.3225L10.6805 9.8513L12.8075 4.8418L14.9345 9.8513L20.3653 10.3225L16.242 13.8935L17.4825 19.207L12.8075 16.386L8.13251 19.207Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M8.85013 17.0846L12.0001 15.1846L15.1501 17.1096L14.3251 13.5096L17.1001 11.1096L13.4501 10.7846L12.0001 7.38463L10.5501 10.7596L6.90013 11.0846L9.67513 13.5096L8.85013 17.0846ZM7.32513 19.1826L8.56563 13.8691L4.44238 10.2981L9.87313 9.82688L12.0001 4.81738L14.1271 9.82688L19.5579 10.2981L15.4346 13.8691L16.6751 19.1826L12.0001 16.3616L7.32513 19.1826Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/SyncingIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const SyncingIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 21 15\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M10.3577 15C8.26542 15 6.484 14.2698 5.0135 12.8095C3.543 11.3493 2.80775 9.5795 2.80775 7.5V6.1135L0.70775 8.2135L0 7.50575L3.30775 4.198L6.6155 7.50575L5.90775 8.2135L3.80775 6.1135V7.5C3.80775 9.30767 4.44333 10.8429 5.7145 12.1058C6.98567 13.3686 8.53342 14 10.3577 14C10.7526 14 11.1552 13.9596 11.5655 13.8788C11.9757 13.7981 12.3743 13.677 12.7615 13.5155L13.5115 14.2655C13.0193 14.5038 12.5072 14.6858 11.975 14.8115C11.443 14.9372 10.9039 15 10.3577 15ZM17.3078 10.802L14 7.49425L14.7078 6.7865L16.8078 8.8865V7.5C16.8078 5.69233 16.1722 4.15708 14.901 2.89425C13.6298 1.63142 12.0821 1 10.2578 1C9.86292 1 9.46033 1.04042 9.05 1.12125C8.63983 1.20192 8.24117 1.323 7.854 1.4845L7.104 0.7345C7.59617 0.496167 8.10833 0.314166 8.6405 0.188499C9.1725 0.0628328 9.71158 0 10.2578 0C12.3501 0 14.1315 0.730167 15.602 2.1905C17.0725 3.65067 17.8078 5.4205 17.8078 7.5V8.8865L19.9078 6.7865L20.6155 7.49425L17.3078 10.802Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/TimeIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const TimeIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M15.6462 16.3538L16.3538 15.6463L12.5 11.7918V7H11.5V12.2078L15.6462 16.3538ZM12.0033 21C10.7587 21 9.58867 20.7638 8.493 20.2915C7.3975 19.8192 6.4445 19.1782 5.634 18.3685C4.8235 17.5588 4.18192 16.6067 3.70925 15.512C3.23642 14.4175 3 13.2479 3 12.0033C3 10.7587 3.23617 9.58867 3.7085 8.493C4.18083 7.3975 4.82183 6.4445 5.6315 5.634C6.44117 4.8235 7.39333 4.18192 8.488 3.70925C9.5825 3.23642 10.7521 3 11.9967 3C13.2413 3 14.4113 3.23617 15.507 3.7085C16.6025 4.18083 17.5555 4.82183 18.366 5.6315C19.1765 6.44117 19.8181 7.39333 20.2908 8.488C20.7636 9.5825 21 10.7521 21 11.9967C21 13.2413 20.7638 14.4113 20.2915 15.507C19.8192 16.6025 19.1782 17.5555 18.3685 18.366C17.5588 19.1765 16.6067 19.8181 15.512 20.2908C14.4175 20.7636 13.2479 21 12.0033 21ZM12 20C14.2167 20 16.1042 19.2208 17.6625 17.6625C19.2208 16.1042 20 14.2167 20 12C20 9.78333 19.2208 7.89583 17.6625 6.3375C16.1042 4.77917 14.2167 4 12 4C9.78333 4 7.89583 4.77917 6.3375 6.3375C4.77917 7.89583 4 9.78333 4 12C4 14.2167 4.77917 16.1042 6.3375 17.6625C7.89583 19.2208 9.78333 20 12 20Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/UserIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const UserIcon = (props) => {\n  const { width, height, color, fill } = getIconProps(props)\n\n  if (fill) {\n    return html`\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=${width}\n        height=${height}\n        viewBox=\"0 0 25 25\"\n        fill=\"none\"\n      >\n        <path\n          d=\"M6.70309 17.8224C7.55309 17.2109 8.455 16.7273 9.40884 16.3716C10.3627 16.0158 11.3953 15.8379 12.5068 15.8379C13.6183 15.8379 14.651 16.0158 15.6048 16.3716C16.5587 16.7273 17.4606 17.2109 18.3106 17.8224C18.9709 17.1391 19.502 16.3321 19.9038 15.4014C20.3058 14.4706 20.5068 13.4494 20.5068 12.3379C20.5068 10.1212 19.7277 8.23372 18.1693 6.67539C16.611 5.11706 14.7235 4.33789 12.5068 4.33789C10.2902 4.33789 8.40267 5.11706 6.84434 6.67539C5.286 8.23372 4.50684 10.1212 4.50684 12.3379C4.50684 13.4494 4.70784 14.4706 5.10984 15.4014C5.51167 16.3321 6.04275 17.1391 6.70309 17.8224ZM12.5068 12.8379C11.6645 12.8379 10.9539 12.5485 10.3751 11.9696C9.79625 11.3908 9.50684 10.6802 9.50684 9.83789C9.50684 8.99556 9.79625 8.28497 10.3751 7.70614C10.9539 7.12731 11.6645 6.83789 12.5068 6.83789C13.3492 6.83789 14.0598 7.12731 14.6386 7.70614C15.2174 8.28497 15.5068 8.99556 15.5068 9.83789C15.5068 10.6802 15.2174 11.3908 14.6386 11.9696C14.0598 12.5485 13.3492 12.8379 12.5068 12.8379ZM12.5068 21.3379C11.2517 21.3379 10.0767 21.1042 8.98184 20.6369C7.887 20.1696 6.93442 19.5308 6.12409 18.7206C5.31392 17.9103 4.67517 16.9577 4.20784 15.8629C3.7405 14.7681 3.50684 13.5931 3.50684 12.3379C3.50684 11.0827 3.7405 9.90772 4.20784 8.81289C4.67517 7.71806 5.31392 6.76547 6.12409 5.95514C6.93442 5.14497 7.887 4.50622 8.98184 4.03889C10.0767 3.57156 11.2517 3.33789 12.5068 3.33789C13.762 3.33789 14.937 3.57156 16.0318 4.03889C17.1267 4.50622 18.0793 5.14497 18.8896 5.95514C19.6998 6.76547 20.3385 7.71806 20.8058 8.81289C21.2732 9.90772 21.5068 11.0827 21.5068 12.3379C21.5068 13.5931 21.2732 14.7681 20.8058 15.8629C20.3385 16.9577 19.6998 17.9103 18.8896 18.7206C18.0793 19.5308 17.1267 20.1696 16.0318 20.6369C14.937 21.1042 13.762 21.3379 12.5068 21.3379Z\"\n          fill=${color}\n        />\n      </svg>\n    `\n  }\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M6.70309 17.8224C7.55309 17.2109 8.455 16.7273 9.40884 16.3716C10.3627 16.0158 11.3953 15.8379 12.5068 15.8379C13.6183 15.8379 14.651 16.0158 15.6048 16.3716C16.5587 16.7273 17.4606 17.2109 18.3106 17.8224C18.9709 17.1391 19.502 16.3321 19.9038 15.4014C20.3058 14.4706 20.5068 13.4494 20.5068 12.3379C20.5068 10.1212 19.7277 8.23372 18.1693 6.67539C16.611 5.11706 14.7235 4.33789 12.5068 4.33789C10.2902 4.33789 8.40267 5.11706 6.84434 6.67539C5.286 8.23372 4.50684 10.1212 4.50684 12.3379C4.50684 13.4494 4.70784 14.4706 5.10984 15.4014C5.51167 16.3321 6.04275 17.1391 6.70309 17.8224ZM12.5073 12.8379C11.6647 12.8379 10.9539 12.5486 10.3751 11.9701C9.79625 11.3916 9.50684 10.6811 9.50684 9.83839C9.50684 8.99572 9.79609 8.28497 10.3746 7.70614C10.9531 7.12731 11.6637 6.83789 12.5063 6.83789C13.349 6.83789 14.0598 7.12714 14.6386 7.70564C15.2174 8.28414 15.5068 8.99472 15.5068 9.83739C15.5068 10.6801 15.2176 11.3908 14.6391 11.9696C14.0606 12.5485 13.35 12.8379 12.5073 12.8379ZM12.5068 21.3379C11.2517 21.3379 10.0767 21.1042 8.98184 20.6369C7.887 20.1696 6.93442 19.5308 6.12409 18.7206C5.31392 17.9103 4.67517 16.9577 4.20784 15.8629C3.7405 14.7681 3.50684 13.5931 3.50684 12.3379C3.50684 11.0827 3.7405 9.90772 4.20784 8.81289C4.67517 7.71806 5.31392 6.76547 6.12409 5.95514C6.93442 5.14497 7.887 4.50622 8.98184 4.03889C10.0767 3.57156 11.2517 3.33789 12.5068 3.33789C13.762 3.33789 14.937 3.57156 16.0318 4.03889C17.1267 4.50622 18.0793 5.14497 18.8896 5.95514C19.6998 6.76547 20.3385 7.71806 20.8058 8.81289C21.2732 9.90772 21.5068 11.0827 21.5068 12.3379C21.5068 13.5931 21.2732 14.7681 20.8058 15.8629C20.3385 16.9577 19.6998 17.9103 18.8896 18.7206C18.0793 19.5308 17.1267 20.1696 16.0318 20.6369C14.937 21.1042 13.762 21.3379 12.5068 21.3379ZM12.5068 20.3379C13.4287 20.3379 14.3358 20.1766 15.2281 19.8541C16.1203 19.5318 16.8913 19.0905 17.5413 18.5301C16.8913 18.0083 16.1394 17.5958 15.2856 17.2926C14.4318 16.9895 13.5055 16.8379 12.5068 16.8379C11.5082 16.8379 10.5787 16.9863 9.71834 17.2831C8.85817 17.58 8.1095 17.9956 7.47234 18.5301C8.12234 19.0905 8.89342 19.5318 9.78559 19.8541C10.6779 20.1766 11.585 20.3379 12.5068 20.3379ZM12.5068 11.8379C13.0683 11.8379 13.5421 11.645 13.9281 11.2591C14.3139 10.8731 14.5068 10.3994 14.5068 9.83789C14.5068 9.27639 14.3139 8.80264 13.9281 8.41664C13.5421 8.03081 13.0683 7.83789 12.5068 7.83789C11.9453 7.83789 11.4716 8.03081 11.0856 8.41664C10.6998 8.80264 10.5068 9.27639 10.5068 9.83789C10.5068 10.3994 10.6998 10.8731 11.0856 11.2591C11.4716 11.645 11.9453 11.8379 12.5068 11.8379Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/UserSecurityIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const UserSecurityIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3.50684 21.4824V16.4824H4.50684V20.4824H8.50684V21.4824H3.50684ZM3.50684 8.48242V3.48242H8.50684V4.48242H4.50684V8.48242H3.50684ZM16.5068 21.4824V20.4824H20.5068V16.4824H21.5068V21.4824H16.5068ZM20.5068 8.48242V4.48242H16.5068V3.48242H21.5068V8.48242H20.5068ZM12.5046 12.3669C11.8099 12.3669 11.22 12.1243 10.7348 11.6392C10.2495 11.1538 10.0068 10.5639 10.0068 9.86942C10.0068 9.18842 10.2495 8.60109 10.7348 8.10742C11.22 7.61376 11.8099 7.36692 12.5046 7.36692C13.1856 7.36692 13.7728 7.61376 14.2663 8.10742C14.76 8.60109 15.0068 9.18842 15.0068 9.86942C15.0068 10.5639 14.76 11.1538 14.2663 11.6392C13.7728 12.1243 13.1856 12.3669 12.5046 12.3669ZM12.5068 11.3669C12.9183 11.3669 13.2713 11.2232 13.5656 10.9357C13.8598 10.6482 14.0068 10.2919 14.0068 9.86692C14.0068 9.45542 13.8598 9.10259 13.5656 8.80842C13.2713 8.51409 12.9152 8.36692 12.4973 8.36692C12.0793 8.36692 11.7264 8.51409 11.4386 8.80842C11.1508 9.10259 11.0068 9.45867 11.0068 9.87667C11.0068 10.2947 11.1506 10.6476 11.4381 10.9354C11.7256 11.2231 12.0818 11.3669 12.5068 11.3669ZM7.00684 17.5979V16.1979C7.00684 15.9298 7.07534 15.6776 7.21234 15.4414C7.34934 15.2053 7.53534 15.017 7.77034 14.8767C8.48567 14.4523 9.24492 14.1331 10.0481 13.9189C10.8514 13.7049 11.671 13.5979 12.5068 13.5979C13.3427 13.5979 14.1623 13.7049 14.9656 13.9189C15.7688 14.1331 16.528 14.4523 17.2433 14.8767C17.4783 15.017 17.6643 15.2053 17.8013 15.4414C17.9383 15.6776 18.0068 15.9298 18.0068 16.1979V17.5979H7.00684ZM12.5068 14.5979C11.7593 14.5979 11.0093 14.7068 10.2568 14.9247C9.50434 15.1427 8.76584 15.4568 8.04134 15.8669V16.6169H16.9723V15.8479C16.2607 15.4376 15.5253 15.1267 14.7663 14.9152C14.0075 14.7037 13.2543 14.5979 12.5068 14.5979Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/VaultIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const VaultIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M12.0033 21C10.7587 21 9.58867 20.7638 8.493 20.2915C7.3975 19.8192 6.4445 19.1782 5.634 18.3685C4.8235 17.5588 4.18192 16.6067 3.70925 15.512C3.23642 14.4175 3 13.2479 3 12.0033C3 10.7587 3.23617 9.58867 3.7085 8.493C4.18083 7.3975 4.82183 6.4445 5.6315 5.634C6.44117 4.8235 7.39333 4.18192 8.488 3.70925C9.5825 3.23642 10.7521 3 11.9967 3C13.2413 3 14.4113 3.23617 15.507 3.7085C16.6025 4.18083 17.5555 4.82183 18.366 5.6315C19.1765 6.44117 19.8181 7.39333 20.2908 8.488C20.7636 9.5825 21 10.7521 21 11.9967C21 13.2413 20.7638 14.4113 20.2915 15.507C19.8192 16.6025 19.1782 17.5555 18.3685 18.366C17.5588 19.1765 16.6067 19.8181 15.512 20.2908C14.4175 20.7636 13.2479 21 12.0033 21ZM12 20C14.2333 20 16.125 19.225 17.675 17.675C19.225 16.125 20 14.2333 20 12C20 9.76667 19.225 7.875 17.675 6.325C16.125 4.775 14.2333 4 12 4C9.76667 4 7.875 4.775 6.325 6.325C4.775 7.875 4 9.76667 4 12C4 14.2333 4.775 16.125 6.325 17.675C7.875 19.225 9.76667 20 12 20Z\"\n        fill=${color}\n      />\n      <path\n        d=\"M12 12.75C13.2426 12.75 14.25 11.7426 14.25 10.5C14.25 9.25736 13.2426 8.25 12 8.25C10.7574 8.25 9.75 9.25736 9.75 10.5C9.75 11.7426 10.7574 12.75 12 12.75Z\"\n        stroke=${color}\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M12.0527 12.75V15.75\"\n        stroke=${color}\n        stroke-linecap=\"square\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/WifiIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const WifiIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M3.18645 10.8207L1.77295 9.4072C3.16528 8.10337 4.73903 7.10054 6.4942 6.3987C8.24937 5.6967 10.0846 5.3457 11.9999 5.3457C13.9153 5.3457 15.7505 5.6967 17.5057 6.3987C19.2609 7.10054 20.8346 8.10337 22.2269 9.4072L20.8134 10.8207C19.6148 9.6977 18.2571 8.83779 16.7404 8.24095C15.2238 7.64412 13.6436 7.3457 11.9999 7.3457C10.3563 7.3457 8.77612 7.64412 7.25945 8.24095C5.74278 8.83779 4.38512 9.6977 3.18645 10.8207ZM7.19995 14.7957L5.7922 13.388C6.63453 12.574 7.58812 11.95 8.65295 11.516C9.71762 11.082 10.8333 10.865 11.9999 10.865C13.1794 10.865 14.3079 11.0851 15.3854 11.5255C16.4631 11.966 17.4231 12.5996 18.2654 13.4265L16.8192 14.815C16.1705 14.1816 15.433 13.6983 14.6067 13.365C13.7804 13.0316 12.9114 12.865 11.9999 12.865C11.0884 12.865 10.2228 13.0316 9.40295 13.365C8.58295 13.6983 7.84862 14.1752 7.19995 14.7957ZM11.9999 19.6535L9.63845 17.292C9.94478 16.997 10.2999 16.7655 10.7037 16.5977C11.1075 16.4297 11.5396 16.3457 11.9999 16.3457C12.4603 16.3457 12.8924 16.4297 13.2962 16.5977C13.7 16.7655 14.0551 16.997 14.3615 17.292L11.9999 19.6535Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/WorldIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const WorldIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 24 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M12 21.5C10.7615 21.5 9.59483 21.2632 8.5 20.7895C7.40517 20.3157 6.45167 19.6727 5.6395 18.8605C4.82733 18.0483 4.18433 17.0948 3.7105 16C3.23683 14.9052 3 13.7385 3 12.5C3 11.2577 3.23683 10.09 3.7105 8.997C4.18433 7.90417 4.82733 6.95167 5.6395 6.1395C6.45167 5.32733 7.40517 4.68433 8.5 4.2105C9.59483 3.73683 10.7615 3.5 12 3.5C13.2423 3.5 14.41 3.73683 15.503 4.2105C16.5958 4.68433 17.5483 5.32733 18.3605 6.1395C19.1727 6.95167 19.8157 7.90417 20.2895 8.997C20.7632 10.09 21 11.2577 21 12.5C21 13.7385 20.7632 14.9052 20.2895 16C19.8157 17.0948 19.1727 18.0483 18.3605 18.8605C17.5483 19.6727 16.5958 20.3157 15.503 20.7895C14.41 21.2632 13.2423 21.5 12 21.5ZM12 20.5077C12.5872 19.7539 13.0712 19.0135 13.452 18.2865C13.8327 17.5597 14.1423 16.7463 14.3807 15.8463H9.61925C9.88342 16.7974 10.1994 17.6365 10.5673 18.3635C10.9353 19.0903 11.4128 19.8051 12 20.5077ZM10.727 20.3577C10.2603 19.8078 9.83433 19.1279 9.449 18.3182C9.06383 17.5086 8.777 16.6846 8.5885 15.8463H4.75375C5.32692 17.0898 6.13942 18.1096 7.19125 18.9057C8.24325 19.7019 9.42183 20.1859 10.727 20.3577ZM13.273 20.3577C14.5782 20.1859 15.7567 19.7019 16.8087 18.9057C17.8606 18.1096 18.6731 17.0898 19.2463 15.8463H15.4115C15.159 16.6974 14.8401 17.5278 14.4548 18.3375C14.0696 19.1472 13.6757 19.8206 13.273 20.3577ZM4.34625 14.8463H8.38075C8.30508 14.4359 8.25158 14.0362 8.22025 13.647C8.18875 13.258 8.173 12.8757 8.173 12.5C8.173 12.1243 8.18875 11.742 8.22025 11.353C8.25158 10.9638 8.30508 10.5641 8.38075 10.1538H4.34625C4.23725 10.4999 4.15225 10.8772 4.09125 11.2855C4.03042 11.6938 4 12.0987 4 12.5C4 12.9013 4.03042 13.3062 4.09125 13.7145C4.15225 14.1228 4.23725 14.5001 4.34625 14.8463ZM9.38075 14.8463H14.6193C14.6949 14.4359 14.7484 14.0426 14.7797 13.6663C14.8112 13.2901 14.827 12.9013 14.827 12.5C14.827 12.0987 14.8112 11.7099 14.7797 11.3337C14.7484 10.9574 14.6949 10.5641 14.6193 10.1538H9.38075C9.30508 10.5641 9.25158 10.9574 9.22025 11.3337C9.18875 11.7099 9.173 12.0987 9.173 12.5C9.173 12.9013 9.18875 13.2901 9.22025 13.6663C9.25158 14.0426 9.30508 14.4359 9.38075 14.8463ZM15.6193 14.8463H19.6538C19.7628 14.5001 19.8477 14.1228 19.9088 13.7145C19.9696 13.3062 20 12.9013 20 12.5C20 12.0987 19.9696 11.6938 19.9088 11.2855C19.8477 10.8772 19.7628 10.4999 19.6538 10.1538H15.6193C15.6949 10.5641 15.7484 10.9638 15.7797 11.353C15.8112 11.742 15.827 12.1243 15.827 12.5C15.827 12.8757 15.8112 13.258 15.7797 13.647C15.7484 14.0362 15.6949 14.4359 15.6193 14.8463ZM15.4115 9.15375H19.2463C18.6602 7.88458 17.8573 6.86475 16.8375 6.09425C15.8177 5.32375 14.6295 4.83333 13.273 4.623C13.7397 5.23717 14.1593 5.93942 14.5318 6.72975C14.9043 7.52025 15.1975 8.32825 15.4115 9.15375ZM9.61925 9.15375H14.3807C14.1166 8.21542 13.7909 7.36675 13.4038 6.60775C13.0166 5.84875 12.5487 5.14358 12 4.49225C11.4513 5.14358 10.9834 5.84875 10.5963 6.60775C10.2091 7.36675 9.88342 8.21542 9.61925 9.15375ZM4.75375 9.15375H8.5885C8.8025 8.32825 9.09575 7.52025 9.46825 6.72975C9.84075 5.93942 10.2603 5.23717 10.727 4.623C9.35767 4.83333 8.16633 5.32692 7.153 6.10375C6.1395 6.88075 5.33975 7.89742 4.75375 9.15375Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/XIcon/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const XIcon = (props) => {\n  const { width, height, color } = getIconProps(props)\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 25 25\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M6.66869 18.5935L5.96094 17.8858L11.5609 12.2858L5.96094 6.68578L6.66869 5.97803L12.2687 11.578L17.8687 5.97803L18.5764 6.68578L12.9764 12.2858L18.5764 17.8858L17.8687 18.5935L12.2687 12.9935L6.66869 18.5935Z\"\n        fill=${color}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/YellowErrorIcon/index.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { getIconProps } from '../../utils/getIconProps'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n */\nexport const YellowErrorIcon = (props) => {\n  const { width, height } = getIconProps({\n    ...props,\n    color: props.color || colors.errorYellow.dark\n  })\n\n  return html`\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=${width}\n      height=${height}\n      viewBox=\"0 0 20 19\"\n      fill=\"none\"\n    >\n      <path\n        d=\"M11.2328 1.25363C11.1166 1.02672 10.9399 0.836301 10.7224 0.70333C10.5049 0.57036 10.2549 0.5 9.99994 0.5C9.74499 0.5 9.49498 0.57036 9.27745 0.70333C9.05992 0.836301 8.88331 1.02672 8.76706 1.25363L1.14819 16.4914C1.04192 16.7023 0.991331 16.9368 1.00121 17.1727C1.0111 17.4087 1.08113 17.6381 1.20465 17.8394C1.32818 18.0406 1.5011 18.207 1.707 18.3226C1.91289 18.4382 2.14492 18.4993 2.38106 18.5H17.6188C17.8549 18.4993 18.087 18.4382 18.2929 18.3226C18.4988 18.207 18.6717 18.0406 18.7952 17.8394C18.9187 17.6381 18.9888 17.4087 18.9987 17.1727C19.0085 16.9368 18.958 16.7023 18.8517 16.4914L11.2328 1.25363Z\"\n        fill=${colors.errorYellow.mode1}\n        stroke=${colors.errorYellow.dark}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M11.2986 5.41748L11.0615 12.7429H8.94271L8.70558 5.41748H11.2986ZM9.9995 16.1246C9.63177 16.1246 9.31559 15.994 9.05097 15.7328C8.78978 15.4716 8.65918 15.1554 8.65918 14.7843C8.65918 14.42 8.78978 14.109 9.05097 13.8512C9.31559 13.59 9.63177 13.4594 9.9995 13.4594C10.3535 13.4594 10.6645 13.59 10.9326 13.8512C11.2041 14.109 11.3398 14.42 11.3398 14.7843C11.3398 15.0317 11.2762 15.2568 11.1491 15.4596C11.0254 15.6624 10.8621 15.8239 10.6594 15.9442C10.46 16.0645 10.2401 16.1246 9.9995 16.1246Z\"\n        fill=${colors.white.mode1}\n      />\n    </svg>\n  `\n}\n"
  },
  {
    "path": "src/lib-react-components/icons/icons.test.js",
    "content": "import fs from 'fs'\nimport path from 'path'\n\nimport React from 'react'\n\nimport { render } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nconst iconsDir = path.join(__dirname, '../icons')\n\nfunction getIconModules(dir) {\n  const modules = []\n  fs.readdirSync(dir).forEach((file) => {\n    const fullPath = path.join(dir, file)\n    const stat = fs.statSync(fullPath)\n    if (stat.isDirectory()) {\n      const indexPath = path.join(fullPath, 'index.js')\n      if (fs.existsSync(indexPath)) {\n        modules.push(indexPath)\n      } else {\n        modules.push(...getIconModules(fullPath))\n      }\n    }\n  })\n  return modules\n}\n\nconst iconModulePaths = getIconModules(iconsDir)\nconst icons = []\n\niconModulePaths.forEach((modulePath) => {\n  const moduleExports = require(modulePath)\n\n  Object.keys(moduleExports).forEach((exportName) => {\n    if (exportName !== '__esModule') {\n      icons.push({ name: exportName, Component: moduleExports[exportName] })\n    }\n  })\n})\n\nconst originalConsoleError = console.error // eslint-disable-line no-console\n\nbeforeEach(() => {\n  jest.spyOn(console, 'error').mockImplementation((message, ...args) => {\n    if (\n      typeof message === 'string' &&\n      message.includes('Each child in a list should have a unique \"key\" prop')\n    ) {\n      return\n    }\n    originalConsoleError(message, ...args)\n  })\n})\n\nafterEach(() => {\n  console.error.mockRestore() // eslint-disable-line no-console\n})\n\ndescribe('Icon Components', () => {\n  icons.forEach(({ name, Component }, index) => {\n    test(`${name} renders correctly`, () => {\n      const { container } = render(\n        <Component key={index} size=\"24px\" color=\"#000\" />\n      )\n\n      const svg = container.querySelector('svg')\n\n      expect(svg).toBeInTheDocument()\n      expect(svg.getAttribute('width')).toBe('24px')\n      expect(svg.getAttribute('height')).toBe('24px')\n\n      const elements = container.querySelectorAll('path, rect')\n\n      expect(elements.length).toBeGreaterThan(0)\n\n      const appliedColors = Array.from(elements).map(\n        (el) => el.getAttribute('stroke') || el.getAttribute('fill')\n      )\n\n      if (!['OkayIcon', 'YellowErrorIcon', 'ErrorIcon'].includes(name)) {\n        expect(appliedColors).toContain('#000')\n      }\n\n      expect(container.firstChild).toMatchSnapshot()\n    })\n  })\n})\n"
  },
  {
    "path": "src/lib-react-components/illustrations/AuthenticatorIllustration/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * @param {{\n *  width?: string;\n *  height?: string;\n * }} props\n */\nexport const AuthenticatorIllustration = ({\n  width = '300',\n  height = '190'\n}) => html`\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=${width}\n    height=${height}\n    viewBox=\"0 0 300 190\"\n    fill=\"none\"\n  >\n    <defs>\n      <linearGradient id=\"authIllCardBg\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n        <stop offset=\"0%\" stop-color=\"#212814\" />\n        <stop offset=\"50%\" stop-color=\"#15180e\" />\n      </linearGradient>\n      <linearGradient id=\"authIllFade\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n        <stop offset=\"47%\" stop-color=\"#15180e\" stop-opacity=\"0\" />\n        <stop offset=\"100%\" stop-color=\"#15180e\" />\n      </linearGradient>\n      <clipPath id=\"authIllClip\">\n        <rect width=\"300\" height=\"190\" rx=\"10\" />\n      </clipPath>\n    </defs>\n    <g clip-path=\"url(#authIllClip)\">\n      <rect\n        x=\"44\"\n        y=\"9\"\n        width=\"212\"\n        height=\"300\"\n        rx=\"25\"\n        fill=\"url(#authIllCardBg)\"\n      />\n\n      <rect x=\"52\" y=\"46\" width=\"196\" height=\"37\" rx=\"5\" fill=\"#2c3618\" />\n      <rect x=\"60\" y=\"54\" width=\"21\" height=\"21\" rx=\"5\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"55\" width=\"76\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"66\" width=\"51\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n\n      <rect x=\"52\" y=\"88\" width=\"196\" height=\"37\" rx=\"5\" fill=\"#2c3618\" />\n      <rect x=\"60\" y=\"96\" width=\"21\" height=\"21\" rx=\"5\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"97\" width=\"66\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"108\" width=\"60\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n\n      <rect x=\"52\" y=\"130\" width=\"196\" height=\"37\" rx=\"5\" fill=\"#2c3618\" />\n      <rect x=\"60\" y=\"138\" width=\"21\" height=\"21\" rx=\"5\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"139\" width=\"88\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"150\" width=\"74\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n\n      <rect x=\"52\" y=\"172\" width=\"196\" height=\"37\" rx=\"5\" fill=\"#2c3618\" />\n      <rect x=\"60\" y=\"180\" width=\"21\" height=\"21\" rx=\"5\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"181\" width=\"76\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n      <rect x=\"89\" y=\"192\" width=\"51\" height=\"9\" rx=\"4\" fill=\"#37431d\" />\n\n      <rect width=\"300\" height=\"190\" fill=\"url(#authIllFade)\" />\n    </g>\n  </svg>\n`\n"
  },
  {
    "path": "src/lib-react-components/index.js",
    "content": "export { ButtonLittle } from './components/ButtonLittle'\nexport { ButtonPrimary } from './components/ButtonPrimary'\nexport { ButtonFolder } from './components/ButtonFolder'\nexport { ButtonSecondary } from './components/ButtonSecondary'\nexport { ButtonSingleInput } from './components/ButtonSingleInput'\nexport { ButtonThin } from './components/ButtonThin'\nexport { ButtonFilter } from './components/ButtonFilter'\nexport { ButtonCreate } from './components/ButtonCreate'\nexport { ButtonRadio } from './components/ButtonRadio'\nexport { ButtonRoundIcon } from './components/ButtonRoundIcon'\nexport { CompoundField } from './components/CompoundField'\nexport { InputField } from './components/InputField'\nexport { TextArea } from './components/TextArea'\n\nexport { NoticeText } from './components/NoticeText'\nexport { PasswordField } from './components/PasswordField'\nexport { PearPassPasswordField } from './components/PearPassPasswordField'\nexport { PearPassInputField } from './components/PearPassInputField'\nexport { PearPassPasswordFieldV2 } from './components/PearPassPasswordFieldV2'\nexport { Slider } from './components/Slider'\nexport { Switch } from './components/Switch'\nexport { HighlightString } from './components/HighlightString'\n\nexport { getIconProps } from './utils/getIconProps'\nexport { ArrowDownIcon } from './icons/ArrowDownIcon'\nexport { ArrowUpIcon } from './icons/ArrowUpIcon'\nexport { BrushIcon } from './icons/BrushIcon'\nexport { CommonFileIcon } from './icons/CommonFileIcon'\nexport { CreditCardIcon } from './icons/CreditCardIcon'\nexport { ErrorIcon } from './icons/ErrorIcon'\nexport { EyeClosedIcon } from './icons/EyeClosedIcon'\nexport { ExitIcon } from './icons/ExitIcon'\nexport { EyeIcon } from './icons/EyeIcon'\nexport { FolderIcon } from './icons/FolderIcon'\nexport { FullBodyIcon } from './icons/FullBodyIcon'\nexport { KebabMenuIcon } from './icons/KebabMenuIcon'\nexport { KeyIcon } from './icons/KeyIcon'\nexport { LockIcon } from './icons/LockIcon'\nexport { LockCircleIcon } from './icons/LockCircleIcon'\nexport { OkayIcon } from './icons/OkayIcon'\nexport { PlusIcon } from './icons/PlusIcon'\nexport { SearchIcon } from './icons/SearchIcon'\nexport { SettingsIcon } from './icons/SettingsIcon'\nexport { ShareIcon } from './icons/ShareIcon'\nexport { StarIcon } from './icons/StarIcon'\nexport { UserIcon } from './icons/UserIcon'\nexport { UserSecurityIcon } from './icons/UserSecurityIcon'\nexport { WorldIcon } from './icons/WorldIcon'\nexport { XIcon } from './icons/XIcon'\nexport { YellowErrorIcon } from './icons/YellowErrorIcon'\nexport { SaveIcon } from './icons/SaveIcon'\nexport { PasswordIcon } from './icons/PasswordIcon'\nexport { NewFolderIcon } from './icons/NewFolderIcon'\nexport { EmailIcon } from './icons/EmailIcon'\nexport { CalendarIcon } from './icons/CalendarIcon'\nexport { ComputerIcon } from './icons/ComputerIcon'\nexport { ImageIcon } from './icons/ImageIcon'\nexport { NineDotsIcon } from './icons/NineDotsIcon'\nexport { PhoneIcon } from './icons/PhoneIcon'\nexport { DeleteIcon } from './icons/DeleteIcon'\nexport { GroupIcon } from './icons/GroupIcon'\nexport { CheckIcon } from './icons/CheckIcon'\nexport { CopyIcon } from './icons/CopyIcon'\nexport { TimeIcon } from './icons/TimeIcon'\nexport { ArrowUpAndDown } from './icons/ArrowUpAndDown'\nexport { PinIcon } from './icons/PinIcon'\nexport { MoveToIcon } from './icons/MoveToIcon'\nexport { MultiSelectionIcon } from './icons/MultiSelectionIcon'\nexport { ArrowLeftIcon } from './icons/ArrowLeftIcon'\nexport { ArrowRightIcon } from './icons/ArrowRightIcon'\nexport { CollapseIcon } from './icons/CollapseIcon'\nexport { GenderIcon } from './icons/GenderIcon'\nexport { NationalityIcon } from './icons/NationalityIcon'\nexport { NoteIcon } from './icons/NoteIcon'\nexport { BackIcon } from './icons/BackIcon'\nexport { PassPhraseIcon } from './icons/PassPhraseIcon'\nexport { CubeIcon } from './icons/CubeIcon'\nexport { PasteIcon } from './icons/PasteIcon'\nexport { InfoIcon } from './icons/InfoIcon'\nexport { SmallArrowIcon } from './icons/SmallArrowIcon'\nexport { AboutIcon } from './icons/AboutIcon'\nexport { AppearanceIcon } from './icons/AppearanceIcon'\nexport { AutoFillIcon } from './icons/AutoFillIcon'\nexport { SecurityIcon } from './icons/SecurityIcon'\nexport { SyncingIcon } from './icons/SyncingIcon'\nexport { VaultIcon } from './icons/VaultIcon'\n\nexport { AuthenticatorIllustration } from './illustrations/AuthenticatorIllustration'\n"
  },
  {
    "path": "src/lib-react-components/utils/getIconProps.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\n/**\n * @param {{\n *  size?: string;\n *  width?: string;\n *  height?: string;\n *  color?: string;\n * }} props\n *\n * @returns {{\n *  size: string;\n *  height: string;\n *  width: string;\n *  color: string;\n * }}\n */\nexport const getIconProps = ({\n  size = '24',\n  height,\n  width,\n  color = colors.white.mode1,\n  fill = false\n}) => ({\n  size: size,\n  height: height || size,\n  width: width || size,\n  color: color,\n  fill\n})\n"
  },
  {
    "path": "src/lib-react-components/utils/getIconProps.test.js",
    "content": "import { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { getIconProps } from './getIconProps'\n\njest.mock('@tetherto/pearpass-lib-ui-theme-provider', () => ({\n  colors: {\n    white: {\n      mode1: '#FFFFFF'\n    }\n  }\n}))\n\ndescribe('getIconProps', () => {\n  it('should return default values when no props are provided', () => {\n    const result = getIconProps({})\n\n    expect(result).toEqual({\n      fill: false,\n      size: '24',\n      height: '24',\n      width: '24',\n      color: colors.white.mode1\n    })\n  })\n\n  it('should use custom size for all dimensions when only size is provided', () => {\n    const result = getIconProps({ size: '24' })\n\n    expect(result).toEqual({\n      fill: false,\n      size: '24',\n      height: '24',\n      width: '24',\n      color: colors.white.mode1\n    })\n  })\n\n  it('should use custom height when provided', () => {\n    const result = getIconProps({ height: '32' })\n\n    expect(result).toEqual({\n      fill: false,\n      size: '24',\n      height: '32',\n      width: '24',\n      color: colors.white.mode1\n    })\n  })\n\n  it('should use custom width when provided', () => {\n    const result = getIconProps({ width: '32' })\n\n    expect(result).toEqual({\n      fill: false,\n      size: '24',\n      height: '24',\n      width: '32',\n      color: colors.white.mode1\n    })\n  })\n\n  it('should use custom color when provided', () => {\n    const result = getIconProps({ color: '#000000' })\n\n    expect(result).toEqual({\n      fill: false,\n      size: '24',\n      height: '24',\n      width: '24',\n      color: '#000000'\n    })\n  })\n\n  it('should handle all custom props together', () => {\n    const result = getIconProps({\n      fill: false,\n      size: '24',\n      height: '32',\n      width: '48',\n      color: '#FF0000'\n    })\n\n    expect(result).toEqual({\n      fill: false,\n      size: '24',\n      height: '32',\n      width: '48',\n      color: '#FF0000'\n    })\n  })\n})\n"
  },
  {
    "path": "src/pages/AuthenticatorView/index.js",
    "content": "import { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport {\n  Breadcrumb,\n  Button,\n  ContextMenu,\n  ListItem,\n  NavbarListItem,\n  Text,\n  Title,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  Add,\n  CalendarToday,\n  Check,\n  Checklist,\n  ContentCopy,\n  FilterList,\n  ImportExport,\n  SortByAlpha\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport {\n  formatOtpCode,\n  groupOtpRecords,\n  isExpiring,\n  RECORD_TYPES,\n  useFolders,\n  useRecords\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { createStyles } from './styles'\nimport { RecordItemIcon } from '../../components/RecordItemIcon'\nimport { TimerCircle } from '../../components/TimerCircle'\nimport { SORT_BY_TYPE, SORT_KEYS } from '../../constants/sortOptions'\nimport {\n  ILLUSTRATION_HEIGHT,\n  createStyles as createEmptyStateStyles\n} from '../../containers/EmptyCollectionViewV2/EmptyCollectionViewV2.styles'\nimport { EmptyResultsViewV2 } from '../../containers/EmptyResultsViewV2'\nimport { DeleteRecordsModalContentV2 } from '../../containers/Modal/DeleteRecordsModalContentV2'\nimport { MoveFolderModalContentV2 } from '../../containers/Modal/MoveFolderModalContentV2/MoveFolderModalContentV2'\nimport { MultiSelectActionsBar } from '../../containers/MultiSelectActionsBar'\nimport { createStyles as createListStyles } from '../../containers/RecordListView/RecordListViewV2.styles'\nimport { useAppHeaderContext } from '../../context/AppHeaderContext'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { useCopyToClipboard } from '../../hooks/useCopyToClipboard.electron'\nimport { useCreateOrEditRecord } from '../../hooks/useCreateOrEditRecord'\nimport { SettingsItemKey } from '../../pages/SettingsViewV2/SettingsViewV2'\nimport { ItemCardIllustration } from '../../svgs/ItemCardIllustration'\nimport { getRecordSubtitle } from '../../utils/getRecordSubtitle'\n\nconst SORT_MENU_WIDTH = 260\n\nexport const AuthenticatorView = () => {\n  const { i18n } = useLingui()\n  const { theme } = useTheme()\n  const { navigate, data: routeData } = useRouter()\n  const { setModal, isOpen: isModalOpen } = useModal()\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n  const { searchValue } = useAppHeaderContext()\n  const { copyToClipboard } = useCopyToClipboard()\n  const styles = createStyles(theme.colors)\n  const emptyStateStyles = createEmptyStateStyles()\n  const listStyles = createListStyles(theme.colors)\n\n  const [sortKey, setSortKey] = useState(SORT_KEYS.LAST_UPDATED_NEWEST)\n  const [isSortOpen, setIsSortOpen] = useState(false)\n  const [isMultiSelectOn, setIsMultiSelectOn] = useState(false)\n  const [selectedRecords, setSelectedRecords] = useState([])\n\n  const sort = useMemo(() => SORT_BY_TYPE[sortKey], [sortKey])\n\n  const { data: records, updateFavoriteState } = useRecords({\n    shouldSkip: true,\n    variables: {\n      filters: {\n        hasOtp: true,\n        searchPattern: searchValue\n      },\n      sort\n    }\n  })\n\n  const otpRecords = useMemo(\n    () => (records || []).filter((r) => r.otpPublic),\n    [records]\n  )\n\n  const { totpGroups, hotpRecords } = useMemo(\n    () => groupOtpRecords(otpRecords),\n    [otpRecords]\n  )\n\n  const selectedRecordsSet = useMemo(\n    () => new Set(selectedRecords),\n    [selectedRecords]\n  )\n\n  const selectedRecordObjects = useMemo(() => {\n    if (!records?.length || !selectedRecords.length) return []\n    const ids = new Set(selectedRecords)\n    return records.filter((r) => ids.has(r.id))\n  }, [records, selectedRecords])\n\n  const selectedCount = selectedRecordObjects.length\n  const allSelectedFavorited =\n    selectedCount > 0 && selectedRecordObjects.every((r) => !!r.isFavorite)\n\n  const { data: foldersData } = useFolders()\n  const hasCustomFolders =\n    Object.keys(foldersData?.customFolders ?? {}).length > 0\n\n  useEffect(() => {\n    if (!isMultiSelectOn) setSelectedRecords([])\n  }, [isMultiSelectOn])\n\n  useEffect(() => {\n    setIsMultiSelectOn(false)\n  }, [searchValue])\n\n  const exitMultiSelect = useCallback(() => {\n    setSelectedRecords([])\n    setIsMultiSelectOn(false)\n  }, [])\n\n  useEffect(() => {\n    if (!isMultiSelectOn || isModalOpen) return\n    const handler = (event) => {\n      if (event.key === 'Escape') exitMultiSelect()\n    }\n    window.addEventListener('keydown', handler)\n    return () => window.removeEventListener('keydown', handler)\n  }, [isMultiSelectOn, isModalOpen, exitMultiSelect])\n\n  const handleRecordPress = useCallback(\n    (record) => {\n      if (isMultiSelectOn) {\n        setSelectedRecords((prev) =>\n          prev.includes(record.id)\n            ? prev.filter((id) => id !== record.id)\n            : [...prev, record.id]\n        )\n        return\n      }\n      const isAlreadyOpen = routeData?.recordId === record.id\n      navigate('vault', {\n        recordId: isAlreadyOpen ? '' : record.id,\n        recordType: RECORD_TYPES.OTP\n      })\n    },\n    [isMultiSelectOn, navigate, routeData?.recordId]\n  )\n\n  const handleMove = () => {\n    if (!selectedCount) return\n    setModal(\n      html`<${MoveFolderModalContentV2}\n        records=${selectedRecordObjects}\n        onCompleted=${exitMultiSelect}\n      />`\n    )\n  }\n\n  const handleDelete = () => {\n    if (!selectedCount) return\n    setModal(\n      html`<${DeleteRecordsModalContentV2}\n        records=${selectedRecordObjects}\n        onCompleted=${exitMultiSelect}\n      />`\n    )\n  }\n\n  const handleToggleFavorite = async () => {\n    if (!selectedCount) return\n    await updateFavoriteState(selectedRecords, !allSelectedFavorited)\n    exitMultiSelect()\n  }\n\n  const sortOptions = useMemo(\n    () => [\n      {\n        key: SORT_KEYS.TITLE_AZ,\n        label: i18n._('Title (A-Z)'),\n        Icon: SortByAlpha\n      },\n      {\n        key: SORT_KEYS.LAST_UPDATED_NEWEST,\n        label: i18n._('Last Updated (Newest first)'),\n        Icon: CalendarToday\n      },\n      {\n        key: SORT_KEYS.LAST_UPDATED_OLDEST,\n        label: i18n._('Last Updated (Oldest first)'),\n        Icon: CalendarToday\n      },\n      {\n        key: SORT_KEYS.DATE_ADDED_NEWEST,\n        label: i18n._('Date Added (Newest first)'),\n        Icon: CalendarToday\n      },\n      {\n        key: SORT_KEYS.DATE_ADDED_OLDEST,\n        label: i18n._('Date Added (Oldest first)'),\n        Icon: CalendarToday\n      }\n    ],\n    [i18n]\n  )\n\n  const handleSelectSort = (key) => {\n    setSortKey(key)\n    setIsSortOpen(false)\n  }\n\n  const iconColor = theme.colors.colorTextPrimary\n\n  const renderRecordRow = (record) => {\n    const code = record.otpPublic?.currentCode ?? null\n    const isSelected = selectedRecordsSet.has(record.id)\n    return html`\n      <${ListItem}\n        key=${record.id}\n        icon=${html`<${RecordItemIcon} record=${record} />`}\n        iconSize=${32}\n        title=${record.data?.title ?? ''}\n        subtitle=${getRecordSubtitle(record) || undefined}\n        selectionMode=${isMultiSelectOn ? 'multi' : 'none'}\n        isSelected=${isSelected}\n        onSelect=${() => handleRecordPress(record)}\n        onClick=${() => handleRecordPress(record)}\n        testID=${`authenticator-record-item-${record.id}`}\n        style=${listStyles.recordRow}\n        rightElement=${!isMultiSelectOn\n          ? html`\n              <div style=${listStyles.rowRightElement}>\n                <${Text} variant=\"labelEmphasized\"> ${formatOtpCode(code)} <//>\n                <${Button}\n                  variant=\"tertiary\"\n                  size=\"small\"\n                  data-testid=${`authenticator-record-copy-${record.id}`}\n                  aria-label=${i18n._('Copy code')}\n                  iconBefore=${html`<${ContentCopy} color=${iconColor} />`}\n                  onClick=${(event) => {\n                    event.stopPropagation()\n                    if (code) copyToClipboard(code)\n                  }}\n                />\n              </div>\n            `\n          : undefined}\n      />\n    `\n  }\n\n  return html`\n    <div style=${styles.wrapper}>\n      <div style=${styles.headerContainer}>\n        <div style=${styles.breadcrumbWrapper}>\n          <${Breadcrumb}\n            items=${[i18n._('Authenticator')]}\n            actions=${html`\n              <div style=${styles.headerActions}>\n                <${Button}\n                  variant=\"tertiary\"\n                  size=\"small\"\n                  data-testid=\"authenticator-header-multi-select\"\n                  aria-label=${isMultiSelectOn\n                    ? i18n._('Exit multi-select')\n                    : i18n._('Toggle multi-select')}\n                  aria-pressed=${isMultiSelectOn}\n                  onClick=${() => setIsMultiSelectOn(!isMultiSelectOn)}\n                  iconBefore=${html`<${Checklist} color=${iconColor} />`}\n                />\n                <${ContextMenu}\n                  open=${isSortOpen}\n                  onOpenChange=${setIsSortOpen}\n                  menuWidth=${SORT_MENU_WIDTH}\n                  testID=\"authenticator-sort-menu\"\n                  trigger=${html`\n                    <${Button}\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      data-testid=\"authenticator-header-sort\"\n                      aria-label=${i18n._('Sort items')}\n                      iconBefore=${html`<${FilterList} color=${iconColor} />`}\n                    />\n                  `}\n                >\n                  ${sortOptions.map(\n                    ({ key, label, Icon }) => html`\n                      <${NavbarListItem}\n                        key=${key}\n                        size=\"small\"\n                        label=${label}\n                        icon=${html`<${Icon} color=${iconColor} />`}\n                        additionalItems=${sortKey === key\n                          ? html`<${Check} color=${iconColor} />`\n                          : undefined}\n                        onClick=${() => handleSelectSort(key)}\n                      />\n                    `\n                  )}\n                <//>\n              </div>\n            `}\n          />\n        </div>\n      </div>\n\n      ${isMultiSelectOn &&\n      html`<${MultiSelectActionsBar}\n        selectedCount=${selectedCount}\n        allSelectedFavorited=${allSelectedFavorited}\n        canMove=${hasCustomFolders}\n        onMove=${handleMove}\n        onToggleFavorite=${handleToggleFavorite}\n        onDelete=${handleDelete}\n      />`}\n      ${otpRecords.length === 0 && !!searchValue\n        ? html`<${EmptyResultsViewV2} />`\n        : otpRecords.length === 0\n          ? html`\n              <div\n                style=${emptyStateStyles.container}\n                data-testid=\"authenticator-empty-state\"\n              >\n                <div style=${emptyStateStyles.content}>\n                  <div style=${emptyStateStyles.illustration}>\n                    <${ItemCardIllustration}\n                      width=${null}\n                      height=${ILLUSTRATION_HEIGHT}\n                    />\n                  </div>\n\n                  <div style=${emptyStateStyles.textBlock}>\n                    <${Title} as=\"h2\">${i18n._('No codes saved')}<//>\n                    <${Text}\n                      as=\"p\"\n                      variant=\"label\"\n                      color=${theme.colors.colorTextSecondary}\n                      style=${emptyStateStyles.descriptionParagraph}\n                    >\n                      ${i18n._(\n                        'Save your first authenticator code or import your codes from another authenticator app.'\n                      )}\n                    <//>\n                  </div>\n\n                  <div style=${emptyStateStyles.ctas}>\n                    <div style=${emptyStateStyles.ctaButton}>\n                      <${Button}\n                        variant=\"primary\"\n                        size=\"small\"\n                        fullWidth\n                        data-testid=\"authenticator-empty-add-code\"\n                        iconBefore=${html`<${Add} width=${16} height=${16} />`}\n                        onClick=${() =>\n                          handleCreateOrEditRecord({\n                            recordType: RECORD_TYPES.OTP\n                          })}\n                      >\n                        ${i18n._('Add Code')}\n                      <//>\n                    </div>\n                    <div style=${emptyStateStyles.ctaButton}>\n                      <${Button}\n                        variant=\"secondary\"\n                        size=\"small\"\n                        fullWidth\n                        data-testid=\"authenticator-empty-import-codes\"\n                        iconBefore=${html`<${ImportExport}\n                          width=${16}\n                          height=${16}\n                          color=${iconColor}\n                        />`}\n                        onClick=${() =>\n                          navigate('settings', {\n                            initialTab: SettingsItemKey.ImportItems\n                          })}\n                      >\n                        ${i18n._('Import Codes')}\n                      <//>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            `\n          : html`\n              <div style=${listStyles.wrapper}>\n                <div\n                  style=${listStyles.scrollArea}\n                  data-testid=\"authenticator-record-list\"\n                >\n                  ${totpGroups.map(\n                    ({ period, records: groupRecords }, groupIndex) => {\n                      const timeRemaining =\n                        groupRecords[0]?.otpPublic?.timeRemaining ?? null\n                      const expiring = isExpiring(timeRemaining)\n                      const timerColor = expiring\n                        ? theme.colors.colorTextDestructive\n                        : theme.colors.colorPrimary\n                      const isLastTotpGroup =\n                        groupIndex === totpGroups.length - 1\n                      const hasNext = !isLastTotpGroup || hotpRecords.length > 0\n\n                      return html`\n                        <div key=${period} style=${listStyles.section}>\n                          <div style=${listStyles.staticSectionHeader}>\n                            <${TimerCircle}\n                              timeRemaining=${timeRemaining}\n                              period=${period}\n                            />\n                            <span>\n                              ${i18n._('Codes expiring in')}${' '}\n                              <strong\n                                style=${{ color: timerColor, fontWeight: 600 }}\n                              >\n                                ${timeRemaining !== null\n                                  ? `${timeRemaining}s`\n                                  : `${period}s`}\n                              </strong>\n                            </span>\n                          </div>\n                          <div style=${listStyles.sectionList}>\n                            ${groupRecords.map((record) =>\n                              renderRecordRow(record)\n                            )}\n                          </div>\n                        </div>\n                        ${hasNext && html`<div style=${listStyles.divider} />`}\n                      `\n                    }\n                  )}\n                  ${hotpRecords.length > 0 &&\n                  html`\n                    <div style=${listStyles.section}>\n                      <div style=${listStyles.staticSectionHeader}>\n                        <span>${i18n._('Counter-based')}</span>\n                      </div>\n                      <div style=${listStyles.sectionList}>\n                        ${hotpRecords.map((record) => renderRecordRow(record))}\n                      </div>\n                    </div>\n                  `}\n                </div>\n              </div>\n            `}\n    </div>\n  `\n}\n"
  },
  {
    "path": "src/pages/AuthenticatorView/index.test.js",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\nlet mockSearchValue = ''\nlet mockRecords = []\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useRecords: () => ({\n    data: mockRecords,\n    updateFavoriteState: jest.fn()\n  }),\n  useFolders: () => ({ data: { customFolders: {} } }),\n  formatOtpCode: (code) => (code ? code : ''),\n  groupOtpRecords: (records) => {\n    const totpGroups = []\n    const hotpRecords = []\n    const totpRecords = records.filter(\n      (r) => r.otpPublic?.type === 'TOTP' || !r.otpPublic?.type\n    )\n    if (totpRecords.length) {\n      totpGroups.push({\n        period: 30,\n        records: totpRecords\n      })\n    }\n    return { totpGroups, hotpRecords }\n  },\n  isExpiring: () => false,\n  OTP_TYPE: { TOTP: 'TOTP', HOTP: 'HOTP' },\n  useTimerAnimation: () => ({\n    noTransition: false,\n    expiring: false,\n    targetTime: 30\n  }),\n  useOtp: () => ({\n    code: '',\n    timeRemaining: null,\n    type: 'TOTP',\n    period: 30,\n    generateNext: null,\n    isLoading: false\n  })\n}))\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({ i18n: { _: (msg) => msg } })\n}))\n\njest.mock('../../context/AppHeaderContext', () => ({\n  useAppHeaderContext: () => ({\n    searchValue: mockSearchValue,\n    setSearchValue: jest.fn(),\n    isAddMenuOpen: false,\n    setIsAddMenuOpen: jest.fn()\n  })\n}))\n\njest.mock('../../context/RouterContext', () => ({\n  useRouter: () => ({\n    navigate: jest.fn(),\n    data: {}\n  })\n}))\n\njest.mock('../../context/ModalContext', () => ({\n  useModal: () => ({ setModal: jest.fn(), isOpen: false })\n}))\n\njest.mock('../../hooks/useCreateOrEditRecord', () => ({\n  useCreateOrEditRecord: () => ({ handleCreateOrEditRecord: jest.fn() })\n}))\n\njest.mock('../../hooks/useCopyToClipboard.electron', () => ({\n  useCopyToClipboard: () => ({ copyToClipboard: jest.fn() })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => {\n  const ReactInner = require('react')\n  return {\n    Breadcrumb: ({ items, actions }) =>\n      ReactInner.createElement(\n        'div',\n        { 'data-testid': 'breadcrumb' },\n        items.map((item, i) =>\n          ReactInner.createElement(\n            'span',\n            { key: i, 'data-testid': `breadcrumb-item-${i}` },\n            item\n          )\n        ),\n        actions\n      ),\n    Button: ({\n      children,\n      onClick,\n      'data-testid': testId,\n      'aria-label': ariaLabel,\n      'aria-pressed': ariaPressed,\n      iconBefore\n    }) =>\n      ReactInner.createElement(\n        'button',\n        {\n          type: 'button',\n          'data-testid': testId,\n          'aria-label': ariaLabel,\n          'aria-pressed': ariaPressed,\n          onClick\n        },\n        iconBefore,\n        children\n      ),\n    ContextMenu: ({ trigger, children, open }) =>\n      ReactInner.createElement(\n        'div',\n        { 'data-testid': 'context-menu' },\n        trigger,\n        open ? children : null\n      ),\n    ListItem: ({ title, onClick, testID, rightElement }) =>\n      ReactInner.createElement(\n        'div',\n        { 'data-testid': testID, onClick },\n        ReactInner.createElement('span', null, title),\n        rightElement\n      ),\n    NavbarListItem: ({ label, onClick, testID }) =>\n      ReactInner.createElement(\n        'button',\n        { type: 'button', 'data-testid': testID, onClick },\n        label\n      ),\n    Text: ({ children }) => ReactInner.createElement('span', null, children),\n    Title: ({ children }) => ReactInner.createElement('h2', null, children),\n    useTheme: () => ({\n      theme: {\n        colors: {\n          colorTextPrimary: '#fff',\n          colorTextSecondary: '#aaa',\n          colorTextDestructive: '#f00',\n          colorPrimary: '#0f0',\n          colorBorderPrimary: '#333',\n          colorSurfacePrimary: '#000'\n        }\n      }\n    }),\n    rawTokens: new Proxy({}, { get: () => 0 })\n  }\n})\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => {\n  const ReactInner = require('react')\n  const Stub = () => ReactInner.createElement('span')\n  return {\n    Add: Stub,\n    CalendarToday: Stub,\n    Check: Stub,\n    Checklist: Stub,\n    ContentCopy: Stub,\n    FilterList: Stub,\n    ImportExport: Stub,\n    SortByAlpha: Stub\n  }\n})\n\njest.mock('../../components/RecordItemIcon', () => ({\n  RecordItemIcon: () => null\n}))\n\njest.mock('../../components/TimerCircle', () => ({\n  TimerCircle: () => null\n}))\n\njest.mock(\n  '../../containers/EmptyCollectionViewV2/EmptyCollectionViewV2.styles',\n  () => ({\n    ILLUSTRATION_HEIGHT: 100,\n    createStyles: () => ({\n      container: {},\n      content: {},\n      illustration: {},\n      textBlock: {},\n      descriptionParagraph: {},\n      ctas: {},\n      ctaButton: {}\n    })\n  })\n)\n\njest.mock('../../containers/RecordListView/RecordListViewV2.styles', () => ({\n  createStyles: () => ({\n    wrapper: {},\n    scrollArea: {},\n    section: {},\n    sectionList: {},\n    sectionHeader: {},\n    staticSectionHeader: {},\n    recordRow: {},\n    divider: {},\n    rowRightElement: {}\n  })\n}))\n\njest.mock('../../containers/EmptyResultsViewV2', () => ({\n  EmptyResultsViewV2: () => (\n    <div data-testid=\"empty-results-v2\">No result found.</div>\n  )\n}))\n\njest.mock(\n  '../../containers/Modal/MoveFolderModalContentV2/MoveFolderModalContentV2',\n  () => ({\n    MoveFolderModalContentV2: () => null\n  })\n)\n\njest.mock('../../containers/Modal/DeleteRecordsModalContentV2', () => ({\n  DeleteRecordsModalContentV2: () => null\n}))\n\njest.mock('../../containers/MultiSelectActionsBar', () => ({\n  MultiSelectActionsBar: () => <div data-testid=\"multi-select-actions-bar\" />\n}))\n\njest.mock('../../pages/SettingsViewV2/SettingsViewV2', () => ({\n  SettingsItemKey: { ImportItems: 'ImportItems' }\n}))\n\njest.mock('../../svgs/ItemCardIllustration', () => ({\n  ItemCardIllustration: () => null\n}))\n\njest.mock('../../utils/getRecordSubtitle', () => ({\n  getRecordSubtitle: () => ''\n}))\n\nimport { AuthenticatorView } from './index'\n\ndescribe('AuthenticatorView', () => {\n  beforeEach(() => {\n    mockSearchValue = ''\n    mockRecords = []\n  })\n\n  test('renders empty state with Add/Import buttons when no records and no search', () => {\n    render(<AuthenticatorView />)\n\n    expect(screen.getByText('No codes saved')).toBeInTheDocument()\n    expect(screen.getByTestId('authenticator-empty-state')).toBeInTheDocument()\n    expect(\n      screen.getByTestId('authenticator-empty-add-code')\n    ).toBeInTheDocument()\n    expect(\n      screen.getByTestId('authenticator-empty-import-codes')\n    ).toBeInTheDocument()\n  })\n\n  test('renders EmptyResultsViewV2 when search has no results', () => {\n    mockSearchValue = 'no-match'\n\n    render(<AuthenticatorView />)\n\n    expect(screen.getByTestId('empty-results-v2')).toBeInTheDocument()\n    expect(screen.queryByText('No codes saved')).not.toBeInTheDocument()\n  })\n\n  test('renders authenticator record list when records exist', () => {\n    mockRecords = [\n      {\n        id: 'rec-1',\n        data: { title: 'Test Account' },\n        otpPublic: {\n          type: 'TOTP',\n          digits: 6,\n          period: 30,\n          currentCode: '123456',\n          timeRemaining: 20\n        }\n      }\n    ]\n\n    render(<AuthenticatorView />)\n\n    expect(screen.getByTestId('authenticator-record-list')).toBeInTheDocument()\n    expect(\n      screen.getByTestId('authenticator-record-item-rec-1')\n    ).toBeInTheDocument()\n    expect(screen.getByText('Test Account')).toBeInTheDocument()\n  })\n\n  test('multi-select button toggles aria-pressed', () => {\n    render(<AuthenticatorView />)\n\n    const button = screen.getByTestId('authenticator-header-multi-select')\n    expect(button).toHaveAttribute('aria-pressed', 'false')\n\n    fireEvent.click(button)\n    expect(button).toHaveAttribute('aria-pressed', 'true')\n  })\n\n  test('shows multi-select actions bar when multi-select is on', () => {\n    render(<AuthenticatorView />)\n\n    expect(\n      screen.queryByTestId('multi-select-actions-bar')\n    ).not.toBeInTheDocument()\n\n    fireEvent.click(screen.getByTestId('authenticator-header-multi-select'))\n\n    expect(screen.getByTestId('multi-select-actions-bar')).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/pages/AuthenticatorView/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { HEADER_MIN_HEIGHT } from '../../constants/layout'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  wrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    height: '100%',\n    width: '100%',\n    backgroundColor: colors.colorSurfacePrimary,\n    overflow: 'hidden' as const\n  },\n\n  headerContainer: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    height: `${HEADER_MIN_HEIGHT}px`,\n    paddingInline: `${rawTokens.spacing12}px`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    backgroundColor: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const,\n    flexShrink: 0\n  },\n\n  breadcrumbWrapper: {\n    flex: 1,\n    minWidth: 0,\n    display: 'flex' as const,\n    alignItems: 'center' as const\n  },\n\n  headerActions: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`\n  }\n})\n"
  },
  {
    "path": "src/pages/InitialPage/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { BaseInitialPage } from '../../containers/BaseInitialPage'\n\nexport const InitialPage = () => html` <${BaseInitialPage} /> `\n"
  },
  {
    "path": "src/pages/Intro/CategoryAnimation/index.tsx",
    "content": "import React, { useMemo } from 'react'\nimport { RuntimeLoader } from '@rive-app/webgl2'\nimport { useRiveWithRetry } from '../../../hooks/useRiveWithRetry'\n\nRuntimeLoader.setWasmUrl('assets/rive/rive_webgl2.wasm')\n\nexport const CategoryAnimation = (): React.ReactElement => {\n  const riveParams = useMemo(() => ({\n    src: 'assets/animations/category.riv',\n    stateMachines: ['State Machine 1'],\n    animations: ['Timeline 1'],\n    autoplay: true\n  }), [])\n\n  const { RiveComponent, key } = useRiveWithRetry({ riveParams, riveOptions: undefined })\n\n  return (\n    <RiveComponent\n      key={key}\n      style={{ width: '100%', aspectRatio: '1 / 1' }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/pages/Intro/CreditCardAnimation/index.tsx",
    "content": "import React, { useMemo } from 'react'\nimport { RuntimeLoader } from '@rive-app/webgl2'\nimport { useRiveWithRetry } from '../../../hooks/useRiveWithRetry'\n\nRuntimeLoader.setWasmUrl('assets/rive/rive_webgl2.wasm')\n\nexport const CreditCardAnimation = (): React.ReactElement => {\n  const riveParams = useMemo(() => ({\n    src: 'assets/animations/form_credit_card.riv',\n    stateMachines: ['State Machine 1'],\n    animations: ['Timeline 1'],\n    autoplay: true\n  }), [])\n\n  const { RiveComponent, key } = useRiveWithRetry({ riveParams, riveOptions: undefined })\n\n  return (\n    <RiveComponent\n      key={key}\n      style={{ width: '100%', aspectRatio: '1 / 1' }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/pages/Intro/GradientContainer/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { BlurredBackground, ChildrenContainer, Container } from './styles'\n\nexport const GradientContainer = ({ children, blurSize = 'sm' }) => html`\n  <${Container}>\n    <${BlurredBackground} blurSize=${blurSize} />\n    <${ChildrenContainer}> ${children} <//>\n  <//>\n`\n"
  },
  {
    "path": "src/pages/Intro/GradientContainer/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n`\n\nexport const BlurredBackground = styled.div`\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  inset: 0;\n  border-radius: 50%;\n  opacity: 0.2;\n  background: #b0d944;\n  filter: ${({ blurSize }) =>\n    blurSize === 'sm' ? 'blur(75px)' : 'blur(250px)'};\n  z-index: 0;\n`\n\nexport const ChildrenContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  z-index: 1;\n`\n"
  },
  {
    "path": "src/pages/Intro/IntroV2.tsx",
    "content": "import React, { useState } from 'react'\nimport { Button, Text, Title } from '@tetherto/pearpass-lib-ui-kit'\nimport { KeyboardArrowRightRound } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { OnboardingShell } from '../../components/OnboardingShell'\nimport { NAVIGATION_ROUTES } from '../../constants/navigation'\nimport { useRouter } from '../../context/RouterContext'\nimport { SyncWithoutCloudAnimation } from './SyncWithoutCloudAnimation'\nimport { OnboardingLockVideo } from './OnboardingLockVideo'\nimport {\n  ButtonIconWrapper,\n  ContinueButtonWrapper,\n  MainContent,\n  Footer,\n  TextBlock,\n  RiveArtWrapper,\n} from './IntroV2Styles'\n\nexport const IntroV2: React.FC = () => {\n  const { navigate } = useRouter()\n  const [pageIndex, setPageIndex] = useState(0)\n\n  const pages = [\n    {\n      title: 'Your data stays on your devices',\n      body: (\n        <Text as=\"p\" variant=\"label\">\n          Your items are stored locally, not on our servers.\n          <br />\n          Only you have access to them.\n        </Text>\n      ),\n      art: (\n        <RiveArtWrapper>\n          <OnboardingLockVideo />\n        </RiveArtWrapper>\n      )\n    },\n    {\n      title: 'Sync without the cloud',\n      body: (\n        <>\n          <Text as=\"p\" variant=\"label\">\n            Your devices connect directly to each other using\n            <br />\n            peer-to-peer technology.\n          </Text>\n          <Text as=\"p\" variant=\"label\">\n            No cloud. No copies. No middlemen.\n          </Text>\n        </>\n      ),\n      art: (\n        <RiveArtWrapper>\n          <SyncWithoutCloudAnimation />\n        </RiveArtWrapper>\n      )\n    }\n  ]\n\n  const currentPage = pages[pageIndex]\n  const isFirstPage = pageIndex === 0\n\n  const handleContinue = () => {\n    if (pageIndex >= pages.length - 1) {\n      navigate('welcome', {\n        state: NAVIGATION_ROUTES.CREATE_MASTER_PASSWORD\n      })\n      return\n    }\n\n    setPageIndex((current) => current + 1)\n  }\n\n  const content = (\n    <MainContent>\n      {currentPage.art}\n\n      <TextBlock>\n        <Title>{currentPage.title}</Title>\n        {currentPage.body}\n      </TextBlock>\n\n      <Footer>\n        <ContinueButtonWrapper>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            onClick={handleContinue}\n            iconAfter={\n              <ButtonIconWrapper>\n                <KeyboardArrowRightRound />\n              </ButtonIconWrapper>\n            }\n          >\n            Continue\n          </Button>\n        </ContinueButtonWrapper>\n      </Footer>\n    </MainContent>\n  )\n\n  return <OnboardingShell background={isFirstPage ? 'gradient' : 'solid'}>{content}</OnboardingShell>\n}\n"
  },
  {
    "path": "src/pages/Intro/IntroV2Styles.ts",
    "content": "import styled from 'styled-components'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const MainContent = styled.div`\n  position: relative;\n  z-index: 1;\n  display: flex;\n  width: min(100%, 736px);\n  flex-direction: column;\n  align-items: center;\n  gap: ${rawTokens.spacing24}px;\n`\n\nexport const RiveArtWrapper = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: min(100%, 260px);\n  aspect-ratio: 1 / 1;\n  box-sizing: border-box;\n  overflow: hidden;\n  isolation: isolate;\n`\n\nexport const TextBlock = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n  gap: ${rawTokens.spacing6}px;\n  width: min(100%, 468px);\n  text-align: center;\n\n  & > * {\n    max-width: 100%;\n  }\n`\n\nexport const Footer = styled.div`\n  display: flex;\n  justify-content: center;\n  width: 100%;\n`\n\nexport const ContinueButtonWrapper = styled.div`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  transform: translateY(2px);\n`\n\nexport const ButtonIconWrapper = styled.span`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n`"
  },
  {
    "path": "src/pages/Intro/OnboardingLockVideo/index.tsx",
    "content": "import React, { useEffect, useRef, useState } from 'react'\n\nconst START_SRC = 'assets/video/onboarding_lock_start.webm'\nconst LOOP_SRC = 'assets/video/onboarding_lock_loop.webm'\n\nexport const OnboardingLockVideo = (): React.ReactElement => {\n  const videoRef = useRef<HTMLVideoElement | null>(null)\n  const [phase, setPhase] = useState<'start' | 'loop'>('start')\n\n  useEffect(() => {\n    const video = videoRef.current\n    if (!video) return\n\n    const handleEnded = () => {\n      if (phase === 'start') setPhase('loop')\n    }\n\n    video.addEventListener('ended', handleEnded)\n    return () => video.removeEventListener('ended', handleEnded)\n  }, [phase])\n\n  useEffect(() => {\n    const video = videoRef.current\n    if (!video) return\n    video.load()\n    void video.play().catch(() => {})\n  }, [phase])\n\n  return (\n    <video\n      ref={videoRef}\n      src={phase === 'start' ? START_SRC : LOOP_SRC}\n      autoPlay\n      muted\n      playsInline\n      loop={phase === 'loop'}\n      style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/pages/Intro/PasswordFillAnimation/index.tsx",
    "content": "import React from 'react'\nimport { RuntimeLoader } from '@rive-app/webgl2'\nimport { useRiveWithRetry } from '../../../hooks/useRiveWithRetry'\nimport { useMemo } from 'react'\n\nRuntimeLoader.setWasmUrl('assets/rive/rive_webgl2.wasm')\n\nexport const PasswordFillAnimation = (): React.ReactElement => {\n  const riveParams = useMemo(() => ({\n    src: 'assets/animations/pearpass_password.riv',\n    stateMachines: ['State Machine 1'],\n    animations: ['Timeline 1', 'Timeline 2'],\n    autoplay: true\n  }), [])\n\n  const { RiveComponent, key } = useRiveWithRetry({ riveParams, riveOptions: undefined })\n\n  return (\n    <RiveComponent\n      key={key}\n      style={{ width: '100%', aspectRatio: '1 / 1' }}\n    />\n  )\n}\n"
  },
  {
    "path": "src/pages/Intro/PasswordFillAnimation/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  display: flex;\n  width: 100%;\n  flex-direction: column;\n  justify-content: center;\n  align-items: flex-end;\n  gap: 12px;\n  padding: 20px;\n`\n"
  },
  {
    "path": "src/pages/Intro/SyncWithoutCloudAnimation/index.tsx",
    "content": "import React, { useMemo } from 'react'\nimport { Alignment, Fit, Layout, RuntimeLoader } from '@rive-app/webgl2'\nimport { useRiveWithRetry } from '../../../hooks/useRiveWithRetry'\n\nRuntimeLoader.setWasmUrl('assets/rive/rive_webgl2.wasm')\n\nexport const SyncWithoutCloudAnimation = (): React.ReactElement => {\n  const riveParams = useMemo(\n    () => ({\n      src: 'assets/animations/sync_without_the_cloud_animation.riv',\n      stateMachines: ['State Machine 1'],\n      layout: new Layout({\n        fit: Fit.Contain,\n        alignment: Alignment.Center\n      }),\n      autoplay: true\n    }),\n    []\n  )\n\n  const { RiveComponent, key } = useRiveWithRetry({\n    riveParams,\n    riveOptions: undefined\n  })\n\n  return <RiveComponent key={key} style={{ width: '100%', height: '100%' }} />\n}\n"
  },
  {
    "path": "src/pages/Intro/TutorialContainer/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { GradientContainer } from '../GradientContainer'\nimport {\n  Container,\n  DescriptionText,\n  Header,\n  ImageContainer,\n  InfoContainer\n} from './styles'\n\nexport const TutorialContainer = ({ header, description, content }) => html`\n  <${Container}>\n    <${InfoContainer}>\n      <${Header}>${header}<//>\n      <${DescriptionText}>\n        ${description.map(\n          (part, index) => html`<span key=${index}> ${part} </span>`\n        )}\n      <//>\n    <//>\n\n    <${ImageContainer}>\n      <${GradientContainer}> ${content} <//>\n    <//>\n  <//>\n`\n"
  },
  {
    "path": "src/pages/Intro/TutorialContainer/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Container = styled.div`\n  height: 100%;\n  width: 100%;\n  gap: 80px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n`\n\nexport const InfoContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n`\n\nexport const Header = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: 5.3vw;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const DescriptionText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 2.6vw;\n  font-style: normal;\n  font-weight: 200;\n  line-height: normal;\n  max-width: 730px;\n`\n\nexport const ImageContainer = styled.div`\n  width: 40vw;\n  max-width: 500px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n`\n"
  },
  {
    "path": "src/pages/Intro/WelcomeToPearpass/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { Container, ImageContainer, LeftText, Video } from './styles'\nimport { Header } from '../TutorialContainer/styles'\n\nexport const WelcomeToPearpass = ({ isLockLocked }) => {\n  const { i18n } = useLingui()\n\n  return html`\n    <${Container}>\n      <${LeftText} className=${isLockLocked ? 'fade-in' : ''}>\n        <${Header}>\n          <div>${i18n._('Fully local,')}</div>\n          <div>${i18n._('Open-source,')}</div>\n          <div>${i18n._('Password manager.')}</div>\n        <//>\n      <//>\n      <${ImageContainer}>\n        <${Video}\n          src=\"assets/video/lock_close_4s.mp4\"\n          autoPlay\n          className=${isLockLocked ? 'animate' : ''}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/Intro/WelcomeToPearpass/styles.js",
    "content": "import styled, { keyframes } from 'styled-components'\n\nexport const Container = styled.div`\n  height: 100%;\n  width: 100%;\n  display: flex;\n  gap: 80px;\n  align-items: center;\n  justify-content: space-between;\n`\n\nexport const ImageContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 1;\n`\n\nexport const LeftText = styled.div.attrs(({ className }) => ({\n  className\n}))`\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  gap: 20px;\n`\n\nexport const LeftDescriptionText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 2.6vw;\n  font-style: normal;\n  font-weight: 200;\n  line-height: normal;\n  max-width: 730px;\n`\n\nconst fadeOut = keyframes`\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n`\n\nexport const DescriptionText = styled.span.attrs(({ className }) => ({\n  className\n}))`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: 4vw;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n\n  &.fade-out {\n    animation: ${fadeOut} 2.5s forwards;\n    animation-delay: 2.5s;\n  }\n`\n\nexport const ButtonContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n\n  opacity: ${({ visible }) => (visible ? 1 : 0)};\n  transition: opacity 0.8s ease-in;\n`\n\nconst levitateBounce = keyframes`\n0%,100% {\n  transform:  translateY(0px);\n}\n50% {\n  transform: translateY(30px);\n}\n`\nexport const Video = styled.video.attrs(({ className }) => ({\n  className\n}))`\n  width: 75%;\n  aspect-ratio: 1/1;\n  height: auto;\n  object-fit: cover;\n\n  &.animate {\n    animation: ${levitateBounce} 4s ease-in-out infinite 2.8s;\n    animation-fill-mode: forwards;\n  }\n`\n"
  },
  {
    "path": "src/pages/Intro/index.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { CategoryAnimation } from './CategoryAnimation'\nimport { CreditCardAnimation } from './CreditCardAnimation'\nimport { PasswordFillAnimation } from './PasswordFillAnimation'\nimport {\n  BlackBackground,\n  BottomGradient,\n  ButtonContainer,\n  ContentContainer,\n  LogoContainer,\n  LogoImage,\n  PearPass,\n  ProgressContainer,\n  ProgressItem,\n  StrongText\n} from './styles'\nimport { TutorialContainer } from './TutorialContainer'\nimport { WelcomeToPearpass } from './WelcomeToPearpass'\nimport { useRouter } from '../../context/RouterContext'\nimport { ButtonPrimary, ButtonSecondary } from '../../lib-react-components'\nimport { LogoLock } from '../../svgs/LogoLock'\n\nexport const Intro = () => {\n  const { i18n } = useLingui()\n  const { navigate } = useRouter()\n\n  const [pageIndex, setPageIndex] = useState(0)\n\n  const [isLockLocked, setIsLockLocked] = useState(false)\n\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      setIsLockLocked(true)\n    }, 1500)\n\n    return () => clearTimeout(timer)\n  }, [])\n\n  const handleNextPage = () => {\n    if (pageIndex >= 5) {\n      navigate('welcome', {\n        state: 'createMasterPassword'\n      })\n      return\n    }\n\n    setPageIndex((prevIndex) => prevIndex + 1)\n  }\n\n  const handleSkipToLast = () => {\n    setPageIndex(5)\n  }\n\n  const renderPageContent = () => {\n    switch (pageIndex) {\n      case 0:\n        return html` <${WelcomeToPearpass} isLockLocked=${isLockLocked} /> `\n      case 1:\n        return html`\n          <${TutorialContainer}\n            header=${i18n._('Your passwords. Your rules.')}\n            description=${[\n              i18n._('PearPass is the first truly local,'),\n              html`<${StrongText}\n                >${i18n._('peer-to-peer password manager.')}<//\n              >`,\n              i18n._(' Your data'),\n              html`<${StrongText}>${i18n._('never touches a server -')}<//>`,\n              i18n._('it lives with you, syncs between your devices, and'),\n              html`<${StrongText}\n                >${i18n._('stays entirely in your control.')}<//\n              >`\n            ]}\n            content=${html`<${LogoImage}\n              src=\"assets/images/intro_lock_3D.webp\"\n            />`}\n          />\n        `\n      case 2:\n        return html`\n          <${TutorialContainer}\n            header=${i18n._('You hold the keys')}\n            description=${[\n              i18n._('No one can unlock your data,'),\n              html`<${StrongText}>${i18n._('not even us.')}<//>`,\n              i18n._('Your data stays '),\n              html`<${StrongText}>${i18n._('fully encrypted and local')}<//>`,\n              i18n._('to your device.'),\n              html`<${StrongText}\n                >${i18n._('Keep your master password safe,')}<//\n              >`,\n              i18n._('because if you lose it, its gone forever.')\n            ]}\n            content=${html`<${PasswordFillAnimation} />`}\n          />\n        `\n      case 3:\n        return html`\n          <${TutorialContainer}\n            header=${i18n._('Store more than passwords')}\n            description=${[\n              html`<${StrongText}\n                >${i18n._('Your digital life. Organized and encrypted. ')}<//\n              >`,\n              i18n._(\n                'Store everything from passwords to cards, IDs, and notes.'\n              ),\n              html`<${StrongText}\n                >${i18n._('Grouped how you like. Accessible only to you.')}<//\n              >`\n            ]}\n            content=${html`<${CategoryAnimation} />`}\n          />\n        `\n      case 4:\n        return html`\n          <${TutorialContainer}\n            header=${i18n._('All in one encrypted place.')}\n            description=${[\n              html`<${StrongText}>${i18n._('Store everything')}<//>`,\n              i18n._('from passwords to payment cards, IDs, and private notes')\n            ]}\n            content=${html`<${CreditCardAnimation} />`}\n          />\n        `\n\n      case 5:\n        return html`\n          <${TutorialContainer}\n            header=${i18n._('Sync, without the Cloud')}\n            description=${[\n              html`<${StrongText}>${i18n._('No servers. No middlemen.')}<//>`,\n              i18n._('Pearpass syncs directly across your devices using'),\n              html`<${StrongText}>${i18n._('peer-to-peer technology,')}<//>`,\n              i18n._('powered by Pear Runtime.')\n            ]}\n            content=${html`<img src=\"assets/images/LinkedDevices.svg\" />`}\n          />\n        `\n\n      default:\n        return null\n    }\n  }\n\n  const isFirstPage = pageIndex === 0\n  const isLastPage = pageIndex === 5\n\n  return html`\n    <${BlackBackground} pageIndex=${pageIndex} hasImageBackground=${isLastPage}>\n      <${LogoContainer}>\n        <${LogoLock} width=\"42\" height=\"57\" />\n        <${PearPass}>PearPass<//>\n      <//>\n\n      <${ContentContainer}> ${renderPageContent()} <//>\n\n      <${ButtonContainer} className=${isLockLocked ? 'fade-in' : ''}>\n        <${ButtonPrimary} disabled=${!isLockLocked} onClick=${handleNextPage}>\n          ${isFirstPage ? i18n._('Get started') : i18n._('Continue')}\n        <//>\n        ${!isLastPage &&\n        html`\n          <${ButtonSecondary} onClick=${handleSkipToLast}>\n            ${i18n._('Skip')}\n          <//>\n        `}\n\n        <${ProgressContainer}>\n          <${ProgressItem}\n            onClick=${() => setPageIndex(0)}\n            isSelected=${pageIndex === 0}\n          />\n          <${ProgressItem}\n            onClick=${() => setPageIndex(1)}\n            isSelected=${pageIndex === 1}\n          />\n          <${ProgressItem}\n            onClick=${() => setPageIndex(2)}\n            isSelected=${pageIndex === 2}\n          />\n          <${ProgressItem}\n            onClick=${() => setPageIndex(3)}\n            isSelected=${pageIndex === 3}\n          />\n          <${ProgressItem}\n            onClick=${() => setPageIndex(4)}\n            isSelected=${pageIndex === 4}\n          />\n          <${ProgressItem}\n            onClick=${() => setPageIndex(5)}\n            isSelected=${pageIndex === 5}\n          />\n        <//>\n      <//>\n\n      <${BottomGradient} />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/Intro/styles.js",
    "content": "import styled, { keyframes } from 'styled-components'\n\nexport const BlackBackground = styled.div`\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 20px;\n  width: 100%;\n  height: 100%;\n  background-color: ${({ theme, pageIndex }) =>\n    pageIndex === 0 || pageIndex === 5 ? '#010702' : theme.colors.black.mode1};\n  color: ${({ theme }) => theme.colors.white.mode1};\n  padding: 100px;\n  overflow: hidden;\n`\n\nexport const GradientBackground = styled.div`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`\n\nexport const LogoContainer = styled.div`\n  display: flex;\n  gap: 15px;\n  flex: 0 0 1;\n  align-items: center;\n  justify-content: flex-start;\n  width: 100%;\n  z-index: 1;\n`\n\nexport const PearPass = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: 68px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n  height: 55px;\n`\n\nexport const WelcomeText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: 4vw;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const ContentContainer = styled.div`\n  display: flex;\n  flex: 1;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n`\n\nexport const StrongText = styled.span`\n  font-weight: 400;\n`\n\nconst levitateBounce = keyframes`\n0%,100% {\n  transform:  translateY(0px);\n}\n50% {\n  transform: translateY(30px);\n}\n`\n\nexport const pear3dLockImage = styled.img`\n  animation: ${levitateBounce} 2.5s ease-in-out infinite;\n`\nexport const LastPageContentContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n  gap: 20px;\n`\n\nexport const LastPageDescription = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: 48px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const Video = styled.video`\n  width: 30vw;\n  max-width: 100%;\n  height: auto;\n  object-fit: cover;\n`\n\nexport const SkipContainer = styled.div`\n  position: absolute;\n  top: 84px;\n  right: 106px;\n`\n\nexport const BottomGradient = styled.div`\n  position: absolute;\n  transform: translate(-50%, 50%);\n  left: 100px;\n  bottom: 220px;\n  width: 745px;\n  height: 745px;\n  flex-shrink: 0;\n\n  border-radius: 50%;\n  opacity: 0.2;\n  background: ${({ theme }) => theme.colors.primary400.mode1};\n  filter: blur(275px);\n`\n\nconst fadeIn = keyframes`\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n`\n\nexport const ButtonContainer = styled.div.attrs(({ className }) => ({\n  className\n}))`\n  position: relative;\n  z-index: 2;\n  flex: 0 0 auto;\n  display: flex;\n  gap: 20px;\n  align-items: center;\n  justify-content: flex-start;\n  width: 100%;\n  opacity: 0;\n\n  &.fade-in {\n    animation: ${fadeIn} 2.5s forwards;\n  }\n`\n\nexport const ProgressContainer = styled.div`\n  display: flex;\n  gap: 4px;\n  width: 183px;\n  align-items: center;\n  justify-content: center;\n\n  position: absolute;\n  left: 50%;\n  transform: translateX(-50%);\n`\n\nexport const ProgressItem = styled.div`\n  cursor: pointer;\n  height: 8px;\n  flex: 1 0 0;\n\n  background-color: ${({ isSelected, theme }) =>\n    isSelected ? theme.colors.primary400.mode1 : 'transparent'};\n\n  border-radius: 15px;\n  border: 1px solid\n    ${({ isSelected, theme }) =>\n      isSelected ? theme.colors.primary400.mode1 : theme.colors.grey100.mode1};\n\n  transition:\n    background-color 0.3s ease,\n    border-color 0.3s ease;\n`\n\nexport const LogoImage = styled.img`\n  width: 100%;\n  height: auto;\n  object-fit: cover;\n  animation: ${levitateBounce} 4s ease-in-out infinite;\n`\n"
  },
  {
    "path": "src/pages/LoadingPage/LoadingPageV2.tsx",
    "content": "import React from 'react'\nimport { Text, Title, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { OnboardingShell } from '../../components/OnboardingShell'\nimport {\n  ArtFrame,\n  Footer,\n  MainContent,\n  ProgressFill,\n  ProgressSection,\n  ProgressTrack,\n  TextBlock,\n} from './LoadingPageV2Styles'\nimport { OnboardingLock } from '../../svgs/OnboardingLock'\n\ninterface LoadingPageV2Props {\n  progress: number\n}\n\nexport const LoadingPageV2 = ({\n  progress\n}: LoadingPageV2Props): React.ReactElement => {\n  const { theme } = useTheme()\n\n  return (\n    <OnboardingShell background=\"gradient\">\n      <MainContent>\n        <ArtFrame>\n          <OnboardingLock />\n        </ArtFrame>\n\n        <TextBlock>\n          <Title>Welcome to PearPass</Title>\n          <Text as=\"p\" variant=\"label\">\n            Your items are stored locally, not on our servers.\n            <br />\n            Only you have access to them.\n          </Text>\n        </TextBlock>\n\n        <Footer>\n          <ProgressSection>\n            <ProgressTrack $trackColor={theme.colors.colorSurfaceHover}>\n              <ProgressFill\n                $fillColor={theme.colors.colorPrimary}\n                $progress={progress}\n              />\n            </ProgressTrack>\n          </ProgressSection>\n        </Footer>\n      </MainContent>\n    </OnboardingShell>\n  )\n}\n"
  },
  {
    "path": "src/pages/LoadingPage/LoadingPageV2Styles.ts",
    "content": "import styled from 'styled-components'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\ninterface ProgressTrackProps {\n  $trackColor: string\n}\n\ninterface ProgressFillProps {\n  $fillColor: string\n  $progress: number\n}\n\nexport const MainContent = styled.div`\n  position: relative;\n  z-index: 1;\n  display: flex;\n  width: min(100%, 736px);\n  flex-direction: column;\n  align-items: center;\n  gap: ${rawTokens.spacing24}px;\n`\n\nexport const ArtFrame = styled.div`\n  display: flex;\n  width: 282px;\n  height: 282px;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 auto;\n`\n\nexport const TextBlock = styled.div`\n  display: flex;\n  width: min(100%, 468px);\n  flex-direction: column;\n  align-items: stretch;\n  gap: ${rawTokens.spacing6}px;\n  text-align: center;\n\n  & > * {\n    max-width: 100%;\n  }\n`\n\nexport const Footer = styled.div`\n  display: flex;\n  justify-content: center;\n  width: 100%;\n`\n\nexport const ProgressSection = styled.div`\n  display: flex;\n  width: min(100%, 500px);\n  flex-direction: column;\n  margin-top: 8px;\n  gap: 0;\n`\n\nexport const ProgressTrack = styled.div<ProgressTrackProps>`\n  width: 100%;\n  height: 12px;\n  overflow: hidden;\n  border-radius: ${rawTokens.radius20}px;\n  background-color: ${({ $trackColor }) => $trackColor};\n`\n\nexport const ProgressFill = styled.div<ProgressFillProps>`\n  height: 100%;\n  width: ${({ $progress }) => `${$progress}%`};\n  border-radius: ${rawTokens.radius20}px;\n  background-color: ${({ $fillColor }) => $fillColor};\n  transition: width 0.1s ease-out;\n`\n"
  },
  {
    "path": "src/pages/LoadingPage/index.js",
    "content": "import { useState, useEffect } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { LoadingPageV2 } from './LoadingPageV2'\nimport {\n  BottomGlow,\n  ContentContainer,\n  FooterContainer,\n  LoadingText,\n  LoadingTextContainer,\n  MessageContainer,\n  PageContainer,\n  PearImage,\n  PearImageBlurred,\n  PoweredByText,\n  ProgressBarBackground,\n  ProgressBarFill,\n  ProgressContainer,\n  WelcomeSubtitle,\n  WelcomeTitle\n} from './styles'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { PearLogo } from '../../svgs/PearLogo'\nimport { isV2 } from '../../utils/designVersion'\n\n/**\n * Loading page component that displays application loading progress\n * @param {Object} props\n * @param {() => void} [props.onLoadingComplete] - Callback when loading is complete\n * @param {number} [props.duration] - Duration of loading animation in ms\n * @returns {JSX.Element}\n */\nexport const LoadingPage = ({ onLoadingComplete, duration = 3000 }) => {\n  const { t } = useTranslation()\n  const [progress, setProgress] = useState(0)\n\n  useEffect(() => {\n    const startTime = Date.now()\n    const interval = setInterval(() => {\n      const elapsed = Date.now() - startTime\n      const newProgress = Math.min((elapsed / duration) * 100, 100)\n\n      setProgress(newProgress)\n\n      if (newProgress >= 100) {\n        clearInterval(interval)\n        onLoadingComplete?.()\n      }\n    }, 50)\n\n    return () => clearInterval(interval)\n  }, [duration, onLoadingComplete])\n\n  if (isV2()) {\n    return html` <${LoadingPageV2} progress=${progress} /> `\n  }\n\n  return html`\n    <${PageContainer}>\n      <${PearImageBlurred}\n        src=\"assets/images/pear_background_blur.webp\"\n        alt=\"Blurred background\"\n      />\n      <${PearImage} src=\"assets/images/pear_background.webp\" alt=\"Background\" />\n\n      <${ContentContainer}>\n        <${MessageContainer}>\n          <${WelcomeTitle}>${t('Welcome to PearPass')}<//>\n          <${WelcomeSubtitle}>\n            ${t(\n              'Public Wi-Fi is risky - avoid typing passwords on open networks.'\n            )}\n          <//>\n        <//>\n\n        <${ProgressContainer}>\n          <${ProgressBarBackground}>\n            <${ProgressBarFill} progress=${progress} />\n          <//>\n          <${LoadingTextContainer}>\n            <${LoadingText}>${t('Loading...')}<//>\n          <//>\n        <//>\n      <//>\n\n      <${FooterContainer}>\n        <${PearLogo} width=\"35\" height=\"47\" />\n        <${PoweredByText}>${t('Powered by Pear')}<//>\n      <//>\n\n      <${BottomGlow} />\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/LoadingPage/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const PageContainer = styled.div`\n  position: relative;\n  width: 100%;\n  height: 100%;\n  background: linear-gradient(180deg, #232323 0%, #050b06 100%);\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  overflow: hidden;\n`\n\nexport const PearImageBlurred = styled.img`\n  position: absolute;\n  width: 480px;\n  height: 480px;\n  top: 1%;\n  left: calc(50% - 240px - 113px);\n  filter: blur(2px);\n  object-fit: cover;\n  z-index: 1;\n`\n\nexport const PearImage = styled.img`\n  position: absolute;\n  width: 524px;\n  height: 524px;\n  top: 8%;\n  left: calc(50% - 262px);\n  object-fit: cover;\n  z-index: 2;\n`\n\nexport const ContentContainer = styled.div`\n  position: absolute;\n  top: 64%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  z-index: 10;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 40px;\n  width: 100%;\n`\n\nexport const MessageContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n`\n\nexport const WelcomeTitle = styled.h1`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 20px;\n  font-weight: 700;\n  line-height: 1.21;\n  text-align: center;\n`\n\nexport const WelcomeSubtitle = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 700;\n  line-height: 1.21;\n  text-align: center;\n  max-width: 450px;\n`\n\nexport const ProgressContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  gap: 8px;\n  width: min(650px, 90%);\n`\n\nexport const ProgressBarBackground = styled.div`\n  width: 100%;\n  height: 12px;\n  background-color: #393939;\n  border-radius: 15px;\n  overflow: hidden;\n`\n\nexport const ProgressBarFill = styled.div`\n  height: 11px;\n  background-color: ${({ theme }) => theme.colors.primary400.mode1};\n  border-radius: 15px;\n  width: ${({ progress }) => `${progress}%`};\n  transition: width 0.1s ease-out;\n`\n\nexport const LoadingTextContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n  align-items: center;\n  gap: 5px;\n`\n\nexport const LoadingText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1.21;\n`\n\nexport const FooterContainer = styled.div`\n  position: absolute;\n  bottom: 12%;\n  left: 50%;\n  transform: translateX(-50%);\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  z-index: 10;\n`\n\nexport const PoweredByText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-weight: 400;\n  line-height: 1.21;\n`\n\nexport const BottomGlow = styled.div`\n  position: absolute;\n  bottom: 0;\n  left: 50%;\n  transform: translate(-50%, 50%);\n  width: 100%;\n  max-width: 1428px;\n  height: 400px;\n  border-radius: 50%;\n  background-color: ${({ theme }) => theme.colors.primary400.mode1};\n  filter: blur(320px);\n  z-index: 0;\n`\n"
  },
  {
    "path": "src/pages/MainView/MainViewV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  wrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    height: '100%',\n    width: '100%',\n    backgroundColor: colors.colorSurfacePrimary,\n    overflow: 'hidden' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/MainView/MainViewV2.tsx",
    "content": "import React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { useFolders, useRecords } from '@tetherto/pearpass-lib-vault'\n\nimport { createStyles } from './MainViewV2.styles'\nimport {\n  SORT_BY_TYPE,\n  SORT_KEYS,\n  type SortKey\n} from '../../constants/sortOptions'\nimport { BrowserExtensionDialogV2 } from '../../containers/Modal/BrowserExtensionDialogV2'\nimport { DeleteRecordsModalContentV2 } from '../../containers/Modal/DeleteRecordsModalContentV2'\nimport { MoveFolderModalContentV2 } from '../../containers/Modal/MoveFolderModalContentV2/MoveFolderModalContentV2'\nimport { EmptyCollectionViewV2 } from '../../containers/EmptyCollectionViewV2'\nimport { EmptyResultsViewV2 } from '../../containers/EmptyResultsViewV2'\nimport { MainViewHeader } from '../../containers/MainViewHeader/MainViewHeader'\nimport { MultiSelectActionsBar } from '../../containers/MultiSelectActionsBar'\nimport { RecordListViewV2 } from '../../containers/RecordListView/RecordListViewV2'\nimport { useAppHeaderContext } from '../../context/AppHeaderContext'\nimport { useGlobalLoading } from '../../context/LoadingContext'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { LOCAL_STORAGE_KEYS } from '../../constants/localStorage'\nimport { isNativeMessagingIPCRunning } from '../../services/nativeMessagingIPCServer'\nimport { getNativeMessagingEnabled } from '../../services/nativeMessagingPreferences'\nimport {\n  groupRecordsByTimePeriod,\n  type VaultRecord\n} from '../../utils/groupRecordsByTimePeriod'\nimport { isFavorite } from '../../utils/isFavorite'\n\nexport const MainViewV2 = () => {\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { setModal, isOpen: isModalOpen } = useModal()\n  const { searchValue } = useAppHeaderContext()\n  const { data: routerData } = useRouter()\n\n  const [sortKey, setSortKey] = useState<SortKey>(\n    SORT_KEYS.LAST_UPDATED_NEWEST\n  )\n  const [isMultiSelectOn, setIsMultiSelectOn] = useState(false)\n  const [selectedRecords, setSelectedRecords] = useState<string[]>([])\n\n  useEffect(() => {\n    if (!isMultiSelectOn) setSelectedRecords([])\n  }, [isMultiSelectOn])\n\n  useEffect(() => {\n    const dismissed =\n      localStorage.getItem(LOCAL_STORAGE_KEYS.EXTENSION_DIALOG_DISMISSED) === 'true'\n    if (dismissed) return\n\n    const enabled = getNativeMessagingEnabled()\n    const isRunning = isNativeMessagingIPCRunning()\n\n    if (!enabled || !isRunning) {\n      setModal(<BrowserExtensionDialogV2 />)\n    }\n    // Run once per mount; modal setter is stable per context instance.\n  }, [setModal])\n\n  const isFavoritesView = isFavorite(routerData?.folder ?? '')\n  const selectedFolder =\n    routerData?.folder && !isFavoritesView ? routerData.folder : undefined\n\n  const sort = useMemo(() => SORT_BY_TYPE[sortKey], [sortKey])\n\n  const { data: records, isLoading, updateFavoriteState } = useRecords({\n    shouldSkip: true,\n    variables: {\n      filters: {\n        searchPattern: searchValue,\n        type:\n          routerData?.recordType === 'all' ? undefined : routerData?.recordType,\n        folder: selectedFolder,\n        isFavorite: isFavoritesView ? true : undefined\n      },\n      sort\n    }\n  })\n\n  useGlobalLoading({ isLoading })\n\n  const sections = useMemo(\n    () => groupRecordsByTimePeriod(records ?? [], sort),\n    [records, sort]\n  )\n\n  useEffect(() => {\n    setIsMultiSelectOn(false)\n  }, [routerData?.folder, routerData?.recordType, searchValue])\n\n  const selectedRecordObjects = useMemo<VaultRecord[]>(() => {\n    if (!records?.length || !selectedRecords.length) return []\n    const ids = new Set(selectedRecords)\n    return records.filter((record: VaultRecord) => ids.has(record.id))\n  }, [records, selectedRecords])\n\n  const selectedCount = selectedRecordObjects.length\n  const allSelectedFavorited =\n    selectedCount > 0 && selectedRecordObjects.every((r) => !!r.isFavorite)\n\n  const { data: foldersData } = useFolders()\n  const hasCustomFolders =\n    Object.keys(foldersData?.customFolders ?? {}).length > 0\n\n  const exitMultiSelect = useCallback(() => {\n    setSelectedRecords([])\n    setIsMultiSelectOn(false)\n  }, [])\n\n  useEffect(() => {\n    if (!isMultiSelectOn || isModalOpen) return\n    const handler = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') exitMultiSelect()\n    }\n    window.addEventListener('keydown', handler)\n    return () => window.removeEventListener('keydown', handler)\n  }, [isMultiSelectOn, isModalOpen, exitMultiSelect])\n\n  const handleMove = () => {\n    if (!selectedCount) return\n    setModal(\n      <MoveFolderModalContentV2\n        records={selectedRecordObjects}\n        onCompleted={exitMultiSelect}\n      />\n    )\n  }\n\n  const handleDelete = () => {\n    if (!selectedCount) return\n    setModal(\n      <DeleteRecordsModalContentV2\n        records={selectedRecordObjects}\n        onCompleted={exitMultiSelect}\n      />\n    )\n  }\n\n  const handleToggleFavorite = async () => {\n    if (!selectedCount) return\n    await updateFavoriteState(selectedRecords, !allSelectedFavorited)\n    exitMultiSelect()\n  }\n\n  const hasRecords = !!records?.length\n  const hasSearch = !!searchValue.length\n\n  return (\n    <div style={styles.wrapper} data-testid=\"main-view-v2\">\n      <MainViewHeader\n        sortKey={sortKey}\n        setSortKey={setSortKey}\n        isMultiSelectOn={isMultiSelectOn}\n        setIsMultiSelectOn={setIsMultiSelectOn}\n      />\n\n      {isMultiSelectOn && (\n        <MultiSelectActionsBar\n          selectedCount={selectedCount}\n          allSelectedFavorited={allSelectedFavorited}\n          canMove={hasCustomFolders}\n          onMove={handleMove}\n          onToggleFavorite={handleToggleFavorite}\n          onDelete={handleDelete}\n        />\n      )}\n\n      {hasRecords && (\n        <RecordListViewV2\n          sections={sections}\n          isMultiSelectOn={isMultiSelectOn}\n          selectedRecords={selectedRecords}\n          setSelectedRecords={setSelectedRecords}\n          setIsMultiSelectOn={setIsMultiSelectOn}\n        />\n      )}\n\n      {!hasRecords && !hasSearch && !isLoading && (\n        <EmptyCollectionViewV2\n          recordType={routerData?.recordType ?? 'all'}\n          selectedFolder={selectedFolder}\n          isFavoritesView={isFavoritesView}\n        />\n      )}\n\n      {!hasRecords && hasSearch && !isLoading && <EmptyResultsViewV2 />}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/MainView/index.js",
    "content": "import React, { useEffect, useState } from 'react'\n\nimport { useRecords } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { ContentWrapper, SearchContainer, Wrapper } from './styles'\nimport { ButtonPlusCreateNew } from '../../components/ButtonPlusCreateNew'\nimport { CreateNewCategoryPopupContent } from '../../components/CreateNewCategoryPopupContent'\nimport { EmptyCollectionView } from '../../components/EmptyCollectionView'\nimport { InputSearch } from '../../components/InputSearch'\nimport { PopupMenu } from '../../components/PopupMenu'\nimport { BrowserExtensionDialogV2 } from '../../containers/Modal/BrowserExtensionDialogV2'\nimport { RecordListView } from '../../containers/RecordListView'\nimport { useAppHeaderContext } from '../../context/AppHeaderContext'\nimport { BannerProvider } from '../../context/BannerContext'\nimport { useGlobalLoading } from '../../context/LoadingContext'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport { useCreateOrEditRecord } from '../../hooks/useCreateOrEditRecord'\nimport { useRecordMenuItems } from '../../hooks/useRecordMenuItems'\nimport { isNativeMessagingIPCRunning } from '../../services/nativeMessagingIPCServer'\nimport { getNativeMessagingEnabled } from '../../services/nativeMessagingPreferences'\nimport { isV2 } from '../../utils/designVersion'\nimport { isFavorite } from '../../utils/isFavorite'\n\nconst SORT_BY_TYPE = {\n  recent: {\n    key: 'updatedAt',\n    direction: 'desc'\n  },\n  newToOld: {\n    key: 'createdAt',\n    direction: 'desc'\n  },\n  oldToNew: {\n    key: 'createdAt',\n    direction: 'asc'\n  }\n}\n\nexport const MainView = () => {\n  const { searchValue, setSearchValue, isAddMenuOpen, setIsAddMenuOpen } =\n    useAppHeaderContext()\n  const [selectedRecords, setSelectedRecords] = useState([])\n  const { popupItems } = useRecordMenuItems()\n  const { data: routerData } = useRouter()\n  const { setModal } = useModal()\n\n  useEffect(() => {\n    if (!isV2()) return\n\n    const enabled = getNativeMessagingEnabled()\n    const isRunning = isNativeMessagingIPCRunning()\n\n    if (!enabled || !isRunning) {\n      setModal(html`<${BrowserExtensionDialogV2} />`)\n    }\n  }, [])\n\n  const [sortType, setSortType] = useState('recent')\n\n  const sort = React.useMemo(() => SORT_BY_TYPE[sortType], [sortType])\n\n  const isFavoritesView = isFavorite(routerData?.folder)\n\n  const selectedFolder =\n    routerData?.folder && !isFavoritesView ? routerData.folder : undefined\n\n  const { data: records, isLoading } = useRecords({\n    shouldSkip: true,\n    variables: {\n      filters: {\n        searchPattern: searchValue,\n        type:\n          routerData?.recordType === 'all' ? undefined : routerData?.recordType,\n        folder: selectedFolder,\n        isFavorite: isFavoritesView ? true : undefined\n      },\n      sort: sort\n    }\n  })\n\n  useGlobalLoading({ isLoading })\n\n  const { handleCreateOrEditRecord } = useCreateOrEditRecord()\n\n  const handleMenuItemClick = (item) => {\n    handleCreateOrEditRecord({\n      recordType: item.type,\n      selectedFolder: selectedFolder,\n      isFavorite: isFavoritesView ? true : undefined\n    })\n\n    setIsAddMenuOpen(false)\n  }\n\n  const BannerWrapper = isV2() ? React.Fragment : BannerProvider\n\n  return html`\n    <${BannerWrapper}>\n      <${Wrapper}>\n        ${!isV2()\n          ? html`\n              <${SearchContainer}>\n                <${InputSearch}\n                  value=${searchValue}\n                  onChange=${(e) => setSearchValue(e.target.value)}\n                  quantity=${records?.length}\n                  testId=\"main-search-input\"\n                />\n\n                <${PopupMenu}\n                  side=\"right\"\n                  align=\"right\"\n                  isOpen=${isAddMenuOpen}\n                  setIsOpen=${setIsAddMenuOpen}\n                  content=${html`\n                    <${CreateNewCategoryPopupContent}\n                      menuItems=${popupItems}\n                      onClick=${handleMenuItemClick}\n                    />\n                  `}\n                >\n                  <${ButtonPlusCreateNew}\n                    testId=\"main-plus-button\"\n                    isOpen=${isAddMenuOpen}\n                  />\n                <//>\n              <//>\n            `\n          : null}\n        ${records?.length\n          ? html` <${ContentWrapper}>\n              <${RecordListView}\n                records=${records}\n                selectedRecords=${selectedRecords}\n                setSelectedRecords=${setSelectedRecords}\n                sortType=${sortType}\n                setSortType=${setSortType}\n              />\n            <//>`\n          : !isLoading &&\n            html` <${EmptyCollectionView}\n              selectedFolder=${selectedFolder}\n              isFavoritesView=${isFavoritesView}\n              isSearchActive=${!!searchValue}\n            />`}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/MainView/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  width: 100%;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n`\n\nexport const SearchContainer = styled.div`\n  top: 0;\n  width: 100%;\n  display: flex;\n  gap: 10px;\n`\n\nexport const ContentWrapper = styled.div`\n  display: flex;\n  width: 100%;\n  height: 100%;\n  flex: 1;\n  padding-top: 13px;\n  overflow: hidden;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/AboutContent/index.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport {\n  sendGoogleFormFeedback,\n  sendSlackFeedback\n} from '@tetherto/pear-apps-lib-feedback'\nimport { PRIVACY_POLICY, TERMS_OF_USE } from '@tetherto/pearpass-lib-constants'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport {\n  GOOGLE_FORM_KEY,\n  GOOGLE_FORM_MAPPING,\n  SLACK_WEBHOOK_URL_PATH\n} from '../../../constants/feedback'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { OutsideLinkIcon } from '../../../lib-react-components/icons/OutsideLinkIcon'\nimport { isOnline } from '../../../utils/isOnline'\nimport { logger } from '../../../utils/logger'\nimport { SettingsReportSection } from '../SettingsTab/SettingsReportSection'\n\nconst OFFLINE_TIMEOUT = 'OFFLINE_TIMEOUT'\nconst OFFLINE_TIMEOUT_MS = 10000\nconst OFFLINE_TIMEOUT_MESSAGE =\n  'You are offline, please check your internet connection'\n\nexport const AboutContent = () => {\n  const { t } = useTranslation()\n  const { setToast } = useToast()\n\n  const [message, setMessage] = useState('')\n  const [isLoading, setIsLoading] = useState(false)\n  const [currentVersion, setCurrentVersion] = useState('')\n  const electronAPI = window.electronAPI\n  useGlobalLoading({ isLoading })\n\n  const handleReportProblem = async () => {\n    if (!message?.length || isLoading) {\n      return\n    }\n\n    try {\n      setIsLoading(true)\n\n      if (!isOnline()) {\n        setToast({\n          message: t(OFFLINE_TIMEOUT_MESSAGE)\n        })\n        return\n      }\n\n      const payload = {\n        message,\n        topic: 'BUG_REPORT',\n        app: 'DESKTOP',\n        operatingSystem: navigator?.userAgentData?.platform,\n        deviceModel: navigator?.platform,\n        appVersion: currentVersion\n      }\n\n      const sendFeedbackWithTimeout = async () => {\n        await sendSlackFeedback({\n          webhookUrPath: SLACK_WEBHOOK_URL_PATH,\n          ...payload\n        })\n\n        await sendGoogleFormFeedback({\n          formKey: GOOGLE_FORM_KEY,\n          mapping: GOOGLE_FORM_MAPPING,\n          ...payload\n        })\n      }\n\n      await Promise.race([\n        sendFeedbackWithTimeout(),\n        new Promise((_, reject) => {\n          setTimeout(() => {\n            if (!isOnline()) {\n              reject(new Error(OFFLINE_TIMEOUT))\n            }\n          }, OFFLINE_TIMEOUT_MS)\n        })\n      ])\n\n      setMessage('')\n\n      setIsLoading(false)\n\n      setToast({\n        message: t('Feedback sent')\n      })\n    } catch (error) {\n      setIsLoading(false)\n\n      if (error?.message === OFFLINE_TIMEOUT) {\n        setToast({\n          message: t(OFFLINE_TIMEOUT_MESSAGE)\n        })\n      } else {\n        setToast({\n          message: t('Something went wrong, please try again')\n        })\n      }\n\n      logger.error('handleReportProblem', 'Error sending feedback:', error)\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  useEffect(() => {\n    if (electronAPI && typeof electronAPI.getAppVersion === 'function') {\n      electronAPI\n        .getConfig()\n        .then((cfg) => {\n          if (cfg && typeof cfg.version === 'string') {\n            setCurrentVersion(cfg.version)\n          }\n        })\n        .catch((error) =>\n          logger.error('AboutContent', 'Error getting runtime config:', error)\n        )\n    }\n  }, [])\n\n  return html`\n    <${SettingsReportSection}\n      onSubmitReport=${handleReportProblem}\n      message=${message}\n      title=${t('Report a problem')}\n      buttonText=${t('send')}\n      textAreaPlaceholder=${t('Write your issue...')}\n      textAreaOnChange=${setMessage}\n    />\n\n    <${CardSingleSetting}\n      testId=\"settings-card-pearpass-version\"\n      title=${t('PearPass version')}\n      description=${t('Here you can find all the info about your app.')}\n    >\n      <div\n        style=${{\n          display: 'flex',\n          flexDirection: 'column',\n          gap: '15px',\n          fontFamily: 'Inter',\n          fontSize: '14px'\n        }}\n      >\n        <div\n          data-testid=\"settings-about-app-version\"\n          style=${{\n            display: 'flex',\n            justifyContent: 'space-between',\n            color: colors.white.mode1\n          }}\n        >\n          <span>${t('App version')}</span>\n          <span style=${{ color: colors.primary400.mode1 }}>\n            ${currentVersion}\n          </span>\n        </div>\n        <a\n          data-testid=\"settings-about-terms-of-use\"\n          href=${TERMS_OF_USE}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          style=${{\n            color: colors.primary400.mode1,\n            textDecoration: 'none',\n            fontWeight: 600\n          }}\n        >\n          ${t('Terms of use')}\n        </a>\n        <a\n          data-testid=\"settings-about-privacy-statement\"\n          href=${PRIVACY_POLICY}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          style=${{\n            color: colors.primary400.mode1,\n            textDecoration: 'none',\n            fontWeight: 600\n          }}\n        >\n          ${t('Privacy statement')}\n        </a>\n        <a\n          data-testid=\"settings-about-visit-website\"\n          href=\"https://pass.pears.com\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          style=${{\n            display: 'flex',\n            justifyContent: 'space-between',\n            alignItems: 'center',\n            color: colors.white.mode1,\n            textDecoration: 'none'\n          }}\n        >\n          <span>${t('Visit our website')}</span>\n          <span\n            style=${{\n              display: 'flex',\n              alignItems: 'center',\n              gap: '4px',\n              color: colors.primary400.mode1\n            }}\n          >\n            <${OutsideLinkIcon} color=${colors.primary400.mode1} />\n            pass.pears.com\n          </span>\n        </a>\n      </div>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/AboutContent/index.test.js",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, fireEvent, act } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { AboutContent } from './index'\n\njest.useFakeTimers()\n\nglobal.fetch = jest.fn(() =>\n  Promise.resolve({\n    json: () => Promise.resolve({ version: '1.0.0' })\n  })\n)\n\nconst mockSetToast = jest.fn()\nconst mockUseGlobalLoading = jest.fn()\nlet mockIsOnlineValue = true\n\njest.mock('../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str) => str\n  })\n}))\n\njest.mock('../../../context/ToastContext', () => ({\n  useToast: () => ({\n    setToast: mockSetToast\n  })\n}))\n\njest.mock('../../../context/LoadingContext', () => ({\n  useGlobalLoading: (args) => mockUseGlobalLoading(args)\n}))\n\njest.mock('../../../utils/isOnline', () => ({\n  isOnline: () => mockIsOnlineValue\n}))\n\nconst mockSendSlackFeedback = jest.fn()\nconst mockSendGoogleFormFeedback = jest.fn()\n\njest.mock('@tetherto/pear-apps-lib-feedback', () => ({\n  sendGoogleFormFeedback: (...args) => mockSendGoogleFormFeedback(...args),\n  sendSlackFeedback: (...args) => mockSendSlackFeedback(...args)\n}))\n\njest.mock('../../../utils/logger', () => ({\n  logger: {\n    error: jest.fn()\n  }\n}))\n\njest.mock('../SettingsTab/SettingsReportSection', () => ({\n  SettingsReportSection: ({\n    onSubmitReport,\n    message,\n    title,\n    buttonText,\n    textAreaPlaceholder,\n    textAreaOnChange\n  }) => (\n    <div>\n      <h1 data-testid=\"report-title\">{title}</h1>\n      <textarea\n        data-testid=\"report-textarea\"\n        placeholder={textAreaPlaceholder}\n        value={message}\n        onChange={(e) => textAreaOnChange(e.target.value)}\n      />\n      <button data-testid=\"report-submit\" onClick={onSubmitReport}>\n        {buttonText}\n      </button>\n    </div>\n  )\n}))\n\nconst renderWithProviders = () =>\n  render(\n    <ThemeProvider>\n      <AboutContent />\n    </ThemeProvider>\n  )\n\ndescribe('AboutContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockIsOnlineValue = true\n    mockSendSlackFeedback.mockResolvedValue(undefined)\n    mockSendGoogleFormFeedback.mockResolvedValue(undefined)\n  })\n\n  it('renders basic layout', () => {\n    const { getByTestId } = renderWithProviders()\n\n    expect(getByTestId('report-title')).toHaveTextContent('Report a problem')\n  })\n\n  it('does not send feedback when message is empty', async () => {\n    const { getByTestId } = renderWithProviders()\n\n    const submitButton = getByTestId('report-submit')\n\n    await act(async () => {\n      fireEvent.click(submitButton)\n    })\n\n    expect(mockSendSlackFeedback).not.toHaveBeenCalled()\n    expect(mockSendGoogleFormFeedback).not.toHaveBeenCalled()\n    expect(mockSetToast).not.toHaveBeenCalled()\n  })\n\n  it('shows offline toast and does not send when offline', async () => {\n    mockIsOnlineValue = false\n\n    const { getByTestId } = renderWithProviders()\n\n    const textarea = getByTestId('report-textarea')\n    const submitButton = getByTestId('report-submit')\n\n    fireEvent.change(textarea, { target: { value: 'Some feedback' } })\n\n    await act(async () => {\n      fireEvent.click(submitButton)\n    })\n\n    expect(mockSendSlackFeedback).not.toHaveBeenCalled()\n    expect(mockSendGoogleFormFeedback).not.toHaveBeenCalled()\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'You are offline, please check your internet connection'\n    })\n  })\n\n  it('sends feedback and shows success toast when online', async () => {\n    mockIsOnlineValue = true\n\n    const { getByTestId } = renderWithProviders()\n\n    const textarea = getByTestId('report-textarea')\n    const submitButton = getByTestId('report-submit')\n\n    fireEvent.change(textarea, { target: { value: 'Some feedback' } })\n\n    await act(async () => {\n      fireEvent.click(submitButton)\n    })\n\n    expect(mockSendSlackFeedback).toHaveBeenCalledTimes(1)\n    expect(mockSendGoogleFormFeedback).toHaveBeenCalledTimes(1)\n\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'Feedback sent'\n    })\n  })\n\n  it('shows offline timeout toast when connection drops during send', async () => {\n    mockIsOnlineValue = true\n\n    mockSendSlackFeedback.mockImplementation(\n      () =>\n        new Promise(() => {\n          // never resolve to let the timeout win the race\n        })\n    )\n    mockSendGoogleFormFeedback.mockImplementation(\n      () =>\n        new Promise(() => {\n          // never resolve\n        })\n    )\n\n    const { getByTestId } = renderWithProviders()\n\n    const textarea = getByTestId('report-textarea')\n    const submitButton = getByTestId('report-submit')\n\n    fireEvent.change(textarea, { target: { value: 'Some feedback' } })\n\n    await act(async () => {\n      fireEvent.click(submitButton)\n    })\n\n    await act(async () => {\n      mockIsOnlineValue = false\n      jest.advanceTimersByTime(10000)\n    })\n\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'You are offline, please check your internet connection'\n    })\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/AppearanceContent/index.js",
    "content": "import { useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { useLanguageOptions } from '../../../hooks/useLanguageOptions'\nimport { SettingsLanguageSection } from '../SettingsTab/SettingsLanguageSection'\n\nexport const AppearanceContent = () => {\n  const { i18n } = useLingui()\n\n  const [language, setLanguage] = useState(i18n.locale)\n  const { languageOptions } = useLanguageOptions()\n\n  const handleLanguageChange = async (selected) => {\n    await setLanguage(() => selected.value)\n    i18n.activate(selected.value)\n  }\n\n  const selectedLangItem = languageOptions.find((l) => l.value === language)\n\n  return html`\n    <${SettingsLanguageSection}\n      selectedItem=${selectedLangItem}\n      onItemSelect=${handleLanguageChange}\n      placeholder=${i18n._('Select')}\n      title=${i18n._('Language')}\n      description=${i18n._('Choose the language of the app.')}\n      languageOptions=${languageOptions}\n    />\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/index.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport {\n  authoriseCurrentProtectedVault,\n  getCurrentProtectedVaultEncryption,\n  getMasterEncryption,\n  getVaultById,\n  listRecords,\n  useVault\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { ActionsContainer, ContentContainer } from './styles'\nimport { handleExportCSVPerVault } from './utils/exportCsvPerVault'\nimport { handleExportJsonPerVaultTest } from './utils/exportJsonPerVault'\nimport { AlertBox } from '../../../components/AlertBox/index.js'\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport { FormModalHeaderWrapper } from '../../../components/FormModalHeaderWrapper'\nimport { RadioSelect } from '../../../components/RadioSelect'\nimport { SwitchWithLabel } from '../../../components/SwitchWithLabel'\nimport { AuthenticationCard } from '../../../containers/AuthenticationCard'\nimport { CreateFileEncryptionPassword } from '../../../containers/Modal/CreateFileEncryptionPassword'\nimport { ModalContent } from '../../../containers/Modal/ModalContent'\nimport { VaultPasswordFormModalContent } from '../../../containers/Modal/VaultPasswordFormModalContent'\nimport { useModal } from '../../../context/ModalContext'\nimport { useTranslation } from '../../../hooks/useTranslation.js'\nimport { ButtonPrimary } from '../../../lib-react-components'\n\nexport const ExportTab = () => {\n  const { closeModal, setModal } = useModal()\n  const { t } = useTranslation()\n  const {\n    isVaultProtected,\n    refetch: refetchVault,\n    data: currentVault\n  } = useVault()\n\n  const [exportType, setExportType] = useState('json')\n  const [shouldExportEncrypted, setShouldExportEncrypted] = useState(false)\n\n  const radioOptions = [\n    { label: t('CSV'), value: 'csv' },\n    { label: t('JSON (Recommended)'), value: 'json' }\n  ]\n\n  const handleSubmitExport = (vaultsToExport, encryptionPassword = null) => {\n    if (exportType === 'json') {\n      handleExportJsonPerVaultTest(vaultsToExport, encryptionPassword)\n    }\n    if (exportType === 'csv') {\n      handleExportCSVPerVault(vaultsToExport)\n    }\n  }\n\n  const fetchProtectedVault = async (\n    password,\n    currentVaultId,\n    currentEncryption\n  ) => {\n    await authoriseCurrentProtectedVault(password)\n\n    let vault\n\n    try {\n      vault = await getVaultById(currentVaultId.id, {\n        password: password\n      })\n    } catch (error) {\n      await refetchVault(currentVaultId, currentEncryption)\n      throw error\n    }\n\n    const records = (await listRecords()) ?? []\n    const vaultData = [{ ...vault, records }]\n\n    if (shouldExportEncrypted) {\n      setModal(\n        html`<${CreateFileEncryptionPassword}\n          onSubmit=${(encryptionPassword) => {\n            handleSubmitExport(vaultData, encryptionPassword)\n            closeModal()\n          }}\n        />`,\n        { replace: true }\n      )\n    } else {\n      handleSubmitExport(vaultData, null)\n      closeModal()\n    }\n\n    await refetchVault(currentVaultId, currentEncryption)\n  }\n\n  const fetchUnprotectedVault = async (vaultId) => {\n    const vault = await getVaultById(vaultId)\n    const records = (await listRecords()) ?? []\n\n    return { ...vault, records }\n  }\n\n  const onUnprotectedExport = async () => {\n    const vaultsToExport = await fetchUnprotectedVault(currentVault.id)\n\n    if (shouldExportEncrypted) {\n      setModal(\n        html`<${CreateFileEncryptionPassword}\n          onSubmit=${(encryptionPassword) => {\n            handleSubmitExport([vaultsToExport], encryptionPassword)\n            closeModal()\n          }}\n        />`,\n        { replace: true }\n      )\n    } else {\n      handleSubmitExport([vaultsToExport], null)\n      closeModal()\n    }\n  }\n\n  const handleExport = async () => {\n    const currentVaultId = currentVault?.id\n    const isCurrentVaultProtected = await isVaultProtected(currentVaultId)\n    const currentEncryption = isCurrentVaultProtected\n      ? await getCurrentProtectedVaultEncryption(currentVaultId)\n      : await getMasterEncryption()\n\n    if (isCurrentVaultProtected) {\n      setModal(\n        html`<${VaultPasswordFormModalContent}\n          vault=${currentVault.id}\n          onSubmit=${async (password) => {\n            await fetchProtectedVault(\n              password,\n              currentVaultId,\n              currentEncryption\n            )\n            closeModal()\n          }}\n        />`\n      )\n    } else {\n      setModal(html`\n        <${ModalContent}\n          onClose=${closeModal}\n          headerChildren=${html` <${FormModalHeaderWrapper}> <//> `}\n        >\n          <${AuthenticationCard}\n            title=${t('Enter Your Master Password')}\n            buttonLabel=${t('Confirm')}\n            descriptionComponent=${html`<${AlertBox}\n              message=${t(\n                'Confirm your master password to export your vault data.'\n              )}\n            />`}\n            style=${{ width: '100%' }}\n            onSuccess=${onUnprotectedExport}\n          />\n        <//>\n      `)\n    }\n  }\n\n  useEffect(() => {\n    refetchVault()\n  }, [])\n\n  return html` <${CardSingleSetting}\n    testId=\"settings-card-export-vault\"\n    title=${t('Export Vault')}\n  >\n    <${ContentContainer}>\n      <${RadioSelect}\n        title=${t('Choose the file format to export your Vault')}\n        options=${radioOptions}\n        selectedOption=${exportType}\n        onChange=${(type) => {\n          setShouldExportEncrypted(false)\n          setExportType(type)\n        }}\n      />\n\n      ${exportType === 'json' &&\n      html` <${SwitchWithLabel}\n        description=${t(\n          'Protect your exported file so it can only be opened with the password you set'\n        )}\n        label=${t('Protect with Password')}\n        isOn=${shouldExportEncrypted}\n        onChange=${() => {\n          setShouldExportEncrypted((prev) => !prev)\n        }}\n        isLabelBold\n      />`}\n\n      <${ActionsContainer}>\n        <${ButtonPrimary} width=\"180px\" onClick=${handleExport}>\n          ${t('Export')}\n        <//>\n      <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ContentContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n\nexport const Description = styled.span`\n  font-size: 12px;\n  font-weight: 400;\n  font-family: 'Inter';\n  color: ${({ theme }) => theme.colors.white.mode1};\n`\n\nexport const ActionsContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 10px;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/utils/downloadFile.js",
    "content": "export const downloadFile = ({ filename, content }, type) => {\n  const mimeTypes = {\n    json: 'application/json',\n    csv: 'text/csv;charset=utf-8;',\n    pearpass: 'application/json'\n  }\n\n  const blob = new Blob([content], {\n    type: mimeTypes[type] || 'application/octet-stream'\n  })\n  const link = document.createElement('a')\n  link.href = URL.createObjectURL(blob)\n  link.download = filename\n  link.click()\n  URL.revokeObjectURL(link.href)\n}\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/utils/downloadFile.test.js",
    "content": "import { downloadFile } from './downloadFile'\n\ndescribe('downloadFile', () => {\n  let createElementSpy\n  let createObjectURLSpy\n  let revokeObjectURLSpy\n  let clickMock\n  let originalURL\n\n  beforeEach(() => {\n    clickMock = jest.fn()\n    createElementSpy = jest\n      .spyOn(document, 'createElement')\n      .mockImplementation(() => ({\n        set href(val) {\n          this._href = val\n        },\n        get href() {\n          return this._href\n        },\n        set download(val) {\n          this._download = val\n        },\n        get download() {\n          return this._download\n        },\n        click: clickMock\n      }))\n    originalURL = global.URL\n    global.URL = {\n      createObjectURL: jest.fn().mockReturnValue('blob:mock-url'),\n      revokeObjectURL: jest.fn()\n    }\n    createObjectURLSpy = global.URL.createObjectURL\n    revokeObjectURLSpy = global.URL.revokeObjectURL\n  })\n\n  afterEach(() => {\n    jest.restoreAllMocks()\n    global.URL = originalURL\n  })\n\n  it('should create a JSON blob and trigger download', () => {\n    downloadFile({ filename: 'test.json', content: '{\"a\":1}' }, 'json')\n    expect(createElementSpy).toHaveBeenCalledWith('a')\n    expect(createObjectURLSpy).toHaveBeenCalled()\n    expect(clickMock).toHaveBeenCalled()\n    expect(revokeObjectURLSpy).toHaveBeenCalledWith('blob:mock-url')\n  })\n\n  it('should create a CSV blob and trigger download', () => {\n    downloadFile({ filename: 'test.csv', content: 'a,b\\n1,2' }, 'csv')\n    expect(createElementSpy).toHaveBeenCalledWith('a')\n    expect(createObjectURLSpy).toHaveBeenCalled()\n    expect(clickMock).toHaveBeenCalled()\n    expect(revokeObjectURLSpy).toHaveBeenCalledWith('blob:mock-url')\n  })\n\n  it('should set the correct filename on the link', () => {\n    let link\n    createElementSpy.mockImplementation(() => {\n      link = {\n        set href(val) {\n          this._href = val\n        },\n        get href() {\n          return this._href\n        },\n        set download(val) {\n          this._download = val\n        },\n        get download() {\n          return this._download\n        },\n        click: clickMock\n      }\n      return link\n    })\n    downloadFile({ filename: 'file.csv', content: 'x' }, 'csv')\n    expect(link.download).toBe('file.csv')\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/utils/downloadZip.js",
    "content": "import JSZip from 'jszip'\n\nexport const downloadZip = async (files) => {\n  const zip = new JSZip()\n  files.forEach(({ filename, data }) => {\n    zip.file(filename, data)\n  })\n  const content = await zip.generateAsync({ type: 'blob' })\n  const link = document.createElement('a')\n  link.href = URL.createObjectURL(content)\n  link.download = `PearPass_Export_${new Date().toISOString().replace(/[:.-]/g, '_')}.zip`\n  link.click()\n  URL.revokeObjectURL(link.href)\n}\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/utils/downloadZip.test.js",
    "content": "import JSZip from 'jszip'\n\nimport { downloadZip } from './downloadZip'\n\njest.mock('jszip')\n\ndescribe('downloadZip', () => {\n  let createElementSpy\n  let createObjectURLSpy\n  let revokeObjectURLSpy\n  let clickMock\n  let originalURL\n\n  beforeEach(() => {\n    clickMock = jest.fn()\n    createElementSpy = jest\n      .spyOn(document, 'createElement')\n      .mockImplementation(() => ({\n        set href(val) {\n          this._href = val\n        },\n        get href() {\n          return this._href\n        },\n        set download(val) {\n          this._download = val\n        },\n        get download() {\n          return this._download\n        },\n        click: clickMock\n      }))\n    originalURL = global.URL\n    global.URL = {\n      createObjectURL: jest.fn().mockReturnValue('blob:mock-zip-url'),\n      revokeObjectURL: jest.fn()\n    }\n    createObjectURLSpy = global.URL.createObjectURL\n    revokeObjectURLSpy = global.URL.revokeObjectURL\n\n    JSZip.mockClear()\n    JSZip.mockImplementation(() => ({\n      file: jest.fn(),\n      generateAsync: jest.fn().mockResolvedValue('mock-blob')\n    }))\n  })\n\n  afterEach(() => {\n    jest.restoreAllMocks()\n    global.URL = originalURL\n  })\n\n  it('should create a zip file with the provided files and trigger download', async () => {\n    const files = [\n      { filename: 'file1.txt', data: 'data1' },\n      { filename: 'file2.txt', data: 'data2' }\n    ]\n    await downloadZip(files)\n\n    expect(JSZip).toHaveBeenCalledTimes(1)\n    const zipInstance = JSZip.mock.results[0].value\n    expect(zipInstance.file).toHaveBeenCalledWith('file1.txt', 'data1')\n    expect(zipInstance.file).toHaveBeenCalledWith('file2.txt', 'data2')\n    expect(zipInstance.generateAsync).toHaveBeenCalledWith({ type: 'blob' })\n    expect(createElementSpy).toHaveBeenCalledWith('a')\n    expect(createObjectURLSpy).toHaveBeenCalledWith('mock-blob')\n    expect(clickMock).toHaveBeenCalled()\n    expect(revokeObjectURLSpy).toHaveBeenCalledWith('blob:mock-zip-url')\n  })\n\n  it('should set the correct filename pattern on the link', async () => {\n    let link\n    createElementSpy.mockImplementation(() => {\n      link = {\n        set href(val) {\n          this._href = val\n        },\n        get href() {\n          return this._href\n        },\n        set download(val) {\n          this._download = val\n        },\n        get download() {\n          return this._download\n        },\n        click: clickMock\n      }\n      return link\n    })\n    await downloadZip([{ filename: 'test.txt', data: 'abc' }])\n    expect(link.download).toMatch(\n      /^PearPass_Export_\\d{4}_\\d{2}_\\d{2}T\\d{2}_\\d{2}_\\d{2}_\\d{3}Z\\.zip$/\n    )\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/utils/exportCsvPerVault.js",
    "content": "import { parseDataToCsvText } from '@tetherto/pearpass-lib-data-export'\n\nimport { downloadFile } from './downloadFile'\nimport { downloadZip } from './downloadZip'\n\nexport const handleExportCSVPerVault = async (data) => {\n  const vaultsToExport = await parseDataToCsvText(data)\n\n  if (vaultsToExport?.length === 1) {\n    downloadFile(\n      {\n        filename: vaultsToExport[0].filename,\n        content: vaultsToExport[0].data\n      },\n      'csv'\n    )\n  } else if (vaultsToExport?.length > 1) {\n    await downloadZip(vaultsToExport)\n  }\n}\n"
  },
  {
    "path": "src/pages/SettingsView/ExportTab/utils/exportJsonPerVault.js",
    "content": "import { parseDataToJson } from '@tetherto/pearpass-lib-data-export'\nimport { encryptExportData } from '@tetherto/pearpass-lib-vault'\n\nimport { downloadFile } from './downloadFile'\nimport { downloadZip } from './downloadZip'\n\n/**\n * @param {unknown[]} data\n * @param {string | null} [encryptionPassword]\n */\nexport const handleExportJsonPerVaultTest = async (\n  data,\n  encryptionPassword = null\n) => {\n  const vaultsToExport = await parseDataToJson(data)\n\n  const processedVaults = encryptionPassword\n    ? await Promise.all(\n        vaultsToExport.map(async (vault) => {\n          const encryptedData = await encryptExportData(\n            vault.data,\n            encryptionPassword\n          )\n          return {\n            filename: vault?.filename,\n            data: JSON.stringify(encryptedData, null, 2)\n          }\n        })\n      )\n    : vaultsToExport\n\n  if (processedVaults.length === 1) {\n    downloadFile(\n      {\n        filename: processedVaults[0].filename,\n        content: processedVaults[0].data\n      },\n      'json'\n    )\n  } else if (processedVaults.length > 1) {\n    await downloadZip(processedVaults)\n  }\n}\n"
  },
  {
    "path": "src/pages/SettingsView/ImportTab/index.js",
    "content": "import { MAX_IMPORT_RECORDS } from '@tetherto/pearpass-lib-constants'\nimport {\n  decryptKeePassKdbx,\n  parse1PasswordData,\n  parseBitwardenData,\n  parseKeePassData,\n  parseLastPassData,\n  parseNordPassData,\n  parsePearPassData,\n  parseProtonPassData\n} from '@tetherto/pearpass-lib-data-import'\nimport {\n  decryptExportData,\n  useCreateRecord\n} from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { ContentContainer, Description, ImportOptionsContainer } from './styles'\nimport { readFileContent } from './utils/readFileContent'\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport { ImportDataOption } from '../../../components/ImportDataOption'\nimport { DecryptFilePassword } from '../../../containers/Modal/DecryptFilePassword'\nimport { useLoadingContext } from '../../../context/LoadingContext'\nimport { useModal } from '../../../context/ModalContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { logger } from '../../../utils/logger'\n\nconst importOptions = [\n  {\n    title: '1Password',\n    type: '1password',\n    testId: 'settings-import-1password',\n    accepts: ['.csv']\n  },\n  {\n    title: 'Bitwarden',\n    type: 'bitwarden',\n    testId: 'settings-import-bitwarden',\n    accepts: ['.json', '.csv']\n  },\n  {\n    title: 'KeePass',\n    type: 'keepass',\n    testId: 'settings-import-keepass',\n    accepts: ['.kdbx', '.csv', '.xml']\n  },\n  {\n    title: 'KeePassXC',\n    type: 'keepass',\n    testId: 'settings-import-keepassxc',\n    accepts: ['.csv', '.xml']\n  },\n  {\n    title: 'LastPass',\n    type: 'lastpass',\n    testId: 'settings-import-lastpass',\n    accepts: ['.csv']\n  },\n  {\n    title: 'NordPass',\n    type: 'nordpass',\n    testId: 'settings-import-nordpass',\n    accepts: ['.csv']\n  },\n  {\n    title: 'Proton Pass',\n    type: 'protonpass',\n    testId: 'settings-import-protonpass',\n    accepts: ['.csv', '.json']\n  },\n  {\n    title: 'PearPass Encrypted File',\n    type: 'encrypted',\n    accepts: ['.json']\n  },\n  {\n    title: 'PearPass Unencrypted File',\n    type: 'unencrypted',\n    testId: 'settings-import-unencrypted',\n    accepts: ['.json', '.csv']\n  }\n]\n\nconst isAllowedType = (fileType, accepts) =>\n  accepts.some((accept) => {\n    if (accept.startsWith('.')) {\n      return fileType === accept.slice(1)\n    }\n    return fileType === accept\n  })\n\nexport const ImportTab = () => {\n  const { t } = useTranslation()\n  const { setIsLoading } = useLoadingContext()\n  const { setToast } = useToast()\n  const { setModal, closeModal } = useModal()\n\n  const { createRecord } = useCreateRecord()\n\n  const onError = (error) => {\n    setToast({\n      message: error.message\n    })\n  }\n\n  const importRecords = async (result) => {\n    if (result.length === 0) {\n      setToast({\n        message: t('No records found to import!')\n      })\n      return\n    }\n\n    if (result.length > MAX_IMPORT_RECORDS) {\n      setToast({\n        message: t(`Too many records. Maximum is ${MAX_IMPORT_RECORDS}.`)\n      })\n      return\n    }\n\n    const BATCH_SIZE = 100\n    const totalRecords = result.length\n\n    for (let i = 0; i < totalRecords; i += BATCH_SIZE) {\n      const batch = result.slice(i, i + BATCH_SIZE)\n      await Promise.all(batch.map((record) => createRecord(record, onError)))\n    }\n\n    setToast({\n      message: t('Data imported successfully')\n    })\n  }\n\n  const handleFileChange = async ({ files, type, accepts }) => {\n    let isFileEncrypted = false\n    let encryptedData\n\n    const file = files[0]\n    if (!file) return\n\n    const filename = file.name\n    const fileType = filename.split('.').pop()\n\n    if (!isAllowedType(fileType, accepts)) {\n      throw new Error('Invalid file type')\n    }\n\n    if (type === 'keepass' && fileType === 'kdbx') {\n      try {\n        isFileEncrypted = true\n        encryptedData = await readFileContent(file, { as: 'buffer' })\n      } catch (error) {\n        setToast({ message: t('Failed to read file') })\n        logger.error(\n          'KeePass KDBX import',\n          'Error reading file:',\n          error.message || error\n        )\n      }\n    }\n\n    if (type === 'encrypted') {\n      try {\n        isFileEncrypted = true\n        encryptedData = await readFileContent(file)\n      } catch (error) {\n        setToast({ message: t('Failed to read file') })\n        logger.error(\n          'Encrypted file import',\n          'Error reading file:',\n          error.message || error\n        )\n      }\n    }\n\n    if (isFileEncrypted) {\n      setModal(\n        <DecryptFilePassword\n          encryptedData={encryptedData}\n          onSubmit={async (password) => {\n            await onImport({\n              type,\n              fileContent: encryptedData,\n              fileType,\n              password,\n              isEncrypted: true\n            })\n          }}\n        />,\n        { replace: true }\n      )\n\n      return\n    }\n\n    const fileContent = await readFileContent(file)\n\n    await onImport({ type, fileContent, fileType })\n  }\n\n  const onImport = async ({\n    type,\n    fileContent,\n    fileType,\n    password,\n    isEncrypted\n  }) => {\n    setIsLoading(true)\n    let result = []\n    let dataToProcess = fileContent\n\n    try {\n      if (type === 'keepass' && fileType === 'kdbx') {\n        if (!password) {\n          throw new Error('Password is required for encrypted files')\n        }\n\n        dataToProcess = await decryptKeePassKdbx(fileContent, password)\n        type = 'keepass-kdbx'\n      }\n\n      if (type === 'encrypted' && isEncrypted) {\n        if (!password) {\n          throw new Error('Password is required for encrypted files')\n        }\n\n        const encryptedData = JSON.parse(fileContent)\n        dataToProcess = await decryptExportData(encryptedData, password)\n      }\n    } catch {\n      throw new Error(\n        'Failed to decrypt file. Please check your password and try again.'\n      )\n    }\n\n    try {\n      switch (type) {\n        case '1password':\n          result = await parse1PasswordData(dataToProcess, fileType)\n          break\n        case 'bitwarden':\n          result = await parseBitwardenData(dataToProcess, fileType)\n          break\n        case 'lastpass':\n          result = await parseLastPassData(dataToProcess, fileType)\n          break\n        case 'keepass':\n          result = await parseKeePassData(dataToProcess, fileType)\n          break\n        case 'keepass-kdbx':\n          result = await parseKeePassData(dataToProcess, 'kdbx')\n          break\n        case 'nordpass':\n          result = await parseNordPassData(dataToProcess, fileType)\n          break\n        case 'protonpass':\n          result = await parseProtonPassData(dataToProcess, fileType)\n          break\n        case 'unencrypted':\n          result = await parsePearPassData(dataToProcess, fileType)\n          break\n        case 'encrypted':\n          result = await parsePearPassData(dataToProcess, 'json')\n          break\n        default:\n          throw new Error(\n            'Unsupported template type. Please select a valid import option.'\n          )\n      }\n\n      await importRecords(result)\n    } catch (error) {\n      throw new Error(\n        error.message || 'Failed to parse file. Please ensure it is valid.'\n      )\n    } finally {\n      setIsLoading(false)\n      closeModal()\n    }\n  }\n\n  return html`<div>\n    <${CardSingleSetting}\n      testId=\"settings-card-import-vault\"\n      title=${t('Import Vault')}\n    >\n      <${ContentContainer}>\n        <${Description}>\n          ${t(\n            \"Move your saved items here from another password manager. They'll be added to this vault.\"\n          )}\n        <//>\n\n        <${ImportOptionsContainer}>\n          ${importOptions.map(\n            ({ title, accepts, type, testId }) =>\n              html`<${ImportDataOption}\n                key=${title}\n                title=${title}\n                accepts=${accepts}\n                testId=${testId}\n                onFilesSelected=${(files) => {\n                  handleFileChange({ files, type, accepts })\n                }}\n              />`\n          )}\n        <//>\n      <//>\n    <//>\n  </div>`\n}\n"
  },
  {
    "path": "src/pages/SettingsView/ImportTab/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const ContentContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n\nexport const Description = styled.span`\n  font-size: 12px;\n  font-weight: 400;\n  font-family: 'Inter';\n  color: ${({ theme }) => theme.colors.white.mode1};\n`\n\nexport const ActionsContainer = styled.div`\n  display: flex;\n  justify-content: start;\n  gap: 10px;\n`\n\nexport const ImportOptionsContainer = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  row-gap: 20px;\n  column-gap: 36px;\n`\n\nexport const ModalTitle = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-weight: 500;\n`\n\nexport const PasswordInput = styled.input`\n  padding: 10px 12px;\n  border-radius: 8px;\n  border: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  background-color: transparent;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-size: 14px;\n  outline: none;\n`\n\nexport const ErrorText = styled.span`\n  color: ${({ theme }) => theme.colors.errorRed.mode1};\n  font-size: 12px;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/ImportTab/utils/readFileContent.js",
    "content": "/**\n *\n * @param {File} file\n * @param {Object} [options]\n * @param {'text'|'buffer'} [options.as='text']\n * @returns {Promise<string|ArrayBuffer>}\n */\nexport const readFileContent = (file, { as = 'text' } = {}) =>\n  new Promise((resolve, reject) => {\n    const reader = new FileReader()\n    reader.onload = (e) => resolve(e.target.result)\n    reader.onerror = (e) => reject(e)\n    if (as === 'buffer') {\n      reader.readAsArrayBuffer(file)\n    } else {\n      reader.readAsText(file)\n    }\n  })\n"
  },
  {
    "path": "src/pages/SettingsView/ImportTab/utils/readFileContent.test.js",
    "content": "import { readFileContent } from './readFileContent'\n\ndescribe('readFileContent', () => {\n  let fileMock\n  let fileReaderMock\n  let originalFileReader\n\n  beforeEach(() => {\n    fileMock = new Blob(['test content'], { type: 'text/plain' })\n    originalFileReader = global.FileReader\n\n    fileReaderMock = {\n      readAsText: jest.fn(),\n      addEventListener: jest.fn(),\n      removeEventListener: jest.fn(),\n      onload: null,\n      onerror: null,\n      result: 'test content'\n    }\n\n    global.FileReader = jest.fn(() => fileReaderMock)\n  })\n\n  afterEach(() => {\n    global.FileReader = originalFileReader\n    jest.clearAllMocks()\n  })\n\n  it('should resolve with file content on successful read', async () => {\n    const promise = readFileContent(fileMock)\n    fileReaderMock.onload({ target: { result: 'test content' } })\n    await expect(promise).resolves.toBe('test content')\n    expect(fileReaderMock.readAsText).toHaveBeenCalledWith(fileMock)\n  })\n\n  it('should reject if there is a read error', async () => {\n    const promise = readFileContent(fileMock)\n    const errorEvent = new Event('error')\n    fileReaderMock.onerror(errorEvent)\n    await expect(promise).rejects.toBe(errorEvent)\n    expect(fileReaderMock.readAsText).toHaveBeenCalledWith(fileMock)\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/SecurityContent/index.js",
    "content": "import { useMemo, useState } from 'react'\n\nimport { AUTO_LOCK_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { html } from 'htm/react'\n\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport { SwitchWithLabel } from '../../../components/SwitchWithLabel'\nimport { LOCAL_STORAGE_KEYS } from '../../../constants/localStorage'\nimport { RuleSelector } from '../../../containers/Modal/GeneratePasswordSideDrawerContent/RuleSelector'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { isPasswordChangeReminderDisabled } from '../../../utils/isPasswordChangeReminderDisabled'\nimport { Description } from '../ExportTab/styles'\nimport { AutoLockConfiguration } from '../SettingsAdvancedTab/SettingsAutoLockConfiguration'\nimport { SwitchList } from '../SettingsAdvancedTab/styles'\nimport { SettingsPasswordsSection } from '../SettingsTab/SettingsPasswordsSection'\n\nexport const SecurityContent = () => {\n  const { t } = useTranslation()\n\n  const [isPasswordReminderDisabled, setIsPasswordReminderDisabled] = useState(\n    isPasswordChangeReminderDisabled()\n  )\n\n  const [selectedRules, setSelectedRules] = useState(() => {\n    const isDisabled = localStorage.getItem(\n      LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED\n    )\n\n    return {\n      copyToClipboard: isDisabled !== 'true'\n    }\n  })\n\n  const ruleOptions = useMemo(() => {\n    const options = [\n      {\n        name: 'copyToClipboard',\n        label: t('Copy to clipboard'),\n        description: t('Copy any password instantly with one tap.'),\n        testId: 'settings-copy-to-clipboard-switch'\n      }\n    ]\n\n    return options\n  }, [t])\n\n  const handleSetRules = (newRules) => {\n    if (newRules.copyToClipboard !== selectedRules.copyToClipboard) {\n      if (newRules.copyToClipboard) {\n        localStorage.removeItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED)\n      } else {\n        localStorage.setItem(\n          LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED,\n          'true'\n        )\n      }\n    }\n\n    setSelectedRules({ ...newRules })\n  }\n\n  const handlePasswordChangeReminder = (isEnabled) => {\n    if (!isEnabled) {\n      localStorage.setItem(\n        LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED,\n        'false'\n      )\n    } else {\n      localStorage.removeItem(\n        LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED\n      )\n    }\n\n    setIsPasswordReminderDisabled(!isEnabled)\n  }\n\n  return html`\n    <${SettingsPasswordsSection} />\n\n    <${CardSingleSetting}\n      testId=\"settings-card-pearpass-functions\"\n      title=${t('PearPass functions')}\n    >\n      <${Description}>\n        ${t('Control how PearPass works and keep your vault secure.')}\n      <//>\n\n      <${SwitchList}>\n        <${SwitchWithLabel}\n          testId=\"settings-reminders-switch\"\n          isOn=${!isPasswordReminderDisabled}\n          onChange=${(isOn) => handlePasswordChangeReminder(isOn)}\n          label=${t('Reminders')}\n          isSwitchFirst\n          stretch=${false}\n          description=${t(\n            \"Get alerts when it's time to update your passwords.\"\n          )}\n        />\n        <${RuleSelector}\n          rules=${ruleOptions}\n          selectedRules=${selectedRules}\n          isSwitchFirst\n          stretch=${false}\n          setRules=${handleSetRules}\n        />\n\n        ${AUTO_LOCK_ENABLED ? html`<${AutoLockConfiguration} />` : null}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsAdvancedTab/SettingsAutoLockConfiguration/index.tsx",
    "content": "import { html } from 'htm/react'\nimport { AUTO_LOCK_TIMEOUT_OPTIONS, BE_AUTO_LOCK_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { useState } from 'react'\nimport styled from 'styled-components'\nimport { PopupMenu } from '../../../../components/PopupMenu'\nimport { Select } from '../../../../components/Select'\n\nimport { useAutoLockPreferences } from '../../../../hooks/useAutoLockPreferences'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { InfoIcon } from '../../../../lib-react-components'\nimport { TooltipWrapper } from '../../../../lib-react-components/components/TooltipWrapper'\nimport {\n  Container,\n  ListContainer,\n  TooltipContainer,\n  TooltipContent,\n  Wrapper\n} from './styles'\n\nconst Label = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 600;\n`\n\nconst Description = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 300;\n  line-height: normal;\n`\n\nconst ContentWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 2px;\n`\n\nexport const TIMEOUT_OPTIONS = Object.entries(AUTO_LOCK_TIMEOUT_OPTIONS).map(\n  ([key, option]) => ({\n    ...option,\n    testId: `settings-auto-logout-${key.toLowerCase()}`\n  })\n)\n\nexport const AutoLockConfiguration = () => {\n  const { t } = useTranslation()\n\n  const [isTooltipOpen, setIsTooltipOpen] = useState(false)\n\n  const { timeoutMs, setTimeoutMs } = useAutoLockPreferences()\n\n  const translatedOptions = TIMEOUT_OPTIONS.map((option) => ({\n    ...option,\n    label: t(option.label)\n  }))\n\n  const selectedOption = timeoutMs === null\n    ? translatedOptions.find((option) => option.value === null)\n    : translatedOptions.find((option) => option.value === timeoutMs) ||\n    translatedOptions[0]\n\n  return html`\n    <${Container} data-testid=\"settings-auto-logout\">\n      <${Wrapper}>\n        <${ContentWrapper}>\n          <${Label}>${t('Auto Log-out')}<//>\n          <${Description}>\n            ${t(\n    'Automatically logs you out after you stop interacting with the app, based on the timeout you select.'\n  )}\n          <//>\n        <//>\n        <${Select}\n          testId=\"settings-auto-logout-dropdown\"\n          items=${translatedOptions}\n          selectedItem=${selectedOption}\n          onItemSelect=${(item: { label: string; value: number | null }) => setTimeoutMs(item.value)}\n          placeholder=${t('Select a timeout')}\n        />\n      <//>\n      <${TooltipContainer}>\n        <${PopupMenu}\n          displayOnHover=${true}\n          side=\"right\"\n          align=\"right\"\n          isOpen=${isTooltipOpen}\n          setIsOpen=${setIsTooltipOpen}\n          content=${html`\n            <${TooltipWrapper}>\n              <${TooltipContent}>\n                <${ListContainer}>\n                  <li>\n                    ${t(\n    \"Auto-lock determines how long Pearpass stays unlocked when you're not actively using it.\"\n  )}\n                  </li>\n                  <li>\n                    ${t(\n    'Inactivity is based on your interaction with Pearpass, not on device idle time.'\n  )}\n                  </li>\n                  ${BE_AUTO_LOCK_ENABLED && html`<li>\n                    ${t(\n    \"The browser activity will also keep your session aligned in Desktop while you're working, and the setting will be shared by both. Mobile auto-lock is managed separately.\"\n  )}\n                  </li>`}\n                <//>\n              <//>\n            <//>\n          `}\n        >\n          <${InfoIcon} />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsAdvancedTab/SettingsAutoLockConfiguration/styles.ts",
    "content": "import styled from \"styled-components\";\n\nexport const Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  `\n  \nexport const Container = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  position: relative;\n  `\n\nexport const TooltipContainer = styled.div`\n  position: absolute;\n  top: 0;\n  right: 0;\n` \n\nexport const TooltipContent = styled.div`\n  font-family: 'Inter';\n  font-size: 14px;\n  line-height: 18px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: 400px;\n`\n\nexport const ListContainer = styled.ul`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  padding-top: 5px;\n  padding-left: 20px;\n  list-style-type: disc;\n`"
  },
  {
    "path": "src/pages/SettingsView/SettingsAdvancedTab/SettingsBlindPeersSection/index.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport {\n  BLIND_PEER_TYPE,\n  BLIND_PEERS_LEARN_MORE\n} from '@tetherto/pearpass-lib-constants'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { useBlindMirrors } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport {\n  ActiveDot,\n  ActiveIndicator,\n  ActiveText,\n  LearnMoreLink,\n  ListContainer,\n  PeerCountDivider,\n  PeerCountText,\n  PeerTypeCard,\n  PeerTypeText,\n  TooltipContent,\n  TooltipText,\n  Wrapper,\n  YourPeersSection,\n  YourPeersTitle\n} from './styles'\nimport { CardSingleSetting } from '../../../../components/CardSingleSetting'\nimport { PopupMenu } from '../../../../components/PopupMenu'\nimport { BlindPeersModalContent } from '../../../../containers/Modal/BlindPeersModalContent'\nimport { RuleSelector } from '../../../../containers/Modal/GeneratePasswordSideDrawerContent/RuleSelector'\nimport { useLoadingContext } from '../../../../context/LoadingContext'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { ButtonSecondary, InfoIcon } from '../../../../lib-react-components'\nimport { TooltipWrapper } from '../../../../lib-react-components/components/TooltipWrapper'\nimport { OutsideLinkIcon } from '../../../../lib-react-components/icons/OutsideLinkIcon'\n\nexport const SettingsBlindPeersSection = () => {\n  const { t } = useTranslation()\n  const { setIsLoading } = useLoadingContext()\n  const { setModal, closeModal } = useModal()\n  const { setToast } = useToast()\n\n  const [isTooltipOpen, setIsTooltipOpen] = useState(false)\n\n  const {\n    removeAllBlindMirrors,\n    data: blindMirrorsData,\n    getBlindMirrors,\n    addBlindMirrors,\n    addDefaultBlindMirrors\n  } = useBlindMirrors()\n\n  const [blindPeersRules, setBlindPeersRules] = useState({\n    blindPeers: false\n  })\n  const [isUpdating, setIsUpdating] = useState(false)\n\n  useEffect(() => {\n    if (blindMirrorsData.length > 0) {\n      setBlindPeersRules({ blindPeers: true })\n    } else {\n      setBlindPeersRules({ blindPeers: false })\n    }\n  }, [blindMirrorsData])\n\n  useEffect(() => {\n    getBlindMirrors()\n  }, [])\n\n  /**\n   * @param {{\n   *   callback: () => Promise<void>,\n   *   errorMessage: string,\n   *   successMessage?: string\n   * }} params\n   */\n  const handleBlindMirrorsRequest = async ({\n    callback,\n    errorMessage,\n    successMessage\n  }) => {\n    try {\n      setIsLoading(true)\n      await callback()\n      if (successMessage) {\n        setToast({\n          message: successMessage\n        })\n      }\n    } catch {\n      setToast({\n        message: errorMessage\n      })\n    } finally {\n      setIsLoading(false)\n    }\n  }\n\n  const handleBlindPeersConfirm = async (data) => {\n    if (data.isEditMode && blindMirrorsData?.[0]?.isDefault) {\n      setIsUpdating(true)\n      await handleBlindMirrorsRequest({\n        callback: removeAllBlindMirrors,\n        errorMessage: t('Error removing existing Blind Peers')\n      })\n    }\n\n    if (data.blindPeerType === BLIND_PEER_TYPE.PERSONAL) {\n      if (data.blindPeers?.length) {\n        await handleBlindMirrorsRequest({\n          callback: () => addBlindMirrors(data.blindPeers),\n          errorMessage: t('Error adding Blind Peers'),\n          successMessage: t('Manual Blind Peers enabled successfully')\n        })\n        setIsUpdating(false)\n      } else {\n        return\n      }\n    }\n\n    if (data.blindPeerType === BLIND_PEER_TYPE.DEFAULT) {\n      await handleBlindMirrorsRequest({\n        callback: addDefaultBlindMirrors,\n        errorMessage: t('Error adding Blind Peers'),\n        successMessage: t('Automatic Blind Peers enabled successfully')\n      })\n      setIsUpdating(false)\n    }\n\n    closeModal()\n  }\n\n  const handleSetBlindPeersRules = async (newRules) => {\n    if (newRules.blindPeers === true) {\n      setModal(\n        html`<${BlindPeersModalContent}\n          onConfirm=${handleBlindPeersConfirm}\n          onClose=${() => {\n            setBlindPeersRules({ blindPeers: false })\n            closeModal()\n          }}\n        />`\n      )\n    }\n\n    if (newRules.blindPeers === false) {\n      await handleBlindMirrorsRequest({\n        callback: removeAllBlindMirrors,\n        errorMessage: t('Error removing Blind Peers')\n      })\n    }\n  }\n\n  const handleEditPress = () => {\n    setModal(\n      html`<${BlindPeersModalContent}\n        onConfirm=${handleBlindPeersConfirm}\n        onClose=${closeModal}\n      />`\n    )\n  }\n\n  return html`\n    <${CardSingleSetting}\n      testId=\"settings-card-blind-peering\"\n      title=${t('Blind Peering')}\n      additionalHeaderContent=${html`\n        <${PopupMenu}\n          displayOnHover=${true}\n          side=\"right\"\n          align=\"right\"\n          isOpen=${isTooltipOpen}\n          setIsOpen=${setIsTooltipOpen}\n          content=${html`\n            <${TooltipWrapper}>\n              <${TooltipContent}>\n                <${TooltipText}>\n                  ${t('Choose between:')}\n\n                  <${ListContainer}>\n                    <li>\n                      ${t(\n                        'Automatic blind peers: Let PearPass allocate blind peers for you to handle syncing.'\n                      )}\n                    </li>\n                    <li>\n                      ${t(\n                        'Manual blind peers: Setup your own private blind peers.'\n                      )}\n                    </li>\n                  <//>\n                  ${t(\n                    'In both cases, all data stays fully encrypted, ensuring safe, non-intrusive replication and better data consistency.'\n                  )}\n                <//>\n                <${LearnMoreLink} href=${BLIND_PEERS_LEARN_MORE}>\n                  <${OutsideLinkIcon} color=${colors.primary400.mode1} />\n                  ${t('Learn more about blind peering.')}\n                <//>\n              <//>\n            <//>\n          `}\n        >\n          <${InfoIcon} />\n        <//>\n      `}\n    >\n      <${Wrapper}>\n        <${RuleSelector}\n          rules=${[\n            {\n              name: 'blindPeers',\n              label: t(`Private Connections`),\n              description: t(\n                'Sync your encrypted vault securely with blind peers to improve availability and consistency. Blind peers cannot read your data.'\n              )\n            }\n          ]}\n          selectedRules=${blindPeersRules}\n          setRules=${handleSetBlindPeersRules}\n        />\n        ${(blindMirrorsData.length > 0 || isUpdating) &&\n        html`\n          <${YourPeersSection}>\n            <${YourPeersTitle}>${t('Your Blind Peers')}</>\n            <${PeerTypeCard}>\n              <${PeerTypeText}>\n                ${\n                  blindMirrorsData[0]?.isDefault\n                    ? t('Automatic')\n                    : t('Personal')\n                }\n              </>\n              <${ActiveIndicator}>\n                <${ActiveDot} />\n                <${ActiveText}>${t('Active')}</>\n                ${\n                  !blindMirrorsData[0]?.isDefault &&\n                  html`\n                  <${PeerCountDivider} />\n                  <${PeerCountText}>\n                    ${blindMirrorsData.length} ${t('peers')}\n                  </>\n                `\n                }\n              </>\n            </>\n            \n            <${ButtonSecondary} onClick=${handleEditPress}>\n              ${t('Edit')}\n            </>\n          </>\n        `}\n        <${LearnMoreLink} href=${BLIND_PEERS_LEARN_MORE}>\n          <${OutsideLinkIcon} color=${colors.primary400.mode1} />\n          ${t('Learn more about blind peering.')}\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsAdvancedTab/SettingsBlindPeersSection/index.test.js",
    "content": "import React from 'react'\n\nimport { render, fireEvent } from '@testing-library/react'\nimport '@testing-library/jest-dom'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SettingsBlindPeersSection } from './index'\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str) => str\n  })\n}))\n\njest.mock('../../../../context/LoadingContext', () => ({\n  useLoadingContext: () => ({\n    setIsLoading: jest.fn()\n  })\n}))\n\nconst mockSetModal = jest.fn()\nconst mockCloseModal = jest.fn()\njest.mock('../../../../context/ModalContext', () => ({\n  useModal: () => ({\n    setModal: mockSetModal,\n    closeModal: mockCloseModal\n  })\n}))\n\njest.mock('../../../../context/ToastContext', () => ({\n  useToast: () => ({\n    setToast: jest.fn()\n  })\n}))\n\nconst mockRemoveAllBlindMirrors = jest.fn()\nconst mockGetBlindMirrors = jest.fn()\nconst mockAddBlindMirrors = jest.fn()\nconst mockAddDefaultBlindMirrors = jest.fn()\n\njest.mock('@tetherto/pearpass-lib-vault', () => {\n  const stableData = []\n  return {\n    useBlindMirrors: () => ({\n      removeAllBlindMirrors: mockRemoveAllBlindMirrors,\n      data: stableData,\n      getBlindMirrors: mockGetBlindMirrors,\n      addBlindMirrors: mockAddBlindMirrors,\n      addDefaultBlindMirrors: mockAddDefaultBlindMirrors\n    })\n  }\n})\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  BLIND_PEER_TYPE: {\n    PERSONAL: 'personal',\n    DEFAULT: 'default'\n  }\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-theme-provider', () => ({\n  ThemeProvider: ({ children }) => <div>{children}</div>,\n  colors: {\n    primary400: {\n      mode1: '#007AFF'\n    }\n  }\n}))\n\njest.mock('./styles', () => ({\n  LearnMoreLink: ({ children, href }) => <a href={href}>{children}</a>,\n  ListContainer: ({ children }) => <ul>{children}</ul>,\n  TooltipContent: ({ children }) => <div>{children}</div>,\n  TooltipText: ({ children }) => <div>{children}</div>,\n  Wrapper: ({ children }) => <div>{children}</div>\n}))\n\njest.mock('../../../../components/CardSingleSetting', () => ({\n  CardSingleSetting: ({ children, title, additionalHeaderContent }) => (\n    <div data-testid=\"card-single-setting\">\n      <div data-testid=\"card-title\">{title}</div>\n      {additionalHeaderContent && (\n        <div data-testid=\"additional-header\">{additionalHeaderContent}</div>\n      )}\n      <div data-testid=\"card-content\">{children}</div>\n    </div>\n  )\n}))\n\njest.mock('../../../../components/PopupMenu', () => ({\n  PopupMenu: ({ children }) => <div data-testid=\"popup-menu\">{children}</div>\n}))\n\njest.mock('../../../../containers/Modal/BlindPeersModalContent', () => ({\n  BlindPeersModalContent: () => <div data-testid=\"blind-peers-modal\" />\n}))\n\njest.mock(\n  '../../../../containers/Modal/GeneratePasswordSideDrawerContent/RuleSelector',\n  () => ({\n    RuleSelector: ({ rules, selectedRules, setRules }) => (\n      <div data-testid=\"rule-selector\">\n        {rules.map((rule) => (\n          <div key={rule.name} data-testid={`rule-${rule.name}`}>\n            <span data-testid={`rule-label-${rule.name}`}>{rule.label}</span>\n            <span data-testid={`rule-description-${rule.name}`}>\n              {rule.description}\n            </span>\n            <button\n              data-testid={`toggle-${rule.name}`}\n              onClick={() =>\n                setRules({ [rule.name]: !selectedRules[rule.name] })\n              }\n            >\n              {selectedRules[rule.name] ? 'Disable' : 'Enable'}\n            </button>\n          </div>\n        ))}\n      </div>\n    )\n  })\n)\n\njest.mock('../../../../lib-react-components', () => ({\n  InfoIcon: () => <div data-testid=\"info-icon\">Info</div>\n}))\n\njest.mock('../../../../lib-react-components/components/TooltipWrapper', () => ({\n  TooltipWrapper: ({ children }) => (\n    <div data-testid=\"tooltip-wrapper\">{children}</div>\n  )\n}))\n\njest.mock('../../../../lib-react-components/icons/OutsideLinkIcon', () => ({\n  OutsideLinkIcon: () => <div data-testid=\"outside-link-icon\">Link</div>\n}))\n\ndescribe('SettingsBlindPeersSection', () => {\n  const renderWithProviders = (component) =>\n    render(<ThemeProvider>{component}</ThemeProvider>)\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('matches snapshot', () => {\n    const { container } = renderWithProviders(<SettingsBlindPeersSection />)\n    expect(container).toMatchSnapshot()\n  })\n\n  it('renders the component with correct title', () => {\n    const { getByTestId } = renderWithProviders(<SettingsBlindPeersSection />)\n\n    expect(getByTestId('card-title')).toHaveTextContent('Blind Peering')\n  })\n\n  it('calls getBlindMirrors on component mount', () => {\n    renderWithProviders(<SettingsBlindPeersSection />)\n\n    expect(mockGetBlindMirrors).toHaveBeenCalledTimes(1)\n  })\n\n  it('renders rule selector with correct props', () => {\n    const { getByTestId } = renderWithProviders(<SettingsBlindPeersSection />)\n\n    const ruleSelector = getByTestId('rule-selector')\n    expect(ruleSelector).toBeInTheDocument()\n\n    const blindPeersRule = getByTestId('rule-blindPeers')\n    expect(blindPeersRule).toBeInTheDocument()\n\n    const ruleLabel = getByTestId('rule-label-blindPeers')\n    expect(ruleLabel).toHaveTextContent('Private Connections')\n\n    const ruleDescription = getByTestId('rule-description-blindPeers')\n    expect(ruleDescription).toHaveTextContent(\n      'Sync your encrypted vault securely with blind peers'\n    )\n  })\n\n  it('renders learn more link', () => {\n    const { getByText } = renderWithProviders(<SettingsBlindPeersSection />)\n\n    expect(getByText('Learn more about blind peering.')).toBeInTheDocument()\n  })\n\n  it('opens modal when enabling blind peers', () => {\n    const { getByTestId } = renderWithProviders(<SettingsBlindPeersSection />)\n\n    const toggleButton = getByTestId('toggle-blindPeers')\n    expect(toggleButton).toHaveTextContent('Enable')\n\n    fireEvent.click(toggleButton)\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n  })\n\n  it('displays correct initial state with disabled blind peers', () => {\n    const { getByTestId } = renderWithProviders(<SettingsBlindPeersSection />)\n\n    const toggleButton = getByTestId('toggle-blindPeers')\n    expect(toggleButton).toHaveTextContent('Enable')\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsAdvancedTab/SettingsBlindPeersSection/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n\nexport const LearnMoreLink = styled.a`\n  font-family: 'Inter';\n  font-size: 14px;\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  font-weight: 700;\n  text-decoration: none;\n\n  display: flex;\n  align-items: center;\n  gap: 5px;\n\n  &:hover {\n    text-decoration: underline;\n  }\n`\n\nexport const TooltipContent = styled.div`\n  font-family: 'Inter';\n  font-size: 14px;\n  line-height: 18px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: 400px;\n`\n\nexport const TooltipText = styled.div`\n  display: flex;\n  flex-direction: column;\n`\n\nexport const ListContainer = styled.ul`\n  margin: 10px 0;\n  padding-left: 20px;\n  list-style-type: disc;\n`\n\nexport const YourPeersSection = styled.div`\n  margin-top: 20px;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 15px;\n`\n\nexport const YourPeersTitle = styled.div`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-size: 14px;\n  font-weight: 700;\n  font-family: 'Inter';\n`\n\nexport const PeerTypeCard = styled.div`\n  display: flex;\n  width: 100%;\n  padding: 10px 15px;\n  align-items: center;\n  justify-content: space-between;\n  border-radius: 10px;\n  background-color: transparent;\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n\n  &:hover {\n    border-color: ${({ theme }) => theme.colors.primary400.mode1};\n  }\n`\n\nexport const PeerTypeText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-size: 14px;\n  font-weight: 700;\n  font-family: 'Inter';\n`\n\nexport const ActiveIndicator = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 8px;\n`\n\nexport const ActiveDot = styled.div`\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background-color: ${({ theme }) => theme.colors.primary400.mode1};\n`\n\nexport const ActiveText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-size: 12px;\n  font-family: 'Inter';\n  font-weight: 400;\n`\n\nexport const PeerCountDivider = styled.div`\n  width: 1px;\n  height: 16px;\n  background-color: ${({ theme }) => theme.colors.grey100.mode1};\n`\n\nexport const PeerCountText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-size: 12px;\n  font-family: 'Inter';\n  font-weight: 400;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsAdvancedTab/index.js",
    "content": "import { useMemo, useState } from 'react'\n\nimport { AUTO_LOCK_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { html } from 'htm/react'\n\nimport { AutoLockConfiguration } from './SettingsAutoLockConfiguration'\nimport { SettingsBlindPeersSection } from './SettingsBlindPeersSection'\nimport { SwitchList, SwitchWrapper } from './styles'\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport { SwitchWithLabel } from '../../../components/SwitchWithLabel'\nimport { LOCAL_STORAGE_KEYS } from '../../../constants/localStorage'\nimport { RuleSelector } from '../../../containers/Modal/GeneratePasswordSideDrawerContent/RuleSelector'\nimport { useConnectExtension } from '../../../hooks/useConnectExtension'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { Switch } from '../../../lib-react-components'\nimport { isPasswordChangeReminderDisabled } from '../../../utils/isPasswordChangeReminderDisabled'\nimport { Description } from '../ExportTab/styles'\n\nexport const SettingsAdvancedTab = () => {\n  const { t } = useTranslation()\n\n  const { isBrowserExtensionEnabled, toggleBrowserExtension } =\n    useConnectExtension()\n  const [isPasswordReminderDisabled, setIsPasswordReminderDisabled] = useState(\n    isPasswordChangeReminderDisabled()\n  )\n\n  const [selectedRules, setSelectedRules] = useState(() => {\n    const isDisabled = localStorage.getItem(\n      LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED\n    )\n\n    return {\n      copyToClipboard: isDisabled !== 'true'\n    }\n  })\n\n  const ruleOptions = useMemo(() => {\n    const options = [\n      {\n        name: 'copyToClipboard',\n        label: t('Copy to clipboard'),\n        description: t(\n          'When clicking a password you copy that into your clipboard'\n        )\n      }\n    ]\n\n    return options\n  }, [t])\n\n  const handleSetRules = (newRules) => {\n    if (newRules.copyToClipboard !== selectedRules.copyToClipboard) {\n      if (newRules.copyToClipboard) {\n        localStorage.removeItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED)\n      } else {\n        localStorage.setItem(\n          LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED,\n          'true'\n        )\n      }\n    }\n\n    setSelectedRules({ ...newRules })\n  }\n\n  const handlePasswordChangeReminder = (isEnabled) => {\n    if (!isEnabled) {\n      localStorage.setItem(\n        LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED,\n        'false'\n      )\n    } else {\n      localStorage.removeItem(\n        LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED\n      )\n    }\n\n    setIsPasswordReminderDisabled(!isEnabled)\n  }\n\n  return html`\n    <${CardSingleSetting}\n      testId=\"settings-card-custom-settings\"\n      title=${t('Custom settings')}\n    >\n      <${Description}>\n        ${t(\n          'Here you can choose your privacy settings and personalize your experience'\n        )}\n      <//>\n\n      <${SwitchList}>\n        <${SwitchWithLabel}\n          isOn=${!isPasswordReminderDisabled}\n          onChange=${(isOn) => handlePasswordChangeReminder(isOn)}\n          label=${t('Reminders')}\n          isSwitchFirst\n          stretch=${false}\n          description=${t('Enable the reminders to change your passwords')}\n        />\n        <${SwitchWrapper}>\n          <${Switch}\n            isOn=${isBrowserExtensionEnabled}\n            onChange=${(isOn) => toggleBrowserExtension(isOn)}\n          ><//>\n          ${t('Activate browser extension')}\n        <//>\n        <${RuleSelector}\n          rules=${ruleOptions}\n          selectedRules=${selectedRules}\n          isSwitchFirst\n          stretch=${false}\n          setRules=${handleSetRules}\n        />\n\n        ${AUTO_LOCK_ENABLED ? html`<${AutoLockConfiguration} />` : null}\n      <//>\n    <//>\n\n    <${SettingsBlindPeersSection} />\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsAdvancedTab/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Title = styled.div`\n  font-family: 'Inter';\n  font-size: 12px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-weight: 400;\n`\n\nexport const SwitchList = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  margin-top: 10px;\n`\n\nexport const SwitchWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-family: 'Inter';\n  font-size: 14px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-weight: 600;\n  margin-top: 10px;\n`\n\nexport const InfoCard = styled.div`\n  padding: 8px 10px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  background-color: ${({ theme }) => theme.colors.grey500.mode1};\n  border-radius: 10px;\n`\n\nexport const InfoCardTitle = styled.div`\n  font-family: 'Inter';\n  font-size: 14px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-weight: 500;\n`\n\nexport const InfoCardText = styled.div`\n  font-family: 'Inter';\n  font-size: 16px;\n  color: ${({ theme }) => theme.colors.grey200.mode1};\n  font-weight: 500;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  cursor: pointer;\n`\n\nexport const ButtonWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  padding-top: 20px;\n  gap: 15px;\n`\n\nexport const InputWrapper = styled.div`\n  margin-top: 10px;\n  width: 100%;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsDevicesSection/index.js",
    "content": "import React from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { formatDate } from '@tetherto/pear-apps-utils-date'\nimport { useVault } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { Description, content } from './styles'\nimport { CardSingleSetting } from '../../../../components/CardSingleSetting'\nimport { ListItem } from '../../../../components/ListItem'\nimport { AddDeviceModalContent } from '../../../../containers/Modal/AddDeviceModalContent'\nimport { AddDeviceModalContentV2 } from '../../../../containers/Modal/AddDeviceModalContentV2/AddDeviceModalContentV2'\nimport { useModal } from '../../../../context/ModalContext'\nimport { ButtonPrimary } from '../../../../lib-react-components'\nimport { isV2 } from '../../../../utils/designVersion'\n\n/**\n * @param {{}} props\n */\nexport const SettingsDevicesSection = () => {\n  const { i18n } = useLingui()\n  const { data } = useVault()\n  const { setModal } = useModal()\n\n  const handleAddDevice = () => {\n    setModal(\n      isV2() ? <AddDeviceModalContentV2 /> : html`<${AddDeviceModalContent} />`\n    )\n  }\n\n  return html`\n    <${CardSingleSetting}\n      testId=\"settings-card-linked-devices\"\n      title=${i18n._('Linked devices')}\n    >\n      <${content}>\n        <${Description}\n          >${i18n._('These are the devices with access to this Vault.')}\n        <//>\n        ${data?.devices?.map(\n          (device) =>\n            html`<${ListItem}\n              key=${device.name}\n              testId=\"settings-linked-device-item\"\n              itemName=${device.name}\n              itemDateText=${i18n._('Added on') +\n              ' ' +\n              formatDate(device.createdAt, 'dd-mm-yyyy', '/')}\n            />`\n        )}\n        <div style=${{ display: 'flex', justifyContent: 'center' }}>\n          <${ButtonPrimary}\n            testId=\"settings-connect-new-device-button\"\n            onClick=${handleAddDevice}\n            width=\"fit-content\"\n          >\n            ${i18n._('Connect a new device')}\n          <//>\n        </div>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsDevicesSection/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SettingsDevicesSection } from './index'\n\nimport '@testing-library/jest-dom'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (key) => key\n    }\n  })\n}))\n\njest.mock('@tetherto/pear-apps-utils-date', () => ({\n  formatDate: () => 'formatted-date'\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useVault: () => ({\n    data: {\n      createdAt: 1749797696879,\n      devices: [\n        {\n          createdAt: 1749797724078,\n          name: 'IOS',\n          id: 'mbugdwviwysp6h3kjfs',\n          updatedAt: 1749797724078,\n          vaultId: 'mbugdbvzv8tflyftw3d'\n        },\n        {\n          createdAt: 1749797443078,\n          name: 'Android',\n          id: 'mbugdwviwysp6h3kjfs',\n          updatedAt: 1749797443078,\n          vaultId: 'mbugdbvzv8tflyftw3d'\n        }\n      ],\n      id: 'mbugdbvzv8tflyftw3d',\n      name: 'TESTO',\n      records: [],\n      updatedAt: 1749797696879,\n      version: 1\n    }\n  })\n}))\n\njest.mock('../../../../context/ModalContext', () => ({\n  useModal: () => ({\n    setModal: jest.fn()\n  })\n}))\n\njest.mock(\n  '../../../../containers/Modal/AddDeviceModalContentV2/AddDeviceModalContentV2',\n  () => ({\n    AddDeviceModalContentV2: () => null\n  })\n)\n\ndescribe('SettingsDevicesSection', () => {\n  const renderWithProviders = (component) =>\n    render(<ThemeProvider>{component}</ThemeProvider>)\n\n  it('matches snapshot', () => {\n    const { container } = renderWithProviders(<SettingsDevicesSection />)\n\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsDevicesSection/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n\nexport const Description = styled.span`\n  font-size: 12px;\n  font-weight: 400;\n  font-family: 'Inter';\n  color: ${({ theme }) => theme.colors.white.mode1};\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsLanguageSection/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { CardSingleSetting } from '../../../../components/CardSingleSetting'\nimport { Select } from '../../../../components/Select'\n\n/**\n * @param {{\n *    selectedItem?: { label: string },\n *    languageOptions: Array<{ label: string, value: string }>,\n *    onItemSelect: (item: { label: string, value: string }) => void,\n *    placeholder: string\n *    title: string\n *  }} props\n */\nexport const SettingsLanguageSection = ({\n  selectedItem,\n  onItemSelect,\n  placeholder,\n  title,\n  description,\n  languageOptions = []\n}) => html`\n  <${CardSingleSetting}\n    testId=\"settings-card-language\"\n    title=${title}\n    description=${description}\n  >\n    <div style=${{ marginTop: '10px' }}>\n      <${Select}\n        testId=\"settings-language-dropdown\"\n        items=${languageOptions}\n        selectedItem=${selectedItem}\n        onItemSelect=${onItemSelect}\n        placeholder=${placeholder}\n      />\n    </div>\n  <//>\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsLanguageSection/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SettingsLanguageSection } from './index'\n\nimport '@testing-library/jest-dom'\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  LANGUAGES: [\n    { name: 'English' },\n    { name: 'Spanish' },\n    { name: 'French' },\n    { name: 'German' }\n  ]\n}))\n\ndescribe('SettingsLanguageSection', () => {\n  const renderWithProviders = (component) =>\n    render(<ThemeProvider>{component}</ThemeProvider>)\n\n  it('matches snapshot', () => {\n    const { container } = renderWithProviders(<SettingsLanguageSection />)\n\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsLanguageSection/styles.js",
    "content": ""
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsPasswordsSection/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { Content } from './styles'\nimport { CardSingleSetting } from '../../../../components/CardSingleSetting'\nimport { ListItem } from '../../../../components/ListItem'\nimport { ModifyMasterVaultModalContent } from '../../../../containers/Modal/ModifyMasterVaultModalContent'\nimport { useModal } from '../../../../context/ModalContext'\n\nexport const SettingsPasswordsSection = () => {\n  const { i18n } = useLingui()\n  const { setModal } = useModal()\n\n  return html`\n    <${CardSingleSetting}\n      testId=\"settings-card-master-password\"\n      title=${i18n._('Master Password')}\n      description=${i18n._('Manage the password that protects your app.')}\n    >\n      <${Content}>\n        <${ListItem}\n          itemName=${i18n._('Master Vault')}\n          editTestId=\"settings-master-vault-edit-button\"\n          onEditClick=${() =>\n            setModal(html`<${ModifyMasterVaultModalContent} />`)}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsPasswordsSection/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsReportSection/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { ButtonWrapper, Form } from './styles'\nimport { CardSingleSetting } from '../../../../components/CardSingleSetting'\nimport { ButtonSecondary, TextArea } from '../../../../lib-react-components'\n\n/**\n * @param {{\n *    onSubmitReport: () => void,\n *    message: string,\n *    title: string,\n *    buttonText: string,\n *    textAreaPlaceholder: string,\n *    textAreaOnChange: (value: string) => void\n *  }} props\n */\nexport const SettingsReportSection = ({\n  onSubmitReport,\n  message,\n  title,\n  description,\n  buttonText,\n  textAreaPlaceholder,\n  textAreaOnChange\n}) => html`\n  <${CardSingleSetting}\n    testId=\"settings-card-report\"\n    title=${title}\n    description=${description}\n  >\n    <${Form}\n      onSubmit=${(e) => {\n        e.preventDefault()\n        onSubmitReport()\n      }}\n    >\n      <${TextArea}\n        testId=\"settings-report-textarea\"\n        value=${message}\n        onChange=${(value) => textAreaOnChange(value)}\n        variant=\"report\"\n        placeholder=${textAreaPlaceholder}\n      />\n      <${ButtonWrapper}>\n        <${ButtonSecondary} type=\"submit\" testId=\"settings-report-send-button\">\n          ${buttonText}\n        <//>\n      <//>\n    <//>\n  <//>\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsReportSection/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\n\nimport { SettingsReportSection } from './index'\n\nimport '@testing-library/jest-dom'\n\ndescribe('SettingsReportSection', () => {\n  const renderWithProviders = (component) =>\n    render(<ThemeProvider>{component}</ThemeProvider>)\n\n  it('matches snapshot', () => {\n    const { container } = renderWithProviders(\n      <SettingsReportSection\n        onSubmitReport={() => {}}\n        message=\"\"\n        title=\"Report Issue\"\n        buttonText=\"Submit\"\n        textAreaPlaceholder=\"Describe the issue\"\n        textAreaOnChange={() => {}}\n      />\n    )\n\n    expect(container).toMatchSnapshot()\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/SettingsReportSection/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Form = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n\nexport const ButtonWrapper = styled.div`\n  align-self: self-start;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/index.js",
    "content": "import { useEffect, useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport {\n  sendGoogleFormFeedback,\n  sendSlackFeedback\n} from '@tetherto/pear-apps-lib-feedback'\nimport { html } from 'htm/react'\n\nimport { SettingsDevicesSection } from './SettingsDevicesSection'\nimport { SettingsLanguageSection } from './SettingsLanguageSection'\nimport { SettingsPasswordsSection } from './SettingsPasswordsSection'\nimport { SettingsReportSection } from './SettingsReportSection'\nimport { VersionWrapper } from './styles'\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport {\n  GOOGLE_FORM_KEY,\n  GOOGLE_FORM_MAPPING,\n  SLACK_WEBHOOK_URL_PATH\n} from '../../../constants/feedback'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useLanguageOptions } from '../../../hooks/useLanguageOptions'\nimport { logger } from '../../../utils/logger'\n\nexport const SettingsTab = () => {\n  const { i18n } = useLingui()\n  const { setToast } = useToast()\n\n  const [message, setMessage] = useState('')\n  const [isLoading, setIsLoading] = useState(false)\n  const [language, setLanguage] = useState(i18n.locale)\n  const [currentVersion, setCurrentVersion] = useState('')\n\n  const { languageOptions } = useLanguageOptions()\n\n  useGlobalLoading({ isLoading })\n\n  const handleLanguageChange = (selected) => {\n    setLanguage(selected.value)\n    i18n.activate(selected.value)\n  }\n\n  const handleReportProblem = async () => {\n    if (!message?.length || isLoading) {\n      return\n    }\n\n    try {\n      setIsLoading(true)\n\n      const payload = {\n        message,\n        topic: 'BUG_REPORT',\n        app: 'DESKTOP',\n        operatingSystem: navigator?.userAgentData?.platform,\n        deviceModel: navigator?.platform,\n        appVersion: currentVersion\n      }\n\n      await sendSlackFeedback({\n        webhookUrPath: SLACK_WEBHOOK_URL_PATH,\n        ...payload\n      })\n\n      await sendGoogleFormFeedback({\n        formKey: GOOGLE_FORM_KEY,\n        mapping: GOOGLE_FORM_MAPPING,\n        ...payload\n      })\n\n      setMessage('')\n\n      setIsLoading(false)\n\n      setToast({\n        message: i18n._('Feedback sent')\n      })\n    } catch (error) {\n      setIsLoading(false)\n\n      setToast({\n        message: i18n._('Something went wrong, please try again')\n      })\n\n      logger.error('useGetMultipleFiles', 'Error sending feedback:', error)\n    }\n  }\n\n  const selectedLangItem = languageOptions.find((l) => l.value === language)\n\n  useEffect(() => {\n    fetch('/package.json')\n      .then((r) => r.json())\n      .then((pkg) => setCurrentVersion(pkg.version))\n      .catch((error) =>\n        logger.error(\n          'useGetMultipleFiles',\n          'Error fetching package.json:',\n          error\n        )\n      )\n  }, [])\n\n  return html`\n    <${SettingsLanguageSection}\n      selectedItem=${selectedLangItem}\n      onItemSelect=${handleLanguageChange}\n      placeholder=${i18n._('Select')}\n      title=${i18n._('Language')}\n      languageOptions=${languageOptions}\n    />\n\n    <${SettingsReportSection}\n      onSubmitReport=${handleReportProblem}\n      message=${message}\n      title=${i18n._('Report a problem')}\n      buttonText=${i18n._('send')}\n      textAreaPlaceholder=${i18n._('Write your issue...')}\n      textAreaOnChange=${setMessage}\n    />\n\n    <${SettingsDevicesSection} />\n\n    <${SettingsPasswordsSection} />\n\n    <${CardSingleSetting}\n      testId=\"settings-card-version\"\n      title=${i18n._('Version')}\n    >\n      <${VersionWrapper}> ${currentVersion} <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsTab/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const VersionWrapper = styled.div`\n  font-family: 'Inter';\n  font-size: 16px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-weight: 600;\n  line-height: 16px;\n  margin-top: 10px;\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsVaultsTab/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { DELETE_VAULT_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport { useVault } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { Content } from './styles'\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport { ListItem } from '../../../components/ListItem'\nimport { CreateOrEditVaultModalContentV2 } from '../../../containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2'\nimport { DeleteVaultModalContent } from '../../../containers/Modal/DeleteVaultModalContent'\nimport { ModifyVaultModalContent } from '../../../containers/Modal/ModifyVaultModalContent'\nimport { useModal } from '../../../context/ModalContext'\nimport { isV2 } from '../../../utils/designVersion'\nimport { vaultCreatedFormat } from '../../../utils/vaultCreated'\n\nexport const SettingsVaultsTab = () => {\n  const { i18n } = useLingui()\n  const { data: vault } = useVault()\n  const { setModal, closeModal } = useModal()\n\n  return html`\n    <${CardSingleSetting}\n      testId=\"settings-card-your-vault\"\n      title=${i18n._('Your Vault')}\n      description=${i18n._('Share, edit, or delete your vault from one place.')}\n    >\n      <${Content}>\n        <${ListItem}\n          key=${vault.name}\n          testId=\"settings-vault-item\"\n          editTestId=\"settings-vault-edit-button\"\n          deleteTestId=\"settings-vault-delete-button\"\n          itemName=\"${vault.name}\"\n          itemDateText=${vaultCreatedFormat(vault.createdAt)}\n          onEditClick=${() => {\n            const editModal = isV2()\n              ? html`<${CreateOrEditVaultModalContentV2}\n                  onClose=${closeModal}\n                  onSuccess=${closeModal}\n                  vault=${vault}\n                />`\n              : html`<${ModifyVaultModalContent}\n                  vaultId=${vault.id}\n                  vaultName=${vault.name}\n                />`\n            setModal(editModal)\n          }}\n          onDeleteClick=${DELETE_VAULT_ENABLED &&\n          (() =>\n            setModal(\n              html`<${DeleteVaultModalContent}\n                vaultId=${vault.id}\n                vaultName=${vault.name}\n              />`\n            ))}\n        />\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsVaultsTab/index.test.js",
    "content": "import React from 'react'\n\nimport { render, screen, fireEvent } from '@testing-library/react'\nimport { ThemeProvider } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { useVault } from '@tetherto/pearpass-lib-vault'\n\nimport { SettingsVaultsTab } from './index'\nimport { useModal } from '../../../context/ModalContext'\nimport { isV2 } from '../../../utils/designVersion'\nimport '@testing-library/jest-dom'\n\njest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (str) => str\n    }\n  }),\n  I18nProvider: ({ children }) => children\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useVault: jest.fn()\n}))\n\njest.mock('../../../context/ModalContext', () => ({\n  useModal: jest.fn()\n}))\n\njest.mock(\n  '../../../containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2',\n  () => ({\n    CreateOrEditVaultModalContentV2:\n      function MockCreateOrEditVaultModalContentV2() {\n        return null\n      }\n  })\n)\n\njest.mock('../../../utils/designVersion', () => ({\n  isV2: jest.fn(() => false)\n}))\n\njest.mock('../../../utils/vaultCreated', () => ({\n  vaultCreatedFormat: jest.fn((date) => date + 'date')\n}))\n\njest.mock('../../../components/CardSingleSetting', () => ({\n  CardSingleSetting: ({ title, children }) => (\n    <div>\n      <h1>{title}</h1>\n      {children}\n    </div>\n  )\n}))\n\njest.mock('../../../components/ListItem', () => ({\n  ListItem: ({ itemName, onEditClick }) => (\n    <div>\n      <p>{itemName}</p>\n      <button onClick={onEditClick}>Edit</button>\n    </div>\n  )\n}))\n\ndescribe('VaultsTab', () => {\n  const setModalMock = jest.fn()\n  const closeModalMock = jest.fn()\n\n  const renderWithProviders = (component) =>\n    render(<ThemeProvider>{component}</ThemeProvider>)\n\n  beforeEach(() => {\n    useVault.mockReturnValue({\n      data: {\n        id: '1',\n        name: 'Vault 1',\n        createdAt: '2024-01-01T00:00:00.000Z'\n      }\n    })\n\n    useModal.mockReturnValue({\n      setModal: setModalMock,\n      closeModal: closeModalMock\n    })\n\n    isV2.mockReturnValue(false)\n  })\n\n  afterEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders Your Vault section', () => {\n    const { container } = renderWithProviders(<SettingsVaultsTab />)\n\n    expect(screen.getByText('Your Vault')).toBeInTheDocument()\n    expect(container).toMatchSnapshot()\n  })\n\n  it('renders vault in the list', () => {\n    renderWithProviders(<SettingsVaultsTab />)\n\n    expect(screen.getByText('Vault 1')).toBeInTheDocument()\n  })\n\n  it('opens vault edit modal when editing the vault', () => {\n    renderWithProviders(<SettingsVaultsTab />)\n\n    const editButton = screen.getByText('Edit')\n    fireEvent.click(editButton)\n\n    expect(setModalMock).toHaveBeenCalledWith(expect.anything())\n  })\n\n  it('opens CreateOrEditVaultModalContentV2 when design version is v2', () => {\n    isV2.mockReturnValue(true)\n\n    renderWithProviders(<SettingsVaultsTab />)\n\n    fireEvent.click(screen.getByText('Edit'))\n\n    expect(setModalMock).toHaveBeenCalledWith(expect.anything())\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsView/SettingsVaultsTab/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 15px;\n`\n\nexport const ButtonWrapper = styled.div`\n  align-self: self-start;\n`\n\nexport const Description = styled.span`\n  font-size: 12px;\n  font-weight: 400;\n  font-family: 'Inter';\n  color: ${({ theme }) => theme.colors.white.mode1};\n`\n"
  },
  {
    "path": "src/pages/SettingsView/SyncingContent/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { CardSingleSetting } from '../../../components/CardSingleSetting'\nimport { useConnectExtension } from '../../../hooks/useConnectExtension'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { Switch } from '../../../lib-react-components'\nimport { SettingsBlindPeersSection } from '../SettingsAdvancedTab/SettingsBlindPeersSection'\nimport { SwitchWrapper } from '../SettingsAdvancedTab/styles'\n\nexport const SyncingContent = () => {\n  const { t } = useTranslation()\n\n  const { isBrowserExtensionEnabled, toggleBrowserExtension } =\n    useConnectExtension()\n\n  return html`\n    <${SettingsBlindPeersSection} />\n\n    <${CardSingleSetting}\n      testId=\"settings-card-browser-extension\"\n      title=${t('Browser Extension')}\n      description=${t('Manage the browsers paired with your account.')}\n    >\n      <${SwitchWrapper}>\n        <${Switch}\n          isOn=${isBrowserExtensionEnabled}\n          onChange=${(isOn) => toggleBrowserExtension(isOn)}\n        ><//>\n        ${t('Activate browser extension')}\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/VaultContent/index.js",
    "content": "import { html } from 'htm/react'\n\nimport { ExportTab } from '../ExportTab'\nimport { ImportTab } from '../ImportTab'\nimport { SettingsDevicesSection } from '../SettingsTab/SettingsDevicesSection'\nimport { SettingsVaultsTab } from '../SettingsVaultsTab'\n\nexport const VaultContent = () => html`\n  <${SettingsVaultsTab} />\n  <${SettingsDevicesSection} />\n  <${ExportTab} />\n  <${ImportTab} />\n`\n"
  },
  {
    "path": "src/pages/SettingsView/index.js",
    "content": "import { useState } from 'react'\n\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { html } from 'htm/react'\n\nimport { AboutContent } from './AboutContent'\nimport { AppearanceContent } from './AppearanceContent'\nimport { SecurityContent } from './SecurityContent'\nimport {\n  NavBar,\n  NavItems,\n  SettingsContentArea,\n  SettingsContentInner,\n  SettingsNavItem,\n  SettingsSidebar,\n  Wrapper\n} from './styles'\nimport { SyncingContent } from './SyncingContent'\nimport { VaultContent } from './VaultContent'\nimport { useRouter } from '../../context/RouterContext'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport {\n  AboutIcon,\n  AppearanceIcon,\n  BackIcon,\n  ButtonRoundIcon,\n  SecurityIcon,\n  SyncingIcon,\n  VaultIcon\n} from '../../lib-react-components'\n\nconst NAV_ITEMS = [\n  { key: 'security', label: 'Security', icon: SecurityIcon },\n  { key: 'syncing', label: 'Syncing', icon: SyncingIcon },\n  { key: 'vault', label: 'Vault', icon: VaultIcon },\n  { key: 'appearance', label: 'Appearance', icon: AppearanceIcon },\n  { key: 'about', label: 'About', icon: AboutIcon }\n]\n\nconst renderActiveContent = (activeTab) => {\n  switch (activeTab) {\n    case 'security':\n      return html`<${SecurityContent} />`\n    case 'syncing':\n      return html`<${SyncingContent} />`\n    case 'vault':\n      return html`<${VaultContent} />`\n    case 'appearance':\n      return html`<${AppearanceContent} />`\n    case 'about':\n      return html`<${AboutContent} />`\n    default:\n      return null\n  }\n}\n\nexport const SettingsView = () => {\n  const { t } = useTranslation()\n  const { navigate, data } = useRouter()\n\n  const handleGoBack = () => {\n    navigate('vault', { recordType: 'all' })\n  }\n\n  const [activeTab, setActiveTab] = useState(data?.initialTab || 'security')\n\n  return html`\n    <${Wrapper}>\n      <${SettingsSidebar}>\n        <${NavBar}>\n          <${ButtonRoundIcon} onClick=${handleGoBack} startIcon=${BackIcon} />\n          ${t('Settings')}\n        <//>\n\n        <${NavItems}>\n          ${NAV_ITEMS.map(\n            (item) => html`\n              <${SettingsNavItem}\n                key=${item.key}\n                data-testid=${`settings-nav-${item.key}`}\n                isActive=${activeTab === item.key}\n                onClick=${() => setActiveTab(item.key)}\n              >\n                <${item.icon}\n                  size=\"20\"\n                  color=${activeTab === item.key\n                    ? colors.primary400.mode1\n                    : undefined}\n                />\n                ${t(item.label)}\n              <//>\n            `\n          )}\n        <//>\n      <//>\n\n      <${SettingsContentArea}>\n        <${SettingsContentInner}> ${renderActiveContent(activeTab)} <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/SettingsView/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  position: relative;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  flex-direction: row;\n`\n\nexport const SettingsSidebar = styled.div`\n  display: flex;\n  gap: 20px;\n  padding: 25px 20px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  width: 245px;\n  height: 100%;\n  flex-direction: column;\n  align-items: flex-start;\n  align-self: stretch;\n  border-right: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  background: ${({ theme }) => theme.colors.grey500.mode1};\n`\n\nexport const NavBar = styled.div`\n  width: 100%;\n  height: fit-content;\n  display: flex;\n  justify-content: start;\n  align-items: center;\n  gap: 10px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 18px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n  flex: 0 0 auto;\n`\n\nexport const NavItems = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  gap: 10px;\n`\n\nexport const SettingsNavItem = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 9px 8px;\n  border-radius: 10px;\n  cursor: pointer;\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n  color: ${({ theme, isActive }) =>\n    isActive ? theme.colors.primary400.mode1 : theme.colors.white.mode1};\n  background: ${({ theme, isActive }) =>\n    isActive ? theme.colors.grey300.mode1 : theme.colors.grey400.mode1};\n\n  &:hover {\n    background: ${({ theme }) => theme.colors.grey300.mode1};\n  }\n`\n\nexport const SettingsContentArea = styled.div`\n  flex: 1;\n  height: 100%;\n  padding: 25px 20px;\n  overflow-y: auto;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n`\n\nexport const SettingsContentInner = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n  max-width: 750px;\n`\n"
  },
  {
    "path": "src/pages/SettingsViewV2/SettingsViewV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { HEADER_MIN_HEIGHT } from '../../constants/layout'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  wrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    height: '100%',\n    overflow: 'hidden' as const,\n    backgroundColor: colors.colorSurfacePrimary\n  },\n\n  header: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing8}px`,\n    height: `${HEADER_MIN_HEIGHT}px`,\n    paddingInline: `${rawTokens.spacing12}px`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    boxSizing: 'border-box' as const,\n    flexShrink: 0\n  },\n\n  backButton: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    background: 'none',\n    border: 'none',\n    cursor: 'pointer' as const,\n    padding: `${rawTokens.spacing4}px`,\n    borderRadius: `${rawTokens.radius8}px`,\n    color: colors.colorTextPrimary,\n    flexShrink: 0\n  },\n\n  headerTitle: {\n    fontSize: `${rawTokens.fontSize14}px`,\n    fontWeight: rawTokens.weightMedium,\n    color: colors.colorTextPrimary,\n    fontFamily: rawTokens.fontPrimary\n  },\n\n  body: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    flex: 1,\n    minHeight: 0,\n    overflow: 'hidden' as const\n  },\n\n  sidebar: {\n    display: 'flex' as const,\n    width: '250px',\n    flexShrink: 0,\n    flexDirection: 'column' as const,\n    alignItems: 'flex-start' as const,\n    alignSelf: 'stretch' as const,\n    padding: `${rawTokens.spacing12}px`,\n    overflowY: 'auto' as const,\n    borderRight: `1px solid ${colors.colorBorderPrimary}`,\n    boxSizing: 'border-box' as const\n  },\n\n  sectionCard: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    width: '100%',\n    gap: `${rawTokens.spacing4}px`,\n    paddingBottom: `${rawTokens.spacing4}px`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`\n  },\n\n  sectionCardWithTopPadding: {\n    paddingTop: `${rawTokens.spacing4}px`\n  },\n\n  sectionCardNoBorder: {\n    paddingBottom: `${rawTokens.spacing8}px`\n  },\n\n  sectionHeaderItem: {\n    width: '100%'\n  },\n\n  itemsTrack: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: '1px',\n    marginLeft: `${rawTokens.spacing12}px`,\n    borderLeft: `1px solid ${colors.colorBorderPrimary}`\n  },\n\n  itemRow: {\n    position: 'relative' as const,\n    paddingLeft: `${rawTokens.spacing12}px`,\n    overflow: 'hidden' as const\n  },\n\n  itemAnchor: {\n    position: 'absolute' as const,\n    left: -2,\n    top: rawTokens.spacing10,\n    width: rawTokens.spacing12,\n    height: rawTokens.spacing8,\n    borderLeft: `1px solid ${colors.colorBorderPrimary}`,\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`,\n    borderBottomLeftRadius: `${rawTokens.spacing12}px`,\n    pointerEvents: 'none' as const\n  },\n\n  itemWrapper: {\n    borderRadius: `${rawTokens.radius8}px`,\n    overflow: 'hidden' as const\n  },\n\n  contentArea: {\n    flex: 1,\n    padding: `${rawTokens.spacing20}px`,\n    overflow: 'auto' as const,\n    minWidth: 0\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/SettingsViewV2.tsx",
    "content": "import React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { DESKTOP_2FA_IMPORTS_ENABLED } from '@tetherto/pearpass-lib-constants'\nimport {\n  Button,\n  NavbarListItem,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  ArrowBackOutined,\n  BugReportFilled,\n  Devices,\n  HubFilled,\n  InfoOutlined,\n  Key,\n  KeyboardArrowBottom,\n  KeyboardArrowRightFilled,\n  LayerFilled,\n  LockOutlined,\n  Login,\n  Logout,\n  PaletteOutlined,\n  SecurityFilled,\n  SettingsApplicationsFilled,\n  Sync,\n  SystemSecurityUpdateFilled,\n  TerminalTone,\n  Translate,\n  TwoFactorAuthenticationOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { UnsavedChangesModalContent } from '../../containers/Modal/UnsavedChangesModalContent'\nimport { useModal } from '../../context/ModalContext'\nimport { useRouter } from '../../context/RouterContext'\nimport {\n  UnsavedChangesProvider,\n  useUnsavedChanges\n} from '../../context/UnsavedChangesContext'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { logger } from '../../utils/logger'\nimport { createStyles } from './SettingsViewV2.styles'\nimport {\n  AppPreferencesContent,\n  AppVersionContent,\n  BlindPeersContent,\n  DiagnosticsContent,\n  ExportItemsContent,\n  ImportCodesContent,\n  ImportItemsContent,\n  LanguageContent,\n  MasterPasswordContent,\n  ReportAProblemContent,\n  YourDevicesContent\n} from './content'\nimport { YourVaultsContent } from './content/YourVaultsContent'\n\nexport enum SettingsItemKey {\n  AppPreferences = 'app-preferences',\n  MasterPassword = 'master-password',\n  BlindPeering = 'blind-peering',\n  YourDevices = 'your-devices',\n  YourVaults = 'your-vaults',\n  ImportItems = 'import-items',\n  ExportItems = 'export-items',\n  ImportCodes = 'import-codes',\n  Language = 'language',\n  ReportAProblem = 'report-a-problem',\n  Diagnostics = 'diagnostics',\n  AppVersion = 'app-version'\n}\n\ntype SectionItem = {\n  key: SettingsItemKey\n  label: string\n  icon: React.ComponentType<React.SVGProps<SVGSVGElement>>\n}\n\ntype Section = {\n  key: string\n  title: string\n  icon: React.ComponentType<React.SVGProps<SVGSVGElement>>\n  items: SectionItem[]\n}\n\nconst renderActiveContent = (\n  activeItemKey: SettingsItemKey,\n  currentVersion: string\n): React.ReactNode => {\n  switch (activeItemKey) {\n    case SettingsItemKey.AppPreferences:\n      return <AppPreferencesContent />\n    case SettingsItemKey.MasterPassword:\n      return <MasterPasswordContent />\n    case SettingsItemKey.YourVaults:\n      return <YourVaultsContent />\n    case SettingsItemKey.BlindPeering:\n      return <BlindPeersContent />\n    case SettingsItemKey.YourDevices:\n      return <YourDevicesContent />\n    case SettingsItemKey.ImportItems:\n      return <ImportItemsContent />\n    case SettingsItemKey.ExportItems:\n      return <ExportItemsContent />\n    case SettingsItemKey.ImportCodes:\n      return <ImportCodesContent />\n    case SettingsItemKey.ReportAProblem:\n      return <ReportAProblemContent currentVersion={currentVersion} />\n    case SettingsItemKey.Diagnostics:\n      return <DiagnosticsContent />\n    case SettingsItemKey.Language:\n      return <LanguageContent />\n    case SettingsItemKey.AppVersion:\n      return <AppVersionContent currentVersion={currentVersion} />\n    default:\n      return null\n  }\n}\n\nconst SettingsViewV2Body = () => {\n  const { t } = useTranslation()\n  const { navigate, data } = useRouter()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { getGuard } = useUnsavedChanges()\n  const { setModal, closeModal } = useModal()\n\n  const sections: Section[] = useMemo(\n    () => [\n      {\n        key: 'security',\n        title: t('Security'),\n        icon: SecurityFilled,\n        items: [\n          {\n            key: SettingsItemKey.AppPreferences,\n            label: t('App Preferences'),\n            icon: SettingsApplicationsFilled\n          },\n          {\n            key: SettingsItemKey.MasterPassword,\n            label: t('Master Password'),\n            icon: Key\n          }\n        ]\n      },\n      {\n        key: 'syncing',\n        title: t('Syncing'),\n        icon: Sync,\n        items: [\n          {\n            key: SettingsItemKey.BlindPeering,\n            label: t('Blind Peering'),\n            icon: HubFilled\n          },\n          {\n            key: SettingsItemKey.YourDevices,\n            label: t('Your Devices'),\n            icon: Devices\n          }\n        ]\n      },\n      {\n        key: 'vault',\n        title: t('Vault'),\n        icon: LockOutlined,\n        items: [\n          {\n            key: SettingsItemKey.YourVaults,\n            label: t('Your Vaults'),\n            icon: LayerFilled\n          },\n          {\n            key: SettingsItemKey.ImportItems,\n            label: t('Import Items'),\n            icon: Login\n          },\n          {\n            key: SettingsItemKey.ExportItems,\n            label: t('Export Items'),\n            icon: Logout\n          }\n        ]\n      },\n      ...(DESKTOP_2FA_IMPORTS_ENABLED\n        ? [\n            {\n              key: 'authenticator',\n              title: t('Authenticator'),\n              icon: TwoFactorAuthenticationOutlined,\n              items: [\n                {\n                  key: SettingsItemKey.ImportCodes,\n                  label: t('Import Codes'),\n                  icon: Login\n                }\n              ]\n            }\n          ]\n        : []),\n      {\n        key: 'appearance',\n        title: t('Appearance'),\n        icon: PaletteOutlined,\n        items: [\n          {\n            key: SettingsItemKey.Language,\n            label: t('Language'),\n            icon: Translate\n          }\n        ]\n      },\n      {\n        key: 'about',\n        title: t('About'),\n        icon: InfoOutlined,\n        items: [\n          {\n            key: SettingsItemKey.ReportAProblem,\n            label: t('Report a problem'),\n            icon: BugReportFilled\n          },\n          {\n            key: SettingsItemKey.Diagnostics,\n            label: t('Diagnostics'),\n            icon: TerminalTone\n          },\n          {\n            key: SettingsItemKey.AppVersion,\n            label: t('App Version'),\n            icon: SystemSecurityUpdateFilled\n          }\n        ]\n      }\n    ],\n    [t]\n  )\n\n  const firstItemKey =\n    sections[0]?.items[0]?.key ?? SettingsItemKey.AppPreferences\n  const [activeItemKey, setActiveItemKey] = useState<SettingsItemKey>(\n    (data?.initialTab as SettingsItemKey) ?? firstItemKey\n  )\n  const [expandedSections, setExpandedSections] = useState<\n    Record<string, boolean>\n  >({})\n  const [currentVersion, setCurrentVersion] = useState('')\n\n  useEffect(() => {\n    const electronAPI = window.electronAPI\n    if (!electronAPI || typeof electronAPI.getConfig !== 'function') {\n      return\n    }\n\n    electronAPI\n      .getConfig()\n      .then((cfg) => {\n        if (cfg && typeof cfg.version === 'string') {\n          setCurrentVersion(cfg.version)\n        }\n      })\n      .catch((error) =>\n        logger.error('SettingsViewV2', 'Error getting runtime config:', error)\n      )\n  }, [])\n\n  const toggleSection = (sectionKey: string) => {\n    setExpandedSections((current) => ({\n      ...current,\n      [sectionKey]: !(current[sectionKey] ?? true)\n    }))\n  }\n\n  const promptIfUnsaved = useCallback(\n    (proceed: () => void) => {\n      const guard = getGuard()\n      if (!guard?.hasUnsavedChanges) {\n        proceed()\n        return\n      }\n      setModal(\n        <UnsavedChangesModalContent\n          description={guard.description}\n          onSave={async () => {\n            const ok = await guard.save()\n            if (ok) {\n              closeModal()\n              proceed()\n            }\n          }}\n          onDiscard={() => {\n            closeModal()\n            proceed()\n          }}\n        />\n      )\n    },\n    [closeModal, getGuard, setModal]\n  )\n\n  const onBack = () => {\n    promptIfUnsaved(() => {\n      navigate('vault', { recordType: 'all' })\n    })\n  }\n\n  const onSelectItem = (key: SettingsItemKey) => {\n    if (key === activeItemKey) return\n    promptIfUnsaved(() => {\n      setActiveItemKey(key)\n    })\n  }\n\n  return (\n    <div style={styles.wrapper}>\n      <header style={styles.header}>\n        <Button\n          variant=\"tertiary\"\n          size=\"small\"\n          iconBefore={\n            <ArrowBackOutined color={theme.colors.colorTextPrimary} />\n          }\n          onClick={onBack}\n          aria-label={t('Go back')}\n        />\n\n        <Text>{t('Settings')}</Text>\n      </header>\n\n      <div style={styles.body}>\n        <nav style={styles.sidebar}>\n          {sections.map((section, index) => {\n            const SectionIcon = section.icon\n            const isExpanded = expandedSections[section.key] ?? true\n            const DisclosureIcon = isExpanded\n              ? KeyboardArrowBottom\n              : KeyboardArrowRightFilled\n            const isLast = index === sections.length - 1\n\n            return (\n              <div\n                key={section.key}\n                style={{\n                  ...styles.sectionCard,\n                  ...(index > 0 ? styles.sectionCardWithTopPadding : {}),\n                  ...(isLast ? { borderBottom: 'none' } : {})\n                }}\n              >\n                <div style={styles.sectionHeaderItem}>\n                  <NavbarListItem\n                    testID={`section-${section.key}`}\n                    label={section.title}\n                    size=\"small\"\n                    icon={\n                      <>\n                        <DisclosureIcon\n                          color={theme.colors.colorTextSecondary}\n                        />\n                        <SectionIcon color={theme.colors.colorTextPrimary} />\n                      </>\n                    }\n                    onClick={() => toggleSection(section.key)}\n                  />\n                </div>\n\n                {isExpanded && (\n                  <div style={styles.itemsTrack}>\n                    {section.items.map((item) => {\n                      const ItemIcon = item.icon\n\n                      return (\n                        <div key={item.key} style={styles.itemRow}>\n                          <div style={styles.itemAnchor} />\n                          <div style={styles.itemWrapper}>\n                            <NavbarListItem\n                              testID={`settings-nav-${item.key}`}\n                              label={item.label}\n                              variant=\"secondary\"\n                              size=\"small\"\n                              selected={activeItemKey === item.key}\n                              icon={\n                                <ItemIcon\n                                  color={theme.colors.colorTextSecondary}\n                                />\n                              }\n                              onClick={() => onSelectItem(item.key)}\n                            />\n                          </div>\n                        </div>\n                      )\n                    })}\n                  </div>\n                )}\n              </div>\n            )\n          })}\n        </nav>\n\n        <main style={styles.contentArea}>\n          {renderActiveContent(activeItemKey, currentVersion)}\n        </main>\n      </div>\n    </div>\n  )\n}\n\nexport const SettingsViewV2 = () => (\n  <UnsavedChangesProvider>\n    <SettingsViewV2Body />\n  </UnsavedChangesProvider>\n)\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/AppPreferencesContent/index.test.tsx",
    "content": "/// <reference types=\"@testing-library/jest-dom\" />\n\nimport React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\nimport { LOCAL_STORAGE_KEYS } from '../../../../constants/localStorage'\nimport { AppPreferencesContent } from './index'\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\nconst mockSetTimeoutMs = jest.fn()\nlet mockTimeoutMs: number | null = 60_000\n\njest.mock('../../../../hooks/useAutoLockPreferences', () => ({\n  useAutoLockPreferences: () => ({\n    timeoutMs: mockTimeoutMs,\n    setTimeoutMs: mockSetTimeoutMs,\n    isAutoLockEnabled: true,\n    setAutoLockEnabled: jest.fn(),\n    shouldBypassAutoLock: false,\n    setShouldBypassAutoLock: jest.fn()\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  KeyboardArrowBottom: () => null\n}))\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  AUTO_LOCK_ENABLED: true,\n  AUTO_LOCK_TIMEOUT_OPTIONS: {\n    ONE_MINUTE: { label: '1 Minute', value: 60_000 },\n    TEN_MINUTES: { label: '10 Minutes', value: 600_000 }\n  }\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    root: {},\n    sectionHeading: {},\n    settingCard: {},\n    row: {},\n    rowDivider: {},\n    toggleColumn: {}\n  })\n}))\n\nconst mockTheme = {\n  theme: {\n    colors: {\n      colorTextSecondary: '#888',\n      colorTextPrimary: '#fff',\n      colorBorderPrimary: '#333',\n      colorSurfacePrimary: '#111'\n    }\n  }\n}\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => mockTheme,\n  PageHeader: (props: { title: string; subtitle?: React.ReactNode }) => (\n    <div>\n      <h1>{props.title}</h1>\n      {props.subtitle && <div>{props.subtitle}</div>}\n    </div>\n  ),\n  Text: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,\n  ToggleSwitch: (props: {\n    'data-testid'?: string\n    checked?: boolean\n    onChange?: (checked: boolean) => void\n    label?: string\n  }) => {\n    const testId = props['data-testid']\n    return (\n      <button\n        type=\"button\"\n        role=\"switch\"\n        data-testid={testId}\n        aria-checked={props.checked}\n        onClick={() => props.onChange?.(!props.checked)}\n      >\n        {props.label}\n      </button>\n    )\n  },\n  Button: (props: {\n    'data-testid'?: string\n    children?: React.ReactNode\n    onClick?: () => void\n    iconAfter?: React.ReactNode\n  }) => (\n    <button\n      type=\"button\"\n      data-testid={props['data-testid']}\n      onClick={props.onClick}\n    >\n      {props.children}\n    </button>\n  ),\n  Dropdown: (props: {\n    open?: boolean\n    onOpenChange?: (open: boolean) => void\n    trigger: React.ReactNode\n    children: React.ReactNode\n  }) => (\n    <div>\n      <div onClick={() => props.onOpenChange?.(!props.open)}>\n        {props.trigger}\n      </div>\n      {props.open ? <div data-testid=\"dropdown-menu\">{props.children}</div> : null}\n    </div>\n  ),\n  NavbarListItem: (props: {\n    testID?: string\n    label?: string\n    selected?: boolean\n    onClick?: () => void\n  }) => (\n    <button\n      type=\"button\"\n      data-testid={props.testID}\n      aria-pressed={props.selected}\n      onClick={props.onClick}\n    >\n      {props.label}\n    </button>\n  )\n}))\n\nbeforeEach(() => {\n  localStorage.clear()\n  mockSetTimeoutMs.mockClear()\n  mockTimeoutMs = 60_000\n})\n\ndescribe('AppPreferencesContent', () => {\n  it('renders the heading and all rows', () => {\n    render(<AppPreferencesContent />)\n    expect(screen.getByText('App Preferences')).toBeInTheDocument()\n    expect(screen.getByText('Auto Lock')).toBeInTheDocument()\n    expect(screen.getByText('Copy to Clipboard')).toBeInTheDocument()\n    expect(screen.getByText('Reminders')).toBeInTheDocument()\n  })\n\n  it('starts with clipboard enabled when localStorage has no value', () => {\n    render(<AppPreferencesContent />)\n    expect(\n      screen.getByTestId('settings-copy-to-clipboard-toggle')\n    ).toHaveAttribute('aria-checked', 'true')\n  })\n\n  it('starts with clipboard disabled when localStorage value is \"true\"', () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED, 'true')\n    render(<AppPreferencesContent />)\n    expect(\n      screen.getByTestId('settings-copy-to-clipboard-toggle')\n    ).toHaveAttribute('aria-checked', 'false')\n  })\n\n  it('writes \"true\" to localStorage when clipboard is toggled off', () => {\n    render(<AppPreferencesContent />)\n    fireEvent.click(screen.getByTestId('settings-copy-to-clipboard-toggle'))\n    expect(\n      localStorage.getItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED)\n    ).toBe('true')\n  })\n\n  it('removes the localStorage key when clipboard is toggled back on', () => {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED, 'true')\n    render(<AppPreferencesContent />)\n    fireEvent.click(screen.getByTestId('settings-copy-to-clipboard-toggle'))\n    expect(\n      localStorage.getItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED)\n    ).toBeNull()\n  })\n\n  it('shows the current timeout in the select field', () => {\n    render(<AppPreferencesContent />)\n    expect(screen.getByTestId('settings-auto-lock-select').textContent).toBe(\n      '1 Minute'\n    )\n  })\n\n  it('calls setTimeoutMs when an option is clicked', () => {\n    render(<AppPreferencesContent />)\n    fireEvent.click(screen.getByTestId('settings-auto-lock-select'))\n    fireEvent.click(\n      screen.getByTestId('settings-auto-lock-option-ten_minutes')\n    )\n    expect(mockSetTimeoutMs).toHaveBeenCalledWith(600_000)\n  })\n\n  it('starts with reminders enabled when localStorage has no value', () => {\n    render(<AppPreferencesContent />)\n    expect(screen.getByTestId('settings-reminders-toggle')).toHaveAttribute(\n      'aria-checked',\n      'true'\n    )\n  })\n\n  it('starts with reminders disabled when localStorage value is \"false\"', () => {\n    localStorage.setItem(\n      LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED,\n      'false'\n    )\n    render(<AppPreferencesContent />)\n    expect(screen.getByTestId('settings-reminders-toggle')).toHaveAttribute(\n      'aria-checked',\n      'false'\n    )\n  })\n\n  it('writes \"false\" to localStorage when reminders is toggled off', () => {\n    render(<AppPreferencesContent />)\n    fireEvent.click(screen.getByTestId('settings-reminders-toggle'))\n    expect(\n      localStorage.getItem(LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED)\n    ).toBe('false')\n  })\n\n  it('removes the localStorage key when reminders is toggled back on', () => {\n    localStorage.setItem(\n      LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED,\n      'false'\n    )\n    render(<AppPreferencesContent />)\n    fireEvent.click(screen.getByTestId('settings-reminders-toggle'))\n    expect(\n      localStorage.getItem(LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED)\n    ).toBeNull()\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/AppPreferencesContent/index.tsx",
    "content": "import React, { useCallback, useMemo, useState } from 'react'\n\nimport {\n  Button,\n  Dropdown,\n  NavbarListItem,\n  PageHeader,\n  Text,\n  ToggleSwitch,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { KeyboardArrowBottom } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport {\n  AUTO_LOCK_ENABLED,\n  AUTO_LOCK_TIMEOUT_OPTIONS\n} from '@tetherto/pearpass-lib-constants'\n\nimport { LOCAL_STORAGE_KEYS } from '../../../../constants/localStorage'\nimport { useAutoLockPreferences } from '../../../../hooks/useAutoLockPreferences'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { isPasswordChangeReminderDisabled } from '../../../../utils/isPasswordChangeReminderDisabled'\nimport { createStyles } from './styles'\n\nconst TEST_IDS = {\n  root: 'settings-app-preferences',\n  autoLockSelect: 'settings-auto-lock-select',\n  autoLockOption: 'settings-auto-lock-option',\n  copyToClipboardToggle: 'settings-copy-to-clipboard-toggle',\n  remindersToggle: 'settings-reminders-toggle'\n} as const\n\ntype TimeoutOption = {\n  key: string\n  label: string\n  value: number\n}\n\nconst TIMEOUT_OPTIONS: TimeoutOption[] = Object.entries(\n  AUTO_LOCK_TIMEOUT_OPTIONS\n).map(([key, option]) => ({ key, label: option.label, value: option.value }))\n\nexport const AppPreferencesContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { colors } = theme\n  const styles = createStyles(colors)\n\n  const { timeoutMs, setTimeoutMs } = useAutoLockPreferences()\n\n  const [isTimeoutDropdownOpen, setIsTimeoutDropdownOpen] = useState(false)\n  const [isClipboardDisabled, setIsClipboardDisabled] = useState(() =>\n    localStorage.getItem(\n      LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED\n    ) === 'true'\n  )\n  const [isReminderDisabled, setIsReminderDisabled] = useState(() =>\n    isPasswordChangeReminderDisabled()\n  )\n\n  const translatedTimeoutOptions = useMemo(\n    () =>\n      TIMEOUT_OPTIONS.map((option) => ({\n        ...option,\n        label: t(option.label)\n      })),\n    [t]\n  )\n\n  const selectedTimeoutOption = useMemo(\n    () =>\n      translatedTimeoutOptions.find((option) => option.value === timeoutMs) ??\n      translatedTimeoutOptions[0],\n    [translatedTimeoutOptions, timeoutMs]\n  )\n\n  const handleTimeoutSelect = useCallback(\n    (option: TimeoutOption) => {\n      setTimeoutMs(option.value)\n      setIsTimeoutDropdownOpen(false)\n    },\n    [setTimeoutMs]\n  )\n\n  const handleClipboardToggle = useCallback((isOn: boolean) => {\n    if (isOn) {\n      localStorage.removeItem(LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED)\n    } else {\n      localStorage.setItem(\n        LOCAL_STORAGE_KEYS.COPY_TO_CLIPBOARD_DISABLED,\n        'true'\n      )\n    }\n    setIsClipboardDisabled(!isOn)\n  }, [])\n\n  const handleReminderToggle = useCallback((isOn: boolean) => {\n    if (isOn) {\n      localStorage.removeItem(LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED)\n    } else {\n      localStorage.setItem(\n        LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED,\n        'false'\n      )\n    }\n    setIsReminderDisabled(!isOn)\n  }, [])\n\n  return (\n    <div data-testid={TEST_IDS.root} style={styles.root}>\n      <PageHeader\n        as=\"h1\"\n        title={t('App Preferences')}\n        subtitle={t('Control how PearPass works and keep your vault secure.')}\n      />\n\n      <div style={styles.sectionHeading}>\n        <Text variant=\"caption\" color={colors.colorTextSecondary}>\n          {t('Security Awareness')}\n        </Text>\n      </div>\n\n      <div style={styles.settingCard}>\n        {AUTO_LOCK_ENABLED && (\n          <div style={styles.row}>\n            <div style={styles.toggleColumn}>\n              <Text variant=\"labelEmphasized\">{t('Auto Lock')}</Text>\n              <Text variant=\"caption\" color={colors.colorTextSecondary}>\n                {t(\n                  'Automatically lock the app after selected period of inactivity'\n                )}\n              </Text>\n            </div>\n            <Dropdown\n              open={isTimeoutDropdownOpen}\n              onOpenChange={setIsTimeoutDropdownOpen}\n              trigger={\n                <Button\n                  variant=\"secondary\"\n                  size=\"small\"\n                  iconAfter={<KeyboardArrowBottom />}\n                  data-testid={TEST_IDS.autoLockSelect}\n                >\n                  {selectedTimeoutOption?.label ?? t('Select a timeout')}\n                </Button>\n              }\n            >\n              {translatedTimeoutOptions.map((option) => (\n                <NavbarListItem\n                  key={option.key}\n                  testID={`${TEST_IDS.autoLockOption}-${option.key.toLowerCase()}`}\n                  label={option.label}\n                  selected={option.value === timeoutMs}\n                  onClick={() => handleTimeoutSelect(option)}\n                />\n              ))}\n            </Dropdown>\n          </div>\n        )}\n\n        <div style={AUTO_LOCK_ENABLED ? styles.rowDivider : undefined}>\n          <ToggleSwitch\n            data-testid={TEST_IDS.copyToClipboardToggle}\n            checked={!isClipboardDisabled}\n            onChange={handleClipboardToggle}\n            label={t('Copy to Clipboard')}\n            description={t(\n              'Enable one-tap copying to move your credentials between apps effortlessly'\n            )}\n          />\n        </div>\n\n        <div style={styles.rowDivider}>\n          <ToggleSwitch\n            data-testid={TEST_IDS.remindersToggle}\n            checked={!isReminderDisabled}\n            onChange={handleReminderToggle}\n            label={t('Reminders')}\n            description={t(\"Get alerts when it's time to update your passwords\")}\n          />\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/AppPreferencesContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'stretch' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  sectionHeading: {\n    marginTop: `${rawTokens.spacing16}px`,\n    marginBottom: `${rawTokens.spacing4}px`\n  },\n\n  settingCard: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    padding: `${rawTokens.spacing12}px`,\n    borderRadius: `${rawTokens.radius8}px`,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    boxSizing: 'border-box' as const\n  },\n\n  row: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'space-between' as const,\n    gap: `${rawTokens.spacing16}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  rowDivider: {\n    borderTopWidth: 1,\n    borderTopStyle: 'solid' as const,\n    borderTopColor: colors.colorBorderPrimary,\n    marginTop: `${rawTokens.spacing12}px`,\n    paddingTop: `${rawTokens.spacing12}px`\n  },\n\n  toggleColumn: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing4}px`,\n    flex: 1,\n    minWidth: 0\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/AppVersionContent/index.tsx",
    "content": "import React from 'react'\n\nimport { Link, PageHeader, Text, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  PEARPASS_WEBSITE,\n  PRIVACY_POLICY,\n  TERMS_OF_USE\n} from '@tetherto/pearpass-lib-constants'\n\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { createStyles } from './styles'\n\nconst TEST_IDS = {\n  root: 'settings-app-version',\n  fieldVersion: 'settings-app-version-field'\n} as const\n\ntype AppVersionContentProps = {\n  currentVersion: string\n}\n\nexport const AppVersionContent = ({\n  currentVersion\n}: AppVersionContentProps): React.ReactElement => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  return (\n    <div data-testid={TEST_IDS.root} style={styles.root}>\n      <PageHeader\n        as=\"h1\"\n        title={t('App Version')}\n        subtitle={\n          <>\n            {t('Here you can find all the info about your app.')}\n            <br />\n            {t('Check here to see the')}{' '}\n            {/* @ts-ignore - plain CSS object */}\n            <Link href={TERMS_OF_USE} isExternal style={styles.descriptionLink}>\n              {t('Terms of Use')}\n            </Link>\n            {', '}\n            {/* @ts-ignore - plain CSS object */}\n            <Link href={PRIVACY_POLICY} isExternal style={styles.descriptionLink}>\n              {t('Privacy Statement')}\n            </Link>{' '}\n            {t('and')}{' '}\n            {/* @ts-ignore - plain CSS object */}\n            <Link href={PEARPASS_WEBSITE} isExternal style={styles.descriptionLink}>\n              {t('visit our website')}\n            </Link>\n            .\n          </>\n        }\n      />\n\n      <div style={styles.fieldContainer} data-testid={TEST_IDS.fieldVersion}>\n        <Text variant=\"bodyEmphasized\" color={theme.colors.colorTextPrimary}>\n          {t('App version')}\n        </Text>\n        <Text variant=\"body\" color={theme.colors.colorPrimary}>\n          {currentVersion}\n        </Text>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/AppVersionContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'flex-end' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  descriptionLink: {\n    fontWeight: rawTokens.weightMedium\n  },\n\n  fieldContainer: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'space-between' as const,\n    alignSelf: 'stretch' as const,\n    gap: `${rawTokens.spacing12}px`,\n    padding: `15px ${rawTokens.spacing12}px`,\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.radius8}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/BlindPeersContent/index.test.tsx",
    "content": "/// <reference types=\"@testing-library/jest-dom\" />\n\nimport React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, screen, fireEvent, waitFor, act } from '@testing-library/react'\n\nimport { BlindPeersContent } from './index'\nimport { UnsavedChangesProvider } from '../../../../context/UnsavedChangesContext'\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string, values?: Record<string, unknown>) => {\n      if (values && typeof str === 'string') {\n        return str.replace(/\\{(\\w+)\\}/g, (_, k) => String(values[k] ?? ''))\n      }\n      return str\n    }\n  })\n}))\n\nconst mockSetIsLoading = jest.fn()\njest.mock('../../../../context/LoadingContext', () => ({\n  useLoadingContext: () => ({\n    setIsLoading: mockSetIsLoading,\n    isLoading: false\n  })\n}))\n\nconst mockSetToast = jest.fn()\njest.mock('../../../../context/ToastContext', () => ({\n  useToast: () => ({\n    setToast: mockSetToast\n  })\n}))\n\nconst mockGetBlindMirrors = jest.fn()\nconst mockRemoveAllBlindMirrors = jest.fn(() => Promise.resolve())\nconst mockAddBlindMirrors = jest.fn(() => Promise.resolve())\nconst mockAddDefaultBlindMirrors = jest.fn(() => Promise.resolve())\n\nlet mockVaultData: Array<{ isDefault: boolean; key: string }> = []\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useBlindMirrors: () => ({\n    getBlindMirrors: mockGetBlindMirrors,\n    removeAllBlindMirrors: mockRemoveAllBlindMirrors,\n    addBlindMirrors: mockAddBlindMirrors,\n    addDefaultBlindMirrors: mockAddDefaultBlindMirrors,\n    data: mockVaultData\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  BLIND_PEER_TYPE: {\n    PERSONAL: 'personal',\n    DEFAULT: 'default'\n  },\n  BLIND_PEERS_LIMIT: 5\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    root: {},\n    settingCard: {},\n    toggleBlock: {},\n    radioBlock: {},\n    modeRadioGroup: {},\n    radioOptionPad: {},\n    manualOptionBlock: {},\n    manualMultislotWrap: {},\n    multiSlotActions: {},\n    saveChangesRow: {}\n  })\n}))\n\nconst mockTheme = {\n  theme: {\n    colors: {\n      colorTextSecondary: '#888',\n      colorTextPrimary: '#fff',\n      colorBorderPrimary: '#333',\n      colorSurfacePrimary: '#111'\n    }\n  }\n}\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => mockTheme,\n  Title: ({ children }: { children: React.ReactNode }) => <h1>{children}</h1>,\n  Text: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,\n  PageHeader: ({ title }: { title: React.ReactNode }) => <h1>{title}</h1>,\n  ToggleSwitch: (props: {\n    'data-testid'?: string\n    checked?: boolean\n    disabled?: boolean\n    onChange?: (checked: boolean) => void\n    label?: string\n  }) => {\n    const testId = props['data-testid']\n    return (\n      <div data-testid={testId}>\n        <button\n          type=\"button\"\n          role=\"switch\"\n          aria-checked={props.checked}\n          disabled={props.disabled}\n          onClick={() => !props.disabled && props.onChange?.(!props.checked)}\n        >\n          {props.label}\n        </button>\n      </div>\n    )\n  },\n  Radio: (props: {\n    testID?: string\n    value?: string\n    onChange?: (value: string) => void\n    disabled?: boolean\n    options: Array<{ value: string; label: string }>\n  }) => (\n    <div data-testid={props.testID} role=\"radiogroup\">\n      {props.options.map((opt) => (\n        <button\n          key={opt.value}\n          type=\"button\"\n          data-value={opt.value}\n          aria-pressed={props.value === opt.value}\n          disabled={props.disabled}\n          onClick={() => !props.disabled && props.onChange?.(opt.value)}\n        >\n          {opt.label}\n        </button>\n      ))}\n    </div>\n  ),\n  MultiSlotInput: (props: {\n    testID?: string\n    children: React.ReactNode\n    actions?: React.ReactNode\n  }) => (\n    <div data-testid={props.testID}>\n      <div data-testid=\"multislot-fields\">{props.children}</div>\n      {props.actions}\n    </div>\n  ),\n  InputField: (props: {\n    testID?: string\n    value?: string\n    onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n    label?: string\n    disabled?: boolean\n    rightSlot?: React.ReactNode\n  }) => (\n    <div>\n      <span>{props.label}</span>\n      <input\n        data-testid={props.testID}\n        value={props.value}\n        disabled={props.disabled}\n        onChange={props.onChange}\n      />\n      {props.rightSlot}\n    </div>\n  ),\n  Button: (props: {\n    children: React.ReactNode\n    onClick?: () => void\n    disabled?: boolean\n    type?: string\n    'data-testid'?: string\n    'aria-label'?: string\n  }) => (\n    <button\n      type={(props.type as 'button') || 'button'}\n      data-testid={props['data-testid']}\n      aria-label={props['aria-label']}\n      disabled={props.disabled}\n      onClick={props.onClick}\n    >\n      {props.children}\n    </button>\n  )\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  Add: () => null,\n  Close: () => null\n}))\n\ndescribe('BlindPeersContent', () => {\n  const renderView = () =>\n    render(\n      <UnsavedChangesProvider>\n        <BlindPeersContent />\n      </UnsavedChangesProvider>\n    )\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockVaultData = []\n  })\n\n  it('renders card and title', () => {\n    renderView()\n\n    expect(\n      screen.getByTestId('settings-card-blind-peering')\n    ).toBeInTheDocument()\n    expect(\n      screen.getByRole('heading', { name: 'Blind Peering' })\n    ).toBeInTheDocument()\n  })\n\n  it('calls getBlindMirrors on mount', () => {\n    renderView()\n\n    expect(mockGetBlindMirrors).toHaveBeenCalledTimes(1)\n  })\n\n  it('shows mode radios and save after enabling blind peering', () => {\n    renderView()\n\n    expect(\n      screen.queryByTestId('settings-blind-peering-mode')\n    ).not.toBeInTheDocument()\n\n    fireEvent.click(\n      screen.getByRole('switch', { name: 'Enable Blind Peering' })\n    )\n\n    expect(\n      screen.getByTestId('settings-blind-peering-mode')\n    ).toBeInTheDocument()\n    expect(\n      screen.getByTestId('settings-blind-peering-mode-manual')\n    ).toBeInTheDocument()\n    expect(screen.getByTestId('blind-peers-save-changes')).toBeInTheDocument()\n  })\n\n  it('shows manual peer fields when Manual mode is selected', () => {\n    renderView()\n\n    fireEvent.click(\n      screen.getByRole('switch', { name: 'Enable Blind Peering' })\n    )\n\n    fireEvent.click(screen.getByRole('button', { name: 'Manual Blind Peers' }))\n\n    expect(\n      screen.getByTestId('blind-peers-manual-multislot')\n    ).toBeInTheDocument()\n    expect(screen.getByTestId('blind-peer-input-0')).toBeInTheDocument()\n    expect(screen.getByText('Add Another Peer')).toBeInTheDocument()\n  })\n\n  it('disables save when manual mode has no peer codes', () => {\n    renderView()\n\n    fireEvent.click(\n      screen.getByRole('switch', { name: 'Enable Blind Peering' })\n    )\n    fireEvent.click(screen.getByRole('button', { name: 'Manual Blind Peers' }))\n\n    expect(screen.getByTestId('blind-peers-save-changes')).toBeDisabled()\n  })\n\n  it('allows typing in peer input without losing the field', () => {\n    renderView()\n\n    fireEvent.click(\n      screen.getByRole('switch', { name: 'Enable Blind Peering' })\n    )\n    fireEvent.click(screen.getByRole('button', { name: 'Manual Blind Peers' }))\n\n    const input = screen.getByTestId('blind-peer-input-0')\n    fireEvent.change(input, { target: { value: 'hello' } })\n\n    expect(input).toHaveValue('hello')\n  })\n\n  it('disables Add Another Peer at BLIND_PEERS_LIMIT', () => {\n    renderView()\n\n    fireEvent.click(\n      screen.getByRole('switch', { name: 'Enable Blind Peering' })\n    )\n    fireEvent.click(screen.getByRole('button', { name: 'Manual Blind Peers' }))\n\n    for (let i = 0; i < 4; i++) {\n      fireEvent.click(screen.getByText('Add Another Peer'))\n    }\n\n    expect(screen.getAllByTestId(/blind-peer-input-/)).toHaveLength(5)\n    expect(screen.getByText('Add Another Peer')).toBeDisabled()\n  })\n\n  it('saves manual peers: removes all then adds when editing existing mirrors', async () => {\n    mockVaultData = [\n      { isDefault: false, key: 'first' },\n      { isDefault: false, key: 'second' }\n    ]\n\n    renderView()\n\n    await waitFor(() => {\n      expect(\n        screen.getByRole('switch', { name: 'Enable Blind Peering' })\n      ).toBeChecked()\n    })\n\n    fireEvent.click(screen.getByRole('button', { name: 'Manual Blind Peers' }))\n\n    expect(screen.getByTestId('blind-peer-input-0')).toHaveValue('first')\n    expect(screen.getByTestId('blind-peer-input-1')).toHaveValue('second')\n\n    fireEvent.click(screen.getAllByRole('button', { name: 'Remove peer' })[1])\n\n    await waitFor(() => {\n      expect(screen.queryByTestId('blind-peer-input-1')).not.toBeInTheDocument()\n    })\n\n    await act(async () => {\n      fireEvent.click(screen.getByTestId('blind-peers-save-changes'))\n      await Promise.resolve()\n    })\n\n    await waitFor(() => {\n      expect(mockRemoveAllBlindMirrors).toHaveBeenCalledTimes(1)\n      expect(mockAddBlindMirrors).toHaveBeenCalledWith(['first'])\n    })\n  })\n\n  it('saves automatic peers without prior remove when vault is empty', async () => {\n    mockVaultData = []\n\n    renderView()\n\n    fireEvent.click(\n      screen.getByRole('switch', { name: 'Enable Blind Peering' })\n    )\n\n    await act(async () => {\n      fireEvent.click(screen.getByTestId('blind-peers-save-changes'))\n      await Promise.resolve()\n    })\n\n    await waitFor(() => {\n      expect(mockRemoveAllBlindMirrors).not.toHaveBeenCalled()\n      expect(mockAddDefaultBlindMirrors).toHaveBeenCalledTimes(1)\n    })\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/BlindPeersContent/index.tsx",
    "content": "import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport {\n  BLIND_PEER_TYPE,\n  BLIND_PEERS_LEARN_MORE,\n  BLIND_PEERS_LIMIT\n} from '@tetherto/pearpass-lib-constants'\nimport {\n  Button,\n  InputField,\n  MultiSlotInput,\n  PageHeader,\n  Radio,\n  ToggleSwitch,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { Add, Close } from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useBlindMirrors } from '@tetherto/pearpass-lib-vault'\nimport { useLoadingContext } from '../../../../context/LoadingContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useUnsavedChanges } from '../../../../context/UnsavedChangesContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { createStyles } from './styles'\n\nconst TEST_IDS = {\n  settingsCardBlindPeering: 'settings-card-blind-peering',\n  ruleSelectorBlindPeers: 'ruleselector-switchwithlabel-blindPeers'\n} as const\n\nconst keysEqual = (a: string[], b: string[]) =>\n  a.length === b.length && a.every((v, i) => v === b[i])\n\n/** Stable string when mirror list *content* changes (hook may return a new [] ref each render). */\nfunction getMirrorsSnapshotKey(\n  data: ReadonlyArray<{ isDefault: boolean; key: string }>\n): string {\n  if (data.length === 0) {\n    return ''\n  }\n  return data.map((m) => `${m.isDefault ? '1' : '0'}:${m.key}`).join('\\u001f')\n}\n\nexport const BlindPeersContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { colors } = theme\n  const styles = createStyles(colors)\n  const { setIsLoading, isLoading } = useLoadingContext()\n  const { setToast } = useToast()\n\n  const {\n    removeAllBlindMirrors,\n    data: blindMirrorsData,\n    getBlindMirrors,\n    addBlindMirrors,\n    addDefaultBlindMirrors\n  } = useBlindMirrors()\n\n  /** User enabled blind peering but has not saved yet */\n  const [isDraft, setIsDraft] = useState(false)\n  const [isSaving, setIsSaving] = useState(false)\n  const [peerType, setPeerType] = useState<\n    typeof BLIND_PEER_TYPE.DEFAULT | typeof BLIND_PEER_TYPE.PERSONAL\n  >(BLIND_PEER_TYPE.DEFAULT)\n  const [peerKeys, setPeerKeys] = useState<string[]>([''])\n\n  const mirrorsSnapshotKey = getMirrorsSnapshotKey(blindMirrorsData)\n\n  useEffect(() => {\n    getBlindMirrors()\n  }, [])\n\n  useEffect(() => {\n    if (isDraft || isSaving) {\n      return\n    }\n    if (blindMirrorsData.length === 0) {\n      return\n    }\n    const data = blindMirrorsData\n    setPeerType(\n      data[0].isDefault ? BLIND_PEER_TYPE.DEFAULT : BLIND_PEER_TYPE.PERSONAL\n    )\n    if (!data[0].isDefault) {\n      setPeerKeys(\n        data\n          .map((m: { key: string }) => m.key)\n          .filter(Boolean)\n          .slice(0, BLIND_PEERS_LIMIT)\n      )\n    } else {\n      setPeerKeys([''])\n    }\n  }, [isDraft, isSaving, mirrorsSnapshotKey])\n\n  const handleBlindMirrorsRequest = useCallback(\n    async ({\n      callback,\n      errorMessage,\n      successMessage\n    }: {\n      callback: () => Promise<void>\n      errorMessage: string\n      successMessage?: string\n    }): Promise<boolean> => {\n      try {\n        setIsLoading(true)\n        await callback()\n        if (successMessage) {\n          setToast({ message: successMessage })\n        }\n        return true\n      } catch {\n        setToast({ message: errorMessage })\n        return false\n      } finally {\n        setIsLoading(false)\n      }\n    },\n    [setIsLoading, setToast]\n  )\n\n  const applyPeerConfig = useCallback(\n    async (data: {\n      isEditMode?: boolean\n      blindPeerType: string\n      blindPeers?: string[]\n    }): Promise<boolean> => {\n      if (data.blindPeerType === BLIND_PEER_TYPE.PERSONAL) {\n        if (!data.blindPeers?.length) {\n          return false\n        }\n        if (data.isEditMode) {\n          const removed = await handleBlindMirrorsRequest({\n            callback: removeAllBlindMirrors,\n            errorMessage: t('Error removing existing Blind Peers')\n          })\n          if (!removed) return false\n        }\n        return await handleBlindMirrorsRequest({\n          callback: () => addBlindMirrors(data.blindPeers!),\n          errorMessage: t('Error adding Blind Peers'),\n          successMessage: t('Manual Blind Peers enabled successfully')\n        })\n      }\n\n      if (data.blindPeerType === BLIND_PEER_TYPE.DEFAULT) {\n        if (\n          data.isEditMode &&\n          blindMirrorsData.length > 0 &&\n          !blindMirrorsData[0].isDefault\n        ) {\n          const removed = await handleBlindMirrorsRequest({\n            callback: removeAllBlindMirrors,\n            errorMessage: t('Error removing existing Blind Peers')\n          })\n          if (!removed) return false\n        }\n        return await handleBlindMirrorsRequest({\n          callback: addDefaultBlindMirrors,\n          errorMessage: t('Error adding Blind Peers'),\n          successMessage: t('Automatic Blind Peers enabled successfully')\n        })\n      }\n\n      return false\n    },\n    [\n      addBlindMirrors,\n      addDefaultBlindMirrors,\n      blindMirrorsData,\n      handleBlindMirrorsRequest,\n      removeAllBlindMirrors,\n      t\n    ]\n  )\n\n  const onToggleChange = useCallback(\n    (checked: boolean) => {\n      if (!checked) {\n        void handleBlindMirrorsRequest({\n          callback: removeAllBlindMirrors,\n          errorMessage: t('Error removing Blind Peers')\n        })\n        setIsDraft(false)\n        setPeerType(BLIND_PEER_TYPE.DEFAULT)\n        setPeerKeys([''])\n        return\n      }\n      setIsDraft(true)\n      setPeerType(BLIND_PEER_TYPE.DEFAULT)\n      setPeerKeys([''])\n    },\n    [handleBlindMirrorsRequest, removeAllBlindMirrors, t]\n  )\n\n  const handlePeerTypeChange = useCallback(\n    (value: string) => {\n      if (value === BLIND_PEER_TYPE.DEFAULT) {\n        setPeerType(BLIND_PEER_TYPE.DEFAULT)\n        return\n      }\n      setPeerType(BLIND_PEER_TYPE.PERSONAL)\n      if (blindMirrorsData.length === 0 || blindMirrorsData[0].isDefault) {\n        setPeerKeys([''])\n      }\n    },\n    [blindMirrorsData]\n  )\n\n  const updatePeerKey = useCallback((index: number, value: string) => {\n    setPeerKeys((prev) => {\n      const next = [...prev]\n      next[index] = value\n      return next\n    })\n  }, [])\n\n  const addPeerRow = useCallback(() => {\n    setPeerKeys((prev) =>\n      prev.length >= BLIND_PEERS_LIMIT ? prev : [...prev, '']\n    )\n  }, [])\n\n  const removePeerRow = useCallback((index: number) => {\n    setPeerKeys((prev) => prev.filter((_, i) => i !== index))\n  }, [])\n\n  const trimmedPeerKeys = useMemo(\n    () => peerKeys.map((k) => k.trim()).filter(Boolean),\n    [peerKeys]\n  )\n\n  const { savedPeerType, savedKeys } = useMemo(() => {\n    if (!blindMirrorsData.length) {\n      return {\n        savedPeerType: null as\n          | typeof BLIND_PEER_TYPE.DEFAULT\n          | typeof BLIND_PEER_TYPE.PERSONAL\n          | null,\n        savedKeys: [] as string[]\n      }\n    }\n    const first = blindMirrorsData[0]\n    return {\n      savedPeerType: first.isDefault\n        ? BLIND_PEER_TYPE.DEFAULT\n        : BLIND_PEER_TYPE.PERSONAL,\n      savedKeys: first.isDefault\n        ? []\n        : blindMirrorsData.map((m: { key: string }) => m.key).filter(Boolean)\n    }\n  }, [blindMirrorsData])\n\n  const hasMirrors = blindMirrorsData.length > 0\n  const interactionDisabled = isLoading\n\n  const isDirty = useMemo(() => {\n    if (!hasMirrors || savedPeerType == null) {\n      return false\n    }\n    if (peerType !== savedPeerType) {\n      return true\n    }\n    if (\n      peerType === BLIND_PEER_TYPE.PERSONAL &&\n      savedPeerType === BLIND_PEER_TYPE.PERSONAL\n    ) {\n      return !keysEqual(trimmedPeerKeys, savedKeys)\n    }\n    return false\n  }, [hasMirrors, peerType, savedPeerType, savedKeys, trimmedPeerKeys])\n\n  const saveDisabled = useMemo(() => {\n    if (isSaving) {\n      return true\n    }\n    if (peerType === BLIND_PEER_TYPE.DEFAULT) {\n      return false\n    }\n    if (trimmedPeerKeys.length === 0) {\n      return true\n    }\n    if (isDraft) {\n      return false\n    }\n    if (!hasMirrors) {\n      return false\n    }\n    return !isDirty\n  }, [hasMirrors, isDirty, isDraft, isSaving, peerType, trimmedPeerKeys.length])\n\n  const handleConfirm = useCallback(async (): Promise<boolean> => {\n    if (peerType === BLIND_PEER_TYPE.PERSONAL && trimmedPeerKeys.length === 0) {\n      setToast({ message: t('Add at least one blind peer code') })\n      return false\n    }\n    if (\n      peerType === BLIND_PEER_TYPE.PERSONAL &&\n      trimmedPeerKeys.length > BLIND_PEERS_LIMIT\n    ) {\n      setToast({\n        message: t('You can add at most {count} blind peers', {\n          count: BLIND_PEERS_LIMIT\n        })\n      })\n      return false\n    }\n    setIsSaving(true)\n    let succeeded = false\n    try {\n      const isEditMode = blindMirrorsData.length > 0\n      succeeded = await applyPeerConfig({\n        blindPeerType: peerType,\n        blindPeers:\n          peerType === BLIND_PEER_TYPE.PERSONAL\n            ? trimmedPeerKeys.slice(0, BLIND_PEERS_LIMIT)\n            : undefined,\n        isEditMode\n      })\n      await Promise.resolve(getBlindMirrors())\n    } finally {\n      setIsSaving(false)\n      if (succeeded) {\n        setIsDraft(false)\n      }\n    }\n    return succeeded\n  }, [\n    applyPeerConfig,\n    blindMirrorsData.length,\n    getBlindMirrors,\n    peerType,\n    setToast,\n    t,\n    trimmedPeerKeys\n  ])\n\n  const toggleChecked = hasMirrors || isDraft || isSaving\n\n  const hasUnsavedChanges = useMemo(\n    () => (isDraft || isDirty) && !saveDisabled,\n    [isDirty, isDraft, saveDisabled]\n  )\n\n  const { setGuard } = useUnsavedChanges()\n  const handleConfirmRef = useRef(handleConfirm)\n  useEffect(() => {\n    handleConfirmRef.current = handleConfirm\n  }, [handleConfirm])\n\n  useEffect(() => {\n    setGuard({\n      hasUnsavedChanges,\n      description: t(\n        'You have unsaved changes to your Blind Peering settings. Would you like to save them before leaving?'\n      ),\n      save: () => handleConfirmRef.current()\n    })\n    return () => {\n      setGuard(null)\n    }\n  }, [hasUnsavedChanges, setGuard, t])\n\n  const automaticRadioOptions = useMemo(\n    () => [\n      {\n        value: BLIND_PEER_TYPE.DEFAULT,\n        label: t('Automatic Blind Peers'),\n        description: t(\n          'Let PearPass allocate blind peers for you to handle syncing'\n        )\n      }\n    ],\n    [t]\n  )\n\n  const manualRadioOptions = useMemo(\n    () => [\n      {\n        value: BLIND_PEER_TYPE.PERSONAL,\n        label: t('Manual Blind Peers'),\n        description: t('Setup your own private blind peers')\n      }\n    ],\n    [t]\n  )\n  return (\n    <div data-testid={TEST_IDS.settingsCardBlindPeering} style={styles.root}>\n      <PageHeader\n        as=\"h1\"\n        title={t('Blind Peering')}\n        subtitle={\n          <>\n            {t(\n              'Sync your encrypted vault with other devices to improve availability and reliability. Peers only see encrypted data - they can’t access or read anything.'\n            )}\n            <br />\n            <a\n              href={BLIND_PEERS_LEARN_MORE}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              style={{\n                color: colors.colorPrimary,\n                textDecoration: 'underline'\n              }}\n            >\n              {t('Learn more about Blind Peering.')}\n            </a>\n          </>\n        }\n      />\n\n      <div style={styles.settingCard}>\n        <div style={styles.toggleBlock}>\n          <ToggleSwitch\n            data-testid={TEST_IDS.ruleSelectorBlindPeers}\n            checked={toggleChecked}\n            disabled={interactionDisabled}\n            onChange={onToggleChange}\n            label={t('Enable Blind Peering')}\n            description={t('Allows your vault to sync through blind peers')}\n            aria-label={t('Enable Blind Peering')}\n          />\n        </div>\n\n        {toggleChecked && (\n          <>\n            <div style={styles.radioBlock}>\n              <div style={styles.modeRadioGroup}>\n                <div style={styles.radioOptionPad}>\n                  <Radio\n                    builtIn\n                    testID=\"settings-blind-peering-mode\"\n                    value={peerType}\n                    onChange={handlePeerTypeChange}\n                    disabled={interactionDisabled}\n                    options={automaticRadioOptions}\n                  />\n                </div>\n                <div style={styles.manualOptionBlock}>\n                  <div style={styles.radioOptionPad}>\n                    <Radio\n                      builtIn\n                      testID=\"settings-blind-peering-mode-manual\"\n                      value={peerType}\n                      onChange={handlePeerTypeChange}\n                      disabled={interactionDisabled}\n                      options={manualRadioOptions}\n                    />\n                  </div>\n                  {peerType === BLIND_PEER_TYPE.PERSONAL && (\n                    <div style={styles.manualMultislotWrap}>\n                      <MultiSlotInput\n                        testID=\"blind-peers-manual-multislot\"\n                        actions={\n                          <div style={styles.multiSlotActions}>\n                            <Button\n                              variant=\"tertiaryAccent\"\n                              size=\"medium\"\n                              disabled={\n                                interactionDisabled ||\n                                peerKeys.length >= BLIND_PEERS_LIMIT\n                              }\n                              onClick={addPeerRow}\n                              iconBefore={<Add width={14} height={14} />}\n                            >\n                              {t('Add Another Peer')}\n                            </Button>\n                          </div>\n                        }\n                      >\n                        {peerKeys.map((peerCode, index) => (\n                          <InputField\n                            key={`blind-peer-row-${index}`}\n                            label={`#${index + 1} ${t('Blind Peer')}`}\n                            placeholder={t('Enter Peer Code')}\n                            value={peerCode}\n                            onChange={(e) =>\n                              updatePeerKey(index, e.target.value)\n                            }\n                            disabled={interactionDisabled}\n                            testID={`blind-peer-input-${index}`}\n                            rightSlot={\n                              peerKeys.length > 1 ? (\n                                <Button\n                                  variant=\"tertiary\"\n                                  size=\"small\"\n                                  type=\"button\"\n                                  aria-label={t('Remove peer')}\n                                  disabled={interactionDisabled}\n                                  onClick={() => removePeerRow(index)}\n                                  iconBefore={\n                                    <Close\n                                      width={24}\n                                      height={24}\n                                      color={colors.colorTextPrimary}\n                                    />\n                                  }\n                                />\n                              ) : null\n                            }\n                          />\n                        ))}\n                      </MultiSlotInput>\n                    </div>\n                  )}\n                </div>\n              </div>\n            </div>\n          </>\n        )}\n      </div>\n\n      {toggleChecked && (\n        <div style={styles.saveChangesRow}>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            disabled={saveDisabled}\n            onClick={() => void handleConfirm()}\n            data-testid=\"blind-peers-save-changes\"\n          >\n            {t('Save Changes')}\n          </Button>\n        </div>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/BlindPeersContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'stretch' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  settingCard: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    padding: `${rawTokens.spacing12}px`,\n    borderRadius: `${rawTokens.radius8}px`,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    boxSizing: 'border-box' as const,\n    marginTop: `${rawTokens.spacing16}px`\n  },\n\n  toggleBlock: {\n    width: '100%'\n  },\n\n  radioBlock: {\n    width: '100%'\n  },\n\n  modeRadioGroup: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    width: '100%',\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    borderRadius: `${rawTokens.radius8}px`,\n    overflow: 'hidden' as const,\n    boxSizing: 'border-box' as const\n  },\n\n  radioOptionPad: {\n    padding: `${rawTokens.spacing12}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  manualOptionBlock: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    width: '100%',\n    borderTopWidth: 1,\n    borderTopStyle: 'solid' as const,\n    borderTopColor: colors.colorBorderPrimary,\n    boxSizing: 'border-box' as const\n  },\n\n  manualMultislotWrap: {\n    width: '100%',\n    boxSizing: 'border-box' as const,\n    padding: `${rawTokens.spacing12}px`\n  },\n\n  multiSlotActions: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  saveChangesRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    justifyContent: 'flex-end' as const,\n    width: '100%',\n    marginTop: `${rawTokens.spacing16}px`,\n    boxSizing: 'border-box' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/DiagnosticsContent/index.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, screen, fireEvent, waitFor, act } from '@testing-library/react'\n\nimport { DiagnosticsContent } from './index'\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\njest.mock('../../../../utils/logger', () => ({\n  logger: { error: jest.fn() }\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    root: {},\n    settingCard: {},\n    openLogsRow: {}\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  FolderOpen: () => null\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => ({ theme: { colors: {} } }),\n  PageHeader: ({ title, subtitle }: { title: string; subtitle?: string }) => (\n    <div data-testid=\"settings-diagnostics-page-header\">\n      <h1>{title}</h1>\n      {subtitle ? <p>{subtitle}</p> : null}\n    </div>\n  ),\n  Button: ({\n    children,\n    onClick,\n    'data-testid': dataTestid,\n    disabled,\n    iconBefore: _i\n  }: {\n    children: React.ReactNode\n    onClick?: () => void\n    'data-testid'?: string\n    disabled?: boolean\n    iconBefore?: React.ReactNode\n  }) => (\n    <button\n      type=\"button\"\n      data-testid={dataTestid}\n      disabled={disabled}\n      onClick={onClick}\n    >\n      {children}\n    </button>\n  ),\n  ToggleSwitch: ({\n    checked,\n    onChange,\n    'data-testid': dataTestid,\n    disabled,\n    label\n  }: {\n    checked?: boolean\n    onChange?: (checked: boolean) => void\n    'data-testid'?: string\n    disabled?: boolean\n    label?: string\n  }) => (\n    <label>\n      {label}\n      <input\n        type=\"checkbox\"\n        data-testid={dataTestid}\n        checked={!!checked}\n        disabled={disabled}\n        onChange={(e) => onChange?.(e.target.checked)}\n      />\n    </label>\n  )\n}))\n\nconst TEST_IDS = {\n  root: 'settings-card-diagnostics',\n  loggingToggle: 'settings-diagnostics-logging-toggle',\n  openLogs: 'settings-diagnostics-open-logs-button'\n} as const\n\nfunction withElectronAPI(value: unknown, run: () => Promise<void> | void) {\n  const original = window.electronAPI\n  Object.defineProperty(window, 'electronAPI', {\n    configurable: true,\n    writable: true,\n    value\n  })\n  return Promise.resolve(run()).finally(() => {\n    Object.defineProperty(window, 'electronAPI', {\n      configurable: true,\n      writable: true,\n      value: original\n    })\n  })\n}\n\ndescribe('DiagnosticsContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders the header and toggle, with Open logs disabled by default', () => {\n    render(<DiagnosticsContent />)\n\n    expect(screen.getByTestId(TEST_IDS.root)).toBeInTheDocument()\n    expect(\n      screen.getByTestId('settings-diagnostics-page-header').textContent\n    ).toContain('Diagnostics')\n    expect(screen.getByTestId(TEST_IDS.loggingToggle)).not.toBeChecked()\n    expect(screen.getByTestId(TEST_IDS.openLogs)).toBeDisabled()\n  })\n\n  it('Open logs folder button calls window.electronAPI.openLogsFolder when logging is on', async () => {\n    const openLogsFolder = jest.fn(() => Promise.resolve())\n    const isLoggingEnabled = jest.fn(() =>\n      Promise.resolve({ enabled: true, forced: false })\n    )\n\n    await withElectronAPI({ openLogsFolder, isLoggingEnabled }, async () => {\n      render(<DiagnosticsContent />)\n\n      const btn = await screen.findByTestId(TEST_IDS.openLogs)\n      await waitFor(() => expect(btn).not.toBeDisabled())\n\n      await act(async () => {\n        fireEvent.click(btn)\n      })\n\n      await waitFor(() => {\n        expect(openLogsFolder).toHaveBeenCalledTimes(1)\n      })\n    })\n  })\n\n  it('Open logs folder button is disabled when logging is off', async () => {\n    const isLoggingEnabled = jest.fn(() =>\n      Promise.resolve({ enabled: false, forced: false })\n    )\n\n    await withElectronAPI({ isLoggingEnabled }, async () => {\n      render(<DiagnosticsContent />)\n      const btn = await screen.findByTestId(TEST_IDS.openLogs)\n      await waitFor(() => expect(isLoggingEnabled).toHaveBeenCalled())\n      expect(btn).toBeDisabled()\n    })\n  })\n\n  it('toggling the diagnostic switch calls setLogging and updates state', async () => {\n    const isLoggingEnabled = jest.fn(() =>\n      Promise.resolve({ enabled: false, forced: false })\n    )\n    const setLogging = jest.fn((enabled: boolean) =>\n      Promise.resolve({ enabled, forced: false })\n    )\n\n    await withElectronAPI({ isLoggingEnabled, setLogging }, async () => {\n      render(<DiagnosticsContent />)\n      const toggle = await screen.findByTestId(TEST_IDS.loggingToggle)\n      await waitFor(() => expect(isLoggingEnabled).toHaveBeenCalled())\n\n      await act(async () => {\n        fireEvent.click(toggle)\n      })\n\n      await waitFor(() => {\n        expect(setLogging).toHaveBeenCalledWith(true)\n      })\n      const btn = screen.getByTestId(TEST_IDS.openLogs)\n      await waitFor(() => expect(btn).not.toBeDisabled())\n    })\n  })\n\n  it('forced=true disables the toggle so the user cannot turn logging off', async () => {\n    const isLoggingEnabled = jest.fn(() =>\n      Promise.resolve({ enabled: true, forced: true })\n    )\n    const setLogging = jest.fn()\n\n    await withElectronAPI({ isLoggingEnabled, setLogging }, async () => {\n      render(<DiagnosticsContent />)\n      const toggle = await screen.findByTestId(TEST_IDS.loggingToggle)\n      await waitFor(() => expect(isLoggingEnabled).toHaveBeenCalled())\n      await waitFor(() => expect(toggle).toBeDisabled())\n      expect(setLogging).not.toHaveBeenCalled()\n    })\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/DiagnosticsContent/index.tsx",
    "content": "import React, { useCallback, useEffect, useState } from 'react'\n\nimport {\n  Button,\n  PageHeader,\n  ToggleSwitch,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { FolderOpen } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { logger } from '../../../../utils/logger'\nimport { createStyles } from './styles'\n\nconst TEST_IDS = {\n  root: 'settings-card-diagnostics',\n  loggingToggle: 'settings-diagnostics-logging-toggle',\n  openLogs: 'settings-diagnostics-open-logs-button'\n} as const\n\nexport const DiagnosticsContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  const [loggingEnabled, setLoggingEnabled] = useState(false)\n  const [loggingForced, setLoggingForced] = useState(false)\n  const [isTogglingLogging, setIsTogglingLogging] = useState(false)\n\n  useEffect(() => {\n    const electronAPI = window.electronAPI\n    if (!electronAPI || typeof electronAPI.isLoggingEnabled !== 'function') {\n      return\n    }\n\n    let cancelled = false\n    electronAPI\n      .isLoggingEnabled()\n      .then((state) => {\n        if (cancelled) return\n        setLoggingEnabled(state.enabled)\n        setLoggingForced(state.forced)\n      })\n      .catch((error) =>\n        logger.error('DiagnosticsContent', 'isLoggingEnabled failed:', error)\n      )\n    return () => {\n      cancelled = true\n    }\n  }, [])\n\n  const handleLoggingToggle = useCallback(\n    async (next: boolean) => {\n      if (loggingForced || isTogglingLogging) return\n      setIsTogglingLogging(true)\n      try {\n        const state = await window.electronAPI?.setLogging?.(next)\n        if (state) {\n          setLoggingEnabled(state.enabled)\n          setLoggingForced(state.forced)\n        }\n      } finally {\n        setIsTogglingLogging(false)\n      }\n    },\n    [isTogglingLogging, loggingForced]\n  )\n\n  return (\n    <div data-testid={TEST_IDS.root} style={styles.root}>\n      <PageHeader\n        title={t('Diagnostics')}\n        subtitle={t(\n          'Logs help us troubleshoot issues. Enable logging, reproduce the problem, then share the logs with us.'\n        )}\n      />\n      <div style={styles.settingCard}>\n        <ToggleSwitch\n          data-testid={TEST_IDS.loggingToggle}\n          checked={loggingEnabled}\n          onChange={(checked) => {\n            void handleLoggingToggle(checked)\n          }}\n          disabled={loggingForced || isTogglingLogging}\n          label={t('Enable logs')}\n          description={\n            loggingForced\n              ? t(\n                  'Logging is enabled by this build (nightly or --enable-logging launch flag).'\n                )\n              : t('Capture verbose logs to share with us.')\n          }\n        />\n      </div>\n      <div style={styles.openLogsRow}>\n        <Button\n          data-testid={TEST_IDS.openLogs}\n          variant=\"primary\"\n          size=\"small\"\n          disabled={!loggingEnabled}\n          onClick={() => {\n            void window.electronAPI?.openLogsFolder?.()\n          }}\n          iconBefore={<FolderOpen />}\n        >\n          {t('Open logs folder')}\n        </Button>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/DiagnosticsContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'stretch' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  settingCard: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    padding: `${rawTokens.spacing12}px`,\n    borderRadius: `${rawTokens.radius8}px`,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    boxSizing: 'border-box' as const,\n    marginTop: `${rawTokens.spacing16}px`\n  },\n\n  openLogsRow: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    justifyContent: 'flex-end' as const,\n    width: '100%',\n    marginTop: `${rawTokens.spacing16}px`,\n    boxSizing: 'border-box' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ExportItemsContent/index.test.tsx",
    "content": "/// <reference types=\"@testing-library/jest-dom\" />\n\nimport React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen, waitFor } from '@testing-library/react'\n\nimport { ExportItemsContent } from './index'\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\nconst mockSetToast = jest.fn()\njest.mock('../../../../context/ToastContext', () => ({\n  useToast: () => ({\n    setToast: mockSetToast\n  })\n}))\n\nconst mockSetModal = jest.fn()\nconst mockCloseModal = jest.fn()\njest.mock('../../../../context/ModalContext', () => ({\n  useModal: () => ({\n    setModal: mockSetModal,\n    closeModal: mockCloseModal\n  })\n}))\n\nconst mockRefetchVault = jest.fn()\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useVault: () => ({\n    data: { id: 'vault-1' },\n    refetch: mockRefetchVault\n  }),\n  getMasterEncryption: jest.fn(() => Promise.resolve('enc-key')),\n  getVaultById: jest.fn(() => Promise.resolve({ id: 'vault-1', name: 'Main' })),\n  listRecords: jest.fn(() => Promise.resolve([{ id: 'record-1' }]))\n}))\n\nconst mockExportJson = jest.fn((..._args: unknown[]) => Promise.resolve())\nconst mockExportCsv = jest.fn((..._args: unknown[]) => Promise.resolve())\n\njest.mock('../../../SettingsView/ExportTab/utils/exportJsonPerVault', () => ({\n  handleExportJsonPerVaultTest: (...args: unknown[]) => mockExportJson(...args)\n}))\n\njest.mock('../../../SettingsView/ExportTab/utils/exportCsvPerVault', () => ({\n  handleExportCSVPerVault: (...args: unknown[]) => mockExportCsv(...args)\n}))\n\njest.mock('../../../../containers/Modal/AuthenticationModalContentV2', () => ({\n  AuthenticationModalContentV2: (props: { onSuccess: () => Promise<void> }) => (\n    <button\n      type=\"button\"\n      data-testid=\"auth-confirm\"\n      onClick={() => void props.onSuccess()}\n    >\n      Confirm\n    </button>\n  )\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    container: {},\n    header: {},\n    toggleCard: {},\n    passwordFieldsWrapper: {},\n    passwordFields: {},\n    actionsRow: {}\n  })\n}))\n\nconst mockTheme = {\n  theme: {\n    colors: {\n      colorTextSecondary: '#888',\n      colorTextPrimary: '#fff'\n    }\n  }\n}\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => mockTheme,\n  PageHeader: ({ title }: { title: React.ReactNode }) => <h1>{title}</h1>,\n  Text: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,\n  Title: ({ children }: { children: React.ReactNode }) => <h2>{children}</h2>,\n  Radio: (props: {\n    options: Array<{ value: string; label: string }>\n    value?: string\n    onChange?: (value: string) => void\n    testID?: string\n  }) => (\n    <div data-testid={props.testID}>\n      {props.options.map((opt) => (\n        <button\n          key={opt.value}\n          type=\"button\"\n          data-testid={`${props.testID}-${opt.value}`}\n          aria-pressed={props.value === opt.value}\n          onClick={() => props.onChange?.(opt.value)}\n        >\n          {opt.label}\n        </button>\n      ))}\n    </div>\n  ),\n  ToggleSwitch: (props: {\n    'data-testid'?: string\n    checked?: boolean\n    onChange?: (checked: boolean) => void\n  }) => (\n    <button\n      type=\"button\"\n      role=\"switch\"\n      data-testid={props['data-testid']}\n      aria-checked={props.checked}\n      onClick={() => props.onChange?.(!props.checked)}\n    >\n      toggle\n    </button>\n  ),\n  PasswordField: (props: {\n    testID?: string\n    value?: string\n    onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n  }) => (\n    <input\n      data-testid={props.testID}\n      value={props.value}\n      onChange={props.onChange}\n    />\n  ),\n  Button: (props: {\n    children?: React.ReactNode\n    onClick?: () => void\n    disabled?: boolean\n    'data-testid'?: string\n  }) => (\n    <button\n      type=\"button\"\n      data-testid={props['data-testid']}\n      disabled={props.disabled}\n      onClick={props.onClick}\n    >\n      {props.children}\n    </button>\n  )\n}))\n\ndescribe('ExportItemsContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders export heading and action', () => {\n    render(<ExportItemsContent />)\n\n    expect(screen.getByRole('heading', { name: 'Export' })).toBeInTheDocument()\n    expect(screen.getByTestId('export-button')).toBeInTheDocument()\n  })\n\n  it('disables export when password protection is enabled and passwords mismatch', () => {\n    render(<ExportItemsContent />)\n\n    fireEvent.click(screen.getByTestId('export-protect-toggle'))\n\n    fireEvent.change(screen.getByTestId('export-file-password'), {\n      target: { value: 'abc12345' }\n    })\n    fireEvent.change(screen.getByTestId('export-file-password-confirm'), {\n      target: { value: 'abc123XX' }\n    })\n\n    expect(screen.getByTestId('export-button')).toBeDisabled()\n  })\n\n  it('exports json after auth confirmation', async () => {\n    render(<ExportItemsContent />)\n\n    fireEvent.click(screen.getByTestId('export-protect-toggle'))\n\n    fireEvent.change(screen.getByTestId('export-file-password'), {\n      target: { value: 'secret' }\n    })\n    fireEvent.change(screen.getByTestId('export-file-password-confirm'), {\n      target: { value: 'secret' }\n    })\n\n    fireEvent.click(screen.getByTestId('export-button'))\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n\n    const modalElement = mockSetModal.mock.calls[0][0] as React.ReactElement\n    render(modalElement)\n\n    fireEvent.click(screen.getByTestId('auth-confirm'))\n\n    await waitFor(() => {\n      expect(mockCloseModal).toHaveBeenCalledTimes(1)\n      expect(mockExportJson).toHaveBeenCalledTimes(1)\n    })\n\n    expect(mockExportJson).toHaveBeenCalledWith(\n      [\n        expect.objectContaining({\n          id: 'vault-1',\n          records: [{ id: 'record-1' }]\n        })\n      ],\n      'secret'\n    )\n    expect(mockRefetchVault).toHaveBeenCalledWith('vault-1', 'enc-key')\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ExportItemsContent/index.tsx",
    "content": "import React, { useCallback, useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport {\n  Button,\n  PageHeader,\n  PasswordField,\n  Radio,\n  ToggleSwitch,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  // @ts-expect-error — JS module without type declarations\n  getMasterEncryption,\n  // @ts-expect-error — JS module without type declarations\n  getVaultById,\n  // @ts-expect-error — JS module without type declarations\n  listRecords,\n  useVault\n} from '@tetherto/pearpass-lib-vault'\n\nimport { AuthenticationModalContentV2 } from '../../../../containers/Modal/AuthenticationModalContentV2'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { handleExportCSVPerVault } from '../../../SettingsView/ExportTab/utils/exportCsvPerVault'\nimport { handleExportJsonPerVaultTest } from '../../../SettingsView/ExportTab/utils/exportJsonPerVault'\nimport { createStyles } from './styles'\n\ntype FormValues = {\n  password: string\n  passwordConfirm: string\n}\n\nenum ExportFormat {\n  JSON = 'json',\n  CSV = 'csv'\n}\n\nexport const ExportItemsContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { setToast } = useToast()\n  const { setModal, closeModal } = useModal()\n  const { data: currentVault, refetch: refetchVault } = useVault()\n\n  const [selectedFormat, setSelectedFormat] = useState<ExportFormat>(\n    ExportFormat.JSON\n  )\n  const [isPasswordProtected, setIsPasswordProtected] = useState(false)\n  const [isExporting, setIsExporting] = useState(false)\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required')),\n    passwordConfirm: Validator.string().required(t('Password is required'))\n  })\n\n  const { register, setErrors, setValue, values } = useForm({\n    initialValues: { password: '', passwordConfirm: '' },\n    validate: (vals: FormValues) => schema.validate(vals)\n  })\n\n  const resetForm = useCallback(() => {\n    setValue('password', '')\n    setValue('passwordConfirm', '')\n    setErrors({})\n  }, [setValue, setErrors])\n\n  const handleFormatChange = (value: string) => {\n    resetForm()\n    setIsPasswordProtected(false)\n    setSelectedFormat(value as ExportFormat)\n  }\n\n  const handleTogglePasswordProtection = (checked: boolean) => {\n    setIsPasswordProtected(checked)\n    if (!checked) {\n      resetForm()\n    }\n  }\n\n  const fetchVaultData = async () => {\n    const vaultId = currentVault?.id\n    const vault = await getVaultById(vaultId)\n    const records = (await listRecords()) ?? []\n    return { ...vault, records }\n  }\n\n  const handleSubmitExport = useCallback(\n    async (encryptionPassword: string | null) => {\n      const vaultData = await fetchVaultData()\n      const vaultsToExport = [vaultData]\n\n      if (selectedFormat === ExportFormat.JSON) {\n        await handleExportJsonPerVaultTest(vaultsToExport, encryptionPassword)\n      } else {\n        await handleExportCSVPerVault(vaultsToExport)\n      }\n    },\n    [selectedFormat, currentVault]\n  )\n\n  const handleExport = useCallback(async () => {\n    if (isExporting) return\n\n    try {\n      setIsExporting(true)\n      const vaultId = currentVault?.id\n      const currentEncryption = await getMasterEncryption()\n\n      await handleSubmitExport(isPasswordProtected ? values.password : null)\n\n      refetchVault(vaultId, currentEncryption)\n\n      resetForm()\n    } catch (error) {\n      setToast({\n        message:\n          error instanceof Error\n            ? error.message\n            : t('An error occurred while exporting your data')\n      })\n    } finally {\n      setIsExporting(false)\n    }\n  }, [\n    isExporting,\n    isPasswordProtected,\n    values.password,\n    currentVault,\n    handleSubmitExport,\n    refetchVault,\n    setToast,\n    resetForm,\n    t\n  ])\n\n  const openAuthModal = () => {\n    setModal(\n      <AuthenticationModalContentV2\n        onSuccess={async () => {\n          closeModal()\n          await handleExport()\n        }}\n      />\n    )\n  }\n\n  const isExportDisabled =\n    isPasswordProtected &&\n    (!values.password ||\n      !values.passwordConfirm ||\n      values.password !== values.passwordConfirm)\n\n  const radioOptions = [\n    {\n      value: ExportFormat.JSON,\n      label: t('JSON (Recommended)'),\n      description: t(\n        'JSON preserves all data, including custom fields and metadata, ensuring a complete export'\n      )\n    },\n    {\n      value: ExportFormat.CSV,\n      label: t('CSV'),\n      description: t(\n        'CSV exports basic item data for spreadsheets, without custom fields or metadata.'\n      )\n    }\n  ]\n\n  const passwordFieldsVisible =\n    selectedFormat === ExportFormat.JSON && isPasswordProtected\n  const passwordsMatch =\n    values.password.length > 0 &&\n    values.passwordConfirm.length > 0 &&\n    values.password === values.passwordConfirm\n\n  const {\n    error: passwordError,\n    onChange: onChangePassword,\n    ...passwordRegisterProps\n  } = register('password')\n  const {\n    error: passwordConfirmError,\n    onChange: onChangePasswordConfirm,\n    ...passwordConfirmRegisterProps\n  } = register('passwordConfirm')\n\n  return (\n    <div style={styles.container}>\n      <PageHeader\n        as=\"h1\"\n        title={t('Export')}\n        subtitle={t(\n          'Download the data in the desired format and optionally protect the file with a password for securely backing up or transferring your data.'\n        )}\n      />\n\n      <Radio\n        options={radioOptions}\n        value={selectedFormat}\n        onChange={handleFormatChange}\n        testID=\"export-format-radio\"\n      />\n\n      {selectedFormat === ExportFormat.JSON && (\n        <div style={styles.toggleCard}>\n          <ToggleSwitch\n            checked={isPasswordProtected}\n            onChange={handleTogglePasswordProtection}\n            label={t('Protect with Password')}\n            description={t(\n              'Protect your exported file so it can only be opened with the password you set'\n            )}\n            data-testid=\"export-protect-toggle\"\n          />\n\n          <div\n            style={{\n              ...styles.passwordFieldsWrapper,\n              maxHeight: passwordFieldsVisible ? '400px' : '0px',\n              opacity: passwordFieldsVisible ? 1 : 0\n            }}\n          >\n            <div style={styles.passwordFields}>\n              <PasswordField\n                label={t('Password')}\n                placeholder={t('Enter File Password')}\n                {...passwordRegisterProps}\n                onChange={(e) => onChangePassword(e.target.value)}\n                error={passwordError ?? undefined}\n                testID=\"export-file-password\"\n              />\n              <PasswordField\n                label={t('Repeat Password')}\n                placeholder={t('Repeat File Password')}\n                {...passwordConfirmRegisterProps}\n                onChange={(e) => onChangePasswordConfirm(e.target.value)}\n                passwordIndicator={passwordsMatch ? 'match' : undefined}\n                error={\n                  passwordsMatch\n                    ? undefined\n                    : (passwordConfirmError ?? undefined)\n                }\n                testID=\"export-file-password-confirm\"\n              />\n            </div>\n          </div>\n        </div>\n      )}\n\n      <div style={styles.actionsRow}>\n        <Button\n          variant=\"primary\"\n          size=\"small\"\n          type=\"button\"\n          disabled={isExportDisabled}\n          onClick={openAuthModal}\n          data-testid=\"export-button\"\n        >\n          {t('Export')}\n        </Button>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ExportItemsContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`\n  },\n\n  toggleCard: {\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.radius8}px`,\n    overflow: 'hidden' as const,\n    padding: `${rawTokens.spacing12}px`,\n    display: 'flex' as const,\n    flexDirection: 'column' as const\n  },\n\n  passwordFieldsWrapper: {\n    overflow: 'hidden' as const,\n    transition: 'max-height 0.3s ease-in-out, opacity 0.3s ease-in-out'\n  },\n\n  passwordFields: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    paddingTop: `${rawTokens.spacing12}px`\n  },\n\n  actionsRow: {\n    display: 'flex' as const,\n    justifyContent: 'flex-end' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ImportCodesContent/index.tsx",
    "content": "import {\n  ListItem,\n  PageHeader,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { KeyboardArrowRightFilled } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { createStyles } from './styles'\n\ntype ImportCodesOption = {\n  title: string\n  description: string\n  accepts: string[]\n  testID?: string\n}\n\nconst importCodesOptions: ImportCodesOption[] = [\n  {\n    title: 'Google Authenticator',\n    description: 'PNG, JPG, JPEG',\n    accepts: ['.png', '.jpg', '.jpeg'],\n    testID: 'settings-import-codes-google-authenticator'\n  }\n]\n\nexport const ImportCodesContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  return (\n    <div style={styles.container}>\n      <PageHeader\n        as=\"h1\"\n        title={t('Import')}\n        subtitle={t(\n          'To import data from another authenticator, first access the authenticator, export your data, and then upload the exported file into the designated field'\n        )}\n      />\n\n      <div style={styles.listWrapper}>\n        <Text color={theme.colors.colorTextSecondary} variant=\"caption\">\n          {t('Select Import Source')}\n        </Text>\n\n        <div style={styles.listItems}>\n          {importCodesOptions.map((option, index) => (\n            <div\n              key={option.title}\n              style={\n                index < importCodesOptions.length - 1\n                  ? styles.listItemBorder\n                  : undefined\n              }\n            >\n              <ListItem\n                title={option.title}\n                subtitle={t('Required Format: {format}', {\n                  format: option.description\n                })}\n                testID={option.testID}\n                rightElement={\n                  <KeyboardArrowRightFilled\n                    width={16}\n                    height={16}\n                    color={theme.colors.colorTextPrimary}\n                  />\n                }\n                onClick={() => {\n                  // TODO: handle selection\n                }}\n              />\n            </div>\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ImportCodesContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`\n  },\n\n  listWrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing4}px`\n  },\n\n  listItems: {\n    border: `1px solid ${colors.colorSurfaceDisabled}`,\n    borderRadius: `${rawTokens.spacing8}px`\n  },\n\n  listItemBorder: {\n    borderBottom: `1px solid ${colors.colorSurfaceDisabled}`\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ImportItemsContent/index.test.tsx",
    "content": "/// <reference types=\"@testing-library/jest-dom\" />\n\nimport React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\nimport { ImportItemsContent } from './index'\n;(globalThis as { React?: typeof React }).React = React\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\njest.mock('../../../../context/LoadingContext', () => ({\n  useGlobalLoading: jest.fn()\n}))\n\nconst mockSetToast = jest.fn()\njest.mock('../../../../context/ToastContext', () => ({\n  useToast: () => ({\n    setToast: mockSetToast\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useCreateRecord: () => ({\n    createRecord: jest.fn()\n  }),\n  decryptExportData: jest.fn()\n}))\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  MAX_IMPORT_RECORDS: 1000\n}))\n\njest.mock('@tetherto/pearpass-lib-data-import', () => ({\n  decryptKeePassKdbx: jest.fn(),\n  parse1PasswordData: jest.fn(),\n  parseBitwardenData: jest.fn(),\n  parseKeePassData: jest.fn(),\n  parseLastPassData: jest.fn(),\n  parseNordPassData: jest.fn(),\n  parsePearPassData: jest.fn(),\n  parseProtonPassData: jest.fn()\n}))\n\njest.mock('../../../SettingsView/ImportTab/utils/readFileContent', () => ({\n  readFileContent: jest.fn()\n}))\n\njest.mock('../../../../utils/logger', () => ({\n  logger: {\n    error: jest.fn()\n  }\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    container: {},\n    listWrapper: {},\n    listItems: {},\n    listItemBorder: {},\n    backButton: {},\n    header: {},\n    passwordSection: {},\n    uploadArea: {},\n    footer: {}\n  })\n}))\n\nconst mockTheme = {\n  theme: {\n    colors: {\n      colorTextSecondary: '#888',\n      colorTextPrimary: '#fff'\n    }\n  }\n}\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => mockTheme,\n  PageHeader: ({ title }: { title: React.ReactNode }) => <h1>{title}</h1>,\n  Text: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,\n  Title: ({ children }: { children: React.ReactNode }) => <h2>{children}</h2>,\n  Link: (props: { children?: React.ReactNode; onClick?: () => void }) => (\n    <button type=\"button\" onClick={props.onClick}>\n      {props.children}\n    </button>\n  ),\n  ListItem: (props: {\n    testID?: string\n    title?: React.ReactNode\n    subtitle?: React.ReactNode\n    onClick?: () => void\n  }) => (\n    <button type=\"button\" data-testid={props.testID} onClick={props.onClick}>\n      <span>{props.title}</span>\n      <span>{props.subtitle}</span>\n    </button>\n  ),\n  UploadField: (props: { testID?: string }) => (\n    <div data-testid={props.testID}>upload-field</div>\n  ),\n  PasswordField: (props: {\n    testID?: string\n    value?: string\n    onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n  }) => (\n    <input\n      data-testid={props.testID}\n      value={props.value}\n      onChange={props.onChange}\n    />\n  ),\n  Button: (props: {\n    children?: React.ReactNode\n    onClick?: () => void\n    disabled?: boolean\n    'aria-label'?: string\n  }) => (\n    <button\n      type=\"button\"\n      aria-label={props['aria-label']}\n      disabled={props.disabled}\n      onClick={props.onClick}\n    >\n      {props.children}\n    </button>\n  )\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  ArrowBackOutined: () => null,\n  KeyboardArrowRightFilled: () => null\n}))\n\ndescribe('ImportItemsContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders import sources list', () => {\n    render(<ImportItemsContent />)\n\n    expect(\n      screen.getByRole('heading', { name: 'Import Items' })\n    ).toBeInTheDocument()\n    expect(screen.getByTestId('settings-import-1password')).toBeInTheDocument()\n    expect(screen.getByTestId('settings-import-bitwarden')).toBeInTheDocument()\n    expect(\n      screen.getByTestId('settings-import-unencrypted')\n    ).toBeInTheDocument()\n  })\n\n  it('opens upload step and can navigate back', () => {\n    render(<ImportItemsContent />)\n\n    fireEvent.click(screen.getByTestId('settings-import-bitwarden'))\n\n    expect(screen.getByText('Import from Bitwarden')).toBeInTheDocument()\n    expect(screen.getByTestId('import-upload-field')).toBeInTheDocument()\n    expect(screen.getByRole('button', { name: 'Import' })).toBeDisabled()\n\n    fireEvent.click(screen.getByRole('button', { name: 'back' }))\n\n    expect(\n      screen.getByRole('heading', { name: 'Import Items' })\n    ).toBeInTheDocument()\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ImportItemsContent/index.tsx",
    "content": "import { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { MAX_IMPORT_RECORDS } from '@tetherto/pearpass-lib-constants'\nimport {\n  decryptKeePassKdbx,\n  parse1PasswordData,\n  parseBitwardenData,\n  parseKeePassData,\n  parseLastPassData,\n  parseNordPassData,\n  parsePearPassData,\n  parseProtonPassData\n} from '@tetherto/pearpass-lib-data-import'\nimport type { UploadedFile } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  Button,\n  Link,\n  ListItem,\n  PageHeader,\n  PasswordField,\n  Text,\n  Title,\n  UploadField,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  ArrowBackOutined,\n  KeyboardArrowRightFilled\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport {\n  decryptExportData,\n  useCreateRecord\n} from '@tetherto/pearpass-lib-vault'\n\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { logger } from '../../../../utils/logger'\nimport { readFileContent } from '../../../SettingsView/ImportTab/utils/readFileContent'\nimport { createStyles } from './styles'\n\ntype ImportState = 'default' | 'upload' | 'inputPassword'\n\ntype ImportOption = {\n  title: string\n  type: ImportOptionType\n  description: string\n  testId?: string\n  accepts: string[]\n  supportLink?: string\n  learnMoreUrl?: string\n}\n\ntype FileInfo = {\n  fileContent: string | ArrayBuffer\n  fileType: string\n  filename: string\n  size: number\n  isEncrypted: boolean\n}\n\nenum ImportOptionType {\n  OnePassword = '1password',\n  Bitwarden = 'bitwarden',\n  KeePass = 'keepass',\n  KeePassKDBX = 'keepass-kdbx',\n  LastPass = 'lastpass',\n  NordPass = 'nordpass',\n  ProtonPass = 'protonpass',\n  Unencrypted = 'unencrypted',\n  Encrypted = 'encrypted'\n}\n\nconst isAllowedType = (fileType: string, accepts: string[]) =>\n  accepts.some((accept) => {\n    if (accept.startsWith('.')) {\n      return fileType === accept.slice(1)\n    }\n    return fileType === accept\n  })\n\nexport const ImportItemsContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { setToast } = useToast()\n  const { createRecord } = useCreateRecord()\n\n  const importOptions: ImportOption[] = [\n    {\n      title: '1Password',\n      type: ImportOptionType.OnePassword,\n      description: t(\n        'To import data from 1Password, open the app, go to File > Export, and export your data as a CSV file. Once the export is complete, upload the file here.'\n      ),\n      testId: 'settings-import-1password',\n      accepts: ['.csv'],\n      supportLink: 'https://support.1password.com/export'\n    },\n    {\n      title: 'Bitwarden',\n      type: ImportOptionType.Bitwarden,\n      description: t(\n        'To import data from Bitwarden, go to Tools > Export Vault in the web app, choose JSON or CSV format, and upload the exported file here.'\n      ),\n      testId: 'settings-import-bitwarden',\n      accepts: ['.json', '.csv'],\n      supportLink: 'https://bitwarden.com/help/export-your-data/'\n    },\n    {\n      title: 'KeePass',\n      type: ImportOptionType.KeePass,\n      description: t(\n        'To import data from KeePass, open your database and export it via File > Export. KDBX files require your database password. Upload the exported file here.'\n      ),\n      testId: 'settings-import-keepass',\n      accepts: ['.kdbx', '.csv', '.xml'],\n      supportLink: 'https://keepass.info/help/base/importexport.html'\n    },\n    {\n      title: 'KeePassXC',\n      type: ImportOptionType.KeePass,\n      description: t(\n        'To import data from KeePassXC, open your database and go to Database > Export to CSV or XML. Once done, upload the exported file here.'\n      ),\n      testId: 'settings-import-keepassxc',\n      accepts: ['.csv', '.xml'],\n      supportLink:\n        'https://keepassxc.org/docs/KeePassXC_UserGuide#_exporting_databases'\n    },\n    {\n      title: 'LastPass',\n      type: ImportOptionType.LastPass,\n      description: t(\n        'To import data from LastPass, go to Advanced Options > Export in your LastPass vault. Export as CSV and upload the file here.'\n      ),\n      testId: 'settings-import-lastpass',\n      accepts: ['.csv'],\n      supportLink:\n        'https://support.lastpass.com/s/document-item?language=en_US&bundleId=lastpass&topicId=LastPass/export-web-vault.html&_LANG=enus'\n    },\n    {\n      title: 'NordPass',\n      type: ImportOptionType.NordPass,\n      description: t(\n        'To import data from NordPass, open the app, go to Settings > Import & Export, and export your data as CSV. Upload the exported file here.'\n      ),\n      testId: 'settings-import-nordpass',\n      accepts: ['.csv'],\n      supportLink:\n        'https://support.nordpass.com/hc/en-us/articles/360007646477-How-to-export-passwords-from-NordPass'\n    },\n    {\n      title: 'Proton Pass',\n      type: ImportOptionType.ProtonPass,\n      description: t(\n        'To import data from Proton Pass, open the app, go to Settings, navigate to the Export tab, and choose your preferred export format. Once the export is complete, upload the file here.'\n      ),\n      testId: 'settings-import-protonpass',\n      accepts: ['.csv', '.json'],\n      supportLink: 'https://proton.me/support/pass-export'\n    },\n    {\n      title: 'PearPass Encrypted File',\n      type: ImportOptionType.Encrypted,\n      description: t(\n        'Upload a PearPass-encrypted JSON export file. You will need the password used to encrypt the file.'\n      ),\n      accepts: ['.json'],\n      supportLink:\n        'https://docs.pass.pears.com/how-to-guides/how-to-export-your-vault/'\n    },\n    {\n      title: 'PearPass Unencrypted File',\n      type: ImportOptionType.Unencrypted,\n      description: t(\n        'Upload an unencrypted PearPass export file in JSON or CSV format.'\n      ),\n      testId: 'settings-import-unencrypted',\n      accepts: ['.json', '.csv'],\n      supportLink:\n        'https://docs.pass.pears.com/how-to-guides/how-to-export-your-vault/'\n    }\n  ]\n\n  const [state, setState] = useState<ImportState>('default')\n  const [selectedOption, setSelectedOption] = useState<ImportOption | null>(\n    null\n  )\n  const [selectedFileInfo, setSelectedFileInfo] = useState<FileInfo | null>(\n    null\n  )\n  const [files, setFiles] = useState<UploadedFile[]>([])\n  const [isImporting, setIsImporting] = useState(false)\n\n  useGlobalLoading({ isLoading: isImporting })\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors, setValues, values } = useForm({\n    initialValues: { password: '' },\n    validate: (vals: { password: string }) => schema.validate(vals)\n  })\n\n  const onError = (error: Error) => {\n    setToast({ message: error.message })\n  }\n\n  const importRecords = async (result: unknown[]) => {\n    if (result.length === 0) {\n      setToast({ message: t('No records found to import!') })\n      return\n    }\n\n    if (result.length > MAX_IMPORT_RECORDS) {\n      setToast({\n        message: t(`Too many records. Maximum is ${MAX_IMPORT_RECORDS}.`)\n      })\n      return\n    }\n\n    const BATCH_SIZE = 100\n    const totalRecords = result.length\n\n    for (let i = 0; i < totalRecords; i += BATCH_SIZE) {\n      const batch = result.slice(i, i + BATCH_SIZE)\n      await Promise.all(batch.map((record) => createRecord(record, onError)))\n    }\n\n    setToast({ message: t('Data imported successfully') })\n  }\n\n  const onImport = async ({\n    type,\n    fileContent,\n    fileType,\n    password,\n    isEncrypted\n  }: {\n    type: ImportOptionType\n    fileContent: string | ArrayBuffer\n    fileType: string\n    password?: string | null\n    isEncrypted?: boolean\n  }) => {\n    let result: unknown[] = []\n    let dataToProcess: unknown = fileContent\n    let resolvedType = type\n\n    try {\n      if (\n        (resolvedType === ImportOptionType.KeePass ||\n          resolvedType === ImportOptionType.KeePassKDBX) &&\n        fileType === 'kdbx'\n      ) {\n        if (!password) {\n          throw new Error('Password is required for encrypted files')\n        }\n        dataToProcess = await decryptKeePassKdbx(fileContent, password)\n        resolvedType = ImportOptionType.KeePassKDBX\n      }\n\n      if (resolvedType === ImportOptionType.Encrypted && isEncrypted) {\n        if (!password) {\n          throw new Error('Password is required for encrypted files')\n        }\n        const encryptedData = JSON.parse(fileContent as string)\n        dataToProcess = await decryptExportData(encryptedData, password)\n      }\n    } catch {\n      throw new Error(\n        'Failed to decrypt file. Please check your password and try again.'\n      )\n    }\n\n    try {\n      switch (resolvedType) {\n        case ImportOptionType.OnePassword:\n          result = await parse1PasswordData(dataToProcess, fileType)\n          break\n        case ImportOptionType.Bitwarden:\n          result = await parseBitwardenData(dataToProcess, fileType)\n          break\n        case ImportOptionType.LastPass:\n          result = await parseLastPassData(dataToProcess, fileType)\n          break\n        case ImportOptionType.KeePass:\n          result = await parseKeePassData(dataToProcess, fileType)\n          break\n        case ImportOptionType.KeePassKDBX:\n          result = await parseKeePassData(dataToProcess, 'kdbx')\n          break\n        case ImportOptionType.NordPass:\n          result = await parseNordPassData(dataToProcess, fileType)\n          break\n        case ImportOptionType.ProtonPass:\n          result = await parseProtonPassData(dataToProcess, fileType)\n          break\n        case ImportOptionType.Unencrypted:\n          result = await parsePearPassData(dataToProcess, fileType)\n          break\n        case ImportOptionType.Encrypted:\n          result = await parsePearPassData(dataToProcess, 'json')\n          break\n        default:\n          throw new Error(\n            'Unsupported template type. Please select a valid import option.'\n          )\n      }\n\n      await importRecords(result)\n    } catch (error) {\n      throw new Error(\n        (error instanceof Error ? error.message : null) ||\n          'Failed to parse file. Please ensure it is valid.'\n      )\n    }\n  }\n\n  const resetToDefault = () => {\n    setState('default')\n    setSelectedOption(null)\n    setSelectedFileInfo(null)\n    setFiles([])\n    setValues({ password: '' })\n  }\n\n  const handleBack = () => {\n    if (state === 'inputPassword') {\n      setState('upload')\n      setValues({ password: '' })\n    } else if (state === 'upload') {\n      resetToDefault()\n    }\n  }\n\n  const handleFilesChange = async (newFiles: UploadedFile[]) => {\n    setFiles(newFiles)\n\n    if (newFiles.length === 0) {\n      setSelectedFileInfo(null)\n      return\n    }\n\n    if (!selectedOption) return\n\n    const uploadedFile = newFiles[0]\n    const file = uploadedFile.file\n    if (!file) return\n\n    const filename = file.name\n    const fileType = filename.split('.').pop() ?? ''\n\n    if (!isAllowedType(fileType, selectedOption.accepts)) {\n      setToast({ message: t('Invalid file type') })\n      setFiles([])\n      setSelectedFileInfo(null)\n      return\n    }\n\n    try {\n      if (\n        selectedOption.type === ImportOptionType.KeePass &&\n        fileType === 'kdbx'\n      ) {\n        const fileContent = await readFileContent(file, { as: 'buffer' })\n        setSelectedFileInfo({\n          fileContent,\n          fileType,\n          filename,\n          size: file.size,\n          isEncrypted: true\n        })\n        return\n      }\n\n      if (selectedOption.type === ImportOptionType.Encrypted) {\n        const fileContent = await readFileContent(file)\n        setSelectedFileInfo({\n          fileContent,\n          fileType,\n          filename,\n          size: file.size,\n          isEncrypted: true\n        })\n        return\n      }\n\n      const fileContent = await readFileContent(file)\n      setSelectedFileInfo({\n        fileContent,\n        fileType,\n        filename,\n        size: file.size,\n        isEncrypted: false\n      })\n    } catch (error) {\n      setToast({ message: t('Failed to read file') })\n      logger.error('ImportItemsContent', 'Error reading file:', error)\n      setFiles([])\n      setSelectedFileInfo(null)\n    }\n  }\n\n  const handleImport = async (formValues?: { password: string }) => {\n    if (!selectedOption || !selectedFileInfo) return\n\n    setIsImporting(true)\n    try {\n      await onImport({\n        type: selectedOption.type,\n        fileContent: selectedFileInfo.fileContent,\n        fileType: selectedFileInfo.fileType,\n        password: formValues?.password ?? null,\n        isEncrypted: selectedFileInfo.isEncrypted\n      })\n      resetToDefault()\n    } catch (error) {\n      if (state === 'inputPassword') {\n        setErrors({\n          password:\n            error instanceof Error\n              ? error.message\n              : t(\n                  \"The password entered doesn't match the one used to encrypt your file.\"\n                )\n        })\n      } else {\n        setToast({\n          message:\n            error instanceof Error\n              ? error.message\n              : t('Import failed. Please try again.')\n        })\n      }\n    } finally {\n      setIsImporting(false)\n    }\n  }\n\n  const handleContinue = () => {\n    if (!selectedFileInfo) return\n    if (selectedFileInfo.isEncrypted) {\n      setState('inputPassword')\n    } else {\n      void handleImport()\n    }\n  }\n\n  const { onChange: onChangePassword, ...passwordProps } = register('password')\n\n  return (\n    <div style={styles.container}>\n      {state === 'default' && (\n        <>\n          <PageHeader\n            as=\"h1\"\n            title={t('Import Items')}\n            subtitle={t(\n              'Easily import your passwords and data from other password managers. Select your source, upload the exported file, and follow the prompts to get your data into PearPass.'\n            )}\n          />\n\n          <div style={styles.listWrapper}>\n            <Text color={theme.colors.colorTextSecondary} variant=\"caption\">\n              {t('Select Import Source')}\n            </Text>\n\n            <div style={styles.listItems}>\n              {importOptions.map((option, index) => (\n                <div\n                  key={option.title}\n                  style={\n                    index < importOptions.length - 1\n                      ? styles.listItemBorder\n                      : undefined\n                  }\n                >\n                  <ListItem\n                    key={option.title}\n                    title={option.title}\n                    subtitle={t('Required Format: {format}', {\n                      format: option.accepts.join(', ').toUpperCase()\n                    })}\n                    testID={option.testId}\n                    rightElement={\n                      <KeyboardArrowRightFilled\n                        width={16}\n                        height={16}\n                        color={theme.colors.colorTextPrimary}\n                      />\n                    }\n                    onClick={() => {\n                      setSelectedOption(option)\n                      setSelectedFileInfo(null)\n                      setFiles([])\n                      setState('upload')\n                    }}\n                  />\n                </div>\n              ))}\n            </div>\n          </div>\n        </>\n      )}\n\n      {(state === 'upload' || state === 'inputPassword') && selectedOption && (\n        <>\n          <div style={styles.backButton}>\n            <Button\n              size=\"small\"\n              variant=\"tertiary\"\n              iconBefore={\n                <ArrowBackOutined color={theme.colors.colorTextPrimary} />\n              }\n              onClick={handleBack}\n              aria-label={t('back')}\n            />\n            <Text>{t('Back')}</Text>\n          </div>\n\n          <div style={styles.header}>\n            <Title as=\"h2\">\n              {t('Import from')} {selectedOption.title}\n            </Title>\n            <Text color={theme.colors.colorTextSecondary} as=\"p\">\n              {selectedOption.description}\n              {selectedOption.supportLink && (\n                <>\n                  {' '}\n                  {t('Additionally,')}{' '}\n                  <Link\n                    onClick={() =>\n                      window.electronAPI?.openExternal(\n                        selectedOption.supportLink!\n                      )\n                    }\n                  >\n                    {t(\n                      `Learn more about exporting data from ${selectedOption.title}`\n                    )}\n                  </Link>\n                  {'.'}\n                </>\n              )}\n            </Text>\n          </div>\n\n          {state === 'inputPassword' ? (\n            <div style={styles.passwordSection}>\n              <PasswordField\n                label={t('File Password')}\n                placeholder={t('Enter File Password')}\n                {...passwordProps}\n                onChange={(e) => onChangePassword(e.target.value)}\n                testID=\"import-file-password-field\"\n              />\n              <Text color={theme.colors.colorTextSecondary} variant=\"caption\">\n                {t(\n                  'The uploaded file is encrypted. Enter the password to continue.'\n                )}\n              </Text>\n            </div>\n          ) : (\n            <div style={styles.uploadArea}>\n              <UploadField\n                acceptedFormats={selectedOption.accepts}\n                files={files}\n                onFilesChange={handleFilesChange}\n                uploadLinkText={t('Upload file')}\n                uploadSuffixText={t('or drag and drop it here')}\n                formatsPrefix={t('Required Format:')}\n                testID=\"import-upload-field\"\n              />\n            </div>\n          )}\n\n          <div style={styles.footer}>\n            {state === 'inputPassword' ? (\n              <Button\n                variant=\"primary\"\n                size=\"small\"\n                disabled={!values.password || isImporting}\n                isLoading={isImporting}\n                onClick={handleSubmit(handleImport)}\n              >\n                {t('Continue')}\n              </Button>\n            ) : (\n              <Button\n                variant=\"primary\"\n                size=\"small\"\n                disabled={!selectedFileInfo || isImporting}\n                isLoading={isImporting}\n                onClick={handleContinue}\n              >\n                {t('Import')}\n              </Button>\n            )}\n          </div>\n        </>\n      )}\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ImportItemsContent/styles.ts",
    "content": "import { rawTokens, ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`\n  },\n\n  header: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing6}px`\n  },\n\n  listWrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing4}px`\n  },\n\n  listItems: {\n    border: `1px solid ${colors.colorSurfaceDisabled}`,\n    borderRadius: `${rawTokens.spacing8}px`\n  },\n\n  listItemBorder: {\n    borderBottom: `1px solid ${colors.colorSurfaceDisabled}`\n  },\n\n  uploadArea: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n\n  passwordSection: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n\n  footer: {\n    display: 'flex' as const,\n    justifyContent: 'flex-end' as const\n  },\n\n  backButton: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`,\n    background: 'none',\n    border: 'none',\n    padding: 0,\n    cursor: 'pointer' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/LanguageContent/index.tsx",
    "content": "import React, { useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport {\n  Button,\n  Dropdown,\n  NavbarListItem,\n  PageHeader,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { ExpandMore } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { useLanguageOptions } from '../../../../hooks/useLanguageOptions'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { createStyles } from './styles'\n\ntype LanguageOption = {\n  label: string\n  value: string\n  testId: string\n}\n\nconst TEST_IDS = {\n  root: 'settings-language',\n  field: 'settings-language-field',\n  dropdown: 'settings-language-dropdown',\n  dropdownTrigger: 'settings-language-dropdown-trigger'\n} as const\n\nexport const LanguageContent = (): React.ReactElement => {\n  const { t } = useTranslation()\n  const { i18n } = useLingui()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  const [isOpen, setIsOpen] = useState(false)\n\n  const { languageOptions } = useLanguageOptions() as {\n    languageOptions: LanguageOption[]\n  }\n  const selectedLanguage = languageOptions.find(\n    (lang) => lang.value === i18n.locale\n  )\n\n  const handleLanguageSelect = (value: string) => {\n    i18n.activate(value)\n    setIsOpen(false)\n  }\n\n  return (\n    <div data-testid={TEST_IDS.root} style={styles.root}>\n      <PageHeader\n        as=\"h1\"\n        title={t('Language')}\n        subtitle={t('Choose the language of the app.')}\n      />\n\n      <div style={styles.fieldContainer} data-testid={TEST_IDS.field}>\n        <div style={styles.fieldDetails}>\n          <Text variant=\"bodyEmphasized\" color={theme.colors.colorTextPrimary}>\n            {t('App Language')}\n          </Text>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Select the language used throughout PearPass.')}\n          </Text>\n        </div>\n\n        <Dropdown\n          open={isOpen}\n          onOpenChange={setIsOpen}\n          testID={TEST_IDS.dropdown}\n          trigger={\n            <Button\n              variant=\"secondary\"\n              size=\"small\"\n              iconAfter={<ExpandMore />}\n              data-testid={TEST_IDS.dropdownTrigger}\n            >\n              {selectedLanguage?.label ?? t('Select')}\n            </Button>\n          }\n        >\n          {languageOptions.map((option) => (\n            <NavbarListItem\n              key={option.value}\n              label={option.label}\n              selected={option.value === i18n.locale}\n              onClick={() => handleLanguageSelect(option.value)}\n              testID={option.testId}\n            />\n          ))}\n        </Dropdown>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/LanguageContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'flex-start' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  fieldContainer: {\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'space-between' as const,\n    alignSelf: 'stretch' as const,\n    gap: `${rawTokens.spacing12}px`,\n    padding: `15px ${rawTokens.spacing12}px`,\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    borderRadius: `${rawTokens.radius8}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  },\n\n  fieldDetails: {\n    display: 'flex' as const,\n    flex: '1 0 0' as const,\n    flexDirection: 'column' as const,\n    justifyContent: 'center' as const,\n    gap: `${rawTokens.spacing4}px`,\n    minWidth: 0\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/MasterPasswordContent/index.test.tsx",
    "content": "/// <reference types=\"@testing-library/jest-dom\" />\n\nimport React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen, waitFor } from '@testing-library/react'\n\nimport { MasterPasswordContent } from './index'\n;(globalThis as { React?: typeof React }).React = React\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\njest.mock('../../../../context/LoadingContext', () => ({\n  useGlobalLoading: jest.fn()\n}))\n\nconst mockUpdateMasterPassword = jest.fn(() => Promise.resolve())\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useUserData: () => ({\n    updateMasterPassword: mockUpdateMasterPassword\n  })\n}))\n\nconst mockStringToBuffer = jest.fn((value: string) => `buf:${value}`)\nconst mockClearBuffer = jest.fn()\n\njest.mock('@tetherto/pearpass-lib-vault/src/utils/buffer', () => ({\n  stringToBuffer: (value: string) => mockStringToBuffer(value),\n  clearBuffer: (value: unknown) => mockClearBuffer(value)\n}))\n\njest.mock('@tetherto/pearpass-utils-password-check', () => ({\n  checkPasswordStrength: (value: string) =>\n    value.length > 0 ? { strengthType: 'success' } : { strengthType: 'error' },\n  validatePasswordChange: () => ({ success: true })\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    container: {},\n    fieldsWrapper: {},\n    footer: {}\n  })\n}))\n\nconst mockTheme = {\n  theme: {\n    colors: {\n      colorTextSecondary: '#888',\n      colorTextPrimary: '#fff'\n    }\n  }\n}\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => mockTheme,\n  PageHeader: ({ title }: { title: React.ReactNode }) => <h1>{title}</h1>,\n  Form: (props: {\n    children?: React.ReactNode\n    onSubmit?: (e?: unknown) => void\n  }) => (\n    <form\n      onSubmit={(e) => {\n        e.preventDefault()\n        props.onSubmit?.(e)\n      }}\n    >\n      {props.children}\n    </form>\n  ),\n  PasswordField: (props: {\n    testID?: string\n    value?: string\n    onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n    label?: string\n  }) => (\n    <label>\n      <span>{props.label}</span>\n      <input\n        data-testid={props.testID}\n        value={props.value}\n        onChange={props.onChange}\n      />\n    </label>\n  ),\n  AlertMessage: ({ description }: { description: React.ReactNode }) => (\n    <div>{description}</div>\n  ),\n  Button: (props: {\n    children?: React.ReactNode\n    onClick?: () => void\n    disabled?: boolean\n    type?: 'button' | 'submit'\n  }) => (\n    <button\n      type={props.type ?? 'button'}\n      disabled={props.disabled}\n      onClick={props.onClick}\n    >\n      {props.children}\n    </button>\n  ),\n  Text: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,\n  Title: ({ children }: { children: React.ReactNode }) => <h2>{children}</h2>\n}))\n\ndescribe('MasterPasswordContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders heading and disabled submit state by default', () => {\n    render(<MasterPasswordContent />)\n\n    expect(\n      screen.getByRole('heading', { name: 'Master Password' })\n    ).toBeInTheDocument()\n    expect(\n      screen.getByRole('button', { name: 'Change Password' })\n    ).toBeDisabled()\n  })\n\n  it('submits a valid password change and clears buffers', async () => {\n    render(<MasterPasswordContent />)\n\n    fireEvent.change(screen.getByTestId('current-password-field'), {\n      target: { value: 'old-pass' }\n    })\n    fireEvent.change(screen.getByTestId('new-password-field'), {\n      target: { value: 'new-pass-123' }\n    })\n    fireEvent.change(screen.getByTestId('repeat-password-field'), {\n      target: { value: 'new-pass-123' }\n    })\n\n    const submitButton = screen.getByRole('button', { name: 'Change Password' })\n    expect(submitButton).not.toBeDisabled()\n\n    fireEvent.click(submitButton)\n\n    await waitFor(() => {\n      expect(mockUpdateMasterPassword).toHaveBeenCalledTimes(1)\n    })\n\n    expect(mockUpdateMasterPassword).toHaveBeenCalledWith({\n      newPassword: 'buf:new-pass-123',\n      currentPassword: 'buf:old-pass'\n    })\n    expect(mockClearBuffer).toHaveBeenCalledWith('buf:new-pass-123')\n    expect(mockClearBuffer).toHaveBeenCalledWith('buf:old-pass')\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/MasterPasswordContent/index.tsx",
    "content": "import { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\nimport {\n  clearBuffer,\n  stringToBuffer\n} from '@tetherto/pearpass-lib-vault/src/utils/buffer'\n// @ts-ignore - JS module without type declarations\nimport type { PasswordIndicatorVariant } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  AlertMessage,\n  Button,\n  Form,\n  PageHeader,\n  PasswordField\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  checkPasswordStrength,\n  validatePasswordChange\n} from '@tetherto/pearpass-utils-password-check'\n\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { logger } from '../../../../utils/logger'\nimport { createStyles } from './styles'\n\nconst STRENGTH_MAP: Record<string, PasswordIndicatorVariant> = {\n  error: 'vulnerable',\n  warning: 'decent',\n  success: 'strong'\n}\n\nexport const MasterPasswordContent = () => {\n  const { t } = useTranslation()\n  const [isLoading, setIsLoading] = useState(false)\n  const styles = createStyles()\n\n  useGlobalLoading({ isLoading })\n\n  const { updateMasterPassword } = useUserData()\n\n  const schema = Validator.object({\n    currentPassword: Validator.string().required(t('Password is required')),\n    newPassword: Validator.string().required(t('Password is required')),\n    repeatPassword: Validator.string().required(t('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors, setValues, values } = useForm({\n    initialValues: {\n      currentPassword: '',\n      newPassword: '',\n      repeatPassword: ''\n    },\n    validate: (formValues: {\n      currentPassword: string\n      newPassword: string\n      repeatPassword: string\n    }) => schema.validate(formValues)\n  })\n\n  const newPasswordStrength = values.newPassword\n    ? checkPasswordStrength(values.newPassword)\n    : null\n\n  const isNewPasswordStrong = newPasswordStrength?.strengthType === 'success'\n  const passwordsMatch =\n    isNewPasswordStrong &&\n    values.newPassword.length > 0 &&\n    values.newPassword === values.repeatPassword\n  const isFormValid =\n    values.currentPassword.length > 0 && isNewPasswordStrong && passwordsMatch\n\n  const newPasswordIndicator: PasswordIndicatorVariant | undefined =\n    newPasswordStrength\n      ? STRENGTH_MAP[newPasswordStrength.strengthType]\n      : undefined\n\n  const resetValues = () => {\n    setValues({ currentPassword: '', newPassword: '', repeatPassword: '' })\n  }\n\n  const onSubmit = async (formValues: {\n    currentPassword: string\n    newPassword: string\n    repeatPassword: string\n  }) => {\n    if (isLoading || !isFormValid) return\n\n    const result = validatePasswordChange({\n      currentPassword: formValues.currentPassword,\n      newPassword: formValues.newPassword,\n      repeatPassword: formValues.repeatPassword,\n      messages: {\n        newPasswordMustDiffer: t(\n          'New password must be different from the current password'\n        ),\n        passwordsDontMatch: t('Passwords do not match')\n      }\n    })\n\n    if (!result.success) {\n      setErrors({ [result.field]: result.error })\n      resetValues()\n      return\n    }\n\n    const newPasswordBuffer = stringToBuffer(formValues.newPassword)\n    const currentPasswordBuffer = stringToBuffer(formValues.currentPassword)\n    try {\n      setIsLoading(true)\n      await updateMasterPassword({\n        newPassword: newPasswordBuffer,\n        currentPassword: currentPasswordBuffer\n      })\n      setIsLoading(false)\n      resetValues()\n    } catch (error) {\n      setIsLoading(false)\n      resetValues()\n      setErrors({ currentPassword: t('Invalid password') })\n      logger.error(\n        'MasterPasswordContent',\n        'Error updating master password:',\n        error\n      )\n    } finally {\n      clearBuffer(newPasswordBuffer)\n      clearBuffer(currentPasswordBuffer)\n    }\n  }\n\n  const { onChange: onChangeCurrentPassword, ...currentPasswordProps } =\n    register('currentPassword')\n  const { onChange: onChangeNewPassword, ...newPasswordProps } =\n    register('newPassword')\n  const { onChange: onChangeRepeatPassword, ...repeatPasswordProps } =\n    register('repeatPassword')\n\n  return (\n    <div style={styles.container}>\n      <PageHeader\n        title={t('Master Password')}\n        as=\"h1\"\n        subtitle={t('Manage the password that protects your app.')}\n      />\n\n      <Form onSubmit={handleSubmit(onSubmit)}>\n        <div style={styles.fieldsWrapper}>\n          <PasswordField\n            label={t('Current Password')}\n            placeholder={t('Enter Current Password')}\n            {...currentPasswordProps}\n            onChange={(e) => onChangeCurrentPassword(e.target.value)}\n            testID=\"current-password-field\"\n          />\n\n          <PasswordField\n            label={t('New Password')}\n            placeholder={t('Enter New Password')}\n            {...newPasswordProps}\n            onChange={(e) => onChangeNewPassword(e.target.value)}\n            passwordIndicator={newPasswordIndicator}\n            testID=\"new-password-field\"\n          />\n\n          <PasswordField\n            label={t('Repeat New Password')}\n            placeholder={t('Repeat New Password')}\n            {...repeatPasswordProps}\n            onChange={(e) => onChangeRepeatPassword(e.target.value)}\n            passwordIndicator={passwordsMatch ? 'match' : undefined}\n            testID=\"repeat-password-field\"\n          />\n        </div>\n        <AlertMessage\n          variant=\"warning\"\n          size=\"small\"\n          title=\"\"\n          description={t(\n            \"Don't forget your Master password. It's the only way to access your vault. We can't help recover it. Back it up securely.\"\n          )}\n        />\n\n        <div style={styles.footer}>\n          <Button\n            type=\"submit\"\n            variant=\"primary\"\n            size=\"small\"\n            disabled={!isFormValid}\n            isLoading={isLoading}\n            onClick={handleSubmit(onSubmit)}\n          >\n            {t('Change Password')}\n          </Button>\n        </div>\n      </Form>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/MasterPasswordContent/styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  container: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`\n  },\n\n  header: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing6}px`\n  },\n\n  fieldsWrapper: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n\n  footer: {\n    display: 'flex' as const,\n    justifyContent: 'flex-end' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ReportAProblemContent/index.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, screen, fireEvent, waitFor, act } from '@testing-library/react'\n\nimport { ReportAProblemContent } from './index'\n\nconst mockSetToast = jest.fn()\nconst mockUseGlobalLoading = jest.fn()\nconst mockSendSlack = jest.fn()\nconst mockSendGoogle = jest.fn()\n\nlet mockIsOnlineValue = true\n\njest.mock('../../../../context/LoadingContext', () => ({\n  useGlobalLoading: (args: { isLoading: boolean }) => mockUseGlobalLoading(args)\n}))\n\njest.mock('../../../../context/ToastContext', () => ({\n  useToast: () => ({ setToast: mockSetToast })\n}))\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\njest.mock('../../../../utils/isOnline', () => ({\n  isOnline: () => mockIsOnlineValue\n}))\n\njest.mock('../../../../utils/logger', () => ({\n  logger: { error: jest.fn() }\n}))\n\njest.mock('@tetherto/pear-apps-lib-feedback', () => ({\n  sendSlackFeedback: (config: unknown) => mockSendSlack(config),\n  sendGoogleFormFeedback: (config: unknown) => mockSendGoogle(config)\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    root: {},\n    actions: {}\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  Send: () => null\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  Form: ({\n    children,\n    testID,\n    'aria-label': ariaLabel\n  }: {\n    children: React.ReactNode\n    testID?: string\n    'aria-label'?: string\n  }) => (\n    <div data-testid={testID} aria-label={ariaLabel}>\n      {children}\n    </div>\n  ),\n  PageHeader: ({ title, subtitle }: { title: string; subtitle?: string }) => (\n    <div data-testid=\"settings-report-page-header\">\n      <h1>{title}</h1>\n      {subtitle ? <p>{subtitle}</p> : null}\n    </div>\n  ),\n  TextArea: ({\n    testID,\n    label,\n    placeholder,\n    value,\n    onChange,\n    disabled,\n    rows: _r\n  }: {\n    testID: string\n    label?: string\n    placeholder?: string\n    value: string\n    onChange?: (v: string) => void\n    disabled?: boolean\n    rows?: number\n  }) => (\n    <div>\n      {label ? <span>{label}</span> : null}\n      <textarea\n        data-testid={testID}\n        placeholder={placeholder}\n        value={value}\n        disabled={disabled}\n        onChange={(e) => onChange?.(e.target.value)}\n      />\n    </div>\n  ),\n  Button: ({\n    children,\n    onClick,\n    'data-testid': dataTestid,\n    disabled,\n    iconBefore: _i\n  }: {\n    children: React.ReactNode\n    onClick?: () => void\n    'data-testid'?: string\n    disabled?: boolean\n    iconBefore?: React.ReactNode\n  }) => (\n    <button\n      type=\"button\"\n      data-testid={dataTestid}\n      disabled={disabled}\n      onClick={onClick}\n    >\n      {children}\n    </button>\n  )\n}))\n\nconst TEST_IDS = {\n  root: 'settings-card-report',\n  textarea: 'settings-report-textarea',\n  send: 'settings-report-send-button'\n} as const\n\ndescribe('ReportAProblemContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockIsOnlineValue = true\n    mockSendSlack.mockImplementation(() => Promise.resolve(true))\n    mockSendGoogle.mockImplementation(() => Promise.resolve(true))\n  })\n\n  it('renders header, form, and empty message; send is disabled', () => {\n    render(<ReportAProblemContent currentVersion=\"1.0.0\" />)\n\n    expect(screen.getByTestId(TEST_IDS.root)).toBeInTheDocument()\n    expect(\n      screen.getByTestId('settings-report-page-header').textContent\n    ).toContain('Report a problem')\n    expect(screen.getByTestId('settings-report-problem-form')).toBeInTheDocument()\n    expect(screen.getByTestId(TEST_IDS.textarea)).toHaveValue('')\n    expect(screen.getByTestId(TEST_IDS.send)).toBeDisabled()\n  })\n\n  it('enables send when the message is non-empty', () => {\n    render(<ReportAProblemContent currentVersion=\"1.0.0\" />)\n\n    const ta = screen.getByTestId(TEST_IDS.textarea)\n    fireEvent.change(ta, { target: { value: '  Bug text  ' } })\n\n    expect(screen.getByTestId(TEST_IDS.send)).not.toBeDisabled()\n  })\n\n  it('submits feedback when online, then shows success and clears the field', async () => {\n    render(<ReportAProblemContent currentVersion=\"1.0.0\" />)\n\n    fireEvent.change(screen.getByTestId(TEST_IDS.textarea), {\n      target: { value: 'The app froze' }\n    })\n\n    await act(async () => {\n      fireEvent.click(screen.getByTestId(TEST_IDS.send))\n    })\n\n    await waitFor(() => {\n      expect(mockSendSlack).toHaveBeenCalledTimes(1)\n      expect(mockSendGoogle).toHaveBeenCalledTimes(1)\n    })\n\n    const slackArg = mockSendSlack.mock.calls[0][0] as { message: string; topic: string; app: string; appVersion?: string }\n    expect(slackArg.message).toBe('The app froze')\n    expect(slackArg.topic).toBe('BUG_REPORT')\n    expect(slackArg.app).toBe('DESKTOP')\n    expect(slackArg.appVersion).toBe('1.0.0')\n\n    await waitFor(() => {\n      expect(mockSetToast).toHaveBeenCalledWith({ message: 'Feedback sent' })\n    })\n    expect(screen.getByTestId(TEST_IDS.textarea)).toHaveValue('')\n  })\n\n  it('shows offline toast and does not send when offline', async () => {\n    mockIsOnlineValue = false\n\n    render(<ReportAProblemContent currentVersion=\"1.0.0\" />)\n\n    fireEvent.change(screen.getByTestId(TEST_IDS.textarea), {\n      target: { value: 'Something' }\n    })\n\n    await act(async () => {\n      fireEvent.click(screen.getByTestId(TEST_IDS.send))\n    })\n\n    expect(mockSendSlack).not.toHaveBeenCalled()\n    expect(mockSendGoogle).not.toHaveBeenCalled()\n    expect(mockSetToast).toHaveBeenCalledWith({\n      message: 'You are offline, please check your internet connection'\n    })\n  })\n\n  it('uses no appVersion in payload when currentVersion is empty', async () => {\n    render(<ReportAProblemContent currentVersion=\"\" />)\n\n    fireEvent.change(screen.getByTestId(TEST_IDS.textarea), {\n      target: { value: 'x' }\n    })\n\n    await act(async () => {\n      fireEvent.click(screen.getByTestId(TEST_IDS.send))\n    })\n\n    await waitFor(() => {\n      expect(mockSendSlack).toHaveBeenCalled()\n    })\n    const slackArg = mockSendSlack.mock.calls[0][0] as { appVersion?: string }\n    expect(slackArg.appVersion).toBeUndefined()\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ReportAProblemContent/index.tsx",
    "content": "import React, { useCallback, useState } from 'react'\n\nimport {\n  sendGoogleFormFeedback,\n  sendSlackFeedback\n} from '@tetherto/pear-apps-lib-feedback'\nimport {\n  Button,\n  Form,\n  TextArea,\n  PageHeader\n} from '@tetherto/pearpass-lib-ui-kit'\nimport { Send } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport {\n  GOOGLE_FORM_KEY,\n  GOOGLE_FORM_MAPPING,\n  SLACK_WEBHOOK_URL_PATH\n} from '../../../../constants/feedback'\nimport { useGlobalLoading } from '../../../../context/LoadingContext'\nimport { useToast } from '../../../../context/ToastContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { isOnline } from '../../../../utils/isOnline'\nimport { logger } from '../../../../utils/logger'\nimport { createStyles } from './styles'\n\nconst OFFLINE_TIMEOUT_MS = 10000\nconst OFFLINE_TIMEOUT_MESSAGE =\n  'You are offline, please check your internet connection'\nconst TIMED_OUT = Symbol('feedback_timed_out')\n\nconst TEST_IDS = {\n  root: 'settings-card-report',\n  textarea: 'settings-report-textarea',\n  send: 'settings-report-send-button'\n} as const\n\ntype ReportAProblemContentProps = {\n  currentVersion?: string\n}\n\nexport const ReportAProblemContent = ({\n  currentVersion = ''\n}: ReportAProblemContentProps) => {\n  const { t } = useTranslation()\n  const { setToast } = useToast()\n  const styles = createStyles()\n\n  const [message, setMessage] = useState('')\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const handleSend = useCallback(async () => {\n    if (!message?.trim() || isLoading) {\n      return\n    }\n    setIsLoading(true)\n    try {\n      if (!isOnline()) {\n        setToast({\n          message: t(OFFLINE_TIMEOUT_MESSAGE)\n        })\n        return\n      }\n\n      const nav = navigator as Navigator & {\n        userAgentData?: { platform?: string }\n      }\n\n      const payload = {\n        message: message.trim(),\n        topic: 'BUG_REPORT' as const,\n        app: 'DESKTOP' as const,\n        operatingSystem: nav.userAgentData?.platform,\n        deviceModel: nav.platform,\n        appVersion: currentVersion || undefined\n      }\n\n      const sendFeedback = async (): Promise<boolean> => {\n        const [slackOk, googleOk] = await Promise.all([\n          sendSlackFeedback({\n            webhookUrPath: SLACK_WEBHOOK_URL_PATH,\n            ...payload\n          }),\n          sendGoogleFormFeedback({\n            formKey: GOOGLE_FORM_KEY,\n            mapping: GOOGLE_FORM_MAPPING,\n            ...payload\n          })\n        ])\n        return slackOk !== false && googleOk !== false\n      }\n\n      const result = await Promise.race<boolean | typeof TIMED_OUT>([\n        sendFeedback(),\n        new Promise<typeof TIMED_OUT>((resolve) => {\n          setTimeout(() => resolve(TIMED_OUT), OFFLINE_TIMEOUT_MS)\n        })\n      ])\n\n      if (result === TIMED_OUT) {\n        setToast({\n          message: t(OFFLINE_TIMEOUT_MESSAGE)\n        })\n        return\n      }\n\n      if (!result) {\n        setToast({\n          message: t('Something went wrong, please try again')\n        })\n        return\n      }\n\n      setMessage('')\n\n      setToast({\n        message: t('Feedback sent')\n      })\n    } catch (error) {\n      setToast({\n        message: t('Something went wrong, please try again')\n      })\n\n      logger.error('ReportAProblemContent', 'Error sending feedback:', error)\n    } finally {\n      setIsLoading(false)\n    }\n  }, [currentVersion, isLoading, message, setToast, t])\n\n  const canSend = message.trim().length > 0 && !isLoading\n\n  return (\n    <div data-testid={TEST_IDS.root} style={styles.root}>\n      <PageHeader\n        title={t('Report a problem')}\n        subtitle={t(\n          'Please describe the problem you’re experiencing. Our team reviews every report to help improve the app.'\n        )}\n      />\n      <Form\n        testID=\"settings-report-problem-form\"\n        aria-label={t('Report a problem')}\n      >\n        <TextArea\n          testID={TEST_IDS.textarea}\n          label={t('Report a problem')}\n          placeholder={t('Write your issue')}\n          value={message}\n          onChange={setMessage}\n          disabled={isLoading}\n          rows={8}\n        />\n\n        <div style={styles.actions}>\n          <Button\n            data-testid={TEST_IDS.send}\n            variant=\"primary\"\n            size=\"small\"\n            isLoading={isLoading}\n            disabled={!canSend}\n            onClick={() => {\n              void handleSend()\n            }}\n            iconBefore={<Send />}\n          >\n            {t('Send')}\n          </Button>\n        </div>\n      </Form>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/ReportAProblemContent/styles.ts",
    "content": "import { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = () => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'stretch' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%',\n    flex: 1,\n    minHeight: 0,\n    boxSizing: 'border-box' as const\n  },\n\n  intro: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    maxWidth: 560\n  },\n\n  form: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    flex: 1,\n    minHeight: 0,\n    gap: `${rawTokens.spacing24}px`\n  },\n\n  actions: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    justifyContent: 'flex-end' as const,\n    flexShrink: 0\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/YourDevicesContent/index.test.tsx",
    "content": "/// <reference types=\"@testing-library/jest-dom\" />\n\nimport React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { fireEvent, render, screen } from '@testing-library/react'\n\nimport { YourDevicesContent } from './index'\n;(globalThis as { React?: typeof React }).React = React\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\nconst mockToggleBrowserExtension = jest.fn()\nlet mockExtensionState = {\n  isBrowserExtensionEnabled: false,\n  toggleBrowserExtension: mockToggleBrowserExtension\n}\n\njest.mock('../../../../hooks/useConnectExtension', () => ({\n  useConnectExtension: () => mockExtensionState\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    root: {},\n    sectionHeading: {},\n    sectionCard: {},\n    list: {},\n    iconWrap: {},\n    emptyBrowserStateWrap: {},\n    emptyStateCaptions: {},\n    emptyStateFooter: {}\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => ({\n    theme: {\n      colors: {\n        colorTextSecondary: '#888',\n        colorTextPrimary: '#fff',\n        colorAccentActive: '#22a'\n      }\n    }\n  }),\n  PageHeader: ({\n    title\n  }: {\n    title: React.ReactNode\n    subtitle?: React.ReactNode\n    as?: string\n  }) => <h1>{title}</h1>,\n  Text: ({\n    children\n  }: {\n    children: React.ReactNode\n    [key: string]: unknown\n  }) => <div>{children}</div>,\n  Button: (props: {\n    children?: React.ReactNode\n    onClick?: () => void\n    'data-testid'?: string\n    'aria-label'?: string\n    [key: string]: unknown\n  }) => (\n    <button\n      type=\"button\"\n      data-testid={props['data-testid']}\n      aria-label={props['aria-label']}\n      onClick={props.onClick}\n    >\n      {props.children}\n    </button>\n  ),\n  ListItem: (props: {\n    testID?: string\n    title?: React.ReactNode\n    rightElement?: React.ReactNode\n    [key: string]: unknown\n  }) => (\n    <div data-testid={props.testID}>\n      <div>{props.title}</div>\n      {props.rightElement}\n    </div>\n  ),\n  ContextMenu: ({\n    children,\n    trigger\n  }: {\n    children: React.ReactNode\n    trigger: React.ReactNode\n    [key: string]: unknown\n  }) => (\n    <div>\n      {trigger}\n      {children}\n    </div>\n  ),\n  NavbarListItem: (props: {\n    label: string\n    onClick?: () => void\n    [key: string]: unknown\n  }) => (\n    <button type=\"button\" onClick={props.onClick}>\n      {props.label}\n    </button>\n  )\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  MoreVert: () => null,\n  PhoneIphone: () => null,\n  SwapVert: () => null\n}))\n\ndescribe('YourDevicesContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockExtensionState = {\n      isBrowserExtensionEnabled: false,\n      toggleBrowserExtension: mockToggleBrowserExtension\n    }\n  })\n\n  it('renders the page heading', () => {\n    render(<YourDevicesContent />)\n\n    expect(\n      screen.getByRole('heading', { name: 'Your Devices' })\n    ).toBeInTheDocument()\n  })\n\n  it('shows empty state when the browser extension is disabled', () => {\n    render(<YourDevicesContent />)\n\n    expect(screen.getByText('Browser Extension')).toBeInTheDocument()\n    expect(\n      screen.getByText(\n        'Create a unique pairing code to link your PearPass extension and enable autofill.'\n      )\n    ).toBeInTheDocument()\n    expect(\n      screen.getByText('Generate Pair Code for Browser Extension')\n    ).toBeInTheDocument()\n    expect(\n      screen.queryByTestId('settings-device-item-browser')\n    ).not.toBeInTheDocument()\n  })\n\n  it('calls toggleBrowserExtension(true) when generate-pair-code button is clicked', () => {\n    render(<YourDevicesContent />)\n\n    fireEvent.click(\n      screen.getByText('Generate Pair Code for Browser Extension')\n    )\n\n    expect(mockToggleBrowserExtension).toHaveBeenCalledTimes(1)\n    expect(mockToggleBrowserExtension).toHaveBeenCalledWith(true)\n  })\n\n  it('shows browser device row when the extension is enabled', () => {\n    mockExtensionState = {\n      isBrowserExtensionEnabled: true,\n      toggleBrowserExtension: mockToggleBrowserExtension\n    }\n\n    render(<YourDevicesContent />)\n\n    expect(\n      screen.getByTestId('settings-device-item-browser')\n    ).toBeInTheDocument()\n    expect(screen.getByText('Browser')).toBeInTheDocument()\n    expect(\n      screen.queryByText('Generate Pair Code for Browser Extension')\n    ).not.toBeInTheDocument()\n  })\n\n  it('shows the extension actions button when the extension is enabled', () => {\n    mockExtensionState = {\n      isBrowserExtensionEnabled: true,\n      toggleBrowserExtension: mockToggleBrowserExtension\n    }\n\n    render(<YourDevicesContent />)\n\n    expect(\n      screen.getByTestId('settings-browser-extension-action')\n    ).toBeInTheDocument()\n  })\n\n  it('calls toggleBrowserExtension(false) when unpair is clicked', () => {\n    mockExtensionState = {\n      isBrowserExtensionEnabled: true,\n      toggleBrowserExtension: mockToggleBrowserExtension\n    }\n\n    render(<YourDevicesContent />)\n\n    fireEvent.click(screen.getByText('Unpair Browser extension'))\n\n    expect(mockToggleBrowserExtension).toHaveBeenCalledTimes(1)\n    expect(mockToggleBrowserExtension).toHaveBeenCalledWith(false)\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/YourDevicesContent/index.tsx",
    "content": "import {\n  Button,\n  ContextMenu,\n  ListItem,\n  NavbarListItem,\n  PageHeader,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  MoreVert,\n  PublicOutlined,\n  SwapVert\n} from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { useConnectExtension } from '../../../../hooks/useConnectExtension'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { createStyles } from './styles'\n\nconst TEST_IDS = {\n  root: 'settings-your-devices',\n  extensionSection: 'settings-card-browser-extension-connections',\n  extensionActionButton: 'settings-browser-extension-action'\n} as const\n\nexport const YourDevicesContent = () => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { isBrowserExtensionEnabled, toggleBrowserExtension } =\n    useConnectExtension()\n\n  return (\n    <div data-testid={TEST_IDS.root} style={styles.root}>\n      <PageHeader\n        as=\"h1\"\n        title={t('Your Devices')}\n        subtitle={t(\n          'Devices listed here stay in sync. Changes made on one device update across all your vaults on every synced device.'\n        )}\n      />\n\n      <div style={styles.sectionHeading}>\n        <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n          {t('Browser Extension Connections')}\n        </Text>\n      </div>\n\n      <div data-testid={TEST_IDS.extensionSection} style={styles.sectionCard}>\n        {isBrowserExtensionEnabled ? (\n          <div style={styles.list}>\n            <div>\n              <ListItem\n                icon={\n                  <div style={styles.iconWrap}>\n                    <PublicOutlined\n                      width={16}\n                      height={16}\n                      color={theme.colors.colorTextPrimary}\n                    />\n                  </div>\n                }\n                title={'Browser'}\n                testID=\"settings-device-item-browser\"\n                rightElement={\n                  <ContextMenu\n                    trigger={\n                      <Button\n                        variant=\"tertiary\"\n                        size=\"small\"\n                        iconBefore={\n                          <MoreVert\n                            width={16}\n                            height={16}\n                            color={theme.colors.colorTextPrimary}\n                          />\n                        }\n                        data-testid={TEST_IDS.extensionActionButton}\n                        aria-label={t('Browser extension actions')}\n                      />\n                    }\n                  >\n                    <NavbarListItem\n                      label={t('Unpair Browser extension')}\n                      variant=\"destructive\"\n                      onClick={() => toggleBrowserExtension(false)}\n                    />\n                  </ContextMenu>\n                }\n              />\n            </div>\n          </div>\n        ) : (\n          <div style={styles.emptyBrowserStateWrap}>\n            <div style={styles.emptyStateCaptions}>\n              <Text>{t('Browser Extension')}</Text>\n              <Text color={theme.colors.colorTextSecondary}>\n                {t(\n                  'Create a unique pairing code to link your PearPass extension and enable autofill.'\n                )}\n              </Text>\n            </div>\n            <div style={styles.emptyStateFooter}>\n              <Button\n                variant=\"tertiary\"\n                size=\"small\"\n                onClick={() => toggleBrowserExtension(true)}\n                iconBefore={<SwapVert width={16} height={16} />}\n              >\n                {t('Generate Pair Code for Browser Extension')}\n              </Button>\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/YourDevicesContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`,\n    width: '100%'\n  },\n\n  sectionHeading: {\n    marginTop: `${rawTokens.spacing16}px`,\n    marginBottom: `${rawTokens.spacing4}px`\n  },\n\n  sectionCard: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    borderRadius: `${rawTokens.radius8}px`,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    background: colors.colorSurfacePrimary,\n    boxSizing: 'border-box' as const\n  },\n\n  sectionDescription: {\n    marginBottom: `${rawTokens.spacing4}px`\n  },\n\n  list: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const\n  },\n\n  footer: {\n    display: 'flex' as const,\n    justifyContent: 'flex-start' as const,\n    padding: `${rawTokens.spacing4}px`,\n    borderTop: `1px solid ${colors.colorBorderPrimary}`\n  },\n\n  listItemBorder: {\n    borderBottom: `1px solid ${colors.colorBorderPrimary}`\n  },\n\n  iconWrap: {\n    width: `${rawTokens.spacing32}px`,\n    height: `${rawTokens.spacing32}px`,\n    borderRadius: `${rawTokens.radius8}px`,\n    display: 'inline-flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    background: colors.colorSurfaceHover,\n    flexShrink: 0\n  },\n\n  emptyBrowserStateWrap: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'flex-start' as const\n  },\n\n  emptyStateCaptions: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing6}px`,\n    padding: `${rawTokens.spacing12}px`,\n    paddingBottom: `${rawTokens.spacing4}px`\n  },\n\n  emptyStateFooter: {\n    display: 'flex' as const,\n    justifyContent: 'flex-start' as const,\n    padding: `${rawTokens.spacing4}px`\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/YourVaultsContent/index.test.tsx",
    "content": "import React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { render, screen, fireEvent, act } from '@testing-library/react'\n\nimport { AddDeviceModalContentV2 } from '../../../../containers/Modal/AddDeviceModalContentV2/AddDeviceModalContentV2'\nimport { CreateOrEditVaultModalContentV2 } from '../../../../containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2'\nimport { PairedDevicesModalContent } from '../../../../containers/Modal/PairedDevicesModalContent'\nimport { YourVaultsContent } from './index'\n\nconst mockSetModal = jest.fn()\nconst mockCloseModal = jest.fn()\nconst mockSwitchVault = jest.fn(() => Promise.resolve())\n\nconst vaultState: {\n  current: { data: { id: string; name: string } | null }\n  all: { data: { id: string; name: string }[] }\n  records: { data: { id: string }[] | null }\n} = {\n  current: {\n    data: { id: 'vault-main', name: 'Main Vault' }\n  },\n  all: { data: [{ id: 'vault-main', name: 'Main Vault' }] },\n  records: { data: [] }\n}\n\njest.mock('../../../../context/ModalContext', () => ({\n  useModal: () => ({\n    setModal: mockSetModal,\n    closeModal: mockCloseModal\n  })\n}))\n\njest.mock('../../../../hooks/useVaultSwitch', () => ({\n  useVaultSwitch: () => ({ switchVault: mockSwitchVault })\n}))\n\njest.mock('../../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string, values?: { count?: number }) => {\n      if (values && 'count' in values && typeof values.count === 'number') {\n        return values.count === 1 ? '1 item' : `${values.count} items`\n      }\n      return str\n    }\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useVault: () => ({ data: vaultState.current.data }),\n  useVaults: () => ({ data: vaultState.all.data }),\n  useRecords: (_args?: unknown) => ({ data: vaultState.records.data })\n}))\n\njest.mock('./styles', () => ({\n  createStyles: () => ({\n    root: {},\n    header: {},\n    section: {},\n    cardList: {},\n    iconWrap: {},\n    actions: {},\n    footer: {}\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => ({\n  useTheme: () => ({\n    theme: {\n      colors: {\n        colorTextSecondary: '#999',\n        colorTextPrimary: '#000',\n        colorPrimary: '#00f',\n        colorBorderPrimary: '#ccc'\n      }\n    }\n  }),\n  Button: ({\n    children,\n    onClick,\n    'data-testid': dataTestid,\n    iconBefore: _i,\n    ...rest\n  }: {\n    children: React.ReactNode\n    onClick?: () => void\n    'data-testid'?: string\n    iconBefore?: React.ReactNode\n  } & React.ComponentProps<'button'>) => (\n    <button type=\"button\" data-testid={dataTestid} onClick={onClick} {...rest}>\n      {children}\n    </button>\n  ),\n  PageHeader: ({\n    title,\n    subtitle,\n    as: _a\n  }: {\n    title: string\n    subtitle?: React.ReactNode\n    as?: string\n  }) => (\n    <div data-testid=\"settings-your-vaults-page-header\">\n      <h1>{title}</h1>\n      {subtitle != null ? <p>{subtitle}</p> : null}\n    </div>\n  ),\n  ContextMenu: ({\n    children,\n    testID,\n    menuWidth: _w,\n    trigger,\n    ..._rest\n  }: {\n    children: React.ReactNode\n    testID: string\n    menuWidth?: number\n    trigger: React.ReactNode\n    [key: string]: unknown\n  }) => (\n    <div data-testid={testID}>\n      {trigger}\n      <div data-testid=\"context-menu-children\">{children}</div>\n    </div>\n  ),\n  ListItem: ({\n    testID,\n    title,\n    subtitle,\n    rightElement,\n    onClick,\n    showDivider: _d,\n    dividerColor: _c,\n    icon: _ic,\n    ..._rest\n  }: {\n    testID: string\n    title: string\n    subtitle?: string | { primary?: string; secondary?: string }\n    rightElement?: React.ReactNode\n    onClick?: () => void\n    [key: string]: unknown\n  }) => {\n    const subtitleText =\n      typeof subtitle === 'object' && subtitle !== null\n        ? [subtitle.primary, subtitle.secondary].filter(Boolean).join(' ')\n        : subtitle\n    return (\n      <div data-testid={testID} onClick={onClick} role={onClick ? 'button' : undefined}>\n        <span>{title}</span>\n        {subtitleText ? <span>{subtitleText}</span> : null}\n        {rightElement}\n      </div>\n    )\n  },\n  MultiSlotInput: ({\n    children,\n    testID\n  }: {\n    children: React.ReactNode\n    testID: string\n  }) => <div data-testid={testID}>{children}</div>,\n  NavbarListItem: (props: {\n    testID: string\n    label: string\n    onClick: () => void\n    [key: string]: unknown\n  }) => {\n    const { testID, label, onClick } = props\n    return (\n      <button data-testid={testID} type=\"button\" onClick={onClick}>\n        {label}\n      </button>\n    )\n  },\n  Text: ({\n    children,\n    ..._rest\n  }: {\n    children: React.ReactNode\n    [key: string]: unknown\n  }) => <span>{children}</span>,\n  Title: ({\n    children,\n    as: Component = 'h2'\n  }: {\n    children: React.ReactNode\n    as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'div'\n  }) => <Component>{children}</Component>\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  Add: () => null,\n  Devices: () => null,\n  Edit: () => null,\n  LockOutlined: () => null,\n  MoreVert: () => null,\n  PersonAdd: () => null\n}))\n\nconst resetVaultFixtures = () => {\n  vaultState.current = {\n    data: { id: 'vault-main', name: 'Main Vault' }\n  }\n  vaultState.all = {\n    data: [{ id: 'vault-main', name: 'Main Vault' }]\n  }\n  vaultState.records = { data: [] }\n}\n\ndescribe('YourVaultsContent', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    resetVaultFixtures()\n  })\n\n  it('renders null when there is no current vault', () => {\n    vaultState.current = { data: null }\n\n    const { container } = render(<YourVaultsContent />)\n\n    expect(container.firstChild).toBeNull()\n  })\n\n  it('renders the card, current vault row, and create button for a single vault', () => {\n    render(<YourVaultsContent />)\n\n    expect(screen.getByTestId('settings-card-your-vault')).toBeInTheDocument()\n    expect(screen.getByText('Your Vaults')).toBeInTheDocument()\n    expect(screen.getByText('Current Vault')).toBeInTheDocument()\n    const row = screen.getByTestId('settings-vault-item')\n    expect(row.textContent).toContain('Main Vault')\n    expect(row.textContent).toContain('0 items')\n    expect(\n      screen.queryByTestId('settings-other-vaults-multislot')\n    ).not.toBeInTheDocument()\n    expect(screen.getByTestId('settings-your-vaults-create').textContent).toBe(\n      'Create new Vault'\n    )\n  })\n\n  it('lists other vaults when the user has more than one vault', () => {\n    vaultState.all = {\n      data: [\n        { id: 'vault-main', name: 'Main Vault' },\n        { id: 'vault-other', name: 'Second Vault' }\n      ]\n    }\n\n    render(<YourVaultsContent />)\n\n    expect(screen.getByText('Other Vaults')).toBeInTheDocument()\n    expect(\n      screen.getByTestId('settings-other-vault-Second Vault-0')\n    ).toBeInTheDocument()\n  })\n\n  it('delegates switching another vault to useVaultSwitch', async () => {\n    vaultState.all = {\n      data: [\n        { id: 'vault-main', name: 'Main Vault' },\n        { id: 'vault-other', name: 'Second Vault' }\n      ]\n    }\n\n    render(<YourVaultsContent />)\n\n    await act(async () => {\n      fireEvent.click(screen.getByTestId('settings-other-vault-Second Vault-0'))\n    })\n\n    expect(mockSwitchVault).toHaveBeenCalledTimes(1)\n    expect(mockSwitchVault).toHaveBeenCalledWith(\n      { id: 'vault-other', name: 'Second Vault' },\n      expect.any(Function)\n    )\n  })\n\n  it('opens the add-device modal when the invite control is used', () => {\n    render(<YourVaultsContent />)\n\n    fireEvent.click(screen.getByTestId('settings-vault-invite-button'))\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n    const arg = mockSetModal.mock.calls[0][0] as React.ReactElement\n    expect(arg.type).toBe(AddDeviceModalContentV2)\n  })\n\n  it('opens the create-vault modal with shouldRedirectToMain false when create is pressed', () => {\n    render(<YourVaultsContent />)\n\n    fireEvent.click(screen.getByTestId('settings-your-vaults-create'))\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n    const el = mockSetModal.mock.calls[0][0] as React.ReactElement<\n      Record<string, unknown>\n    >\n    expect(el.type).toBe(CreateOrEditVaultModalContentV2)\n    const props = el.props as {\n      shouldRedirectToMain?: boolean\n      onClose: () => void\n      onSuccess: () => void\n    }\n    expect(props.shouldRedirectToMain).toBe(false)\n    expect(props.onClose).toBe(mockCloseModal)\n    expect(props.onSuccess).toBe(mockCloseModal)\n  })\n\n  it('opens the see-devices modal when the devices button is used', async () => {\n    render(<YourVaultsContent />)\n\n    await act(async () => {\n      fireEvent.click(screen.getByTestId('settings-vault-more-button'))\n    })\n\n    const devicesBtn = screen.getByTestId('settings-vault-devices-button')\n    await act(async () => {\n      fireEvent.click(devicesBtn)\n    })\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n    const el = mockSetModal.mock.calls[0][0] as React.ReactElement\n    expect(el.type).toBe(PairedDevicesModalContent)\n  })\n\n  it('opens rename (edit) for the current vault from the context menu', async () => {\n    render(<YourVaultsContent />)\n\n    const rename = screen.getByTestId('settings-vault-edit-button')\n    await act(async () => {\n      fireEvent.click(rename)\n    })\n\n    expect(mockSetModal).toHaveBeenCalledTimes(1)\n    const el = mockSetModal.mock.calls[0][0] as React.ReactElement<\n      Record<string, unknown>\n    >\n    expect(el.type).toBe(CreateOrEditVaultModalContentV2)\n    const editProps = el.props as {\n      vault: { id: string; name: string }\n      onClose: () => void\n    }\n    expect(editProps.vault).toEqual({\n      id: 'vault-main',\n      name: 'Main Vault'\n    })\n    expect(editProps.onClose).toBe(mockCloseModal)\n  })\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/YourVaultsContent/index.tsx",
    "content": "import React, { useCallback, useMemo } from 'react'\n\nimport {\n  Button,\n  ContextMenu,\n  ListItem,\n  MultiSlotInput,\n  NavbarListItem,\n  PageHeader,\n  Text,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  Add,\n  Devices,\n  Edit,\n  LockOutlined,\n  MoreVert,\n  PersonAdd\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport {\n  useRecords,\n  useVault,\n  useVaults,\n  type Vault\n} from '@tetherto/pearpass-lib-vault'\n\nimport { AddDeviceModalContentV2 } from '../../../../containers/Modal/AddDeviceModalContentV2/AddDeviceModalContentV2'\nimport { CreateOrEditVaultModalContentV2 } from '../../../../containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2'\nimport { PairedDevicesModalContent } from '../../../../containers/Modal/PairedDevicesModalContent'\nimport { useModal } from '../../../../context/ModalContext'\nimport { useTranslation } from '../../../../hooks/useTranslation'\nimport { useVaultSwitch } from '../../../../hooks/useVaultSwitch'\nimport { sortByName } from '../../../../utils/sortByName'\nimport { createStyles } from './styles'\n\nexport const YourVaultsContent = () => {\n  const { t } = useTranslation()\n  const { setModal, closeModal } = useModal()\n  const { switchVault } = useVaultSwitch()\n\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  const { data: vault } = useVault()\n  const { data: allVaults } = useVaults()\n\n  const { data: records } = useRecords({\n    shouldSkip: true,\n    variables: {\n      filters: {\n        searchPattern: '',\n        type: undefined,\n        folder: undefined,\n        isFavorite: undefined\n      },\n      sort: { key: 'updatedAt', direction: 'desc' }\n    }\n  })\n\n  const itemCount = records?.length ?? 0\n\n  const otherVaults = useMemo(() => {\n    if (!allVaults || !vault) return []\n    return sortByName(allVaults.filter((v) => v.id !== vault.id))\n  }, [allVaults, vault])\n\n  const openAddDeviceModal = useCallback(() => {\n    setModal(<AddDeviceModalContentV2 />)\n  }, [setModal])\n\n  const openDevicesModal = useCallback(() => {\n    setModal(<PairedDevicesModalContent />)\n  }, [setModal])\n\n  const openCreateModal = useCallback(() => {\n    setModal(\n      <CreateOrEditVaultModalContentV2\n        shouldRedirectToMain={false}\n        onClose={closeModal}\n        onSuccess={closeModal}\n      />\n    )\n  }, [closeModal, setModal])\n\n  const openEditModal = useCallback(\n    (v: Vault) => {\n      setModal(\n        <CreateOrEditVaultModalContentV2\n          onClose={closeModal}\n          onSuccess={closeModal}\n          vault={v}\n        />\n      )\n    },\n    [closeModal, setModal]\n  )\n\n  const ItemCount = t('{count, plural, one {# Item} other {# Items}}', {\n    count: itemCount\n  })\n\n  const DevicesMeta = vault?.devices?.length\n    ? t('{count, plural, one {# Device} other {# Devices}}', {\n        count: vault?.devices?.length ?? 0\n      })\n    : t('Private')\n\n  const handleSwitchToVault = useCallback(\n    (v: Vault) => {\n      void switchVault(v, () => {})\n    },\n    [switchVault]\n  )\n\n  if (!vault) {\n    return null\n  }\n\n  return (\n    <div style={styles.root} data-testid=\"settings-card-your-vault\">\n      <div style={styles.header}>\n        <PageHeader\n          as=\"h1\"\n          title={t('Your Vaults')}\n          subtitle={t(\n            'Manage your vaults. Select the vault you want to apply changes to.'\n          )}\n        />\n      </div>\n\n      <div style={styles.section}>\n        <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n          {t('Current Vault')}\n        </Text>\n        <div style={styles.cardList}>\n          <ListItem\n            subtitleLayout=\"horizontal\"\n            testID=\"settings-vault-item\"\n            selectable={false}\n            title={vault.name}\n            subtitle={{ primary: ItemCount, secondary: DevicesMeta }}\n            icon={\n              <div style={styles.iconWrap}>\n                <LockOutlined\n                  color={theme.colors.colorPrimary}\n                  width={16}\n                  height={16}\n                />\n              </div>\n            }\n            rightElement={\n              <div style={styles.actions} onClick={(e) => e.stopPropagation()}>\n                <Button\n                  variant=\"tertiary\"\n                  size=\"small\"\n                  aria-label={t('Invite members')}\n                  data-testid=\"settings-vault-invite-button\"\n                  onClick={openAddDeviceModal}\n                  iconBefore={\n                    <PersonAdd color={theme.colors.colorTextPrimary} />\n                  }\n                />\n                <ContextMenu\n                  testID=\"settings-vault-context-menu\"\n                  menuWidth={200}\n                  trigger={\n                    <Button\n                      variant=\"tertiary\"\n                      size=\"small\"\n                      aria-label={t('Vault actions')}\n                      data-testid=\"settings-vault-more-button\"\n                      iconBefore={\n                        <MoreVert color={theme.colors.colorTextPrimary} />\n                      }\n                    />\n                  }\n                >\n                  <NavbarListItem\n                    testID=\"settings-vault-edit-button\"\n                    variant=\"secondary\"\n                    size=\"small\"\n                    label={t('Rename Vault')}\n                    icon={\n                      <Edit\n                        color={theme.colors.colorTextPrimary}\n                        width={24}\n                        height={24}\n                      />\n                    }\n                    onClick={() => {\n                      openEditModal(vault)\n                    }}\n                  />\n                  <NavbarListItem\n                    testID=\"settings-vault-devices-button\"\n                    variant=\"secondary\"\n                    size=\"small\"\n                    label={t('View Paired Devices')}\n                    icon={\n                      <Devices\n                        color={theme.colors.colorTextPrimary}\n                        width={24}\n                        height={24}\n                      />\n                    }\n                    onClick={() => {\n                      openDevicesModal()\n                    }}\n                  />\n                </ContextMenu>\n              </div>\n            }\n          />\n        </div>\n      </div>\n\n      {otherVaults.length > 0 ? (\n        <div style={styles.section}>\n          <Text variant=\"caption\" color={theme.colors.colorTextSecondary}>\n            {t('Other Vaults')}\n          </Text>\n          <MultiSlotInput testID=\"settings-other-vaults-multislot\">\n            {otherVaults.map((v, index) => {\n              return (\n                <ListItem\n                  onClick={() => handleSwitchToVault(v)}\n                  key={v.id}\n                  withRoundedBorders={false}\n                  dividerColor={theme.colors.colorBorderPrimary}\n                  testID={`settings-other-vault-${v.name}-${index}`}\n                  selectable\n                  title={v.name}\n                  showDivider={index < otherVaults.length - 1}\n                  icon={\n                    <div style={styles.iconWrap}>\n                      <LockOutlined\n                        color={theme.colors.colorPrimary}\n                        width={16}\n                        height={16}\n                      />\n                    </div>\n                  }\n                />\n              )\n            })}\n          </MultiSlotInput>\n        </div>\n      ) : null}\n\n      <div style={styles.footer}>\n        <Button\n          variant=\"primary\"\n          size=\"medium\"\n          data-testid=\"settings-your-vaults-create\"\n          iconBefore={<Add />}\n          onClick={openCreateModal}\n        >\n          {t('Create new Vault')}\n        </Button>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/YourVaultsContent/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nconst VAULT_LOCK_ICON_BACKGROUND = 'rgba(176, 217, 68, 0.18)'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    alignItems: 'stretch' as const,\n    gap: `${rawTokens.spacing24}px`,\n    width: '100%',\n    flex: 1,\n    minHeight: 0,\n    boxSizing: 'border-box' as const\n  },\n\n  header: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing8}px`\n  },\n\n  section: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`\n  },\n\n  cardList: {\n    display: 'flex' as const,\n    flexDirection: 'column' as const,\n    borderWidth: 1,\n    borderStyle: 'solid' as const,\n    borderColor: colors.colorBorderPrimary,\n    borderRadius: `${rawTokens.radius8}px`,\n    overflow: 'visible' as const,\n    backgroundColor: colors.colorSurfacePrimary\n  },\n\n  iconWrap: {\n    width: '32px',\n    height: '32px',\n    borderRadius: `${rawTokens.radius8}px`,\n    display: 'flex' as const,\n    alignItems: 'center' as const,\n    justifyContent: 'center' as const,\n    flexShrink: 0,\n    backgroundColor: VAULT_LOCK_ICON_BACKGROUND\n  },\n\n  actions: {\n    display: 'flex' as const,\n    flexDirection: 'row' as const,\n    alignItems: 'center' as const,\n    gap: `${rawTokens.spacing4}px`,\n    flexShrink: 0\n  },\n\n  footer: {\n    display: 'flex' as const,\n    justifyContent: 'flex-end' as const,\n    alignSelf: 'flex-end' as const,\n    width: '100%',\n    boxSizing: 'border-box' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/SettingsViewV2/content/index.ts",
    "content": "import { AppPreferencesContent } from './AppPreferencesContent'\nimport { AppVersionContent } from './AppVersionContent'\nimport { BlindPeersContent } from './BlindPeersContent'\nimport { DiagnosticsContent } from './DiagnosticsContent'\nimport { ExportItemsContent } from './ExportItemsContent'\nimport { ImportCodesContent } from './ImportCodesContent'\nimport { ImportItemsContent } from './ImportItemsContent'\nimport { LanguageContent } from './LanguageContent'\nimport { MasterPasswordContent } from './MasterPasswordContent'\nimport { YourDevicesContent } from './YourDevicesContent'\nimport { ReportAProblemContent } from './ReportAProblemContent'\n\nexport {\n  AppPreferencesContent,\n  AppVersionContent,\n  BlindPeersContent,\n  DiagnosticsContent,\n  ExportItemsContent,\n  ImportCodesContent,\n  ImportItemsContent,\n  YourDevicesContent,\n  LanguageContent,\n  MasterPasswordContent,\n  ReportAProblemContent\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardCreateMasterPassword/index.js",
    "content": "import { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { TERMS_OF_USE } from '@tetherto/pearpass-lib-constants'\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\nimport {\n  stringToBuffer,\n  clearBuffer\n} from '@tetherto/pearpass-lib-vault/src/utils/buffer'\nimport { checkPasswordStrength } from '@tetherto/pearpass-utils-password-check'\nimport { html } from 'htm/react'\n\nimport {\n  ButtonWrapper,\n  CardContainer,\n  CardTitle,\n  Description,\n  InputGroup,\n  InputLabel,\n  RadioGroup,\n  RadioText,\n  RadioTextBold,\n  Title,\n  RequirementsContainer,\n  BulletList,\n  BulletItem,\n  NoteText\n} from './styles'\nimport { AlertBox } from '../../../components/AlertBox'\nimport { LOCAL_STORAGE_KEYS } from '../../../constants/localStorage'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport {\n  ButtonPrimary,\n  ButtonRadio,\n  PearPassPasswordField\n} from '../../../lib-react-components'\nimport { logger } from '../../../utils/logger'\n\nexport const CardCreateMasterPassword = () => {\n  const { t } = useTranslation()\n  const { currentPage, navigate } = useRouter()\n  const [isAgreed, setIsAgreed] = useState(false)\n  const [termsOfUseError, setTermsOfUseError] = useState(false)\n\n  const errors = {\n    minLength: t(`Password must be at least 8 characters long`),\n    hasLowerCase: t('Password must contain at least one lowercase letter'),\n    hasUpperCase: t('Password must contain at least one uppercase letter'),\n    hasNumbers: t('Password must contain at least one number'),\n    hasSymbols: t('Password must contain at least one special character')\n  }\n\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const { createMasterPassword } = useUserData()\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required')),\n    passwordConfirm: Validator.string().required(t('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors, setValue } = useForm({\n    initialValues: {\n      password: '',\n      passwordConfirm: ''\n    },\n    validate: (values) => schema.validate(values)\n  })\n\n  const { onChange: onPasswordChange, ...passwordRegisterProps } =\n    register('password')\n\n  const handlePasswordChange = (val) => {\n    onPasswordChange(val)\n\n    if (!val) {\n      setErrors({})\n      return\n    }\n\n    validateMasterPassword(val)\n  }\n\n  const validateMasterPassword = (password) => {\n    const result = checkPasswordStrength(password, { errors })\n\n    if (!result.success) {\n      setErrors({\n        password: result.errors[0]\n      })\n\n      return false\n    }\n\n    setErrors({})\n    return true\n  }\n\n  const onSubmit = async (values) => {\n    if (isLoading) {\n      return\n    }\n\n    if (!isAgreed) {\n      setTermsOfUseError(true)\n      return\n    }\n\n    const isValid = validateMasterPassword(values.password)\n\n    if (!isValid) {\n      setValue('passwordConfirm', '')\n      return\n    }\n\n    if (values.password !== values.passwordConfirm) {\n      setErrors({\n        passwordConfirm: t('Passwords do not match')\n      })\n\n      return\n    }\n\n    const passwordBuffer = stringToBuffer(values.password)\n    try {\n      setIsLoading(true)\n\n      await createMasterPassword(passwordBuffer)\n\n      navigate(currentPage, { state: 'masterPassword' })\n\n      setIsLoading(false)\n    } catch (error) {\n      setIsLoading(false)\n\n      setErrors({\n        password: t('Error creating master password')\n      })\n\n      logger.error(\n        'useGetMultipleFiles',\n        'Error creating master password:',\n        error\n      )\n    } finally {\n      clearBuffer(passwordBuffer)\n    }\n  }\n\n  const handleTOUToggle = () => {\n    if (isAgreed) {\n      localStorage.removeItem(LOCAL_STORAGE_KEYS.TOU_ACCEPTED)\n      setIsAgreed(false)\n      setTermsOfUseError(false)\n    } else {\n      localStorage.setItem(LOCAL_STORAGE_KEYS.TOU_ACCEPTED, 'true')\n      setIsAgreed(true)\n      setTermsOfUseError(false)\n    }\n  }\n\n  return html`\n    <${CardContainer} onSubmit=${handleSubmit(onSubmit)}>\n      <${CardTitle}>\n        <${Title}> ${t('Create Master Password')} <//>\n\n        <${Description}>\n          ${t(\n            'The first thing to do is create a Master password to secure your account. You’ll use this password to access PearPass. '\n          )}\n        <//>\n      <//>\n\n      <${InputGroup}>\n        <${InputLabel}> ${t('Master Password')} <//>\n        <${PearPassPasswordField}\n          ...${passwordRegisterProps}\n          onChange=${handlePasswordChange}\n        />\n      <//>\n\n      <${InputGroup}>\n        <${InputLabel}> ${t('Confirm Master Password')} <//>\n        <${PearPassPasswordField} ...${register('passwordConfirm')} />\n      <//>\n\n      <${RequirementsContainer}>\n        <span>\n          ${t(\n            'Your password must be at least 8 characters long and include at least one of each:'\n          )}\n        </span>\n        <${BulletList}>\n          <${BulletItem}>${t('Uppercase Letter (A-Z)')}<//>\n          <${BulletItem}>${t('Lowercase Letter (a-z)')}<//>\n          <${BulletItem}>${t('Number (0-9)')}<//>\n          <${BulletItem}> ${t('Special Character (! @ # $...)')} <//>\n        <//>\n        <${NoteText}>\n          ${t('Note: Avoid common words and personal information.')}\n        <//>\n      <//>\n\n      <${AlertBox}\n        message=${t(\n          'Don’t forget your master password. It’s the only way to access your vault. We can’t help recover it. Back it up securely.'\n        )}\n      />\n\n      <${InputGroup}>\n        <${InputLabel}> ${t('PearPass Terms of Use')} <//>\n        <${RadioGroup} onClick=${handleTOUToggle} isError=${termsOfUseError}>\n          <${ButtonRadio} isActive=${isAgreed} />\n          <${RadioText}>\n            ${t('I have read and agree to the')} ${' '}\n            <${RadioTextBold} href=${TERMS_OF_USE}>\n              ${t('PearPass Application Terms of Use.')}\n            <//>\n          <//>\n        <//>\n      <//>\n\n      <${ButtonWrapper}>\n        <${ButtonPrimary} type=\"submit\"> ${t('Continue')} <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardCreateMasterPassword/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const CardContainer = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  justify-content: center;\n  align-items: center;\n  width: 609px;\n`\n\nexport const CardTitle = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  justify-content: center;\n  max-width: 489px;\n\n  color: ${({ theme }) => theme.colors.white.mode1};\n  padding: 4px 0px;\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\nexport const Description = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 300;\n  line-height: normal;\n`\n\nexport const ButtonWrapper = styled.div`\n  align-self: center;\n`\n\nexport const InputGroup = styled.div`\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n`\n\nexport const InputLabel = styled.label`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n`\n\nexport const RadioGroup = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 10px;\n\n  & > :first-child {\n    pointer-events: none;\n    border-color: ${({ theme, isError }) =>\n      isError ? theme.colors.errorRed.mode1 : theme.colors.primary400.mode1};\n  }\n`\n\nexport const RadioText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const RadioTextBold = styled.a`\n  cursor: pointer;\n  font-weight: 600;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-decoration-line: underline;\n  text-decoration-style: solid;\n  text-decoration-skip-ink: auto;\n  text-decoration-thickness: auto;\n  text-underline-offset: auto;\n  text-underline-position: from-font;\n`\n\nexport const RequirementsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  color: ${({ theme }) => theme.colors.grey100.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  line-height: normal;\n`\n\nexport const BulletList = styled.ul`\n  margin: 0;\n  padding-left: 20px;\n  list-style-type: disc;\n`\n\nexport const BulletItem = styled.li`\n  font-size: 14px;\n`\n\nexport const NoteText = styled.p`\n  font-size: 14px;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/CardCreateMasterPasswordV2/index.tsx",
    "content": "import React, { useState } from 'react'\n\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { TERMS_OF_USE } from '@tetherto/pearpass-lib-constants'\nimport {\n  useCreateVault,\n  useUserData,\n  useVault,\n  useVaults\n} from '@tetherto/pearpass-lib-vault'\nimport {\n  stringToBuffer,\n  clearBuffer\n} from '@tetherto/pearpass-lib-vault/src/utils/buffer'\nimport { checkPasswordStrength } from '@tetherto/pearpass-utils-password-check'\nimport {\n  AlertMessage,\n  Button,\n  Form,\n  Link,\n  PasswordField,\n  Text,\n  Title\n} from '@tetherto/pearpass-lib-ui-kit'\nimport type { PasswordIndicatorVariant } from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  KeyboardArrowRightFilled,\n  InfoOutlined\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useTheme } from '@tetherto/pearpass-lib-ui-kit'\n\nimport { createStyles } from './styles'\nimport { LOCAL_STORAGE_KEYS } from '../../../constants/localStorage'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { getDeviceName } from '../../../utils/getDeviceName'\nimport { logger } from '../../../utils/logger'\nimport { STRENGTH_MAP } from '../../../constants/password'\n\nexport const CardCreateMasterPasswordV2 = () => {\n  const { t } = useTranslation()\n  const { navigate } = useRouter()\n  const [isLoading, setIsLoading] = useState(false)\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n\n  useGlobalLoading({ isLoading })\n\n  const { createMasterPassword, logIn } = useUserData()\n  const { initVaults } = useVaults()\n  const { addDevice } = useVault()\n  const { createVault } = useCreateVault()\n\n  const schema = Validator.object({\n    password: Validator.string().required(t('Password is required')),\n    passwordConfirm: Validator.string().required(t('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors, setValue, values } = useForm({\n    initialValues: {\n      password: '',\n      passwordConfirm: ''\n    },\n    validate: (formValues: { password: string; passwordConfirm: string }) =>\n      schema.validate(formValues)\n  })\n\n  const passwordStrength = values.password\n    ? checkPasswordStrength(values.password)\n    : null\n\n  const isPasswordStrong = passwordStrength?.strengthType === 'success'\n  const passwordsMatch =\n    isPasswordStrong &&\n    values.password.length > 0 &&\n    values.password === values.passwordConfirm\n  const isFormValid = isPasswordStrong && passwordsMatch\n\n  const passwordIndicator: PasswordIndicatorVariant | undefined =\n    passwordStrength ? STRENGTH_MAP[passwordStrength.strengthType] : undefined\n\n  const handlePasswordChange = (val: string) => {\n    register('password').onChange(val)\n    if (!val) {\n      setErrors({})\n    }\n  }\n\n  const handleConfirmChange = (val: string) => {\n    register('passwordConfirm').onChange(val)\n  }\n\n  const onSubmit = async (formValues: {\n    password: string\n    passwordConfirm: string\n  }) => {\n    if (isLoading) return\n\n    const strength = checkPasswordStrength(formValues.password)\n    if (strength.strengthType !== 'success') {\n      setErrors({\n        password: strength.errors?.[0] || t('Password is not strong enough')\n      })\n      setValue('passwordConfirm', '')\n      return\n    }\n\n    if (formValues.password !== formValues.passwordConfirm) {\n      setErrors({ passwordConfirm: t('Passwords do not match') })\n      return\n    }\n\n    const createBuffer = stringToBuffer(formValues.password)\n    const loginBuffer = stringToBuffer(formValues.password)\n    try {\n      setIsLoading(true)\n      localStorage.setItem(LOCAL_STORAGE_KEYS.TOU_ACCEPTED, 'true')\n      await createMasterPassword(createBuffer)\n      await logIn({ password: loginBuffer })\n      await initVaults({ password: loginBuffer })\n      await createVault({ name: t('Personal') })\n      await addDevice(getDeviceName())\n      navigate('vault', { recordType: 'all' })\n      setIsLoading(false)\n    } catch (error) {\n      setIsLoading(false)\n      setErrors({ password: t('Error creating master password') })\n      logger.error(\n        'CardCreateMasterPasswordV2',\n        'Error creating master password:',\n        error\n      )\n    } finally {\n      clearBuffer(loginBuffer)\n    }\n  }\n\n  const showInfoToast = values.password && !isPasswordStrong\n\n  return (\n    <div style={styles.card}>\n      {/* @ts-ignore - plain CSS objects passed to react-strict-dom components */}\n      <Form onSubmit={handleSubmit(onSubmit)} style={styles.container}>\n        <div style={styles.header}>\n          <Title as=\"h2\">{t('Create Master Password')}</Title>\n        </div>\n\n        <div style={styles.fieldsWrapper}>\n          <div style={styles.passwordWrapper}>\n            <PasswordField\n              label={t('Password')}\n              placeholderText={t('Enter Master Password')}\n              value={values.password}\n              onChangeText={handlePasswordChange}\n              passwordIndicator={passwordIndicator}\n              testID=\"master-password-field\"\n            />\n            {showInfoToast && (\n              <div style={styles.toast}>\n                <div style={styles.toastIcon}>\n                  <InfoOutlined width={16} height={16} />\n                </div>\n                <Text as=\"span\" variant=\"caption\">\n                  {t(\n                    \"Strong passwords are usually at least 8 characters long, hard to guess, use a mix of uppercase and lowercase letters, numbers, and symbols, and aren’t based on personal information.\"\n                  )}\n                </Text>\n              </div>\n            )}\n          </div>\n\n          <PasswordField\n            label={t('Repeat Password')}\n            placeholderText={t('Repeat Master Password')}\n            value={values.passwordConfirm}\n            onChangeText={handleConfirmChange}\n            passwordIndicator={passwordsMatch ? 'match' : undefined}\n            testID=\"confirm-password-field\"\n          />\n\n          {isFormValid && (\n            <AlertMessage\n              variant=\"warning\"\n              size=\"small\"\n              title=\"\"\n              description={t(\n                \"Don't forget your Master password. It's the only way to access your vault. We can't help recover it. Back it up securely.\"\n              )}\n            />\n          )}\n        </div>\n\n        <div style={styles.footerRow}>\n          <div style={styles.touContainer}>\n            {/* @ts-ignore */}\n            <Text as=\"span\" variant=\"caption\" style={styles.touText}>\n              {t(\n                'By clicking Continue, you confirm that you have read and agree to the '\n              )}\n            </Text>{' '}\n            <Link\n              // @ts-ignore - plain CSS object\n              style={styles.touLink}\n              href={TERMS_OF_USE}\n              isExternal\n            >\n              {t('PearPass Application Terms of Use')}\n            </Link>\n            <Text as=\"span\">.</Text>\n          </div>\n          <Button\n            variant=\"primary\"\n            size=\"small\"\n            disabled={!isFormValid}\n            isLoading={isLoading}\n            onClick={() => handleSubmit(onSubmit)()}\n            iconAfter={<KeyboardArrowRightFilled width={16} height={16} />}\n          >\n            {t('Continue')}\n          </Button>\n        </div>\n      </Form>\n    </div>\n  )\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardCreateMasterPasswordV2/styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  card: {\n    background: colors.colorSurfacePrimary,\n    paddingTop: '55px',\n    paddingBottom: '55px',\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: '35px',\n    alignItems: 'center',\n    justifyContent: 'center',\n    width: '100%',\n    height: '100%',\n    overflow: 'hidden',\n    boxSizing: 'border-box' as const\n  },\n\n  container: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing24}px`,\n    alignItems: 'stretch',\n    justifyContent: 'center',\n    width: '100%',\n    maxWidth: '500px'\n  },\n\n  header: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing6}px`,\n    width: '100%'\n  },\n\n  fieldsWrapper: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing12}px`,\n    width: '100%'\n  },\n\n  passwordWrapper: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    width: '100%',\n    isolation: 'isolate' as const\n  },\n\n  toast: {\n    display: 'flex',\n    gap: `${rawTokens.spacing8}px`,\n    alignItems: 'center',\n    padding: `${rawTokens.spacing12}px`,\n    backgroundColor: colors.colorSurfaceHover,\n    border: `1px solid ${colors.colorBorderSecondary}`,\n    borderTop: 'none',\n    borderBottomLeftRadius: `${rawTokens.radius8}px`,\n    borderBottomRightRadius: `${rawTokens.radius8}px`,\n    width: '100%',\n    boxSizing: 'border-box' as const,\n    zIndex: 1\n  },\n  toastIcon: {\n    flexShrink: 0,\n    width: `${rawTokens.spacing16}px`,\n    height: `${rawTokens.spacing16}px`,\n    color: colors.colorTextTertiary\n  },\n  footerRow: {\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'space-between',\n    width: '100%'\n  },\n  touContainer: {\n    padding: '5px 0',\n    maxWidth: '302px',\n  },\n  touText: {\n    color: colors.colorTextSecondary\n  },\n  touLink: {\n    fontFamily: \"'Inter', sans-serif\",\n    fontSize: `${rawTokens.fontSize12}px`,\n    fontWeight: 400,\n    color: colors.colorLinkText,\n    textDecoration: 'underline',\n    textDecorationStyle: 'solid' as const\n  }\n})\n"
  },
  {
    "path": "src/pages/WelcomePage/CardLoadVault/index.js",
    "content": "import os from 'os'\n\nimport { useEffect, useState } from 'react'\n\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { usePair, useUserData, useVault } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport {\n  Header,\n  InputContainer,\n  LoadVaultCard,\n  LoadVaultInput,\n  LoadVaultNotice,\n  LoadVaultTitle,\n  LoadVaultDescription,\n  ImportVaultButtonContent,\n  IconWrapper,\n  ImportVaultButtonWrapper\n} from './styles'\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useToast } from '../../../context/ToastContext'\nimport { useAutoLockPreferences } from '../../../hooks/useAutoLockPreferences'\nimport { usePasteFromClipboard } from '../../../hooks/usePasteFromClipboard'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { ButtonPrimary } from '../../../lib-react-components'\nimport {\n  ArrowLeftIcon,\n  ButtonRoundIcon,\n  LockCircleIcon\n} from '../../../lib-react-components'\n\nexport const CardLoadVault = () => {\n  const { t } = useTranslation()\n  const { navigate } = useRouter()\n  const { hasPasswordSet } = useUserData()\n  const { pasteFromClipboard } = usePasteFromClipboard()\n  const [inviteCode, setInviteCodeId] = useState('')\n\n  const { setToast } = useToast()\n\n  const { refetch: refetchVault, addDevice } = useVault()\n\n  const {\n    pairActiveVault,\n    cancelPairActiveVault,\n    isLoading: isPairing\n  } = usePair()\n\n  const { setShouldBypassAutoLock } = useAutoLockPreferences()\n\n  useEffect(() => {\n    setShouldBypassAutoLock(isPairing)\n    return () => setShouldBypassAutoLock(false)\n  }, [isPairing, setShouldBypassAutoLock])\n\n  const handleChange = (e) => {\n    if (isPairing) {\n      return\n    }\n\n    setInviteCodeId(e.target.value)\n  }\n\n  const handleLoadVault = async (code) => {\n    try {\n      const vaultId = await pairActiveVault(code)\n\n      if (!vaultId) {\n        throw new Error('Vault ID is empty')\n      }\n\n      await refetchVault(vaultId)\n\n      await addDevice(os.hostname() + ' ' + os.platform() + ' ' + os.release())\n\n      navigate('vault', {\n        recordType: 'all'\n      })\n    } catch {\n      setInviteCodeId('')\n      setToast({\n        message: t('Something went wrong, please check invite code')\n      })\n    }\n  }\n\n  const handleGoBack = () => {\n    navigate('welcome', {\n      state: hasPasswordSet\n        ? NAVIGATION_ROUTES.VAULTS\n        : NAVIGATION_ROUTES.CREATE_MASTER_PASSWORD\n    })\n  }\n\n  const handlePastedText = (pastedText) => {\n    if (pastedText) {\n      setInviteCodeId(pastedText)\n      setTimeout(() => {\n        if (!isPairing) {\n          handleLoadVault(pastedText)\n        }\n      }, 0)\n    }\n  }\n\n  useEffect(() => {\n    const handleKeyDown = (e) => {\n      if (e.key === 'Escape') {\n        cancelPairActiveVault()\n      }\n    }\n\n    window.addEventListener('keydown', handleKeyDown)\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown)\n    }\n  }, [cancelPairActiveVault])\n\n  return html` <${LoadVaultCard} isLoading=${isPairing}>\n    <${Header}>\n      <${ButtonRoundIcon}\n        onClick=${handleGoBack}\n        variant=\"secondary\"\n        startIcon=${ArrowLeftIcon}\n      />\n      <${LoadVaultTitle}>${t('Import an existing vault')}<//>\n    <//>\n    <${LoadVaultDescription}\n      >${t(\n        'Using PearPass on your other device, use \"Add Device\" to generate a QR or connection code to pair your vault. This method keeps your account secure.'\n      )}<//\n    >\n    <${InputContainer}>\n      <${LoadVaultInput}\n        autoFocus\n        placeholder=${t('Insert vault key...')}\n        value=${inviteCode}\n        onChange=${handleChange}\n        onPaste=${(e) => {\n          const pastedText = e.clipboardData?.getData('text')\n          handlePastedText(pastedText)\n        }}\n        onKeyPress=${(e) => {\n          if (e.key === 'Enter' && !isPairing) {\n            handleLoadVault(inviteCode)\n          }\n        }}\n      />\n\n      ${isPairing &&\n      html`<${LoadVaultNotice}>${t('Click Escape to cancel pairing')}<//>`}\n    <//>\n    <${ImportVaultButtonWrapper}>\n      <${ButtonPrimary}\n        type=\"button\"\n        onClick=${async () => {\n          const pastedText = await pasteFromClipboard()\n          handlePastedText(pastedText)\n        }}\n        width=\"260px\"\n      >\n        <${ImportVaultButtonContent}>\n          <${IconWrapper}>\n            <${LockCircleIcon} size=\"24\" color=${colors.black.mode1} />\n          <//>\n          ${t('Import vault')}\n        <//>\n      <//>\n    <//>\n  <//>`\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardLoadVault/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const LoadVaultCard = styled.div.withConfig({\n  shouldForwardProp: (prop) => !['isLoading'].includes(prop)\n})`\n  font-family: 'Inter';\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  width: 640px;\n  gap: 25px;\n  cursor: ${({ isLoading }) => (isLoading ? 'wait' : 'default')};\n\n  & > * {\n    pointer-events: ${({ isLoading }) => (isLoading ? 'none' : 'auto')};\n  }\n`\n\nexport const LoadVaultTitle = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: left;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n  margin-left: 10px;\n`\nexport const LoadVaultDescription = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: left;\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\nexport const LoadVaultNotice = styled.div`\n  white-space: nowrap;\n  margin-top: 8px;\n\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: left;\n  font-family: 'Inter';\n  font-size: 12px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const InputContainer = styled.div`\n  width: 100%;\n`\n\nexport const LoadVaultInput = styled.input`\n  display: flex;\n  width: 100%;\n  padding: 12px 20px;\n  align-items: center;\n  gap: 10px;\n  border-radius: 10px;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey300.mode1};\n  color: ${({ theme }) => theme.colors.white.mode1};\n\n  &::placeholder {\n    color: ${({ theme }) => theme.colors.grey100.mode1};\n  }\n\n  &:active,\n  &:focus {\n    box-shadow: none;\n    outline: none;\n    border: 1px solid ${({ theme }) => theme.colors.grey200.mode1};\n  }\n`\n\nexport const Header = styled.div`\n  width: 100%;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n`\nexport const ImportVaultButtonWrapper = styled.div`\n  display: flex;\n  justify-content: flex-start;\n  width: 100%;\n`\nexport const ImportVaultButtonContent = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  color: ${({ theme }) => theme.colors.black.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 700;\n  cursor: pointer;\n`\n\nexport const IconWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 24px;\n  height: 24px;\n  position: relative;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/CardNewVaultCredentials/index.js",
    "content": "import { useEffect } from 'react'\n\nimport { html } from 'htm/react'\n\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { CreateOrEditVaultModalContentV2 } from '../../../containers/Modal/CreateOrEditVaultModalContentV2/CreateOrEditVaultModalContentV2'\nimport { CreateVaultModalContent } from '../../../containers/Modal/CreateVaultModalContent'\nimport { useModal } from '../../../context/ModalContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { isV2 } from '../../../utils/designVersion'\n\nexport const CardNewVaultCredentials = () => {\n  const { navigate, currentPage } = useRouter()\n  const { closeModal, setModal } = useModal()\n\n  useEffect(() => {\n    const handleClose = () => {\n      closeModal()\n      navigate(currentPage, { state: NAVIGATION_ROUTES.VAULTS })\n    }\n\n    const CreateContent = isV2()\n      ? CreateOrEditVaultModalContentV2\n      : CreateVaultModalContent\n\n    setModal(\n      html`<${CreateContent} onClose=${handleClose} onSuccess=${closeModal} />`,\n      { replace: true }\n    )\n  }, [closeModal, currentPage, navigate, setModal])\n\n  return null\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardNewVaultCredentials/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Form = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 30px;\n  justify-content: center;\n  width: 500px;\n`\n\nexport const CardTitle = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  justify-content: center;\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\n\nexport const InputsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  gap: 20px;\n`\n\nexport const FieldWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: 100%;\n`\n\nexport const Label = styled.label`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\n\nexport const ButtonWrapper = styled.div`\n  display: flex;\n  gap: 25px;\n  align-self: center;\n`\n\nexport const AccordionTrigger = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  & > button {\n    transform: ${({ isOpen }) => (isOpen ? 'rotate(180deg)' : 'rotate(0)')};\n    transition: transform 0.3s ease;\n  }\n`\n\nexport const AccordionContent = styled.div`\n  display: flex;\n  max-height: ${({ isOpen }) => (isOpen ? '200px' : '0')};\n  overflow: hidden;\n  flex-direction: column;\n  gap: 20px;\n  width: 100%;\n  transition: max-height 0.3s ease;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/CardUnlockPearPass/index.tsx",
    "content": "import { useUserData, useVaults } from '@tetherto/pearpass-lib-vault'\n\nimport { AlertBox } from '../../../components/AlertBox'\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { AuthenticationCard } from '../../../containers/AuthenticationCard'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\n\nexport const CardUnlockPearPass = () => {\n  const { t } = useTranslation()\n  const { currentPage, navigate } = useRouter()\n  const { initVaults } = useVaults()\n  const { refreshMasterPasswordStatus } = useUserData()\n\n  const handleSuccess = async (password: string) => {\n    await initVaults({ password })\n    navigate(currentPage, { state: 'vaults' })\n  }\n\n  const handleError = async (error: string | Error, setErrors: (errors: { password: string }) => void) => {\n    const status = await refreshMasterPasswordStatus()\n\n    if (status?.isLocked) {\n      navigate('welcome', { state: NAVIGATION_ROUTES.SCREEN_LOCKED })\n      return\n    }\n\n    const remainingAttempts = status?.remainingAttempts\n\n    setErrors({\n      password:\n        typeof error === 'string'\n          ? error\n          : remainingAttempts !== undefined\n            ? t(\n              `Incorrect password. You have ${remainingAttempts} ${remainingAttempts === 1 ? 'attempt' : 'attempts'} before the app will be temporarily locked`\n            )\n            : t('Invalid password')\n    })\n  }\n\n  return (\n    <AuthenticationCard\n      title={t('Enter your Master password')}\n      buttonLabel={t('Continue')}\n      descriptionComponent={\n        <AlertBox\n          testId=\"masterpassword-alert-box\"\n          message={t(\n            \"Don't forget your master password. It's the only way to access your vault. We can't help recover it. Back it up securely.\"\n          )}\n        />\n      }\n      onSuccess={handleSuccess}\n      onError={handleError}\n    />\n  )\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardUnlockPearPassV2/index.tsx",
    "content": "import React, { FormEvent, useState } from 'react'\nimport {\n  Button,\n  PasswordField,\n  Text,\n  Title,\n  useTheme\n} from '@tetherto/pearpass-lib-ui-kit'\nimport {\n  KeyboardArrowRightRound\n} from '@tetherto/pearpass-lib-ui-kit/icons'\nimport { useCreateVault, useUserData, useVault, useVaults } from '@tetherto/pearpass-lib-vault'\nimport { clearBuffer, stringToBuffer } from '@tetherto/pearpass-lib-vault/src/utils/buffer'\n\nimport { OnboardingShell } from '../../../components/OnboardingShell'\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { getDeviceName } from '../../../utils/getDeviceName'\nimport { logger } from '../../../utils/logger'\nimport { sortByName } from '../../../utils/sortByName'\nimport {\n  ButtonIconWrapper,\n  Footer,\n  Header,\n  Shell\n} from './styles'\n\nexport const CardUnlockPearPassV2 = (): React.ReactElement => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const { currentPage, navigate } = useRouter()\n  const { initVaults, refetch: refetchVaults } = useVaults()\n  const { isVaultProtected, addDevice, refetch: refetchVault } = useVault()\n  const { createVault } = useCreateVault()\n  const { logIn, refreshMasterPasswordStatus } = useUserData()\n\n  const [password, setPassword] = useState('')\n  const [error, setError] = useState('')\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const handlePasswordChange = (value: string) => {\n    setPassword(value)\n\n    if (error) {\n      setError('')\n    }\n  }\n\n  const handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n    event.preventDefault()\n\n    if (isLoading) {\n      return\n    }\n\n    if (!password) {\n      setError(t('Password is required'))\n      return\n    }\n\n    const passwordBuffer = stringToBuffer(password)\n\n    try {\n      setIsLoading(true)\n      setError('')\n\n      await logIn({ password: passwordBuffer })\n      await initVaults({ password: passwordBuffer })\n\n      const vaults = await refetchVaults()\n      const firstVault = sortByName(vaults)[0]\n\n      if (firstVault) {\n        const isProtected = await isVaultProtected(firstVault.id)\n\n        if (isProtected) {\n          navigate(currentPage, { state: 'vaultPassword', vaultId: firstVault.id })\n        } else {\n          await refetchVault(firstVault.id)\n          navigate('vault', { recordType: 'all' })\n        }\n      } else {\n        await createVault({ name: t('Personal') })\n        await addDevice(getDeviceName())\n        navigate('vault', { recordType: 'all' })\n      }\n    } catch (submitError) {\n      const status = await refreshMasterPasswordStatus()\n\n      if (status?.isLocked) {\n        navigate('welcome', { state: NAVIGATION_ROUTES.SCREEN_LOCKED })\n        return\n      }\n\n      const attemptsLeft =\n        typeof status?.remainingAttempts === 'number'\n          ? status.remainingAttempts\n          : null\n\n      setError(\n        typeof submitError === 'string'\n          ? submitError\n          : attemptsLeft !== null\n            ? t(\n              `Incorrect password. You have ${attemptsLeft} ${attemptsLeft === 1 ? 'attempt' : 'attempts'} before the app will be temporarily locked`\n            )\n            : t('Invalid password')\n      )\n\n      logger.error(\n        'CardUnlockPearPassV2',\n        'Error unlocking with master password:',\n        submitError\n      )\n    } finally {\n      clearBuffer(passwordBuffer)\n      setIsLoading(false)\n    }\n  }\n\n  return (\n    <OnboardingShell background=\"solid\">\n      <Shell onSubmit={handleSubmit}>\n        <Header>\n          <Title>Enter Your Master Password</Title>\n          <Text\n            as=\"p\"\n            variant=\"label\"\n            color={theme.colors.colorTextSecondary}\n          >\n            {t('Please enter your master password to continue')}\n          </Text>\n        </Header>\n\n        <PasswordField\n          label={t('Password')}\n          value={password}\n          placeholderText={t('Enter Master Password')}\n          onChangeText={handlePasswordChange}\n          variant={error ? 'error' : 'default'}\n          errorMessage={error || undefined}\n          testID=\"login-password-input-v2\"\n        />\n\n        <Footer>\n          <Button\n            type=\"submit\"\n            variant=\"primary\"\n            size=\"small\"\n            isLoading={isLoading}\n            data-testid=\"login-continue-button-v2\"\n            iconAfter={\n              <ButtonIconWrapper>\n                <KeyboardArrowRightRound />\n              </ButtonIconWrapper>\n            }\n          >\n            {t('Continue')}\n          </Button>\n        </Footer>\n      </Shell>\n    </OnboardingShell>\n  )\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardUnlockPearPassV2/styles.ts",
    "content": "import styled from 'styled-components'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const Shell = styled.form`\n  display: flex;\n  width: min(100%, 500px);\n  flex-direction: column;\n  gap: ${rawTokens.spacing24}px;\n`\n\nexport const Header = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: ${rawTokens.spacing6}px;\n  text-align: center;\n`\n\nexport const Footer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n`\n\nexport const ButtonIconWrapper = styled.span`\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/CardUnlockVault/index.js",
    "content": "import { useState } from 'react'\n\nimport { useLingui } from '@lingui/react'\nimport { useForm } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { Validator } from '@tetherto/pear-apps-utils-validator'\nimport { useVault } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport { ButtonWrapper, CardContainer, CardTitle, Title } from './styles'\nimport { useGlobalLoading } from '../../../context/LoadingContext'\nimport { useRouter } from '../../../context/RouterContext'\nimport {\n  ButtonPrimary,\n  ButtonSecondary,\n  PearPassPasswordField\n} from '../../../lib-react-components'\nimport { logger } from '../../../utils/logger'\n\nexport const CardUnlockVault = () => {\n  const { i18n } = useLingui()\n\n  const [isLoading, setIsLoading] = useState(false)\n\n  useGlobalLoading({ isLoading })\n\n  const { navigate, currentPage, data: routerData } = useRouter()\n\n  const { refetch: refetchVault } = useVault()\n\n  const schema = Validator.object({\n    password: Validator.string().required(i18n._('Password is required'))\n  })\n\n  const { register, handleSubmit, setErrors } = useForm({\n    initialValues: { password: '' },\n    validate: (values) => schema.validate(values)\n  })\n\n  const onSubmit = async (values) => {\n    if (!routerData.vaultId || isLoading) {\n      return\n    }\n\n    try {\n      setIsLoading(true)\n\n      await refetchVault(routerData.vaultId, { password: values.password })\n\n      setIsLoading(false)\n\n      navigate('vault', { recordType: 'all' })\n    } catch (error) {\n      setErrors({\n        password: i18n._('Invalid password')\n      })\n\n      setIsLoading(false)\n\n      logger.error('useGetMultipleFiles', 'Error unlocking vault:', error)\n    }\n  }\n\n  return html`\n    <${CardContainer} onSubmit=${handleSubmit(onSubmit)}>\n      <${CardTitle}>\n        <${Title}> ${i18n._('Enter Vault Password')} <//>\n      <//>\n\n      <${PearPassPasswordField}\n        placeholder=${i18n._('Enter Vault Password')}\n        ...${register('password')}\n      />\n\n      <${ButtonWrapper}>\n        <${ButtonPrimary} type=\"submit\"> ${i18n._('Unlock Vault')} <//>\n\n        <${ButtonSecondary}\n          onClick=${() => navigate(currentPage, { state: 'vaults' })}\n        >\n          ${i18n._('Select vaults')}\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardUnlockVault/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const CardContainer = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 30px;\n  justify-content: center;\n  width: 480px;\n`\n\nexport const CardTitle = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  justify-content: center;\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\n\nexport const VaultsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  gap: 10px;\n`\n\nexport const ButtonWrapper = styled.div`\n  display: flex;\n  gap: 25px;\n  align-self: center;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/CardUploadBackupFile/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { html } from 'htm/react'\n\nimport { Header, UploadFileTitle, Wrapper } from './styles'\nimport { FileUploadContent } from '../../../components/FileUploadContent'\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { useRouter } from '../../../context/RouterContext'\nimport { ArrowLeftIcon, ButtonLittle } from '../../../lib-react-components'\n\nexport const CardUploadBackupFile = () => {\n  const { i18n } = useLingui()\n  const { navigate } = useRouter()\n\n  const handleGoBack = () => {\n    navigate('welcome', { state: NAVIGATION_ROUTES.VAULTS })\n  }\n\n  return html` <${Wrapper}>\n    <${Header}>\n      <${ButtonLittle}\n        onClick=${handleGoBack}\n        variant=\"secondary\"\n        startIcon=${ArrowLeftIcon}\n      />\n      <${UploadFileTitle}>${i18n._('Upload the backup file')}<//>\n    <//>\n    <${FileUploadContent} />\n  <//>`\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardUploadBackupFile/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const Wrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 18px;\n  width: 480px;\n`\nexport const Header = styled.div`\n  width: 100%;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n`\n\nexport const UploadFileTitle = styled.span`\n  position: absolute;\n  left: 50%;\n  transform: translateX(-50%);\n  white-space: nowrap;\n\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 24px;\n  font-style: normal;\n  font-weight: 600;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/CardVaultSelect/index.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { colors } from '@tetherto/pearpass-lib-ui-theme-provider'\nimport { useVault, useVaults } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\n\nimport {\n  ButtonWrapper,\n  CardContainer,\n  CardNoVaultsText,\n  CardTitle,\n  ImportContainer,\n  ImportText,\n  Title,\n  VaultsContainer\n} from './styles'\nimport { ListItem } from '../../../components/ListItem'\nimport { useRouter } from '../../../context/RouterContext'\nimport {\n  ButtonPrimary,\n  ButtonSecondary,\n  CommonFileIcon\n} from '../../../lib-react-components'\nimport { sortByName } from '../../../utils/sortByName'\nimport { vaultCreatedFormat } from '../../../utils/vaultCreated'\n\nexport const CardVaultSelect = () => {\n  const { i18n } = useLingui()\n  const { currentPage, navigate } = useRouter()\n\n  const { data } = useVaults()\n\n  const { isVaultProtected, refetch: refetchVault } = useVault()\n\n  const handleLoadVault = () => {\n    navigate(currentPage, { state: 'loadVault' })\n  }\n\n  const handleSelectVault = async (vaultId) => {\n    const isProtected = await isVaultProtected(vaultId)\n\n    if (isProtected) {\n      navigate(currentPage, { state: 'vaultPassword', vaultId: vaultId })\n\n      return\n    }\n\n    await refetchVault(vaultId)\n\n    navigate('vault', { recordType: 'all' })\n  }\n\n  const handleCreateNewVault = () => {\n    navigate(currentPage, { state: 'newVaultCredentials' })\n  }\n\n  const handleUploadBackupFile = () => {\n    navigate(currentPage, { state: 'uploadBackupFile' })\n  }\n\n  const hasVaults = data && data.length > 0\n\n  return html`\n    <${CardContainer}>\n      <${CardTitle}>\n        <${Title} data-testid=\"vault-title\">\n          ${data?.length > 0\n            ? i18n._('Open an existing vault or create a new one.')\n            : i18n._('Set up your vault')}\n        <//>\n      <//>\n\n      ${hasVaults\n        ? html` <${VaultsContainer}>\n            ${sortByName(data).map(\n              (vault) =>\n                html`<${ListItem}\n                  onClick=${() => handleSelectVault(vault.id)}\n                  itemName=${vault.name}\n                  itemDateText=${vaultCreatedFormat(vault.createdAt)}\n                  testId=${`vault-item-${vault.name}`}\n                />`\n            )}\n          <//>`\n        : html`<${CardNoVaultsText}>\n            ${i18n._(\n              'Start fresh with a new vault or import an existing one to continue.'\n            )}\n          <//> `}\n\n      <${ButtonWrapper}>\n        <${ButtonPrimary}\n          testId=\"vault-create-button\"\n          onClick=${handleCreateNewVault}\n        >\n          ${i18n._('Create a new vault')}\n        <//>\n\n        <${ButtonSecondary}\n          testId=\"vault-load-button\"\n          onClick=${handleLoadVault}\n        >\n          ${i18n._('Import existing vault')}\n        <//>\n      <//>\n\n      <!-- Will be visible when the feature is added-->\n      <!-- ${!hasVaults &&\n      html`\n        <${ImportContainer}>\n          ${i18n._('Or')}\n          <${CommonFileIcon} size=\"21\" color=${colors.primary400.mode1} />\n          <${ImportText} onClick=${handleUploadBackupFile}>\n            ${i18n._('import from a backup file')}\n          <//>\n        <//>\n      `} -->\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/CardVaultSelect/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const CardContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 30px;\n  justify-content: center;\n  width: 480px;\n`\n\nexport const CardTitle = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  justify-content: center;\n`\n\nexport const Title = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  text-align: center;\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n`\n\nexport const VaultsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  gap: 10px;\n  overflow: scroll;\n  max-height: 35vh;\n`\n\nexport const ButtonWrapper = styled.div`\n  display: flex;\n  gap: 25px;\n  align-self: center;\n`\n\nexport const ImportContainer = styled.div`\n  display: flex;\n  gap: 5px;\n  align-items: center;\n  justify-content: center;\n`\n\nexport const ImportText = styled.span`\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  cursor: pointer;\n  text-align: center;\n  align-self: center;\n  font-family: 'Inter';\n  font-size: 16px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n  text-decoration-line: underline;\n  text-decoration-style: solid;\n  text-decoration-skip-ink: auto;\n  text-decoration-thickness: auto;\n  text-underline-offset: auto;\n  text-underline-position: from-font;\n`\nexport const CardNoVaultsText = styled.span`\n  color: ${({ theme }) => theme.colors.white.mode1};\n\n  margin: 0 auto;\n  width: 293px;\n  text-align: center;\n  font-family: Inter;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/LockedScreen/Timer.js",
    "content": "import { useCountDown } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { html } from 'htm/react'\n\n/**\n * Timer component that displays a countdown from an initial number of seconds.\n *\n * @component\n * @param {Object} props - Component props\n * @param {number} props.initialSeconds - The initial number of seconds to count down from\n * @param {Function} [props.onFinish] - Optional callback function to be called when the countdown reaches zero\n * @returns {string}\n */\nexport const Timer = ({ initialSeconds, onFinish }) => {\n  const timeRemaining = useCountDown({\n    initialSeconds,\n    onFinish\n  })\n  return html`${timeRemaining}`\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/LockedScreen/index.js",
    "content": "import { useEffect, useState, useCallback } from 'react'\n\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\nimport { html } from 'htm/react'\nimport { useTheme } from 'styled-components'\n\nimport {\n  CardContainer,\n  Header,\n  Title,\n  Description,\n  TimerContainer,\n  TimerLabel,\n  TimerValue\n} from './styles'\nimport { Timer } from './Timer'\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { LockIcon, TimeIcon } from '../../../lib-react-components'\n\nexport const LockedScreen = () => {\n  const { t } = useTranslation()\n  const theme = useTheme()\n  const { navigate } = useRouter()\n  const { refreshMasterPasswordStatus } = useUserData()\n  const [masterPasswordStatus, setMasterPasswordStatus] = useState()\n  const [isLoading, setIsLoading] = useState(true)\n\n  useEffect(() => {\n    ;(async () => {\n      const status = await refreshMasterPasswordStatus()\n      setMasterPasswordStatus(status)\n      setIsLoading(false)\n    })()\n  }, [])\n\n  const onFinish = useCallback(async () => {\n    const status = await refreshMasterPasswordStatus()\n\n    if (!status?.isLocked) {\n      navigate('welcome', { state: NAVIGATION_ROUTES.MASTER_PASSWORD })\n    }\n  }, [navigate, refreshMasterPasswordStatus])\n\n  return html`\n    <${CardContainer}>\n      <${Header}>\n        <${LockIcon} \n          width=\"32\" \n          height=\"32\" \n          color=${theme.colors.primary400.mode1} \n        />\n        <${Title}>${t('PearPass locked')}</>\n      </>\n\n      <${Description}>\n        <span>${t('Too many failed attempts.')}</span>\n        <span>${t('For your security, access is locked.')}</span>\n      </>\n\n      <${TimerContainer}>\n        <${TimerLabel}>\n          <${TimeIcon} \n            width=\"20\" \n            height=\"20\" \n            color=${theme.colors.primary400.mode1} \n          />\n          ${t('Try again in')}\n        </>\n        <${TimerValue}>\n          ${\n            !isLoading &&\n            html`<${Timer}\n              initialSeconds=${Math.ceil(\n                (masterPasswordStatus?.lockoutRemainingMs ?? 0) / 1000\n              )}\n              onFinish=${onFinish}\n            />`\n          }\n        </>\n      </>\n    </>\n  `\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/LockedScreen/styles.js",
    "content": "import styled from 'styled-components'\n\nexport const CardContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n`\n\nexport const Header = styled.div`\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  gap: 10px;\n  margin-bottom: 10px;\n`\n\nexport const Title = styled.h2`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 20px;\n  font-style: normal;\n  font-weight: 700;\n  line-height: normal;\n  margin: 0;\n`\n\nexport const Description = styled.div`\n  display: flex;\n  flex-direction: column;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n  margin: 0;\n`\n\nexport const TimerContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  margin-top: 15px;\n  align-items: center;\n  width: 600px;\n  padding: 7px 10px;\n  border-radius: 10px;\n  background: rgba(255, 255, 255, 0.05);\n`\n\nexport const TimerLabel = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Inter';\n  font-size: 14px;\n  font-weight: 400;\n`\n\nexport const TimerValue = styled.span`\n  color: ${({ theme }) => theme.colors.primary400.mode1};\n  font-family: 'Inter';\n  font-size: 20px;\n  font-weight: 700;\n  line-height: normal;\n`\n"
  },
  {
    "path": "src/pages/WelcomePage/LockedScreenV2/LockedScreenV2.styles.ts",
    "content": "import type { ThemeColors } from '@tetherto/pearpass-lib-ui-kit'\nimport { rawTokens } from '@tetherto/pearpass-lib-ui-kit'\n\nexport const createStyles = (colors: ThemeColors) => ({\n  root: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    alignItems: 'stretch',\n    width: '100%',\n    minHeight: '100%',\n    boxSizing: 'border-box' as const\n  },\n  main: {\n    flex: 1,\n    display: 'flex',\n    flexDirection: 'column' as const,\n    alignItems: 'center',\n    justifyContent: 'center',\n    width: '100%',\n    minHeight: 0,\n    maxWidth: '520px',\n    marginLeft: 'auto',\n    marginRight: 'auto',\n    padding: `${rawTokens.spacing16}px ${rawTokens.spacing24}px`,\n    textAlign: 'center' as const,\n    boxSizing: 'border-box' as const\n  },\n\n  pageHeaderWrap: {\n    marginBottom: `${rawTokens.spacing6}px`,\n    width: '100%'\n  },\n\n  description: {\n    display: 'flex',\n    flexDirection: 'column' as const,\n    gap: `${rawTokens.spacing4}px`,\n    maxWidth: '420px'\n  },\n\n  descriptionText: {\n    fontSize: `${rawTokens.fontSize14}px`,\n    fontWeight: rawTokens.weightRegular,\n    color: colors.colorTextSecondary,\n    margin: 0\n  },\n\n  pill: {\n    display: 'flex',\n    flexDirection: 'row' as const,\n    alignItems: 'center',\n    justifyContent: 'space-between',\n    width: '100%',\n    maxWidth: '440px',\n    marginTop: `${rawTokens.spacing24}px`,\n    padding: `${rawTokens.spacing10}px ${rawTokens.spacing8}px`,\n    borderRadius: `${rawTokens.spacing10}px`,\n    border: `1px solid ${colors.colorBorderPrimary}`,\n    boxSizing: 'border-box' as const\n  },\n\n  pillText: {\n    fontSize: `${rawTokens.fontSize14}px`,\n    fontWeight: rawTokens.weightMedium,\n    color: colors.colorTextSecondary\n  },\n\n  pillLeft: {\n    display: 'flex',\n    flexDirection: 'row' as const,\n    alignItems: 'center',\n    gap: `${rawTokens.spacing8}px`,\n    minWidth: 0\n  },\n\n  countdown: {\n    color: colors.colorPrimary,\n    fontVariantNumeric: 'tabular-nums' as const,\n    fontSize: `${rawTokens.fontSize14}px`,\n    fontWeight: rawTokens.weightMedium,\n    flexShrink: 0 as const\n  }\n})\n"
  },
  {
    "path": "src/pages/WelcomePage/LockedScreenV2/LockedScreenV2.test.tsx",
    "content": "/// <reference types=\"@testing-library/jest-dom\" />\n\nimport React from 'react'\n\nimport '@testing-library/jest-dom'\nimport { act, render, screen, waitFor } from '@testing-library/react'\n\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { LockedScreenV2 } from './LockedScreenV2'\n\n;(globalThis as { React?: typeof React }).React = React\n\ntype MasterPasswordLockStatus = {\n  isLocked?: boolean\n  lockoutRemainingMs?: number\n}\n\nconst mockNavigate = jest.fn()\njest.mock('../../../context/RouterContext', () => ({\n  useRouter: () => ({ navigate: mockNavigate })\n}))\n\njest.mock('../../../hooks/useTranslation', () => ({\n  useTranslation: () => ({\n    t: (str: string) => str\n  })\n}))\n\njest.mock('../../../components/OnboardingShell', () => ({\n  OnboardingShell: ({ children }: { children: React.ReactNode }) => (\n    <div data-testid=\"onboarding-shell-mock\">{children}</div>\n  )\n}))\n\nconst mockRefreshMasterPasswordStatus = jest.fn<\n  () => Promise<MasterPasswordLockStatus | undefined>\n>()\n\njest.mock('@tetherto/pearpass-lib-vault', () => ({\n  useUserData: () => ({\n    refreshMasterPasswordStatus: mockRefreshMasterPasswordStatus\n  })\n}))\n\njest.mock('@tetherto/pearpass-lib-ui-kit', () => {\n  const actual = jest.requireActual<\n    typeof import('@tetherto/pearpass-lib-ui-kit')\n  >('@tetherto/pearpass-lib-ui-kit')\n\n  return {\n    ...actual,\n    useTheme: () => ({\n      theme: {\n        colors: {\n          colorTextSecondary: '#BDC3AC',\n          colorBorderPrimary: '#212814',\n          colorPrimary: '#B0D944'\n        }\n      }\n    }),\n    PageHeader: ({\n      title,\n      testID\n    }: {\n      title: React.ReactNode\n      testID?: string\n    }) => <h1 data-testid={testID}>{title}</h1>\n  }\n})\n\njest.mock('@tetherto/pearpass-lib-ui-kit/icons', () => ({\n  WatchLater: () => <span data-testid=\"icon-watch-later\" />\n}))\n\nconst mockUseCountDown = jest.fn(\n  (_opts: { initialSeconds: number; onFinish: () => void | Promise<void> }) =>\n    '00:42'\n)\n\njest.mock('@tetherto/pear-apps-lib-ui-react-hooks', () => ({\n  useCountDown: (opts: {\n    initialSeconds: number\n    onFinish: () => void | Promise<void>\n  }) => mockUseCountDown(opts)\n}))\n\ndescribe('LockedScreenV2', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n    mockUseCountDown.mockImplementation(() => '00:42')\n    mockRefreshMasterPasswordStatus.mockResolvedValue({\n      isLocked: true,\n      lockoutRemainingMs: 60_000\n    })\n  })\n\n  it('renders headline, description, try-again label, and shell', async () => {\n    render(<LockedScreenV2 />)\n\n    expect(screen.getByTestId('locked-screen-v2')).toBeInTheDocument()\n    expect(screen.getByTestId('onboarding-shell-mock')).toBeInTheDocument()\n    expect(screen.getByTestId('locked-screen-headline-v2').textContent).toBe(\n      'PearPass locked'\n    )\n    expect(screen.getByTestId('locked-screen-desc-line1-v2').textContent).toBe(\n      'Too many failed attempts.'\n    )\n    expect(screen.getByTestId('locked-screen-desc-line2-v2').textContent).toBe(\n      'For your security, access is temporarily locked.'\n    )\n    expect(screen.getByTestId('locked-screen-try-label-v2').textContent).toBe(\n      'Try again in'\n    )\n\n    await waitFor(() => {\n      expect(mockRefreshMasterPasswordStatus).toHaveBeenCalled()\n    })\n    await waitFor(() => {\n      expect(screen.getByTestId('locked-screen-countdown-v2')).toBeInTheDocument()\n    })\n  })\n\n  it('shows countdown placeholder until status resolves with remaining lockout', async () => {\n    let resolveStatus: (value: MasterPasswordLockStatus) => void = () => {}\n    mockRefreshMasterPasswordStatus.mockImplementation(\n      () =>\n        new Promise<MasterPasswordLockStatus | undefined>((resolve) => {\n          resolveStatus = resolve\n        })\n    )\n\n    render(<LockedScreenV2 />)\n\n    expect(\n      screen.getByTestId('locked-screen-countdown-placeholder-v2')\n    ).toBeInTheDocument()\n    expect(screen.queryByTestId('locked-screen-countdown-v2')).not.toBeInTheDocument()\n\n    act(() => {\n      resolveStatus({ isLocked: true, lockoutRemainingMs: 30_000 })\n    })\n\n    await waitFor(() => {\n      expect(screen.getByTestId('locked-screen-countdown-v2')).toBeInTheDocument()\n    })\n  })\n\n  it('shows live countdown when lockout remaining is positive after load', async () => {\n    render(<LockedScreenV2 />)\n\n    await waitFor(() => {\n      expect(screen.getByTestId('locked-screen-countdown-v2')).toBeInTheDocument()\n    })\n    expect(screen.queryByTestId('locked-screen-countdown-placeholder-v2')).not.toBeInTheDocument()\n    expect(screen.getByTestId('locked-screen-countdown-v2').textContent).toBe(\n      '00:42'\n    )\n  })\n\n  it('passes ceil(seconds) from lockoutRemainingMs to useCountDown', async () => {\n    mockRefreshMasterPasswordStatus.mockResolvedValue({\n      isLocked: true,\n      lockoutRemainingMs: 5500\n    })\n\n    render(<LockedScreenV2 />)\n\n    await waitFor(() => {\n      expect(mockUseCountDown).toHaveBeenCalled()\n    })\n\n    expect(mockUseCountDown).toHaveBeenCalledWith(\n      expect.objectContaining({ initialSeconds: 6 })\n    )\n  })\n\n  it('refreshes status on mount', async () => {\n    render(<LockedScreenV2 />)\n\n    await waitFor(() => {\n      expect(mockRefreshMasterPasswordStatus).toHaveBeenCalledTimes(1)\n    })\n  })\n\n  it('navigates to master password when countdown finishes and vault reports unlocked', async () => {\n    let onFinish: (() => void | Promise<void>) | undefined\n\n    mockUseCountDown.mockImplementation(\n      (opts: { initialSeconds: number; onFinish: () => void | Promise<void> }) => {\n        onFinish = opts.onFinish\n        return '00:01'\n      }\n    )\n\n    mockRefreshMasterPasswordStatus\n      .mockResolvedValueOnce({\n        isLocked: true,\n        lockoutRemainingMs: 1000\n      })\n      .mockResolvedValueOnce({ isLocked: false })\n\n    render(<LockedScreenV2 />)\n\n    await waitFor(() => {\n      expect(onFinish).toBeDefined()\n    })\n\n    await act(async () => {\n      await onFinish?.()\n    })\n\n    expect(mockRefreshMasterPasswordStatus).toHaveBeenCalledTimes(2)\n    expect(mockNavigate).toHaveBeenCalledWith('welcome', {\n      state: NAVIGATION_ROUTES.MASTER_PASSWORD\n    })\n  })\n\n  it('does not navigate when status is still locked after countdown callback', async () => {\n    let onFinish: (() => void | Promise<void>) | undefined\n\n    mockUseCountDown.mockImplementation(\n      (opts: { initialSeconds: number; onFinish: () => void | Promise<void> }) => {\n        onFinish = opts.onFinish\n        return '00:01'\n      }\n    )\n\n    mockRefreshMasterPasswordStatus\n      .mockResolvedValueOnce({\n        isLocked: true,\n        lockoutRemainingMs: 1000\n      })\n      .mockResolvedValueOnce({ isLocked: true })\n\n    render(<LockedScreenV2 />)\n\n    await waitFor(() => {\n      expect(onFinish).toBeDefined()\n    })\n\n    await act(async () => {\n      await onFinish?.()\n    })\n\n    expect(mockNavigate).not.toHaveBeenCalled()\n  })\n\n  it('keeps placeholder when lockout remaining rounds to zero seconds', async () => {\n    mockRefreshMasterPasswordStatus.mockResolvedValue({\n      isLocked: true,\n      lockoutRemainingMs: 0\n    })\n\n    render(<LockedScreenV2 />)\n\n    await waitFor(() => {\n      expect(mockRefreshMasterPasswordStatus).toHaveBeenCalled()\n    })\n\n    expect(\n      screen.getByTestId('locked-screen-countdown-placeholder-v2')\n    ).toBeInTheDocument()\n    expect(mockUseCountDown).not.toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/pages/WelcomePage/LockedScreenV2/LockedScreenV2.tsx",
    "content": "import React, { useCallback, useEffect, useState } from 'react'\n\nimport { useCountDown } from '@tetherto/pear-apps-lib-ui-react-hooks'\nimport { useUserData } from '@tetherto/pearpass-lib-vault'\nimport { PageHeader, useTheme } from '@tetherto/pearpass-lib-ui-kit'\nimport { WatchLater } from '@tetherto/pearpass-lib-ui-kit/icons'\n\nimport { OnboardingShell } from '../../../components/OnboardingShell'\nimport { NAVIGATION_ROUTES } from '../../../constants/navigation'\nimport { useRouter } from '../../../context/RouterContext'\nimport { useTranslation } from '../../../hooks/useTranslation'\nimport { createStyles } from './LockedScreenV2.styles'\n\ntype LockCountdownProps = {\n  initialSeconds: number\n  onFinish: () => void | Promise<void>\n  style: React.CSSProperties\n}\n\nconst LockCountdown = ({\n  initialSeconds,\n  onFinish,\n  style\n}: LockCountdownProps) => {\n  const timeRemaining = useCountDown({ initialSeconds, onFinish })\n  \n  return (\n    <span data-testid=\"locked-screen-countdown-v2\" style={style}>\n      {timeRemaining}\n    </span>\n  )\n}\n\nexport const LockedScreenV2 = (): React.ReactElement => {\n  const { t } = useTranslation()\n  const { theme } = useTheme()\n  const styles = createStyles(theme.colors)\n  const { navigate } = useRouter()\n  const { refreshMasterPasswordStatus } = useUserData()\n  const [masterPasswordStatus, setMasterPasswordStatus] = useState<\n    { isLocked?: boolean; lockoutRemainingMs?: number } | undefined\n  >(undefined)\n  const [isLoading, setIsLoading] = useState(true)\n\n  useEffect(() => {\n    void (async () => {\n      const status = await refreshMasterPasswordStatus()\n      setMasterPasswordStatus(status)\n      setIsLoading(false)\n    })()\n  }, [])\n\n  const onFinish = useCallback(async () => {\n    const status = await refreshMasterPasswordStatus()\n\n    if (!status?.isLocked) {\n      navigate('welcome', { state: NAVIGATION_ROUTES.MASTER_PASSWORD })\n    }\n  }, [navigate, refreshMasterPasswordStatus])\n\n  const initialSeconds = Math.ceil(\n    (masterPasswordStatus?.lockoutRemainingMs ?? 0) / 1000\n  )\n\n  return (\n    <OnboardingShell background=\"solid\">\n      <div style={styles.root} data-testid=\"locked-screen-v2\">\n        <div style={styles.main}>\n          <div style={styles.pageHeaderWrap}>\n            <PageHeader\n              as=\"h1\"\n              title={t('PearPass locked')}\n              testID=\"locked-screen-headline-v2\"\n            />\n          </div>\n\n          <div style={styles.description}>\n            <p\n              style={styles.descriptionText}\n              data-testid=\"locked-screen-desc-line1-v2\"\n            >\n              {t('Too many failed attempts.')}\n            </p>\n            <p\n              style={styles.descriptionText}\n              data-testid=\"locked-screen-desc-line2-v2\"\n            >\n              {t('For your security, access is temporarily locked.')}\n            </p>\n          </div>\n\n          <div style={styles.pill}>\n            <div style={styles.pillLeft}>\n              <WatchLater\n                width={20}\n                height={20}\n                color={theme.colors.colorTextSecondary}\n              />\n              <span\n                style={styles.pillText}\n                data-testid=\"locked-screen-try-label-v2\"\n              >\n                {t('Try again in')}\n              </span>\n            </div>\n            {!isLoading && initialSeconds > 0 ? (\n              <LockCountdown\n                initialSeconds={initialSeconds}\n                onFinish={onFinish}\n                style={styles.countdown}\n              />\n            ) : (\n              <span\n                style={styles.countdown}\n                data-testid=\"locked-screen-countdown-placeholder-v2\"\n              >\n                —\n              </span>\n            )}\n          </div>\n        </div>\n      </div>\n    </OnboardingShell>\n  )\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/index.js",
    "content": "import React from 'react'\n\nimport { html } from 'htm/react'\n\nimport { CardCreateMasterPassword } from './CardCreateMasterPassword'\nimport { CardCreateMasterPasswordV2 } from './CardCreateMasterPasswordV2'\nimport { CardLoadVault } from './CardLoadVault'\nimport { CardNewVaultCredentials } from './CardNewVaultCredentials'\nimport { CardUnlockPearPass } from './CardUnlockPearPass'\nimport { CardUnlockPearPassV2 } from './CardUnlockPearPassV2'\nimport { CardUnlockVault } from './CardUnlockVault'\nimport { CardUploadBackupFile } from './CardUploadBackupFile'\nimport { CardVaultSelect } from './CardVaultSelect'\nimport { LockedScreen } from './LockedScreen'\nimport { LockedScreenV2 } from './LockedScreenV2/LockedScreenV2'\nimport { CardVaultActions, PageContainer } from './styles'\nimport { InitialPageWrapper } from '../../components/InitialPageWrapper'\nimport { NAVIGATION_ROUTES } from '../../constants/navigation'\nimport { useRouter } from '../../context/RouterContext'\nimport { isV2 } from '../../utils/designVersion'\n\nconst V2_STATES = new Set([\n  NAVIGATION_ROUTES.CREATE_MASTER_PASSWORD,\n  NAVIGATION_ROUTES.MASTER_PASSWORD,\n  NAVIGATION_ROUTES.SCREEN_LOCKED\n])\n\nexport const WelcomePage = () => {\n  const { data } = useRouter()\n\n  const Card = React.useMemo(() => {\n    switch (data.state) {\n      case NAVIGATION_ROUTES.CREATE_MASTER_PASSWORD:\n        return isV2() ? CardCreateMasterPasswordV2 : CardCreateMasterPassword\n      case NAVIGATION_ROUTES.MASTER_PASSWORD:\n        return isV2() ? CardUnlockPearPassV2 : CardUnlockPearPass\n      case NAVIGATION_ROUTES.VAULTS:\n        return CardVaultSelect\n      case NAVIGATION_ROUTES.LOAD_VAULT:\n        return CardLoadVault\n      case NAVIGATION_ROUTES.UPLOAD_BACKUP_FILE:\n        return CardUploadBackupFile\n      case NAVIGATION_ROUTES.VAULT_PASSWORD:\n        return CardUnlockVault\n      case NAVIGATION_ROUTES.NEW_VAULT_CREDENTIALS:\n        return CardNewVaultCredentials\n      case NAVIGATION_ROUTES.SCREEN_LOCKED:\n        return isV2() ? LockedScreenV2 : LockedScreen\n      default:\n        return null\n    }\n  }, [data.state])\n\n  if (isV2() && V2_STATES.has(data.state)) {\n    return html`<${Card} />`\n  }\n\n  return html`\n    <${InitialPageWrapper} isAuthScreen=${true}>\n      <${PageContainer}>\n        <${CardVaultActions}>\n          <${Card} />\n        <//>\n      <//>\n    <//>\n  `\n}\n"
  },
  {
    "path": "src/pages/WelcomePage/styles.js",
    "content": "import styled, { css } from 'styled-components'\n\nimport { isV2 } from '../../utils/designVersion'\n\nexport const PageContainer = styled.div`\n  width: 100%;\n  min-height: 100%;\n  z-index: 100;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`\n\nexport const Title = styled.p`\n  width: 638px;\n  color: ${({ theme }) => theme.colors.white.mode1};\n  font-family: 'Humble Nostalgia';\n  font-size: clamp(1rem, 8vw, 10rem);\n  font-style: normal;\n  font-weight: 400;\n  line-height: normal;\n`\n\nexport const CardVaultActions = styled.div`\n  display: inline-flex;\n  padding: 20px;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  background: ${({ theme }) => theme.colors.grey400.mode1};\n  border: 1px solid ${({ theme }) => theme.colors.grey100.mode1};\n  border-radius: 20px;\n  padding: 20px;\n  z-index: 100;\n\n  ${isV2()\n    ? css`\n        margin-top: 20px;\n      `\n    : css`\n        position: absolute;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n      `}\n`\n\nexport const ActionCardTitle = styled.p`\n  color: ${({ theme }) => theme.colors.white.mode1};\n  width: 293px;\n  font-family: 'Inter';\n  text-align: center;\n  font-size: 29px;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 39px;\n`\n\nexport const Actions = styled.div`\n  width: 100%;\n  display: flex;\n  justify-content: center;\n  gap: 25px;\n`\n\nexport const PearHand = styled.img`\n  width: 100%;\n`\n\nexport const ImageContainer = styled.div`\n  position: absolute;\n  right: -5%;\n  z-index: 0;\n`\n"
  },
  {
    "path": "src/services/createOrGetPearpassClient.js",
    "content": "import { PearpassVaultClient } from '@tetherto/pearpass-lib-vault-core'\n\nlet pearpassClient = null\n\n/**\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} [ipc]\n * @param {string} [storagePath]  absolute path where vaults live\n * @param {{ debugMode?: boolean }} [opts={}]\n * @returns {PearpassVaultClient}\n */\nexport function createOrGetPearpassClient(ipc, storagePath, opts = {}) {\n  if (!pearpassClient) {\n    // If we're given an already-constructed client-like object\n    // proxy or a real PearpassVaultClient), reuse it directly instead of creating\n    // a new low-level client.\n    if (ipc && typeof ipc.encryptionGetStatus === 'function') {\n      pearpassClient = ipc\n    } else {\n      if (!ipc || !storagePath) {\n        throw new Error(\n          'createOrGetPearpassClient: ipc and storagePath are required for initial client creation'\n        )\n      }\n      pearpassClient = new PearpassVaultClient(ipc, storagePath, opts)\n    }\n  }\n\n  return pearpassClient\n}\n"
  },
  {
    "path": "src/services/createOrGetPearpassClient.test.js",
    "content": "import { PearpassVaultClient } from '@tetherto/pearpass-lib-vault-core'\n\nimport { createOrGetPearpassClient } from './createOrGetPearpassClient'\n\njest.mock('@tetherto/pearpass-lib-vault-core', () => ({\n  PearpassVaultClient: jest.fn()\n}))\n\ndescribe('createOrGetPearpassClient', () => {\n  const mockIpc = { send: jest.fn() }\n  const mockStoragePath = '/mock/storage/path'\n  const mockOpts = { debugMode: true }\n\n  beforeEach(() => {\n    jest.resetModules()\n  })\n\n  it('should instantiate PearpassVaultClient with correct arguments', () => {\n    const client = createOrGetPearpassClient(mockIpc, mockStoragePath, mockOpts)\n\n    expect(PearpassVaultClient).toHaveBeenCalledWith(\n      mockIpc,\n      mockStoragePath,\n      mockOpts\n    )\n    expect(client).toBeInstanceOf(PearpassVaultClient)\n  })\n\n  it('should reuse the same instance if called multiple times', () => {\n    const firstClient = createOrGetPearpassClient(\n      mockIpc,\n      mockStoragePath,\n      mockOpts\n    )\n    const secondClient = createOrGetPearpassClient(\n      mockIpc,\n      mockStoragePath,\n      mockOpts\n    )\n\n    expect(PearpassVaultClient).toHaveBeenCalledTimes(1)\n    expect(secondClient).toBe(firstClient)\n  })\n\n  it('should pass default options if opts is not provided', () => {\n    createOrGetPearpassClient(mockIpc, mockStoragePath, { debugMode: true })\n    expect(PearpassVaultClient).toHaveBeenCalledWith(mockIpc, mockStoragePath, {\n      debugMode: true\n    })\n  })\n\n  it('should not re-instantiate after first call even with different opts', () => {\n    const firstClient = createOrGetPearpassClient(mockIpc, mockStoragePath, {\n      debugMode: false\n    })\n    const secondClient = createOrGetPearpassClient(mockIpc, mockStoragePath, {\n      debugMode: true\n    })\n\n    expect(firstClient).toBe(secondClient)\n    expect(PearpassVaultClient).toHaveBeenCalledTimes(1)\n  })\n})\n"
  },
  {
    "path": "src/services/createOrGetPipe.js",
    "content": "/** @typedef {import('pear-interface')} */ /* global Pear */\nimport pearRun from 'pear-run'\n\nlet pipe\n\nconst WORKLET_PATH_DEV =\n  './node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.cjs'\nconst WORKLET_PATH_PROD =\n  Pear.config.applink +\n  '/node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.cjs'\n\n/**\n * @returns {Pipe} The Pear worker pipe.\n */\nexport const createOrGetPipe = () => {\n  if (pipe) {\n    return pipe\n  }\n\n  pipe = pearRun(Pear.config.key ? WORKLET_PATH_PROD : WORKLET_PATH_DEV)\n\n  Pear.teardown(() => {\n    if (pipe) {\n      pipe.end()\n      pipe = null\n    }\n  })\n\n  return pipe\n}\n"
  },
  {
    "path": "src/services/createOrGetPipe.test.js",
    "content": "const mockRun = jest.fn()\n\njest.mock('pear-run', () => mockRun)\n\ndescribe('createOrGetPipe', () => {\n  let mockPipe\n  let teardownCallback\n\n  beforeEach(() => {\n    jest.resetModules()\n    jest.clearAllMocks()\n\n    mockPipe = { end: jest.fn() }\n    mockRun.mockReturnValue(mockPipe)\n\n    global.Pear = {\n      teardown: jest.fn((callback) => {\n        teardownCallback = callback\n      }),\n      config: {\n        key: 'test-key',\n        applink: 'https://example.com'\n      }\n    }\n  })\n\n  afterEach(() => {\n    delete global.Pear\n  })\n\n  it('creates a new pipe when none exists', () => {\n    const { createOrGetPipe } = require('./createOrGetPipe')\n    const pipe = createOrGetPipe()\n\n    expect(mockRun).toHaveBeenCalledWith(\n      'https://example.com/node_modules/@tetherto/pearpass-lib-vault-core/src/worklet/app.cjs'\n    )\n    expect(pipe).toBe(mockPipe)\n  })\n\n  it('returns the existing pipe on subsequent calls', () => {\n    const { createOrGetPipe } = require('./createOrGetPipe')\n    const first = createOrGetPipe()\n    const second = createOrGetPipe()\n\n    expect(mockRun).toHaveBeenCalledTimes(1)\n    expect(second).toBe(first)\n  })\n\n  it('registers and invokes teardown callback, ending and resetting the pipe', () => {\n    const { createOrGetPipe } = require('./createOrGetPipe')\n    createOrGetPipe()\n\n    teardownCallback()\n\n    expect(mockPipe.end).toHaveBeenCalled()\n\n    const recreated = createOrGetPipe()\n    expect(mockRun).toHaveBeenCalledTimes(2)\n    expect(recreated).toBe(mockPipe)\n  })\n})\n"
  },
  {
    "path": "src/services/handlers/EncryptionHandlers.js",
    "content": "import { stringToBuffer } from '@tetherto/pearpass-lib-vault/src/utils/buffer'\n\nimport { HANDLER_EVENTS } from '../../constants/services'\nimport { logger } from '../../utils/logger'\n\n/**\n * Handles encryption-related IPC operations\n */\nexport class EncryptionHandlers {\n  constructor(client) {\n    this.client = client\n  }\n\n  async encryptionInit() {\n    await this.client.encryptionInit()\n    return { initialized: true }\n  }\n\n  async encryptionGetStatus() {\n    return await this.client.encryptionGetStatus()\n  }\n\n  async encryptionGet(params) {\n    const result = await this.client.encryptionGet(params.key)\n    logger.debug('ENCRYPTION-HANDLER', `encryptionGet for key: ${params.key}`)\n    return result\n  }\n\n  async encryptionAdd(params) {\n    await this.client.encryptionAdd(params.key, params.data)\n    return { success: true }\n  }\n\n  async hashPassword(params) {\n    return await this.client.hashPassword(params.password)\n  }\n\n  async encryptVaultKeyWithHashedPassword(params) {\n    return await this.client.encryptVaultKeyWithHashedPassword(\n      params.hashedPassword\n    )\n  }\n\n  async encryptVaultWithKey(params) {\n    return await this.client.encryptVaultWithKey(\n      params.hashedPassword,\n      params.key\n    )\n  }\n\n  async getDecryptionKey(params) {\n    logger.info('ENCRYPTION-HANDLER', `Getting decryption key`)\n    const result = await this.client.getDecryptionKey({\n      salt: params.salt,\n      password: params.password\n    })\n    logger.info('ENCRYPTION-HANDLER', `Decryption key obtained`)\n    return result\n  }\n\n  async decryptVaultKey(params) {\n    logger.debug('ENCRYPTION-HANDLER', `Decrypting vault key`)\n    const result = await this.client.decryptVaultKey({\n      ciphertext: params.ciphertext,\n      nonce: params.nonce,\n      hashedPassword: params.hashedPassword\n    })\n\n    return result\n  }\n\n  async recordFailedMasterPassword() {\n    logger.info('ENCRYPTION-HANDLER', `Recording failed attempt`)\n    return await this.client.recordFailedMasterPassword()\n  }\n\n  async getMasterPasswordStatus() {\n    const status = await this.client.getMasterPasswordStatus()\n\n    if (status?.isLocked && global.window) {\n      global.window.dispatchEvent(new CustomEvent(HANDLER_EVENTS.extensionLock))\n    }\n\n    return status\n  }\n\n  async resetFailedAttempts() {\n    logger.info('ENCRYPTION-HANDLER', `Resetting failed attempts`)\n    return await this.client.resetFailedAttempts()\n  }\n\n  async initWithPassword(params) {\n    logger.info('ENCRYPTION-HANDLER', `Initializing with password`)\n    if (!params.password) {\n      throw new Error('Password is required')\n    }\n    const result = await this.client.initWithPassword(\n      stringToBuffer(params.password)\n    )\n    logger.info('ENCRYPTION-HANDLER', `Initialized with password`)\n    return result\n  }\n}\n"
  },
  {
    "path": "src/services/handlers/EncryptionHandlers.test.js",
    "content": "import { EncryptionHandlers } from './EncryptionHandlers'\n\ndescribe('EncryptionHandlers', () => {\n  let clientMock\n  let handlers\n\n  beforeEach(() => {\n    clientMock = {\n      encryptionGetStatus: jest.fn()\n    }\n    handlers = new EncryptionHandlers(clientMock)\n  })\n\n  it('should call client.encryptionGetStatus and return its result', async () => {\n    const status = { enabled: true }\n    clientMock.encryptionGetStatus.mockResolvedValue(status)\n\n    const result = await handlers.encryptionGetStatus()\n\n    expect(clientMock.encryptionGetStatus).toHaveBeenCalledTimes(1)\n    expect(result).toBe(status)\n  })\n\n  it('should propagate errors from client.encryptionGetStatus', async () => {\n    const error = new Error('Failed to get status')\n    clientMock.encryptionGetStatus.mockRejectedValue(error)\n\n    await expect(handlers.encryptionGetStatus()).rejects.toThrow(\n      'Failed to get status'\n    )\n  })\n})\n"
  },
  {
    "path": "src/services/handlers/SecureRequestHandler.js",
    "content": "import { SecurityErrorCodes } from '../../constants/securityErrors.js'\nimport { createErrorWithCode } from '../../utils/createErrorWithCode.js'\nimport { logger } from '../../utils/logger'\nimport {\n  recordIncomingSeq,\n  decryptWithSession,\n  encryptWithSession\n} from '../security/sessionManager.js'\nimport { getSession } from '../security/sessionStore.js'\n\n/**\n * Handles secure encrypted requests from the extension\n */\nexport class SecureRequestHandler {\n  constructor(client, methodRegistry) {\n    this.client = client\n    this.methodRegistry = methodRegistry\n  }\n\n  /**\n   * Process a secure encrypted request\n   */\n  async handle(params) {\n    const { sessionId, nonceB64, ciphertextB64, seq } = params || {}\n\n    // Validate request\n    this.validateSecurePayload(sessionId, nonceB64, ciphertextB64)\n\n    // Check session and replay protection\n    await this.validateSession(sessionId, seq)\n\n    // Decrypt request\n    const request = await this.decryptRequest(\n      sessionId,\n      nonceB64,\n      ciphertextB64\n    )\n\n    logger.debug('SECURE-REQUEST', `Received method: ${request.method}`)\n\n    // Execute method through registry\n    const result = await this.methodRegistry.execute(\n      request.method,\n      request.params,\n      { client: this.client }\n    )\n\n    // Encrypt response\n    return await this.encryptResponse(sessionId, result)\n  }\n\n  validateSecurePayload(sessionId, nonceB64, ciphertextB64) {\n    if (!sessionId || !nonceB64 || !ciphertextB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.INVALID_SECURE_PAYLOAD,\n          'Missing required secure payload parameters'\n        )\n      )\n    }\n  }\n\n  async validateSession(sessionId, seq) {\n    const session = getSession(sessionId)\n    if (!session) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.SESSION_NOT_FOUND,\n          'Session not found or expired'\n        )\n      )\n    }\n    if (!session.clientVerified) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.CLIENT_NOT_VERIFIED,\n          'Client signature has not been verified'\n        )\n      )\n    }\n    recordIncomingSeq(sessionId, seq)\n    return session\n  }\n\n  async decryptRequest(sessionId, nonceB64, ciphertextB64) {\n    const nonce = new Uint8Array(Buffer.from(nonceB64, 'base64'))\n    const ciphertext = new Uint8Array(Buffer.from(ciphertextB64, 'base64'))\n    const plaintext = decryptWithSession(sessionId, nonce, ciphertext)\n    return JSON.parse(Buffer.from(plaintext).toString('utf8'))\n  }\n\n  async encryptResponse(sessionId, result) {\n    const responsePlaintext = Buffer.from(\n      JSON.stringify({ ok: true, result }),\n      'utf8'\n    )\n    return encryptWithSession(sessionId, new Uint8Array(responsePlaintext))\n  }\n}\n"
  },
  {
    "path": "src/services/handlers/SecureRequestHandler.test.js",
    "content": "jest.mock('sodium-native', () => ({\n  crypto_sign_keypair: jest.fn(),\n  crypto_sign_ed25519_pk_to_curve25519: jest.fn(),\n  crypto_sign_ed25519_sk_to_curve25519: jest.fn(),\n  crypto_kx_keypair: jest.fn(),\n  crypto_kx_server_session_keys: jest.fn(),\n  crypto_kx_client_session_keys: jest.fn(),\n  crypto_secretbox_easy: jest.fn(),\n  crypto_secretbox_open_easy: jest.fn(),\n  randombytes_buf: jest.fn(),\n  sodium_malloc: jest.fn((size) => Buffer.alloc(size)),\n  crypto_sign_PUBLICKEYBYTES: 32,\n  crypto_sign_SECRETKEYBYTES: 64,\n  crypto_kx_PUBLICKEYBYTES: 32,\n  crypto_kx_SECRETKEYBYTES: 32,\n  crypto_kx_SESSIONKEYBYTES: 32,\n  crypto_secretbox_NONCEBYTES: 24,\n  crypto_secretbox_MACBYTES: 16\n}))\n\nimport { SecureRequestHandler } from './SecureRequestHandler'\nimport { SecurityErrorCodes } from '../../constants/securityErrors'\nimport { logger } from '../../utils/logger'\nimport * as sessionManager from '../security/sessionManager.js'\nimport * as sessionStore from '../security/sessionStore.js'\n\njest.mock('../../utils/logger')\njest.mock('../security/sessionManager.js')\njest.mock('../security/sessionStore.js')\n\ndescribe('SecureRequestHandler.handle', () => {\n  let handler\n  let mockClient\n  let mockMethodRegistry\n\n  beforeEach(() => {\n    mockClient = {}\n    mockMethodRegistry = {\n      execute: jest.fn()\n    }\n    handler = new SecureRequestHandler(mockClient, mockMethodRegistry)\n    jest.clearAllMocks()\n  })\n\n  it('should process a valid secure request and return encrypted response', async () => {\n    const params = {\n      sessionId: 'session123',\n      nonceB64: Buffer.from('nonce').toString('base64'),\n      ciphertextB64: Buffer.from('ciphertext').toString('base64'),\n      seq: 42\n    }\n\n    // Mock verified session so handler does not reject with ClientNotVerified\n    sessionStore.getSession.mockReturnValue({\n      id: 'session123',\n      clientVerified: true\n    })\n    sessionManager.recordIncomingSeq.mockImplementation(() => {})\n    // Mock decryption\n    const decryptedRequest = { method: 'testMethod', params: { foo: 'bar' } }\n    sessionManager.decryptWithSession.mockReturnValue(\n      Buffer.from(JSON.stringify(decryptedRequest), 'utf8')\n    )\n    // Mock method execution\n    mockMethodRegistry.execute.mockResolvedValue('methodResult')\n    // Mock encryption\n    sessionManager.encryptWithSession.mockResolvedValue('encryptedResponse')\n\n    const result = await handler.handle(params)\n\n    expect(sessionStore.getSession).toHaveBeenCalledWith('session123')\n    expect(sessionManager.recordIncomingSeq).toHaveBeenCalledWith(\n      'session123',\n      42\n    )\n    expect(sessionManager.decryptWithSession).toHaveBeenCalled()\n    expect(mockMethodRegistry.execute).toHaveBeenCalledWith(\n      'testMethod',\n      { foo: 'bar' },\n      { client: mockClient }\n    )\n    expect(sessionManager.encryptWithSession).toHaveBeenCalled()\n    expect(result).toBe('encryptedResponse')\n    expect(logger.debug).toHaveBeenCalledWith(\n      'SECURE-REQUEST',\n      'Received method: testMethod'\n    )\n  })\n\n  it('should throw INVALID_SECURE_PAYLOAD if payload is missing fields', async () => {\n    await expect(handler.handle({})).rejects.toThrow(\n      SecurityErrorCodes.INVALID_SECURE_PAYLOAD\n    )\n  })\n\n  it('should throw SESSION_NOT_FOUND if session does not exist', async () => {\n    sessionStore.getSession.mockReturnValue(undefined)\n    const params = {\n      sessionId: 'bad-session',\n      nonceB64: 'nonce',\n      ciphertextB64: 'ciphertext',\n      seq: 1\n    }\n    await expect(handler.handle(params)).rejects.toThrow(\n      SecurityErrorCodes.SESSION_NOT_FOUND\n    )\n  })\n})\n"
  },
  {
    "path": "src/services/handlers/SecurityHandlers.js",
    "content": "import sodium from 'sodium-native'\n\nimport { PAIRING_STATES } from '../../constants/pairing.js'\nimport { SecurityErrorCodes } from '../../constants/securityErrors.js'\nimport {\n  getAutoLockTimeoutMs,\n  isAutoLockEnabled\n} from '../../hooks/useAutoLockPreferences.js'\nimport {\n  applyAutoLockEnabled,\n  applyAutoLockTimeout\n} from '../../utils/autoLock.js'\nimport { createErrorWithCode } from '../../utils/createErrorWithCode.js'\nimport { getNativeMessagingEnabled } from '../nativeMessagingPreferences.js'\nimport {\n  getOrCreateIdentity,\n  getFingerprint,\n  verifyPairingToken,\n  resetIdentity,\n  setClientIdentityPublicKey,\n  getClientIdentityPublicKey,\n  getCachedClientIdentityPublicKey,\n  getClientPairingState,\n  confirmClientPairing\n} from '../security/appIdentity.js'\nimport { PROTOCOL_TAGS } from '../security/protocolConstants.js'\nimport { beginHandshake } from '../security/sessionManager.js'\nimport {\n  getSession,\n  closeSession,\n  clearAllSessions,\n  concatBytes\n} from '../security/sessionStore.js'\n/**\n * Handles security-related IPC operations for native messaging\n */\nexport class SecurityHandlers {\n  constructor(client) {\n    this.client = client\n  }\n\n  /**\n   * Get the app's identity for pairing\n   */\n  async nmGetAppIdentity(params) {\n    const { pairingToken, clientEd25519PublicKeyB64 } = params || {}\n\n    // Require a pairing token that the user manually copied from desktop app\n    if (!pairingToken) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.PAIRING_TOKEN_REQUIRED,\n          'Please enter the pairing token from the desktop app'\n        )\n      )\n    }\n\n    // Require the extension to provide its public key for mutual authentication\n    if (!clientEd25519PublicKeyB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.CLIENT_PUBLIC_KEY_REQUIRED,\n          'Extension must provide its Ed25519 public key'\n        )\n      )\n    }\n\n    const id = await getOrCreateIdentity(this.client)\n\n    // Verify the pairing token matches what the desktop app expects\n    const isValidToken = await verifyPairingToken(\n      this.client,\n      id.ed25519PublicKey,\n      pairingToken\n    )\n    if (!isValidToken) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.INVALID_PAIRING_TOKEN,\n          'The pairing token is incorrect'\n        )\n      )\n    }\n\n    // Check if a different client is already paired\n    const existingClientPubB64 = await getClientIdentityPublicKey(this.client)\n    const pairingState = await getClientPairingState(this.client)\n\n    if (\n      existingClientPubB64 &&\n      existingClientPubB64 !== clientEd25519PublicKeyB64 &&\n      pairingState === PAIRING_STATES.CONFIRMED\n    ) {\n      // Existing pairing is confirmed - reject new client\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.CLIENT_ALREADY_PAIRED,\n          'A different extension is already paired. Reset pairing in the desktop app first.'\n        )\n      )\n    }\n\n    // If there is no existing client or pairing with existing client is pending\n    // save/overwrite with new client\n    if (existingClientPubB64 !== clientEd25519PublicKeyB64) {\n      await setClientIdentityPublicKey(\n        this.client,\n        clientEd25519PublicKeyB64,\n        PAIRING_STATES.PENDING\n      )\n    }\n\n    return {\n      ed25519PublicKey: id.ed25519PublicKey,\n      x25519PublicKey: id.x25519PublicKey,\n      fingerprint: getFingerprint(id.ed25519PublicKey)\n    }\n  }\n\n  /**\n   * Confirm pairing after extension successfully encrypted its keypair\n   */\n  async nmConfirmPairing(params) {\n    const { clientEd25519PublicKeyB64 } = params || {}\n\n    if (!clientEd25519PublicKeyB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.CLIENT_PUBLIC_KEY_REQUIRED,\n          'Extension must provide its Ed25519 public key'\n        )\n      )\n    }\n\n    // Verify this matches our pending pairing\n    await confirmClientPairing(this.client, clientEd25519PublicKeyB64)\n\n    return { confirmed: true }\n  }\n\n  /**\n   * Begin secure handshake with extension\n   */\n  async nmBeginHandshake(params) {\n    // Only allow handshake if native messaging is enabled\n    // This prevents previously paired extensions from reconnecting after being disabled\n    if (!getNativeMessagingEnabled()) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED,\n          'Extension connection is disabled'\n        )\n      )\n    }\n\n    // Require a pinned client public key in secure vault (set during pairing via nmGetAppIdentity)\n    const clientPubB64 = await getClientIdentityPublicKey(this.client)\n    if (!clientPubB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.NOT_PAIRED,\n          'No client identity registered. Please complete pairing first.'\n        )\n      )\n    }\n\n    const { extEphemeralPubB64 } = params || {}\n    if (!extEphemeralPubB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.MISSING_EPHEMERAL_PUBLIC_KEY,\n          'extEphemeralPubB64 is required'\n        )\n      )\n    }\n    return beginHandshake(this.client, extEphemeralPubB64)\n  }\n\n  /**\n   * Finish handshake by validating session\n   */\n  async nmFinishHandshake(params) {\n    const { sessionId, clientSigB64 } = params || {}\n    if (!sessionId) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.MISSING_SESSION_ID,\n          'sessionId is required'\n        )\n      )\n    }\n    if (!clientSigB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.MISSING_CLIENT_SIGNATURE,\n          'clientSigB64 is required'\n        )\n      )\n    }\n\n    const session = getSession(sessionId)\n    if (!session) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.SESSION_NOT_FOUND,\n          'Session not found or expired'\n        )\n      )\n    }\n    if (session.clientVerified) return { ok: true }\n\n    // Load pinned client identity\n    const clientPubB64 = await getClientIdentityPublicKey(this.client)\n    if (!clientPubB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.CLIENT_NOT_PAIRED,\n          'No client identity registered'\n        )\n      )\n    }\n\n    const clientPubBytes = new Uint8Array(Buffer.from(clientPubB64, 'base64'))\n    const sigBytes = new Uint8Array(Buffer.from(clientSigB64, 'base64'))\n    if (clientPubBytes.length !== sodium.crypto_sign_PUBLICKEYBYTES) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.INVALID_CLIENT_PUBLIC_KEY,\n          'Invalid client public key length'\n        )\n      )\n    }\n    if (sigBytes.length !== sodium.crypto_sign_BYTES) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.INVALID_CLIENT_SIGNATURE,\n          'Invalid signature length'\n        )\n      )\n    }\n    if (!session.transcript || session.transcript.length === 0) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.INVALID_TRANSCRIPT,\n          'Session transcript is missing or empty'\n        )\n      )\n    }\n\n    // Build client transcript with protocol tag + session ID binding\n    // Client signs: tag || session_id || host_eph_pk || ext_eph_pk || client_ed25519_pk\n    const protocolTag = Buffer.from(PROTOCOL_TAGS.CLIENT_FINISH, 'utf8')\n    const sessionIdBytes = Buffer.from(String(sessionId), 'utf8')\n    const clientTranscript = concatBytes(\n      concatBytes(protocolTag, sessionIdBytes),\n      session.transcript\n    )\n\n    // Verify client Ed25519 signature over enhanced transcript\n    const ok = sodium.crypto_sign_verify_detached(\n      sigBytes,\n      clientTranscript,\n      clientPubBytes\n    )\n\n    if (!ok) {\n      // On failure, drop the session\n      closeSession(sessionId)\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.CLIENT_SIGNATURE_INVALID,\n          'Client signature verification failed'\n        )\n      )\n    }\n\n    // Mark session as verified\n    session.clientVerified = true\n\n    return { ok: true }\n  }\n\n  /**\n   * Close a secure session\n   */\n  async nmCloseSession(params) {\n    const { sessionId } = params || {}\n    if (!sessionId) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.MISSING_SESSION_ID,\n          'sessionId is required'\n        )\n      )\n    }\n    closeSession(sessionId)\n    return { ok: true }\n  }\n\n  /**\n   * Check if an extension is paired with this desktop app\n   * @param {Object} params\n   * @param {string} params.clientEd25519PublicKeyB64 - Extension's public key\n   */\n  async checkExtensionPairingStatus(params) {\n    const { clientEd25519PublicKeyB64 } = params || {}\n\n    if (!getNativeMessagingEnabled()) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED,\n          'Extension connection is disabled'\n        )\n      )\n    }\n\n    if (!clientEd25519PublicKeyB64) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.CLIENT_PUBLIC_KEY_REQUIRED,\n          'clientEd25519PublicKeyB64 is required'\n        )\n      )\n    }\n\n    const storedClientPubB64 = getCachedClientIdentityPublicKey()\n    const paired = storedClientPubB64 === clientEd25519PublicKeyB64\n\n    return {\n      paired\n    }\n  }\n\n  async getAutoLockSettings() {\n    if (!getNativeMessagingEnabled()) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED,\n          'Extension connection is disabled'\n        )\n      )\n    }\n    return {\n      autoLockEnabled: isAutoLockEnabled(),\n      autoLockTimeoutMs: getAutoLockTimeoutMs()\n    }\n  }\n\n  async setAutoLockTimeout(params) {\n    const { autoLockTimeoutMs } = params || {}\n    if (!getNativeMessagingEnabled()) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED,\n          'Extension connection is disabled'\n        )\n      )\n    }\n    // `autoLockTimeoutMs` can be null when user selects \"never\"\n    const isNever = autoLockTimeoutMs === null\n    const isValidTimeoutMs =\n      typeof autoLockTimeoutMs === 'number' &&\n      Number.isFinite(autoLockTimeoutMs) &&\n      autoLockTimeoutMs > 0\n\n    if (!isNever && !isValidTimeoutMs) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.MISSING_AUTO_LOCK_TIMEOUT_MS,\n          'autoLockTimeoutMs must be a number > 0 or null'\n        )\n      )\n    }\n    applyAutoLockTimeout(autoLockTimeoutMs)\n    return { ok: true }\n  }\n\n  async setAutoLockEnabled(params) {\n    const { autoLockEnabled } = params || {}\n    if (!getNativeMessagingEnabled()) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED,\n          'Extension connection is disabled'\n        )\n      )\n    }\n    if (typeof autoLockEnabled !== 'boolean') {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.INVALID_AUTO_LOCK_ENABLED,\n          'autoLockEnabled must be a boolean'\n        )\n      )\n    }\n    applyAutoLockEnabled(autoLockEnabled)\n    return { ok: true }\n  }\n\n  async resetTimer() {\n    if (!getNativeMessagingEnabled()) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED,\n          'Extension connection is disabled'\n        )\n      )\n    }\n\n    window.dispatchEvent(new Event('reset-timer'))\n    return { ok: true }\n  }\n\n  /**\n   * Reset pairing by generating new identity keys and clearing all sessions\n   * This will unpair the connected extension\n   */\n  async nmResetPairing() {\n    const clearedSessions = clearAllSessions()\n\n    const newIdentity = await resetIdentity(this.client)\n\n    return {\n      ok: true,\n      clearedSessions,\n      newIdentity: {\n        ed25519PublicKey: newIdentity.ed25519PublicKey,\n        x25519PublicKey: newIdentity.x25519PublicKey,\n        creationDate: newIdentity.creationDate\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/services/handlers/SecurityHandlers.test.js",
    "content": "jest.mock('sodium-native', () => ({\n  crypto_sign_keypair: jest.fn(),\n  crypto_sign_ed25519_pk_to_curve25519: jest.fn(),\n  crypto_sign_ed25519_sk_to_curve25519: jest.fn(),\n  crypto_kx_keypair: jest.fn(),\n  crypto_kx_server_session_keys: jest.fn(),\n  crypto_kx_client_session_keys: jest.fn(),\n  crypto_secretbox_easy: jest.fn(),\n  crypto_secretbox_open_easy: jest.fn(),\n  randombytes_buf: jest.fn(),\n  sodium_malloc: jest.fn((size) => Buffer.alloc(size)),\n  crypto_sign_PUBLICKEYBYTES: 32,\n  crypto_sign_BYTES: 64,\n  crypto_sign_SECRETKEYBYTES: 64,\n  crypto_kx_PUBLICKEYBYTES: 32,\n  crypto_kx_SECRETKEYBYTES: 32,\n  crypto_kx_SESSIONKEYBYTES: 32,\n  crypto_secretbox_NONCEBYTES: 24,\n  crypto_secretbox_MACBYTES: 16,\n  crypto_sign_verify_detached: jest.fn()\n}))\n\nimport { SecurityHandlers } from './SecurityHandlers'\nimport { SecurityErrorCodes } from '../../constants/securityErrors'\nimport {\n  getAutoLockTimeoutMs,\n  isAutoLockEnabled\n} from '../../hooks/useAutoLockPreferences.js'\nimport {\n  applyAutoLockEnabled,\n  applyAutoLockTimeout\n} from '../../utils/autoLock.js'\nimport { getNativeMessagingEnabled } from '../nativeMessagingPreferences'\nimport * as appIdentity from '../security/appIdentity'\nimport * as sessionManager from '../security/sessionManager'\nimport * as sessionStore from '../security/sessionStore'\n\njest.mock('../security/appIdentity')\njest.mock('../security/sessionManager')\njest.mock('../security/sessionStore')\njest.mock('../nativeMessagingPreferences', () => ({\n  getNativeMessagingEnabled: jest.fn()\n}))\n\njest.mock('../../utils/autoLock', () => ({\n  applyAutoLockEnabled: jest.fn(),\n  applyAutoLockTimeout: jest.fn()\n}))\njest.mock(\n  '../../hooks/useAutoLockPreferences.js',\n  () => ({\n    getAutoLockTimeoutMs: jest.fn(),\n    isAutoLockEnabled: jest.fn()\n  }),\n  { virtual: true }\n)\n\ndescribe('SecurityHandlers', () => {\n  let client\n  let handlers\n\n  beforeEach(() => {\n    client = { id: 'test-client' }\n    handlers = new SecurityHandlers(client)\n    jest.clearAllMocks()\n  })\n\n  describe('nmGetAppIdentity', () => {\n    it('throws if pairingToken is missing', async () => {\n      await expect(handlers.nmGetAppIdentity({})).rejects.toThrow(\n        SecurityErrorCodes.PAIRING_TOKEN_REQUIRED\n      )\n    })\n\n    it('throws if clientEd25519PublicKeyB64 is missing', async () => {\n      await expect(\n        handlers.nmGetAppIdentity({ pairingToken: 'token' })\n      ).rejects.toThrow(SecurityErrorCodes.CLIENT_PUBLIC_KEY_REQUIRED)\n    })\n\n    it('throws if verifyPairingToken returns false', async () => {\n      appIdentity.getOrCreateIdentity.mockResolvedValue({\n        ed25519PublicKey: 'pubKey',\n        x25519PublicKey: 'xPubKey'\n      })\n      appIdentity.verifyPairingToken.mockResolvedValue(false)\n      await expect(\n        handlers.nmGetAppIdentity({\n          pairingToken: 'token',\n          clientEd25519PublicKeyB64: 'clientPub'\n        })\n      ).rejects.toThrow(SecurityErrorCodes.INVALID_PAIRING_TOKEN)\n    })\n\n    it('returns identity info and stores client public key if pairingToken is valid', async () => {\n      appIdentity.getOrCreateIdentity.mockResolvedValue({\n        ed25519PublicKey: 'pubKey',\n        x25519PublicKey: 'xPubKey'\n      })\n      appIdentity.verifyPairingToken.mockResolvedValue(true)\n      appIdentity.getFingerprint.mockReturnValue('fingerprint')\n      appIdentity.setClientIdentityPublicKey.mockResolvedValue(undefined)\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue(null)\n\n      const result = await handlers.nmGetAppIdentity({\n        pairingToken: 'token',\n        clientEd25519PublicKeyB64: 'clientPub'\n      })\n\n      expect(appIdentity.setClientIdentityPublicKey).toHaveBeenCalledWith(\n        client,\n        'clientPub',\n        'PENDING'\n      )\n      expect(result).toEqual({\n        ed25519PublicKey: 'pubKey',\n        x25519PublicKey: 'xPubKey',\n        fingerprint: 'fingerprint'\n      })\n    })\n\n    it('throws if a different client is already paired', async () => {\n      appIdentity.getOrCreateIdentity.mockResolvedValue({\n        ed25519PublicKey: 'pubKey',\n        x25519PublicKey: 'xPubKey'\n      })\n      appIdentity.verifyPairingToken.mockResolvedValue(true)\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue(\n        'existingClientPub'\n      )\n      appIdentity.getClientPairingState.mockResolvedValue('CONFIRMED')\n\n      await expect(\n        handlers.nmGetAppIdentity({\n          pairingToken: 'token',\n          clientEd25519PublicKeyB64: 'differentClientPub'\n        })\n      ).rejects.toThrow(SecurityErrorCodes.CLIENT_ALREADY_PAIRED)\n\n      expect(appIdentity.setClientIdentityPublicKey).not.toHaveBeenCalled()\n    })\n\n    it('allows re-pairing same client with valid token', async () => {\n      appIdentity.getOrCreateIdentity.mockResolvedValue({\n        ed25519PublicKey: 'pubKey',\n        x25519PublicKey: 'xPubKey'\n      })\n      appIdentity.verifyPairingToken.mockResolvedValue(true)\n      appIdentity.getFingerprint.mockReturnValue('fingerprint')\n      appIdentity.setClientIdentityPublicKey.mockResolvedValue(undefined)\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue('sameClientPub')\n\n      const result = await handlers.nmGetAppIdentity({\n        pairingToken: 'token',\n        clientEd25519PublicKeyB64: 'sameClientPub'\n      })\n\n      expect(appIdentity.setClientIdentityPublicKey).not.toHaveBeenCalled()\n      expect(result).toEqual({\n        ed25519PublicKey: 'pubKey',\n        x25519PublicKey: 'xPubKey',\n        fingerprint: 'fingerprint'\n      })\n    })\n  })\n\n  describe('nmBeginHandshake', () => {\n    beforeEach(() => {\n      getNativeMessagingEnabled.mockReturnValue(true)\n      // By default, simulate a paired client with a stored public key\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue('clientPubKey')\n    })\n\n    it('throws if native messaging is disabled', async () => {\n      getNativeMessagingEnabled.mockReturnValue(false)\n      await expect(\n        handlers.nmBeginHandshake({ extEphemeralPubB64: 'abc' })\n      ).rejects.toThrow(SecurityErrorCodes.NATIVE_MESSAGING_DISABLED)\n    })\n\n    it('throws if no client public key is stored (not paired)', async () => {\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue(null)\n\n      await expect(\n        handlers.nmBeginHandshake({ extEphemeralPubB64: 'abc' })\n      ).rejects.toThrow(SecurityErrorCodes.NOT_PAIRED)\n      expect(sessionManager.beginHandshake).not.toHaveBeenCalled()\n    })\n\n    it('throws if extEphemeralPubB64 is missing', async () => {\n      await expect(handlers.nmBeginHandshake({})).rejects.toThrow(\n        SecurityErrorCodes.MISSING_EPHEMERAL_PUBLIC_KEY\n      )\n    })\n\n    it('calls beginHandshake with correct params when client is paired', async () => {\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue('clientPubKey')\n      sessionManager.beginHandshake.mockResolvedValue('handshake-result')\n      const result = await handlers.nmBeginHandshake({\n        extEphemeralPubB64: 'abc'\n      })\n      expect(appIdentity.getClientIdentityPublicKey).toHaveBeenCalledWith(\n        client\n      )\n      expect(sessionManager.beginHandshake).toHaveBeenCalledWith(client, 'abc')\n      expect(result).toBe('handshake-result')\n    })\n  })\n\n  describe('nmFinishHandshake', () => {\n    it('throws if sessionId is missing', async () => {\n      await expect(handlers.nmFinishHandshake({})).rejects.toThrow(\n        SecurityErrorCodes.MISSING_SESSION_ID\n      )\n    })\n\n    it('throws if clientSigB64 is missing', async () => {\n      await expect(\n        handlers.nmFinishHandshake({ sessionId: 'sid' })\n      ).rejects.toThrow(SecurityErrorCodes.MISSING_CLIENT_SIGNATURE)\n    })\n\n    it('throws if session not found', async () => {\n      sessionStore.getSession.mockReturnValue(undefined)\n      await expect(\n        handlers.nmFinishHandshake({\n          sessionId: 'sid',\n          clientSigB64: 'sig'\n        })\n      ).rejects.toThrow(SecurityErrorCodes.SESSION_NOT_FOUND)\n    })\n\n    it('throws if client identity is not paired', async () => {\n      sessionStore.getSession.mockReturnValue({\n        id: 'sid',\n        transcript: new Uint8Array([1, 2, 3])\n      })\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue(null)\n\n      await expect(\n        handlers.nmFinishHandshake({\n          sessionId: 'sid',\n          clientSigB64: Buffer.from('sig').toString('base64')\n        })\n      ).rejects.toThrow(SecurityErrorCodes.CLIENT_NOT_PAIRED)\n    })\n\n    it('throws ClientSignatureInvalid and closes session when signature is invalid', async () => {\n      const session = { id: 'sid', transcript: new Uint8Array([1, 2, 3]) }\n      sessionStore.getSession.mockReturnValue(session)\n      appIdentity.getClientIdentityPublicKey.mockResolvedValue(\n        Buffer.alloc(32, 1).toString('base64')\n      )\n      const sodium = require('sodium-native')\n      sodium.crypto_sign_verify_detached.mockReturnValue(false)\n\n      await expect(\n        handlers.nmFinishHandshake({\n          sessionId: 'sid',\n          clientSigB64: Buffer.alloc(64, 2).toString('base64')\n        })\n      ).rejects.toThrow(SecurityErrorCodes.CLIENT_SIGNATURE_INVALID)\n\n      expect(sessionStore.closeSession).toHaveBeenCalledWith('sid')\n      expect(session.clientVerified).not.toBe(true)\n    })\n  })\n\n  describe('nmCloseSession', () => {\n    it('throws if sessionId is missing', async () => {\n      await expect(handlers.nmCloseSession({})).rejects.toThrow(\n        SecurityErrorCodes.MISSING_SESSION_ID\n      )\n    })\n\n    it('calls closeSession and returns ok', async () => {\n      sessionStore.closeSession.mockReturnValue(undefined)\n      const result = await handlers.nmCloseSession({ sessionId: 'sid' })\n      expect(sessionStore.closeSession).toHaveBeenCalledWith('sid')\n      expect(result).toEqual({ ok: true })\n    })\n  })\n\n  describe('checkExtensionPairingStatus', () => {\n    it('throws if clientEd25519PublicKeyB64 is missing', async () => {\n      await expect(handlers.checkExtensionPairingStatus({})).rejects.toThrow(\n        SecurityErrorCodes.CLIENT_PUBLIC_KEY_REQUIRED\n      )\n    })\n\n    it('returns paired=true when client key matches', async () => {\n      appIdentity.getCachedClientIdentityPublicKey.mockReturnValue(\n        'clientPubKey123'\n      )\n      const result = await handlers.checkExtensionPairingStatus({\n        clientEd25519PublicKeyB64: 'clientPubKey123'\n      })\n      expect(result.paired).toBe(true)\n    })\n\n    it('returns paired=false when key does not match', async () => {\n      appIdentity.getCachedClientIdentityPublicKey.mockReturnValue(\n        'differentKey'\n      )\n      const result = await handlers.checkExtensionPairingStatus({\n        clientEd25519PublicKeyB64: 'clientPubKey123'\n      })\n      expect(result.paired).toBe(false)\n    })\n\n    it('returns paired=false when no client key is stored', async () => {\n      appIdentity.getCachedClientIdentityPublicKey.mockReturnValue(null)\n      const result = await handlers.checkExtensionPairingStatus({\n        clientEd25519PublicKeyB64: 'clientPubKey123'\n      })\n      expect(result.paired).toBe(false)\n    })\n  })\n\n  describe('nmResetPairing', () => {\n    it('clears sessions and resets identity', async () => {\n      sessionStore.clearAllSessions.mockReturnValue(['sid1', 'sid2'])\n      appIdentity.resetIdentity.mockResolvedValue({\n        ed25519PublicKey: 'newPub',\n        x25519PublicKey: 'newXPub',\n        creationDate: '2024-01-01'\n      })\n      const result = await handlers.nmResetPairing()\n      expect(sessionStore.clearAllSessions).toHaveBeenCalled()\n      expect(appIdentity.resetIdentity).toHaveBeenCalledWith(client)\n      expect(result).toEqual({\n        ok: true,\n        clearedSessions: ['sid1', 'sid2'],\n        newIdentity: {\n          ed25519PublicKey: 'newPub',\n          x25519PublicKey: 'newXPub',\n          creationDate: '2024-01-01'\n        }\n      })\n    })\n  })\n\n  describe('auto-lock handlers', () => {\n    beforeEach(() => {\n      getNativeMessagingEnabled.mockReturnValue(true)\n      isAutoLockEnabled.mockReturnValue(true)\n      getAutoLockTimeoutMs.mockReturnValue(999)\n    })\n\n    describe('getAutoLockSettings', () => {\n      it('throws when native messaging is disabled', async () => {\n        getNativeMessagingEnabled.mockReturnValue(false)\n        await expect(handlers.getAutoLockSettings()).rejects.toThrow(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED\n        )\n      })\n\n      it('returns enabled and timeout values', async () => {\n        const result = await handlers.getAutoLockSettings()\n        expect(result).toEqual({\n          autoLockEnabled: true,\n          autoLockTimeoutMs: 999\n        })\n      })\n    })\n\n    describe('setAutoLockTimeout', () => {\n      it('throws when native messaging is disabled', async () => {\n        getNativeMessagingEnabled.mockReturnValue(false)\n        await expect(\n          handlers.setAutoLockTimeout({ autoLockTimeoutMs: 1234 })\n        ).rejects.toThrow(SecurityErrorCodes.NATIVE_MESSAGING_DISABLED)\n      })\n\n      it('throws when autoLockTimeoutMs is missing', async () => {\n        await expect(handlers.setAutoLockTimeout({})).rejects.toThrow(\n          SecurityErrorCodes.MISSING_AUTO_LOCK_TIMEOUT_MS\n        )\n      })\n\n      it('applies timeout when provided', async () => {\n        await handlers.setAutoLockTimeout({ autoLockTimeoutMs: 1234 })\n        expect(applyAutoLockTimeout).toHaveBeenCalledWith(1234)\n      })\n\n      it('accepts null timeout (never) when provided', async () => {\n        const result = await handlers.setAutoLockTimeout({\n          autoLockTimeoutMs: null\n        })\n        expect(applyAutoLockTimeout).toHaveBeenCalledWith(null)\n        expect(result).toEqual({ ok: true })\n      })\n    })\n\n    describe('setAutoLockEnabled', () => {\n      it('throws when native messaging is disabled', async () => {\n        getNativeMessagingEnabled.mockReturnValue(false)\n        await expect(\n          handlers.setAutoLockEnabled({ autoLockEnabled: true })\n        ).rejects.toThrow(SecurityErrorCodes.NATIVE_MESSAGING_DISABLED)\n      })\n\n      it('throws when autoLockEnabled is not boolean', async () => {\n        await expect(\n          handlers.setAutoLockEnabled({ autoLockEnabled: 'yes' })\n        ).rejects.toThrow(SecurityErrorCodes.INVALID_AUTO_LOCK_ENABLED)\n      })\n\n      it('applies enabled flag when valid', async () => {\n        await handlers.setAutoLockEnabled({ autoLockEnabled: false })\n        expect(applyAutoLockEnabled).toHaveBeenCalledWith(false)\n      })\n    })\n\n    describe('resetTimer', () => {\n      it('throws when native messaging is disabled', async () => {\n        getNativeMessagingEnabled.mockReturnValue(false)\n        await expect(handlers.resetTimer()).rejects.toThrow(\n          SecurityErrorCodes.NATIVE_MESSAGING_DISABLED\n        )\n      })\n\n      it('dispatches reset-timer event when enabled', async () => {\n        const dispatchSpy = jest.spyOn(window, 'dispatchEvent')\n        await handlers.resetTimer()\n        expect(dispatchSpy).toHaveBeenCalledWith(\n          expect.objectContaining({ type: 'reset-timer' })\n        )\n      })\n    })\n  })\n})\n"
  },
  {
    "path": "src/services/handlers/VaultHandlers.js",
    "content": "import { HANDLER_EVENTS } from '../../constants/services'\nimport { logger } from '../../utils/logger'\n\n/**\n * Handles vault-related IPC operations\n */\nexport class VaultHandlers {\n  constructor(client) {\n    this.client = client\n  }\n\n  async vaultsInit(params) {\n    logger.debug(\n      'VAULT-HANDLER',\n      `vaultsInit called with encryptionKey: ${params?.encryptionKey ? 'provided' : 'missing'}`\n    )\n\n    // Initialize vaults\n    await this.client.vaultsInit(params.encryptionKey)\n\n    return { initialized: true }\n  }\n\n  async vaultsGetStatus() {\n    return await this.client.vaultsGetStatus()\n  }\n\n  async vaultsGet(params) {\n    return await this.client.vaultsGet(params.key)\n  }\n\n  async vaultsList(params) {\n    logger.debug(\n      'VAULT-HANDLER',\n      `vaultsList called with filterKey: ${params?.filterKey}`\n    )\n\n    // Check vault status first\n    const vaultsStatus = await this.client.vaultsGetStatus()\n    logger.debug(\n      'VAULT-HANDLER',\n      `Vaults status before list: ${JSON.stringify(vaultsStatus)}`\n    )\n\n    const result = await this.client.vaultsList(params?.filterKey)\n    logger.debug(\n      'VAULT-HANDLER',\n      `vaultsList result: ${JSON.stringify(result)}`\n    )\n\n    // Also check encryption status\n    const encStatus = await this.client.encryptionGetStatus()\n    logger.debug(\n      'VAULT-HANDLER',\n      `Encryption status: ${JSON.stringify(encStatus)}`\n    )\n\n    return result\n  }\n\n  async vaultsAdd(params) {\n    await this.client.vaultsAdd(params.key, params.vault || params.data)\n    return { success: true }\n  }\n\n  async vaultsClose() {\n    await this.client.vaultsClose()\n    return { success: true }\n  }\n\n  async activeVaultInit(params) {\n    const result = await this.client.activeVaultInit({\n      id: params.id,\n      encryptionKey: params.encryptionKey\n    })\n\n    // After initializing, also load the vault metadata\n    if (result?.success) {\n      await this.loadVaultMetadata(params.id)\n    }\n\n    return result\n  }\n\n  async loadVaultMetadata(vaultId) {\n    // Find the vault from the vaults list\n    const vaults = await this.client.vaultsList('vault/')\n    const vault = vaults?.data?.find((v) => v.id === vaultId)\n\n    if (vault) {\n      // Store the vault metadata in active vault storage\n      const vaultData = {\n        id: vault.id,\n        name: vault.name,\n        version: vault.version,\n        records: vault.records || [],\n        devices: vault.devices || [],\n        createdAt: vault.createdAt,\n        updatedAt: vault.updatedAt\n      }\n      await this.client.activeVaultAdd('vault', vaultData)\n      logger.debug(\n        'VAULT-HANDLER',\n        `Stored vault metadata after init: ${JSON.stringify(vaultData)}`\n      )\n    }\n  }\n\n  async activeVaultGetStatus() {\n    return await this.client.activeVaultGetStatus()\n  }\n\n  async activeVaultGet(params) {\n    return await this.client.activeVaultGet(params.key)\n  }\n\n  async activeVaultList(params) {\n    const encStatus = await this.client.encryptionGetStatus()\n    const vaultsStatus = await this.client.vaultsGetStatus()\n    const activeVaultStatus = await this.client.activeVaultGetStatus()\n\n    logger.debug(\n      'VAULT-HANDLER',\n      `Before activeVaultList: ${JSON.stringify({\n        encStatus,\n        vaultsStatus,\n        activeVaultStatus,\n        filterKey: params?.filterKey\n      })}`\n    )\n\n    return await this.client.activeVaultList(params?.filterKey)\n  }\n\n  async activeVaultAdd(params) {\n    await this.client.activeVaultAdd(params.key, params.data)\n    return { success: true }\n  }\n\n  async activeVaultRemove(params) {\n    await this.client.activeVaultRemove(params.key)\n    return { success: true }\n  }\n\n  async activeVaultClose() {\n    await this.client.activeVaultClose()\n    return { success: true }\n  }\n\n  async activeVaultCreateInvite() {\n    return await this.client.activeVaultCreateInvite()\n  }\n\n  async activeVaultDeleteInvite() {\n    await this.client.activeVaultDeleteInvite()\n    return { success: true }\n  }\n\n  async pairActiveVault(params) {\n    return await this.client.pairActiveVault(params.inviteCode)\n  }\n\n  async initListener(params) {\n    await this.client.initListener({ vaultId: params.vaultId })\n    return { success: true }\n  }\n\n  async closeAllInstances() {\n    let wasAuthenticated\n\n    try {\n      const status = await this.client.vaultsGetStatus()\n\n      wasAuthenticated = status?.status\n    } catch (e) {\n      logger.error(\n        'VAULT-HANDLER',\n        'ERROR',\n        `Error checking vault status before closing instances: ${e.message}`\n      )\n      wasAuthenticated = false\n    }\n\n    // close all instances\n    await this.client.closeAllInstances()\n\n    // If desktop was authenticated emit an event to navigate to master password screen\n    if (wasAuthenticated) {\n      logger.log(\n        'VAULT-HANDLER',\n        'INFO',\n        'Desktop was authenticated, navigating to master password screen after extension exit'\n      )\n\n      if (global.window) {\n        global.window.dispatchEvent(\n          new CustomEvent(HANDLER_EVENTS.extensionExit)\n        )\n      }\n    }\n\n    return { success: true }\n  }\n\n  async cancelPairActiveVault(params) {\n    return await this.client.cancelPairActiveVault(params.inviteCode)\n  }\n\n  async activeVaultRemoveFile(params) {\n    await this.client.activeVaultRemoveFile(params.key)\n    return { success: true }\n  }\n\n  async fetchFavicon(params) {\n    return await this.client.fetchFavicon(params.url)\n  }\n\n  async generateOtpCodesByIds(params) {\n    return await this.client.generateOtpCodesByIds(params.recordIds)\n  }\n\n  async generateHotpNext(params) {\n    return await this.client.generateHotpNext(params.recordId)\n  }\n\n  async addOtpToRecord(params) {\n    await this.client.addOtpToRecord(params.recordId, params.otpInput)\n    return { success: true }\n  }\n\n  async removeOtpFromRecord(params) {\n    await this.client.removeOtpFromRecord(params.recordId)\n    return { success: true }\n  }\n}\n"
  },
  {
    "path": "src/services/ipc/MethodRegistry.js",
    "content": "import { SecurityErrorCodes } from '../../constants/securityErrors.js'\nimport { createErrorWithCode } from '../../utils/createErrorWithCode.js'\nimport { logger } from '../../utils/logger'\n\n/**\n * Registry for IPC method handlers with configuration support\n */\nexport class MethodRegistry {\n  /**\n   * @param {Function} wrapperFn - Optional function to wrap all handlers\n   */\n  constructor(wrapperFn = null) {\n    this.handlers = new Map()\n    this.configs = new Map()\n    this.wrapperFn = wrapperFn\n  }\n\n  /**\n   * Register a handler for a method\n   * @param {string} name - Method name\n   * @param {Function} handler - Handler function\n   * @param {Object} config - Configuration for the handler\n   */\n  register(name, handler, config = {}) {\n    // Apply wrapper if provided\n    const wrappedHandler = this.wrapperFn ? this.wrapperFn(handler) : handler\n    this.handlers.set(name, wrappedHandler)\n    this.configs.set(name, {\n      requiresStatus: config.requiresStatus || [],\n      logLevel: config.logLevel || 'INFO',\n      ...config\n    })\n  }\n\n  /**\n   * Execute a registered method\n   * @param {string} methodName - Name of the method to execute\n   * @param {any} params - Parameters for the method\n   * @param {Object} context - Execution context (client, logger, etc.)\n   */\n  async execute(methodName, params, context) {\n    const handler = this.handlers.get(methodName)\n    if (!handler) {\n      logger.error('METHOD-REGISTRY', `Unknown method: ${methodName}`)\n      const availableMethods = Array.from(this.handlers.keys()).slice(0, 10)\n      logger.error(\n        'METHOD-REGISTRY',\n        `Available methods: ${availableMethods.join(', ')}`\n      )\n      throw new Error(\n        createErrorWithCode(SecurityErrorCodes.UNKNOWN_METHOD, methodName)\n      )\n    }\n\n    const config = this.configs.get(methodName)\n\n    // Check if desktop is authenticated for non-exempt methods\n    const authMethods = [\n      'logIn',\n      'logOut',\n      'checkAuthStatus',\n      'encryptionInit',\n      'encryptionGet',\n      'getDecryptionKey',\n      'decryptVaultKey',\n      'vaultsInit',\n      'recordFailedMasterPassword',\n      'getMasterPasswordStatus',\n      'resetFailedAttempts',\n      'initWithPassword'\n    ]\n    const statusMethods = [\n      'encryptionGetStatus',\n      'vaultsGetStatus',\n      'activeVaultGetStatus'\n    ]\n    const pairingMethods = [\n      'nmGetAppIdentity',\n      'nmGetPairingCode',\n      'nmBeginHandshake',\n      'nmFinishHandshake',\n      'nmCloseSession',\n      'nmConfirmPairing',\n      'checkExtensionPairingStatus'\n    ]\n    const autoLockMethods = ['getAutoLockSettings']\n    const exemptMethods = [\n      ...authMethods,\n      ...statusMethods,\n      ...pairingMethods,\n      ...autoLockMethods\n    ]\n    const shouldCheckAuth = !exemptMethods.includes(methodName)\n\n    if (shouldCheckAuth) {\n      try {\n        const { client } = context\n        const vaultsStatusRes = await client.vaultsGetStatus()\n        logger.info(\n          'METHOD-REGISTRY',\n          `vaultsStatusRes ${JSON.stringify(vaultsStatusRes)}`\n        )\n        if (!!!vaultsStatusRes?.status) {\n          logger.info(\n            'METHOD-REGISTRY',\n            `Desktop not authenticated for method ${methodName}`\n          )\n          throw new Error(\n            createErrorWithCode(\n              SecurityErrorCodes.DESKTOP_NOT_AUTHENTICATED,\n              'Desktop app is not authenticated'\n            )\n          )\n        }\n      } catch (error) {\n        // If we can't check status or not initialized, desktop is not authenticated\n        if (error.message.includes('DESKTOP_NOT_AUTHENTICATED')) {\n          throw error\n        }\n        logger.info(\n          'METHOD-REGISTRY',\n          `Could not verify auth for ${methodName}: ${error.message}`\n        )\n        throw new Error(\n          createErrorWithCode(\n            SecurityErrorCodes.DESKTOP_NOT_AUTHENTICATED,\n            'Desktop app is not authenticated'\n          )\n        )\n      }\n    }\n\n    // Log status checks if configured\n    if (config.requiresStatus && config.requiresStatus.length > 0) {\n      await this.performStatusChecks(methodName, config.requiresStatus, context)\n    }\n\n    // Log method call\n    if (config.logLevel === 'DEBUG') {\n      logger.debug('METHOD-REGISTRY', `Executing ${methodName}`)\n    }\n\n    try {\n      // Execute handler\n      const result = await handler(params)\n\n      // Log result if debug\n      if (config.logLevel === 'DEBUG' && result) {\n        logger.debug('METHOD-REGISTRY', `${methodName} completed`)\n      }\n\n      return result\n    } catch (error) {\n      logger.error(\n        'METHOD-REGISTRY',\n        `Error in ${methodName}: ${error.message}`\n      )\n      throw error\n    }\n  }\n\n  /**\n   * Perform status checks before method execution\n   */\n  async performStatusChecks(methodName, statusChecks, context) {\n    const statuses = {}\n\n    for (const check of statusChecks) {\n      switch (check) {\n        case 'encryption':\n          statuses.encStatus = await context.client.encryptionGetStatus()\n          break\n        case 'vaults':\n          statuses.vaultsStatus = await context.client.vaultsGetStatus()\n          break\n        case 'activeVault':\n          statuses.activeVaultStatus =\n            await context.client.activeVaultGetStatus()\n          break\n      }\n    }\n\n    if (Object.keys(statuses).length > 0) {\n      logger.debug(\n        'METHOD-REGISTRY',\n        `Status before ${methodName}: ${JSON.stringify(statuses)}`\n      )\n    }\n  }\n\n  /**\n   * Get all registered method names\n   */\n  getMethodNames() {\n    return Array.from(this.handlers.keys())\n  }\n\n  /**\n   * Check if a method is registered\n   */\n  hasMethod(name) {\n    return this.handlers.has(name)\n  }\n}\n"
  },
  {
    "path": "src/services/ipc/MethodRegistry.test.js",
    "content": "import { MethodRegistry } from './MethodRegistry'\nimport { SecurityErrorCodes } from '../../constants/securityErrors'\nimport { logger } from '../../utils/logger'\n\n// Mock logger\njest.mock('../../utils/logger', () => ({\n  logger: {\n    log: jest.fn(),\n    info: jest.fn(),\n    debug: jest.fn(),\n    error: jest.fn()\n  }\n}))\n\ndescribe('MethodRegistry', () => {\n  let registry\n  let mockClient\n  let context\n\n  beforeEach(() => {\n    registry = new MethodRegistry()\n    mockClient = {\n      encryptionGetStatus: jest.fn(),\n      vaultsGetStatus: jest.fn(),\n      activeVaultGetStatus: jest.fn()\n    }\n    context = { client: mockClient }\n    jest.clearAllMocks()\n  })\n\n  describe('execute', () => {\n    it('should throw UnknownMethod for unregistered methods', async () => {\n      await expect(\n        registry.execute('unknownMethod', {}, context)\n      ).rejects.toThrow(SecurityErrorCodes.UNKNOWN_METHOD)\n    })\n\n    it('should execute registered methods', async () => {\n      const handler = jest.fn().mockResolvedValue({ success: true })\n      registry.register('testMethod', handler)\n\n      mockClient.vaultsGetStatus.mockResolvedValue({ status: true })\n\n      const result = await registry.execute(\n        'testMethod',\n        { test: 'param' },\n        context\n      )\n\n      expect(handler).toHaveBeenCalledWith({ test: 'param' })\n      expect(result).toEqual({ success: true })\n    })\n\n    describe('authentication checks', () => {\n      beforeEach(() => {\n        const handler = jest.fn().mockResolvedValue({ success: true })\n        registry.register('secureMethod', handler)\n      })\n\n      it('should check authentication for non-exempt methods', async () => {\n        mockClient.vaultsGetStatus.mockResolvedValue({ status: false })\n\n        await expect(\n          registry.execute('secureMethod', {}, context)\n        ).rejects.toThrow(SecurityErrorCodes.DESKTOP_NOT_AUTHENTICATED)\n\n        expect(mockClient.vaultsGetStatus).toHaveBeenCalled()\n      })\n\n      it('should allow access when authenticated', async () => {\n        mockClient.vaultsGetStatus.mockResolvedValue({ status: true })\n\n        const result = await registry.execute('secureMethod', {}, context)\n\n        expect(result).toEqual({ success: true })\n        expect(mockClient.vaultsGetStatus).toHaveBeenCalled()\n      })\n\n      it('should skip auth check for auth methods', async () => {\n        const handler = jest.fn().mockResolvedValue({ success: true })\n        registry.register('logIn', handler)\n\n        // Don't mock vaultsGetStatus - it shouldn't be called\n\n        const result = await registry.execute('logIn', {}, context)\n\n        expect(result).toEqual({ success: true })\n        expect(mockClient.vaultsGetStatus).not.toHaveBeenCalled()\n      })\n\n      it('should skip auth check for encryptionGet', async () => {\n        const handler = jest.fn().mockResolvedValue({ key: 'testKey' })\n        registry.register('encryptionGet', handler)\n\n        // Don't mock vaultsGetStatus - it shouldn't be called\n\n        const result = await registry.execute(\n          'encryptionGet',\n          { key: 'masterPassword' },\n          context\n        )\n\n        expect(result).toEqual({ key: 'testKey' })\n        expect(mockClient.vaultsGetStatus).not.toHaveBeenCalled()\n      })\n\n      it('should skip auth check for status methods', async () => {\n        const handler = jest.fn().mockResolvedValue({ initialized: false })\n        registry.register('vaultsGetStatus', handler)\n\n        // Don't mock vaultsGetStatus - it shouldn't be called for status methods\n\n        const result = await registry.execute('vaultsGetStatus', {}, context)\n\n        expect(result).toEqual({ initialized: false })\n        expect(mockClient.vaultsGetStatus).not.toHaveBeenCalled()\n      })\n\n      it('should skip auth check for pairing methods', async () => {\n        const handler = jest.fn().mockResolvedValue({ identity: 'test' })\n        registry.register('nmGetAppIdentity', handler)\n\n        const result = await registry.execute('nmGetAppIdentity', {}, context)\n\n        expect(result).toEqual({ identity: 'test' })\n        expect(mockClient.vaultsGetStatus).not.toHaveBeenCalled()\n      })\n\n      it('should handle encryption status check errors', async () => {\n        mockClient.vaultsGetStatus.mockRejectedValue(new Error('Network error'))\n\n        await expect(\n          registry.execute('secureMethod', {}, context)\n        ).rejects.toThrow(SecurityErrorCodes.DESKTOP_NOT_AUTHENTICATED)\n      })\n    })\n\n    describe('status checks', () => {\n      it('should perform configured status checks', async () => {\n        const handler = jest.fn().mockResolvedValue({ success: true })\n        registry.register('methodWithChecks', handler, {\n          requiresStatus: ['encryption', 'vaults']\n        })\n\n        mockClient.encryptionGetStatus.mockResolvedValue({ initialized: true })\n        mockClient.vaultsGetStatus.mockResolvedValue({ status: true })\n\n        await registry.execute('methodWithChecks', {}, context)\n\n        expect(mockClient.encryptionGetStatus).toHaveBeenCalledTimes(1) // Only for status check\n        expect(mockClient.vaultsGetStatus).toHaveBeenCalledTimes(2) // Once for auth, once for status\n      })\n    })\n\n    describe('logging', () => {\n      it('should log debug messages when configured', async () => {\n        const handler = jest.fn().mockResolvedValue({ result: 'data' })\n        registry.register('debugMethod', handler, { logLevel: 'DEBUG' })\n\n        mockClient.vaultsGetStatus.mockResolvedValue({ status: true })\n\n        await registry.execute('debugMethod', { param: 'value' }, context)\n\n        expect(logger.debug).toHaveBeenCalledWith(\n          'METHOD-REGISTRY',\n          expect.stringContaining('debugMethod')\n        )\n      })\n\n      it('should log errors', async () => {\n        const handler = jest.fn().mockRejectedValue(new Error('Handler error'))\n        registry.register('errorMethod', handler)\n\n        mockClient.vaultsGetStatus.mockResolvedValue({ status: true })\n\n        await expect(\n          registry.execute('errorMethod', {}, context)\n        ).rejects.toThrow('Handler error')\n\n        expect(logger.error).toHaveBeenCalledWith(\n          'METHOD-REGISTRY',\n          'Error in errorMethod: Handler error'\n        )\n      })\n    })\n  })\n\n  describe('getMethodNames', () => {\n    it('should return registered method names', () => {\n      registry.register('method1', jest.fn())\n      registry.register('method2', jest.fn())\n      registry.register('method3', jest.fn())\n\n      const names = registry.getMethodNames()\n\n      expect(names).toContain('method1')\n      expect(names).toContain('method2')\n      expect(names).toContain('method3')\n      expect(names).toHaveLength(3)\n    })\n  })\n\n  describe('hasMethod', () => {\n    it('should check if method is registered', () => {\n      registry.register('existingMethod', jest.fn())\n\n      expect(registry.hasMethod('existingMethod')).toBe(true)\n      expect(registry.hasMethod('nonExistingMethod')).toBe(false)\n    })\n  })\n})\n"
  },
  {
    "path": "src/services/ipc/SocketManager.js",
    "content": "import fs from 'fs'\nimport { homedir, platform } from 'os'\nimport { join } from 'path'\n\nimport { IPC_SOCKET_DIR_NAME } from '@tetherto/pearpass-lib-constants'\n\nimport { logger } from '../../utils/logger'\n\nconst { unlink } = fs.promises\n\nconst getSocketDir = () => join(homedir(), IPC_SOCKET_DIR_NAME)\n\n/**\n * Manages IPC socket creation and cleanup\n */\nexport class SocketManager {\n  constructor(socketName) {\n    this.socketName = socketName\n    this.socketPath = this.getSocketPath(socketName)\n  }\n\n  /**\n   * Get platform-specific socket path\n   */\n  getSocketPath(socketName) {\n    if (platform() === 'win32') {\n      return `\\\\\\\\?\\\\pipe\\\\${socketName}`\n    }\n\n    return join(getSocketDir(), `${socketName}.sock`)\n  }\n\n  /**\n   * Clean up existing socket file (Unix only)\n   */\n  async cleanupSocket() {\n    if (platform() === 'win32') return\n\n    try {\n      await unlink(this.socketPath)\n      logger.info('SOCKET-MANAGER', 'Cleaned up existing socket file')\n    } catch (err) {\n      if (err.code !== 'ENOENT') {\n        logger.warn(\n          'SOCKET-MANAGER',\n          `Could not clean up socket file: ${err.message}`\n        )\n      }\n    }\n  }\n\n  /**\n   * Ensure the socket directory exists\n   */\n  async ensureSocketDir() {\n    if (platform() === 'win32') return\n    await fs.promises.mkdir(getSocketDir(), { recursive: true })\n  }\n\n  /**\n   * Get the socket path\n   */\n  getPath() {\n    return this.socketPath\n  }\n}\n\n/**\n * Helper function for backward compatibility\n */\nexport const getIpcPath = (socketName) => {\n  const manager = new SocketManager(socketName)\n  return manager.getPath()\n}\n"
  },
  {
    "path": "src/services/ipc/SocketManager.test.js",
    "content": "jest.mock('fs', () => ({\n  promises: {\n    unlink: jest.fn(),\n    mkdir: jest.fn()\n  }\n}))\njest.mock('os', () => ({\n  platform: jest.fn(),\n  homedir: jest.fn().mockReturnValue('/home/testuser')\n}))\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  IPC_SOCKET_DIR_NAME: '.pearpass'\n}))\njest.mock('../../utils/logger', () => ({\n  logger: {\n    info: jest.fn(),\n    warn: jest.fn()\n  }\n}))\n\nimport fs from 'fs'\n\nimport { SocketManager, getIpcPath } from './SocketManager'\n\nconst { logger } = require('../../utils/logger')\n\ndescribe('SocketManager', () => {\n  const socketName = 'testSocket'\n  const unixPath = '/home/testuser/.pearpass/testSocket.sock'\n  const winPath = '\\\\\\\\?\\\\pipe\\\\testSocket'\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  describe('getSocketPath', () => {\n    it('returns Windows pipe path on win32', () => {\n      require('os').platform.mockReturnValue('win32')\n      const manager = new SocketManager(socketName)\n      expect(manager.getSocketPath(socketName)).toBe(winPath)\n    })\n\n    it('returns Unix socket path on non-win32', () => {\n      require('os').platform.mockReturnValue('linux')\n      const manager = new SocketManager(socketName)\n      expect(manager.getSocketPath(socketName)).toBe(unixPath)\n    })\n  })\n\n  describe('getPath', () => {\n    it('returns the socket path', () => {\n      require('os').platform.mockReturnValue('linux')\n\n      const manager = new SocketManager(socketName)\n      expect(manager.getPath()).toBe(unixPath)\n    })\n  })\n\n  describe('cleanupSocket', () => {\n    it('does nothing on win32', async () => {\n      require('os').platform.mockReturnValue('win32')\n      const manager = new SocketManager(socketName)\n      await manager.cleanupSocket()\n      expect(fs.promises.unlink).not.toHaveBeenCalled()\n    })\n\n    it('calls unlink and logs info on Unix', async () => {\n      require('os').platform.mockReturnValue('linux')\n\n      fs.promises.unlink.mockResolvedValue()\n      const manager = new SocketManager(socketName)\n      await manager.cleanupSocket()\n      expect(fs.promises.unlink).toHaveBeenCalledWith(unixPath)\n      expect(logger.info).toHaveBeenCalledWith(\n        'SOCKET-MANAGER',\n        'Cleaned up existing socket file'\n      )\n    })\n\n    it('logs warn if unlink throws non-ENOENT error', async () => {\n      require('os').platform.mockReturnValue('linux')\n\n      const error = new Error('fail')\n      error.code = 'EACCES'\n      fs.promises.unlink.mockRejectedValue(error)\n      const manager = new SocketManager(socketName)\n      await manager.cleanupSocket()\n      expect(logger.warn).toHaveBeenCalledWith(\n        'SOCKET-MANAGER',\n        expect.stringContaining('Could not clean up socket file')\n      )\n    })\n\n    it('does not log warn if unlink throws ENOENT error', async () => {\n      require('os').platform.mockReturnValue('linux')\n\n      const error = new Error('not found')\n      error.code = 'ENOENT'\n      fs.promises.unlink.mockRejectedValue(error)\n      const manager = new SocketManager(socketName)\n      await manager.cleanupSocket()\n      expect(logger.warn).not.toHaveBeenCalled()\n    })\n  })\n})\n\ndescribe('getIpcPath', () => {\n  it('returns socket path for given name', () => {\n    require('os').platform.mockReturnValue('linux')\n    expect(getIpcPath('foo')).toBe('/home/testuser/.pearpass/foo.sock')\n  })\n})\n"
  },
  {
    "path": "src/services/nativeMessagingIPCServer.js",
    "content": "import IPC from 'pear-ipc'\n\nimport { COMMAND_DEFINITIONS } from '../shared/commandDefinitions'\nimport { logger } from '../utils/logger'\nimport { EncryptionHandlers } from './handlers/EncryptionHandlers'\nimport { SecureRequestHandler } from './handlers/SecureRequestHandler'\nimport { SecurityHandlers } from './handlers/SecurityHandlers'\nimport { VaultHandlers } from './handlers/VaultHandlers'\nimport { MethodRegistry } from './ipc/MethodRegistry'\nimport { SocketManager, getIpcPath } from './ipc/SocketManager'\n\n// Re-export for backward compatibility\nexport { getIpcPath }\n\n/**\n * IPC server for native messaging bridge communication\n */\nexport class NativeMessagingIPCServer {\n  /**\n   * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} pearpassClient\n   */\n  constructor(pearpassClient) {\n    /** @type {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} */\n    this.client = pearpassClient\n    /** @type {import('pear-ipc').Server|null} */\n    this.server = null\n    /** @type {boolean} */\n    this.isRunning = false\n    /** @type {SocketManager} */\n    this.socketManager = new SocketManager('pearpass-native-messaging')\n    /** @type {string} */\n    this.socketPath = this.socketManager.getPath()\n\n    // Create wrapper function for IPC activity\n    const ipcActivityWrapper =\n      (handler) =>\n      async (...args) => {\n        this.emitIPCActivity()\n        return handler(...args)\n      }\n\n    /** @type {MethodRegistry} */\n    this.methodRegistry = new MethodRegistry(ipcActivityWrapper)\n    /** @type {MethodRegistry} */\n    this.secureMethodRegistry = new MethodRegistry(ipcActivityWrapper)\n    /** @type {Map<string, number>} */\n    this.clientRequestCounts = new Map()\n\n    // Initialize handlers\n    this.setupHandlers()\n  }\n\n  /**\n   * Setup all method handlers\n   */\n  setupHandlers() {\n    // Security handlers\n    const securityHandlers = new SecurityHandlers(this.client)\n    const encryptionHandlers = new EncryptionHandlers(this.client)\n    const vaultHandlers = new VaultHandlers(this.client)\n\n    // Register security methods (always available)\n    this.methodRegistry.register(\n      'nmGetAppIdentity',\n      securityHandlers.nmGetAppIdentity.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'nmConfirmPairing',\n      securityHandlers.nmConfirmPairing.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'nmBeginHandshake',\n      securityHandlers.nmBeginHandshake.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'nmFinishHandshake',\n      securityHandlers.nmFinishHandshake.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'nmCloseSession',\n      securityHandlers.nmCloseSession.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'nmResetPairing',\n      securityHandlers.nmResetPairing.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'getAutoLockSettings',\n      securityHandlers.getAutoLockSettings.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'setAutoLockTimeout',\n      securityHandlers.setAutoLockTimeout.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'setAutoLockEnabled',\n      securityHandlers.setAutoLockEnabled.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'resetTimer',\n      securityHandlers.resetTimer.bind(securityHandlers)\n    )\n    this.methodRegistry.register(\n      'checkExtensionPairingStatus',\n      securityHandlers.checkExtensionPairingStatus.bind(securityHandlers)\n    )\n\n    // Register encryption bootstrap methods\n    this.methodRegistry.register(\n      'encryptionInit',\n      encryptionHandlers.encryptionInit.bind(encryptionHandlers)\n    )\n    this.methodRegistry.register(\n      'encryptionGetStatus',\n      encryptionHandlers.encryptionGetStatus.bind(encryptionHandlers)\n    )\n\n    // Register secure channel handler\n    const secureRequestHandler = new SecureRequestHandler(\n      this.client,\n      this.secureMethodRegistry\n    )\n    this.methodRegistry.register(\n      'nmSecureRequest',\n      secureRequestHandler.handle.bind(secureRequestHandler),\n      { logLevel: 'DEBUG' }\n    )\n\n    // Register methods accessible through secure channel\n    this.registerSecureMethods(encryptionHandlers, vaultHandlers)\n  }\n\n  /**\n   * Emit IPC activity event to reset inactivity timer\n   */\n  emitIPCActivity() {\n    if (global.window) {\n      logger.debug('IPC-SERVER', 'Emitting IPC activity event')\n      global.window.dispatchEvent(new Event('ipc-activity'))\n    }\n  }\n\n  /**\n   * Register methods that are only accessible through the secure channel\n   */\n  registerSecureMethods(encryptionHandlers, vaultHandlers) {\n    // Encryption methods\n    this.secureMethodRegistry.register(\n      'encryptionInit',\n      encryptionHandlers.encryptionInit.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'encryptionGetStatus',\n      encryptionHandlers.encryptionGetStatus.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'encryptionGet',\n      encryptionHandlers.encryptionGet.bind(encryptionHandlers),\n      { logLevel: 'DEBUG' }\n    )\n    this.secureMethodRegistry.register(\n      'encryptionAdd',\n      encryptionHandlers.encryptionAdd.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'hashPassword',\n      encryptionHandlers.hashPassword.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'encryptVaultKeyWithHashedPassword',\n      encryptionHandlers.encryptVaultKeyWithHashedPassword.bind(\n        encryptionHandlers\n      )\n    )\n    this.secureMethodRegistry.register(\n      'encryptVaultWithKey',\n      encryptionHandlers.encryptVaultWithKey.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'getDecryptionKey',\n      encryptionHandlers.getDecryptionKey.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'decryptVaultKey',\n      encryptionHandlers.decryptVaultKey.bind(encryptionHandlers),\n      { logLevel: 'DEBUG' }\n    )\n    this.secureMethodRegistry.register(\n      'getMasterPasswordStatus',\n      encryptionHandlers.getMasterPasswordStatus.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'recordFailedMasterPassword',\n      encryptionHandlers.recordFailedMasterPassword.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'resetFailedAttempts',\n      encryptionHandlers.resetFailedAttempts.bind(encryptionHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'initWithPassword',\n      encryptionHandlers.initWithPassword.bind(encryptionHandlers)\n    )\n\n    // Vault methods\n    this.secureMethodRegistry.register(\n      'vaultsInit',\n      vaultHandlers.vaultsInit.bind(vaultHandlers),\n      { logLevel: 'DEBUG' }\n    )\n    this.secureMethodRegistry.register(\n      'vaultsGetStatus',\n      vaultHandlers.vaultsGetStatus.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'vaultsGet',\n      vaultHandlers.vaultsGet.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'vaultsList',\n      vaultHandlers.vaultsList.bind(vaultHandlers),\n      { requiresStatus: ['encryption', 'vaults'], logLevel: 'DEBUG' }\n    )\n    this.secureMethodRegistry.register(\n      'vaultsAdd',\n      vaultHandlers.vaultsAdd.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'vaultsClose',\n      vaultHandlers.vaultsClose.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultInit',\n      vaultHandlers.activeVaultInit.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultGetStatus',\n      vaultHandlers.activeVaultGetStatus.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultGet',\n      vaultHandlers.activeVaultGet.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultList',\n      vaultHandlers.activeVaultList.bind(vaultHandlers),\n      {\n        requiresStatus: ['encryption', 'vaults', 'activeVault'],\n        logLevel: 'DEBUG'\n      }\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultAdd',\n      vaultHandlers.activeVaultAdd.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultRemove',\n      vaultHandlers.activeVaultRemove.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultClose',\n      vaultHandlers.activeVaultClose.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultCreateInvite',\n      vaultHandlers.activeVaultCreateInvite.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultDeleteInvite',\n      vaultHandlers.activeVaultDeleteInvite.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'pairActiveVault',\n      vaultHandlers.pairActiveVault.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'initListener',\n      vaultHandlers.initListener.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'closeAllInstances',\n      vaultHandlers.closeAllInstances.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'cancelPairActiveVault',\n      vaultHandlers.cancelPairActiveVault.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'activeVaultRemoveFile',\n      vaultHandlers.activeVaultRemoveFile.bind(vaultHandlers)\n    )\n    this.secureMethodRegistry.register(\n      'fetchFavicon',\n      vaultHandlers.fetchFavicon.bind(vaultHandlers),\n      {\n        requiresStatus: ['encryption', 'vaults', 'activeVault'],\n        logLevel: 'DEBUG'\n      }\n    )\n\n    // OTP methods\n    this.secureMethodRegistry.register(\n      'generateOtpCodesByIds',\n      vaultHandlers.generateOtpCodesByIds.bind(vaultHandlers),\n      {\n        requiresStatus: ['encryption', 'vaults', 'activeVault'],\n        logLevel: 'DEBUG'\n      }\n    )\n    this.secureMethodRegistry.register(\n      'generateHotpNext',\n      vaultHandlers.generateHotpNext.bind(vaultHandlers),\n      { requiresStatus: ['encryption', 'vaults', 'activeVault'] }\n    )\n    this.secureMethodRegistry.register(\n      'addOtpToRecord',\n      vaultHandlers.addOtpToRecord.bind(vaultHandlers),\n      { requiresStatus: ['encryption', 'vaults', 'activeVault'] }\n    )\n    this.secureMethodRegistry.register(\n      'removeOtpFromRecord',\n      vaultHandlers.removeOtpFromRecord.bind(vaultHandlers),\n      { requiresStatus: ['encryption', 'vaults', 'activeVault'] }\n    )\n  }\n\n  /**\n   * @returns {Promise<void>}\n   */\n  async start() {\n    if (this.isRunning) {\n      logger.info('IPC-SERVER', 'IPC server is already running')\n      return\n    }\n\n    try {\n      logger.info('IPC-SERVER', 'Starting native messaging IPC server...')\n\n      await this.socketManager.ensureSocketDir()\n      await this.socketManager.cleanupSocket()\n\n      // Build handlers from registry\n      const handlers = {}\n      for (const [name, handler] of this.methodRegistry.handlers) {\n        handlers[name] = handler\n      }\n\n      logger.info(\n        'IPC-SERVER',\n        `Registered ${this.methodRegistry.getMethodNames().length} handlers`\n      )\n\n      // Create IPC server\n      this.server = new IPC.Server({\n        socketPath: this.socketPath,\n        methods: COMMAND_DEFINITIONS,\n        handlers: handlers\n      })\n\n      // Handle new client connections\n      this.server.on('client', (client) => {\n        logger.info('IPC-SERVER', `New IPC client connected: ${client.id}`)\n\n        // Initialize request count for this client\n        this.clientRequestCounts.set(client.id, 0)\n\n        client.on('close', () => {\n          const requestCount = this.clientRequestCounts.get(client.id) || 0\n          logger.info(\n            'IPC-SERVER',\n            `IPC client disconnected: ${client.id} after ${requestCount} requests`\n          )\n          this.clientRequestCounts.delete(client.id)\n        })\n\n        client.on('error', (error) => {\n          logger.error(\n            'IPC-SERVER',\n            `IPC client error (${client.id}): ${error.message}`\n          )\n        })\n      })\n\n      this.server.on('error', (error) => {\n        logger.error('IPC-SERVER', `IPC server error: ${error.message}`)\n      })\n\n      // Start listening\n      await this.server.ready()\n\n      this.isRunning = true\n      logger.info(\n        'IPC-SERVER',\n        `Native messaging IPC server started successfully on ${this.socketPath}`\n      )\n    } catch (error) {\n      logger.error('IPC-SERVER', `Failed to start IPC server: ${error.message}`)\n      throw error\n    }\n  }\n\n  /**\n   * @returns {Promise<void>}\n   */\n  async stop() {\n    if (!this.isRunning) {\n      return\n    }\n\n    logger.info('IPC-SERVER', 'Stopping native messaging IPC server...')\n\n    if (this.server) {\n      await this.server.close()\n      this.server = null\n    }\n\n    // Clean up socket file\n    await this.socketManager.cleanupSocket()\n\n    this.isRunning = false\n    logger.info('IPC-SERVER', 'Native messaging IPC server stopped')\n  }\n}\n\n/** @type {NativeMessagingIPCServer|null} */\nlet ipcServerInstance = null\n/** @type {Promise<NativeMessagingIPCServer>|null} */\nlet startPromise = null\n\n/**\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} pearpassClient\n * @returns {Promise<NativeMessagingIPCServer>}\n */\nexport const startNativeMessagingIPC = async (pearpassClient) => {\n  if (ipcServerInstance?.isRunning) {\n    logger.info('IPC-SERVER', 'Native messaging IPC server is already running')\n    return ipcServerInstance\n  }\n\n  if (startPromise) {\n    logger.info('IPC-SERVER', 'IPC server is already starting, waiting...')\n    return startPromise\n  }\n\n  startPromise = (async () => {\n    ipcServerInstance = new NativeMessagingIPCServer(pearpassClient)\n    await ipcServerInstance.start()\n    return ipcServerInstance\n  })()\n\n  try {\n    return await startPromise\n  } finally {\n    startPromise = null\n  }\n}\n\n/**\n * @returns {Promise<void>}\n */\nexport const stopNativeMessagingIPC = async () => {\n  if (!ipcServerInstance?.isRunning) {\n    logger.info('IPC-SERVER', 'Native messaging IPC server is not running')\n    return\n  }\n\n  await ipcServerInstance.stop()\n  ipcServerInstance = null\n}\n\n/**\n * @returns {boolean}\n */\nexport const isNativeMessagingIPCRunning = () =>\n  ipcServerInstance?.isRunning || false\n\n/**\n * @returns {string}\n */\nexport const getIPCSocketPath = () =>\n  ipcServerInstance?.socketPath ?? getIpcPath('pearpass-native-messaging')\n"
  },
  {
    "path": "src/services/nativeMessagingIPCServer.test.js",
    "content": "import { platform } from 'os'\nimport { join } from 'path'\n\nimport IPC from 'pear-ipc'\n\nimport {\n  getIpcPath,\n  getIPCSocketPath,\n  isNativeMessagingIPCRunning,\n  NativeMessagingIPCServer,\n  startNativeMessagingIPC,\n  stopNativeMessagingIPC\n} from './nativeMessagingIPCServer.js'\nimport { logger } from '../utils/logger.js'\n\n// Mock dependencies\njest.mock('os', () => ({\n  ...jest.requireActual('os'),\n  platform: jest.fn(),\n  tmpdir: jest.fn(() => '/tmp'),\n  homedir: jest.fn(() => '/home/testuser')\n}))\n\njest.mock('fs', () => ({\n  ...jest.requireActual('fs'),\n  promises: {\n    ...jest.requireActual('fs').promises,\n    mkdir: jest.fn().mockResolvedValue(undefined),\n    unlink: jest.fn().mockResolvedValue(undefined)\n  }\n}))\n\n// Mock Pear.config.storage and pearDir (used by SocketManager for socket paths)\nglobal.Pear = {\n  config: {\n    storage: '/mock/pear/storage',\n    pearDir: '/tmp'\n  }\n}\n\njest.mock('pear-ipc', () => ({\n  Server: jest.fn().mockImplementation(function (options) {\n    this.options = options\n    this.on = jest.fn()\n    this.ready = jest.fn().mockResolvedValue()\n    this.close = jest.fn().mockResolvedValue()\n    return this\n  })\n}))\n\njest.mock('../utils/logger.js', () => ({\n  logger: {\n    log: jest.fn(),\n    error: jest.fn(),\n    info: jest.fn(),\n    debug: jest.fn(),\n    debugMode: true\n  }\n}))\n\n// Mock the new handler modules\njest.mock('./handlers/SecurityHandlers', () => ({\n  SecurityHandlers: jest.fn().mockImplementation(function (client) {\n    this.client = client\n    this.nmGetAppIdentity = jest.fn().mockResolvedValue({\n      ed25519PublicKey: 'mock-ed25519-key',\n      x25519PublicKey: 'mock-x25519-key',\n      fingerprint: 'mock-fingerprint'\n    })\n    this.nmConfirmPairing = jest.fn().mockResolvedValue({ confirmed: true })\n    this.nmBeginHandshake = jest.fn().mockResolvedValue({\n      sessionId: 'mock-session-id',\n      appEphemeralPubB64: 'mock-ephemeral-key',\n      signatureB64: 'mock-signature'\n    })\n    this.nmFinishHandshake = jest.fn().mockResolvedValue({ ok: true })\n    this.nmCloseSession = jest.fn().mockResolvedValue({ ok: true })\n    this.nmResetPairing = jest.fn().mockResolvedValue({\n      ok: true,\n      clearedSessions: 0,\n      newIdentity: {\n        ed25519PublicKey: 'new-mock-ed25519-key',\n        x25519PublicKey: 'new-mock-x25519-key',\n        creationDate: new Date().toISOString()\n      }\n    })\n    this.checkExtensionPairingStatus = jest.fn().mockResolvedValue({\n      isPaired: false,\n      status: 'not_paired'\n    })\n    this.getAutoLockSettings = jest.fn().mockResolvedValue({\n      autoLockEnabled: true,\n      autoLockTimeoutMs: 1234\n    })\n    this.setAutoLockTimeout = jest.fn().mockResolvedValue({ ok: true })\n    this.setAutoLockEnabled = jest.fn().mockResolvedValue({ ok: true })\n    this.resetTimer = jest.fn().mockResolvedValue({ ok: true })\n  })\n}))\n\njest.mock('./handlers/EncryptionHandlers', () => ({\n  EncryptionHandlers: jest.fn().mockImplementation(function (client) {\n    this.client = client\n    this.encryptionInit = jest.fn().mockResolvedValue({ initialized: true })\n    this.encryptionGetStatus = jest.fn().mockResolvedValue({ status: true })\n    this.encryptionGet = jest.fn().mockResolvedValue({ data: 'encrypted-data' })\n    this.encryptionAdd = jest.fn().mockResolvedValue({ success: true })\n    this.hashPassword = jest.fn().mockResolvedValue('hashed-password')\n    this.encryptVaultKeyWithHashedPassword = jest\n      .fn()\n      .mockResolvedValue('encrypted-key')\n    this.encryptVaultWithKey = jest.fn().mockResolvedValue('encrypted-vault')\n    this.getDecryptionKey = jest.fn().mockResolvedValue('decryption-key')\n    this.decryptVaultKey = jest.fn().mockResolvedValue('decrypted-key')\n    this.recordFailedMasterPassword = jest\n      .fn()\n      .mockResolvedValue({ success: true })\n    this.getMasterPasswordStatus = jest\n      .fn()\n      .mockResolvedValue({ isLocked: false, failedAttempts: 0 })\n    this.resetFailedAttempts = jest.fn().mockResolvedValue({ success: true })\n    this.initWithPassword = jest.fn().mockResolvedValue(true)\n  })\n}))\n\njest.mock('./handlers/VaultHandlers', () => ({\n  VaultHandlers: jest.fn().mockImplementation(function (client) {\n    this.client = client\n    this.vaultsInit = jest.fn().mockResolvedValue({ initialized: true })\n    this.vaultsGetStatus = jest.fn().mockResolvedValue({ status: true })\n    this.vaultsGet = jest.fn().mockResolvedValue({ data: {} })\n    this.vaultsList = jest.fn().mockResolvedValue({ data: [] })\n    this.vaultsAdd = jest.fn().mockResolvedValue({ success: true })\n    this.vaultsClose = jest.fn().mockResolvedValue({ success: true })\n    this.activeVaultInit = jest.fn().mockResolvedValue({ success: true })\n    this.loadVaultMetadata = jest.fn().mockResolvedValue()\n    this.activeVaultGetStatus = jest.fn().mockResolvedValue({ status: true })\n    this.activeVaultGet = jest.fn().mockResolvedValue({ data: {} })\n    this.activeVaultList = jest.fn().mockResolvedValue({ data: [] })\n    this.activeVaultAdd = jest.fn().mockResolvedValue({ success: true })\n    this.activeVaultRemove = jest.fn().mockResolvedValue({ success: true })\n    this.activeVaultClose = jest.fn().mockResolvedValue({ success: true })\n    this.activeVaultCreateInvite = jest\n      .fn()\n      .mockResolvedValue({ invite: 'mock-invite' })\n    this.activeVaultDeleteInvite = jest\n      .fn()\n      .mockResolvedValue({ success: true })\n    this.pairActiveVault = jest.fn().mockResolvedValue({ success: true })\n    this.initListener = jest.fn().mockResolvedValue({ success: true })\n    this.closeAllInstances = jest.fn().mockResolvedValue({ success: true })\n    this.cancelPairActiveVault = jest.fn().mockResolvedValue({ success: true })\n    this.activeVaultRemoveFile = jest.fn().mockResolvedValue({ success: true })\n    this.fetchFavicon = jest.fn().mockResolvedValue({ favicon: 'mock-favicon' })\n    this.generateOtpCodesByIds = jest.fn().mockResolvedValue({ codes: [] })\n    this.generateHotpNext = jest.fn().mockResolvedValue({ code: '123456' })\n    this.addOtpToRecord = jest.fn().mockResolvedValue({ success: true })\n    this.removeOtpFromRecord = jest.fn().mockResolvedValue({ success: true })\n  })\n}))\n\njest.mock('./handlers/SecureRequestHandler', () => ({\n  SecureRequestHandler: jest\n    .fn()\n    .mockImplementation(function (client, registry) {\n      this.client = client\n      this.methodRegistry = registry\n      this.handle = jest.fn().mockResolvedValue({\n        nonceB64: 'mock-nonce',\n        ciphertextB64: 'mock-ciphertext',\n        seq: 1\n      })\n    })\n}))\n\nconst mockPearpassClient = {\n  encryptionInit: jest.fn(),\n  encryptionGetStatus: jest.fn(),\n  encryptionGet: jest.fn(),\n  encryptionAdd: jest.fn(),\n  vaultsInit: jest.fn(),\n  vaultsGetStatus: jest.fn(),\n  vaultsGet: jest.fn(),\n  vaultsList: jest.fn(),\n  vaultsAdd: jest.fn(),\n  vaultsClose: jest.fn(),\n  activeVaultInit: jest.fn(),\n  activeVaultGetStatus: jest.fn(),\n  activeVaultGet: jest.fn(),\n  activeVaultList: jest.fn(),\n  activeVaultAdd: jest.fn(),\n  activeVaultRemove: jest.fn(),\n  activeVaultClose: jest.fn(),\n  activeVaultCreateInvite: jest.fn(),\n  activeVaultDeleteInvite: jest.fn(),\n  hashPassword: jest.fn(),\n  encryptVaultKeyWithHashedPassword: jest.fn(),\n  encryptVaultWithKey: jest.fn(),\n  getDecryptionKey: jest.fn(),\n  decryptVaultKey: jest.fn(),\n  pairActiveVault: jest.fn(),\n  initListener: jest.fn(),\n  closeAllInstances: jest.fn(),\n  cancelPairActiveVault: jest.fn()\n}\n\ndescribe('nativeMessagingIPCServer', () => {\n  beforeEach(async () => {\n    jest.clearAllMocks()\n\n    // Reset singleton instance state before each test\n    try {\n      await stopNativeMessagingIPC()\n    } catch {\n      // ignore\n    }\n  })\n\n  describe('getIpcPath', () => {\n    it('should return a windows named pipe path on win32', () => {\n      platform.mockReturnValue('win32')\n      const socketName = 'test-socket'\n      expect(getIpcPath(socketName)).toBe(`\\\\\\\\?\\\\pipe\\\\${socketName}`)\n    })\n\n    it('should return a unix domain socket path on non-win32 platforms', () => {\n      platform.mockReturnValue('linux')\n      const socketName = 'test-socket'\n      expect(getIpcPath(socketName)).toBe(\n        join('/home/testuser', '.pearpass', `${socketName}.sock`)\n      )\n    })\n  })\n\n  describe('NativeMessagingIPCServer', () => {\n    let serverInstance\n\n    beforeEach(() => {\n      platform.mockReturnValue('linux')\n      serverInstance = new NativeMessagingIPCServer(mockPearpassClient)\n    })\n\n    it('should construct with initial state', () => {\n      expect(serverInstance.client).toBe(mockPearpassClient)\n      expect(serverInstance.server).toBeNull()\n      expect(serverInstance.isRunning).toBe(false)\n      expect(serverInstance.socketPath).toBe(\n        join('/home/testuser', '.pearpass', 'pearpass-native-messaging.sock')\n      )\n    })\n\n    describe('start', () => {\n      it('should start the IPC server successfully', async () => {\n        await serverInstance.start()\n\n        expect(IPC.Server).toHaveBeenCalledTimes(1)\n        expect(serverInstance.server.ready).toHaveBeenCalledTimes(1)\n        expect(serverInstance.isRunning).toBe(true)\n        expect(logger.info).toHaveBeenCalledWith(\n          'IPC-SERVER',\n          'Starting native messaging IPC server...'\n        )\n        expect(logger.info).toHaveBeenCalledWith(\n          'IPC-SERVER',\n          `Native messaging IPC server started successfully on ${serverInstance.socketPath}`\n        )\n      })\n\n      it('should not start if already running', async () => {\n        serverInstance.isRunning = true\n        await serverInstance.start()\n\n        expect(IPC.Server).not.toHaveBeenCalled()\n        expect(logger.info).toHaveBeenCalledWith(\n          'IPC-SERVER',\n          'IPC server is already running'\n        )\n      })\n\n      it('should handle and log errors during startup', async () => {\n        const error = new Error('Startup failed')\n        IPC.Server.mockImplementationOnce(function () {\n          this.on = jest.fn()\n          this.ready = jest.fn().mockRejectedValue(error)\n          return this\n        })\n\n        const newServer = new NativeMessagingIPCServer(mockPearpassClient)\n        await expect(newServer.start()).rejects.toThrow(error)\n        expect(newServer.isRunning).toBe(false)\n        expect(logger.error).toHaveBeenCalledWith(\n          'IPC-SERVER',\n          `Failed to start IPC server: ${error.message}`\n        )\n      })\n\n      it('should correctly wire up secure handlers to the pearpass client', async () => {\n        await serverInstance.start()\n        const handlers = IPC.Server.mock.calls[0][0].handlers\n\n        // Test that security handlers are available\n        expect(handlers.nmGetAppIdentity).toBeDefined()\n        expect(handlers.nmBeginHandshake).toBeDefined()\n        expect(handlers.nmFinishHandshake).toBeDefined()\n        expect(handlers.nmSecureRequest).toBeDefined()\n        expect(handlers.nmCloseSession).toBeDefined()\n\n        // Test encryption bootstrap handlers\n        expect(handlers.encryptionInit).toBeDefined()\n        expect(handlers.encryptionGetStatus).toBeDefined()\n\n        // Test that sensitive handlers are NOT directly exposed\n        // They should only be accessible via nmSecureRequest\n        expect(handlers.encryptionGet).toBeUndefined()\n        expect(handlers.encryptionAdd).toBeUndefined()\n        expect(handlers.vaultsList).toBeUndefined()\n        expect(handlers.activeVaultList).toBeUndefined()\n      })\n\n      it('should call nmGetAppIdentity handler correctly', async () => {\n        await serverInstance.start()\n        const handlers = IPC.Server.mock.calls[0][0].handlers\n\n        const result = await handlers.nmGetAppIdentity()\n        expect(result).toEqual({\n          ed25519PublicKey: 'mock-ed25519-key',\n          x25519PublicKey: 'mock-x25519-key',\n          fingerprint: 'mock-fingerprint'\n        })\n      })\n\n      it('should call nmBeginHandshake handler correctly', async () => {\n        await serverInstance.start()\n        const handlers = IPC.Server.mock.calls[0][0].handlers\n\n        const result = await handlers.nmBeginHandshake({\n          extEphemeralPubB64: 'test-key'\n        })\n        expect(result).toEqual({\n          sessionId: 'mock-session-id',\n          appEphemeralPubB64: 'mock-ephemeral-key',\n          signatureB64: 'mock-signature'\n        })\n      })\n\n      it('should call nmSecureRequest handler correctly', async () => {\n        await serverInstance.start()\n        const handlers = IPC.Server.mock.calls[0][0].handlers\n\n        const result = await handlers.nmSecureRequest({\n          sessionId: 'test-session',\n          nonceB64: 'test-nonce',\n          ciphertextB64: 'test-ciphertext',\n          seq: 1\n        })\n        expect(result).toEqual({\n          nonceB64: 'mock-nonce',\n          ciphertextB64: 'mock-ciphertext',\n          seq: 1\n        })\n      })\n\n      it('should expose auto-lock handlers on the method registry', async () => {\n        await serverInstance.start()\n        const handlers = IPC.Server.mock.calls[0][0].handlers\n\n        expect(handlers.getAutoLockSettings).toBeDefined()\n        expect(handlers.setAutoLockTimeout).toBeDefined()\n        expect(handlers.setAutoLockEnabled).toBeDefined()\n        expect(handlers.resetTimer).toBeDefined()\n      })\n\n      it('should call auto-lock handlers correctly', async () => {\n        await serverInstance.start()\n        const handlers = IPC.Server.mock.calls[0][0].handlers\n\n        expect(await handlers.getAutoLockSettings()).toEqual({\n          autoLockEnabled: true,\n          autoLockTimeoutMs: 1234\n        })\n        expect(\n          await handlers.setAutoLockTimeout({ autoLockTimeoutMs: 5000 })\n        ).toEqual({\n          ok: true\n        })\n        expect(\n          await handlers.setAutoLockEnabled({ autoLockEnabled: false })\n        ).toEqual({\n          ok: true\n        })\n        expect(await handlers.resetTimer()).toEqual({ ok: true })\n      })\n    })\n\n    describe('stop', () => {\n      it('should stop the server if it is running', async () => {\n        await serverInstance.start()\n        const server = serverInstance.server\n\n        await serverInstance.stop()\n\n        expect(server.close).toHaveBeenCalledTimes(1)\n        expect(serverInstance.isRunning).toBe(false)\n        expect(serverInstance.server).toBeNull()\n        expect(logger.info).toHaveBeenCalledWith(\n          'IPC-SERVER',\n          'Stopping native messaging IPC server...'\n        )\n        expect(logger.info).toHaveBeenCalledWith(\n          'IPC-SERVER',\n          'Native messaging IPC server stopped'\n        )\n      })\n\n      it('should not do anything if the server is not running', async () => {\n        await serverInstance.stop()\n        expect(logger.info).not.toHaveBeenCalledWith(\n          'IPC-SERVER',\n          'Stopping native messaging IPC server...'\n        )\n      })\n    })\n  })\n\n  describe('Singleton Functions', () => {\n    beforeEach(() => {\n      platform.mockReturnValue('linux')\n    })\n\n    it('startNativeMessagingIPC should start and return an instance', async () => {\n      const instance = await startNativeMessagingIPC(mockPearpassClient)\n      expect(instance).toBeInstanceOf(NativeMessagingIPCServer)\n      expect(instance.isRunning).toBe(true)\n      expect(isNativeMessagingIPCRunning()).toBe(true)\n    })\n\n    it('startNativeMessagingIPC should return the existing instance if already running', async () => {\n      const instance1 = await startNativeMessagingIPC(mockPearpassClient)\n      const instance2 = await startNativeMessagingIPC(mockPearpassClient)\n      expect(instance1).toBe(instance2)\n      expect(logger.info).toHaveBeenCalledWith(\n        'IPC-SERVER',\n        'Native messaging IPC server is already running'\n      )\n    })\n\n    it('stopNativeMessagingIPC should stop the running instance', async () => {\n      await startNativeMessagingIPC(mockPearpassClient)\n      expect(isNativeMessagingIPCRunning()).toBe(true)\n\n      await stopNativeMessagingIPC()\n      expect(isNativeMessagingIPCRunning()).toBe(false)\n    })\n\n    it('stopNativeMessagingIPC should do nothing if not running', async () => {\n      await stopNativeMessagingIPC()\n      expect(logger.info).toHaveBeenCalledWith(\n        'IPC-SERVER',\n        'Native messaging IPC server is not running'\n      )\n    })\n\n    it('getIPCSocketPath should return the correct path when running', async () => {\n      const instance = await startNativeMessagingIPC(mockPearpassClient)\n      expect(getIPCSocketPath()).toBe(instance.socketPath)\n    })\n\n    it('getIPCSocketPath should return a default path when not running', () => {\n      platform.mockReturnValue('linux')\n      expect(getIPCSocketPath()).toBe(\n        join('/home/testuser', '.pearpass', 'pearpass-native-messaging.sock')\n      )\n    })\n  })\n})\n"
  },
  {
    "path": "src/services/nativeMessagingPreferences.js",
    "content": "import { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\n\n/**\n * Get/set native messaging preference in localStorage\n */\nexport const getNativeMessagingEnabled = () =>\n  localStorage.getItem(LOCAL_STORAGE_KEYS.NATIVE_MESSAGING_ENABLED) === 'true'\n\nexport const setNativeMessagingEnabled = (enabled) => {\n  if (enabled) {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.NATIVE_MESSAGING_ENABLED, 'true')\n  } else {\n    localStorage.removeItem(LOCAL_STORAGE_KEYS.NATIVE_MESSAGING_ENABLED)\n  }\n}\n"
  },
  {
    "path": "src/services/nativeMessagingPreferences.test.js",
    "content": "import {\n  getNativeMessagingEnabled,\n  setNativeMessagingEnabled\n} from './nativeMessagingPreferences'\n\ndescribe('nativeMessagingPreferences', () => {\n  beforeEach(() => {\n    localStorage.clear()\n  })\n\n  describe('getNativeMessagingEnabled', () => {\n    it('should return false when the item is not in localStorage', () => {\n      expect(getNativeMessagingEnabled()).toBe(false)\n    })\n\n    it('should return true when the item is set to \"true\" in localStorage', () => {\n      localStorage.setItem('native-messaging-enabled', 'true')\n      expect(getNativeMessagingEnabled()).toBe(true)\n    })\n\n    it('should return false when the item is set to something other than \"true\"', () => {\n      localStorage.setItem('native-messaging-enabled', 'false')\n      expect(getNativeMessagingEnabled()).toBe(false)\n    })\n  })\n\n  describe('setNativeMessagingEnabled', () => {\n    it('should set the item to \"true\" in localStorage when enabled is true', () => {\n      setNativeMessagingEnabled(true)\n      expect(localStorage.getItem('native-messaging-enabled')).toBe('true')\n    })\n\n    it('should remove the item from localStorage when enabled is false', () => {\n      localStorage.setItem('native-messaging-enabled', 'true')\n      setNativeMessagingEnabled(false)\n      expect(localStorage.getItem('native-messaging-enabled')).toBeNull()\n    })\n\n    it('should not add the item if it does not exist and enabled is false', () => {\n      setNativeMessagingEnabled(false)\n      expect(localStorage.getItem('native-messaging-enabled')).toBeNull()\n    })\n  })\n})\n"
  },
  {
    "path": "src/services/security/appIdentity.js",
    "content": "// App identity utilities for Native Messaging secure pairing\n// Generates long-term Ed25519 (signing) and X25519 (ECDH) keypairs.\n// Private keys are stored via pearpass client's encryption* APIs.\n\nimport sodium from 'sodium-native'\n\nimport { clearAllSessions } from './sessionStore.js'\nimport { LOCAL_STORAGE_KEYS } from '../../constants/localStorage.js'\nimport { PAIRING_STATES } from '../../constants/pairing.js'\nimport { SecurityErrorCodes } from '../../constants/securityErrors.js'\nimport { createErrorWithCode } from '../../utils/createErrorWithCode.js'\nimport { logger } from '../../utils/logger.js'\n\nconst ENC_KEY_ED25519 = 'nm.identity.ed25519'\nconst ENC_KEY_X25519 = 'nm.identity.x25519'\nconst ENC_KEY_CREATION_DATE = 'nm.identity.creationDate'\nconst ENC_KEY_CLIENT_DATA = 'nm.client.data'\nconst ENC_KEY_PAIRING_SECRET = 'nm.identity.pairingSecret'\nconst PAIRING_CODE_TAG = Buffer.from('pearpass/pairingcode/v1', 'utf8')\n\n// In-memory fallback cache if persistence is unavailable (e.g., before unlock)\n// Structure: { ed25519PublicKeyBytes, ed25519PrivateKeyBytes, x25519PublicKeyBytes, x25519PrivateKeyBytes, creationDate }\nlet MEMORY_IDENTITY = null\n\n// Some bundlers/environments can fail to populate sodium-native's *BYTES\n// constants on first import. Provide safe fallbacks using the known sizes\n// from libsodium so Buffer.alloc(size) never sees `undefined`.\nconst ED25519_SECRETKEY_BYTES =\n  sodium.crypto_sign_SECRETKEYBYTES || 64 /* crypto_sign_SECRETKEYBYTES */\nconst ED25519_PUBLICKEY_BYTES =\n  sodium.crypto_sign_PUBLICKEYBYTES || 32 /* crypto_sign_PUBLICKEYBYTES */\nconst X25519_SECRETKEY_BYTES =\n  sodium.crypto_box_SECRETKEYBYTES || 32 /* crypto_box_SECRETKEYBYTES */\nconst X25519_PUBLICKEY_BYTES =\n  sodium.crypto_box_PUBLICKEYBYTES || 32 /* crypto_box_PUBLICKEYBYTES */\n\n/**\n * Normalize encryptionGet return shape to base64 string or null\n * Some client implementations return a string, others { data: string|null }.\n * @param {any} val\n * @returns {string|null}\n */\nconst normalizeEncryptionGet = (val) => {\n  if (val === null || val === undefined) return null\n  if (typeof val === 'string') return val || null\n  if (typeof val === 'object' && typeof val.data !== 'undefined') {\n    return val.data || null\n  }\n  return null\n}\n\n/**\n * Convert bytes to base64 (URL-safe=false)\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nconst toBase64 = (bytes) => Buffer.from(bytes).toString('base64')\n\n/**\n * @param {string} base64String\n * @returns {Uint8Array}\n */\nconst fromBase64 = (base64String) =>\n  new Uint8Array(Buffer.from(base64String, 'base64'))\n\n/**\n * Load or create the pairing secret used for pairing token derivation.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @returns {Promise<string>} base64-encoded secret\n */\nconst getOrCreatePairingSecret = async (client) => {\n  let pairingSecretB64 = normalizeEncryptionGet(\n    await client.encryptionGet(ENC_KEY_PAIRING_SECRET).catch(() => null)\n  )\n  if (pairingSecretB64) {\n    const bytes = Buffer.from(pairingSecretB64, 'base64')\n    if (bytes.length !== 32) {\n      throw new Error(\n        createErrorWithCode(\n          SecurityErrorCodes.INVALID_PAIRING_SECRET,\n          'Invalid pairing secret'\n        )\n      )\n    }\n  }\n\n  if (!pairingSecretB64) {\n    const secretBytes = new Uint8Array(32)\n    sodium.randombytes_buf(secretBytes)\n    pairingSecretB64 = Buffer.from(secretBytes).toString('base64')\n    try {\n      await client.encryptionAdd(ENC_KEY_PAIRING_SECRET, pairingSecretB64)\n    } catch (err) {\n      throw new Error(\n        `PairingSecretPersistenceFailed: ${err?.message || 'Unknown error'}`\n      )\n    }\n  }\n\n  return pairingSecretB64\n}\n\n/**\n * Ensure encryption is initialized on the client.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n */\nconst ensureEncryptionInitialized = async (client) => {\n  try {\n    const statusResponse = await client.encryptionGetStatus()\n    // The worklet returns { status: boolean }\n    const initialized = statusResponse?.status === true\n    if (!initialized) {\n      logger.info('APP-IDENTITY', 'Encryption not initialized, initializing...')\n      const initResult = await client.encryptionInit()\n      logger.info(\n        'APP-IDENTITY',\n        `Encryption initialization result: ${JSON.stringify(initResult)}`\n      )\n    }\n  } catch (err) {\n    // If status check fails, try to initialize anyway\n    logger.info(\n      'APP-IDENTITY',\n      `Status check failed, attempting initialization: ${err.message}`\n    )\n    try {\n      const initResult = await client.encryptionInit()\n      logger.info(\n        'APP-IDENTITY',\n        `Encryption initialization result: ${JSON.stringify(initResult)}`\n      )\n    } catch (initErr) {\n      // Ignore if already initialized\n      if (!initErr?.message?.includes('already initialized')) {\n        logger.error(\n          'APP-IDENTITY',\n          `Failed to initialize encryption: ${initErr.message}`\n        )\n      }\n    }\n  }\n}\n\n/**\n * Generate new identity keys and persist them.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @returns {Promise<{ ed25519PublicKey: string, x25519PublicKey: string, creationDate: string }>}\n */\nconst generateAndPersistIdentity = async (client) => {\n  // Ed25519 signing\n  // sodium-native expects Node Buffers, not plain Uint8Array instances.\n  let ed25519PrivateKeyBytes = Buffer.alloc(ED25519_SECRETKEY_BYTES)\n  let ed25519PublicKeyBytes = Buffer.alloc(ED25519_PUBLICKEY_BYTES)\n  try {\n    // Preferred path when running against sodium-native in a Node-like env.\n    sodium.crypto_sign_keypair(ed25519PublicKeyBytes, ed25519PrivateKeyBytes)\n  } catch {\n    // Fallback: some sodium builds (or shims) expect plain Uint8Array\n    const edSk = new Uint8Array(ED25519_SECRETKEY_BYTES)\n    const edPk = new Uint8Array(ED25519_PUBLICKEY_BYTES)\n    sodium.crypto_sign_keypair(edPk, edSk)\n    ed25519PrivateKeyBytes = Buffer.from(edSk)\n    ed25519PublicKeyBytes = Buffer.from(edPk)\n  }\n\n  // X25519 (Curve25519) for ECDH\n  let x25519PrivateKeyBytes = Buffer.alloc(X25519_SECRETKEY_BYTES)\n  let x25519PublicKeyBytes = Buffer.alloc(X25519_PUBLICKEY_BYTES)\n  try {\n    sodium.crypto_box_keypair(x25519PublicKeyBytes, x25519PrivateKeyBytes)\n  } catch {\n    const xSk = new Uint8Array(X25519_SECRETKEY_BYTES)\n    const xPk = new Uint8Array(X25519_PUBLICKEY_BYTES)\n    sodium.crypto_box_keypair(xPk, xSk)\n    x25519PrivateKeyBytes = Buffer.from(xSk)\n    x25519PublicKeyBytes = Buffer.from(xPk)\n  }\n\n  // Persist (private and public concatenated; client encrypts in storage)\n  const payloadEd25519 = Buffer.concat([\n    Buffer.from(ed25519PublicKeyBytes),\n    Buffer.from(ed25519PrivateKeyBytes)\n  ])\n  const payloadX25519 = Buffer.concat([\n    Buffer.from(x25519PublicKeyBytes),\n    Buffer.from(x25519PrivateKeyBytes)\n  ])\n\n  const creationDate = new Date().toISOString()\n\n  let persisted = true\n  try {\n    await client.encryptionAdd(\n      ENC_KEY_ED25519,\n      payloadEd25519.toString('base64')\n    )\n  } catch {\n    persisted = false\n  }\n  try {\n    await client.encryptionAdd(ENC_KEY_X25519, payloadX25519.toString('base64'))\n  } catch {\n    persisted = false\n  }\n  try {\n    await client.encryptionAdd(ENC_KEY_CREATION_DATE, creationDate)\n  } catch {\n    persisted = false\n  }\n\n  // If we couldn't persist yet (e.g., locked), keep in-memory so UI can show pairing\n  if (!persisted) {\n    MEMORY_IDENTITY = {\n      ed25519PublicKeyBytes,\n      ed25519PrivateKeyBytes,\n      x25519PublicKeyBytes,\n      x25519PrivateKeyBytes,\n      creationDate\n    }\n  }\n\n  return {\n    ed25519PublicKey: toBase64(ed25519PublicKeyBytes),\n    x25519PublicKey: toBase64(x25519PublicKeyBytes),\n    creationDate\n  }\n}\n\n/**\n * Create or load the long-term identity key-pairs.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @returns {Promise<{ ed25519PublicKey: string, x25519PublicKey: string, creationDate: string }>} base64-encoded public keys and creation date\n */\nexport const getOrCreateIdentity = async (client) => {\n  await ensureEncryptionInitialized(client)\n\n  // Create a pairing secret associated with this identity\n  try {\n    await getOrCreatePairingSecret(client)\n  } catch {\n    // Pairing token can be generated later via getPairingToken\n  }\n\n  // Try load encrypted blobs first (normalize to base64 string)\n  const ed25519BlobB64 = normalizeEncryptionGet(\n    await client.encryptionGet(ENC_KEY_ED25519).catch(() => null)\n  )\n  const x25519BlobB64 = normalizeEncryptionGet(\n    await client.encryptionGet(ENC_KEY_X25519).catch(() => null)\n  )\n  const creationDate = normalizeEncryptionGet(\n    await client.encryptionGet(ENC_KEY_CREATION_DATE).catch(() => null)\n  )\n\n  // Fallback to in-memory cache if present\n  if ((!ed25519BlobB64 || !x25519BlobB64) && MEMORY_IDENTITY) {\n    return {\n      ed25519PublicKey: toBase64(MEMORY_IDENTITY.ed25519PublicKeyBytes),\n      x25519PublicKey: toBase64(MEMORY_IDENTITY.x25519PublicKeyBytes),\n      creationDate: MEMORY_IDENTITY.creationDate || new Date().toISOString()\n    }\n  }\n\n  // If missing, generate and store\n  if (!ed25519BlobB64 || !x25519BlobB64) {\n    return generateAndPersistIdentity(client)\n  }\n\n  // Decode\n  const ed25519Buffer = Buffer.from(ed25519BlobB64, 'base64')\n  const ed25519PublicKeyBytes = new Uint8Array(\n    ed25519Buffer.subarray(0, sodium.crypto_sign_PUBLICKEYBYTES)\n  )\n\n  const x25519Buffer = Buffer.from(x25519BlobB64, 'base64')\n  const x25519PublicKeyBytes = new Uint8Array(\n    x25519Buffer.subarray(0, sodium.crypto_box_PUBLICKEYBYTES)\n  )\n\n  // Return only public keys (base64) and creation date\n  return {\n    ed25519PublicKey: toBase64(ed25519PublicKeyBytes),\n    x25519PublicKey: toBase64(x25519PublicKeyBytes),\n    creationDate: creationDate || new Date().toISOString()\n  }\n}\n\n/**\n * Compute a pairing token from Ed25519 public key and a secret\n * using SHA-256 over secret || publicKey.\n * Format: XXXXXX-YYYY where XXXXXX is a 6-digit code and YYYY is 4 hex chars.\n * @param {string} ed25519PublicKeyB64\n * @param {string} pairingSecretB64\n * @returns {string}\n */\nexport const getPairingCode = (ed25519PublicKeyB64, pairingSecretB64) => {\n  const secret = fromBase64(pairingSecretB64)\n  const publicKey = fromBase64(ed25519PublicKeyB64)\n  // Compute H = SHA-256(tag || secret || publicKey) for domain separation\n  const input = new Uint8Array(\n    PAIRING_CODE_TAG.length + secret.length + publicKey.length\n  )\n  input.set(PAIRING_CODE_TAG, 0)\n  input.set(secret, PAIRING_CODE_TAG.length)\n  input.set(publicKey, PAIRING_CODE_TAG.length + secret.length)\n  input.set(publicKey, secret.length)\n\n  const out = new Uint8Array(32)\n  sodium.crypto_hash_sha256(out, input)\n\n  // First 4 bytes → 6-digit code\n  const num = Buffer.from(out.subarray(0, 4)).readUInt32BE(0)\n  const code = (num % 1000000).toString().padStart(6, '0')\n\n  // Next 2 bytes → 4 hex chars as suffix\n  const suffix = Buffer.from(out.subarray(4, 6)).toString('hex').toUpperCase()\n\n  return `${code}-${suffix}`\n}\n\n/**\n * @param {string} ed25519PublicKeyB64\n * @returns {string} hex SHA-256 fingerprint\n */\nexport const getFingerprint = (ed25519PublicKeyB64) => {\n  const publicKeyBytes = fromBase64(ed25519PublicKeyB64)\n  const out = new Uint8Array(32)\n  sodium.crypto_hash_sha256(out, publicKeyBytes)\n  return Buffer.from(out).toString('hex')\n}\n\n/**\n * Derive the pairing token for the given identity from the stored pairing secret.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @param {string} ed25519PublicKeyB64\n * @returns {Promise<string>}\n */\nexport const getPairingToken = async (client, ed25519PublicKeyB64) => {\n  const pairingSecretB64 = await getOrCreatePairingSecret(client)\n  return getPairingCode(ed25519PublicKeyB64, pairingSecretB64)\n}\n\n/**\n * Verify a pairing token against the expected value derived from the stored secret.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @param {string} ed25519PublicKeyB64\n * @param {string} userProvidedToken\n * @returns {Promise<boolean>}\n */\nexport const verifyPairingToken = async (\n  client,\n  ed25519PublicKeyB64,\n  userProvidedToken\n) => {\n  if (!userProvidedToken || typeof userProvidedToken !== 'string') {\n    return false\n  }\n\n  const expectedToken = await getPairingToken(client, ed25519PublicKeyB64)\n\n  // Case-insensitive comparison\n  return userProvidedToken.toUpperCase() === expectedToken.toUpperCase()\n}\n\n/**\n * Reset the app identity by deleting existing keys and generating new ones\n * This will unpair any connected extensions\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @returns {Promise<{ ed25519PublicKey: string, x25519PublicKey: string, creationDate: string }>} new base64-encoded public keys and creation date\n */\nexport const resetIdentity = async (client) => {\n  // First, clear all active sessions to immediately disconnect extension\n  const clearedSessions = clearAllSessions()\n\n  logger.info('APP-IDENTITY', `Cleared ${clearedSessions} active sessions`)\n\n  try {\n    // Clear existing keys from storage by overwriting with empty values\n    // This removes them since getOrCreateIdentity will regenerate when missing\n    await client.encryptionAdd(ENC_KEY_ED25519, '').catch(() => {})\n    await client.encryptionAdd(ENC_KEY_X25519, '').catch(() => {})\n    await client.encryptionAdd(ENC_KEY_CREATION_DATE, '').catch(() => {})\n    await client.encryptionAdd(ENC_KEY_CLIENT_DATA, '').catch(() => {})\n    await client.encryptionAdd(ENC_KEY_PAIRING_SECRET, '').catch(() => {})\n\n    // Also clear client public key from localStorage\n    localStorage.removeItem(LOCAL_STORAGE_KEYS.NM_CLIENT_PUBLIC_KEY)\n\n    logger.info('APP-IDENTITY', 'Cleared existing identity keys')\n  } catch (err) {\n    logger.error(\n      'APP-IDENTITY',\n      `Failed to clear existing keys: ${err.message}`\n    )\n  }\n\n  // Clear in-memory cache\n  MEMORY_IDENTITY = null\n\n  // Generate new identity\n  const newIdentity = await getOrCreateIdentity(client)\n\n  logger.info('APP-IDENTITY', 'Generated new identity for pairing')\n\n  return newIdentity\n}\n\n// Internal: expose in-memory identity for session fallback\n// eslint-disable-next-line no-underscore-dangle\nexport const __getMemIdentity = () => MEMORY_IDENTITY\n\n/**\n * Store client (extension) Ed25519 public key with pairing state.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @param {string} ed25519PublicKeyB64\n * @param {string} state - PAIRING_STATES.PENDING or PAIRING_STATES.CONFIRMED\n */\nexport const setClientIdentityPublicKey = async (\n  client,\n  ed25519PublicKeyB64,\n  state = PAIRING_STATES.PENDING\n) => {\n  if (!ed25519PublicKeyB64) {\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.MISSING_CLIENT_PUBLIC_KEY,\n        'Client public key is required'\n      )\n    )\n  }\n\n  await client.encryptionAdd(\n    ENC_KEY_CLIENT_DATA,\n    JSON.stringify({\n      publicKey: ed25519PublicKeyB64,\n      pairingState: state\n    })\n  )\n}\n\n/**\n * Helper to get parsed client data from vault\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n */\nconst getClientData = async (client) => {\n  const data = normalizeEncryptionGet(\n    await client.encryptionGet(ENC_KEY_CLIENT_DATA).catch(() => null)\n  )\n  if (!data) return null\n  try {\n    return JSON.parse(data)\n  } catch {\n    return null\n  }\n}\n\n/**\n * Load client (extension) Ed25519 public key from vault.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @returns {Promise<string|null>}\n */\nexport const getClientIdentityPublicKey = async (client) => {\n  const data = await getClientData(client)\n  return data?.publicKey || null\n}\n\n/**\n * Load client (extension) Ed25519 public key from local storage cache.\n * @returns {string|null}\n */\nexport const getCachedClientIdentityPublicKey = () =>\n  localStorage.getItem(LOCAL_STORAGE_KEYS.NM_CLIENT_PUBLIC_KEY) || null\n\n/**\n * Get the current pairing state.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @returns {Promise<string|null>} - PAIRING_STATES.PENDING, PAIRING_STATES.CONFIRMED, or null\n */\nexport const getClientPairingState = async (client) => {\n  const data = await getClientData(client)\n  return data?.pairingState || null\n}\n\n/**\n * Confirm pairing after extension successfully encrypted its keypair.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @param {string} clientEd25519PublicKeyB64\n */\nexport const confirmClientPairing = async (\n  client,\n  clientEd25519PublicKeyB64\n) => {\n  const data = await getClientData(client)\n\n  if (!data?.publicKey) {\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.NO_PENDING_PAIRING,\n        'No pending pairing found'\n      )\n    )\n  }\n\n  if (data.publicKey !== clientEd25519PublicKeyB64) {\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.CLIENT_KEY_MISMATCH,\n        'Client public key does not match stored pending pairing key'\n      )\n    )\n  }\n\n  // Now that pairing is confirmed do store client public key in localStorage\n  // Accessible even when locked for checkExtensionPairingStatus\n  localStorage.setItem(\n    LOCAL_STORAGE_KEYS.NM_CLIENT_PUBLIC_KEY,\n    clientEd25519PublicKeyB64\n  )\n\n  await client.encryptionAdd(\n    ENC_KEY_CLIENT_DATA,\n    JSON.stringify({\n      ...data,\n      pairingState: PAIRING_STATES.CONFIRMED\n    })\n  )\n}\n"
  },
  {
    "path": "src/services/security/appIdentity.test.js",
    "content": "import sodium from 'sodium-native'\n\nimport {\n  getOrCreateIdentity,\n  getPairingCode,\n  getFingerprint,\n  __getMemIdentity,\n  setClientIdentityPublicKey,\n  confirmClientPairing\n} from './appIdentity'\nimport { LOCAL_STORAGE_KEYS } from '../../constants/localStorage'\nimport { PAIRING_STATES } from '../../constants/pairing'\nimport { logger } from '../../utils/logger'\n\n// Mock dependencies\njest.mock('../../utils/logger', () => ({\n  logger: {\n    info: jest.fn(),\n    error: jest.fn()\n  }\n}))\n\njest.mock('sodium-native', () => ({\n  crypto_sign_SECRETKEYBYTES: 64,\n  crypto_sign_PUBLICKEYBYTES: 32,\n  crypto_box_SECRETKEYBYTES: 32,\n  crypto_box_PUBLICKEYBYTES: 32,\n  crypto_sign_keypair: jest.fn((pk, sk) => {\n    // Mock keypair generation\n    pk.fill(1)\n    sk.fill(2)\n  }),\n  crypto_box_keypair: jest.fn((pk, sk) => {\n    // Mock keypair generation\n    pk.fill(3)\n    sk.fill(4)\n  }),\n  crypto_hash_sha256: jest.fn((out, input) => {\n    // Mock SHA256 - deterministic but sensitive to full input so different keys/secrets change output\n    let acc = 0\n    for (let i = 0; i < input.length; i += 1) {\n      acc = (acc + input[i] + i) % 256\n    }\n    for (let i = 0; i < out.length; i += 1) {\n      out[i] = (acc + i) % 256\n    }\n  })\n}))\n\ndescribe('appIdentity', () => {\n  let mockClient\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n\n    mockClient = {\n      encryptionGetStatus: jest.fn(),\n      encryptionInit: jest.fn(),\n      encryptionGet: jest.fn(),\n      encryptionAdd: jest.fn()\n    }\n  })\n\n  describe('getOrCreateIdentity', () => {\n    it('should initialize encryption if not initialized', async () => {\n      mockClient.encryptionGetStatus.mockResolvedValue({ status: false })\n      mockClient.encryptionInit.mockResolvedValue({ success: true })\n      mockClient.encryptionGet.mockResolvedValue(null)\n      mockClient.encryptionAdd.mockResolvedValue()\n\n      await getOrCreateIdentity(mockClient)\n\n      expect(mockClient.encryptionGetStatus).toHaveBeenCalled()\n      expect(mockClient.encryptionInit).toHaveBeenCalled()\n      expect(logger.info).toHaveBeenCalledWith(\n        'APP-IDENTITY',\n        'Encryption not initialized, initializing...'\n      )\n    })\n\n    it('should generate new keypairs when none exist', async () => {\n      mockClient.encryptionGetStatus.mockResolvedValue({ status: true })\n      mockClient.encryptionGet.mockResolvedValue(null)\n      mockClient.encryptionAdd.mockResolvedValue()\n\n      const result = await getOrCreateIdentity(mockClient)\n\n      expect(sodium.crypto_sign_keypair).toHaveBeenCalled()\n      expect(sodium.crypto_box_keypair).toHaveBeenCalled()\n      expect(mockClient.encryptionAdd).toHaveBeenCalledTimes(3) // ed25519, x25519, and creationDate (pairing secret is handled separately)\n      expect(result).toHaveProperty('ed25519PublicKey')\n      expect(result).toHaveProperty('x25519PublicKey')\n      expect(result).toHaveProperty('creationDate')\n      expect(typeof result.ed25519PublicKey).toBe('string')\n      expect(typeof result.x25519PublicKey).toBe('string')\n      expect(typeof result.creationDate).toBe('string')\n    })\n\n    it('should load existing keypairs from storage', async () => {\n      mockClient.encryptionGetStatus.mockResolvedValue({ status: true })\n\n      // Create mock stored keypairs\n      const ed25519Mock = Buffer.concat([\n        Buffer.alloc(32, 5), // public key\n        Buffer.alloc(64, 6) // private key\n      ]).toString('base64')\n\n      const x25519Mock = Buffer.concat([\n        Buffer.alloc(32, 7), // public key\n        Buffer.alloc(32, 8) // private key\n      ]).toString('base64')\n\n      const creationDate = '2024-01-01T00:00:00.000Z'\n\n      mockClient.encryptionGet\n        .mockResolvedValueOnce(null) // pairing secret missing initially\n        .mockResolvedValueOnce(ed25519Mock)\n        .mockResolvedValueOnce(x25519Mock)\n        .mockResolvedValueOnce(creationDate)\n\n      const result = await getOrCreateIdentity(mockClient)\n\n      expect(sodium.crypto_sign_keypair).not.toHaveBeenCalled()\n      expect(sodium.crypto_box_keypair).not.toHaveBeenCalled()\n      expect(mockClient.encryptionAdd).not.toHaveBeenCalled()\n      expect(result).toHaveProperty('ed25519PublicKey')\n      expect(result).toHaveProperty('x25519PublicKey')\n      expect(result).toHaveProperty('creationDate')\n      expect(result.creationDate).toBe(creationDate)\n    })\n\n    it('should handle encryptionGet returning object with data property', async () => {\n      mockClient.encryptionGetStatus.mockResolvedValue({ status: true })\n\n      const ed25519Mock = Buffer.concat([\n        Buffer.alloc(32, 5),\n        Buffer.alloc(64, 6)\n      ]).toString('base64')\n\n      const x25519Mock = Buffer.concat([\n        Buffer.alloc(32, 7),\n        Buffer.alloc(32, 8)\n      ]).toString('base64')\n\n      const creationDate = '2024-01-01T00:00:00.000Z'\n\n      mockClient.encryptionGet\n        .mockResolvedValueOnce({ data: null }) // pairing secret missing initially\n        .mockResolvedValueOnce({ data: ed25519Mock })\n        .mockResolvedValueOnce({ data: x25519Mock })\n        .mockResolvedValueOnce({ data: creationDate })\n\n      const result = await getOrCreateIdentity(mockClient)\n\n      expect(result).toHaveProperty('ed25519PublicKey')\n      expect(result).toHaveProperty('x25519PublicKey')\n      expect(result).toHaveProperty('creationDate')\n    })\n\n    it('should use in-memory cache when storage is unavailable', async () => {\n      mockClient.encryptionGetStatus.mockResolvedValue({ status: true })\n      mockClient.encryptionGet.mockResolvedValue(null)\n      mockClient.encryptionAdd.mockRejectedValue(new Error('Storage locked'))\n\n      const result1 = await getOrCreateIdentity(mockClient)\n\n      // Second call should use in-memory cache\n      const result2 = await getOrCreateIdentity(mockClient)\n\n      expect(result1.ed25519PublicKey).toBe(result2.ed25519PublicKey)\n      expect(result1.x25519PublicKey).toBe(result2.x25519PublicKey)\n      expect(__getMemIdentity()).not.toBeNull()\n    })\n\n    it('should handle encryption initialization failure gracefully', async () => {\n      mockClient.encryptionGetStatus.mockRejectedValue(\n        new Error('Status check failed')\n      )\n      mockClient.encryptionInit.mockResolvedValue({ success: true })\n      mockClient.encryptionGet.mockResolvedValue(null)\n      mockClient.encryptionAdd.mockResolvedValue()\n\n      await getOrCreateIdentity(mockClient)\n\n      expect(logger.info).toHaveBeenCalledWith(\n        'APP-IDENTITY',\n        expect.stringContaining('Status check failed')\n      )\n      expect(mockClient.encryptionInit).toHaveBeenCalled()\n    })\n\n    it('should ignore \"already initialized\" errors', async () => {\n      mockClient.encryptionGetStatus.mockRejectedValue(\n        new Error('Status check failed')\n      )\n      mockClient.encryptionInit.mockRejectedValue(\n        new Error('Encryption already initialized')\n      )\n      mockClient.encryptionGet.mockResolvedValue(null)\n      mockClient.encryptionAdd.mockResolvedValue()\n\n      await getOrCreateIdentity(mockClient)\n\n      expect(logger.error).not.toHaveBeenCalledWith(\n        'APP-IDENTITY',\n        expect.stringContaining('already initialized')\n      )\n    })\n  })\n\n  describe('getPairingCode', () => {\n    it('should generate a pairing token from public key and secret', () => {\n      const publicKeyB64 = Buffer.alloc(32, 42).toString('base64')\n      const pairingSecretB64 = Buffer.alloc(32, 7).toString('base64')\n      const token = getPairingCode(publicKeyB64, pairingSecretB64)\n\n      expect(token).toMatch(/^\\d{6}-[0-9A-F]{4}$/)\n    })\n\n    it('should generate consistent tokens for the same key and secret', () => {\n      const publicKeyB64 = Buffer.alloc(32, 123).toString('base64')\n      const pairingSecretB64 = Buffer.alloc(32, 9).toString('base64')\n      const token1 = getPairingCode(publicKeyB64, pairingSecretB64)\n      const token2 = getPairingCode(publicKeyB64, pairingSecretB64)\n\n      expect(token1).toBe(token2)\n    })\n\n    it('should generate different tokens for different keys', () => {\n      const key1 = Buffer.alloc(32, 1).toString('base64')\n      const key2 = Buffer.alloc(32, 2).toString('base64')\n      const pairingSecretB64 = Buffer.alloc(32, 11).toString('base64')\n\n      const token1 = getPairingCode(key1, pairingSecretB64)\n      const token2 = getPairingCode(key2, pairingSecretB64)\n\n      expect(token1).not.toBe(token2)\n    })\n  })\n\n  describe('getFingerprint', () => {\n    it('should generate a hex SHA-256 fingerprint', () => {\n      const publicKeyB64 = Buffer.alloc(32, 10).toString('base64')\n      const fingerprint = getFingerprint(publicKeyB64)\n\n      expect(fingerprint).toMatch(/^[0-9a-f]{64}$/)\n      expect(fingerprint.length).toBe(64)\n    })\n\n    it('should generate consistent fingerprints for the same key', () => {\n      const publicKeyB64 = Buffer.alloc(32, 20).toString('base64')\n      const fp1 = getFingerprint(publicKeyB64)\n      const fp2 = getFingerprint(publicKeyB64)\n\n      expect(fp1).toBe(fp2)\n    })\n\n    it('should generate different fingerprints for different keys', () => {\n      const key1 = Buffer.alloc(32, 30).toString('base64')\n      const key2 = Buffer.alloc(32, 40).toString('base64')\n\n      const fp1 = getFingerprint(key1)\n      const fp2 = getFingerprint(key2)\n\n      expect(fp1).not.toBe(fp2)\n    })\n  })\n  describe('setClientIdentityPublicKey', () => {\n    it('should store client data in vault but NOT in localStorage', async () => {\n      const clientPub = 'clientPub123'\n      await setClientIdentityPublicKey(mockClient, clientPub)\n\n      expect(mockClient.encryptionAdd).toHaveBeenCalledWith(\n        'nm.client.data',\n        JSON.stringify({\n          publicKey: clientPub,\n          pairingState: PAIRING_STATES.PENDING\n        })\n      )\n\n      expect(\n        localStorage.getItem(LOCAL_STORAGE_KEYS.NM_CLIENT_PUBLIC_KEY)\n      ).toBeNull()\n    })\n  })\n\n  describe('confirmClientPairing', () => {\n    it('should update vault state and set localStorage', async () => {\n      const clientPub = 'clientPub123'\n\n      // Mock existing pending pairing in vault\n      mockClient.encryptionGet.mockResolvedValue(\n        JSON.stringify({\n          publicKey: clientPub,\n          pairingState: PAIRING_STATES.PENDING\n        })\n      )\n\n      await confirmClientPairing(mockClient, clientPub)\n\n      expect(mockClient.encryptionAdd).toHaveBeenCalledWith(\n        'nm.client.data',\n        JSON.stringify({\n          publicKey: clientPub,\n          pairingState: PAIRING_STATES.CONFIRMED\n        })\n      )\n\n      expect(\n        localStorage.getItem(LOCAL_STORAGE_KEYS.NM_CLIENT_PUBLIC_KEY)\n      ).toBe(clientPub)\n    })\n  })\n})\n"
  },
  {
    "path": "src/services/security/protocolConstants.js",
    "content": "/**\n * Protocol domain separation tags for handshake transcript binding\n * These prevent cross-protocol signature replay attacks\n */\nexport const PROTOCOL_TAGS = {\n  CLIENT_FINISH: 'pearpass/handshake/v1/clientFinish'\n}\n"
  },
  {
    "path": "src/services/security/sessionManager.js",
    "content": "// Session manager for Native Messaging secure channel\n// Uses X25519 ECDH + Ed25519 signature (auth) and XSalsa20-Poly1305 (secretbox) for AEAD.\n\nimport sodium from 'sodium-native'\n\nimport {\n  getOrCreateIdentity,\n  __getMemIdentity,\n  getClientIdentityPublicKey\n} from './appIdentity.js'\nimport {\n  randomBytes,\n  concatBytes,\n  createSession,\n  getSession\n} from './sessionStore.js'\nimport { SecurityErrorCodes } from '../../constants/securityErrors.js'\nimport { createErrorWithCode } from '../../utils/createErrorWithCode.js'\n\n/**\n * Encrypt payload with session key using secretbox (XSalsa20-Poly1305)\n * @param {string} sessionId\n * @param {Uint8Array} plaintext\n * @returns {{ nonceB64: string, ciphertextB64: string, seq: number }}\n */\nexport const encryptWithSession = (sessionId, plaintext) => {\n  const session = getSession(sessionId)\n  if (!session)\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.SESSION_NOT_FOUND,\n        'Session not found or expired'\n      )\n    )\n  const nonce = randomBytes(sodium.crypto_secretbox_NONCEBYTES)\n  const ciphertext = new Uint8Array(\n    plaintext.length + sodium.crypto_secretbox_MACBYTES\n  )\n  sodium.crypto_secretbox_easy(ciphertext, plaintext, nonce, session.key)\n  const seq = ++session.sendSeq\n  return {\n    nonceB64: Buffer.from(nonce).toString('base64'),\n    ciphertextB64: Buffer.from(ciphertext).toString('base64'),\n    seq\n  }\n}\n\n/**\n * Decrypt payload with session key\n * @param {string} sessionId\n * @param {Uint8Array} nonce\n * @param {Uint8Array} ciphertext\n * @returns {Uint8Array}\n */\nexport const decryptWithSession = (sessionId, nonce, ciphertext) => {\n  const session = getSession(sessionId)\n  if (!session)\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.SESSION_NOT_FOUND,\n        'Session not found or expired'\n      )\n    )\n  const plaintext = new Uint8Array(\n    ciphertext.length - sodium.crypto_secretbox_MACBYTES\n  )\n  if (\n    !sodium.crypto_secretbox_open_easy(\n      plaintext,\n      ciphertext,\n      nonce,\n      session.key\n    )\n  ) {\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.DECRYPT_FAILED,\n        'Failed to decrypt message'\n      )\n    )\n  }\n  return plaintext\n}\n\n/**\n * Begin handshake: given extension ephemeral public key (base64),\n * return host ephemeral public key and signature over transcript.\n * @param {import('@tetherto/pearpass-lib-vault-core').PearpassVaultClient} client\n * @param {string} extensionEphemeralPublicKeyB64\n * @returns {{ hostEphemeralPubB64: string, signatureB64: string, sessionId: string }}\n */\nexport const beginHandshake = async (\n  client,\n  extensionEphemeralPublicKeyB64\n) => {\n  // Load or create identity, then load private parts from encryption store (or memory)\n  await getOrCreateIdentity(client)\n\n  // Load pinned client public key (required for transcript binding)\n  const clientPubB64 = await getClientIdentityPublicKey(client)\n  if (!clientPubB64) {\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.CLIENT_NOT_PAIRED,\n        'No client identity registered'\n      )\n    )\n  }\n  const clientPublicKeyBytes = new Uint8Array(\n    Buffer.from(clientPubB64, 'base64')\n  )\n\n  // Support both direct string and { data } shapes from encryptionGet\n  const edResponse = await client\n    .encryptionGet('nm.identity.ed25519')\n    .catch(() => null)\n  const xResponse = await client\n    .encryptionGet('nm.identity.x25519')\n    .catch(() => null)\n  const edBlobB64 =\n    typeof edResponse === 'string' ? edResponse : edResponse?.data\n  const xBlobB64 = typeof xResponse === 'string' ? xResponse : xResponse?.data\n  if (!edBlobB64 || !xBlobB64) {\n    // Try to use in-memory identity from appIdentity if available\n    try {\n      const mem = __getMemIdentity?.()\n      if (mem) {\n        return finalizeHandshakeWithMemoryIdentity(\n          mem,\n          extensionEphemeralPublicKeyB64,\n          clientPublicKeyBytes\n        )\n      }\n    } catch {}\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.IDENTITY_KEYS_UNAVAILABLE,\n        'Identity keys not available'\n      )\n    )\n  }\n  const edBuffer = Buffer.from(edBlobB64, 'base64')\n\n  const ed25519PrivateKeyBytes = new Uint8Array(\n    edBuffer.subarray(\n      sodium.crypto_sign_PUBLICKEYBYTES,\n      sodium.crypto_sign_PUBLICKEYBYTES + sodium.crypto_sign_SECRETKEYBYTES\n    )\n  )\n\n  const hostEphemeralPrivateKey = new Uint8Array(\n    sodium.crypto_box_SECRETKEYBYTES\n  )\n  const hostEphemeralPublicKey = new Uint8Array(\n    sodium.crypto_box_PUBLICKEYBYTES\n  )\n  sodium.crypto_box_keypair(hostEphemeralPublicKey, hostEphemeralPrivateKey)\n\n  const extensionEphemeralPublicKey = new Uint8Array(\n    Buffer.from(extensionEphemeralPublicKeyB64, 'base64')\n  )\n\n  // Compute ECDH\n  const sharedSecret = new Uint8Array(32)\n  sodium.crypto_scalarmult(\n    sharedSecret,\n    hostEphemeralPrivateKey,\n    extensionEphemeralPublicKey\n  )\n\n  // Transcript = host_eph_pk || ext_eph_pk || client_ed25519_pk\n  // Including the pinned client public key binds the handshake to the specific\n  // extension identity that was registered during pairing.\n  const transcript = concatBytes(\n    concatBytes(hostEphemeralPublicKey, extensionEphemeralPublicKey),\n    clientPublicKeyBytes\n  )\n\n  // Signature (Ed25519) over transcript\n  const signature = new Uint8Array(sodium.crypto_sign_BYTES)\n  sodium.crypto_sign_detached(signature, transcript, ed25519PrivateKeyBytes)\n\n  // Create session\n  const { sessionId } = createSession(sharedSecret, transcript)\n\n  return {\n    hostEphemeralPubB64: Buffer.from(hostEphemeralPublicKey).toString('base64'),\n    signatureB64: Buffer.from(signature).toString('base64'),\n    sessionId\n  }\n}\n\n/**\n * Fallback: finalize handshake using in-memory identity keys\n * @param {{ ed25519PublicKeyBytes: Uint8Array, ed25519PrivateKeyBytes: Uint8Array, x25519PublicKeyBytes: Uint8Array, x25519PrivateKeyBytes: Uint8Array } | { edPk: Uint8Array, edSk: Uint8Array, xPk: Uint8Array, xSk: Uint8Array }} mem\n * @param {string} extensionEphemeralPublicKeyB64\n * @param {Uint8Array} clientPublicKeyBytes - The pinned client Ed25519 public key\n */\nfunction finalizeHandshakeWithMemoryIdentity(\n  mem,\n  extensionEphemeralPublicKeyB64,\n  clientPublicKeyBytes\n) {\n  const hostEphemeralPrivateKey = new Uint8Array(\n    sodium.crypto_box_SECRETKEYBYTES\n  )\n  const hostEphemeralPublicKey = new Uint8Array(\n    sodium.crypto_box_PUBLICKEYBYTES\n  )\n  sodium.crypto_box_keypair(hostEphemeralPublicKey, hostEphemeralPrivateKey)\n\n  const extensionEphemeralPublicKey = new Uint8Array(\n    Buffer.from(extensionEphemeralPublicKeyB64, 'base64')\n  )\n\n  // Compute ECDH\n  const sharedSecret = new Uint8Array(32)\n  sodium.crypto_scalarmult(\n    sharedSecret,\n    hostEphemeralPrivateKey,\n    extensionEphemeralPublicKey\n  )\n\n  // Transcript = host_eph_pk || ext_eph_pk || client_ed25519_pk\n  const transcript = concatBytes(\n    concatBytes(hostEphemeralPublicKey, extensionEphemeralPublicKey),\n    clientPublicKeyBytes\n  )\n\n  // Signature (Ed25519) over transcript\n  const signature = new Uint8Array(sodium.crypto_sign_BYTES)\n  const privateKey = mem.ed25519PrivateKeyBytes || mem.edSk // support old shape\n  sodium.crypto_sign_detached(signature, transcript, privateKey)\n\n  // Create session\n  const { sessionId } = createSession(sharedSecret, transcript)\n\n  return {\n    hostEphemeralPubB64: Buffer.from(hostEphemeralPublicKey).toString('base64'),\n    signatureB64: Buffer.from(signature).toString('base64'),\n    sessionId\n  }\n}\n\n/**\n * Validate and record an incoming sequence number.\n * Ensures strictly increasing sequence numbers to prevent replays within session.\n * @param {string} sessionId\n * @param {number} seq\n */\nexport const recordIncomingSeq = (sessionId, seq) => {\n  const session = getSession(sessionId)\n  if (!session)\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.SESSION_NOT_FOUND,\n        'Session not found or expired'\n      )\n    )\n  if (typeof seq !== 'number' || !Number.isFinite(seq))\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.INVALID_SEQ,\n        'Invalid sequence number'\n      )\n    )\n  if (seq <= session.lastRecvSeq)\n    throw new Error(\n      createErrorWithCode(\n        SecurityErrorCodes.REPLAY_DETECTED,\n        'Replay attack detected'\n      )\n    )\n  session.lastRecvSeq = seq\n}\n"
  },
  {
    "path": "src/services/security/sessionManager.test.js",
    "content": "import sodium from 'sodium-native'\n\nimport {\n  beginHandshake,\n  recordIncomingSeq,\n  encryptWithSession,\n  decryptWithSession\n} from './sessionManager'\nimport { getSession, closeSession } from './sessionStore'\nimport { SecurityErrorCodes } from '../../constants/securityErrors'\n\n// Mock dependencies\njest.mock('sodium-native', () => ({\n  crypto_sign_SECRETKEYBYTES: 64,\n  crypto_sign_PUBLICKEYBYTES: 32,\n  crypto_sign_BYTES: 64,\n  crypto_box_SECRETKEYBYTES: 32,\n  crypto_box_PUBLICKEYBYTES: 32,\n  crypto_secretbox_KEYBYTES: 32,\n  crypto_secretbox_NONCEBYTES: 24,\n  crypto_secretbox_MACBYTES: 16,\n  crypto_sign_keypair: jest.fn((pk, sk) => {\n    pk.fill(1)\n    sk.fill(2)\n  }),\n  crypto_box_keypair: jest.fn((pk, sk) => {\n    pk.fill(3)\n    sk.fill(4)\n  }),\n  crypto_scalarmult: jest.fn((out, sk, pk) => {\n    // Mock ECDH - just XOR for simplicity\n    for (let i = 0; i < out.length; i++) {\n      out[i] = sk[i] ^ pk[i]\n    }\n  }),\n  crypto_hash_sha256: jest.fn((out, input) => {\n    // Mock SHA256\n    for (let i = 0; i < out.length; i++) {\n      out[i] = (input[0] + i) % 256\n    }\n  }),\n  // eslint-disable-next-line no-unused-vars\n  crypto_sign_detached: jest.fn((sig, _msg, _sk) => {\n    // Mock signature\n    sig.fill(99)\n  }),\n  // eslint-disable-next-line no-unused-vars\n  crypto_secretbox_easy: jest.fn((cipher, msg, _nonce, _key) => {\n    // Mock encryption - just copy with a tag\n    cipher.set(msg)\n    cipher.set([0xaa, 0xbb, 0xcc], msg.length)\n    return true\n  }),\n  // eslint-disable-next-line no-unused-vars\n  crypto_secretbox_open_easy: jest.fn((msg, cipher, _nonce, _key) => {\n    // Mock decryption - just copy without tag\n    const msgLen = Math.max(0, cipher.length - 3)\n    if (msgLen > 0 && msgLen <= msg.length) {\n      msg.set(cipher.slice(0, msgLen))\n    }\n    return true\n  }),\n  randombytes_buf: jest.fn((buf) => {\n    // Mock random bytes\n    for (let i = 0; i < buf.length; i++) {\n      buf[i] = Math.floor(Math.random() * 256)\n    }\n  })\n}))\n\njest.mock('./appIdentity', () => ({\n  getOrCreateIdentity: jest.fn().mockResolvedValue({\n    ed25519PublicKey: 'mock-ed25519-public',\n    x25519PublicKey: 'mock-x25519-public'\n  }),\n  __getMemIdentity: jest.fn(() => ({\n    ed25519PublicKeyBytes: new Uint8Array(32).fill(10),\n    ed25519PrivateKeyBytes: new Uint8Array(64).fill(11),\n    x25519PublicKeyBytes: new Uint8Array(32).fill(12),\n    x25519PrivateKeyBytes: new Uint8Array(32).fill(13)\n  })),\n  getClientIdentityPublicKey: jest\n    .fn()\n    .mockResolvedValue(Buffer.alloc(32, 99).toString('base64'))\n}))\n\ndescribe('sessionManager', () => {\n  let mockClient\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n\n    mockClient = {\n      encryptionGet: jest.fn()\n    }\n  })\n\n  describe('beginHandshake', () => {\n    it('should create a new session with ephemeral keys', async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 20).toString('base64')\n\n      // Mock stored keys\n      const ed25519Mock = Buffer.concat([\n        Buffer.alloc(32, 5),\n        Buffer.alloc(64, 6)\n      ]).toString('base64')\n\n      const x25519Mock = Buffer.concat([\n        Buffer.alloc(32, 7),\n        Buffer.alloc(32, 8)\n      ]).toString('base64')\n\n      mockClient.encryptionGet\n        .mockResolvedValueOnce(ed25519Mock)\n        .mockResolvedValueOnce(x25519Mock)\n\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n\n      expect(result).toHaveProperty('sessionId')\n      expect(result).toHaveProperty('hostEphemeralPubB64')\n      expect(result).toHaveProperty('signatureB64')\n      expect(typeof result.sessionId).toBe('string')\n      expect(result.sessionId.length).toBe(32)\n      expect(sodium.crypto_box_keypair).toHaveBeenCalled()\n      expect(sodium.crypto_scalarmult).toHaveBeenCalled()\n      expect(sodium.crypto_sign_detached).toHaveBeenCalled()\n    })\n\n    it('should derive shared secret using ECDH', async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 30).toString('base64')\n\n      const ed25519Mock = Buffer.concat([\n        Buffer.alloc(32, 5),\n        Buffer.alloc(64, 6)\n      ]).toString('base64')\n\n      const x25519Mock = Buffer.concat([\n        Buffer.alloc(32, 7),\n        Buffer.alloc(32, 8)\n      ]).toString('base64')\n\n      mockClient.encryptionGet\n        .mockResolvedValueOnce(ed25519Mock)\n        .mockResolvedValueOnce(x25519Mock)\n\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n      const session = getSession(result.sessionId)\n\n      expect(session).toBeDefined()\n      expect(session.key).toBeInstanceOf(Uint8Array)\n      expect(session.key.length).toBe(32)\n      expect(sodium.crypto_scalarmult).toHaveBeenCalledTimes(1)\n    })\n\n    it('should use in-memory identity when storage is unavailable', async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 40).toString('base64')\n\n      mockClient.encryptionGet.mockResolvedValue(null)\n\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n\n      expect(result).toHaveProperty('sessionId')\n      expect(result).toHaveProperty('hostEphemeralPubB64')\n      expect(result).toHaveProperty('signatureB64')\n\n      const session = getSession(result.sessionId)\n      expect(session).toBeDefined()\n    })\n\n    it('should initialize session with sequence numbers', async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 50).toString('base64')\n\n      mockClient.encryptionGet.mockResolvedValue(null)\n\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n      const session = getSession(result.sessionId)\n\n      expect(session.sendSeq).toBe(0)\n      expect(session.lastRecvSeq).toBe(0)\n    })\n  })\n\n  describe('session management', () => {\n    let sessionId\n\n    beforeEach(async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 60).toString('base64')\n      mockClient.encryptionGet.mockResolvedValue(null)\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n      sessionId = result.sessionId\n    })\n\n    it('should get an existing session', () => {\n      const session = getSession(sessionId)\n      expect(session).toBeDefined()\n      expect(session).toHaveProperty('key')\n      expect(session).toHaveProperty('sendSeq')\n      expect(session).toHaveProperty('lastRecvSeq')\n    })\n\n    it('should return undefined for non-existent session', () => {\n      const session = getSession('invalid-session-id')\n      expect(session).toBeNull()\n    })\n\n    it('should close and remove a session', () => {\n      expect(getSession(sessionId)).toBeDefined()\n\n      closeSession(sessionId)\n\n      expect(getSession(sessionId)).toBeNull()\n    })\n\n    it('should handle closing non-existent session', () => {\n      expect(() => closeSession('invalid-session-id')).not.toThrow()\n    })\n  })\n\n  describe('replay protection', () => {\n    let sessionId\n\n    beforeEach(async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 70).toString('base64')\n      mockClient.encryptionGet.mockResolvedValue(null)\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n      sessionId = result.sessionId\n    })\n\n    it('should accept strictly increasing sequence numbers', () => {\n      expect(() => recordIncomingSeq(sessionId, 1)).not.toThrow()\n      expect(() => recordIncomingSeq(sessionId, 2)).not.toThrow()\n      expect(() => recordIncomingSeq(sessionId, 3)).not.toThrow()\n\n      const session = getSession(sessionId)\n      expect(session.lastRecvSeq).toBe(3)\n    })\n\n    it('should reject repeated sequence numbers', () => {\n      recordIncomingSeq(sessionId, 5)\n\n      expect(() => recordIncomingSeq(sessionId, 5)).toThrow(\n        SecurityErrorCodes.REPLAY_DETECTED\n      )\n    })\n\n    it('should reject decreasing sequence numbers', () => {\n      recordIncomingSeq(sessionId, 10)\n\n      expect(() => recordIncomingSeq(sessionId, 9)).toThrow(\n        SecurityErrorCodes.REPLAY_DETECTED\n      )\n    })\n\n    it('should handle sequence number 0 correctly', () => {\n      // Sequence 0 should be rejected since initial lastRecvSeq is 0\n      expect(() => recordIncomingSeq(sessionId, 0)).toThrow(\n        SecurityErrorCodes.REPLAY_DETECTED\n      )\n\n      // But sequence 1 should be accepted\n      expect(() => recordIncomingSeq(sessionId, 1)).not.toThrow()\n    })\n  })\n\n  describe('encryption and decryption', () => {\n    let sessionId\n\n    beforeEach(async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 80).toString('base64')\n      mockClient.encryptionGet.mockResolvedValue(null)\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n      sessionId = result.sessionId\n    })\n\n    it('should encrypt data with session', () => {\n      const plaintext = new Uint8Array([1, 2, 3, 4, 5])\n\n      const result = encryptWithSession(sessionId, plaintext)\n\n      expect(result).toHaveProperty('nonceB64')\n      expect(result).toHaveProperty('ciphertextB64')\n      expect(result).toHaveProperty('seq')\n      expect(typeof result.nonceB64).toBe('string')\n      expect(typeof result.ciphertextB64).toBe('string')\n      expect(result.seq).toBe(1)\n      expect(sodium.crypto_secretbox_easy).toHaveBeenCalled()\n    })\n\n    it('should increment send sequence on encryption', () => {\n      const plaintext = new Uint8Array([1, 2, 3])\n\n      const result1 = encryptWithSession(sessionId, plaintext)\n      const result2 = encryptWithSession(sessionId, plaintext)\n      const result3 = encryptWithSession(sessionId, plaintext)\n\n      expect(result1.seq).toBe(1)\n      expect(result2.seq).toBe(2)\n      expect(result3.seq).toBe(3)\n\n      const session = getSession(sessionId)\n      expect(session.sendSeq).toBe(3)\n    })\n\n    it('should decrypt data with session', () => {\n      const plaintext = new Uint8Array([10, 20, 30, 40])\n      const encrypted = encryptWithSession(sessionId, plaintext)\n\n      const nonce = new Uint8Array(Buffer.from(encrypted.nonceB64, 'base64'))\n      const ciphertext = new Uint8Array(\n        Buffer.from(encrypted.ciphertextB64, 'base64')\n      )\n\n      const decrypted = decryptWithSession(sessionId, nonce, ciphertext)\n\n      expect(decrypted).toBeInstanceOf(Uint8Array)\n      expect(sodium.crypto_secretbox_open_easy).toHaveBeenCalled()\n    })\n\n    it('should throw error for invalid session on encrypt', () => {\n      const plaintext = new Uint8Array([1, 2, 3])\n\n      expect(() => encryptWithSession('invalid-id', plaintext)).toThrow(\n        SecurityErrorCodes.SESSION_NOT_FOUND\n      )\n    })\n\n    it('should throw error for invalid session on decrypt', () => {\n      const nonce = new Uint8Array(24)\n      const ciphertext = new Uint8Array(32)\n\n      expect(() => decryptWithSession('invalid-id', nonce, ciphertext)).toThrow(\n        SecurityErrorCodes.SESSION_NOT_FOUND\n      )\n    })\n  })\n\n  describe('edge cases', () => {\n    it('should handle empty plaintext encryption', async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 90).toString('base64')\n      mockClient.encryptionGet.mockResolvedValue(null)\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n\n      const plaintext = new Uint8Array(0)\n      const encrypted = encryptWithSession(result.sessionId, plaintext)\n\n      expect(encrypted).toHaveProperty('nonceB64')\n      expect(encrypted).toHaveProperty('ciphertextB64')\n      expect(encrypted).toHaveProperty('seq')\n    })\n\n    it('should handle large plaintext encryption', async () => {\n      const extEphemeralPubB64 = Buffer.alloc(32, 100).toString('base64')\n      mockClient.encryptionGet.mockResolvedValue(null)\n      const result = await beginHandshake(mockClient, extEphemeralPubB64)\n\n      const plaintext = new Uint8Array(10000).fill(42)\n      const encrypted = encryptWithSession(result.sessionId, plaintext)\n\n      expect(encrypted).toHaveProperty('nonceB64')\n      expect(encrypted).toHaveProperty('ciphertextB64')\n      expect(encrypted).toHaveProperty('seq')\n    })\n  })\n})\n"
  },
  {
    "path": "src/services/security/sessionStore.js",
    "content": "// Session store for Native Messaging secure channel\n// This module contains the session storage and basic operations\n// Separated from sessionManager.js to avoid circular dependencies\n\nimport sodium from 'sodium-native'\n\n/** @typedef {{ key: Uint8Array, sendSeq: number, lastRecvSeq: number, transcript: Uint8Array, clientVerified: boolean, createdAt: number }} Session */\n\nconst SESSIONS = new Map()\n\n// Session TTL: 1 hour in milliseconds\nconst SESSION_TTL_MS = 60 * 60 * 1000\n\n/**\n * @param {number} size\n * @returns {Uint8Array}\n */\nexport const randomBytes = (size) => {\n  const out = new Uint8Array(size)\n  sodium.randombytes_buf(out)\n  return out\n}\n\n/**\n * @param {Uint8Array} left\n * @param {Uint8Array} right\n * @returns {Uint8Array}\n */\nexport const concatBytes = (left, right) =>\n  new Uint8Array(Buffer.concat([Buffer.from(left), Buffer.from(right)]))\n\n/**\n * Derive 32-byte session key as H = SHA-256(shared || transcript)\n * @param {Uint8Array} sharedSecret\n * @param {Uint8Array} transcript\n * @returns {Uint8Array}\n */\nexport const deriveSessionKey = (sharedSecret, transcript) => {\n  const out = new Uint8Array(32)\n  const input = concatBytes(sharedSecret, transcript)\n  sodium.crypto_hash_sha256(out, input)\n  return out\n}\n\n/**\n * Create a new session from shared secret and transcript.\n * @param {Uint8Array} sharedSecret\n * @param {Uint8Array} transcript\n * @returns {{ sessionId: string, key: Uint8Array }}\n */\nexport const createSession = (sharedSecret, transcript) => {\n  const key = deriveSessionKey(sharedSecret, transcript)\n  const sessionIdBytes = randomBytes(16)\n  const sessionId = Buffer.from(sessionIdBytes).toString('hex')\n  SESSIONS.set(sessionId, {\n    key,\n    sendSeq: 0,\n    lastRecvSeq: 0,\n    transcript,\n    clientVerified: false,\n    createdAt: Date.now()\n  })\n  return { sessionId, key }\n}\n\n/**\n * @param {string} sessionId\n * @returns {Session | null}\n */\nexport const getSession = (sessionId) => {\n  const session = SESSIONS.get(sessionId)\n  if (!session) return null\n  if (\n    typeof session.createdAt !== 'number' ||\n    !Number.isFinite(session.createdAt)\n  ) {\n    SESSIONS.delete(sessionId)\n    return null\n  }\n\n  // Check if session has expired\n  if (Date.now() - session.createdAt >= SESSION_TTL_MS) {\n    SESSIONS.delete(sessionId)\n    return null\n  }\n\n  return session\n}\n\n/**\n * @param {string} sessionId\n */\nexport const closeSession = (sessionId) => {\n  SESSIONS.delete(sessionId)\n}\n\n/**\n * Clear all active sessions\n * This will unpair all connected extensions\n */\nexport const clearAllSessions = () => {\n  const count = SESSIONS.size\n  SESSIONS.clear()\n  return count\n}\n"
  },
  {
    "path": "src/shared/commandDefinitions.js",
    "content": "/**\n * Command definitions for the native messaging bridge\n */\n\n/**\n * @typedef {Object} CommandDefinition\n * @property {number} id - Unique command ID\n * @property {string} name - Command name\n */\n\n/** @type {CommandDefinition[]} */\nconst COMMAND_DEFINITIONS = [\n  // Encryption commands\n  { id: 1001, name: 'encryptionInit' },\n  { id: 1002, name: 'encryptionGetStatus' },\n  { id: 1003, name: 'encryptionGet' },\n  { id: 1004, name: 'encryptionAdd' },\n\n  // Vaults commands\n  { id: 1005, name: 'vaultsInit' },\n  { id: 1006, name: 'vaultsGetStatus' },\n  { id: 1007, name: 'vaultsGet' },\n  { id: 1008, name: 'vaultsList' },\n  { id: 1009, name: 'vaultsAdd' },\n  { id: 1010, name: 'vaultsClose' },\n\n  // Active vault commands\n  { id: 1011, name: 'activeVaultInit' },\n  { id: 1012, name: 'activeVaultGetStatus' },\n  { id: 1013, name: 'activeVaultGet' },\n  { id: 1014, name: 'activeVaultList' },\n  { id: 1015, name: 'activeVaultAdd' },\n  { id: 1016, name: 'activeVaultRemove' },\n  { id: 1017, name: 'activeVaultClose' },\n  { id: 1018, name: 'activeVaultCreateInvite' },\n  { id: 1019, name: 'activeVaultDeleteInvite' },\n\n  // Password and encryption key commands\n  { id: 1020, name: 'hashPassword' },\n  { id: 1021, name: 'encryptVaultKeyWithHashedPassword' },\n  { id: 1022, name: 'encryptVaultWithKey' },\n  { id: 1023, name: 'getDecryptionKey' },\n  { id: 1024, name: 'decryptVaultKey' },\n\n  // Native Messaging secure channel (pairing/handshake)\n  { id: 1100, name: 'nmGetAppIdentity' },\n  { id: 1102, name: 'nmBeginHandshake' },\n  { id: 1103, name: 'nmFinishHandshake' },\n  { id: 1104, name: 'nmSecureRequest' },\n  { id: 1105, name: 'nmCloseSession' },\n  { id: 1106, name: 'nmConfirmPairing' },\n\n  // Pairing and misc commands\n  { id: 1025, name: 'pairActiveVault' },\n  { id: 1026, name: 'initListener' },\n  { id: 1027, name: 'closeAllInstances' },\n  { id: 1028, name: 'cancelPairActiveVault' },\n\n  { id: 1029, name: 'recordFailedMasterPassword' },\n  { id: 1030, name: 'getMasterPasswordStatus' },\n\n  { id: 1031, name: 'activeVaultRemoveFile' },\n  { id: 1032, name: 'resetFailedAttempts' },\n\n  // Extension pairing\n  { id: 1033, name: 'checkExtensionPairingStatus' },\n\n  // Master password commands\n  { id: 1034, name: 'initWithPassword' },\n  { id: 1035, name: 'getAutoLockSettings' },\n  { id: 1036, name: 'setAutoLockTimeout' },\n  { id: 1037, name: 'setAutoLockEnabled' },\n  { id: 1038, name: 'resetTimer' },\n\n  // OTP commands\n  { id: 1040, name: 'generateOtpCodesByIds' },\n  { id: 1041, name: 'generateHotpNext' },\n  { id: 1042, name: 'addOtpToRecord' },\n  { id: 1043, name: 'removeOtpFromRecord' }\n]\n\n/** @type {string[]} */\nconst COMMAND_NAMES = COMMAND_DEFINITIONS.map((cmd) => cmd.name)\n\n/**\n * Check if a command name is valid\n * @param {string} commandName - The command name to validate\n * @returns {boolean}\n */\nconst isValidCommand = (commandName) => COMMAND_NAMES.includes(commandName)\n\nexport { COMMAND_DEFINITIONS, isValidCommand }\n"
  },
  {
    "path": "src/shared/types.ts",
    "content": "type VaultRecord = {\n    id: string\n    type: string\n    isFavorite?: boolean\n    data?: {\n        title?: string\n        username?: string\n        email?: string\n        websites?: Array<string | { website?: string | undefined }>\n        [key: string]: unknown\n    }\n    folder?: string | null\n}\n\nexport enum PassType {\n  Password = 'password',\n  PassPhrase = 'passPhrase'\n}\n\nexport type { VaultRecord }\n"
  },
  {
    "path": "src/strict.css",
    "content": "@layer reset;\n@react-strict-dom;\n\n/*\n * Hide UI Kit Dialog's built-in backdrop; dimming is provided by <Overlay>.\n *\n * TODO: this couples to Dialog's internal DOM (first-div sibling of [role='dialog'])\n * and silently no-ops if the kit reorders its wrapper. Raise a `hideBackdrop` /\n * `disableBackdrop` prop with the ui-kit team and replace this override.\n */\n*:has(> div > [role='dialog']) > div:first-child {\n  background: transparent !important;\n  animation: none !important;\n}\n"
  },
  {
    "path": "src/svgs/ItemCardIllustration/ItemCardIllustration.tsx",
    "content": "import React from 'react'\n\ntype ItemCardIllustrationProps = {\n  // Pass `null` to omit the width attribute and let the browser derive it from\n  // the viewBox aspect ratio (useful when only height is clamped).\n  width?: number | string | null\n  height?: number | string\n}\n\nexport const ItemCardIllustration = ({\n  width = 361,\n  height = 190\n}: ItemCardIllustrationProps) => (\n  <svg\n    width={width ?? undefined}\n    height={height}\n    viewBox=\"0 0 361 190\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    preserveAspectRatio=\"xMidYMin slice\"\n    aria-hidden=\"true\"\n  >\n    <defs>\n      <linearGradient\n        id=\"itemCardBg\"\n        x1=\"181.419\"\n        y1=\"8.957\"\n        x2=\"181.419\"\n        y2=\"469.427\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop offset=\"0\" stopColor=\"#212814\" />\n        <stop offset=\"0.495\" stopColor=\"#15180E\" />\n      </linearGradient>\n      <linearGradient\n        id=\"itemCardFade\"\n        x1=\"180.5\"\n        y1=\"0\"\n        x2=\"180.5\"\n        y2=\"190\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop offset=\"0.467\" stopColor=\"#15180E\" stopOpacity=\"0\" />\n        <stop offset=\"1\" stopColor=\"#15180E\" />\n      </linearGradient>\n      <clipPath id=\"itemCardClip\">\n        <rect width=\"361\" height=\"190\" rx=\"10.5371\" />\n      </clipPath>\n    </defs>\n    <g clipPath=\"url(#itemCardClip)\">\n      <rect\n        x=\"75.521\"\n        y=\"8.957\"\n        width=\"211.795\"\n        height=\"460.47\"\n        rx=\"24.72\"\n        fill=\"url(#itemCardBg)\"\n      />\n\n      <rect\n        x=\"83.688\"\n        y=\"45.998\"\n        width=\"195.461\"\n        height=\"37.104\"\n        rx=\"5.3\"\n        fill=\"#2C3618\"\n      />\n      <rect\n        x=\"91.639\"\n        y=\"53.949\"\n        width=\"21.203\"\n        height=\"21.203\"\n        rx=\"5.3\"\n        fill=\"#37431D\"\n      />\n      <rect\n        x=\"120.792\"\n        y=\"55.273\"\n        width=\"76.197\"\n        height=\"8.614\"\n        rx=\"4.307\"\n        fill=\"#37431D\"\n      />\n      <rect\n        x=\"120.792\"\n        y=\"65.213\"\n        width=\"51.019\"\n        height=\"8.614\"\n        rx=\"4.307\"\n        fill=\"#37431D\"\n      />\n\n      <rect\n        x=\"83.688\"\n        y=\"88.371\"\n        width=\"195.461\"\n        height=\"37.104\"\n        rx=\"5.3\"\n        fill=\"#2C3618\"\n      />\n      <rect\n        x=\"91.639\"\n        y=\"96.322\"\n        width=\"21.203\"\n        height=\"21.203\"\n        rx=\"5.3\"\n        fill=\"#37431D\"\n      />\n      <rect\n        x=\"120.792\"\n        y=\"97.647\"\n        width=\"65.596\"\n        height=\"8.614\"\n        rx=\"4.307\"\n        fill=\"#37431D\"\n      />\n      <rect\n        x=\"120.792\"\n        y=\"107.586\"\n        width=\"59.632\"\n        height=\"8.614\"\n        rx=\"4.307\"\n        fill=\"#37431D\"\n      />\n\n      <rect\n        x=\"83.688\"\n        y=\"130.744\"\n        width=\"195.461\"\n        height=\"37.104\"\n        rx=\"5.3\"\n        fill=\"#2C3618\"\n      />\n      <rect\n        x=\"91.639\"\n        y=\"138.695\"\n        width=\"21.203\"\n        height=\"21.203\"\n        rx=\"5.3\"\n        fill=\"#37431D\"\n      />\n      <rect\n        x=\"120.792\"\n        y=\"140.02\"\n        width=\"88.123\"\n        height=\"8.614\"\n        rx=\"4.307\"\n        fill=\"#37431D\"\n      />\n      <rect\n        x=\"120.792\"\n        y=\"149.959\"\n        width=\"73.547\"\n        height=\"8.614\"\n        rx=\"4.307\"\n        fill=\"#37431D\"\n      />\n\n      <rect\n        x=\"83.688\"\n        y=\"173.117\"\n        width=\"195.461\"\n        height=\"37.104\"\n        rx=\"5.3\"\n        fill=\"#2C3618\"\n      />\n      <rect\n        x=\"91.639\"\n        y=\"181.068\"\n        width=\"21.203\"\n        height=\"21.203\"\n        rx=\"5.3\"\n        fill=\"#37431D\"\n      />\n      <rect\n        x=\"120.792\"\n        y=\"182.393\"\n        width=\"76.197\"\n        height=\"8.614\"\n        rx=\"4.307\"\n        fill=\"#37431D\"\n      />\n\n      <rect\n        x=\"-71.86\"\n        y=\"0\"\n        width=\"504.72\"\n        height=\"190\"\n        fill=\"url(#itemCardFade)\"\n      />\n    </g>\n  </svg>\n)\n"
  },
  {
    "path": "src/svgs/ItemCardIllustration/index.ts",
    "content": "export { ItemCardIllustration } from './ItemCardIllustration'\n"
  },
  {
    "path": "src/svgs/LogoLock/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * @param {{\n *  width?: string\n *  height?: string\n * }} props\n */\nexport const LogoLock = ({ height = '57', width = '256' }) => html`\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=${width}\n    height=${height}\n    viewBox=\"0 0 22 28\"\n    fill=\"none\"\n  >\n    <path d=\"M21.2294 26.082H8.74463V27.28H21.2294V26.082Z\" fill=\"#BADE5B\" />\n    <path\n      d=\"M21.2294 26.5566H0.770752V27.9994H21.2294V26.5566Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 23.9082H8.74463V25.1062H21.2294V23.9082Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 24.3828H0.770752V25.8256H21.2294V24.3828Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 21.7344H8.74463V22.9323H21.2294V21.7344Z\"\n      fill=\"#BADE5B\"\n    />\n    <path d=\"M21.2294 22.209H0.770752V23.6517H21.2294V22.209Z\" fill=\"#BADE5B\" />\n    <path\n      d=\"M21.2294 19.5605H8.74463V20.7585H21.2294V19.5605Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 20.0371H0.770752V21.4798H21.2294V20.0371Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 17.3867H8.74463V18.5847H21.2294V17.3867Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 17.8652H0.770752V19.308H21.2294V17.8652Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 15.2129H8.74463V16.4109H21.2294V15.2129Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M21.2294 15.6914H0.770752V17.1341H21.2294V15.6914Z\"\n      fill=\"#BADE5B\"\n    />\n    <path d=\"M21.2294 13.0391H8.74463V14.237H21.2294V13.0391Z\" fill=\"#BADE5B\" />\n    <path\n      d=\"M21.2294 13.5176H0.770752V14.9603H21.2294V13.5176Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M6.62979 11.3438H2.12231V12.7865H6.62979V11.3438Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M19.6056 10.8691H16.7856V12.0671H19.6056V10.8691Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M6.62784 10.8691H3.80786V12.0671H6.62784V10.8691Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M19.6056 11.3438H15.0981V12.7865H19.6056V11.3438Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M6.62979 9.16992H2.12231V10.6127H6.62979V9.16992Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M19.6056 8.69531H16.7856V9.89329H19.6056V8.69531Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M6.62784 8.69531H3.80786V9.89329H6.62784V8.69531Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M19.6056 9.16992H15.0981V10.6127H19.6056V9.16992Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M6.62979 6.99609H2.12231V8.43883H6.62979V6.99609Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M19.6056 6.52148H16.7856V7.71946H19.6056V6.52148Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M6.62784 6.52148H3.80786V7.71946H6.62784V6.52148Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M19.6056 6.99609H15.0981V8.43883H19.6056V6.99609Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M7.51749 4.82617H3.01001V6.26891H7.51749V4.82617Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M18.8075 4.34766H15.9875V5.54563H18.8075V4.34766Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M7.51553 4.34766H4.69556V5.54563H7.51553V4.34766Z\"\n      fill=\"#BADE5B\"\n    />\n    <path\n      d=\"M18.8078 4.82617H14.3003V6.26891H18.8078V4.82617Z\"\n      fill=\"#BADE5B\"\n    />\n    <path d=\"M17.1305 2.17383H8.62744V3.3718H17.1305V2.17383Z\" fill=\"#BADE5B\" />\n    <path\n      d=\"M17.1321 2.65039H4.69556V4.09313H17.1321V2.65039Z\"\n      fill=\"#BADE5B\"\n    />\n    <path d=\"M15.3274 0H9.0979V1.19797H15.3274V0Z\" fill=\"#BADE5B\" />\n    <path\n      d=\"M15.3274 0.478516H6.1521V1.92125H15.3274V0.478516Z\"\n      fill=\"#BADE5B\"\n    />\n  </svg>\n`\n"
  },
  {
    "path": "src/svgs/LogoLock/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { LogoLock } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('LogoLock', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders with default props', () => {\n    const { container } = render(<LogoLock />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toMatchSnapshot()\n  })\n\n  it('uses default width and height when props are not provided', () => {\n    const { container } = render(<LogoLock />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg.getAttribute('width')).toBe('256')\n    expect(svg.getAttribute('height')).toBe('57')\n  })\n\n  it('accepts custom width and height props', () => {\n    const { container } = render(<LogoLock width=\"100\" height=\"50\" />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toHaveAttribute('width', '100')\n    expect(svg).toHaveAttribute('height', '50')\n  })\n})\n"
  },
  {
    "path": "src/svgs/OnboardingLock/index.js",
    "content": "export const OnboardingLock = (props) => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n    width={282}\n    height={282}\n    fill=\"none\"\n    {...props}\n  >\n    <path fill=\"url(#a)\" d=\"M0 0h282v282H0z\" />\n    <defs>\n      <pattern\n        id=\"a\"\n        width={1}\n        height={1}\n        patternContentUnits=\"objectBoundingBox\"\n      >\n        <use xlinkHref=\"#b\" transform=\"scale(.00093)\" />\n      </pattern>\n      <image\n        xlinkHref=\"data:image/png;base64,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KAfr0yCvdzl/42T2t7Xem8/d32y5y6vRBz99uzPZ0Yp/jui8dsvrt9vd5ulXlmbT3U63Ll93d7bO/7TXjLfs9N6ankzvcr3R6OX6RT608crwm2/2k68z2NzV/+Tzit3wzvary/tb/vp/CkJxF795r/z+g/a9e/V53vYfoPjy2sX/Te9b1iacPD54ffx6NMizAemDv8nqyX66bV5I05+7n/1qeDs4nIxuNXo3msPrX7w7OhfKjefD5XemPq947by0vrEze/N6l9ZuN7dvUwbS7cDd/9/c1xt2eO7f/B3N+jt378pcmj4PVqfB/ZYslBvE69Egr9iuHJzc5s3zac32jU9c19Zvszvft21+07zVXDU71fDB9na2uWZ3p7lrY2vt6760q3tl/X31XvzK+jt40MZG/sbJ9Vcf5889n+3N3fx/29OH3Rltf92X3Znrbu/yR5MpvnRvb7TdDdwW3Pqnre6W69jkXeg9uDtbf21/yu13m63XbfrOXhlZeGVo3Svf3ea317s5fHwcXtp4/X3btVXUt8+zVbyyO79v/erl2x/PjwfbuzitONxvdngvzofe3nm37Veeb8fdPE3Gtlv2t6hX1KV586XLDTaLb703DvtG+fi+6t6AMsV67U7GDV8a/draXXez05+P93P9/W91vY369L/bf//3LgPtFvEr0225Yrn3d0em+9Ve+s7I9R3aleXByTT34vaLz25HFLbWcrk/rIh3A28XL/b93XHvDB3y4ejbc2+czqV1qxk6bBeXn7va1aEVd68b29tvyW7cuU/35Y22v76B78zc4/nV35197+zlV7v4J228+t77pF2eHrT7ytLh1ePByeBQD1Yf7seH1TefzGj9ZOCV2dorSy96azRfOe3Cndu3zqVXwwf92uV/08Zvtls4tAX1oK3e1bZupziZndva9tv/DdfvLk3fDekb65dPbu7+ttat5q6d3d0Z/oXe8Ubv5nE5SN899/bd/sbXjr6c3gvl9h792qsmB3lw6/uWg/yN43/Ttr9vb/wG2y1vd3TepV/ezvUerlN8cd36e4P3LcvX1xvEXxl6c+U2d25n6m/vukej425bsHr5+Lp4OzvL2ygH69N+i9OVxd2DuDf2fekyG/e+24a7veG9ZSCvG7zfaLLegb/p7uz+W/Ztk76RD/lzl9cf3e/Sd7c7u9d+ezpQ7sJu/pb3LZu7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9938eNun0a/bBpTtrVdt+HxX/rfz/t9A92zQ7Lm/bV1+N/HmqnnHu/XwnendnjeK9cub6TvVX+/82nmNXXqHPLYf2vfVsV2vmm2++xP23fJuVLdVHx/kw+3RL6yGd9PWeP2qy/N5sPpw+aJscfd0ZXrLbvRGs+3vfHN4M/ZsuGXdxfJrS/cnnq12aEW8ue7jci/cOfegzouP7689vH3aJ2z+E6/XvdH79/LodtqhTQbn6/G2724Or3dxGtR7vXX5uoPlO/tt8+rb0+1m+dXdHVs7e+m2t+euTxssl4H18PHKZV/6ZP1dmXp7izfoo9nanlyxmerXxuXLbexv4dEgffDTJz8438Z2edV09k4zr167zf9U37t+w7Vls177ukUd2u5WH37lZbbfrYvL87qDb29uveKV39lm2u0bONTZebo36pd3B/+G3b6y9uvpQF7v9qrLDsps5G3920638Xa6h3/L9bfowMujdZemB7fuhs2N9umThc1ubd+THa167+rd1Sviu7P3Lt/2y6ND+Y3jy0C/S/bS25MrtvPasyG78Vvv03s8m+6N9Yf7mxxv42tDjn/dtI3eG/3yurl9HXqzm8tu3T1oB1bD7TQzno/vHpQt4vXLu9PsZHz0ZsejXzm+TrOfeD273apW3ne68TdH4GuUXxy+/zwu596oV11ne5dOm748tHll6skX+YNb33vNvrgNe9AW/NZvzia0Weze7vKqX5p92P3dlYH2Nuo1V61vtCsvK7f1+voyr9sWv3e75c3ovd7m6zR3bdKa0y3u3d7ldoreuHLVhu9sbxzqzq0Lmymv/6uUf+xE+vV73HbkLpSZDi5n5+U1d3Facfh1vzR5fn/Txf+X3OuN6nareZ/m/inanLyNalv/Scbbr6xNOXi9u7M229H75u0td3vder1R/eK0QXvln97jbdybdou47L77G/BXZnTehTQ73izakIU6113NFg1ufe9NbmevTHfkYb3y+sN7y13YrE61T53mdCf/E91us7Ti3h2P9g27g7eD782tz3397V7f2HleUcbOde+8e7LXR4c7U324G+78vtvhtYvLQVlIh6MP39/l79zr1i3ud3Rl6tNk6uGfvMnMtzP7/p36d656O9WHb6/38N7yW7N54U+y1zt7a2fcRb8PjtdPlg/pxfZw/uve+uTnaw+vpwdl3FBn7mbo1XSgjLu4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veUM8Yr4ZPDicHczNi/U2biz9bf3uvu3yNiZG4fV5OGVqSZXrD/8+ujNTo5+dbam2065/KWNt/V97wx/o3c2ytmZmwZ5V3fne8t3xxZto86VaxaX3/fW+YP9NXfpfLh36IO8cpvNXbzd3e99cW9c6C2evhvS5T/d7ciPplOfLidT3Lz37u97svPRizjfPejHKw6fTx5vp9rwfnry7smUt8Orr8+D1V8a/cLRru/alas3fL4XfurwLrQ3Hg53vvpw94U0G/Jb77vlzel2C7868hvbKe9b9EvjFXfOmzK98Y2yG185+uQvPtr+qr24Tn1acfz+tuf+yY7soHzRO59y7crZcF8Zmjd03Lp0d/GbZ6uo3+7mbr3plO+bt3u9vQt53do7O6vzyslfqLO9rbs36tHnHu4rpxWvng4PTo+3N3rL6UG6LL2bOE8W0ot2ae6N4/tkL03vlelGs/RPeG3K92/Zu+01hxeb3ds8+/xiM9U/ce/LXLfdy9P7X9BesdwmzQ1H98HyaCAAACAASURBVKO9sBu7U+9Tf/earWev2mSru2m2dqc6DnU3jk+TfaHcYHk36D/daL67+i+N//f/UTv0t7lIM+Ur9uv89DBvb/RupvqM8/Bi+e6N57Mhs1Fuox792z25ZvDB7blhM7/C+cdOpF9063vDvXvX3S28qENzD1Yb7qveXHX5S9OxB9upVr173dm6/p/g//LO1fG3XJ6/h9f/hpdnT/bq0mSLenBnt95bdrRvn2zxEx+Pf21vXxa+OtWvja3t/NzegM1sfu1dmt1u4vK9+w6fJue2XcR31m3zdXf7tSVja997uzv19IrdlN39S2+me3Ta7lb3tsy+bfHdsLrdjTa3/mmjnb6B19872/Nuu7vjli3a09+emw9H170yzfHh1aPByZbrwvHmg7i7Xdqvwn86L02Pv9E73aLpul+Zl0/vmzjPJqy/M/6eZsq78crufHPb6/vNeefCbuAb9ejecUM5/rf76n3qTr6dfXtv6zrQG+7mL02+6K2tvfo77035+jiviMsMXhp9PL+rw+vGpV3d/YZMt2jQdm+8aAOO12719prbmX3v3qfu9ro13P3i3mqum3wo97ovXad/g9xgfTfNPTjfJ737zb16zcu0t/1mePK9L94uPjifjd/XP///qZqsfbcM5L92q5frw71zZbe279miDZb/Oip6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tzP73r1P3e11a7j7xb3VXDf5UO51X7pO/wa5wfpumntwvk9695t79ZqXaW/7zfDke1+8XXxwPhu/r3/+31M1WftuGch/7VYv14d758pubd+zRRss/3VU9HBL5Z+yhuVlq29vbl9zm1/31uwMjsd/cbnicF/7tEF6tYvLXe9fWjd0R3vx5nG7xW7Q5S/0XhGX3zf9wmbxF+7+5Jot39m55T+hXPs7X6/55j5l6k2nGzhd9k9uf4futdk9edrGT33ZK0OD3pl7Pt3ii/9u/PdfOcrclzb+1tsp74ZOtSsrtz13sdnyV6Z6+fU3jU+HOu7BnZMpXnm9neuNe0ent8xGmY2fNibr17294ZZxb3z5/obtu+G3PTko7x78qaYzeT+anZ9s7cxPbu8Vvf1J23+Xt+BP/J15vdtNGehvtAVful7x077clanW93ZHTgZOjqdDa4YG6+1+7z/J2R7c397kd582KH/5vCu/uzI/2WnGG9DuzvBf6H19t50iD9rU7b0zPHvt1Nv65dkuytH6jk3eddcrt2vvwu69/Cuztde7dH+L3n5LbqPc1u3AK9c3r/6fatcb3zZ04JX3d8rAKzsaX++T9m1j+9fmznjvE16enevv57VX7u/aXffuN9+dnXPLuzd6B46vc2l8Hqw+fL56v5Xf/47++nSaweF08Y126W5IH+xv/NetC+XcfxdHGNPX4OayzV+aXlHOO8W9d3nd2vl63tkaHXZD1rv1aBe2p0NzXz2ajM6l04o7//Lkrndo7eLt4fWG6xfL5Yt7qx5u43VfejvlsrDv45/yeoNyG+uVv/a3bq/d4fvbue7wLqyG2/52yw3uLG10Hty96uU713vvf+qN52dj593Nbe7Noj3a7ly77bx4d2RsuQe31nvzfdupTivyBzd3T77+q0+/srZ4sNvN0D9h35OzsW/vbX/nbH5De/pXvpmde/0dzckUu1m+39ep/srLwnY235l9N7+93i/e/ubTuXrVdLbmHvSThTJzvzK84vD59HWLvxP/zVx3+91rdm/uW7Z4ZfZb+z3+pdfjb23r4/uNN5+7SN84GV/z9CK+8264c6OP1h+tHT24M83yuqkHZV545fYb7mJ79NH8RmumvPnydqtvfuUm0zeuTLWd9cbGdni623NDeUgfnK9YvvPudjZvhtf39v43z4ZdfffG7v202019u/uujved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\"\n        id=\"b\"\n        width={1080}\n        height={1080}\n        preserveAspectRatio=\"none\"\n      />\n    </defs>\n  </svg>\n)\n"
  },
  {
    "path": "src/svgs/PearLogo/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * PearLogo SVG component\n * @param {{\n *  width?: string\n *  height?: string\n *  color?: string\n * }} props\n */\nexport const PearLogo = ({\n  width = '35',\n  height = '48',\n  color = '#B0D944'\n}) => html`\n  <svg\n    width=${width}\n    height=${height}\n    viewBox=\"0 0 35 48\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M16.25 0H18.75V4.65848H16.25V0Z\" fill=${color} />\n    <path\n      d=\"M15 6.13268V7.07617H12.5V8.25553H22.5V7.07617H20V5.24816H17.5V6.13268H15Z\"\n      fill=${color}\n    />\n    <path d=\"M25 8.84522H17.5V9.72974H10V11.8526H25V8.84522Z\" fill=${color} />\n    <path\n      d=\"M27.5 12.4423H17.5V13.3268H7.50002V15.4497H27.5V12.4423Z\"\n      fill=${color}\n    />\n    <path\n      d=\"M27.5 16.0394H17.5V16.9239H7.50002V19.0467H27.5V16.0394Z\"\n      fill=${color}\n    />\n    <path\n      d=\"M30 19.6364H17.5V20.5209H5.00002V22.6438H30V19.6364Z\"\n      fill=${color}\n    />\n    <path\n      d=\"M30 23.2335H17.5V24.118H5.00002V26.2409H30V23.2335Z\"\n      fill=${color}\n    />\n    <path\n      d=\"M32.5 26.8305H17.5V27.7151H2.5V29.8379H32.5V26.8305Z\"\n      fill=${color}\n    />\n    <path d=\"M35 30.4276H17.5V31.3121H0V33.435H35V30.4276Z\" fill=${color} />\n    <path d=\"M35 34.0246H17.5V34.9092H0V37.032H35V34.0246Z\" fill=${color} />\n    <path d=\"M35 37.6217H17.5V38.5062H0V40.6291H35V37.6217Z\" fill=${color} />\n    <path\n      d=\"M30 41.2188H17.5V42.1033H5.00002V44.2261H30V41.2188Z\"\n      fill=${color}\n    />\n    <path d=\"M25 44.8158H17.5V45.7003H10V47.1745H25V44.8158Z\" fill=${color} />\n  </svg>\n`\n"
  },
  {
    "path": "src/svgs/PearpassLogo/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * PearpassLogo SVG component\n * @param {{\n *  width?: string\n *  height?: string\n * }} props\n */\nexport const PearpassLogo = ({ width = '106', height = '23' }) => html`\n  <svg\n    width=${width}\n    height=${height}\n    viewBox=\"0 0 275 59\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path fill=\"#B0D944\" d=\"M42.196 53.793h-25.75v2.47h25.75z\" />\n    <path\n      fill=\"#B0D944\"\n      d=\"M42.196 54.774H0v2.976h42.196zM42.196 49.31h-25.75v2.47h25.75z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M42.196 50.291H0v2.976h42.196zM42.196 44.826h-25.75v2.471h25.75z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M42.196 45.807H0v2.976h42.196zM42.196 40.344h-25.75v2.471h25.75z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M42.196 41.325H0v2.976h42.196zM42.196 35.86h-25.75v2.472h25.75z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M42.196 36.846H0v2.975h42.196zM42.196 31.377h-25.75v2.471h25.75z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M42.196 32.362H0v2.975h42.196zM42.196 26.895h-25.75v2.47h25.75z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M42.196 27.88H0v2.976h42.196zM12.084 23.397H2.787v2.975h9.297zM38.847 22.416h-5.816v2.47h5.816z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M12.08 22.416H6.264v2.47h5.816zM38.847 23.397H29.55v2.975h9.297zM12.084 18.913H2.787v2.975h9.297zM38.847 17.932h-5.816v2.471h5.816z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M12.08 17.932H6.264v2.471h5.816zM38.847 18.913H29.55v2.975h9.297zM12.084 14.43H2.787v2.976h9.297zM38.847 13.45h-5.816v2.47h5.816z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M12.08 13.45H6.264v2.47h5.816zM38.847 14.43H29.55v2.976h9.297zM13.915 9.951H4.618v2.976h9.297zM37.201 8.966h-5.816v2.47H37.2z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M13.911 8.966H8.095v2.47h5.816zM37.201 9.951h-9.297v2.976h9.297zM33.742 4.483H16.205v2.471h17.537z\"\n    />\n    <path\n      fill=\"#B0D944\"\n      d=\"M33.746 5.467H8.096v2.976h25.65zM30.023 0H17.175v2.47h12.848z\"\n    />\n    <path fill=\"#B0D944\" d=\"M30.023.985H11.1V3.96h18.924z\" />\n    <path\n      fill=\"#F6F6F6\"\n      d=\"M72.028 4q4.176 0 7.128 1.08 3.024 1.08 4.968 2.952a10.46 10.46 0 0 1 2.808 4.248 14.4 14.4 0 0 1 .936 5.184q0 2.664-.936 5.256a12.1 12.1 0 0 1-2.808 4.608q-1.944 1.944-4.968 3.168-2.952 1.224-7.128 1.224h-2.232v16.92q0 2.592.072 4.248.144 1.656.576 2.592.432.864 1.368 1.224.936.288 2.592.288V58H57.916v-1.008q1.728 0 2.664-.288.936-.36 1.368-1.224.432-.936.504-2.592.144-1.656.144-4.248V12.352q0-2.304-.144-3.744t-.648-2.232q-.432-.792-1.368-1.08-.864-.288-2.52-.288V4zm0 25.92q4.32-.072 6.336-3.096 2.088-3.024 2.088-9.36 0-3.168-.648-5.328-.648-2.232-1.728-3.6-1.008-1.44-2.376-2.088a6.65 6.65 0 0 0-2.88-.648q-1.584 0-2.304 1.152-.72 1.08-.72 3.024V29.92zm23.232 7.992q0 8.496 1.944 12.96t5.256 4.464q1.152 0 2.016-.504a6.7 6.7 0 0 0 1.584-1.296 8 8 0 0 0 1.224-1.8q.504-1.008.864-2.088.792-2.52 1.152-5.688h2.016q-.36 4.104-1.584 7.344a17.6 17.6 0 0 1-1.296 2.736 8.9 8.9 0 0 1-1.8 2.376 8.4 8.4 0 0 1-2.376 1.656q-1.368.648-3.168.648-5.616 0-9.072-5.4-3.456-5.472-3.456-15.408 0-4.104.72-7.848.72-3.816 2.232-6.624 1.584-2.88 3.96-4.536 2.448-1.728 5.76-1.728 3.168 0 5.328 1.8 2.232 1.728 3.6 4.608t1.944 6.552q.648 3.6.648 7.272v.504zm5.976-18.936q-2.88 0-4.392 4.464-1.44 4.392-1.584 12.672h11.448q0-4.68-.432-7.92-.36-3.24-1.08-5.256-.72-2.088-1.728-3.024t-2.232-.936M139.25 48.64q0 2.808.144 4.464t.576 2.52q.504.864 1.44 1.152.936.216 2.448.216V58h-11.304v-5.688q-1.224 3.096-3.312 4.752t-4.68 1.656q-1.8 0-3.456-.504a6.9 6.9 0 0 1-2.88-1.512q-1.152-1.152-1.872-2.952t-.72-4.464q0-3.168 1.224-5.4a14.5 14.5 0 0 1 3.168-3.816 21 21 0 0 1 4.032-2.808 267 267 0 0 0 4.104-2.16q1.872-1.008 3.096-2.016 1.296-1.008 1.296-2.304v-.72q0-4.896-1.872-7.488t-4.896-2.592q-2.232 0-3.816 1.368t-2.304 4.392a3.5 3.5 0 0 1 1.224-.216q1.584 0 2.664 1.152 1.152 1.08 1.152 2.736 0 1.584-1.152 2.736-1.08 1.08-2.664 1.08-1.656 0-2.808-1.08a3.87 3.87 0 0 1-1.08-2.736q0-2.664.792-4.896.864-2.232 2.376-3.816a10.8 10.8 0 0 1 3.6-2.592q2.088-.936 4.608-.936 2.304 0 4.32.864t3.456 2.736q1.44 1.8 2.232 4.68.864 2.808.864 6.84zm-6.696-14.472q-1.152 1.224-2.952 2.304a22.3 22.3 0 0 0-3.384 2.448q-1.584 1.44-2.736 3.6-1.152 2.088-1.152 5.472 0 4.176 1.008 5.76t2.808 1.584q2.232 0 4.032-2.16t2.376-6.336zm34.449-16.992q1.8.072 3.024 1.368 1.296 1.224 1.296 3.096t-1.368 3.24q-1.296 1.296-3.168 1.296t-3.168-1.296q-1.296-1.368-1.296-3.24 0-.504.144-1.224-1.8 1.44-3.168 4.032a32.5 32.5 0 0 0-2.16 5.616 45 45 0 0 0-1.296 6.048q-.36 3.024-.36 5.4v7.128q0 2.808.144 4.464t.576 2.52q.504.864 1.368 1.152.936.216 2.448.216V58h-15.768v-1.008q1.512 0 2.376-.216a2.19 2.19 0 0 0 1.368-1.152q.504-.864.648-2.52t.144-4.464V30.136q0-2.16-.288-3.528-.216-1.44-.792-2.232a2.53 2.53 0 0 0-1.368-1.08q-.864-.288-2.088-.288V22q3.456-.144 6.12-1.08 2.664-1.008 4.104-3.024h1.008v11.52a28.5 28.5 0 0 1 1.656-4.824q1.008-2.232 2.376-3.888 1.44-1.656 3.24-2.592t4.032-.936h.216M185.091 4q4.176 0 7.128 1.08 3.024 1.08 4.968 2.952a10.46 10.46 0 0 1 2.808 4.248 14.4 14.4 0 0 1 .936 5.184q0 2.664-.936 5.256a12.1 12.1 0 0 1-2.808 4.608q-1.944 1.944-4.968 3.168-2.952 1.224-7.128 1.224h-2.232v16.92q0 2.592.072 4.248.144 1.656.576 2.592.432.864 1.368 1.224.936.288 2.592.288V58h-16.488v-1.008q1.728 0 2.664-.288.936-.36 1.368-1.224.432-.936.504-2.592.144-1.656.144-4.248V12.352q0-2.304-.144-3.744t-.648-2.232q-.432-.792-1.368-1.08-.864-.288-2.52-.288V4zm0 25.92q4.32-.072 6.336-3.096 2.088-3.024 2.088-9.36 0-3.168-.648-5.328-.648-2.232-1.728-3.6-1.008-1.44-2.376-2.088a6.65 6.65 0 0 0-2.88-.648q-1.584 0-2.304 1.152-.72 1.08-.72 3.024V29.92zm39.8 18.72q0 2.808.144 4.464t.576 2.52q.504.864 1.44 1.152.936.216 2.448.216V58h-11.304v-5.688q-1.224 3.096-3.312 4.752t-4.68 1.656q-1.8 0-3.456-.504a6.9 6.9 0 0 1-2.88-1.512q-1.152-1.152-1.872-2.952t-.72-4.464q0-3.168 1.224-5.4a14.5 14.5 0 0 1 3.168-3.816 21 21 0 0 1 4.032-2.808 267 267 0 0 0 4.104-2.16q1.872-1.008 3.096-2.016 1.296-1.008 1.296-2.304v-.72q0-4.896-1.872-7.488t-4.896-2.592q-2.232 0-3.816 1.368t-2.304 4.392a3.5 3.5 0 0 1 1.224-.216q1.584 0 2.664 1.152 1.152 1.08 1.152 2.736 0 1.584-1.152 2.736-1.08 1.08-2.664 1.08-1.656 0-2.808-1.08a3.87 3.87 0 0 1-1.08-2.736q0-2.664.792-4.896.864-2.232 2.376-3.816a10.8 10.8 0 0 1 3.6-2.592q2.088-.936 4.608-.936 2.304 0 4.32.864t3.456 2.736q1.44 1.8 2.232 4.68.864 2.808.864 6.84zm-6.696-14.472q-1.152 1.224-2.952 2.304a22.3 22.3 0 0 0-3.384 2.448q-1.584 1.44-2.736 3.6-1.152 2.088-1.152 5.472 0 4.176 1.008 5.76t2.808 1.584q2.232 0 4.032-2.16t2.376-6.336zm21.713-15.192q-.576 0-1.224.216-.648.144-1.224.72-.504.504-.864 1.584t-.36 2.808q0 2.16 1.08 4.176a24 24 0 0 0 2.664 3.816 84 84 0 0 0 3.528 3.744 34 34 0 0 1 3.528 3.96 20.5 20.5 0 0 1 2.736 4.32q1.08 2.304 1.08 4.968 0 1.8-.504 3.528a8.5 8.5 0 0 1-1.656 3.024q-1.152 1.296-2.952 2.088-1.728.792-4.248.792-1.512 0-2.664-.36a23 23 0 0 1-2.16-.648 23 23 0 0 0-1.728-.72 3.8 3.8 0 0 0-1.584-.36.49.49 0 0 0-.432.216l-.288.432q-.144.36-.144.72h-.792V43.672h1.008q.648 3.744 1.728 6.624a39 39 0 0 0 1.44 3.24q.864 1.512 2.016 2.448t2.592.936q1.728 0 2.664-1.224 1.008-1.296 1.008-4.32 0-2.664-1.08-4.896a19.6 19.6 0 0 0-2.736-4.176 37 37 0 0 0-3.528-3.744 65 65 0 0 1-3.528-3.816 24.5 24.5 0 0 1-2.664-4.176q-1.08-2.16-1.08-4.824 0-3.6 2.232-6.048 2.232-2.52 7.272-2.52 1.512 0 2.52.36 1.08.288 1.872.648a20 20 0 0 1 1.44.72q.72.288 1.44.288.36 0 .504-.216t.216-.432q.144-.288.144-.648h.792v11.736h-1.008q-.648-2.952-1.656-5.328a15 15 0 0 0-2.232-3.672q-1.296-1.656-3.168-1.656m23.063 0q-.576 0-1.224.216-.648.144-1.224.72-.504.504-.864 1.584t-.36 2.808q0 2.16 1.08 4.176a24 24 0 0 0 2.664 3.816 84 84 0 0 0 3.528 3.744 34 34 0 0 1 3.528 3.96 20.5 20.5 0 0 1 2.736 4.32q1.08 2.304 1.08 4.968 0 1.8-.504 3.528a8.5 8.5 0 0 1-1.656 3.024q-1.152 1.296-2.952 2.088-1.728.792-4.248.792-1.512 0-2.664-.36a23 23 0 0 1-2.16-.648 23 23 0 0 0-1.728-.72 3.8 3.8 0 0 0-1.584-.36.49.49 0 0 0-.432.216l-.288.432q-.144.36-.144.72h-.792V43.672h1.008q.648 3.744 1.728 6.624a39 39 0 0 0 1.44 3.24q.864 1.512 2.016 2.448t2.592.936q1.728 0 2.664-1.224 1.008-1.296 1.008-4.32 0-2.664-1.08-4.896a19.6 19.6 0 0 0-2.736-4.176 37 37 0 0 0-3.528-3.744 65 65 0 0 1-3.528-3.816 24.5 24.5 0 0 1-2.664-4.176q-1.08-2.16-1.08-4.824 0-3.6 2.232-6.048 2.232-2.52 7.272-2.52 1.512 0 2.52.36 1.08.288 1.872.648a20 20 0 0 1 1.44.72q.72.288 1.44.288.36 0 .504-.216t.216-.432q.144-.288.144-.648h.792v11.736h-1.008q-.648-2.952-1.656-5.328a15 15 0 0 0-2.232-3.672q-1.296-1.656-3.168-1.656m23.063 0q-.576 0-1.224.216-.648.144-1.224.72-.504.504-.864 1.584t-.36 2.808q0 2.16 1.08 4.176a24 24 0 0 0 2.664 3.816 84 84 0 0 0 3.528 3.744 34 34 0 0 1 3.528 3.96 20.5 20.5 0 0 1 2.736 4.32q1.08 2.304 1.08 4.968 0 1.8-.504 3.528a8.5 8.5 0 0 1-1.656 3.024q-1.152 1.296-2.952 2.088-1.728.792-4.248.792-1.512 0-2.664-.36a23 23 0 0 1-2.16-.648 23 23 0 0 0-1.728-.72 3.8 3.8 0 0 0-1.584-.36.49.49 0 0 0-.432.216l-.288.432q-.144.36-.144.72h-.792V43.672h1.008q.648 3.744 1.728 6.624a39 39 0 0 0 1.44 3.24q.864 1.512 2.016 2.448t2.592.936q1.728 0 2.664-1.224 1.008-1.296 1.008-4.32 0-2.664-1.08-4.896a19.6 19.6 0 0 0-2.736-4.176 37 37 0 0 0-3.528-3.744 65 65 0 0 1-3.528-3.816 24.5 24.5 0 0 1-2.664-4.176q-1.08-2.16-1.08-4.824 0-3.6 2.232-6.048 2.232-2.52 7.272-2.52 1.512 0 2.52.36 1.08.288 1.872.648a20 20 0 0 1 1.44.72q.72.288 1.44.288.36 0 .504-.216t.216-.432q.144-.288.144-.648h.792v11.736h-1.008q-.648-2.952-1.656-5.328a15 15 0 0 0-2.232-3.672q-1.296-1.656-3.168-1.656\"\n    />\n  </svg>\n`\n"
  },
  {
    "path": "src/svgs/ProtonPass/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * @param {{\n *  width?: string\n *  height?: string\n * }} props\n */\nexport const ProtonPass = () => html`\n  <svg\n    width=\"25\"\n    height=\"25\"\n    viewBox=\"0 0 25 25\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n  >\n    <rect width=\"25\" height=\"24.9983\" fill=\"url(#pattern0_4149_39145)\" />\n    <defs>\n      <pattern\n        id=\"pattern0_4149_39145\"\n        patternContentUnits=\"objectBoundingBox\"\n        width=\"1\"\n        height=\"1\"\n      >\n        <use\n          xlink:href=\"#image0_4149_39145\"\n          transform=\"translate(-0.89397 -0.338687) scale(0.00357178)\"\n        />\n      </pattern>\n      <image\n        id=\"image0_4149_39145\"\n        width=\"780\"\n        height=\"470\"\n        preserveAspectRatio=\"none\"\n        xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwwAAAHWCAYAAADaRQ4bAADio0lEQVR4Xuz9ebwly1Hfi/4ia6099LB3z31GHc0gwCCMhUEMH5DBD/BwLQkDxmADxoh5lDAICYvBAovZQgIDz/a9tq+ZDB6w4eLh+fo+2/e+iyeMgYtA1nDGPn167t7Tqoz3xy8iM6v2Wnvv7tPn6Jzu+Eq1V1VmZERkrnWqIyqzqoAgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg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IYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYRM4f8HB+JjNEZgVvgAAAAASUVORK5CYII=\"\n      />\n    </defs>\n  </svg>\n`\n"
  },
  {
    "path": "src/svgs/SpotlightLeft/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * @param {{\n *  width?: string\n *  height?: string\n *  fill?: string\n * }} props\n */\nexport const SpotLightLeft = ({\n  fill = 'none',\n  height = '100%',\n  width = '100%'\n}) => html`\n  <svg\n    width=${width}\n    height=${height}\n    viewBox=\"0 0 453 752\"\n    fill=${fill}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g filter=\"url(#filter0_f_7001_17048)\">\n      <path\n        d=\"M67.3396 592.874C152.858 791.154 321.5 880.851 222.19 923.684C122.879 966.517 -26.9543 840.503 -112.473 642.223C-197.991 443.944 -186.81 248.483 -87.4998 205.65C11.8108 162.817 -18.1789 394.594 67.3396 592.874Z\"\n        fill=\"#F2CB40\"\n        fillOpacity=\"0.35\"\n      />\n    </g>\n    <defs>\n      <filter\n        id=\"filter0_f_7001_17048\"\n        x=\"-369.959\"\n        y=\"0.483398\"\n        width=\"822.535\"\n        height=\"1131.56\"\n        filterUnits=\"userSpaceOnUse\"\n        colorInterpolationFilters=\"sRGB\"\n      >\n        <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n        <feBlend\n          mode=\"normal\"\n          in=\"SourceGraphic\"\n          in2=\"BackgroundImageFix\"\n          result=\"shape\"\n        />\n        <feGaussianBlur\n          stdDeviation=\"100\"\n          result=\"effect1_foregroundBlur_7001_17048\"\n        />\n      </filter>\n    </defs>\n  </svg>\n`\n"
  },
  {
    "path": "src/svgs/SpotlightLeft/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { SpotLightLeft } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('SpotLightLeft', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders with default props', () => {\n    const { container } = render(<SpotLightLeft />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toMatchSnapshot()\n  })\n\n  it('uses default width and height when props are not provided', () => {\n    const { container } = render(<SpotLightLeft />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg.getAttribute('width')).toBe('100%')\n    expect(svg.getAttribute('height')).toBe('100%')\n  })\n\n  it('accepts custom width and height props', () => {\n    const { container } = render(<SpotLightLeft width=\"200\" height=\"300\" />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toHaveAttribute('width', '200')\n    expect(svg).toHaveAttribute('height', '300')\n  })\n\n  it('accepts custom fill prop', () => {\n    const { container } = render(<SpotLightLeft fill=\"#FF0000\" />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toHaveAttribute('fill', '#FF0000')\n  })\n})\n"
  },
  {
    "path": "src/svgs/SpotlightMiddle/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * @param {{\n *  width?: string\n *  height?: string\n *  fill?: string\n * }} props\n */\nexport const SpotlightMiddle = ({\n  fill = 'none',\n  height = '100%',\n  width = '100%'\n}) => html`\n  <svg\n    width=${width}\n    height=${height}\n    viewBox=\"0 0 632 792\"\n    fill=${fill}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g filter=\"url(#filter0_f_7001_17047)\">\n      <circle\n        cx=\"396.349\"\n        cy=\"396\"\n        r=\"195.83\"\n        fill=\"#F2CB40\"\n        fillOpacity=\"0.24\"\n      />\n    </g>\n    <defs>\n      <filter\n        id=\"filter0_f_7001_17047\"\n        x=\"0.519043\"\n        y=\"0.169922\"\n        width=\"791.66\"\n        height=\"791.66\"\n        filterUnits=\"userSpaceOnUse\"\n        colorInterpolationFilters=\"sRGB\"\n      >\n        <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n        <feBlend\n          mode=\"normal\"\n          in=\"SourceGraphic\"\n          in2=\"BackgroundImageFix\"\n          result=\"shape\"\n        />\n        <feGaussianBlur\n          stdDeviation=\"100\"\n          result=\"effect1_foregroundBlur_7001_17047\"\n        />\n      </filter>\n    </defs>\n  </svg>\n`\n"
  },
  {
    "path": "src/svgs/SpotlightMiddle/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { SpotlightMiddle } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('SpotlightMiddle', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders with default props', () => {\n    const { container } = render(<SpotlightMiddle />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toMatchSnapshot()\n  })\n\n  it('uses default width and height when props are not provided', () => {\n    const { container } = render(<SpotlightMiddle />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg.getAttribute('width')).toBe('100%')\n    expect(svg.getAttribute('height')).toBe('100%')\n  })\n\n  it('accepts custom width and height props', () => {\n    const { container } = render(<SpotlightMiddle width=\"200\" height=\"300\" />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toHaveAttribute('width', '200')\n    expect(svg).toHaveAttribute('height', '300')\n  })\n\n  it('accepts custom fill prop', () => {\n    const { container } = render(<SpotlightMiddle fill=\"#FF0000\" />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toHaveAttribute('fill', '#FF0000')\n  })\n})\n"
  },
  {
    "path": "src/svgs/SpotlightRight/index.js",
    "content": "import { html } from 'htm/react'\n\n/**\n * @param {{\n *  width?: string\n *  height?: string\n *  fill?: string\n * }} props\n */\nexport const SpotlightRight = ({\n  fill = 'none',\n  height = '100%',\n  width = '100%'\n}) => html`\n  <svg\n    width=${width}\n    height=${height}\n    viewBox=\"0 0 518 541\"\n    fill=${fill}\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g filter=\"url(#filter0_f_7001_17046)\">\n      <circle\n        cx=\"715.95\"\n        cy=\"-175.581\"\n        r=\"515.731\"\n        fill=\"#B0D944\"\n        fillOpacity=\"0.3\"\n      />\n    </g>\n    <defs>\n      <filter\n        id=\"filter0_f_7001_17046\"\n        x=\"0.21875\"\n        y=\"-891.312\"\n        width=\"1431.46\"\n        height=\"1431.46\"\n        filterUnits=\"userSpaceOnUse\"\n        colorInterpolationFilters=\"sRGB\"\n      >\n        <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n        <feBlend\n          mode=\"normal\"\n          in=\"SourceGraphic\"\n          in2=\"BackgroundImageFix\"\n          result=\"shape\"\n        />\n        <feGaussianBlur\n          stdDeviation=\"100\"\n          result=\"effect1_foregroundBlur_7001_17046\"\n        />\n      </filter>\n    </defs>\n  </svg>\n`\n"
  },
  {
    "path": "src/svgs/SpotlightRight/index.test.js",
    "content": "import React from 'react'\n\nimport { render } from '@testing-library/react'\n\nimport { SpotlightRight } from './index'\nimport '@testing-library/jest-dom'\n\ndescribe('SpotlightRight', () => {\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('renders with default props', () => {\n    const { container } = render(<SpotlightRight />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toMatchSnapshot()\n  })\n\n  it('uses default width and height when props are not provided', () => {\n    const { container } = render(<SpotlightRight />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg.getAttribute('width')).toBe('100%')\n    expect(svg.getAttribute('height')).toBe('100%')\n  })\n\n  it('accepts custom width and height props', () => {\n    const { container } = render(<SpotlightRight width=\"200\" height=\"300\" />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toHaveAttribute('width', '200')\n    expect(svg).toHaveAttribute('height', '300')\n  })\n\n  it('accepts custom fill prop', () => {\n    const { container } = render(<SpotlightRight fill=\"#FF0000\" />)\n\n    const svg = container.querySelector('svg')\n    expect(svg).toBeInTheDocument()\n    expect(svg).toHaveAttribute('fill', '#FF0000')\n  })\n})\n"
  },
  {
    "path": "src/types/css.d.ts",
    "content": "declare module '*.css'\n"
  },
  {
    "path": "src/types/electron.d.ts",
    "content": "export {}\n\ndeclare global {\n  interface Window {\n    electronAPI?: {\n      getConfig: () => Promise<{\n        storage: string\n        key: string | null\n        upgrade: string | null\n        version: string | number\n        applink: string\n      }>\n      onRuntimeUpdating: (cb: () => void) => () => void\n      onRuntimeUpdated: (cb: () => void) => () => void\n      applyUpdate: () => Promise<void>\n      restart: () => Promise<void>\n      checkUpdated: () => Promise<boolean>\n      vaultInvoke: (method: string, args?: unknown[]) => Promise<{ ok: boolean; data?: unknown; error?: string }>\n      vaultOnUpdate: (cb: () => void) => () => void\n      openExternal: (url: string) => Promise<void>\n      openLogsFolder: () => Promise<void>\n      isLoggingEnabled: () => Promise<{ enabled: boolean; forced: boolean }>\n      setLogging: (\n        enabled: boolean\n      ) => Promise<{ enabled: boolean; forced: boolean }>\n    }\n  }\n}\n"
  },
  {
    "path": "src/types/jest-globals.d.ts",
    "content": "declare const jest: typeof import('@jest/globals').jest\n\ndeclare function describe(\n  name: string,\n  fn: () => void\n): void\n\ndeclare function it(\n  name: string,\n  fn: () => void | Promise<void>\n): void\n\ndeclare function test(\n  name: string,\n  fn: () => void | Promise<void>\n): void\n\ndeclare function beforeEach(fn: () => void | Promise<void>): void\ndeclare function afterEach(fn: () => void | Promise<void>): void\n\ninterface Matchers<R = void> {\n  toBe(expected: unknown): R\n  toEqual(expected: unknown): R\n  toBeTruthy(): R\n  toBeFalsy(): R\n  toBeNull(): R\n  toBeUndefined(): R\n  toBeDefined(): R\n  toContain(expected: unknown): R\n  toHaveLength(expected: number): R\n  toHaveProperty(key: string, value?: unknown): R\n  toMatchObject(expected: unknown): R\n  toBeInTheDocument(): R\n  toHaveBeenCalledTimes(expected: number): R\n  toHaveBeenCalledWith(...args: unknown[]): R\n  toHaveBeenNthCalledWith(n: number, ...args: unknown[]): R\n  toHaveBeenLastCalledWith(...args: unknown[]): R\n  toHaveBeenCalled(): R\n  toHaveAttribute(attr: string, value?: unknown): R\n  toBeDisabled(): R\n  toBeChecked(): R\n  toHaveValue(expected?: string | number | string[]): R\n  not: Matchers<R>\n}\n\ndeclare function expect<T = unknown>(actual: T): Matchers<void>\n\ndeclare namespace expect {\n  function arrayContaining<T = unknown>(items: T[]): T[]\n  function objectContaining<T = Record<string, unknown>>(object: T): T\n  function stringContaining(value: string): string\n  function stringMatching(value: string | RegExp): string\n  function any(constructor: unknown): unknown\n  function anything(): unknown\n}\n"
  },
  {
    "path": "src/types/modules.d.ts",
    "content": "// TODO improve types\n\n/* eslint-disable */\n\ndeclare module '@tetherto/pearpass-lib-ui-theme-provider' {\n  export const ThemeProvider: any\n  export const colors: any\n  export const themes: any\n}\n\ndeclare module '@tetherto/pearpass-lib-vault' {\n  export interface Vault {\n    id: string\n    name: string\n    createdAt?: string\n    devices?: VaultDevice[]\n  }\n\n  export interface VaultDevice {\n    id: string\n    name: string\n    createdAt?: string\n  }\n\n  export interface UseVaultsResult {\n    isLoading: boolean\n    isInitialized: boolean\n    data: Vault[] | undefined\n    refetch: () => Promise<Vault[]>\n    initVaults: (params: {\n      ciphertext?: string\n      nonce?: string\n      salt?: string\n      hashedPassword?: string\n      password?: string\n    }) => Promise<void>\n    resetState: () => void\n  }\n\n  export interface UseVaultResult {\n    isLoading: boolean\n    isInitialized: boolean\n    data: Vault | undefined\n    refetch: (\n      vaultId?: string,\n      params?: {\n        password?: string\n        ciphertext?: string\n        nonce?: string\n        hashedPassword?: string\n      }\n    ) => Promise<Vault | void>\n    isVaultProtected: (vaultId: string | undefined) => Promise<boolean>\n    addDevice: (deviceName: string) => Promise<void>\n    resetState: () => void\n    updateUnprotectedVault: (\n      vaultId: string,\n      vaultUpdate: { name: string; password?: string }\n    ) => Promise<void>\n    updateProtectedVault: (\n      vaultId: string,\n      vaultUpdate: { name: string; password: string; currentPassword: string }\n    ) => Promise<void>\n  }\n\n  export const setPearpassVaultClient: any\n  export const VaultProvider: any\n  export function useVaults(options?: {\n    onCompleted?: (payload: Vault[]) => void\n    onInitialize?: (payload: Vault[]) => void\n  }): UseVaultsResult\n  export function useVault(options?: {\n    shouldSkip?: boolean\n    variables?: { vaultId: string }\n  }): UseVaultResult\n  export const useVaults: any\n  export const useVault: any\n  export const useCreateVault: any\n  export const useInvite: any\n  export const usePair: any\n  export const authoriseCurrentProtectedVault: any\n  export const RECORD_TYPES: any\n  export const OTP_TYPE: { TOTP: 'TOTP'; HOTP: 'HOTP' }\n\n  export function useOtp(params: { recordId: string; otpPublic: any }): {\n    code: string | null\n    timeRemaining: number | null\n    type: string | null\n    period: number | null\n    generateNext: (() => Promise<void>) | null\n    isLoading: boolean\n  }\n\n  export const OtpRefreshProvider: any\n  export function useOtpRefresh(): (() => void) | null\n\n  export function useTimerAnimation(\n    timeRemaining: number | null,\n    period: number,\n    animated?: boolean\n  ): {\n    noTransition: boolean\n    expiring: boolean\n    targetTime: number\n  }\n\n  export function formatOtpCode(code: string | null): string\n  export function createAlignedInterval(callback: () => void): () => void\n  export function isExpiring(timeRemaining: number | null): boolean\n  export const EXPIRY_THRESHOLD_SECONDS: number\n\n  const otherExports: any\n  export default otherExports\n\n  export const useUserData: () => {\n    data: {\n      hasPasswordSet: boolean\n      isLoggedIn: boolean\n      isVaultOpen: boolean\n      masterPasswordStatus: {\n        isLocked: boolean\n        lockoutRemainingMs: number\n        remainingAttempts: number\n      }\n    }\n    isInitialized: boolean\n    hasPasswordSet: boolean\n    masterPasswordStatus: {\n      isLocked: boolean\n      lockoutRemainingMs: number\n      remainingAttempts: number\n    }\n    isLoading: boolean\n    logIn: (params: {\n      ciphertext?: string\n      nonce?: string\n      salt?: string\n      hashedPassword?: string\n      password?: string\n    }) => Promise<void>\n    createMasterPassword: (password: string) => Promise<{\n      ciphertext: string\n      nonce: string\n      salt: string\n      hashedPassword: string\n    }>\n    updateMasterPassword: (params: {\n      newPassword: string\n      currentPassword: string\n    }) => Promise<{\n      ciphertext: string\n      nonce: string\n      salt: string\n      hashedPassword: string\n    }>\n    refetch: () => Promise<{\n      hasPasswordSet: boolean\n      isLoggedIn: boolean\n      isVaultOpen: boolean\n    }>\n    refreshMasterPasswordStatus: () => Promise<{\n      isLocked: boolean\n      lockoutRemainingMs: number\n      remainingAttempts: number\n    }>\n  }\n\n  export function useFavicon(params: { url: string }): {\n    faviconSrc: string | null\n    isLoading: boolean\n    hasError: boolean\n  }\n\n  export interface FolderRecord {\n    id: string\n    folder?: string | null\n    isFavorite?: boolean\n    type: string\n    [key: string]: unknown\n  }\n\n  export interface FolderEntry {\n    name: string\n    records: FolderRecord[]\n  }\n\n  export interface FoldersData {\n    favorites: { records: FolderRecord[] }\n    noFolder: { records: FolderRecord[] }\n    customFolders: Record<string, FolderEntry>\n  }\n\n  export interface UseFoldersResult {\n    isLoading: boolean\n    data: FoldersData | undefined\n    renameFolder: (name: string, newName: string) => Promise<void>\n    deleteFolder: (name: string) => Promise<void>\n  }\n\n  export function useFolders(options?: {\n    variables?: { searchPattern?: string }\n  }): UseFoldersResult\n\n  export interface UseCreateFolderResult {\n    isLoading: boolean\n    createFolder: (folderName: string) => void\n  }\n\n  export function useCreateFolder(options?: {\n    onCompleted?: (payload: { folder: string }) => void\n    onError?: (error: string) => void\n  }): UseCreateFolderResult\n\n  export function decryptExportData(\n    encryptedData: unknown,\n    password: string\n  ): Promise<unknown>\n  export function useCreateRecord(options?: {\n    onCompleted?: (payload: unknown) => void\n    onError?: (error: Error) => void\n  }): {\n    createRecord: (\n      record: unknown,\n      onError?: (error: Error) => void\n    ) => Promise<unknown>\n    isLoading?: boolean\n  }\n\n  export const useRecords: any\n  export const useBlindMirrors: any\n\n  export function closeAllInstances(): Promise<void>\n\n  export function useRecordCountsByType(): {\n    data: Record<string, number> | undefined\n    isLoading: boolean\n  }\n}\n\ndeclare module '@tetherto/pearpass-utils-password-check' {\n  export type PasswordStrengthType = 'error' | 'warning' | 'success'\n\n  export function checkPasswordStrength(password: string): {\n    strengthType: PasswordStrengthType\n    type: string\n    errors?: string[]\n  }\n\n  export function checkPassphraseStrength(words: string[]): {\n    type: string\n  }\n\n  export function validatePasswordChange(params: {\n    currentPassword: string\n    newPassword: string\n    repeatPassword: string\n    messages: {\n      newPasswordMustDiffer: string\n      passwordsDontMatch: string\n    }\n  }): {\n    success: boolean\n    field: 'newPassword' | 'repeatPassword'\n    error: string\n  }\n}\n\ndeclare module '@tetherto/pear-apps-lib-ui-react-hooks' {\n  export const useCountDown: any\n  export const useForm: any\n}\n\ndeclare module '@tetherto/pear-apps-utils-qr' {\n  export const generateQRCodeSVG: any\n}\n\ndeclare module '@tetherto/pear-apps-utils-avatar-initials' {\n  export function generateAvatarInitials(name: string): string\n}\n\ndeclare module '@tetherto/pear-apps-utils-validator' {\n  export const Validator: any\n}\n\ndeclare module '@tetherto/pear-apps-utils-date' {\n  export function formatDate(\n    date: string | Date,\n    format: string,\n    separator: string\n  ): string\n}\n\ndeclare module '@tetherto/pearpass-lib-vault/src/utils/buffer' {\n  export const clearBuffer: (buffer: any) => void\n  export const stringToBuffer: (value: string) => any\n}\n\ndeclare module '@tetherto/pearpass-lib-constants' {\n  export const BLIND_PEERS_LIMIT: number\n  export const BLIND_PEER_TYPE: {\n    DEFAULT: 'default'\n    PERSONAL: 'personal'\n  }\n  export const PROTECTED_VAULT_ENABLED: boolean\n  export const BE_AUTO_LOCK_ENABLED: boolean\n  export const DEFAULT_AUTO_LOCK_TIMEOUT: number\n  export const AUTO_LOCK_TIMEOUT_OPTIONS: Record<\n    string,\n    { label: string; value: number }\n  >\n  export const AUTO_LOCK_ENABLED: boolean\n  export const DELETE_VAULT_ENABLED: boolean\n  export const AUTHENTICATOR_ENABLED: boolean\n  export const DESKTOP_DESIGN_VERSION: number\n  export const DESKTOP_2FA_IMPORTS_ENABLED: boolean\n  export const DATE_FORMAT: string\n  export const MAX_IMPORT_RECORDS: number\n  export const NATIVE_MESSAGING_BRIDGE_PEAR_LINK_PRODUCTION: string\n  export const NATIVE_MESSAGING_BRIDGE_PEAR_LINK_STAGING: string\n  export const UNSUPPORTED: boolean\n  export const PEARPASS_WEBSITE: string\n  export const PRIVACY_POLICY: string\n  export const TERMS_OF_USE: string\n  export const BLIND_PEERS_LEARN_MORE: string\n  export const DEFAULT_SELECTED_TYPE: number\n  export const PASSPHRASE_WORD_COUNTS: {\n    STANDARD_12: number\n    STANDARD_24: number\n    WITH_RANDOM_12: number\n    WITH_RANDOM_24: number\n  }\n  export const VALID_WORD_COUNTS: number[]\n}\n\ndeclare module '@tetherto/pearpass-utils-password-generator' {\n  export function generatePassword(\n    length: number,\n    rulesConfig?: {\n      includeSpecialChars?: boolean\n      lowerCase?: boolean\n      upperCase?: boolean\n      numbers?: boolean\n    }\n  ): string\n  export function generatePassphrase(\n    capitalLetters: boolean,\n    symbols: boolean,\n    numbers: boolean,\n    wordsCount: number\n  ): string[]\n}\n\ndeclare module '@tetherto/pearpass-lib-data-import' {\n  export function decryptKeePassKdbx(\n    fileContent: string | ArrayBuffer,\n    password: string\n  ): Promise<unknown>\n  export function parse1PasswordData(\n    data: unknown,\n    fileType: string\n  ): Promise<unknown[]>\n  export function parseBitwardenData(\n    data: unknown,\n    fileType: string\n  ): Promise<unknown[]>\n  export function parseKeePassData(\n    data: unknown,\n    fileType: string\n  ): Promise<unknown[]>\n  export function parseLastPassData(\n    data: unknown,\n    fileType: string\n  ): Promise<unknown[]>\n  export function parseNordPassData(\n    data: unknown,\n    fileType: string\n  ): Promise<unknown[]>\n  export function parsePearPassData(\n    data: unknown,\n    fileType: string\n  ): Promise<unknown[]>\n  export function parseProtonPassData(\n    data: unknown,\n    fileType: string\n  ): Promise<unknown[]>\n}\n\ndeclare module '@tetherto/pear-apps-lib-feedback' {\n  export type FeedbackTopic =\n    | 'BUG_REPORT'\n    | 'FEATURE_REQUEST'\n    | 'SECURITY_ISSUE'\n  export type FeedbackApp = 'MOBILE' | 'DESKTOP' | 'BROWSER_EXTENSION'\n\n  export interface SlackFeedbackPayload {\n    webhookUrPath: string\n    topic: FeedbackTopic\n    app?: FeedbackApp\n    operatingSystem?: string\n    deviceModel?: string\n    message: string\n    appVersion?: string\n    customFields?: unknown[]\n    additionalAttachment?: Record<string, unknown>\n  }\n\n  export interface GoogleFormMapping {\n    timestamp?: string\n    topic?: string\n    app?: string\n    operatingSystem?: string\n    deviceModel?: string\n    message?: string\n    appVersion?: string\n  }\n\n  export interface GoogleFormFeedbackPayload {\n    formKey: string\n    mapping?: GoogleFormMapping\n    additionalFields?: Array<{ key: string; value: string }>\n    topic?: FeedbackTopic | string\n    app?: FeedbackApp | string\n    operatingSystem?: string\n    deviceModel?: string\n    message?: string\n    appVersion?: string\n  }\n\n  export function sendSlackFeedback(\n    config: SlackFeedbackPayload\n  ): Promise<boolean | void>\n\n  export function sendGoogleFormFeedback(\n    config: GoogleFormFeedbackPayload\n  ): Promise<boolean | void>\n}\n"
  },
  {
    "path": "src/types/styled.d.ts",
    "content": "import 'styled-components'\n\ndeclare module 'styled-components' {\n  export interface DefaultTheme {\n    colors: {\n      errorYellow: {\n        mode1: string\n      }\n      errorRed: {\n        mode1: string\n      }\n      white: {\n        mode1: string\n      }\n      primary400: {\n        mode1: string\n      }\n      grey100: {\n        mode1: string\n      }\n      grey200: {\n        mode1: string\n      }\n      grey300: {\n        mode1: string\n        dark: string\n      }\n      grey350: {\n        mode1: string\n      }\n      grey400: {\n        mode1: string\n      }\n      grey500: {\n        mode1: string\n        dark: string\n      }\n      black: {\n        dark: string\n        mode1: string\n      },\n      secondary400: {\n        mode1: string\n      }\n      [key: string]: Record<string, string>\n    }\n  }\n}\n"
  },
  {
    "path": "src/utils/addHttps.js",
    "content": "/**\n * @param {string} url\n * @returns {boolean}\n */\nexport const addHttps = (url) => {\n  const lowerUrl = url.toLowerCase()\n\n  return lowerUrl.startsWith('http://') || lowerUrl.startsWith('https://')\n    ? lowerUrl\n    : `https://${lowerUrl}`\n}\n"
  },
  {
    "path": "src/utils/addHttps.test.js",
    "content": "import { addHttps } from './addHttps'\n\ndescribe('addHttps', () => {\n  test('should return the URL unchanged if it already starts with http://', () => {\n    const url = 'http://example.com'\n    expect(addHttps(url)).toBe(url)\n  })\n\n  test('should return the URL unchanged if it already starts with https://', () => {\n    const url = 'https://example.com'\n    expect(addHttps(url)).toBe(url)\n  })\n\n  test('should prepend https:// to the URL if it does not start with http:// or https://', () => {\n    const url = 'example.com'\n    expect(addHttps(url)).toBe('https://example.com')\n  })\n\n  test('should handle URLs with subdomains correctly', () => {\n    const url = 'www.example.com'\n    expect(addHttps(url)).toBe('https://www.example.com')\n  })\n\n  test('should handle URLs with paths correctly', () => {\n    const url = 'example.com/path'\n    expect(addHttps(url)).toBe('https://example.com/path')\n  })\n})\n"
  },
  {
    "path": "src/utils/applyGlobalStyles.js",
    "content": "export function applyGlobalStyles(styles) {\n  const styleSheet = document.createElement('style')\n  styleSheet.innerHTML = styles\n  document.head.appendChild(styleSheet)\n}\n"
  },
  {
    "path": "src/utils/applyGlobalStyles.test.js",
    "content": "import { applyGlobalStyles } from './applyGlobalStyles'\n\ndescribe('applyGlobalStyles', () => {\n  beforeEach(() => {\n    document.head.innerHTML = ''\n  })\n\n  test('should add a style element to document head', () => {\n    applyGlobalStyles('body { color: red; }')\n\n    const styleElements = document.head.getElementsByTagName('style')\n    expect(styleElements.length).toBe(1)\n  })\n\n  test('should set the provided styles as innerHTML of the style element', () => {\n    const testStyles = 'body { color: blue; }'\n    applyGlobalStyles(testStyles)\n\n    const styleElement = document.head.getElementsByTagName('style')[0]\n    expect(styleElement.innerHTML).toBe(testStyles)\n  })\n\n  test('should append multiple style elements when called multiple times', () => {\n    applyGlobalStyles('body { color: red; }')\n    applyGlobalStyles('div { margin: 0; }')\n\n    const styleElements = document.head.getElementsByTagName('style')\n    expect(styleElements.length).toBe(2)\n  })\n})\n"
  },
  {
    "path": "src/utils/autoLock.js",
    "content": "import { AUTO_LOCK_ENABLED } from '@tetherto/pearpass-lib-constants'\n\nimport { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\n\nexport function applyAutoLockEnabled(enabled) {\n  if (!AUTO_LOCK_ENABLED) return\n\n  if (enabled) {\n    localStorage.removeItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED)\n  } else {\n    localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'false')\n  }\n\n  window.dispatchEvent(new Event('auto-lock-settings-changed'))\n  window.dispatchEvent(new Event('apply-auto-lock-enabled'))\n}\n\nexport function applyAutoLockTimeout(ms) {\n  if (!AUTO_LOCK_ENABLED) return\n\n  const value = ms === null ? 'null' : String(ms)\n  localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS, value)\n\n  window.dispatchEvent(new Event('auto-lock-settings-changed'))\n  window.dispatchEvent(new Event('apply-auto-lock-timeout'))\n}\n"
  },
  {
    "path": "src/utils/autoLock.test.js",
    "content": "import { applyAutoLockEnabled, applyAutoLockTimeout } from './autoLock.js'\nimport { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\n\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  AUTO_LOCK_ENABLED: true\n}))\n\ndescribe('auto lock local state helpers', () => {\n  beforeEach(() => {\n    localStorage.clear()\n    jest.spyOn(window, 'dispatchEvent')\n  })\n\n  afterEach(() => {\n    jest.restoreAllMocks()\n  })\n\n  describe('applyAutoLockEnabled', () => {\n    it('stores \"false\" in localStorage when disabled', () => {\n      applyAutoLockEnabled(false)\n\n      expect(localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED)).toBe(\n        'false'\n      )\n    })\n\n    it('removes localStorage key when enabled', () => {\n      localStorage.setItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED, 'false')\n\n      applyAutoLockEnabled(true)\n\n      expect(\n        localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_ENABLED)\n      ).toBeNull()\n    })\n\n    it('dispatches auto-lock related events', () => {\n      applyAutoLockEnabled(false)\n\n      expect(window.dispatchEvent).toHaveBeenCalledWith(\n        expect.objectContaining({ type: 'auto-lock-settings-changed' })\n      )\n\n      expect(window.dispatchEvent).toHaveBeenCalledWith(\n        expect.objectContaining({ type: 'apply-auto-lock-enabled' })\n      )\n    })\n  })\n\n  describe('applyAutoLockTimeout', () => {\n    it('stores timeout value as string', () => {\n      applyAutoLockTimeout(30000)\n\n      expect(\n        localStorage.getItem(LOCAL_STORAGE_KEYS.AUTO_LOCK_TIMEOUT_MS)\n      ).toBe('30000')\n    })\n\n    it('dispatches auto-lock timeout events', () => {\n      applyAutoLockTimeout(10000)\n\n      expect(window.dispatchEvent).toHaveBeenCalledWith(\n        expect.objectContaining({ type: 'auto-lock-settings-changed' })\n      )\n\n      expect(window.dispatchEvent).toHaveBeenCalledWith(\n        expect.objectContaining({ type: 'apply-auto-lock-timeout' })\n      )\n    })\n\n    it('does nothing when AUTO_LOCK_ENABLED is false', () => {\n      jest.resetModules()\n      const dispatchSpy = jest.spyOn(window, 'dispatchEvent')\n\n      jest.isolateModules(() => {\n        jest.doMock('@tetherto/pearpass-lib-constants', () => ({\n          AUTO_LOCK_ENABLED: false\n        }))\n        const {\n          applyAutoLockTimeout: isolatedTimeout,\n          applyAutoLockEnabled: isolatedEnabled\n        } = require('./autoLock.js')\n        isolatedTimeout(30000)\n        isolatedEnabled(false)\n      })\n\n      expect(dispatchSpy).not.toHaveBeenCalled()\n    })\n  })\n})\n"
  },
  {
    "path": "src/utils/breakpoints.js",
    "content": "/**\n * @param {number} windowWidth\n * @returns {boolean}\n */\n\nexport const isDesktopSmall = (windowWidth) => windowWidth >= 1280\n"
  },
  {
    "path": "src/utils/breakpoints.test.js",
    "content": "import { isDesktopSmall } from './breakpoints'\n\ndescribe('breakpoints', () => {\n  describe('isDesktopSmall', () => {\n    test('should return true if window width is greater than or equal to 1280', () => {\n      expect(isDesktopSmall(1280)).toBe(true)\n      expect(isDesktopSmall(1500)).toBe(true)\n    })\n\n    test('should return false if window width is less than 1280', () => {\n      expect(isDesktopSmall(1279)).toBe(false)\n      expect(isDesktopSmall(1000)).toBe(false)\n      expect(isDesktopSmall(0)).toBe(false)\n    })\n  })\n})\n"
  },
  {
    "path": "src/utils/createErrorWithCode.js",
    "content": "/**\n * Creates a formatted error message with an error code prefix\n * @param {string} code - Error code (e.g., from SecurityErrorCodes)\n * @param {string} message - Human-readable error message\n * @returns {string} Formatted error message with code prefix\n */\nexport function createErrorWithCode(code, message) {\n  return `${code}: ${message}`\n}\n"
  },
  {
    "path": "src/utils/createErrorWithCode.test.js",
    "content": "import { createErrorWithCode } from './createErrorWithCode'\n\ndescribe('createErrorWithCode', () => {\n  it('creates error message with code prefix', () => {\n    const result = createErrorWithCode('ErrorCode', 'Something went wrong')\n    expect(result).toBe('ErrorCode: Something went wrong')\n  })\n\n  it('handles empty message', () => {\n    const result = createErrorWithCode('ErrorCode', '')\n    expect(result).toBe('ErrorCode: ')\n  })\n\n  it('handles messages with special characters', () => {\n    const result = createErrorWithCode('ErrorCode', 'Error: $pecial ch@rs!')\n    expect(result).toBe('ErrorCode: Error: $pecial ch@rs!')\n  })\n})\n"
  },
  {
    "path": "src/utils/designVersion.js",
    "content": "import { DESKTOP_DESIGN_VERSION } from '@tetherto/pearpass-lib-constants'\n\nexport const isV2 = () => DESKTOP_DESIGN_VERSION === 2\n"
  },
  {
    "path": "src/utils/devicePreferences.cjs",
    "content": "/**\n * Persistence for main-process device preferences.\n *\n * Stored as JSON at `<storageDir>/device-preferences.json`. Read at\n * main-process startup (sync) and rewritten when a setting changes.\n * Missing/malformed file → everything falls back to DEFAULTS. Adding a new\n * preference means adding a key to DEFAULTS and reading/writing it through\n * this module.\n */\nconst fs = require('fs')\nconst path = require('path')\n\nconst FILE_NAME = 'device-preferences.json'\n\nconst DEFAULTS = {\n  loggingEnabled: false\n}\n\nfunction read(storageDir) {\n  try {\n    const raw = fs.readFileSync(path.join(storageDir, FILE_NAME), 'utf8')\n    const parsed = JSON.parse(raw)\n    return {\n      loggingEnabled: parsed.loggingEnabled === true\n    }\n  } catch {\n    return { ...DEFAULTS }\n  }\n}\n\nfunction write(storageDir, partial) {\n  fs.mkdirSync(storageDir, { recursive: true })\n  const merged = { ...read(storageDir), ...partial }\n  const out = {\n    loggingEnabled: !!merged.loggingEnabled\n  }\n  fs.writeFileSync(\n    path.join(storageDir, FILE_NAME),\n    JSON.stringify(out) + '\\n',\n    'utf8'\n  )\n}\n\nmodule.exports = { read, write }\n"
  },
  {
    "path": "src/utils/devicePreferences.test.js",
    "content": "/* eslint-env jest */\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\nconst { read, write } = require('./devicePreferences.cjs')\n\ndescribe('devicePreferences', () => {\n  let tmpDir\n\n  beforeEach(() => {\n    tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'device-preferences-'))\n  })\n  afterEach(() => {\n    fs.rmSync(tmpDir, { recursive: true, force: true })\n  })\n\n  it('returns defaults when the file is missing', () => {\n    expect(read(tmpDir)).toEqual({ loggingEnabled: false })\n  })\n\n  it('returns defaults on malformed JSON', () => {\n    fs.writeFileSync(\n      path.join(tmpDir, 'device-preferences.json'),\n      'not-json{',\n      'utf8'\n    )\n    expect(read(tmpDir)).toEqual({ loggingEnabled: false })\n  })\n\n  it('writes then reads back loggingEnabled=true', () => {\n    write(tmpDir, { loggingEnabled: true })\n    expect(read(tmpDir)).toEqual({ loggingEnabled: true })\n  })\n\n  it('coerces truthy/falsy values to booleans', () => {\n    write(tmpDir, { loggingEnabled: 'yes' })\n    expect(read(tmpDir)).toEqual({ loggingEnabled: true })\n\n    write(tmpDir, { loggingEnabled: 0 })\n    expect(read(tmpDir)).toEqual({ loggingEnabled: false })\n  })\n\n  it('creates the storage directory if missing', () => {\n    const nested = path.join(tmpDir, 'does', 'not', 'exist')\n    write(nested, { loggingEnabled: true })\n    expect(fs.existsSync(path.join(nested, 'device-preferences.json'))).toBe(\n      true\n    )\n  })\n\n  it('partial write preserves other keys', () => {\n    fs.writeFileSync(\n      path.join(tmpDir, 'device-preferences.json'),\n      JSON.stringify({ loggingEnabled: true }) + '\\n',\n      'utf8'\n    )\n    write(tmpDir, {})\n    expect(read(tmpDir)).toEqual({ loggingEnabled: true })\n  })\n})\n"
  },
  {
    "path": "src/utils/envGetter.js",
    "content": "const isDev = () => process.env.NODE_ENV === 'development'\nconst isProd = () => process.env.NODE_ENV === 'production'\n\nexport { isDev, isProd }\n"
  },
  {
    "path": "src/utils/envGetter.test.js",
    "content": "import { isDev, isProd } from './envGetter'\n\ndescribe('envGetter', () => {\n  const originalNodeEnv = process.env.NODE_ENV\n\n  afterEach(() => {\n    process.env.NODE_ENV = originalNodeEnv\n  })\n\n  it('isDev returns true only when NODE_ENV=development', () => {\n    process.env.NODE_ENV = 'development'\n    expect(isDev()).toBe(true)\n\n    process.env.NODE_ENV = 'production'\n    expect(isDev()).toBe(false)\n\n    process.env.NODE_ENV = 'test'\n    expect(isDev()).toBe(false)\n\n    delete process.env.NODE_ENV\n    expect(isDev()).toBe(false)\n  })\n\n  it('isProd returns true only when NODE_ENV=production', () => {\n    process.env.NODE_ENV = 'production'\n    expect(isProd()).toBe(true)\n\n    process.env.NODE_ENV = 'development'\n    expect(isProd()).toBe(false)\n\n    process.env.NODE_ENV = 'test'\n    expect(isProd()).toBe(false)\n\n    delete process.env.NODE_ENV\n    expect(isProd()).toBe(false)\n  })\n})\n"
  },
  {
    "path": "src/utils/extractDomainName.js",
    "content": "/**\n * @param {string | undefined} url - The website URL.\n * @returns {string|null} The main domain name, or null if invalid.\n */\nexport function extractDomainName(url) {\n  if (!url) return null\n\n  // Remove protocol (http, https, etc.) and any path/query/fragment\n  let domainMatch = url\n    .toLowerCase()\n    .replace(/^https?:\\/\\//, '')\n    .replace(/^www\\./, '')\n    .split(/[/?#]/)[0]\n\n  // Remove port number if present\n  domainMatch = domainMatch.split(':')[0]\n\n  const parts = domainMatch.split('.')\n  if (parts.length < 2) return null\n  // For domains like google.co.uk, take the second-to-last part\n  return parts.length > 2 ? parts[parts.length - 2] : parts[0]\n}\n"
  },
  {
    "path": "src/utils/extractDomainName.test.js",
    "content": "import { extractDomainName } from './extractDomainName'\n\ndescribe('extractDomainName', () => {\n  it('returns null for undefined input', () => {\n    expect(extractDomainName(undefined)).toBeNull()\n  })\n\n  it('returns null for empty string', () => {\n    expect(extractDomainName('')).toBeNull()\n  })\n\n  it('extracts domain from http URL', () => {\n    expect(extractDomainName('http://www.google.com')).toBe('google')\n  })\n\n  it('extracts domain from https URL', () => {\n    expect(extractDomainName('https://www.example.org')).toBe('example')\n  })\n\n  it('extracts domain from URL without www', () => {\n    expect(extractDomainName('https://subdomain.github.io')).toBe('github')\n  })\n\n  it('extracts domain from URL with path and query', () => {\n    expect(extractDomainName('https://www.testsite.com/path?query=1')).toBe(\n      'testsite'\n    )\n  })\n\n  it('extracts domain from URL with fragment', () => {\n    expect(extractDomainName('https://www.testsite.com/#fragment')).toBe(\n      'testsite'\n    )\n  })\n\n  it('extracts domain from URL with multiple subdomains', () => {\n    expect(extractDomainName('https://a.b.c.domain.com')).toBe('domain')\n  })\n\n  it('extracts domain from domain only', () => {\n    expect(extractDomainName('pearpass.com')).toBe('pearpass')\n  })\n\n  it('extracts domain from www only', () => {\n    expect(extractDomainName('www.pearpass.com')).toBe('pearpass')\n  })\n\n  it('returns null for single word input', () => {\n    expect(extractDomainName('localhost')).toBeNull()\n    expect(extractDomainName('test')).toBeNull()\n  })\n\n  it('extracts domain from URL with port', () => {\n    expect(extractDomainName('http://www.example.com:8080')).toBe('example')\n  })\n})\n"
  },
  {
    "path": "src/utils/formatPasskeyDate.js",
    "content": "import { formatDate } from '@tetherto/pear-apps-utils-date'\n\n/**\n * Formats a passkey creation timestamp to \"Created on dd/mm/yy, HH:mm\" format\n * @param {number|string|Date} timestamp - Timestamp in milliseconds or Date object\n * @returns {string|null} Formatted date string or null if timestamp is invalid\n */\nexport const formatPasskeyDate = (timestamp) => {\n  if (!timestamp) return null\n  try {\n    const dateStr = formatDate(timestamp, 'dd-mm-yy', '/')\n    const timeStr = formatDate(timestamp, 'hh-mi', ':')\n    return `Created on ${dateStr}, ${timeStr}`\n  } catch {\n    return null\n  }\n}\n"
  },
  {
    "path": "src/utils/getDeviceName.js",
    "content": "import os from 'os'\n\n/**\n * Returns a string representing the device name, composed of the hostname, platform, and OS release.\n *\n * @returns {string} The device name in the format: \"<hostname> <platform> <release>\".\n */\nexport const getDeviceName = () =>\n  [os.hostname(), os.platform(), os.release()].join(' ')\n"
  },
  {
    "path": "src/utils/getDeviceName.test.js",
    "content": "import os from 'os'\n\nimport { getDeviceName } from './getDeviceName'\n\njest.mock('os')\n\ndescribe('getDeviceName', () => {\n  it('should return the device name in the format \"<hostname> <platform> <release>\"', () => {\n    os.hostname.mockReturnValue('my-host')\n    os.platform.mockReturnValue('darwin')\n    os.release.mockReturnValue('22.5.0')\n\n    const result = getDeviceName()\n    expect(result).toBe('my-host darwin 22.5.0')\n  })\n\n  it('should handle empty strings from os methods', () => {\n    os.hostname.mockReturnValue('')\n    os.platform.mockReturnValue('')\n    os.release.mockReturnValue('')\n\n    const result = getDeviceName()\n    expect(result).toBe('  ')\n  })\n\n  it('should handle special characters in hostname, platform, and release', () => {\n    os.hostname.mockReturnValue('host@123')\n    os.platform.mockReturnValue('win32!')\n    os.release.mockReturnValue('10.0.0#')\n\n    const result = getDeviceName()\n    expect(result).toBe('host@123 win32! 10.0.0#')\n  })\n})\n"
  },
  {
    "path": "src/utils/getFilteredAttachmentsById.js",
    "content": "/**\n * Filters out an attachment from the list of attachments by its `tempId` or `id`.\n *\n * @param {Array<Object>} attachments - The array of attachment objects to filter.\n * @param {Object} attachment - The attachment object to exclude from the result.\n * @param {string} [attachment.tempId] - The temporary ID of the attachment (if available).\n * @param {string|number} [attachment.id] - The permanent ID of the attachment (if available).\n * @returns {Array<Object>} The filtered array of attachments excluding the specified attachment.\n */\nexport const getFilteredAttachmentsById = (attachments, attachment) =>\n  attachments?.filter((a) => {\n    if (attachment.tempId) {\n      return a.tempId !== attachment.tempId\n    }\n    if (attachment.id) {\n      return a.id !== attachment.id\n    }\n    return true\n  }) || []\n"
  },
  {
    "path": "src/utils/getFilteredAttachmentsById.test.js",
    "content": "import { getFilteredAttachmentsById } from './getFilteredAttachmentsById'\n\ndescribe('getFilteredAttachmentsById', () => {\n  const attachments = [\n    { id: 1, tempId: 'abc', name: 'file1' },\n    { id: 2, tempId: 'def', name: 'file2' },\n    { id: 3, tempId: 'ghi', name: 'file3' },\n    { id: 4, name: 'file4' }\n  ]\n\n  it('filters out attachment by tempId', () => {\n    const attachmentToRemove = { tempId: 'def' }\n    const result = getFilteredAttachmentsById(attachments, attachmentToRemove)\n    expect(result).toEqual([\n      { id: 1, tempId: 'abc', name: 'file1' },\n      { id: 3, tempId: 'ghi', name: 'file3' },\n      { id: 4, name: 'file4' }\n    ])\n  })\n\n  it('filters out attachment by id', () => {\n    const attachmentToRemove = { id: 3 }\n    const result = getFilteredAttachmentsById(attachments, attachmentToRemove)\n    expect(result).toEqual([\n      { id: 1, tempId: 'abc', name: 'file1' },\n      { id: 2, tempId: 'def', name: 'file2' },\n      { id: 4, name: 'file4' }\n    ])\n  })\n\n  it('returns original array if neither tempId nor id is provided', () => {\n    const attachmentToRemove = { name: 'file2' }\n    const result = getFilteredAttachmentsById(attachments, attachmentToRemove)\n    expect(result).toEqual(attachments)\n  })\n\n  it('returns empty array if attachments is empty', () => {\n    const attachmentToRemove = { tempId: 'abc' }\n    const result = getFilteredAttachmentsById([], attachmentToRemove)\n    expect(result).toEqual([])\n  })\n\n  it('does not filter if tempId or id does not match any attachment', () => {\n    const attachmentToRemove = { tempId: 'xyz', id: 999 }\n    const result = getFilteredAttachmentsById(attachments, attachmentToRemove)\n    expect(result).toEqual(attachments)\n  })\n})\n"
  },
  {
    "path": "src/utils/getPasswordStrengthInfo.test.ts",
    "content": "import { getPasswordStrength } from './getPasswordStrengthInfo'\nimport { PassType } from '../shared/types'\n\ndescribe('getPasswordStrength', () => {\n  describe('empty values', () => {\n    it('returns null for empty string', () => {\n      expect(getPasswordStrength('')).toBeNull()\n    })\n\n    it('returns null for empty array', () => {\n      expect(getPasswordStrength([])).toBeNull()\n    })\n  })\n\n  describe('password (default)', () => {\n    it('defaults to password type when passType is omitted', () => {\n      expect(getPasswordStrength('Abcdef1!')).not.toBeNull()\n    })\n\n    it('returns safe for a strong password (all 5 rules pass)', () => {\n      const result = getPasswordStrength('Abcdef1!')\n      expect(result?.type).toBe('safe')\n      expect(result?.strengthType).toBe('success')\n      expect(result?.strengthText).toBe('Safe')\n    })\n\n    it('returns weak for a password missing one rule (4/5 rules pass)', () => {\n      // minLength✓ hasLower✓ hasUpper✓ hasNumbers✓ hasSymbols✗\n      const result = getPasswordStrength('Abcdef12')\n      expect(result?.type).toBe('weak')\n      expect(result?.strengthType).toBe('warning')\n      expect(result?.strengthText).toBe('Weak')\n    })\n\n    it('returns vulnerable for a short all-lowercase password (< 4 rules pass)', () => {\n      const result = getPasswordStrength('abc')\n      expect(result?.type).toBe('vulnerable')\n      expect(result?.strengthType).toBe('error')\n      expect(result?.strengthText).toBe('Vulnerable')\n    })\n  })\n\n  describe('passphrase', () => {\n    const safeWords = [\n      'Test1!', 'Word2@', 'Example3#', 'Unique4$',\n      'Safe5%', 'Pass6^', 'Phrase7&', 'Another8*'\n    ]\n\n    it('accepts a string array', () => {\n      const result = getPasswordStrength(safeWords, PassType.PassPhrase)\n      expect(result?.type).toBe('safe')\n      expect(result?.strengthType).toBe('success')\n    })\n\n    it('splits a hyphen-joined string into words before checking', () => {\n      const result = getPasswordStrength(safeWords.join('-'), PassType.PassPhrase)\n      expect(result?.type).toBe('safe')\n      expect(result?.strengthType).toBe('success')\n    })\n\n    it('returns the same result whether value is a string or array', () => {\n      const fromArray = getPasswordStrength(safeWords, PassType.PassPhrase)\n      const fromString = getPasswordStrength(safeWords.join('-'), PassType.PassPhrase)\n      expect(fromArray?.type).toBe(fromString?.type)\n      expect(fromArray?.strengthType).toBe(fromString?.strengthType)\n      expect(fromArray?.strengthText).toBe(fromString?.strengthText)\n    })\n\n    it('returns vulnerable for too few words', () => {\n      const result = getPasswordStrength(['word', 'word'], PassType.PassPhrase)\n      expect(result?.type).toBe('vulnerable')\n    })\n  })\n})\n"
  },
  {
    "path": "src/utils/getPasswordStrengthInfo.ts",
    "content": "import {\n  checkPassphraseStrength,\n  checkPasswordStrength\n} from '@tetherto/pearpass-utils-password-check'\nimport { PassType } from '../shared/types'\n\ntype StrengthResult = {\n  type: string\n  strengthType: string\n  strengthText: string\n}\n\nfunction computeStrengthResult(\n  value: string | string[],\n  passType: PassType.Password | PassType.PassPhrase\n): StrengthResult | null {\n  if (!value?.length) return null\n\n  if (passType === PassType.Password) {\n    return checkPasswordStrength(value as string) as StrengthResult\n  }\n\n  const words = Array.isArray(value) ? value : value.split('-')\n  return checkPassphraseStrength(words) as StrengthResult\n}\n\nexport function getPasswordStrength(\n  value: string | string[],\n  passType: PassType.Password | PassType.PassPhrase = PassType.Password\n) {\n  const result = computeStrengthResult(value, passType)\n  if (!result) return null\n\n  return result\n}\n"
  },
  {
    "path": "src/utils/getRecordSubtitle.test.ts",
    "content": "import { getRecordSubtitle } from './getRecordSubtitle'\n\ndescribe('getRecordSubtitle', () => {\n  it('returns empty string when no matching fields present', () => {\n    expect(getRecordSubtitle({})).toBe('')\n    expect(getRecordSubtitle({ data: {} })).toBe('')\n  })\n\n  it('prefers username over other fields', () => {\n    expect(\n      getRecordSubtitle({\n        data: {\n          username: 'alice',\n          email: 'alice@example.com',\n          name: 'Alice'\n        }\n      })\n    ).toBe('alice')\n  })\n\n  it('falls back through email, name, fullName in order', () => {\n    expect(\n      getRecordSubtitle({\n        data: { email: 'alice@example.com', name: 'Alice', fullName: 'A.' }\n      })\n    ).toBe('alice@example.com')\n    expect(\n      getRecordSubtitle({ data: { name: 'Alice', fullName: 'A.' } })\n    ).toBe('Alice')\n    expect(getRecordSubtitle({ data: { fullName: 'A.' } })).toBe('A.')\n  })\n\n  it('ignores non-string values', () => {\n    expect(\n      getRecordSubtitle({\n        data: { username: 123 as unknown as string, email: 'ok@x.com' }\n      })\n    ).toBe('ok@x.com')\n  })\n})\n"
  },
  {
    "path": "src/utils/getRecordSubtitle.ts",
    "content": "type RecordLike = {\n  data?: Record<string, unknown>\n}\n\nconst firstString = (...values: unknown[]): string => {\n  for (const value of values) {\n    if (typeof value === 'string' && value.length) return value\n  }\n  return ''\n}\n\nexport const getRecordSubtitle = (record: RecordLike): string =>\n  firstString(\n    record.data?.username,\n    record.data?.email,\n    record.data?.name,\n    record.data?.fullName\n  )\n"
  },
  {
    "path": "src/utils/groupRecordsByTimePeriod.test.ts",
    "content": "import {\n  groupRecordsByTimePeriod,\n  type VaultRecord\n} from './groupRecordsByTimePeriod'\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\n\ndescribe('groupRecordsByTimePeriod', () => {\n  const NOW = new Date('2026-04-23T12:00:00Z').getTime()\n\n  beforeEach(() => {\n    jest.useFakeTimers()\n    jest.setSystemTime(NOW)\n  })\n\n  afterEach(() => {\n    jest.useRealTimers()\n  })\n\n  const make = (overrides: Partial<VaultRecord>): VaultRecord => ({\n    id: Math.random().toString(36).slice(2),\n    type: 'login',\n    updatedAt: NOW,\n    createdAt: NOW,\n    ...overrides\n  })\n\n  it('returns empty array for null or empty input', () => {\n    expect(groupRecordsByTimePeriod(null)).toEqual([])\n    expect(groupRecordsByTimePeriod(undefined)).toEqual([])\n    expect(groupRecordsByTimePeriod([])).toEqual([])\n  })\n\n  it('splits Favorites and All Items when sorting by title', () => {\n    const records: VaultRecord[] = [\n      make({ id: 'a', isFavorite: true }),\n      make({ id: 'b' }),\n      make({ id: 'c', isFavorite: true }),\n      make({ id: 'd' })\n    ]\n    const sections = groupRecordsByTimePeriod(records, {\n      key: 'data.title',\n      direction: 'asc'\n    })\n    expect(sections.map((s) => s.key)).toEqual(['favorites', 'all'])\n    expect(sections[0].data.map((r) => r.id)).toEqual(['a', 'c'])\n    expect(sections[1].data.map((r) => r.id)).toEqual(['b', 'd'])\n  })\n\n  it('buckets by time period, placing Favorites first', () => {\n    const records: VaultRecord[] = [\n      make({ id: 'today', updatedAt: NOW - HOUR }),\n      make({ id: 'yesterday', updatedAt: NOW - 1 * DAY - HOUR }),\n      make({ id: 'thisWeek', updatedAt: NOW - 3 * DAY }),\n      make({ id: 'thisMonth', updatedAt: NOW - 15 * DAY }),\n      make({ id: 'older', updatedAt: NOW - 120 * DAY }),\n      make({ id: 'fav', updatedAt: NOW - HOUR, isFavorite: true })\n    ]\n    const sections = groupRecordsByTimePeriod(records, {\n      key: 'updatedAt',\n      direction: 'desc'\n    })\n    expect(sections.map((s) => s.key)).toEqual([\n      'favorites',\n      'today',\n      'yesterday',\n      'thisWeek',\n      'thisMonth',\n      'older'\n    ])\n    expect(sections[0].data.map((r) => r.id)).toEqual(['fav'])\n    expect(sections[1].data.map((r) => r.id)).toEqual(['today'])\n    expect(sections[5].data.map((r) => r.id)).toEqual(['older'])\n  })\n\n  it('reverses time sections when direction is ascending', () => {\n    const records: VaultRecord[] = [\n      make({ id: 'today', updatedAt: NOW - HOUR }),\n      make({ id: 'older', updatedAt: NOW - 120 * DAY })\n    ]\n    const sections = groupRecordsByTimePeriod(records, {\n      key: 'updatedAt',\n      direction: 'asc'\n    })\n    expect(sections.map((s) => s.key)).toEqual(['older', 'today'])\n  })\n\n  it('preserves input order for title sort regardless of direction', () => {\n    const records: VaultRecord[] = [\n      make({ id: 'b' }),\n      make({ id: 'c', isFavorite: true }),\n      make({ id: 'a' })\n    ]\n    const asc = groupRecordsByTimePeriod(records, {\n      key: 'data.title',\n      direction: 'asc'\n    })\n    const desc = groupRecordsByTimePeriod(records, {\n      key: 'data.title',\n      direction: 'desc'\n    })\n    expect(asc).toEqual(desc)\n    expect(asc.map((s) => s.key)).toEqual(['favorites', 'all'])\n    expect(asc[0].data.map((r) => r.id)).toEqual(['c'])\n    expect(asc[1].data.map((r) => r.id)).toEqual(['b', 'a'])\n  })\n\n  it('skips sections with no records', () => {\n    const records: VaultRecord[] = [make({ updatedAt: NOW - HOUR })]\n    const sections = groupRecordsByTimePeriod(records, {\n      key: 'updatedAt',\n      direction: 'desc'\n    })\n    expect(sections.map((s) => s.key)).toEqual(['today'])\n  })\n})\n"
  },
  {
    "path": "src/utils/groupRecordsByTimePeriod.ts",
    "content": "export type VaultRecord = {\n  id: string\n  type: string\n  createdAt?: number\n  updatedAt?: number\n  isFavorite?: boolean\n  hasSecurityAlert?: boolean\n  data?: {\n    title?: string\n    username?: string\n    email?: string\n    name?: string\n    fullName?: string\n    websites?: string[]\n    [key: string]: unknown\n  }\n  [key: string]: unknown\n}\n\nexport type RecordSort = {\n  key?: string\n  direction?: 'asc' | 'desc'\n}\n\nexport type RecordSection = {\n  title: string\n  key: string\n  isFavorites?: boolean\n  data: VaultRecord[]\n}\n\nconst getDateField = (key?: string): 'createdAt' | 'updatedAt' =>\n  key === 'createdAt' ? 'createdAt' : 'updatedAt'\n\nexport const groupRecordsByTimePeriod = (\n  records: VaultRecord[] | undefined | null,\n  sort?: RecordSort\n): RecordSection[] => {\n  if (!records?.length) return []\n\n  if (sort?.key === 'data.title') {\n    const favorites = records.filter((r) => r.isFavorite)\n    const rest = records.filter((r) => !r.isFavorite)\n    const sections: RecordSection[] = []\n    if (favorites.length) {\n      sections.push({\n        title: 'Favorites',\n        key: 'favorites',\n        isFavorites: true,\n        data: favorites\n      })\n    }\n    if (rest.length) {\n      sections.push({ title: 'All Items', key: 'all', data: rest })\n    }\n    return sections\n  }\n\n  const dateField = getDateField(sort?.key)\n  const isAsc = sort?.direction === 'asc'\n\n  const now = new Date()\n  const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n  const yesterdayStart = new Date(todayStart)\n  yesterdayStart.setDate(yesterdayStart.getDate() - 1)\n  const weekStart = new Date(todayStart)\n  weekStart.setDate(weekStart.getDate() - 7)\n  const monthStart = new Date(now.getFullYear(), now.getMonth(), 1)\n\n  const favorites: VaultRecord[] = []\n  const today: VaultRecord[] = []\n  const yesterday: VaultRecord[] = []\n  const thisWeek: VaultRecord[] = []\n  const thisMonth: VaultRecord[] = []\n  const older: VaultRecord[] = []\n\n  const favoriteIds = new Set<string>()\n\n  for (const record of records) {\n    if (record.isFavorite) {\n      favorites.push(record)\n      favoriteIds.add(record.id)\n    }\n  }\n\n  for (const record of records) {\n    if (favoriteIds.has(record.id)) continue\n\n    const timestamp = record[dateField] ?? record.updatedAt ?? record.createdAt ?? 0\n    const date = new Date(timestamp as number)\n\n    if (date >= todayStart) {\n      today.push(record)\n    } else if (date >= yesterdayStart) {\n      yesterday.push(record)\n    } else if (date >= weekStart) {\n      thisWeek.push(record)\n    } else if (date >= monthStart) {\n      thisMonth.push(record)\n    } else {\n      older.push(record)\n    }\n  }\n\n  const timeSections: RecordSection[] = []\n\n  if (today.length)\n    timeSections.push({ title: 'Today', key: 'today', data: today })\n  if (yesterday.length)\n    timeSections.push({ title: 'Yesterday', key: 'yesterday', data: yesterday })\n  if (thisWeek.length)\n    timeSections.push({ title: 'This Week', key: 'thisWeek', data: thisWeek })\n  if (thisMonth.length)\n    timeSections.push({\n      title: 'This Month',\n      key: 'thisMonth',\n      data: thisMonth\n    })\n  if (older.length)\n    timeSections.push({ title: 'Older', key: 'older', data: older })\n\n  if (isAsc) timeSections.reverse()\n\n  const sections: RecordSection[] = []\n\n  if (favorites.length) {\n    sections.push({\n      title: 'Favorites',\n      key: 'favorites',\n      isFavorites: true,\n      data: favorites\n    })\n  }\n\n  return sections.concat(timeSections)\n}\n"
  },
  {
    "path": "src/utils/handleFileSelect.js",
    "content": "import { generateUniqueId } from '@tetherto/pear-apps-utils-generate-unique-id'\n\nimport { logger } from './logger'\nimport { readFileContent } from '../pages/SettingsView/ImportTab/utils/readFileContent'\n\n/**\n * @param {Object} params\n * @param {FileList} params.files\n * @param {string} params.fieldName\n * @param {(string, { buffer: Uint8Array, name: string, tempId: string }[]) => void} params.setValue\n * @param {Object} params.values\n *\n * @returns {void}\n */\nexport const handleFileSelect = ({ files, fieldName, setValue, values }) => {\n  const file = files[0]\n  const filename = file.name\n  readFileContent(file, { as: 'buffer' })\n    .then(async (arrayBuffer) => {\n      const uint8Buffer = new Uint8Array(arrayBuffer)\n\n      setValue(fieldName, [\n        ...values[fieldName],\n        { buffer: uint8Buffer, name: filename, tempId: generateUniqueId() }\n      ])\n    })\n    .catch((e) => {\n      logger.error('useGetMultipleFiles', 'Error reading file:', e)\n    })\n}\n"
  },
  {
    "path": "src/utils/handleFileSelect.test.js",
    "content": "import { handleFileSelect } from './handleFileSelect'\nimport { logger } from './logger'\nimport { readFileContent } from '../pages/SettingsView/ImportTab/utils/readFileContent'\n\njest.mock('./logger', () => ({\n  logger: { error: jest.fn() }\n}))\njest.mock('@tetherto/pear-apps-utils-generate-unique-id', () => ({\n  generateUniqueId: jest.fn(() => 'unique-id')\n}))\n\njest.mock('../pages/SettingsView/ImportTab/utils/readFileContent', () => ({\n  readFileContent: jest.fn()\n}))\n\ndescribe('handleFileSelect', () => {\n  const setValue = jest.fn()\n  const fieldName = 'files'\n  const values = {\n    files: [{ buffer: new Uint8Array([1, 2]), name: 'old.txt' }]\n  }\n  const file = new File(['test'], 'test.txt')\n  const files = [file]\n\n  beforeEach(() => {\n    jest.clearAllMocks()\n  })\n\n  it('should read file and call setValue with new buffer and filename', async () => {\n    const arrayBuffer = new Uint8Array([10, 20, 30]).buffer\n    readFileContent.mockResolvedValueOnce(arrayBuffer)\n\n    await handleFileSelect({ files, fieldName, setValue, values })\n\n    await Promise.resolve()\n\n    expect(readFileContent).toHaveBeenCalledWith(file, { as: 'buffer' })\n    expect(setValue).toHaveBeenCalledWith(fieldName, [\n      ...values[fieldName],\n      {\n        buffer: new Uint8Array(arrayBuffer),\n        name: 'test.txt',\n        tempId: 'unique-id'\n      }\n    ])\n  })\n\n  it('should log error if readFileContent rejects', async () => {\n    const error = new Error('Failed to read')\n    readFileContent.mockRejectedValueOnce(error)\n\n    await handleFileSelect({ files, fieldName, setValue, values })\n\n    await Promise.resolve()\n\n    expect(logger.error).toHaveBeenCalledWith(\n      'useGetMultipleFiles',\n      'Error reading file:',\n      error\n    )\n    expect(setValue).not.toHaveBeenCalled()\n  })\n})\n"
  },
  {
    "path": "src/utils/isFavorite.js",
    "content": "/**\n * Favorites folder identifier used across the app.\n */\nexport const FAVORITES_FOLDER_ID = 'favorites'\n\n/**\n *\n * @param {string} folder\n * @returns  {boolean}\n * */\nexport const isFavorite = (folder) => folder === FAVORITES_FOLDER_ID\n"
  },
  {
    "path": "src/utils/isFavorite.test.js",
    "content": "import { FAVORITES_FOLDER_ID, isFavorite } from './isFavorite'\n\ndescribe('isFavorite', () => {\n  it('should return true when folder is FAVORITES_FOLDER_ID', () => {\n    expect(isFavorite(FAVORITES_FOLDER_ID)).toBe(true)\n  })\n\n  it('should return false when folder is not FAVORITES_FOLDER_ID', () => {\n    expect(isFavorite('documents')).toBe(false)\n    expect(isFavorite('work')).toBe(false)\n    expect(isFavorite('')).toBe(false)\n    expect(isFavorite(null)).toBe(false)\n    expect(isFavorite(undefined)).toBe(false)\n  })\n})\n"
  },
  {
    "path": "src/utils/isOnline.js",
    "content": "export const isOnline = () => navigator.onLine\n"
  },
  {
    "path": "src/utils/isPasswordChangeReminderDisabled.js",
    "content": "import { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\n\nexport const isPasswordChangeReminderDisabled = () =>\n  localStorage.getItem(LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED) ===\n  'false'\n"
  },
  {
    "path": "src/utils/isPasswordChangeReminderDisabled.test.js",
    "content": "import { isPasswordChangeReminderDisabled } from './isPasswordChangeReminderDisabled'\nimport { LOCAL_STORAGE_KEYS } from '../constants/localStorage'\n\nconst createLocalStorageMock = () => {\n  const store = {}\n  return {\n    getItem: (key) => (key in store ? store[key] : null),\n    setItem: (key, value) => {\n      store[key] = String(value)\n    }\n  }\n}\n\ndescribe('isPasswordChangeReminderDisabled', () => {\n  beforeEach(() => {\n    Object.defineProperty(global, 'localStorage', {\n      value: createLocalStorageMock(),\n      configurable: true\n    })\n  })\n\n  it('returns false when key is missing', () => {\n    expect(isPasswordChangeReminderDisabled()).toBe(false)\n  })\n\n  it('returns true when value is string \"false\" (disabled)', () => {\n    localStorage.setItem(\n      LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED,\n      'false'\n    )\n    expect(isPasswordChangeReminderDisabled()).toBe(true)\n  })\n\n  it('returns false for any other value', () => {\n    localStorage.setItem(\n      LOCAL_STORAGE_KEYS.PASSWORD_CHANGE_REMINDER_ENABLED,\n      'yes'\n    )\n    expect(isPasswordChangeReminderDisabled()).toBe(false)\n  })\n})\n"
  },
  {
    "path": "src/utils/logHelper.cjs",
    "content": "/* eslint-disable no-console */\n/**\n * Main-process logging utilities.\n *\n * Exports:\n * - getLogPaths(storageDir) — single source of truth for the log file layout\n *   under <storageDir>/logs/.\n * - removeLogFiles(storageDir) — delete main.log and core.log.\n * - createWorkletLogConfigurer(deps) — factory returning a function that\n *   turns on the vault worklet's file logger via setLogOptions.\n * - createMainProcessLogger(options) — factory for the main-process logger\n *   that writes to <userData>/logs/main.log and console.\n *\n * File output for the main-process logger is opt-in: callers call setLogPath()\n * to enable and clearLogPath() to disable mid-session. The caller\n * (electron/main.cjs) gates writes on the build flavor, the --enable-logging\n * flag, and the persisted user toggle.\n * Console output is gated on debugMode so packaged builds stay quiet by default.\n */\nconst fs = require('fs')\nconst path = require('path')\nconst { inspect } = require('util')\n\nconst LEVELS = { debug: 0, info: 1, warn: 2, error: 3 }\nconst MAX_LOG_FILE_SIZE = 100 * 1024 * 1024\nconst TRUNCATION_KEEP_RATIO = 0.5\nconst TRUNCATION_CHECK_INTERVAL = 100\n\nfunction getLogPaths(storageDir) {\n  const logsDir = path.join(storageDir, 'logs')\n  return {\n    logsDir,\n    corePath: path.join(logsDir, 'core.log'),\n    mainPath: path.join(logsDir, 'main.log')\n  }\n}\n\nfunction removeLogFiles(storageDir) {\n  const { corePath, mainPath } = getLogPaths(storageDir)\n  for (const p of [corePath, mainPath]) {\n    try {\n      fs.unlinkSync(p)\n    } catch {\n      // ignore — file likely doesn't exist\n    }\n  }\n}\n\nfunction createWorkletLogConfigurer({\n  getStorageDir,\n  getVaultClient,\n  isPackaged,\n  workletLogLevel,\n  logger\n}) {\n  return async function enableWorkletFileLogging() {\n    const vaultClient = getVaultClient()\n    if (!vaultClient) return\n    const { logsDir, corePath } = getLogPaths(getStorageDir())\n    try {\n      fs.mkdirSync(logsDir, { recursive: true })\n      await vaultClient.setLogOptions({\n        logFile: corePath,\n        logLevel: workletLogLevel,\n        dev: !isPackaged\n      })\n    } catch (err) {\n      logger.warn(\n        'MAIN',\n        'setLogOptions failed; worklet logs will use defaults',\n        err\n      )\n    }\n  }\n}\n\nfunction createMainProcessLogger(options = {}) {\n  const { app, debugMode = false, logLevel = 'info' } = options\n\n  const isPackaged = !!(app && app.isPackaged)\n  const levelThreshold = LEVELS[logLevel] ?? LEVELS.info\n  const isConsoleLogEnabled = debugMode || !isPackaged\n\n  let logFilePath = null\n  let writeCount = 0\n\n  function serialize(args) {\n    return args\n      .map((arg) => {\n        if (arg instanceof Error) {\n          return `${arg.message}${arg.stack ? '\\n' + arg.stack : ''}`\n        }\n        if (typeof arg === 'object' && arg !== null) {\n          return inspect(arg, { depth: 4, breakLength: 120 })\n        }\n        return String(arg)\n      })\n      .join(' ')\n  }\n\n  function rotateIfNeeded() {\n    if (!logFilePath) return\n    try {\n      const { size } = fs.statSync(logFilePath)\n      if (size < MAX_LOG_FILE_SIZE) return\n      const text = fs.readFileSync(logFilePath, 'utf8')\n      const cutPoint = Math.floor(text.length * (1 - TRUNCATION_KEEP_RATIO))\n      const newlineIndex = text.indexOf('\\n', cutPoint)\n      if (newlineIndex === -1) return\n      const tmpPath = logFilePath + '.tmp'\n      fs.writeFileSync(tmpPath, text.slice(newlineIndex + 1))\n      fs.renameSync(tmpPath, logFilePath)\n    } catch {\n      // best-effort rotation — never crash main process on log issues\n    }\n  }\n\n  function writeToFile(level, ...args) {\n    if (!logFilePath) return\n    try {\n      const line = `${new Date().toISOString()} [${level}] ${serialize(args)}\\n`\n      fs.appendFileSync(logFilePath, line)\n      writeCount++\n      if (writeCount >= TRUNCATION_CHECK_INTERVAL) {\n        writeCount = 0\n        rotateIfNeeded()\n      }\n    } catch (err) {\n      console.error('[MAIN] Failed to write to log file:', err)\n    }\n  }\n\n  return {\n    setLogPath(userDataDir) {\n      const dir = path.join(userDataDir, 'logs')\n      try {\n        fs.mkdirSync(dir, { recursive: true })\n        logFilePath = path.join(dir, 'main.log')\n      } catch (err) {\n        if (isConsoleLogEnabled)\n          console.error('[MAIN] Failed to create logs dir:', err)\n        return\n      }\n      writeToFile('INFO', 'Main process log file:', logFilePath)\n      if (isConsoleLogEnabled) console.info('[MAIN] Log file:', logFilePath)\n    },\n\n    clearLogPath() {\n      logFilePath = null\n    },\n\n    getLogFilePath() {\n      return logFilePath\n    },\n\n    log(...args) {\n      if (LEVELS.info < levelThreshold) return\n      if (isConsoleLogEnabled) console.info('[MAIN]', ...args)\n      writeToFile('LOG', ...args)\n    },\n    info(...args) {\n      if (LEVELS.info < levelThreshold) return\n      if (isConsoleLogEnabled) console.info('[MAIN][INFO]', ...args)\n      writeToFile('INFO', ...args)\n    },\n    debug(...args) {\n      if (LEVELS.debug < levelThreshold) return\n      if (isConsoleLogEnabled) console.info('[MAIN][DEBUG]', ...args)\n      writeToFile('DEBUG', ...args)\n    },\n    warn(...args) {\n      if (LEVELS.warn < levelThreshold) return\n      if (isConsoleLogEnabled) console.warn('[MAIN][WARN]', ...args)\n      writeToFile('WARN', ...args)\n    },\n    error(...args) {\n      if (LEVELS.error < levelThreshold) return\n      if (isConsoleLogEnabled) console.error('[MAIN][ERROR]', ...args)\n      writeToFile('ERROR', ...args)\n    }\n  }\n}\n\n/**\n * Bootstrap helper: collects nightly/--enable-logging detection, picks the\n * worklet log level, builds the main-process logger, and wires the worklet\n * log configurer. main.cjs holds onto the returned values instead of\n * recreating this constellation by hand.\n *\n * Mutable runtime state (`loggingActive`) stays with the caller — only the\n * stable boot wiring lives here.\n */\nfunction setupLogging({ app, pkg, debugMode, getStorageDir, getVaultClient }) {\n  const isNightlyBuild = pkg.productName === 'PearPass-nightly'\n  const loggingForced =\n    process.argv.includes('--enable-logging') || isNightlyBuild\n  const workletLogLevel = 'debug'\n  const logger = createMainProcessLogger({\n    app,\n    debugMode,\n    logLevel: workletLogLevel\n  })\n  const enableWorkletFileLogging = createWorkletLogConfigurer({\n    getStorageDir,\n    getVaultClient,\n    isPackaged: app.isPackaged,\n    workletLogLevel,\n    logger\n  })\n  return { logger, loggingForced, enableWorkletFileLogging }\n}\n\nmodule.exports = {\n  getLogPaths,\n  removeLogFiles,\n  createWorkletLogConfigurer,\n  createMainProcessLogger,\n  setupLogging\n}\n"
  },
  {
    "path": "src/utils/logHelper.test.js",
    "content": "/* eslint-env jest */\n\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\nconst { createMainProcessLogger } = require('./logHelper.cjs')\n\ndescribe('createMainProcessLogger', () => {\n  let tmpDir\n  let originalConsole\n  let infoMock\n  let warnMock\n  let errorMock\n\n  beforeEach(() => {\n    tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'logger-test-'))\n    originalConsole = global.console\n    infoMock = jest.fn()\n    warnMock = jest.fn()\n    errorMock = jest.fn()\n    global.console = {\n      ...originalConsole,\n      info: infoMock,\n      warn: warnMock,\n      error: errorMock\n    }\n  })\n\n  afterEach(() => {\n    global.console = originalConsole\n    fs.rmSync(tmpDir, { recursive: true, force: true })\n  })\n\n  describe('packaged builds', () => {\n    it('writes to file even when debugMode=false (always-on file)', () => {\n      const logger = createMainProcessLogger({\n        app: { isPackaged: true },\n        debugMode: false\n      })\n      logger.setLogPath(tmpDir)\n      logger.error('boom')\n\n      const main = fs.readFileSync(\n        path.join(tmpDir, 'logs', 'main.log'),\n        'utf8'\n      )\n      expect(main).toContain('boom')\n      expect(main).toContain('[ERROR]')\n    })\n\n    it('keeps console silent when debugMode=false', () => {\n      const logger = createMainProcessLogger({\n        app: { isPackaged: true },\n        debugMode: false\n      })\n      logger.setLogPath(tmpDir)\n      logger.info('hidden-from-console')\n      logger.warn('also-hidden')\n\n      expect(infoMock).not.toHaveBeenCalled()\n      expect(warnMock).not.toHaveBeenCalled()\n    })\n\n    it('writes to file AND console when debugMode=true', () => {\n      const logger = createMainProcessLogger({\n        app: { isPackaged: true },\n        debugMode: true\n      })\n      logger.setLogPath(tmpDir)\n      logger.info('hello world')\n\n      const main = fs.readFileSync(\n        path.join(tmpDir, 'logs', 'main.log'),\n        'utf8'\n      )\n      expect(main).toContain('hello world')\n      expect(infoMock).toHaveBeenCalledWith('[MAIN][INFO]', 'hello world')\n    })\n  })\n\n  describe('development (not packaged)', () => {\n    it('writes to file AND console once setLogPath is called', () => {\n      const logger = createMainProcessLogger({\n        app: { isPackaged: false },\n        debugMode: true\n      })\n      logger.setLogPath(tmpDir)\n      logger.info('dev-info')\n      logger.error('dev-err')\n\n      const main = fs.readFileSync(\n        path.join(tmpDir, 'logs', 'main.log'),\n        'utf8'\n      )\n      expect(main).toMatch(/\\[INFO\\] dev-info/)\n      expect(main).toMatch(/\\[ERROR\\] dev-err/)\n      expect(infoMock).toHaveBeenCalledWith('[MAIN][INFO]', 'dev-info')\n      expect(errorMock).toHaveBeenCalledWith('[MAIN][ERROR]', 'dev-err')\n    })\n  })\n\n  describe('level filter', () => {\n    it('blocks levels below threshold from both file and console', () => {\n      const logger = createMainProcessLogger({\n        app: { isPackaged: true },\n        debugMode: true,\n        logLevel: 'warn'\n      })\n      logger.setLogPath(tmpDir)\n      logger.info('hidden')\n      logger.warn('shown')\n\n      const main = fs.readFileSync(\n        path.join(tmpDir, 'logs', 'main.log'),\n        'utf8'\n      )\n      expect(main).not.toContain('hidden')\n      expect(main).toContain('shown')\n      expect(infoMock).not.toHaveBeenCalledWith('[MAIN][INFO]', 'hidden')\n      expect(warnMock).toHaveBeenCalledWith('[MAIN][WARN]', 'shown')\n    })\n  })\n\n  describe('clearLogPath / getLogFilePath', () => {\n    it('clearLogPath stops file writes; getLogFilePath returns the active path', () => {\n      const logger = createMainProcessLogger({\n        app: { isPackaged: true },\n        debugMode: false\n      })\n      logger.setLogPath(tmpDir)\n      const filePath = logger.getLogFilePath()\n      expect(filePath).toBe(path.join(tmpDir, 'logs', 'main.log'))\n\n      logger.error('before')\n      logger.clearLogPath()\n      expect(logger.getLogFilePath()).toBeNull()\n\n      logger.error('after')\n      const main = fs.readFileSync(filePath, 'utf8')\n      expect(main).toContain('before')\n      expect(main).not.toContain('after')\n    })\n  })\n\n  describe('serialize', () => {\n    it('formats Error with message and stack', () => {\n      const logger = createMainProcessLogger({\n        app: { isPackaged: true },\n        debugMode: false\n      })\n      logger.setLogPath(tmpDir)\n      const err = new Error('kaboom')\n      logger.error(err)\n\n      const main = fs.readFileSync(\n        path.join(tmpDir, 'logs', 'main.log'),\n        'utf8'\n      )\n      expect(main).toContain('kaboom')\n      expect(main).toMatch(/at .*logHelper/)\n    })\n  })\n})\n"
  },
  {
    "path": "src/utils/logger.js",
    "content": "/** @typedef {import('pear-interface')} */\n\nclass Logger {\n  constructor({ debugMode = false } = {}) {\n    this.debugMode = debugMode\n  }\n\n  /**\n   * Log a message with component and level\n   * @param {'INFO'|'ERROR'|'DEBUG'|'WARN'} level - Log level\n   * @param {string} component - Component name\n   * @param {any[]} message - Log message\n   */\n  _print(level, component, message) {\n    if (!this.debugMode) return\n\n    const timestamp = new Date().toISOString()\n    const formatted = `${timestamp} [${level}] [${component}]`\n\n    if (level === 'ERROR') {\n      // eslint-disable-next-line no-console\n      console.error(formatted, message)\n      return\n    }\n\n    // eslint-disable-next-line no-console\n    console.log(formatted, message)\n  }\n\n  /**\n   * Log a message with component and level\n   * @param {string} component - Component name\n   * @param {any[]} message - Log message\n   */\n  log(component, ...args) {\n    this._print('LOG', component, ...args)\n  }\n\n  /**\n   * Log a message with component and level\n   * @param {string} component - Component name\n   * @param {any[]} message - Log message\n   */\n  debug(component, ...args) {\n    this._print('DEBUG', component, ...args)\n  }\n\n  /**\n   * Log a message with component and level\n   * @param {string} component - Component name\n   * @param {any[]} message - Log message\n   */\n  info(component, ...args) {\n    this._print('INFO', component, ...args)\n  }\n\n  /**\n   * Log a message with component and level\n   * @param {string} component - Component name\n   * @param {any[]} message - Log message\n   */\n  warn(component, ...args) {\n    this._print('WARN', component, ...args)\n  }\n\n  /**\n   * Log a message with component and level\n   * @param {string} component - Component name\n   * @param {any[]} message - Log message\n   */\n  error(component, ...args) {\n    this._print('ERROR', component, ...args)\n  }\n}\n\n// const isProduction =\n//   (typeof Pear !== 'undefined' && !!Pear.config?.key) ||\n//   (typeof process !== 'undefined' &&\n//     process.env &&\n//     process.env.NODE_ENV === 'production')\n\nexport const logger = new Logger({\n  debugMode: false\n})\n"
  },
  {
    "path": "src/utils/logger.test.js",
    "content": "import { logger } from './logger'\n\nglobalThis.Pear = {\n  config: { tier: 'dev' }\n}\n\ndescribe('Logger.log', () => {\n  let originalDebugMode\n  let consoleLogSpy\n\n  beforeEach(() => {\n    // Save and set debugMode to true for testing\n    originalDebugMode = logger.debugMode\n    logger.debugMode = true\n    consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => {})\n  })\n\n  afterEach(() => {\n    logger.debugMode = originalDebugMode\n    consoleLogSpy.mockRestore()\n  })\n\n  it('should call console.log with correct format and message', () => {\n    const component = 'TestComponent'\n    const message = 'Hello World'\n    logger.log(component, message)\n    expect(consoleLogSpy).toHaveBeenCalledTimes(1)\n    const [formatted, msg] = consoleLogSpy.mock.calls[0]\n    expect(formatted).toMatch(/\\d{4}-\\d{2}-\\d{2}T.* \\[LOG\\] \\[TestComponent\\]/)\n    expect(msg).toBe(message)\n  })\n\n  it('should not log if debugMode is false', () => {\n    logger.debugMode = false\n    logger.log('TestComponent', 'Should not log')\n    expect(consoleLogSpy).not.toHaveBeenCalled()\n  })\n\n  it('should pass multiple arguments as message array', () => {\n    logger.log('MultiArg', 'one', 'two', 'three')\n    const [, msg] = consoleLogSpy.mock.calls[0]\n    expect(msg).toEqual('one')\n  })\n})\n"
  },
  {
    "path": "src/utils/nativeMessagingSetup.js",
    "content": "import child_process from 'child_process'\nimport fs from 'fs/promises'\nimport os from 'os'\nimport path from 'path'\n\nimport {\n  MANIFEST_NAME,\n  CHROMIUM_EXTENSION_ID,\n  FIREFOX_EXTENSION_ID,\n  FIREFOX_NIGHTLY_EXTENSION_ID\n} from '@tetherto/pearpass-lib-constants'\n\nimport { logger } from './logger'\nimport flatpakPaths from '../../electron/flatpak-paths.cjs'\n\nconst { isFlatpakRuntime, isSnapRuntime, getHostHome, getSnapRealHome } =\n  flatpakPaths\n\nconst FLATPAK_APP_ID = 'com.pears.pass'\nconst FLATPAK_NATIVE_HOST_COMMAND = 'pearpass-native-host'\n\nconst NATIVE_BRIDGE_PROCESS_IDENTIFIER = 'pearpass-lib-native-messaging-bridge'\n\nconst promisify =\n  (fn) =>\n  (...args) =>\n    new Promise((resolve, reject) => {\n      fn(...args, (err, res) => (err ? reject(err) : resolve(res)))\n    })\nconst execAsync = promisify(child_process.exec)\n\n/**\n * Returns platform-specific paths and file names for the native host executable (wrapper)\n * @param {string} userDataPath - Electron userData directory\n * @returns {{ platform: string, executableFileName: string, executablePath: string }}\n */\nexport const getNativeHostExecutableInfo = (userDataPath) => {\n  const platform = os.platform()\n  let executableFileName\n\n  switch (platform) {\n    case 'darwin':\n      executableFileName = 'pearpass-native-host.sh'\n      break\n    case 'win32':\n      executableFileName = 'pearpass-native-host.cmd'\n      break\n    case 'linux':\n      executableFileName = 'pearpass-native-host.sh'\n      break\n    default:\n      throw new Error(`Unsupported platform: ${platform}`)\n  }\n\n  const storageDir = path.join(userDataPath, 'native-messaging')\n  const executablePath = path.join(storageDir, executableFileName)\n\n  return {\n    platform,\n    executableFileName,\n    executablePath\n  }\n}\n\n/**\n * Generates a wrapper executable (shell script on Unix, cmd file on Windows)\n * that uses the Electron binary (with ELECTRON_RUN_AS_NODE=1) to run the\n * native messaging bridge script.\n * @param {string} executablePath - Path to write the wrapper\n * @param {string} electronExecPath - Path to the Electron executable\n * @param {string} bridgeScriptPath - Path to the bridge entry point (index.js)\n * @returns {Promise<{success: boolean, message: string}>}\n */\nexport const generateNativeHostExecutable = async (\n  executablePath,\n  electronExecPath,\n  bridgeScriptPath\n) => {\n  try {\n    const platform = os.platform()\n    let content\n\n    if (platform === 'linux' && isFlatpakRuntime()) {\n      // Chrome runs outside the flatpak sandbox, so the wrapper must\n      // re-enter the sandbox via `flatpak run` before execing the bridge.\n      // The /app/* electronExecPath and bridgeScriptPath are only valid\n      // inside the sandbox and are resolved by the in-sandbox command.\n      //\n      // Diagnostics MUST go to stderr: Chrome's native-messaging protocol\n      // treats anything on stdout as a framed message and will drop the port\n      // (\"Native host has exited\") if we write plain text there.\n      content = `#!/bin/bash\n# PearPass Native Messaging Host (flatpak)\n# Chrome launches this on the host; re-enter the sandbox to run the bridge.\nset -u\n\nFLATPAK_BIN=\"$(command -v flatpak 2>/dev/null || true)\"\nif [ -z \"\\${FLATPAK_BIN}\" ]; then\n  for candidate in /usr/bin/flatpak /usr/local/bin/flatpak /var/lib/flatpak/exports/bin/flatpak; do\n    if [ -x \"\\${candidate}\" ]; then\n      FLATPAK_BIN=\"\\${candidate}\"\n      break\n    fi\n  done\nfi\nif [ -z \"\\${FLATPAK_BIN}\" ]; then\n  echo \"pearpass-native-host: flatpak binary not found on PATH\" >&2\n  exit 127\nfi\n\nexec \"\\${FLATPAK_BIN}\" run --command=${FLATPAK_NATIVE_HOST_COMMAND} ${FLATPAK_APP_ID} \"$@\"\n`\n    } else if (platform === 'darwin' || platform === 'linux') {\n      content = `#!/bin/bash\n# PearPass Native Messaging Host\n# Runs the native messaging bridge via Electron's embedded Node.js\n\nexport ELECTRON_RUN_AS_NODE=1\nexec \"${electronExecPath}\" \"${bridgeScriptPath}\"\n`\n    } else if (platform === 'win32') {\n      content = `@echo off\nREM PearPass Native Messaging Host\nREM Runs the native messaging bridge via Electron's embedded Node.js\n\nset ELECTRON_RUN_AS_NODE=1\n\"${electronExecPath}\" \"${bridgeScriptPath}\"\n`\n    } else {\n      throw new Error(`Unsupported platform: ${platform}`)\n    }\n\n    await fs.writeFile(executablePath, content, 'utf8')\n    if (platform !== 'win32') {\n      await fs.chmod(executablePath, 0o755)\n    }\n\n    logger.info(\n      'NATIVE-MESSAGING-SETUP',\n      `Generated native messaging executable at: ${executablePath}`\n    )\n\n    return {\n      success: true,\n      message: 'Native messaging executable generated successfully'\n    }\n  } catch (error) {\n    logger.error(\n      'NATIVE-MESSAGING-SETUP',\n      `Failed to generate executable: ${error.message}`\n    )\n    return {\n      success: false,\n      message: `Failed to generate executable: ${error.message}`\n    }\n  }\n}\n\n/**\n * Returns platform-specific browser entries for native messaging manifest installation.\n * Each entry includes a browserDir for detecting whether the browser is installed.\n * @returns {{ browsers: Array<{name: string, browserDir: string|null, manifestPath: string, registryKey?: string}> }}\n */\nexport const getNativeMessagingLocations = () => {\n  const platform = os.platform()\n  // Under flatpak/snap, os.homedir() is the sandbox home; host browsers\n  // read manifests from the real home.\n  let home\n  if (platform === 'linux' && isFlatpakRuntime()) {\n    home = getHostHome()\n  } else if (platform === 'linux' && isSnapRuntime()) {\n    home = getSnapRealHome()\n  } else {\n    home = os.homedir()\n  }\n  const manifestFile = `${MANIFEST_NAME}.json`\n  const browsers = []\n\n  switch (platform) {\n    case 'darwin':\n      browsers.push(\n        {\n          name: 'Google Chrome',\n          browserDir: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Google',\n            'Chrome'\n          ),\n          manifestPath: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Google',\n            'Chrome',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Microsoft Edge',\n          browserDir: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Microsoft Edge'\n          ),\n          manifestPath: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Microsoft Edge',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Chromium',\n          browserDir: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Chromium'\n          ),\n          manifestPath: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Chromium',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Brave',\n          browserDir: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'BraveSoftware',\n            'Brave-Browser'\n          ),\n          manifestPath: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'BraveSoftware',\n            'Brave-Browser',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Firefox',\n          isFirefox: true,\n          browserDir: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Firefox'\n          ),\n          manifestPath: path.join(\n            home,\n            'Library',\n            'Application Support',\n            'Mozilla',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        }\n      )\n      break\n\n    case 'win32': {\n      const nativeMessagingDir = path.join(\n        home,\n        'AppData',\n        'Local',\n        'PearPass',\n        'NativeMessaging'\n      )\n      const manifestPath = path.join(nativeMessagingDir, manifestFile)\n      const firefoxManifestPath = path.join(\n        nativeMessagingDir,\n        `${MANIFEST_NAME}.firefox.json`\n      )\n      browsers.push(\n        {\n          name: 'Google Chrome',\n          browserDir: null,\n          manifestPath,\n          registryKey: `HKCU\\\\Software\\\\Google\\\\Chrome\\\\NativeMessagingHosts\\\\${MANIFEST_NAME}`\n        },\n        {\n          name: 'Microsoft Edge',\n          browserDir: null,\n          manifestPath,\n          registryKey: `HKCU\\\\Software\\\\Microsoft\\\\Edge\\\\NativeMessagingHosts\\\\${MANIFEST_NAME}`\n        },\n        {\n          name: 'Chromium',\n          browserDir: null,\n          manifestPath,\n          registryKey: `HKCU\\\\Software\\\\Chromium\\\\NativeMessagingHosts\\\\${MANIFEST_NAME}`\n        },\n        {\n          name: 'Brave',\n          browserDir: null,\n          manifestPath,\n          registryKey: `HKCU\\\\Software\\\\BraveSoftware\\\\Brave-Browser\\\\NativeMessagingHosts\\\\${MANIFEST_NAME}`\n        },\n        {\n          name: 'Firefox',\n          isFirefox: true,\n          browserDir: null,\n          manifestPath: firefoxManifestPath,\n          registryKey: `HKCU\\\\Software\\\\Mozilla\\\\NativeMessagingHosts\\\\${MANIFEST_NAME}`\n        }\n      )\n      break\n    }\n\n    case 'linux':\n      // Always write on Linux. Snap/Flatpak/AppImage installs use\n      // different paths, so checking the standard ones would wrongly\n      // report the browser as missing.\n      browsers.push(\n        {\n          name: 'Google Chrome',\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            '.config',\n            'google-chrome',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Chromium',\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            '.config',\n            'chromium',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Microsoft Edge',\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            '.config',\n            'microsoft-edge',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Chromium (Snap)',\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            'snap',\n            'chromium',\n            'common',\n            'chromium',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Brave',\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            '.config',\n            'BraveSoftware',\n            'Brave-Browser',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Brave (Snap)',\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            'snap',\n            'brave',\n            'current',\n            '.config',\n            'BraveSoftware',\n            'Brave-Browser',\n            'NativeMessagingHosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Firefox',\n          isFirefox: true,\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            '.mozilla',\n            'native-messaging-hosts',\n            manifestFile\n          )\n        },\n        {\n          name: 'Firefox (Snap)',\n          isFirefox: true,\n          browserDir: null,\n          manifestPath: path.join(\n            home,\n            'snap',\n            'firefox',\n            'common',\n            '.mozilla',\n            'native-messaging-hosts',\n            manifestFile\n          )\n        }\n      )\n      break\n\n    default:\n      throw new Error(`Unsupported platform: ${platform}`)\n  }\n\n  return { browsers }\n}\n\n/**\n * Removes native messaging manifest files and registry entries\n * This prevents the browser from respawning the host when integration is disabled.\n * @returns {Promise<{success: boolean, message: string}>}\n */\nexport const cleanupNativeMessaging = async () => {\n  try {\n    const { browsers } = getNativeMessagingLocations()\n\n    let removedCount = 0\n    const removedPaths = new Set()\n\n    for (const browser of browsers) {\n      // Windows shares one manifest path across different browsers\n      if (!removedPaths.has(browser.manifestPath)) {\n        removedPaths.add(browser.manifestPath)\n        try {\n          await fs.unlink(browser.manifestPath)\n          removedCount++\n          logger.info(\n            'NATIVE-MESSAGING-CLEANUP',\n            `Removed manifest file: ${browser.manifestPath}`\n          )\n        } catch (err) {\n          if (err.code !== 'ENOENT') {\n            logger.error(\n              'NATIVE-MESSAGING-CLEANUP',\n              `Failed to remove manifest at ${browser.manifestPath}: ${err.message}`\n            )\n          }\n        }\n      }\n\n      if (browser.registryKey) {\n        const cmd = `reg delete \"${browser.registryKey}\" /f`\n        try {\n          await execAsync(cmd)\n          logger.info(\n            'NATIVE-MESSAGING-CLEANUP',\n            `Removed registry key: ${browser.registryKey}`\n          )\n        } catch (err) {\n          logger.error(\n            'NATIVE-MESSAGING-CLEANUP',\n            `Failed to remove registry key '${browser.registryKey}': ${err.message}`\n          )\n        }\n      }\n    }\n\n    const message =\n      removedCount > 0\n        ? `Native messaging cleanup completed. Removed ${removedCount} manifest file(s).`\n        : 'No native messaging manifest files found to remove.'\n\n    return {\n      success: true,\n      message\n    }\n  } catch (error) {\n    return {\n      success: false,\n      message: `Failed to cleanup native messaging: ${error.message}`\n    }\n  }\n}\n\n/**\n * Kills running native messaging host processes so the browser can respawn them\n * and re-read the manifest with the updated allowed_origins.\n * Safe to call on macOS/Linux/Windows; no-op if process is not found.\n * @returns {Promise<void>}\n */\nexport const killNativeMessagingHostProcesses = async () => {\n  try {\n    const platform = os.platform()\n\n    if (platform === 'win32') {\n      // Find processes with the bridge module in their command line and force-kill them\n      try {\n        const psCmd = `powershell -NoProfile -Command \"Get-WmiObject Win32_Process | Where-Object {\\$_.CommandLine -like '*${NATIVE_BRIDGE_PROCESS_IDENTIFIER}*'} | ForEach-Object { taskkill /PID \\$_.ProcessId /F }\"`\n        await execAsync(psCmd)\n        logger.info(\n          'NATIVE-MESSAGING-KILL',\n          'Windows: Killed native messaging host processes'\n        )\n      } catch (error) {\n        logger.info(\n          'NATIVE-MESSAGING-KILL',\n          `Windows: No native messaging processes found to kill: ${error.message}`\n        )\n      }\n    } else {\n      // macOS/Linux: the wrapper uses 'exec' so the bridge module path appears in the process args\n      try {\n        await execAsync(`pkill -f \"${NATIVE_BRIDGE_PROCESS_IDENTIFIER}\"`)\n        logger.info(\n          'NATIVE-MESSAGING-KILL',\n          'Killed native messaging host process'\n        )\n      } catch (error) {\n        logger.info(\n          'NATIVE-MESSAGING-KILL',\n          `No native messaging host process found to kill: ${error.message}`\n        )\n      }\n    }\n  } catch (error) {\n    logger.error(\n      'NATIVE-MESSAGING-KILL',\n      `Failed to kill host processes: ${error.message}`\n    )\n  }\n}\n\n/**\n * Sets up native messaging for a given extension ID\n * @returns {Promise<{success: boolean, message: string, manifestPath?: string}>}\n */\nexport const setupNativeMessaging = async ({\n  userDataPath,\n  execPath,\n  bridgePath\n}) => {\n  try {\n    const { platform, executablePath } =\n      getNativeHostExecutableInfo(userDataPath)\n\n    // Host browsers and other snaps can't reach our user-data dir, so\n    // the manifest points at /snap/bin/<snap>.<app> directly (no wrapper).\n    // SNAP_NAME-driven so a snap rename can't silently break installs.\n    const useSnapDirect = platform === 'linux' && isSnapRuntime()\n    const manifestExecPath = useSnapDirect\n      ? `/snap/bin/${process.env.SNAP_NAME}.native-host`\n      : executablePath\n\n    if (!useSnapDirect) {\n      await fs.mkdir(path.dirname(executablePath), { recursive: true })\n      const execResult = await generateNativeHostExecutable(\n        executablePath,\n        execPath,\n        bridgePath\n      )\n      if (!execResult.success) {\n        throw new Error(execResult.message)\n      }\n    }\n\n    const extensionId =\n      localStorage.getItem('CHROMIUM_EXTENSION_ID') || CHROMIUM_EXTENSION_ID\n\n    // Create Chromium native messaging manifest\n    const chromiumManifest = {\n      name: MANIFEST_NAME,\n      description: 'PearPass Native Messaging Host',\n      path: manifestExecPath,\n      type: 'stdio',\n      allowed_origins: [`chrome-extension://${extensionId}/`]\n    }\n\n    // Create Firefox native messaging manifest\n    const firefoxManifest = {\n      name: MANIFEST_NAME,\n      description: 'PearPass Native Messaging Host',\n      path: manifestExecPath,\n      type: 'stdio',\n      allowed_extensions: [FIREFOX_EXTENSION_ID, FIREFOX_NIGHTLY_EXTENSION_ID]\n    }\n\n    const { browsers } = getNativeMessagingLocations()\n    const installedPaths = []\n\n    for (const browser of browsers) {\n      // Null browserDir (Windows, all Linux) means always write.\n      if (browser.browserDir) {\n        try {\n          await fs.access(browser.browserDir)\n        } catch {\n          logger.info(\n            'NATIVE-MESSAGING-SETUP',\n            `Skipping ${browser.name}: browser directory not found at ${browser.browserDir}`\n          )\n          continue\n        }\n      }\n\n      try {\n        const manifest = browser.isFirefox ? firefoxManifest : chromiumManifest\n        await fs.mkdir(path.dirname(browser.manifestPath), { recursive: true })\n        await fs.writeFile(\n          browser.manifestPath,\n          JSON.stringify(manifest, null, 2)\n        )\n\n        if (platform !== 'win32') {\n          await fs.chmod(browser.manifestPath, 0o644)\n        }\n\n        installedPaths.push(browser.manifestPath)\n        logger.info(\n          'NATIVE-MESSAGING-SETUP',\n          `Installed manifest for ${browser.name} at ${browser.manifestPath}`\n        )\n      } catch (err) {\n        logger.error(\n          'NATIVE-MESSAGING-SETUP',\n          `Failed to write manifest for ${browser.name} at ${browser.manifestPath}: ${err.message}`\n        )\n      }\n\n      if (browser.registryKey) {\n        const cmd = `reg add \"${browser.registryKey}\" /ve /d \"${browser.manifestPath}\" /f`\n        try {\n          await execAsync(cmd)\n        } catch (err) {\n          logger.error(\n            'NATIVE-MESSAGING-SETUP',\n            `Failed to write registry key '${browser.registryKey}': ${err.message}`\n          )\n        }\n      }\n    }\n\n    return {\n      success: true,\n      message: 'Native messaging host installed successfully',\n      manifestPath: installedPaths.join(', ')\n    }\n  } catch (error) {\n    return {\n      success: false,\n      message: `Failed to setup native messaging: ${error.message}`\n    }\n  }\n}\n"
  },
  {
    "path": "src/utils/nativeMessagingSetup.test.js",
    "content": "import child_process from 'child_process'\nimport fs from 'fs/promises'\nimport os from 'os'\nimport path from 'path'\n\nimport {\n  setupNativeMessaging,\n  getNativeHostExecutableInfo,\n  generateNativeHostExecutable,\n  getNativeMessagingLocations,\n  cleanupNativeMessaging,\n  killNativeMessagingHostProcesses\n} from './nativeMessagingSetup'\n\n// Mock dependencies\njest.mock('@tetherto/pearpass-lib-constants', () => ({\n  MANIFEST_NAME: 'com.pearpass.native_messaging',\n  CHROMIUM_EXTENSION_ID: 'mock-extension-id',\n  FIREFOX_EXTENSION_ID: 'pearpass@example.com'\n}))\njest.mock('os')\njest.mock('fs/promises')\njest.mock('path')\njest.mock('child_process')\njest.mock('./logger', () => ({\n  logger: {\n    log: jest.fn(),\n    info: jest.fn(),\n    error: jest.fn()\n  }\n}))\n\nconst MOCK_USER_DATA_PATH = '/mock/userData'\nconst MOCK_EXEC_PATH = '/mock/electron/PearPass'\nconst MOCK_BRIDGE_PATH = '/mock/dist/native-messaging-bridge.bundle.cjs'\n\n// Helper to reset mocks\nconst resetMocks = () => {\n  jest.clearAllMocks()\n  os.platform.mockReturnValue('linux')\n  os.homedir.mockReturnValue('/home/testuser')\n  os.arch.mockReturnValue('x64')\n  path.join.mockImplementation((...args) => args.join('/'))\n  path.dirname.mockImplementation((p) => p.split('/').slice(0, -1).join('/'))\n  fs.mkdir.mockResolvedValue()\n  fs.writeFile.mockResolvedValue()\n  fs.chmod.mockResolvedValue()\n  fs.unlink.mockResolvedValue()\n  fs.access.mockResolvedValue()\n}\n\ndescribe('getNativeHostExecutableInfo', () => {\n  beforeEach(resetMocks)\n\n  it('should return correct info for macOS', () => {\n    os.platform.mockReturnValue('darwin')\n    const info = getNativeHostExecutableInfo(MOCK_USER_DATA_PATH)\n    expect(info.platform).toBe('darwin')\n    expect(info.executableFileName).toBe('pearpass-native-host.sh')\n    expect(info.executablePath).toContain('native-messaging')\n  })\n\n  it('should return correct info for Linux', () => {\n    os.platform.mockReturnValue('linux')\n    const info = getNativeHostExecutableInfo(MOCK_USER_DATA_PATH)\n    expect(info.platform).toBe('linux')\n    expect(info.executableFileName).toBe('pearpass-native-host.sh')\n    expect(info.executablePath).toContain('native-messaging')\n  })\n\n  it('should return correct info for Windows', () => {\n    os.platform.mockReturnValue('win32')\n    const info = getNativeHostExecutableInfo(MOCK_USER_DATA_PATH)\n    expect(info.platform).toBe('win32')\n    expect(info.executableFileName).toBe('pearpass-native-host.cmd')\n    expect(info.executablePath).toContain('native-messaging')\n  })\n\n  it('should throw error for unsupported platform', () => {\n    os.platform.mockReturnValue('freebsd')\n    expect(() => getNativeHostExecutableInfo(MOCK_USER_DATA_PATH)).toThrow(\n      'Unsupported platform: freebsd'\n    )\n  })\n})\n\ndescribe('generateNativeHostExecutable', () => {\n  beforeEach(resetMocks)\n\n  it('should generate executable for macOS', async () => {\n    os.platform.mockReturnValue('darwin')\n    const result = await generateNativeHostExecutable(\n      '/mock/path/pearpass-native-host.sh',\n      MOCK_EXEC_PATH,\n      MOCK_BRIDGE_PATH\n    )\n    expect(result.success).toBe(true)\n    expect(fs.writeFile).toHaveBeenCalled()\n    expect(fs.chmod).toHaveBeenCalledWith(\n      '/mock/path/pearpass-native-host.sh',\n      0o755\n    )\n    const writeCall = fs.writeFile.mock.calls[0]\n    expect(writeCall[1]).toContain('#!/bin/bash')\n    expect(writeCall[1]).toContain('ELECTRON_RUN_AS_NODE=1')\n    expect(writeCall[1]).toContain(MOCK_EXEC_PATH)\n    expect(writeCall[1]).toContain(MOCK_BRIDGE_PATH)\n  })\n\n  it('should generate executable for Linux', async () => {\n    os.platform.mockReturnValue('linux')\n    const result = await generateNativeHostExecutable(\n      '/mock/path/pearpass-native-host.sh',\n      MOCK_EXEC_PATH,\n      MOCK_BRIDGE_PATH\n    )\n    expect(result.success).toBe(true)\n    expect(fs.writeFile).toHaveBeenCalled()\n    expect(fs.chmod).toHaveBeenCalledWith(\n      '/mock/path/pearpass-native-host.sh',\n      0o755\n    )\n    const writeCall = fs.writeFile.mock.calls[0]\n    expect(writeCall[1]).toContain('#!/bin/bash')\n    expect(writeCall[1]).toContain('ELECTRON_RUN_AS_NODE=1')\n    expect(writeCall[1]).toContain(MOCK_EXEC_PATH)\n  })\n\n  it('should generate executable for Windows', async () => {\n    os.platform.mockReturnValue('win32')\n    const result = await generateNativeHostExecutable(\n      'C:/mock/path/pearpass-native-host.cmd',\n      MOCK_EXEC_PATH,\n      MOCK_BRIDGE_PATH\n    )\n    expect(result.success).toBe(true)\n    expect(fs.writeFile).toHaveBeenCalled()\n    expect(fs.chmod).not.toHaveBeenCalled()\n    const writeCall = fs.writeFile.mock.calls[0]\n    expect(writeCall[1]).toContain('@echo off')\n    expect(writeCall[1]).toContain('ELECTRON_RUN_AS_NODE=1')\n    expect(writeCall[1]).toContain(MOCK_EXEC_PATH)\n  })\n\n  it('should handle write errors', async () => {\n    fs.writeFile.mockRejectedValueOnce(new Error('write failed'))\n    const result = await generateNativeHostExecutable(\n      '/mock/path/script.sh',\n      MOCK_EXEC_PATH,\n      MOCK_BRIDGE_PATH\n    )\n    expect(result.success).toBe(false)\n    expect(result.message).toContain('Failed to generate executable')\n  })\n\n  it('should throw error for unsupported platform', async () => {\n    os.platform.mockReturnValue('aix')\n    const result = await generateNativeHostExecutable(\n      '/mock/path/script.sh',\n      MOCK_EXEC_PATH,\n      MOCK_BRIDGE_PATH\n    )\n    expect(result.success).toBe(false)\n    expect(result.message).toContain('Unsupported platform')\n  })\n})\n\ndescribe('getNativeMessagingLocations', () => {\n  beforeEach(resetMocks)\n\n  it('should return correct browser entries for macOS', () => {\n    os.platform.mockReturnValue('darwin')\n    const { browsers } = getNativeMessagingLocations()\n    expect(browsers).toHaveLength(5)\n    expect(browsers[0].name).toBe('Google Chrome')\n    expect(browsers[0].manifestPath).toContain('Google/Chrome')\n    expect(browsers[0].browserDir).toContain('Google/Chrome')\n    expect(browsers[1].name).toBe('Microsoft Edge')\n    expect(browsers[1].manifestPath).toContain('Microsoft Edge')\n    expect(browsers[2].name).toBe('Chromium')\n    expect(browsers[2].manifestPath).toContain('Chromium')\n    expect(browsers[3].name).toBe('Brave')\n    expect(browsers[3].manifestPath).toContain('BraveSoftware/Brave-Browser')\n    expect(browsers[4].name).toBe('Firefox')\n    expect(browsers[4].manifestPath).toContain('Mozilla')\n  })\n\n  it('should return correct browser entries for Linux including snap', () => {\n    os.platform.mockReturnValue('linux')\n    const { browsers } = getNativeMessagingLocations()\n    expect(browsers).toHaveLength(8)\n    expect(browsers[0].name).toBe('Google Chrome')\n    expect(browsers[0].manifestPath).toContain('google-chrome')\n    expect(browsers[0].browserDir).toBeNull()\n    expect(browsers[1].name).toBe('Chromium')\n    expect(browsers[1].manifestPath).toContain('.config/chromium')\n    expect(browsers[2].name).toBe('Microsoft Edge')\n    expect(browsers[2].manifestPath).toContain('microsoft-edge')\n    expect(browsers[3].name).toBe('Chromium (Snap)')\n    expect(browsers[3].manifestPath).toContain('snap/chromium')\n    expect(browsers[3].browserDir).toBeNull()\n    expect(browsers[4].name).toBe('Brave')\n    expect(browsers[4].manifestPath).toContain('BraveSoftware/Brave-Browser')\n    expect(browsers[5].name).toBe('Brave (Snap)')\n    expect(browsers[5].manifestPath).toContain('snap/brave/current')\n    expect(browsers[6].name).toBe('Firefox')\n    expect(browsers[6].manifestPath).toContain(\n      '.mozilla/native-messaging-hosts'\n    )\n    expect(browsers[7].name).toBe('Firefox (Snap)')\n    expect(browsers[7].manifestPath).toContain(\n      'snap/firefox/common/.mozilla/native-messaging-hosts'\n    )\n    expect(browsers[7].browserDir).toBeNull()\n  })\n\n  it('should return correct browser entries with registry keys for Windows', () => {\n    os.platform.mockReturnValue('win32')\n    const { browsers } = getNativeMessagingLocations()\n    expect(browsers).toHaveLength(5)\n    expect(browsers[0].browserDir).toBeNull()\n    expect(browsers[0].manifestPath).toContain('PearPass/NativeMessaging')\n    expect(browsers[0].registryKey).toContain('Google\\\\Chrome')\n    expect(browsers[1].registryKey).toContain('Microsoft\\\\Edge')\n    expect(browsers[2].registryKey).toContain('Chromium')\n    expect(browsers[3].registryKey).toContain('BraveSoftware\\\\Brave-Browser')\n    expect(browsers[4].registryKey).toContain('Mozilla\\\\NativeMessagingHosts')\n  })\n\n  it('should throw error for unsupported platform', () => {\n    os.platform.mockReturnValue('solaris')\n    expect(() => getNativeMessagingLocations()).toThrow(\n      'Unsupported platform: solaris'\n    )\n  })\n})\n\ndescribe('cleanupNativeMessaging', () => {\n  beforeEach(resetMocks)\n\n  it('should remove manifest files on Linux', async () => {\n    os.platform.mockReturnValue('linux')\n    const result = await cleanupNativeMessaging()\n    expect(result.success).toBe(true)\n    expect(result.message).toContain('Removed 8 manifest file')\n    expect(fs.unlink).toHaveBeenCalledTimes(8)\n  })\n\n  it('should remove manifest files on macOS', async () => {\n    os.platform.mockReturnValue('darwin')\n    const result = await cleanupNativeMessaging()\n    expect(result.success).toBe(true)\n    expect(result.message).toContain('Removed 5 manifest file')\n    expect(fs.unlink).toHaveBeenCalledTimes(5)\n  })\n\n  it('should remove manifest files and registry keys on Windows', async () => {\n    os.platform.mockReturnValue('win32')\n    const execMock = jest.fn((cmd, cb) => cb(null, ''))\n    child_process.exec.mockImplementation(execMock)\n\n    const result = await cleanupNativeMessaging()\n    expect(result.success).toBe(true)\n    expect(result.message).toContain('Removed 2 manifest file')\n    expect(fs.unlink).toHaveBeenCalledTimes(2)\n    expect(execMock).toHaveBeenCalledTimes(5)\n  })\n\n  it('should handle ENOENT errors gracefully', async () => {\n    const enoentError = new Error('file not found')\n    enoentError.code = 'ENOENT'\n    fs.unlink.mockRejectedValue(enoentError)\n\n    const result = await cleanupNativeMessaging()\n    expect(result.success).toBe(true)\n    expect(result.message).toContain('No native messaging manifest files found')\n  })\n\n  it('should handle non-ENOENT errors', async () => {\n    const permissionError = new Error('permission denied')\n    permissionError.code = 'EACCES'\n    fs.unlink.mockRejectedValueOnce(permissionError)\n\n    const result = await cleanupNativeMessaging()\n    expect(result.success).toBe(true)\n  })\n\n  it('should handle general errors', async () => {\n    os.platform.mockImplementation(() => {\n      throw new Error('platform error')\n    })\n\n    const result = await cleanupNativeMessaging()\n    expect(result.success).toBe(false)\n    expect(result.message).toContain('Failed to cleanup native messaging')\n  })\n})\n\ndescribe('killNativeMessagingHostProcesses', () => {\n  beforeEach(resetMocks)\n\n  it('should kill processes on Linux', async () => {\n    os.platform.mockReturnValue('linux')\n    const execMock = jest.fn((cmd, cb) => cb(null, ''))\n    child_process.exec.mockImplementation(execMock)\n\n    await killNativeMessagingHostProcesses()\n    expect(execMock).toHaveBeenCalledTimes(1)\n    const cmd = execMock.mock.calls[0][0]\n    expect(cmd).toContain('pkill -f')\n    expect(cmd).toContain('pearpass-lib-native-messaging-bridge')\n  })\n\n  it('should kill processes on macOS', async () => {\n    os.platform.mockReturnValue('darwin')\n    const execMock = jest.fn((cmd, cb) => cb(null, ''))\n    child_process.exec.mockImplementation(execMock)\n\n    await killNativeMessagingHostProcesses()\n    expect(execMock).toHaveBeenCalledTimes(1)\n    const cmd = execMock.mock.calls[0][0]\n    expect(cmd).toContain('pkill -f')\n  })\n\n  it('should kill processes on Windows', async () => {\n    os.platform.mockReturnValue('win32')\n    const execMock = jest.fn((cmd, cb) => cb(null, ''))\n    child_process.exec.mockImplementation(execMock)\n\n    await killNativeMessagingHostProcesses()\n    expect(execMock).toHaveBeenCalledTimes(1)\n    const cmd = execMock.mock.calls[0][0]\n    expect(cmd).toContain('powershell')\n    expect(cmd).toContain('taskkill')\n  })\n\n  it('should handle no processes found on Unix', async () => {\n    os.platform.mockReturnValue('linux')\n    const execMock = jest.fn((cmd, cb) => cb(new Error('no process found')))\n    child_process.exec.mockImplementation(execMock)\n\n    await killNativeMessagingHostProcesses()\n    expect(execMock).toHaveBeenCalled()\n  })\n\n  it('should handle no processes found on Windows', async () => {\n    os.platform.mockReturnValue('win32')\n    const execMock = jest.fn((cmd, cb) => cb(new Error('no process found')))\n    child_process.exec.mockImplementation(execMock)\n\n    await killNativeMessagingHostProcesses()\n    expect(execMock).toHaveBeenCalled()\n  })\n\n  it('should handle errors gracefully', async () => {\n    os.platform.mockImplementation(() => {\n      throw new Error('unexpected error')\n    })\n\n    await expect(killNativeMessagingHostProcesses()).resolves.not.toThrow()\n  })\n})\n\ndescribe('setupNativeMessaging', () => {\n  beforeEach(resetMocks)\n\n  it('should succeed on linux and write manifest files', async () => {\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(true)\n    expect(result.message).toMatch(\n      /Native messaging host installed successfully/\n    )\n    expect(fs.mkdir).toHaveBeenCalled()\n    expect(fs.writeFile).toHaveBeenCalled()\n    expect(fs.chmod).toHaveBeenCalled()\n  })\n\n  it('should succeed on macOS and write manifest files', async () => {\n    os.platform.mockReturnValue('darwin')\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(true)\n    expect(result.message).toMatch(\n      /Native messaging host installed successfully/\n    )\n    expect(fs.mkdir).toHaveBeenCalled()\n    expect(fs.writeFile).toHaveBeenCalled()\n    expect(fs.chmod).toHaveBeenCalled()\n  })\n\n  it('should handle unsupported platforms', async () => {\n    os.platform.mockReturnValue('unknown')\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(false)\n    expect(result.message).toMatch(/Unsupported platform/)\n  })\n\n  it('should handle manifest write errors gracefully', async () => {\n    fs.writeFile.mockRejectedValueOnce(new Error('write failed'))\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(false)\n    expect(result.message).toMatch(/Failed to setup native messaging/)\n  })\n\n  it('should handle script creation errors', async () => {\n    fs.writeFile.mockRejectedValueOnce(new Error('script write failed'))\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(false)\n    expect(result.message).toMatch(/Failed to setup native messaging/)\n  })\n\n  it('should setup registry keys on win32', async () => {\n    os.platform.mockReturnValue('win32')\n    os.homedir.mockReturnValue('C:/Users/testuser')\n    const execMock = jest.fn((cmd, cb) => cb(null, ''))\n    child_process.exec.mockImplementation(execMock)\n\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(true)\n    expect(result.message).toMatch(\n      /Native messaging host installed successfully/\n    )\n    expect(execMock).toHaveBeenCalledTimes(5)\n  })\n\n  it('should continue on partial manifest write failures', async () => {\n    // First writeFile call is for the executable wrapper, then one per browser\n    fs.writeFile\n      .mockResolvedValueOnce() // executable\n      .mockResolvedValueOnce() // first browser\n      .mockRejectedValueOnce(new Error('write failed')) // second browser fails\n      .mockResolvedValueOnce() // third browser\n\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(true)\n  })\n\n  it('should skip browsers whose directory does not exist', async () => {\n    os.platform.mockReturnValue('linux')\n\n    const result = await setupNativeMessaging({\n      userDataPath: MOCK_USER_DATA_PATH,\n      execPath: MOCK_EXEC_PATH,\n      bridgePath: MOCK_BRIDGE_PATH\n    })\n    expect(result.success).toBe(true)\n    // Linux installs always write: 1 executable + 8 browser manifests.\n    expect(fs.writeFile).toHaveBeenCalledTimes(9)\n  })\n\n  it('under snap, skips the wrapper and points manifests at /snap/bin/<name>.native-host', async () => {\n    os.platform.mockReturnValue('linux')\n    const prevSnapName = process.env.SNAP_NAME\n    const prevSnapRealHome = process.env.SNAP_REAL_HOME\n    process.env.SNAP_NAME = 'pearpass'\n    process.env.SNAP_REAL_HOME = '/home/testuser'\n    try {\n      const result = await setupNativeMessaging({\n        userDataPath: MOCK_USER_DATA_PATH,\n        execPath: MOCK_EXEC_PATH,\n        bridgePath: MOCK_BRIDGE_PATH\n      })\n      expect(result.success).toBe(true)\n      // 8 browser manifests, no wrapper executable.\n      expect(fs.writeFile).toHaveBeenCalledTimes(8)\n      // Every chmod is the manifest 0o644; no wrapper 0o755.\n      for (const [, mode] of fs.chmod.mock.calls) {\n        expect(mode).toBe(0o644)\n      }\n      // Every manifest's path field is the snapd-managed entry.\n      for (const [, contents] of fs.writeFile.mock.calls) {\n        const manifest = JSON.parse(contents)\n        expect(manifest.path).toBe('/snap/bin/pearpass.native-host')\n      }\n    } finally {\n      if (prevSnapName === undefined) delete process.env.SNAP_NAME\n      else process.env.SNAP_NAME = prevSnapName\n      if (prevSnapRealHome === undefined) delete process.env.SNAP_REAL_HOME\n      else process.env.SNAP_REAL_HOME = prevSnapRealHome\n    }\n  })\n})\n"
  },
  {
    "path": "src/utils/sortByName.js",
    "content": "/**\n * Sorts an array of objects alphabetically by their name property.\n * Uses case-insensitive comparison with locale support.\n *\n * @template T\n * @param {T[]} items - Array of objects with a name property\n * @returns {T[]} New sorted array (does not mutate original)\n *\n **/\n\nexport const sortByName = (items) => {\n  if (!items || !Array.isArray(items)) {\n    return []\n  }\n\n  return [...items].sort((a, b) =>\n    a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\n  )\n}\n"
  },
  {
    "path": "src/utils/sortByName.test.js",
    "content": "import { sortByName } from './sortByName'\n\ndescribe('sortByName', () => {\n  it('sorts items alphabetically by name', () => {\n    const items = [{ name: 'Charlie' }, { name: 'Alpha' }, { name: 'Beta' }]\n    const result = sortByName(items)\n    expect(result.map((i) => i.name)).toEqual(['Alpha', 'Beta', 'Charlie'])\n  })\n\n  it('handles case-insensitive sorting', () => {\n    const items = [{ name: 'beta' }, { name: 'Alpha' }, { name: 'CHARLIE' }]\n    const result = sortByName(items)\n    expect(result.map((i) => i.name)).toEqual(['Alpha', 'beta', 'CHARLIE'])\n  })\n\n  it('returns empty array for null/undefined input', () => {\n    expect(sortByName(null)).toEqual([])\n    expect(sortByName(undefined)).toEqual([])\n  })\n\n  it('does not mutate original array', () => {\n    const original = [{ name: 'B' }, { name: 'A' }]\n    const result = sortByName(original)\n    expect(original[0].name).toBe('B')\n    expect(result[0].name).toBe('A')\n  })\n\n  it('returns empty array for empty input', () => {\n    expect(sortByName([])).toEqual([])\n  })\n\n  it('handles single item array', () => {\n    const items = [{ name: 'Single' }]\n    const result = sortByName(items)\n    expect(result).toEqual([{ name: 'Single' }])\n  })\n})\n"
  },
  {
    "path": "src/utils/toSentenceCase.js",
    "content": "/**\n * @param { string } string\n * @returns { string }\n */\nexport const toSentenceCase = (string) => {\n  if (!string) {\n    return string\n  }\n\n  return string.charAt(0).toUpperCase() + string.slice(1)\n}\n"
  },
  {
    "path": "src/utils/toSentenceCase.test.js",
    "content": "import { toSentenceCase } from './toSentenceCase'\n\ndescribe('toSentenceCase', () => {\n  test('should capitalize the first letter of a string', () => {\n    expect(toSentenceCase('hello world')).toBe('Hello world')\n    expect(toSentenceCase('test')).toBe('Test')\n  })\n\n  test('should return the same string if already capitalized', () => {\n    expect(toSentenceCase('Hello')).toBe('Hello')\n    expect(toSentenceCase('Test string')).toBe('Test string')\n  })\n\n  test('should handle empty strings', () => {\n    expect(toSentenceCase('')).toBe('')\n  })\n\n  test('should handle null and undefined', () => {\n    expect(toSentenceCase(null)).toBe(null)\n    expect(toSentenceCase(undefined)).toBe(undefined)\n  })\n\n  test('should handle single character strings', () => {\n    expect(toSentenceCase('a')).toBe('A')\n    expect(toSentenceCase('z')).toBe('Z')\n  })\n\n  test('should handle strings with numbers and special characters', () => {\n    expect(toSentenceCase('123abc')).toBe('123abc')\n    expect(toSentenceCase('!hello')).toBe('!hello')\n  })\n})\n"
  },
  {
    "path": "src/utils/vaultCreated.js",
    "content": "import { useLingui } from '@lingui/react'\nimport { formatDate } from '@tetherto/pear-apps-utils-date'\n\n/**\n * @param {string|Date} vaultCreatedDate\n * @returns { string }\n */\nexport function vaultCreatedFormat(vaultCreatedDate) {\n  const { i18n } = useLingui()\n\n  if (vaultCreatedDate) {\n    return (\n      i18n._('Created') + ' ' + formatDate(vaultCreatedDate, 'dd-mm-yyyy', '/')\n    )\n  }\n\n  return ''\n}\n"
  },
  {
    "path": "src/utils/vaultCreated.test.js",
    "content": "jest.mock('@lingui/react', () => ({\n  useLingui: () => ({\n    i18n: {\n      _: (key) => key\n    }\n  })\n}))\n\njest.mock('@tetherto/pear-apps-utils-date', () => ({\n  formatDate: () => 'formatted-date'\n}))\n\nimport { vaultCreatedFormat } from './vaultCreated'\n\ndescribe('vaultCreatedFormat', () => {\n  it('should return formatted date string when valid date is provided', () => {\n    const date = new Date('2024-03-20')\n    const result = vaultCreatedFormat(date)\n    expect(result).toBe('Created formatted-date')\n  })\n\n  it('should return empty string when no date is provided', () => {\n    const result = vaultCreatedFormat(null)\n    expect(result).toBe('')\n  })\n\n  it('should return empty string when undefined is provided', () => {\n    const result = vaultCreatedFormat(undefined)\n    expect(result).toBe('')\n  })\n\n  it('should handle string date input', () => {\n    const date = '2024-03-20'\n    const result = vaultCreatedFormat(date)\n    expect(result).toBe('Created formatted-date')\n  })\n})\n"
  },
  {
    "path": "src/utils/withAlpha.test.js",
    "content": "import { withAlpha } from './withAlpha'\n\ndescribe('withAlpha', () => {\n  it('appends alpha byte to a 6-digit hex color', () => {\n    expect(withAlpha('#15180E', 0)).toBe('#15180E00')\n    expect(withAlpha('#15180E', 1)).toBe('#15180Eff')\n    expect(withAlpha('#15180E', 0.5)).toBe('#15180E80')\n  })\n\n  it('clamps alpha into [0, 1]', () => {\n    expect(withAlpha('#15180E', -1)).toBe('#15180E00')\n    expect(withAlpha('#15180E', 2)).toBe('#15180Eff')\n  })\n\n  it('throws on a missing or malformed hex (e.g. unset light-theme token)', () => {\n    expect(() => withAlpha('', 0)).toThrow(/expected #RRGGBB/)\n    expect(() => withAlpha('#abc', 0)).toThrow(/expected #RRGGBB/)\n    expect(() => withAlpha('rgb(0,0,0)', 0)).toThrow(/expected #RRGGBB/)\n  })\n})\n"
  },
  {
    "path": "src/utils/withAlpha.ts",
    "content": "const HEX_COLOR = /^#([0-9a-fA-F]{6})$/\n\nexport const withAlpha = (hex: string, alpha: number): string => {\n  if (!HEX_COLOR.test(hex)) {\n    throw new Error(\n      `withAlpha: expected #RRGGBB hex color, got \"${hex}\". ` +\n        'Check that the theme token is defined for the current theme.'\n    )\n  }\n  const clamped = Math.max(0, Math.min(1, alpha))\n  const byte = Math.round(clamped * 255)\n    .toString(16)\n    .padStart(2, '0')\n  return `${hex}${byte}`\n}\n"
  },
  {
    "path": "styles.js",
    "content": "import { css } from 'styled-components'\n\nimport { applyGlobalStyles } from './src/utils/applyGlobalStyles'\n\nexport const setFontsAndResetCSS = () => {\n  applyGlobalStyles(css`\n    @font-face {\n      font-family: 'Humble Nostalgia';\n      src: url('assets/fonts/humbleNostalgia/HumbleNostalgia.otf')\n        format('OpenType');\n      font-weight: normal;\n      font-style: normal;\n    }\n\n    @font-face {\n      font-family: 'Inter';\n      font-style: normal;\n      font-weight: 100 900;\n      font-display: swap;\n      src: url('assets/fonts/inter/Inter-VariableFont_opsz,wght.ttf')\n        format('truetype');\n    }\n\n    @layer globals {\n      :root {\n        --title-bar-height: ${process.platform === 'darwin' ? '44px' : '0px'};\n      }\n\n      pear-ctrl[data-platform='darwin'] {\n        margin-top: 12px;\n        margin-left: 10px;\n      }\n\n      html,\n      body,\n      div,\n      span,\n      applet,\n      object,\n      iframe,\n      h1,\n      h2,\n      h3,\n      h4,\n      h5,\n      h6,\n      p,\n      blockquote,\n      pre,\n      a,\n      abbr,\n      acronym,\n      address,\n      big,\n      cite,\n      code,\n      del,\n      dfn,\n      em,\n      img,\n      ins,\n      kbd,\n      q,\n      s,\n      samp,\n      small,\n      strike,\n      strong,\n      sub,\n      sup,\n      tt,\n      var,\n      b,\n      u,\n      i,\n      center,\n      dl,\n      dt,\n      dd,\n      ol,\n      ul,\n      li,\n      fieldset,\n      form,\n      label,\n      legend,\n      table,\n      caption,\n      tbody,\n      tfoot,\n      thead,\n      tr,\n      th,\n      td,\n      article,\n      aside,\n      canvas,\n      details,\n      embed,\n      figure,\n      figcaption,\n      footer,\n      header,\n      hgroup,\n      menu,\n      nav,\n      output,\n      ruby,\n      section,\n      summary,\n      time,\n      mark,\n      audio,\n      video {\n        margin: 0;\n        padding: 0;\n        border: 0;\n        vertical-align: baseline;\n      }\n      article,\n      aside,\n      details,\n      figcaption,\n      figure,\n      footer,\n      header,\n      hgroup,\n      menu,\n      nav,\n      section {\n        display: block;\n      }\n\n      * {\n        box-sizing: border-box;\n      }\n      html {\n        height: 100%;\n        overflow: hidden;\n        background-color: ${({ theme }) => theme.colors.colorBackground};\n      }\n      body {\n        height: 100%;\n        line-height: 1;\n        font-family: 'Inter';\n        font-size: 16px;\n        overflow: hidden;\n        background-color: ${({ theme }) => theme.colors.colorBackground};\n      }\n      #root {\n        height: 100%;\n        overflow: hidden;\n      }\n      #bar {\n        backdrop-filter: blur(64px);\n        -webkit-app-region: drag;\n        position: relative;\n        z-index: 100;\n        min-height: var(--title-bar-height);\n        height: auto;\n        padding: 0;\n        color: ${({ theme }) => theme.colors.white.mode1};\n        white-space: nowrap;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        pointer-events: auto;\n        visibility: visible;\n      }\n\n      #bar input,\n      #bar button,\n      #bar [role='button'],\n      #bar [data-vault-chrome-interactive],\n      #bar [data-vault-chrome-interactive] * {\n        -webkit-app-region: no-drag;\n      }\n\n      ol,\n      ul {\n        list-style: none;\n      }\n      blockquote,\n      q {\n        quotes: none;\n      }\n      blockquote:before,\n      blockquote:after,\n      q:before,\n      q:after {\n        content: '';\n        content: none;\n      }\n      table {\n        border-collapse: collapse;\n        border-spacing: 0;\n      }\n      input {\n        background-color: transparent;\n        border: none;\n      }\n      input:focus {\n        outline: none;\n      }\n\n      *::-webkit-scrollbar {\n        display: none;\n      }\n    }\n  `)\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n    \"compilerOptions\": {\n        \"target\": \"ES2022\",\n        \"lib\": [\n            \"ES2022\",\n            \"DOM\",\n            \"DOM.Iterable\"\n        ],\n        \"allowJs\": true,\n        \"skipLibCheck\": true,\n        \"esModuleInterop\": true,\n        \"allowSyntheticDefaultImports\": true,\n        \"strict\": true,\n        \"forceConsistentCasingInFileNames\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"module\": \"ESNext\",\n        \"moduleResolution\": \"bundler\",\n        \"resolveJsonModule\": true,\n        \"isolatedModules\": true,\n        \"noEmit\": false,\n        \"jsx\": \"react-jsx\",\n        \"outDir\": \"build/dist\",\n        \"rootDir\": \".\",\n        \"declaration\": false,\n        \"sourceMap\": true,\n        \"removeComments\": false,\n        \"preserveConstEnums\": true,\n        \"incremental\": true,\n        \"tsBuildInfoFile\": \"build/dist/.tsbuildinfo\"\n    },\n    \"include\": [\n        \"src/types/**/*\",\n        \"src/**/*\",\n        \"app.tsx\",\n        \"app.electron.tsx\",\n        \"styles.js\"\n    ],\n    \"exclude\": [\n        \"node_modules\",\n        \"build/dist\",\n        \"packages\",\n        \"src/PearPass\"\n    ]\n}"
  }
]