@ai-matrx/vault 0.1.43 → 0.1.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.43
3
+ ## 0.1.44
4
4
 
5
5
  UNVERIFIED: this release has no Unreleased entry and the source comparison could not be made (the caller supplied no source comparison). Whether source changed is unknown; consumer action is unknown.
6
6
  Check the package's gitHead on npm against this version's gitHead: `git diff <previous gitHead> <this gitHead> -- apps/shared/vault/src`.
@@ -299,6 +299,8 @@ Changed shipped source files (8):
299
299
  ## 0.1.7
300
300
  ### Unreleased
301
301
 
302
+ - **Narrow-container fixes from the 360px / 22.5rem playground walk** (2026-10-23): an Authenticator list row measures its OWN width, so below 26rem the code drops onto a second line under the name (the name keeps the row, the code is never squeezed) and above it everything stays on one line; the camera notes in Add authenticator wrap to a second line instead of being cut by Dismiss, and the setup-key hint is "Setup key or otpauth link" (`SETUP_KEY_PLACEHOLDER`); same-named organizations get the shortest id fragment that differs inside their group (`organizationHints`, a suffix when whole ids collide) instead of an identical first 8 characters; the item header measures its pane, not the window (the star and Share step into the "..." menu, the title wraps to two lines, the owner badge wraps below instead of clipping), and the one-time password row hides its separate copy button below 24rem so the ring never sits on it ("Copy code" is in its menu; the code itself still copies). Proof: `src/container-responsive-layout.test.tsx`, `src/narrow-setup-notes.test.tsx`, `src/organization-hints-distinct.test.ts`. Consumer action: none.
303
+
302
304
  - Host-held lock: `host.lock` (`VaultLock`: `locked`, `subscribe`, `unlock`, optional `lock` and
303
305
  `unlockLabel`). While locked the vault shows only "Vault locked" with Unlock, and every port call
304
306
  (areas included) is refused at call time (`guardPort`, `VaultLockedError`). "Lock" joins the
package/dist/index.cjs CHANGED
@@ -1593,7 +1593,7 @@ function HistoryRow({ item, port, page, entry, label, onRestored, onConflict, on
1593
1593
  var import_react13 = require("react");
1594
1594
  var import_controls9 = require("@ai-matrx/design-system/controls");
1595
1595
  var import_design_system10 = require("@ai-matrx/design-system");
1596
- var import_icons5 = require("@ai-matrx/design-system/icons");
1596
+ var import_icons6 = require("@ai-matrx/design-system/icons");
1597
1597
 
1598
1598
  // src/ItemIcon.tsx
1599
1599
  var import_design_system7 = require("@ai-matrx/design-system");
@@ -2141,6 +2141,7 @@ var import_react11 = require("react");
2141
2141
  var import_controls7 = require("@ai-matrx/design-system/controls");
2142
2142
  var import_design_system9 = require("@ai-matrx/design-system");
2143
2143
  var import_confirm_opener2 = require("@ai-matrx/kit/confirm-opener");
2144
+ var import_icons5 = require("@ai-matrx/design-system/icons");
2144
2145
 
2145
2146
  // src/authenticator/port.ts
2146
2147
  var OTP_SEED_KEY = "totp_seed";
@@ -2205,11 +2206,16 @@ function useOtpActions(port, item, onChanged) {
2205
2206
  function TotpRow({ port, item, onChanged }) {
2206
2207
  const a = useOtpActions(port, item, onChanged);
2207
2208
  const live = useLiveCode(port, item, a.enabled && !a.removed);
2209
+ const { copy } = useCopied();
2208
2210
  const canManage = item.capabilities.canManage || item.capabilities.canEdit;
2209
2211
  if (a.removed || !item.authenticator) return null;
2210
2212
  const menu = canManage ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_design_system9.DropdownMenu, { children: [
2211
2213
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_design_system9.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_controls7.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(MoreGlyph, {}), "aria-label": "Authenticator options", disabled: a.busy }) }),
2212
2214
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_design_system9.DropdownMenuContent, { align: "end", className: "min-w-44", children: [
2215
+ a.enabled && live.code ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_design_system9.DropdownMenuItem, { onSelect: () => live.code && void copy(live.code), children: [
2216
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.CopyIcon, { className: "size-4" }),
2217
+ "Copy code"
2218
+ ] }) : null,
2213
2219
  /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_design_system9.DropdownMenuItem, { onSelect: () => void a.setEnabled(!a.enabled), children: [
2214
2220
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PowerGlyph, { className: "size-4" }),
2215
2221
  a.enabled ? "Turn off" : "Turn on"
@@ -2221,12 +2227,12 @@ function TotpRow({ port, item, onChanged }) {
2221
2227
  ] })
2222
2228
  ] })
2223
2229
  ] }) : null;
2224
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2230
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "@container/otprow", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
2225
2231
  VaultRow,
2226
2232
  {
2227
2233
  label: "Authenticator",
2228
2234
  actions: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
2229
- a.enabled ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CopyCodeButton, { live, label: item.name }) : null,
2235
+ a.enabled ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "hidden @[24rem]/otprow:contents", "data-copy-code-button": "", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CopyCodeButton, { live, label: item.name }) }) : null,
2230
2236
  menu
2231
2237
  ] }),
2232
2238
  children: a.error ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "flex items-center gap-2", children: [
@@ -2240,7 +2246,7 @@ function TotpRow({ port, item, onChanged }) {
2240
2246
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_controls7.Button, { variant: "quiet", onClick: live.retry, children: "Retry" })
2241
2247
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CodeButton, { live, digits: item.authenticator.digits, label: item.name })
2242
2248
  }
