@logicplanes/kaeso-ui 0.4.6 → 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-DysOel2X.js → app-frame-D8sGcD0v.js} +6 -6
- package/dist/chunks/{app-frame-DysOel2X.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-CmK-8ObW.js → core-Cw3pNRp3.js} +10 -9
- package/dist/chunks/core-Cw3pNRp3.js.map +1 -0
- package/dist/chunks/data-table-CGecI-FI.js +602 -0
- 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-obd_w9xk.js → domain-CrQX3p6E.js} +2 -2
- package/dist/chunks/{domain-obd_w9xk.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-B4G-sWwV.js → list-o8wcuBOz.js} +117 -94
- package/dist/chunks/list-o8wcuBOz.js.map +1 -0
- 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-kS5tdmvb.js → page-header-C5Bv1gKE.js} +2 -2
- package/dist/chunks/{page-header-kS5tdmvb.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/{theme-provider-DJhORMlc.js → theme-provider-BjXTggqM.js} +6 -2
- package/dist/chunks/theme-provider-BjXTggqM.js.map +1 -0
- package/dist/chunks/{timeseries-Ck-q0wWn.js → timeseries-CK86u7M0.js} +3 -3
- package/dist/chunks/{timeseries-Ck-q0wWn.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 +11 -16
- 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 +3 -3
- package/dist/components/theme-select.js +2 -2
- package/dist/components/toast.js +40 -38
- package/dist/components/toast.js.map +1 -1
- package/dist/index.js +69 -68
- package/dist/kaeso.css +19 -12
- package/dist/styles.css +1 -1
- package/dist/theme.js +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/core-CmK-8ObW.js.map +0 -1
- package/dist/chunks/data-table-CqY8_6IS.js +0 -581
- package/dist/chunks/data-table-CqY8_6IS.js.map +0 -1
- package/dist/chunks/identity-3Foi5F8w.js +0 -361
- package/dist/chunks/identity-3Foi5F8w.js.map +0 -1
- package/dist/chunks/list-B4G-sWwV.js.map +0 -1
- package/dist/chunks/styles-hkFkoBbi.js +0 -21
- package/dist/chunks/styles-hkFkoBbi.js.map +0 -1
- package/dist/chunks/theme-provider-DJhORMlc.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination-D7fAm8qg.js","names":["__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","cn","useUiText","IconButton","KAESO_PAGINATION_VARIANTS","KAESO_PAGINATION_DEFAULT_VARIANTS","SLOTS","pageSlots","count","pageCount","current","page","i","soft","blocked","run","Pagination","t","label","previous","next","variant","LoadMore","hasMore","hasPrevious","className","ArrowLeft01Icon","onPrevious","ArrowRight01Icon","onNext","onPageChange","p","loadMore","inside","setInside","useState","ended","setEnded","caption","useRef","useLayoutEffect","Button","onLoadMore"],"sources":["../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState, type FocusEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PAGINATION_VARIANTS = {\n variant: {\n \"load-more\": {\n classes: \"\",\n },\n cursor: { classes: \"\" },\n pages: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PAGINATION_DEFAULT_VARIANTS = { variant: \"load-more\" } as const;\n\nexport interface PaginationProps {\n variant?: keyof typeof KAESO_PAGINATION_VARIANTS.variant | undefined;\n hasMore?: boolean | undefined;\n hasPrevious?: boolean | undefined;\n loading?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n onNext?: (() => void) | undefined;\n onPrevious?: (() => void) | undefined;\n page?: number | undefined;\n pageCount?: number | undefined;\n onPageChange?: ((page: number) => void) | undefined;\n className?: string | undefined;\n}\n\nconst SLOTS = 7;\n\nfunction pageSlots(page: number, pageCount: number): (number | \"gap\")[] {\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n if (count <= SLOTS) return Array.from({ length: count }, (_, i) => i + 1);\n if (current <= 4) return [1, 2, 3, 4, 5, \"gap\", count];\n if (current >= count - 3) return [1, \"gap\", count - 4, count - 3, count - 2, count - 1, count];\n return [1, \"gap\", current - 1, current, current + 1, \"gap\", count];\n}\n\nfunction soft(blocked: boolean, run: (() => void) | undefined) {\n return {\n ...(blocked ? { \"aria-disabled\": true } : {}),\n onClick: () => {\n if (!blocked) run?.();\n },\n };\n}\n\nexport const Pagination = /* @__PURE__ */ forwardRef<HTMLElement, PaginationProps>(function Pagination(\n { variant = \"load-more\", hasMore, hasPrevious, loading, onLoadMore, onNext, onPrevious, page = 1, pageCount = 1, onPageChange, className },\n ref,\n) {\n const t = useUiText();\n const label = t(\"pagination.label\", \"Pagination\");\n const previous = t(\"pagination.previous\", \"Previous page\");\n const next = t(\"pagination.next\", \"Next page\");\n\n if (variant === \"load-more\") {\n return <LoadMore ref={ref} label={label} hasMore={!!hasMore} loading={loading} onLoadMore={onLoadMore} className={className} />;\n }\n if (variant === \"cursor\") {\n if (!hasMore && !hasPrevious) return null;\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-8\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(!hasPrevious, onPrevious)} />\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(!hasMore, onNext)} />\n </nav>\n );\n }\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-4\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(current <= 1, () => onPageChange?.(current - 1))} />\n <span className=\"flex items-center gap-4 px-4\">\n {pageSlots(current, count).map((p, i) =>\n p === \"gap\" ? (\n <span key={`gap-${i}`} aria-hidden className=\"inline-flex h-32 min-w-40 items-center justify-center text-body text-fg-tertiary\">\n …\n </span>\n ) : (\n <button\n key={`slot-${i}`}\n type=\"button\"\n aria-current={p === current ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {page}\", { page: String(p) })}\n onClick={() => {\n if (p !== page) onPageChange?.(p);\n }}\n className={cn(\n \"relative inline-flex h-32 min-w-40 cursor-pointer items-center justify-center rounded-pill px-8 text-body font-medium tabular transition-control tap-target focus-ring-inset\",\n p === current ? \"bg-fill-2 text-fg\" : \"text-fg-secondary hover:bg-fill-1 hover:text-fg active:bg-fill-2\",\n )}\n >\n {p}\n </button>\n ),\n )}\n </span>\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(current >= count, () => onPageChange?.(current + 1))} />\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Pagination.displayName = \"Pagination\";\n\nconst LoadMore = /* @__PURE__ */ forwardRef<\n HTMLElement,\n { label: string; hasMore: boolean; loading: boolean | undefined; onLoadMore: (() => void) | undefined; className: string | undefined }\n>(function PaginationLoadMore({ label, hasMore, loading, onLoadMore, className }, ref) {\n const t = useUiText();\n const loadMore = t(\"pagination.loadMore\", \"Load more\");\n const [inside, setInside] = useState(false);\n const [ended, setEnded] = useState(false);\n const caption = useRef<HTMLParagraphElement>(null);\n if (hasMore && ended) setEnded(false);\n if (!hasMore && inside && !ended) setEnded(true);\n useLayoutEffect(() => {\n if (ended) caption.current?.focus();\n }, [ended]);\n if (!hasMore && !ended) return null;\n return (\n <nav\n ref={ref}\n aria-label={label}\n className={cn(\"flex items-center justify-center gap-12 py-12\", className)}\n onFocus={() => setInside(true)}\n onBlur={(e: FocusEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget)) setInside(false);\n }}\n >\n {hasMore ? (\n <Button variant=\"secondary\" size=\"sm\" loading={loading} onClick={onLoadMore} reserveLabels={[loadMore]}>\n {loadMore}\n </Button>\n ) : (\n <p ref={caption} tabIndex={-1} className=\"flex h-32 items-center text-small text-fg-secondary outline-none\">\n {t(\"pagination.allShown\", \"All rows shown\")}\n </p>\n )}\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LoadMore.displayName = \"Pagination.LoadMore\";\n"],"mappings":";;;;;;;;;AAOA,IAAaK,IAA4B,EACvC,SAAS;CACP,aAAa,EACX,SAAS,GACX;CACA,QAAQ,EAAE,SAAS,GAAG;CACtB,OAAO,EAAE,SAAS,GAAG;AACvB,EACF,GACaC,IAAoC,EAAE,SAAS,YAAY,GAgBlEC,IAAQ;AAEd,SAASC,EAAU,GAAc,GAAuC;CACtE,IAAMC,IAAQ,KAAK,IAAI,GAAG,KAAK,MAAMC,CAAS,CAAC,GACzCC,IAAU,KAAK,IAAIF,GAAO,KAAK,IAAI,GAAG,KAAK,MAAMG,CAAI,CAAC,CAAC;CAI7D,OAHIH,KAASF,IAAc,MAAM,KAAK,EAAE,QAAQE,EAAM,IAAI,GAAG,MAAMI,IAAI,CAAC,IACpEF,KAAW,IAAU;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAOF;CAAK,IACjDE,KAAWF,IAAQ,IAAU;EAAC;EAAG;EAAOA,IAAQ;EAAGA,IAAQ;EAAGA,IAAQ;EAAGA,IAAQ;EAAGA;CAAK,IACtF;EAAC;EAAG;EAAOE,IAAU;EAAGA;EAASA,IAAU;EAAG;EAAOF;CAAK;AACnE;AAEA,SAASK,EAAK,GAAkB,GAA+B;CAC7D,OAAO;EACL,GAAIC,IAAU,EAAE,iBAAiB,GAAK,IAAI,CAAC;EAC3C,eAAe;GACb,AAAKA,KAASC,IAAM;EACtB;CACF;AACF;AAEA,IAAaC,IAA6B,kBAAyC,SACjF,EAAE,aAAU,aAAa,YAAS,gBAAa,YAAS,eAAY,WAAQ,eAAY,UAAO,GAAG,eAAY,GAAG,iBAAc,gBAC/H,GACA;CACA,IAAMC,IAAIf,EAAU,GACdgB,IAAQD,EAAE,oBAAoB,YAAY,GAC1CE,IAAWF,EAAE,uBAAuB,eAAe,GACnDG,IAAOH,EAAE,mBAAmB,WAAW;CAE7C,IAAII,MAAY,aACd,OAAO,kBAACC,GAAD;EAAe;EAAY;EAAO,SAAS,CAAC,CAACC;EAAkB;EAAqB;EAAuB;CAAY,CAAA;CAEhI,IAAIF,MAAY,UAEd,OADI,CAACE,KAAW,CAACC,IAAoB,OAEnC,kBAAC,OAAD;EAAU;EAAK,cAAYN;EAAO,WAAWjB,EAAG,2BAA2BwB,CAAS;EAApF,UAAA,CACE,kBAACtB,GAAD;GAAY,MAAMJ;GAAwB,cAAYoB;GAAU,SAAQ;GAAY,GAAIN,EAAK,CAACW,GAAaG,CAAU;EAAI,CAAA,GACzH,kBAACxB,GAAD;GAAY,MAAMH;GAAyB,cAAYoB;GAAM,SAAQ;GAAY,GAAIP,EAAK,CAACU,GAASM,CAAM;EAAI,CAAA,CAC3G;;CAGT,IAAMrB,IAAQ,KAAK,IAAI,GAAG,KAAK,MAAMC,CAAS,CAAC,GACzCC,IAAU,KAAK,IAAIF,GAAO,KAAK,IAAI,GAAG,KAAK,MAAMG,CAAI,CAAC,CAAC;CAC7D,OACE,kBAAC,OAAD;EAAU;EAAK,cAAYO;EAAO,WAAWjB,EAAG,2BAA2BwB,CAAS;EAApF,UAAA;GACE,kBAACtB,GAAD;IAAY,MAAMJ;IAAwB,cAAYoB;IAAU,SAAQ;IAAY,GAAIN,EAAKH,KAAW,SAASoB,IAAepB,IAAU,CAAC,CAAC;GAAI,CAAA;GAChJ,kBAAC,QAAD;IAAM,WAAU;IACb,UAAAH,EAAUG,GAASF,CAAK,CAAC,CAAC,KAAK,GAAG,MACjCuB,MAAM,QACJ,kBAAC,QAAD;KAAuB,eAAA;KAAY,WAAU;KAAmF,UAAA;IAE1H,GAFK,OAAOnB,GAEZ,IAEN,kBAAC,UAAD;KAEE,MAAK;KACL,gBAAcmB,MAAMrB,IAAU,SAAS,KAAA;KACvC,cAAYO,EAAE,mBAAmB,eAAe,EAAE,MAAM,OAAOc,CAAC,EAAE,CAAC;KACnE,eAAe;MACb,AAAIA,MAAMpB,KAAMmB,IAAeC,CAAC;KAClC;KACA,WAAW9B,EACT,gLACA8B,MAAMrB,IAAU,sBAAsB,kEACxC;KAEC,UAAAqB;IACK,GAbD,QAAQnB,GAaP,CAEZ;GACI,CAAA;GACN,kBAACT,GAAD;IAAY,MAAMH;IAAyB,cAAYoB;IAAM,SAAQ;IAAY,GAAIP,EAAKH,KAAWF,SAAasB,IAAepB,IAAU,CAAC,CAAC;GAAI,CAAA;EAC9I;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc;AAEpE,IAAMY,IAA2B,kBAG/B,SAA4B,EAAE,UAAO,YAAS,YAAS,eAAY,gBAAa,GAAK;CACrF,IAAML,IAAIf,EAAU,GACd8B,IAAWf,EAAE,uBAAuB,WAAW,GAC/C,CAACgB,GAAQC,KAAaC,EAAS,EAAK,GACpC,CAACC,GAAOC,KAAYF,EAAS,EAAK,GAClCG,IAAUC,EAA6B,IAAI;CAOjD,OANIhB,KAAWa,KAAOC,EAAS,EAAK,GAChC,CAACd,KAAWU,KAAU,CAACG,KAAOC,EAAS,EAAI,GAC/CG,QAAsB;EACpB,AAAIJ,KAAOE,EAAQ,SAAS,MAAM;CACpC,GAAG,CAACF,CAAK,CAAC,GACN,CAACb,KAAW,CAACa,IAAc,OAE7B,kBAAC,OAAD;EACO;EACL,cAAYlB;EACZ,WAAWjB,EAAG,iDAAiDwB,CAAS;EACxE,eAAeS,EAAU,EAAI;EAC7B,SAAS,MAA+B;GACtC,AAAK,EAAE,cAAc,SAAS,EAAE,aAAa,KAAGA,EAAU,EAAK;EACjE;EAEC,UAAAX,IACC,kBAACkB,GAAD;GAAQ,SAAQ;GAAY,MAAK;GAAc;GAAS,SAASC;GAAY,eAAe,CAACV,CAAQ;GAClG,UAAAA;EACK,CAAA,IAER,kBAAC,KAAD;GAAG,KAAKM;GAAS,UAAU;GAAI,WAAU;GACtC,UAAArB,EAAE,uBAAuB,gBAAgB;EACzC,CAAA;CAEF,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
|
|
1
|
+
{"version":3,"file":"pagination-D9hM6W2z.js","names":["__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","cn","useUiText","IconButton","KAESO_PAGINATION_VARIANTS","KAESO_PAGINATION_DEFAULT_VARIANTS","SLOTS","pageSlots","count","pageCount","current","page","i","soft","blocked","run","Pagination","t","label","previous","next","variant","LoadMore","hasMore","hasPrevious","className","ArrowLeft01Icon","onPrevious","ArrowRight01Icon","onNext","onPageChange","p","loadMore","inside","setInside","useState","ended","setEnded","caption","useRef","useLayoutEffect","Button","onLoadMore"],"sources":["../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState, type FocusEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PAGINATION_VARIANTS = {\n variant: {\n \"load-more\": {\n classes: \"\",\n },\n cursor: { classes: \"\" },\n pages: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PAGINATION_DEFAULT_VARIANTS = { variant: \"load-more\" } as const;\n\nexport interface PaginationProps {\n variant?: keyof typeof KAESO_PAGINATION_VARIANTS.variant | undefined;\n hasMore?: boolean | undefined;\n hasPrevious?: boolean | undefined;\n loading?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n onNext?: (() => void) | undefined;\n onPrevious?: (() => void) | undefined;\n page?: number | undefined;\n pageCount?: number | undefined;\n onPageChange?: ((page: number) => void) | undefined;\n className?: string | undefined;\n}\n\nconst SLOTS = 7;\n\nfunction pageSlots(page: number, pageCount: number): (number | \"gap\")[] {\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n if (count <= SLOTS) return Array.from({ length: count }, (_, i) => i + 1);\n if (current <= 4) return [1, 2, 3, 4, 5, \"gap\", count];\n if (current >= count - 3) return [1, \"gap\", count - 4, count - 3, count - 2, count - 1, count];\n return [1, \"gap\", current - 1, current, current + 1, \"gap\", count];\n}\n\nfunction soft(blocked: boolean, run: (() => void) | undefined) {\n return {\n ...(blocked ? { \"aria-disabled\": true } : {}),\n onClick: () => {\n if (!blocked) run?.();\n },\n };\n}\n\nexport const Pagination = /* @__PURE__ */ forwardRef<HTMLElement, PaginationProps>(function Pagination(\n { variant = \"load-more\", hasMore, hasPrevious, loading, onLoadMore, onNext, onPrevious, page = 1, pageCount = 1, onPageChange, className },\n ref,\n) {\n const t = useUiText();\n const label = t(\"pagination.label\", \"Pagination\");\n const previous = t(\"pagination.previous\", \"Previous page\");\n const next = t(\"pagination.next\", \"Next page\");\n\n if (variant === \"load-more\") {\n return <LoadMore ref={ref} label={label} hasMore={!!hasMore} loading={loading} onLoadMore={onLoadMore} className={className} />;\n }\n if (variant === \"cursor\") {\n if (!hasMore && !hasPrevious) return null;\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-8\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(!hasPrevious, onPrevious)} />\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(!hasMore, onNext)} />\n </nav>\n );\n }\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-4\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(current <= 1, () => onPageChange?.(current - 1))} />\n <span className=\"flex items-center gap-4 px-4\">\n {pageSlots(current, count).map((p, i) =>\n p === \"gap\" ? (\n <span key={`gap-${i}`} aria-hidden className=\"inline-flex h-32 min-w-40 items-center justify-center text-body text-fg-tertiary\">\n …\n </span>\n ) : (\n <button\n key={`slot-${i}`}\n type=\"button\"\n aria-current={p === current ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {page}\", { page: String(p) })}\n onClick={() => {\n if (p !== page) onPageChange?.(p);\n }}\n className={cn(\n \"relative inline-flex h-32 min-w-40 cursor-pointer items-center justify-center rounded-pill px-8 text-body font-medium tabular transition-control tap-target focus-ring-inset\",\n p === current ? \"bg-fill-2 text-fg\" : \"text-fg-secondary hover:bg-fill-1 hover:text-fg active:bg-fill-2\",\n )}\n >\n {p}\n </button>\n ),\n )}\n </span>\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(current >= count, () => onPageChange?.(current + 1))} />\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Pagination.displayName = \"Pagination\";\n\nconst LoadMore = /* @__PURE__ */ forwardRef<\n HTMLElement,\n { label: string; hasMore: boolean; loading: boolean | undefined; onLoadMore: (() => void) | undefined; className: string | undefined }\n>(function PaginationLoadMore({ label, hasMore, loading, onLoadMore, className }, ref) {\n const t = useUiText();\n const loadMore = t(\"pagination.loadMore\", \"Load more\");\n const [inside, setInside] = useState(false);\n const [ended, setEnded] = useState(false);\n const caption = useRef<HTMLParagraphElement>(null);\n if (hasMore && ended) setEnded(false);\n if (!hasMore && inside && !ended) setEnded(true);\n useLayoutEffect(() => {\n if (ended) caption.current?.focus();\n }, [ended]);\n if (!hasMore && !ended) return null;\n return (\n <nav\n ref={ref}\n aria-label={label}\n className={cn(\"flex items-center justify-center gap-12 py-12\", className)}\n onFocus={() => setInside(true)}\n onBlur={(e: FocusEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget)) setInside(false);\n }}\n >\n {hasMore ? (\n <Button variant=\"secondary\" size=\"sm\" loading={loading} onClick={onLoadMore} reserveLabels={[loadMore]}>\n {loadMore}\n </Button>\n ) : (\n <p ref={caption} tabIndex={-1} className=\"flex h-32 items-center text-small text-fg-secondary outline-none\">\n {t(\"pagination.allShown\", \"All rows shown\")}\n </p>\n )}\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LoadMore.displayName = \"Pagination.LoadMore\";\n"],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ import { n as t, r as n } from "./portal-context-CTatR2Z8.js";
|
|
|
4
4
|
import { i as r } from "./context-BELWW79w.js";
|
|
5
5
|
import { t as i } from "./icon-CBzOwqrX.js";
|
|
6
6
|
import { d as a, f as o, p as s } from "./tooltip-Tkm-urbi.js";
|
|
7
|
-
import { t as c } from "./icon-button-
|
|
8
|
-
import { n as l } from "./select-
|
|
9
|
-
import { n as u } from "./command-list-
|
|
7
|
+
import { t as c } from "./icon-button-6kOn2zrP.js";
|
|
8
|
+
import { n as l } from "./select-UTdHKubp.js";
|
|
9
|
+
import { n as u } from "./command-list-BUmEaaBi.js";
|
|
10
10
|
import { forwardRef as d, useState as f, useSyncExternalStore as p } from "react";
|
|
11
11
|
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
12
12
|
import { ArrowDown01Icon as _, Cancel01Icon as v } from "@hugeicons/core-free-icons";
|
|
@@ -116,4 +116,4 @@ process.env.NODE_ENV !== "production" && (D.displayName = "PickerTrigger");
|
|
|
116
116
|
//#endregion
|
|
117
117
|
export { D as i, x as n, E as r, S as t };
|
|
118
118
|
|
|
119
|
-
//# sourceMappingURL=picker-popover-
|
|
119
|
+
//# sourceMappingURL=picker-popover-PzVOo62-.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-popover-1FHb1LQG.js","names":["BaseDialog","__icon_Cancel01Icon","BasePopover","_Fragment","__icon_ArrowDown01Icon","cn","pageBoundary","usePortalContainer","useUiText","Icon","joinIds","showsText","useHiddenDescription","IconButton","KAESO_SELECT_VARIANTS","CommandListHeightContext","Fragment$1","KAESO_PICKER_POPOVER_VARIANTS","KAESO_PICKER_POPOVER_DEFAULT_VARIANTS","NARROW","subscribeNarrow","q","onChange","isNarrow","PickerPopover","t","container","narrow","useSyncExternalStore","change","onOpenChange","o","state","open","Dialog","trigger","title","Cancel01Icon","Popover","width","PickerTrigger","ariaLabel","describedBy","props","focused","setFocused","useState","held","disabled","empty","children","shows","placeholder","purpose","descriptions","onFocus","onBlur","onClickCapture","invalid","size","appearance","fullWidth","className","ArrowDown01Icon"],"sources":["../../src/components/command-list/picker-popover.tsx"],"sourcesContent":["import { forwardRef, useState, useSyncExternalStore, type ButtonHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowDown01Icon as __icon_ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { KAESO_SELECT_VARIANTS } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { joinIds, showsText, useHiddenDescription } from \"../../utils/hidden-description.js\";\nimport { CommandListHeightContext } from \"./command-list.js\";\n\nexport const KAESO_PICKER_POPOVER_VARIANTS = {\n width: {\n sm: { classes: \"w-320\" },\n md: { classes: \"w-400\" },\n lg: { classes: \"w-560\" },\n },\n} as const;\nexport const KAESO_PICKER_POPOVER_DEFAULT_VARIANTS = { width: \"md\" } as const;\n\nconst NARROW = \"(max-width: 767px)\";\nconst 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;\n\nexport interface PickerPopoverProps {\n trigger: ReactElement;\n title: string;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n width?: keyof typeof KAESO_PICKER_POPOVER_VARIANTS.width | undefined;\n align?: \"start\" | \"end\" | undefined;\n children: ReactNode;\n}\n\nexport const PickerPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, PickerPopoverProps>(function PickerPopover(\n { trigger, title, open, onOpenChange, width = \"md\", align = \"start\", children },\n ref,\n) {\n const t = useUiText();\n const container = usePortalContainer();\n const narrow = useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n const change = onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {};\n const state = open !== undefined ? { open } : {};\n if (narrow)\n return (\n <BaseDialog.Root {...state} {...change}>\n <BaseDialog.Trigger render={trigger} />\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className=\"fixed inset-0 z-50 bg-overlay opacity-50 backdrop-motion\" />\n <BaseDialog.Popup\n ref={ref}\n data-side=\"bottom\"\n className=\"fixed inset-safe-8 z-50 flex flex-col overflow-hidden rounded-sheet bg-raised text-fg shadow-dialog outline-none sheet-motion\"\n >\n <div className=\"flex min-h-60 shrink-0 items-center gap-12 px-24 py-12 hairline-b\">\n <BaseDialog.Title className=\"min-w-0 flex-1 text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</BaseDialog.Title>\n <BaseDialog.Close render={<IconButton icon={__icon_Cancel01Icon} aria-label={t(\"pickerPopover.close\", \"Close\")} tooltip={false} />} />\n </div>\n <CommandListHeightContext.Provider value=\"fill\">{children}</CommandListHeightContext.Provider>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n return (\n <BasePopover.Root {...state} {...change} modal={false}>\n <BasePopover.Trigger render={trigger} />\n <BasePopover.Portal container={container}>\n <BasePopover.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side=\"bottom\"\n align={align}\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BasePopover.Popup\n ref={ref}\n aria-label={title}\n className={cn(\n \"flex max-w-full-bleed-4 flex-col overflow-hidden rounded-popover bg-raised text-fg shadow-raised outline-none popup-motion\",\n KAESO_PICKER_POPOVER_VARIANTS.width[width].classes,\n )}\n >\n <CommandListHeightContext.Provider value=\"popover\">{children}</CommandListHeightContext.Provider>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerPopover.displayName = \"PickerPopover\";\n\nexport interface PickerTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n fullWidth?: boolean | undefined;\n invalid?: boolean | undefined;\n placeholder?: ReactNode | undefined;\n children?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const PickerTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, PickerTriggerProps>(function PickerTrigger(\n {\n appearance = \"default\",\n size = \"md\",\n fullWidth,\n invalid,\n placeholder,\n children,\n className,\n type = \"button\",\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n disabled,\n onFocus,\n onBlur,\n onClickCapture,\n ...props\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n // A natively disabled button that holds focus drops it to <body>; stay focusable until it blurs.\n const held = !!disabled && focused;\n const empty = children === undefined || children === null || children === false;\n const shows = showsText(empty ? placeholder : children);\n const purpose = useHiddenDescription(shows ? ariaLabel : undefined);\n const descriptions = joinIds(purpose.id, describedBy);\n return (\n <>\n <button\n ref={ref}\n type={type}\n data-picker=\"\"\n {...props}\n {...(held ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : { disabled })}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n onClickCapture={(e) => {\n if (held) {\n e.preventDefault();\n e.stopPropagation();\n }\n onClickCapture?.(e);\n }}\n {...(!shows && ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(descriptions ? { \"aria-describedby\": descriptions } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n className={cn(\n \"group/picker 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 && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n className,\n )}\n >\n <span\n className={cn(\n \"flex min-w-0 flex-1 items-center truncate text-left group-disabled/picker:opacity-40\",\n empty ? \"font-regular text-fg-tertiary\" : \"group-disabled/picker:text-fg\",\n )}\n >\n {empty ? placeholder : children}\n </span>\n <span className=\"flex shrink-0 text-fg-tertiary group-disabled/picker:opacity-40\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerTrigger.displayName = \"PickerTrigger\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker-popover-PzVOo62-.js","names":["BaseDialog","__icon_Cancel01Icon","BasePopover","_Fragment","__icon_ArrowDown01Icon","cn","pageBoundary","usePortalContainer","useUiText","Icon","joinIds","showsText","useHiddenDescription","IconButton","KAESO_SELECT_VARIANTS","CommandListHeightContext","Fragment$1","KAESO_PICKER_POPOVER_VARIANTS","KAESO_PICKER_POPOVER_DEFAULT_VARIANTS","NARROW","subscribeNarrow","q","onChange","isNarrow","PickerPopover","t","container","narrow","useSyncExternalStore","change","onOpenChange","o","state","open","Dialog","trigger","title","Cancel01Icon","Popover","width","PickerTrigger","ariaLabel","describedBy","props","focused","setFocused","useState","held","disabled","empty","children","shows","placeholder","purpose","descriptions","onFocus","onBlur","onClickCapture","invalid","size","appearance","fullWidth","className","ArrowDown01Icon"],"sources":["../../src/components/command-list/picker-popover.tsx"],"sourcesContent":["import { forwardRef, useState, useSyncExternalStore, type ButtonHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowDown01Icon as __icon_ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { KAESO_SELECT_VARIANTS } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { joinIds, showsText, useHiddenDescription } from \"../../utils/hidden-description.js\";\nimport { CommandListHeightContext } from \"./command-list.js\";\n\nexport const KAESO_PICKER_POPOVER_VARIANTS = {\n width: {\n sm: { classes: \"w-320\" },\n md: { classes: \"w-400\" },\n lg: { classes: \"w-560\" },\n },\n} as const;\nexport const KAESO_PICKER_POPOVER_DEFAULT_VARIANTS = { width: \"md\" } as const;\n\nconst NARROW = \"(max-width: 767px)\";\nconst 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;\n\nexport interface PickerPopoverProps {\n trigger: ReactElement;\n title: string;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n width?: keyof typeof KAESO_PICKER_POPOVER_VARIANTS.width | undefined;\n align?: \"start\" | \"end\" | undefined;\n children: ReactNode;\n}\n\nexport const PickerPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, PickerPopoverProps>(function PickerPopover(\n { trigger, title, open, onOpenChange, width = \"md\", align = \"start\", children },\n ref,\n) {\n const t = useUiText();\n const container = usePortalContainer();\n const narrow = useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n const change = onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {};\n const state = open !== undefined ? { open } : {};\n if (narrow)\n return (\n <BaseDialog.Root {...state} {...change}>\n <BaseDialog.Trigger render={trigger} />\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className=\"fixed inset-0 z-50 bg-overlay opacity-50 backdrop-motion\" />\n <BaseDialog.Popup\n ref={ref}\n data-side=\"bottom\"\n className=\"fixed inset-safe-8 z-50 flex flex-col overflow-hidden rounded-sheet bg-raised text-fg shadow-dialog outline-none sheet-motion\"\n >\n <div className=\"flex min-h-60 shrink-0 items-center gap-12 px-24 py-12 hairline-b\">\n <BaseDialog.Title className=\"min-w-0 flex-1 text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</BaseDialog.Title>\n <BaseDialog.Close render={<IconButton icon={__icon_Cancel01Icon} aria-label={t(\"pickerPopover.close\", \"Close\")} tooltip={false} />} />\n </div>\n <CommandListHeightContext.Provider value=\"fill\">{children}</CommandListHeightContext.Provider>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n return (\n <BasePopover.Root {...state} {...change} modal={false}>\n <BasePopover.Trigger render={trigger} />\n <BasePopover.Portal container={container}>\n <BasePopover.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side=\"bottom\"\n align={align}\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BasePopover.Popup\n ref={ref}\n aria-label={title}\n className={cn(\n \"flex max-w-full-bleed-4 flex-col overflow-hidden rounded-popover bg-raised text-fg shadow-raised outline-none popup-motion\",\n KAESO_PICKER_POPOVER_VARIANTS.width[width].classes,\n )}\n >\n <CommandListHeightContext.Provider value=\"popover\">{children}</CommandListHeightContext.Provider>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerPopover.displayName = \"PickerPopover\";\n\nexport interface PickerTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n fullWidth?: boolean | undefined;\n invalid?: boolean | undefined;\n placeholder?: ReactNode | undefined;\n children?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const PickerTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, PickerTriggerProps>(function PickerTrigger(\n {\n appearance = \"default\",\n size = \"md\",\n fullWidth,\n invalid,\n placeholder,\n children,\n className,\n type = \"button\",\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n disabled,\n onFocus,\n onBlur,\n onClickCapture,\n ...props\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n // A natively disabled button that holds focus drops it to <body>; stay focusable until it blurs.\n const held = !!disabled && focused;\n const empty = children === undefined || children === null || children === false;\n const shows = showsText(empty ? placeholder : children);\n const purpose = useHiddenDescription(shows ? ariaLabel : undefined);\n const descriptions = joinIds(purpose.id, describedBy);\n return (\n <>\n <button\n ref={ref}\n type={type}\n data-picker=\"\"\n {...props}\n {...(held ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : { disabled })}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n onClickCapture={(e) => {\n if (held) {\n e.preventDefault();\n e.stopPropagation();\n }\n onClickCapture?.(e);\n }}\n {...(!shows && ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(descriptions ? { \"aria-describedby\": descriptions } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n className={cn(\n \"group/picker 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 && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n className,\n )}\n >\n <span\n className={cn(\n \"flex min-w-0 flex-1 items-center truncate text-left group-disabled/picker:opacity-40\",\n empty ? \"font-regular text-fg-tertiary\" : \"group-disabled/picker:text-fg\",\n )}\n >\n {empty ? placeholder : children}\n </span>\n <span className=\"flex shrink-0 text-fg-tertiary group-disabled/picker:opacity-40\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerTrigger.displayName = \"PickerTrigger\";\n"],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { t as e } from "./cn-BjnOAUrA.js";
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
4
|
import { t as n } from "./icon-CBzOwqrX.js";
|
|
5
|
-
import { n as r } from "./button-
|
|
5
|
+
import { n as r } from "./button-DrmFgdIi.js";
|
|
6
6
|
import { i } from "./popover-Bl5QYqnh.js";
|
|
7
7
|
import { t as a } from "./calendar-Dc6_dl0f.js";
|
|
8
|
-
import { n as o, r as s, t as c } from "./iso-field-
|
|
8
|
+
import { n as o, r as s, t as c } from "./iso-field-BVOKAY4H.js";
|
|
9
9
|
import { useId as l, useRef as u, useState as d, useSyncExternalStore as f } from "react";
|
|
10
10
|
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
11
11
|
import { Tick02Icon as h } from "@hugeicons/core-free-icons";
|
|
@@ -157,4 +157,4 @@ function w({ range: f, preset: _, presets: v, onPick: y, onClose: w, weekStartsO
|
|
|
157
157
|
//#endregion
|
|
158
158
|
export { w as RangePopup };
|
|
159
159
|
|
|
160
|
-
//# sourceMappingURL=range-popup-
|
|
160
|
+
//# sourceMappingURL=range-popup-Dt6Q0Ryw.js.map
|
|
@@ -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":";;;;;;;;;;;;AAYA,SAASS,EAAiB,GAAkC,GAAiB;CAC3E,IAAMC,IAAU,CAAC,GAAG,EAAE,cAAc,iBAA8B,eAAe,CAAC,GAC5EC,IAAKD,EAAQ,QAAQ,SAAS,aAA4B;CAChE,IAAIC,IAAK,GAAG;CACZ,IAAMC,IAA+B;EAAE,WAAWC;EAAS,SAAS,CAACA;EAAS,GAAIA,IAAU,IAAI;GAAE,YAAY;GAAG,WAAW;EAAG,IAAI,CAAC;CAAG,GACjIC,IAAK,EAAE,QAAQ,SAAS,IAAI,EAAE,QAAQ,QAAQJ,EAAQ,SAAS,IAAIE,EAAK,EAAE,SAAS,KAAA,IAAgC,OAApBD,IAAKC,EAAK,EAAE;CACjH,AAAIE,MAAO,SACX,EAAE,eAAe,GACjBJ,EAAQ,KAAK,IAAI,GAAG,KAAK,IAAIA,EAAQ,SAAS,GAAGI,CAAE,CAAC,EAAE,EAAE,MAAM;AAChE;AAYA,IAAMC,IAAS;AACf,SAASC,EAAgB,GAAsB;CAC7C,IAAI,OAAO,SAAW,OAAe,CAAC,OAAO,YAAY,aAAa,CAAC;CACvE,IAAMC,IAAI,OAAO,WAAWF,CAAM;CAElC,OADAE,EAAE,iBAAiB,UAAUC,CAAQ,SACxBD,EAAE,oBAAoB,UAAUC,CAAQ;AACvD;AACA,IAAMC,UAAiB,OAAO,SAAW,OAAe,CAAC,CAAC,OAAO,aAAaJ,CAAM,CAAC,CAAC,SAChFK,UAAgB,CAACC,EAAqBL,GAAiBG,SAAgB,EAAK,GAE5EG,KAAW,MAAY,IAAI,KAAKC,EAAE,YAAY,GAAGA,EAAE,SAAS,GAAG,CAAC,GAChEC,KAAa,GAAS,MAAc,IAAI,KAAKD,EAAE,YAAY,GAAGA,EAAE,SAAS,IAAIE,GAAG,CAAC,GACjFC,KAAW,GAAqB,MAAwBC,GAAG,aAAa,MAAMC,GAAG,aAAa;AAEpG,SAAgBC,EAAW,EAAE,UAAO,WAAQ,YAAS,WAAQ,YAAS,iBAAc,mBAAiC;CACnH,IAAMC,IAAOV,EAAQ,GACfW,IAAI7B,EAAU,GACd8B,IAASF,IAAO,IAAI,GACpB,CAACG,GAAOC,KAAYC,EAAgCC,KAAS,KAAA,CAAS,GACtE,CAACC,GAAQC,KAAaH,EAASI,MAAW,IAAI,GAC9C,CAACC,GAAMC,KAAWN,QAAeb,EAAQc,GAAO,MAAMA,GAAO,wBAAQ,IAAI,KAAK,CAAC,CAAC,GAChFM,IAAUC,EAAM,GAChB,CAACC,GAASC,KAAcV,EAA+D,IAAI,GAC3FW,IAASC,EAA8B,IAAI,GAC3CC,IAAQxB,EAAUgB,GAAM,IAAIR,CAAM,GAClCiB,KAAS,MAAY1B,KAAKyB,KAAS1B,EAAQC,CAAC,KAAKiB,GACjDU,IAAWb,IAAS,OAAOE,GAC3BY,KAAQ,MAAgC;EAG5C,AAFAjB,EAASkB,CAAI,GACTA,GAAM,QAAMP,GAAY,MAASQ,GAAK,YAAY,YAAY,OAAOA,CAAI,GAC7Ef,EAAU,EAAI;CAChB,GACMgB,KAAS,GAAsB,MAAY;EAC/C,IAAIC,IAAehC,CAAC,GAAG,OAAO;EAC9B,IAAMiC,IAAQC,MAAU,SAASxB,GAAO,KAAKA,GAAO;EAIpD,OAFAkB,EADaM,MAAU,SAAS;GAAE,MAAMlC;GAAG,IAAIiC,KAASA,IAAQjC,IAAIA,IAAIiC;EAAM,IAAI;GAAE,MAAMA,KAASA,IAAQjC,IAAIA,IAAIiC;GAAO,IAAIjC;EAAE,CACvH,GACJ0B,EAAM1B,CAAC,KAAGkB,EAAQgB,MAAU,QAAQzB,MAAW,IAAIV,EAAQC,CAAC,IAAIC,EAAUF,EAAQC,CAAC,GAAGS,IAAS,CAAC,CAAC,GAC/F;CACT,GACM0B,IAAYhC,EAAQO,GAAO,MAAMG,GAAO,IAAI,KAAKV,EAAQO,GAAO,MAAMA,GAAO,MAAMG,GAAO,EAAE,GAC5FuB,IAAO1D,EACX,qLACA,+DACA6B,KAAQ,iBACV,GACM8B,KAAS,MAAgB,kBAACzD,GAAD;EAAM,MAAMH;EAAmB,MAAK;EAAK,WAAWC,EAAG,oBAAoB,CAAC6D,KAAM,WAAW;CAAI,CAAA,GAC1HC,KAAa,MAA0BnB,GAAS,UAAUoB,IAAQpB,EAAQ,UAAU,MACpFqB,KAAU,OAA0B,MAAkBpB,EAAWqB,IAAI;EAAE;EAAO,SAASA;CAAE,IAAItB,GAAS,UAAUoB,IAAQ,OAAOpB,CAAO;CAE5I,OACE,kBAACuB,EAAQ,SAAT;EAAiB,SAAQ;EAAO,cAAYpC,EAAE,0BAA0B,qBAAqB;EAAG,WAAW9B,EAAG,CAAC6B,KAAQ,iCAAiC;EACtJ,UAAA,kBAAC,OAAD;GAAK,WAAW7B,EAAG,QAAQ,CAAC6B,KAAQ,UAAU;GAA9C,UAAA,CACE,kBAAC,OAAD;IACE,WAAW7B,EAAG,sBAAsB6B,IAAO,uCAAuC,6BAA6B;IAC/G,MAAK;IACL,cAAYC,EAAE,sBAAsB,SAAS;IAC7C,oBAAkBD,IAAO,aAAa,KAAA;IACtC,YAAY,MAAMrB,EAAiB,GAAGqB,IAAO,IAAI,CAAC;IALpD,UAAA,CAOGsC,EAAQ,KAAK,MAAM;KAClB,IAAMC,IAAKH,EAAE,MAAMA,EAAE;KACrB,OACE,kBAAC,UAAD;MAEE,MAAK;MACL,MAAK;MACL,iBAAehB,MAAamB;MAC5B,UAAUnB,MAAamB,IAAK,IAAI;MAChC,WAAWV;MACX,eAAeW,EAAOJ,EAAE,MAAM,GAAGG,CAAE;MAPrC,UAAA,CASE,kBAAC,QAAD;OAAM,WAAU;OAAW,UAAAH,EAAE;MAAY,CAAA,GACxCN,EAAMV,MAAamB,CAAE,CAChB;KAVD,GAAAA,CAUC;IAEZ,CAAC,GACD,kBAAC,UAAD;KACE,MAAK;KACL,MAAK;KACL,iBAAenB,MAAa;KAC5B,UAAUA,MAAa,QAAQ,CAACkB,EAAQ,MAAM,OAAOF,EAAE,MAAMA,EAAE,WAAWhB,CAAQ,IAAI,IAAI;KAC1F,WAAWS;KACX,eAAerB,EAAU,EAAI;KAN/B,UAAA,CAQE,kBAAC,QAAD;MAAM,WAAU;MAAW,UAAAP,EAAE,qBAAqB,QAAQ;KAAQ,CAAA,GACjE6B,EAAMV,MAAa,IAAI,CAClB;IACL,CAAA,CAAA;GACL,CAAA,GAAA,kBAAC,OAAD;IAAK,WAAWjD,EAAG,sBAAsB,CAAC6B,KAAQ,cAAc;IAAhE,UAAA;KACE,kBAACzB,GAAD;MACE,MAAK;MACL,gBAAgB2B;MAChB,UAAUC;MACV,OAAOe;MACP,gBAAgB,MAAMP,EAAQjB,EAAU+C,GAAGvC,IAAS,CAAC,CAAC;MACtD,WAAW,MAAMmB,EAAKqB,CAA0B;MAClC;MACd,UAAUjB;KACX,CAAA;KACD,kBAAC,OAAD;MAAK,KAAKT;MAAQ,WAAU;MAA5B,UAAA;OACE,kBAACxC,GAAD;QACE,OAAOyB,EAAE,wBAAwB,YAAY;QAC7C,OAAOE,GAAO;QACd,SAAS8B,EAAU,MAAM,MAAM;QACtB;QACT,WAAWE,EAAO,MAAM;QACxB,WAAW,MAAMX,EAAM,QAAQ/B,CAAC;OACjC,CAAA;OACD,kBAAC,QAAD;QAAM,WAAU;QAAmB,eAAA;QAAY,UAAA;OAEzC,CAAA;OACN,kBAACjB,GAAD;QACE,OAAOyB,EAAE,sBAAsB,UAAU;QACzC,OAAOE,GAAO;QACd,SAAS8B,EAAU,IAAI,MAAM;QACpB;QACT,WAAWE,EAAO,IAAI;QACtB,WAAW,MAAMX,EAAM,MAAM/B,CAAC;OAC/B,CAAA;OACD,kBAACnB,GAAD;QACE,MAAK;QACL,SAAQ;QACR,eAAe;SACb,AAAK6B,GAAO,OAKRyB,KAAa,CAACrB,IAAQoC,EAAQ,IAC7BH,EAAO;UAAE,MAAMrC,EAAM;UAAM,IAAIA,EAAM,MAAMA,EAAM;SAAK,GAAG,IAAI,KALhEY,EAAW;UAAE,OAAO;UAAQ,SAAS;SAAU,CAAC,GAChDC,EAAO,SAAS,cAAc,OAAO,CAAC,EAAE,MAAM;QAKlD;QAEC,UAAAf,EAAE,oBAAoB,OAAO;OACxB,CAAA;MACL;;KACL,kBAAC,KAAD;MAAG,IAAIW;MAAS,MAAK;MAAQ,WAAWzC,EAAGO,GAAa,gBAAgB;MACrE,UAAAoC,IAAUrC,EAAewB,GAAGa,EAAQ,OAAO,IAAI;KAC/C,CAAA;IACA;GACF,CAAA,CAAA;;CACU,CAAA;AAErB"}
|
|
@@ -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
|