@logicplanes/kaeso-ui 0.4.7 → 0.4.8
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/NOTICE.md +1 -1
- package/ai/component-guides.md +36 -2
- package/ai/component-registry.json +67 -5
- package/ai/component-registry.md +23 -5
- package/ai/icons.md +1 -1
- package/ai/tokens.md +1 -1
- package/dist/blocks/delete-resource.js +1 -1
- package/dist/blocks/pages.js +2 -2
- package/dist/blocks/resource-list.js +3 -3
- package/dist/chunks/{app-frame-CfJ7s3Q0.js → app-frame-D8sGcD0v.js} +5 -5
- package/dist/chunks/{app-frame-CfJ7s3Q0.js.map → app-frame-D8sGcD0v.js.map} +1 -1
- package/dist/chunks/{banner-B3DGLTBu.js → banner-BinTH032.js} +2 -2
- package/dist/chunks/{banner-B3DGLTBu.js.map → banner-BinTH032.js.map} +1 -1
- package/dist/chunks/{button-IblhXUyZ.js → button-DrmFgdIi.js} +2 -2
- package/dist/chunks/button-DrmFgdIi.js.map +1 -0
- package/dist/chunks/{checkbox-9tbimmF3.js → checkbox-ahl1SOqU.js} +2 -2
- package/dist/chunks/{checkbox-9tbimmF3.js.map → checkbox-ahl1SOqU.js.map} +1 -1
- package/dist/chunks/{code-block-KIvuE8jg.js → code-block-CE3H3nMu.js} +3 -3
- package/dist/chunks/{code-block-KIvuE8jg.js.map → code-block-CE3H3nMu.js.map} +1 -1
- package/dist/chunks/{code-block-64e-Cy1S.js → code-block-O_EPmMIQ.js} +2 -2
- package/dist/chunks/{code-block-64e-Cy1S.js.map → code-block-O_EPmMIQ.js.map} +1 -1
- package/dist/chunks/{combobox-DkcjkWc6.js → combobox-DghYPLVQ.js} +7 -3
- package/dist/chunks/combobox-DghYPLVQ.js.map +1 -0
- package/dist/chunks/{command-list-CypqsC4T.js → command-list-BUmEaaBi.js} +3 -3
- package/dist/chunks/{command-list-CypqsC4T.js.map → command-list-BUmEaaBi.js.map} +1 -1
- package/dist/chunks/{copy-button-CwU8t_9_.js → copy-button-DBPAA1g0.js} +2 -2
- package/dist/chunks/{copy-button-CwU8t_9_.js.map → copy-button-DBPAA1g0.js.map} +1 -1
- package/dist/chunks/{core-B0bULn-t.js → core-Cw3pNRp3.js} +2 -2
- package/dist/chunks/{core-B0bULn-t.js.map → core-Cw3pNRp3.js.map} +1 -1
- package/dist/chunks/{data-table-z7z6DqMJ.js → data-table-CGecI-FI.js} +6 -6
- package/dist/chunks/data-table-CGecI-FI.js.map +1 -0
- package/dist/chunks/{date-popup-DAnjptFt.js → date-popup-C6vVOOWF.js} +2 -2
- package/dist/chunks/{date-popup-DAnjptFt.js.map → date-popup-C6vVOOWF.js.map} +1 -1
- package/dist/chunks/{dialog-2zb6ClNR.js → dialog-s3_LUPBi.js} +4 -4
- package/dist/chunks/{dialog-2zb6ClNR.js.map → dialog-s3_LUPBi.js.map} +1 -1
- package/dist/chunks/{domain-BsM9UmAg.js → domain-CrQX3p6E.js} +2 -2
- package/dist/chunks/{domain-BsM9UmAg.js.map → domain-CrQX3p6E.js.map} +1 -1
- package/dist/chunks/{icon-button-Dfwpvmav.js → icon-button-6kOn2zrP.js} +2 -2
- package/dist/chunks/{icon-button-Dfwpvmav.js.map → icon-button-6kOn2zrP.js.map} +1 -1
- package/dist/chunks/identity-BwYixi8Q.js +520 -0
- package/dist/chunks/identity-BwYixi8Q.js.map +1 -0
- package/dist/chunks/{input-Bo5-UZg2.js → input-D1SeLe3X.js} +2 -2
- package/dist/chunks/{input-Bo5-UZg2.js.map → input-D1SeLe3X.js.map} +1 -1
- package/dist/chunks/{input-group-jPcK9T_a.js → input-group-BbxwEAUP.js} +2 -2
- package/dist/chunks/{input-group-jPcK9T_a.js.map → input-group-BbxwEAUP.js.map} +1 -1
- package/dist/chunks/{iso-field-DoqHBg8n.js → iso-field-BVOKAY4H.js} +2 -2
- package/dist/chunks/{iso-field-DoqHBg8n.js.map → iso-field-BVOKAY4H.js.map} +1 -1
- package/dist/chunks/{list-CU_AoVY3.js → list-o8wcuBOz.js} +3 -3
- package/dist/chunks/{list-CU_AoVY3.js.map → list-o8wcuBOz.js.map} +1 -1
- package/dist/chunks/{markdown-C565aBR7.js → markdown-BZKZi9d8.js} +4 -4
- package/dist/chunks/{markdown-C565aBR7.js.map → markdown-BZKZi9d8.js.map} +1 -1
- package/dist/chunks/{menu-Clvv6ftq.js → menu-BDce2kiw.js} +2 -2
- package/dist/chunks/{menu-Clvv6ftq.js.map → menu-BDce2kiw.js.map} +1 -1
- package/dist/chunks/{nav-sheet-Dt6JSvzX.js → nav-sheet-D3U7MeaI.js} +3 -3
- package/dist/chunks/{nav-sheet-Dt6JSvzX.js.map → nav-sheet-D3U7MeaI.js.map} +1 -1
- package/dist/chunks/{page-header-BQijP6Rp.js → page-header-C5Bv1gKE.js} +2 -2
- package/dist/chunks/{page-header-BQijP6Rp.js.map → page-header-C5Bv1gKE.js.map} +1 -1
- package/dist/chunks/{pagination-D7fAm8qg.js → pagination-D9hM6W2z.js} +3 -3
- package/dist/chunks/{pagination-D7fAm8qg.js.map → pagination-D9hM6W2z.js.map} +1 -1
- package/dist/chunks/{picker-popover-1FHb1LQG.js → picker-popover-PzVOo62-.js} +4 -4
- package/dist/chunks/{picker-popover-1FHb1LQG.js.map → picker-popover-PzVOo62-.js.map} +1 -1
- package/dist/chunks/{range-popup-lGiZsG3s.js → range-popup-Dt6Q0Ryw.js} +3 -3
- package/dist/chunks/{range-popup-lGiZsG3s.js.map → range-popup-Dt6Q0Ryw.js.map} +1 -1
- package/dist/chunks/{rights-B68ocZuq.js → rights-DAHTG_kH.js} +4 -4
- package/dist/chunks/{rights-B68ocZuq.js.map → rights-DAHTG_kH.js.map} +1 -1
- package/dist/chunks/{select-BqjmQOqx.js → select-UTdHKubp.js} +2 -2
- package/dist/chunks/{select-BqjmQOqx.js.map → select-UTdHKubp.js.map} +1 -1
- package/dist/chunks/{sidebar-Dq7oGOje.js → sidebar-K30Ae8N5.js} +2 -2
- package/dist/chunks/{sidebar-Dq7oGOje.js.map → sidebar-K30Ae8N5.js.map} +1 -1
- package/dist/chunks/{sidebar-menu-QSSNu1jJ.js → sidebar-menu-C0qJsQF5.js} +2 -2
- package/dist/chunks/{sidebar-menu-QSSNu1jJ.js.map → sidebar-menu-C0qJsQF5.js.map} +1 -1
- package/dist/chunks/styles-8fn_bHRP.js +21 -0
- package/dist/chunks/styles-8fn_bHRP.js.map +1 -0
- package/dist/chunks/{textarea-CO0HP6fK.js → textarea-CRmvC4jd.js} +3 -3
- package/dist/chunks/{textarea-CO0HP6fK.js.map → textarea-CRmvC4jd.js.map} +1 -1
- package/dist/chunks/{timeseries-nDviPxvQ.js → timeseries-CK86u7M0.js} +3 -3
- package/dist/chunks/{timeseries-nDviPxvQ.js.map → timeseries-CK86u7M0.js.map} +1 -1
- package/dist/components/app-frame.js +2 -2
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/charts/bar.js +2 -2
- package/dist/components/charts/donut.js +1 -1
- package/dist/components/charts/gauge.js +1 -1
- package/dist/components/charts/heatmap.js +1 -1
- package/dist/components/charts/sankey.js +2 -2
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-block.js +2 -2
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +1 -1
- package/dist/components/date-picker.js +2 -2
- package/dist/components/dialog.js +2 -2
- package/dist/components/display-options.js +2 -2
- package/dist/components/filter-chip.js +3 -3
- package/dist/components/filter-toggle.js +35 -0
- package/dist/components/filter-toggle.js.map +1 -0
- package/dist/components/icon-button.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/kaeso/conversation.js +2 -2
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +3 -3
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +1 -1
- package/dist/components/kaeso.js +9 -14
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/key-value.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +2 -2
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +9 -9
- package/dist/components/select.js +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/tabs.js +4 -4
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/theme-menu.js +2 -2
- package/dist/components/theme-select.js +1 -1
- package/dist/index.js +68 -67
- package/dist/kaeso.css +11 -12
- package/dist/styles.css +1 -1
- package/dist/types/components/combobox/combobox.d.ts +2 -0
- package/dist/types/components/filter-toggle/docs.d.ts +11 -0
- package/dist/types/components/filter-toggle/filter-toggle.d.ts +23 -0
- package/dist/types/components/filter-toggle/index.d.ts +1 -0
- package/dist/types/components/kaeso/docs.d.ts +1 -0
- package/dist/types/components/kaeso/identity.d.ts +1 -0
- package/dist/types/components/kaeso/provider-marks.d.ts +27 -2
- package/dist/types/components/menu/styles.d.ts +1 -1
- package/dist/types/components/tabs/tabs.d.ts +2 -2
- package/dist/types/index.d.ts +1 -0
- package/package.json +5 -5
- package/dist/chunks/button-IblhXUyZ.js.map +0 -1
- package/dist/chunks/combobox-DkcjkWc6.js.map +0 -1
- package/dist/chunks/data-table-z7z6DqMJ.js.map +0 -1
- package/dist/chunks/identity-BQoh-UpW.js +0 -365
- package/dist/chunks/identity-BQoh-UpW.js.map +0 -1
- package/dist/chunks/styles-hkFkoBbi.js +0 -21
- package/dist/chunks/styles-hkFkoBbi.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range-popup-lGiZsG3s.js","names":["__icon_Tick02Icon","cn","useUiText","Icon","Button","Calendar","IsoField","isoProblemText","ISO_PROBLEM","moveAmongOptions","options","at","step","columns","to","NARROW","subscribeNarrow","q","onChange","isNarrow","useWide","useSyncExternalStore","monthOf","d","addMonths","n","sameDay","a","b","RangePopup","wide","t","months","draft","setDraft","useState","range","custom","setCustom","preset","last","setLast","errorId","useId","problem","setProblem","fields","useRef","first","shows","selected","edit","next","was","typed","disabledDays","other","which","unchanged","item","check","Tick02Icon","on","problemOf","field","report","p","Popover","presets","id","onPick","m","r","onClose"],"sources":["../../src/components/date-picker/range-popup.tsx"],"sourcesContent":["import { useId, useRef, useState, useSyncExternalStore, type KeyboardEvent } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Button } from \"../button/button.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { ISO_PROBLEM, IsoField, isoProblemText, type IsoProblem } from \"./iso-field.js\";\nimport type { DateRangePreset } from \"./date-picker.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nfunction moveAmongOptions(e: KeyboardEvent<HTMLDivElement>, columns: number) {\n const options = [...e.currentTarget.querySelectorAll<HTMLElement>(\"[role=option]\")];\n const at = options.indexOf(document.activeElement as HTMLElement);\n if (at < 0) return;\n const step: Record<string, number> = { ArrowDown: columns, ArrowUp: -columns, ...(columns > 1 ? { ArrowRight: 1, ArrowLeft: -1 } : {}) };\n const to = e.key === \"Home\" ? 0 : e.key === \"End\" ? options.length - 1 : step[e.key] !== undefined ? at + step[e.key]! : null;\n if (to === null) return;\n e.preventDefault();\n options[Math.max(0, Math.min(options.length - 1, to))]?.focus();\n}\n\nexport interface RangePopupProps {\n range: DateRange | null;\n preset: string | null;\n presets: DateRangePreset[];\n onPick: (range: DateRange, preset: string | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nconst NARROW = \"(max-width: 767px)\";\nfunction subscribeNarrow(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n}\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\nconst useWide = () => !useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n\nconst monthOf = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst addMonths = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth() + n, 1);\nconst sameDay = (a: Date | undefined, b: Date | undefined) => a?.toDateString() === b?.toDateString();\n\nexport function RangePopup({ range, preset, presets, onPick, onClose, weekStartsOn, disabledDays }: RangePopupProps) {\n const wide = useWide();\n const t = useUiText();\n const months = wide ? 2 : 1;\n const [draft, setDraft] = useState<DateRange | undefined>(range ?? undefined);\n const [custom, setCustom] = useState(preset === null);\n const [last, setLast] = useState(() => monthOf(range?.to ?? range?.from ?? new Date()));\n const errorId = useId();\n const [problem, setProblem] = useState<{ field: \"from\" | \"to\"; problem: IsoProblem } | null>(null);\n const fields = useRef<HTMLDivElement | null>(null);\n const first = addMonths(last, 1 - months);\n const shows = (d: Date) => d >= first && monthOf(d) <= last;\n const selected = custom ? null : preset;\n const edit = (next: DateRange | undefined) => {\n setDraft(next);\n if (next?.from) setProblem((was) => (was?.problem === \"missing\" ? null : was));\n setCustom(true);\n };\n const typed = (which: \"from\" | \"to\", d: Date) => {\n if (disabledDays?.(d)) return false;\n const other = which === \"from\" ? draft?.to : draft?.from;\n const next = which === \"from\" ? { from: d, to: other && other < d ? d : other } : { from: other && other > d ? d : other, to: d };\n edit(next);\n if (!shows(d)) setLast(which === \"to\" || months === 1 ? monthOf(d) : addMonths(monthOf(d), months - 1));\n return true;\n };\n const unchanged = sameDay(draft?.from, range?.from) && sameDay(draft?.to ?? draft?.from, range?.to);\n const item = cn(\n \"flex min-h-34 w-full cursor-pointer items-center justify-between gap-10 rounded-item px-10 text-left text-body font-medium text-fg transition-control select-none coarse:min-h-44\",\n \"hover:bg-item-hover active:bg-item-pressed focus-ring-inset\",\n wide && \"coarse:min-h-40\",\n );\n const check = (on: boolean) => <Icon icon={__icon_Tick02Icon} size=\"sm\" className={cn(\"shrink-0 text-fg\", !on && \"invisible\")} />;\n const problemOf = (field: \"from\" | \"to\") => (problem?.field === field ? problem.problem : null);\n const report = (field: \"from\" | \"to\") => (p: IsoProblem) => setProblem(p ? { field, problem: p } : problem?.field === field ? null : problem);\n\n return (\n <Popover.Content padding=\"none\" aria-label={t(\"datePicker.chooseRange\", \"Choose a date range\")} className={cn(!wide && \"w-360 max-w-(--available-width)\")}>\n <div className={cn(\"flex\", !wide && \"flex-col\")}>\n <div\n className={cn(\"shrink-0 gap-2 p-6\", wide ? \"flex min-w-160 flex-col hairline-r\" : \"grid grid-cols-2 hairline-b\")}\n role=\"listbox\"\n aria-label={t(\"datePicker.presets\", \"Presets\")}\n aria-orientation={wide ? \"vertical\" : undefined}\n onKeyDown={(e) => moveAmongOptions(e, wide ? 1 : 2)}\n >\n {presets.map((p) => {\n const id = p.id ?? p.label;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"option\"\n aria-selected={selected === id}\n tabIndex={selected === id ? 0 : -1}\n className={item}\n onClick={() => onPick(p.range(), id)}\n >\n <span className=\"min-w-0\">{p.label}</span>\n {check(selected === id)}\n </button>\n );\n })}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={selected === null}\n tabIndex={selected === null || !presets.some((p) => (p.id ?? p.label) === selected) ? 0 : -1}\n className={item}\n onClick={() => setCustom(true)}\n >\n <span className=\"min-w-0\">{t(\"datePicker.custom\", \"Custom\")}</span>\n {check(selected === null)}\n </button>\n </div>\n <div className={cn(\"flex flex-col p-12\", !wide && \"items-center\")}>\n <Calendar\n mode=\"range\"\n numberOfMonths={months}\n selected={draft}\n month={first}\n onMonthChange={(m) => setLast(addMonths(m, months - 1))}\n onSelect={(r) => edit(r as DateRange | undefined)}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div ref={fields} className=\"mt-12 flex items-center gap-8 self-stretch\">\n <IsoField\n label={t(\"datePicker.startDate\", \"Start date\")}\n value={draft?.from}\n invalid={problemOf(\"from\") !== null}\n errorId={errorId}\n onProblem={report(\"from\")}\n onCommit={(d) => typed(\"from\", d)}\n />\n <span className=\"text-fg-tertiary\" aria-hidden>\n –\n </span>\n <IsoField\n label={t(\"datePicker.endDate\", \"End date\")}\n value={draft?.to}\n invalid={problemOf(\"to\") !== null}\n errorId={errorId}\n onProblem={report(\"to\")}\n onCommit={(d) => typed(\"to\", d)}\n />\n <Button\n size=\"sm\"\n variant=\"primary\"\n onClick={() => {\n if (!draft?.from) {\n setProblem({ field: \"from\", problem: \"missing\" });\n fields.current?.querySelector(\"input\")?.focus();\n return;\n }\n if (unchanged && !custom) onClose();\n else onPick({ from: draft.from, to: draft.to ?? draft.from }, null);\n }}\n >\n {t(\"datePicker.apply\", \"Apply\")}\n </Button>\n </div>\n <p id={errorId} role=\"alert\" className={cn(ISO_PROBLEM, \"w-0 min-w-full\")}>\n {problem ? isoProblemText(t, problem.problem) : \"\"}\n </p>\n </div>\n </div>\n </Popover.Content>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"range-popup-Dt6Q0Ryw.js","names":["__icon_Tick02Icon","cn","useUiText","Icon","Button","Calendar","IsoField","isoProblemText","ISO_PROBLEM","moveAmongOptions","options","at","step","columns","to","NARROW","subscribeNarrow","q","onChange","isNarrow","useWide","useSyncExternalStore","monthOf","d","addMonths","n","sameDay","a","b","RangePopup","wide","t","months","draft","setDraft","useState","range","custom","setCustom","preset","last","setLast","errorId","useId","problem","setProblem","fields","useRef","first","shows","selected","edit","next","was","typed","disabledDays","other","which","unchanged","item","check","Tick02Icon","on","problemOf","field","report","p","Popover","presets","id","onPick","m","r","onClose"],"sources":["../../src/components/date-picker/range-popup.tsx"],"sourcesContent":["import { useId, useRef, useState, useSyncExternalStore, type KeyboardEvent } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { Button } from \"../button/button.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { ISO_PROBLEM, IsoField, isoProblemText, type IsoProblem } from \"./iso-field.js\";\nimport type { DateRangePreset } from \"./date-picker.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nfunction moveAmongOptions(e: KeyboardEvent<HTMLDivElement>, columns: number) {\n const options = [...e.currentTarget.querySelectorAll<HTMLElement>(\"[role=option]\")];\n const at = options.indexOf(document.activeElement as HTMLElement);\n if (at < 0) return;\n const step: Record<string, number> = { ArrowDown: columns, ArrowUp: -columns, ...(columns > 1 ? { ArrowRight: 1, ArrowLeft: -1 } : {}) };\n const to = e.key === \"Home\" ? 0 : e.key === \"End\" ? options.length - 1 : step[e.key] !== undefined ? at + step[e.key]! : null;\n if (to === null) return;\n e.preventDefault();\n options[Math.max(0, Math.min(options.length - 1, to))]?.focus();\n}\n\nexport interface RangePopupProps {\n range: DateRange | null;\n preset: string | null;\n presets: DateRangePreset[];\n onPick: (range: DateRange, preset: string | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nconst NARROW = \"(max-width: 767px)\";\nfunction subscribeNarrow(onChange: () => void) {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n}\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\nconst useWide = () => !useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n\nconst monthOf = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\nconst addMonths = (d: Date, n: number) => new Date(d.getFullYear(), d.getMonth() + n, 1);\nconst sameDay = (a: Date | undefined, b: Date | undefined) => a?.toDateString() === b?.toDateString();\n\nexport function RangePopup({ range, preset, presets, onPick, onClose, weekStartsOn, disabledDays }: RangePopupProps) {\n const wide = useWide();\n const t = useUiText();\n const months = wide ? 2 : 1;\n const [draft, setDraft] = useState<DateRange | undefined>(range ?? undefined);\n const [custom, setCustom] = useState(preset === null);\n const [last, setLast] = useState(() => monthOf(range?.to ?? range?.from ?? new Date()));\n const errorId = useId();\n const [problem, setProblem] = useState<{ field: \"from\" | \"to\"; problem: IsoProblem } | null>(null);\n const fields = useRef<HTMLDivElement | null>(null);\n const first = addMonths(last, 1 - months);\n const shows = (d: Date) => d >= first && monthOf(d) <= last;\n const selected = custom ? null : preset;\n const edit = (next: DateRange | undefined) => {\n setDraft(next);\n if (next?.from) setProblem((was) => (was?.problem === \"missing\" ? null : was));\n setCustom(true);\n };\n const typed = (which: \"from\" | \"to\", d: Date) => {\n if (disabledDays?.(d)) return false;\n const other = which === \"from\" ? draft?.to : draft?.from;\n const next = which === \"from\" ? { from: d, to: other && other < d ? d : other } : { from: other && other > d ? d : other, to: d };\n edit(next);\n if (!shows(d)) setLast(which === \"to\" || months === 1 ? monthOf(d) : addMonths(monthOf(d), months - 1));\n return true;\n };\n const unchanged = sameDay(draft?.from, range?.from) && sameDay(draft?.to ?? draft?.from, range?.to);\n const item = cn(\n \"flex min-h-34 w-full cursor-pointer items-center justify-between gap-10 rounded-item px-10 text-left text-body font-medium text-fg transition-control select-none coarse:min-h-44\",\n \"hover:bg-item-hover active:bg-item-pressed focus-ring-inset\",\n wide && \"coarse:min-h-40\",\n );\n const check = (on: boolean) => <Icon icon={__icon_Tick02Icon} size=\"sm\" className={cn(\"shrink-0 text-fg\", !on && \"invisible\")} />;\n const problemOf = (field: \"from\" | \"to\") => (problem?.field === field ? problem.problem : null);\n const report = (field: \"from\" | \"to\") => (p: IsoProblem) => setProblem(p ? { field, problem: p } : problem?.field === field ? null : problem);\n\n return (\n <Popover.Content padding=\"none\" aria-label={t(\"datePicker.chooseRange\", \"Choose a date range\")} className={cn(!wide && \"w-360 max-w-(--available-width)\")}>\n <div className={cn(\"flex\", !wide && \"flex-col\")}>\n <div\n className={cn(\"shrink-0 gap-2 p-6\", wide ? \"flex min-w-160 flex-col hairline-r\" : \"grid grid-cols-2 hairline-b\")}\n role=\"listbox\"\n aria-label={t(\"datePicker.presets\", \"Presets\")}\n aria-orientation={wide ? \"vertical\" : undefined}\n onKeyDown={(e) => moveAmongOptions(e, wide ? 1 : 2)}\n >\n {presets.map((p) => {\n const id = p.id ?? p.label;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"option\"\n aria-selected={selected === id}\n tabIndex={selected === id ? 0 : -1}\n className={item}\n onClick={() => onPick(p.range(), id)}\n >\n <span className=\"min-w-0\">{p.label}</span>\n {check(selected === id)}\n </button>\n );\n })}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={selected === null}\n tabIndex={selected === null || !presets.some((p) => (p.id ?? p.label) === selected) ? 0 : -1}\n className={item}\n onClick={() => setCustom(true)}\n >\n <span className=\"min-w-0\">{t(\"datePicker.custom\", \"Custom\")}</span>\n {check(selected === null)}\n </button>\n </div>\n <div className={cn(\"flex flex-col p-12\", !wide && \"items-center\")}>\n <Calendar\n mode=\"range\"\n numberOfMonths={months}\n selected={draft}\n month={first}\n onMonthChange={(m) => setLast(addMonths(m, months - 1))}\n onSelect={(r) => edit(r as DateRange | undefined)}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div ref={fields} className=\"mt-12 flex items-center gap-8 self-stretch\">\n <IsoField\n label={t(\"datePicker.startDate\", \"Start date\")}\n value={draft?.from}\n invalid={problemOf(\"from\") !== null}\n errorId={errorId}\n onProblem={report(\"from\")}\n onCommit={(d) => typed(\"from\", d)}\n />\n <span className=\"text-fg-tertiary\" aria-hidden>\n –\n </span>\n <IsoField\n label={t(\"datePicker.endDate\", \"End date\")}\n value={draft?.to}\n invalid={problemOf(\"to\") !== null}\n errorId={errorId}\n onProblem={report(\"to\")}\n onCommit={(d) => typed(\"to\", d)}\n />\n <Button\n size=\"sm\"\n variant=\"primary\"\n onClick={() => {\n if (!draft?.from) {\n setProblem({ field: \"from\", problem: \"missing\" });\n fields.current?.querySelector(\"input\")?.focus();\n return;\n }\n if (unchanged && !custom) onClose();\n else onPick({ from: draft.from, to: draft.to ?? draft.from }, null);\n }}\n >\n {t(\"datePicker.apply\", \"Apply\")}\n </Button>\n </div>\n <p id={errorId} role=\"alert\" className={cn(ISO_PROBLEM, \"w-0 min-w-full\")}>\n {problem ? isoProblemText(t, problem.problem) : \"\"}\n </p>\n </div>\n </div>\n </Popover.Content>\n );\n}\n"],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ import { a as t, o as n } from "./inset-BUzyXLK4.js";
|
|
|
4
4
|
import { i as r } from "./context-BELWW79w.js";
|
|
5
5
|
import { t as i } from "./icon-CBzOwqrX.js";
|
|
6
6
|
import { r as a } from "./tooltip-Tkm-urbi.js";
|
|
7
|
-
import { o } from "./input-
|
|
8
|
-
import { n as s } from "./checkbox-
|
|
9
|
-
import { r as c } from "./combobox-
|
|
7
|
+
import { o } from "./input-D1SeLe3X.js";
|
|
8
|
+
import { n as s } from "./checkbox-ahl1SOqU.js";
|
|
9
|
+
import { r as c } from "./combobox-DghYPLVQ.js";
|
|
10
10
|
import { t as l } from "./empty-BpiUgGzm.js";
|
|
11
11
|
import { t as u } from "./truncated-d1afmUJT.js";
|
|
12
12
|
import { t as d } from "./badge-C0GC3B9X.js";
|
|
@@ -309,4 +309,4 @@ function M({ right: o, readOnly: l, query: f, hasOrigin: p, originText: h, names
|
|
|
309
309
|
//#endregion
|
|
310
310
|
export { w as a, T as i, D as n, j as r, O as t };
|
|
311
311
|
|
|
312
|
-
//# sourceMappingURL=rights-
|
|
312
|
+
//# sourceMappingURL=rights-DAHTG_kH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rights-B68ocZuq.js","names":["__icon_Alert02Icon","__icon_Tick02Icon","__icon_MinusSignIcon","cn","useInset","useRaised","useUiText","Icon","Tooltip","CheckboxBox","Highlight","Empty","TruncatedText","Badge","rightsCascade","byCode","rights","r","dependents","req","out","seen","code","queue","next","linked","granted","c","groupCascade","state","all","group","current","n","g","STOPS","KAESO_RIGHTS_MATRIX_VARIANTS","KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS","originTexts","t","matches","texts","q","RightsMatrix","ariaLabel","query","setQuery","useState","announcement","setAnnouncement","flashed","setFlashed","flashTimer","useRef","root","baseId","useId","useMemo","groups","names","universal","required","hasOrigins","originText","originLabels","shown","apply","changes","onRightsChange","onChange","first","rest","also","stop","setStop","roving","el","readOnly","boxes","own","w","tabindex","useLayoutEffect","observer","ref","target","row","box","i","extra","className","searchable","SearchInput","headingId","gi","grantedCount","changeable","changeableOn","allOn","RightRow","inset","raised","onRaised","descId","nameId","name","needs","text","Alert02Icon","hasOrigin","s","Tick02Icon","MinusSignIcon","onToggle"],"sources":["../../src/components/kaeso/rights-logic.ts","../../src/components/kaeso/rights.tsx"],"sourcesContent":["export interface RightChange {\n code: string;\n granted: boolean;\n}\n\ninterface Node {\n code: string;\n granted: boolean;\n requires?: string[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport function rightsCascade(rights: readonly Node[], code: string, granted: boolean): RightChange[] {\n const byCode = new Map(rights.map((r) => [r.code, r]));\n const dependents = new Map<string, string[]>();\n for (const r of rights) for (const req of r.requires ?? []) dependents.set(req, [...(dependents.get(req) ?? []), r.code]);\n const out: RightChange[] = [{ code, granted }];\n const seen = new Set([code]);\n const queue = [code];\n while (queue.length) {\n const next = queue.shift() as string;\n const linked = granted ? (byCode.get(next)?.requires ?? []) : (dependents.get(next) ?? []);\n for (const c of linked) {\n if (seen.has(c)) continue;\n seen.add(c);\n const r = byCode.get(c);\n if (!r || r.disabled) continue;\n queue.push(c);\n if (r.granted !== granted) out.push({ code: c, granted });\n }\n }\n return out;\n}\n\nexport function groupCascade(all: readonly Node[], group: readonly Node[], granted: boolean): RightChange[] {\n const state = new Map(all.map((r) => [r.code, r.granted]));\n const out = new Map<string, boolean>();\n for (const r of group) {\n if (r.disabled || state.get(r.code) === granted) continue;\n const current = all.map((n) => ({ ...n, granted: out.get(n.code) ?? n.granted }));\n for (const c of rightsCascade(current, r.code, granted)) {\n out.set(c.code, c.granted);\n state.set(c.code, c.granted);\n }\n }\n return [...out].map(([code, g]) => ({ code, granted: g }));\n}\n","import { forwardRef, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Alert02Icon as __icon_Alert02Icon, Tick02Icon as __icon_Tick02Icon, MinusSignIcon as __icon_MinusSignIcon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { SearchInput } from \"../input/input.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { groupCascade, rightsCascade, type RightChange } from \"./rights-logic.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\nimport { useInset, useRaised } from \"../../utils/inset.js\";\nimport { TruncatedText } from \"../text/truncated.js\";\n\nconst STOPS = '[role=\"checkbox\"], [data-right-extra]';\n\nexport const KAESO_RIGHTS_MATRIX_VARIANTS = {\n origin: {\n preset: { classes: \"text-fg-secondary\" },\n added: { classes: \"text-success-text\" },\n removed: { classes: \"text-danger-text\" },\n none: { classes: \"\" },\n },\n mode: {\n edit: { classes: \"\" },\n readOnly: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS = { origin: \"none\", mode: \"edit\" } as const;\n\ntype Origin = keyof typeof KAESO_RIGHTS_MATRIX_VARIANTS.origin;\n\nexport interface RightSource {\n label: string;\n detail?: string | undefined;\n}\n\nexport interface Right {\n code: string;\n label?: string | undefined;\n description: string;\n granted: boolean;\n origin?: Origin | undefined;\n sensitive?: boolean | undefined;\n requires?: string[] | undefined;\n sources?: RightSource[] | undefined;\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n}\n\nexport interface RightsGroup {\n label: string;\n description?: string | undefined;\n rights: Right[];\n}\n\nexport interface RightsMatrixProps {\n groups: RightsGroup[];\n onChange?: ((code: string, granted: boolean) => void) | undefined;\n onRightsChange?: ((changes: RightChange[]) => void) | undefined;\n readOnly?: boolean | undefined;\n searchable?: boolean | undefined;\n originLabels?: Partial<Record<Origin, string>> | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction originTexts(t: UiText): Record<Origin, string> {\n return { preset: t(\"rightsMatrix.fromRole\", \"From role\"), added: t(\"rightsMatrix.added\", \"Added\"), removed: t(\"rightsMatrix.removed\", \"Removed\"), none: \"\" };\n}\n\nconst matches = (q: string, ...texts: (string | undefined)[]) => texts.some((t) => t?.toLowerCase().includes(q));\n\nexport const RightsMatrix = /* @__PURE__ */ forwardRef<HTMLDivElement, RightsMatrixProps>(function RightsMatrix(\n { groups, onChange, onRightsChange, readOnly, searchable, originLabels, \"aria-label\": ariaLabel, className },\n ref,\n) {\n const t = useUiText();\n const [query, setQuery] = useState(\"\");\n const [announcement, setAnnouncement] = useState(\"\");\n const [flashed, setFlashed] = useState<ReadonlySet<string>>(() => new Set());\n const flashTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(flashTimer.current), []);\n const root = useRef<HTMLDivElement | null>(null);\n const baseId = useId();\n const all = useMemo(() => groups.flatMap((g) => g.rights), [groups]);\n const names = useMemo(() => new Map(all.map((r) => [r.code, r.label ?? r.code])), [all]);\n const universal = useMemo(() => {\n if (all.length < 3) return new Set<string>();\n const required = new Set(all.flatMap((r) => r.requires ?? []));\n return new Set([...required].filter((c) => all.every((r) => r.code === c || r.requires?.includes(c))));\n }, [all]);\n const hasOrigins = all.some((r) => r.origin !== undefined);\n const originText = { ...originTexts(t), ...originLabels };\n const q = query.trim().toLowerCase();\n const shown = groups\n .map((g) => (!q || matches(q, g.label) ? g : { ...g, rights: g.rights.filter((r) => matches(q, r.label, r.code, r.description)) }))\n .filter((g) => g.rights.length > 0);\n\n const apply = (changes: RightChange[]) => {\n if (!changes.length) return;\n if (onRightsChange) onRightsChange(changes);\n else if (onChange) for (const c of changes) onChange(c.code, c.granted);\n const [first, ...rest] = changes;\n const also = rest.map((c) => names.get(c.code) ?? c.code);\n setAnnouncement(\n also.length && first\n ? first.granted\n ? t(\"rightsMatrix.alsoGranted\", \"Also granted {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : t(\"rightsMatrix.alsoRemoved\", \"Also removed {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : \"\",\n );\n clearTimeout(flashTimer.current);\n setFlashed(new Set(rest.map((c) => c.code)));\n if (rest.length) flashTimer.current = setTimeout(() => setFlashed(new Set()), 1200);\n };\n\n const [stop, setStop] = useState(0);\n const roving = useRef(() => {});\n roving.current = () => {\n const el = root.current;\n if (!el || readOnly) return;\n const boxes = [...el.querySelectorAll<HTMLElement>('[role=\"checkbox\"]')];\n const own = boxes[Math.min(stop, boxes.length - 1)];\n for (const w of el.querySelectorAll<HTMLElement>(STOPS)) {\n const tabindex = w === own ? \"0\" : \"-1\";\n if (w.getAttribute(\"tabindex\") !== tabindex) w.setAttribute(\"tabindex\", tabindex);\n }\n };\n useLayoutEffect(() => roving.current());\n useLayoutEffect(() => {\n const el = root.current;\n if (!el || readOnly) return;\n const observer = new MutationObserver(() => roving.current());\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, [readOnly]);\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (!root.current || readOnly || e.altKey || e.metaKey || e.ctrlKey) return;\n const boxes = [...root.current.querySelectorAll<HTMLElement>('[role=\"checkbox\"]')];\n const row = target.closest<HTMLElement>(\"[data-right]\");\n const box = target.getAttribute(\"role\") === \"checkbox\" ? target : row?.querySelector<HTMLElement>('[role=\"checkbox\"]');\n if (!box) return;\n if (target !== box) {\n if (e.key === \"ArrowLeft\" || e.key === \"Escape\") {\n e.preventDefault();\n box.focus();\n }\n return;\n }\n const i = boxes.indexOf(box);\n const extra = row?.querySelector<HTMLElement>(\"[data-right-extra]\");\n const next =\n e.key === \"ArrowDown\"\n ? boxes[i + 1]\n : e.key === \"ArrowUp\"\n ? boxes[i - 1]\n : e.key === \"Home\"\n ? boxes[0]\n : e.key === \"End\"\n ? boxes[boxes.length - 1]\n : e.key === \"ArrowRight\"\n ? extra\n : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n };\n\n return (\n <div\n ref={(el) => {\n root.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n role=\"group\"\n aria-label={ariaLabel ?? t(\"rightsMatrix.rights\", \"Rights\")}\n onKeyDown={onKeyDown}\n onFocus={(e) => {\n const boxes = [...(root.current?.querySelectorAll<HTMLElement>('[role=\"checkbox\"]') ?? [])];\n const i = boxes.indexOf(e.target as HTMLElement);\n if (i >= 0 && i !== stop) setStop(i);\n }}\n className={cn(\"@container flex min-w-0 flex-col gap-24\", className)}\n >\n {searchable && (\n <SearchInput\n className=\"w-full\"\n aria-label={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n placeholder={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClear={() => setQuery(\"\")}\n />\n )}\n {shown.length === 0 && (\n <Empty\n size=\"compact\"\n title={t(\"rightsMatrix.noMatch\", \"No rights match\")}\n description={t(\"rightsMatrix.noMatchHint\", \"Try a right's name, its code, or a word from its description.\")}\n />\n )}\n {shown.map((g, gi) => {\n const headingId = `${baseId}-g${gi}`;\n const grantedCount = g.rights.filter((r) => r.granted).length;\n const changeable = g.rights.filter((r) => !r.disabled);\n const changeableOn = changeable.length > 0 && changeable.every((r) => r.granted);\n const allOn = grantedCount === g.rights.length;\n const Header = readOnly ? \"div\" : \"label\";\n return (\n <section key={g.label} aria-labelledby={headingId} className=\"flex min-w-0 flex-col\">\n <Header data-right=\"\" className={cn(\"flex items-start gap-12 px-12 pb-4\", !readOnly && changeable.length > 0 && \"cursor-pointer\")}>\n {!readOnly && (\n <span className=\"flex h-20 items-center\">\n <CheckboxBox\n aria-label={\n q\n ? t(\"rightsMatrix.everyRightShownIn\", \"Every right shown in {group}\", { group: g.label })\n : t(\"rightsMatrix.everyRightIn\", \"Every right in {group}\", { group: g.label })\n }\n checked={allOn}\n indeterminate={grantedCount > 0 && !allOn}\n disabled={changeable.length === 0}\n onCheckedChange={() => apply(groupCascade(all, g.rights, !changeableOn))}\n />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"flex items-baseline justify-between gap-12\">\n <span id={headingId} className=\"min-w-0 wrap-break-word text-body font-semibold text-fg\">\n {g.label}\n </span>\n <span className=\"shrink-0 text-small text-fg-secondary tabular\">\n {t(\"rightsMatrix.grantedOfTotal\", \"{granted} of {total}\", { granted: grantedCount, total: g.rights.length })}\n </span>\n </span>\n {g.description && <span className=\"text-small text-fg-secondary text-pretty\">{g.description}</span>}\n </span>\n </Header>\n {g.rights.map((r) => (\n <RightRow\n key={r.code}\n right={r}\n readOnly={!!readOnly}\n query={q}\n hasOrigin={hasOrigins}\n originText={originText}\n names={names}\n universal={universal}\n flashed={flashed.has(r.code)}\n onToggle={(granted) => apply(rightsCascade(all, r.code, granted))}\n />\n ))}\n </section>\n );\n })}\n <span aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RightsMatrix.displayName = \"RightsMatrix\";\n\nfunction RightRow({\n right: r,\n readOnly,\n query,\n hasOrigin,\n originText,\n names,\n universal,\n flashed,\n onToggle,\n}: {\n right: Right;\n readOnly: boolean;\n query: string;\n hasOrigin: boolean;\n originText: Record<Origin, string>;\n names: Map<string, string>;\n universal: ReadonlySet<string>;\n flashed: boolean;\n onToggle: (granted: boolean) => void;\n}) {\n const t = useUiText();\n const inset = useInset();\n const raised = useRaised();\n const onRaised = inset || raised;\n const descId = useId();\n const nameId = useId();\n const name = r.label ?? r.code;\n const needs = readOnly ? [] : (r.requires ?? []).filter((c) => !universal.has(c)).map((c) => names.get(c) ?? c);\n const text: ReactNode = (\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span className=\"flex min-w-0 items-start gap-8\">\n <span\n id={nameId}\n className={cn(\n \"min-w-0 wrap-break-word\",\n r.label ? \"text-body font-medium\" : \"mono text-small\",\n (readOnly && !r.granted) || r.disabled ? \"text-fg-secondary\" : \"text-fg\",\n )}\n >\n <Highlight text={name} query={query} />\n </span>\n {r.label && (\n <span className=\"hidden h-20 min-w-0 items-center @auth:flex\">\n <TruncatedText className=\"min-w-0 mono text-caption text-fg-tertiary\">{r.code}</TruncatedText>\n </span>\n )}\n {r.sensitive && (\n <span className={cn(\"flex shrink-0 items-center\", r.label ? \"h-20\" : \"h-18\")}>\n <Tooltip content={t(\"rightsMatrix.sensitiveHint\", \"Sensitive: exposes data or is hard to undo\")}>\n <span tabIndex={0} data-right-extra=\"\" className=\"inline-flex shrink-0 rounded-pill text-warning-text focus-ring\">\n <Icon icon={__icon_Alert02Icon} size=\"sm\" label={t(\"rightsMatrix.sensitive\", \"Sensitive\")} />\n </span>\n </Tooltip>\n </span>\n )}\n {hasOrigin && !readOnly && (\n <span\n className={cn(\n \"ml-auto flex max-w-160 min-w-80 shrink-0 items-center justify-end text-right text-small\",\n r.label ? \"min-h-20\" : \"min-h-18\",\n KAESO_RIGHTS_MATRIX_VARIANTS.origin[r.origin ?? \"none\"].classes,\n )}\n >\n <TruncatedText>{originText[r.origin ?? \"none\"]}</TruncatedText>\n </span>\n )}\n </span>\n <span id={descId} className=\"text-small text-pretty text-fg-secondary\">\n {r.description}\n </span>\n {needs.length > 0 && (\n <span className=\"text-caption text-fg-secondary\">\n {t(\"rightsMatrix.needs\", \"Needs {rights}\", { rights: needs.join(t(\"rightsMatrix.listSeparator\", \", \")) })}\n </span>\n )}\n {readOnly && r.granted && !!r.sources?.length && (\n <span className=\"flex flex-wrap gap-4 pt-4\">\n {r.sources.map((s) =>\n s.detail ? (\n <Tooltip key={s.label} content={s.detail}>\n <Badge tabIndex={0} className=\"cursor-help underline decoration-dotted underline-offset-2 focus-ring\">\n {s.label}\n </Badge>\n </Tooltip>\n ) : (\n <Badge key={s.label}>{s.label}</Badge>\n ),\n )}\n </span>\n )}\n </span>\n );\n\n if (readOnly) {\n return (\n <div className=\"flex min-h-56 items-start gap-12 px-12 py-8\">\n <span className=\"flex h-20 w-18 shrink-0 items-center justify-center\">\n <Icon\n icon={r.granted ? __icon_Tick02Icon : __icon_MinusSignIcon}\n size=\"sm\"\n className={r.granted ? \"text-fg\" : \"text-fg-tertiary\"}\n label={r.granted ? t(\"rightsMatrix.granted\", \"Granted\") : t(\"rightsMatrix.notGranted\", \"Not granted\")}\n />\n </span>\n {text}\n </div>\n );\n }\n\n const row = (\n <label\n data-right=\"\"\n className={cn(\n \"flex min-h-56 items-start gap-12 rounded-item px-12 py-8 transition-control\",\n r.disabled ? \"cursor-not-allowed\" : cn(\"cursor-pointer\", onRaised ? \"hover:bg-raised-hover\" : \"hover:bg-fill-1\"),\n flashed && (onRaised ? \"bg-raised-pressed hover:bg-raised-pressed\" : \"bg-fill-2 hover:bg-fill-2\"),\n )}\n >\n <span className=\"flex h-20 items-center\">\n <CheckboxBox checked={r.granted} disabled={r.disabled} onCheckedChange={onToggle} aria-labelledby={nameId} aria-describedby={descId} />\n </span>\n {text}\n </label>\n );\n return r.disabled && r.disabledReason ? <Tooltip content={r.disabledReason}>{row}</Tooltip> : row;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rights-DAHTG_kH.js","names":["__icon_Alert02Icon","__icon_Tick02Icon","__icon_MinusSignIcon","cn","useInset","useRaised","useUiText","Icon","Tooltip","CheckboxBox","Highlight","Empty","TruncatedText","Badge","rightsCascade","byCode","rights","r","dependents","req","out","seen","code","queue","next","linked","granted","c","groupCascade","state","all","group","current","n","g","STOPS","KAESO_RIGHTS_MATRIX_VARIANTS","KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS","originTexts","t","matches","texts","q","RightsMatrix","ariaLabel","query","setQuery","useState","announcement","setAnnouncement","flashed","setFlashed","flashTimer","useRef","root","baseId","useId","useMemo","groups","names","universal","required","hasOrigins","originText","originLabels","shown","apply","changes","onRightsChange","onChange","first","rest","also","stop","setStop","roving","el","readOnly","boxes","own","w","tabindex","useLayoutEffect","observer","ref","target","row","box","i","extra","className","searchable","SearchInput","headingId","gi","grantedCount","changeable","changeableOn","allOn","RightRow","inset","raised","onRaised","descId","nameId","name","needs","text","Alert02Icon","hasOrigin","s","Tick02Icon","MinusSignIcon","onToggle"],"sources":["../../src/components/kaeso/rights-logic.ts","../../src/components/kaeso/rights.tsx"],"sourcesContent":["export interface RightChange {\n code: string;\n granted: boolean;\n}\n\ninterface Node {\n code: string;\n granted: boolean;\n requires?: string[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport function rightsCascade(rights: readonly Node[], code: string, granted: boolean): RightChange[] {\n const byCode = new Map(rights.map((r) => [r.code, r]));\n const dependents = new Map<string, string[]>();\n for (const r of rights) for (const req of r.requires ?? []) dependents.set(req, [...(dependents.get(req) ?? []), r.code]);\n const out: RightChange[] = [{ code, granted }];\n const seen = new Set([code]);\n const queue = [code];\n while (queue.length) {\n const next = queue.shift() as string;\n const linked = granted ? (byCode.get(next)?.requires ?? []) : (dependents.get(next) ?? []);\n for (const c of linked) {\n if (seen.has(c)) continue;\n seen.add(c);\n const r = byCode.get(c);\n if (!r || r.disabled) continue;\n queue.push(c);\n if (r.granted !== granted) out.push({ code: c, granted });\n }\n }\n return out;\n}\n\nexport function groupCascade(all: readonly Node[], group: readonly Node[], granted: boolean): RightChange[] {\n const state = new Map(all.map((r) => [r.code, r.granted]));\n const out = new Map<string, boolean>();\n for (const r of group) {\n if (r.disabled || state.get(r.code) === granted) continue;\n const current = all.map((n) => ({ ...n, granted: out.get(n.code) ?? n.granted }));\n for (const c of rightsCascade(current, r.code, granted)) {\n out.set(c.code, c.granted);\n state.set(c.code, c.granted);\n }\n }\n return [...out].map(([code, g]) => ({ code, granted: g }));\n}\n","import { forwardRef, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Alert02Icon as __icon_Alert02Icon, Tick02Icon as __icon_Tick02Icon, MinusSignIcon as __icon_MinusSignIcon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { SearchInput } from \"../input/input.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Highlight } from \"../combobox/combobox.js\";\nimport { groupCascade, rightsCascade, type RightChange } from \"./rights-logic.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\nimport { useInset, useRaised } from \"../../utils/inset.js\";\nimport { TruncatedText } from \"../text/truncated.js\";\n\nconst STOPS = '[role=\"checkbox\"], [data-right-extra]';\n\nexport const KAESO_RIGHTS_MATRIX_VARIANTS = {\n origin: {\n preset: { classes: \"text-fg-secondary\" },\n added: { classes: \"text-success-text\" },\n removed: { classes: \"text-danger-text\" },\n none: { classes: \"\" },\n },\n mode: {\n edit: { classes: \"\" },\n readOnly: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RIGHTS_MATRIX_DEFAULT_VARIANTS = { origin: \"none\", mode: \"edit\" } as const;\n\ntype Origin = keyof typeof KAESO_RIGHTS_MATRIX_VARIANTS.origin;\n\nexport interface RightSource {\n label: string;\n detail?: string | undefined;\n}\n\nexport interface Right {\n code: string;\n label?: string | undefined;\n description: string;\n granted: boolean;\n origin?: Origin | undefined;\n sensitive?: boolean | undefined;\n requires?: string[] | undefined;\n sources?: RightSource[] | undefined;\n disabled?: boolean | undefined;\n disabledReason?: string | undefined;\n}\n\nexport interface RightsGroup {\n label: string;\n description?: string | undefined;\n rights: Right[];\n}\n\nexport interface RightsMatrixProps {\n groups: RightsGroup[];\n onChange?: ((code: string, granted: boolean) => void) | undefined;\n onRightsChange?: ((changes: RightChange[]) => void) | undefined;\n readOnly?: boolean | undefined;\n searchable?: boolean | undefined;\n originLabels?: Partial<Record<Origin, string>> | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n}\n\nfunction originTexts(t: UiText): Record<Origin, string> {\n return { preset: t(\"rightsMatrix.fromRole\", \"From role\"), added: t(\"rightsMatrix.added\", \"Added\"), removed: t(\"rightsMatrix.removed\", \"Removed\"), none: \"\" };\n}\n\nconst matches = (q: string, ...texts: (string | undefined)[]) => texts.some((t) => t?.toLowerCase().includes(q));\n\nexport const RightsMatrix = /* @__PURE__ */ forwardRef<HTMLDivElement, RightsMatrixProps>(function RightsMatrix(\n { groups, onChange, onRightsChange, readOnly, searchable, originLabels, \"aria-label\": ariaLabel, className },\n ref,\n) {\n const t = useUiText();\n const [query, setQuery] = useState(\"\");\n const [announcement, setAnnouncement] = useState(\"\");\n const [flashed, setFlashed] = useState<ReadonlySet<string>>(() => new Set());\n const flashTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(flashTimer.current), []);\n const root = useRef<HTMLDivElement | null>(null);\n const baseId = useId();\n const all = useMemo(() => groups.flatMap((g) => g.rights), [groups]);\n const names = useMemo(() => new Map(all.map((r) => [r.code, r.label ?? r.code])), [all]);\n const universal = useMemo(() => {\n if (all.length < 3) return new Set<string>();\n const required = new Set(all.flatMap((r) => r.requires ?? []));\n return new Set([...required].filter((c) => all.every((r) => r.code === c || r.requires?.includes(c))));\n }, [all]);\n const hasOrigins = all.some((r) => r.origin !== undefined);\n const originText = { ...originTexts(t), ...originLabels };\n const q = query.trim().toLowerCase();\n const shown = groups\n .map((g) => (!q || matches(q, g.label) ? g : { ...g, rights: g.rights.filter((r) => matches(q, r.label, r.code, r.description)) }))\n .filter((g) => g.rights.length > 0);\n\n const apply = (changes: RightChange[]) => {\n if (!changes.length) return;\n if (onRightsChange) onRightsChange(changes);\n else if (onChange) for (const c of changes) onChange(c.code, c.granted);\n const [first, ...rest] = changes;\n const also = rest.map((c) => names.get(c.code) ?? c.code);\n setAnnouncement(\n also.length && first\n ? first.granted\n ? t(\"rightsMatrix.alsoGranted\", \"Also granted {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : t(\"rightsMatrix.alsoRemoved\", \"Also removed {rights}\", { rights: also.join(t(\"rightsMatrix.listSeparator\", \", \")) })\n : \"\",\n );\n clearTimeout(flashTimer.current);\n setFlashed(new Set(rest.map((c) => c.code)));\n if (rest.length) flashTimer.current = setTimeout(() => setFlashed(new Set()), 1200);\n };\n\n const [stop, setStop] = useState(0);\n const roving = useRef(() => {});\n roving.current = () => {\n const el = root.current;\n if (!el || readOnly) return;\n const boxes = [...el.querySelectorAll<HTMLElement>('[role=\"checkbox\"]')];\n const own = boxes[Math.min(stop, boxes.length - 1)];\n for (const w of el.querySelectorAll<HTMLElement>(STOPS)) {\n const tabindex = w === own ? \"0\" : \"-1\";\n if (w.getAttribute(\"tabindex\") !== tabindex) w.setAttribute(\"tabindex\", tabindex);\n }\n };\n useLayoutEffect(() => roving.current());\n useLayoutEffect(() => {\n const el = root.current;\n if (!el || readOnly) return;\n const observer = new MutationObserver(() => roving.current());\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, [readOnly]);\n\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (!root.current || readOnly || e.altKey || e.metaKey || e.ctrlKey) return;\n const boxes = [...root.current.querySelectorAll<HTMLElement>('[role=\"checkbox\"]')];\n const row = target.closest<HTMLElement>(\"[data-right]\");\n const box = target.getAttribute(\"role\") === \"checkbox\" ? target : row?.querySelector<HTMLElement>('[role=\"checkbox\"]');\n if (!box) return;\n if (target !== box) {\n if (e.key === \"ArrowLeft\" || e.key === \"Escape\") {\n e.preventDefault();\n box.focus();\n }\n return;\n }\n const i = boxes.indexOf(box);\n const extra = row?.querySelector<HTMLElement>(\"[data-right-extra]\");\n const next =\n e.key === \"ArrowDown\"\n ? boxes[i + 1]\n : e.key === \"ArrowUp\"\n ? boxes[i - 1]\n : e.key === \"Home\"\n ? boxes[0]\n : e.key === \"End\"\n ? boxes[boxes.length - 1]\n : e.key === \"ArrowRight\"\n ? extra\n : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n };\n\n return (\n <div\n ref={(el) => {\n root.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n role=\"group\"\n aria-label={ariaLabel ?? t(\"rightsMatrix.rights\", \"Rights\")}\n onKeyDown={onKeyDown}\n onFocus={(e) => {\n const boxes = [...(root.current?.querySelectorAll<HTMLElement>('[role=\"checkbox\"]') ?? [])];\n const i = boxes.indexOf(e.target as HTMLElement);\n if (i >= 0 && i !== stop) setStop(i);\n }}\n className={cn(\"@container flex min-w-0 flex-col gap-24\", className)}\n >\n {searchable && (\n <SearchInput\n className=\"w-full\"\n aria-label={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n placeholder={t(\"rightsMatrix.searchRights\", \"Search rights\")}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClear={() => setQuery(\"\")}\n />\n )}\n {shown.length === 0 && (\n <Empty\n size=\"compact\"\n title={t(\"rightsMatrix.noMatch\", \"No rights match\")}\n description={t(\"rightsMatrix.noMatchHint\", \"Try a right's name, its code, or a word from its description.\")}\n />\n )}\n {shown.map((g, gi) => {\n const headingId = `${baseId}-g${gi}`;\n const grantedCount = g.rights.filter((r) => r.granted).length;\n const changeable = g.rights.filter((r) => !r.disabled);\n const changeableOn = changeable.length > 0 && changeable.every((r) => r.granted);\n const allOn = grantedCount === g.rights.length;\n const Header = readOnly ? \"div\" : \"label\";\n return (\n <section key={g.label} aria-labelledby={headingId} className=\"flex min-w-0 flex-col\">\n <Header data-right=\"\" className={cn(\"flex items-start gap-12 px-12 pb-4\", !readOnly && changeable.length > 0 && \"cursor-pointer\")}>\n {!readOnly && (\n <span className=\"flex h-20 items-center\">\n <CheckboxBox\n aria-label={\n q\n ? t(\"rightsMatrix.everyRightShownIn\", \"Every right shown in {group}\", { group: g.label })\n : t(\"rightsMatrix.everyRightIn\", \"Every right in {group}\", { group: g.label })\n }\n checked={allOn}\n indeterminate={grantedCount > 0 && !allOn}\n disabled={changeable.length === 0}\n onCheckedChange={() => apply(groupCascade(all, g.rights, !changeableOn))}\n />\n </span>\n )}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"flex items-baseline justify-between gap-12\">\n <span id={headingId} className=\"min-w-0 wrap-break-word text-body font-semibold text-fg\">\n {g.label}\n </span>\n <span className=\"shrink-0 text-small text-fg-secondary tabular\">\n {t(\"rightsMatrix.grantedOfTotal\", \"{granted} of {total}\", { granted: grantedCount, total: g.rights.length })}\n </span>\n </span>\n {g.description && <span className=\"text-small text-fg-secondary text-pretty\">{g.description}</span>}\n </span>\n </Header>\n {g.rights.map((r) => (\n <RightRow\n key={r.code}\n right={r}\n readOnly={!!readOnly}\n query={q}\n hasOrigin={hasOrigins}\n originText={originText}\n names={names}\n universal={universal}\n flashed={flashed.has(r.code)}\n onToggle={(granted) => apply(rightsCascade(all, r.code, granted))}\n />\n ))}\n </section>\n );\n })}\n <span aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RightsMatrix.displayName = \"RightsMatrix\";\n\nfunction RightRow({\n right: r,\n readOnly,\n query,\n hasOrigin,\n originText,\n names,\n universal,\n flashed,\n onToggle,\n}: {\n right: Right;\n readOnly: boolean;\n query: string;\n hasOrigin: boolean;\n originText: Record<Origin, string>;\n names: Map<string, string>;\n universal: ReadonlySet<string>;\n flashed: boolean;\n onToggle: (granted: boolean) => void;\n}) {\n const t = useUiText();\n const inset = useInset();\n const raised = useRaised();\n const onRaised = inset || raised;\n const descId = useId();\n const nameId = useId();\n const name = r.label ?? r.code;\n const needs = readOnly ? [] : (r.requires ?? []).filter((c) => !universal.has(c)).map((c) => names.get(c) ?? c);\n const text: ReactNode = (\n <span className=\"flex min-w-0 flex-1 flex-col gap-2\">\n <span className=\"flex min-w-0 items-start gap-8\">\n <span\n id={nameId}\n className={cn(\n \"min-w-0 wrap-break-word\",\n r.label ? \"text-body font-medium\" : \"mono text-small\",\n (readOnly && !r.granted) || r.disabled ? \"text-fg-secondary\" : \"text-fg\",\n )}\n >\n <Highlight text={name} query={query} />\n </span>\n {r.label && (\n <span className=\"hidden h-20 min-w-0 items-center @auth:flex\">\n <TruncatedText className=\"min-w-0 mono text-caption text-fg-tertiary\">{r.code}</TruncatedText>\n </span>\n )}\n {r.sensitive && (\n <span className={cn(\"flex shrink-0 items-center\", r.label ? \"h-20\" : \"h-18\")}>\n <Tooltip content={t(\"rightsMatrix.sensitiveHint\", \"Sensitive: exposes data or is hard to undo\")}>\n <span tabIndex={0} data-right-extra=\"\" className=\"inline-flex shrink-0 rounded-pill text-warning-text focus-ring\">\n <Icon icon={__icon_Alert02Icon} size=\"sm\" label={t(\"rightsMatrix.sensitive\", \"Sensitive\")} />\n </span>\n </Tooltip>\n </span>\n )}\n {hasOrigin && !readOnly && (\n <span\n className={cn(\n \"ml-auto flex max-w-160 min-w-80 shrink-0 items-center justify-end text-right text-small\",\n r.label ? \"min-h-20\" : \"min-h-18\",\n KAESO_RIGHTS_MATRIX_VARIANTS.origin[r.origin ?? \"none\"].classes,\n )}\n >\n <TruncatedText>{originText[r.origin ?? \"none\"]}</TruncatedText>\n </span>\n )}\n </span>\n <span id={descId} className=\"text-small text-pretty text-fg-secondary\">\n {r.description}\n </span>\n {needs.length > 0 && (\n <span className=\"text-caption text-fg-secondary\">\n {t(\"rightsMatrix.needs\", \"Needs {rights}\", { rights: needs.join(t(\"rightsMatrix.listSeparator\", \", \")) })}\n </span>\n )}\n {readOnly && r.granted && !!r.sources?.length && (\n <span className=\"flex flex-wrap gap-4 pt-4\">\n {r.sources.map((s) =>\n s.detail ? (\n <Tooltip key={s.label} content={s.detail}>\n <Badge tabIndex={0} className=\"cursor-help underline decoration-dotted underline-offset-2 focus-ring\">\n {s.label}\n </Badge>\n </Tooltip>\n ) : (\n <Badge key={s.label}>{s.label}</Badge>\n ),\n )}\n </span>\n )}\n </span>\n );\n\n if (readOnly) {\n return (\n <div className=\"flex min-h-56 items-start gap-12 px-12 py-8\">\n <span className=\"flex h-20 w-18 shrink-0 items-center justify-center\">\n <Icon\n icon={r.granted ? __icon_Tick02Icon : __icon_MinusSignIcon}\n size=\"sm\"\n className={r.granted ? \"text-fg\" : \"text-fg-tertiary\"}\n label={r.granted ? t(\"rightsMatrix.granted\", \"Granted\") : t(\"rightsMatrix.notGranted\", \"Not granted\")}\n />\n </span>\n {text}\n </div>\n );\n }\n\n const row = (\n <label\n data-right=\"\"\n className={cn(\n \"flex min-h-56 items-start gap-12 rounded-item px-12 py-8 transition-control\",\n r.disabled ? \"cursor-not-allowed\" : cn(\"cursor-pointer\", onRaised ? \"hover:bg-raised-hover\" : \"hover:bg-fill-1\"),\n flashed && (onRaised ? \"bg-raised-pressed hover:bg-raised-pressed\" : \"bg-fill-2 hover:bg-fill-2\"),\n )}\n >\n <span className=\"flex h-20 items-center\">\n <CheckboxBox checked={r.granted} disabled={r.disabled} onCheckedChange={onToggle} aria-labelledby={nameId} aria-describedby={descId} />\n </span>\n {text}\n </label>\n );\n return r.disabled && r.disabledReason ? <Tooltip content={r.disabledReason}>{row}</Tooltip> : row;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { i as e, o as t } from "./styles-
|
|
2
|
+
import { i as e, o as t } from "./styles-8fn_bHRP.js";
|
|
3
3
|
import { t as n } from "./cn-BjnOAUrA.js";
|
|
4
4
|
import { i as r } from "./dev-CR1p7gCm.js";
|
|
5
5
|
import { n as i, r as a } from "./portal-context-CTatR2Z8.js";
|
|
@@ -219,4 +219,4 @@ process.env.NODE_ENV !== "production" && (w.displayName = "Select");
|
|
|
219
219
|
//#endregion
|
|
220
220
|
export { y as n, w as r, b as t };
|
|
221
221
|
|
|
222
|
-
//# sourceMappingURL=select-
|
|
222
|
+
//# sourceMappingURL=select-UTdHKubp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-BqjmQOqx.js","names":["Select","BaseSelect","_Fragment","__icon_ArrowDown01Icon","__icon_ArrowUp01Icon","__icon_Tick02Icon","MENU_ITEM","MENU_POPUP","cn","warnStylingClassName","pageBoundary","usePortalContainer","useUiText","Icon","useField","useFieldControl","useLayoutWidth","anchorWidthStyle","OptionCheckbox","Fragment$1","KAESO_SELECT_VARIANTS","KAESO_SELECT_DEFAULT_VARIANTS","changeWith","accepts","value","onChange","SCROLL_ARROW","groupsOf","out","o","options","last","Select$1","placeholderProp","ariaLabel","force","props","className","t","placeholder","field","fc","trigger","useRef","triggerWidth","setTrigger","useCallback","el","ref","byValue","textOf","v","valueProps","control","Select","required","disabled","name","open","onOpenChange","id","invalid","error","size","appearance","fullWidth","label","description","icon","multiple","arr","first","ArrowDown01Icon","CSPProvider","ArrowUp01Icon","Fragment","gi","g","Tick02Icon","withField"],"sources":["../../src/components/select/select.tsx"],"sourcesContent":["import { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Fragment, forwardRef, useCallback, useRef, type ReactNode } from \"react\";\nimport { CSPProvider } from \"@base-ui/react/csp-provider\";\nimport { Select as BaseSelect } from \"@base-ui/react/select\";\nimport { cn } from \"../../utils/cn.js\";\nimport { warnStylingClassName } from \"../../utils/dev.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { ArrowDown01Icon as __icon_ArrowDown01Icon, ArrowUp01Icon as __icon_ArrowUp01Icon, Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { MENU_ICON, MENU_ITEM, MENU_LABEL, MENU_POPUP, MENU_SEPARATOR } from \"../menu/styles.js\";\nimport { anchorWidthStyle, useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { OptionCheckbox } from \"./option-checkbox.js\";\n\nexport const KAESO_SELECT_VARIANTS = {\n appearance: {\n default: { classes: \"material-selector\" },\n ghost: {\n classes: \"material-ghost focus-ring text-fg-secondary hover:text-fg focus-visible:text-fg open:text-fg\",\n },\n header: { classes: \"material-ghost focus-ring text-fg\" },\n },\n size: {\n sm: { classes: \"h-32 pl-12 pr-10 gap-6 text-body\" },\n md: { classes: \"h-36 pl-16 pr-12 gap-8 text-body\" },\n lg: { classes: \"h-40 pl-18 pr-14 gap-8 text-body\" },\n xl: { classes: \"h-48 pl-22 pr-18 gap-8 text-body-lg\" },\n },\n} as const;\nexport const KAESO_SELECT_DEFAULT_VARIANTS = { appearance: \"default\", size: \"md\" } as const;\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n textValue?: string | undefined;\n description?: ReactNode | undefined;\n icon?: IconData | undefined;\n group?: string | undefined;\n disabled?: boolean | undefined;\n}\n\ninterface BaseProps extends FieldWrapProps {\n options: SelectOption[];\n placeholder?: ReactNode | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n disabled?: boolean | undefined;\n name?: string | undefined;\n id?: string | undefined;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n invalid?: boolean | undefined;\n icon?: IconData | undefined;\n fullWidth?: boolean | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\nexport interface SingleSelectProps extends BaseProps {\n multiple?: false | undefined;\n value?: string | null | undefined;\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n}\nexport interface MultiSelectProps extends BaseProps {\n multiple: true;\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n}\nexport type SelectProps = SingleSelectProps | MultiSelectProps;\n\nfunction changeWith<T extends string | string[]>(onChange: (value: T) => void, accepts: (value: unknown) => value is T) {\n return (value: unknown) => {\n if (accepts(value)) onChange(value);\n };\n}\n\nconst SCROLL_ARROW = \"absolute inset-x-0 z-10 flex h-24 cursor-default items-center justify-center bg-raised text-fg-tertiary\";\n\nfunction groupsOf(options: SelectOption[]) {\n const out: { group: string | undefined; items: SelectOption[] }[] = [];\n for (const o of options) {\n const last = out[out.length - 1];\n if (last && last.group === o.group) last.items.push(o);\n else out.push({ group: o.group, items: [o] });\n }\n return out;\n}\n\nexport const Select = /* @__PURE__ */ forwardRef<HTMLButtonElement, SelectProps>(function Select(props, ref) {\n const {\n options,\n placeholder: placeholderProp,\n size = \"md\",\n appearance = \"default\",\n disabled,\n name,\n id,\n open,\n onOpenChange,\n invalid,\n icon,\n fullWidth,\n label,\n description,\n error,\n optional,\n required,\n layout,\n className,\n multiple,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n warnStylingClassName(\"Select\", className);\n const t = useUiText();\n const placeholder = placeholderProp ?? t(\"select.placeholder\", \"Not set\");\n const field = useField();\n const fc = useFieldControl(props);\n const trigger = useRef<HTMLButtonElement | null>(null);\n const triggerWidth = useLayoutWidth(trigger);\n const setTrigger = useCallback(\n (el: HTMLButtonElement | null) => {\n trigger.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref],\n );\n const byValue = new Map(options.map((o) => [o.value, o]));\n const textOf = (v: string) => {\n const o = byValue.get(v);\n return o?.textValue ?? (typeof o?.label === \"string\" ? o.label : v);\n };\n const valueProps: Pick<BaseSelect.Root.Props<string, boolean>, \"multiple\" | \"value\" | \"defaultValue\" | \"onValueChange\"> = props.multiple\n ? {\n multiple: true,\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onValueChange ? { onValueChange: changeWith(props.onValueChange, Array.isArray) } : {}),\n }\n : {\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onValueChange ? { onValueChange: changeWith(props.onValueChange, (v) => typeof v === \"string\") } : {}),\n };\n const control = (\n <BaseSelect.Root\n {...valueProps}\n {...((field?.required ?? required) ? { required: true } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(name ? { name } : {})}\n {...(open !== undefined ? { open } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n itemToStringLabel={(v: unknown) => textOf(String(v))}\n modal={false}\n >\n <BaseSelect.Trigger\n ref={setTrigger}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(invalid || error ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"group/trigger inline-flex min-w-0 cursor-pointer items-center justify-between rounded-pill font-medium whitespace-nowrap transition-control disabled:cursor-not-allowed\",\n KAESO_SELECT_VARIANTS.size[size].classes,\n KAESO_SELECT_VARIANTS.appearance[appearance].classes,\n (invalid || error) && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n !(label || description || error) && className,\n )}\n >\n {icon && <Icon icon={icon} size=\"sm\" className=\"text-fg-secondary group-disabled/trigger:text-fg-disabled\" />}\n <BaseSelect.Value\n className={cn(\n \"min-w-0 flex-1 truncate text-left data-placeholder:font-regular data-placeholder:text-fg-tertiary group-disabled/trigger:data-placeholder:text-fg-disabled\",\n multiple && \"flex items-center\",\n )}\n placeholder={placeholder}\n >\n {(value: unknown) => {\n if (multiple) {\n const arr = Array.isArray(value) ? value.map(String) : [];\n const [first] = arr;\n if (first === undefined) return placeholder;\n if (arr.length === 1) return <span className=\"min-w-0 truncate\">{textOf(first)}</span>;\n return (\n <>\n <span className=\"min-w-0 truncate\">{textOf(first)}</span>{\" \"}\n <span className=\"shrink-0 pl-4 tabular\">{t(\"select.more\", \"+{count}\", { count: String(arr.length - 1) })}</span>\n </>\n );\n }\n return value == null || value === \"\" ? placeholder : (byValue.get(String(value))?.label ?? String(value));\n }}\n </BaseSelect.Value>\n <BaseSelect.Icon className=\"flex shrink-0 text-fg-tertiary group-disabled/trigger:text-fg-disabled\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n <CSPProvider disableStyleElements>\n <BaseSelect.Portal container={usePortalContainer()}>\n <BaseSelect.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n alignItemWithTrigger={false}\n align=\"start\"\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BaseSelect.Popup data-select-popup=\"\" className={cn(MENU_POPUP, \"relative min-w-anchor overflow-hidden\")} style={anchorWidthStyle(triggerWidth)}>\n <BaseSelect.ScrollUpArrow className={cn(SCROLL_ARROW, \"top-0 rounded-t-menu\")}>\n <Icon icon={__icon_ArrowUp01Icon} size=\"xs\" />\n </BaseSelect.ScrollUpArrow>\n <BaseSelect.List className=\"-mx-6 flex min-h-0 flex-col overflow-y-auto overscroll-contain px-6 outline-none scrollbar-quiet\">\n {groupsOf(options).map((g, gi) => (\n <Fragment key={g.group ?? `g${gi}`}>\n {gi > 0 && <div role=\"presentation\" className={MENU_SEPARATOR} />}\n <BaseSelect.Group className=\"flex flex-col\">\n {g.group && <BaseSelect.GroupLabel className={MENU_LABEL}>{g.group}</BaseSelect.GroupLabel>}\n {g.items.map((o) => (\n <BaseSelect.Item\n key={o.value}\n value={o.value}\n {...(o.disabled ? { disabled: true } : {})}\n label={o.textValue ?? (typeof o.label === \"string\" ? o.label : o.value)}\n className={cn(MENU_ITEM, \"group/opt\")}\n >\n {multiple && (\n <span className=\"pointer-events-none flex\">\n <OptionCheckbox />\n </span>\n )}\n {o.icon && <Icon icon={o.icon} size=\"sm\" className={cn(MENU_ICON, o.description && \"self-start mt-10\")} />}\n <span className={cn(\"flex min-w-0 flex-1 flex-col\", o.description ? \"gap-2 py-8\" : \"py-6\")}>\n <BaseSelect.ItemText className=\"wrap-break-word whitespace-normal text-pretty\">{o.label}</BaseSelect.ItemText>\n {o.description && <span className=\"text-small font-regular whitespace-normal text-pretty text-fg-secondary\">{o.description}</span>}\n </span>\n {!multiple && (\n <BaseSelect.ItemIndicator\n keepMounted\n className={cn(\n \"flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-selected:opacity-100\",\n o.description && \"self-start mt-10\",\n )}\n >\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </BaseSelect.ItemIndicator>\n )}\n </BaseSelect.Item>\n ))}\n </BaseSelect.Group>\n </Fragment>\n ))}\n </BaseSelect.List>\n <BaseSelect.ScrollDownArrow className={cn(SCROLL_ARROW, \"bottom-0 rounded-b-menu\")}>\n <Icon icon={__icon_ArrowDown01Icon} size=\"xs\" />\n </BaseSelect.ScrollDownArrow>\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </CSPProvider>\n </BaseSelect.Root>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") Select.displayName = \"Select\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-UTdHKubp.js","names":["Select","BaseSelect","_Fragment","__icon_ArrowDown01Icon","__icon_ArrowUp01Icon","__icon_Tick02Icon","MENU_ITEM","MENU_POPUP","cn","warnStylingClassName","pageBoundary","usePortalContainer","useUiText","Icon","useField","useFieldControl","useLayoutWidth","anchorWidthStyle","OptionCheckbox","Fragment$1","KAESO_SELECT_VARIANTS","KAESO_SELECT_DEFAULT_VARIANTS","changeWith","accepts","value","onChange","SCROLL_ARROW","groupsOf","out","o","options","last","Select$1","placeholderProp","ariaLabel","force","props","className","t","placeholder","field","fc","trigger","useRef","triggerWidth","setTrigger","useCallback","el","ref","byValue","textOf","v","valueProps","control","Select","required","disabled","name","open","onOpenChange","id","invalid","error","size","appearance","fullWidth","label","description","icon","multiple","arr","first","ArrowDown01Icon","CSPProvider","ArrowUp01Icon","Fragment","gi","g","Tick02Icon","withField"],"sources":["../../src/components/select/select.tsx"],"sourcesContent":["import { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Fragment, forwardRef, useCallback, useRef, type ReactNode } from \"react\";\nimport { CSPProvider } from \"@base-ui/react/csp-provider\";\nimport { Select as BaseSelect } from \"@base-ui/react/select\";\nimport { cn } from \"../../utils/cn.js\";\nimport { warnStylingClassName } from \"../../utils/dev.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { ArrowDown01Icon as __icon_ArrowDown01Icon, ArrowUp01Icon as __icon_ArrowUp01Icon, Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { MENU_ICON, MENU_ITEM, MENU_LABEL, MENU_POPUP, MENU_SEPARATOR } from \"../menu/styles.js\";\nimport { anchorWidthStyle, useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { OptionCheckbox } from \"./option-checkbox.js\";\n\nexport const KAESO_SELECT_VARIANTS = {\n appearance: {\n default: { classes: \"material-selector\" },\n ghost: {\n classes: \"material-ghost focus-ring text-fg-secondary hover:text-fg focus-visible:text-fg open:text-fg\",\n },\n header: { classes: \"material-ghost focus-ring text-fg\" },\n },\n size: {\n sm: { classes: \"h-32 pl-12 pr-10 gap-6 text-body\" },\n md: { classes: \"h-36 pl-16 pr-12 gap-8 text-body\" },\n lg: { classes: \"h-40 pl-18 pr-14 gap-8 text-body\" },\n xl: { classes: \"h-48 pl-22 pr-18 gap-8 text-body-lg\" },\n },\n} as const;\nexport const KAESO_SELECT_DEFAULT_VARIANTS = { appearance: \"default\", size: \"md\" } as const;\n\nexport interface SelectOption {\n value: string;\n label: ReactNode;\n textValue?: string | undefined;\n description?: ReactNode | undefined;\n icon?: IconData | undefined;\n group?: string | undefined;\n disabled?: boolean | undefined;\n}\n\ninterface BaseProps extends FieldWrapProps {\n options: SelectOption[];\n placeholder?: ReactNode | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n disabled?: boolean | undefined;\n name?: string | undefined;\n id?: string | undefined;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n invalid?: boolean | undefined;\n icon?: IconData | undefined;\n fullWidth?: boolean | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\nexport interface SingleSelectProps extends BaseProps {\n multiple?: false | undefined;\n value?: string | null | undefined;\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n}\nexport interface MultiSelectProps extends BaseProps {\n multiple: true;\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n}\nexport type SelectProps = SingleSelectProps | MultiSelectProps;\n\nfunction changeWith<T extends string | string[]>(onChange: (value: T) => void, accepts: (value: unknown) => value is T) {\n return (value: unknown) => {\n if (accepts(value)) onChange(value);\n };\n}\n\nconst SCROLL_ARROW = \"absolute inset-x-0 z-10 flex h-24 cursor-default items-center justify-center bg-raised text-fg-tertiary\";\n\nfunction groupsOf(options: SelectOption[]) {\n const out: { group: string | undefined; items: SelectOption[] }[] = [];\n for (const o of options) {\n const last = out[out.length - 1];\n if (last && last.group === o.group) last.items.push(o);\n else out.push({ group: o.group, items: [o] });\n }\n return out;\n}\n\nexport const Select = /* @__PURE__ */ forwardRef<HTMLButtonElement, SelectProps>(function Select(props, ref) {\n const {\n options,\n placeholder: placeholderProp,\n size = \"md\",\n appearance = \"default\",\n disabled,\n name,\n id,\n open,\n onOpenChange,\n invalid,\n icon,\n fullWidth,\n label,\n description,\n error,\n optional,\n required,\n layout,\n className,\n multiple,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n warnStylingClassName(\"Select\", className);\n const t = useUiText();\n const placeholder = placeholderProp ?? t(\"select.placeholder\", \"Not set\");\n const field = useField();\n const fc = useFieldControl(props);\n const trigger = useRef<HTMLButtonElement | null>(null);\n const triggerWidth = useLayoutWidth(trigger);\n const setTrigger = useCallback(\n (el: HTMLButtonElement | null) => {\n trigger.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref],\n );\n const byValue = new Map(options.map((o) => [o.value, o]));\n const textOf = (v: string) => {\n const o = byValue.get(v);\n return o?.textValue ?? (typeof o?.label === \"string\" ? o.label : v);\n };\n const valueProps: Pick<BaseSelect.Root.Props<string, boolean>, \"multiple\" | \"value\" | \"defaultValue\" | \"onValueChange\"> = props.multiple\n ? {\n multiple: true,\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onValueChange ? { onValueChange: changeWith(props.onValueChange, Array.isArray) } : {}),\n }\n : {\n ...(props.value !== undefined ? { value: props.value } : {}),\n ...(props.defaultValue !== undefined ? { defaultValue: props.defaultValue } : {}),\n ...(props.onValueChange ? { onValueChange: changeWith(props.onValueChange, (v) => typeof v === \"string\") } : {}),\n };\n const control = (\n <BaseSelect.Root\n {...valueProps}\n {...((field?.required ?? required) ? { required: true } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(name ? { name } : {})}\n {...(open !== undefined ? { open } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n itemToStringLabel={(v: unknown) => textOf(String(v))}\n modal={false}\n >\n <BaseSelect.Trigger\n ref={setTrigger}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(invalid || error ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"group/trigger inline-flex min-w-0 cursor-pointer items-center justify-between rounded-pill font-medium whitespace-nowrap transition-control disabled:cursor-not-allowed\",\n KAESO_SELECT_VARIANTS.size[size].classes,\n KAESO_SELECT_VARIANTS.appearance[appearance].classes,\n (invalid || error) && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n !(label || description || error) && className,\n )}\n >\n {icon && <Icon icon={icon} size=\"sm\" className=\"text-fg-secondary group-disabled/trigger:text-fg-disabled\" />}\n <BaseSelect.Value\n className={cn(\n \"min-w-0 flex-1 truncate text-left data-placeholder:font-regular data-placeholder:text-fg-tertiary group-disabled/trigger:data-placeholder:text-fg-disabled\",\n multiple && \"flex items-center\",\n )}\n placeholder={placeholder}\n >\n {(value: unknown) => {\n if (multiple) {\n const arr = Array.isArray(value) ? value.map(String) : [];\n const [first] = arr;\n if (first === undefined) return placeholder;\n if (arr.length === 1) return <span className=\"min-w-0 truncate\">{textOf(first)}</span>;\n return (\n <>\n <span className=\"min-w-0 truncate\">{textOf(first)}</span>{\" \"}\n <span className=\"shrink-0 pl-4 tabular\">{t(\"select.more\", \"+{count}\", { count: String(arr.length - 1) })}</span>\n </>\n );\n }\n return value == null || value === \"\" ? placeholder : (byValue.get(String(value))?.label ?? String(value));\n }}\n </BaseSelect.Value>\n <BaseSelect.Icon className=\"flex shrink-0 text-fg-tertiary group-disabled/trigger:text-fg-disabled\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n <CSPProvider disableStyleElements>\n <BaseSelect.Portal container={usePortalContainer()}>\n <BaseSelect.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n alignItemWithTrigger={false}\n align=\"start\"\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BaseSelect.Popup data-select-popup=\"\" className={cn(MENU_POPUP, \"relative min-w-anchor overflow-hidden\")} style={anchorWidthStyle(triggerWidth)}>\n <BaseSelect.ScrollUpArrow className={cn(SCROLL_ARROW, \"top-0 rounded-t-menu\")}>\n <Icon icon={__icon_ArrowUp01Icon} size=\"xs\" />\n </BaseSelect.ScrollUpArrow>\n <BaseSelect.List className=\"-mx-6 flex min-h-0 flex-col overflow-y-auto overscroll-contain px-6 outline-none scrollbar-quiet\">\n {groupsOf(options).map((g, gi) => (\n <Fragment key={g.group ?? `g${gi}`}>\n {gi > 0 && <div role=\"presentation\" className={MENU_SEPARATOR} />}\n <BaseSelect.Group className=\"flex flex-col\">\n {g.group && <BaseSelect.GroupLabel className={MENU_LABEL}>{g.group}</BaseSelect.GroupLabel>}\n {g.items.map((o) => (\n <BaseSelect.Item\n key={o.value}\n value={o.value}\n {...(o.disabled ? { disabled: true } : {})}\n label={o.textValue ?? (typeof o.label === \"string\" ? o.label : o.value)}\n className={cn(MENU_ITEM, \"group/opt\")}\n >\n {multiple && (\n <span className=\"pointer-events-none flex\">\n <OptionCheckbox />\n </span>\n )}\n {o.icon && <Icon icon={o.icon} size=\"sm\" className={cn(MENU_ICON, o.description && \"self-start mt-10\")} />}\n <span className={cn(\"flex min-w-0 flex-1 flex-col\", o.description ? \"gap-2 py-8\" : \"py-6\")}>\n <BaseSelect.ItemText className=\"wrap-break-word whitespace-normal text-pretty\">{o.label}</BaseSelect.ItemText>\n {o.description && <span className=\"text-small font-regular whitespace-normal text-pretty text-fg-secondary\">{o.description}</span>}\n </span>\n {!multiple && (\n <BaseSelect.ItemIndicator\n keepMounted\n className={cn(\n \"flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-selected:opacity-100\",\n o.description && \"self-start mt-10\",\n )}\n >\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </BaseSelect.ItemIndicator>\n )}\n </BaseSelect.Item>\n ))}\n </BaseSelect.Group>\n </Fragment>\n ))}\n </BaseSelect.List>\n <BaseSelect.ScrollDownArrow className={cn(SCROLL_ARROW, \"bottom-0 rounded-b-menu\")}>\n <Icon icon={__icon_ArrowDown01Icon} size=\"xs\" />\n </BaseSelect.ScrollDownArrow>\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </CSPProvider>\n </BaseSelect.Root>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") Select.displayName = \"Select\";\n"],"mappings":"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"}
|
|
@@ -267,7 +267,7 @@ var Y = /* @__PURE__ */ y(function({ href: e, label: n = "Kaeso" }, r) {
|
|
|
267
267
|
});
|
|
268
268
|
});
|
|
269
269
|
process.env.NODE_ENV !== "production" && (Y.displayName = "BrandWordmark");
|
|
270
|
-
var de = /* @__PURE__ */ u(() => import("./sidebar-menu-
|
|
270
|
+
var de = /* @__PURE__ */ u(() => import("./sidebar-menu-C0qJsQF5.js"), { base: () => import.meta.url });
|
|
271
271
|
function X({ trigger: e, side: t, header: n, footer: r, children: a }) {
|
|
272
272
|
let [c, l] = D(!1), [u, f] = D(!1), p = o(de, u || c, () => {
|
|
273
273
|
f(!1), l(!1);
|
|
@@ -661,4 +661,4 @@ var Se = /* @__PURE__ */ Object.assign(K, {
|
|
|
661
661
|
//#endregion
|
|
662
662
|
export { le as a, U as c, ue as i, V as l, oe as n, Se as o, z as r, H as s, Y as t };
|
|
663
663
|
|
|
664
|
-
//# sourceMappingURL=sidebar-
|
|
664
|
+
//# sourceMappingURL=sidebar-K30Ae8N5.js.map
|