2243
- );
2249
+ ) });
2244
2250
  }
2245
2251
  function TotpEditRow({ value, onChange, hasExisting, item, port, onEnrolled, onRecognized }) {
2246
2252
  const confirmed = useConfirmed();
@@ -2609,78 +2615,83 @@ function OtpListRow({ port, item, family, entry, onOpen, onOpenInNewTab, onRenam
2609
2615
  const canManage = item.capabilities.canManage || item.capabilities.canEdit;
2610
2616
  if (a.removed) return null;
2611
2617
  const sub = a.error ?? [entry?.account, loginSiteOf(item) || entry?.issuer].filter((v, i, all) => Boolean(v) && all.indexOf(v) === i).join(" \xB7 ");
2612
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "grid min-h-14 grid-cols-[2rem_minmax(0,1fr)_auto_auto] items-center gap-x-1 rounded-lg px-2 py-1.5 transition-colors hover:bg-accent/50", children: [
2613
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2614
- import_controls9.Button,
2615
- {
2616
- type: "button",
2617
- variant: "quiet",
2618
- icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ItemIcon, { definitionKey: item.definitionKey, family, site: loginSiteOf(item) || (entry?.issuer ?? "") }),
2619
- "aria-label": `Open ${item.name}`,
2620
- tabIndex: -1,
2621
- className: "shrink-0",
2622
- onClick: onOpen
2623
- }
2624
- ),
2625
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2626
- import_controls9.Tile,
2627
- {
2628
- type: "button",
2629
- variant: "quiet",
2630
- onClick: onOpen,
2631
- title: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: a.enabled ? "text-foreground" : "text-muted-foreground", children: item.name }),
2632
- line: sub ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: a.error ? "text-destructive" : "text-muted-foreground", title: sub, children: sub }) : void 0,
2633
- oneLine: true,
2634
- className: "min-w-0"
2635
- }
2636
- ),
2637
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex shrink-0 justify-end", children: !a.enabled ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5", children: [
2638
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-sm text-disabled-foreground", children: "Off" }),
2639
- canManage ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_controls9.Button, { variant: "quiet", disabled: a.busy, onClick: () => void a.setEnabled(true), children: "Turn on" }) : null
2640
- ] }) : live.error ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5", children: [
2641
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "max-w-40 truncate text-xs text-destructive", title: live.error, children: live.error }),
2642
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_controls9.Button, { variant: "quiet", onClick: live.retry, children: "Retry" })
2643
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(CodeButton, { live, digits: item.authenticator?.digits ?? 6, label: item.name }) }),
2644
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenu, { children: [
2645
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_design_system10.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_controls9.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MoreGlyph, {}), "aria-label": `${item.name} options`, disabled: a.busy }) }),
2646
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuContent, { align: "end", className: "min-w-44", children: [
2647
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: onOpen, children: [
2648
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ExternalGlyph, { className: "size-4" }),
2649
- "Open login"
2650
- ] }),
2651
- onOpenInNewTab ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: onOpenInNewTab, children: [
2652
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ExternalGlyph, { className: "size-4" }),
2653
- "Open in new tab"
2654
- ] }) : null,
2655
- live.code ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: () => live.code && void copy(live.code), children: [
2656
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_icons5.CopyIcon, { className: "size-4" }),
2657
- "Copy code"
2658
- ] }) : null,
2659
- canManage ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
2660
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: onRename, children: [
2661
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PencilGlyph, { className: "size-4" }),
2662
- "Rename"
2663
- ] }),
2664
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: () => void a.setEnabled(!a.enabled), children: [
2665
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PowerGlyph, { className: "size-4" }),
2666
- a.enabled ? "Turn off" : "Turn on"
2618
+ return (
2619
+ // A container, not the window, decides: below 26rem of row width the code drops onto its own line
2620
+ // under the name (the name keeps the whole row's width, the code is never squeezed); above it
2621
+ // everything sits on one line. The side panel and the 22.5rem frame are narrow at any window size.
2622
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "@container/otp", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "grid min-h-14 grid-cols-[2rem_minmax(0,1fr)_auto] items-center gap-x-1 gap-y-0.5 rounded-lg px-2 py-1.5 transition-colors hover:bg-accent/50 @[26rem]/otp:grid-cols-[2rem_minmax(0,1fr)_auto_auto]", children: [
2623
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2624
+ import_controls9.Button,
2625
+ {
2626
+ type: "button",
2627
+ variant: "quiet",
2628
+ icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ItemIcon, { definitionKey: item.definitionKey, family, site: loginSiteOf(item) || (entry?.issuer ?? "") }),
2629
+ "aria-label": `Open ${item.name}`,
2630
+ tabIndex: -1,
2631
+ className: "col-start-1 row-start-1 shrink-0",
2632
+ onClick: onOpen
2633
+ }
2634
+ ),
2635
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2636
+ import_controls9.Tile,
2637
+ {
2638
+ type: "button",
2639
+ variant: "quiet",
2640
+ onClick: onOpen,
2641
+ title: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: a.enabled ? "text-foreground" : "text-muted-foreground", children: item.name }),
2642
+ line: sub ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: a.error ? "text-destructive" : "text-muted-foreground", title: sub, children: sub }) : void 0,
2643
+ oneLine: true,
2644
+ className: "col-start-2 row-start-1 min-w-0"
2645
+ }
2646
+ ),
2647
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "col-start-2 row-start-2 flex min-w-0 justify-start @[26rem]/otp:col-start-3 @[26rem]/otp:row-start-1 @[26rem]/otp:shrink-0 @[26rem]/otp:justify-end", children: !a.enabled ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5", children: [
2648
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-sm text-disabled-foreground", children: "Off" }),
2649
+ canManage ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_controls9.Button, { variant: "quiet", disabled: a.busy, onClick: () => void a.setEnabled(true), children: "Turn on" }) : null
2650
+ ] }) : live.error ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "flex items-center gap-1.5", children: [
2651
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "max-w-40 truncate text-xs text-destructive", title: live.error, children: live.error }),
2652
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_controls9.Button, { variant: "quiet", onClick: live.retry, children: "Retry" })
2653
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(CodeButton, { live, digits: item.authenticator?.digits ?? 6, label: item.name }) }),
2654
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenu, { children: [
2655
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_design_system10.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_controls9.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MoreGlyph, {}), "aria-label": `${item.name} options`, disabled: a.busy, className: "col-start-3 row-start-1 @[26rem]/otp:col-start-4" }) }),
2656
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuContent, { align: "end", className: "min-w-44", children: [
2657
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: onOpen, children: [
2658
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ExternalGlyph, { className: "size-4" }),
2659
+ "Open login"
2667
2660
  ] }),
