@cascivo/react 0.11.1 → 0.12.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/README.md +1 -1
- package/dist/alert-dialog/alert-dialog.js +2 -4
- package/dist/card/card.css +1 -1
- package/dist/card/card.js +21 -11
- package/dist/card/card.module.js +8 -5
- package/dist/checkbox/checkbox.js +2 -2
- package/dist/command-menu/command-menu.js +67 -71
- package/dist/dropdown/dropdown.js +48 -50
- package/dist/header-panel/header-panel.js +2 -4
- package/dist/icon-button/icon-button.js +10 -10
- package/dist/index.d.ts +29 -14
- package/dist/modal/modal.js +4 -4
- package/dist/node/alert-dialog/alert-dialog.js +2 -4
- package/dist/node/card/card.js +21 -11
- package/dist/node/card/card.module.js +8 -5
- package/dist/node/checkbox/checkbox.js +2 -2
- package/dist/node/command-menu/command-menu.js +67 -71
- package/dist/node/dropdown/dropdown.js +48 -50
- package/dist/node/header-panel/header-panel.js +2 -4
- package/dist/node/icon-button/icon-button.js +10 -10
- package/dist/node/modal/modal.js +4 -4
- package/dist/node/popover/use-popover.js +9 -9
- package/dist/node/react/src/index.js +63 -63
- package/dist/node/search/search.js +19 -22
- package/dist/node/sheet/sheet.js +2 -4
- package/dist/node/visually-hidden/visually-hidden.js +2 -13
- package/dist/popover/use-popover.js +9 -9
- package/dist/react/src/index.js +63 -63
- package/dist/search/search.js +19 -22
- package/dist/sheet/sheet.js +2 -4
- package/dist/styles.css +1 -3
- package/dist/visually-hidden/visually-hidden.js +2 -13
- package/package.json +4 -4
- package/readme.body.md +1 -1
- package/dist/node/visually-hidden/visually-hidden.module.js +0 -5
- package/dist/visually-hidden/visually-hidden.css +0 -1
- package/dist/visually-hidden/visually-hidden.module.js +0 -6
package/README.md
CHANGED
|
@@ -407,7 +407,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
407
407
|
- **Cta** — Call-to-action band — quiet hairline-bordered section with title, description, and centered actions. Replace demo content before shipping.
|
|
408
408
|
- **DashboardLayout** — Dashboard page layout with stats strip, main content area, and optional aside.
|
|
409
409
|
- **FeatureGrid** — Feature section — AutoGrid of items with optional title, description, and icon slots. Icons are optional; the grid works text-only. Replace demo content before shipping.
|
|
410
|
-
- **Flex** — Flex layout primitive for vertical or horizontal stacking with gap control.
|
|
410
|
+
- **Flex** — Flex layout primitive for vertical or horizontal stacking with gap control. ⚠ Unlike CSS `flex-direction`, `direction` defaults to `vertical` — pass `direction="horizontal"` for a row.
|
|
411
411
|
- **Grid** — CSS grid layout primitive with responsive column collapsing. Establishes its own containment, so responsive `cols` adapt to the grid’s own slot width with no wrapper or container ancestor required.
|
|
412
412
|
- **Hero** — Page hero section — centered or split layout with eyebrow, title, description, actions and media slots. Replace demo content before shipping.
|
|
413
413
|
- **Indicator** — Positions an overlay element (badge, dot, count) at a corner of its child
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import e from "./alert-dialog.module.js";
|
|
4
|
-
import {
|
|
4
|
+
import { useEffectPropSignal as t, useId as n, useSignalEffect as r } from "@cascivo/core";
|
|
5
5
|
import { builtin as i, t as a } from "@cascivo/i18n";
|
|
6
6
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
7
|
import { useRef as c } from "react";
|
|
8
8
|
//#region ../components/src/alert-dialog/alert-dialog.tsx
|
|
9
9
|
function l({ open: l, title: u, description: d, onConfirm: f, onCancel: p, labels: m, variant: h = "default" }) {
|
|
10
|
-
let g = c(null), _ =
|
|
11
|
-
y.value = l;
|
|
12
|
-
let b = c(null), x = c(p);
|
|
10
|
+
let g = c(null), _ = n("cascivo-alert-dialog-title"), v = n("cascivo-alert-dialog-desc"), y = t(l), b = c(null), x = c(p);
|
|
13
11
|
x.current = p;
|
|
14
12
|
let S = c(f);
|
|
15
13
|
return S.current = f, r(() => {
|
package/dist/card/card.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer cascivo.component{.
|
|
1
|
+
@layer cascivo.component{._card_4huda_2{background-color:var(--cascivo-color-surface);border-radius:var(--cascivo-radius-surface);padding:var(--_card-p,0);overflow:hidden}._card_4huda_2[data-padding=none]{--_card-p:0}._card_4huda_2[data-padding=sm]{--_card-p:var(--cascivo-space-4)}._card_4huda_2[data-padding=md]{--_card-p:var(--cascivo-space-6)}._card_4huda_2[data-padding=lg]{--_card-p:var(--cascivo-space-8)}._card_4huda_2[data-variant=default]{border:1px solid var(--cascivo-color-border)}._card_4huda_2[data-variant=outlined]{border:1.5px solid var(--cascivo-color-border-strong)}._card_4huda_2[data-variant=elevated]{box-shadow:var(--cascivo-shadow-md);border:none}._header_4huda_35{padding:var(--_card-p,var(--cascivo-space-6));gap:var(--cascivo-space-1);flex-direction:column;min-inline-size:0;padding-block-end:0;display:flex}._headerRow_4huda_49{justify-content:space-between;align-items:flex-start;gap:var(--cascivo-space-3);flex-direction:row}._headerRow_4huda_49 ._headerMain_4huda_57{gap:var(--cascivo-space-1);flex-direction:column;min-inline-size:0;display:flex}._headerRow_4huda_49 ._headerActions_4huda_64{align-items:center;gap:var(--cascivo-space-1);flex-shrink:0;display:flex}._title_4huda_72{font-family:var(--cascivo-font-sans);font-size:var(--cascivo-text-lg);font-weight:var(--cascivo-font-semibold);color:var(--cascivo-color-text);line-height:var(--cascivo-leading-tight);margin:0}._content_4huda_81{padding:var(--_card-p,var(--cascivo-space-6));color:var(--cascivo-color-text-subtle);font-family:var(--cascivo-font-sans);font-size:var(--cascivo-text-sm);line-height:var(--cascivo-leading-relaxed)}._footer_4huda_89{padding:var(--_card-p,var(--cascivo-space-6));align-items:center;gap:var(--cascivo-space-2);min-inline-size:0;padding-block-start:0;display:flex}._footer_4huda_89>*{min-inline-size:0}}
|
package/dist/card/card.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import e from "./card.module.js";
|
|
4
4
|
import { cn as t } from "@cascivo/core";
|
|
5
|
-
import { jsx as n } from "react/jsx-runtime";
|
|
5
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
6
6
|
//#region ../components/src/card/card.tsx
|
|
7
|
-
function
|
|
7
|
+
function i({ variant: r = "default", padding: i = "md", className: a, children: o, ...s }) {
|
|
8
8
|
return /* @__PURE__ */ n("div", {
|
|
9
9
|
"data-variant": r,
|
|
10
10
|
"data-padding": i,
|
|
@@ -13,28 +13,38 @@ function r({ variant: r = "default", padding: i = "md", className: a, children:
|
|
|
13
13
|
children: o
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
function
|
|
17
|
-
return /* @__PURE__ */ n("div", {
|
|
18
|
-
className: t(e.header,
|
|
19
|
-
...
|
|
20
|
-
children:
|
|
16
|
+
function a({ actions: i, className: a, children: o, ...s }) {
|
|
17
|
+
return i === void 0 ? /* @__PURE__ */ n("div", {
|
|
18
|
+
className: t(e.header, a),
|
|
19
|
+
...s,
|
|
20
|
+
children: o
|
|
21
|
+
}) : /* @__PURE__ */ r("div", {
|
|
22
|
+
className: t(e.header, e.headerRow, a),
|
|
23
|
+
...s,
|
|
24
|
+
children: [/* @__PURE__ */ n("div", {
|
|
25
|
+
className: e.headerMain,
|
|
26
|
+
children: o
|
|
27
|
+
}), /* @__PURE__ */ n("div", {
|
|
28
|
+
className: e.headerActions,
|
|
29
|
+
children: i
|
|
30
|
+
})]
|
|
21
31
|
});
|
|
22
32
|
}
|
|
23
|
-
function
|
|
33
|
+
function o({ className: r, children: i, ...a }) {
|
|
24
34
|
return /* @__PURE__ */ n("h3", {
|
|
25
35
|
className: t(e.title, r),
|
|
26
36
|
...a,
|
|
27
37
|
children: i
|
|
28
38
|
});
|
|
29
39
|
}
|
|
30
|
-
function
|
|
40
|
+
function s({ className: r, children: i, ...a }) {
|
|
31
41
|
return /* @__PURE__ */ n("div", {
|
|
32
42
|
className: t(e.content, r),
|
|
33
43
|
...a,
|
|
34
44
|
children: i
|
|
35
45
|
});
|
|
36
46
|
}
|
|
37
|
-
function
|
|
47
|
+
function c({ className: r, children: i, ...a }) {
|
|
38
48
|
return /* @__PURE__ */ n("div", {
|
|
39
49
|
className: t(e.footer, r),
|
|
40
50
|
...a,
|
|
@@ -42,4 +52,4 @@ function s({ className: r, children: i, ...a }) {
|
|
|
42
52
|
});
|
|
43
53
|
}
|
|
44
54
|
//#endregion
|
|
45
|
-
export {
|
|
55
|
+
export { i as Card, s as CardContent, c as CardFooter, a as CardHeader, o as CardTitle };
|
package/dist/card/card.module.js
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
import './card.css';
|
|
4
4
|
var e = {
|
|
5
|
-
card: "
|
|
6
|
-
header: "
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
card: "_card_4huda_2",
|
|
6
|
+
header: "_header_4huda_35",
|
|
7
|
+
headerRow: "_headerRow_4huda_49",
|
|
8
|
+
headerMain: "_headerMain_4huda_57",
|
|
9
|
+
headerActions: "_headerActions_4huda_64",
|
|
10
|
+
title: "_title_4huda_72",
|
|
11
|
+
content: "_content_4huda_81",
|
|
12
|
+
footer: "_footer_4huda_89"
|
|
10
13
|
};
|
|
11
14
|
//#endregion
|
|
12
15
|
export { e as default };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import e from "./checkbox.module.js";
|
|
4
|
-
import { cn as t,
|
|
4
|
+
import { cn as t, useEffectPropSignal as n, useSignalEffect as r } from "@cascivo/core";
|
|
5
5
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
6
|
import { useRef as o } from "react";
|
|
7
7
|
//#region ../components/src/checkbox/checkbox.tsx
|
|
8
8
|
function s({ label: s, indeterminate: c = !1, className: l, id: u, disabled: d, ...f }) {
|
|
9
9
|
let p = o(null), m = n(c);
|
|
10
|
-
|
|
10
|
+
r(() => {
|
|
11
11
|
p.current && (p.current.indeterminate = m.value);
|
|
12
12
|
});
|
|
13
13
|
let h = u ?? (s ? `cascade-checkbox-${s.toLowerCase().replace(/\s+/g, "-")}` : void 0);
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
import { Spinner as e } from "../spinner/spinner.js";
|
|
4
4
|
import { Kbd as t } from "../kbd/kbd.js";
|
|
5
5
|
import n from "./command-menu.module.js";
|
|
6
|
-
import { batch as r, cn as i,
|
|
6
|
+
import { batch as r, cn as i, useEffectPropSignal as a, useSignal as o, useSignalEffect as s, useSignals as ee } from "@cascivo/core";
|
|
7
7
|
import { builtin as c, t as l } from "@cascivo/i18n";
|
|
8
8
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
|
-
import { useId as
|
|
9
|
+
import { useId as te, useRef as f } from "react";
|
|
10
10
|
//#region ../components/src/command-menu/command-menu.tsx
|
|
11
11
|
function p(e, t) {
|
|
12
12
|
if (e.length === 0) return {
|
|
@@ -66,46 +66,42 @@ function _(e, t) {
|
|
|
66
66
|
}
|
|
67
67
|
return null;
|
|
68
68
|
}
|
|
69
|
-
function v({ open: m, onOpenChange: v, groups:
|
|
70
|
-
|
|
71
|
-
let
|
|
72
|
-
|
|
73
|
-
let
|
|
74
|
-
|
|
75
|
-
let
|
|
76
|
-
F.value = m;
|
|
77
|
-
let I = a(x);
|
|
78
|
-
I.value = x;
|
|
79
|
-
let L = a(""), R = a(0), z = a([]), B = a(null), re = z.value.at(-1)?.groups ?? te, ie = y ?? z.value.at(-1)?.placeholder ?? l(c.commandMenu.placeholder), V = T.find((e) => e.id === B.value) ?? null, H = re.filter((e) => !B.value || !e.scope || e.scope === B.value).map((e) => ({
|
|
69
|
+
function v({ open: m, onOpenChange: v, groups: ne, placeholder: re, emptyLabel: ie, hotkey: y = !0, label: b, loading: x = !1, onQueryChange: S, scopes: C = [], className: ae }) {
|
|
70
|
+
ee();
|
|
71
|
+
let w = b ?? l(c.commandMenu.label), T = ie ?? l(c.commandMenu.empty), E = te(), D = `${E}-listbox`, O = f(null), k = f(null), A = f([]), j = f(v);
|
|
72
|
+
j.current = v;
|
|
73
|
+
let M = f(S);
|
|
74
|
+
M.current = S;
|
|
75
|
+
let N = a(m), P = a(y), F = o(""), I = o(0), L = o([]), R = o(null), z = L.value.at(-1)?.groups ?? ne, B = re ?? L.value.at(-1)?.placeholder ?? l(c.commandMenu.placeholder), V = C.find((e) => e.id === R.value) ?? null, H = z.filter((e) => !R.value || !e.scope || e.scope === R.value).map((e) => ({
|
|
80
76
|
heading: e.heading,
|
|
81
77
|
items: e.items.map((e) => ({
|
|
82
78
|
item: e,
|
|
83
|
-
score: h(
|
|
79
|
+
score: h(F.value, e)
|
|
84
80
|
})).filter(({ score: e }) => e > 0).sort((e, t) => t.score - e.score).map(({ item: e }) => ({
|
|
85
81
|
item: e,
|
|
86
|
-
indices: p(
|
|
82
|
+
indices: p(F.value, e.label)?.indices ?? []
|
|
87
83
|
}))
|
|
88
|
-
})).filter((e) => e.items.length > 0), U = H.flatMap((e) => e.items.map((e) => e.item)), W = U.flatMap((e, t) => e.disabled ? [] : [t]), G = W.includes(
|
|
89
|
-
|
|
90
|
-
let e =
|
|
91
|
-
e && (
|
|
92
|
-
|
|
93
|
-
}), typeof e.showModal == "function" && e.showModal(),
|
|
94
|
-
}),
|
|
95
|
-
let e =
|
|
84
|
+
})).filter((e) => e.items.length > 0), U = H.flatMap((e) => e.items.map((e) => e.item)), W = U.flatMap((e, t) => e.disabled ? [] : [t]), G = W.includes(I.value) ? I.value : W[0] ?? -1, K = (e) => `${E}-option-${e}`;
|
|
85
|
+
s(() => {
|
|
86
|
+
let e = O.current;
|
|
87
|
+
e && (N.value ? e.open || (r(() => {
|
|
88
|
+
F.value = "", I.value = 0, L.value = [], R.value = null;
|
|
89
|
+
}), typeof e.showModal == "function" && e.showModal(), k.current?.focus()) : e.open && (L.value = [], e.close()));
|
|
90
|
+
}), s(() => {
|
|
91
|
+
let e = O.current;
|
|
96
92
|
if (!e) return;
|
|
97
|
-
let t = () =>
|
|
93
|
+
let t = () => j.current(!1);
|
|
98
94
|
return e.addEventListener("close", t), () => e.removeEventListener("close", t);
|
|
99
|
-
}),
|
|
100
|
-
if (!
|
|
95
|
+
}), s(() => {
|
|
96
|
+
if (!P.value) return;
|
|
101
97
|
let e = (e) => {
|
|
102
|
-
(e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k" && (e.preventDefault(),
|
|
98
|
+
(e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k" && (e.preventDefault(), j.current(!N.value));
|
|
103
99
|
};
|
|
104
100
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
105
101
|
});
|
|
106
102
|
let q = (e) => {
|
|
107
|
-
|
|
108
|
-
let t =
|
|
103
|
+
I.value = e;
|
|
104
|
+
let t = A.current[e];
|
|
109
105
|
t && typeof t.scrollIntoView == "function" && t.scrollIntoView({ block: "nearest" });
|
|
110
106
|
}, J = (e) => {
|
|
111
107
|
if (W.length === 0) return;
|
|
@@ -118,7 +114,7 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
118
114
|
if (e.page) {
|
|
119
115
|
if (t === "secondary") return;
|
|
120
116
|
r(() => {
|
|
121
|
-
|
|
117
|
+
L.value = [...L.value, e.page], F.value = "", I.value = 0;
|
|
122
118
|
});
|
|
123
119
|
return;
|
|
124
120
|
}
|
|
@@ -129,21 +125,21 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
129
125
|
}
|
|
130
126
|
t !== "secondary" && (e.onSelect?.(), v(!1));
|
|
131
127
|
}
|
|
132
|
-
},
|
|
133
|
-
if (
|
|
134
|
-
let t = [null, ...
|
|
128
|
+
}, oe = (e) => {
|
|
129
|
+
if (C.length === 0) return;
|
|
130
|
+
let t = [null, ...C.map((e) => e.id)], n = t[(t.indexOf(R.value) + e + t.length) % t.length];
|
|
135
131
|
r(() => {
|
|
136
|
-
|
|
132
|
+
R.value = n ?? null, I.value = 0;
|
|
137
133
|
});
|
|
138
134
|
}, Z = () => {
|
|
139
135
|
r(() => {
|
|
140
|
-
|
|
141
|
-
}),
|
|
136
|
+
R.value = null, I.value = 0;
|
|
137
|
+
}), k.current?.focus();
|
|
142
138
|
}, Q = () => {
|
|
143
139
|
r(() => {
|
|
144
|
-
|
|
140
|
+
L.value = L.value.slice(0, -1), F.value = "", I.value = 0;
|
|
145
141
|
});
|
|
146
|
-
},
|
|
142
|
+
}, se = (e) => {
|
|
147
143
|
switch (e.key) {
|
|
148
144
|
case "ArrowDown":
|
|
149
145
|
e.preventDefault(), J(1);
|
|
@@ -152,7 +148,7 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
152
148
|
e.preventDefault(), J(-1);
|
|
153
149
|
break;
|
|
154
150
|
case "Tab":
|
|
155
|
-
|
|
151
|
+
C.length > 0 && (e.preventDefault(), oe(e.shiftKey ? -1 : 1));
|
|
156
152
|
break;
|
|
157
153
|
case "Home":
|
|
158
154
|
e.preventDefault(), W[0] !== void 0 && q(W[0]);
|
|
@@ -167,20 +163,20 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
167
163
|
e.preventDefault(), G >= 0 && X(U[G], e.metaKey || e.ctrlKey ? "secondary" : "primary");
|
|
168
164
|
break;
|
|
169
165
|
case "Backspace":
|
|
170
|
-
|
|
166
|
+
F.value === "" && (L.value.length > 0 ? (e.preventDefault(), Q()) : R.value && (e.preventDefault(), Z()));
|
|
171
167
|
break;
|
|
172
168
|
}
|
|
173
|
-
}, se = (e) => {
|
|
174
|
-
e.key === "Escape" && (e.preventDefault(), z.value.length > 0 ? Q() : A.current?.close());
|
|
175
169
|
}, ce = (e) => {
|
|
176
|
-
e.
|
|
170
|
+
e.key === "Escape" && (e.preventDefault(), L.value.length > 0 ? Q() : O.current?.close());
|
|
171
|
+
}, le = (e) => {
|
|
172
|
+
e.target === O.current && O.current?.close();
|
|
177
173
|
}, $ = -1;
|
|
178
174
|
return /* @__PURE__ */ u("dialog", {
|
|
179
|
-
ref:
|
|
180
|
-
"aria-label":
|
|
181
|
-
className: i(n.dialog,
|
|
182
|
-
onClick:
|
|
183
|
-
onKeyDown:
|
|
175
|
+
ref: O,
|
|
176
|
+
"aria-label": w,
|
|
177
|
+
className: i(n.dialog, ae),
|
|
178
|
+
onClick: le,
|
|
179
|
+
onKeyDown: ce,
|
|
184
180
|
children: /* @__PURE__ */ d("div", {
|
|
185
181
|
className: n.panel,
|
|
186
182
|
children: [
|
|
@@ -231,44 +227,44 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
231
227
|
})]
|
|
232
228
|
}),
|
|
233
229
|
/* @__PURE__ */ u("input", {
|
|
234
|
-
ref:
|
|
230
|
+
ref: k,
|
|
235
231
|
type: "text",
|
|
236
232
|
role: "combobox",
|
|
237
233
|
"aria-expanded": "true",
|
|
238
|
-
"aria-controls":
|
|
234
|
+
"aria-controls": D,
|
|
239
235
|
"aria-activedescendant": G >= 0 ? K(G) : void 0,
|
|
240
236
|
"aria-autocomplete": "list",
|
|
241
|
-
"aria-label":
|
|
237
|
+
"aria-label": w,
|
|
242
238
|
autoComplete: "off",
|
|
243
239
|
spellCheck: !1,
|
|
244
240
|
className: n.input,
|
|
245
|
-
placeholder:
|
|
246
|
-
value:
|
|
241
|
+
placeholder: B,
|
|
242
|
+
value: F.value,
|
|
247
243
|
onChange: (e) => {
|
|
248
244
|
let t = e.target.value;
|
|
249
|
-
if (!
|
|
250
|
-
let e = _(t,
|
|
251
|
-
e && (
|
|
245
|
+
if (!R.value && C.length > 0) {
|
|
246
|
+
let e = _(t, C);
|
|
247
|
+
e && (R.value = e.scope.id, t = e.rest);
|
|
252
248
|
}
|
|
253
|
-
|
|
249
|
+
F.value = t, I.value = 0, M.current?.(t);
|
|
254
250
|
},
|
|
255
|
-
onKeyDown:
|
|
251
|
+
onKeyDown: se
|
|
256
252
|
})
|
|
257
253
|
]
|
|
258
254
|
}),
|
|
259
|
-
|
|
255
|
+
C.length > 0 && /* @__PURE__ */ d("div", {
|
|
260
256
|
className: n.scopes,
|
|
261
257
|
children: [/* @__PURE__ */ u("span", {
|
|
262
258
|
className: n.scopesLabel,
|
|
263
259
|
children: l(c.commandMenu.scopeLabel)
|
|
264
|
-
}),
|
|
260
|
+
}), C.map((e) => /* @__PURE__ */ d("button", {
|
|
265
261
|
type: "button",
|
|
266
262
|
className: n.scopePill,
|
|
267
|
-
"data-active": e.id ===
|
|
263
|
+
"data-active": e.id === R.value || void 0,
|
|
268
264
|
onClick: () => {
|
|
269
265
|
r(() => {
|
|
270
|
-
|
|
271
|
-
}),
|
|
266
|
+
R.value = R.value === e.id ? null : e.id, I.value = 0;
|
|
267
|
+
}), k.current?.focus();
|
|
272
268
|
},
|
|
273
269
|
children: [e.prefix && /* @__PURE__ */ u("span", {
|
|
274
270
|
className: n.scopePrefix,
|
|
@@ -280,8 +276,8 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
280
276
|
className: n.list,
|
|
281
277
|
children: [/* @__PURE__ */ u("div", {
|
|
282
278
|
role: "listbox",
|
|
283
|
-
id:
|
|
284
|
-
"aria-label":
|
|
279
|
+
id: D,
|
|
280
|
+
"aria-label": b,
|
|
285
281
|
tabIndex: 0,
|
|
286
282
|
children: H.map((e, r) => /* @__PURE__ */ d("div", {
|
|
287
283
|
role: "group",
|
|
@@ -290,7 +286,7 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
290
286
|
children: [e.heading && /* @__PURE__ */ d("div", {
|
|
291
287
|
className: n.heading,
|
|
292
288
|
"aria-hidden": "true",
|
|
293
|
-
children: [/* @__PURE__ */ u("span", { children: e.heading }),
|
|
289
|
+
children: [/* @__PURE__ */ u("span", { children: e.heading }), F.value !== "" && /* @__PURE__ */ u("span", {
|
|
294
290
|
className: n.count,
|
|
295
291
|
children: l(c.commandMenu.matches, { count: e.items.length })
|
|
296
292
|
})]
|
|
@@ -300,7 +296,7 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
300
296
|
let a = $;
|
|
301
297
|
return /* @__PURE__ */ d("div", {
|
|
302
298
|
ref: (e) => {
|
|
303
|
-
|
|
299
|
+
A.current[a] = e;
|
|
304
300
|
},
|
|
305
301
|
id: K(a),
|
|
306
302
|
role: "option",
|
|
@@ -310,7 +306,7 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
310
306
|
"data-disabled": r.disabled || void 0,
|
|
311
307
|
className: n.option,
|
|
312
308
|
onMouseEnter: () => {
|
|
313
|
-
r.disabled || (
|
|
309
|
+
r.disabled || (I.value = a);
|
|
314
310
|
},
|
|
315
311
|
onClick: () => X(r, "primary"),
|
|
316
312
|
children: [
|
|
@@ -366,14 +362,14 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
366
362
|
}, r.id);
|
|
367
363
|
})]
|
|
368
364
|
}, e.heading ?? `group-${r}`))
|
|
369
|
-
}), U.length === 0 && (
|
|
365
|
+
}), U.length === 0 && (x ? /* @__PURE__ */ d("div", {
|
|
370
366
|
role: "status",
|
|
371
367
|
className: n.empty,
|
|
372
368
|
children: [/* @__PURE__ */ u(e, { size: "sm" }), l(c.commandMenu.loading)]
|
|
373
369
|
}) : /* @__PURE__ */ u("div", {
|
|
374
370
|
role: "status",
|
|
375
371
|
className: n.empty,
|
|
376
|
-
children:
|
|
372
|
+
children: T
|
|
377
373
|
}))]
|
|
378
374
|
}),
|
|
379
375
|
/* @__PURE__ */ d("div", {
|
|
@@ -401,7 +397,7 @@ function v({ open: m, onOpenChange: v, groups: te, placeholder: y, emptyLabel: b
|
|
|
401
397
|
children: "↵"
|
|
402
398
|
}), " open"]
|
|
403
399
|
}),
|
|
404
|
-
|
|
400
|
+
C.length > 0 && /* @__PURE__ */ d("span", {
|
|
405
401
|
className: n.hint,
|
|
406
402
|
children: [/* @__PURE__ */ u(t, {
|
|
407
403
|
size: "sm",
|
|
@@ -1,102 +1,100 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import e from "./dropdown.module.js";
|
|
4
|
-
import { composeRefs as t, createMachine as n,
|
|
5
|
-
import { jsx as
|
|
6
|
-
import { cloneElement as
|
|
4
|
+
import { composeRefs as t, createMachine as n, useEffectPropSignal as r, useMachine as i, useSignal as a, useSignalEffect as o, useSignals as s } from "@cascivo/core";
|
|
5
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
6
|
+
import { cloneElement as u, useRef as d } from "react";
|
|
7
7
|
//#region ../components/src/dropdown/dropdown.tsx
|
|
8
|
-
var
|
|
8
|
+
var f = n({
|
|
9
9
|
initial: "closed",
|
|
10
10
|
states: {
|
|
11
11
|
closed: { on: { OPEN: "open" } },
|
|
12
12
|
open: { on: { CLOSE: "closed" } }
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
let [
|
|
18
|
-
E.value = T;
|
|
19
|
-
let D = f.map((e, t) => ({
|
|
15
|
+
function p({ trigger: n, items: p, onSelect: m, placement: h = "bottom-start", open: g, onOpenChange: _ }) {
|
|
16
|
+
s();
|
|
17
|
+
let [v, y] = i(f), b = d(null), x = d(null), S = d(null), C = d([]), w = a(-1), T = g !== void 0, E = T ? g : v.value === "open", D = r(E), O = p.map((e, t) => ({
|
|
20
18
|
item: e,
|
|
21
19
|
index: t
|
|
22
|
-
})).filter(({ item: e }) => !e.separator && !e.disabled).map(({ index: e }) => e),
|
|
23
|
-
|
|
20
|
+
})).filter(({ item: e }) => !e.separator && !e.disabled).map(({ index: e }) => e), k = (e) => {
|
|
21
|
+
T || y(e ? "OPEN" : "CLOSE"), _?.(e);
|
|
24
22
|
};
|
|
25
|
-
|
|
26
|
-
let e =
|
|
27
|
-
|
|
28
|
-
}),
|
|
29
|
-
|
|
30
|
-
}),
|
|
31
|
-
|
|
32
|
-
}),
|
|
33
|
-
let e =
|
|
23
|
+
o(() => {
|
|
24
|
+
let e = w.value;
|
|
25
|
+
D.value && e >= 0 && C.current[e]?.focus();
|
|
26
|
+
}), o(() => {
|
|
27
|
+
D.value ? w.value = O[0] ?? -1 : w.value = -1;
|
|
28
|
+
}), o(() => {
|
|
29
|
+
D.value ? S.current?.showPopover() : S.current?.hidePopover();
|
|
30
|
+
}), o(() => {
|
|
31
|
+
let e = S.current;
|
|
34
32
|
if (!e) return;
|
|
35
33
|
let t = (e) => {
|
|
36
|
-
e.newState === "closed" &&
|
|
34
|
+
e.newState === "closed" && k(!1);
|
|
37
35
|
};
|
|
38
36
|
return e.addEventListener("toggle", t), () => e.removeEventListener("toggle", t);
|
|
39
37
|
});
|
|
40
|
-
let
|
|
41
|
-
let t =
|
|
42
|
-
!t || t.separator || t.disabled || (
|
|
43
|
-
}, A = (e) => {
|
|
44
|
-
D.length !== 0 && (C.value = D[(D.indexOf(C.value) + e + D.length) % D.length] ?? -1);
|
|
38
|
+
let A = (e) => {
|
|
39
|
+
let t = p[e];
|
|
40
|
+
!t || t.separator || t.disabled || (m?.(t.value), k(!1), x.current?.focus());
|
|
45
41
|
}, j = (e) => {
|
|
42
|
+
O.length !== 0 && (w.value = O[(O.indexOf(w.value) + e + O.length) % O.length] ?? -1);
|
|
43
|
+
}, M = (e) => {
|
|
46
44
|
switch (e.key) {
|
|
47
45
|
case "ArrowDown":
|
|
48
|
-
e.preventDefault(),
|
|
46
|
+
e.preventDefault(), j(1);
|
|
49
47
|
break;
|
|
50
48
|
case "ArrowUp":
|
|
51
|
-
e.preventDefault(),
|
|
49
|
+
e.preventDefault(), j(-1);
|
|
52
50
|
break;
|
|
53
51
|
case "Home":
|
|
54
|
-
e.preventDefault(),
|
|
52
|
+
e.preventDefault(), w.value = O[0] ?? -1;
|
|
55
53
|
break;
|
|
56
54
|
case "End":
|
|
57
|
-
e.preventDefault(),
|
|
55
|
+
e.preventDefault(), w.value = O[O.length - 1] ?? -1;
|
|
58
56
|
break;
|
|
59
57
|
case "Escape":
|
|
60
|
-
e.preventDefault(),
|
|
58
|
+
e.preventDefault(), k(!1), x.current?.focus();
|
|
61
59
|
break;
|
|
62
60
|
case "Enter":
|
|
63
61
|
case " ":
|
|
64
|
-
e.preventDefault(),
|
|
62
|
+
e.preventDefault(), A(w.value);
|
|
65
63
|
break;
|
|
66
64
|
}
|
|
67
|
-
},
|
|
68
|
-
ref: t(
|
|
65
|
+
}, N = n, P = u(N, {
|
|
66
|
+
ref: t(x, N.props.ref),
|
|
69
67
|
onClick: (e) => {
|
|
70
|
-
|
|
68
|
+
N.props.onClick?.(e), k(!E);
|
|
71
69
|
},
|
|
72
70
|
"aria-haspopup": "menu",
|
|
73
|
-
"aria-expanded":
|
|
71
|
+
"aria-expanded": E
|
|
74
72
|
});
|
|
75
|
-
return /* @__PURE__ */
|
|
76
|
-
ref:
|
|
73
|
+
return /* @__PURE__ */ l("div", {
|
|
74
|
+
ref: b,
|
|
77
75
|
className: e.root,
|
|
78
|
-
children: [
|
|
79
|
-
ref:
|
|
76
|
+
children: [P, /* @__PURE__ */ c("div", {
|
|
77
|
+
ref: S,
|
|
80
78
|
popover: "auto",
|
|
81
79
|
role: "menu",
|
|
82
|
-
"data-placement":
|
|
83
|
-
"data-state":
|
|
80
|
+
"data-placement": h,
|
|
81
|
+
"data-state": E ? "open" : "closed",
|
|
84
82
|
className: e.menu,
|
|
85
|
-
onKeyDown:
|
|
86
|
-
children:
|
|
83
|
+
onKeyDown: M,
|
|
84
|
+
children: p.map((t, n) => t.separator ? /* @__PURE__ */ c("div", {
|
|
87
85
|
role: "separator",
|
|
88
86
|
className: e.separator
|
|
89
|
-
}, `sep-${n}`) : /* @__PURE__ */
|
|
87
|
+
}, `sep-${n}`) : /* @__PURE__ */ l("button", {
|
|
90
88
|
type: "button",
|
|
91
89
|
role: "menuitem",
|
|
92
90
|
ref: (e) => {
|
|
93
|
-
|
|
91
|
+
C.current[n] = e;
|
|
94
92
|
},
|
|
95
|
-
tabIndex:
|
|
93
|
+
tabIndex: w.value === n ? 0 : -1,
|
|
96
94
|
disabled: t.disabled,
|
|
97
95
|
className: e.item,
|
|
98
|
-
onClick: () =>
|
|
99
|
-
children: [t.icon && /* @__PURE__ */
|
|
96
|
+
onClick: () => A(n),
|
|
97
|
+
children: [t.icon && /* @__PURE__ */ c("span", {
|
|
100
98
|
className: e.icon,
|
|
101
99
|
"aria-hidden": "true",
|
|
102
100
|
children: t.icon
|
|
@@ -106,4 +104,4 @@ function f({ trigger: n, items: f, onSelect: p, placement: m = "bottom-start", o
|
|
|
106
104
|
});
|
|
107
105
|
}
|
|
108
106
|
//#endregion
|
|
109
|
-
export {
|
|
107
|
+
export { p as Dropdown };
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import e from "./header-panel.module.js";
|
|
4
|
-
import { cn as t,
|
|
4
|
+
import { cn as t, useEffectPropSignal as n, useSignalEffect as r, useSignals as i } from "@cascivo/core";
|
|
5
5
|
import { builtin as a, t as o } from "@cascivo/i18n";
|
|
6
6
|
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
7
7
|
import { useRef as l } from "react";
|
|
8
8
|
//#region ../components/src/header-panel/header-panel.tsx
|
|
9
9
|
function u({ open: u, onClose: d, label: f, children: p, labels: m, className: h }) {
|
|
10
10
|
i();
|
|
11
|
-
let g = l(null), _ = l(null), v = n(u);
|
|
12
|
-
v.value = u;
|
|
13
|
-
let y = l(d);
|
|
11
|
+
let g = l(null), _ = l(null), v = n(u), y = l(d);
|
|
14
12
|
return y.current = d, r(() => {
|
|
15
13
|
let e = g.current;
|
|
16
14
|
if (e) if (v.value) {
|
|
@@ -5,16 +5,16 @@ import { Slot as t, cn as n } from "@cascivo/core";
|
|
|
5
5
|
import { jsx as r } from "react/jsx-runtime";
|
|
6
6
|
import { forwardRef as i } from "react";
|
|
7
7
|
//#region ../components/src/icon-button/icon-button.tsx
|
|
8
|
-
var a = i(function({ label: i,
|
|
9
|
-
return /* @__PURE__ */ r(
|
|
10
|
-
type:
|
|
11
|
-
"aria-label": i,
|
|
12
|
-
"data-size":
|
|
13
|
-
"data-variant":
|
|
14
|
-
className: n(e.iconButton,
|
|
15
|
-
ref:
|
|
16
|
-
...
|
|
17
|
-
children:
|
|
8
|
+
var a = i(function({ label: i, ariaLabel: a, icon: o, size: s = "md", variant: c = "ghost", asChild: l = !1, className: u, children: d, ...f }, p) {
|
|
9
|
+
return /* @__PURE__ */ r(l ? t : "button", {
|
|
10
|
+
type: l ? void 0 : "button",
|
|
11
|
+
"aria-label": i ?? a,
|
|
12
|
+
"data-size": s,
|
|
13
|
+
"data-variant": c,
|
|
14
|
+
className: n(e.iconButton, u),
|
|
15
|
+
ref: p,
|
|
16
|
+
...f,
|
|
17
|
+
children: d ?? o
|
|
18
18
|
});
|
|
19
19
|
});
|
|
20
20
|
//#endregion
|