@logicplanes/kaeso-ui 0.4.2 → 0.4.3
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 +283 -21
- package/ai/component-registry.json +528 -25
- package/ai/component-registry.md +135 -25
- package/ai/icons.md +3 -3
- package/ai/tokens.md +1 -1
- package/dist/blocks/delete-resource.js +15 -14
- package/dist/blocks/delete-resource.js.map +1 -1
- package/dist/blocks/pages.js +2 -2
- package/dist/blocks/resource-list.js +41 -40
- package/dist/blocks/resource-list.js.map +1 -1
- package/dist/chunks/agent-avatar-0pdBTWkR.js +171 -0
- package/dist/chunks/agent-avatar-0pdBTWkR.js.map +1 -0
- package/dist/chunks/{app-frame-C8csevkL.js → app-frame-DogGRmsu.js} +22 -21
- package/dist/chunks/app-frame-DogGRmsu.js.map +1 -0
- package/dist/chunks/{banner-Cb8OWnqJ.js → banner-BA2ALw9M.js} +2 -2
- package/dist/chunks/{banner-Cb8OWnqJ.js.map → banner-BA2ALw9M.js.map} +1 -1
- package/dist/chunks/{button-Dzu7_csE.js → button-CzuxqawA.js} +3 -3
- package/dist/chunks/{button-Dzu7_csE.js.map → button-CzuxqawA.js.map} +1 -1
- package/dist/chunks/{calendar--YemJsv4.js → calendar-BWaf2MXc.js} +57 -41
- package/dist/chunks/calendar-BWaf2MXc.js.map +1 -0
- package/dist/chunks/{checkbox-CDfC6E-M.js → checkbox-CQjwCPkc.js} +11 -9
- package/dist/chunks/checkbox-CQjwCPkc.js.map +1 -0
- package/dist/chunks/{code-block-U5fCqwgC.js → code-block-D5A-CGXG.js} +2 -2
- package/dist/chunks/{code-block-U5fCqwgC.js.map → code-block-D5A-CGXG.js.map} +1 -1
- package/dist/chunks/combobox-DjDI7SUC.js +319 -0
- package/dist/chunks/combobox-DjDI7SUC.js.map +1 -0
- package/dist/chunks/{command-list-0RR4DpUe.js → command-list-C2Y7V_lt.js} +2 -2
- package/dist/chunks/{command-list-0RR4DpUe.js.map → command-list-C2Y7V_lt.js.map} +1 -1
- package/dist/chunks/{copy-button-7-irieJw.js → copy-button-FJvPJn72.js} +3 -3
- package/dist/chunks/{copy-button-7-irieJw.js.map → copy-button-FJvPJn72.js.map} +1 -1
- package/dist/chunks/{core-Bl9NrBLS.js → core-BYns5ytV.js} +145 -139
- package/dist/chunks/core-BYns5ytV.js.map +1 -0
- package/dist/chunks/{date-popup-RQkqhko4.js → date-popup-CPA_zt6o.js} +4 -4
- package/dist/chunks/{date-popup-RQkqhko4.js.map → date-popup-CPA_zt6o.js.map} +1 -1
- package/dist/chunks/{de-BnNQtBSV.js → de-CPXJh9cq.js} +3 -1
- package/dist/chunks/de-CPXJh9cq.js.map +1 -0
- package/dist/chunks/dialog-Cg9A_6SF.js +383 -0
- package/dist/chunks/dialog-Cg9A_6SF.js.map +1 -0
- package/dist/chunks/icon-DVooQfk4.js +94 -0
- package/dist/chunks/icon-DVooQfk4.js.map +1 -0
- package/dist/chunks/{icon-button-CPYR21Sz.js → icon-button-CrdF_eMG.js} +3 -3
- package/dist/chunks/{icon-button-CPYR21Sz.js.map → icon-button-CrdF_eMG.js.map} +1 -1
- package/dist/chunks/{identity-DPuTkMsa.js → identity-BmhQ6BQ-.js} +15 -15
- package/dist/chunks/identity-BmhQ6BQ-.js.map +1 -0
- package/dist/chunks/{input-TyLIaQ5k.js → input-2VJuj_M4.js} +10 -5
- package/dist/chunks/input-2VJuj_M4.js.map +1 -0
- package/dist/chunks/{input-group-CUSNsQjQ.js → input-group-DQ_4DoXg.js} +2 -2
- package/dist/chunks/{input-group-CUSNsQjQ.js.map → input-group-DQ_4DoXg.js.map} +1 -1
- package/dist/chunks/{inset-BnBj8NJV.js → inset-BUzyXLK4.js} +14 -4
- package/dist/chunks/inset-BUzyXLK4.js.map +1 -0
- package/dist/chunks/{iso-field-CWbxlll-.js → iso-field-B2rTwiBo.js} +2 -2
- package/dist/chunks/{iso-field-CWbxlll-.js.map → iso-field-B2rTwiBo.js.map} +1 -1
- package/dist/chunks/{link-B2I55xg9.js → link-KWI7PevW.js} +2 -2
- package/dist/chunks/{link-B2I55xg9.js.map → link-KWI7PevW.js.map} +1 -1
- package/dist/chunks/link-provider-cvl8lSTT.js +29 -0
- package/dist/chunks/link-provider-cvl8lSTT.js.map +1 -0
- package/dist/chunks/{list-CkOozrVY.js → list-M1csq-d4.js} +18 -16
- package/dist/chunks/{list-CkOozrVY.js.map → list-M1csq-d4.js.map} +1 -1
- package/dist/chunks/{markdown-BEgwZFlu.js → markdown-DULktoTK.js} +5 -5
- package/dist/chunks/{markdown-BEgwZFlu.js.map → markdown-DULktoTK.js.map} +1 -1
- package/dist/chunks/{menu-fl_QQb38.js → menu-DEmBfdPm.js} +29 -26
- package/dist/chunks/menu-DEmBfdPm.js.map +1 -0
- package/dist/chunks/nav-sheet-CzgIwgAm.js +60 -0
- package/dist/chunks/nav-sheet-CzgIwgAm.js.map +1 -0
- package/dist/chunks/{page-header-DjUMDG69.js → page-header-DL2y2iZp.js} +2 -2
- package/dist/chunks/{page-header-DjUMDG69.js.map → page-header-DL2y2iZp.js.map} +1 -1
- package/dist/chunks/{pagination-BaY8jdli.js → pagination-Cn_qF4cg.js} +3 -3
- package/dist/chunks/{pagination-BaY8jdli.js.map → pagination-Cn_qF4cg.js.map} +1 -1
- package/dist/chunks/{picker-popover-DShea4b8.js → picker-popover-BxyU1U9F.js} +14 -13
- package/dist/chunks/{picker-popover-DShea4b8.js.map → picker-popover-BxyU1U9F.js.map} +1 -1
- package/dist/chunks/{popover-CFMwaeIP.js → popover-DNN4S47w.js} +2 -2
- package/dist/chunks/{popover-CFMwaeIP.js.map → popover-DNN4S47w.js.map} +1 -1
- package/dist/chunks/portal-context-BBbzDKmY.js.map +1 -1
- package/dist/chunks/{radio-Yl0nO-Sj.js → radio-CDDFpdtL.js} +4 -4
- package/dist/chunks/{radio-Yl0nO-Sj.js.map → radio-CDDFpdtL.js.map} +1 -1
- package/dist/chunks/{range-popup-CkhsK3wI.js → range-popup-CRyWYUB1.js} +5 -5
- package/dist/chunks/{range-popup-CkhsK3wI.js.map → range-popup-CRyWYUB1.js.map} +1 -1
- package/dist/chunks/{rights-BlQx9C_j.js → rights-Cyp0Pzp-.js} +5 -5
- package/dist/chunks/{rights-BlQx9C_j.js.map → rights-Cyp0Pzp-.js.map} +1 -1
- package/dist/chunks/{segmented-C97zvDR1.js → segmented-CErcoxwi.js} +2 -2
- package/dist/chunks/{segmented-C97zvDR1.js.map → segmented-CErcoxwi.js.map} +1 -1
- package/dist/chunks/{sidebar-DtFlejU7.js → sidebar-3r1ZRXlN.js} +253 -235
- package/dist/chunks/sidebar-3r1ZRXlN.js.map +1 -0
- package/dist/chunks/{sidebar-menu-CxQbGwyj.js → sidebar-menu-BN3jkTlK.js} +2 -2
- package/dist/chunks/{sidebar-menu-CxQbGwyj.js.map → sidebar-menu-BN3jkTlK.js.map} +1 -1
- package/dist/chunks/{switch-b-VkStWj.js → switch-BNMq_kGt.js} +2 -2
- package/dist/chunks/{switch-b-VkStWj.js.map → switch-BNMq_kGt.js.map} +1 -1
- package/dist/chunks/{tag-DNdX1XRR.js → tag-D_M1s2qS.js} +2 -2
- package/dist/chunks/{tag-DNdX1XRR.js.map → tag-D_M1s2qS.js.map} +1 -1
- package/dist/chunks/{text-DCGGNqTM.js → text-CIXH8rmT.js} +2 -2
- package/dist/chunks/{text-DCGGNqTM.js.map → text-CIXH8rmT.js.map} +1 -1
- package/dist/chunks/{textarea-CT2S2JVM.js → textarea--4FRL3Pb.js} +3 -3
- package/dist/chunks/{textarea-CT2S2JVM.js.map → textarea--4FRL3Pb.js.map} +1 -1
- package/dist/chunks/theme-provider-DJhORMlc.js.map +1 -1
- package/dist/chunks/{timeseries-B-8OfeZm.js → timeseries-D1xjRXfk.js} +2 -2
- package/dist/chunks/{timeseries-B-8OfeZm.js.map → timeseries-D1xjRXfk.js.map} +1 -1
- package/dist/chunks/{toolbar-DL6zVrzU.js → toolbar-WA_oZgu-.js} +5 -4
- package/dist/chunks/{toolbar-DL6zVrzU.js.map → toolbar-WA_oZgu-.js.map} +1 -1
- package/dist/chunks/tooltip-OcwO0VUT.js +154 -0
- package/dist/chunks/tooltip-OcwO0VUT.js.map +1 -0
- package/dist/chunks/{tooltip-root-BeAMXzxU.js → tooltip-root-DzahJDVj.js} +2 -2
- package/dist/chunks/{tooltip-root-BeAMXzxU.js.map → tooltip-root-DzahJDVj.js.map} +1 -1
- package/dist/chunks/{use-scroll-margin-DfdTc_5D.js → use-scroll-margin-atRtf0v_.js} +14 -10
- package/dist/chunks/use-scroll-margin-atRtf0v_.js.map +1 -0
- package/dist/chunks/{virtual-rows-yAMjeAwj.js → virtual-rows-CC_kc2PR.js} +2 -2
- package/dist/chunks/{virtual-rows-yAMjeAwj.js.map → virtual-rows-CC_kc2PR.js.map} +1 -1
- package/dist/chunks/{zh-CN-CKffAT7j.js → zh-CN-29X4CDLE.js} +3 -1
- package/dist/chunks/zh-CN-29X4CDLE.js.map +1 -0
- package/dist/components/agent-avatar.js +2 -0
- package/dist/components/app-frame.js +2 -2
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +2 -2
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/charts/bar.js +1 -1
- package/dist/components/charts/donut.js +1 -1
- package/dist/components/charts/gauge.js +1 -1
- package/dist/components/charts/sankey.js +1 -1
- 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 +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +85 -81
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +191 -187
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +6 -4
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dialog.js +125 -91
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/display-options.js +49 -46
- package/dist/components/display-options.js.map +1 -1
- package/dist/components/filter-chip.js +3 -3
- package/dist/components/filter-chip.js.map +1 -1
- package/dist/components/filter-row.js +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon.js +1 -1
- package/dist/components/input.js +49 -49
- package/dist/components/input.js.map +1 -1
- package/dist/components/kaeso/conversation.js +3 -3
- 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 +8 -8
- package/dist/components/kaeso/usage.js.map +1 -1
- package/dist/components/kaeso.js +263 -95
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/key-value.js +2 -2
- package/dist/components/link.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 +27 -26
- package/dist/components/playground.js.map +1 -1
- package/dist/components/popover.js +12 -11
- package/dist/components/popover.js.map +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/segmented.js +1 -1
- package/dist/components/settings.js +8 -8
- package/dist/components/settings.js.map +1 -1
- package/dist/components/sheet.js +2 -2
- package/dist/components/sidebar.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/tabs.js +22 -22
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/theme-menu.js +33 -30
- package/dist/components/theme-menu.js.map +1 -1
- package/dist/components/thumbnail.js +41 -0
- package/dist/components/thumbnail.js.map +1 -0
- package/dist/components/toast.js +96 -87
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/format.js.map +1 -1
- package/dist/i18n-provider.js +1 -1
- package/dist/index.js +89 -87
- package/dist/kaeso.css +3 -0
- package/dist/styles.css +1 -1
- package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -5
- package/dist/types/blocks/resource-list/resource-list.d.ts +1 -4
- package/dist/types/component-docs.d.ts +1 -1
- package/dist/types/components/agent-avatar/agent-avatar.d.ts +94 -0
- package/dist/types/components/agent-avatar/docs.d.ts +19 -0
- package/dist/types/components/agent-avatar/index.d.ts +3 -0
- package/dist/types/components/agent-avatar/model-name.d.ts +9 -0
- package/dist/types/components/agent-avatar/models.d.ts +4 -0
- package/dist/types/components/app-frame/app-frame.d.ts +3 -8
- package/dist/types/components/app-frame/nav-sheet.d.ts +2 -4
- package/dist/types/components/calendar/calendar.d.ts +1 -4
- package/dist/types/components/charts/core.d.ts +11 -18
- package/dist/types/components/checkbox/checkbox.d.ts +2 -0
- package/dist/types/components/combobox/combobox.d.ts +26 -2
- package/dist/types/components/command-list/picker-popover.d.ts +1 -4
- package/dist/types/components/command-palette/command-palette.d.ts +1 -4
- package/dist/types/components/data-table/data-table.d.ts +2 -1
- package/dist/types/components/data-table/docs.d.ts +1 -0
- package/dist/types/components/dialog/dialog.d.ts +7 -9
- package/dist/types/components/dialog/docs.d.ts +2 -0
- package/dist/types/components/dialog/scope.d.ts +2 -0
- package/dist/types/components/dialog/step-dialog.d.ts +38 -5
- package/dist/types/components/display-options/display-options.d.ts +2 -5
- package/dist/types/components/input/input.d.ts +23 -0
- package/dist/types/components/kaeso/client-button.d.ts +17 -0
- package/dist/types/components/kaeso/docs.d.ts +18 -0
- package/dist/types/components/kaeso/grant-summary.d.ts +12 -0
- package/dist/types/components/kaeso/identity.d.ts +2 -0
- package/dist/types/components/kaeso/index.d.ts +2 -0
- package/dist/types/components/kaeso/provider-picker.d.ts +5 -0
- package/dist/types/components/kaeso/usage.d.ts +2 -0
- package/dist/types/components/list/list.d.ts +4 -8
- package/dist/types/components/menu/docs.d.ts +8 -1
- package/dist/types/components/menu/menu.d.ts +19 -31
- package/dist/types/components/playground/parameter-panel.d.ts +1 -4
- package/dist/types/components/popover/hover-card.d.ts +2 -0
- package/dist/types/components/radio/docs.d.ts +15 -0
- package/dist/types/components/radio/radio.d.ts +2 -4
- package/dist/types/components/settings/settings.d.ts +2 -0
- package/dist/types/components/sidebar/sidebar.d.ts +13 -35
- package/dist/types/components/tabs/tabs.d.ts +15 -0
- package/dist/types/components/theme-menu/docs.d.ts +2 -0
- package/dist/types/components/theme-menu/theme-menu.d.ts +6 -5
- package/dist/types/components/thumbnail/docs.d.ts +10 -0
- package/dist/types/components/thumbnail/index.d.ts +1 -0
- package/dist/types/components/thumbnail/thumbnail.d.ts +26 -0
- package/dist/types/components/toast/toast.d.ts +5 -12
- package/dist/types/components/toolbar/toolbar.d.ts +1 -6
- package/dist/types/components/tooltip/tooltip.d.ts +2 -4
- package/dist/types/components/tooltip/trigger-props.d.ts +0 -1
- package/dist/types/format/index.d.ts +5 -5
- package/dist/types/hooks/use-scroll-margin.d.ts +1 -1
- package/dist/types/icons/groups.d.ts +2 -2
- package/dist/types/icons/vocabulary.d.ts +15 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/utils/inset.d.ts +4 -0
- package/dist/types/utils/link-provider.d.ts +1 -1
- package/dist/types/utils/merge-refs.d.ts +3 -0
- package/dist/types/utils/portal-context.d.ts +1 -1
- package/dist/utils.js +3 -3
- package/foundations/shape.md +1 -1
- package/package.json +2 -2
- package/dist/chunks/app-frame-C8csevkL.js.map +0 -1
- package/dist/chunks/calendar--YemJsv4.js.map +0 -1
- package/dist/chunks/checkbox-CDfC6E-M.js.map +0 -1
- package/dist/chunks/combobox-BARyrpXH.js +0 -314
- package/dist/chunks/combobox-BARyrpXH.js.map +0 -1
- package/dist/chunks/core-Bl9NrBLS.js.map +0 -1
- package/dist/chunks/de-BnNQtBSV.js.map +0 -1
- package/dist/chunks/dialog-DQ9vZ7vr.js +0 -353
- package/dist/chunks/dialog-DQ9vZ7vr.js.map +0 -1
- package/dist/chunks/icon-CBzvyEqC.js +0 -91
- package/dist/chunks/icon-CBzvyEqC.js.map +0 -1
- package/dist/chunks/identity-DPuTkMsa.js.map +0 -1
- package/dist/chunks/input-TyLIaQ5k.js.map +0 -1
- package/dist/chunks/inset-BnBj8NJV.js.map +0 -1
- package/dist/chunks/link-provider-BsUxhZKG.js +0 -27
- package/dist/chunks/link-provider-BsUxhZKG.js.map +0 -1
- package/dist/chunks/menu-fl_QQb38.js.map +0 -1
- package/dist/chunks/nav-sheet-B2rNb8GB.js +0 -60
- package/dist/chunks/nav-sheet-B2rNb8GB.js.map +0 -1
- package/dist/chunks/sidebar-DtFlejU7.js.map +0 -1
- package/dist/chunks/tooltip-BMQ9BtPp.js +0 -151
- package/dist/chunks/tooltip-BMQ9BtPp.js.map +0 -1
- package/dist/chunks/use-scroll-margin-DfdTc_5D.js.map +0 -1
- package/dist/chunks/zh-CN-CKffAT7j.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","names":["__icon_ArrowDown01Icon","__icon_ArrowUp01Icon","cn","useInset","useGutterPadded","useUiText","Icon","Tooltip","observeResize","Text","Button","CheckboxBox","ContextMenu","Skeleton","Pagination","Empty","StatusDot","Avatar","scrollParent","STATUS_TONE_TEXT","useScrollMargin","KAESO_DATA_TABLE_VARIANTS","KAESO_DATA_TABLE_DEFAULT_VARIANTS","ROW_H","DATA_TABLE_GROW_MIN","fitColumns","width","byPriority","columns","a","b","used","reserve","keep","c","kept","full","least","growMin","last","contentWidth","style","el","rowName","column","text","row","raw","DataTableInner","userColumns","sortingProp","ariaLabel","inset","padded","t","sortingInner","setSortingInner","useState","selectionInner","setSelectionInner","focusRow","setFocusRow","sorting","rowSelection","selection","useMemo","selectable","table","name","useReactTable","next","u","onSortingChange","onSelectionChange","getCoreRowModel","getSortedRowModel","manualSorting","getRowId","r","root","useRef","head","body","leaf","fitInput","fitKey","hiddenFor","fit","hiddenForRef","hiddenKey","setHiddenKey","useLayoutEffect","mode","hiddenIds","tight","overflow","hidden","onHiddenRef","onHiddenColumnsChange","cols","trackMin","gridStyle","pinEnd","rows","virtual","virtualizeAbove","getScrollElement","scrollMargin","virtualizer","useVirtualizer","density","cellPad","i","stickyCol","stickyFirstColumn","header","focusable","onRowClick","stop","focusAt","line","now","page","onRowKeyDown","to","renderRow","cells","activeRowId","freshRowIds","meta","cell","content","flexRender","tone","rowMenu","ref","className","loading","hg","h","sortable","dir","ArrowDown01Icon","ArrowUp01Icon","step","id","min","max","old","error","onRetry","empty","v","hasMore","loadingMore","DataTableBase","DataTable","make","get","ctx","sortingFn","Tokens","exact","formatNumber","value","formatTokens","RelativeTime","formatDate","formatRelative","col","formatUSD","options","formatDuration"],"sources":["../../src/components/data-table/data-table.tsx","../../src/components/data-table/columns.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useLayoutEffect, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode } from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type Row,\n type RowSelectionState,\n type SortingState,\n} from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { useGutterPadded, useInset } from \"../../utils/inset.js\";\nimport { ArrowDown01Icon as __icon_ArrowDown01Icon, ArrowUp01Icon as __icon_ArrowUp01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Button } from \"../button/button.js\";\nimport { Pagination } from \"../pagination/pagination.js\";\nimport { ContextMenu } from \"../menu/menu.js\";\nimport { Text } from \"../text/text.js\";\nimport { STATUS_TONE_TEXT, type StatusTone } from \"../../utils/tone.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useScrollMargin } from \"../../hooks/use-scroll-margin.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DATA_TABLE_VARIANTS = {\n density: {\n compact: { classes: \"h-36\" },\n default: { classes: \"h-40\" },\n comfortable: { classes: \"h-48\" },\n },\n} as const;\nexport const KAESO_DATA_TABLE_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\ndeclare module \"@tanstack/react-table\" {\n interface ColumnMeta<TData, TValue> {\n align?: \"start\" | \"end\" | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n mono?: boolean | undefined;\n text?: ((row: TData) => string) | undefined;\n tone?: ((row: TData) => StatusTone | undefined) | undefined;\n }\n}\n\nexport interface DataTableProps<T> {\n data: T[];\n columns: ColumnDef<T, any>[];\n getRowId?: ((row: T) => string) | undefined;\n density?: keyof typeof KAESO_DATA_TABLE_VARIANTS.density | undefined;\n onRowClick?: ((row: T) => void) | undefined;\n rowMenu?: ((row: T) => ReactNode) | undefined;\n selectable?: boolean | undefined;\n selection?: RowSelectionState | undefined;\n onSelectionChange?: ((selection: RowSelectionState) => void) | undefined;\n sorting?: SortingState | undefined;\n onSortingChange?: ((sorting: SortingState) => void) | undefined;\n manualSorting?: boolean | undefined;\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: ReactNode | undefined;\n hasMore?: boolean | undefined;\n loadingMore?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n stickyFirstColumn?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n activeRowId?: string | undefined;\n freshRowIds?: ReadonlySet<string> | undefined;\n onHiddenColumnsChange?: ((ids: string[]) => void) | undefined;\n}\n\nconst ROW_H = { compact: 36, default: 40, comfortable: 48 } as const;\n\nexport const DATA_TABLE_GROW_MIN = 136;\n\ntype FitColumn = { id: string; size: number; priority: number; grow: boolean; minWidth: number | undefined; fixed?: boolean | undefined };\n\nexport function fitColumns(columns: FitColumn[], width: number, reserve = 48): { hidden: string[]; tight: boolean; overflow: boolean } {\n if (!width) return { hidden: [], tight: false, overflow: false };\n const byPriority = [...columns].sort((a, b) => a.priority - b.priority);\n let used = reserve;\n const keep = new Set<string>();\n for (const c of byPriority) {\n used += c.size;\n if (used <= width || c.priority <= 1 || c.fixed) keep.add(c.id);\n }\n const kept = columns.filter((c) => keep.has(c.id));\n const full = kept.reduce((a, c) => a + c.size, reserve);\n let least = kept.reduce((a, c) => a + (c.grow ? growMin(c) : c.size), 0);\n if (least > width && kept.some((c) => c.grow)) {\n const last = kept[kept.length - 1];\n for (const c of [...kept].reverse()) {\n if (least <= width) break;\n if (c.grow || c.fixed || c === last) continue;\n keep.delete(c.id);\n least -= c.size;\n }\n }\n return { hidden: columns.filter((c) => !keep.has(c.id)).map((c) => c.id), tight: full > width, overflow: least > width };\n}\n\nfunction contentWidth(el: HTMLElement): number {\n const style = getComputedStyle(el);\n return el.getBoundingClientRect().width - (parseFloat(style.paddingLeft) || 0) - (parseFloat(style.paddingRight) || 0);\n}\n\nfunction rowName<T>(column: ColumnDef<T, any> | undefined, row: Row<T>): string | undefined {\n if (!column?.id) return undefined;\n const text = column.meta?.text?.(row.original);\n if (text) return text;\n const raw = row.getValue(column.id);\n return typeof raw === \"string\" && raw ? raw : undefined;\n}\n\nconst growMin = (c: { size: number; minWidth: number | undefined }) => Math.min(c.size, c.minWidth ?? DATA_TABLE_GROW_MIN);\n\nfunction DataTableInner<T>(\n {\n data,\n columns: userColumns,\n getRowId,\n density = \"default\",\n onRowClick,\n rowMenu,\n selectable,\n selection,\n onSelectionChange,\n sorting: sortingProp,\n onSortingChange,\n manualSorting,\n loading,\n error,\n onRetry,\n empty,\n hasMore,\n loadingMore,\n onLoadMore,\n stickyFirstColumn,\n virtualizeAbove = 100,\n className,\n activeRowId,\n freshRowIds,\n onHiddenColumnsChange,\n \"aria-label\": ariaLabel,\n }: DataTableProps<T>,\n ref: React.Ref<HTMLDivElement>,\n) {\n const inset = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n const [sortingInner, setSortingInner] = useState<SortingState>([]);\n const [selectionInner, setSelectionInner] = useState<RowSelectionState>({});\n const [focusRow, setFocusRow] = useState(0);\n const sorting = sortingProp ?? sortingInner;\n const rowSelection = selection ?? selectionInner;\n const columns = useMemo<ColumnDef<T, any>[]>(() => {\n if (!selectable) return userColumns;\n return [\n {\n id: \"__select\",\n size: 44,\n enableSorting: false,\n enableResizing: false,\n meta: { priority: 1 },\n header: ({ table }) => (\n <CheckboxBox\n aria-label={t(\"dataTable.selectAllRows\", \"Select all rows\")}\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onCheckedChange={(c) => table.toggleAllRowsSelected(c)}\n />\n ),\n cell: ({ row }) => {\n const name = rowName(userColumns[0], row);\n return (\n <CheckboxBox\n aria-label={name ? t(\"dataTable.selectNamed\", \"Select {name}\", { name }) : t(\"dataTable.selectRow\", \"Select row\")}\n checked={row.getIsSelected()}\n onCheckedChange={(c) => row.toggleSelected(c)}\n />\n );\n },\n },\n ...userColumns,\n ];\n }, [userColumns, selectable, t]);\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, rowSelection },\n onSortingChange: (u) => {\n const next = typeof u === \"function\" ? u(sorting) : u;\n if (!sortingProp) setSortingInner(next);\n onSortingChange?.(next);\n },\n onRowSelectionChange: (u) => {\n const next = typeof u === \"function\" ? u(rowSelection) : u;\n if (!selection) setSelectionInner(next);\n onSelectionChange?.(next);\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n manualSorting: !!manualSorting,\n enableRowSelection: !!selectable,\n columnResizeMode: \"onChange\",\n ...(getRowId ? { getRowId: (r: T) => getRowId(r) } : {}),\n defaultColumn: { size: 140, minSize: 64, maxSize: 640 },\n });\n\n const root = useRef<HTMLDivElement | null>(null);\n const head = useRef<HTMLDivElement | null>(null);\n const body = useRef<HTMLDivElement | null>(null);\n const leaf = table.getVisibleLeafColumns();\n const fitInput = leaf.map((c) => ({\n id: c.id,\n size: c.getSize(),\n priority: c.columnDef.meta?.priority ?? 2,\n grow: !!c.columnDef.meta?.grow,\n minWidth: c.columnDef.meta?.minWidth,\n fixed: c.id === \"__select\",\n }));\n const fitKey = JSON.stringify(fitInput);\n const hiddenFor = (width: number) => {\n const fit = fitColumns(fitInput, width, inset ? 48 : 0);\n return `${fit.tight ? \"!\" : \"\"}${fit.overflow ? \">\" : \"\"}|${fit.hidden.join(\" \")}`;\n };\n const hiddenForRef = useRef(hiddenFor);\n hiddenForRef.current = hiddenFor;\n const [hiddenKey, setHiddenKey] = useState(\"|\");\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n return observeResize([el], ([e]) => setHiddenKey(hiddenForRef.current(Math.round(e?.contentRect.width ?? 0))));\n }, []);\n useLayoutEffect(() => {\n if (root.current) setHiddenKey(hiddenForRef.current(Math.round(contentWidth(root.current))));\n }, [fitKey]);\n const [mode = \"\", hiddenIds = \"\"] = hiddenKey.split(\"|\");\n const tight = mode.includes(\"!\");\n const overflow = mode.includes(\">\");\n const hidden = useMemo(() => new Set(hiddenIds.split(\" \").filter(Boolean)), [hiddenIds]);\n const onHiddenRef = useRef(onHiddenColumnsChange);\n onHiddenRef.current = onHiddenColumnsChange;\n useLayoutEffect(() => {\n onHiddenRef.current?.([...hidden]);\n }, [hidden]);\n const cols = leaf.filter((c) => !hidden.has(c.id));\n const trackMin = (c: (typeof cols)[number]) =>\n c.columnDef.meta?.grow ? (tight ? growMin({ size: c.getSize(), minWidth: c.columnDef.meta.minWidth }) : c.getSize()) : c.getSize();\n const template = cols.map((c) => (c.columnDef.meta?.grow ? `minmax(${trackMin(c)}px, 1fr)` : `${c.getSize()}px`)).join(\" \");\n const gridStyle: CSSProperties = { gridTemplateColumns: template, minWidth: cols.reduce((a, c) => a + trackMin(c), 0) };\n const pinEnd = overflow && cols.length > 1 && !cols[cols.length - 1]?.columnDef.meta?.grow;\n\n const rows = table.getRowModel().rows;\n const virtual = rows.length > virtualizeAbove;\n const getScrollElement = () => scrollParent(root.current);\n const scrollMargin = useScrollMargin(body, getScrollElement, rows.length);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement,\n estimateSize: () => ROW_H[density],\n overscan: 16,\n enabled: virtual,\n scrollMargin,\n });\n\n const cellPad = (i: number) => cn(\"flex min-w-0 items-center px-12\", inset && i === 0 && \"pl-20\", inset && i === cols.length - 1 && \"pr-20\");\n const stickyCol = (i: number, header = false) =>\n ((stickyFirstColumn && i === 0) || (pinEnd && i === cols.length - 1)) &&\n cn(\n \"sticky z-10 group-hover/tr:bg-fill-1 group-aria-selected/tr:bg-fill-2 group-data-active/tr:bg-fill-2\",\n i === 0 ? \"left-0\" : \"right-0\",\n inset ? \"bg-raised\" : cn(\"bg-panel\", !header && (i === 0 ? \"rounded-l-item\" : \"rounded-r-item\")),\n );\n\n const focusable = !!onRowClick || !!selectable;\n const stop = Math.min(focusRow, Math.max(rows.length - 1, 0));\n const focusAt = (i: number) => {\n const next = Math.max(0, Math.min(rows.length - 1, i));\n setFocusRow(next);\n if (virtual) virtualizer.scrollToIndex(next, { align: \"auto\" });\n const line = () => body.current?.querySelector<HTMLElement>(`[data-row-index=\"${next}\"]`);\n const now = line();\n if (now) now.focus();\n else requestAnimationFrame(() => line()?.focus());\n };\n const page = () => Math.max(1, Math.floor((getScrollElement()?.clientHeight ?? 400) / ROW_H[density]) - 1);\n const onRowKeyDown = (e: KeyboardEvent<HTMLDivElement>, row: Row<T>, i: number) => {\n if (e.target !== e.currentTarget || e.altKey || e.metaKey || e.ctrlKey) return;\n const to = { ArrowDown: i + 1, ArrowUp: i - 1, Home: 0, End: rows.length - 1, PageDown: i + page(), PageUp: i - page() }[e.key];\n if (to !== undefined) {\n e.preventDefault();\n focusAt(to);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n onRowClick?.(row.original);\n } else if (e.key === \" \" && selectable) {\n e.preventDefault();\n row.toggleSelected();\n }\n };\n\n const renderRow = (row: Row<T>, i: number, style?: CSSProperties) => {\n const cells = row.getVisibleCells().filter((c) => !hidden.has(c.column.id));\n const el = (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n aria-selected={selectable ? row.getIsSelected() : undefined}\n data-active={row.id === activeRowId || undefined}\n data-fresh={freshRowIds?.has(row.id) || undefined}\n data-row-index={i}\n tabIndex={focusable ? (i === stop ? 0 : -1) : undefined}\n onFocus={(e) => {\n if (e.target === e.currentTarget && i !== focusRow) setFocusRow(i);\n }}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n onRowClick?.(row.original);\n }}\n onKeyDown={(e) => onRowKeyDown(e, row, i)}\n style={{ ...gridStyle, ...style }}\n className={cn(\n \"group/tr grid w-full text-body text-fg transition-control focus-ring-inset\",\n !inset && \"rounded-item\",\n KAESO_DATA_TABLE_VARIANTS.density[density].classes,\n onRowClick && \"cursor-pointer\",\n \"hover:bg-fill-1 aria-selected:bg-fill-2 data-active:bg-fill-2 data-fresh:animate-row-fresh\",\n \"hover:controls-on-fill aria-selected:controls-on-fill data-active:controls-on-fill\",\n )}\n >\n {cells.map((cell, i) => {\n const meta = cell.column.columnDef.meta;\n const content = flexRender(cell.column.columnDef.cell, cell.getContext());\n const raw = cell.getValue();\n const text = meta?.text ? meta.text(row.original) : typeof raw === \"string\" ? raw : undefined;\n const tone = meta?.tone?.(row.original);\n return (\n <div\n key={cell.id}\n role=\"cell\"\n className={cn(\n cellPad(i),\n meta?.align === \"end\" && \"justify-end text-right tabular\",\n meta?.mono && \"mono text-small\",\n tone && STATUS_TONE_TEXT[tone],\n stickyCol(i),\n )}\n >\n {text !== undefined && typeof content !== \"object\" ? (\n <Text truncate tone={tone ?? \"default\"} className={cn(\"min-w-0\", meta?.mono && \"text-small\")} mono={!!meta?.mono}>\n {text}\n </Text>\n ) : (\n <span className={cn(\"min-w-0 truncate cell-fit\", meta?.grow && \"flex-1\")}>{content}</span>\n )}\n </div>\n );\n })}\n </div>\n );\n if (!rowMenu) return <div key={row.id}>{el}</div>;\n return (\n <ContextMenu key={row.id}>\n <ContextMenu.Trigger>{el}</ContextMenu.Trigger>\n <ContextMenu.Content>{rowMenu(row.original)}</ContextMenu.Content>\n </ContextMenu>\n );\n };\n\n return (\n <div\n ref={(e) => {\n root.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) (ref as { current: HTMLDivElement | null }).current = e;\n }}\n className={cn(\"relative w-full min-w-0\", !inset && !padded && \"px-24\", className)}\n >\n <div\n role=\"table\"\n aria-label={ariaLabel}\n aria-rowcount={rows.length + 1}\n aria-busy={loading || undefined}\n className={cn(\"w-full overflow-clip\", inset && \"rounded-group bg-raised shadow-xs\")}\n >\n <div\n ref={head}\n role=\"rowgroup\"\n className={cn(\"sticky top-0 z-20 overflow-hidden\", inset ? \"bg-raised\" : \"bg-panel\")}\n onScroll={(e) => {\n if (body.current && body.current.scrollLeft !== e.currentTarget.scrollLeft) body.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {table.getHeaderGroups().map((hg) => (\n <div key={hg.id} role=\"row\" aria-rowindex={1} className=\"grid h-36 hairline-b-strong\" style={gridStyle}>\n {hg.headers\n .filter((h) => !hidden.has(h.column.id))\n .map((h, i) => {\n const meta = h.column.columnDef.meta;\n const sortable = h.column.getCanSort();\n const dir = h.column.getIsSorted();\n return (\n <div\n key={h.id}\n role=\"columnheader\"\n aria-sort={dir === \"asc\" ? \"ascending\" : dir === \"desc\" ? \"descending\" : sortable ? \"none\" : undefined}\n className={cn(\n \"group/th relative\",\n cellPad(i),\n meta?.align === \"end\" && \"justify-end\",\n stickyCol(i, true),\n stickyCol(i, true) && \"hairline-b-strong\",\n )}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={h.column.getToggleSortingHandler()}\n className={cn(\n \"relative -mx-6 inline-flex h-28 min-w-0 cursor-pointer items-center gap-4 rounded-pill px-6 text-caption font-medium transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\",\n dir ? \"text-fg\" : \"text-fg-secondary\",\n meta?.align === \"end\" && \"flex-row-reverse\",\n )}\n >\n <span className=\"truncate\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n <Icon\n icon={dir === \"desc\" ? __icon_ArrowDown01Icon : __icon_ArrowUp01Icon}\n size=\"xs\"\n className={cn(\"shrink-0 transition-control\", dir ? \"opacity-100\" : \"opacity-0 group-hover/th:opacity-60\")}\n />\n </button>\n ) : (\n <span className=\"truncate text-caption font-medium text-fg-secondary\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n )}\n {h.column.getCanResize() && (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={t(\"dataTable.resizeColumn\", \"Resize column\")}\n aria-valuenow={h.column.getSize()}\n aria-valuemin={h.column.columnDef.minSize ?? 64}\n aria-valuemax={h.column.columnDef.maxSize ?? 640}\n tabIndex={0}\n onKeyDown={(e) => {\n const step = { ArrowLeft: -16, ArrowRight: 16 }[e.key];\n if (step === undefined) return;\n e.preventDefault();\n const id = h.column.id;\n const min = h.column.columnDef.minSize ?? 64;\n const max = h.column.columnDef.maxSize ?? 640;\n table.setColumnSizing((old) => ({ ...old, [id]: Math.max(min, Math.min(max, h.column.getSize() + step)) }));\n }}\n onMouseDown={h.getResizeHandler()}\n onTouchStart={h.getResizeHandler()}\n onDoubleClick={() => h.column.resetSize()}\n className=\"absolute top-8 right-0 bottom-8 w-8 cursor-col-resize rounded-pill after:absolute after:inset-y-0 after:right-0 after:w-1 after:bg-transparent after:transition-control group-hover/th:after:bg-line-strong focus-ring-inset\"\n />\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n <div\n ref={body}\n role=\"rowgroup\"\n className=\"overflow-x-auto scrollbar-quiet\"\n onScroll={(e) => {\n if (head.current && head.current.scrollLeft !== e.currentTarget.scrollLeft) head.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {error ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n <div role=\"alert\">\n <Empty\n size=\"compact\"\n title={t(\"dataTable.loadFailed\", \"Couldn't load these rows\")}\n actions={\n onRetry && (\n <Button size=\"sm\" onClick={onRetry}>\n {t(\"dataTable.tryAgain\", \"Try again\")}\n </Button>\n )\n }\n />\n </div>\n </div>\n </div>\n ) : loading && rows.length === 0 ? (\n Array.from({ length: 8 }, (_, r) => (\n <div key={r} role=\"row\" className={cn(\"grid\", KAESO_DATA_TABLE_VARIANTS.density[density].classes)} style={gridStyle}>\n {cols.map((c, i) => (\n <div key={c.id} role=\"cell\" className={cn(cellPad(i), c.columnDef.meta?.align === \"end\" && \"justify-end\")}>\n <Skeleton shape=\"line\" style={{ width: `${40 + ((r * 7 + i * 13) % 45)}%` }} />\n </div>\n ))}\n </div>\n ))\n ) : rows.length === 0 ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n {empty ?? (\n <Empty size=\"compact\" title={t(\"dataTable.noRows\", \"No rows\")} description={t(\"dataTable.noMatches\", \"Nothing matches these filters.\")} />\n )}\n </div>\n </div>\n ) : virtual ? (\n <div className=\"relative\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((v) =>\n renderRow(rows[v.index]!, v.index, {\n position: \"absolute\",\n top: 0,\n left: 0,\n transform: `translateY(${Math.round(v.start - scrollMargin)}px)`,\n }),\n )}\n </div>\n ) : (\n rows.map((r, i) => renderRow(r, i))\n )}\n </div>\n </div>\n {hasMore && <Pagination variant=\"load-more\" hasMore loading={loadingMore} onLoadMore={onLoadMore} />}\n </div>\n );\n}\n\nconst DataTableBase = /* @__PURE__ */ forwardRef(DataTableInner);\nif (process.env.NODE_ENV !== \"production\") DataTableBase.displayName = \"DataTable\";\nexport const DataTable = DataTableBase as unknown as <T>(\n p: DataTableProps<T> & { ref?: React.Ref<HTMLDivElement> | undefined },\n) => ReturnType<typeof DataTableInner>;\n","import type { ColumnDef } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\nimport { formatDate, formatDuration, formatRelative, formatTokens, formatUSD, formatNumber } from \"../../format/index.js\";\nimport { StatusDot, type StatusDotProps } from \"../status-dot/status-dot.js\";\nimport { Avatar } from \"../avatar/avatar.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { StatusTone } from \"../../utils/tone.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\ntype Base<T = never> = {\n id: string;\n header: ReactNode;\n size?: number | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n tone?: ((row: T) => StatusTone | undefined) | undefined;\n};\ntype Accessor<T, V> = (row: T) => V;\n\nfunction make<T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: object = {},\n sortingFn?: ColumnDef<T, V>[\"sortingFn\"],\n): ColumnDef<T, V> {\n return {\n id: b.id,\n header: () => b.header,\n accessorFn: get,\n cell: (ctx) => cell(ctx.getValue() as V, ctx.row.original),\n ...(b.size ? { size: b.size } : {}),\n ...(sortingFn ? { sortingFn } : {}),\n meta: {\n ...(b.priority !== undefined ? { priority: b.priority } : {}),\n ...(b.grow ? { grow: true } : {}),\n ...(b.minWidth !== undefined ? { minWidth: b.minWidth } : {}),\n ...(b.tone ? { tone: b.tone } : {}),\n ...meta,\n },\n };\n}\n\nfunction Tokens({ value }: { value: number }) {\n const t = useUiText();\n const exact = t(\"dataTable.tokenCount\", \"{count} tokens\", { count: formatNumber(value) });\n return (\n <Tooltip content={exact}>\n <span>\n <span aria-hidden>{formatTokens(value)}</span>\n <span className=\"sr-only\">{exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nfunction RelativeTime({ value, now }: { value: string | Date; now: Date | number }) {\n const exact = formatDate(value, { time: true, seconds: true });\n return (\n <Tooltip content={`${exact} · ${formatDate(value, { time: true, utc: true })}`} shape=\"multiline\">\n <span className=\"text-fg-secondary\">\n <time dateTime={new Date(value).toISOString()}>{formatRelative(value, now)}</time>\n <span className=\"sr-only\"> {exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nexport const col = {\n text: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { text: (r: T) => get(r) }),\n mono: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { mono: true, text: (r: T) => get(r) }),\n number: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatNumber(v), { align: \"end\" }),\n money: <T,>(b: Base<T>, get: Accessor<T, string>, options: { decimals?: number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => formatUSD(v, options.decimals === undefined ? {} : { decimals: options.decimals }),\n { align: \"end\", mono: false },\n (a, c, id) => Number(a.getValue(id)) - Number(c.getValue(id)),\n ),\n tokens: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => <Tokens value={v} />, { align: \"end\" }),\n duration: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatDuration(v), { align: \"end\" }),\n date: <T,>(b: Base<T>, get: Accessor<T, string | Date>) =>\n make(b, get, (v) => <time dateTime={new Date(v).toISOString()}>{formatDate(v, { time: true })}</time>, {}, \"datetime\"),\n relative: <T,>(b: Base<T>, get: Accessor<T, string | Date>, options: { now?: Date | number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => <RelativeTime value={v} now={options.now ?? Date.now()} />,\n {},\n (a, c, id) => new Date(a.getValue(id) as string).getTime() - new Date(c.getValue(id) as string).getTime(),\n ),\n status: <T,>(b: Base<T>, get: Accessor<T, { tone: NonNullable<StatusDotProps[\"tone\"]>; label: string }>) =>\n make(b, get, (v) => <StatusDot tone={v.tone}>{v.label}</StatusDot>, { text: undefined }),\n avatar: <T,>(b: Base<T>, get: Accessor<T, { name: string; src?: string | undefined }>) =>\n make(b, get, (v) => (\n <span className=\"inline-flex min-w-0 items-center gap-8\">\n <Avatar name={v.name} {...(v.src ? { src: v.src } : {})} size={24} decorative />\n <span className=\"truncate\">{v.name}</span>\n </span>\n )),\n custom: <T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: { align?: \"start\" | \"end\" | undefined; mono?: boolean | undefined } = {},\n ) => make(b, get, cell, meta),\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-table.js","names":["__icon_ArrowDown01Icon","__icon_ArrowUp01Icon","cn","useInset","useGutterPadded","useRaised","Icon","Tooltip","observeResize","Text","Button","CheckboxBox","ContextMenu","Skeleton","Pagination","Empty","StatusDot","Avatar","scrollParent","STATUS_TONE_TEXT","useScrollMargin","KAESO_DATA_TABLE_VARIANTS","KAESO_DATA_TABLE_DEFAULT_VARIANTS","ROW_H","DATA_TABLE_GROW_MIN","fitColumns","width","byPriority","columns","a","b","used","reserve","keep","c","kept","full","least","growMin","last","contentWidth","style","el","rowName","column","text","row","raw","DataTableInner","userColumns","sortingProp","ariaLabel","inset","raised","padded","t","useUiText","sortingInner","setSortingInner","useState","selectionInner","setSelectionInner","focusRow","setFocusRow","sorting","rowSelection","selection","useMemo","selectable","table","name","useReactTable","next","u","onSortingChange","onSelectionChange","getCoreRowModel","getSortedRowModel","manualSorting","canSelectRow","getRowId","r","root","useRef","head","body","leaf","fitInput","fitKey","hiddenFor","fit","hiddenForRef","hiddenKey","setHiddenKey","useLayoutEffect","mode","hiddenIds","tight","overflow","hidden","onHiddenRef","onHiddenColumnsChange","cols","trackMin","gridStyle","pinEnd","rows","virtual","virtualizeAbove","getScrollElement","scrollMargin","virtualizer","useVirtualizer","density","cellPad","i","stickyCol","stickyFirstColumn","header","focusable","onRowClick","stop","focusAt","line","now","page","onRowKeyDown","to","renderRow","cells","activeRowId","freshRowIds","meta","cell","content","flexRender","tone","rowMenu","ref","className","loading","hg","h","sortable","dir","ArrowDown01Icon","ArrowUp01Icon","step","id","min","max","old","error","onRetry","empty","v","hasMore","loadingMore","DataTableBase","DataTable","make","get","ctx","sortingFn","Tokens","exact","formatNumber","value","formatTokens","RelativeTime","formatDate","formatRelative","col","formatUSD","options","formatDuration"],"sources":["../../src/components/data-table/data-table.tsx","../../src/components/data-table/columns.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useLayoutEffect, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode } from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type Row,\n type RowSelectionState,\n type SortingState,\n} from \"@tanstack/react-table\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { useGutterPadded, useInset, useRaised } from \"../../utils/inset.js\";\nimport { ArrowDown01Icon as __icon_ArrowDown01Icon, ArrowUp01Icon as __icon_ArrowUp01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CheckboxBox } from \"../checkbox/checkbox.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Empty } from \"../empty/empty.js\";\nimport { Button } from \"../button/button.js\";\nimport { Pagination } from \"../pagination/pagination.js\";\nimport { ContextMenu } from \"../menu/menu.js\";\nimport { Text } from \"../text/text.js\";\nimport { STATUS_TONE_TEXT, type StatusTone } from \"../../utils/tone.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useScrollMargin } from \"../../hooks/use-scroll-margin.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_DATA_TABLE_VARIANTS = {\n density: {\n compact: { classes: \"h-36\" },\n default: { classes: \"h-40\" },\n comfortable: { classes: \"h-48\" },\n },\n} as const;\nexport const KAESO_DATA_TABLE_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\ndeclare module \"@tanstack/react-table\" {\n interface ColumnMeta<TData, TValue> {\n align?: \"start\" | \"end\" | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n mono?: boolean | undefined;\n text?: ((row: TData) => string) | undefined;\n tone?: ((row: TData) => StatusTone | undefined) | undefined;\n }\n}\n\nexport interface DataTableProps<T> {\n data: T[];\n columns: ColumnDef<T, any>[];\n getRowId?: ((row: T) => string) | undefined;\n density?: keyof typeof KAESO_DATA_TABLE_VARIANTS.density | undefined;\n onRowClick?: ((row: T) => void) | undefined;\n rowMenu?: ((row: T) => ReactNode) | undefined;\n selectable?: boolean | undefined;\n canSelectRow?: ((row: T) => boolean) | undefined;\n selection?: RowSelectionState | undefined;\n onSelectionChange?: ((selection: RowSelectionState) => void) | undefined;\n sorting?: SortingState | undefined;\n onSortingChange?: ((sorting: SortingState) => void) | undefined;\n manualSorting?: boolean | undefined;\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: ReactNode | undefined;\n hasMore?: boolean | undefined;\n loadingMore?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n stickyFirstColumn?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n activeRowId?: string | undefined;\n freshRowIds?: ReadonlySet<string> | undefined;\n onHiddenColumnsChange?: ((ids: string[]) => void) | undefined;\n}\n\nconst ROW_H = { compact: 36, default: 40, comfortable: 48 } as const;\n\nexport const DATA_TABLE_GROW_MIN = 136;\n\ntype FitColumn = { id: string; size: number; priority: number; grow: boolean; minWidth: number | undefined; fixed?: boolean | undefined };\n\nexport function fitColumns(columns: FitColumn[], width: number, reserve = 48): { hidden: string[]; tight: boolean; overflow: boolean } {\n if (!width) return { hidden: [], tight: false, overflow: false };\n const byPriority = [...columns].sort((a, b) => a.priority - b.priority);\n let used = reserve;\n const keep = new Set<string>();\n for (const c of byPriority) {\n used += c.size;\n if (used <= width || c.priority <= 1 || c.fixed) keep.add(c.id);\n }\n const kept = columns.filter((c) => keep.has(c.id));\n const full = kept.reduce((a, c) => a + c.size, reserve);\n let least = kept.reduce((a, c) => a + (c.grow ? growMin(c) : c.size), 0);\n if (least > width && kept.some((c) => c.grow)) {\n const last = kept[kept.length - 1];\n for (const c of [...kept].reverse()) {\n if (least <= width) break;\n if (c.grow || c.fixed || c === last) continue;\n keep.delete(c.id);\n least -= c.size;\n }\n }\n return { hidden: columns.filter((c) => !keep.has(c.id)).map((c) => c.id), tight: full > width, overflow: least > width };\n}\n\nfunction contentWidth(el: HTMLElement): number {\n const style = getComputedStyle(el);\n return el.getBoundingClientRect().width - (parseFloat(style.paddingLeft) || 0) - (parseFloat(style.paddingRight) || 0);\n}\n\nfunction rowName<T>(column: ColumnDef<T, any> | undefined, row: Row<T>): string | undefined {\n if (!column?.id) return undefined;\n const text = column.meta?.text?.(row.original);\n if (text) return text;\n const raw = row.getValue(column.id);\n return typeof raw === \"string\" && raw ? raw : undefined;\n}\n\nconst growMin = (c: { size: number; minWidth: number | undefined }) => Math.min(c.size, c.minWidth ?? DATA_TABLE_GROW_MIN);\n\nfunction DataTableInner<T>(\n {\n data,\n columns: userColumns,\n getRowId,\n density = \"default\",\n onRowClick,\n rowMenu,\n selectable,\n canSelectRow,\n selection,\n onSelectionChange,\n sorting: sortingProp,\n onSortingChange,\n manualSorting,\n loading,\n error,\n onRetry,\n empty,\n hasMore,\n loadingMore,\n onLoadMore,\n stickyFirstColumn,\n virtualizeAbove = 100,\n className,\n activeRowId,\n freshRowIds,\n onHiddenColumnsChange,\n \"aria-label\": ariaLabel,\n }: DataTableProps<T>,\n ref: React.Ref<HTMLDivElement>,\n) {\n const inset = useInset();\n const raised = useRaised();\n const padded = useGutterPadded();\n const t = useUiText();\n const [sortingInner, setSortingInner] = useState<SortingState>([]);\n const [selectionInner, setSelectionInner] = useState<RowSelectionState>({});\n const [focusRow, setFocusRow] = useState(0);\n const sorting = sortingProp ?? sortingInner;\n const rowSelection = selection ?? selectionInner;\n const columns = useMemo<ColumnDef<T, any>[]>(() => {\n if (!selectable) return userColumns;\n return [\n {\n id: \"__select\",\n size: 44,\n enableSorting: false,\n enableResizing: false,\n meta: { priority: 1 },\n header: ({ table }) => (\n <CheckboxBox\n aria-label={t(\"dataTable.selectAllRows\", \"Select all rows\")}\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()}\n onCheckedChange={(c) => table.toggleAllRowsSelected(c)}\n />\n ),\n cell: ({ row }) => {\n const name = rowName(userColumns[0], row);\n return (\n <CheckboxBox\n aria-label={name ? t(\"dataTable.selectNamed\", \"Select {name}\", { name }) : t(\"dataTable.selectRow\", \"Select row\")}\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onCheckedChange={(c) => row.toggleSelected(c)}\n />\n );\n },\n },\n ...userColumns,\n ];\n }, [userColumns, selectable, t]);\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, rowSelection },\n onSortingChange: (u) => {\n const next = typeof u === \"function\" ? u(sorting) : u;\n if (!sortingProp) setSortingInner(next);\n onSortingChange?.(next);\n },\n onRowSelectionChange: (u) => {\n const next = typeof u === \"function\" ? u(rowSelection) : u;\n if (!selection) setSelectionInner(next);\n onSelectionChange?.(next);\n },\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n manualSorting: !!manualSorting,\n enableRowSelection: selectable ? (canSelectRow ? (row) => canSelectRow(row.original) : true) : false,\n columnResizeMode: \"onChange\",\n ...(getRowId ? { getRowId: (r: T) => getRowId(r) } : {}),\n defaultColumn: { size: 140, minSize: 64, maxSize: 640 },\n });\n\n const root = useRef<HTMLDivElement | null>(null);\n const head = useRef<HTMLDivElement | null>(null);\n const body = useRef<HTMLDivElement | null>(null);\n const leaf = table.getVisibleLeafColumns();\n const fitInput = leaf.map((c) => ({\n id: c.id,\n size: c.getSize(),\n priority: c.columnDef.meta?.priority ?? 2,\n grow: !!c.columnDef.meta?.grow,\n minWidth: c.columnDef.meta?.minWidth,\n fixed: c.id === \"__select\",\n }));\n const fitKey = JSON.stringify(fitInput);\n const hiddenFor = (width: number) => {\n const fit = fitColumns(fitInput, width, inset ? 48 : 0);\n return `${fit.tight ? \"!\" : \"\"}${fit.overflow ? \">\" : \"\"}|${fit.hidden.join(\" \")}`;\n };\n const hiddenForRef = useRef(hiddenFor);\n hiddenForRef.current = hiddenFor;\n const [hiddenKey, setHiddenKey] = useState(\"|\");\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n return observeResize([el], ([e]) => setHiddenKey(hiddenForRef.current(Math.round(e?.contentRect.width ?? 0))));\n }, []);\n useLayoutEffect(() => {\n if (root.current) setHiddenKey(hiddenForRef.current(Math.round(contentWidth(root.current))));\n }, [fitKey]);\n const [mode = \"\", hiddenIds = \"\"] = hiddenKey.split(\"|\");\n const tight = mode.includes(\"!\");\n const overflow = mode.includes(\">\");\n const hidden = useMemo(() => new Set(hiddenIds.split(\" \").filter(Boolean)), [hiddenIds]);\n const onHiddenRef = useRef(onHiddenColumnsChange);\n onHiddenRef.current = onHiddenColumnsChange;\n useLayoutEffect(() => {\n onHiddenRef.current?.([...hidden]);\n }, [hidden]);\n const cols = leaf.filter((c) => !hidden.has(c.id));\n const trackMin = (c: (typeof cols)[number]) =>\n c.columnDef.meta?.grow ? (tight ? growMin({ size: c.getSize(), minWidth: c.columnDef.meta.minWidth }) : c.getSize()) : c.getSize();\n const template = cols.map((c) => (c.columnDef.meta?.grow ? `minmax(${trackMin(c)}px, 1fr)` : `${c.getSize()}px`)).join(\" \");\n const gridStyle: CSSProperties = { gridTemplateColumns: template, minWidth: cols.reduce((a, c) => a + trackMin(c), 0) };\n const pinEnd = overflow && cols.length > 1 && !cols[cols.length - 1]?.columnDef.meta?.grow;\n\n const rows = table.getRowModel().rows;\n const virtual = rows.length > virtualizeAbove;\n const getScrollElement = () => scrollParent(root.current);\n const scrollMargin = useScrollMargin(body, getScrollElement, rows.length, virtual);\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement,\n estimateSize: () => ROW_H[density],\n overscan: 16,\n enabled: virtual,\n scrollMargin,\n });\n\n const cellPad = (i: number) => cn(\"flex min-w-0 items-center px-12\", inset && i === 0 && \"pl-20\", inset && i === cols.length - 1 && \"pr-20\");\n const stickyCol = (i: number, header = false) =>\n ((stickyFirstColumn && i === 0) || (pinEnd && i === cols.length - 1)) &&\n cn(\n \"sticky z-10 group-hover/tr:bg-fill-1 group-aria-selected/tr:bg-fill-2 group-data-active/tr:bg-fill-2\",\n i === 0 ? \"left-0\" : \"right-0\",\n inset ? \"bg-raised\" : cn(raised ? \"bg-raised\" : \"bg-panel\", !header && (i === 0 ? \"rounded-l-item\" : \"rounded-r-item\")),\n );\n\n const focusable = !!onRowClick || !!selectable;\n const stop = Math.min(focusRow, Math.max(rows.length - 1, 0));\n const focusAt = (i: number) => {\n const next = Math.max(0, Math.min(rows.length - 1, i));\n setFocusRow(next);\n if (virtual) virtualizer.scrollToIndex(next, { align: \"auto\" });\n const line = () => body.current?.querySelector<HTMLElement>(`[data-row-index=\"${next}\"]`);\n const now = line();\n if (now) now.focus();\n else requestAnimationFrame(() => line()?.focus());\n };\n const page = () => Math.max(1, Math.floor((getScrollElement()?.clientHeight ?? 400) / ROW_H[density]) - 1);\n const onRowKeyDown = (e: KeyboardEvent<HTMLDivElement>, row: Row<T>, i: number) => {\n if (e.target !== e.currentTarget || e.altKey || e.metaKey || e.ctrlKey) return;\n const to = { ArrowDown: i + 1, ArrowUp: i - 1, Home: 0, End: rows.length - 1, PageDown: i + page(), PageUp: i - page() }[e.key];\n if (to !== undefined) {\n e.preventDefault();\n focusAt(to);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n onRowClick?.(row.original);\n } else if (e.key === \" \" && selectable) {\n e.preventDefault();\n row.toggleSelected();\n }\n };\n\n const renderRow = (row: Row<T>, i: number, style?: CSSProperties) => {\n const cells = row.getVisibleCells().filter((c) => !hidden.has(c.column.id));\n const el = (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n aria-selected={selectable ? row.getIsSelected() : undefined}\n data-active={row.id === activeRowId || undefined}\n data-fresh={freshRowIds?.has(row.id) || undefined}\n data-row-index={i}\n tabIndex={focusable ? (i === stop ? 0 : -1) : undefined}\n onFocus={(e) => {\n if (e.target === e.currentTarget && i !== focusRow) setFocusRow(i);\n }}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n onRowClick?.(row.original);\n }}\n onKeyDown={(e) => onRowKeyDown(e, row, i)}\n style={{ ...gridStyle, ...style }}\n className={cn(\n \"group/tr grid w-full text-body text-fg transition-control focus-ring-inset\",\n !inset && \"rounded-item\",\n KAESO_DATA_TABLE_VARIANTS.density[density].classes,\n onRowClick && \"cursor-pointer\",\n \"hover:bg-fill-1 aria-selected:bg-fill-2 data-active:bg-fill-2 data-fresh:animate-row-fresh\",\n \"hover:controls-on-fill aria-selected:controls-on-fill data-active:controls-on-fill\",\n )}\n >\n {cells.map((cell, i) => {\n const meta = cell.column.columnDef.meta;\n const content = flexRender(cell.column.columnDef.cell, cell.getContext());\n const raw = cell.getValue();\n const text = meta?.text ? meta.text(row.original) : typeof raw === \"string\" ? raw : undefined;\n const tone = meta?.tone?.(row.original);\n return (\n <div\n key={cell.id}\n role=\"cell\"\n className={cn(\n cellPad(i),\n meta?.align === \"end\" && \"justify-end text-right tabular\",\n meta?.mono && \"mono text-small\",\n tone && STATUS_TONE_TEXT[tone],\n stickyCol(i),\n )}\n >\n {text !== undefined && typeof content !== \"object\" ? (\n <Text truncate tone={tone ?? \"default\"} className={cn(\"min-w-0\", meta?.mono && \"text-small\")} mono={!!meta?.mono}>\n {text}\n </Text>\n ) : cell.column.id === \"__select\" ? (\n <span className=\"flex\">{content}</span>\n ) : (\n <span className={cn(\"min-w-0 truncate cell-fit\", meta?.grow && \"flex-1\")}>{content}</span>\n )}\n </div>\n );\n })}\n </div>\n );\n if (!rowMenu) return <div key={row.id}>{el}</div>;\n return (\n <ContextMenu key={row.id}>\n <ContextMenu.Trigger>{el}</ContextMenu.Trigger>\n <ContextMenu.Content>{rowMenu(row.original)}</ContextMenu.Content>\n </ContextMenu>\n );\n };\n\n return (\n <div\n ref={(e) => {\n root.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) (ref as { current: HTMLDivElement | null }).current = e;\n }}\n className={cn(\"relative w-full min-w-0\", !inset && !padded && \"px-24\", className)}\n >\n <div\n role=\"table\"\n aria-label={ariaLabel}\n aria-rowcount={rows.length + 1}\n aria-busy={loading || undefined}\n className={cn(\"w-full overflow-clip\", inset && \"rounded-group bg-raised shadow-xs\")}\n >\n <div\n ref={head}\n role=\"rowgroup\"\n className={cn(\"sticky top-0 z-20 overflow-hidden\", inset || raised ? \"bg-raised\" : \"bg-panel\")}\n onScroll={(e) => {\n if (body.current && body.current.scrollLeft !== e.currentTarget.scrollLeft) body.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {table.getHeaderGroups().map((hg) => (\n <div key={hg.id} role=\"row\" aria-rowindex={1} className=\"grid h-36 hairline-b-strong\" style={gridStyle}>\n {hg.headers\n .filter((h) => !hidden.has(h.column.id))\n .map((h, i) => {\n const meta = h.column.columnDef.meta;\n const sortable = h.column.getCanSort();\n const dir = h.column.getIsSorted();\n return (\n <div\n key={h.id}\n role=\"columnheader\"\n aria-sort={dir === \"asc\" ? \"ascending\" : dir === \"desc\" ? \"descending\" : sortable ? \"none\" : undefined}\n className={cn(\n \"group/th relative\",\n cellPad(i),\n meta?.align === \"end\" && \"justify-end\",\n stickyCol(i, true),\n stickyCol(i, true) && \"hairline-b-strong\",\n )}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={h.column.getToggleSortingHandler()}\n className={cn(\n \"relative -mx-6 inline-flex h-28 min-w-0 cursor-pointer items-center gap-4 rounded-pill px-6 text-caption font-medium transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\",\n dir ? \"text-fg\" : \"text-fg-secondary\",\n meta?.align === \"end\" && \"flex-row-reverse\",\n )}\n >\n <span className=\"truncate\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n <Icon\n icon={dir === \"desc\" ? __icon_ArrowDown01Icon : __icon_ArrowUp01Icon}\n size=\"xs\"\n className={cn(\"shrink-0 transition-control\", dir ? \"opacity-100\" : \"opacity-0 group-hover/th:opacity-60\")}\n />\n </button>\n ) : (\n <span className=\"truncate text-caption font-medium text-fg-secondary\">{flexRender(h.column.columnDef.header, h.getContext())}</span>\n )}\n {h.column.getCanResize() && (\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={t(\"dataTable.resizeColumn\", \"Resize column\")}\n aria-valuenow={h.column.getSize()}\n aria-valuemin={h.column.columnDef.minSize ?? 64}\n aria-valuemax={h.column.columnDef.maxSize ?? 640}\n tabIndex={0}\n onKeyDown={(e) => {\n const step = { ArrowLeft: -16, ArrowRight: 16 }[e.key];\n if (step === undefined) return;\n e.preventDefault();\n const id = h.column.id;\n const min = h.column.columnDef.minSize ?? 64;\n const max = h.column.columnDef.maxSize ?? 640;\n table.setColumnSizing((old) => ({ ...old, [id]: Math.max(min, Math.min(max, h.column.getSize() + step)) }));\n }}\n onMouseDown={h.getResizeHandler()}\n onTouchStart={h.getResizeHandler()}\n onDoubleClick={() => h.column.resetSize()}\n className=\"absolute top-8 right-0 bottom-8 w-8 cursor-col-resize rounded-pill after:absolute after:inset-y-0 after:right-0 after:w-1 after:bg-transparent after:transition-control group-hover/th:after:bg-line-strong focus-ring-inset\"\n />\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n <div\n ref={body}\n role=\"rowgroup\"\n className=\"overflow-x-auto scrollbar-quiet\"\n onScroll={(e) => {\n if (head.current && head.current.scrollLeft !== e.currentTarget.scrollLeft) head.current.scrollLeft = e.currentTarget.scrollLeft;\n }}\n >\n {error ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n <div role=\"alert\">\n <Empty\n size=\"compact\"\n title={t(\"dataTable.loadFailed\", \"Couldn't load these rows\")}\n actions={\n onRetry && (\n <Button size=\"sm\" onClick={onRetry}>\n {t(\"dataTable.tryAgain\", \"Try again\")}\n </Button>\n )\n }\n />\n </div>\n </div>\n </div>\n ) : loading && rows.length === 0 ? (\n Array.from({ length: 8 }, (_, r) => (\n <div key={r} role=\"row\" className={cn(\"grid\", KAESO_DATA_TABLE_VARIANTS.density[density].classes)} style={gridStyle}>\n {cols.map((c, i) => (\n <div key={c.id} role=\"cell\" className={cn(cellPad(i), c.columnDef.meta?.align === \"end\" && \"justify-end\")}>\n <Skeleton shape=\"line\" style={{ width: `${40 + ((r * 7 + i * 13) % 45)}%` }} />\n </div>\n ))}\n </div>\n ))\n ) : rows.length === 0 ? (\n <div role=\"row\">\n <div role=\"cell\" aria-colspan={cols.length} className=\"block\">\n {empty ?? (\n <Empty size=\"compact\" title={t(\"dataTable.noRows\", \"No rows\")} description={t(\"dataTable.noMatches\", \"Nothing matches these filters.\")} />\n )}\n </div>\n </div>\n ) : virtual ? (\n <div className=\"relative\" style={{ height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((v) =>\n renderRow(rows[v.index]!, v.index, {\n position: \"absolute\",\n top: 0,\n left: 0,\n transform: `translateY(${Math.round(v.start - scrollMargin)}px)`,\n }),\n )}\n </div>\n ) : (\n rows.map((r, i) => renderRow(r, i))\n )}\n </div>\n </div>\n {hasMore && <Pagination variant=\"load-more\" hasMore loading={loadingMore} onLoadMore={onLoadMore} />}\n </div>\n );\n}\n\nconst DataTableBase = /* @__PURE__ */ forwardRef(DataTableInner);\nif (process.env.NODE_ENV !== \"production\") DataTableBase.displayName = \"DataTable\";\nexport const DataTable = DataTableBase as unknown as <T>(\n p: DataTableProps<T> & { ref?: React.Ref<HTMLDivElement> | undefined },\n) => ReturnType<typeof DataTableInner>;\n","import type { ColumnDef } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\nimport { formatDate, formatDuration, formatRelative, formatTokens, formatUSD, formatNumber } from \"../../format/index.js\";\nimport { StatusDot, type StatusDotProps } from \"../status-dot/status-dot.js\";\nimport { Avatar } from \"../avatar/avatar.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { StatusTone } from \"../../utils/tone.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\ntype Base<T = never> = {\n id: string;\n header: ReactNode;\n size?: number | undefined;\n priority?: number | undefined;\n grow?: boolean | undefined;\n minWidth?: number | undefined;\n tone?: ((row: T) => StatusTone | undefined) | undefined;\n};\ntype Accessor<T, V> = (row: T) => V;\n\nfunction make<T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: object = {},\n sortingFn?: ColumnDef<T, V>[\"sortingFn\"],\n): ColumnDef<T, V> {\n return {\n id: b.id,\n header: () => b.header,\n accessorFn: get,\n cell: (ctx) => cell(ctx.getValue() as V, ctx.row.original),\n ...(b.size ? { size: b.size } : {}),\n ...(sortingFn ? { sortingFn } : {}),\n meta: {\n ...(b.priority !== undefined ? { priority: b.priority } : {}),\n ...(b.grow ? { grow: true } : {}),\n ...(b.minWidth !== undefined ? { minWidth: b.minWidth } : {}),\n ...(b.tone ? { tone: b.tone } : {}),\n ...meta,\n },\n };\n}\n\nfunction Tokens({ value }: { value: number }) {\n const t = useUiText();\n const exact = t(\"dataTable.tokenCount\", \"{count} tokens\", { count: formatNumber(value) });\n return (\n <Tooltip content={exact}>\n <span>\n <span aria-hidden>{formatTokens(value)}</span>\n <span className=\"sr-only\">{exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nfunction RelativeTime({ value, now }: { value: string | Date; now: Date | number }) {\n const exact = formatDate(value, { time: true, seconds: true });\n return (\n <Tooltip content={`${exact} · ${formatDate(value, { time: true, utc: true })}`} shape=\"multiline\">\n <span className=\"text-fg-secondary\">\n <time dateTime={new Date(value).toISOString()}>{formatRelative(value, now)}</time>\n <span className=\"sr-only\"> {exact}</span>\n </span>\n </Tooltip>\n );\n}\n\nexport const col = {\n text: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { text: (r: T) => get(r) }),\n mono: <T,>(b: Base<T>, get: Accessor<T, string>) => make(b, get, (v) => v, { mono: true, text: (r: T) => get(r) }),\n number: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatNumber(v), { align: \"end\" }),\n money: <T,>(b: Base<T>, get: Accessor<T, string>, options: { decimals?: number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => formatUSD(v, options.decimals === undefined ? {} : { decimals: options.decimals }),\n { align: \"end\", mono: false },\n (a, c, id) => Number(a.getValue(id)) - Number(c.getValue(id)),\n ),\n tokens: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => <Tokens value={v} />, { align: \"end\" }),\n duration: <T,>(b: Base<T>, get: Accessor<T, number>) => make(b, get, (v) => formatDuration(v), { align: \"end\" }),\n date: <T,>(b: Base<T>, get: Accessor<T, string | Date>) =>\n make(b, get, (v) => <time dateTime={new Date(v).toISOString()}>{formatDate(v, { time: true })}</time>, {}, \"datetime\"),\n relative: <T,>(b: Base<T>, get: Accessor<T, string | Date>, options: { now?: Date | number | undefined } = {}) =>\n make(\n b,\n get,\n (v) => <RelativeTime value={v} now={options.now ?? Date.now()} />,\n {},\n (a, c, id) => new Date(a.getValue(id) as string).getTime() - new Date(c.getValue(id) as string).getTime(),\n ),\n status: <T,>(b: Base<T>, get: Accessor<T, { tone: NonNullable<StatusDotProps[\"tone\"]>; label: string }>) =>\n make(b, get, (v) => <StatusDot tone={v.tone}>{v.label}</StatusDot>, { text: undefined }),\n avatar: <T,>(b: Base<T>, get: Accessor<T, { name: string; src?: string | undefined }>) =>\n make(b, get, (v) => (\n <span className=\"inline-flex min-w-0 items-center gap-8\">\n <Avatar name={v.name} {...(v.src ? { src: v.src } : {})} size={24} decorative />\n <span className=\"truncate\">{v.name}</span>\n </span>\n )),\n custom: <T, V>(\n b: Base<T>,\n get: Accessor<T, V>,\n cell: (v: V, row: T) => ReactNode,\n meta: { align?: \"start\" | \"end\" | undefined; mono?: boolean | undefined } = {},\n ) => make(b, get, cell, meta),\n};\n"],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ import { t } from "../chunks/use-controllable-B5Fd12Bx.js";
|
|
|
4
4
|
import { i as n, n as r } from "../chunks/context-BELWW79w.js";
|
|
5
5
|
import { formatDate as i, formatDateRange as a } from "../format.js";
|
|
6
6
|
import { t as o } from "../chunks/icon-D7ja-_Yk.js";
|
|
7
|
-
import { c as s,
|
|
7
|
+
import { c as s, l as c } from "../chunks/tooltip-OcwO0VUT.js";
|
|
8
8
|
import { a as l, o as u, s as d } from "../chunks/field-TviMvYa2.js";
|
|
9
|
-
import { i as f, n as p } from "../chunks/input-group-
|
|
9
|
+
import { i as f, n as p } from "../chunks/input-group-DQ_4DoXg.js";
|
|
10
10
|
import { n as m, r as h } from "../chunks/popover-root-D3q89WNF.js";
|
|
11
11
|
import { r as g, t as _ } from "../chunks/hidden-description-B2zSmLcn.js";
|
|
12
12
|
import { t as v } from "../chunks/when-idle-Cy3pinqO.js";
|
|
@@ -18,7 +18,7 @@ var M = { size: {
|
|
|
18
18
|
sm: { classes: "h-32 pl-10 pr-12 gap-6 text-body" },
|
|
19
19
|
md: { classes: "h-36 pl-14 pr-16 gap-8 text-body" },
|
|
20
20
|
lg: { classes: "h-40 pl-16 pr-18 gap-8 text-body" }
|
|
21
|
-
} }, N = { size: "md" }, P = /* @__PURE__ */
|
|
21
|
+
} }, N = { size: "md" }, P = /* @__PURE__ */ s(() => import("../chunks/date-popup-CPA_zt6o.js"), { base: () => import.meta.url }), F = /* @__PURE__ */ s(() => import("../chunks/range-popup-CRyWYUB1.js"), { base: () => import.meta.url }), I = () => c(P), L = () => c(F);
|
|
22
22
|
function R(e) {
|
|
23
23
|
let [t, n] = E(!1), [, r] = w((e) => e + 1, 0), i = !!e.current(), a = t && !i;
|
|
24
24
|
x(() => {
|
|
@@ -86,7 +86,9 @@ var z = /* @__PURE__ */ y(function({ size: t, children: n, placeholder: r, inval
|
|
|
86
86
|
children: n
|
|
87
87
|
})]
|
|
88
88
|
}), j.node] });
|
|
89
|
-
})
|
|
89
|
+
});
|
|
90
|
+
process.env.NODE_ENV !== "production" && (z.displayName = "TriggerButton");
|
|
91
|
+
var B = /* @__PURE__ */ y(function(r, a) {
|
|
90
92
|
let { value: o, defaultValue: s = null, onValueChange: c, placeholder: f, size: p = "md", weekStartsOn: g = 1, disabledDays: _, disabled: v, id: y, className: x, label: S, description: C, error: w, optional: T, required: E, layout: D, "aria-label": A, "aria-labelledby": j, "data-force": M } = r, N = l(), F = u(r), L = n(), B = {
|
|
91
93
|
...A ? { "aria-label": A } : {},
|
|
92
94
|
...j ? { "aria-labelledby": j } : {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.js","names":["_Fragment","__icon_Calendar03Icon","__icon_Clock01Icon","cn","useUiText","englishText","Icon","preload","lazyModule","useField","useFieldControl","withField","KAESO_INPUT_GROUP_VARIANTS","InputGroup","PopoverRoot","PopoverTrigger","useHiddenDescription","joinIds","whenIdle","Fragment$1","KAESO_DATE_PICKER_VARIANTS","KAESO_DATE_PICKER_DEFAULT_VARIANTS","datePopup","rangePopup","preloadDatePopup","preloadRangePopup","useLoadedOpen","wanted","setWanted","useState","arrived","useReducer","n","loaded","popup","pending","live","setOpen","useCallback","next","was","TriggerButton","ariaLabel","labelledBy","rest","valueId","useId","purpose","self","useRef","setRef","el","ref","useEffect","doc","onKeyDown","onCancel","onPointerDown","control","controlProps","describedBy","labelled","id","invalid","force","size","className","Calendar03Icon","placeholder","DatePicker","ariaLabelledBy","props","field","fc","t","naming","label","date","setDate","useControllable","value","defaultValue","onValueChange","cancel","DatePopup","description","error","formatDate","day","startOfDay","d","rangePresets","DEFAULT_RANGE_PRESETS","presetId","p","presetIdOf","rangeDays","r","DateRangePicker","presetsProp","presetProp","defaults","useMemo","presets","inner","setInner","range","picked","setPicked","days","preset","opening","setOpening","openRange","open","RangePopup","display","formatDateRange","from","KAESO_TIME_INPUT_VARIANTS","KAESO_TIME_INPUT_DEFAULT_VARIANTS","pad","TimeInput","labelId","time","setTime","draft","setDraftState","setDraft","h","m","minutes","shown","part","set","hh","mm","commit","v","seg","e","Clock01Icon","utc"],"sources":["../../src/components/date-picker/date-picker.tsx","../../src/components/date-picker/time-input.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useMemo, useReducer, useRef, useState, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport type { CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Calendar03Icon as __icon_Calendar03Icon } from \"@hugeicons/core-free-icons\";\nimport { PopoverRoot, PopoverTrigger } from \"../popover/popover-root.js\";\nimport { formatDate, formatDateRange } from \"../../format/index.js\";\nimport { lazyModule, preload, type LazyModule } from \"../../utils/lazy-module.js\";\nimport { whenIdle } from \"../../utils/when-idle.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\nimport { joinIds, useHiddenDescription } from \"../../utils/hidden-description.js\";\n\nexport const KAESO_DATE_PICKER_VARIANTS = {\n size: {\n sm: { classes: \"h-32 pl-10 pr-12 gap-6 text-body\" },\n md: { classes: \"h-36 pl-14 pr-16 gap-8 text-body\" },\n lg: { classes: \"h-40 pl-16 pr-18 gap-8 text-body\" },\n },\n} as const;\nexport const KAESO_DATE_PICKER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst datePopup = /* @__PURE__ */ lazyModule(() => import(\"./date-popup.js\"), { base: () => import.meta.url });\nconst rangePopup = /* @__PURE__ */ lazyModule(() => import(\"./range-popup.js\"), { base: () => import.meta.url });\nconst preloadDatePopup = () => preload(datePopup);\nconst preloadRangePopup = () => preload(rangePopup);\n\ninterface LoadedOpen {\n open: boolean;\n pending: boolean;\n setOpen: (open: boolean) => void;\n}\n\nfunction useLoadedOpen(popup: LazyModule<unknown>): LoadedOpen {\n const [wanted, setWanted] = useState(false);\n const [, arrived] = useReducer((n: number) => n + 1, 0);\n const loaded = !!popup.current();\n const pending = wanted && !loaded;\n useEffect(() => {\n if (!pending) return;\n let live = true;\n popup.load().then(\n () => live && arrived(),\n () => live && setWanted(false),\n );\n return () => {\n live = false;\n };\n }, [pending, popup]);\n const setOpen = useCallback((next: boolean) => setWanted((was) => (next && was && !popup.current() ? false : next)), [popup]);\n return { open: wanted && loaded, pending, setOpen };\n}\n\ninterface TriggerButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n size: keyof typeof KAESO_DATE_PICKER_VARIANTS.size;\n children: ReactNode;\n placeholder: boolean;\n invalid?: boolean | undefined;\n controlProps?: object | undefined;\n force?: string | undefined;\n preload: () => void;\n pending: boolean;\n onCancel: () => void;\n labelled: boolean;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n}\n\nconst TriggerButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, TriggerButtonProps>(function TriggerButton(\n {\n size,\n children,\n placeholder,\n invalid,\n disabled,\n id,\n controlProps,\n force,\n preload,\n pending,\n onCancel,\n labelled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": labelledBy,\n className,\n ...rest\n },\n ref,\n) {\n const valueId = useId();\n const purpose = useHiddenDescription(labelledBy ? undefined : ariaLabel);\n const self = useRef<HTMLButtonElement | null>(null);\n const setRef = useCallback(\n (el: HTMLButtonElement | null) => {\n self.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref],\n );\n useEffect(() => whenIdle(preload), [preload]);\n useEffect(() => {\n if (!pending) return;\n const doc = self.current?.ownerDocument ?? document;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopPropagation();\n onCancel();\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!self.current?.contains(e.target as Node)) onCancel();\n };\n doc.addEventListener(\"keydown\", onKeyDown, true);\n doc.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n doc.removeEventListener(\"keydown\", onKeyDown, true);\n doc.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }, [pending, onCancel]);\n const control = (controlProps ?? {}) as { \"aria-describedby\"?: string | undefined };\n const describedBy = joinIds(purpose.id, labelled && !labelledBy && valueId, control[\"aria-describedby\"]);\n return (\n <>\n <button\n ref={setRef}\n type=\"button\"\n {...rest}\n {...(pending ? { \"aria-expanded\": true, \"data-popup-open\": \"\" } : {})}\n onPointerEnter={(e) => {\n preload();\n rest.onPointerEnter?.(e);\n }}\n onFocus={(e) => {\n preload();\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n if (pending && e.relatedTarget && !e.currentTarget.contains(e.relatedTarget)) onCancel();\n rest.onBlur?.(e);\n }}\n disabled={disabled}\n {...control}\n {...(labelledBy ? { \"aria-labelledby\": `${labelledBy} ${valueId}` } : {})}\n {...(describedBy ? { \"aria-describedby\": describedBy } : {})}\n {...(id ? { id } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"inline-flex min-w-0 cursor-pointer items-center rounded-pill font-medium whitespace-nowrap material-selector transition-control disabled:cursor-not-allowed\",\n KAESO_DATE_PICKER_VARIANTS.size[size].classes,\n className,\n )}\n >\n <Icon icon={__icon_Calendar03Icon} size=\"sm\" className=\"text-fg-secondary\" />\n <span id={valueId} className={cn(\"truncate tabular\", placeholder && \"font-regular text-fg-tertiary\")}>\n {children}\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\n\nexport interface DatePickerProps extends FieldWrapProps {\n value?: Date | null | undefined;\n defaultValue?: Date | null | undefined;\n onValueChange?: ((value: Date | null) => void) | undefined;\n placeholder?: string | undefined;\n size?: keyof typeof KAESO_DATE_PICKER_VARIANTS.size | undefined;\n weekStartsOn?: CalendarProps[\"weekStartsOn\"] | undefined;\n disabledDays?: ((date: Date) => boolean) | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const DatePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [date, setDate] = useControllable<Date | null>(value, defaultValue, onValueChange);\n const { open, pending, setOpen } = useLoadedOpen(datePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const DatePopup = datePopup.current()?.DatePopup;\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={setOpen}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!date}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadDatePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {date ? formatDate(date) : (placeholder ?? t(\"datePicker.pickDate\", \"Pick a date\"))}\n </TriggerButton>\n </PopoverTrigger>\n {DatePopup && <DatePopup date={date} onDateChange={setDate} onClose={() => setOpen(false)} weekStartsOn={weekStartsOn} disabledDays={disabledDays} />}\n </PopoverRoot>\n </div>\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\") DatePicker.displayName = \"DatePicker\";\n\nexport interface DateRangePreset {\n id?: string | undefined;\n label: string;\n range: () => DateRange;\n}\n\nconst day = 86_400_000;\nconst startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\nfunction rangePresets(t: UiText): DateRangePreset[] {\n return [\n { id: \"Last 24 hours\", label: t(\"datePicker.last24Hours\", \"Last 24 hours\"), range: () => ({ from: new Date(Date.now() - day), to: new Date() }) },\n { id: \"Last 7 days\", label: t(\"datePicker.last7Days\", \"Last 7 days\"), range: () => ({ from: startOfDay(new Date(Date.now() - 6 * day)), to: new Date() }) },\n {\n id: \"Last 30 days\",\n label: t(\"datePicker.last30Days\", \"Last 30 days\"),\n range: () => ({ from: startOfDay(new Date(Date.now() - 29 * day)), to: new Date() }),\n },\n {\n id: \"This month\",\n label: t(\"datePicker.thisMonth\", \"This month\"),\n range: () => ({ from: new Date(new Date().getFullYear(), new Date().getMonth(), 1), to: new Date() }),\n },\n {\n id: \"Last month\",\n label: t(\"datePicker.lastMonth\", \"Last month\"),\n range: () => {\n const n = new Date();\n return { from: new Date(n.getFullYear(), n.getMonth() - 1, 1), to: new Date(n.getFullYear(), n.getMonth(), 0) };\n },\n },\n ];\n}\nexport const DEFAULT_RANGE_PRESETS: DateRangePreset[] = /* @__PURE__ */ rangePresets(englishText);\nconst presetId = (p: DateRangePreset) => p.id ?? p.label;\nconst presetIdOf = (p: DateRangePreset | undefined) => (p ? presetId(p) : null);\n\nexport interface DateRangePickerProps extends Omit<DatePickerProps, \"value\" | \"defaultValue\" | \"onValueChange\"> {\n value?: DateRange | null | undefined;\n defaultValue?: DateRange | null | undefined;\n onValueChange?: ((value: DateRange | null, details: { preset: string | null }) => void) | undefined;\n presets?: DateRangePreset[] | undefined;\n preset?: string | null | undefined;\n}\n\nconst rangeDays = (r: DateRange | null | undefined) => `${r?.from?.toDateString()}/${r?.to?.toDateString()}`;\n\nexport const DateRangePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n presets: presetsProp,\n preset: presetProp,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const defaults = useMemo(() => rangePresets(t), [t]);\n const presets = presetsProp ?? defaults;\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [inner, setInner] = useState<DateRange | null>(defaultValue);\n const range = value !== undefined ? value : inner;\n const [picked, setPicked] = useState<string | null>(null);\n const days = rangeDays(range);\n const preset = presetProp !== undefined ? presetProp : presetIdOf(presets.find((p) => presetId(p) === picked && rangeDays(p.range()) === days));\n const { open, pending, setOpen } = useLoadedOpen(rangePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const [opening, setOpening] = useState(0);\n const openRange = useCallback(\n (next: boolean) => {\n if (next && !open) setOpening((n) => n + 1);\n setOpen(next);\n },\n [open, setOpen],\n );\n const RangePopup = rangePopup.current()?.RangePopup;\n const presetName = preset === null ? null : (presets.find((p) => presetId(p) === preset)?.label ?? preset);\n const display =\n presetName ??\n (range?.from && range.to\n ? formatDateRange(range.from, range.to)\n : range?.from\n ? formatDate(range.from)\n : (placeholder ?? t(\"datePicker.pickRange\", \"Pick a range\")));\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={openRange}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!range?.from && !preset}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadRangePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {display}\n </TriggerButton>\n </PopoverTrigger>\n {RangePopup && (\n <RangePopup\n key={opening}\n range={range}\n preset={preset}\n presets={presets}\n onPick={(next, from) => {\n if (value === undefined) setInner(next);\n setPicked(from);\n onValueChange?.(next, { preset: from });\n setOpen(false);\n }}\n onClose={() => setOpen(false)}\n weekStartsOn={weekStartsOn}\n disabledDays={disabledDays}\n />\n )}\n </PopoverRoot>\n </div>\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\") DateRangePicker.displayName = \"DateRangePicker\";\n\nexport type { DateRange };\n","import type * as React from \"react\";\nimport { forwardRef, useRef, useState, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { InputGroup, KAESO_INPUT_GROUP_VARIANTS, type InputSize } from \"../input/input-group.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Clock01Icon as __icon_Clock01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TIME_INPUT_VARIANTS = {\n size: KAESO_INPUT_GROUP_VARIANTS.size,\n} as const;\nexport const KAESO_TIME_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface TimeInputProps extends FieldWrapProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n size?: InputSize | undefined;\n disabled?: boolean | undefined;\n utc?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst pad = (n: number) => String(n).padStart(2, \"0\");\n\nexport const TimeInput = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeInputProps>(function TimeInput(props, ref) {\n const {\n value,\n defaultValue = \"09:00\",\n onValueChange,\n size = \"md\",\n disabled,\n utc,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const labelId = field ? field.labelId : label && fc.wrapId ? `${fc.wrapId}-label` : undefined;\n const [time, setTime] = useControllable(value, defaultValue, onValueChange);\n const [draft, setDraftState] = useState<{ h?: string | undefined; m?: string | undefined }>({});\n const pending = useRef(draft);\n const setDraft = (next: { h?: string | undefined; m?: string | undefined }) => {\n pending.current = next;\n setDraftState(next);\n };\n const [h = \"00\", m = \"00\"] = time.split(\":\");\n const minutes = useRef<HTMLInputElement>(null);\n const shown = (part: \"h\" | \"m\") => pending.current[part] ?? (part === \"h\" ? h : m);\n const set = (hh: number, mm: number) => {\n setDraft({});\n const next = `${pad(((hh % 24) + 24) % 24)}:${pad(((mm % 60) + 60) % 60)}`;\n if (next !== time) setTime(next);\n };\n const commit = (part: \"h\" | \"m\", v: string) => {\n const n = Number(v || 0);\n if (part === \"h\") set(Math.min(23, n), Number(shown(\"m\") || 0));\n else set(Number(shown(\"h\") || 0), Math.min(59, n));\n };\n const seg = (part: \"h\" | \"m\") => ({\n inputMode: \"numeric\" as const,\n maxLength: 2,\n disabled,\n value: draft[part] ?? (part === \"h\" ? h : m),\n onFocus: (e: React.FocusEvent<HTMLInputElement>) => e.target.select(),\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n const d = e.key === \"ArrowUp\" ? 1 : e.key === \"ArrowDown\" ? -1 : 0;\n if (d) {\n e.preventDefault();\n const hh = Number(shown(\"h\") || 0);\n const mm = Number(shown(\"m\") || 0);\n if (part === \"h\") set(hh + d, mm);\n else set(hh, mm + d);\n }\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value.replace(/\\D/g, \"\").slice(0, 2);\n if (v.length < 2) return setDraft({ ...pending.current, [part]: v });\n commit(part, v);\n if (part === \"h\") minutes.current?.focus();\n },\n onBlur: () => {\n const v = pending.current[part];\n if (v !== undefined) commit(part, v);\n },\n className: \"w-20 flex-none bg-transparent text-center tabular text-fg outline-none coarse:w-24\",\n });\n const control = (\n <InputGroup\n ref={ref}\n size={size}\n leadingIcon\n disabled={disabled}\n invalid={!!error}\n className={cn(\"w-auto\", !(label || description || error) && className)}\n {...(force ? { \"data-force\": force } : {})}\n role=\"group\"\n {...(labelId && !ariaLabel ? { \"aria-labelledby\": labelId } : { \"aria-label\": ariaLabel ?? t(\"timeInput.time\", \"Time\") })}\n >\n <Icon icon={__icon_Clock01Icon} size=\"sm\" className=\"text-fg-tertiary\" />\n <span className=\"flex items-center gap-2\">\n <input {...seg(\"h\")} aria-label={t(\"timeInput.hours\", \"Hours\")} {...(id ? { id } : {})} {...fc.controlProps} />\n <span className=\"text-fg-tertiary\">:</span>\n <input ref={minutes} {...seg(\"m\")} aria-label={t(\"timeInput.minutes\", \"Minutes\")} />\n </span>\n {utc && <InputGroup.Addon>UTC</InputGroup.Addon>}\n </InputGroup>\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\") TimeInput.displayName = \"TimeInput\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date-picker.js","names":["_Fragment","__icon_Calendar03Icon","__icon_Clock01Icon","cn","useUiText","englishText","Icon","lazyModule","preload","useField","useFieldControl","withField","KAESO_INPUT_GROUP_VARIANTS","InputGroup","PopoverRoot","PopoverTrigger","useHiddenDescription","joinIds","whenIdle","Fragment$1","KAESO_DATE_PICKER_VARIANTS","KAESO_DATE_PICKER_DEFAULT_VARIANTS","datePopup","rangePopup","preloadDatePopup","preloadRangePopup","useLoadedOpen","wanted","setWanted","useState","arrived","useReducer","n","loaded","popup","pending","live","setOpen","useCallback","next","was","TriggerButton","ariaLabel","labelledBy","rest","valueId","useId","purpose","self","useRef","setRef","el","ref","useEffect","doc","onKeyDown","onCancel","onPointerDown","control","controlProps","describedBy","labelled","id","invalid","force","size","className","Calendar03Icon","placeholder","DatePicker","ariaLabelledBy","props","field","fc","t","naming","label","date","setDate","useControllable","value","defaultValue","onValueChange","cancel","DatePopup","description","error","formatDate","day","startOfDay","d","rangePresets","DEFAULT_RANGE_PRESETS","presetId","p","presetIdOf","rangeDays","r","DateRangePicker","presetsProp","presetProp","defaults","useMemo","presets","inner","setInner","range","picked","setPicked","days","preset","opening","setOpening","openRange","open","RangePopup","display","formatDateRange","from","KAESO_TIME_INPUT_VARIANTS","KAESO_TIME_INPUT_DEFAULT_VARIANTS","pad","TimeInput","labelId","time","setTime","draft","setDraftState","setDraft","h","m","minutes","shown","part","set","hh","mm","commit","v","seg","e","Clock01Icon","utc"],"sources":["../../src/components/date-picker/date-picker.tsx","../../src/components/date-picker/time-input.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useMemo, useReducer, useRef, useState, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport type { CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Calendar03Icon as __icon_Calendar03Icon } from \"@hugeicons/core-free-icons\";\nimport { PopoverRoot, PopoverTrigger } from \"../popover/popover-root.js\";\nimport { formatDate, formatDateRange } from \"../../format/index.js\";\nimport { lazyModule, preload, type LazyModule } from \"../../utils/lazy-module.js\";\nimport { whenIdle } from \"../../utils/when-idle.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\nimport { joinIds, useHiddenDescription } from \"../../utils/hidden-description.js\";\n\nexport const KAESO_DATE_PICKER_VARIANTS = {\n size: {\n sm: { classes: \"h-32 pl-10 pr-12 gap-6 text-body\" },\n md: { classes: \"h-36 pl-14 pr-16 gap-8 text-body\" },\n lg: { classes: \"h-40 pl-16 pr-18 gap-8 text-body\" },\n },\n} as const;\nexport const KAESO_DATE_PICKER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst datePopup = /* @__PURE__ */ lazyModule(() => import(\"./date-popup.js\"), { base: () => import.meta.url });\nconst rangePopup = /* @__PURE__ */ lazyModule(() => import(\"./range-popup.js\"), { base: () => import.meta.url });\nconst preloadDatePopup = () => preload(datePopup);\nconst preloadRangePopup = () => preload(rangePopup);\n\ninterface LoadedOpen {\n open: boolean;\n pending: boolean;\n setOpen: (open: boolean) => void;\n}\n\nfunction useLoadedOpen(popup: LazyModule<unknown>): LoadedOpen {\n const [wanted, setWanted] = useState(false);\n const [, arrived] = useReducer((n: number) => n + 1, 0);\n const loaded = !!popup.current();\n const pending = wanted && !loaded;\n useEffect(() => {\n if (!pending) return;\n let live = true;\n popup.load().then(\n () => live && arrived(),\n () => live && setWanted(false),\n );\n return () => {\n live = false;\n };\n }, [pending, popup]);\n const setOpen = useCallback((next: boolean) => setWanted((was) => (next && was && !popup.current() ? false : next)), [popup]);\n return { open: wanted && loaded, pending, setOpen };\n}\n\ninterface TriggerButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n size: keyof typeof KAESO_DATE_PICKER_VARIANTS.size;\n children: ReactNode;\n placeholder: boolean;\n invalid?: boolean | undefined;\n controlProps?: object | undefined;\n force?: string | undefined;\n preload: () => void;\n pending: boolean;\n onCancel: () => void;\n labelled: boolean;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n}\n\nconst TriggerButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, TriggerButtonProps>(function TriggerButton(\n {\n size,\n children,\n placeholder,\n invalid,\n disabled,\n id,\n controlProps,\n force,\n preload,\n pending,\n onCancel,\n labelled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": labelledBy,\n className,\n ...rest\n },\n ref,\n) {\n const valueId = useId();\n const purpose = useHiddenDescription(labelledBy ? undefined : ariaLabel);\n const self = useRef<HTMLButtonElement | null>(null);\n const setRef = useCallback(\n (el: HTMLButtonElement | null) => {\n self.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref],\n );\n useEffect(() => whenIdle(preload), [preload]);\n useEffect(() => {\n if (!pending) return;\n const doc = self.current?.ownerDocument ?? document;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopPropagation();\n onCancel();\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!self.current?.contains(e.target as Node)) onCancel();\n };\n doc.addEventListener(\"keydown\", onKeyDown, true);\n doc.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n doc.removeEventListener(\"keydown\", onKeyDown, true);\n doc.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }, [pending, onCancel]);\n const control = (controlProps ?? {}) as { \"aria-describedby\"?: string | undefined };\n const describedBy = joinIds(purpose.id, labelled && !labelledBy && valueId, control[\"aria-describedby\"]);\n return (\n <>\n <button\n ref={setRef}\n type=\"button\"\n {...rest}\n {...(pending ? { \"aria-expanded\": true, \"data-popup-open\": \"\" } : {})}\n onPointerEnter={(e) => {\n preload();\n rest.onPointerEnter?.(e);\n }}\n onFocus={(e) => {\n preload();\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n if (pending && e.relatedTarget && !e.currentTarget.contains(e.relatedTarget)) onCancel();\n rest.onBlur?.(e);\n }}\n disabled={disabled}\n {...control}\n {...(labelledBy ? { \"aria-labelledby\": `${labelledBy} ${valueId}` } : {})}\n {...(describedBy ? { \"aria-describedby\": describedBy } : {})}\n {...(id ? { id } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"inline-flex min-w-0 cursor-pointer items-center rounded-pill font-medium whitespace-nowrap material-selector transition-control disabled:cursor-not-allowed\",\n KAESO_DATE_PICKER_VARIANTS.size[size].classes,\n className,\n )}\n >\n <Icon icon={__icon_Calendar03Icon} size=\"sm\" className=\"text-fg-secondary\" />\n <span id={valueId} className={cn(\"truncate tabular\", placeholder && \"font-regular text-fg-tertiary\")}>\n {children}\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") TriggerButton.displayName = \"TriggerButton\";\n\nexport interface DatePickerProps extends FieldWrapProps {\n value?: Date | null | undefined;\n defaultValue?: Date | null | undefined;\n onValueChange?: ((value: Date | null) => void) | undefined;\n placeholder?: string | undefined;\n size?: keyof typeof KAESO_DATE_PICKER_VARIANTS.size | undefined;\n weekStartsOn?: CalendarProps[\"weekStartsOn\"] | undefined;\n disabledDays?: ((date: Date) => boolean) | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const DatePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [date, setDate] = useControllable<Date | null>(value, defaultValue, onValueChange);\n const { open, pending, setOpen } = useLoadedOpen(datePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const DatePopup = datePopup.current()?.DatePopup;\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={setOpen}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!date}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadDatePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {date ? formatDate(date) : (placeholder ?? t(\"datePicker.pickDate\", \"Pick a date\"))}\n </TriggerButton>\n </PopoverTrigger>\n {DatePopup && <DatePopup date={date} onDateChange={setDate} onClose={() => setOpen(false)} weekStartsOn={weekStartsOn} disabledDays={disabledDays} />}\n </PopoverRoot>\n </div>\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\") DatePicker.displayName = \"DatePicker\";\n\nexport interface DateRangePreset {\n id?: string | undefined;\n label: string;\n range: () => DateRange;\n}\n\nconst day = 86_400_000;\nconst startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\nfunction rangePresets(t: UiText): DateRangePreset[] {\n return [\n { id: \"Last 24 hours\", label: t(\"datePicker.last24Hours\", \"Last 24 hours\"), range: () => ({ from: new Date(Date.now() - day), to: new Date() }) },\n { id: \"Last 7 days\", label: t(\"datePicker.last7Days\", \"Last 7 days\"), range: () => ({ from: startOfDay(new Date(Date.now() - 6 * day)), to: new Date() }) },\n {\n id: \"Last 30 days\",\n label: t(\"datePicker.last30Days\", \"Last 30 days\"),\n range: () => ({ from: startOfDay(new Date(Date.now() - 29 * day)), to: new Date() }),\n },\n {\n id: \"This month\",\n label: t(\"datePicker.thisMonth\", \"This month\"),\n range: () => ({ from: new Date(new Date().getFullYear(), new Date().getMonth(), 1), to: new Date() }),\n },\n {\n id: \"Last month\",\n label: t(\"datePicker.lastMonth\", \"Last month\"),\n range: () => {\n const n = new Date();\n return { from: new Date(n.getFullYear(), n.getMonth() - 1, 1), to: new Date(n.getFullYear(), n.getMonth(), 0) };\n },\n },\n ];\n}\nexport const DEFAULT_RANGE_PRESETS: DateRangePreset[] = /* @__PURE__ */ rangePresets(englishText);\nconst presetId = (p: DateRangePreset) => p.id ?? p.label;\nconst presetIdOf = (p: DateRangePreset | undefined) => (p ? presetId(p) : null);\n\nexport interface DateRangePickerProps extends Omit<DatePickerProps, \"value\" | \"defaultValue\" | \"onValueChange\"> {\n value?: DateRange | null | undefined;\n defaultValue?: DateRange | null | undefined;\n onValueChange?: ((value: DateRange | null, details: { preset: string | null }) => void) | undefined;\n presets?: DateRangePreset[] | undefined;\n preset?: string | null | undefined;\n}\n\nconst rangeDays = (r: DateRange | null | undefined) => `${r?.from?.toDateString()}/${r?.to?.toDateString()}`;\n\nexport const DateRangePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n presets: presetsProp,\n preset: presetProp,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const defaults = useMemo(() => rangePresets(t), [t]);\n const presets = presetsProp ?? defaults;\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [inner, setInner] = useState<DateRange | null>(defaultValue);\n const range = value !== undefined ? value : inner;\n const [picked, setPicked] = useState<string | null>(null);\n const days = rangeDays(range);\n const preset = presetProp !== undefined ? presetProp : presetIdOf(presets.find((p) => presetId(p) === picked && rangeDays(p.range()) === days));\n const { open, pending, setOpen } = useLoadedOpen(rangePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const [opening, setOpening] = useState(0);\n const openRange = useCallback(\n (next: boolean) => {\n if (next && !open) setOpening((n) => n + 1);\n setOpen(next);\n },\n [open, setOpen],\n );\n const RangePopup = rangePopup.current()?.RangePopup;\n const presetName = preset === null ? null : (presets.find((p) => presetId(p) === preset)?.label ?? preset);\n const display =\n presetName ??\n (range?.from && range.to\n ? formatDateRange(range.from, range.to)\n : range?.from\n ? formatDate(range.from)\n : (placeholder ?? t(\"datePicker.pickRange\", \"Pick a range\")));\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={openRange}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!range?.from && !preset}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadRangePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {display}\n </TriggerButton>\n </PopoverTrigger>\n {RangePopup && (\n <RangePopup\n key={opening}\n range={range}\n preset={preset}\n presets={presets}\n onPick={(next, from) => {\n if (value === undefined) setInner(next);\n setPicked(from);\n onValueChange?.(next, { preset: from });\n setOpen(false);\n }}\n onClose={() => setOpen(false)}\n weekStartsOn={weekStartsOn}\n disabledDays={disabledDays}\n />\n )}\n </PopoverRoot>\n </div>\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\") DateRangePicker.displayName = \"DateRangePicker\";\n\nexport type { DateRange };\n","import type * as React from \"react\";\nimport { forwardRef, useRef, useState, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { InputGroup, KAESO_INPUT_GROUP_VARIANTS, type InputSize } from \"../input/input-group.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Clock01Icon as __icon_Clock01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TIME_INPUT_VARIANTS = {\n size: KAESO_INPUT_GROUP_VARIANTS.size,\n} as const;\nexport const KAESO_TIME_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface TimeInputProps extends FieldWrapProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n size?: InputSize | undefined;\n disabled?: boolean | undefined;\n utc?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst pad = (n: number) => String(n).padStart(2, \"0\");\n\nexport const TimeInput = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeInputProps>(function TimeInput(props, ref) {\n const {\n value,\n defaultValue = \"09:00\",\n onValueChange,\n size = \"md\",\n disabled,\n utc,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const labelId = field ? field.labelId : label && fc.wrapId ? `${fc.wrapId}-label` : undefined;\n const [time, setTime] = useControllable(value, defaultValue, onValueChange);\n const [draft, setDraftState] = useState<{ h?: string | undefined; m?: string | undefined }>({});\n const pending = useRef(draft);\n const setDraft = (next: { h?: string | undefined; m?: string | undefined }) => {\n pending.current = next;\n setDraftState(next);\n };\n const [h = \"00\", m = \"00\"] = time.split(\":\");\n const minutes = useRef<HTMLInputElement>(null);\n const shown = (part: \"h\" | \"m\") => pending.current[part] ?? (part === \"h\" ? h : m);\n const set = (hh: number, mm: number) => {\n setDraft({});\n const next = `${pad(((hh % 24) + 24) % 24)}:${pad(((mm % 60) + 60) % 60)}`;\n if (next !== time) setTime(next);\n };\n const commit = (part: \"h\" | \"m\", v: string) => {\n const n = Number(v || 0);\n if (part === \"h\") set(Math.min(23, n), Number(shown(\"m\") || 0));\n else set(Number(shown(\"h\") || 0), Math.min(59, n));\n };\n const seg = (part: \"h\" | \"m\") => ({\n inputMode: \"numeric\" as const,\n maxLength: 2,\n disabled,\n value: draft[part] ?? (part === \"h\" ? h : m),\n onFocus: (e: React.FocusEvent<HTMLInputElement>) => e.target.select(),\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n const d = e.key === \"ArrowUp\" ? 1 : e.key === \"ArrowDown\" ? -1 : 0;\n if (d) {\n e.preventDefault();\n const hh = Number(shown(\"h\") || 0);\n const mm = Number(shown(\"m\") || 0);\n if (part === \"h\") set(hh + d, mm);\n else set(hh, mm + d);\n }\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value.replace(/\\D/g, \"\").slice(0, 2);\n if (v.length < 2) return setDraft({ ...pending.current, [part]: v });\n commit(part, v);\n if (part === \"h\") minutes.current?.focus();\n },\n onBlur: () => {\n const v = pending.current[part];\n if (v !== undefined) commit(part, v);\n },\n className: \"w-20 flex-none bg-transparent text-center tabular text-fg outline-none coarse:w-24\",\n });\n const control = (\n <InputGroup\n ref={ref}\n size={size}\n leadingIcon\n disabled={disabled}\n invalid={!!error}\n className={cn(\"w-auto\", !(label || description || error) && className)}\n {...(force ? { \"data-force\": force } : {})}\n role=\"group\"\n {...(labelId && !ariaLabel ? { \"aria-labelledby\": labelId } : { \"aria-label\": ariaLabel ?? t(\"timeInput.time\", \"Time\") })}\n >\n <Icon icon={__icon_Clock01Icon} size=\"sm\" className=\"text-fg-tertiary\" />\n <span className=\"flex items-center gap-2\">\n <input {...seg(\"h\")} aria-label={t(\"timeInput.hours\", \"Hours\")} {...(id ? { id } : {})} {...fc.controlProps} />\n <span className=\"text-fg-tertiary\">:</span>\n <input ref={minutes} {...seg(\"m\")} aria-label={t(\"timeInput.minutes\", \"Minutes\")} />\n </span>\n {utc && <InputGroup.Addon>UTC</InputGroup.Addon>}\n </InputGroup>\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\") TimeInput.displayName = \"TimeInput\";\n"],"mappings":"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"}
|