2668
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_design_system10.DropdownMenuSeparator, {}),
2669
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { className: "text-destructive focus:text-destructive", onSelect: () => void a.remove(), children: [
2670
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TrashGlyph, { className: "size-4" }),
2671
- "Remove"
2672
- ] })
2673
- ] }) : null
2661
+ onOpenInNewTab ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: onOpenInNewTab, children: [
2662
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ExternalGlyph, { className: "size-4" }),
2663
+ "Open in new tab"
2664
+ ] }) : null,
2665
+ live.code ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: () => live.code && void copy(live.code), children: [
2666
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_icons6.CopyIcon, { className: "size-4" }),
2667
+ "Copy code"
2668
+ ] }) : null,
2669
+ canManage ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
2670
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: onRename, children: [
2671
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PencilGlyph, { className: "size-4" }),
2672
+ "Rename"
2673
+ ] }),
2674
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { onSelect: () => void a.setEnabled(!a.enabled), children: [
2675
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PowerGlyph, { className: "size-4" }),
2676
+ a.enabled ? "Turn off" : "Turn on"
2677
+ ] }),
2678
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_design_system10.DropdownMenuSeparator, {}),
2679
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_design_system10.DropdownMenuItem, { className: "text-destructive focus:text-destructive", onSelect: () => void a.remove(), children: [
2680
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TrashGlyph, { className: "size-4" }),
2681
+ "Remove"
2682
+ ] })
2683
+ ] }) : null
2684
+ ] })
2674
2685
  ] })
2675
- ] })
2676
- ] });
2686
+ ] }) })
2687
+ );
2677
2688
  }
2678
2689
 
2679
2690
  // src/fields/SettingsPanels.tsx
2680
2691
  var import_react14 = require("react");
2681
2692
  var import_controls10 = require("@ai-matrx/design-system/controls");
2682
2693
  var import_confirm_opener3 = require("@ai-matrx/kit/confirm-opener");
2683
- var import_icons6 = require("@ai-matrx/design-system/icons");
2694
+ var import_icons7 = require("@ai-matrx/design-system/icons");
2684
2695
 
2685
2696
  // src/fields/rules.ts
2686
2697
  var ENV_KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
@@ -2943,7 +2954,7 @@ function ItemSettingsPanel({ item, port, onClose, onChanged, onPanel }) {
2943
2954
  {
2944
2955
  label: f.label,
2945
2956
  hint: quietHint("Encrypted, so the browser can\u2019t match it"),
2946
- actions: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_controls10.Button, { variant: "outline", icon: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_icons6.GlobeIcon, {}), disabled: locked, onClick: () => void promote(f), children: "Use as website" }),
2957
+ actions: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_controls10.Button, { variant: "outline", icon: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_icons7.GlobeIcon, {}), disabled: locked, onClick: () => void promote(f), children: "Use as website" }),
2947
2958
  children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-muted-foreground", children: "Not a website yet" })
2948
2959
  },
2949
2960
  f.id
@@ -2977,7 +2988,7 @@ function ItemSettingsPanel({ item, port, onClose, onChanged, onPanel }) {
2977
2988
  var import_react15 = require("react");
2978
2989
  var import_design_system11 = require("@ai-matrx/design-system");
2979
2990
  var import_controls11 = require("@ai-matrx/design-system/controls");
2980
- var import_icons7 = require("@ai-matrx/design-system/icons");
2991
+ var import_icons8 = require("@ai-matrx/design-system/icons");
2981
2992
 
2982
2993
  // src/generator/generate.ts
2983
2994
  var import_credential_generator = require("@ai-matrx/kit/credential-generator");
@@ -3132,7 +3143,7 @@ function PasswordGenerator({ limits: source, onUse, useLabel = "Use" }) {
3132
3143
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex min-h-7 items-start gap-1", children: [
3133
3144
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("code", { className: (0, import_design_system11.cn)("min-w-0 flex-1 break-all py-1 font-mono text-sm", candidate ? "text-foreground" : "text-muted-foreground"), "data-testid": "generated-value", children: candidate ? revealed ? candidate.value : MASK3 : "\u2014" }),
3134
3145
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_controls11.Button, { variant: "quiet", icon: revealed ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(EyeOffGlyph, {}) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(EyeGlyph, {}), "aria-label": revealed ? "Hide" : "Reveal", disabled: !candidate, onClick: () => setRevealed((r) => !r) }),
3135
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_controls11.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons7.CopyIcon, {}), "aria-label": "Copy", disabled: !candidate, onClick: () => void copy() }),
3146
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_controls11.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons8.CopyIcon, {}), "aria-label": "Copy", disabled: !candidate, onClick: () => void copy() }),
3136
3147
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_controls11.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(RefreshGlyph, {}), "aria-label": "Generate another", onClick: () => change(settings) })
3137
3148
  ] }),
