@logicplanes/kaeso-ui 0.4.7 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/NOTICE.md +1 -1
  2. package/ai/component-guides.md +36 -2
  3. package/ai/component-registry.json +67 -5
  4. package/ai/component-registry.md +23 -5
  5. package/ai/icons.md +1 -1
  6. package/ai/tokens.md +1 -1
  7. package/dist/blocks/delete-resource.js +1 -1
  8. package/dist/blocks/pages.js +2 -2
  9. package/dist/blocks/resource-list.js +3 -3
  10. package/dist/chunks/{app-frame-CfJ7s3Q0.js → app-frame-D8sGcD0v.js} +5 -5
  11. package/dist/chunks/{app-frame-CfJ7s3Q0.js.map → app-frame-D8sGcD0v.js.map} +1 -1
  12. package/dist/chunks/{banner-B3DGLTBu.js → banner-BinTH032.js} +2 -2
  13. package/dist/chunks/{banner-B3DGLTBu.js.map → banner-BinTH032.js.map} +1 -1
  14. package/dist/chunks/{button-IblhXUyZ.js → button-DrmFgdIi.js} +2 -2
  15. package/dist/chunks/button-DrmFgdIi.js.map +1 -0
  16. package/dist/chunks/{checkbox-9tbimmF3.js → checkbox-ahl1SOqU.js} +2 -2
  17. package/dist/chunks/{checkbox-9tbimmF3.js.map → checkbox-ahl1SOqU.js.map} +1 -1
  18. package/dist/chunks/{code-block-KIvuE8jg.js → code-block-CE3H3nMu.js} +3 -3
  19. package/dist/chunks/{code-block-KIvuE8jg.js.map → code-block-CE3H3nMu.js.map} +1 -1
  20. package/dist/chunks/{code-block-64e-Cy1S.js → code-block-O_EPmMIQ.js} +2 -2
  21. package/dist/chunks/{code-block-64e-Cy1S.js.map → code-block-O_EPmMIQ.js.map} +1 -1
  22. package/dist/chunks/{combobox-DkcjkWc6.js → combobox-DghYPLVQ.js} +7 -3
  23. package/dist/chunks/combobox-DghYPLVQ.js.map +1 -0
  24. package/dist/chunks/{command-list-CypqsC4T.js → command-list-BUmEaaBi.js} +3 -3
  25. package/dist/chunks/{command-list-CypqsC4T.js.map → command-list-BUmEaaBi.js.map} +1 -1
  26. package/dist/chunks/{copy-button-CwU8t_9_.js → copy-button-DBPAA1g0.js} +2 -2
  27. package/dist/chunks/{copy-button-CwU8t_9_.js.map → copy-button-DBPAA1g0.js.map} +1 -1
  28. package/dist/chunks/{core-B0bULn-t.js → core-Cw3pNRp3.js} +2 -2
  29. package/dist/chunks/{core-B0bULn-t.js.map → core-Cw3pNRp3.js.map} +1 -1
  30. package/dist/chunks/{data-table-z7z6DqMJ.js → data-table-CGecI-FI.js} +6 -6
  31. package/dist/chunks/data-table-CGecI-FI.js.map +1 -0
  32. package/dist/chunks/{date-popup-DAnjptFt.js → date-popup-C6vVOOWF.js} +2 -2
  33. package/dist/chunks/{date-popup-DAnjptFt.js.map → date-popup-C6vVOOWF.js.map} +1 -1
  34. package/dist/chunks/{dialog-2zb6ClNR.js → dialog-s3_LUPBi.js} +4 -4
  35. package/dist/chunks/{dialog-2zb6ClNR.js.map → dialog-s3_LUPBi.js.map} +1 -1
  36. package/dist/chunks/{domain-BsM9UmAg.js → domain-CrQX3p6E.js} +2 -2
  37. package/dist/chunks/{domain-BsM9UmAg.js.map → domain-CrQX3p6E.js.map} +1 -1
  38. package/dist/chunks/{icon-button-Dfwpvmav.js → icon-button-6kOn2zrP.js} +2 -2
  39. package/dist/chunks/{icon-button-Dfwpvmav.js.map → icon-button-6kOn2zrP.js.map} +1 -1
  40. package/dist/chunks/identity-BwYixi8Q.js +520 -0
  41. package/dist/chunks/identity-BwYixi8Q.js.map +1 -0
  42. package/dist/chunks/{input-Bo5-UZg2.js → input-D1SeLe3X.js} +2 -2
  43. package/dist/chunks/{input-Bo5-UZg2.js.map → input-D1SeLe3X.js.map} +1 -1
  44. package/dist/chunks/{input-group-jPcK9T_a.js → input-group-BbxwEAUP.js} +2 -2
  45. package/dist/chunks/{input-group-jPcK9T_a.js.map → input-group-BbxwEAUP.js.map} +1 -1
  46. package/dist/chunks/{iso-field-DoqHBg8n.js → iso-field-BVOKAY4H.js} +2 -2
  47. package/dist/chunks/{iso-field-DoqHBg8n.js.map → iso-field-BVOKAY4H.js.map} +1 -1
  48. package/dist/chunks/{list-CU_AoVY3.js → list-o8wcuBOz.js} +3 -3
  49. package/dist/chunks/{list-CU_AoVY3.js.map → list-o8wcuBOz.js.map} +1 -1
  50. package/dist/chunks/{markdown-C565aBR7.js → markdown-BZKZi9d8.js} +4 -4
  51. package/dist/chunks/{markdown-C565aBR7.js.map → markdown-BZKZi9d8.js.map} +1 -1
  52. package/dist/chunks/{menu-Clvv6ftq.js → menu-BDce2kiw.js} +2 -2
  53. package/dist/chunks/{menu-Clvv6ftq.js.map → menu-BDce2kiw.js.map} +1 -1
  54. package/dist/chunks/{nav-sheet-Dt6JSvzX.js → nav-sheet-D3U7MeaI.js} +3 -3
  55. package/dist/chunks/{nav-sheet-Dt6JSvzX.js.map → nav-sheet-D3U7MeaI.js.map} +1 -1
  56. package/dist/chunks/{page-header-BQijP6Rp.js → page-header-C5Bv1gKE.js} +2 -2
  57. package/dist/chunks/{page-header-BQijP6Rp.js.map → page-header-C5Bv1gKE.js.map} +1 -1
  58. package/dist/chunks/{pagination-D7fAm8qg.js → pagination-D9hM6W2z.js} +3 -3
  59. package/dist/chunks/{pagination-D7fAm8qg.js.map → pagination-D9hM6W2z.js.map} +1 -1
  60. package/dist/chunks/{picker-popover-1FHb1LQG.js → picker-popover-PzVOo62-.js} +4 -4
  61. package/dist/chunks/{picker-popover-1FHb1LQG.js.map → picker-popover-PzVOo62-.js.map} +1 -1
  62. package/dist/chunks/{range-popup-lGiZsG3s.js → range-popup-Dt6Q0Ryw.js} +3 -3
  63. package/dist/chunks/{range-popup-lGiZsG3s.js.map → range-popup-Dt6Q0Ryw.js.map} +1 -1
  64. package/dist/chunks/{rights-B68ocZuq.js → rights-DAHTG_kH.js} +4 -4
  65. package/dist/chunks/{rights-B68ocZuq.js.map → rights-DAHTG_kH.js.map} +1 -1
  66. package/dist/chunks/{select-BqjmQOqx.js → select-UTdHKubp.js} +2 -2
  67. package/dist/chunks/{select-BqjmQOqx.js.map → select-UTdHKubp.js.map} +1 -1
  68. package/dist/chunks/{sidebar-Dq7oGOje.js → sidebar-K30Ae8N5.js} +2 -2
  69. package/dist/chunks/{sidebar-Dq7oGOje.js.map → sidebar-K30Ae8N5.js.map} +1 -1
  70. package/dist/chunks/{sidebar-menu-QSSNu1jJ.js → sidebar-menu-C0qJsQF5.js} +2 -2
  71. package/dist/chunks/{sidebar-menu-QSSNu1jJ.js.map → sidebar-menu-C0qJsQF5.js.map} +1 -1
  72. package/dist/chunks/styles-8fn_bHRP.js +21 -0
  73. package/dist/chunks/styles-8fn_bHRP.js.map +1 -0
  74. package/dist/chunks/{textarea-CO0HP6fK.js → textarea-CRmvC4jd.js} +3 -3
  75. package/dist/chunks/{textarea-CO0HP6fK.js.map → textarea-CRmvC4jd.js.map} +1 -1
  76. package/dist/chunks/{timeseries-nDviPxvQ.js → timeseries-CK86u7M0.js} +3 -3
  77. package/dist/chunks/{timeseries-nDviPxvQ.js.map → timeseries-CK86u7M0.js.map} +1 -1
  78. package/dist/components/app-frame.js +2 -2
  79. package/dist/components/banner.js +1 -1
  80. package/dist/components/button-group.js +1 -1
  81. package/dist/components/button.js +1 -1
  82. package/dist/components/charts/bar.js +2 -2
  83. package/dist/components/charts/donut.js +1 -1
  84. package/dist/components/charts/gauge.js +1 -1
  85. package/dist/components/charts/heatmap.js +1 -1
  86. package/dist/components/charts/sankey.js +2 -2
  87. package/dist/components/charts/timeseries.js +1 -1
  88. package/dist/components/charts.js +2 -2
  89. package/dist/components/checkbox.js +1 -1
  90. package/dist/components/code-block.js +2 -2
  91. package/dist/components/combobox.js +1 -1
  92. package/dist/components/command-list.js +2 -2
  93. package/dist/components/command-palette.js +1 -1
  94. package/dist/components/copy-button.js +1 -1
  95. package/dist/components/data-table.js +1 -1
  96. package/dist/components/date-picker.js +2 -2
  97. package/dist/components/dialog.js +2 -2
  98. package/dist/components/display-options.js +2 -2
  99. package/dist/components/filter-chip.js +3 -3
  100. package/dist/components/filter-toggle.js +35 -0
  101. package/dist/components/filter-toggle.js.map +1 -0
  102. package/dist/components/icon-button.js +1 -1
  103. package/dist/components/input.js +3 -3
  104. package/dist/components/kaeso/conversation.js +2 -2
  105. package/dist/components/kaeso/identity.js +1 -1
  106. package/dist/components/kaeso/moments.js +3 -3
  107. package/dist/components/kaeso/rights.js +1 -1
  108. package/dist/components/kaeso/usage.js +1 -1
  109. package/dist/components/kaeso.js +9 -14
  110. package/dist/components/kaeso.js.map +1 -1
  111. package/dist/components/key-value.js +1 -1
  112. package/dist/components/list.js +1 -1
  113. package/dist/components/markdown.js +1 -1
  114. package/dist/components/menu.js +2 -2
  115. package/dist/components/page-header.js +1 -1
  116. package/dist/components/pagination.js +1 -1
  117. package/dist/components/playground.js +9 -9
  118. package/dist/components/select.js +1 -1
  119. package/dist/components/sheet.js +1 -1
  120. package/dist/components/sidebar.js +1 -1
  121. package/dist/components/tabs.js +4 -4
  122. package/dist/components/tabs.js.map +1 -1
  123. package/dist/components/theme-menu.js +2 -2
  124. package/dist/components/theme-select.js +1 -1
  125. package/dist/index.js +68 -67
  126. package/dist/kaeso.css +11 -12
  127. package/dist/styles.css +1 -1
  128. package/dist/types/components/combobox/combobox.d.ts +2 -0
  129. package/dist/types/components/filter-toggle/docs.d.ts +11 -0
  130. package/dist/types/components/filter-toggle/filter-toggle.d.ts +23 -0
  131. package/dist/types/components/filter-toggle/index.d.ts +1 -0
  132. package/dist/types/components/kaeso/docs.d.ts +1 -0
  133. package/dist/types/components/kaeso/identity.d.ts +1 -0
  134. package/dist/types/components/kaeso/provider-marks.d.ts +27 -2
  135. package/dist/types/components/menu/styles.d.ts +1 -1
  136. package/dist/types/components/tabs/tabs.d.ts +2 -2
  137. package/dist/types/index.d.ts +1 -0
  138. package/package.json +5 -5
  139. package/dist/chunks/button-IblhXUyZ.js.map +0 -1
  140. package/dist/chunks/combobox-DkcjkWc6.js.map +0 -1
  141. package/dist/chunks/data-table-z7z6DqMJ.js.map +0 -1
  142. package/dist/chunks/identity-BQoh-UpW.js +0 -365
  143. package/dist/chunks/identity-BQoh-UpW.js.map +0 -1
  144. package/dist/chunks/styles-hkFkoBbi.js +0 -21
  145. package/dist/chunks/styles-hkFkoBbi.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-CGecI-FI.js","names":["_Fragment","__icon_ArrowDown01Icon","__icon_ArrowUp01Icon","cn","useInset","useGutterPadded","useRaised","Icon","Tooltip","observeResize","Text","Button","CheckboxBox","ContextMenu","Skeleton","Pagination","Empty","TruncatedText","StatusDot","useScrollFadeX","Avatar","scrollParent","useCoarsePointer","STATUS_TONE_TEXT","useScrollMargin","Fragment$1","TIME_COLUMNS","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","nameColumn","labelled","rowName","column","text","row","raw","FOCUSABLE","TEXT_ENTRY","cellWidgets","w","headTargets","head","target","th","rowTone","on","raised","DataTableInner","userColumns","sortingProp","ariaLabel","forceRow","inset","padded","t","useUiText","sortingInner","setSortingInner","useState","selectionInner","setSelectionInner","focusRow","setFocusRow","zone","setZone","headStop","setHeadStop","anchor","useRef","sorting","rowSelection","selection","useMemo","selectable","table","name","useReactTable","next","u","onSortingChange","onSelectionChange","getCoreRowModel","getSortedRowModel","manualSorting","canSelectRow","getRowId","r","root","body","leaf","fitInput","fitKey","hiddenFor","fit","hiddenForRef","hiddenKey","setHiddenKey","useLayoutEffect","mode","hiddenIds","tight","overflow","hidden","onHiddenRef","onHiddenColumnsChange","cols","trackMin","gridStyle","pinEnd","rows","virtual","virtualizeAbove","rowHeight","density","getScrollElement","scrollMargin","virtualizer","useVirtualizer","cellPad","i","onRaised","stickyCol","stickyFirstColumn","header","focusable","onRowClick","bodyZone","stop","focusAt","line","now","focusHead","targets","rovingHead","own","tabindex","observer","quiet","resizeBy","columnId","min","max","old","step","onHeadKeyDown","at","to","page","selectRange","found","from","start","onRowKeyDown","widgets","first","cellDeps","drawn","d","drawnRows","renderRow","active","activeRowId","selected","state","cells","drawCells","freshRowIds","rowMenu","meta","cell","content","flexRender","tone","h","sortable","resizable","dir","label","ArrowDown01Icon","ArrowUp01Icon","ref","className","loading","hg","error","onRetry","empty","v","hasMore","loadingMore","DataTableBase","DataTable","time","make","get","ctx","sortingFn","Tokens","exact","formatNumber","value","formatTokens","RelativeTime","formatDate","formatRelative","col","formatUSD","options","id","formatDuration"],"sources":["../../src/components/data-table/time-columns.ts","../../src/components/data-table/data-table.tsx","../../src/components/data-table/columns.tsx"],"sourcesContent":["export const TIME_COLUMNS = new WeakSet<object>();\n","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 { TruncatedText } from \"../text/truncated.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\";\nimport { useScrollFadeX } from \"../../hooks/use-scroll-fade.js\";\nimport { useCoarsePointer } from \"../../hooks/use-coarse-pointer.js\";\nimport { TIME_COLUMNS } from \"./time-columns.js\";\n\nexport const KAESO_DATA_TABLE_VARIANTS = {\n density: {\n compact: { classes: \"h-36 coarse:h-44\" },\n default: { classes: \"h-40 coarse:h-44\" },\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 \"data-force-row\"?: string | 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 nameColumn<T>(columns: ColumnDef<T, any>[]): ColumnDef<T, any> | undefined {\n const labelled = columns.filter((c) => c.id && c.meta?.text && c.meta.align !== \"end\");\n return labelled.find((c) => !TIME_COLUMNS.has(c)) ?? labelled[0] ?? columns[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 FOCUSABLE = \"a[href], button, input, select, textarea, [tabindex], [contenteditable=true]\";\nconst TEXT_ENTRY = \"input:not([type=checkbox]):not([type=radio]), textarea, select, [contenteditable=true]\";\n\nfunction cellWidgets(row: HTMLElement): HTMLElement[] {\n return [...row.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n (w) => !w.closest(\"[role=checkbox], [aria-hidden=true], [hidden]\") && !w.matches(\":disabled, input[type=checkbox]\"),\n );\n}\n\nfunction headTargets(head: HTMLElement | null): HTMLElement[] {\n if (!head) return [];\n return [...head.querySelectorAll<HTMLElement>(\"[role=columnheader]\")].flatMap((th) => {\n const target = th.querySelector<HTMLElement>(\"[role=checkbox], button\") ?? th.querySelector<HTMLElement>(\"[role=separator]\");\n return target ? [target] : [];\n });\n}\n\nfunction rowTone(raised: boolean, on: boolean) {\n if (on)\n return cn(\n \"controls-on-fill\",\n raised ? \"bg-raised-pressed hover:raised-selected-hover active:raised-selected-hover\" : \"bg-fill-2 hover:bg-fill-3 active:bg-fill-3\",\n );\n return raised ? \"hover:bg-raised-hover active:bg-raised-pressed hover:controls-on-fill\" : \"hover:bg-fill-1 active:bg-fill-2 hover:controls-on-fill\";\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 \"data-force-row\": forceRow,\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 [zone, setZone] = useState<\"head\" | \"body\">(\"body\");\n const [headStop, setHeadStop] = useState(0);\n const anchor = useRef<{ id: string; base: RowSelectionState } | null>(null);\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(nameColumn(userColumns), 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 anchor.current = null;\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 rowHeight = Math.max(ROW_H[density], useCoarsePointer() ? 44 : 0);\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: () => rowHeight,\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 onRaised = inset || raised;\n const stickyCol = (i: number, header = false, on = false) =>\n ((stickyFirstColumn && i === 0) || (pinEnd && i === cols.length - 1)) &&\n cn(\n \"sticky z-10\",\n header\n ? onRaised\n ? \"bg-raised\"\n : \"bg-panel\"\n : on\n ? \"bg-inherit\"\n : onRaised\n ? \"bg-raised group-hover/tr:bg-raised-hover group-active/tr:bg-raised-pressed\"\n : \"bg-panel group-hover/tr:bg-fill-1 group-active/tr:bg-fill-2\",\n i === 0 ? \"left-0\" : \"right-0\",\n !inset && !header && (i === 0 ? \"rounded-l-item\" : \"rounded-r-item\"),\n );\n\n const focusable = !!onRowClick || !!selectable;\n const bodyZone = focusable && rows.length > 0 && zone === \"body\";\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 setZone(\"body\");\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 focusHead = (i: number) => {\n const targets = headTargets(head.current);\n const target = targets[Math.max(0, Math.min(targets.length - 1, i))];\n if (!target) return false;\n setZone(\"head\");\n setHeadStop(targets.indexOf(target));\n target.focus();\n return true;\n };\n const rovingHead = useRef(() => {});\n rovingHead.current = () => {\n const targets = headTargets(head.current);\n const own = Math.min(headStop, targets.length - 1);\n for (const el of head.current?.querySelectorAll<HTMLElement>(FOCUSABLE) ?? []) {\n const tabindex = targets.indexOf(el) === own && !bodyZone ? \"0\" : \"-1\";\n if (el.getAttribute(\"tabindex\") !== tabindex) el.setAttribute(\"tabindex\", tabindex);\n }\n };\n useLayoutEffect(() => rovingHead.current());\n useLayoutEffect(() => {\n const el = head.current;\n if (!el) return;\n const observer = new MutationObserver(() => rovingHead.current());\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, []);\n useLayoutEffect(() => {\n const el = body.current;\n if (!el || !focusable) return;\n const quiet = () => {\n for (const line of el.querySelectorAll<HTMLElement>(\"[data-row-index]\"))\n for (const w of line.querySelectorAll<HTMLElement>(FOCUSABLE)) if (w.getAttribute(\"tabindex\") !== \"-1\") w.setAttribute(\"tabindex\", \"-1\");\n };\n quiet();\n const observer = new MutationObserver(quiet);\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, [focusable]);\n useScrollFadeX(body, \"[role=row]\");\n\n const resizeBy = (columnId: string | undefined, step: number) => {\n const column = columnId ? table.getColumn(columnId) : undefined;\n if (!column?.getCanResize()) return false;\n const min = column.columnDef.minSize ?? 64;\n const max = column.columnDef.maxSize ?? 640;\n table.setColumnSizing((old) => ({ ...old, [column.id]: Math.max(min, Math.min(max, column.getSize() + step)) }));\n return true;\n };\n const onHeadKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.altKey || e.metaKey || e.ctrlKey) return;\n const targets = headTargets(head.current);\n const at = targets.indexOf(e.target as HTMLElement);\n if (at < 0) return;\n const step = { ArrowLeft: -16, ArrowRight: 16 }[e.key];\n if (e.shiftKey) {\n if (step !== undefined && resizeBy((e.target as HTMLElement).closest<HTMLElement>(\"[role=columnheader]\")?.dataset.col, step)) e.preventDefault();\n return;\n }\n const to = { ArrowLeft: at - 1, ArrowRight: at + 1, Home: 0, End: targets.length - 1 }[e.key];\n if (to !== undefined) {\n e.preventDefault();\n if (to >= 0 && to < targets.length) focusHead(to);\n } else if (e.key === \"ArrowDown\" && focusable && rows.length) {\n e.preventDefault();\n focusAt(stop);\n }\n };\n\n const page = () => Math.max(1, Math.floor((getScrollElement()?.clientHeight ?? 400) / rowHeight) - 1);\n const selectRange = (from: number, to: number) => {\n const found = anchor.current ? rows.findIndex((r) => r.id === anchor.current?.id) : -1;\n if (found < 0) anchor.current = { id: rows[from]!.id, base: rowSelection };\n const start = found < 0 ? from : found;\n const next = { ...anchor.current?.base };\n for (const r of rows.slice(Math.min(start, to), Math.max(start, to) + 1)) if (r.getCanSelect()) next[r.id] = true;\n table.setRowSelection(next);\n };\n const onRowKeyDown = (e: KeyboardEvent<HTMLDivElement>, row: Row<T>, i: number) => {\n const line = e.currentTarget;\n const target = e.target as HTMLElement;\n if (target !== line) {\n if (e.altKey || e.metaKey || e.ctrlKey || target.closest(TEXT_ENTRY)) return;\n const widgets = cellWidgets(line);\n const at = widgets.indexOf(target);\n if (at < 0) return;\n // A tooltip trigger prevents Escape's default even while its tooltip is closed; only an open popup keeps the key.\n if (e.key === \"Escape\" && !target.closest(\"[data-popup-open], [aria-expanded=true]\")) {\n e.preventDefault();\n line.focus();\n } else if (e.defaultPrevented) {\n return;\n } else if (e.key === \"ArrowRight\" && widgets[at + 1]) {\n e.preventDefault();\n widgets[at + 1]?.focus();\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n (widgets[at - 1] ?? line).focus();\n }\n return;\n }\n if (e.altKey) return;\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === \"a\" && selectable && !e.shiftKey) {\n e.preventDefault();\n anchor.current = null;\n table.toggleAllRowsSelected(true);\n }\n return;\n }\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 if (e.key === \"ArrowUp\" && !e.shiftKey && to < 0 && focusHead(headStop)) return;\n const next = Math.max(0, Math.min(rows.length - 1, to));\n if (e.shiftKey && selectable) selectRange(i, next);\n else anchor.current = null;\n focusAt(next);\n } else if (e.shiftKey) {\n return;\n } else if (e.key === \"ArrowRight\") {\n const first = cellWidgets(line)[0];\n if (!first) return;\n e.preventDefault();\n first.focus();\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n onRowClick?.(row.original);\n } else if ((e.key === \" \" || e.key === \"x\") && selectable) {\n e.preventDefault();\n anchor.current = null;\n if (row.getCanSelect()) row.toggleSelected();\n } else if (e.key === \"Escape\" && selectable && Object.keys(rowSelection).length) {\n e.preventDefault();\n anchor.current = null;\n table.toggleAllRowsSelected(false);\n }\n };\n\n // The virtualizer renders the table again for every scroll event, but a row's cells change only\n // with its data, the columns shown and whether it is active or selected. A row hands back the\n // cells it drew last time, so React skips them instead of drawing every visible row again.\n const cellDeps = [columns, cols.map((c) => c.id).join(\" \"), inset, pinEnd, stickyFirstColumn, onRaised];\n const drawn = useRef<{ deps: unknown[]; rows: WeakMap<Row<T>, { state: string; cells: ReactNode }> } | null>(null);\n if (!drawn.current || cellDeps.some((d, i) => d !== drawn.current?.deps[i])) drawn.current = { deps: cellDeps, rows: new WeakMap() };\n const drawnRows = drawn.current.rows;\n\n const renderRow = (row: Row<T>, i: number, style?: CSSProperties) => {\n const active = row.id === activeRowId;\n const selected = !!selectable && row.getIsSelected();\n const on = active || selected;\n const state = `${active} ${selected}`;\n const kept = drawnRows.get(row);\n const cells = kept?.state === state ? kept.cells : drawCells(row, on);\n if (kept?.state !== state) drawnRows.set(row, { state, cells });\n const el = (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n aria-selected={selectable ? row.getIsSelected() : undefined}\n aria-current={active || undefined}\n data-active={active || undefined}\n data-fresh={freshRowIds?.has(row.id) || undefined}\n data-row-index={i}\n {...(forceRow && i === 0 ? { \"data-force\": forceRow } : {})}\n tabIndex={focusable ? (bodyZone && i === stop ? 0 : -1) : undefined}\n onFocus={(e) => {\n if (e.target !== e.currentTarget) return;\n setZone(\"body\");\n if (i !== focusRow) setFocusRow(i);\n }}\n onClick={(e) => {\n anchor.current = null;\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 rowTone(onRaised, on),\n \"data-fresh:animate-row-fresh\",\n // A virtual row's place is its transform; animating it makes rows glide whenever the list re-measures.\n style?.transform !== undefined && \"[transition-property:background-color,color,box-shadow,opacity]\",\n \"forced-colors:data-active:outline-2 forced-colors:data-active:-outline-offset-2 forced-colors:data-active:outline-solid\",\n )}\n >\n {cells}\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 function drawCells(row: Row<T>, on: boolean) {\n return row\n .getVisibleCells()\n .filter((c) => !hidden.has(c.column.id))\n .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, false, on),\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 <TruncatedText className={cn(\"min-w-0 cell-fit\", meta?.grow && \"flex-1\")}>{content}</TruncatedText>\n )}\n </div>\n );\n });\n }\n\n const header = (h: ReturnType<typeof table.getHeaderGroups>[number][\"headers\"][number], i: number) => {\n const meta = h.column.columnDef.meta;\n const sortable = h.column.getCanSort();\n const resizable = h.column.getCanResize();\n const dir = h.column.getIsSorted();\n const label = flexRender(h.column.columnDef.header, h.getContext());\n const content = (\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 focus-ring tap-target\",\n onRaised ? \"hover:bg-raised-hover active:bg-raised-pressed\" : \"hover:bg-fill-1 active:bg-fill-2\",\n \"hover:text-fg\",\n dir ? \"text-fg\" : \"text-fg-secondary\",\n meta?.align === \"end\" && \"flex-row-reverse\",\n )}\n >\n <TruncatedText>{label}</TruncatedText>\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 <TruncatedText className=\"text-caption font-medium text-fg-secondary\">{label}</TruncatedText>\n )}\n {resizable && (\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={-1}\n onMouseDown={h.getResizeHandler()}\n onTouchStart={h.getResizeHandler()}\n onDoubleClick={() => h.column.resetSize()}\n className=\"absolute inset-y-0 -right-8 z-10 w-16 cursor-col-resize after:absolute after:inset-y-8 after:right-8 after:w-1 after:bg-transparent after:transition-control group-hover/th:after:bg-line-strong coarse:after:bg-line focus-ring-inset\"\n />\n )}\n </>\n );\n return (\n <div\n key={h.id}\n role=\"columnheader\"\n data-col={h.column.id}\n aria-sort={dir === \"asc\" ? \"ascending\" : dir === \"desc\" ? \"descending\" : sortable ? \"none\" : undefined}\n className={cn(\"group/th relative\", cellPad(i), meta?.align === \"end\" && \"justify-end\", stickyCol(i, true), stickyCol(i, true) && \"hairline-b-strong\")}\n >\n {resizable ? (\n <ContextMenu>\n <ContextMenu.Trigger className={cn(\"flex min-w-0 flex-1 items-center self-stretch\", meta?.align === \"end\" && \"justify-end\")}>\n {content}\n </ContextMenu.Trigger>\n <ContextMenu.Content>\n <ContextMenu.Item onClick={() => resizeBy(h.column.id, 32)}>{t(\"dataTable.widenColumn\", \"Widen column\")}</ContextMenu.Item>\n <ContextMenu.Item onClick={() => resizeBy(h.column.id, -32)}>{t(\"dataTable.narrowColumn\", \"Narrow column\")}</ContextMenu.Item>\n <ContextMenu.Item onClick={() => h.column.resetSize()}>{t(\"dataTable.resetWidth\", \"Reset width\")}</ContextMenu.Item>\n </ContextMenu.Content>\n </ContextMenu>\n ) : (\n content\n )}\n </div>\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\", onRaised ? \"bg-raised\" : \"bg-panel\")}\n onKeyDown={onHeadKeyDown}\n onFocus={(e) => {\n const at = headTargets(head.current).indexOf(e.target as HTMLElement);\n if (at < 0) return;\n anchor.current = null;\n setZone(\"head\");\n setHeadStop(at);\n }}\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.filter((h) => !hidden.has(h.column.id)).map(header)}\n </div>\n ))}\n </div>\n <div\n ref={body}\n role=\"rowgroup\"\n className=\"overflow-x-auto scrollbar-quiet scroll-fade-x\"\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 {...(onRetry ? {} : { description: t(\"dataTable.reloadToRetry\", \"Reload the page to try again.\") })}\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 ?? <Empty size=\"compact\" title={t(\"dataTable.noRows\", \"No rows\")} />}\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 <Pagination variant=\"load-more\" hasMore={!!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 { TruncatedText } from \"../text/truncated.js\";\nimport type { StatusTone } from \"../../utils/tone.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { TIME_COLUMNS } from \"./time-columns.js\";\n\nfunction time<C extends object>(column: C): C {\n TIME_COLUMNS.add(column);\n return column;\n}\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 time(\n make(\n b,\n get,\n (v) => <time dateTime={new Date(v).toISOString()}>{formatDate(v, { time: true })}</time>,\n { text: (r: T) => formatDate(get(r), { time: true }) },\n \"datetime\",\n ),\n ),\n relative: <T,>(b: Base<T>, get: Accessor<T, string | Date>, options: { now?: Date | number | undefined } = {}) =>\n time(\n make(\n b,\n get,\n (v) => <RelativeTime value={v} now={options.now ?? Date.now()} />,\n { text: (r: T) => formatDate(get(r), { time: true }) },\n (a, c, id) => new Date(a.getValue(id) as string).getTime() - new Date(c.getValue(id) as string).getTime(),\n ),\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(\n b,\n get,\n (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 <TruncatedText>{v.name}</TruncatedText>\n </span>\n ),\n { text: (r: T) => get(r).name },\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAa0B,oBAAe,IAAI,QAAgB,GCkCnCC,IAA4B,EACvC,SAAS;CACP,SAAS,EAAE,SAAS,mBAAmB;CACvC,SAAS,EAAE,SAAS,mBAAmB;CACvC,aAAa,EAAE,SAAS,OAAO;AACjC,EACF,GACaC,KAAoC,EAAE,SAAS,UAAU,GA6ChEC,KAAQ;CAAE,SAAS;CAAI,SAAS;CAAI,aAAa;AAAG,GAE7CC,KAAsB;AAInC,SAAgBC,GAAW,GAAsB,GAAe,IAAU,IAA6D;CACrI,IAAI,CAACC,GAAO,OAAO;EAAE,QAAQ,CAAC;EAAG,OAAO;EAAO,UAAU;CAAM;CAC/D,IAAMC,IAAa,CAAC,GAAGC,CAAO,CAAC,CAAC,MAAM,GAAG,MAAMC,EAAE,WAAWC,EAAE,QAAQ,GAClEC,IAAOC,GACLC,oBAAO,IAAI,IAAY;CAC7B,KAAK,IAAMC,KAAKP,GAEd,AADA,KAAQO,EAAE,OACNH,KAAQL,KAASQ,EAAE,YAAY,KAAKA,EAAE,UAAOD,EAAK,IAAIC,EAAE,EAAE;CAEhE,IAAMC,IAAOP,EAAQ,QAAQ,MAAMK,EAAK,IAAIC,EAAE,EAAE,CAAC,GAC3CE,IAAOD,EAAK,QAAQ,GAAG,MAAMN,IAAIK,EAAE,MAAMF,CAAO,GAClDK,IAAQF,EAAK,QAAQ,GAAG,MAAMN,KAAKK,EAAE,OAAOI,GAAQJ,CAAC,IAAIA,EAAE,OAAO,CAAC;CACvE,IAAIG,IAAQX,KAASS,EAAK,MAAM,MAAMD,EAAE,IAAI,GAAG;EAC7C,IAAMK,IAAOJ,EAAKA,EAAK,SAAS;EAChC,KAAK,IAAMD,KAAK,CAAC,GAAGC,CAAI,CAAC,CAAC,QAAQ,GAAG;GACnC,IAAIE,KAASX,GAAO;GACpB,AAAIQ,EAAE,QAAQA,EAAE,SAASA,MAAMK,MAC/BN,EAAK,OAAOC,EAAE,EAAE,GAChB,KAASA,EAAE;EACb;CACF;CACA,OAAO;EAAE,QAAQN,EAAQ,QAAQ,MAAM,CAACK,EAAK,IAAIC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,MAAMA,EAAE,EAAE;EAAG,OAAOE,IAAOV;EAAO,UAAUW,IAAQX;CAAM;AACzH;AAEA,SAASc,GAAa,GAAyB;CAC7C,IAAMC,IAAQ,iBAAiBC,CAAE;CACjC,OAAOA,EAAG,sBAAsB,CAAC,CAAC,SAAS,WAAWD,EAAM,WAAW,KAAK,MAAM,WAAWA,EAAM,YAAY,KAAK;AACtH;AAEA,SAASE,GAAc,GAA6D;CAClF,IAAMC,IAAWhB,EAAQ,QAAQ,MAAMM,EAAE,MAAMA,EAAE,MAAM,QAAQA,EAAE,KAAK,UAAU,KAAK;CACrF,OAAOU,EAAS,MAAM,MAAM,CAACxB,EAAa,IAAIc,CAAC,CAAC,KAAKU,EAAS,MAAMhB,EAAQ;AAC9E;AAEA,SAASiB,GAAW,GAAuC,GAAiC;CAC1F,IAAI,CAACC,GAAQ,IAAI;CACjB,IAAMC,IAAOD,EAAO,MAAM,OAAOE,EAAI,QAAQ;CAC7C,IAAID,GAAM,OAAOA;CACjB,IAAME,IAAMD,EAAI,SAASF,EAAO,EAAE;CAClC,OAAO,OAAOG,KAAQ,YAAYA,IAAMA,IAAM,KAAA;AAChD;AAEA,IAAMC,IAAY,gFACZC,KAAa;AAEnB,SAASC,GAAY,GAAiC;CACpD,OAAO,CAAC,GAAGJ,EAAI,iBAA8BE,CAAS,CAAC,CAAC,CAAC,QACtD,MAAM,CAACG,EAAE,QAAQ,+CAA+C,KAAK,CAACA,EAAE,QAAQ,iCAAiC,CACpH;AACF;AAEA,SAASC,EAAY,GAAyC;CAE5D,OADKC,IACE,CAAC,GAAGA,EAAK,iBAA8B,qBAAqB,CAAC,CAAC,CAAC,SAAS,MAAO;EACpF,IAAMC,IAASC,EAAG,cAA2B,yBAAyB,KAAKA,EAAG,cAA2B,kBAAkB;EAC3H,OAAOD,IAAS,CAACA,CAAM,IAAI,CAAC;CAC9B,CAAC,IAJiB,CAAC;AAKrB;AAEA,SAASE,GAAQ,GAAiB,GAAa;CAM7C,OALIC,IACK9D,EACL,oBACA+D,IAAS,+EAA+E,4CAC1F,IACKA,IAAS,0EAA0E;AAC5F;AAEA,IAAMtB,MAAW,MAAsD,KAAK,IAAIJ,EAAE,MAAMA,EAAE,YAAA,GAA+B;AAEzH,SAAS2B,GACP,EACE,SACA,SAASC,GACT,aACA,aAAU,WACV,eACA,YACA,eACA,iBACA,cACA,uBACA,SAASC,GACT,qBACA,mBACA,aACA,WACA,YACA,UACA,YACA,iBACA,gBACA,sBACA,sBAAkB,KAClB,eACA,iBACA,iBACA,2BACA,cAAcC,IACd,kBAAkBC,MAEpB,GACA;CACA,IAAMC,IAAQpE,EAAS,GACjB8D,KAAS5D,EAAU,GACnBmE,KAASpE,EAAgB,GACzBqE,IAAIC,EAAU,GACd,CAACC,IAAcC,MAAmBC,EAAuB,CAAC,CAAC,GAC3D,CAACC,IAAgBC,MAAqBF,EAA4B,CAAC,CAAC,GACpE,CAACG,IAAUC,MAAeJ,EAAS,CAAC,GACpC,CAACK,IAAMC,KAAWN,EAA0B,MAAM,GAClD,CAACO,IAAUC,MAAeR,EAAS,CAAC,GACpCS,IAASC,EAAuD,IAAI,GACpEC,KAAUpB,KAAeO,IACzBc,IAAeC,KAAaZ,IAC5B7C,KAAU0D,SACTC,IACE,CACL;EACE,IAAI;EACJ,MAAM;EACN,eAAe;EACf,gBAAgB;EAChB,MAAM,EAAE,UAAU,EAAE;EACpB,SAAS,EAAE,eACT,kBAACjF,IAAD;GACE,cAAY8D,EAAE,2BAA2B,iBAAiB;GAC1D,SAASoB,EAAM,qBAAqB;GACpC,eAAeA,EAAM,sBAAsB,KAAK,CAACA,EAAM,qBAAqB;GAC5E,kBAAkB,MAAMA,EAAM,sBAAsBtD,CAAC;EACtD,CAAA;EAEH,OAAO,EAAE,aAAU;GACjB,IAAMuD,IAAO5C,GAAQF,GAAWmB,CAAW,GAAGd,CAAG;GACjD,OACE,kBAAC1C,IAAD;IACE,cAAYmF,IAAOrB,EAAE,yBAAyB,iBAAiB,EAAE,QAAK,CAAC,IAAIA,EAAE,uBAAuB,YAAY;IAChH,SAASpB,EAAI,cAAc;IAC3B,UAAU,CAACA,EAAI,aAAa;IAC5B,kBAAkB,MAAMA,EAAI,eAAed,CAAC;GAC7C,CAAA;EAEL;CACF,GACA,GAAG4B,CACL,IA7BwBA,GA8BvB;EAACA;EAAayB;EAAYnB;CAAC,CAAC,GAEzBoB,IAAQE,GAAc;EAC1B;EACA;EACA,OAAO;GAAE;GAAS;EAAa;EAC/B,kBAAkB,MAAM;GACtB,IAAMC,IAAO,OAAOC,KAAM,aAAaA,EAAET,EAAO,IAAIS;GAGpD,AAFA,EAAO,UAAU,MACZ7B,KAAaQ,GAAgBoB,CAAI,GACtCE,KAAkBF,CAAI;EACxB;EACA,uBAAuB,MAAM;GAC3B,IAAMA,IAAO,OAAOC,KAAM,aAAaA,EAAER,CAAY,IAAIQ;GAEzD,AADKP,KAAWX,GAAkBiB,CAAI,GACtCG,KAAoBH,CAAI;EAC1B;EACA,iBAAiBI,GAAgB;EACjC,mBAAmBC,GAAkB;EACrC,eAAe,CAAC,CAACC;EACjB,oBAAoBV,IAAcW,KAAgB,MAAQA,EAAalD,EAAI,QAAQ,IAAI,KAAQ;EAC/F,kBAAkB;EAClB,GAAImD,IAAW,EAAE,WAAW,MAASA,EAASC,CAAC,EAAE,IAAI,CAAC;EACtD,eAAe;GAAE,MAAM;GAAK,SAAS;GAAI,SAAS;EAAI;CACxD,CAAC,GAEKC,IAAOnB,EAA8B,IAAI,GACzC3B,IAAO2B,EAA8B,IAAI,GACzCoB,IAAOpB,EAA8B,IAAI,GACzCqB,KAAOf,EAAM,sBAAsB,GACnCgB,KAAWD,GAAK,KAAK,OAAO;EAChC,IAAIrE,EAAE;EACN,MAAMA,EAAE,QAAQ;EAChB,UAAUA,EAAE,UAAU,MAAM,YAAY;EACxC,MAAM,CAAC,CAACA,EAAE,UAAU,MAAM;EAC1B,UAAUA,EAAE,UAAU,MAAM;EAC5B,OAAOA,EAAE,OAAO;CAClB,EAAE,GACIuE,KAAS,KAAK,UAAUD,EAAQ,GAChCE,MAAa,MAAkB;EACnC,IAAMC,IAAMlF,GAAW+E,IAAU9E,GAAOwC,IAAQ,KAAK,CAAC;EACtD,OAAO,GAAGyC,EAAI,QAAQ,MAAM,KAAKA,EAAI,WAAW,MAAM,GAAG,GAAGA,EAAI,OAAO,KAAK,GAAG;CACjF,GACMC,IAAe1B,EAAOwB,EAAS;CACrC,EAAa,UAAUA;CACvB,IAAM,CAACG,IAAWC,MAAgBtC,EAAS,GAAG;CAM9C,AALAuC,QAAsB;EACpB,IAAMrE,IAAK2D,EAAK;EAChB,IAAK3D,GACL,OAAOvC,GAAc,CAACuC,CAAE,IAAI,CAAC,OAAOoE,GAAaF,EAAa,QAAQ,KAAK,MAAM,GAAG,YAAY,SAAS,CAAC,CAAC,CAAC,CAAC;CAC/G,GAAG,CAAC,CAAC,GACLG,QAAsB;EACpB,AAAIV,EAAK,WAASS,GAAaF,EAAa,QAAQ,KAAK,MAAMpE,GAAa6D,EAAK,OAAO,CAAC,CAAC,CAAC;CAC7F,GAAG,CAACI,EAAM,CAAC;CACX,IAAM,CAACO,KAAO,IAAIC,KAAY,MAAMJ,GAAU,MAAM,GAAG,GACjDK,KAAQF,GAAK,SAAS,GAAG,GACzBG,KAAWH,GAAK,SAAS,GAAG,GAC5BI,IAAS9B,SAAc,IAAI,IAAI2B,GAAU,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,GAAG,CAACA,EAAS,CAAC,GACjFI,KAAcnC,EAAOoC,EAAqB;CAEhD,AADA,GAAY,UAAUA,IACtBP,QAAsB;EACpB,GAAY,UAAU,CAAC,GAAGK,CAAM,CAAC;CACnC,GAAG,CAACA,CAAM,CAAC;CACX,IAAMG,IAAOhB,GAAK,QAAQ,MAAM,CAACa,EAAO,IAAIlF,EAAE,EAAE,CAAC,GAC3CsF,MAAY,MAChBtF,EAAE,UAAU,MAAM,QAAQgF,KAAQ5E,GAAQ;EAAE,MAAMJ,EAAE,QAAQ;EAAG,UAAUA,EAAE,UAAU,KAAK;CAAS,CAAC,IAAmBA,EAAE,QAAQ,GAE7HuF,IAA2B;EAAE,qBADlBF,EAAK,KAAK,MAAOrF,EAAE,UAAU,MAAM,OAAO,UAAUsF,GAAStF,CAAC,EAAE,YAAY,GAAGA,EAAE,QAAQ,EAAE,GAAI,CAAC,CAAC,KAAK,GAC/D;EAAU,UAAUqF,EAAK,QAAQ,GAAG,MAAM1F,IAAI2F,GAAStF,CAAC,GAAG,CAAC;CAAE,GAChHwF,KAASP,MAAYI,EAAK,SAAS,KAAK,CAACA,EAAKA,EAAK,SAAS,EAAE,EAAE,UAAU,MAAM,MAEhFI,IAAOnC,EAAM,YAAY,CAAC,CAAC,MAC3BoC,IAAUD,EAAK,SAASE,IACxBC,KAAY,KAAK,IAAIvG,GAAMwG,IAAU/G,GAAiB,IAAI,KAAK,CAAC,GAChEgH,UAAyBjH,GAAasF,EAAK,OAAO,GAClD4B,KAAe/G,GAAgBoF,GAAM0B,GAAkBL,EAAK,QAAQC,CAAO,GAC3EM,IAAcC,GAAe;EACjC,OAAOR,EAAK;EACZ;EACA,oBAAoBG;EACpB,UAAU;EACV,SAASF;EACT;CACF,CAAC,GAEKQ,KAAW,MAAcvI,EAAG,mCAAmCqE,KAASmE,MAAM,KAAK,SAASnE,KAASmE,MAAMd,EAAK,SAAS,KAAK,OAAO,GACrIe,IAAWpE,KAASN,IACpB2E,KAAa,GAAW,IAAS,IAAO,IAAK,QAC/CC,KAAqBH,MAAM,KAAOX,MAAUW,MAAMd,EAAK,SAAS,MAClE1H,EACE,eACA4I,IACIH,IACE,cACA,aACF3E,IACE,eACA2E,IACE,+EACA,+DACRD,MAAM,IAAI,WAAW,WACrB,CAACnE,KAAS,CAACuE,MAAWJ,MAAM,IAAI,mBAAmB,iBACrD,GAEIK,IAAY,CAAC,CAACC,KAAc,CAAC,CAACpD,GAC9BqD,KAAWF,KAAaf,EAAK,SAAS,KAAK9C,OAAS,QACpDgE,KAAO,KAAK,IAAIlE,IAAU,KAAK,IAAIgD,EAAK,SAAS,GAAG,CAAC,CAAC,GACtDmB,MAAW,MAAc;EAC7B,IAAMnD,IAAO,KAAK,IAAI,GAAG,KAAK,IAAIgC,EAAK,SAAS,GAAGU,CAAC,CAAC;EAGrD,AAFAvD,EAAQ,MAAM,GACdF,GAAYe,CAAI,GACZiC,KAASM,EAAY,cAAcvC,GAAM,EAAE,OAAO,OAAO,CAAC;EAC9D,IAAMoD,UAAazC,EAAK,SAAS,cAA2B,oBAAoBX,EAAK,GAAG,GAClFqD,IAAMD,EAAK;EACjB,AAAIC,IAAKA,EAAI,MAAM,IACd,4BAA4BD,EAAK,CAAC,EAAE,MAAM,CAAC;CAClD,GACME,MAAa,MAAc;EAC/B,IAAMC,IAAU5F,EAAYC,EAAK,OAAO,GAClCC,IAAS0F,EAAQ,KAAK,IAAI,GAAG,KAAK,IAAIA,EAAQ,SAAS,GAAGb,CAAC,CAAC;EAKlE,OAJK7E,KACLsB,EAAQ,MAAM,GACdE,GAAYkE,EAAQ,QAAQ1F,CAAM,CAAC,GACnCA,EAAO,MAAM,GACN,MAJa;CAKtB,GACM2F,KAAajE,QAAa,CAAC,CAAC;CA6BlC,AA5BA,GAAW,gBAAgB;EACzB,IAAMgE,IAAU5F,EAAYC,EAAK,OAAO,GAClC6F,IAAM,KAAK,IAAIrE,IAAUmE,EAAQ,SAAS,CAAC;EACjD,KAAK,IAAMxG,KAAMa,EAAK,SAAS,iBAA8BL,CAAS,KAAK,CAAC,GAAG;GAC7E,IAAMmG,IAAWH,EAAQ,QAAQxG,CAAE,MAAM0G,KAAO,CAACR,KAAW,MAAM;GAClE,AAAIlG,EAAG,aAAa,UAAU,MAAM2G,KAAU3G,EAAG,aAAa,YAAY2G,CAAQ;EACpF;CACF,GACAtC,QAAsBoC,GAAW,QAAQ,CAAC,GAC1CpC,QAAsB;EACpB,IAAMrE,IAAKa,EAAK;EAChB,IAAI,CAACb,GAAI;EACT,IAAM4G,IAAW,IAAI,uBAAuBH,GAAW,QAAQ,CAAC;EAEhE,OADAG,EAAS,QAAQ5G,GAAI;GAAE,SAAS;GAAM,WAAW;GAAM,YAAY;GAAM,iBAAiB,CAAC,UAAU;EAAE,CAAC,SAC3F4G,EAAS,WAAW;CACnC,GAAG,CAAC,CAAC,GACLvC,QAAsB;EACpB,IAAMrE,IAAK4D,EAAK;EAChB,IAAI,CAAC5D,KAAM,CAACgG,GAAW;EACvB,IAAMa,UAAc;GAClB,KAAK,IAAMR,KAAQrG,EAAG,iBAA8B,kBAAkB,GACpE,KAAK,IAAMW,KAAK0F,EAAK,iBAA8B7F,CAAS,GAAG,AAAIG,EAAE,aAAa,UAAU,MAAM,QAAMA,EAAE,aAAa,YAAY,IAAI;EAC3I;EACA,EAAM;EACN,IAAMiG,IAAW,IAAI,iBAAiBC,CAAK;EAE3C,OADAD,EAAS,QAAQ5G,GAAI;GAAE,SAAS;GAAM,WAAW;GAAM,YAAY;GAAM,iBAAiB,CAAC,UAAU;EAAE,CAAC,SAC3F4G,EAAS,WAAW;CACnC,GAAG,CAACZ,CAAS,CAAC,GACd7H,GAAeyF,GAAM,YAAY;CAEjC,IAAMkD,MAAY,GAA8B,MAAiB;EAC/D,IAAM1G,IAAS2G,IAAWjE,EAAM,UAAUiE,CAAQ,IAAI,KAAA;EACtD,IAAI,CAAC3G,GAAQ,aAAa,GAAG,OAAO;EACpC,IAAM4G,IAAM5G,EAAO,UAAU,WAAW,IAClC6G,IAAM7G,EAAO,UAAU,WAAW;EAExC,OADA0C,EAAM,iBAAiB,OAAS;GAAE,GAAGoE;IAAM9G,EAAO,KAAK,KAAK,IAAI4G,GAAK,KAAK,IAAIC,GAAK7G,EAAO,QAAQ,IAAI+G,CAAI,CAAC;EAAE,EAAE,GACxG;CACT,GACMC,MAAiB,MAAqC;EAC1D,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS;EACxC,IAAMZ,IAAU5F,EAAYC,EAAK,OAAO,GAClCwG,IAAKb,EAAQ,QAAQ,EAAE,MAAqB;EAClD,IAAIa,IAAK,GAAG;EACZ,IAAMF,IAAO;GAAE,WAAW;GAAK,YAAY;EAAG,EAAE,EAAE;EAClD,IAAI,EAAE,UAAU;GACd,AAAIA,MAAS,KAAA,KAAaL,GAAU,EAAE,OAAuB,QAAqB,qBAAqB,CAAC,EAAE,QAAQ,KAAKK,CAAI,KAAG,EAAE,eAAe;GAC/I;EACF;EACA,IAAMG,IAAK;GAAE,WAAWD,IAAK;GAAG,YAAYA,IAAK;GAAG,MAAM;GAAG,KAAKb,EAAQ,SAAS;EAAE,EAAE,EAAE;EACzF,AAAIc,MAAO,KAAA,IAGA,EAAE,QAAQ,eAAetB,KAAaf,EAAK,WACpD,EAAE,eAAe,GACjBmB,GAAQD,EAAI,MAJZ,EAAE,eAAe,GACbmB,KAAM,KAAKA,IAAKd,EAAQ,UAAQD,GAAUe,CAAE;CAKpD,GAEMC,WAAa,KAAK,IAAI,GAAG,KAAK,OAAOjC,EAAiB,CAAC,EAAE,gBAAgB,OAAOF,EAAS,IAAI,CAAC,GAC9FoC,MAAe,GAAc,MAAe;EAChD,IAAMC,IAAQlF,EAAO,UAAU0C,EAAK,WAAW,MAAMvB,EAAE,OAAOnB,EAAO,SAAS,EAAE,IAAI;EACpF,AAAIkF,IAAQ,MAAG,EAAO,UAAU;GAAE,IAAIxC,EAAKyC,EAAK,CAAE;GAAI,MAAMhF;EAAa;EACzE,IAAMiF,IAAQF,IAAQ,IAAIC,IAAOD,GAC3BxE,IAAO,EAAE,GAAGV,EAAO,SAAS,KAAK;EACvC,KAAK,IAAMmB,KAAKuB,EAAK,MAAM,KAAK,IAAI0C,GAAOL,CAAE,GAAG,KAAK,IAAIK,GAAOL,CAAE,IAAI,CAAC,GAAG,AAAI5D,EAAE,aAAa,MAAG,EAAKA,EAAE,MAAM;EAC7G,EAAM,gBAAgBT,CAAI;CAC5B,GACM2E,MAAgB,GAAkC,GAAa,MAAc;EACjF,IAAMvB,IAAO,EAAE,eACTvF,IAAS,EAAE;EACjB,IAAIA,MAAWuF,GAAM;GACnB,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,WAAWvF,EAAO,QAAQL,EAAU,GAAG;GACtE,IAAMoH,IAAUnH,GAAY2F,CAAI,GAC1BgB,IAAKQ,EAAQ,QAAQ/G,CAAM;GACjC,IAAIuG,IAAK,GAAG;GAEZ,IAAI,EAAE,QAAQ,YAAY,CAACvG,EAAO,QAAQ,yCAAyC,GAEjF,AADA,EAAE,eAAe,GACjBuF,EAAK,MAAM;QACN,IAAI,EAAE,kBACX;QACK,AAAI,EAAE,QAAQ,gBAAgBwB,EAAQR,IAAK,MAChD,EAAE,eAAe,GACjBQ,EAAQR,IAAK,EAAE,EAAE,MAAM,KACd,EAAE,QAAQ,gBACnB,EAAE,eAAe,IAChBQ,EAAQR,IAAK,MAAMhB,EAAA,CAAM,MAAM;GAElC;EACF;EACA,IAAI,EAAE,QAAQ;EACd,IAAI,EAAE,WAAW,EAAE,SAAS;GAC1B,AAAI,EAAE,IAAI,YAAY,MAAM,OAAOxD,KAAc,CAAC,EAAE,aAClD,EAAE,eAAe,GACjB,EAAO,UAAU,MACjBC,EAAM,sBAAsB,EAAI;GAElC;EACF;EACA,IAAMwE,IAAK;GAAE,WAAW3B,IAAI;GAAG,SAASA,IAAI;GAAG,MAAM;GAAG,KAAKV,EAAK,SAAS;GAAG,UAAUU,IAAI4B,GAAK;GAAG,QAAQ5B,IAAI4B,GAAK;EAAE,EAAE,EAAE;EAC3H,IAAID,MAAO,KAAA,GAAW;GAEpB,IADA,EAAE,eAAe,GACb,EAAE,QAAQ,aAAa,CAAC,EAAE,YAAYA,IAAK,KAAKf,GAAUlE,EAAQ,GAAG;GACzE,IAAMY,IAAO,KAAK,IAAI,GAAG,KAAK,IAAIgC,EAAK,SAAS,GAAGqC,CAAE,CAAC;GAGtD,AAFI,EAAE,YAAYzE,IAAY2E,GAAY7B,GAAG1C,CAAI,IAC5C,EAAO,UAAU,MACtBmD,GAAQnD,CAAI;EACd,OAAO,IAAI,EAAE,UACX;OACK,IAAI,EAAE,QAAQ,cAAc;GACjC,IAAM6E,IAAQpH,GAAY2F,CAAI,CAAC,CAAC;GAChC,IAAI,CAACyB,GAAO;GAEZ,AADA,EAAE,eAAe,GACjBA,EAAM,MAAM;EACd,OAAO,AAAI,EAAE,QAAQ,WACnB,EAAE,eAAe,GACjB7B,IAAa3F,EAAI,QAAQ,MACf,EAAE,QAAQ,OAAO,EAAE,QAAQ,QAAQuC,KAC7C,EAAE,eAAe,GACjB,EAAO,UAAU,MACbvC,EAAI,aAAa,KAAGA,EAAI,eAAe,KAClC,EAAE,QAAQ,YAAYuC,KAAc,OAAO,KAAKH,CAAY,CAAC,CAAC,WACvE,EAAE,eAAe,GACjB,EAAO,UAAU,MACjBI,EAAM,sBAAsB,EAAK;CAErC,GAKMiF,KAAW;EAAC7I;EAAS2F,EAAK,KAAK,MAAMrF,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG;EAAGgC;EAAOwD;EAAQc;EAAmBF;CAAQ,GAChGoC,IAAQxF,EAA+F,IAAI;CACjH,CAAI,CAACwF,EAAM,WAAWD,GAAS,MAAM,GAAG,MAAME,MAAMD,EAAM,SAAS,KAAKrC,EAAE,OAAG,EAAM,UAAU;EAAE,MAAMoC;EAAU,sBAAM,IAAI,QAAQ;CAAE;CACnI,IAAMG,KAAYF,EAAM,QAAQ,MAE1BG,MAAa,GAAa,GAAW,MAA0B;EACnE,IAAMC,IAAS9H,EAAI,OAAO+H,IACpBC,IAAW,CAAC,CAACzF,KAAcvC,EAAI,cAAc,GAC7CW,IAAKmH,KAAUE,GACfC,IAAQ,GAAGH,EAAO,GAAGE,KACrB7I,IAAOyI,GAAU,IAAI5H,CAAG,GACxBkI,KAAQ/I,GAAM,UAAU8I,IAAQ9I,EAAK,QAAQgJ,GAAUnI,GAAKW,CAAE;EACpE,AAAIxB,GAAM,UAAU8I,KAAOL,GAAU,IAAI5H,GAAK;GAAE;GAAO;EAAM,CAAC;EAC9D,IAAMN,IACJ,kBAAC,OAAD;GACE,MAAK;GACL,iBAAe2F,IAAI;GACnB,iBAAe9C,IAAavC,EAAI,cAAc,IAAI,KAAA;GAClD,gBAAc8H,KAAU,KAAA;GACxB,eAAaA,KAAU,KAAA;GACvB,cAAYM,IAAa,IAAIpI,EAAI,EAAE,KAAK,KAAA;GACxC,kBAAgBqF;GAChB,GAAKpE,MAAYoE,MAAM,IAAI,EAAE,cAAcpE,GAAS,IAAI,CAAC;GACzD,UAAUyE,IAAaE,MAAYP,MAAMQ,KAAO,IAAI,KAAM,KAAA;GAC1D,UAAU,MAAM;IACd,AAAI,EAAE,WAAW,EAAE,kBACnB/D,EAAQ,MAAM,GACVuD,MAAM1D,MAAUC,GAAYyD,CAAC;GACnC;GACA,UAAU,MAAM;IAEd,AADA,EAAO,UAAU,MACZ,GAAE,OAAuB,QAAQ,4BAA4B,KAClEM,IAAa3F,EAAI,QAAQ;GAC3B;GACA,YAAY,MAAMsH,GAAa,GAAGtH,GAAKqF,CAAC;GACxC,OAAO;IAAE,GAAGZ;IAAW,GAAGhF;GAAM;GAChC,WAAW5C,EACT,8EACA,CAACqE,KAAS,gBACV7C,EAA0B,QAAQ0G,EAAQ,CAAC,SAC3CY,KAAc,kBACdjF,GAAQ4E,GAAU3E,CAAE,GACpB,gCAEAlB,GAAO,cAAc,KAAA,KAAa,mEAClC,yHACF;GAEC,UAAAyI;EACE,CAAA;EAGP,OADKG,IAEH,kBAAC9K,GAAD,EAAA,UAAA,CACE,kBAACA,EAAY,SAAb,EAAA,UAAsBmC,EAAwB,CAAA,GAC9C,kBAACnC,EAAY,SAAb,EAAA,UAAsB8K,EAAQrI,EAAI,QAAQ,EAAuB,CAAA,CACtD,EAAA,GAHKA,EAAI,EAGT,IALM,kBAAC,OAAD,EAAA,UAAmBN,EAAQ,GAAjBM,EAAI,EAAa;CAOlD;CAEA,SAASmI,GAAU,GAAa,GAAa;EAC3C,OAAOnI,EACJ,gBAAgB,CAAC,CACjB,QAAQ,MAAM,CAACoE,EAAO,IAAIlF,EAAE,OAAO,EAAE,CAAC,CAAC,CACvC,KAAK,GAAM,MAAM;GAChB,IAAMoJ,IAAOC,EAAK,OAAO,UAAU,MAC7BC,IAAUC,GAAWF,EAAK,OAAO,UAAU,MAAMA,EAAK,WAAW,CAAC,GAClEtI,IAAMsI,EAAK,SAAS,GACpBxI,IAAOuI,GAAM,OAAOA,EAAK,KAAKtI,EAAI,QAAQ,IAAI,OAAOC,KAAQ,WAAWA,IAAM,KAAA,GAC9EyI,IAAOJ,GAAM,OAAOtI,EAAI,QAAQ;GACtC,OACE,kBAAC,OAAD;IAEE,MAAK;IACL,WAAWnD,EACTuI,EAAQ,CAAC,GACTkD,GAAM,UAAU,SAAS,kCACzBA,GAAM,QAAQ,mBACdI,KAAQzK,GAAiByK,IACzBnD,EAAU,GAAG,IAAO5E,CAAE,CACxB;IAEC,UAAAZ,MAAS,KAAA,KAAa,OAAOyI,KAAY,WACxC,kBAACpL,GAAD;KAAM,UAAA;KAAS,MAAMsL,KAAQ;KAAW,WAAW7L,EAAG,WAAWyL,GAAM,QAAQ,YAAY;KAAG,MAAM,CAAC,CAACA,GAAM;KACzG,UAAAvI;IACG,CAAA,IACJwI,EAAK,OAAO,OAAO,aACrB,kBAAC,QAAD;KAAM,WAAU;KAAQ,UAAAC;IAAc,CAAA,IAEtC,kBAAC7K,GAAD;KAAe,WAAWd,EAAG,oBAAoByL,GAAM,QAAQ,QAAQ;KAAI,UAAAE;IAAuB,CAAA;GAEjG,GAnBED,EAAK,EAmBP;EAET,CAAC;CACL;CAEA,IAAM9C,MAAU,GAAwE,MAAc;EACpG,IAAM6C,IAAOK,EAAE,OAAO,UAAU,MAC1BC,IAAWD,EAAE,OAAO,WAAW,GAC/BE,IAAYF,EAAE,OAAO,aAAa,GAClCG,IAAMH,EAAE,OAAO,YAAY,GAC3BI,IAAQN,GAAWE,EAAE,OAAO,UAAU,QAAQA,EAAE,WAAW,CAAC,GAC5DH,IACJ,kBAAA9L,IAAA,EAAA,UAAA,CACGkM,IACC,kBAAC,UAAD;GACE,MAAK;GACL,SAASD,EAAE,OAAO,wBAAwB;GAC1C,WAAW9L,EACT,iKACAyI,IAAW,mDAAmD,oCAC9D,iBACAwD,IAAM,YAAY,qBAClBR,GAAM,UAAU,SAAS,kBAC3B;GATF,UAAA,CAWE,kBAAC3K,GAAD,EAAA,UAAgBoL,EAAqB,CAAA,GACrC,kBAAC9L,GAAD;IACE,MAAM6L,MAAQ,SAASnM,KAAyBC;IAChD,MAAK;IACL,WAAWC,EAAG,+BAA+BiM,IAAM,gBAAgB,qCAAqC;GACzG,CAAA,CACK;EAER,CAAA,IAAA,kBAACnL,GAAD;GAAe,WAAU;GAA8C,UAAAoL;EAAqB,CAAA,GAE7FF,KACC,kBAAC,OAAD;GACE,MAAK;GACL,oBAAiB;GACjB,cAAYzH,EAAE,0BAA0B,eAAe;GACvD,iBAAeuH,EAAE,OAAO,QAAQ;GAChC,iBAAeA,EAAE,OAAO,UAAU,WAAW;GAC7C,iBAAeA,EAAE,OAAO,UAAU,WAAW;GAC7C,UAAU;GACV,aAAaA,EAAE,iBAAiB;GAChC,cAAcA,EAAE,iBAAiB;GACjC,qBAAqBA,EAAE,OAAO,UAAU;GACxC,WAAU;EACX,CAAA,CAEH,EAAA,CAAA;EAEJ,OACE,kBAAC,OAAD;GAEE,MAAK;GACL,YAAUA,EAAE,OAAO;GACnB,aAAWG,MAAQ,QAAQ,cAAcA,MAAQ,SAAS,eAAeF,IAAW,SAAS,KAAA;GAC7F,WAAW/L,EAAG,qBAAqBuI,EAAQC,CAAC,GAAGiD,GAAM,UAAU,SAAS,eAAe/C,EAAUF,GAAG,EAAI,GAAGE,EAAUF,GAAG,EAAI,KAAK,mBAAmB;GAEnJ,UAAAwD,IACC,kBAACtL,GAAD,EAAA,UAAA,CACE,kBAACA,EAAY,SAAb;IAAqB,WAAWV,EAAG,iDAAiDyL,GAAM,UAAU,SAAS,aAAa;IACvH,UAAAE;GACkB,CAAA,GACrB,kBAACjL,EAAY,SAAb,EAAA,UAAA;IACE,kBAACA,EAAY,MAAb;KAAkB,eAAeiJ,GAASmC,EAAE,OAAO,IAAI,EAAE;KAAI,UAAAvH,EAAE,yBAAyB,cAAc;IAAoB,CAAA;IAC1H,kBAAC7D,EAAY,MAAb;KAAkB,eAAeiJ,GAASmC,EAAE,OAAO,IAAI,GAAG;KAAI,UAAAvH,EAAE,0BAA0B,eAAe;IAAoB,CAAA;IAC7H,kBAAC7D,EAAY,MAAb;KAAkB,eAAeoL,EAAE,OAAO,UAAU;KAAI,UAAAvH,EAAE,wBAAwB,aAAa;IAAoB,CAAA;GAChG,EAAA,CAAA,CACV,EAAA,CAAA,IAEboH;EAEC,GApBEG,EAAE,EAoBJ;CAET;CAEA,OACE,kBAAC,OAAD;EACE,MAAM,MAAM;GAEV,AADA,EAAK,UAAU,GACX,OAAOO,KAAQ,aAAYA,EAAI,CAAC,IAC3BA,MAAK,EAA4C,UAAU;EACtE;EACA,WAAWrM,EAAG,2BAA2B,CAACqE,KAAS,CAACC,MAAU,SAASgI,EAAS;EANlF,UAAA,CAQE,kBAAC,OAAD;GACE,MAAK;GACL,cAAYnI;GACZ,iBAAe2D,EAAK,SAAS;GAC7B,aAAWyE,MAAW,KAAA;GACtB,WAAWvM,EAAG,wBAAwBqE,KAAS,mCAAmC;GALpF,UAAA,CAOE,kBAAC,OAAD;IACE,KAAKX;IACL,MAAK;IACL,WAAW1D,EAAG,qCAAqCyI,IAAW,cAAc,UAAU;IACtF,WAAWwB;IACX,UAAU,MAAM;KACd,IAAMC,IAAKzG,EAAYC,EAAK,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAqB;KACpE,AAAIwG,IAAK,MACT,EAAO,UAAU,MACjBjF,EAAQ,MAAM,GACdE,GAAY+E,CAAE;IAChB;IACA,WAAW,MAAM;KACf,AAAIzD,EAAK,WAAWA,EAAK,QAAQ,eAAe,EAAE,cAAc,eAAY,EAAK,QAAQ,aAAa,EAAE,cAAc;IACxH;IAEC,UAAAd,EAAM,gBAAgB,CAAC,CAAC,KAAK,MAC5B,kBAAC,OAAD;KAAiB,MAAK;KAAM,iBAAe;KAAG,WAAU;KAA8B,OAAOiC;KAC1F,UAAA4E,EAAG,QAAQ,QAAQ,MAAM,CAACjF,EAAO,IAAIuE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAIlD,EAAM;IAC3D,GAFK4D,EAAG,EAER,CACN;GACE,CAAA,GACL,kBAAC,OAAD;IACE,KAAK/F;IACL,MAAK;IACL,WAAU;IACV,WAAW,MAAM;KACf,AAAI/C,EAAK,WAAWA,EAAK,QAAQ,eAAe,EAAE,cAAc,eAAY,EAAK,QAAQ,aAAa,EAAE,cAAc;IACxH;IAEC,UAAA+I,KACC,kBAAC,OAAD;KAAK,MAAK;KACR,UAAA,kBAAC,OAAD;MAAK,MAAK;MAAO,gBAAc/E,EAAK;MAAQ,WAAU;MACpD,UAAA,kBAAC,OAAD;OAAK,MAAK;OACR,UAAA,kBAAC7G,IAAD;QACE,MAAK;QACL,OAAO0D,EAAE,wBAAwB,0BAA0B;QAC3D,GAAKmI,IAAU,CAAC,IAAI,EAAE,aAAanI,EAAE,2BAA2B,+BAA+B,EAAE;QACjG,SACEmI,KACE,kBAAClM,IAAD;SAAQ,MAAK;SAAK,SAASkM;SACxB,UAAAnI,EAAE,sBAAsB,WAAW;QAC9B,CAAA;OAGb,CAAA;MACE,CAAA;KACF,CAAA;IACF,CAAA,IACHgI,MAAWzE,EAAK,WAAW,IAC7B,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,MAC5B,kBAAC,OAAD;KAAa,MAAK;KAAM,WAAW9H,EAAG,QAAQwB,EAA0B,QAAQ0G,EAAQ,CAAC,OAAO;KAAG,OAAON;KACvG,UAAAF,EAAK,KAAK,GAAG,MACZ,kBAAC,OAAD;MAAgB,MAAK;MAAO,WAAW1H,EAAGuI,EAAQC,CAAC,GAAGnG,EAAE,UAAU,MAAM,UAAU,SAAS,aAAa;MACtG,UAAA,kBAAC1B,IAAD;OAAU,OAAM;OAAO,OAAO,EAAE,OAAO,GAAG,MAAO4F,IAAI,IAAIiC,IAAI,MAAM,GAAI,GAAG;MAAI,CAAA;KAC3E,GAFKnG,EAAE,EAEP,CACN;IACE,GANKkE,CAML,CACN,IACCuB,EAAK,WAAW,IAClB,kBAAC,OAAD;KAAK,MAAK;KACR,UAAA,kBAAC,OAAD;MAAK,MAAK;MAAO,gBAAcJ,EAAK;MAAQ,WAAU;MACnD,UAAAiF,KAAS,kBAAC9L,IAAD;OAAO,MAAK;OAAU,OAAO0D,EAAE,oBAAoB,SAAS;MAAI,CAAA;KACvE,CAAA;IACF,CAAA,IACHwD,IACF,kBAAC,OAAD;KAAK,WAAU;KAAW,OAAO,EAAE,QAAQM,EAAY,aAAa,EAAE;KACnE,UAAAA,EAAY,gBAAgB,CAAC,CAAC,KAAK,MAClC2C,GAAUlD,EAAK8E,EAAE,QAASA,EAAE,OAAO;MACjC,UAAU;MACV,KAAK;MACL,MAAM;MACN,WAAW,cAAc,KAAK,MAAMA,EAAE,QAAQxE,EAAY,EAAE;KAC9D,CAAC,CACH;IACG,CAAA,IAELN,EAAK,KAAK,GAAG,MAAMkD,GAAUzE,GAAGiC,CAAC,CAAC;GAEjC,CAAA,CACF;EACL,CAAA,GAAA,kBAAC5H,IAAD;GAAY,SAAQ;GAAY,SAAS,CAAC,CAACiM;GAAS,SAASC;GAAyB;EAAa,CAAA,CAChG;;AAET;AAEA,IAAMC,KAAgC,mBAAW/I,EAAc;AAC/D,QAAA,IAAA,aAA6B,iBAAc,GAAc,cAAc;AACvE,IAAagJ,IAAYD;;;ACrvBzB,SAASE,EAAuB,GAAc;CAE5C,OADA1L,EAAa,IAAI0B,CAAM,GAChBA;AACT;AAaA,SAASiK,EACP,GACA,GACA,GACA,IAAe,CAAC,GAChB,GACiB;CACjB,OAAO;EACL,IAAIjL,EAAE;EACN,cAAcA,EAAE;EAChB,YAAYkL;EACZ,OAAO,MAAQzB,EAAK0B,EAAI,SAAS,GAAQA,EAAI,IAAI,QAAQ;EACzD,GAAInL,EAAE,OAAO,EAAE,MAAMA,EAAE,KAAK,IAAI,CAAC;EACjC,GAAIoL,IAAY,EAAE,aAAU,IAAI,CAAC;EACjC,MAAM;GACJ,GAAIpL,EAAE,aAAa,KAAA,IAAuC,CAAC,IAA5B,EAAE,UAAUA,EAAE,SAAS;GACtD,GAAIA,EAAE,OAAO,EAAE,MAAM,GAAK,IAAI,CAAC;GAC/B,GAAIA,EAAE,aAAa,KAAA,IAAuC,CAAC,IAA5B,EAAE,UAAUA,EAAE,SAAS;GACtD,GAAIA,EAAE,OAAO,EAAE,MAAMA,EAAE,KAAK,IAAI,CAAC;GACjC,GAAGwJ;EACL;CACF;AACF;AAEA,SAAS6B,GAAO,EAAE,YAA4B;CAE5C,IAAMC,IADI/I,EACI,CAAA,CAAE,wBAAwB,kBAAkB,EAAE,OAAOgJ,EAAaC,CAAK,EAAE,CAAC;CACxF,OACE,kBAACpN,GAAD;EAAS,SAASkN;EAChB,UAAA,kBAAC,QAAD,EAAA,UAAA,CACE,kBAAC,QAAD;GAAM,eAAA;GAAa,UAAAG,EAAaD,CAAK;EAAQ,CAAA,GAC7C,kBAAC,QAAD;GAAM,WAAU;GAAW,UAAAF;EAAY,CAAA,CACnC,EAAA,CAAA;CACC,CAAA;AAEb;AAEA,SAASI,GAAa,EAAE,UAAO,UAAqD;CAClF,IAAMJ,IAAQK,EAAWH,GAAO;EAAE,MAAM;EAAM,SAAS;CAAK,CAAC;CAC7D,OACE,kBAACpN,GAAD;EAAS,SAAS,GAAGkN,EAAM,KAAKK,EAAWH,GAAO;GAAE,MAAM;GAAM,KAAK;EAAK,CAAC;EAAK,OAAM;EACpF,UAAA,kBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,kBAAC,QAAD;IAAM,UAAU,IAAI,KAAKA,CAAK,CAAC,CAAC,YAAY;IAAI,UAAAI,EAAeJ,GAAOtE,CAAG;GAAQ,CAAA,GACjF,kBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CAA0B,KAAEoE,CAAY;GACpC,CAAA,CAAA;;CACC,CAAA;AAEb;AAEA,IAAaO,IAAM;CACjB,OAAW,GAAY,MAA6BZ,EAAKjL,GAAGkL,IAAM,MAAMP,GAAG,EAAE,OAAO,MAASO,EAAI5G,CAAC,EAAE,CAAC;CACrG,OAAW,GAAY,MAA6B2G,EAAKjL,GAAGkL,IAAM,MAAMP,GAAG;EAAE,MAAM;EAAM,OAAO,MAASO,EAAI5G,CAAC;CAAE,CAAC;CACjH,SAAa,GAAY,MAA6B2G,EAAKjL,GAAGkL,IAAM,MAAMK,EAAaZ,CAAC,GAAG,EAAE,OAAO,MAAM,CAAC;CAC3G,QAAY,GAAY,GAA0B,IAA6C,CAAC,MAC9FM,EACEjL,GACAkL,IACC,MAAMY,EAAUnB,GAAGoB,EAAQ,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,UAAUA,EAAQ,SAAS,CAAC,GACxF;EAAE,OAAO;EAAO,MAAM;CAAM,IAC3B,GAAG,GAAG,MAAO,OAAOhM,EAAE,SAASiM,CAAE,CAAC,IAAI,OAAO5L,EAAE,SAAS4L,CAAE,CAAC,CAC9D;CACF,SAAa,GAAY,MAA6Bf,EAAKjL,GAAGkL,IAAM,MAAM,kBAACG,IAAD,EAAQ,OAAOV,EAAI,CAAA,GAAG,EAAE,OAAO,MAAM,CAAC;CAChH,WAAe,GAAY,MAA6BM,EAAKjL,GAAGkL,IAAM,MAAMe,EAAetB,CAAC,GAAG,EAAE,OAAO,MAAM,CAAC;CAC/G,OAAW,GAAY,MACrBK,EACEC,EACEjL,GACAkL,IACC,MAAM,kBAAC,QAAD;EAAM,UAAU,IAAI,KAAKP,CAAC,CAAC,CAAC,YAAY;EAAI,UAAAgB,EAAWhB,GAAG,EAAE,MAAM,GAAK,CAAC;CAAQ,CAAA,GACvF,EAAE,OAAO,MAASgB,EAAWT,EAAI5G,CAAC,GAAG,EAAE,MAAM,GAAK,CAAC,EAAE,GACrD,UACF,CACF;CACF,WAAe,GAAY,GAAiC,IAA+C,CAAC,MAC1G0G,EACEC,EACEjL,GACAkL,IACC,MAAM,kBAACQ,IAAD;EAAc,OAAOf;EAAG,KAAKoB,EAAQ,OAAO,KAAK,IAAI;CAAI,CAAA,GAChE,EAAE,OAAO,MAASJ,EAAWT,EAAI5G,CAAC,GAAG,EAAE,MAAM,GAAK,CAAC,EAAE,IACpD,GAAG,GAAG,MAAO,IAAI,KAAKvE,EAAE,SAASiM,CAAE,CAAW,CAAC,CAAC,QAAQ,IAAI,IAAI,KAAK5L,EAAE,SAAS4L,CAAE,CAAW,CAAC,CAAC,QAAQ,CAC1G,CACF;CACF,SAAa,GAAY,MACvBf,EAAKjL,GAAGkL,IAAM,MAAM,kBAACpM,GAAD;EAAW,MAAM6L,EAAE;EAAO,UAAAA,EAAE;CAAiB,CAAA,GAAG,EAAE,MAAM,KAAA,EAAU,CAAC;CACzF,SAAa,GAAY,MACvBM,EACEjL,GACAkL,IACC,MACC,kBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,kBAAClM,GAAD;GAAQ,MAAM2L,EAAE;GAAM,GAAKA,EAAE,MAAM,EAAE,KAAKA,EAAE,IAAI,IAAI,CAAC;GAAI,MAAM;GAAI,YAAA;EAAY,CAAA,GAC/E,kBAAC9L,GAAD,EAAA,UAAgB8L,EAAE,KAAoB,CAAA,CAClC;CAER,CAAA,GAAA,EAAE,OAAO,MAASO,EAAI5G,CAAC,CAAC,CAAC,KAAK,CAChC;CACF,SACE,GACA,GACA,GACA,IAA4E,CAAC,MAC1E2G,EAAKjL,GAAGkL,GAAKzB,GAAMD,CAAI;AAC9B"}
