@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 +3 -1
- package/dist/index.cjs +115 -104
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +95 -84
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
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
|
|
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
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
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.
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
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
|
|
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)(
|
|
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
|
|
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)(
|
|
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
|
|
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
|
|
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)(
|
|
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)(
|
|
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
|
|
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)(
|
|
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
|
|
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
|
|
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:
|
|
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)(
|
|
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
|
|
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: "
|
|
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: "
|
|
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']
|
|
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
|
|
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
|
|
6414
|
-
canManage ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "hidden
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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
|
|
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)(
|
|
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
|
|
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
|
|
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)(
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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,
|