3138
3149
  strength && candidate ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("p", { className: "text-xs", children: [
@@ -5018,7 +5029,7 @@ var import_react30 = require("react");
5018
5029
  var import_design_system19 = require("@ai-matrx/design-system");
5019
5030
  var import_design_system20 = require("@ai-matrx/design-system");
5020
5031
  var import_controls23 = require("@ai-matrx/design-system/controls");
5021
- var import_icons12 = require("@ai-matrx/design-system/icons");
5032
+ var import_icons13 = require("@ai-matrx/design-system/icons");
5022
5033
 
5023
5034
  // src/ItemPane.tsx
5024
5035
  var import_react29 = require("react");
@@ -5034,7 +5045,7 @@ var import_controls16 = require("@ai-matrx/design-system/controls");
5034
5045
  var import_design_system13 = require("@ai-matrx/design-system");
5035
5046
  var import_confirm_opener6 = require("@ai-matrx/kit/confirm-opener");
5036
5047
  var import_download3 = require("@ai-matrx/kit/download");
5037
- var import_icons8 = require("@ai-matrx/design-system/icons");
5048
+ var import_icons9 = require("@ai-matrx/design-system/icons");
5038
5049
  var import_jsx_runtime20 = require("react/jsx-runtime");
5039
5050
  var messageOf2 = (e, fallback) => wasCancelled(e) ? null : e instanceof Error ? e.message : fallback;
5040
5051
  var TOO_BIG = "Files over 25 MB can't be stored.";
@@ -5110,7 +5121,7 @@ function FilesSection({ item, port, editing, onChanged }) {
5110
5121
  {
5111
5122
  label: a.label,
5112
5123
  hint: a.description || void 0,
5113
- actions: a.handling === "sealed" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Badge, { icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(LockGlyph, {}), children: "Never shown" }) : canDownload(item, a) ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons8.DownloadIcon, {}), "aria-label": `Download ${a.fileName}`, disabled: busy !== null, onClick: () => void download(a) }) : null,
5124
+ actions: a.handling === "sealed" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Badge, { icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(LockGlyph, {}), children: "Never shown" }) : canDownload(item, a) ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons9.DownloadIcon, {}), "aria-label": `Download ${a.fileName}`, disabled: busy !== null, onClick: () => void download(a) }) : null,
5114
5125
  children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FileName, { file: a })
5115
5126
  },
5116
5127
  a.id
@@ -5141,7 +5152,7 @@ function EditableFile({ port, item: it, file: a, busy: b, run: go, onDownload, o
5141
5152
  label: a.label,
5142
5153
  hint: a.description || void 0,
5143
5154
  actions: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
5144
- canDownload(it, a) ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons8.DownloadIcon, {}), "aria-label": `Download ${a.fileName}`, disabled: b !== null, onClick: onDownload }) : null,
5155
+ canDownload(it, a) ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons9.DownloadIcon, {}), "aria-label": `Download ${a.fileName}`, disabled: b !== null, onClick: onDownload }) : null,
5145
5156
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(PencilGlyph, {}), "aria-label": `Edit ${a.label}`, pressed: open, disabled: b !== null, onClick: () => setOpen((o) => !o) }),
5146
5157
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(UploadGlyph, {}), "aria-label": `Replace ${a.fileName}`, disabled: b !== null, onClick: () => replacer.current?.click() }),
5147
5158
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_controls16.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(TrashGlyph, {}), "aria-label": `Delete ${a.label}`, disabled: b !== null, onClick: () => void remove() }),
@@ -5292,7 +5303,7 @@ function DraftFilesSection({ files, onFiles }) {
5292
5303
  // src/fields/RecoveryCodesRow.tsx
5293
5304
  var import_react23 = require("react");
5294
5305
  var import_controls17 = require("@ai-matrx/design-system/controls");
5295
- var import_icons9 = require("@ai-matrx/design-system/icons");
5306
+ var import_icons10 = require("@ai-matrx/design-system/icons");
5296
5307
  var import_jsx_runtime21 = require("react/jsx-runtime");
5297
5308
  var MASK4 = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
5298
5309
  var say2 = (e, fallback) => e instanceof Error && e.message ? e.message : fallback;
@@ -5387,7 +5398,7 @@ function RecoveryCodesRow({ item, field, port, onChanged }) {
5387
5398
  children: sealed ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_controls17.Badge, { icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(LockGlyph, {}), children: "Never shown" }) : codes ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("ul", { className: "flex flex-col gap-0.5", "aria-label": "Recovery codes", children: [
5388
5399
  codes.map((code, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("li", { className: "flex min-h-7 items-center gap-1", children: [
5389
5400
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("code", { className: "min-w-0 flex-1 break-all font-mono text-sm text-foreground", children: code }),
5390
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_controls17.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_icons9.CopyIcon, {}), "aria-label": `Copy code ${i + 1}`, onClick: () => void copyValue2(code, "Recovery code") }),
5401
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_controls17.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_icons10.CopyIcon, {}), "aria-label": `Copy code ${i + 1}`, onClick: () => void copyValue2(code, "Recovery code") }),
5391
5402
  canEdit ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_controls17.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(CheckGlyph, {}), disabled: busy, onClick: () => void markUsed(i), children: "Mark used" }) : null
5392
5403
  ] }, `${i}-${code}`)),