@@ -2,7 +2,7 @@
2
2
  import { i as e } from "./context-BELWW79w.js";
3
3
  import { i as t } from "./popover-Bl5QYqnh.js";
4
4
  import { t as n } from "./calendar-Dc6_dl0f.js";
5
- import { n as r, r as i, t as a } from "./iso-field-DoqHBg8n.js";
5
+ import { n as r, r as i, t as a } from "./iso-field-BVOKAY4H.js";
6
6
  import { useCallback as o, useId as s, useState as c } from "react";
7
7
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
8
  //#region src/components/date-picker/focus-day.ts
@@ -55,4 +55,4 @@ function f({ date: o, onDateChange: f, onClose: p, weekStartsOn: m, disabledDays
55
55
  //#endregion
56
56
  export { f as DatePopup };
57
57
 
58
- //# sourceMappingURL=date-popup-DAnjptFt.js.map
58
+ //# sourceMappingURL=date-popup-C6vVOOWF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-popup-DAnjptFt.js","names":["useUiText","Popover","Calendar","IsoField","isoProblemText","ISO_PROBLEM","useFocusDay","useCallback","root","frame","DatePopup","t","calendar","errorId","useId","problem","setProblem","useState","date","onDateChange","d","onClose","disabledDays"],"sources":["../../src/components/date-picker/focus-day.ts","../../src/components/date-picker/date-popup.tsx"],"sourcesContent":["import { useCallback } from \"react\";\n\nexport function useFocusDay() {\n return useCallback((root: HTMLDivElement | null) => {\n if (!root) return;\n // Base UI focuses the popup itself when it opens; the grid's day takes focus on the next frame, after that.\n const frame = requestAnimationFrame(() => root.querySelector<HTMLButtonElement>('[role=\"grid\"] button[tabindex=\"0\"]')?.focus({ preventScroll: true }));\n return () => cancelAnimationFrame(frame);\n }, []);\n}\n","import { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { useId, useState } from \"react\";\nimport { ISO_PROBLEM, IsoField, isoProblemText, type IsoProblem } from \"./iso-field.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useFocusDay } from \"./focus-day.js\";\n\nexport interface DatePopupProps {\n date: Date | null;\n onDateChange: (date: Date | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nexport function DatePopup({ date, onDateChange, onClose, weekStartsOn, disabledDays }: DatePopupProps) {\n const t = useUiText();\n const calendar = useFocusDay();\n const errorId = useId();\n const [problem, setProblem] = useState<IsoProblem>(null);\n return (\n <Popover.Content padding=\"form\" aria-label={t(\"datePicker.chooseDate\", \"Choose a date\")}>\n <Calendar\n ref={calendar}\n mode=\"single\"\n selected={date ?? undefined}\n {...(date ? { defaultMonth: date } : {})}\n onSelect={(d) => {\n onDateChange((d as Date | undefined) ?? null);\n if (d) onClose();\n }}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div className=\"mt-12 flex gap-8\">\n <IsoField\n label={t(\"datePicker.date\", \"Date\")}\n value={date ?? undefined}\n invalid={problem !== null}\n errorId={errorId}\n onProblem={setProblem}\n onCommit={(d) => {\n if (disabledDays?.(d)) return false;\n onDateChange(d);\n return true;\n }}\n />\n </div>\n <p id={errorId} role=\"alert\" className={ISO_PROBLEM}>\n {isoProblemText(t, problem)}\n </p>\n </Popover.Content>\n );\n}\n"],"mappings":";;;;;;;;AAEA,SAAgBM,IAAc;CAC5B,OAAOC,GAAa,MAAgC;EAClD,IAAI,CAACC,GAAM;EAEX,IAAMC,IAAQ,4BAA4BD,EAAK,cAAiC,wCAAoC,CAAC,EAAE,MAAM,EAAE,eAAe,GAAK,CAAC,CAAC;EACrJ,aAAa,qBAAqBC,CAAK;CACzC,GAAG,CAAC,CAAC;AACP;;;ACMA,SAAgBC,EAAU,EAAE,SAAM,iBAAc,YAAS,iBAAc,mBAAgC;CACrG,IAAMC,IAAIX,EAAU,GACdY,IAAWN,EAAY,GACvBO,IAAUC,EAAM,GAChB,CAACC,GAASC,KAAcC,EAAqB,IAAI;CACvD,OACE,kBAAChB,EAAQ,SAAT;EAAiB,SAAQ;EAAO,cAAYU,EAAE,yBAAyB,eAAe;EAAtF,UAAA;GACE,kBAACT,GAAD;IACE,KAAKU;IACL,MAAK;IACL,UAAUM,KAAQ,KAAA;IAClB,GAAKA,IAAO,EAAE,cAAcA,EAAK,IAAI,CAAC;IACtC,WAAW,MAAM;KAEf,AADAC,EAAcC,KAA0B,IAAI,GACxCA,KAAGC,EAAQ;IACjB;IACc;IACd,UAAUC;GACX,CAAA;GACD,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACnB,GAAD;KACE,OAAOQ,EAAE,mBAAmB,MAAM;KAClC,OAAOO,KAAQ,KAAA;KACf,SAASH,MAAY;KACZ;KACT,WAAWC;KACX,WAAW,MACT,CAAIM,IAAeF,CAAC,MACpBD,EAAaC,CAAC,GACP;IAEV,CAAA;GACE,CAAA;GACL,kBAAC,KAAD;IAAG,IAAIP;IAAS,MAAK;IAAQ,WAAWR;IACrC,UAAAD,EAAeO,GAAGI,CAAO;GACzB,CAAA;EACY;;AAErB"}
1
+ {"version":3,"file":"date-popup-C6vVOOWF.js","names":["useUiText","Popover","Calendar","IsoField","isoProblemText","ISO_PROBLEM","useFocusDay","useCallback","root","frame","DatePopup","t","calendar","errorId","useId","problem","setProblem","useState","date","onDateChange","d","onClose","disabledDays"],"sources":["../../src/components/date-picker/focus-day.ts","../../src/components/date-picker/date-popup.tsx"],"sourcesContent":["import { useCallback } from \"react\";\n\nexport function useFocusDay() {\n return useCallback((root: HTMLDivElement | null) => {\n if (!root) return;\n // Base UI focuses the popup itself when it opens; the grid's day takes focus on the next frame, after that.\n const frame = requestAnimationFrame(() => root.querySelector<HTMLButtonElement>('[role=\"grid\"] button[tabindex=\"0\"]')?.focus({ preventScroll: true }));\n return () => cancelAnimationFrame(frame);\n }, []);\n}\n","import { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { useId, useState } from \"react\";\nimport { ISO_PROBLEM, IsoField, isoProblemText, type IsoProblem } from \"./iso-field.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useFocusDay } from \"./focus-day.js\";\n\nexport interface DatePopupProps {\n date: Date | null;\n onDateChange: (date: Date | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nexport function DatePopup({ date, onDateChange, onClose, weekStartsOn, disabledDays }: DatePopupProps) {\n const t = useUiText();\n const calendar = useFocusDay();\n const errorId = useId();\n const [problem, setProblem] = useState<IsoProblem>(null);\n return (\n <Popover.Content padding=\"form\" aria-label={t(\"datePicker.chooseDate\", \"Choose a date\")}>\n <Calendar\n ref={calendar}\n mode=\"single\"\n selected={date ?? undefined}\n {...(date ? { defaultMonth: date } : {})}\n onSelect={(d) => {\n onDateChange((d as Date | undefined) ?? null);\n if (d) onClose();\n }}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div className=\"mt-12 flex gap-8\">\n <IsoField\n label={t(\"datePicker.date\", \"Date\")}\n value={date ?? undefined}\n invalid={problem !== null}\n errorId={errorId}\n onProblem={setProblem}\n onCommit={(d) => {\n if (disabledDays?.(d)) return false;\n onDateChange(d);\n return true;\n }}\n />\n </div>\n <p id={errorId} role=\"alert\" className={ISO_PROBLEM}>\n {isoProblemText(t, problem)}\n </p>\n </Popover.Content>\n );\n}\n"],"mappings":";;;;;;;;AAEA,SAAgBM,IAAc;CAC5B,OAAOC,GAAa,MAAgC;EAClD,IAAI,CAACC,GAAM;EAEX,IAAMC,IAAQ,4BAA4BD,EAAK,cAAiC,wCAAoC,CAAC,EAAE,MAAM,EAAE,eAAe,GAAK,CAAC,CAAC;EACrJ,aAAa,qBAAqBC,CAAK;CACzC,GAAG,CAAC,CAAC;AACP;;;ACMA,SAAgBC,EAAU,EAAE,SAAM,iBAAc,YAAS,iBAAc,mBAAgC;CACrG,IAAMC,IAAIX,EAAU,GACdY,IAAWN,EAAY,GACvBO,IAAUC,EAAM,GAChB,CAACC,GAASC,KAAcC,EAAqB,IAAI;CACvD,OACE,kBAAChB,EAAQ,SAAT;EAAiB,SAAQ;EAAO,cAAYU,EAAE,yBAAyB,eAAe;EAAtF,UAAA;GACE,kBAACT,GAAD;IACE,KAAKU;IACL,MAAK;IACL,UAAUM,KAAQ,KAAA;IAClB,GAAKA,IAAO,EAAE,cAAcA,EAAK,IAAI,CAAC;IACtC,WAAW,MAAM;KAEf,AADAC,EAAcC,KAA0B,IAAI,GACxCA,KAAGC,EAAQ;IACjB;IACc;IACd,UAAUC;GACX,CAAA;GACD,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACnB,GAAD;KACE,OAAOQ,EAAE,mBAAmB,MAAM;KAClC,OAAOO,KAAQ,KAAA;KACf,SAASH,MAAY;KACZ;KACT,WAAWC;KACX,WAAW,MACT,CAAIM,IAAeF,CAAC,MACpBD,EAAaC,CAAC,GACP;IAEV,CAAA;GACE,CAAA;GACL,kBAAC,KAAD;IAAG,IAAIP;IAAS,MAAK;IAAQ,WAAWR;IACrC,UAAAD,EAAeO,GAAGI,CAAO;GACzB,CAAA;EACY;;AAErB"}
@@ -4,9 +4,9 @@ import { r as t } from "./portal-context-CTatR2Z8.js";
4
4
  import { n, r, t as i } from "./inset-BUzyXLK4.js";
5
5
  import { i as a } from "./context-BELWW79w.js";
6
6
  import { t as o } from "./merge-refs-BN1FyQt9.js";
7
- import { i as s, n as c } from "./button-IblhXUyZ.js";
8
- import { t as l } from "./icon-button-Dfwpvmav.js";
9
- import { t as u } from "./input-Bo5-UZg2.js";
7
+ import { i as s, n as c } from "./button-DrmFgdIi.js";
8
+ import { t as l } from "./icon-button-6kOn2zrP.js";
9
+ import { t as u } from "./input-D1SeLe3X.js";
10
10
  import { a as d, i as f, t as p } from "./resize-motion-DS3rIIqy.js";
11
11
  import { t as m } from "./over-sheet-B8vzr_zU.js";
12
12
  import { cloneElement as h, createContext as g, forwardRef as _, use as v, useCallback as y, useEffect as b, useLayoutEffect as x, useMemo as S, useRef as C, useState as w } from "react";
@@ -402,4 +402,4 @@ process.env.NODE_ENV !== "production" && (le.displayName = "LayerDialog");
402
402
  //#endregion
403
403
  export { R as a, se as c, ae as i, le as l, X as n, L as o, oe as r, $ as s, Q as t, I as u };
404
404
 
405
- //# sourceMappingURL=dialog-2zb6ClNR.js.map
405
+ //# sourceMappingURL=dialog-s3_LUPBi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-2zb6ClNR.js","names":["BaseDialog","__icon_Cancel01Icon","Dialog","BaseAlertDialog","AlertDialog","__icon_ArrowLeft01Icon","cn","usePortalContainer","GutterContent","useUiText","mergeRefs","KAESO_BUTTON_VARIANTS","Button","IconButton","Input","useRestoreFocus","useScopedDialog","useResizeMotion","OverNonModalSheet","DIALOG_FIELD","FOCUSABLE","usable","el","firstUsable","scope","selector","initialDialogControl","content","frame","toolbar","footer","actions","dangerSecondary","safe","a","danger","primary","focusDialogSection","section","previous","KAESO_DIALOG_VARIANTS","KAESO_DIALOG_DEFAULT_VARIANTS","BACKDROP","DIALOG_VIEWPORT","DIALOG_POPUP","DialogBusy","LayerSlots","isComposing","keepFocusOnBackdrop","useScrolledUnder","ref","useRef","under","setUnder","useState","scrolled","setScrolled","check","useCallback","useEffect","useKeepFocus","rendered","first","active","inline","box","SINGLE_LINE","submitsOnEnter","target","useBox","setBox","DialogFrame","slots","use","boxRef","frameRef","useMemo","rootRef","t","Title","Dialog","closeButton","Cancel01Icon","busy","close","hideClose","Description","bar","headerStart","anchor","size","className","onSubmit","title","description","children","footerStart","RaisedContent","focusFirstControl","open","Root","props","focus","container","overSheet","settled","defaultOpen","o","details","persistent","trigger","InsetContent","Close","cloneElement","Dialog$1","KAESO_ALERT_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","AlertFrame","cancelProp","typed","setTyped","pending","cancelLabel","typeBefore","typeAfter","AlertDialog","ok","confirmText","confirm","loading","r","onConfirm","setBusy","done","confirmRef","tone","confirmLabel","AlertDialog$1","inner","setInner","isOpen","setOpen","onOpenChange","KAESO_LAYER_DIALOG_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","bodyOf","LayerDialog","wanted","layer","index","layers","sections","focused","tops","left","shown","useLayoutEffect","from","back","body","go","i","onLayerChange","stack","current","remember","e","l","ArrowLeft01Icon"],"sources":["../../src/components/dialog/focus.ts","../../src/components/dialog/dialog.tsx"],"sourcesContent":["import { KAESO_BUTTON_VARIANTS } from \"../button/button.js\";\n\nconst DIALOG_FIELD =\n 'input:not([type=hidden]):not([tabindex=\"-1\"]):not([aria-hidden=\"true\"]), textarea, select, [role=combobox]:not([tabindex=\"-1\"]), [role=radio][tabindex=\"0\"], [role=checkbox]:not([tabindex=\"-1\"]), [role=switch]:not([tabindex=\"-1\"]), [role=listbox]:not([tabindex=\"-1\"]), [role=grid] [data-index][tabindex=\"0\"], button[data-picker]';\nconst FOCUSABLE = 'a[href], button, input:not([type=hidden]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst usable = (el: HTMLElement) => !el.closest(\"[hidden], [inert]\") && !el.matches(\":disabled, [aria-disabled=true]\");\nconst firstUsable = (scope: ParentNode, selector: string) => [...scope.querySelectorAll<HTMLElement>(selector)].find(usable) ?? null;\n\nexport function initialDialogControl(frame: HTMLElement, scope?: HTMLElement | undefined): HTMLElement | null {\n const content = scope ?? frame.querySelector<HTMLElement>(\"[data-dialog-body]\");\n const toolbar = frame.querySelector<HTMLElement>(\"[data-dialog-toolbar]\");\n const footer = frame.querySelector<HTMLElement>(\"[data-dialog-footer]\");\n const actions = footer ? [...footer.querySelectorAll<HTMLElement>(\"button, a[href]\")].filter(usable) : [];\n const { primary, danger, \"danger-secondary\": dangerSecondary } = KAESO_BUTTON_VARIANTS.variant;\n const safe = actions.filter((a) => !a.classList.contains(danger.classes) && !a.classList.contains(dangerSecondary.classes));\n return (\n (toolbar && firstUsable(toolbar, \"[data-autofocus]\")) ??\n (content && (firstUsable(content, \"[data-autofocus]\") ?? firstUsable(content, DIALOG_FIELD))) ??\n (toolbar && firstUsable(toolbar, DIALOG_FIELD)) ??\n safe.find((a) => a.classList.contains(primary.classes)) ??\n safe[0] ??\n (content && firstUsable(content, FOCUSABLE)) ??\n firstUsable(frame, FOCUSABLE)\n );\n}\n\nexport function focusDialogSection(section: HTMLElement | null | undefined, previous?: HTMLElement | null | undefined) {\n const frame = section?.closest<HTMLElement>(\"[data-dialog-frame]\");\n if (!section || !frame || frame.closest(\"[data-closed]\")) return;\n const back = previous?.isConnected && frame.contains(previous) && usable(previous) ? previous : null;\n (back ?? initialDialogControl(frame, section))?.focus({ preventScroll: true });\n}\n","import { GutterContent, InsetContent, RaisedContent } from \"../../utils/inset.js\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n use,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useRestoreFocus } from \"../../utils/restore-focus.js\";\nimport { useScopedDialog } from \"../../utils/dialog-scope.js\";\nimport { OverNonModalSheet } from \"../../utils/over-sheet.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Button } from \"../button/button.js\";\nimport { Input } from \"../input/input.js\";\nimport { focusDialogSection, initialDialogControl } from \"./focus.js\";\nimport { useResizeMotion } from \"../../utils/resize-motion.js\";\nimport { mergeRefs } from \"../../utils/merge-refs.js\";\n\nexport const KAESO_DIALOG_VARIANTS = {\n size: {\n sm: { classes: \"w-440\" },\n md: { classes: \"w-560\" },\n lg: { classes: \"w-720\" },\n },\n anchor: {\n center: { classes: \"items-center\" },\n top: { classes: \"items-start pt-dialog-top\" },\n },\n} as const;\nexport const KAESO_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"center\" } as const;\n\nconst BACKDROP = \"fixed inset-0 z-50 bg-overlay backdrop-motion\";\nconst DIALOG_VIEWPORT = \"fixed inset-0 z-50 flex justify-center p-16\";\nconst DIALOG_POPUP = \"relative flex dialog-limits flex-col overflow-hidden rounded-dialog bg-raised text-fg shadow-dialog outline-none dialog-motion\";\n\nconst DialogBusy = /* @__PURE__ */ createContext(false);\nconst LayerSlots = /* @__PURE__ */ createContext({ toolbar: true, footerStart: true });\n\nfunction isComposing(e: KeyboardEvent): boolean {\n // Safari ends composition before the Enter that confirms it, leaving only keyCode 229: https://bugs.webkit.org/show_bug.cgi?id=165004\n return e.nativeEvent.isComposing || e.keyCode === 229;\n}\n\nfunction keepFocusOnBackdrop(e: MouseEvent<HTMLElement>) {\n if (e.target === e.currentTarget) e.preventDefault();\n}\n\nfunction useScrolledUnder<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [under, setUnder] = useState(false);\n const [scrolled, setScrolled] = useState(false);\n const check = useCallback(() => {\n const el = ref.current;\n if (!el || el.closest(\"[data-resizing]\")) return;\n setUnder(el.scrollHeight - el.scrollTop - el.clientHeight > 1);\n setScrolled(el.scrollTop > 0);\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n check();\n el.addEventListener(\"scroll\", check, { passive: true });\n window.addEventListener(\"resize\", check);\n return () => {\n el.removeEventListener(\"scroll\", check);\n window.removeEventListener(\"resize\", check);\n };\n }, [check]);\n return { ref, under, scrolled, check };\n}\n\nfunction useKeepFocus(box: HTMLElement | null, inline: boolean | undefined) {\n const rendered = useRef(false);\n useEffect(() => {\n const first = !rendered.current;\n rendered.current = true;\n const active = document.activeElement;\n if (first || inline || !box || (active && active !== document.body) || box.matches(\"[data-ending-style], [data-closed]\")) return;\n const frame = box.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n if (frame) initialDialogControl(frame)?.focus({ preventScroll: true });\n });\n}\n\nconst SINGLE_LINE = new Set([\"text\", \"email\", \"password\", \"tel\", \"url\", \"number\"]);\n\nfunction submitsOnEnter(e: KeyboardEvent): boolean {\n if (e.key !== \"Enter\" || e.altKey || isComposing(e)) return false;\n if (e.metaKey || e.ctrlKey) return true;\n const target = e.target as HTMLElement;\n return !e.defaultPrevented && !e.shiftKey && target instanceof HTMLInputElement && SINGLE_LINE.has(target.type) && target.getAttribute(\"role\") !== \"combobox\";\n}\n\nfunction useBox(inline: boolean | undefined) {\n const [box, setBox] = useState<HTMLElement | null>(null);\n const ref = useCallback((el: HTMLElement | null) => setBox(inline ? el : (el?.parentElement ?? null)), [inline]);\n return [box, ref] as const;\n}\n\nexport interface DialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n busy?: boolean | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n anchor?: keyof typeof KAESO_DIALOG_VARIANTS.anchor | undefined;\n children?: ReactNode | undefined;\n toolbar?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n footerStart?: ReactNode | undefined;\n onSubmit?: (() => void) | undefined;\n hideClose?: boolean | undefined;\n headerStart?: ReactNode | undefined;\n className?: string | undefined;\n inline?: boolean | undefined;\n persistent?: boolean | undefined;\n}\n\nfunction DialogFrame({\n title,\n description,\n children,\n toolbar,\n footer,\n footerStart,\n onSubmit,\n hideClose,\n headerStart,\n size = \"md\",\n anchor = \"center\",\n className,\n inline,\n busy,\n rootRef,\n}: DialogProps & { rootRef?: Ref<HTMLDivElement> | undefined }) {\n const { ref, under, scrolled, check } = useScrolledUnder<HTMLDivElement>();\n const slots = use(LayerSlots);\n const [box, boxRef] = useBox(inline);\n const frameRef = useMemo(() => mergeRefs(boxRef, rootRef), [boxRef, rootRef]);\n useResizeMotion(box, check);\n useKeepFocus(box, inline);\n const t = useUiText();\n const Title = inline ? \"h2\" : BaseDialog.Title;\n const closeButton = <IconButton icon={__icon_Cancel01Icon} aria-label={t(\"dialog.close\", \"Close\")} tooltip={false} disabled={!!busy} />;\n const close = hideClose ? null : inline ? closeButton : <BaseDialog.Close render={closeButton} />;\n const Description = inline ? \"p\" : BaseDialog.Description;\n const bar = headerStart !== undefined;\n return (\n <DialogBusy value={!!busy}>\n <div\n ref={frameRef}\n data-dialog-frame=\"\"\n className={cn(\n \"@container flex min-h-0 flex-col\",\n inline ? \"rounded-dialog bg-raised shadow-dialog\" : cn(\"flex-1 self-center\", anchor === \"top\" ? \"dialog-limits-top\" : \"dialog-limits\"),\n KAESO_DIALOG_VARIANTS.size[size].classes,\n className,\n )}\n onKeyDown={(e: KeyboardEvent) => {\n if (onSubmit && !busy && submitsOnEnter(e)) {\n e.preventDefault();\n onSubmit();\n }\n }}\n >\n <div\n data-dialog-header=\"\"\n {...(bar ? { \"data-bar\": \"\" } : {})}\n className={cn(\"flex flex-wrap items-start gap-x-12 px-24 pb-4\", bar ? \"pt-16\" : \"pt-20\")}\n >\n {bar && (\n <span data-dialog-start=\"\" className=\"flex h-32 min-w-0 items-center\">\n {headerStart}\n </span>\n )}\n <div data-dialog-titles=\"\" className={cn(\"flex min-w-0 flex-col gap-4\", bar ? \"order-last basis-full pt-8\" : \"flex-1 pt-4\")}>\n <Title className=\"text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty wrap-anywhere\">{description}</Description>}\n </div>\n {close && (\n <span data-dialog-close=\"\" className={cn(\"flex\", bar && \"ml-auto\")}>\n {close}\n </span>\n )}\n </div>\n {toolbar && (\n <div\n data-dialog-toolbar=\"\"\n hidden={!slots.toolbar}\n className={cn(\"flex shrink-0 flex-wrap items-center gap-8 px-24 pt-16 pb-12 transition-control\", scrolled && \"hairline-b\")}\n >\n {toolbar}\n </div>\n )}\n {children && (\n <div\n ref={ref}\n data-dialog-body=\"\"\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto overscroll-contain px-24 scrollbar-quiet\",\n toolbar ? \"pt-0\" : \"pt-16\",\n footer || footerStart ? \"pb-8\" : \"pb-24\",\n )}\n >\n <GutterContent>\n <RaisedContent>{children}</RaisedContent>\n </GutterContent>\n </div>\n )}\n {(footer || footerStart) && (\n <div\n data-dialog-footer=\"\"\n className={cn(\n \"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-24 dialog-narrow:*:flex-auto dialog-narrow:**:data-shortcut:hidden transition-control\",\n under && \"hairline-t\",\n )}\n >\n {footerStart && (\n <div hidden={!slots.footerStart} className=\"mr-auto flex min-w-0 items-center gap-8\">\n {footerStart}\n </div>\n )}\n {footer}\n </div>\n )}\n </div>\n </DialogBusy>\n );\n}\n\nfunction focusFirstControl(): HTMLElement | true {\n const open = [...document.querySelectorAll<HTMLElement>(\"[role=dialog], [role=alertdialog]\")].pop();\n const frame = open?.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n return (frame && initialDialogControl(frame)) ?? open ?? true;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, DialogProps>(function Dialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, size = \"md\", anchor = \"center\", inline, busy, persistent } = props;\n const focus = useRestoreFocus(open, focusFirstControl);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : open);\n if (inline) return <DialogFrame {...props} rootRef={ref} />;\n return (\n <BaseDialog.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n onOpenChange={(o: boolean, details: BaseDialog.Root.ChangeEventDetails) => {\n if (!o && busy) return details.cancel();\n onOpenChange?.(o);\n }}\n onOpenChangeComplete={settled}\n {...(persistent ? { disablePointerDismissal: true } : {})}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor[anchor].classes)} onMouseDown={keepFocusOnBackdrop}>\n <BaseDialog.Popup\n ref={ref}\n initialFocus={focus.initialFocus}\n finalFocus={focus.finalFocus}\n className={cn(DIALOG_POPUP, KAESO_DIALOG_VARIANTS.size[size].classes, anchor === \"top\" && \"dialog-limits-top\")}\n >\n <InsetContent inset={false}>\n <OverNonModalSheet value={false}>\n <DialogFrame {...props} />\n </OverNonModalSheet>\n </InsetContent>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Dialog\";\n\nfunction Close({ children }: { children: ReactElement<{ disabled?: boolean | undefined }> }) {\n const busy = use(DialogBusy);\n return <BaseDialog.Close render={busy ? cloneElement(children, { disabled: true }) : children} />;\n}\nif (process.env.NODE_ENV !== \"production\") Close.displayName = \"Dialog.Close\";\n\nexport const Dialog = /* @__PURE__ */ Object.assign(Root, { Close });\n\nexport const KAESO_ALERT_DIALOG_VARIANTS = {\n tone: {\n danger: { classes: \"\" },\n warning: { classes: \"\" },\n info: { classes: \"\" },\n },\n} as const;\nexport const KAESO_ALERT_DIALOG_DEFAULT_VARIANTS = { tone: \"danger\" } as const;\n\nexport interface AlertDialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description: ReactNode;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n onConfirm: () => void | Promise<unknown>;\n tone?: keyof typeof KAESO_ALERT_DIALOG_VARIANTS.tone | undefined;\n confirmText?: string | undefined;\n loading?: boolean | undefined;\n inline?: boolean | undefined;\n}\n\nfunction AlertFrame({\n title,\n description,\n confirmLabel,\n cancelLabel: cancelProp,\n onConfirm,\n tone = \"danger\",\n confirmText,\n loading,\n inline,\n close,\n busy,\n setBusy,\n rootRef,\n confirmRef,\n}: AlertDialogProps & {\n close: () => void;\n busy: boolean;\n setBusy: (busy: boolean) => void;\n rootRef?: Ref<HTMLDivElement> | undefined;\n confirmRef?: Ref<HTMLButtonElement> | undefined;\n}) {\n const [typed, setTyped] = useState(\"\");\n const pending = useRef(false);\n const t = useUiText();\n const [box, boxRef] = useBox(inline);\n const frameRef = useMemo(() => mergeRefs(boxRef, rootRef), [boxRef, rootRef]);\n useResizeMotion(box);\n const cancelLabel = cancelProp ?? t(\"alertDialog.cancel\", \"Cancel\");\n const [typeBefore, typeAfter = \"\"] = t(\"alertDialog.typeToConfirm\", \"Type {text} to confirm\").split(\"{text}\");\n const Title = inline ? \"h2\" : BaseAlertDialog.Title;\n const Description = inline ? \"p\" : BaseAlertDialog.Description;\n const ok = !confirmText || typed === confirmText;\n const confirm = async () => {\n if (!ok || loading || pending.current) return;\n const r = onConfirm();\n if (!(r instanceof Promise)) return close();\n pending.current = true;\n setBusy(true);\n const done = await r.then(\n () => true,\n () => false,\n );\n pending.current = false;\n setBusy(false);\n if (done) close();\n };\n return (\n <div\n ref={frameRef}\n className={cn(\"@container flex min-h-0 w-440 flex-col\", inline ? \"rounded-dialog bg-raised shadow-dialog\" : \"self-center dialog-limits\")}\n >\n <div data-dialog-body=\"\" className=\"flex min-h-0 flex-col gap-20 overflow-y-auto overscroll-contain px-24 pt-24 pb-4 scrollbar-quiet\">\n <div className=\"flex flex-col gap-6\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</Title>\n <Description className=\"text-body text-fg-secondary text-pretty wrap-anywhere\">{description}</Description>\n </div>\n {confirmText && (\n <Input\n label={\n <span className=\"font-regular text-fg-secondary\">\n {typeBefore}\n <span className=\"mono font-medium text-fg\">{confirmText}</span>\n {typeAfter}\n </span>\n }\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoComplete=\"off\"\n spellCheck={false}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !isComposing(e)) void confirm();\n }}\n />\n )}\n </div>\n <div\n data-dialog-footer=\"\"\n className=\"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-24 dialog-narrow:*:flex-auto dialog-narrow:**:data-shortcut:hidden\"\n >\n {inline ? <Button>{cancelLabel}</Button> : <BaseAlertDialog.Close render={<Button disabled={busy || !!loading}>{cancelLabel}</Button>} />}\n <Button ref={confirmRef} variant={tone === \"danger\" ? \"danger\" : \"primary\"} onClick={confirm} disabled={!ok} loading={busy || loading}>\n {confirmLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport const AlertDialog = /* @__PURE__ */ forwardRef<HTMLDivElement, AlertDialogProps>(function AlertDialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, inline } = props;\n const [inner, setInner] = useState(defaultOpen ?? false);\n const isOpen = open ?? inner;\n const setOpen = (o: boolean) => {\n if (open === undefined) setInner(o);\n onOpenChange?.(o);\n };\n const [busy, setBusy] = useState(false);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const focus = useRestoreFocus(isOpen, () => (props.tone === \"info\" && !props.confirmText && confirmRef.current) || true);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : isOpen);\n if (inline) return <AlertFrame {...props} close={() => undefined} busy={busy} setBusy={setBusy} rootRef={ref} />;\n return (\n <BaseAlertDialog.Root\n open={isOpen}\n onOpenChange={(o: boolean, details: BaseAlertDialog.Root.ChangeEventDetails) => {\n if (!o && (busy || props.loading)) return details.cancel();\n setOpen(o);\n }}\n onOpenChangeComplete={settled}\n >\n {trigger && <BaseAlertDialog.Trigger render={trigger} />}\n <BaseAlertDialog.Portal container={container}>\n <BaseAlertDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseAlertDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor.center.classes)} onMouseDown={keepFocusOnBackdrop}>\n <BaseAlertDialog.Popup ref={ref} initialFocus={focus.initialFocus} finalFocus={focus.finalFocus} className={cn(DIALOG_POPUP, \"w-440\")}>\n <InsetContent inset={false}>\n <AlertFrame {...props} close={() => setOpen(false)} busy={busy} setBusy={setBusy} confirmRef={confirmRef} />\n </InsetContent>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Viewport>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") AlertDialog.displayName = \"AlertDialog\";\n\nexport const KAESO_LAYER_DIALOG_VARIANTS = KAESO_DIALOG_VARIANTS;\nexport const KAESO_LAYER_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"top\" } as const;\n\nexport interface DialogLayer {\n title: ReactNode;\n description?: ReactNode | undefined;\n toolbar?: ReactNode | undefined;\n content: ReactNode;\n footer?: ReactNode | undefined;\n footerStart?: ReactNode | undefined;\n}\n\nexport interface LayerDialogProps extends Omit<DialogProps, \"title\" | \"description\" | \"children\" | \"toolbar\" | \"footer\" | \"footerStart\" | \"headerStart\"> {\n layers: DialogLayer[];\n layer?: number | undefined;\n onLayerChange?: ((layer: number) => void) | undefined;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport const LayerDialog = /* @__PURE__ */ forwardRef<HTMLDivElement, LayerDialogProps>(function LayerDialog(\n { layers, layer, onLayerChange, anchor = KAESO_LAYER_DIALOG_DEFAULT_VARIANTS.anchor, ...props },\n ref,\n) {\n const [inner, setInner] = useState(0);\n const t = useUiText();\n const wanted = layer ?? inner;\n const index = wanted > 0 && wanted < layers.length ? wanted : 0;\n const sections = useRef<(HTMLDivElement | null)[]>([]);\n const focused = useRef<(HTMLElement | null)[]>([]);\n const tops = useRef<number[]>([]);\n const left = useRef(index);\n const shown = useRef(index);\n if (left.current !== index) {\n tops.current[left.current] = bodyOf(sections.current[left.current])?.scrollTop ?? 0;\n left.current = index;\n }\n useLayoutEffect(() => {\n const from = shown.current;\n shown.current = index;\n if (from === index) return;\n const back = index < from;\n if (!back) focused.current[index] = null;\n focused.current.length = index + 1;\n const section = sections.current[index];\n const body = bodyOf(section);\n if (body) body.scrollTop = back ? (tops.current[index] ?? 0) : 0;\n focusDialogSection(section, back ? focused.current[index] : null);\n }, [index]);\n const go = (i: number) => {\n if (props.busy) return;\n if (layer === undefined) setInner(i);\n onLayerChange?.(i);\n };\n const stack = layers.slice(0, index + 1);\n const current = stack[index];\n if (!current) return null;\n const remember = (i: number) => (e: FocusEvent<HTMLElement>) => {\n if (e.target instanceof HTMLElement) focused.current[i] = e.target;\n };\n return (\n <LayerSlots value={{ toolbar: !!current.toolbar, footerStart: !!current.footerStart }}>\n <Dialog\n ref={ref}\n {...props}\n anchor={anchor}\n title={current.title}\n description={current.description}\n toolbar={\n stack.some((l) => l.toolbar)\n ? stack.map((l, i) =>\n l.toolbar ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.toolbar}\n </div>\n ) : null,\n )\n : undefined\n }\n footerStart={\n stack.some((l) => l.footerStart)\n ? stack.map((l, i) =>\n l.footerStart ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.footerStart}\n </div>\n ) : null,\n )\n : undefined\n }\n footer={\n current.footer\n ? stack.map((l, i) =>\n l.footer ? (\n <div key={i} hidden={i !== index} className=\"contents dialog-narrow:*:flex-auto dialog-narrow:**:data-shortcut:hidden\" onFocus={remember(i)}>\n {l.footer}\n </div>\n ) : null,\n )\n : undefined\n }\n headerStart={\n index > 0 ? (\n <IconButton\n key=\"back\"\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"dialog.back\", \"Back\")}\n onClick={() => go(index - 1)}\n disabled={!!props.busy}\n className=\"animate-layer-in\"\n />\n ) : null\n }\n >\n {stack.map((l, i) => (\n <div\n key={i}\n ref={(el) => {\n sections.current[i] = el;\n }}\n hidden={i !== index}\n className=\"animate-layer-in\"\n onFocus={remember(i)}\n >\n {l.content}\n </div>\n ))}\n </Dialog>\n </LayerSlots>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LayerDialog.displayName = \"LayerDialog\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog-s3_LUPBi.js","names":["BaseDialog","__icon_Cancel01Icon","Dialog","BaseAlertDialog","AlertDialog","__icon_ArrowLeft01Icon","cn","usePortalContainer","GutterContent","useUiText","mergeRefs","KAESO_BUTTON_VARIANTS","Button","IconButton","Input","useRestoreFocus","useScopedDialog","useResizeMotion","OverNonModalSheet","DIALOG_FIELD","FOCUSABLE","usable","el","firstUsable","scope","selector","initialDialogControl","content","frame","toolbar","footer","actions","dangerSecondary","safe","a","danger","primary","focusDialogSection","section","previous","KAESO_DIALOG_VARIANTS","KAESO_DIALOG_DEFAULT_VARIANTS","BACKDROP","DIALOG_VIEWPORT","DIALOG_POPUP","DialogBusy","LayerSlots","isComposing","keepFocusOnBackdrop","useScrolledUnder","ref","useRef","under","setUnder","useState","scrolled","setScrolled","check","useCallback","useEffect","useKeepFocus","rendered","first","active","inline","box","SINGLE_LINE","submitsOnEnter","target","useBox","setBox","DialogFrame","slots","use","boxRef","frameRef","useMemo","rootRef","t","Title","Dialog","closeButton","Cancel01Icon","busy","close","hideClose","Description","bar","headerStart","anchor","size","className","onSubmit","title","description","children","footerStart","RaisedContent","focusFirstControl","open","Root","props","focus","container","overSheet","settled","defaultOpen","o","details","persistent","trigger","InsetContent","Close","cloneElement","Dialog$1","KAESO_ALERT_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","AlertFrame","cancelProp","typed","setTyped","pending","cancelLabel","typeBefore","typeAfter","AlertDialog","ok","confirmText","confirm","loading","r","onConfirm","setBusy","done","confirmRef","tone","confirmLabel","AlertDialog$1","inner","setInner","isOpen","setOpen","onOpenChange","KAESO_LAYER_DIALOG_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","bodyOf","LayerDialog","wanted","layer","index","layers","sections","focused","tops","left","shown","useLayoutEffect","from","back","body","go","i","onLayerChange","stack","current","remember","e","l","ArrowLeft01Icon"],"sources":["../../src/components/dialog/focus.ts","../../src/components/dialog/dialog.tsx"],"sourcesContent":["import { KAESO_BUTTON_VARIANTS } from \"../button/button.js\";\n\nconst DIALOG_FIELD =\n 'input:not([type=hidden]):not([tabindex=\"-1\"]):not([aria-hidden=\"true\"]), textarea, select, [role=combobox]:not([tabindex=\"-1\"]), [role=radio][tabindex=\"0\"], [role=checkbox]:not([tabindex=\"-1\"]), [role=switch]:not([tabindex=\"-1\"]), [role=listbox]:not([tabindex=\"-1\"]), [role=grid] [data-index][tabindex=\"0\"], button[data-picker]';\nconst FOCUSABLE = 'a[href], button, input:not([type=hidden]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst usable = (el: HTMLElement) => !el.closest(\"[hidden], [inert]\") && !el.matches(\":disabled, [aria-disabled=true]\");\nconst firstUsable = (scope: ParentNode, selector: string) => [...scope.querySelectorAll<HTMLElement>(selector)].find(usable) ?? null;\n\nexport function initialDialogControl(frame: HTMLElement, scope?: HTMLElement | undefined): HTMLElement | null {\n const content = scope ?? frame.querySelector<HTMLElement>(\"[data-dialog-body]\");\n const toolbar = frame.querySelector<HTMLElement>(\"[data-dialog-toolbar]\");\n const footer = frame.querySelector<HTMLElement>(\"[data-dialog-footer]\");\n const actions = footer ? [...footer.querySelectorAll<HTMLElement>(\"button, a[href]\")].filter(usable) : [];\n const { primary, danger, \"danger-secondary\": dangerSecondary } = KAESO_BUTTON_VARIANTS.variant;\n const safe = actions.filter((a) => !a.classList.contains(danger.classes) && !a.classList.contains(dangerSecondary.classes));\n return (\n (toolbar && firstUsable(toolbar, \"[data-autofocus]\")) ??\n (content && (firstUsable(content, \"[data-autofocus]\") ?? firstUsable(content, DIALOG_FIELD))) ??\n (toolbar && firstUsable(toolbar, DIALOG_FIELD)) ??\n safe.find((a) => a.classList.contains(primary.classes)) ??\n safe[0] ??\n (content && firstUsable(content, FOCUSABLE)) ??\n firstUsable(frame, FOCUSABLE)\n );\n}\n\nexport function focusDialogSection(section: HTMLElement | null | undefined, previous?: HTMLElement | null | undefined) {\n const frame = section?.closest<HTMLElement>(\"[data-dialog-frame]\");\n if (!section || !frame || frame.closest(\"[data-closed]\")) return;\n const back = previous?.isConnected && frame.contains(previous) && usable(previous) ? previous : null;\n (back ?? initialDialogControl(frame, section))?.focus({ preventScroll: true });\n}\n","import { GutterContent, InsetContent, RaisedContent } from \"../../utils/inset.js\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n use,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useRestoreFocus } from \"../../utils/restore-focus.js\";\nimport { useScopedDialog } from \"../../utils/dialog-scope.js\";\nimport { OverNonModalSheet } from \"../../utils/over-sheet.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Button } from \"../button/button.js\";\nimport { Input } from \"../input/input.js\";\nimport { focusDialogSection, initialDialogControl } from \"./focus.js\";\nimport { useResizeMotion } from \"../../utils/resize-motion.js\";\nimport { mergeRefs } from \"../../utils/merge-refs.js\";\n\nexport const KAESO_DIALOG_VARIANTS = {\n size: {\n sm: { classes: \"w-440\" },\n md: { classes: \"w-560\" },\n lg: { classes: \"w-720\" },\n },\n anchor: {\n center: { classes: \"items-center\" },\n top: { classes: \"items-start pt-dialog-top\" },\n },\n} as const;\nexport const KAESO_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"center\" } as const;\n\nconst BACKDROP = \"fixed inset-0 z-50 bg-overlay backdrop-motion\";\nconst DIALOG_VIEWPORT = \"fixed inset-0 z-50 flex justify-center p-16\";\nconst DIALOG_POPUP = \"relative flex dialog-limits flex-col overflow-hidden rounded-dialog bg-raised text-fg shadow-dialog outline-none dialog-motion\";\n\nconst DialogBusy = /* @__PURE__ */ createContext(false);\nconst LayerSlots = /* @__PURE__ */ createContext({ toolbar: true, footerStart: true });\n\nfunction isComposing(e: KeyboardEvent): boolean {\n // Safari ends composition before the Enter that confirms it, leaving only keyCode 229: https://bugs.webkit.org/show_bug.cgi?id=165004\n return e.nativeEvent.isComposing || e.keyCode === 229;\n}\n\nfunction keepFocusOnBackdrop(e: MouseEvent<HTMLElement>) {\n if (e.target === e.currentTarget) e.preventDefault();\n}\n\nfunction useScrolledUnder<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [under, setUnder] = useState(false);\n const [scrolled, setScrolled] = useState(false);\n const check = useCallback(() => {\n const el = ref.current;\n if (!el || el.closest(\"[data-resizing]\")) return;\n setUnder(el.scrollHeight - el.scrollTop - el.clientHeight > 1);\n setScrolled(el.scrollTop > 0);\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n check();\n el.addEventListener(\"scroll\", check, { passive: true });\n window.addEventListener(\"resize\", check);\n return () => {\n el.removeEventListener(\"scroll\", check);\n window.removeEventListener(\"resize\", check);\n };\n }, [check]);\n return { ref, under, scrolled, check };\n}\n\nfunction useKeepFocus(box: HTMLElement | null, inline: boolean | undefined) {\n const rendered = useRef(false);\n useEffect(() => {\n const first = !rendered.current;\n rendered.current = true;\n const active = document.activeElement;\n if (first || inline || !box || (active && active !== document.body) || box.matches(\"[data-ending-style], [data-closed]\")) return;\n const frame = box.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n if (frame) initialDialogControl(frame)?.focus({ preventScroll: true });\n });\n}\n\nconst SINGLE_LINE = new Set([\"text\", \"email\", \"password\", \"tel\", \"url\", \"number\"]);\n\nfunction submitsOnEnter(e: KeyboardEvent): boolean {\n if (e.key !== \"Enter\" || e.altKey || isComposing(e)) return false;\n if (e.metaKey || e.ctrlKey) return true;\n const target = e.target as HTMLElement;\n return !e.defaultPrevented && !e.shiftKey && target instanceof HTMLInputElement && SINGLE_LINE.has(target.type) && target.getAttribute(\"role\") !== \"combobox\";\n}\n\nfunction useBox(inline: boolean | undefined) {\n const [box, setBox] = useState<HTMLElement | null>(null);\n const ref = useCallback((el: HTMLElement | null) => setBox(inline ? el : (el?.parentElement ?? null)), [inline]);\n return [box, ref] as const;\n}\n\nexport interface DialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n busy?: boolean | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n anchor?: keyof typeof KAESO_DIALOG_VARIANTS.anchor | undefined;\n children?: ReactNode | undefined;\n toolbar?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n footerStart?: ReactNode | undefined;\n onSubmit?: (() => void) | undefined;\n hideClose?: boolean | undefined;\n headerStart?: ReactNode | undefined;\n className?: string | undefined;\n inline?: boolean | undefined;\n persistent?: boolean | undefined;\n}\n\nfunction DialogFrame({\n title,\n description,\n children,\n toolbar,\n footer,\n footerStart,\n onSubmit,\n hideClose,\n headerStart,\n size = \"md\",\n anchor = \"center\",\n className,\n inline,\n busy,\n rootRef,\n}: DialogProps & { rootRef?: Ref<HTMLDivElement> | undefined }) {\n const { ref, under, scrolled, check } = useScrolledUnder<HTMLDivElement>();\n const slots = use(LayerSlots);\n const [box, boxRef] = useBox(inline);\n const frameRef = useMemo(() => mergeRefs(boxRef, rootRef), [boxRef, rootRef]);\n useResizeMotion(box, check);\n useKeepFocus(box, inline);\n const t = useUiText();\n const Title = inline ? \"h2\" : BaseDialog.Title;\n const closeButton = <IconButton icon={__icon_Cancel01Icon} aria-label={t(\"dialog.close\", \"Close\")} tooltip={false} disabled={!!busy} />;\n const close = hideClose ? null : inline ? closeButton : <BaseDialog.Close render={closeButton} />;\n const Description = inline ? \"p\" : BaseDialog.Description;\n const bar = headerStart !== undefined;\n return (\n <DialogBusy value={!!busy}>\n <div\n ref={frameRef}\n data-dialog-frame=\"\"\n className={cn(\n \"@container flex min-h-0 flex-col\",\n inline ? \"rounded-dialog bg-raised shadow-dialog\" : cn(\"flex-1 self-center\", anchor === \"top\" ? \"dialog-limits-top\" : \"dialog-limits\"),\n KAESO_DIALOG_VARIANTS.size[size].classes,\n className,\n )}\n onKeyDown={(e: KeyboardEvent) => {\n if (onSubmit && !busy && submitsOnEnter(e)) {\n e.preventDefault();\n onSubmit();\n }\n }}\n >\n <div\n data-dialog-header=\"\"\n {...(bar ? { \"data-bar\": \"\" } : {})}\n className={cn(\"flex flex-wrap items-start gap-x-12 px-24 pb-4\", bar ? \"pt-16\" : \"pt-20\")}\n >\n {bar && (\n <span data-dialog-start=\"\" className=\"flex h-32 min-w-0 items-center\">\n {headerStart}\n </span>\n )}\n <div data-dialog-titles=\"\" className={cn(\"flex min-w-0 flex-col gap-4\", bar ? \"order-last basis-full pt-8\" : \"flex-1 pt-4\")}>\n <Title className=\"text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty wrap-anywhere\">{description}</Description>}\n </div>\n {close && (\n <span data-dialog-close=\"\" className={cn(\"flex\", bar && \"ml-auto\")}>\n {close}\n </span>\n )}\n </div>\n {toolbar && (\n <div\n data-dialog-toolbar=\"\"\n hidden={!slots.toolbar}\n className={cn(\"flex shrink-0 flex-wrap items-center gap-8 px-24 pt-16 pb-12 transition-control\", scrolled && \"hairline-b\")}\n >\n {toolbar}\n </div>\n )}\n {children && (\n <div\n ref={ref}\n data-dialog-body=\"\"\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto overscroll-contain px-24 scrollbar-quiet\",\n toolbar ? \"pt-0\" : \"pt-16\",\n footer || footerStart ? \"pb-8\" : \"pb-24\",\n )}\n >\n <GutterContent>\n <RaisedContent>{children}</RaisedContent>\n </GutterContent>\n </div>\n )}\n {(footer || footerStart) && (\n <div\n data-dialog-footer=\"\"\n className={cn(\n \"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-24 dialog-narrow:*:flex-auto dialog-narrow:**:data-shortcut:hidden transition-control\",\n under && \"hairline-t\",\n )}\n >\n {footerStart && (\n <div hidden={!slots.footerStart} className=\"mr-auto flex min-w-0 items-center gap-8\">\n {footerStart}\n </div>\n )}\n {footer}\n </div>\n )}\n </div>\n </DialogBusy>\n );\n}\n\nfunction focusFirstControl(): HTMLElement | true {\n const open = [...document.querySelectorAll<HTMLElement>(\"[role=dialog], [role=alertdialog]\")].pop();\n const frame = open?.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n return (frame && initialDialogControl(frame)) ?? open ?? true;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, DialogProps>(function Dialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, size = \"md\", anchor = \"center\", inline, busy, persistent } = props;\n const focus = useRestoreFocus(open, focusFirstControl);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : open);\n if (inline) return <DialogFrame {...props} rootRef={ref} />;\n return (\n <BaseDialog.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n onOpenChange={(o: boolean, details: BaseDialog.Root.ChangeEventDetails) => {\n if (!o && busy) return details.cancel();\n onOpenChange?.(o);\n }}\n onOpenChangeComplete={settled}\n {...(persistent ? { disablePointerDismissal: true } : {})}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor[anchor].classes)} onMouseDown={keepFocusOnBackdrop}>\n <BaseDialog.Popup\n ref={ref}\n initialFocus={focus.initialFocus}\n finalFocus={focus.finalFocus}\n className={cn(DIALOG_POPUP, KAESO_DIALOG_VARIANTS.size[size].classes, anchor === \"top\" && \"dialog-limits-top\")}\n >\n <InsetContent inset={false}>\n <OverNonModalSheet value={false}>\n <DialogFrame {...props} />\n </OverNonModalSheet>\n </InsetContent>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Dialog\";\n\nfunction Close({ children }: { children: ReactElement<{ disabled?: boolean | undefined }> }) {\n const busy = use(DialogBusy);\n return <BaseDialog.Close render={busy ? cloneElement(children, { disabled: true }) : children} />;\n}\nif (process.env.NODE_ENV !== \"production\") Close.displayName = \"Dialog.Close\";\n\nexport const Dialog = /* @__PURE__ */ Object.assign(Root, { Close });\n\nexport const KAESO_ALERT_DIALOG_VARIANTS = {\n tone: {\n danger: { classes: \"\" },\n warning: { classes: \"\" },\n info: { classes: \"\" },\n },\n} as const;\nexport const KAESO_ALERT_DIALOG_DEFAULT_VARIANTS = { tone: \"danger\" } as const;\n\nexport interface AlertDialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description: ReactNode;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n onConfirm: () => void | Promise<unknown>;\n tone?: keyof typeof KAESO_ALERT_DIALOG_VARIANTS.tone | undefined;\n confirmText?: string | undefined;\n loading?: boolean | undefined;\n inline?: boolean | undefined;\n}\n\nfunction AlertFrame({\n title,\n description,\n confirmLabel,\n cancelLabel: cancelProp,\n onConfirm,\n tone = \"danger\",\n confirmText,\n loading,\n inline,\n close,\n busy,\n setBusy,\n rootRef,\n confirmRef,\n}: AlertDialogProps & {\n close: () => void;\n busy: boolean;\n setBusy: (busy: boolean) => void;\n rootRef?: Ref<HTMLDivElement> | undefined;\n confirmRef?: Ref<HTMLButtonElement> | undefined;\n}) {\n const [typed, setTyped] = useState(\"\");\n const pending = useRef(false);\n const t = useUiText();\n const [box, boxRef] = useBox(inline);\n const frameRef = useMemo(() => mergeRefs(boxRef, rootRef), [boxRef, rootRef]);\n useResizeMotion(box);\n const cancelLabel = cancelProp ?? t(\"alertDialog.cancel\", \"Cancel\");\n const [typeBefore, typeAfter = \"\"] = t(\"alertDialog.typeToConfirm\", \"Type {text} to confirm\").split(\"{text}\");\n const Title = inline ? \"h2\" : BaseAlertDialog.Title;\n const Description = inline ? \"p\" : BaseAlertDialog.Description;\n const ok = !confirmText || typed === confirmText;\n const confirm = async () => {\n if (!ok || loading || pending.current) return;\n const r = onConfirm();\n if (!(r instanceof Promise)) return close();\n pending.current = true;\n setBusy(true);\n const done = await r.then(\n () => true,\n () => false,\n );\n pending.current = false;\n setBusy(false);\n if (done) close();\n };\n return (\n <div\n ref={frameRef}\n className={cn(\"@container flex min-h-0 w-440 flex-col\", inline ? \"rounded-dialog bg-raised shadow-dialog\" : \"self-center dialog-limits\")}\n >\n <div data-dialog-body=\"\" className=\"flex min-h-0 flex-col gap-20 overflow-y-auto overscroll-contain px-24 pt-24 pb-4 scrollbar-quiet\">\n <div className=\"flex flex-col gap-6\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</Title>\n <Description className=\"text-body text-fg-secondary text-pretty wrap-anywhere\">{description}</Description>\n </div>\n {confirmText && (\n <Input\n label={\n <span className=\"font-regular text-fg-secondary\">\n {typeBefore}\n <span className=\"mono font-medium text-fg\">{confirmText}</span>\n {typeAfter}\n </span>\n }\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoComplete=\"off\"\n spellCheck={false}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !isComposing(e)) void confirm();\n }}\n />\n )}\n </div>\n <div\n data-dialog-footer=\"\"\n className=\"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-24 dialog-narrow:*:flex-auto dialog-narrow:**:data-shortcut:hidden\"\n >\n {inline ? <Button>{cancelLabel}</Button> : <BaseAlertDialog.Close render={<Button disabled={busy || !!loading}>{cancelLabel}</Button>} />}\n <Button ref={confirmRef} variant={tone === \"danger\" ? \"danger\" : \"primary\"} onClick={confirm} disabled={!ok} loading={busy || loading}>\n {confirmLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport const AlertDialog = /* @__PURE__ */ forwardRef<HTMLDivElement, AlertDialogProps>(function AlertDialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, inline } = props;\n const [inner, setInner] = useState(defaultOpen ?? false);\n const isOpen = open ?? inner;\n const setOpen = (o: boolean) => {\n if (open === undefined) setInner(o);\n onOpenChange?.(o);\n };\n const [busy, setBusy] = useState(false);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const focus = useRestoreFocus(isOpen, () => (props.tone === \"info\" && !props.confirmText && confirmRef.current) || true);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : isOpen);\n if (inline) return <AlertFrame {...props} close={() => undefined} busy={busy} setBusy={setBusy} rootRef={ref} />;\n return (\n <BaseAlertDialog.Root\n open={isOpen}\n onOpenChange={(o: boolean, details: BaseAlertDialog.Root.ChangeEventDetails) => {\n if (!o && (busy || props.loading)) return details.cancel();\n setOpen(o);\n }}\n onOpenChangeComplete={settled}\n >\n {trigger && <BaseAlertDialog.Trigger render={trigger} />}\n <BaseAlertDialog.Portal container={container}>\n <BaseAlertDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseAlertDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor.center.classes)} onMouseDown={keepFocusOnBackdrop}>\n <BaseAlertDialog.Popup ref={ref} initialFocus={focus.initialFocus} finalFocus={focus.finalFocus} className={cn(DIALOG_POPUP, \"w-440\")}>\n <InsetContent inset={false}>\n <AlertFrame {...props} close={() => setOpen(false)} busy={busy} setBusy={setBusy} confirmRef={confirmRef} />\n </InsetContent>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Viewport>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") AlertDialog.displayName = \"AlertDialog\";\n\nexport const KAESO_LAYER_DIALOG_VARIANTS = KAESO_DIALOG_VARIANTS;\nexport const KAESO_LAYER_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"top\" } as const;\n\nexport interface DialogLayer {\n title: ReactNode;\n description?: ReactNode | undefined;\n toolbar?: ReactNode | undefined;\n content: ReactNode;\n footer?: ReactNode | undefined;\n footerStart?: ReactNode | undefined;\n}\n\nexport interface LayerDialogProps extends Omit<DialogProps, \"title\" | \"description\" | \"children\" | \"toolbar\" | \"footer\" | \"footerStart\" | \"headerStart\"> {\n layers: DialogLayer[];\n layer?: number | undefined;\n onLayerChange?: ((layer: number) => void) | undefined;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport const LayerDialog = /* @__PURE__ */ forwardRef<HTMLDivElement, LayerDialogProps>(function LayerDialog(\n { layers, layer, onLayerChange, anchor = KAESO_LAYER_DIALOG_DEFAULT_VARIANTS.anchor, ...props },\n ref,\n) {\n const [inner, setInner] = useState(0);\n const t = useUiText();\n const wanted = layer ?? inner;\n const index = wanted > 0 && wanted < layers.length ? wanted : 0;\n const sections = useRef<(HTMLDivElement | null)[]>([]);\n const focused = useRef<(HTMLElement | null)[]>([]);\n const tops = useRef<number[]>([]);\n const left = useRef(index);\n const shown = useRef(index);\n if (left.current !== index) {\n tops.current[left.current] = bodyOf(sections.current[left.current])?.scrollTop ?? 0;\n left.current = index;\n }\n useLayoutEffect(() => {\n const from = shown.current;\n shown.current = index;\n if (from === index) return;\n const back = index < from;\n if (!back) focused.current[index] = null;\n focused.current.length = index + 1;\n const section = sections.current[index];\n const body = bodyOf(section);\n if (body) body.scrollTop = back ? (tops.current[index] ?? 0) : 0;\n focusDialogSection(section, back ? focused.current[index] : null);\n }, [index]);\n const go = (i: number) => {\n if (props.busy) return;\n if (layer === undefined) setInner(i);\n onLayerChange?.(i);\n };\n const stack = layers.slice(0, index + 1);\n const current = stack[index];\n if (!current) return null;\n const remember = (i: number) => (e: FocusEvent<HTMLElement>) => {\n if (e.target instanceof HTMLElement) focused.current[i] = e.target;\n };\n return (\n <LayerSlots value={{ toolbar: !!current.toolbar, footerStart: !!current.footerStart }}>\n <Dialog\n ref={ref}\n {...props}\n anchor={anchor}\n title={current.title}\n description={current.description}\n toolbar={\n stack.some((l) => l.toolbar)\n ? stack.map((l, i) =>\n l.toolbar ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.toolbar}\n </div>\n ) : null,\n )\n : undefined\n }\n footerStart={\n stack.some((l) => l.footerStart)\n ? stack.map((l, i) =>\n l.footerStart ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.footerStart}\n </div>\n ) : null,\n )\n : undefined\n }\n footer={\n current.footer\n ? stack.map((l, i) =>\n l.footer ? (\n <div key={i} hidden={i !== index} className=\"contents dialog-narrow:*:flex-auto dialog-narrow:**:data-shortcut:hidden\" onFocus={remember(i)}>\n {l.footer}\n </div>\n ) : null,\n )\n : undefined\n }\n headerStart={\n index > 0 ? (\n <IconButton\n key=\"back\"\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"dialog.back\", \"Back\")}\n onClick={() => go(index - 1)}\n disabled={!!props.busy}\n className=\"animate-layer-in\"\n />\n ) : null\n }\n >\n {stack.map((l, i) => (\n <div\n key={i}\n ref={(el) => {\n sections.current[i] = el;\n }}\n hidden={i !== index}\n className=\"animate-layer-in\"\n onFocus={remember(i)}\n >\n {l.content}\n </div>\n ))}\n </Dialog>\n </LayerSlots>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LayerDialog.displayName = \"LayerDialog\";\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { formatTokens as e } from "../format.js";
3
- import { h as t, t as n } from "./core-B0bULn-t.js";
3
+ import { h as t, t as n } from "./core-Cw3pNRp3.js";
4
4
  //#region src/components/charts/domain.ts
5
5
  var r = (e) => e.filter(Number.isFinite), i = (e) => e.some(Number.isFinite), a = (e) => i(e) && r(e).every((e) => e === 0);
6
6
  function o(e, t = []) {
@@ -25,4 +25,4 @@ function l(e, r, i = n.label.fontSize) {
25
25
  //#endregion
26
26
  export { i as a, l as i, s as n, a as o, r, o as s, c as t };
27
27
 
28
- //# sourceMappingURL=domain-BsM9UmAg.js.map
28
+ //# sourceMappingURL=domain-CrQX3p6E.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domain-BsM9UmAg.js","names":["labelWidth","AXIS","finite","values","hasPoints","onlyZero","v","valueExtent","all","also","lo","hi","compactAxis","formatTokens","axisRoom","widest","labels","max","min","gap","fitLabel","scale","fontSize","label","room","chars","out","ch"],"sources":["../../src/components/charts/domain.ts"],"sourcesContent":["import { formatTokens } from \"../../format/index.js\";\nimport { AXIS, labelWidth } from \"./core.js\";\n\nexport const finite = (values: readonly number[]): number[] => values.filter(Number.isFinite);\n\nexport const hasPoints = (values: readonly number[]): boolean => values.some(Number.isFinite);\n\nexport const onlyZero = (values: readonly number[]): boolean => hasPoints(values) && finite(values).every((v) => v === 0);\n\nexport function valueExtent(values: readonly number[], also: readonly number[] = []): [number, number] {\n const all = finite([...values, ...also]);\n const lo = Math.min(0, ...all);\n const hi = Math.max(0, ...all);\n if (lo === 0 && hi === 0) return [0, 1];\n return [lo * 1.08, hi * 1.08];\n}\n\nexport const compactAxis = (v: number): string => formatTokens(v);\n\nexport function axisRoom(\n labels: readonly string[],\n { gap = 12, min = 52, max = Infinity }: { gap?: number | undefined; min?: number | undefined; max?: number | undefined } = {},\n): number {\n const widest = Math.max(0, ...labels.map(labelWidth));\n return Math.round(Math.min(max, Math.max(min, gap + widest + 4)));\n}\n\nexport function fitLabel(label: string, room: number, fontSize: number = AXIS.label.fontSize): string {\n const scale = fontSize / AXIS.label.fontSize;\n if (labelWidth(label) * scale <= room) return label;\n const chars = [...label];\n let out = \"\";\n for (const ch of chars) {\n if (labelWidth(`${out}${ch}…`) * scale > room) break;\n out += ch;\n }\n return `${out.trimEnd()}…`;\n}\n"],"mappings":";;;;AAGA,IAAaE,KAAU,MAAwCC,EAAO,OAAO,OAAO,QAAQ,GAE/EC,KAAa,MAAuCD,EAAO,KAAK,OAAO,QAAQ,GAE/EE,KAAY,MAAuCD,EAAUD,CAAM,KAAKD,EAAOC,CAAM,CAAC,CAAC,OAAO,MAAMG,MAAM,CAAC;AAExH,SAAgBC,EAAY,GAA2B,IAA0B,CAAC,GAAqB;CACrG,IAAMC,IAAMN,EAAO,CAAC,GAAGC,GAAQ,GAAGM,CAAI,CAAC,GACjCC,IAAK,KAAK,IAAI,GAAG,GAAGF,CAAG,GACvBG,IAAK,KAAK,IAAI,GAAG,GAAGH,CAAG;CAE7B,OADIE,MAAO,KAAKC,MAAO,IAAU,CAAC,GAAG,CAAC,IAC/B,CAACD,IAAK,MAAMC,IAAK,IAAI;AAC9B;AAEA,IAAaC,KAAe,MAAsBC,EAAaP,CAAC;AAEhE,SAAgBQ,EACd,GACA,EAAE,SAAM,IAAI,SAAM,IAAI,SAAM,aAA+F,CAAC,GACpH;CACR,IAAMC,IAAS,KAAK,IAAI,GAAG,GAAGC,EAAO,IAAIhB,CAAU,CAAC;CACpD,OAAO,KAAK,MAAM,KAAK,IAAIiB,GAAK,KAAK,IAAIC,GAAKC,IAAMJ,IAAS,CAAC,CAAC,CAAC;AAClE;AAEA,SAAgBK,EAAS,GAAe,GAAc,IAAmBnB,EAAK,MAAM,UAAkB;CACpG,IAAMoB,IAAQC,IAAWrB,EAAK,MAAM;CACpC,IAAID,EAAWuB,CAAK,IAAIF,KAASG,GAAM,OAAOD;CAC9C,IAAME,IAAQ,CAAC,GAAGF,CAAK,GACnBG,IAAM;CACV,KAAK,IAAMC,KAAMF,GAAO;EACtB,IAAIzB,EAAW,GAAG0B,IAAMC,EAAG,EAAE,IAAIN,IAAQG,GAAM;EAC/C,KAAOG;CACT;CACA,OAAO,GAAGD,EAAI,QAAQ,EAAE;AAC1B"}
1
+ {"version":3,"file":"domain-CrQX3p6E.js","names":["labelWidth","AXIS","finite","values","hasPoints","onlyZero","v","valueExtent","all","also","lo","hi","compactAxis","formatTokens","axisRoom","widest","labels","max","min","gap","fitLabel","scale","fontSize","label","room","chars","out","ch"],"sources":["../../src/components/charts/domain.ts"],"sourcesContent":["import { formatTokens } from \"../../format/index.js\";\nimport { AXIS, labelWidth } from \"./core.js\";\n\nexport const finite = (values: readonly number[]): number[] => values.filter(Number.isFinite);\n\nexport const hasPoints = (values: readonly number[]): boolean => values.some(Number.isFinite);\n\nexport const onlyZero = (values: readonly number[]): boolean => hasPoints(values) && finite(values).every((v) => v === 0);\n\nexport function valueExtent(values: readonly number[], also: readonly number[] = []): [number, number] {\n const all = finite([...values, ...also]);\n const lo = Math.min(0, ...all);\n const hi = Math.max(0, ...all);\n if (lo === 0 && hi === 0) return [0, 1];\n return [lo * 1.08, hi * 1.08];\n}\n\nexport const compactAxis = (v: number): string => formatTokens(v);\n\nexport function axisRoom(\n labels: readonly string[],\n { gap = 12, min = 52, max = Infinity }: { gap?: number | undefined; min?: number | undefined; max?: number | undefined } = {},\n): number {\n const widest = Math.max(0, ...labels.map(labelWidth));\n return Math.round(Math.min(max, Math.max(min, gap + widest + 4)));\n}\n\nexport function fitLabel(label: string, room: number, fontSize: number = AXIS.label.fontSize): string {\n const scale = fontSize / AXIS.label.fontSize;\n if (labelWidth(label) * scale <= room) return label;\n const chars = [...label];\n let out = \"\";\n for (const ch of chars) {\n if (labelWidth(`${out}${ch}…`) * scale > room) break;\n out += ch;\n }\n return `${out.trimEnd()}…`;\n}\n"],"mappings":";;;;AAGA,IAAaE,KAAU,MAAwCC,EAAO,OAAO,OAAO,QAAQ,GAE/EC,KAAa,MAAuCD,EAAO,KAAK,OAAO,QAAQ,GAE/EE,KAAY,MAAuCD,EAAUD,CAAM,KAAKD,EAAOC,CAAM,CAAC,CAAC,OAAO,MAAMG,MAAM,CAAC;AAExH,SAAgBC,EAAY,GAA2B,IAA0B,CAAC,GAAqB;CACrG,IAAMC,IAAMN,EAAO,CAAC,GAAGC,GAAQ,GAAGM,CAAI,CAAC,GACjCC,IAAK,KAAK,IAAI,GAAG,GAAGF,CAAG,GACvBG,IAAK,KAAK,IAAI,GAAG,GAAGH,CAAG;CAE7B,OADIE,MAAO,KAAKC,MAAO,IAAU,CAAC,GAAG,CAAC,IAC/B,CAACD,IAAK,MAAMC,IAAK,IAAI;AAC9B;AAEA,IAAaC,KAAe,MAAsBC,EAAaP,CAAC;AAEhE,SAAgBQ,EACd,GACA,EAAE,SAAM,IAAI,SAAM,IAAI,SAAM,aAA+F,CAAC,GACpH;CACR,IAAMC,IAAS,KAAK,IAAI,GAAG,GAAGC,EAAO,IAAIhB,CAAU,CAAC;CACpD,OAAO,KAAK,MAAM,KAAK,IAAIiB,GAAK,KAAK,IAAIC,GAAKC,IAAMJ,IAAS,CAAC,CAAC,CAAC;AAClE;AAEA,SAAgBK,EAAS,GAAe,GAAc,IAAmBnB,EAAK,MAAM,UAAkB;CACpG,IAAMoB,IAAQC,IAAWrB,EAAK,MAAM;CACpC,IAAID,EAAWuB,CAAK,IAAIF,KAASG,GAAM,OAAOD;CAC9C,IAAME,IAAQ,CAAC,GAAGF,CAAK,GACnBG,IAAM;CACV,KAAK,IAAMC,KAAMF,GAAO;EACtB,IAAIzB,EAAW,GAAG0B,IAAMC,EAAG,EAAE,IAAIN,IAAQG,GAAM;EAC/C,KAAOG;CACT;CACA,OAAO,GAAGD,EAAI,QAAQ,EAAE;AAC1B"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { r as e } from "./tooltip-Tkm-urbi.js";
3
- import { n as t } from "./button-IblhXUyZ.js";
3
+ import { n as t } from "./button-DrmFgdIi.js";
4
4
  import { forwardRef as n } from "react";
5
5
  import { jsx as r } from "react/jsx-runtime";
6
6
  //#region src/components/icon-button/icon-button.tsx
@@ -48,4 +48,4 @@ process.env.NODE_ENV !== "production" && (o.displayName = "IconButton");
48
48
  //#endregion
49
49
  export { a as n, i as r, o as t };
50
50
 
51
- //# sourceMappingURL=icon-button-Dfwpvmav.js.map
51
+ //# sourceMappingURL=icon-button-6kOn2zrP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button-Dfwpvmav.js","names":["Tooltip","Button","KAESO_ICON_BUTTON_VARIANTS","KAESO_ICON_BUTTON_DEFAULT_VARIANTS","IconButton","label","props","btn","disabled","disabledReason","tooltip","tooltipSide","shortcut"],"sources":["../../src/components/icon-button/icon-button.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef } from \"react\";\nimport { Button, type ButtonSize, type ButtonVariant } from \"../button/button.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { IconData } from \"../icon/icon.js\";\n\nexport const KAESO_ICON_BUTTON_VARIANTS = {\n variant: {\n ghost: { classes: \"material-ghost\" },\n quiet: {\n classes: \"material-ghost text-fg-secondary hover:text-fg active:text-fg open:text-fg\",\n },\n secondary: { classes: \"material-secondary\" },\n soft: { classes: \"material-soft\" },\n primary: { classes: \"material-primary\" },\n danger: { classes: \"material-danger\" },\n \"danger-secondary\": { classes: \"material-danger-secondary\" },\n },\n size: {\n xs: { classes: \"size-24\" },\n sm: { classes: \"size-32\" },\n md: { classes: \"size-36\" },\n lg: { classes: \"size-40\" },\n xl: { classes: \"size-48\" },\n },\n} as const;\nexport const KAESO_ICON_BUTTON_DEFAULT_VARIANTS = { variant: \"ghost\", size: \"sm\" } as const;\n\nexport interface IconButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n icon: IconData;\n \"aria-label\": string;\n variant?: Exclude<ButtonVariant, \"link\"> | undefined;\n size?: ButtonSize | undefined;\n shortcut?: string[] | string[][] | undefined;\n tooltip?: boolean | undefined;\n tooltipSide?: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined;\n loading?: boolean | undefined;\n disabledReason?: string | undefined;\n href?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const IconButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { icon, variant = \"ghost\", size = \"sm\", shortcut, tooltip = true, tooltipSide = \"top\", \"aria-label\": label, disabledReason, disabled, ...props },\n ref,\n) {\n const btn = (\n <Button\n ref={ref as React.Ref<HTMLButtonElement & HTMLAnchorElement>}\n shape=\"circle\"\n icon={icon}\n aria-label={label}\n variant={variant}\n size={size}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(disabledReason !== undefined ? { disabledReason } : {})}\n {...props}\n />\n );\n if (!tooltip) return btn;\n // The Tooltip stays mounted while disabled: unwrapping would remount the button and drop its focus.\n return (\n <Tooltip content={label} side={tooltipSide} disabled={!!disabled} {...(shortcut ? { shortcut } : {})}>\n {btn}\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") IconButton.displayName = \"IconButton\";\n"],"mappings":";;;;;;AAMA,IAAaE,IAA6B;CACxC,SAAS;EACP,OAAO,EAAE,SAAS,iBAAiB;EACnC,OAAO,EACL,SAAS,6EACX;EACA,WAAW,EAAE,SAAS,qBAAqB;EAC3C,MAAM,EAAE,SAAS,gBAAgB;EACjC,SAAS,EAAE,SAAS,mBAAmB;EACvC,QAAQ,EAAE,SAAS,kBAAkB;EACrC,oBAAoB,EAAE,SAAS,4BAA4B;CAC7D;CACA,MAAM;EACJ,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;CAC3B;AACF,GACaC,IAAqC;CAAE,SAAS;CAAS,MAAM;AAAK,GAgBpEC,IAA6B,kBAA+C,SACvF,EAAE,SAAM,aAAU,SAAS,UAAO,MAAM,aAAU,aAAU,IAAM,iBAAc,OAAO,cAAcC,GAAO,mBAAgB,aAAU,GAAGC,KACzI,GACA;CACA,IAAMC,IACJ,kBAACN,GAAD;EACO;EACL,OAAM;EACA;EACN,cAAYI;EACH;EACH;EACN,GAAKG,MAAa,KAAA,IAA2B,CAAC,IAAhB,EAAE,YAAS;EACzC,GAAKC,MAAmB,KAAA,IAAiC,CAAC,IAAtB,EAAE,kBAAe;EACrD,GAAIH;CACL,CAAA;CAIH,OAFKI,IAGH,kBAACV,GAAD;EAAS,SAASK;EAAO,MAAMM;EAAa,UAAU,CAAC,CAACH;EAAU,GAAKI,IAAW,EAAE,YAAS,IAAI,CAAC;EAC/F,UAAAL;CACM,CAAA,IALUA;AAOvB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}
1
+ {"version":3,"file":"icon-button-6kOn2zrP.js","names":["Tooltip","Button","KAESO_ICON_BUTTON_VARIANTS","KAESO_ICON_BUTTON_DEFAULT_VARIANTS","IconButton","label","props","btn","disabled","disabledReason","tooltip","tooltipSide","shortcut"],"sources":["../../src/components/icon-button/icon-button.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef } from \"react\";\nimport { Button, type ButtonSize, type ButtonVariant } from \"../button/button.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport type { IconData } from \"../icon/icon.js\";\n\nexport const KAESO_ICON_BUTTON_VARIANTS = {\n variant: {\n ghost: { classes: \"material-ghost\" },\n quiet: {\n classes: \"material-ghost text-fg-secondary hover:text-fg active:text-fg open:text-fg\",\n },\n secondary: { classes: \"material-secondary\" },\n soft: { classes: \"material-soft\" },\n primary: { classes: \"material-primary\" },\n danger: { classes: \"material-danger\" },\n \"danger-secondary\": { classes: \"material-danger-secondary\" },\n },\n size: {\n xs: { classes: \"size-24\" },\n sm: { classes: \"size-32\" },\n md: { classes: \"size-36\" },\n lg: { classes: \"size-40\" },\n xl: { classes: \"size-48\" },\n },\n} as const;\nexport const KAESO_ICON_BUTTON_DEFAULT_VARIANTS = { variant: \"ghost\", size: \"sm\" } as const;\n\nexport interface IconButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n icon: IconData;\n \"aria-label\": string;\n variant?: Exclude<ButtonVariant, \"link\"> | undefined;\n size?: ButtonSize | undefined;\n shortcut?: string[] | string[][] | undefined;\n tooltip?: boolean | undefined;\n tooltipSide?: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined;\n loading?: boolean | undefined;\n disabledReason?: string | undefined;\n href?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const IconButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { icon, variant = \"ghost\", size = \"sm\", shortcut, tooltip = true, tooltipSide = \"top\", \"aria-label\": label, disabledReason, disabled, ...props },\n ref,\n) {\n const btn = (\n <Button\n ref={ref as React.Ref<HTMLButtonElement & HTMLAnchorElement>}\n shape=\"circle\"\n icon={icon}\n aria-label={label}\n variant={variant}\n size={size}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(disabledReason !== undefined ? { disabledReason } : {})}\n {...props}\n />\n );\n if (!tooltip) return btn;\n // The Tooltip stays mounted while disabled: unwrapping would remount the button and drop its focus.\n return (\n <Tooltip content={label} side={tooltipSide} disabled={!!disabled} {...(shortcut ? { shortcut } : {})}>\n {btn}\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") IconButton.displayName = \"IconButton\";\n"],"mappings":";;;;;;AAMA,IAAaE,IAA6B;CACxC,SAAS;EACP,OAAO,EAAE,SAAS,iBAAiB;EACnC,OAAO,EACL,SAAS,6EACX;EACA,WAAW,EAAE,SAAS,qBAAqB;EAC3C,MAAM,EAAE,SAAS,gBAAgB;EACjC,SAAS,EAAE,SAAS,mBAAmB;EACvC,QAAQ,EAAE,SAAS,kBAAkB;EACrC,oBAAoB,EAAE,SAAS,4BAA4B;CAC7D;CACA,MAAM;EACJ,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;EACzB,IAAI,EAAE,SAAS,UAAU;CAC3B;AACF,GACaC,IAAqC;CAAE,SAAS;CAAS,MAAM;AAAK,GAgBpEC,IAA6B,kBAA+C,SACvF,EAAE,SAAM,aAAU,SAAS,UAAO,MAAM,aAAU,aAAU,IAAM,iBAAc,OAAO,cAAcC,GAAO,mBAAgB,aAAU,GAAGC,KACzI,GACA;CACA,IAAMC,IACJ,kBAACN,GAAD;EACO;EACL,OAAM;EACA;EACN,cAAYI;EACH;EACH;EACN,GAAKG,MAAa,KAAA,IAA2B,CAAC,IAAhB,EAAE,YAAS;EACzC,GAAKC,MAAmB,KAAA,IAAiC,CAAC,IAAtB,EAAE,kBAAe;EACrD,GAAIH;CACL,CAAA;CAIH,OAFKI,IAGH,kBAACV,GAAD;EAAS,SAASK;EAAO,MAAMM;EAAa,UAAU,CAAC,CAACH;EAAU,GAAKI,IAAW,EAAE,YAAS,IAAI,CAAC;EAC/F,UAAAL;CACM,CAAA,IALUA;AAOvB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}