@cloudflare/kumo 1.16.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +163 -0
- package/ai/USAGE.md +38 -30
- package/ai/component-registry.json +237 -93
- package/ai/component-registry.md +421 -45
- package/ai/schemas.ts +15 -5
- package/dist/.build-complete +1 -1
- package/dist/ai/schemas.d.ts +105 -49
- package/dist/ai/schemas.d.ts.map +1 -1
- package/dist/ai/schemas.js +187 -174
- package/dist/ai/schemas.js.map +1 -1
- package/dist/chunks/{Legend-bov5dqf08wemc2qj.js → Legend-o0ntojbaplmszwk0.js} +4 -2
- package/dist/chunks/Legend-o0ntojbaplmszwk0.js.map +1 -0
- package/dist/chunks/badge-dan90i0rzy4pwa1j.js +102 -0
- package/dist/chunks/badge-dan90i0rzy4pwa1j.js.map +1 -0
- package/dist/chunks/banner-eiwcnk7ts21s3bnb.js +79 -0
- package/dist/chunks/banner-eiwcnk7ts21s3bnb.js.map +1 -0
- package/dist/chunks/{breadcrumbs-m79gm4gjwbfajpna.js → breadcrumbs-k39s28qx05vbxxth.js} +3 -3
- package/dist/chunks/{breadcrumbs-m79gm4gjwbfajpna.js.map → breadcrumbs-k39s28qx05vbxxth.js.map} +1 -1
- package/dist/chunks/{button-j0hi0afn33w9lxgi.js → button-cdxnqcgzwko8ooha.js} +55 -53
- package/dist/chunks/button-cdxnqcgzwko8ooha.js.map +1 -0
- package/dist/chunks/{checkbox-lawmt1894wr6rpgi.js → checkbox-kt1uojk2f9e0d0h1.js} +46 -55
- package/dist/chunks/checkbox-kt1uojk2f9e0d0h1.js.map +1 -0
- package/dist/chunks/{clipboard-text-ohx8kkpxisz382rj.js → clipboard-text-vcbvmtne4zjk4b18.js} +55 -54
- package/dist/chunks/clipboard-text-vcbvmtne4zjk4b18.js.map +1 -0
- package/dist/chunks/{code-liq1g6f5lhee305d.js → code-cz0w1y5z4h29a9eg.js} +18 -18
- package/dist/chunks/code-cz0w1y5z4h29a9eg.js.map +1 -0
- package/dist/chunks/{combobox-ft0u7rfaxawk0r0c.js → combobox-he2hd9e2ruknq5mp.js} +97 -82
- package/dist/chunks/combobox-he2hd9e2ruknq5mp.js.map +1 -0
- package/dist/chunks/{command-palette-b31nq4wk7o7gx4sa.js → command-palette-jc1w07jwakxvj23a.js} +159 -155
- package/dist/chunks/command-palette-jc1w07jwakxvj23a.js.map +1 -0
- package/dist/chunks/{dialog-l5tmwxrzp9g83jmw.js → dialog-oqh8l3l3zutpibxx.js} +22 -20
- package/dist/chunks/dialog-oqh8l3l3zutpibxx.js.map +1 -0
- package/dist/chunks/{dropdown-icy3xatdwhzr4une.js → dropdown-ncwhcd912vmone8k.js} +96 -90
- package/dist/chunks/dropdown-ncwhcd912vmone8k.js.map +1 -0
- package/dist/chunks/{empty-hrwtammqp0b2nvtf.js → empty-cj898km1r8xwuw44.js} +2 -2
- package/dist/chunks/{empty-hrwtammqp0b2nvtf.js.map → empty-cj898km1r8xwuw44.js.map} +1 -1
- package/dist/chunks/{field-csje72m7j9403fj5.js → field-krp6z6vfbkrvufz2.js} +3 -3
- package/dist/chunks/{field-csje72m7j9403fj5.js.map → field-krp6z6vfbkrvufz2.js.map} +1 -1
- package/dist/chunks/input-area-no30c09udyjxshu5.js +78 -0
- package/dist/chunks/input-area-no30c09udyjxshu5.js.map +1 -0
- package/dist/chunks/{input-group-cjsy8kh4vf9312xl.js → input-group-lxdd09p60cf27pe1.js} +26 -26
- package/dist/chunks/input-group-lxdd09p60cf27pe1.js.map +1 -0
- package/dist/chunks/{input-c8jmidy7gdqfiky1.js → input-h48k3uagzrgb98au.js} +40 -36
- package/dist/chunks/input-h48k3uagzrgb98au.js.map +1 -0
- package/dist/chunks/{label-i46xnnzdh9bsxk6a.js → label-latndvb1ngem7we8.js} +3 -3
- package/dist/chunks/{label-i46xnnzdh9bsxk6a.js.map → label-latndvb1ngem7we8.js.map} +1 -1
- package/dist/chunks/{layer-card-mu2w82x6ko1nhhtr.js → layer-card-l5yjvrxry1dhte57.js} +8 -8
- package/dist/chunks/{layer-card-mu2w82x6ko1nhhtr.js.map → layer-card-l5yjvrxry1dhte57.js.map} +1 -1
- package/dist/chunks/{link-o7yfj4kwgl19fklp.js → link-hn5ejal7nhh0o0b4.js} +2 -2
- package/dist/chunks/{link-o7yfj4kwgl19fklp.js.map → link-hn5ejal7nhh0o0b4.js.map} +1 -1
- package/dist/chunks/{loader-m5wfmqwgucrr4i5v.js → loader-hr2w7cpqeev3p3vl.js} +9 -6
- package/dist/chunks/loader-hr2w7cpqeev3p3vl.js.map +1 -0
- package/dist/chunks/{menubar-g1wqqjuyyfvsim83.js → menubar-f1pilzooe5mue7c4.js} +20 -20
- package/dist/chunks/menubar-f1pilzooe5mue7c4.js.map +1 -0
- package/dist/chunks/{meter-cqkrg5axjenbsuue.js → meter-gfa1hz9fhjnvx784.js} +2 -2
- package/dist/chunks/{meter-cqkrg5axjenbsuue.js.map → meter-gfa1hz9fhjnvx784.js.map} +1 -1
- package/dist/chunks/pagination-cu5lm6p5dxuycta4.js +243 -0
- package/dist/chunks/pagination-cu5lm6p5dxuycta4.js.map +1 -0
- package/dist/chunks/{popover-jurf834u2uywluux.js → popover-h300w4vit0s2ayej.js} +31 -28
- package/dist/chunks/popover-h300w4vit0s2ayej.js.map +1 -0
- package/dist/chunks/portal-provider-hwmkdmkpvct0cb76.js +18 -0
- package/dist/chunks/portal-provider-hwmkdmkpvct0cb76.js.map +1 -0
- package/dist/chunks/{radio-l9dzm6sohcvvrsdc.js → radio-jouttv89lbvhs55r.js} +47 -50
- package/dist/chunks/radio-jouttv89lbvhs55r.js.map +1 -0
- package/dist/chunks/select-kva5ru5f673kah1m.js +179 -0
- package/dist/chunks/select-kva5ru5f673kah1m.js.map +1 -0
- package/dist/chunks/{sensitive-input-lvtccf3iqc06lj7b.js → sensitive-input-hd4tpqkzifad1yca.js} +90 -84
- package/dist/chunks/sensitive-input-hd4tpqkzifad1yca.js.map +1 -0
- package/dist/chunks/{sidebar-l6rk9o5qf8k5vth1.js → sidebar-hljy3ssm8itc0ucx.js} +5 -5
- package/dist/chunks/sidebar-hljy3ssm8itc0ucx.js.map +1 -0
- package/dist/chunks/skeleton-line-epxenksfesr2fkcv.js +33 -0
- package/dist/chunks/skeleton-line-epxenksfesr2fkcv.js.map +1 -0
- package/dist/chunks/surface-cilvbyhmyujz1bee.js +36 -0
- package/dist/chunks/surface-cilvbyhmyujz1bee.js.map +1 -0
- package/dist/chunks/switch-ihaydbzem62bey4p.js +243 -0
- package/dist/chunks/switch-ihaydbzem62bey4p.js.map +1 -0
- package/dist/chunks/table-inweecadl3her7pd.js +183 -0
- package/dist/chunks/table-inweecadl3her7pd.js.map +1 -0
- package/dist/chunks/tabs-e7eh7l3mpk3xgmwq.js +92 -0
- package/dist/chunks/{tabs-n0t7iro7wr0pzgk2.js.map → tabs-e7eh7l3mpk3xgmwq.js.map} +1 -1
- package/dist/chunks/{text-gzt92mlji1lug13d.js → text-nmyi1rkwdj37f30f.js} +24 -22
- package/dist/chunks/text-nmyi1rkwdj37f30f.js.map +1 -0
- package/dist/chunks/{toast-r9ajsces7xp8l85w.js → toast-bpz6iaq54u9jmuu8.js} +62 -60
- package/dist/chunks/toast-bpz6iaq54u9jmuu8.js.map +1 -0
- package/dist/chunks/toml-nczb2z9n0o23o3ci.js +8 -0
- package/dist/chunks/toml-nczb2z9n0o23o3ci.js.map +1 -0
- package/dist/chunks/{tooltip-hnc71tg4gz2gpcvc.js → tooltip-belkznz8t8333h5f.js} +28 -21
- package/dist/chunks/tooltip-belkznz8t8333h5f.js.map +1 -0
- package/dist/chunks/{vendor-base-ui-ccr5l0ynrievzzv3.js → vendor-base-ui-k7bzesq81ie36nya.js} +55 -51
- package/dist/chunks/{vendor-base-ui-ccr5l0ynrievzzv3.js.map → vendor-base-ui-k7bzesq81ie36nya.js.map} +1 -1
- package/dist/code/server.js +10 -9
- package/dist/code/server.js.map +1 -1
- package/dist/code.js +3 -2
- package/dist/code.js.map +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.js +1 -1
- package/dist/components/breadcrumbs.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/chart.js +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/clipboard-text.js +1 -1
- package/dist/components/code.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/flow.js +5 -4
- package/dist/components/flow.js.map +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/layer-card.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/loader.js +2 -2
- package/dist/components/menubar.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/sensitive-input.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/toast.js +2 -2
- package/dist/components/tooltip.js +1 -1
- package/dist/index.js +76 -74
- package/dist/index.js.map +1 -1
- package/dist/primitives/accordion.js +1 -1
- package/dist/primitives/alert-dialog.js +1 -1
- package/dist/primitives/autocomplete.js +1 -1
- package/dist/primitives/avatar.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/checkbox-group.js +1 -1
- package/dist/primitives/checkbox.js +1 -1
- package/dist/primitives/collapsible.js +1 -1
- package/dist/primitives/combobox.js +1 -1
- package/dist/primitives/context-menu.js +1 -1
- package/dist/primitives/csp-provider.js +1 -1
- package/dist/primitives/dialog.js +1 -1
- package/dist/primitives/direction-provider.js +1 -1
- package/dist/primitives/drawer.js +1 -1
- package/dist/primitives/field.js +1 -1
- package/dist/primitives/fieldset.js +1 -1
- package/dist/primitives/form.js +1 -1
- package/dist/primitives/input.js +1 -1
- package/dist/primitives/menu.js +1 -1
- package/dist/primitives/menubar.js +1 -1
- package/dist/primitives/meter.js +1 -1
- package/dist/primitives/navigation-menu.js +1 -1
- package/dist/primitives/number-field.js +1 -1
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/preview-card.js +1 -1
- package/dist/primitives/progress.js +1 -1
- package/dist/primitives/radio-group.js +1 -1
- package/dist/primitives/radio.js +1 -1
- package/dist/primitives/scroll-area.js +1 -1
- package/dist/primitives/select.js +1 -1
- package/dist/primitives/separator.js +1 -1
- package/dist/primitives/slider.js +1 -1
- package/dist/primitives/switch.js +1 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/primitives/toast.js +1 -1
- package/dist/primitives/toggle-group.js +1 -1
- package/dist/primitives/toggle.js +1 -1
- package/dist/primitives/toolbar.js +1 -1
- package/dist/primitives/tooltip.js +1 -1
- package/dist/primitives.js +1 -1
- package/dist/scripts/theme-generator/config.d.ts.map +1 -1
- package/dist/scripts/theme-generator/config.js +226 -43
- package/dist/scripts/theme-generator/config.js.map +1 -1
- package/dist/src/code/provider.d.ts.map +1 -1
- package/dist/src/code/server.d.ts.map +1 -1
- package/dist/src/code/types.d.ts +1 -1
- package/dist/src/code/types.d.ts.map +1 -1
- package/dist/src/components/badge/badge.d.ts +76 -21
- package/dist/src/components/badge/badge.d.ts.map +1 -1
- package/dist/src/components/banner/banner.d.ts +5 -3
- package/dist/src/components/banner/banner.d.ts.map +1 -1
- package/dist/src/components/button/button.d.ts +4 -2
- package/dist/src/components/button/button.d.ts.map +1 -1
- package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
- package/dist/src/components/checkbox/checkbox.d.ts +1 -1
- package/dist/src/components/checkbox/checkbox.d.ts.map +1 -1
- package/dist/src/components/clipboard-text/clipboard-text.d.ts +2 -0
- package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
- package/dist/src/components/code/code.d.ts.map +1 -1
- package/dist/src/components/combobox/combobox.d.ts +8 -1
- package/dist/src/components/combobox/combobox.d.ts.map +1 -1
- package/dist/src/components/command-palette/command-palette.d.ts +9 -2
- package/dist/src/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/src/components/command-palette/types.d.ts +7 -0
- package/dist/src/components/command-palette/types.d.ts.map +1 -1
- package/dist/src/components/dialog/dialog.d.ts +8 -1
- package/dist/src/components/dialog/dialog.d.ts.map +1 -1
- package/dist/src/components/dropdown/dropdown.d.ts +17 -2
- package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/src/components/flow/diagram.d.ts.map +1 -1
- package/dist/src/components/input/input-area.d.ts.map +1 -1
- package/dist/src/components/input/input.d.ts +1 -2
- package/dist/src/components/input/input.d.ts.map +1 -1
- package/dist/src/components/loader/loader.d.ts +7 -1
- package/dist/src/components/loader/loader.d.ts.map +1 -1
- package/dist/src/components/loader/skeleton-line.d.ts +2 -1
- package/dist/src/components/loader/skeleton-line.d.ts.map +1 -1
- package/dist/src/components/pagination/pagination.d.ts +11 -1
- package/dist/src/components/pagination/pagination.d.ts.map +1 -1
- package/dist/src/components/popover/popover.d.ts +8 -1
- package/dist/src/components/popover/popover.d.ts.map +1 -1
- package/dist/src/components/radio/radio.d.ts +1 -1
- package/dist/src/components/radio/radio.d.ts.map +1 -1
- package/dist/src/components/select/select.d.ts +74 -3
- package/dist/src/components/select/select.d.ts.map +1 -1
- package/dist/src/components/sensitive-input/sensitive-input.d.ts +1 -1
- package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -1
- package/dist/src/components/surface/surface.d.ts +23 -23
- package/dist/src/components/surface/surface.d.ts.map +1 -1
- package/dist/src/components/switch/switch.d.ts.map +1 -1
- package/dist/src/components/table/table.d.ts +34 -2
- package/dist/src/components/table/table.d.ts.map +1 -1
- package/dist/src/components/tabs/tabs.d.ts.map +1 -1
- package/dist/src/components/text/text.d.ts +5 -0
- package/dist/src/components/text/text.d.ts.map +1 -1
- package/dist/src/components/toast/toast.d.ts +16 -9
- package/dist/src/components/toast/toast.d.ts.map +1 -1
- package/dist/src/components/tooltip/tooltip.d.ts +21 -6
- package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/portal-provider.d.ts +56 -0
- package/dist/src/utils/portal-provider.d.ts.map +1 -0
- package/dist/styles/kumo-binding.css +52 -46
- package/dist/styles/kumo-standalone.css +1 -1
- package/dist/styles/theme-fedramp.css +6 -6
- package/dist/styles/theme-kumo.css +183 -64
- package/dist/utils.js +8 -6
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- package/scripts/component-registry/index.test.ts +4 -4
- package/scripts/component-registry/metadata.ts +3 -3
- package/scripts/theme-generator/config.ts +236 -43
- package/dist/chunks/Legend-bov5dqf08wemc2qj.js.map +0 -1
- package/dist/chunks/badge-mrshucy2530o70cq.js +0 -56
- package/dist/chunks/badge-mrshucy2530o70cq.js.map +0 -1
- package/dist/chunks/banner-vzdjbqsb6em7tmdk.js +0 -75
- package/dist/chunks/banner-vzdjbqsb6em7tmdk.js.map +0 -1
- package/dist/chunks/button-j0hi0afn33w9lxgi.js.map +0 -1
- package/dist/chunks/checkbox-lawmt1894wr6rpgi.js.map +0 -1
- package/dist/chunks/clipboard-text-ohx8kkpxisz382rj.js.map +0 -1
- package/dist/chunks/code-liq1g6f5lhee305d.js.map +0 -1
- package/dist/chunks/combobox-ft0u7rfaxawk0r0c.js.map +0 -1
- package/dist/chunks/command-palette-b31nq4wk7o7gx4sa.js.map +0 -1
- package/dist/chunks/dialog-l5tmwxrzp9g83jmw.js.map +0 -1
- package/dist/chunks/dropdown-icy3xatdwhzr4une.js.map +0 -1
- package/dist/chunks/input-area-jko15sbc6zeage3l.js +0 -74
- package/dist/chunks/input-area-jko15sbc6zeage3l.js.map +0 -1
- package/dist/chunks/input-c8jmidy7gdqfiky1.js.map +0 -1
- package/dist/chunks/input-group-cjsy8kh4vf9312xl.js.map +0 -1
- package/dist/chunks/loader-m5wfmqwgucrr4i5v.js.map +0 -1
- package/dist/chunks/menubar-g1wqqjuyyfvsim83.js.map +0 -1
- package/dist/chunks/pagination-e3dp8bd80s35f7sd.js +0 -224
- package/dist/chunks/pagination-e3dp8bd80s35f7sd.js.map +0 -1
- package/dist/chunks/popover-jurf834u2uywluux.js.map +0 -1
- package/dist/chunks/radio-l9dzm6sohcvvrsdc.js.map +0 -1
- package/dist/chunks/select-hnt87e3cfos48qql.js +0 -130
- package/dist/chunks/select-hnt87e3cfos48qql.js.map +0 -1
- package/dist/chunks/sensitive-input-lvtccf3iqc06lj7b.js.map +0 -1
- package/dist/chunks/sidebar-l6rk9o5qf8k5vth1.js.map +0 -1
- package/dist/chunks/skeleton-line-1j5exu6vv07mmhfb.js +0 -28
- package/dist/chunks/skeleton-line-1j5exu6vv07mmhfb.js.map +0 -1
- package/dist/chunks/surface-dhshylwccuaz91d1.js +0 -21
- package/dist/chunks/surface-dhshylwccuaz91d1.js.map +0 -1
- package/dist/chunks/switch-fukrbip86khvqjn7.js +0 -241
- package/dist/chunks/switch-fukrbip86khvqjn7.js.map +0 -1
- package/dist/chunks/table-orfgzwvxh8yr90dk.js +0 -155
- package/dist/chunks/table-orfgzwvxh8yr90dk.js.map +0 -1
- package/dist/chunks/tabs-n0t7iro7wr0pzgk2.js +0 -86
- package/dist/chunks/text-gzt92mlji1lug13d.js.map +0 -1
- package/dist/chunks/toast-r9ajsces7xp8l85w.js.map +0 -1
- package/dist/chunks/tooltip-hnc71tg4gz2gpcvc.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as o, jsxs as i } from "react/jsx-runtime";
|
|
3
3
|
import { c as s } from "./cn-ct4n7r74mh8y0f48.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { u as h } from "./portal-provider-hwmkdmkpvct0cb76.js";
|
|
5
|
+
import { be as b, bf as C, bg as x, bh as N, bi as y, bj as L, bk as k, bl as T, bm as w } from "./vendor-base-ui-k7bzesq81ie36nya.js";
|
|
6
|
+
const _ = {
|
|
6
7
|
side: {
|
|
7
8
|
top: {
|
|
8
9
|
classes: "",
|
|
@@ -21,21 +22,21 @@ const H = {
|
|
|
21
22
|
description: "Popover appears to the right of the trigger"
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
},
|
|
25
|
+
}, V = {
|
|
25
26
|
side: "bottom"
|
|
26
27
|
};
|
|
27
|
-
function
|
|
28
|
-
return /* @__PURE__ */ o(
|
|
28
|
+
function n({ children: e, ...t }) {
|
|
29
|
+
return /* @__PURE__ */ o(b, { ...t, children: e });
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
-
function
|
|
31
|
+
n.displayName = "Popover";
|
|
32
|
+
function p({
|
|
32
33
|
children: e,
|
|
33
34
|
className: t,
|
|
34
35
|
asChild: a,
|
|
35
36
|
...r
|
|
36
37
|
}) {
|
|
37
38
|
return /* @__PURE__ */ o(
|
|
38
|
-
|
|
39
|
+
C,
|
|
39
40
|
{
|
|
40
41
|
className: t,
|
|
41
42
|
render: a ? e : void 0,
|
|
@@ -44,18 +45,20 @@ function n({
|
|
|
44
45
|
}
|
|
45
46
|
);
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
+
p.displayName = "Popover.Trigger";
|
|
48
49
|
function l({
|
|
49
50
|
children: e,
|
|
50
|
-
side: t =
|
|
51
|
+
side: t = V.side,
|
|
51
52
|
align: a = "center",
|
|
52
53
|
sideOffset: r = 8,
|
|
53
54
|
alignOffset: g = 0,
|
|
54
55
|
positionMethod: u = "absolute",
|
|
55
|
-
className: v
|
|
56
|
+
className: v,
|
|
57
|
+
container: P
|
|
56
58
|
}) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
const f = h();
|
|
60
|
+
return /* @__PURE__ */ o(x, { container: P ?? f ?? void 0, children: /* @__PURE__ */ o(
|
|
61
|
+
N,
|
|
59
62
|
{
|
|
60
63
|
align: a,
|
|
61
64
|
alignOffset: g,
|
|
@@ -63,7 +66,7 @@ function l({
|
|
|
63
66
|
sideOffset: r,
|
|
64
67
|
positionMethod: u,
|
|
65
68
|
children: /* @__PURE__ */ i(
|
|
66
|
-
|
|
69
|
+
y,
|
|
67
70
|
{
|
|
68
71
|
className: s(
|
|
69
72
|
"flex origin-(--transform-origin) flex-col rounded-lg bg-kumo-base px-4 py-3 text-sm text-kumo-default",
|
|
@@ -77,7 +80,7 @@ function l({
|
|
|
77
80
|
),
|
|
78
81
|
children: [
|
|
79
82
|
/* @__PURE__ */ o(
|
|
80
|
-
|
|
83
|
+
L,
|
|
81
84
|
{
|
|
82
85
|
className: s(
|
|
83
86
|
"flex",
|
|
@@ -86,7 +89,7 @@ function l({
|
|
|
86
89
|
"data-[side=right]:left-[-13px] data-[side=right]:-rotate-90",
|
|
87
90
|
"data-[side=top]:-bottom-2 data-[side=top]:rotate-180"
|
|
88
91
|
),
|
|
89
|
-
children: /* @__PURE__ */ o(
|
|
92
|
+
children: /* @__PURE__ */ o(A, {})
|
|
90
93
|
}
|
|
91
94
|
),
|
|
92
95
|
e
|
|
@@ -99,7 +102,7 @@ function l({
|
|
|
99
102
|
l.displayName = "Popover.Content";
|
|
100
103
|
function d({ className: e, ...t }) {
|
|
101
104
|
return /* @__PURE__ */ o(
|
|
102
|
-
|
|
105
|
+
k,
|
|
103
106
|
{
|
|
104
107
|
className: s("m-0 text-base leading-6 font-medium", e),
|
|
105
108
|
...t
|
|
@@ -109,7 +112,7 @@ function d({ className: e, ...t }) {
|
|
|
109
112
|
d.displayName = "Popover.Title";
|
|
110
113
|
function c({ className: e, ...t }) {
|
|
111
114
|
return /* @__PURE__ */ o(
|
|
112
|
-
|
|
115
|
+
T,
|
|
113
116
|
{
|
|
114
117
|
className: s("m-0 text-base leading-6 text-kumo-subtle", e),
|
|
115
118
|
...t
|
|
@@ -124,7 +127,7 @@ function m({
|
|
|
124
127
|
...r
|
|
125
128
|
}) {
|
|
126
129
|
return /* @__PURE__ */ o(
|
|
127
|
-
|
|
130
|
+
w,
|
|
128
131
|
{
|
|
129
132
|
className: t,
|
|
130
133
|
render: a ? e : void 0,
|
|
@@ -134,7 +137,7 @@ function m({
|
|
|
134
137
|
);
|
|
135
138
|
}
|
|
136
139
|
m.displayName = "Popover.Close";
|
|
137
|
-
function
|
|
140
|
+
function A(e) {
|
|
138
141
|
return /* @__PURE__ */ i("svg", { width: "20", height: "10", viewBox: "0 0 20 10", fill: "none", ...e, children: [
|
|
139
142
|
/* @__PURE__ */ o(
|
|
140
143
|
"path",
|
|
@@ -159,22 +162,22 @@ function k(e) {
|
|
|
159
162
|
)
|
|
160
163
|
] });
|
|
161
164
|
}
|
|
162
|
-
const
|
|
163
|
-
Trigger:
|
|
165
|
+
const $ = Object.assign(n, {
|
|
166
|
+
Trigger: p,
|
|
164
167
|
Content: l,
|
|
165
168
|
Title: d,
|
|
166
169
|
Description: c,
|
|
167
170
|
Close: m
|
|
168
171
|
});
|
|
169
172
|
export {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
173
|
+
_ as K,
|
|
174
|
+
$ as P,
|
|
175
|
+
n as a,
|
|
176
|
+
p as b,
|
|
174
177
|
l as c,
|
|
175
178
|
d,
|
|
176
179
|
c as e,
|
|
177
180
|
m as f,
|
|
178
|
-
|
|
181
|
+
V as g
|
|
179
182
|
};
|
|
180
|
-
//# sourceMappingURL=popover-
|
|
183
|
+
//# sourceMappingURL=popover-h300w4vit0s2ayej.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover-h300w4vit0s2ayej.js","sources":["../../src/components/popover/popover.tsx"],"sourcesContent":["import { Popover as PopoverBase } from \"@base-ui/react/popover\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n usePortalContainer,\n type PortalContainer,\n} from \"../../utils/portal-provider\";\n\n/** Popover side variant definitions mapping positions to their Tailwind classes. */\nexport const KUMO_POPOVER_VARIANTS = {\n side: {\n top: {\n classes: \"\",\n description: \"Popover appears above the trigger\",\n },\n bottom: {\n classes: \"\",\n description: \"Popover appears below the trigger\",\n },\n left: {\n classes: \"\",\n description: \"Popover appears to the left of the trigger\",\n },\n right: {\n classes: \"\",\n description: \"Popover appears to the right of the trigger\",\n },\n },\n} as const;\n\nexport const KUMO_POPOVER_DEFAULT_VARIANTS = {\n side: \"bottom\",\n} as const;\n\n// Derived types from KUMO_POPOVER_VARIANTS\nexport type KumoPopoverSide = keyof typeof KUMO_POPOVER_VARIANTS.side;\n\nexport interface KumoPopoverVariantsProps {\n /**\n * Which side of the trigger the popover appears on.\n * - `\"top\"` — Above the trigger\n * - `\"bottom\"` — Below the trigger\n * - `\"left\"` — Left of the trigger\n * - `\"right\"` — Right of the trigger\n * @default \"bottom\"\n */\n side?: KumoPopoverSide;\n}\n\n// ============================================================================\n// Popover Root\n// ============================================================================\n\ntype BasePopoverRootProps = ComponentPropsWithoutRef<typeof PopoverBase.Root>;\n\nexport type PopoverRootProps = BasePopoverRootProps;\n\nfunction PopoverRoot({ children, ...props }: PopoverRootProps) {\n return <PopoverBase.Root {...props}>{children}</PopoverBase.Root>;\n}\n\nPopoverRoot.displayName = \"Popover\";\n\n// ============================================================================\n// Popover Trigger\n// ============================================================================\n\ntype BasePopoverTriggerProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Trigger\n>;\n\nexport type PopoverTriggerProps = BasePopoverTriggerProps & {\n /** When true, the trigger element will be the child element */\n asChild?: boolean;\n};\n\nfunction PopoverTrigger({\n children,\n className,\n asChild,\n ...props\n}: PopoverTriggerProps) {\n return (\n <PopoverBase.Trigger\n className={className}\n render={\n asChild ? (children as BasePopoverTriggerProps[\"render\"]) : undefined\n }\n {...props}\n >\n {asChild ? undefined : children}\n </PopoverBase.Trigger>\n );\n}\n\nPopoverTrigger.displayName = \"Popover.Trigger\";\n\n// ============================================================================\n// Popover Content\n// ============================================================================\n\n/** Alignment options for popover positioning */\ntype PopoverAlign = \"start\" | \"center\" | \"end\";\n\n/**\n * Popover content panel props.\n *\n * @example\n * ```tsx\n * <Popover.Content side=\"top\" align=\"start\" sideOffset={12}>\n * <p>Popover body</p>\n * </Popover.Content>\n * ```\n */\nexport type PopoverContentProps = KumoPopoverVariantsProps & {\n /**\n * How to align the popover relative to the trigger.\n * @default \"center\"\n */\n align?: PopoverAlign;\n /**\n * Distance between the trigger and the popover in pixels.\n * @default 8\n */\n sideOffset?: number;\n /**\n * Additional offset along the alignment axis in pixels.\n * @default 0\n */\n alignOffset?: number;\n /**\n * Determines which CSS `position` property to use.\n * Use \"fixed\" when the popover needs to escape stacking contexts (e.g., inside sticky headers).\n * @default \"absolute\"\n */\n positionMethod?: \"absolute\" | \"fixed\";\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Content to render inside the popover. */\n children?: ReactNode;\n /**\n * Container element for the portal. Use this to render the popover inside\n * a Shadow DOM or custom container. Overrides `KumoPortalProvider` context.\n * @default document.body (or KumoPortalProvider container if set)\n */\n container?: PortalContainer;\n};\n\nfunction PopoverContent({\n children,\n side = KUMO_POPOVER_DEFAULT_VARIANTS.side,\n align = \"center\",\n sideOffset = 8,\n alignOffset = 0,\n positionMethod = \"absolute\",\n className,\n container: containerProp,\n}: PopoverContentProps) {\n const contextContainer = usePortalContainer();\n const container = containerProp ?? contextContainer ?? undefined;\n\n return (\n <PopoverBase.Portal container={container}>\n <PopoverBase.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n positionMethod={positionMethod}\n >\n <PopoverBase.Popup\n className={cn(\n \"flex origin-(--transform-origin) flex-col rounded-lg bg-kumo-base px-4 py-3 text-sm text-kumo-default\",\n \"shadow-lg shadow-kumo-tip-shadow outline outline-kumo-fill\",\n \"transition-[transform,scale,opacity] duration-150\",\n \"data-starting-style:scale-90 data-starting-style:opacity-0\",\n \"data-ending-style:scale-90 data-ending-style:opacity-0\",\n \"data-instant:duration-0\",\n \"kumo-popover-popup\",\n className,\n )}\n >\n <PopoverBase.Arrow\n className={cn(\n \"flex\",\n \"data-[side=bottom]:-top-2\",\n \"data-[side=left]:right-[-13px] data-[side=left]:rotate-90\",\n \"data-[side=right]:left-[-13px] data-[side=right]:-rotate-90\",\n \"data-[side=top]:-bottom-2 data-[side=top]:rotate-180\",\n )}\n >\n <ArrowSvg />\n </PopoverBase.Arrow>\n {children}\n </PopoverBase.Popup>\n </PopoverBase.Positioner>\n </PopoverBase.Portal>\n );\n}\n\nPopoverContent.displayName = \"Popover.Content\";\n\n// ============================================================================\n// Popover Title\n// ============================================================================\n\ntype BasePopoverTitleProps = ComponentPropsWithoutRef<typeof PopoverBase.Title>;\n\nexport type PopoverTitleProps = BasePopoverTitleProps;\n\nfunction PopoverTitle({ className, ...props }: PopoverTitleProps) {\n return (\n <PopoverBase.Title\n className={cn(\"m-0 text-base leading-6 font-medium\", className)}\n {...props}\n />\n );\n}\n\nPopoverTitle.displayName = \"Popover.Title\";\n\n// ============================================================================\n// Popover Description\n// ============================================================================\n\ntype BasePopoverDescriptionProps = ComponentPropsWithoutRef<\n typeof PopoverBase.Description\n>;\n\nexport type PopoverDescriptionProps = BasePopoverDescriptionProps;\n\nfunction PopoverDescription({ className, ...props }: PopoverDescriptionProps) {\n return (\n <PopoverBase.Description\n className={cn(\"m-0 text-base leading-6 text-kumo-subtle\", className)}\n {...props}\n />\n );\n}\n\nPopoverDescription.displayName = \"Popover.Description\";\n\n// ============================================================================\n// Popover Close\n// ============================================================================\n\ntype BasePopoverCloseProps = ComponentPropsWithoutRef<typeof PopoverBase.Close>;\n\nexport type PopoverCloseProps = BasePopoverCloseProps & {\n /** When true, the close element will be the child element */\n asChild?: boolean;\n};\n\nfunction PopoverClose({\n children,\n className,\n asChild,\n ...props\n}: PopoverCloseProps) {\n return (\n <PopoverBase.Close\n className={className}\n render={\n asChild ? (children as BasePopoverCloseProps[\"render\"]) : undefined\n }\n {...props}\n >\n {asChild ? undefined : children}\n </PopoverBase.Close>\n );\n}\n\nPopoverClose.displayName = \"Popover.Close\";\n\n// ============================================================================\n// Arrow SVG\n// ============================================================================\n\n/**\n * Arrow SVG with three paths for proper border rendering in both light and dark modes.\n * This approach matches Base UI's popover/tooltip implementation.\n *\n * The three paths are:\n * 1. ArrowFill - The main arrow body, matches popover background\n * 2. ArrowOuterStroke - Border visible in light mode only (transparent in dark)\n * 3. ArrowInnerStroke - Border visible in dark mode only (transparent in light)\n *\n * This is necessary because the outer and inner stroke paths have different geometries,\n * and using both ensures the arrow border aligns perfectly with the popover's outline\n * in both color modes.\n *\n * @see https://base-ui.com/react/components/popover\n */\nfunction ArrowSvg(props: React.ComponentProps<\"svg\">) {\n return (\n <svg width=\"20\" height=\"10\" viewBox=\"0 0 20 10\" fill=\"none\" {...props}>\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n className=\"fill-kumo-base\"\n />\n <path\n d=\"M8.99542 1.85876C9.75604 1.17425 10.9106 1.17422 11.6713 1.85878L16.5281 6.22989C17.0789 6.72568 17.7938 7.00001 18.5349 7.00001L15.89 7L11.0023 2.60207C10.622 2.2598 10.0447 2.2598 9.66436 2.60207L4.77734 7L2.13171 7.00001C2.87284 7.00001 3.58774 6.72568 4.13861 6.22989L8.99542 1.85876Z\"\n className=\"fill-kumo-tip-shadow\"\n />\n <path\n d=\"M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z\"\n className=\"fill-kumo-tip-stroke\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\n/**\n * Popover component for displaying accessible popup content anchored to a trigger.\n *\n * @example\n * ```tsx\n * <Popover>\n * <Popover.Trigger asChild>\n * <Button>Open</Button>\n * </Popover.Trigger>\n * <Popover.Content>\n * <Popover.Title>Notifications</Popover.Title>\n * <Popover.Description>You are all caught up!</Popover.Description>\n * </Popover.Content>\n * </Popover>\n * ```\n *\n * @see https://base-ui.com/react/components/popover\n */\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Title: PopoverTitle,\n Description: PopoverDescription,\n Close: PopoverClose,\n});\n\n// Export sub-components for direct access and type inference\nexport {\n PopoverRoot,\n PopoverTrigger,\n PopoverContent,\n PopoverTitle,\n PopoverDescription,\n PopoverClose,\n};\n"],"names":["KUMO_POPOVER_VARIANTS","KUMO_POPOVER_DEFAULT_VARIANTS","PopoverRoot","children","props","PopoverBase.Root","PopoverTrigger","className","asChild","jsx","PopoverBase.Trigger","PopoverContent","side","align","sideOffset","alignOffset","positionMethod","containerProp","contextContainer","usePortalContainer","PopoverBase.Portal","PopoverBase.Positioner","jsxs","PopoverBase.Popup","cn","PopoverBase.Arrow","ArrowSvg","PopoverTitle","PopoverBase.Title","PopoverDescription","PopoverBase.Description","PopoverClose","PopoverBase.Close","Popover"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
3
|
+
import { createContext as n, useContext as u } from "react";
|
|
4
|
+
const t = n(null);
|
|
5
|
+
function l({
|
|
6
|
+
container: o,
|
|
7
|
+
children: r
|
|
8
|
+
}) {
|
|
9
|
+
return /* @__PURE__ */ e(t.Provider, { value: o, children: r });
|
|
10
|
+
}
|
|
11
|
+
function s() {
|
|
12
|
+
return u(t);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
l as K,
|
|
16
|
+
s as u
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=portal-provider-hwmkdmkpvct0cb76.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-provider-hwmkdmkpvct0cb76.js","sources":["../../src/utils/portal-provider.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\n/**\n * Portal container type - matches Base UI's FloatingPortal container prop.\n * Supports HTMLElement, ShadowRoot, or a ref to either.\n */\nexport type PortalContainer =\n | HTMLElement\n | ShadowRoot\n | null\n | RefObject<HTMLElement | ShadowRoot | null>;\n\nconst PortalContainerContext = createContext<PortalContainer>(null);\n\n/**\n * KumoPortalProvider — sets the default portal container for all Kumo overlay components.\n *\n * Use this to render Kumo overlays (Dialog, Tooltip, DropdownMenu, Select, Combobox,\n * Popover, CommandPalette, Toast) inside a Shadow DOM or custom container.\n *\n * When not provided, overlays portal to `document.body` (default browser behavior).\n * Individual components can override this via their own `container` prop.\n *\n * @example Shadow DOM usage\n * ```tsx\n * function WebComponent() {\n * const shadowRef = useRef<ShadowRoot>(null);\n *\n * useEffect(() => {\n * shadowRef.current = hostElement.attachShadow({ mode: 'open' });\n * }, []);\n *\n * return (\n * <KumoPortalProvider container={shadowRef.current}>\n * <App />\n * </KumoPortalProvider>\n * );\n * }\n * ```\n *\n * @example Custom container\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null);\n *\n * <div ref={containerRef}>\n * <KumoPortalProvider container={containerRef}>\n * <Dialog.Root>...</Dialog.Root>\n * </KumoPortalProvider>\n * </div>\n * ```\n */\nexport function KumoPortalProvider({\n container,\n children,\n}: {\n /** The container element or ShadowRoot to portal overlays into. */\n container: PortalContainer;\n children: ReactNode;\n}) {\n return (\n <PortalContainerContext.Provider value={container}>\n {children}\n </PortalContainerContext.Provider>\n );\n}\n\n/**\n * Hook to get the portal container from context.\n * Returns null if no provider is present (defaults to document.body).\n *\n * @internal Used by overlay components to resolve their portal container.\n */\nexport function usePortalContainer(): PortalContainer {\n return useContext(PortalContainerContext);\n}\n"],"names":["PortalContainerContext","createContext","KumoPortalProvider","container","children","usePortalContainer","useContext"],"mappings":";;;AAiBA,MAAMA,IAAyBC,EAA+B,IAAI;AAuC3D,SAASC,EAAmB;AAAA,EACjC,WAAAC;AAAA,EACA,UAAAC;AACF,GAIG;AACD,2BACGJ,EAAuB,UAAvB,EAAgC,OAAOG,GACrC,UAAAC,GACH;AAEJ;AAQO,SAASC,IAAsC;AACpD,SAAOC,EAAWN,CAAsB;AAC1C;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as e, jsxs as m } from "react/jsx-runtime";
|
|
3
3
|
import { forwardRef as y, createContext as j, useContext as A } from "react";
|
|
4
4
|
import { c as o } from "./cn-ct4n7r74mh8y0f48.js";
|
|
5
|
-
import { R as I, P as C, Q as G,
|
|
5
|
+
import { R as I, P as C, Q as G, bn as k, bo as b } from "./vendor-base-ui-k7bzesq81ie36nya.js";
|
|
6
6
|
const x = {
|
|
7
7
|
variant: {
|
|
8
8
|
default: {
|
|
@@ -20,7 +20,7 @@ const x = {
|
|
|
20
20
|
description: "Standard inline radio item"
|
|
21
21
|
},
|
|
22
22
|
card: {
|
|
23
|
-
classes: "rounded-lg border border-kumo-
|
|
23
|
+
classes: "rounded-lg border border-kumo-hairline bg-kumo-base p-3 transition-colors hover:bg-kumo-tint has-[[data-checked]]:border-kumo-interact has-[[data-checked]]:bg-kumo-tint",
|
|
24
24
|
description: "Choice card appearance with border, padding, and highlighted selection state"
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -30,11 +30,11 @@ const x = {
|
|
|
30
30
|
};
|
|
31
31
|
function M({
|
|
32
32
|
variant: t = v.variant,
|
|
33
|
-
appearance:
|
|
33
|
+
appearance: a = v.appearance
|
|
34
34
|
} = {}) {
|
|
35
35
|
return o(
|
|
36
36
|
x.variant[t].classes,
|
|
37
|
-
x.appearance[
|
|
37
|
+
x.appearance[a].classes
|
|
38
38
|
);
|
|
39
39
|
}
|
|
40
40
|
const N = j({
|
|
@@ -43,42 +43,42 @@ const N = j({
|
|
|
43
43
|
}), R = y(
|
|
44
44
|
({
|
|
45
45
|
className: t,
|
|
46
|
-
disabled:
|
|
47
|
-
variant:
|
|
46
|
+
disabled: a,
|
|
47
|
+
variant: r = "default",
|
|
48
48
|
appearance: s,
|
|
49
|
-
label:
|
|
50
|
-
description:
|
|
49
|
+
label: i,
|
|
50
|
+
description: n,
|
|
51
51
|
value: c
|
|
52
52
|
}, l) => {
|
|
53
|
-
const { controlPosition: f, appearance: d } = A(N), u = (s ?? d) === "card",
|
|
53
|
+
const { controlPosition: f, appearance: d } = A(N), u = (s ?? d) === "card", p = u ? "end" : f;
|
|
54
54
|
return u ? /* @__PURE__ */ m(
|
|
55
55
|
"label",
|
|
56
56
|
{
|
|
57
57
|
className: o(
|
|
58
|
-
"m-0 group relative flex items-start gap-3 rounded-lg border border-kumo-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
"m-0 group relative flex items-start gap-3 rounded-lg border border-kumo-hairline bg-kumo-base p-3 transition-colors has-[[data-checked]]:border-kumo-interact has-[[data-checked]]:bg-kumo-tint",
|
|
59
|
+
r === "error" && "border-kumo-danger has-[[data-checked]]:border-kumo-danger has-[[data-checked]]:bg-kumo-base",
|
|
60
|
+
a ? "cursor-not-allowed opacity-50" : o(
|
|
61
61
|
"has-[[data-disabled]]:cursor-not-allowed has-[[data-disabled]]:opacity-50 cursor-pointer",
|
|
62
|
-
|
|
62
|
+
r !== "error" && "hover:not-has-[[data-disabled]]:bg-kumo-tint"
|
|
63
63
|
),
|
|
64
64
|
t
|
|
65
65
|
),
|
|
66
66
|
children: [
|
|
67
67
|
/* @__PURE__ */ m("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
68
|
-
/* @__PURE__ */ e("span", { className: "text-base font-medium text-kumo-default", children:
|
|
69
|
-
|
|
68
|
+
/* @__PURE__ */ e("span", { className: "text-base font-medium text-kumo-default", children: i }),
|
|
69
|
+
n && /* @__PURE__ */ e("span", { className: "text-sm text-kumo-subtle", children: n })
|
|
70
70
|
] }),
|
|
71
71
|
/* @__PURE__ */ e(
|
|
72
|
-
|
|
72
|
+
k,
|
|
73
73
|
{
|
|
74
74
|
ref: l,
|
|
75
75
|
value: c,
|
|
76
|
-
disabled:
|
|
76
|
+
disabled: a,
|
|
77
77
|
className: o(
|
|
78
78
|
"relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-kumo-base ring",
|
|
79
|
-
|
|
80
|
-
!
|
|
81
|
-
!
|
|
79
|
+
r === "error" ? "ring-kumo-danger" : "ring-kumo-line",
|
|
80
|
+
!a && r !== "error" && "group-hover:ring-kumo-hairline focus-visible:ring-kumo-hairline focus-visible:outline-offset-3",
|
|
81
|
+
!a && r === "error" && "focus-visible:ring-kumo-danger focus-visible:outline-offset-3",
|
|
82
82
|
"data-[checked]:bg-kumo-contrast"
|
|
83
83
|
),
|
|
84
84
|
children: /* @__PURE__ */ e(
|
|
@@ -100,22 +100,22 @@ const N = j({
|
|
|
100
100
|
"m-0 group relative inline-flex items-center gap-2",
|
|
101
101
|
// "start" (default): radio before label
|
|
102
102
|
// "end": label before radio using flex-row-reverse
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
p === "end" && "flex-row-reverse justify-end",
|
|
104
|
+
a ? "cursor-not-allowed opacity-50" : "cursor-pointer",
|
|
105
105
|
t
|
|
106
106
|
),
|
|
107
107
|
children: [
|
|
108
108
|
/* @__PURE__ */ e(
|
|
109
|
-
|
|
109
|
+
k,
|
|
110
110
|
{
|
|
111
111
|
ref: l,
|
|
112
112
|
value: c,
|
|
113
|
-
disabled:
|
|
113
|
+
disabled: a,
|
|
114
114
|
className: o(
|
|
115
115
|
"relative flex h-4 w-4 items-center justify-center rounded-full border-0 bg-kumo-base ring after:absolute after:-inset-x-3 after:-inset-y-2",
|
|
116
|
-
|
|
117
|
-
!
|
|
118
|
-
!
|
|
116
|
+
r === "error" ? "ring-kumo-danger" : "ring-kumo-line",
|
|
117
|
+
!a && r !== "error" && "group-hover:ring-kumo-hairline focus-visible:ring-kumo-hairline focus-visible:outline-offset-3",
|
|
118
|
+
!a && r === "error" && "focus-visible:ring-kumo-danger focus-visible:outline-offset-3",
|
|
119
119
|
"data-[checked]:bg-kumo-contrast"
|
|
120
120
|
),
|
|
121
121
|
children: /* @__PURE__ */ e(
|
|
@@ -128,29 +128,29 @@ const N = j({
|
|
|
128
128
|
)
|
|
129
129
|
}
|
|
130
130
|
),
|
|
131
|
-
/* @__PURE__ */ e("span", { className: "text-base
|
|
131
|
+
/* @__PURE__ */ e("span", { className: "text-base text-kumo-default", children: i })
|
|
132
132
|
]
|
|
133
133
|
}
|
|
134
134
|
);
|
|
135
135
|
}
|
|
136
136
|
);
|
|
137
137
|
R.displayName = "Radio.Item";
|
|
138
|
-
function
|
|
138
|
+
function g({
|
|
139
139
|
legend: t,
|
|
140
|
-
children:
|
|
141
|
-
orientation:
|
|
140
|
+
children: a,
|
|
141
|
+
orientation: r = "vertical",
|
|
142
142
|
appearance: s = "default",
|
|
143
|
-
error:
|
|
144
|
-
description:
|
|
143
|
+
error: i,
|
|
144
|
+
description: n,
|
|
145
145
|
defaultValue: c,
|
|
146
146
|
value: l,
|
|
147
147
|
onValueChange: f,
|
|
148
148
|
disabled: d,
|
|
149
|
-
controlPosition:
|
|
149
|
+
controlPosition: h = "start",
|
|
150
150
|
name: u,
|
|
151
|
-
className:
|
|
151
|
+
className: p
|
|
152
152
|
}) {
|
|
153
|
-
return /* @__PURE__ */ e(N.Provider, { value: { controlPosition:
|
|
153
|
+
return /* @__PURE__ */ e(N.Provider, { value: { controlPosition: h, appearance: s }, children: /* @__PURE__ */ e(
|
|
154
154
|
I,
|
|
155
155
|
{
|
|
156
156
|
defaultValue: c,
|
|
@@ -162,39 +162,36 @@ function p({
|
|
|
162
162
|
C,
|
|
163
163
|
{
|
|
164
164
|
disabled: d,
|
|
165
|
-
className: o(
|
|
166
|
-
"flex flex-col gap-4 rounded-lg border border-kumo-line p-4",
|
|
167
|
-
g
|
|
168
|
-
),
|
|
165
|
+
className: o("flex flex-col gap-4", p),
|
|
169
166
|
children: [
|
|
170
|
-
/* @__PURE__ */ e(G, { className: "text-
|
|
167
|
+
/* @__PURE__ */ e(G, { className: "text-base font-medium text-kumo-default", children: t }),
|
|
171
168
|
/* @__PURE__ */ e(
|
|
172
169
|
"div",
|
|
173
170
|
{
|
|
174
171
|
className: o(
|
|
175
|
-
|
|
172
|
+
r === "vertical" ? o("flex flex-col", s === "card" ? "gap-3" : "gap-2") : s === "card" ? "grid grid-cols-2 gap-3" : "flex flex-row flex-wrap gap-2"
|
|
176
173
|
),
|
|
177
|
-
children:
|
|
174
|
+
children: a
|
|
178
175
|
}
|
|
179
176
|
),
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
i && /* @__PURE__ */ e("p", { className: "text-sm text-kumo-danger", children: i }),
|
|
178
|
+
n && /* @__PURE__ */ e("p", { className: "text-sm text-kumo-subtle", children: n })
|
|
182
179
|
]
|
|
183
180
|
}
|
|
184
181
|
)
|
|
185
182
|
}
|
|
186
183
|
) });
|
|
187
184
|
}
|
|
188
|
-
|
|
189
|
-
const V = Object.assign(
|
|
185
|
+
g.displayName = "Radio.Group";
|
|
186
|
+
const V = Object.assign(g, {
|
|
190
187
|
Item: R,
|
|
191
|
-
Group:
|
|
188
|
+
Group: g
|
|
192
189
|
});
|
|
193
190
|
export {
|
|
194
191
|
x as K,
|
|
195
192
|
V as R,
|
|
196
|
-
|
|
193
|
+
g as a,
|
|
197
194
|
v as b,
|
|
198
195
|
M as r
|
|
199
196
|
};
|
|
200
|
-
//# sourceMappingURL=radio-
|
|
197
|
+
//# sourceMappingURL=radio-jouttv89lbvhs55r.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-jouttv89lbvhs55r.js","sources":["../../src/components/radio/radio.tsx"],"sourcesContent":["import { forwardRef, createContext, useContext, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Fieldset } from \"@base-ui/react/fieldset\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\n\n/** Radio variant definitions mapping variant names to their Tailwind classes. */\nexport const KUMO_RADIO_VARIANTS = {\n variant: {\n default: {\n classes: \"ring-kumo-line\",\n description: \"Default radio appearance\",\n },\n error: {\n classes: \"ring-kumo-danger\",\n description: \"Error state for validation failures\",\n },\n },\n appearance: {\n default: {\n classes: \"\",\n description: \"Standard inline radio item\",\n },\n card: {\n classes:\n \"rounded-lg border border-kumo-hairline bg-kumo-base p-3 transition-colors hover:bg-kumo-tint has-[[data-checked]]:border-kumo-interact has-[[data-checked]]:bg-kumo-tint\",\n description:\n \"Choice card appearance with border, padding, and highlighted selection state\",\n },\n },\n} as const;\n\nexport const KUMO_RADIO_DEFAULT_VARIANTS = {\n variant: \"default\",\n appearance: \"default\",\n} as const;\n\n// Derived types from KUMO_RADIO_VARIANTS\nexport type KumoRadioVariant = keyof typeof KUMO_RADIO_VARIANTS.variant;\nexport type KumoRadioAppearance = keyof typeof KUMO_RADIO_VARIANTS.appearance;\n\nexport interface KumoRadioVariantsProps {\n /**\n * Visual variant.\n * - `\"default\"` — Standard radio appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\n variant?: KumoRadioVariant;\n /**\n * Visual appearance.\n * - `\"default\"` — Standard inline radio item\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n * @default \"default\"\n */\n appearance?: KumoRadioAppearance;\n}\n\nexport function radioVariants({\n variant = KUMO_RADIO_DEFAULT_VARIANTS.variant,\n appearance = KUMO_RADIO_DEFAULT_VARIANTS.appearance,\n}: KumoRadioVariantsProps = {}) {\n return cn(\n KUMO_RADIO_VARIANTS.variant[variant].classes,\n KUMO_RADIO_VARIANTS.appearance[appearance].classes,\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type RadioVariant = KumoRadioVariant;\n\n/** Position of the radio control relative to its label */\nexport type RadioControlPosition = \"start\" | \"end\";\n\n// Context for passing controlPosition and appearance from Group to Items\nconst RadioGroupContext = createContext<{\n controlPosition: RadioControlPosition;\n appearance: KumoRadioAppearance;\n}>({\n controlPosition: \"start\",\n appearance: \"default\",\n});\n\n/**\n * Radio group component props (with built-in Fieldset and RadioGroup)\n *\n * @example\n * // Basic usage\n * ```tsx\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Horizontal layout\n * ```tsx\n * <Radio.Group legend=\"Size\" orientation=\"horizontal\" defaultValue=\"md\">\n * <Radio.Item label=\"Small\" value=\"sm\" />\n * <Radio.Item label=\"Medium\" value=\"md\" />\n * <Radio.Item label=\"Large\" value=\"lg\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // With error and description\n * ```tsx\n * <Radio.Group\n * legend=\"Payment method\"\n * error=\"Please select a payment method\"\n * description=\"Choose how you'd like to pay\"\n * >\n * <Radio.Item label=\"Credit Card\" value=\"card\" />\n * <Radio.Item label=\"PayPal\" value=\"paypal\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Controlled\n * ```tsx\n * const [value, setValue] = useState(\"email\");\n * <Radio.Group legend=\"Contact\" value={value} onValueChange={setValue}>\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"Phone\" value=\"phone\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Label before radio (controlPosition=\"end\")\n * ```tsx\n * <Radio.Group legend=\"Options\" controlPosition=\"end\" defaultValue=\"a\">\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * <Radio.Item label=\"Option B\" value=\"b\" />\n * </Radio.Group>\n * ```\n */\nexport interface RadioGroupProps {\n /** Legend text for the group (required for accessibility) */\n legend: string;\n /** Child Radio.Item components */\n children: ReactNode;\n /** Layout direction of the radio items */\n orientation?: \"vertical\" | \"horizontal\";\n /**\n * Visual appearance applied to all Radio.Item children.\n * - `\"default\"` — Standard inline radio items\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n *\n * Individual items can override this with their own `appearance` prop.\n * @default \"default\"\n */\n appearance?: KumoRadioAppearance;\n /** Error message for the group */\n error?: string;\n /** Helper text for the group */\n description?: ReactNode;\n /** Value of the radio that should be initially selected (uncontrolled) */\n defaultValue?: string;\n /** Value of the radio that should be selected (controlled) */\n value?: string;\n /** Event handler called when radio value changes */\n onValueChange?: (value: string) => void;\n /** Whether all radios in the group are disabled */\n disabled?: boolean;\n /** Position of radio control relative to label: \"start\" (default) puts radio before label, \"end\" puts label before radio. Note: In card appearance, the control is always positioned at the end. */\n controlPosition?: RadioControlPosition;\n /** Form submission name for the radio group */\n name?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Individual radio item within a group\n *\n * @example\n * ```tsx\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * ```\n *\n * @example\n * // Disabled item\n * ```tsx\n * <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n * ```\n */\nexport type RadioItemProps = {\n /** Visual variant: \"default\" or \"error\" for validation failures */\n variant?: RadioVariant;\n /**\n * Visual appearance of the radio item.\n * - `\"default\"` — Standard inline radio item\n * - `\"card\"` — Choice card with border, padding, and highlighted selection state\n *\n * When set on an individual item, overrides the group-level `appearance`.\n * @default \"default\"\n */\n appearance?: KumoRadioAppearance;\n /** Label text displayed next to radio (required) */\n label: string;\n /** Description text displayed below the label (only visible in card appearance) */\n description?: ReactNode;\n /** Value of the radio (required) */\n value: string;\n /** Additional CSS classes for the label wrapper */\n className?: string;\n /** Whether the radio is disabled */\n disabled?: boolean;\n};\n\n// Radio.Item for use within Radio.Group\nconst RadioItem = forwardRef<HTMLButtonElement, RadioItemProps>(\n (\n {\n className,\n disabled,\n variant = \"default\",\n appearance: appearanceProp,\n label,\n description,\n value,\n },\n ref,\n ) => {\n const { controlPosition, appearance: groupAppearance } =\n useContext(RadioGroupContext);\n const appearance = appearanceProp ?? groupAppearance;\n const isCard = appearance === \"card\";\n\n // In card mode, default to \"end\" (radio on the right); otherwise follow group setting\n const effectiveControlPosition = isCard ? \"end\" : controlPosition;\n\n if (isCard) {\n return (\n <label\n className={cn(\n \"m-0 group relative flex items-start gap-3 rounded-lg border border-kumo-hairline bg-kumo-base p-3 transition-colors has-[[data-checked]]:border-kumo-interact has-[[data-checked]]:bg-kumo-tint\",\n variant === \"error\" &&\n \"border-kumo-danger has-[[data-checked]]:border-kumo-danger has-[[data-checked]]:bg-kumo-base\",\n disabled\n ? \"cursor-not-allowed opacity-50\"\n : cn(\n \"has-[[data-disabled]]:cursor-not-allowed has-[[data-disabled]]:opacity-50 cursor-pointer\",\n variant !== \"error\" &&\n \"hover:not-has-[[data-disabled]]:bg-kumo-tint\",\n ),\n className,\n )}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"text-base font-medium text-kumo-default\">\n {label}\n </span>\n {description && (\n <span className=\"text-sm text-kumo-subtle\">{description}</span>\n )}\n </div>\n <BaseRadio.Root\n ref={ref}\n value={value}\n disabled={disabled}\n className={cn(\n \"relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-kumo-base ring\",\n variant === \"error\" ? \"ring-kumo-danger\" : \"ring-kumo-line\",\n !disabled &&\n variant !== \"error\" &&\n \"group-hover:ring-kumo-hairline focus-visible:ring-kumo-hairline focus-visible:outline-offset-3\",\n !disabled &&\n variant === \"error\" &&\n \"focus-visible:ring-kumo-danger focus-visible:outline-offset-3\",\n \"data-[checked]:bg-kumo-contrast\",\n )}\n >\n <BaseRadio.Indicator\n keepMounted\n className=\"flex items-center justify-center\"\n >\n <span className=\"h-2 w-2 rounded-full bg-kumo-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n </label>\n );\n }\n\n return (\n <label\n className={cn(\n \"m-0 group relative inline-flex items-center gap-2\",\n // \"start\" (default): radio before label\n // \"end\": label before radio using flex-row-reverse\n effectiveControlPosition === \"end\" && \"flex-row-reverse justify-end\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <BaseRadio.Root\n ref={ref}\n value={value}\n disabled={disabled}\n className={cn(\n \"relative flex h-4 w-4 items-center justify-center rounded-full border-0 bg-kumo-base ring after:absolute after:-inset-x-3 after:-inset-y-2\",\n variant === \"error\" ? \"ring-kumo-danger\" : \"ring-kumo-line\",\n !disabled &&\n variant !== \"error\" &&\n \"group-hover:ring-kumo-hairline focus-visible:ring-kumo-hairline focus-visible:outline-offset-3\",\n !disabled &&\n variant === \"error\" &&\n \"focus-visible:ring-kumo-danger focus-visible:outline-offset-3\",\n \"data-[checked]:bg-kumo-contrast\",\n )}\n >\n <BaseRadio.Indicator\n keepMounted\n className=\"flex items-center justify-center\"\n >\n <span className=\"h-2 w-2 rounded-full bg-kumo-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n <span className=\"text-base text-kumo-default\">{label}</span>\n </label>\n );\n },\n);\n\nRadioItem.displayName = \"Radio.Item\";\n\n// Radio.Group with built-in Fieldset and RadioGroup\nfunction RadioGroup({\n legend,\n children,\n orientation = \"vertical\",\n appearance = \"default\",\n error,\n description,\n defaultValue,\n value,\n onValueChange,\n disabled,\n controlPosition = \"start\",\n name,\n className,\n}: RadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ controlPosition, appearance }}>\n <BaseRadioGroup\n defaultValue={defaultValue}\n value={value}\n onValueChange={(newValue) => onValueChange?.(newValue)}\n disabled={disabled}\n name={name}\n >\n <Fieldset.Root\n disabled={disabled}\n className={cn(\"flex flex-col gap-4\", className)}\n >\n <Fieldset.Legend className=\"text-base font-medium text-kumo-default\">\n {legend}\n </Fieldset.Legend>\n <div\n className={cn(\n orientation === \"vertical\"\n ? cn(\"flex flex-col\", appearance === \"card\" ? \"gap-3\" : \"gap-2\")\n : appearance === \"card\"\n ? \"grid grid-cols-2 gap-3\"\n : \"flex flex-row flex-wrap gap-2\",\n )}\n >\n {children}\n </div>\n {error && <p className=\"text-sm text-kumo-danger\">{error}</p>}\n {description && (\n <p className=\"text-sm text-kumo-subtle\">{description}</p>\n )}\n </Fieldset.Root>\n </BaseRadioGroup>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = \"Radio.Group\";\n\n// Export RadioGroup directly for external usage\nexport { RadioGroup };\n\n/**\n * Radio — radio button group for single-select choices.\n *\n * Compound component: `Radio.Group` (with built-in Fieldset) and `Radio.Item`.\n * Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.\n *\n * @example\n * ```tsx\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n * ```\n */\nexport const Radio = Object.assign(RadioGroup, {\n Item: RadioItem,\n Group: RadioGroup,\n});\n"],"names":["KUMO_RADIO_VARIANTS","KUMO_RADIO_DEFAULT_VARIANTS","radioVariants","variant","appearance","cn","RadioGroupContext","createContext","RadioItem","forwardRef","className","disabled","appearanceProp","label","description","value","ref","controlPosition","groupAppearance","useContext","isCard","effectiveControlPosition","jsxs","jsx","BaseRadio.Root","BaseRadio.Indicator","RadioGroup","legend","children","orientation","error","defaultValue","onValueChange","name","BaseRadioGroup","newValue","Fieldset.Root","Fieldset.Legend","Radio"],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as u, jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { CaretUpDownIcon as _, CheckIcon as M } from "@phosphor-icons/react";
|
|
4
|
+
import { useId as R, forwardRef as p } from "react";
|
|
5
|
+
import { c as r } from "./cn-ct4n7r74mh8y0f48.js";
|
|
6
|
+
import { b as T } from "./button-cdxnqcgzwko8ooha.js";
|
|
7
|
+
import { S as W } from "./skeleton-line-epxenksfesr2fkcv.js";
|
|
8
|
+
import { F as B } from "./field-krp6z6vfbkrvufz2.js";
|
|
9
|
+
import { u as K } from "./portal-provider-hwmkdmkpvct0cb76.js";
|
|
10
|
+
import { aV as U, aW as X, aX as Y, aY as Z, aZ as q, a_ as H, a$ as J, b0 as Q, b1 as ee, b2 as ae, b3 as te, b4 as le, b5 as oe, S as ne } from "./vendor-base-ui-k7bzesq81ie36nya.js";
|
|
11
|
+
function x(e) {
|
|
12
|
+
if (e == null || typeof e != "object" || Array.isArray(e) || "$$typeof" in e || e instanceof Promise) return !1;
|
|
13
|
+
const l = e;
|
|
14
|
+
return "label" in l && l.label !== void 0;
|
|
15
|
+
}
|
|
16
|
+
function N(e) {
|
|
17
|
+
return Array.isArray(e) ? e : Object.entries(e).map(([l, o]) => ({
|
|
18
|
+
value: l,
|
|
19
|
+
label: x(o) ? o.label : o
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
function se(e) {
|
|
23
|
+
const l = N(e), o = /* @__PURE__ */ new Map();
|
|
24
|
+
if (!Array.isArray(e))
|
|
25
|
+
for (const [a, i] of Object.entries(e))
|
|
26
|
+
x(i) && o.set(a, { disabled: i.disabled });
|
|
27
|
+
return l.filter((a) => a.value !== null).map((a, i) => {
|
|
28
|
+
const d = typeof a.value == "string" ? a.value : `option-${i}`, m = typeof a.value == "string" ? o.get(a.value) : void 0;
|
|
29
|
+
return /* @__PURE__ */ t(k, { value: a.value, disabled: m?.disabled, children: a.label }, d);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function c({
|
|
33
|
+
children: e,
|
|
34
|
+
className: l,
|
|
35
|
+
renderValue: o,
|
|
36
|
+
label: a,
|
|
37
|
+
hideLabel: i,
|
|
38
|
+
placeholder: d,
|
|
39
|
+
loading: m,
|
|
40
|
+
labelTooltip: G,
|
|
41
|
+
description: b,
|
|
42
|
+
error: n,
|
|
43
|
+
required: O,
|
|
44
|
+
container: j,
|
|
45
|
+
...s
|
|
46
|
+
}) {
|
|
47
|
+
const f = R(), A = K(), C = j ?? A ?? void 0, h = s, F = h["aria-label"], P = h["aria-labelledby"], $ = typeof a == "string" ? a : d;
|
|
48
|
+
process.env.NODE_ENV !== "production" && i !== void 0 && console.warn(
|
|
49
|
+
'[Kumo Select]: `hideLabel` is deprecated. For hidden labels, use `aria-label` instead of `label` + `hideLabel={true}`.\n Migration:\n - For visible labels: <Select label="Country" /> (hideLabel no longer needed)\n - For hidden labels: <Select aria-label="Select a country" /> (remove label and hideLabel)'
|
|
50
|
+
);
|
|
51
|
+
const y = a && i !== !0, g = y ? void 0 : P ?? (a ? f : void 0), z = F ?? (g ? void 0 : $), V = s.items ? N(s.items) : void 0, D = e ?? (s.items ? se(s.items) : null), { items: ie, ...E } = s, S = /* @__PURE__ */ u(
|
|
52
|
+
U,
|
|
53
|
+
{
|
|
54
|
+
...E,
|
|
55
|
+
items: V,
|
|
56
|
+
disabled: m || s.disabled,
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ u(
|
|
59
|
+
X,
|
|
60
|
+
{
|
|
61
|
+
className: r(
|
|
62
|
+
T(),
|
|
63
|
+
"justify-between font-normal",
|
|
64
|
+
"focus:opacity-100 focus-visible:ring-1 focus-visible:ring-kumo-hairline *:in-focus:opacity-100",
|
|
65
|
+
s.disabled && "cursor-not-allowed opacity-50",
|
|
66
|
+
l
|
|
67
|
+
),
|
|
68
|
+
"aria-label": z,
|
|
69
|
+
"aria-labelledby": g,
|
|
70
|
+
children: [
|
|
71
|
+
m ? /* @__PURE__ */ t(W, { className: "w-32" }) : /* @__PURE__ */ t(
|
|
72
|
+
Y,
|
|
73
|
+
{
|
|
74
|
+
placeholder: d,
|
|
75
|
+
className: "min-w-0 truncate",
|
|
76
|
+
children: o
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
/* @__PURE__ */ t(Z, { className: "flex shrink-0 items-center", children: /* @__PURE__ */ t(_, {}) })
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ t(q, { container: C, children: /* @__PURE__ */ t(H, { children: /* @__PURE__ */ t(
|
|
84
|
+
J,
|
|
85
|
+
{
|
|
86
|
+
className: r(
|
|
87
|
+
"flex flex-col",
|
|
88
|
+
"max-h-[var(--available-height)] bg-kumo-base text-kumo-default",
|
|
89
|
+
"rounded-lg shadow-lg ring ring-kumo-hairline",
|
|
90
|
+
"min-w-[calc(var(--anchor-width)+3px)] py-1.5"
|
|
91
|
+
),
|
|
92
|
+
children: /* @__PURE__ */ t(
|
|
93
|
+
Q,
|
|
94
|
+
{
|
|
95
|
+
className: r(
|
|
96
|
+
"min-h-0 flex-1 overflow-y-auto overscroll-none scroll-pt-2 scroll-pb-2"
|
|
97
|
+
),
|
|
98
|
+
children: D
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
) }) })
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
if (y)
|
|
107
|
+
return /* @__PURE__ */ t(
|
|
108
|
+
B,
|
|
109
|
+
{
|
|
110
|
+
label: a,
|
|
111
|
+
required: O,
|
|
112
|
+
labelTooltip: G,
|
|
113
|
+
description: b,
|
|
114
|
+
error: n ? typeof n == "string" ? { message: n, match: !0 } : n : void 0,
|
|
115
|
+
children: S
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
const v = n ? typeof n == "string" ? { message: n } : n : void 0;
|
|
119
|
+
return /* @__PURE__ */ u("div", { className: "grid gap-2", children: [
|
|
120
|
+
a && /* @__PURE__ */ t("span", { id: f, className: "sr-only", children: a }),
|
|
121
|
+
S,
|
|
122
|
+
v ? /* @__PURE__ */ t("span", { className: "text-sm text-kumo-danger", children: v.message }) : b && /* @__PURE__ */ t("span", { className: "text-sm leading-snug text-kumo-subtle", children: b })
|
|
123
|
+
] });
|
|
124
|
+
}
|
|
125
|
+
function k({ children: e, value: l, disabled: o, className: a }) {
|
|
126
|
+
return /* @__PURE__ */ u(
|
|
127
|
+
ee,
|
|
128
|
+
{
|
|
129
|
+
value: l,
|
|
130
|
+
disabled: o,
|
|
131
|
+
className: r(
|
|
132
|
+
"group mx-1.5 flex cursor-pointer items-center justify-between gap-2 rounded px-2 py-1.5 text-base data-highlighted:bg-kumo-tint",
|
|
133
|
+
"data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50",
|
|
134
|
+
a
|
|
135
|
+
),
|
|
136
|
+
children: [
|
|
137
|
+
/* @__PURE__ */ t(ae, { children: e }),
|
|
138
|
+
/* @__PURE__ */ t(te, { children: /* @__PURE__ */ t(M, {}) })
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
const L = p(
|
|
144
|
+
({ children: e, className: l }, o) => /* @__PURE__ */ t(le, { ref: o, className: r(l), children: e })
|
|
145
|
+
);
|
|
146
|
+
L.displayName = "Select.Group";
|
|
147
|
+
const w = p(
|
|
148
|
+
({ children: e, className: l }, o) => /* @__PURE__ */ t(
|
|
149
|
+
oe,
|
|
150
|
+
{
|
|
151
|
+
ref: o,
|
|
152
|
+
className: r(
|
|
153
|
+
"px-3.5 py-1.5 text-sm font-semibold text-kumo-subtle",
|
|
154
|
+
l
|
|
155
|
+
),
|
|
156
|
+
children: e
|
|
157
|
+
}
|
|
158
|
+
)
|
|
159
|
+
);
|
|
160
|
+
w.displayName = "Select.GroupLabel";
|
|
161
|
+
const I = p(
|
|
162
|
+
({ className: e }, l) => /* @__PURE__ */ t(
|
|
163
|
+
ne,
|
|
164
|
+
{
|
|
165
|
+
ref: l,
|
|
166
|
+
className: r("-mx-1 my-1 h-px bg-kumo-line", e)
|
|
167
|
+
}
|
|
168
|
+
)
|
|
169
|
+
);
|
|
170
|
+
I.displayName = "Select.Separator";
|
|
171
|
+
c.Option = k;
|
|
172
|
+
c.Group = L;
|
|
173
|
+
c.GroupLabel = w;
|
|
174
|
+
c.Separator = I;
|
|
175
|
+
c.Option.displayName = "Select.Option";
|
|
176
|
+
export {
|
|
177
|
+
c as S
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=select-kva5ru5f673kah1m.js.map
|