5393
5404
  error ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { role: "alert", className: "text-xs text-destructive", children: error }) : null
@@ -5568,7 +5579,7 @@ function turnedOnSentence(done) {
5568
5579
  }
5569
5580
 
5570
5581
  // src/ItemPane.tsx
5571
- var import_icons11 = require("@ai-matrx/design-system/icons");
5582
+ var import_icons12 = require("@ai-matrx/design-system/icons");
5572
5583
  var import_drafts = require("@ai-matrx/kit/drafts");
5573
5584
 
5574
5585
  // src/draft-keep.ts
@@ -5724,7 +5735,7 @@ var import_react28 = require("react");
5724
5735
  var import_confirm_opener9 = require("@ai-matrx/kit/confirm-opener");
5725
5736
  var import_controls21 = require("@ai-matrx/design-system/controls");
5726
5737
  var import_design_system16 = require("@ai-matrx/design-system");
5727
- var import_icons10 = require("@ai-matrx/design-system/icons");
5738
+ var import_icons11 = require("@ai-matrx/design-system/icons");
5728
5739
 
5729
5740
  // src/sharing/logic.ts
5730
5741
  var LEVEL_OPTIONS = [
@@ -6007,7 +6018,7 @@ function SharePanel({ item, port, organizations, onClose, onChanged }) {
6007
6018
  children: [
6008
6019
  /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(VaultSection, { title: "Who has access", children: [
6009
6020
  isOrg ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AccessLine, { glyph: BuildingGlyph, who: `${orgName} admins`, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "px-2 text-sm text-muted-foreground", children: "Full access" }) }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AccessLine, { glyph: PersonGlyph, who: "You", meta: "Owner", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "px-2 text-sm text-muted-foreground", children: "Full access" }) }),
6010
- isOrg ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AccessLine, { glyph: import_icons10.UsersIcon, who: `${orgName} members`, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
6021
+ isOrg ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AccessLine, { glyph: import_icons11.UsersIcon, who: `${orgName} members`, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
6011
6022
  import_controls21.Select,
6012
6023
  {
6013
6024
  variant: "inline",
@@ -6371,27 +6382,27 @@ function ItemPane(props) {
6371
6382
  const recoveryExtra = extraFields.some(isRecoveryCodesField);
6372
6383
  const offerRecovery = isLogin || Boolean(item?.authenticator) || draft.authenticator.trim() !== "";
6373
6384
  const recoveryEditing = !recoveryDeclared && !recoveryExtra && (showRecovery || (draft.values[RECOVERY_CODES_KEY] ?? "") !== "");
6374
- const shownOwner = mode === "new" ? owner === "me" ? { label: "Personal", glyph: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(PersonGlyph, {}) } : owner === "person" ? { label: "Someone else", glyph: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SendGlyph, {}) } : { label: organizations.find((o) => o.id === owner)?.name ?? "Organization", glyph: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BuildingGlyph, {}) } : item ? { label: item.owner.label, glyph: item.owner.kind === "me" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(PersonGlyph, {}) : item.owner.kind === "organization" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BuildingGlyph, {}) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons11.UsersIcon, {}) } : null;
6385
+ const shownOwner = mode === "new" ? owner === "me" ? { label: "Personal", glyph: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(PersonGlyph, {}) } : owner === "person" ? { label: "Someone else", glyph: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SendGlyph, {}) } : { label: organizations.find((o) => o.id === owner)?.name ?? "Organization", glyph: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BuildingGlyph, {}) } : item ? { label: item.owner.label, glyph: item.owner.kind === "me" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(PersonGlyph, {}) : item.owner.kind === "organization" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BuildingGlyph, {}) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons12.UsersIcon, {}) } : null;
6375
6386
  const sameNamed = (id) => {
6376
6387
  const name = organizations.find((o) => o.id === id)?.name.trim().toLowerCase();
6377
6388
  return Boolean(name) && organizations.filter((o) => o.name.trim().toLowerCase() === name).length > 1;
6378
6389
  };
6379
6390
  const tagsVisible = showTags || draft.tags.length > 0 || tagsText !== "";
6380
6391
  const descriptionVisible = showDescription || draft.description !== "";
6381
- const header = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "flex min-h-14 items-center gap-2 border-b border-border px-3 py-2 sm:gap-3 sm:px-5", children: [
6392
+ const header = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "@container/vhead", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "flex min-h-14 items-center gap-2 border-b border-border px-3 py-2 @[30rem]/vhead:gap-3 @[30rem]/vhead:px-5", children: [
6382
6393
  onBack ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ChevronLeftGlyph, {}), "aria-label": "Back", onClick: mode === "new" ? onCancelNew : onBack }) : null,
