@cloudflare/kumo 2.2.1 → 2.3.0
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 +26 -0
- package/ai/component-registry.json +28 -5
- package/ai/component-registry.md +64 -7
- package/ai/schemas.ts +1 -0
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +12 -4
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/ai/schemas.js +2 -0
- package/dist/ai/schemas.js.map +1 -1
- package/dist/chunks/SankeyChart-krkvltewpn3bbupw.js +651 -0
- package/dist/chunks/{SankeyChart-dkq90770ad7hgzx3.js.map → SankeyChart-krkvltewpn3bbupw.js.map} +1 -1
- package/dist/chunks/{autocomplete-mhrvtq4y5n21vr0t.js → autocomplete-h39m8kzoq0csjh9l.js} +82 -68
- package/dist/chunks/autocomplete-h39m8kzoq0csjh9l.js.map +1 -0
- package/dist/chunks/{badge-kqox9toi0sygfbno.js → badge-e9w8qrjmeu9nocf6.js} +80 -19
- package/dist/chunks/badge-e9w8qrjmeu9nocf6.js.map +1 -0
- package/dist/chunks/{breadcrumbs-ohstavaqvycoremm.js → breadcrumbs-g4pyoikibpoxsgw4.js} +2 -2
- package/dist/chunks/{breadcrumbs-ohstavaqvycoremm.js.map → breadcrumbs-g4pyoikibpoxsgw4.js.map} +1 -1
- package/dist/chunks/{button-oevxukl0zmwoq4tb.js → button-fxdpoacmq5rv1adk.js} +2 -2
- package/dist/chunks/{button-oevxukl0zmwoq4tb.js.map → button-fxdpoacmq5rv1adk.js.map} +1 -1
- package/dist/chunks/{checkbox-h6vkv17lnq854z2c.js → checkbox-dtoq56ieijj9m6vr.js} +3 -3
- package/dist/chunks/{checkbox-h6vkv17lnq854z2c.js.map → checkbox-dtoq56ieijj9m6vr.js.map} +1 -1
- package/dist/chunks/{clipboard-text-kyy71jmx7umdh8k8.js → clipboard-text-nvdsloomefwgcxat.js} +4 -4
- package/dist/chunks/{clipboard-text-kyy71jmx7umdh8k8.js.map → clipboard-text-nvdsloomefwgcxat.js.map} +1 -1
- package/dist/chunks/{collapsible-ej6p2bq758sw30nk.js → collapsible-cnsxmp7dko87pgx0.js} +2 -2
- package/dist/chunks/{collapsible-ej6p2bq758sw30nk.js.map → collapsible-cnsxmp7dko87pgx0.js.map} +1 -1
- package/dist/chunks/{combobox-g3cudlfajecou4va.js → combobox-jcqn64ixr4557a0s.js} +126 -126
- package/dist/chunks/combobox-jcqn64ixr4557a0s.js.map +1 -0
- package/dist/chunks/{command-palette-eep807rf6iapoz8r.js → command-palette-jrq7p16tff6n46nj.js} +11 -11
- package/dist/chunks/{command-palette-eep807rf6iapoz8r.js.map → command-palette-jrq7p16tff6n46nj.js.map} +1 -1
- package/dist/chunks/dialog-gndju3sqg1lmpb3f.js +118 -0
- package/dist/chunks/{dialog-fo3qhv9fgiadq5gp.js.map → dialog-gndju3sqg1lmpb3f.js.map} +1 -1
- package/dist/chunks/{dropdown-cobpydatw4vlb3ov.js → dropdown-k6orz4j043xybf54.js} +2 -2
- package/dist/chunks/{dropdown-cobpydatw4vlb3ov.js.map → dropdown-k6orz4j043xybf54.js.map} +1 -1
- package/dist/chunks/{empty-n3r7xutkb9sxjaso.js → empty-ni12ufom1kkakbuc.js} +2 -2
- package/dist/chunks/{empty-n3r7xutkb9sxjaso.js.map → empty-ni12ufom1kkakbuc.js.map} +1 -1
- package/dist/chunks/{field-l1oapopp6kjnephi.js → field-n16udu32tpyq5udz.js} +3 -3
- package/dist/chunks/{field-l1oapopp6kjnephi.js.map → field-n16udu32tpyq5udz.js.map} +1 -1
- package/dist/chunks/{input-area-gudamx1ruz8rxiw2.js → input-area-hhhpgg0ev8bowtrk.js} +4 -4
- package/dist/chunks/{input-area-gudamx1ruz8rxiw2.js.map → input-area-hhhpgg0ev8bowtrk.js.map} +1 -1
- package/dist/chunks/{input-group-gy08vju7eoogil8k.js → input-group-kkw5j7rwzhj66h10.js} +70 -70
- package/dist/chunks/input-group-kkw5j7rwzhj66h10.js.map +1 -0
- package/dist/chunks/{input-i3os21puacqw4r75.js → input-mv7giprcc6hfkpq3.js} +3 -3
- package/dist/chunks/{input-i3os21puacqw4r75.js.map → input-mv7giprcc6hfkpq3.js.map} +1 -1
- package/dist/chunks/{label-i0bj94d43irz0k1x.js → label-f6yvqca8qhbpvkq8.js} +3 -3
- package/dist/chunks/{label-i0bj94d43irz0k1x.js.map → label-f6yvqca8qhbpvkq8.js.map} +1 -1
- package/dist/chunks/{layer-card-hyz8lfxceudt05pv.js → layer-card-gegkqhkjy65l1ueo.js} +2 -2
- package/dist/chunks/{layer-card-hyz8lfxceudt05pv.js.map → layer-card-gegkqhkjy65l1ueo.js.map} +1 -1
- package/dist/chunks/{link-lkzjiitte3l29q87.js → link-jjk7qolyol7s1jkk.js} +2 -2
- package/dist/chunks/{link-lkzjiitte3l29q87.js.map → link-jjk7qolyol7s1jkk.js.map} +1 -1
- package/dist/chunks/{menubar-jalggrag4utvdpey.js → menubar-d5s6h96nw8ggy04a.js} +2 -2
- package/dist/chunks/{menubar-jalggrag4utvdpey.js.map → menubar-d5s6h96nw8ggy04a.js.map} +1 -1
- package/dist/chunks/{meter-jbxkh6gfggx1kjna.js → meter-kxn34sy6l2mz5dwq.js} +2 -2
- package/dist/chunks/{meter-jbxkh6gfggx1kjna.js.map → meter-kxn34sy6l2mz5dwq.js.map} +1 -1
- package/dist/chunks/{pagination-ceetno8sc1rd0wr2.js → pagination-ixbq8ssuuo0jxaa4.js} +3 -3
- package/dist/chunks/{pagination-ceetno8sc1rd0wr2.js.map → pagination-ixbq8ssuuo0jxaa4.js.map} +1 -1
- package/dist/chunks/{popover-i4opvl9g0as52fyx.js → popover-js5ds3szd43kspja.js} +2 -2
- package/dist/chunks/{popover-i4opvl9g0as52fyx.js.map → popover-js5ds3szd43kspja.js.map} +1 -1
- package/dist/chunks/{radio-g56o5rftpu1qpxuv.js → radio-nyw89v4eafptepmz.js} +2 -2
- package/dist/chunks/{radio-g56o5rftpu1qpxuv.js.map → radio-nyw89v4eafptepmz.js.map} +1 -1
- package/dist/chunks/{select-g1xvti1k1hj7xe5t.js → select-o2i7aovnu8v1zv8t.js} +39 -38
- package/dist/chunks/{select-g1xvti1k1hj7xe5t.js.map → select-o2i7aovnu8v1zv8t.js.map} +1 -1
- package/dist/chunks/{sensitive-input-hokm527ollnz9dqc.js → sensitive-input-bjg6m791yz7g6bn3.js} +93 -90
- package/dist/chunks/sensitive-input-bjg6m791yz7g6bn3.js.map +1 -0
- package/dist/chunks/{sidebar-oan40ylmqkyui21w.js → sidebar-izcfqkrzt4vqn8ez.js} +37 -37
- package/dist/chunks/{sidebar-oan40ylmqkyui21w.js.map → sidebar-izcfqkrzt4vqn8ez.js.map} +1 -1
- package/dist/chunks/{surface-ck1nt2uqfzmod4sz.js → surface-lzwbh3f5t0gxc83t.js} +2 -2
- package/dist/chunks/{surface-ck1nt2uqfzmod4sz.js.map → surface-lzwbh3f5t0gxc83t.js.map} +1 -1
- package/dist/chunks/{switch-fv0ttj24uhocvuh8.js → switch-d9cs31oj4rjtg717.js} +3 -3
- package/dist/chunks/{switch-fv0ttj24uhocvuh8.js.map → switch-d9cs31oj4rjtg717.js.map} +1 -1
- package/dist/chunks/{table-nsfcgpo93gfetrhh.js → table-c6qemc2jmv22cv3p.js} +2 -2
- package/dist/chunks/{table-nsfcgpo93gfetrhh.js.map → table-c6qemc2jmv22cv3p.js.map} +1 -1
- package/dist/chunks/{tabs-g8ier5pehjpfxauf.js → tabs-f0ztlooi91ko9g04.js} +2 -2
- package/dist/chunks/{tabs-g8ier5pehjpfxauf.js.map → tabs-f0ztlooi91ko9g04.js.map} +1 -1
- package/dist/chunks/{toast-ofqlfmddcyka091n.js → toast-ejfm5cbt9yulqhol.js} +3 -3
- package/dist/chunks/{toast-ofqlfmddcyka091n.js.map → toast-ejfm5cbt9yulqhol.js.map} +1 -1
- package/dist/chunks/{tooltip-icvb67awe1zolz61.js → tooltip-o6xfw9jjclv9pxaj.js} +16 -16
- package/dist/chunks/{tooltip-icvb67awe1zolz61.js.map → tooltip-o6xfw9jjclv9pxaj.js.map} +1 -1
- package/dist/chunks/vendor-base-ui-mzjqwv5teijixz8h.js +24703 -0
- package/dist/chunks/vendor-base-ui-mzjqwv5teijixz8h.js.map +1 -0
- package/dist/chunks/{vendor-floating-ui-dwag5e88viikh2zs.js → vendor-floating-ui-c4mwmh0xmfzevy9l.js} +5 -5
- package/dist/chunks/{vendor-floating-ui-dwag5e88viikh2zs.js.map → vendor-floating-ui-c4mwmh0xmfzevy9l.js.map} +1 -1
- package/dist/chunks/vendor-utils-m5h2xu7s2rs3pgk5.js +217 -0
- package/dist/chunks/vendor-utils-m5h2xu7s2rs3pgk5.js.map +1 -0
- package/dist/code.js +114 -89
- package/dist/code.js.map +1 -1
- package/dist/components/autocomplete.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/breadcrumbs.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/chart.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/clipboard-text.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/input-group.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/layer-card.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/menubar.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/sensitive-input.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/toast.js +2 -2
- package/dist/components/tooltip.js +1 -1
- package/dist/index.js +38 -38
- package/dist/primitives/accordion.js +1 -1
- package/dist/primitives/alert-dialog.js +1 -1
- package/dist/primitives/autocomplete.js +1 -1
- package/dist/primitives/avatar.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/checkbox-group.js +1 -1
- package/dist/primitives/checkbox.js +1 -1
- package/dist/primitives/collapsible.js +1 -1
- package/dist/primitives/combobox.js +1 -1
- package/dist/primitives/context-menu.js +1 -1
- package/dist/primitives/csp-provider.js +1 -1
- package/dist/primitives/dialog.js +1 -1
- package/dist/primitives/direction-provider.js +1 -1
- package/dist/primitives/drawer.js +1 -1
- package/dist/primitives/field.js +1 -1
- package/dist/primitives/fieldset.js +1 -1
- package/dist/primitives/form.js +1 -1
- package/dist/primitives/input.js +1 -1
- package/dist/primitives/menu.js +1 -1
- package/dist/primitives/menubar.js +1 -1
- package/dist/primitives/meter.js +1 -1
- package/dist/primitives/navigation-menu.js +1 -1
- package/dist/primitives/number-field.js +1 -1
- package/dist/primitives/otp-field.js +1 -1
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/preview-card.js +1 -1
- package/dist/primitives/progress.js +1 -1
- package/dist/primitives/radio-group.js +1 -1
- package/dist/primitives/radio.js +1 -1
- package/dist/primitives/scroll-area.js +1 -1
- package/dist/primitives/select.js +1 -1
- package/dist/primitives/separator.js +1 -1
- package/dist/primitives/slider.js +1 -1
- package/dist/primitives/switch.js +1 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/primitives/toast.js +1 -1
- package/dist/primitives/toggle-group.js +1 -1
- package/dist/primitives/toggle.js +1 -1
- package/dist/primitives/toolbar.js +1 -1
- package/dist/primitives/tooltip.js +1 -1
- package/dist/primitives.js +1 -1
- package/dist/scripts/theme-generator/config.js +3 -3
- package/dist/scripts/theme-generator/config.js.map +1 -1
- package/dist/src/code/index.d.ts +3 -2
- package/dist/src/code/index.d.ts.map +1 -1
- package/dist/src/code/provider.d.ts +7 -1
- package/dist/src/code/provider.d.ts.map +1 -1
- package/dist/src/code/types.d.ts +36 -5
- package/dist/src/code/types.d.ts.map +1 -1
- package/dist/src/code/use-shiki-highlighter.d.ts.map +1 -1
- package/dist/src/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/src/components/badge/badge.d.ts +51 -3
- package/dist/src/components/badge/badge.d.ts.map +1 -1
- package/dist/src/components/chart/SankeyChart.d.ts +6 -1
- package/dist/src/components/chart/SankeyChart.d.ts.map +1 -1
- package/dist/src/components/combobox/combobox.d.ts.map +1 -1
- package/dist/src/components/dialog/dialog.d.ts +11 -4
- package/dist/src/components/dialog/dialog.d.ts.map +1 -1
- package/dist/src/components/input-group/input-group-button.d.ts.map +1 -1
- package/dist/src/components/input-group/input-group-input.d.ts.map +1 -1
- package/dist/src/components/input-group/input-group.d.ts.map +1 -1
- package/dist/src/components/select/select.d.ts.map +1 -1
- package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -1
- package/dist/src/components/toast/toast.d.ts.map +1 -1
- package/dist/styles/kumo-binding.css +0 -18
- package/dist/styles/kumo-standalone.css +1 -1
- package/dist/styles/theme-kumo.css +6 -6
- package/package.json +2 -2
- package/scripts/generate-primitives.ts +6 -1
- package/scripts/theme-generator/config.ts +3 -3
- package/dist/chunks/SankeyChart-dkq90770ad7hgzx3.js +0 -635
- package/dist/chunks/autocomplete-mhrvtq4y5n21vr0t.js.map +0 -1
- package/dist/chunks/badge-kqox9toi0sygfbno.js.map +0 -1
- package/dist/chunks/combobox-g3cudlfajecou4va.js.map +0 -1
- package/dist/chunks/dialog-fo3qhv9fgiadq5gp.js +0 -115
- package/dist/chunks/input-group-gy08vju7eoogil8k.js.map +0 -1
- package/dist/chunks/sensitive-input-hokm527ollnz9dqc.js.map +0 -1
- package/dist/chunks/vendor-base-ui-nbyiqqi138hcoz52.js +0 -24639
- package/dist/chunks/vendor-base-ui-nbyiqqi138hcoz52.js.map +0 -1
- package/dist/chunks/vendor-utils-ixnhxmehwihk5tr7.js +0 -534
- package/dist/chunks/vendor-utils-ixnhxmehwihk5tr7.js.map +0 -1
package/dist/chunks/{sensitive-input-hokm527ollnz9dqc.js → sensitive-input-bjg6m791yz7g6bn3.js}
RENAMED
|
@@ -1,87 +1,90 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
2
|
+
import { jsxs as b, Fragment as ce, jsx as a } from "react/jsx-runtime";
|
|
3
3
|
import { EyeSlash as ue, Eye as pe } from "@phosphor-icons/react";
|
|
4
|
-
import { forwardRef as de, useState as C, useRef as N, useId as T, useCallback as c, useEffect as
|
|
4
|
+
import { forwardRef as de, useState as C, useRef as N, useId as T, useCallback as c, useEffect as me } from "react";
|
|
5
5
|
import { c as p } from "./cn-ct4n7r74mh8y0f48.js";
|
|
6
|
-
import { K as
|
|
7
|
-
import { F as
|
|
8
|
-
import { I as
|
|
9
|
-
const
|
|
6
|
+
import { K as fe, i as he } from "./input-mv7giprcc6hfkpq3.js";
|
|
7
|
+
import { F as ve } from "./field-n16udu32tpyq5udz.js";
|
|
8
|
+
import { I as ge } from "./vendor-base-ui-mzjqwv5teijixz8h.js";
|
|
9
|
+
const Se = fe, ye = {
|
|
10
10
|
size: "base",
|
|
11
11
|
variant: "default"
|
|
12
12
|
}, be = de(
|
|
13
13
|
({
|
|
14
|
-
value:
|
|
14
|
+
value: S,
|
|
15
15
|
defaultValue: B = "",
|
|
16
|
-
onChange:
|
|
17
|
-
onValueChange:
|
|
16
|
+
onChange: E,
|
|
17
|
+
onValueChange: R,
|
|
18
18
|
onCopy: k,
|
|
19
|
-
size: t =
|
|
20
|
-
variant:
|
|
21
|
-
disabled:
|
|
19
|
+
size: t = ye.size,
|
|
20
|
+
variant: V,
|
|
21
|
+
disabled: i = !1,
|
|
22
22
|
readOnly: d = !1,
|
|
23
|
-
id:
|
|
24
|
-
autoComplete:
|
|
25
|
-
className:
|
|
26
|
-
label:
|
|
27
|
-
labelTooltip:
|
|
28
|
-
description:
|
|
29
|
-
error:
|
|
30
|
-
required:
|
|
31
|
-
...
|
|
23
|
+
id: j,
|
|
24
|
+
autoComplete: $ = "off",
|
|
25
|
+
className: H,
|
|
26
|
+
label: y,
|
|
27
|
+
labelTooltip: L,
|
|
28
|
+
description: X,
|
|
29
|
+
error: m,
|
|
30
|
+
required: Y,
|
|
31
|
+
...O
|
|
32
32
|
}, f) => {
|
|
33
|
-
|
|
33
|
+
process.env.NODE_ENV !== "production" && V === "error" && console.warn(
|
|
34
|
+
'[Kumo SensitiveInput]: variant="error" is deprecated. Error styling is now automatically applied when the `error` prop is truthy. Simply remove the variant prop and pass an error message instead.'
|
|
35
|
+
);
|
|
36
|
+
const W = V ?? (m ? "error" : "default"), q = typeof y == "string" ? y : "Sensitive value", x = S !== void 0, [G, J] = C(B), h = x ? S : G, o = h.length > 0, [n, l] = C(
|
|
34
37
|
() => o ? "masked" : "empty"
|
|
35
|
-
), [
|
|
38
|
+
), [v, w] = C(!1), I = N(null), u = N(null), K = T(), Q = T(), Z = j ?? Q, A = T(), z = c(
|
|
36
39
|
(e) => {
|
|
37
40
|
I.current = e, typeof f == "function" ? f(e) : f && (f.current = e);
|
|
38
41
|
},
|
|
39
42
|
[f]
|
|
40
43
|
);
|
|
41
|
-
|
|
42
|
-
if (
|
|
44
|
+
me(() => {
|
|
45
|
+
if (v) {
|
|
43
46
|
const e = setTimeout(() => w(!1), 2e3);
|
|
44
47
|
return () => clearTimeout(e);
|
|
45
48
|
}
|
|
46
|
-
}, [
|
|
49
|
+
}, [v]);
|
|
47
50
|
const ee = c(
|
|
48
51
|
async (e) => {
|
|
49
52
|
e.stopPropagation();
|
|
50
53
|
try {
|
|
51
54
|
if (typeof navigator < "u" && navigator.clipboard && typeof navigator.clipboard.writeText == "function") {
|
|
52
|
-
await navigator.clipboard.writeText(
|
|
55
|
+
await navigator.clipboard.writeText(h), w(!0), k?.();
|
|
53
56
|
return;
|
|
54
57
|
}
|
|
55
58
|
} catch {
|
|
56
59
|
}
|
|
57
60
|
if (typeof document < "u") {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
const g = document.getSelection(),
|
|
61
|
-
|
|
61
|
+
const r = document.createElement("textarea");
|
|
62
|
+
r.value = h, r.setAttribute("readonly", ""), r.style.position = "absolute", r.style.left = "-9999px", document.body.appendChild(r);
|
|
63
|
+
const g = document.getSelection(), M = g?.rangeCount ? g.getRangeAt(0) : null;
|
|
64
|
+
r.select();
|
|
62
65
|
try {
|
|
63
66
|
document.execCommand("copy"), w(!0), k?.();
|
|
64
67
|
} catch (le) {
|
|
65
68
|
console.warn("Clipboard copy failed", le);
|
|
66
69
|
} finally {
|
|
67
|
-
document.body.removeChild(
|
|
70
|
+
document.body.removeChild(r), M && (g?.removeAllRanges(), g?.addRange(M));
|
|
68
71
|
}
|
|
69
72
|
}
|
|
70
73
|
},
|
|
71
|
-
[
|
|
72
|
-
),
|
|
73
|
-
|
|
74
|
+
[h, k]
|
|
75
|
+
), _ = N(o);
|
|
76
|
+
_.current !== o && (_.current = o, !o && n === "masked" && l("empty"));
|
|
74
77
|
const te = c(
|
|
75
78
|
(e) => {
|
|
76
|
-
if (!
|
|
79
|
+
if (!i) {
|
|
77
80
|
if (u.current) {
|
|
78
|
-
const
|
|
79
|
-
if (!(e.clientX >=
|
|
81
|
+
const r = u.current.getBoundingClientRect();
|
|
82
|
+
if (!(e.clientX >= r.left && e.clientX <= r.right && e.clientY >= r.top && e.clientY <= r.bottom)) return;
|
|
80
83
|
}
|
|
81
84
|
n === "masked" && o && (l("revealed"), d || setTimeout(() => I.current?.focus(), 0));
|
|
82
85
|
}
|
|
83
86
|
},
|
|
84
|
-
[n, o,
|
|
87
|
+
[n, o, i, d]
|
|
85
88
|
), ne = c(
|
|
86
89
|
(e) => {
|
|
87
90
|
e.stopPropagation(), n === "revealed" ? l("masked") : n === "empty" && o && l("revealed");
|
|
@@ -89,47 +92,47 @@ const Te = me, M = {
|
|
|
89
92
|
[n, o]
|
|
90
93
|
), oe = c(
|
|
91
94
|
(e) => {
|
|
92
|
-
const
|
|
93
|
-
x ||
|
|
95
|
+
const r = e.target.value;
|
|
96
|
+
x || J(r), n === "empty" && r.length > 0 && l("revealed"), E?.(e), R?.(r);
|
|
94
97
|
},
|
|
95
|
-
[x,
|
|
96
|
-
),
|
|
98
|
+
[x, E, R, n]
|
|
99
|
+
), re = c(
|
|
97
100
|
(e) => {
|
|
98
101
|
u.current && e.relatedTarget instanceof Node && u.current.contains(e.relatedTarget) || o && l("masked");
|
|
99
102
|
},
|
|
100
103
|
[o]
|
|
101
|
-
),
|
|
104
|
+
), ie = c(
|
|
102
105
|
(e) => {
|
|
103
|
-
|
|
106
|
+
i || n === "masked" && o && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), l("revealed"), d || setTimeout(() => I.current?.focus(), 0));
|
|
104
107
|
},
|
|
105
|
-
[n, o,
|
|
108
|
+
[n, o, i, d]
|
|
106
109
|
), ae = c(
|
|
107
110
|
(e) => {
|
|
108
111
|
n === "revealed" && e.key === "Escape" && (l("masked"), setTimeout(() => u.current?.focus(), 0));
|
|
109
112
|
},
|
|
110
113
|
[n]
|
|
111
|
-
), s = n === "masked" && o,
|
|
112
|
-
he({ size: t, variant:
|
|
114
|
+
), s = n === "masked" && o, D = !i && (n === "revealed" || n === "empty" && o), se = t === "xs" || t === "sm" ? "size-3" : "size-4", U = p(
|
|
115
|
+
he({ size: t, variant: W, parentFocusIndicator: !0 }),
|
|
113
116
|
"group/container relative flex w-full items-center",
|
|
114
117
|
// Show browser-native focus outline on container when child input is focused
|
|
115
118
|
"focus-within:outline focus-within:outline-2 focus-within:outline-kumo-focus",
|
|
116
|
-
s && !
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
),
|
|
119
|
+
s && !i && "cursor-pointer",
|
|
120
|
+
i && "cursor-not-allowed",
|
|
121
|
+
H
|
|
122
|
+
), F = /* @__PURE__ */ b(ce, { children: [
|
|
120
123
|
/* @__PURE__ */ a(
|
|
121
|
-
|
|
124
|
+
ge,
|
|
122
125
|
{
|
|
123
126
|
ref: z,
|
|
124
127
|
id: Z,
|
|
125
128
|
type: n === "revealed" ? "text" : "password",
|
|
126
|
-
value:
|
|
129
|
+
value: h,
|
|
127
130
|
onChange: oe,
|
|
128
|
-
onBlur:
|
|
131
|
+
onBlur: re,
|
|
129
132
|
onKeyDown: ae,
|
|
130
|
-
disabled:
|
|
133
|
+
disabled: i,
|
|
131
134
|
readOnly: d || s,
|
|
132
|
-
autoComplete:
|
|
135
|
+
autoComplete: $,
|
|
133
136
|
tabIndex: s ? -1 : 0,
|
|
134
137
|
className: p(
|
|
135
138
|
"w-full border-0 bg-transparent p-0 text-kumo-default ring-0 outline-none kumo-input-placeholder disabled:cursor-not-allowed disabled:text-kumo-subtle",
|
|
@@ -140,7 +143,7 @@ const Te = me, M = {
|
|
|
140
143
|
s && "pointer-events-none text-transparent"
|
|
141
144
|
),
|
|
142
145
|
"aria-hidden": s,
|
|
143
|
-
...
|
|
146
|
+
...O
|
|
144
147
|
}
|
|
145
148
|
),
|
|
146
149
|
/* @__PURE__ */ a(
|
|
@@ -168,17 +171,17 @@ const Te = me, M = {
|
|
|
168
171
|
"group/mask"
|
|
169
172
|
),
|
|
170
173
|
"aria-hidden": "true",
|
|
171
|
-
children: /* @__PURE__ */
|
|
174
|
+
children: /* @__PURE__ */ b("span", { className: "relative", children: [
|
|
172
175
|
/* @__PURE__ */ a(
|
|
173
176
|
"span",
|
|
174
177
|
{
|
|
175
178
|
className: p(
|
|
176
|
-
s && !
|
|
179
|
+
s && !i && "group-focus-within/container:invisible group-hover/mask:invisible"
|
|
177
180
|
),
|
|
178
181
|
children: "••••••••"
|
|
179
182
|
}
|
|
180
183
|
),
|
|
181
|
-
s && !
|
|
184
|
+
s && !i && /* @__PURE__ */ a("span", { className: "invisible absolute left-0 top-0 whitespace-nowrap text-kumo-subtle group-focus-within/container:visible group-hover/mask:visible", children: "Click to reveal" })
|
|
182
185
|
] })
|
|
183
186
|
}
|
|
184
187
|
),
|
|
@@ -189,7 +192,7 @@ const Te = me, M = {
|
|
|
189
192
|
onClick: ne,
|
|
190
193
|
onKeyDown: (e) => e.stopPropagation(),
|
|
191
194
|
"aria-label": n === "revealed" ? "Hide value" : "Reveal value",
|
|
192
|
-
tabIndex:
|
|
195
|
+
tabIndex: D ? 0 : -1,
|
|
193
196
|
className: p(
|
|
194
197
|
"absolute top-1/2 right-0 -translate-y-1/2 cursor-pointer text-kumo-subtle hover:text-kumo-default focus:text-kumo-default focus:ring-kumo-focus/50 focus-visible:ring-2 focus-visible:ring-kumo-brand focus-visible:rounded-sm",
|
|
195
198
|
// Defensive styles to prevent global CSS pollution (e.g., button { background: gray })
|
|
@@ -200,65 +203,65 @@ const Te = me, M = {
|
|
|
200
203
|
t === "base" && "right-3",
|
|
201
204
|
t === "lg" && "right-4",
|
|
202
205
|
se,
|
|
203
|
-
!
|
|
206
|
+
!D && "pointer-events-none opacity-0"
|
|
204
207
|
),
|
|
205
208
|
children: n === "revealed" ? /* @__PURE__ */ a(ue, { className: "size-full" }) : /* @__PURE__ */ a(pe, { className: "size-full" })
|
|
206
209
|
}
|
|
207
210
|
),
|
|
208
|
-
o && !
|
|
211
|
+
o && !i && /* @__PURE__ */ a(
|
|
209
212
|
"button",
|
|
210
213
|
{
|
|
211
214
|
type: "button",
|
|
212
215
|
onClick: ee,
|
|
213
216
|
onKeyDown: (e) => e.stopPropagation(),
|
|
214
|
-
"aria-label":
|
|
217
|
+
"aria-label": v ? "Copied" : "Copy to clipboard",
|
|
215
218
|
className: p(
|
|
216
219
|
"absolute -top-px right-2 -translate-y-full cursor-pointer rounded-t-md bg-kumo-brand px-2 py-0.5 text-xs text-white opacity-0 transition-opacity group-focus-within/container:opacity-100 group-hover/container:opacity-100 hover:brightness-120 focus:outline-none focus:ring-kumo-focus/50 focus-visible:ring-2 focus-visible:ring-kumo-brand",
|
|
217
220
|
// Defensive styles to prevent global CSS pollution
|
|
218
221
|
"border-none shadow-none m-0 h-auto min-h-0"
|
|
219
222
|
),
|
|
220
|
-
children:
|
|
223
|
+
children: v ? "Copied" : "Copy"
|
|
221
224
|
}
|
|
222
225
|
)
|
|
223
|
-
] }),
|
|
226
|
+
] }), P = /* @__PURE__ */ b("div", { children: [
|
|
224
227
|
s ? /* @__PURE__ */ a(
|
|
225
228
|
"div",
|
|
226
229
|
{
|
|
227
230
|
ref: u,
|
|
228
231
|
role: "button",
|
|
229
|
-
tabIndex:
|
|
230
|
-
className:
|
|
232
|
+
tabIndex: i ? -1 : 0,
|
|
233
|
+
className: U,
|
|
231
234
|
onClick: te,
|
|
232
|
-
onKeyDown:
|
|
233
|
-
"aria-label": `${
|
|
234
|
-
"aria-describedby": `${
|
|
235
|
-
"aria-disabled":
|
|
236
|
-
children:
|
|
235
|
+
onKeyDown: ie,
|
|
236
|
+
"aria-label": `${q}, masked.`,
|
|
237
|
+
"aria-describedby": `${A} ${K}`,
|
|
238
|
+
"aria-disabled": i,
|
|
239
|
+
children: F
|
|
237
240
|
}
|
|
238
|
-
) : /* @__PURE__ */ a("div", { ref: u, className:
|
|
239
|
-
s && /* @__PURE__ */ a("span", { id:
|
|
240
|
-
/* @__PURE__ */
|
|
241
|
+
) : /* @__PURE__ */ a("div", { ref: u, className: U, children: F }),
|
|
242
|
+
s && /* @__PURE__ */ a("span", { id: A, className: "sr-only", children: "Click or press Enter to reveal." }),
|
|
243
|
+
/* @__PURE__ */ b("span", { id: K, className: "sr-only", "aria-live": "polite", children: [
|
|
241
244
|
n === "masked" && o && "Value hidden",
|
|
242
|
-
|
|
245
|
+
v && "Copied to clipboard"
|
|
243
246
|
] })
|
|
244
247
|
] });
|
|
245
|
-
return
|
|
246
|
-
|
|
248
|
+
return y ? /* @__PURE__ */ a(
|
|
249
|
+
ve,
|
|
247
250
|
{
|
|
248
|
-
label:
|
|
249
|
-
required:
|
|
250
|
-
labelTooltip:
|
|
251
|
-
description:
|
|
252
|
-
error:
|
|
253
|
-
children:
|
|
251
|
+
label: y,
|
|
252
|
+
required: Y,
|
|
253
|
+
labelTooltip: L,
|
|
254
|
+
description: X,
|
|
255
|
+
error: m ? typeof m == "string" ? { message: m, match: !0 } : m : void 0,
|
|
256
|
+
children: P
|
|
254
257
|
}
|
|
255
|
-
) :
|
|
258
|
+
) : P;
|
|
256
259
|
}
|
|
257
260
|
);
|
|
258
261
|
be.displayName = "SensitiveInput";
|
|
259
262
|
export {
|
|
260
|
-
|
|
263
|
+
Se as K,
|
|
261
264
|
be as S,
|
|
262
|
-
|
|
265
|
+
ye as a
|
|
263
266
|
};
|
|
264
|
-
//# sourceMappingURL=sensitive-input-
|
|
267
|
+
//# sourceMappingURL=sensitive-input-bjg6m791yz7g6bn3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-input-bjg6m791yz7g6bn3.js","sources":["../../src/components/sensitive-input/sensitive-input.tsx"],"sourcesContent":["import { Eye, EyeSlash } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Input as BaseInput } from \"@base-ui/react/input\";\nimport {\n inputVariants,\n KUMO_INPUT_VARIANTS,\n type KumoInputSize,\n type KumoInputVariant,\n} from \"../input/input\";\nimport { Field, type FieldErrorMatch } from \"../field/field\";\n\nexport const KUMO_SENSITIVE_INPUT_VARIANTS = KUMO_INPUT_VARIANTS;\n\nexport const KUMO_SENSITIVE_INPUT_DEFAULT_VARIANTS = {\n size: \"base\",\n variant: \"default\",\n} as const;\n\ntype Mode = \"masked\" | \"revealed\" | \"empty\";\n\n/**\n * SensitiveInput component props.\n *\n * @example\n * ```tsx\n * <SensitiveInput label=\"API Key\" defaultValue=\"sk_live_abc123xyz789\" />\n * <SensitiveInput label=\"Secret\" value={secret} onValueChange={setSecret} />\n * ```\n */\nexport interface SensitiveInputProps\n extends Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"size\" | \"type\" | \"value\" | \"defaultValue\"\n > {\n /** Controlled value */\n value?: string;\n /** Uncontrolled default value */\n defaultValue?: string;\n /** Simplified change handler receiving just the value */\n onValueChange?: (value: string) => void;\n /** Callback fired after value is copied to clipboard */\n onCopy?: () => void;\n /**\n * Size of the input.\n * - `\"xs\"` — Extra small for compact UIs\n * - `\"sm\"` — Small for secondary fields\n * - `\"base\"` — Default input size\n * - `\"lg\"` — Large for prominent fields\n * @default \"base\"\n */\n size?: KumoInputSize;\n /**\n * Style variant of the input.\n * - `\"default\"` — Default input appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\n variant?: KumoInputVariant;\n /** Label content for the input (enables Field wrapper and sets masked state label) - can be a string or any React node */\n label?: ReactNode;\n /** Tooltip content to display next to the label via an info icon */\n labelTooltip?: ReactNode;\n /** Helper text displayed below the input */\n description?: ReactNode;\n /** Error message or validation error object */\n error?: string | { message: ReactNode; match: FieldErrorMatch };\n}\n\n/**\n * Password/secret input that masks its value by default and reveals on click.\n * Includes a built-in copy-to-clipboard button on hover.\n *\n * @example\n * ```tsx\n * <SensitiveInput label=\"API Key\" defaultValue=\"sk_live_abc123xyz789\" />\n * ```\n */\nexport const SensitiveInput = forwardRef<HTMLInputElement, SensitiveInputProps>(\n (\n {\n value: controlledValue,\n defaultValue = \"\",\n onChange,\n onValueChange,\n onCopy,\n size = KUMO_SENSITIVE_INPUT_DEFAULT_VARIANTS.size,\n variant: variantProp,\n disabled = false,\n readOnly = false,\n id,\n autoComplete = \"off\",\n className,\n label,\n labelTooltip,\n description,\n error,\n required,\n ...inputProps\n },\n ref,\n ) => {\n // Deprecation warning for variant=\"error\"\n if (process.env.NODE_ENV !== \"production\" && variantProp === \"error\") {\n console.warn(\n '[Kumo SensitiveInput]: variant=\"error\" is deprecated. ' +\n \"Error styling is now automatically applied when the `error` prop is truthy. \" +\n \"Simply remove the variant prop and pass an error message instead.\",\n );\n }\n\n // Auto-apply error styling when error prop is truthy\n // Explicit variant prop takes precedence for backwards compatibility\n const variant = variantProp ?? (error ? \"error\" : \"default\");\n // For aria-label, only use string labels (ReactNode labels can't be used for aria-label)\n const ariaLabelFallback =\n typeof label === \"string\" ? label : \"Sensitive value\";\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = isControlled ? controlledValue : internalValue;\n const hasValue = value.length > 0;\n\n const [mode, setMode] = useState<Mode>(() =>\n hasValue ? \"masked\" : \"empty\",\n );\n\n const [copied, setCopied] = useState(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const liveRegionId = useId();\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const maskedInstructionId = useId();\n\n const mergedRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n // Reset copied state after 2 seconds\n useEffect(() => {\n if (copied) {\n const timeoutId = setTimeout(() => setCopied(false), 2000);\n return () => clearTimeout(timeoutId);\n }\n }, [copied]);\n\n const copyToClipboard = useCallback(\n async (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n try {\n if (\n typeof navigator !== \"undefined\" &&\n navigator.clipboard &&\n typeof navigator.clipboard.writeText === \"function\"\n ) {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopy?.();\n return;\n }\n } catch {\n // Fall through to manual fallback\n }\n\n if (typeof document !== \"undefined\") {\n const textarea = document.createElement(\"textarea\");\n textarea.value = value;\n textarea.setAttribute(\"readonly\", \"\");\n textarea.style.position = \"absolute\";\n textarea.style.left = \"-9999px\";\n document.body.appendChild(textarea);\n const selection = document.getSelection();\n const previousRange = selection?.rangeCount\n ? selection.getRangeAt(0)\n : null;\n textarea.select();\n try {\n document.execCommand(\"copy\");\n setCopied(true);\n onCopy?.();\n } catch (error) {\n console.warn(\"Clipboard copy failed\", error);\n } finally {\n document.body.removeChild(textarea);\n if (previousRange) {\n selection?.removeAllRanges();\n selection?.addRange(previousRange);\n }\n }\n }\n },\n [value, onCopy],\n );\n\n // Sync mode when value changes externally\n const prevHasValueRef = useRef(hasValue);\n if (prevHasValueRef.current !== hasValue) {\n prevHasValueRef.current = hasValue;\n if (!hasValue && mode === \"masked\") {\n setMode(\"empty\");\n }\n }\n\n const handleContainerClick = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return;\n // Ignore clicks that originated from outside (e.g., label click focusing input)\n // Label clicks trigger a click on the input, but the click coordinates are outside the container\n if (containerRef.current) {\n const rect = containerRef.current.getBoundingClientRect();\n const isClickInsideContainer =\n e.clientX >= rect.left &&\n e.clientX <= rect.right &&\n e.clientY >= rect.top &&\n e.clientY <= rect.bottom;\n if (!isClickInsideContainer) return;\n }\n if (mode === \"masked\" && hasValue) {\n setMode(\"revealed\");\n if (!readOnly) {\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n }\n },\n [mode, hasValue, disabled, readOnly],\n );\n\n const handleToggleVisibility = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n if (mode === \"revealed\") {\n setMode(\"masked\");\n } else if (mode === \"empty\" && hasValue) {\n setMode(\"revealed\");\n }\n },\n [mode, hasValue],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (!isControlled) {\n setInternalValue(newValue);\n }\n // When typing into an empty field, switch to revealed mode\n // so the input shows as type=\"text\" instead of type=\"password\"\n if (mode === \"empty\" && newValue.length > 0) {\n setMode(\"revealed\");\n }\n onChange?.(e);\n onValueChange?.(newValue);\n },\n [isControlled, onChange, onValueChange, mode],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n // Don't mask if focus is moving to a button inside the container (copy/eye buttons)\n if (\n containerRef.current &&\n e.relatedTarget instanceof Node &&\n containerRef.current.contains(e.relatedTarget)\n ) {\n return;\n }\n if (hasValue) {\n setMode(\"masked\");\n }\n },\n [hasValue],\n );\n\n const handleContainerKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (mode === \"masked\" && hasValue) {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setMode(\"revealed\");\n if (!readOnly) {\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n }\n }\n },\n [mode, hasValue, disabled, readOnly],\n );\n\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (mode === \"revealed\" && e.key === \"Escape\") {\n setMode(\"masked\");\n // Move focus to container to avoid focus trap (input becomes tabIndex={-1})\n setTimeout(() => containerRef.current?.focus(), 0);\n }\n },\n [mode],\n );\n\n const isMaskedWithValue = mode === \"masked\" && hasValue;\n const showEyeButton =\n !disabled && (mode === \"revealed\" || (mode === \"empty\" && hasValue));\n\n // Icon sizes matching input sizes\n const iconSize = size === \"xs\" || size === \"sm\" ? \"size-3\" : \"size-4\";\n\n const containerClassName = cn(\n inputVariants({ size, variant, parentFocusIndicator: true }),\n \"group/container relative flex w-full items-center\",\n // Show browser-native focus outline on container when child input is focused\n \"focus-within:outline focus-within:outline-2 focus-within:outline-kumo-focus\",\n isMaskedWithValue && !disabled && \"cursor-pointer\",\n disabled && \"cursor-not-allowed\",\n className,\n );\n\n const containerContent = (\n <>\n {/* Input - defines the width, always rendered */}\n <BaseInput\n ref={mergedRef}\n id={inputId}\n type={mode === \"revealed\" ? \"text\" : \"password\"}\n value={value}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleInputKeyDown}\n disabled={disabled}\n readOnly={readOnly || isMaskedWithValue}\n autoComplete={autoComplete}\n tabIndex={isMaskedWithValue ? -1 : 0}\n className={cn(\n \"w-full border-0 bg-transparent p-0 text-kumo-default ring-0 outline-none kumo-input-placeholder disabled:cursor-not-allowed disabled:text-kumo-subtle\",\n size === \"xs\" && \"pr-5\",\n size === \"sm\" && \"pr-6\",\n size === \"base\" && \"pr-8\",\n size === \"lg\" && \"pr-10\",\n isMaskedWithValue && \"pointer-events-none text-transparent\",\n )}\n aria-hidden={isMaskedWithValue}\n {...inputProps}\n />\n\n {/* Mask overlay - absolutely positioned, doesn't affect layout */}\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 left-0 flex items-center overflow-hidden select-none\",\n // Match input pr padding (space for icon)\n size === \"xs\" && \"right-5\",\n size === \"sm\" && \"right-6\",\n size === \"base\" && \"right-8\",\n size === \"lg\" && \"right-10\",\n // Match the padding from inputVariants\n size === \"xs\" && \"px-1.5\",\n size === \"sm\" && \"px-2\",\n size === \"base\" && \"px-3\",\n size === \"lg\" && \"px-4\",\n // Hidden when not masked\n !isMaskedWithValue && \"invisible\",\n // When masked: enable pointer events\n isMaskedWithValue && \"pointer-events-auto\",\n // Text color - use text-kumo-default to contrast with bg-kumo-control input background\n \"text-kumo-default\",\n // Hover state - pure CSS, no React state (group for children)\n \"group/mask\",\n )}\n aria-hidden=\"true\"\n >\n {/* Both texts rendered, stacked. Visibility toggled on hover to prevent layout shift */}\n <span className=\"relative\">\n <span\n className={cn(\n isMaskedWithValue &&\n !disabled &&\n \"group-focus-within/container:invisible group-hover/mask:invisible\",\n )}\n >\n ••••••••\n </span>\n {isMaskedWithValue && !disabled && (\n <span className=\"invisible absolute left-0 top-0 whitespace-nowrap text-kumo-subtle group-focus-within/container:visible group-hover/mask:visible\">\n Click to reveal\n </span>\n )}\n </span>\n </span>\n\n {/* Eye button - absolutely positioned to the right */}\n <button\n type=\"button\"\n onClick={handleToggleVisibility}\n onKeyDown={(e) => e.stopPropagation()}\n aria-label={mode === \"revealed\" ? \"Hide value\" : \"Reveal value\"}\n tabIndex={showEyeButton ? 0 : -1}\n className={cn(\n \"absolute top-1/2 right-0 -translate-y-1/2 cursor-pointer text-kumo-subtle hover:text-kumo-default focus:text-kumo-default focus:ring-kumo-focus/50 focus-visible:ring-2 focus-visible:ring-kumo-brand focus-visible:rounded-sm\",\n // Defensive styles to prevent global CSS pollution (e.g., button { background: gray })\n \"bg-transparent border-none shadow-none p-0 m-0 h-auto min-h-0 inline-flex items-center justify-center\",\n // Match right padding from inputVariants\n size === \"xs\" && \"right-1.5\",\n size === \"sm\" && \"right-2\",\n size === \"base\" && \"right-3\",\n size === \"lg\" && \"right-4\",\n iconSize,\n !showEyeButton && \"pointer-events-none opacity-0\",\n )}\n >\n {mode === \"revealed\" ? (\n <EyeSlash className=\"size-full\" />\n ) : (\n <Eye className=\"size-full\" />\n )}\n </button>\n\n {/* Copy tab - appears on hover/focus at top right (hidden when disabled) */}\n {hasValue && !disabled && (\n <button\n type=\"button\"\n onClick={copyToClipboard}\n onKeyDown={(e) => e.stopPropagation()}\n aria-label={copied ? \"Copied\" : \"Copy to clipboard\"}\n className={cn(\n \"absolute -top-px right-2 -translate-y-full cursor-pointer rounded-t-md bg-kumo-brand px-2 py-0.5 text-xs text-white opacity-0 transition-opacity group-focus-within/container:opacity-100 group-hover/container:opacity-100 hover:brightness-120 focus:outline-none focus:ring-kumo-focus/50 focus-visible:ring-2 focus-visible:ring-kumo-brand\",\n // Defensive styles to prevent global CSS pollution\n \"border-none shadow-none m-0 h-auto min-h-0\",\n )}\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n )}\n </>\n );\n\n const input = (\n <div>\n {isMaskedWithValue ? (\n <div\n ref={containerRef}\n // Cannot use <button> here because containerContent contains interactive button elements (Copy, Reveal).\n // Using role=\"button\" with proper keyboard handling instead.\n // oxlint-disable-next-line prefer-tag-over-role\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n className={containerClassName}\n onClick={handleContainerClick}\n onKeyDown={handleContainerKeyDown}\n aria-label={`${ariaLabelFallback}, masked.`}\n aria-describedby={`${maskedInstructionId} ${liveRegionId}`}\n aria-disabled={disabled}\n >\n {containerContent}\n </div>\n ) : (\n <div ref={containerRef} className={containerClassName}>\n {containerContent}\n </div>\n )}\n {isMaskedWithValue && (\n <span id={maskedInstructionId} className=\"sr-only\">\n Click or press Enter to reveal.\n </span>\n )}\n <span id={liveRegionId} className=\"sr-only\" aria-live=\"polite\">\n {mode === \"masked\" && hasValue && \"Value hidden\"}\n {copied && \"Copied to clipboard\"}\n </span>\n </div>\n );\n\n // Render with Field wrapper if label is provided\n if (label) {\n return (\n <Field\n label={label}\n required={required}\n labelTooltip={labelTooltip}\n description={description}\n error={\n error\n ? typeof error === \"string\"\n ? { message: error, match: true }\n : error\n : undefined\n }\n >\n {input}\n </Field>\n );\n }\n\n // Render bare input without Field wrapper\n return input;\n },\n);\n\nSensitiveInput.displayName = \"SensitiveInput\";\n"],"names":["KUMO_SENSITIVE_INPUT_VARIANTS","KUMO_INPUT_VARIANTS","KUMO_SENSITIVE_INPUT_DEFAULT_VARIANTS","SensitiveInput","forwardRef","controlledValue","defaultValue","onChange","onValueChange","onCopy","size","variantProp","disabled","readOnly","id","autoComplete","className","label","labelTooltip","description","error","required","inputProps","ref","variant","ariaLabelFallback","isControlled","internalValue","setInternalValue","useState","value","hasValue","mode","setMode","copied","setCopied","inputRef","useRef","containerRef","liveRegionId","useId","generatedId","inputId","maskedInstructionId","mergedRef","useCallback","node","useEffect","timeoutId","copyToClipboard","textarea","selection","previousRange","prevHasValueRef","handleContainerClick","rect","handleToggleVisibility","handleChange","newValue","handleBlur","handleContainerKeyDown","handleInputKeyDown","isMaskedWithValue","showEyeButton","iconSize","containerClassName","cn","inputVariants","containerContent","jsxs","Fragment","jsx","BaseInput","EyeSlash","Eye","input","Field"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as s, jsxs as
|
|
3
|
-
import
|
|
2
|
+
import { jsx as s, jsxs as A, Fragment as ye } from "react/jsx-runtime";
|
|
3
|
+
import ke, { forwardRef as u, useState as k, useCallback as D, useMemo as W, createContext as E, useContext as R, useRef as O, useEffect as Ne } from "react";
|
|
4
4
|
import { CaretRightIcon as F, MagnifyingGlassIcon as Ce, SidebarSimpleIcon as Me } from "@phosphor-icons/react";
|
|
5
5
|
import { c as r } from "./cn-ct4n7r74mh8y0f48.js";
|
|
6
6
|
import { u as X } from "./link-provider-mn2voeohon7cj9o4.js";
|
|
7
|
-
import { a as Ie, T as Re } from "./tooltip-
|
|
8
|
-
import {
|
|
7
|
+
import { a as Ie, T as Re } from "./tooltip-o6xfw9jjclv9pxaj.js";
|
|
8
|
+
import { aP as U, aR as V, aq as Te, aw as ze, ax as _e, ay as Be, aQ as De } from "./vendor-base-ui-mzjqwv5teijixz8h.js";
|
|
9
9
|
const $e = {
|
|
10
10
|
variant: {
|
|
11
11
|
sidebar: {
|
|
@@ -57,22 +57,22 @@ const $e = {
|
|
|
57
57
|
mobile: {
|
|
58
58
|
breakpoint: 768
|
|
59
59
|
}
|
|
60
|
-
}, j = "16rem",
|
|
61
|
-
function
|
|
62
|
-
const [t, a] =
|
|
60
|
+
}, j = "16rem", Pe = "3rem", Ae = 768;
|
|
61
|
+
function Ee() {
|
|
62
|
+
const [t, a] = k(!1);
|
|
63
63
|
return Ne(() => {
|
|
64
|
-
const e = window.matchMedia(`(max-width: ${
|
|
64
|
+
const e = window.matchMedia(`(max-width: ${Ae - 1}px)`), i = () => a(e.matches);
|
|
65
65
|
return e.addEventListener("change", i), a(e.matches), () => e.removeEventListener("change", i);
|
|
66
66
|
}, []), t;
|
|
67
67
|
}
|
|
68
|
-
const K =
|
|
68
|
+
const K = E(null);
|
|
69
69
|
function T() {
|
|
70
70
|
const t = R(K);
|
|
71
71
|
if (!t)
|
|
72
72
|
throw new Error("useSidebar must be used within a Sidebar.Provider");
|
|
73
73
|
return t;
|
|
74
74
|
}
|
|
75
|
-
const
|
|
75
|
+
const Le = 256, Oe = 200, Ge = 480;
|
|
76
76
|
function q({
|
|
77
77
|
defaultOpen: t = !0,
|
|
78
78
|
open: a,
|
|
@@ -81,21 +81,21 @@ function q({
|
|
|
81
81
|
side: n = G.side,
|
|
82
82
|
collapsible: o = G.collapsible,
|
|
83
83
|
resizable: b = !1,
|
|
84
|
-
defaultWidth: m =
|
|
85
|
-
minWidth: d =
|
|
84
|
+
defaultWidth: m = Le,
|
|
85
|
+
minWidth: d = Oe,
|
|
86
86
|
maxWidth: l = Ge,
|
|
87
87
|
onWidthChange: c,
|
|
88
88
|
children: x,
|
|
89
89
|
className: g,
|
|
90
90
|
style: h
|
|
91
91
|
}) {
|
|
92
|
-
const p =
|
|
92
|
+
const p = Ee(), [f, S] = k(!1), [N, z] = k(m), [w, C] = k(!1), _ = D(
|
|
93
93
|
(v) => {
|
|
94
94
|
const I = Math.min(l, Math.max(d, v));
|
|
95
95
|
z(I), c?.(I);
|
|
96
96
|
},
|
|
97
97
|
[d, l, c]
|
|
98
|
-
), [
|
|
98
|
+
), [y, ve] = k(t), M = a ?? y, B = D(
|
|
99
99
|
(v) => {
|
|
100
100
|
const I = typeof v == "function" ? v(M) : v;
|
|
101
101
|
e?.(I), ve(I);
|
|
@@ -103,9 +103,9 @@ function q({
|
|
|
103
103
|
[e, M]
|
|
104
104
|
), H = D(() => {
|
|
105
105
|
p ? S((v) => !v) : B((v) => !v);
|
|
106
|
-
}, [p, B]),
|
|
106
|
+
}, [p, B]), L = M ? "expanded" : "collapsed", Se = b ? `${N}px` : j, we = W(
|
|
107
107
|
() => ({
|
|
108
|
-
state:
|
|
108
|
+
state: L,
|
|
109
109
|
open: M,
|
|
110
110
|
setOpen: B,
|
|
111
111
|
openMobile: f,
|
|
@@ -124,7 +124,7 @@ function q({
|
|
|
124
124
|
setWidth: _
|
|
125
125
|
}),
|
|
126
126
|
[
|
|
127
|
-
|
|
127
|
+
L,
|
|
128
128
|
M,
|
|
129
129
|
B,
|
|
130
130
|
f,
|
|
@@ -147,11 +147,11 @@ function q({
|
|
|
147
147
|
"div",
|
|
148
148
|
{
|
|
149
149
|
"data-sidebar-wrapper": "",
|
|
150
|
-
"data-state":
|
|
150
|
+
"data-state": L,
|
|
151
151
|
"data-side": n,
|
|
152
152
|
style: {
|
|
153
153
|
"--sidebar-width": Se,
|
|
154
|
-
"--sidebar-width-icon":
|
|
154
|
+
"--sidebar-width-icon": Pe,
|
|
155
155
|
...h
|
|
156
156
|
},
|
|
157
157
|
className: r(
|
|
@@ -204,7 +204,7 @@ const $ = u(
|
|
|
204
204
|
}
|
|
205
205
|
);
|
|
206
206
|
if (o)
|
|
207
|
-
return /* @__PURE__ */ s(Te, { open: b, onOpenChange: m, children: /* @__PURE__ */
|
|
207
|
+
return /* @__PURE__ */ s(Te, { open: b, onOpenChange: m, children: /* @__PURE__ */ A(ze, { children: [
|
|
208
208
|
/* @__PURE__ */ s(_e, { "data-sidebar-backdrop": "", className: "fixed inset-0 bg-black/50 transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0" }),
|
|
209
209
|
/* @__PURE__ */ s(
|
|
210
210
|
Be,
|
|
@@ -316,7 +316,7 @@ const J = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
|
|
|
316
316
|
}
|
|
317
317
|
));
|
|
318
318
|
J.displayName = "Sidebar.Footer";
|
|
319
|
-
const
|
|
319
|
+
const P = E({
|
|
320
320
|
isCollapsible: !1,
|
|
321
321
|
isOpen: !0
|
|
322
322
|
}), Z = u(
|
|
@@ -329,7 +329,7 @@ const O = A({
|
|
|
329
329
|
children: o,
|
|
330
330
|
...b
|
|
331
331
|
}, m) => {
|
|
332
|
-
const [d, l] =
|
|
332
|
+
const [d, l] = k(e), c = i ?? d, x = D(
|
|
333
333
|
(p) => {
|
|
334
334
|
l(p), n?.(p);
|
|
335
335
|
},
|
|
@@ -352,7 +352,7 @@ const O = A({
|
|
|
352
352
|
children: o
|
|
353
353
|
}
|
|
354
354
|
);
|
|
355
|
-
return a ? /* @__PURE__ */ s(
|
|
355
|
+
return a ? /* @__PURE__ */ s(P.Provider, { value: g, children: /* @__PURE__ */ s(
|
|
356
356
|
U,
|
|
357
357
|
{
|
|
358
358
|
defaultOpen: e,
|
|
@@ -361,13 +361,13 @@ const O = A({
|
|
|
361
361
|
className: "min-w-0",
|
|
362
362
|
children: h
|
|
363
363
|
}
|
|
364
|
-
) }) : /* @__PURE__ */ s(
|
|
364
|
+
) }) : /* @__PURE__ */ s(P.Provider, { value: g, children: h });
|
|
365
365
|
}
|
|
366
366
|
);
|
|
367
367
|
Z.displayName = "Sidebar.Group";
|
|
368
368
|
const ee = u(({ className: t, children: a, ...e }, i) => {
|
|
369
|
-
const { isCollapsible: n } = R(
|
|
370
|
-
return n ? /* @__PURE__ */
|
|
369
|
+
const { isCollapsible: n } = R(P);
|
|
370
|
+
return n ? /* @__PURE__ */ A(
|
|
371
371
|
V,
|
|
372
372
|
{
|
|
373
373
|
ref: i,
|
|
@@ -408,7 +408,7 @@ const ee = u(({ className: t, children: a, ...e }, i) => {
|
|
|
408
408
|
});
|
|
409
409
|
ee.displayName = "Sidebar.GroupLabel";
|
|
410
410
|
const ae = u(({ className: t, children: a, ...e }, i) => {
|
|
411
|
-
const { isCollapsible: n, isOpen: o } = R(
|
|
411
|
+
const { isCollapsible: n, isOpen: o } = R(P);
|
|
412
412
|
return n ? /* @__PURE__ */ s(
|
|
413
413
|
"div",
|
|
414
414
|
{
|
|
@@ -440,7 +440,7 @@ const ae = u(({ className: t, children: a, ...e }, i) => {
|
|
|
440
440
|
);
|
|
441
441
|
});
|
|
442
442
|
ae.displayName = "Sidebar.GroupContent";
|
|
443
|
-
const te =
|
|
443
|
+
const te = E(!1), se = E(!1), ie = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
|
|
444
444
|
"ul",
|
|
445
445
|
{
|
|
446
446
|
ref: e,
|
|
@@ -476,12 +476,12 @@ const ne = u(
|
|
|
476
476
|
children: b,
|
|
477
477
|
...m
|
|
478
478
|
}, d) => {
|
|
479
|
-
const { state: l } = T(), c = X(), x = R(te), g = a ?
|
|
479
|
+
const { state: l } = T(), c = X(), x = R(te), g = a ? ke.isValidElement(a) ? a : /* @__PURE__ */ s(
|
|
480
480
|
a,
|
|
481
481
|
{
|
|
482
482
|
className: r("shrink-0", i === "base" ? "size-4" : "size-3.5")
|
|
483
483
|
}
|
|
484
|
-
) : null, h = /* @__PURE__ */
|
|
484
|
+
) : null, h = /* @__PURE__ */ A(ye, { children: [
|
|
485
485
|
g,
|
|
486
486
|
/* @__PURE__ */ s(
|
|
487
487
|
"span",
|
|
@@ -653,7 +653,7 @@ const be = u(({ className: t, ...a }, e) => /* @__PURE__ */ s(
|
|
|
653
653
|
));
|
|
654
654
|
be.displayName = "Sidebar.Separator";
|
|
655
655
|
const pe = u(
|
|
656
|
-
({ className: t, placeholder: a = "Search...", shortcut: e, children: i, ...n }, o) => /* @__PURE__ */
|
|
656
|
+
({ className: t, placeholder: a = "Search...", shortcut: e, children: i, ...n }, o) => /* @__PURE__ */ A(
|
|
657
657
|
"button",
|
|
658
658
|
{
|
|
659
659
|
ref: o,
|
|
@@ -730,7 +730,7 @@ const ge = u(({ className: t, ...a }, e) => {
|
|
|
730
730
|
});
|
|
731
731
|
ge.displayName = "Sidebar.Rail";
|
|
732
732
|
const fe = u(({ className: t, ...a }, e) => {
|
|
733
|
-
const { side: i, resizable: n, setIsResizing: o, setWidth: b, setOpen: m, open: d, minWidth: l } = T(), c =
|
|
733
|
+
const { side: i, resizable: n, setIsResizing: o, setWidth: b, setOpen: m, open: d, minWidth: l } = T(), c = O(0), x = O(0), g = O(!1);
|
|
734
734
|
if (!n) return null;
|
|
735
735
|
const h = (p) => {
|
|
736
736
|
p.preventDefault(), o(!0), c.current = p.clientX, g.current = !d;
|
|
@@ -741,16 +741,16 @@ const fe = u(({ className: t, ...a }, e) => {
|
|
|
741
741
|
const N = () => {
|
|
742
742
|
o(!1), document.removeEventListener("pointermove", z), document.removeEventListener("pointerup", w);
|
|
743
743
|
}, z = (C) => {
|
|
744
|
-
const _ = i === "left" ? C.clientX - c.current : c.current - C.clientX,
|
|
744
|
+
const _ = i === "left" ? C.clientX - c.current : c.current - C.clientX, y = x.current + _;
|
|
745
745
|
if (g.current) {
|
|
746
|
-
|
|
746
|
+
y >= l && (g.current = !1, m(!0), b(y));
|
|
747
747
|
return;
|
|
748
748
|
}
|
|
749
|
-
if (
|
|
749
|
+
if (y < l) {
|
|
750
750
|
m(!1), g.current = !0;
|
|
751
751
|
return;
|
|
752
752
|
}
|
|
753
|
-
b(
|
|
753
|
+
b(y);
|
|
754
754
|
}, w = () => {
|
|
755
755
|
N();
|
|
756
756
|
};
|
|
@@ -872,4 +872,4 @@ export {
|
|
|
872
872
|
xe as y,
|
|
873
873
|
T as z
|
|
874
874
|
};
|
|
875
|
-
//# sourceMappingURL=sidebar-
|
|
875
|
+
//# sourceMappingURL=sidebar-izcfqkrzt4vqn8ez.js.map
|