@solibo/solibo-ui 0.5.16 → 1.0.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 -0
- package/dist/assets/index.css +1 -1
- package/dist/assets/index10.css +1 -1
- package/dist/assets/index11.css +1 -1
- package/dist/assets/index12.css +1 -1
- package/dist/assets/index13.css +1 -1
- package/dist/assets/index14.css +1 -1
- package/dist/assets/index15.css +1 -1
- package/dist/assets/index16.css +1 -1
- package/dist/assets/index17.css +1 -1
- package/dist/assets/index18.css +1 -1
- package/dist/assets/index19.css +1 -1
- package/dist/assets/index2.css +1 -1
- package/dist/assets/index20.css +0 -1
- package/dist/assets/index21.css +1 -1
- package/dist/assets/index22.css +1 -1
- package/dist/assets/index23.css +1 -1
- package/dist/assets/index24.css +1 -1
- package/dist/assets/index25.css +1 -1
- package/dist/assets/index26.css +1 -1
- package/dist/assets/index27.css +1 -1
- package/dist/assets/index28.css +1 -1
- package/dist/assets/index29.css +1 -1
- package/dist/assets/index3.css +1 -1
- package/dist/assets/index30.css +1 -1
- package/dist/assets/index31.css +1 -1
- package/dist/assets/index32.css +1 -1
- package/dist/assets/index33.css +1 -1
- package/dist/assets/index34.css +1 -1
- package/dist/assets/index35.css +1 -1
- package/dist/assets/index36.css +1 -1
- package/dist/assets/index37.css +1 -1
- package/dist/assets/index38.css +1 -1
- package/dist/assets/index39.css +1 -1
- package/dist/assets/index4.css +1 -1
- package/dist/assets/index40.css +1 -1
- package/dist/assets/index41.css +1 -1
- package/dist/assets/index42.css +1 -1
- package/dist/assets/index43.css +1 -1
- package/dist/assets/index44.css +1 -1
- package/dist/assets/index45.css +1 -1
- package/dist/assets/index46.css +1 -1
- package/dist/assets/index47.css +1 -1
- package/dist/assets/index48.css +1 -0
- package/dist/assets/index49.css +1 -0
- package/dist/assets/index5.css +1 -1
- package/dist/assets/index50.css +1 -0
- package/dist/assets/index51.css +1 -0
- package/dist/assets/index6.css +1 -1
- package/dist/assets/index7.css +1 -0
- package/dist/assets/index8.css +1 -1
- package/dist/assets/index9.css +1 -1
- package/dist/components/app-link/index.cjs +1 -1
- package/dist/components/app-link/index.cjs.map +1 -1
- package/dist/components/app-link/index.js +3 -3
- package/dist/components/app-link/index.js.map +1 -1
- package/dist/components/aside/index.cjs +1 -1
- package/dist/components/aside/index.cjs.map +1 -1
- package/dist/components/aside/index.js +28 -14
- package/dist/components/aside/index.js.map +1 -1
- package/dist/components/avatar/index.cjs +2 -0
- package/dist/components/avatar/index.cjs.map +1 -0
- package/dist/components/avatar/index.js +53 -0
- package/dist/components/avatar/index.js.map +1 -0
- package/dist/components/badge/index.cjs +1 -1
- package/dist/components/badge/index.cjs.map +1 -1
- package/dist/components/badge/index.js +39 -19
- package/dist/components/badge/index.js.map +1 -1
- package/dist/components/banner/index.cjs +1 -1
- package/dist/components/banner/index.js +8 -8
- package/dist/components/branding/index.cjs +1 -1
- package/dist/components/branding/index.cjs.map +1 -1
- package/dist/components/branding/index.js +8 -7
- package/dist/components/branding/index.js.map +1 -1
- package/dist/components/button/index.cjs +1 -1
- package/dist/components/button/index.cjs.map +1 -1
- package/dist/components/button/index.js +28 -24
- package/dist/components/button/index.js.map +1 -1
- package/dist/components/card/index.cjs +2 -0
- package/dist/components/card/index.cjs.map +1 -0
- package/dist/components/card/index.js +49 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/checkbox/index.cjs +1 -1
- package/dist/components/checkbox/index.cjs.map +1 -1
- package/dist/components/checkbox/index.js +3 -3
- package/dist/components/checkbox/index.js.map +1 -1
- package/dist/components/chip/index.cjs +1 -1
- package/dist/components/chip/index.cjs.map +1 -1
- package/dist/components/chip/index.js +12 -12
- package/dist/components/chip/index.js.map +1 -1
- package/dist/components/collapsible/index.cjs +2 -0
- package/dist/components/collapsible/index.cjs.map +1 -0
- package/dist/components/collapsible/index.js +41 -0
- package/dist/components/collapsible/index.js.map +1 -0
- package/dist/components/controls/index.cjs +1 -1
- package/dist/components/controls/index.cjs.map +1 -1
- package/dist/components/controls/index.js +33 -31
- package/dist/components/controls/index.js.map +1 -1
- package/dist/components/croppable/index.cjs +2 -0
- package/dist/components/croppable/index.cjs.map +1 -0
- package/dist/components/{_croppable → croppable}/index.js +129 -129
- package/dist/components/croppable/index.js.map +1 -0
- package/dist/components/dialog/index.cjs +1 -1
- package/dist/components/dialog/index.cjs.map +1 -1
- package/dist/components/dialog/index.js +21 -18
- package/dist/components/dialog/index.js.map +1 -1
- package/dist/components/dropdown/index.cjs +2 -0
- package/dist/components/dropdown/index.cjs.map +1 -0
- package/dist/components/dropdown/index.js +212 -0
- package/dist/components/dropdown/index.js.map +1 -0
- package/dist/components/dropzone/index.cjs +2 -0
- package/dist/components/dropzone/index.cjs.map +1 -0
- package/dist/components/{_dropzone → dropzone}/index.js +28 -28
- package/dist/components/dropzone/index.js.map +1 -0
- package/dist/components/editor/index.cjs +58 -0
- package/dist/components/editor/index.cjs.map +1 -0
- package/dist/components/{_editor → editor}/index.js +2185 -2134
- package/dist/components/editor/index.js.map +1 -0
- package/dist/components/empty-state/index.cjs +2 -0
- package/dist/components/empty-state/index.cjs.map +1 -0
- package/dist/components/empty-state/index.js +17 -0
- package/dist/components/empty-state/index.js.map +1 -0
- package/dist/components/fieldset/index.cjs +2 -0
- package/dist/components/fieldset/index.cjs.map +1 -0
- package/dist/components/fieldset/index.js +12 -0
- package/dist/components/fieldset/index.js.map +1 -0
- package/dist/components/figure/index.cjs +1 -1
- package/dist/components/figure/index.cjs.map +1 -1
- package/dist/components/figure/index.js +11 -17
- package/dist/components/figure/index.js.map +1 -1
- package/dist/components/file/index.cjs +1 -1
- package/dist/components/file/index.cjs.map +1 -1
- package/dist/components/file/index.js +46 -22
- package/dist/components/file/index.js.map +1 -1
- package/dist/components/footer/index.cjs +1 -1
- package/dist/components/footer/index.js +3 -3
- package/dist/components/form/index.cjs +1 -1
- package/dist/components/form/index.cjs.map +1 -1
- package/dist/components/form/index.js +8 -8
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/graph/index.cjs +1 -1
- package/dist/components/graph/index.js +1 -1
- package/dist/components/group/index.cjs +1 -1
- package/dist/components/group/index.js +3 -3
- package/dist/components/header/index.cjs +1 -1
- package/dist/components/header/index.cjs.map +1 -1
- package/dist/components/header/index.js +10 -8
- package/dist/components/header/index.js.map +1 -1
- package/dist/components/icon/index.cjs +1 -1
- package/dist/components/icon/index.cjs.map +1 -1
- package/dist/components/icon/index.js +27 -33
- package/dist/components/icon/index.js.map +1 -1
- package/dist/components/iframe/index.cjs +2 -0
- package/dist/components/iframe/index.cjs.map +1 -0
- package/dist/components/iframe/index.js +93 -0
- package/dist/components/iframe/index.js.map +1 -0
- package/dist/components/image/index.cjs +1 -1
- package/dist/components/image/index.js +1 -1
- package/dist/components/input/index.cjs +1 -1
- package/dist/components/input/index.cjs.map +1 -1
- package/dist/components/input/index.js +7 -53
- package/dist/components/input/index.js.map +1 -1
- package/dist/components/link/index.cjs +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/list/index.cjs +1 -1
- package/dist/components/list/index.cjs.map +1 -1
- package/dist/components/list/index.js +38 -33
- package/dist/components/list/index.js.map +1 -1
- package/dist/components/loading/index.cjs +1 -1
- package/dist/components/loading/index.cjs.map +1 -1
- package/dist/components/loading/index.js +13 -13
- package/dist/components/loading/index.js.map +1 -1
- package/dist/components/menu/index.cjs +2 -0
- package/dist/components/menu/index.cjs.map +1 -0
- package/dist/components/{_menu → menu}/index.js +30 -29
- package/dist/components/menu/index.js.map +1 -0
- package/dist/components/message/index.cjs +1 -1
- package/dist/components/message/index.cjs.map +1 -1
- package/dist/components/message/index.js +36 -17
- package/dist/components/message/index.js.map +1 -1
- package/dist/components/messages/index.cjs +2 -0
- package/dist/components/messages/index.cjs.map +1 -0
- package/dist/components/messages/index.js +40 -0
- package/dist/components/messages/index.js.map +1 -0
- package/dist/components/nav/index.cjs +1 -1
- package/dist/components/nav/index.cjs.map +1 -1
- package/dist/components/nav/index.js +24 -22
- package/dist/components/nav/index.js.map +1 -1
- package/dist/components/object/index.cjs +1 -1
- package/dist/components/object/index.js +3 -3
- package/dist/components/popover/index.cjs +1 -1
- package/dist/components/popover/index.cjs.map +1 -1
- package/dist/components/popover/index.js +16 -16
- package/dist/components/popover/index.js.map +1 -1
- package/dist/components/portal/index.cjs +2 -0
- package/dist/components/portal/index.cjs.map +1 -0
- package/dist/components/portal/index.js +30 -0
- package/dist/components/portal/index.js.map +1 -0
- package/dist/components/search/index.cjs +2 -0
- package/dist/components/search/index.cjs.map +1 -0
- package/dist/components/search/index.js +62 -0
- package/dist/components/search/index.js.map +1 -0
- package/dist/components/select/index.cjs +1 -1
- package/dist/components/select/index.js +3 -3
- package/dist/components/sortable/index.cjs +2 -0
- package/dist/components/{_sortable/index.js.map → sortable/index.cjs.map} +1 -1
- package/dist/components/{_sortable → sortable}/index.js +1 -1
- package/dist/components/sortable/index.js.map +1 -0
- package/dist/components/table/index.cjs +1 -1
- package/dist/components/table/index.cjs.map +1 -1
- package/dist/components/table/index.js +15 -15
- package/dist/components/table/index.js.map +1 -1
- package/dist/components/textarea/index.cjs +1 -1
- package/dist/components/textarea/index.cjs.map +1 -1
- package/dist/components/textarea/index.js +20 -20
- package/dist/components/textarea/index.js.map +1 -1
- package/dist/components/toast/index.cjs +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toasts/index.cjs +2 -0
- package/dist/components/{_toasts/index.js.map → toasts/index.cjs.map} +1 -1
- package/dist/components/{_toasts → toasts}/index.js +1 -1
- package/dist/components/toasts/index.js.map +1 -0
- package/dist/components/toggle/index.cjs +1 -1
- package/dist/components/toggle/index.js +1 -1
- package/dist/components/toolbar/index.cjs +1 -1
- package/dist/components/toolbar/index.js +7 -7
- package/dist/components/widget/index.cjs +2 -0
- package/dist/components/widget/index.cjs.map +1 -0
- package/dist/components/{_widget → widget}/index.js +2 -2
- package/dist/components/widget/index.js.map +1 -0
- package/dist/icons-CKzd_L4D.js +149 -0
- package/dist/icons-CKzd_L4D.js.map +1 -0
- package/dist/icons-DYCSlAoX.cjs +2 -0
- package/dist/icons-DYCSlAoX.cjs.map +1 -0
- package/dist/index-BOkkyMbX.cjs +2 -0
- package/dist/index-BOkkyMbX.cjs.map +1 -0
- package/dist/index-D-AyCDg7.js +72 -0
- package/dist/index-D-AyCDg7.js.map +1 -0
- package/dist/index-DS2cY2g4.js +73 -0
- package/dist/index-DS2cY2g4.js.map +1 -0
- package/dist/index-iItPktfX.cjs +2 -0
- package/dist/index-iItPktfX.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +269 -92
- package/dist/index.js +98 -93
- package/dist/index.js.map +1 -1
- package/dist/tokens.css +60 -4
- package/dist/tokens.json +894 -46
- package/dist/use-touched-DXIJVVzz.js +14 -0
- package/dist/use-touched-DXIJVVzz.js.map +1 -0
- package/dist/use-touched-D_TJ8wDc.cjs +2 -0
- package/dist/use-touched-D_TJ8wDc.cjs.map +1 -0
- package/package.json +6 -3
- package/dist/assets/styles.css +0 -1
- package/dist/components/_avatar/index.cjs +0 -2
- package/dist/components/_avatar/index.cjs.map +0 -1
- package/dist/components/_avatar/index.js +0 -18
- package/dist/components/_avatar/index.js.map +0 -1
- package/dist/components/_card/index.cjs +0 -2
- package/dist/components/_card/index.cjs.map +0 -1
- package/dist/components/_card/index.js +0 -47
- package/dist/components/_card/index.js.map +0 -1
- package/dist/components/_collapsible/index.cjs +0 -2
- package/dist/components/_collapsible/index.cjs.map +0 -1
- package/dist/components/_collapsible/index.js +0 -23
- package/dist/components/_collapsible/index.js.map +0 -1
- package/dist/components/_croppable/index.cjs +0 -2
- package/dist/components/_croppable/index.cjs.map +0 -1
- package/dist/components/_croppable/index.js.map +0 -1
- package/dist/components/_dropdown/index.cjs +0 -2
- package/dist/components/_dropdown/index.cjs.map +0 -1
- package/dist/components/_dropdown/index.js +0 -188
- package/dist/components/_dropdown/index.js.map +0 -1
- package/dist/components/_dropzone/index.cjs +0 -2
- package/dist/components/_dropzone/index.cjs.map +0 -1
- package/dist/components/_dropzone/index.js.map +0 -1
- package/dist/components/_editor/index.cjs +0 -58
- package/dist/components/_editor/index.cjs.map +0 -1
- package/dist/components/_editor/index.js.map +0 -1
- package/dist/components/_menu/index.cjs +0 -2
- package/dist/components/_menu/index.cjs.map +0 -1
- package/dist/components/_menu/index.js.map +0 -1
- package/dist/components/_messages/index.cjs +0 -2
- package/dist/components/_messages/index.cjs.map +0 -1
- package/dist/components/_messages/index.js +0 -37
- package/dist/components/_messages/index.js.map +0 -1
- package/dist/components/_portal/index.cjs +0 -2
- package/dist/components/_portal/index.cjs.map +0 -1
- package/dist/components/_portal/index.js +0 -26
- package/dist/components/_portal/index.js.map +0 -1
- package/dist/components/_sortable/index.cjs +0 -2
- package/dist/components/_sortable/index.cjs.map +0 -1
- package/dist/components/_toasts/index.cjs +0 -2
- package/dist/components/_toasts/index.cjs.map +0 -1
- package/dist/components/_widget/index.cjs +0 -2
- package/dist/components/_widget/index.cjs.map +0 -1
- package/dist/components/_widget/index.js.map +0 -1
- package/dist/components/accordion/index.cjs +0 -2
- package/dist/components/accordion/index.cjs.map +0 -1
- package/dist/components/accordion/index.js +0 -21
- package/dist/components/accordion/index.js.map +0 -1
- package/dist/icons-D6XjzxSX.js +0 -81
- package/dist/icons-D6XjzxSX.js.map +0 -1
- package/dist/icons-s-lGsxio.cjs +0 -2
- package/dist/icons-s-lGsxio.cjs.map +0 -1
- package/dist/index-BMYV_5ZN.js +0 -42
- package/dist/index-BMYV_5ZN.js.map +0 -1
- package/dist/index-FM_lJcIM.cjs +0 -2
- package/dist/index-FM_lJcIM.cjs.map +0 -1
- package/dist/styles.module-BON5Bi9g.cjs +0 -2
- package/dist/styles.module-BON5Bi9g.cjs.map +0 -1
- package/dist/styles.module-DbpbMZGd.js +0 -10
- package/dist/styles.module-DbpbMZGd.js.map +0 -1
- package/dist/utils--n2yqjCy.js +0 -45
- package/dist/utils--n2yqjCy.js.map +0 -1
- package/dist/utils-DBzf7CFq.cjs +0 -2
- package/dist/utils-DBzf7CFq.cjs.map +0 -1
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import { jsx as o, jsxs as h } from "react/jsx-runtime";
|
|
2
|
-
import { t as
|
|
3
|
-
import { useRef as
|
|
4
|
-
import { Button as
|
|
2
|
+
import { t as x } from "../../classix-DG18itHa.js";
|
|
3
|
+
import { useRef as _, useCallback as b, useEffect as w } from "react";
|
|
4
|
+
import { Button as v } from "../button/index.js";
|
|
5
5
|
import { Icon as d } from "../icon/index.js";
|
|
6
|
-
import { List as
|
|
7
|
-
import { Popover as
|
|
8
|
-
import '../../assets/
|
|
9
|
-
list:
|
|
10
|
-
item:
|
|
11
|
-
|
|
6
|
+
import { List as y } from "../list/index.js";
|
|
7
|
+
import { Popover as D } from "../popover/index.js";
|
|
8
|
+
import '../../assets/index15.css';const k = "_list_z7awx_3", z = "_item_z7awx_15", A = "_active_z7awx_38", B = "_danger_z7awx_47", c = {
|
|
9
|
+
list: k,
|
|
10
|
+
item: z,
|
|
11
|
+
active: A,
|
|
12
|
+
danger: B
|
|
12
13
|
};
|
|
13
|
-
function
|
|
14
|
-
return
|
|
14
|
+
function C(a) {
|
|
15
|
+
return a.filter((t) => !!(t && !t.disabled));
|
|
15
16
|
}
|
|
16
|
-
const
|
|
17
|
-
close:
|
|
17
|
+
const E = ({
|
|
18
|
+
close: a,
|
|
18
19
|
initialFocus: t,
|
|
19
20
|
items: u,
|
|
20
|
-
menuAccessibleLabel:
|
|
21
|
-
onItemSelect:
|
|
21
|
+
menuAccessibleLabel: f,
|
|
22
|
+
onItemSelect: s
|
|
22
23
|
}) => {
|
|
23
|
-
const l =
|
|
24
|
-
const n =
|
|
24
|
+
const l = _([]), r = b((e) => {
|
|
25
|
+
const n = C(l.current);
|
|
25
26
|
if (n.length === 0)
|
|
26
27
|
return;
|
|
27
28
|
if (e === "first") {
|
|
@@ -35,7 +36,7 @@ const I = ({
|
|
|
35
36
|
const i = n.indexOf(document.activeElement), g = e === "next" ? (i + 1) % n.length : (i - 1 + n.length) % n.length;
|
|
36
37
|
n[g].focus();
|
|
37
38
|
}, []);
|
|
38
|
-
|
|
39
|
+
w(() => {
|
|
39
40
|
r(t ?? "first");
|
|
40
41
|
}, [r, t]);
|
|
41
42
|
const m = (e) => {
|
|
@@ -54,25 +55,25 @@ const I = ({
|
|
|
54
55
|
e.key === "End" && (e.preventDefault(), r("last"));
|
|
55
56
|
}, p = (e) => {
|
|
56
57
|
var n;
|
|
57
|
-
(n = e.onSelect) == null || n.call(e),
|
|
58
|
+
(n = e.onSelect) == null || n.call(e), s == null || s(e), a();
|
|
58
59
|
};
|
|
59
|
-
return /* @__PURE__ */ o(
|
|
60
|
+
return /* @__PURE__ */ o(y, { "aria-label": f, className: c.list, onKeyDown: m, role: "menu", "data-component": "menupanel", children: u.map((e, n) => /* @__PURE__ */ o("li", { role: "none", children: /* @__PURE__ */ h(v, { "aria-current": e.isActive ? "true" : void 0, "aria-label": e.accessibleLabel, className: x(c.item, e.isActive && c.active, e.isDanger && c.danger), disabled: e.disabled, onClick: () => p(e), ref: (i) => {
|
|
60
61
|
l.current[n] = i;
|
|
61
|
-
}, role: "menuitem", variant: "
|
|
62
|
-
e.icon && /* @__PURE__ */ o(d, { fill: !0, gap: "right", name: e.icon, size: "small"
|
|
62
|
+
}, role: "menuitem", variant: "tertiary", children: [
|
|
63
|
+
e.icon && /* @__PURE__ */ o(d, { fill: !0, gap: "right", name: e.icon, size: "small" }),
|
|
63
64
|
/* @__PURE__ */ o("span", { children: e.label })
|
|
64
65
|
] }) }, e.id ?? n)) });
|
|
65
|
-
},
|
|
66
|
-
items:
|
|
66
|
+
}, N = ({
|
|
67
|
+
items: a,
|
|
67
68
|
menuAccessibleLabel: t = "Menu",
|
|
68
69
|
onItemSelect: u,
|
|
69
|
-
position:
|
|
70
|
-
triggerAccessibleLabel:
|
|
71
|
-
}) => /* @__PURE__ */ o(
|
|
70
|
+
position: f = "left",
|
|
71
|
+
triggerAccessibleLabel: s = "Open menu"
|
|
72
|
+
}) => /* @__PURE__ */ o(D, { position: f, triggerAccessibleLabel: s, triggerAriaHasPopup: "menu", triggerButtonContent: /* @__PURE__ */ o(d, { name: "dots", size: "medium" }), "data-component": "menu", children: ({
|
|
72
73
|
close: l,
|
|
73
74
|
initialFocus: r
|
|
74
|
-
}) => /* @__PURE__ */ o(
|
|
75
|
+
}) => /* @__PURE__ */ o(E, { close: l, initialFocus: r, items: a, menuAccessibleLabel: t, onItemSelect: u }) });
|
|
75
76
|
export {
|
|
76
|
-
|
|
77
|
+
N as Menu
|
|
77
78
|
};
|
|
78
79
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/menu/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { Button } from '@/components/button';\nimport { Icon } from '@/components/icon';\nimport { type IconName } from '@/components/icon/icons';\nimport { List } from '@/components/list';\nimport { Popover, type PopoverInitialFocus, type PopoverRenderProps } from '@/components/popover';\n\nimport styles from './styles.module.css';\n\nexport type MenuItem = {\n accessibleLabel?: string;\n disabled?: boolean;\n icon?: IconName;\n id?: string;\n isActive?: boolean;\n isDanger?: boolean;\n label: React.ReactNode;\n onSelect?: () => void;\n};\n\nexport type MenuProps = {\n items: MenuItem[];\n menuAccessibleLabel?: string;\n onItemSelect?: (item: MenuItem) => void;\n position?: 'left' | 'right';\n triggerAccessibleLabel?: string;\n};\n\ntype MenuFocusTarget = 'first' | 'last' | 'next' | 'previous';\n\ntype MenuPanelProps = Pick<MenuProps, 'items' | 'menuAccessibleLabel' | 'onItemSelect'> & {\n close: PopoverRenderProps['close'];\n initialFocus?: PopoverInitialFocus;\n};\n\nfunction getFocusableItems(items: Array<HTMLButtonElement | null>) {\n return items.filter((item): item is HTMLButtonElement => Boolean(item && !item.disabled));\n}\n\nconst MenuPanel = ({\n close,\n initialFocus,\n items,\n menuAccessibleLabel,\n onItemSelect,\n}: MenuPanelProps) => {\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const focusItem = useCallback((target: MenuFocusTarget) => {\n const focusableItems = getFocusableItems(itemRefs.current);\n\n if (focusableItems.length === 0) {\n return;\n }\n\n if (target === 'first') {\n focusableItems[0].focus();\n return;\n }\n\n if (target === 'last') {\n focusableItems[focusableItems.length - 1].focus();\n return;\n }\n\n const currentIndex = focusableItems.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex =\n target === 'next'\n ? (currentIndex + 1) % focusableItems.length\n : (currentIndex - 1 + focusableItems.length) % focusableItems.length;\n\n focusableItems[nextIndex].focus();\n }, []);\n\n useEffect(() => {\n focusItem(initialFocus ?? 'first');\n }, [focusItem, initialFocus]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLUListElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n focusItem('next');\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n focusItem('previous');\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n focusItem('first');\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n focusItem('last');\n }\n };\n\n const handleItemSelect = (item: MenuItem) => {\n item.onSelect?.();\n onItemSelect?.(item);\n close();\n };\n\n return (\n <List\n aria-label={menuAccessibleLabel}\n className={styles.list}\n onKeyDown={handleKeyDown}\n role='menu'\n >\n {items.map((item, index) => (\n <li\n key={item.id ?? index}\n role='none'\n >\n <Button\n aria-current={item.isActive ? 'true' : undefined}\n aria-label={item.accessibleLabel}\n className={cx(\n styles.item,\n item.isActive && styles.active,\n item.isDanger && styles.danger\n )}\n disabled={item.disabled}\n onClick={() => handleItemSelect(item)}\n ref={(node) => {\n itemRefs.current[index] = node;\n }}\n role='menuitem'\n variant='tertiary'\n >\n {item.icon && (\n <Icon\n fill\n gap='right'\n name={item.icon}\n size='small'\n />\n )}\n <span>{item.label}</span>\n </Button>\n </li>\n ))}\n </List>\n );\n};\n\nexport const Menu = ({\n items,\n menuAccessibleLabel = 'Menu',\n onItemSelect,\n position = 'left',\n triggerAccessibleLabel = 'Open menu',\n}: MenuProps) => {\n return (\n <Popover\n position={position}\n triggerAccessibleLabel={triggerAccessibleLabel}\n triggerAriaHasPopup='menu'\n triggerButtonContent={\n <Icon\n name='dots'\n size='medium'\n />\n }\n >\n {({ close, initialFocus }) => (\n <MenuPanel\n close={close}\n initialFocus={initialFocus}\n items={items}\n menuAccessibleLabel={menuAccessibleLabel}\n onItemSelect={onItemSelect}\n />\n )}\n </Popover>\n );\n};\n"],"names":["getFocusableItems","items","filter","item","Boolean","disabled","MenuPanel","close","initialFocus","menuAccessibleLabel","onItemSelect","itemRefs","useRef","focusItem","useCallback","target","focusableItems","current","length","focus","currentIndex","indexOf","document","activeElement","nextIndex","useEffect","handleKeyDown","event","key","preventDefault","handleItemSelect","onSelect","jsx","List","styles","list","map","index","jsxs","Button","isActive","undefined","accessibleLabel","cx","active","isDanger","danger","node","icon","Icon","label","id","Menu","position","triggerAccessibleLabel","Popover"],"mappings":";;;;;;;;;;;;;AAqCA,SAASA,EAAkBC,GAAwC;AACjE,SAAOA,EAAMC,OAAO,CAACC,MAAoCC,GAAQD,KAAQ,CAACA,EAAKE,SAAS;AAC1F;AAEA,MAAMC,IAAYA,CAAC;AAAA,EACjBC,OAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAP,OAAAA;AAAAA,EACAQ,qBAAAA;AAAAA,EACAC,cAAAA;AACc,MAAM;AACpB,QAAMC,IAAWC,EAAwC,EAAE,GAErDC,IAAYC,EAAY,CAACC,MAA4B;AACzD,UAAMC,IAAiBhB,EAAkBW,EAASM,OAAO;AAEzD,QAAID,EAAeE,WAAW;AAC5B;AAGF,QAAIH,MAAW,SAAS;AACtBC,MAAAA,EAAe,CAAC,EAAEG,MAAAA;AAClB;AAAA,IACF;AAEA,QAAIJ,MAAW,QAAQ;AACrBC,MAAAA,EAAeA,EAAeE,SAAS,CAAC,EAAEC,MAAAA;AAC1C;AAAA,IACF;AAEA,UAAMC,IAAeJ,EAAeK,QAAQC,SAASC,aAAkC,GACjFC,IACJT,MAAW,UACNK,IAAe,KAAKJ,EAAeE,UACnCE,IAAe,IAAIJ,EAAeE,UAAUF,EAAeE;AAElEF,IAAAA,EAAeQ,CAAS,EAAEL,MAAAA;AAAAA,EAC5B,GAAG,CAAA,CAAE;AAELM,EAAAA,EAAU,MAAM;AACdZ,IAAAA,EAAUL,KAAgB,OAAO;AAAA,EACnC,GAAG,CAACK,GAAWL,CAAY,CAAC;AAE5B,QAAMkB,IAAgBA,CAACC,MAAiD;AACtE,QAAIA,EAAMC,QAAQ,aAAa;AAC7BD,MAAAA,EAAME,eAAAA,GACNhB,EAAU,MAAM;AAChB;AAAA,IACF;AAEA,QAAIc,EAAMC,QAAQ,WAAW;AAC3BD,MAAAA,EAAME,eAAAA,GACNhB,EAAU,UAAU;AACpB;AAAA,IACF;AAEA,QAAIc,EAAMC,QAAQ,QAAQ;AACxBD,MAAAA,EAAME,eAAAA,GACNhB,EAAU,OAAO;AACjB;AAAA,IACF;AAEA,IAAIc,EAAMC,QAAQ,UAChBD,EAAME,eAAAA,GACNhB,EAAU,MAAM;AAAA,EAEpB,GAEMiB,IAAmBA,CAAC3B,MAAmB;;AAC3CA,KAAAA,IAAAA,EAAK4B,aAAL5B,QAAAA,EAAAA,KAAAA,IACAO,KAAAA,QAAAA,EAAeP,IACfI,EAAAA;AAAAA,EACF;AAEA,SACE,gBAAAyB,EAACC,GAAA,EACC,cAAYxB,GACZ,WAAWyB,EAAOC,MAClB,WAAWT,GACX,MAAK,QAAM,kBAAA,aAEVzB,UAAAA,EAAMmC,IAAI,CAACjC,GAAMkC,MAChB,gBAAAL,EAAC,MAAA,EAEC,MAAK,QAEL,UAAA,gBAAAM,EAACC,GAAA,EACC,gBAAcpC,EAAKqC,WAAW,SAASC,QACvC,cAAYtC,EAAKuC,iBACjB,WAAWC,EACTT,EAAO/B,MACPA,EAAKqC,YAAYN,EAAOU,QACxBzC,EAAK0C,YAAYX,EAAOY,MAC1B,GACA,UAAU3C,EAAKE,UACf,SAAS,MAAMyB,EAAiB3B,CAAI,GACpC,KAAM4C,CAAAA,MAAS;AACbpC,IAAAA,EAASM,QAAQoB,CAAK,IAAIU;AAAAA,EAC5B,GACA,MAAK,YACL,SAAQ,YAEP5C,UAAAA;AAAAA,IAAAA,EAAK6C,QACJ,gBAAAhB,EAACiB,GAAA,EACC,MAAI,IACJ,KAAI,SACJ,MAAM9C,EAAK6C,MACX,MAAK,QAAA,CAAO;AAAA,IAGhB,gBAAAhB,EAAC,QAAA,EAAM7B,UAAAA,EAAK+C,MAAAA,CAAM;AAAA,EAAA,EAAA,CACpB,EAAA,GA5BK/C,EAAKgD,MAAMd,CA6BlB,CACD,EAAA,CACH;AAEJ,GAEae,IAAOA,CAAC;AAAA,EACnBnD,OAAAA;AAAAA,EACAQ,qBAAAA,IAAsB;AAAA,EACtBC,cAAAA;AAAAA,EACA2C,UAAAA,IAAW;AAAA,EACXC,wBAAAA,IAAyB;AAChB,wBAENC,GAAA,EACC,UAAAF,GACA,wBAAAC,GACA,qBAAoB,QACpB,sBACE,gBAAAtB,EAACiB,GAAA,EACC,MAAK,QACL,MAAK,SAAA,IAER,kBAAA,QAEA,UAAA,CAAC;AAAA,EAAE1C,OAAAA;AAAAA,EAAOC,cAAAA;AAAAA,wBACRF,GAAA,EACC,OAAAC,GACA,cAAAC,GACA,OAAAP,GACA,qBAAAQ,GACA,cAAAC,GAA2B,GAGjC;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index14.css');const e=require("react/jsx-runtime"),p=require("../../classix-5H4IWnMA.cjs"),v=require("../avatar/index.cjs"),x=require("../icon/index.cjs"),b="_message_ugbdy_1",y="_timestamp_ugbdy_78",j="_attachments_ugbdy_83",h="_preview_ugbdy_101",s={"message-group":"_message-group_ugbdy_1",message:b,timestamp:y,attachments:j,preview:h},f=({appearance:m="default",attachments:i,author:a,authorColor:r,authorImageUrl:o,authorRole:d,content:g,iconName:l="info",id:_,preview:u,timestamp:c,type:t="default"})=>{const n=c?new Date(c):void 0;return e.jsxs("div",{className:s["message-group"],"data-message-type":t,"data-component":"message",children:[a&&e.jsx(v.Avatar,{accessibleLabel:a,color:r,imageUrl:o,name:a,role:d}),e.jsxs("div",{className:p.t(s.message,u&&s.preview),"data-appearance":m,"data-id":_,"data-type":t,children:[t=="system"&&e.jsx(x.Icon,{fill:!0,gap:"right",name:l}),g]}),i&&e.jsx("div",{className:s.attachments,children:i}),n&&e.jsx("time",{className:s.timestamp,dateTime:n.toISOString(),children:n.toLocaleString()})]})};exports.Message=f;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/message/index.tsx"],"sourcesContent":["import cx from 'classix';\n\nimport { IconName } from '@/components/icon/icons.ts';\n\nimport { Icon } from '../icon';\nimport styles from './styles.module.css';\n\nexport type MessageOptions = {\n content: React.ReactNode;\n iconName?: IconName;\n id: string;\n preview?: boolean;\n type?: 'default' | 'minimal' | 'system' | 'user';\n};\n\nexport const Message = ({\n content,\n iconName = 'info',\n id,\n preview,\n type = 'default',\n}: MessageOptions) => {\n return (\n <div\n className={cx(styles.message, preview && styles.preview)}\n
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/message/index.tsx"],"sourcesContent":["import cx from 'classix';\n\nimport { IconName } from '@/components/icon/icons.ts';\n\nimport { Avatar, type AvatarColor } from '../avatar';\nimport { Icon } from '../icon';\nimport styles from './styles.module.css';\n\nexport type MessageOptions = {\n appearance?: 'default' | 'document' | 'file';\n attachments?: React.ReactNode;\n author?: string;\n authorColor?: AvatarColor;\n authorImageUrl?: string;\n authorRole?: string;\n content: React.ReactNode;\n iconName?: IconName;\n id: string;\n preview?: boolean;\n timestamp?: Date | string;\n type?: 'default' | 'minimal' | 'system' | 'user';\n};\n\nexport const Message = ({\n appearance = 'default',\n attachments,\n author,\n authorColor,\n authorImageUrl,\n authorRole,\n content,\n iconName = 'info',\n id,\n preview,\n timestamp,\n type = 'default',\n}: MessageOptions) => {\n const date = timestamp ? new Date(timestamp) : undefined;\n\n return (\n <div\n className={styles['message-group']}\n data-message-type={type}\n >\n {author && (\n <Avatar\n accessibleLabel={author}\n color={authorColor}\n imageUrl={authorImageUrl}\n name={author}\n role={authorRole}\n />\n )}\n <div\n className={cx(styles.message, preview && styles.preview)}\n data-appearance={appearance}\n data-id={id}\n data-type={type}\n >\n {type == 'system' && (\n <Icon\n fill\n gap='right'\n name={iconName}\n />\n )}\n {content}\n </div>\n {attachments && <div className={styles.attachments}>{attachments}</div>}\n {date && (\n <time\n className={styles.timestamp}\n dateTime={date.toISOString()}\n >\n {date.toLocaleString()}\n </time>\n )}\n </div>\n );\n};\n"],"names":["Message","appearance","attachments","author","authorColor","authorImageUrl","authorRole","content","iconName","id","preview","timestamp","type","date","Date","undefined","jsxs","styles","jsx","Avatar","cx","message","Icon","toISOString","toLocaleString"],"mappings":"sZAuBaA,EAAUA,CAAC,CACtBC,WAAAA,EAAa,UACbC,YAAAA,EACAC,OAAAA,EACAC,YAAAA,EACAC,eAAAA,EACAC,WAAAA,EACAC,QAAAA,EACAC,SAAAA,EAAW,OACXC,GAAAA,EACAC,QAAAA,EACAC,UAAAA,EACAC,KAAAA,EAAO,SACO,IAAM,CACpB,MAAMC,EAAOF,EAAY,IAAIG,KAAKH,CAAS,EAAII,OAE/C,OACEC,OAAC,OACC,UAAWC,EAAO,eAAe,EACjC,oBAAmBL,EAAK,iBAAA,UAEvBT,SAAAA,CAAAA,GACCe,EAAAA,IAACC,EAAAA,OAAA,CACC,gBAAiBhB,EACjB,MAAOC,EACP,SAAUC,EACV,KAAMF,EACN,KAAMG,CAAAA,CAAW,EAGrBU,EAAAA,KAAC,MAAA,CACC,UAAWI,EAAAA,EAAGH,EAAOI,QAASX,GAAWO,EAAOP,OAAO,EACvD,kBAAiBT,EACjB,UAASQ,EACT,YAAWG,EAEVA,SAAAA,CAAAA,GAAQ,gBACNU,EAAAA,KAAA,CACC,KAAI,GACJ,IAAI,QACJ,KAAMd,CAAAA,CAAS,EAGlBD,CAAAA,EACH,EACCL,GAAegB,EAAAA,IAAC,MAAA,CAAI,UAAWD,EAAOf,YAAcA,SAAAA,EAAY,EAChEW,GACCK,EAAAA,IAAC,OAAA,CACC,UAAWD,EAAON,UAClB,SAAUE,EAAKU,YAAAA,EAEdV,SAAAA,EAAKW,eAAAA,CAAe,CACvB,CAAA,EAEJ,CAEJ"}
|
|
@@ -1,20 +1,39 @@
|
|
|
1
|
-
import { jsxs as o, jsx as
|
|
2
|
-
import { t as
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { jsxs as o, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { t as v } from "../../classix-DG18itHa.js";
|
|
3
|
+
import { Avatar as f } from "../avatar/index.js";
|
|
4
|
+
import { Icon as b } from "../icon/index.js";
|
|
5
|
+
import '../../assets/index14.css';const y = "_message_ugbdy_1", h = "_timestamp_ugbdy_78", w = "_attachments_ugbdy_83", N = "_preview_ugbdy_101", e = {
|
|
6
|
+
"message-group": "_message-group_ugbdy_1",
|
|
7
|
+
message: y,
|
|
8
|
+
timestamp: h,
|
|
9
|
+
attachments: w,
|
|
10
|
+
preview: N
|
|
11
|
+
}, L = ({
|
|
12
|
+
appearance: c = "default",
|
|
13
|
+
attachments: i,
|
|
14
|
+
author: s,
|
|
15
|
+
authorColor: n,
|
|
16
|
+
authorImageUrl: d,
|
|
17
|
+
authorRole: g,
|
|
18
|
+
content: l,
|
|
19
|
+
iconName: p = "info",
|
|
20
|
+
id: _,
|
|
21
|
+
preview: u,
|
|
22
|
+
timestamp: r,
|
|
23
|
+
type: t = "default"
|
|
24
|
+
}) => {
|
|
25
|
+
const m = r ? new Date(r) : void 0;
|
|
26
|
+
return /* @__PURE__ */ o("div", { className: e["message-group"], "data-message-type": t, "data-component": "message", children: [
|
|
27
|
+
s && /* @__PURE__ */ a(f, { accessibleLabel: s, color: n, imageUrl: d, name: s, role: g }),
|
|
28
|
+
/* @__PURE__ */ o("div", { className: v(e.message, u && e.preview), "data-appearance": c, "data-id": _, "data-type": t, children: [
|
|
29
|
+
t == "system" && /* @__PURE__ */ a(b, { fill: !0, gap: "right", name: p }),
|
|
30
|
+
l
|
|
31
|
+
] }),
|
|
32
|
+
i && /* @__PURE__ */ a("div", { className: e.attachments, children: i }),
|
|
33
|
+
m && /* @__PURE__ */ a("time", { className: e.timestamp, dateTime: m.toISOString(), children: m.toLocaleString() })
|
|
34
|
+
] });
|
|
35
|
+
};
|
|
17
36
|
export {
|
|
18
|
-
|
|
37
|
+
L as Message
|
|
19
38
|
};
|
|
20
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/message/index.tsx"],"sourcesContent":["import cx from 'classix';\n\nimport { IconName } from '@/components/icon/icons.ts';\n\nimport { Icon } from '../icon';\nimport styles from './styles.module.css';\n\nexport type MessageOptions = {\n content: React.ReactNode;\n iconName?: IconName;\n id: string;\n preview?: boolean;\n type?: 'default' | 'minimal' | 'system' | 'user';\n};\n\nexport const Message = ({\n content,\n iconName = 'info',\n id,\n preview,\n type = 'default',\n}: MessageOptions) => {\n return (\n <div\n className={cx(styles.message, preview && styles.preview)}\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/message/index.tsx"],"sourcesContent":["import cx from 'classix';\n\nimport { IconName } from '@/components/icon/icons.ts';\n\nimport { Avatar, type AvatarColor } from '../avatar';\nimport { Icon } from '../icon';\nimport styles from './styles.module.css';\n\nexport type MessageOptions = {\n appearance?: 'default' | 'document' | 'file';\n attachments?: React.ReactNode;\n author?: string;\n authorColor?: AvatarColor;\n authorImageUrl?: string;\n authorRole?: string;\n content: React.ReactNode;\n iconName?: IconName;\n id: string;\n preview?: boolean;\n timestamp?: Date | string;\n type?: 'default' | 'minimal' | 'system' | 'user';\n};\n\nexport const Message = ({\n appearance = 'default',\n attachments,\n author,\n authorColor,\n authorImageUrl,\n authorRole,\n content,\n iconName = 'info',\n id,\n preview,\n timestamp,\n type = 'default',\n}: MessageOptions) => {\n const date = timestamp ? new Date(timestamp) : undefined;\n\n return (\n <div\n className={styles['message-group']}\n data-message-type={type}\n >\n {author && (\n <Avatar\n accessibleLabel={author}\n color={authorColor}\n imageUrl={authorImageUrl}\n name={author}\n role={authorRole}\n />\n )}\n <div\n className={cx(styles.message, preview && styles.preview)}\n data-appearance={appearance}\n data-id={id}\n data-type={type}\n >\n {type == 'system' && (\n <Icon\n fill\n gap='right'\n name={iconName}\n />\n )}\n {content}\n </div>\n {attachments && <div className={styles.attachments}>{attachments}</div>}\n {date && (\n <time\n className={styles.timestamp}\n dateTime={date.toISOString()}\n >\n {date.toLocaleString()}\n </time>\n )}\n </div>\n );\n};\n"],"names":["Message","appearance","attachments","author","authorColor","authorImageUrl","authorRole","content","iconName","id","preview","timestamp","type","date","Date","undefined","jsxs","styles","jsx","Avatar","cx","message","Icon","toISOString","toLocaleString"],"mappings":";;;;;;;;;;GAuBaA,IAAUA,CAAC;AAAA,EACtBC,YAAAA,IAAa;AAAA,EACbC,aAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,aAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,IAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,MAAAA,IAAO;AACO,MAAM;AACpB,QAAMC,IAAOF,IAAY,IAAIG,KAAKH,CAAS,IAAII;AAE/C,SACE,gBAAAC,EAAC,SACC,WAAWC,EAAO,eAAe,GACjC,qBAAmBL,GAAK,kBAAA,WAEvBT,UAAAA;AAAAA,IAAAA,KACC,gBAAAe,EAACC,GAAA,EACC,iBAAiBhB,GACjB,OAAOC,GACP,UAAUC,GACV,MAAMF,GACN,MAAMG,EAAAA,CAAW;AAAA,IAGrB,gBAAAU,EAAC,OAAA,EACC,WAAWI,EAAGH,EAAOI,SAASX,KAAWO,EAAOP,OAAO,GACvD,mBAAiBT,GACjB,WAASQ,GACT,aAAWG,GAEVA,UAAAA;AAAAA,MAAAA,KAAQ,8BACNU,GAAA,EACC,MAAI,IACJ,KAAI,SACJ,MAAMd,EAAAA,CAAS;AAAA,MAGlBD;AAAAA,IAAAA,GACH;AAAA,IACCL,KAAe,gBAAAgB,EAAC,OAAA,EAAI,WAAWD,EAAOf,aAAcA,UAAAA,GAAY;AAAA,IAChEW,KACC,gBAAAK,EAAC,QAAA,EACC,WAAWD,EAAON,WAClB,UAAUE,EAAKU,YAAAA,GAEdV,UAAAA,EAAKW,eAAAA,EAAe,CACvB;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index13.css');const s=require("react/jsx-runtime"),S=require("../../classix-5H4IWnMA.cjs"),i=require("react"),v=require("../editor/index.cjs"),L=require("../list/index.cjs"),w=require("../message/index.cjs"),E="_messages_2mrni_1",I="_fill_2mrni_17",m={messages:E,fill:I},h=({fill:g=!1,files:o,handleUpload:f,maxEditorRows:p=5,message:r="",messages:t,minEditorRows:_=1,onChange:x,onFilesChange:n,onSubmit:q,placeholder:b,sending:j})=>{var u;const c=i.useRef(null),[y,R]=i.useState([]),l=o??y,a=(u=t[t.length-1])==null?void 0:u.id,M=r.replace(/<[^>]*>/g,"").replace(/ /g," ").trim()==="";return i.useLayoutEffect(()=>{var d;const e=(d=c.current)==null?void 0:d.querySelector("[data-message-list]");!e||a===void 0||(e.scrollTop=e.scrollHeight)},[a]),s.jsxs("div",{className:S.t(m.messages,g&&m.fill),"data-component":"messages",ref:c,children:[s.jsx(L.List,{"data-message-list":!0,children:t.map(e=>s.jsx(w.Message,{...e},e.id))}),s.jsx(v.Editor,{autofocus:!0,content:r,disabled:j||M&&l.length===0,files:l,maxRows:p,minRows:_,onChange:x,onFilesChange:e=>{o===void 0&&R(e),n==null||n(e)},onSubmit:q,onUpload:f,placeholder:b,submitLabel:"Send message"})]})};exports.Messages=h;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/messages/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useLayoutEffect, useRef, useState } from 'react';\n\nimport { Editor } from '@/components/editor';\nimport { List } from '@/components/list';\n\nimport { Message, type MessageOptions } from '../message';\nimport styles from './styles.module.css';\n\nexport type MessageItem = MessageOptions;\n\nexport type MessagesProps = {\n fill?: boolean;\n files?: readonly File[];\n handleUpload: (files: FileList) => Promise<void> | void;\n maxEditorRows?: number;\n message: string;\n messages: MessageItem[];\n minEditorRows?: number;\n onChange: (content: string) => void;\n onFilesChange?: (files: File[]) => void;\n onSubmit: () => Promise<void> | void;\n placeholder?: string;\n sending: boolean;\n};\n\nexport const Messages = ({\n fill = false,\n files,\n handleUpload,\n maxEditorRows = 5,\n message = '',\n messages,\n minEditorRows = 1,\n onChange,\n onFilesChange,\n onSubmit,\n placeholder,\n sending,\n}: MessagesProps) => {\n const messagesRef = useRef<HTMLDivElement>(null);\n const [internalFiles, setInternalFiles] = useState<File[]>([]);\n const queuedFiles = files ?? internalFiles;\n const newestMessageId = messages[messages.length - 1]?.id;\n const messageIsEmpty =\n message\n .replace(/<[^>]*>/g, '')\n .replace(/ /g, ' ')\n .trim() === '';\n\n useLayoutEffect(() => {\n const messageList = messagesRef.current?.querySelector<HTMLElement>('[data-message-list]');\n if (!messageList || newestMessageId === undefined) return;\n\n messageList.scrollTop = messageList.scrollHeight;\n }, [newestMessageId]);\n\n return (\n <div\n className={cx(styles.messages, fill && styles.fill)}\n data-component='messages'\n ref={messagesRef}\n >\n <List data-message-list>\n {messages.map((message) => (\n <Message\n key={message.id}\n {...message}\n />\n ))}\n </List>\n <Editor\n autofocus\n content={message}\n disabled={sending || (messageIsEmpty && queuedFiles.length === 0)}\n files={queuedFiles}\n maxRows={maxEditorRows}\n minRows={minEditorRows}\n onChange={onChange}\n onFilesChange={(nextFiles) => {\n if (files === undefined) setInternalFiles(nextFiles);\n onFilesChange?.(nextFiles);\n }}\n onSubmit={onSubmit}\n onUpload={handleUpload}\n placeholder={placeholder}\n submitLabel='Send message'\n />\n </div>\n );\n};\n"],"names":["Messages","fill","files","handleUpload","maxEditorRows","message","messages","minEditorRows","onChange","onFilesChange","onSubmit","placeholder","sending","messagesRef","useRef","internalFiles","setInternalFiles","useState","queuedFiles","newestMessageId","length","id","messageIsEmpty","replace","trim","useLayoutEffect","messageList","current","querySelector","undefined","scrollTop","scrollHeight","jsxs","cx","styles","jsx","List","map","Message","Editor","nextFiles"],"mappings":"iVA0BaA,EAAWA,CAAC,CACvBC,KAAAA,EAAO,GACPC,MAAAA,EACAC,aAAAA,EACAC,cAAAA,EAAgB,EAChBC,QAAAA,EAAU,GACVC,SAAAA,EACAC,cAAAA,EAAgB,EAChBC,SAAAA,EACAC,cAAAA,EACAC,SAAAA,EACAC,YAAAA,EACAC,QAAAA,CACa,IAAM,OACnB,MAAMC,EAAcC,EAAAA,OAAuB,IAAI,EACzC,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAiB,CAAA,CAAE,EACvDC,EAAchB,GAASa,EACvBI,GAAkBb,EAAAA,EAASA,EAASc,OAAS,CAAC,IAA5Bd,YAAAA,EAA+Be,GACjDC,EACJjB,EACGkB,QAAQ,WAAY,EAAE,EACtBA,QAAQ,UAAW,GAAG,EACtBC,KAAAA,IAAW,GAEhBC,OAAAA,EAAAA,gBAAgB,IAAM,OACpB,MAAMC,GAAcb,EAAAA,EAAYc,UAAZd,YAAAA,EAAqBe,cAA2B,uBAChE,CAACF,GAAeP,IAAoBU,SAExCH,EAAYI,UAAYJ,EAAYK,aACtC,EAAG,CAACZ,CAAe,CAAC,EAGlBa,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,EAAGC,EAAO5B,SAAUL,GAAQiC,EAAOjC,IAAI,EAClD,iBAAe,WACf,IAAKY,EAEL,SAAA,CAAAsB,EAAAA,IAACC,EAAAA,KAAA,CAAK,oBAAiB,GACpB9B,SAAAA,EAAS+B,IAAKhC,GACb8B,EAAAA,IAACG,EAAAA,QAAA,CAEC,GAAIjC,CAAAA,EADCA,EAAQgB,EACD,CAEf,EACH,EACAc,MAACI,EAAAA,QACC,UAAS,GACT,QAASlC,EACT,SAAUO,GAAYU,GAAkBJ,EAAYE,SAAW,EAC/D,MAAOF,EACP,QAASd,EACT,QAASG,EACT,SAAAC,EACA,cAAgBgC,GAAc,CACxBtC,IAAU2B,QAAWb,EAAiBwB,CAAS,EACnD/B,GAAAA,MAAAA,EAAgB+B,EAClB,EACA,SAAA9B,EACA,SAAUP,EACV,YAAAQ,EACA,YAAY,cAAA,CAAc,CAAA,EAE9B,CAEJ"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsxs as x, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { t as E } from "../../classix-DG18itHa.js";
|
|
3
|
+
import { useRef as I, useState as M, useLayoutEffect as S } from "react";
|
|
4
|
+
import { Editor as h } from "../editor/index.js";
|
|
5
|
+
import { List as j } from "../list/index.js";
|
|
6
|
+
import { Message as q } from "../message/index.js";
|
|
7
|
+
import '../../assets/index13.css';const H = "_messages_2mrni_1", N = "_fill_2mrni_17", f = {
|
|
8
|
+
messages: H,
|
|
9
|
+
fill: N
|
|
10
|
+
}, D = ({
|
|
11
|
+
fill: d = !1,
|
|
12
|
+
files: r,
|
|
13
|
+
handleUpload: u,
|
|
14
|
+
maxEditorRows: p = 5,
|
|
15
|
+
message: i = "",
|
|
16
|
+
messages: e,
|
|
17
|
+
minEditorRows: g = 1,
|
|
18
|
+
onChange: _,
|
|
19
|
+
onFilesChange: t,
|
|
20
|
+
onSubmit: b,
|
|
21
|
+
placeholder: y,
|
|
22
|
+
sending: L
|
|
23
|
+
}) => {
|
|
24
|
+
var n;
|
|
25
|
+
const l = I(null), [R, v] = M([]), m = r ?? R, a = (n = e[e.length - 1]) == null ? void 0 : n.id, w = i.replace(/<[^>]*>/g, "").replace(/ /g, " ").trim() === "";
|
|
26
|
+
return S(() => {
|
|
27
|
+
var c;
|
|
28
|
+
const s = (c = l.current) == null ? void 0 : c.querySelector("[data-message-list]");
|
|
29
|
+
!s || a === void 0 || (s.scrollTop = s.scrollHeight);
|
|
30
|
+
}, [a]), /* @__PURE__ */ x("div", { className: E(f.messages, d && f.fill), "data-component": "messages", ref: l, children: [
|
|
31
|
+
/* @__PURE__ */ o(j, { "data-message-list": !0, children: e.map((s) => /* @__PURE__ */ o(q, { ...s }, s.id)) }),
|
|
32
|
+
/* @__PURE__ */ o(h, { autofocus: !0, content: i, disabled: L || w && m.length === 0, files: m, maxRows: p, minRows: g, onChange: _, onFilesChange: (s) => {
|
|
33
|
+
r === void 0 && v(s), t == null || t(s);
|
|
34
|
+
}, onSubmit: b, onUpload: u, placeholder: y, submitLabel: "Send message" })
|
|
35
|
+
] });
|
|
36
|
+
};
|
|
37
|
+
export {
|
|
38
|
+
D as Messages
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/messages/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useLayoutEffect, useRef, useState } from 'react';\n\nimport { Editor } from '@/components/editor';\nimport { List } from '@/components/list';\n\nimport { Message, type MessageOptions } from '../message';\nimport styles from './styles.module.css';\n\nexport type MessageItem = MessageOptions;\n\nexport type MessagesProps = {\n fill?: boolean;\n files?: readonly File[];\n handleUpload: (files: FileList) => Promise<void> | void;\n maxEditorRows?: number;\n message: string;\n messages: MessageItem[];\n minEditorRows?: number;\n onChange: (content: string) => void;\n onFilesChange?: (files: File[]) => void;\n onSubmit: () => Promise<void> | void;\n placeholder?: string;\n sending: boolean;\n};\n\nexport const Messages = ({\n fill = false,\n files,\n handleUpload,\n maxEditorRows = 5,\n message = '',\n messages,\n minEditorRows = 1,\n onChange,\n onFilesChange,\n onSubmit,\n placeholder,\n sending,\n}: MessagesProps) => {\n const messagesRef = useRef<HTMLDivElement>(null);\n const [internalFiles, setInternalFiles] = useState<File[]>([]);\n const queuedFiles = files ?? internalFiles;\n const newestMessageId = messages[messages.length - 1]?.id;\n const messageIsEmpty =\n message\n .replace(/<[^>]*>/g, '')\n .replace(/ /g, ' ')\n .trim() === '';\n\n useLayoutEffect(() => {\n const messageList = messagesRef.current?.querySelector<HTMLElement>('[data-message-list]');\n if (!messageList || newestMessageId === undefined) return;\n\n messageList.scrollTop = messageList.scrollHeight;\n }, [newestMessageId]);\n\n return (\n <div\n className={cx(styles.messages, fill && styles.fill)}\n data-component='messages'\n ref={messagesRef}\n >\n <List data-message-list>\n {messages.map((message) => (\n <Message\n key={message.id}\n {...message}\n />\n ))}\n </List>\n <Editor\n autofocus\n content={message}\n disabled={sending || (messageIsEmpty && queuedFiles.length === 0)}\n files={queuedFiles}\n maxRows={maxEditorRows}\n minRows={minEditorRows}\n onChange={onChange}\n onFilesChange={(nextFiles) => {\n if (files === undefined) setInternalFiles(nextFiles);\n onFilesChange?.(nextFiles);\n }}\n onSubmit={onSubmit}\n onUpload={handleUpload}\n placeholder={placeholder}\n submitLabel='Send message'\n />\n </div>\n );\n};\n"],"names":["Messages","fill","files","handleUpload","maxEditorRows","message","messages","minEditorRows","onChange","onFilesChange","onSubmit","placeholder","sending","messagesRef","useRef","internalFiles","setInternalFiles","useState","queuedFiles","newestMessageId","length","id","messageIsEmpty","replace","trim","useLayoutEffect","messageList","current","querySelector","undefined","scrollTop","scrollHeight","jsxs","cx","styles","jsx","List","map","Message","Editor","nextFiles"],"mappings":";;;;;;;;;GA0BaA,IAAWA,CAAC;AAAA,EACvBC,MAAAA,IAAO;AAAA,EACPC,OAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,eAAAA,IAAgB;AAAA,EAChBC,SAAAA,IAAU;AAAA,EACVC,UAAAA;AAAAA,EACAC,eAAAA,IAAgB;AAAA,EAChBC,UAAAA;AAAAA,EACAC,eAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,aAAAA;AAAAA,EACAC,SAAAA;AACa,MAAM;;AACnB,QAAMC,IAAcC,EAAuB,IAAI,GACzC,CAACC,GAAeC,CAAgB,IAAIC,EAAiB,CAAA,CAAE,GACvDC,IAAchB,KAASa,GACvBI,KAAkBb,IAAAA,EAASA,EAASc,SAAS,CAAC,MAA5Bd,gBAAAA,EAA+Be,IACjDC,IACJjB,EACGkB,QAAQ,YAAY,EAAE,EACtBA,QAAQ,WAAW,GAAG,EACtBC,KAAAA,MAAW;AAEhBC,SAAAA,EAAgB,MAAM;;AACpB,UAAMC,KAAcb,IAAAA,EAAYc,YAAZd,gBAAAA,EAAqBe,cAA2B;AACpE,IAAI,CAACF,KAAeP,MAAoBU,WAExCH,EAAYI,YAAYJ,EAAYK;AAAAA,EACtC,GAAG,CAACZ,CAAe,CAAC,GAGlB,gBAAAa,EAAC,OAAA,EACC,WAAWC,EAAGC,EAAO5B,UAAUL,KAAQiC,EAAOjC,IAAI,GAClD,kBAAe,YACf,KAAKY,GAEL,UAAA;AAAA,IAAA,gBAAAsB,EAACC,GAAA,EAAK,qBAAiB,IACpB9B,UAAAA,EAAS+B,IAAKhC,CAAAA,MACb,gBAAA8B,EAACG,GAAA,EAEC,GAAIjC,EAAAA,GADCA,EAAQgB,EACD,CAEf,GACH;AAAA,IACA,gBAAAc,EAACI,KACC,WAAS,IACT,SAASlC,GACT,UAAUO,KAAYU,KAAkBJ,EAAYE,WAAW,GAC/D,OAAOF,GACP,SAASd,GACT,SAASG,GACT,UAAAC,GACA,eAAgBgC,CAAAA,MAAc;AAC5B,MAAItC,MAAU2B,UAAWb,EAAiBwB,CAAS,GACnD/B,KAAAA,QAAAA,EAAgB+B;AAAAA,IAClB,GACA,UAAA9B,GACA,UAAUP,GACV,aAAAQ,GACA,aAAY,eAAA,CAAc;AAAA,EAAA,GAE9B;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index12.css');const _=require("react/jsx-runtime"),p=require("../../classix-5H4IWnMA.cjs"),b=require("react"),f=require("../../icons-DYCSlAoX.cjs"),v="_nav_1u1d4_3",h="_horizontal_1u1d4_9",g="_sidebar_1u1d4_19",m="_tabs_1u1d4_60",w="_pills_1u1d4_80",t={nav:v,horizontal:h,sidebar:g,tabs:m,pills:w},q={default:t.default,pills:t.pills,sidebar:t.sidebar,tabs:t.tabs},x=({animation:i,children:o,className:r,horizontal:s=!1,variant:e="default",...l})=>{const[c,a]=b.useState(!1),d={"--icon-svg":f.iconSVG("chevron")};return _.jsx("nav",{className:p.t(r,s&&t.horizontal,t.nav,q[e]),"data-animation":i,"data-open":c?"true":"false","data-orientation":s?"horizontal":"vertical",onBlurCapture:n=>{if(e!=="pills"||window.innerWidth>960)return;const u=n.relatedTarget;n.currentTarget.contains(u)||a(!1)},onClick:()=>{e!=="pills"||window.innerWidth>960||a(n=>!n)},style:d,...l,"data-component":"nav",children:o})};exports.Nav=x;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/nav/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useState } from 'react';\n\nimport { iconSVG } from '@/components/icon/icons.ts';\n\nimport styles from './styles.module.css';\n\nconst variants = {\n default: styles.default,\n pills: styles.pills,\n tabs: styles.tabs,\n};\n\nexport type NavProps = React.HTMLAttributes<HTMLElement> & {\n animation?: string;\n children?: React.ReactNode;\n className?: string;\n horizontal?: boolean;\n variant?: keyof typeof variants;\n};\n\nexport const Nav = ({\n animation,\n children,\n className,\n horizontal = false,\n variant = 'default',\n ...props\n}: NavProps) => {\n const [open, setOpen] = useState(false);\n\n type withVars = React.CSSProperties & {\n '--icon-svg'?: string;\n };\n const withVars: withVars = {\n '--icon-svg': iconSVG('chevron'),\n };\n\n return (\n <nav\n className={cx(className, horizontal && styles.horizontal, styles.nav, variants[variant])}\n data-animation={animation}\n data-open={open ? 'true' : 'false'}\n data-orientation={horizontal ? 'horizontal' : 'vertical'}\n onBlurCapture={(e) => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n const next = e.relatedTarget as Node | null;\n if (!e.currentTarget.contains(next)) {\n setOpen(false);\n }\n }}\n onClick={() => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n setOpen((v) => !v);\n }}\n style={withVars}\n {...props}\n >\n {children}\n </nav>\n );\n};\n"],"names":["variants","default","styles","pills","tabs","Nav","animation","children","className","horizontal","variant","props","open","setOpen","useState","withVars","iconSVG","jsx","cx","nav","e","window","innerWidth","next","relatedTarget","currentTarget","contains","v"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/nav/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useState } from 'react';\n\nimport { iconSVG } from '@/components/icon/icons.ts';\n\nimport styles from './styles.module.css';\n\nconst variants = {\n default: styles.default,\n pills: styles.pills,\n sidebar: styles.sidebar,\n tabs: styles.tabs,\n};\n\nexport type NavProps = React.HTMLAttributes<HTMLElement> & {\n animation?: string;\n children?: React.ReactNode;\n className?: string;\n horizontal?: boolean;\n variant?: keyof typeof variants;\n};\n\nexport const Nav = ({\n animation,\n children,\n className,\n horizontal = false,\n variant = 'default',\n ...props\n}: NavProps) => {\n const [open, setOpen] = useState(false);\n\n type withVars = React.CSSProperties & {\n '--icon-svg'?: string;\n };\n const withVars: withVars = {\n '--icon-svg': iconSVG('chevron'),\n };\n\n return (\n <nav\n className={cx(className, horizontal && styles.horizontal, styles.nav, variants[variant])}\n data-animation={animation}\n data-open={open ? 'true' : 'false'}\n data-orientation={horizontal ? 'horizontal' : 'vertical'}\n onBlurCapture={(e) => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n const next = e.relatedTarget as Node | null;\n if (!e.currentTarget.contains(next)) {\n setOpen(false);\n }\n }}\n onClick={() => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n setOpen((v) => !v);\n }}\n style={withVars}\n {...props}\n >\n {children}\n </nav>\n );\n};\n"],"names":["variants","default","styles","pills","sidebar","tabs","Nav","animation","children","className","horizontal","variant","props","open","setOpen","useState","withVars","iconSVG","jsx","cx","nav","e","window","innerWidth","next","relatedTarget","currentTarget","contains","v"],"mappings":"4WAOMA,EAAW,CACfC,QAASC,EAAOD,QAChBE,MAAOD,EAAOC,MACdC,QAASF,EAAOE,QAChBC,KAAMH,EAAOG,IACf,EAUaC,EAAMA,CAAC,CAClBC,UAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAC,WAAAA,EAAa,GACbC,QAAAA,EAAU,UACV,GAAGC,CACK,IAAM,CACd,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAS,EAAK,EAKhCC,EAAqB,CACzB,aAAcC,EAAAA,QAAQ,SAAS,CAAA,EAGjC,OACEC,EAAAA,IAAC,MAAA,CACC,UAAWC,EAAAA,EAAGV,EAAWC,GAAcR,EAAOQ,WAAYR,EAAOkB,IAAKpB,EAASW,CAAO,CAAC,EACvF,iBAAgBJ,EAChB,YAAWM,EAAO,OAAS,QAC3B,mBAAkBH,EAAa,aAAe,WAC9C,cAAgBW,GAAM,CACpB,GAAIV,IAAY,SAAWW,OAAOC,WAAa,IAAK,OAEpD,MAAMC,EAAOH,EAAEI,cACVJ,EAAEK,cAAcC,SAASH,CAAI,GAChCV,EAAQ,EAAK,CAEjB,EACA,QAAS,IAAM,CACTH,IAAY,SAAWW,OAAOC,WAAa,KAE/CT,EAASc,GAAM,CAACA,CAAC,CACnB,EACA,MAAOZ,EACP,GAAIJ,EAAM,iBAAA,MAETJ,SAAAA,EACH,CAEJ"}
|
|
@@ -1,36 +1,38 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as u } from "react/jsx-runtime";
|
|
2
2
|
import { t as _ } from "../../classix-DG18itHa.js";
|
|
3
|
-
import { useState as
|
|
4
|
-
import { i as
|
|
5
|
-
import '../../assets/
|
|
6
|
-
nav:
|
|
7
|
-
horizontal:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
import { useState as f } from "react";
|
|
4
|
+
import { i as m } from "../../icons-CKzd_L4D.js";
|
|
5
|
+
import '../../assets/index12.css';const b = "_nav_1u1d4_3", v = "_horizontal_1u1d4_9", h = "_sidebar_1u1d4_19", w = "_tabs_1u1d4_60", z = "_pills_1u1d4_80", t = {
|
|
6
|
+
nav: b,
|
|
7
|
+
horizontal: v,
|
|
8
|
+
sidebar: h,
|
|
9
|
+
tabs: w,
|
|
10
|
+
pills: z
|
|
11
|
+
}, g = {
|
|
11
12
|
default: t.default,
|
|
12
13
|
pills: t.pills,
|
|
14
|
+
sidebar: t.sidebar,
|
|
13
15
|
tabs: t.tabs
|
|
14
|
-
},
|
|
16
|
+
}, S = ({
|
|
15
17
|
animation: i,
|
|
16
18
|
children: e,
|
|
17
|
-
className:
|
|
19
|
+
className: r,
|
|
18
20
|
horizontal: s = !1,
|
|
19
|
-
variant:
|
|
20
|
-
...
|
|
21
|
+
variant: n = "default",
|
|
22
|
+
...l
|
|
21
23
|
}) => {
|
|
22
|
-
const [
|
|
23
|
-
"--icon-svg":
|
|
24
|
+
const [d, o] = f(!1), c = {
|
|
25
|
+
"--icon-svg": m("chevron")
|
|
24
26
|
};
|
|
25
|
-
return /* @__PURE__ */
|
|
26
|
-
if (
|
|
27
|
-
const
|
|
28
|
-
|
|
27
|
+
return /* @__PURE__ */ u("nav", { className: _(r, s && t.horizontal, t.nav, g[n]), "data-animation": i, "data-open": d ? "true" : "false", "data-orientation": s ? "horizontal" : "vertical", onBlurCapture: (a) => {
|
|
28
|
+
if (n !== "pills" || window.innerWidth > 960) return;
|
|
29
|
+
const p = a.relatedTarget;
|
|
30
|
+
a.currentTarget.contains(p) || o(!1);
|
|
29
31
|
}, onClick: () => {
|
|
30
|
-
|
|
31
|
-
}, style:
|
|
32
|
+
n !== "pills" || window.innerWidth > 960 || o((a) => !a);
|
|
33
|
+
}, style: c, ...l, "data-component": "nav", children: e });
|
|
32
34
|
};
|
|
33
35
|
export {
|
|
34
|
-
|
|
36
|
+
S as Nav
|
|
35
37
|
};
|
|
36
38
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/nav/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useState } from 'react';\n\nimport { iconSVG } from '@/components/icon/icons.ts';\n\nimport styles from './styles.module.css';\n\nconst variants = {\n default: styles.default,\n pills: styles.pills,\n tabs: styles.tabs,\n};\n\nexport type NavProps = React.HTMLAttributes<HTMLElement> & {\n animation?: string;\n children?: React.ReactNode;\n className?: string;\n horizontal?: boolean;\n variant?: keyof typeof variants;\n};\n\nexport const Nav = ({\n animation,\n children,\n className,\n horizontal = false,\n variant = 'default',\n ...props\n}: NavProps) => {\n const [open, setOpen] = useState(false);\n\n type withVars = React.CSSProperties & {\n '--icon-svg'?: string;\n };\n const withVars: withVars = {\n '--icon-svg': iconSVG('chevron'),\n };\n\n return (\n <nav\n className={cx(className, horizontal && styles.horizontal, styles.nav, variants[variant])}\n data-animation={animation}\n data-open={open ? 'true' : 'false'}\n data-orientation={horizontal ? 'horizontal' : 'vertical'}\n onBlurCapture={(e) => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n const next = e.relatedTarget as Node | null;\n if (!e.currentTarget.contains(next)) {\n setOpen(false);\n }\n }}\n onClick={() => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n setOpen((v) => !v);\n }}\n style={withVars}\n {...props}\n >\n {children}\n </nav>\n );\n};\n"],"names":["variants","default","styles","pills","tabs","Nav","animation","children","className","horizontal","variant","props","open","setOpen","useState","withVars","iconSVG","jsx","cx","nav","e","window","innerWidth","next","relatedTarget","currentTarget","contains","v"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/nav/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport { useState } from 'react';\n\nimport { iconSVG } from '@/components/icon/icons.ts';\n\nimport styles from './styles.module.css';\n\nconst variants = {\n default: styles.default,\n pills: styles.pills,\n sidebar: styles.sidebar,\n tabs: styles.tabs,\n};\n\nexport type NavProps = React.HTMLAttributes<HTMLElement> & {\n animation?: string;\n children?: React.ReactNode;\n className?: string;\n horizontal?: boolean;\n variant?: keyof typeof variants;\n};\n\nexport const Nav = ({\n animation,\n children,\n className,\n horizontal = false,\n variant = 'default',\n ...props\n}: NavProps) => {\n const [open, setOpen] = useState(false);\n\n type withVars = React.CSSProperties & {\n '--icon-svg'?: string;\n };\n const withVars: withVars = {\n '--icon-svg': iconSVG('chevron'),\n };\n\n return (\n <nav\n className={cx(className, horizontal && styles.horizontal, styles.nav, variants[variant])}\n data-animation={animation}\n data-open={open ? 'true' : 'false'}\n data-orientation={horizontal ? 'horizontal' : 'vertical'}\n onBlurCapture={(e) => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n const next = e.relatedTarget as Node | null;\n if (!e.currentTarget.contains(next)) {\n setOpen(false);\n }\n }}\n onClick={() => {\n if (variant !== 'pills' || window.innerWidth > 960) return;\n\n setOpen((v) => !v);\n }}\n style={withVars}\n {...props}\n >\n {children}\n </nav>\n );\n};\n"],"names":["variants","default","styles","pills","sidebar","tabs","Nav","animation","children","className","horizontal","variant","props","open","setOpen","useState","withVars","iconSVG","jsx","cx","nav","e","window","innerWidth","next","relatedTarget","currentTarget","contains","v"],"mappings":";;;;;;;;;;GAOMA,IAAW;AAAA,EACfC,SAASC,EAAOD;AAAAA,EAChBE,OAAOD,EAAOC;AAAAA,EACdC,SAASF,EAAOE;AAAAA,EAChBC,MAAMH,EAAOG;AACf,GAUaC,IAAMA,CAAC;AAAA,EAClBC,WAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,YAAAA,IAAa;AAAA,EACbC,SAAAA,IAAU;AAAA,EACV,GAAGC;AACK,MAAM;AACd,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAKhCC,IAAqB;AAAA,IACzB,cAAcC,EAAQ,SAAS;AAAA,EAAA;AAGjC,SACE,gBAAAC,EAAC,OAAA,EACC,WAAWC,EAAGV,GAAWC,KAAcR,EAAOQ,YAAYR,EAAOkB,KAAKpB,EAASW,CAAO,CAAC,GACvF,kBAAgBJ,GAChB,aAAWM,IAAO,SAAS,SAC3B,oBAAkBH,IAAa,eAAe,YAC9C,eAAgBW,CAAAA,MAAM;AACpB,QAAIV,MAAY,WAAWW,OAAOC,aAAa,IAAK;AAEpD,UAAMC,IAAOH,EAAEI;AACf,IAAKJ,EAAEK,cAAcC,SAASH,CAAI,KAChCV,EAAQ,EAAK;AAAA,EAEjB,GACA,SAAS,MAAM;AACb,IAAIH,MAAY,WAAWW,OAAOC,aAAa,OAE/CT,EAASc,CAAAA,MAAM,CAACA,CAAC;AAAA,EACnB,GACA,OAAOZ,GACP,GAAIJ,GAAM,kBAAA,OAETJ,UAAAA,GACH;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index11.css');const e=require("react/jsx-runtime"),n="_object_xxgm1_1",s={object:n},a=({accessibleLabel:c,url:t,...o})=>e.jsx("object",{"aria-label":c,className:s.object,data:t,type:"application/pdf",...o,"data-component":"objectcomponent",children:t&&e.jsxs(e.Fragment,{children:["We cannot show this file. You can try accessing it directly:",e.jsx("br",{}),e.jsx("a",{href:t,children:t})]})});exports.Object=a;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as e, jsxs as n, Fragment as a } from "react/jsx-runtime";
|
|
2
|
-
import '../../assets/
|
|
2
|
+
import '../../assets/index11.css';const s = "_object_xxgm1_1", i = {
|
|
3
3
|
object: s
|
|
4
|
-
},
|
|
4
|
+
}, b = ({
|
|
5
5
|
accessibleLabel: c,
|
|
6
6
|
url: t,
|
|
7
7
|
...o
|
|
@@ -11,6 +11,6 @@ import '../../assets/index4.css';const s = "_object_1esdj_1", i = {
|
|
|
11
11
|
/* @__PURE__ */ e("a", { href: t, children: t })
|
|
12
12
|
] }) });
|
|
13
13
|
export {
|
|
14
|
-
|
|
14
|
+
b as Object
|
|
15
15
|
};
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index16.css');const a=require("react/jsx-runtime"),g=require("../../classix-5H4IWnMA.cjs"),o=require("react"),R=require("../button/index.cjs"),x="_popover_ttn4t_1",P="_left_ttn4t_23",k="_right_ttn4t_28",F="_trigger_ttn4t_33",s={popover:x,"popover-panel":"_popover-panel_ttn4t_6",left:P,right:k,trigger:F},b=({children:i,position:_="left",triggerAccessibleLabel:m,triggerAriaHasPopup:y,triggerButtonContent:w})=>{const u=o.useRef(null),l=o.useRef(void 0),p=o.useId(),f=o.useRef(null),[t,d]=o.useState(!1),c=({initialFocus:e}={})=>{l.current=e,d(!0)},n=o.useCallback(({restoreFocus:e=!0}={})=>{var r;d(!1),e&&((r=f.current)==null||r.focus())},[]),h=e=>{t&&e.key==="Escape"&&n()},D=e=>{if(!t){if(e.key==="ArrowDown"){e.preventDefault(),c({initialFocus:"first"});return}e.key==="ArrowUp"&&(e.preventDefault(),c({initialFocus:"last"}))}};return o.useEffect(()=>{if(!t)return;const e=r=>{var v;(v=u.current)!=null&&v.contains(r.target)||n({restoreFocus:!1})};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[n,t]),a.jsxs("div",{className:s.popover,onKeyDown:h,onClick:e=>e.stopPropagation(),ref:u,"data-component":"popover",children:[a.jsx(R.Button,{"aria-controls":t?p:void 0,"aria-expanded":t,"aria-haspopup":y,"aria-label":m,className:g.t(s.trigger),onKeyDown:D,onClick:()=>t?n({restoreFocus:!1}):c(),ref:f,variant:"secondary",children:w}),t&&a.jsx("div",{className:g.t(s["popover-panel"],s[_]),id:p,children:typeof i=="function"?i({close:n,initialFocus:l.current,isOpen:t}):i})]})};exports.Popover=b;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n position?: 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n position = 'left',\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n closePopover({ restoreFocus: false });\n }\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n return (\n <div\n className={styles.popover}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n ref={containerRef}\n >\n <Button\n aria-controls={isOpen ? panelId : undefined}\n aria-expanded={isOpen}\n aria-haspopup={triggerAriaHasPopup}\n aria-label={triggerAccessibleLabel}\n className={cx(styles.trigger)}\n onKeyDown={handleTriggerKeyDown}\n onClick={() => (isOpen ? closePopover({ restoreFocus: false }) : openPopover())}\n ref={triggerRef}\n variant='
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n position?: 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n position = 'left',\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n closePopover({ restoreFocus: false });\n }\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n return (\n <div\n className={styles.popover}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n ref={containerRef}\n >\n <Button\n aria-controls={isOpen ? panelId : undefined}\n aria-expanded={isOpen}\n aria-haspopup={triggerAriaHasPopup}\n aria-label={triggerAccessibleLabel}\n className={cx(styles.trigger)}\n onKeyDown={handleTriggerKeyDown}\n onClick={() => (isOpen ? closePopover({ restoreFocus: false }) : openPopover())}\n ref={triggerRef}\n variant='secondary'\n >\n {triggerButtonContent}\n </Button>\n {isOpen && (\n <div\n className={cx(styles['popover-panel'], styles[position])}\n id={panelId}\n >\n {typeof children === 'function'\n ? children({ close: closePopover, initialFocus: initialFocusRef.current, isOpen })\n : children}\n </div>\n )}\n </div>\n );\n};\n"],"names":["Popover","children","position","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelId","useId","triggerRef","isOpen","setIsOpen","useState","openPopover","initialFocus","current","closePopover","useCallback","restoreFocus","focus","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","contains","target","document","addEventListener","removeEventListener","jsxs","styles","popover","e","stopPropagation","jsx","Button","cx","trigger","close"],"mappings":"mXAuCaA,EAAUA,CAAC,CACtBC,SAAAA,EACAC,SAAAA,EAAW,OACXC,uBAAAA,EACAC,oBAAAA,EACAC,qBAAAA,CACY,IAAM,CAClB,MAAMC,EAAeC,EAAAA,OAAuB,IAAI,EAC1CC,EAAkBD,EAAAA,OAAwCE,MAAS,EACnEC,EAAUC,EAAAA,MAAAA,EACVC,EAAaL,EAAAA,OAA0B,IAAI,EAC3C,CAACM,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EAEpCC,EAAcA,CAAC,CAAEC,aAAAA,CAAAA,EAAqC,KAAO,CACjET,EAAgBU,QAAUD,EAC1BH,EAAU,EAAI,CAChB,EAEMK,EAAeC,EAAAA,YAAY,CAAC,CAAEC,aAAAA,EAAe,EAAA,EAA8B,KAAO,OACtFP,EAAU,EAAK,EAEXO,KACFT,EAAAA,EAAWM,UAAXN,MAAAA,EAAoBU,QAExB,EAAG,CAAA,CAAE,EAECC,EAAiBC,GAA+C,CAChEX,GAAUW,EAAMC,MAAQ,UAC1BN,EAAAA,CAEJ,EAEMO,EAAwBF,GAAkD,CAC9E,GAAIX,CAAAA,EAIJ,IAAIW,EAAMC,MAAQ,YAAa,CAC7BD,EAAMG,eAAAA,EACNX,EAAY,CAAEC,aAAc,OAAA,CAAS,EACrC,MACF,CAEIO,EAAMC,MAAQ,YAChBD,EAAMG,eAAAA,EACNX,EAAY,CAAEC,aAAc,MAAA,CAAQ,GAExC,EAEAW,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACf,EACH,OAGF,MAAMgB,EAAqBL,GAAsB,QAC1ClB,EAAAA,EAAaY,UAAbZ,MAAAA,EAAsBwB,SAASN,EAAMO,SACxCZ,EAAa,CAAEE,aAAc,EAAA,CAAO,CAExC,EAEAW,gBAASC,iBAAiB,YAAaJ,CAAiB,EAEjD,IAAM,CACXG,SAASE,oBAAoB,YAAaL,CAAiB,CAC7D,CACF,EAAG,CAACV,EAAcN,CAAM,CAAC,EAGvBsB,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAOC,QAClB,UAAWd,EACX,QAAUe,GAAMA,EAAEC,kBAClB,IAAKjC,EAAa,iBAAA,UAElB,SAAA,CAAAkC,EAAAA,IAACC,EAAAA,OAAA,CACC,gBAAe5B,EAASH,EAAUD,OAClC,gBAAeI,EACf,gBAAeT,EACf,aAAYD,EACZ,UAAWuC,EAAAA,EAAGN,EAAOO,OAAO,EAC5B,UAAWjB,EACX,QAAS,IAAOb,EAASM,EAAa,CAAEE,aAAc,EAAA,CAAO,EAAIL,EAAAA,EACjE,IAAKJ,EACL,QAAQ,YAEPP,SAAAA,EACH,EACCQ,GACC2B,EAAAA,IAAC,MAAA,CACC,UAAWE,IAAGN,EAAO,eAAe,EAAGA,EAAOlC,CAAQ,CAAC,EACvD,GAAIQ,EAEH,SAAA,OAAOT,GAAa,WACjBA,EAAS,CAAE2C,MAAOzB,EAAcF,aAAcT,EAAgBU,QAASL,OAAAA,CAAAA,CAAQ,EAC/EZ,CAAAA,CACN,CAAA,EAEJ,CAEJ"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { jsxs as k, jsx as
|
|
2
|
-
import { t as
|
|
1
|
+
import { jsxs as k, jsx as v } from "react/jsx-runtime";
|
|
2
|
+
import { t as g } from "../../classix-DG18itHa.js";
|
|
3
3
|
import { useRef as a, useId as F, useState as P, useCallback as x, useEffect as E } from "react";
|
|
4
4
|
import { Button as K } from "../button/index.js";
|
|
5
|
-
import '../../assets/
|
|
5
|
+
import '../../assets/index16.css';const R = "_popover_ttn4t_1", C = "_left_ttn4t_23", I = "_right_ttn4t_28", N = "_trigger_ttn4t_33", n = {
|
|
6
6
|
popover: R,
|
|
7
7
|
"popover-panel": "_popover-panel_ttn4t_6",
|
|
8
8
|
left: C,
|
|
@@ -10,24 +10,24 @@ import '../../assets/index43.css';const R = "_popover_ttn4t_1", C = "_left_ttn4t
|
|
|
10
10
|
trigger: N
|
|
11
11
|
}, O = ({
|
|
12
12
|
children: s,
|
|
13
|
-
position:
|
|
13
|
+
position: m = "left",
|
|
14
14
|
triggerAccessibleLabel: _,
|
|
15
15
|
triggerAriaHasPopup: w,
|
|
16
16
|
triggerButtonContent: y
|
|
17
17
|
}) => {
|
|
18
|
-
const c = a(null), p = a(void 0), l = F(), u = a(null), [
|
|
18
|
+
const c = a(null), p = a(void 0), l = F(), u = a(null), [o, f] = P(!1), i = ({
|
|
19
19
|
initialFocus: e
|
|
20
20
|
} = {}) => {
|
|
21
21
|
p.current = e, f(!0);
|
|
22
|
-
},
|
|
22
|
+
}, t = x(({
|
|
23
23
|
restoreFocus: e = !0
|
|
24
24
|
} = {}) => {
|
|
25
25
|
var r;
|
|
26
26
|
f(!1), e && ((r = u.current) == null || r.focus());
|
|
27
27
|
}, []), h = (e) => {
|
|
28
|
-
|
|
28
|
+
o && e.key === "Escape" && t();
|
|
29
29
|
}, D = (e) => {
|
|
30
|
-
if (!
|
|
30
|
+
if (!o) {
|
|
31
31
|
if (e.key === "ArrowDown") {
|
|
32
32
|
e.preventDefault(), i({
|
|
33
33
|
initialFocus: "first"
|
|
@@ -40,25 +40,25 @@ import '../../assets/index43.css';const R = "_popover_ttn4t_1", C = "_left_ttn4t
|
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
return E(() => {
|
|
43
|
-
if (!
|
|
43
|
+
if (!o)
|
|
44
44
|
return;
|
|
45
45
|
const e = (r) => {
|
|
46
46
|
var d;
|
|
47
|
-
(d = c.current) != null && d.contains(r.target) ||
|
|
47
|
+
(d = c.current) != null && d.contains(r.target) || t({
|
|
48
48
|
restoreFocus: !1
|
|
49
49
|
});
|
|
50
50
|
};
|
|
51
51
|
return document.addEventListener("mousedown", e), () => {
|
|
52
52
|
document.removeEventListener("mousedown", e);
|
|
53
53
|
};
|
|
54
|
-
}, [
|
|
55
|
-
/* @__PURE__ */
|
|
54
|
+
}, [t, o]), /* @__PURE__ */ k("div", { className: n.popover, onKeyDown: h, onClick: (e) => e.stopPropagation(), ref: c, "data-component": "popover", children: [
|
|
55
|
+
/* @__PURE__ */ v(K, { "aria-controls": o ? l : void 0, "aria-expanded": o, "aria-haspopup": w, "aria-label": _, className: g(n.trigger), onKeyDown: D, onClick: () => o ? t({
|
|
56
56
|
restoreFocus: !1
|
|
57
|
-
}) : i(), ref: u, variant: "
|
|
58
|
-
|
|
59
|
-
close:
|
|
57
|
+
}) : i(), ref: u, variant: "secondary", children: y }),
|
|
58
|
+
o && /* @__PURE__ */ v("div", { className: g(n["popover-panel"], n[m]), id: l, children: typeof s == "function" ? s({
|
|
59
|
+
close: t,
|
|
60
60
|
initialFocus: p.current,
|
|
61
|
-
isOpen:
|
|
61
|
+
isOpen: o
|
|
62
62
|
}) : s })
|
|
63
63
|
] });
|
|
64
64
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n position?: 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n position = 'left',\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n closePopover({ restoreFocus: false });\n }\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n return (\n <div\n className={styles.popover}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n ref={containerRef}\n >\n <Button\n aria-controls={isOpen ? panelId : undefined}\n aria-expanded={isOpen}\n aria-haspopup={triggerAriaHasPopup}\n aria-label={triggerAccessibleLabel}\n className={cx(styles.trigger)}\n onKeyDown={handleTriggerKeyDown}\n onClick={() => (isOpen ? closePopover({ restoreFocus: false }) : openPopover())}\n ref={triggerRef}\n variant='
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/popover/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport {\n type AriaAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { Button } from '@/components/button';\n\nimport styles from './styles.module.css';\n\nexport type PopoverCloseOptions = {\n restoreFocus?: boolean;\n};\n\nexport type PopoverInitialFocus = 'first' | 'last';\n\nexport type PopoverRenderProps = {\n close: (options?: PopoverCloseOptions) => void;\n initialFocus?: PopoverInitialFocus;\n isOpen: boolean;\n};\n\ntype PopoverOpenOptions = {\n initialFocus?: PopoverInitialFocus;\n};\n\nexport type PopoverProps = {\n children: ReactNode | ((props: PopoverRenderProps) => ReactNode);\n position?: 'left' | 'right';\n triggerAccessibleLabel?: string;\n triggerAriaHasPopup?: AriaAttributes['aria-haspopup'];\n triggerButtonContent: ReactNode;\n};\n\nexport const Popover = ({\n children,\n position = 'left',\n triggerAccessibleLabel,\n triggerAriaHasPopup,\n triggerButtonContent,\n}: PopoverProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const initialFocusRef = useRef<PopoverInitialFocus | undefined>(undefined);\n const panelId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openPopover = ({ initialFocus }: PopoverOpenOptions = {}) => {\n initialFocusRef.current = initialFocus;\n setIsOpen(true);\n };\n\n const closePopover = useCallback(({ restoreFocus = true }: PopoverCloseOptions = {}) => {\n setIsOpen(false);\n\n if (restoreFocus) {\n triggerRef.current?.focus();\n }\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isOpen && event.key === 'Escape') {\n closePopover();\n }\n };\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (isOpen) {\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n openPopover({ initialFocus: 'first' });\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n openPopover({ initialFocus: 'last' });\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const handlePointerDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n closePopover({ restoreFocus: false });\n }\n };\n\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [closePopover, isOpen]);\n\n return (\n <div\n className={styles.popover}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n ref={containerRef}\n >\n <Button\n aria-controls={isOpen ? panelId : undefined}\n aria-expanded={isOpen}\n aria-haspopup={triggerAriaHasPopup}\n aria-label={triggerAccessibleLabel}\n className={cx(styles.trigger)}\n onKeyDown={handleTriggerKeyDown}\n onClick={() => (isOpen ? closePopover({ restoreFocus: false }) : openPopover())}\n ref={triggerRef}\n variant='secondary'\n >\n {triggerButtonContent}\n </Button>\n {isOpen && (\n <div\n className={cx(styles['popover-panel'], styles[position])}\n id={panelId}\n >\n {typeof children === 'function'\n ? children({ close: closePopover, initialFocus: initialFocusRef.current, isOpen })\n : children}\n </div>\n )}\n </div>\n );\n};\n"],"names":["Popover","children","position","triggerAccessibleLabel","triggerAriaHasPopup","triggerButtonContent","containerRef","useRef","initialFocusRef","undefined","panelId","useId","triggerRef","isOpen","setIsOpen","useState","openPopover","initialFocus","current","closePopover","useCallback","restoreFocus","focus","handleKeyDown","event","key","handleTriggerKeyDown","preventDefault","useEffect","handlePointerDown","contains","target","document","addEventListener","removeEventListener","jsxs","styles","popover","e","stopPropagation","jsx","Button","cx","trigger","close"],"mappings":";;;;;;;;;;GAuCaA,IAAUA,CAAC;AAAA,EACtBC,UAAAA;AAAAA,EACAC,UAAAA,IAAW;AAAA,EACXC,wBAAAA;AAAAA,EACAC,qBAAAA;AAAAA,EACAC,sBAAAA;AACY,MAAM;AAClB,QAAMC,IAAeC,EAAuB,IAAI,GAC1CC,IAAkBD,EAAwCE,MAAS,GACnEC,IAAUC,EAAAA,GACVC,IAAaL,EAA0B,IAAI,GAC3C,CAACM,GAAQC,CAAS,IAAIC,EAAS,EAAK,GAEpCC,IAAcA,CAAC;AAAA,IAAEC,cAAAA;AAAAA,EAAAA,IAAqC,OAAO;AACjET,IAAAA,EAAgBU,UAAUD,GAC1BH,EAAU,EAAI;AAAA,EAChB,GAEMK,IAAeC,EAAY,CAAC;AAAA,IAAEC,cAAAA,IAAe;AAAA,EAAA,IAA8B,OAAO;;AACtFP,IAAAA,EAAU,EAAK,GAEXO,OACFT,IAAAA,EAAWM,YAAXN,QAAAA,EAAoBU;AAAAA,EAExB,GAAG,CAAA,CAAE,GAECC,IAAgBA,CAACC,MAA+C;AACpE,IAAIX,KAAUW,EAAMC,QAAQ,YAC1BN,EAAAA;AAAAA,EAEJ,GAEMO,IAAuBA,CAACF,MAAkD;AAC9E,QAAIX,CAAAA,GAIJ;AAAA,UAAIW,EAAMC,QAAQ,aAAa;AAC7BD,QAAAA,EAAMG,eAAAA,GACNX,EAAY;AAAA,UAAEC,cAAc;AAAA,QAAA,CAAS;AACrC;AAAA,MACF;AAEA,MAAIO,EAAMC,QAAQ,cAChBD,EAAMG,eAAAA,GACNX,EAAY;AAAA,QAAEC,cAAc;AAAA,MAAA,CAAQ;AAAA;AAAA,EAExC;AAEAW,SAAAA,EAAU,MAAM;AACd,QAAI,CAACf;AACH;AAGF,UAAMgB,IAAoBA,CAACL,MAAsB;;AAC/C,OAAKlB,IAAAA,EAAaY,YAAbZ,QAAAA,EAAsBwB,SAASN,EAAMO,WACxCZ,EAAa;AAAA,QAAEE,cAAc;AAAA,MAAA,CAAO;AAAA,IAExC;AAEAW,oBAASC,iBAAiB,aAAaJ,CAAiB,GAEjD,MAAM;AACXG,eAASE,oBAAoB,aAAaL,CAAiB;AAAA,IAC7D;AAAA,EACF,GAAG,CAACV,GAAcN,CAAM,CAAC,GAGvB,gBAAAsB,EAAC,OAAA,EACC,WAAWC,EAAOC,SAClB,WAAWd,GACX,SAAUe,CAAAA,MAAMA,EAAEC,mBAClB,KAAKjC,GAAa,kBAAA,WAElB,UAAA;AAAA,IAAA,gBAAAkC,EAACC,GAAA,EACC,iBAAe5B,IAASH,IAAUD,QAClC,iBAAeI,GACf,iBAAeT,GACf,cAAYD,GACZ,WAAWuC,EAAGN,EAAOO,OAAO,GAC5B,WAAWjB,GACX,SAAS,MAAOb,IAASM,EAAa;AAAA,MAAEE,cAAc;AAAA,IAAA,CAAO,IAAIL,EAAAA,GACjE,KAAKJ,GACL,SAAQ,aAEPP,UAAAA,GACH;AAAA,IACCQ,KACC,gBAAA2B,EAAC,OAAA,EACC,WAAWE,EAAGN,EAAO,eAAe,GAAGA,EAAOlC,CAAQ,CAAC,GACvD,IAAIQ,GAEH,UAAA,OAAOT,KAAa,aACjBA,EAAS;AAAA,MAAE2C,OAAOzB;AAAAA,MAAcF,cAAcT,EAAgBU;AAAAA,MAASL,QAAAA;AAAAA,IAAAA,CAAQ,IAC/EZ,EAAAA,CACN;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('../../assets/index10.css');const e=require("react/jsx-runtime"),s=require("../../classix-5H4IWnMA.cjs"),i=require("../button/index.cjs"),a=require("../icon/index.cjs"),l=require("../aside/index.cjs"),_=require("../branding/index.cjs"),d=require("../figure/index.cjs"),u=require("../nav/index.cjs"),g="_portal_rcvlc_39",p="_content_rcvlc_266",x="_toggle_rcvlc_273",m="_open_rcvlc_337",n={portal:g,content:p,toggle:x,open:m},v=({children:t,portals:o,open:c,setOpen:r})=>e.jsxs(l.Aside,{className:s.t(n.portal,c&&n.open),sticky:!0,"data-component":"portal",children:[e.jsx(i.Button,{className:n.toggle,onClick:()=>r(!c),variant:"tertiary",children:e.jsx(a.Icon,{name:"sidebar"})}),e.jsx(d.Figure,{children:e.jsx(_.Branding,{name:"logo",size:48,variant:"white"})}),e.jsxs("div",{className:n.content,children:[o&&e.jsx(u.Nav,{horizontal:!0,children:o}),t&&t]})]});exports.Portal=v;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|