6383
6394
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ItemIcon, { definitionKey: definition?.key ?? item?.definitionKey ?? "custom", family: definition?.family ?? "generic", site: item ? loginSiteOf(item) : loginSiteOf({ loginUrls: draft.loginUrls }), size: "lg" }),
6384
6395
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col", children: [
6385
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h2", { className: "truncate text-base font-semibold leading-tight", children: editing ? draft.name || (mode === "new" ? `New ${typeLabel.toLowerCase()}` : item?.name) : item?.name }),
6386
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "flex min-w-0 items-center gap-1 text-xs text-muted-foreground", children: [
6387
- typeLabel ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "truncate", children: typeLabel }) : null,
6396
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h2", { className: "line-clamp-2 break-words text-base font-semibold leading-tight", children: editing ? draft.name || (mode === "new" ? `New ${typeLabel.toLowerCase()}` : item?.name) : item?.name }),
6397
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "flex min-w-0 flex-wrap items-center gap-x-1 text-xs text-muted-foreground", children: [
6398
+ typeLabel ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "break-words", children: typeLabel }) : null,
6388
6399
  shownOwner ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Badge, { className: "shrink-0", icon: shownOwner.glyph, "aria-label": `Saved in ${shownOwner.label}`, title: item && mode !== "new" ? ownerDetail(item.owner) : void 0, children: shownOwner.label }) : null,
6389
6400
  item && mode !== "new" && item.owner.memberShared ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "shrink-0", "data-member-shared": "", children: "\xB7 A member\u2019s own" }) : null,
6390
- item && !editing ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SharingSummary, { item, port, className: "hidden truncate before:mr-1 before:content-['\xB7'] sm:inline" }, `${item.updatedAt}-${refreshKey ?? ""}`) : null
6401
+ item && !editing ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SharingSummary, { item, port, className: "hidden truncate before:mr-1 before:content-['\xB7'] @[30rem]/vhead:inline" }, `${item.updatedAt}-${refreshKey ?? ""}`) : null
6391
6402
  ] })
6392
6403
  ] }),
6393
6404
  editing ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex shrink-0 items-center gap-2", children: [
6394
- dirty ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "hidden items-center gap-1.5 text-xs text-muted-foreground sm:flex", role: "status", children: [
6405
+ dirty ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "hidden items-center gap-1.5 text-xs text-muted-foreground @[30rem]/vhead:flex", role: "status", children: [
6395
6406
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "size-1.5 rounded-full bg-warning", "aria-hidden": true }),
6396
6407
  "Unsaved"
6397
6408
  ] }) : null,
@@ -6410,8 +6421,8 @@ function ItemPane(props) {
6410
6421
  children: "Fill"
6411
6422
  }
6412
6423
  ) : null,
6413
- favorite ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "hidden sm:contents", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(StarGlyph, { className: favorite.on ? "fill-current text-warning" : "size-4" }), "aria-label": favorite.on ? "Remove from favorites" : "Add to favorites", pressed: favorite.on, onClick: favorite.toggle }) }) : null,
6414
- canManage ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "hidden sm:contents", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ShareGlyph, {}), "aria-label": "Share", onClick: () => onPanel("share") }) }) : null,
6424
+ favorite ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "hidden @[30rem]/vhead:contents", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(StarGlyph, { className: favorite.on ? "fill-current text-warning" : "size-4" }), "aria-label": favorite.on ? "Remove from favorites" : "Add to favorites", pressed: favorite.on, onClick: favorite.toggle }) }) : null,
6425
+ canManage ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "hidden @[30rem]/vhead:contents", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ShareGlyph, {}), "aria-label": "Share", onClick: () => onPanel("share") }) }) : null,
6415
6426
  canEdit ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "outline", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(PencilGlyph, {}), collapse: "container", "aria-label": "Edit", onClick: () => onMode("edit"), children: "Edit" }) : null,
6416
6427
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_design_system17.DropdownMenu, { children: [
6417
6428
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_design_system17.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(MoreGlyph, {}), "aria-label": "More actions" }) }),
@@ -6433,7 +6444,7 @@ function ItemPane(props) {
6433
6444
  "Send securely"
6434
6445
  ] }) : null,
6435
6446
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_design_system17.DropdownMenuItem, { onSelect: () => onPanel("history"), children: [
6436
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons11.HistoryIcon, { className: "size-4" }),
6447
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons12.HistoryIcon, { className: "size-4" }),
6437
6448
  "Password history"
6438
6449
  ] }),
6439
6450
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_design_system17.DropdownMenuItem, { onSelect: () => onPanel("activity"), children: [
@@ -6441,7 +6452,7 @@ function ItemPane(props) {
6441
6452
  "Activity"
6442
6453
  ] }),
6443
6454
  canEdit ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_design_system17.DropdownMenuItem, { onSelect: () => onPanel("settings"), children: [
6444
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons11.SettingsIcon, { className: "size-4" }),
6455
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons12.SettingsIcon, { className: "size-4" }),
6445
6456
  "Settings"
6446
6457
  ] }) : null,
6447
6458
  canManage ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
@@ -6465,7 +6476,7 @@ function ItemPane(props) {
6465
6476
  ] })
6466
6477
  ] })
6467
6478
  ] }) : null
6468
- ] });
6479
+ ] }) });
6469
6480
  const filesProps = item ? { item, port, host, definition, organizations, arg: null, onClose: () => void 0, onChanged, onPanel } : null;
6470
6481
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RoomProvider, { value: room, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("article", { ref: paneRef, "aria-label": item?.name ?? "New item", className: (0, import_design_system18.cn)(import_controls22.CONTROLS_CONTAINER_CLASS, "flex h-full min-h-0 flex-col bg-background"), children: [
6471
6482
  header,
@@ -6521,7 +6532,7 @@ function ItemPane(props) {
6521
6532
  actions: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
6522
6533
  hidden && existing?.handling === "revealable" && item?.capabilities.canReveal ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EyeGlyph, {}), "aria-label": `Show current ${f.label}`, onClick: () => void loadForEdit(f.key) }) : null,
6523
6534
  secretKind ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(GenerateButton, { onUse: (v) => setValue(f.key, v) }) : null,
6524
- existing ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons11.SettingsIcon, {}), "aria-label": `${f.label} settings`, onClick: () => onPanel(`field:${existing.id}`) }) : null,
6535
+ existing ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons12.SettingsIcon, {}), "aria-label": `${f.label} settings`, onClick: () => onPanel(`field:${existing.id}`) }) : null,
6525
6536
  newSecret ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SlidersGlyph, {}), "aria-label": `${f.label} settings`, pressed: open, onClick: () => toggleSettings(f.key) }) : null
6526
6537
  ] })
6527
6538
  }
@@ -6542,7 +6553,7 @@ function ItemPane(props) {
6542
6553
  removeLabel: `Delete ${f.label}`,
6543
6554
  actions: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
6544
6555
  f.handling === "revealable" && !(f.key in loaded) && item?.capabilities.canReveal ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(EyeGlyph, {}), "aria-label": `Show current ${f.label}`, onClick: () => void loadForEdit(f.key) }) : null,
6545
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons11.SettingsIcon, {}), "aria-label": `${f.label} settings`, onClick: () => onPanel(`field:${f.id}`) })
6556
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_controls22.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons12.SettingsIcon, {}), "aria-label": `${f.label} settings`, onClick: () => onPanel(`field:${f.id}`) })
6546
6557
  ] })
6547
6558
  },
6548
6559
  f.id
@@ -6835,7 +6846,7 @@ function ListRow({ item, family, port, on, onSelect, withOwner, ownContextMenu,
6835
6846
  ];
6836
6847
  const entriesRef = (0, import_react30.useRef)(entries);
6837
6848
  entriesRef.current = entries;
6838
- const glyphOf = (e) => e.id === "copy:username" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(UserGlyph, { className: "size-4" }) : e.id === "copy:password" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(KeyGlyph, { className: "size-4" }) : e.id === "copy:code" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ClockGlyph, { className: "size-4" }) : e.kind === "favorite" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StarGlyph, { className: (0, import_design_system20.cn)("size-4", favorite?.on && "fill-current text-warning") }) : e.kind === "open" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ChevronRightGlyph, { className: "size-4" }) : e.kind === "host" || e.kind === "manage" ? null : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_icons12.CopyIcon, { className: "size-4" });
6849
+ const glyphOf = (e) => e.id === "copy:username" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(UserGlyph, { className: "size-4" }) : e.id === "copy:password" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(KeyGlyph, { className: "size-4" }) : e.id === "copy:code" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ClockGlyph, { className: "size-4" }) : e.kind === "favorite" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StarGlyph, { className: (0, import_design_system20.cn)("size-4", favorite?.on && "fill-current text-warning") }) : e.kind === "open" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ChevronRightGlyph, { className: "size-4" }) : e.kind === "host" || e.kind === "manage" ? null : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_icons13.CopyIcon, { className: "size-4" });
6839
6850
  const menuItem = (e) => /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_design_system19.DropdownMenuItem, { disabled: e.disabled ?? false, onSelect: e.onSelect, children: [
6840
6851
  glyphOf(e),
6841
6852
  e.label
@@ -7163,7 +7174,7 @@ function TrashView({ port, deleted, query, header, onChanged }) {
7163
7174
  // src/NewItemFlow.tsx
7164
7175
  var import_react33 = require("react");
7165
7176
  var import_controls26 = require("@ai-matrx/design-system/controls");
7166
- var import_icons13 = require("@ai-matrx/design-system/icons");
7177
+ var import_icons14 = require("@ai-matrx/design-system/icons");
7167
7178
  var import_jsx_runtime31 = require("react/jsx-runtime");
7168
7179
  function NewItemFlow({ definitions, url, onUrl, onChoose, onCancel }) {
7169
7180
  const [search, setSearch] = (0, import_react33.useState)("");
@@ -7198,7 +7209,7 @@ function NewItemFlow({ definitions, url, onUrl, onChoose, onCancel }) {
7198
7209
  "aria-label": "Website address",
7199
7210
  inputMode: "url",
7200
7211
  autoFocus: true,
7201
- icon: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_icons13.GlobeIcon, {})
7212
+ icon: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_icons14.GlobeIcon, {})
7202
7213
  }
7203
7214
  ),
7204
7215
  guess && login ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-col gap-2 rounded-xl border border-border bg-card p-3", children: [
@@ -8128,7 +8139,7 @@ function Importer({ bridge, readLimits, activeOrganizationId, organizations, onC
8128
8139
  var import_react41 = require("react");
8129
8140
  var import_design_system23 = require("@ai-matrx/design-system");
8130
8141
  var import_controls33 = require("@ai-matrx/design-system/controls");
8131
- var import_icons15 = require("@ai-matrx/design-system/icons");
8142
+ var import_icons16 = require("@ai-matrx/design-system/icons");
8132
8143
 
8133
8144
  // src/extension/CaptureCard.tsx
8134
8145
  var import_react38 = require("react");
@@ -8271,7 +8282,7 @@ function FillSetupCard({ fillSetup }) {
8271
8282
  var import_react40 = require("react");
8272
8283
  var import_design_system22 = require("@ai-matrx/design-system");
8273
8284
  var import_controls32 = require("@ai-matrx/design-system/controls");
8274
- var import_icons14 = require("@ai-matrx/design-system/icons");
8285
+ var import_icons15 = require("@ai-matrx/design-system/icons");
8275
8286
  var import_jsx_runtime37 = require("react/jsx-runtime");
8276
8287
  var HOLD_MS = 6e4;
8277
8288
  function PageGenerator({ fields }) {
@@ -8329,7 +8340,7 @@ function PageGenerator({ fields }) {
8329
8340
  {
8330
8341
  label: "New password",
8331
8342
  actions: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
8332
- value ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_controls32.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_icons14.CopyIcon, {}), "aria-label": "Copy password", onClick: () => void copy(value, "Password") }) : null,
8343
+ value ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_controls32.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_icons15.CopyIcon, {}), "aria-label": "Copy password", onClick: () => void copy(value, "Password") }) : null,
8333
8344
  /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_design_system22.Popover, { open, onOpenChange: setOpen, children: [
8334
8345
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_design_system22.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_controls32.Button, { variant: "outline", icon: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KeyGlyph, {}), disabled: busy, children: "Generate" }) }),
8335
8346
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_design_system22.PopoverContent, { sizing: "content", align: "end", children: open ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(PasswordGenerator, { limits, useLabel: "Fill page", onUse: (v) => void onUse(v) }) : null })
@@ -8400,7 +8411,7 @@ function PageView({ port, page, fill, capture, fillSetup, newPasswordFields, ite
8400
8411
  return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex h-full min-h-0 flex-col overflow-y-auto bg-background text-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex flex-col gap-3 px-3 pb-4 pt-3", children: [
8401
8412
  header,
8402
8413
  /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex min-h-7 items-center gap-2 px-1", children: [
8403
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_design_system23.SiteIcon, { site: page.url, fallback: import_icons15.GlobeIcon, className: "size-4" }),
8414
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_design_system23.SiteIcon, { site: page.url, fallback: import_icons16.GlobeIcon, className: "size-4" }),
8404
8415
  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "min-w-0 flex-1 truncate text-sm font-medium", title: page.url, children: site || "No page open" }),
8405
8416
  page.refresh ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_controls33.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RefreshGlyph, {}), "aria-label": "Check again", onClick: page.refresh }) : null,
8406
8417
  onBrowse ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_controls33.Button, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ListGlyph, {}), onClick: onBrowse, children: "All items" }) : null
@@ -8471,7 +8482,7 @@ function MatchRow({ itemId, item, tag, family, port, busy, running, onOpen, onFi
8471
8482
  var import_react42 = require("react");
8472
8483
  var import_design_system24 = require("@ai-matrx/design-system");
8473
8484
  var import_controls34 = require("@ai-matrx/design-system/controls");
8474
- var import_icons16 = require("@ai-matrx/design-system/icons");
8485
+ var import_icons17 = require("@ai-matrx/design-system/icons");
8475
8486
  var import_jsx_runtime39 = require("react/jsx-runtime");
8476
8487
  var AUTHENTICATOR_LABEL = "Authenticator";
8477
8488
  function vaultChoices(items, organizations, _current) {
@@ -8491,7 +8502,7 @@ function vaultChoices(items, organizations, _current) {
8491
8502
  function VaultSelect({ value, choices, onChange, searchAt = ORGANIZATION_SEARCH_AT_UNREAD }) {
8492
8503
  return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_controls34.Select, { value, onValueChange: onChange, "aria-label": "Vault", searchAt, options: choices.map((c) => ({ value: c.value, label: c.label, meta: String(c.count), ...c.hint ? { hint: c.hint } : {} })) });
8493
8504
  }
8494
- var CATEGORY_GLYPHS = { logins: import_icons16.GlobeIcon, passkeys: ShieldGlyph, api: KeyGlyph, oauth: PlugGlyph, infra: DatabaseGlyph, env: TerminalGlyph, files: FileGlyph, other: NoteGlyph };
8505
+ var CATEGORY_GLYPHS = { logins: import_icons17.GlobeIcon, passkeys: ShieldGlyph, api: KeyGlyph, oauth: PlugGlyph, infra: DatabaseGlyph, env: TerminalGlyph, files: FileGlyph, other: NoteGlyph };
8495
8506
  var familyOf = (key, definitions) => definitions.find((d) => d.key === key)?.family ?? "generic";
8496
8507
  function itemFamily(item, definitions) {
8497
8508
  return familyOf(item.definitionKey, definitions);
@@ -8589,7 +8600,7 @@ function VaultSidebar({ vault, choices, onVault, organizationSearchAt, view, all
8589
8600
  ] }),
8590
8601
  /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto px-2 pb-3 pt-1", children: [
8591
8602
  /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex flex-col gap-0.5", children: [
8592
- hasPage ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Entry, { on: view === "page", glyph: import_icons16.GlobeIcon, label: "This page", onClick: () => onView("page") }) : null,
8603
+ hasPage ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Entry, { on: view === "page", glyph: import_icons17.GlobeIcon, label: "This page", onClick: () => onView("page") }) : null,
8593
8604
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Entry, { on: view === "all", glyph: GridGlyph, label: "All items", count: allCount, onClick: () => onView("all") }),
8594
8605
  hasFavorites ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Entry, { on: view === "favorites", glyph: StarGlyph, label: "Favorites", count: views.favorites, onClick: () => onView("favorites") }) : null,
8595
8606
  hasRecents ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Entry, { on: view === "recent", glyph: ClockGlyph, label: "Recently opened", count: views.recent, onClick: () => onView("recent") }) : null,