@logicplanes/kaeso-ui 0.3.6 → 0.3.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 (141) hide show
  1. package/ai/component-guides.md +5 -4
  2. package/ai/component-registry.json +15 -8
  3. package/ai/component-registry.md +9 -8
  4. package/ai/icons.md +1 -1
  5. package/ai/tokens.md +1 -1
  6. package/dist/blocks/delete-resource.js +1 -1
  7. package/dist/blocks/pages.js +2 -2
  8. package/dist/blocks/resource-list.js +2 -2
  9. package/dist/chunks/{app-frame-B9vrgwaE.js → app-frame-Cj_gCbmu.js} +6 -6
  10. package/dist/chunks/{app-frame-B9vrgwaE.js.map → app-frame-Cj_gCbmu.js.map} +1 -1
  11. package/dist/chunks/{banner-BBlNFHd-.js → banner-DY1jSc9Y.js} +2 -2
  12. package/dist/chunks/{banner-BBlNFHd-.js.map → banner-DY1jSc9Y.js.map} +1 -1
  13. package/dist/chunks/{button-CAPyW-v8.js → button-h2IFCER2.js} +2 -2
  14. package/dist/chunks/{button-CAPyW-v8.js.map → button-h2IFCER2.js.map} +1 -1
  15. package/dist/chunks/{calendar-CBeptQFq.js → calendar-cVuezHQ6.js} +5 -2
  16. package/dist/chunks/calendar-cVuezHQ6.js.map +1 -0
  17. package/dist/chunks/{code-block-DREsvJ-g.js → code-block-BU8gYeZQ.js} +2 -2
  18. package/dist/chunks/{code-block-DREsvJ-g.js.map → code-block-BU8gYeZQ.js.map} +1 -1
  19. package/dist/chunks/{combobox-DqtzsAKG.js → combobox-B9ttar4C.js} +3 -3
  20. package/dist/chunks/{combobox-DqtzsAKG.js.map → combobox-B9ttar4C.js.map} +1 -1
  21. package/dist/chunks/{command-list-D5k0uvkR.js → command-list-DZMVrXWD.js} +2 -2
  22. package/dist/chunks/{command-list-D5k0uvkR.js.map → command-list-DZMVrXWD.js.map} +1 -1
  23. package/dist/chunks/{copy-button-CNpEnS04.js → copy-button-CXJ7fA9z.js} +3 -3
  24. package/dist/chunks/{copy-button-CNpEnS04.js.map → copy-button-CXJ7fA9z.js.map} +1 -1
  25. package/dist/chunks/{core-CqLWVMDI.js → core-Bu6iq5uh.js} +2 -2
  26. package/dist/chunks/{core-CqLWVMDI.js.map → core-Bu6iq5uh.js.map} +1 -1
  27. package/dist/chunks/{date-popup-BgDz6SUj.js → date-popup-BJPA_fBm.js} +3 -3
  28. package/dist/chunks/{date-popup-BgDz6SUj.js.map → date-popup-BJPA_fBm.js.map} +1 -1
  29. package/dist/chunks/{de-CkXZKaBD.js → de-BnNQtBSV.js} +3 -3
  30. package/dist/chunks/{de-CkXZKaBD.js.map → de-BnNQtBSV.js.map} +1 -1
  31. package/dist/chunks/{dialog-truWH0qe.js → dialog-BLcP7v24.js} +5 -5
  32. package/dist/chunks/{dialog-truWH0qe.js.map → dialog-BLcP7v24.js.map} +1 -1
  33. package/dist/chunks/hidden-description-B2zSmLcn.js +23 -0
  34. package/dist/chunks/hidden-description-B2zSmLcn.js.map +1 -0
  35. package/dist/chunks/{icon-button-D4O4puwH.js → icon-button-DmKFxQbP.js} +3 -3
  36. package/dist/chunks/{icon-button-D4O4puwH.js.map → icon-button-DmKFxQbP.js.map} +1 -1
  37. package/dist/chunks/{identity-CsZvAUwu.js → identity-Chj7fW89.js} +3 -3
  38. package/dist/chunks/{identity-CsZvAUwu.js.map → identity-Chj7fW89.js.map} +1 -1
  39. package/dist/chunks/{input-B0wtkcNh.js → input-9y3afoiq.js} +2 -2
  40. package/dist/chunks/{input-B0wtkcNh.js.map → input-9y3afoiq.js.map} +1 -1
  41. package/dist/chunks/{input-group-BQLw06B0.js → input-group-BoxjnN8I.js} +2 -2
  42. package/dist/chunks/{input-group-BQLw06B0.js.map → input-group-BoxjnN8I.js.map} +1 -1
  43. package/dist/chunks/{iso-field-BUXgY1dB.js → iso-field-DAa6iPWn.js} +2 -2
  44. package/dist/chunks/{iso-field-BUXgY1dB.js.map → iso-field-DAa6iPWn.js.map} +1 -1
  45. package/dist/chunks/{list-wXZIZo_s.js → list-7VARol_x.js} +4 -4
  46. package/dist/chunks/{list-wXZIZo_s.js.map → list-7VARol_x.js.map} +1 -1
  47. package/dist/chunks/{markdown-DWyxjsSY.js → markdown-DBVNULWg.js} +4 -4
  48. package/dist/chunks/{markdown-DWyxjsSY.js.map → markdown-DBVNULWg.js.map} +1 -1
  49. package/dist/chunks/{nav-sheet-QqNRHo-y.js → nav-sheet-D7wIF_OU.js} +2 -2
  50. package/dist/chunks/{nav-sheet-QqNRHo-y.js.map → nav-sheet-D7wIF_OU.js.map} +1 -1
  51. package/dist/chunks/{page-header-Ccnrspbp.js → page-header-B3tV8Wog.js} +2 -2
  52. package/dist/chunks/{page-header-Ccnrspbp.js.map → page-header-B3tV8Wog.js.map} +1 -1
  53. package/dist/chunks/{pagination-CEmWZNjp.js → pagination-CLfsofo3.js} +3 -3
  54. package/dist/chunks/{pagination-CEmWZNjp.js.map → pagination-CLfsofo3.js.map} +1 -1
  55. package/dist/chunks/picker-popover-B5YdOxNm.js +105 -0
  56. package/dist/chunks/picker-popover-B5YdOxNm.js.map +1 -0
  57. package/dist/chunks/{range-popup-CG9Jo5B7.js → range-popup-ZunS8QSH.js} +4 -4
  58. package/dist/chunks/{range-popup-CG9Jo5B7.js.map → range-popup-ZunS8QSH.js.map} +1 -1
  59. package/dist/chunks/{resize-motion-BWGMchyP.js → resize-motion-DS3rIIqy.js} +2 -2
  60. package/dist/chunks/resize-motion-DS3rIIqy.js.map +1 -0
  61. package/dist/chunks/{rights-hMoaFasn.js → rights-CiIBzT9o.js} +4 -4
  62. package/dist/chunks/{rights-hMoaFasn.js.map → rights-CiIBzT9o.js.map} +1 -1
  63. package/dist/chunks/{segmented-DXKVF-nY.js → segmented-DxjnIuww.js} +3 -3
  64. package/dist/chunks/{segmented-DXKVF-nY.js.map → segmented-DxjnIuww.js.map} +1 -1
  65. package/dist/chunks/{sidebar-Dey1ZfGt.js → sidebar-ZSTPK9Jn.js} +210 -206
  66. package/dist/chunks/sidebar-ZSTPK9Jn.js.map +1 -0
  67. package/dist/chunks/{switch-CSKMEomo.js → switch-Cq1OfeBr.js} +2 -2
  68. package/dist/chunks/{switch-CSKMEomo.js.map → switch-Cq1OfeBr.js.map} +1 -1
  69. package/dist/chunks/{tag-CwDKXVHj.js → tag-XgPXKoxi.js} +2 -2
  70. package/dist/chunks/{tag-CwDKXVHj.js.map → tag-XgPXKoxi.js.map} +1 -1
  71. package/dist/chunks/{text-Dvvgg5Jt.js → text-IoDy3Vxi.js} +2 -2
  72. package/dist/chunks/{text-Dvvgg5Jt.js.map → text-IoDy3Vxi.js.map} +1 -1
  73. package/dist/chunks/{textarea-2d373OyU.js → textarea-jOiTkfMf.js} +3 -3
  74. package/dist/chunks/{textarea-2d373OyU.js.map → textarea-jOiTkfMf.js.map} +1 -1
  75. package/dist/chunks/{timeseries-LRDAZHV0.js → timeseries-BBWsSM4Q.js} +51 -51
  76. package/dist/chunks/timeseries-BBWsSM4Q.js.map +1 -0
  77. package/dist/chunks/{tooltip-S1DmyLVl.js → tooltip-CTBnfiDH.js} +30 -30
  78. package/dist/chunks/tooltip-CTBnfiDH.js.map +1 -0
  79. package/dist/chunks/{tooltip-root-vjylFUqw.js → tooltip-root-B0zWodAJ.js} +2 -2
  80. package/dist/chunks/{tooltip-root-vjylFUqw.js.map → tooltip-root-B0zWodAJ.js.map} +1 -1
  81. package/dist/chunks/{zh-CN-CqEA4PCM.js → zh-CN-CKffAT7j.js} +3 -3
  82. package/dist/chunks/{zh-CN-CqEA4PCM.js.map → zh-CN-CKffAT7j.js.map} +1 -1
  83. package/dist/components/app-frame.js +2 -2
  84. package/dist/components/banner.js +1 -1
  85. package/dist/components/button-group.js +2 -2
  86. package/dist/components/button.js +1 -1
  87. package/dist/components/calendar.js +1 -1
  88. package/dist/components/charts/bar.js +1 -1
  89. package/dist/components/charts/donut.js +1 -1
  90. package/dist/components/charts/gauge.js +1 -1
  91. package/dist/components/charts/sankey.js +1 -1
  92. package/dist/components/charts/timeseries.js +1 -1
  93. package/dist/components/charts.js +2 -2
  94. package/dist/components/code-block.js +1 -1
  95. package/dist/components/combobox.js +1 -1
  96. package/dist/components/command-list.js +2 -2
  97. package/dist/components/command-palette.js +2 -2
  98. package/dist/components/copy-button.js +1 -1
  99. package/dist/components/data-table.js +4 -4
  100. package/dist/components/date-picker.js +112 -110
  101. package/dist/components/date-picker.js.map +1 -1
  102. package/dist/components/dialog.js +3 -3
  103. package/dist/components/display-options.js +4 -4
  104. package/dist/components/filter-chip.js +2 -2
  105. package/dist/components/icon-button.js +1 -1
  106. package/dist/components/input.js +5 -5
  107. package/dist/components/kaeso/conversation.js +2 -2
  108. package/dist/components/kaeso/identity.js +1 -1
  109. package/dist/components/kaeso/moments.js +3 -3
  110. package/dist/components/kaeso/rights.js +1 -1
  111. package/dist/components/kaeso/usage.js +1 -1
  112. package/dist/components/kaeso.js +5 -5
  113. package/dist/components/key-value.js +2 -2
  114. package/dist/components/list.js +1 -1
  115. package/dist/components/markdown.js +1 -1
  116. package/dist/components/page-header.js +1 -1
  117. package/dist/components/pagination.js +1 -1
  118. package/dist/components/playground.js +10 -10
  119. package/dist/components/segmented.js +1 -1
  120. package/dist/components/sheet.js +2 -2
  121. package/dist/components/sidebar.js +1 -1
  122. package/dist/components/switch.js +1 -1
  123. package/dist/components/tag.js +1 -1
  124. package/dist/components/text.js +1 -1
  125. package/dist/components/theme-menu.js +1 -1
  126. package/dist/components/tooltip.js +1 -1
  127. package/dist/i18n-provider.js +1 -1
  128. package/dist/index.js +28 -28
  129. package/dist/kaeso.css +2 -4
  130. package/dist/styles.css +1 -1
  131. package/dist/types/components/command-list/docs.d.ts +1 -0
  132. package/dist/types/components/command-list/picker-popover.d.ts +1 -0
  133. package/dist/types/utils/hidden-description.d.ts +9 -0
  134. package/package.json +13 -13
  135. package/dist/chunks/calendar-CBeptQFq.js.map +0 -1
  136. package/dist/chunks/picker-popover-C4ElNk7t.js +0 -102
  137. package/dist/chunks/picker-popover-C4ElNk7t.js.map +0 -1
  138. package/dist/chunks/resize-motion-BWGMchyP.js.map +0 -1
  139. package/dist/chunks/sidebar-Dey1ZfGt.js.map +0 -1
  140. package/dist/chunks/timeseries-LRDAZHV0.js.map +0 -1
  141. package/dist/chunks/tooltip-S1DmyLVl.js.map +0 -1
@@ -4,9 +4,9 @@ import { r as t } from "./portal-context-BBbzDKmY.js";
4
4
  import { i as n, r } from "./inset-BnBj8NJV.js";
5
5
  import { i } from "./context-BELWW79w.js";
6
6
  import { t as a } from "./icon-BqujXDUc.js";
7
- import { s as o, u as s } from "./tooltip-S1DmyLVl.js";
8
- import { r as c } from "./text-Dvvgg5Jt.js";
9
- import { t as l } from "./icon-button-D4O4puwH.js";
7
+ import { s as o, u as s } from "./tooltip-CTBnfiDH.js";
8
+ import { r as c } from "./text-IoDy3Vxi.js";
9
+ import { t as l } from "./icon-button-DmKFxQbP.js";
10
10
  import { n as u } from "./use-layout-width-CbSDbRb0.js";
11
11
  import { r as d } from "./skeleton-BM797MAg.js";
12
12
  import { t as f } from "./scroll-parent-WXvzQcUo.js";
@@ -489,4 +489,4 @@ process.env.NODE_ENV !== "production" && (L.displayName = "SelectionAction");
489
489
  //#endregion
490
490
  export { P as a, N as i, O as n, L as o, D as r, I as s, F as t };
491
491
 
492
- //# sourceMappingURL=list-wXZIZo_s.js.map
492
+ //# sourceMappingURL=list-7VARol_x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-wXZIZo_s.js","names":["__icon_Add01Icon","__icon_Cancel01Icon","cn","usePortalContainer","useInset","Icon","lazyModule","useLazyModuleRetried","Text","IconButton","useLayoutWidth","Skeleton","scrollParent","checkbox","n","RowCheckbox","ariaLabel","mod","retry","over","setOver","useState","pressed","setPressed","useEffect","timer","release","onToggle","checked","virtualRows","KAESO_LIST_VARIANTS","KAESO_LIST_DEFAULT_VARIANTS","ID_W","NARROW","FOCUSABLE","TEXT_ENTRY","removeWidgetsFromTabOrder","line","root","primary","widget","List","selectedProp","forceRow","inset","selectedInner","setSelectedInner","selected","setSelected","useCallback","s","onSelectedChange","collapsed","setCollapsed","groups","g","active","setActive","anchor","setAnchor","useRef","width","narrow","flat","useMemo","rows","list","item","c","i","a","items","firstRow","f","none","virtual","virtualizeAbove","estimateSize","density","rowsModule","retryRows","VirtualRows","scrollTo","tabStop","focusLine","now","hadVirtualRows","useLayoutEffect","el","observer","toggle","id","enabledIds","lines","onKeyDown","target","index","onPrimary","row","selectable","moveTo","from","next","widgets","w","at","onOpen","selecting","render","GroupHeader","ListRow","ref","loading","className","LoadingRows","empty","FirstRows","selectionBar","SelectionBar","selectionActions","view","total","extra","count","j","padded","useGutterPadded","force","card","t","useUiText","stacked","wraps","wrapSubtitle","onSelect","depth","lastChild","idWidth","first","indent","glyph","title","onAdd","Add01Icon","addLabel","container","createPortal","children","onClear","Cancel01Icon","SelectionAction","danger","icon"],"sources":["../../src/components/list/row-checkbox.tsx","../../src/components/list/list.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\n\nconst checkbox = /* @__PURE__ */ lazyModule(() => import(\"../checkbox/checkbox.js\"), { base: () => import.meta.url });\n\nexport function RowCheckbox({ checked, onToggle, \"aria-label\": ariaLabel }: { checked: boolean; onToggle: () => void; \"aria-label\": string }) {\n const [mod, retry] = useLazyModuleRetried(checkbox, true);\n const [over, setOver] = useState(false);\n const [pressed, setPressed] = useState(false);\n useEffect(() => {\n if (!pressed) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const release = () => {\n timer = setTimeout(() => setPressed(false));\n };\n window.addEventListener(\"pointerup\", release, true);\n window.addEventListener(\"pointercancel\", release, true);\n return () => {\n clearTimeout(timer);\n window.removeEventListener(\"pointerup\", release, true);\n window.removeEventListener(\"pointercancel\", release, true);\n };\n }, [pressed]);\n if (mod && !over && !pressed) return <mod.CheckboxBox checked={checked} onCheckedChange={onToggle} aria-label={ariaLabel} />;\n return (\n <span\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={ariaLabel}\n onPointerEnter={() => {\n setOver(true);\n retry();\n }}\n onPointerLeave={() => setOver(false)}\n onPointerDown={() => setPressed(true)}\n onClick={() => {\n onToggle();\n setOver(false);\n setPressed(false);\n }}\n className=\"relative -m-3 inline-flex size-24 shrink-0 cursor-pointer items-center justify-center rounded-checkbox\"\n >\n <span aria-hidden className={cn(\"flex size-18 items-center justify-center rounded-checkbox\", checked ? \"bg-ink\" : \"bg-raised shadow-selector\")} />\n </span>\n );\n}\n","import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useGutterPadded, useInset } from \"../../utils/inset.js\";\nimport { Add01Icon as __icon_Add01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Text } from \"../text/text.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\nimport { RowCheckbox } from \"./row-checkbox.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nconst virtualRows = /* @__PURE__ */ lazyModule(() => import(\"./virtual-rows.js\"), { base: () => import.meta.url });\n\nexport const KAESO_LIST_VARIANTS = {\n density: {\n default: { classes: \"h-44\" },\n compact: { classes: \"h-36\" },\n },\n} as const;\nexport const KAESO_LIST_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\nexport interface ListItemData {\n id: string;\n title: ReactNode;\n textValue?: string | undefined;\n subtitle?: ReactNode | undefined;\n glyph?: ReactNode | undefined;\n leading?: ReactNode | undefined;\n displayId?: string | undefined;\n meta?: ReactNode | undefined;\n date?: ReactNode | undefined;\n avatar?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children?: ListItemData[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ListGroup {\n id: string;\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n items: ListItemData[];\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n defaultCollapsed?: boolean | undefined;\n}\n\ntype Flat = { kind: \"header\"; group: ListGroup; key: string } | { kind: \"row\"; item: ListItemData; depth: 0 | 1; lastChild: boolean; key: string };\n\nexport interface ListProps {\n items?: ListItemData[] | undefined;\n groups?: ListGroup[] | undefined;\n onOpen?: ((item: ListItemData) => void) | undefined;\n selectable?: boolean | undefined;\n selected?: Set<string> | undefined;\n onSelectedChange?: ((selected: Set<string>) => void) | undefined;\n idWidth?: 48 | 64 | 80 | 96 | 120 | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n selectionActions?: ReactNode | undefined;\n selectionBar?: boolean | undefined;\n loading?: boolean | undefined;\n empty?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n \"data-force-row\"?: string | undefined;\n}\n\nconst ID_W = { 48: \"w-48\", 64: \"w-64\", 80: \"w-80\", 96: \"w-96\", 120: \"w-120\" } as const;\n\nconst NARROW = 520;\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 removeWidgetsFromTabOrder(root: HTMLElement) {\n for (const line of root.querySelectorAll<HTMLElement>(\"[role=row]\")) {\n const primary = line.querySelector(\"[data-index]\");\n if (!primary) continue;\n for (const widget of line.querySelectorAll<HTMLElement>(FOCUSABLE)) {\n if (widget !== primary && widget.getAttribute(\"tabindex\") !== \"-1\") widget.setAttribute(\"tabindex\", \"-1\");\n }\n }\n}\n\nexport const List = /* @__PURE__ */ forwardRef<HTMLDivElement, ListProps>(function List(\n {\n items,\n groups,\n onOpen,\n selectable,\n selected: selectedProp,\n onSelectedChange,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n virtualizeAbove = 100,\n selectionActions,\n selectionBar = true,\n loading,\n empty,\n className,\n \"aria-label\": ariaLabel,\n \"data-force-row\": forceRow,\n },\n ref,\n) {\n const inset = useInset();\n const [selectedInner, setSelectedInner] = useState<Set<string>>(new Set());\n const selected = selectedProp ?? selectedInner;\n const setSelected = useCallback(\n (s: Set<string>) => {\n if (!selectedProp) setSelectedInner(s);\n onSelectedChange?.(s);\n },\n [selectedProp, onSelectedChange],\n );\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set((groups ?? []).filter((g) => g.defaultCollapsed).map((g) => g.id)));\n const [active, setActive] = useState(-1);\n const [anchor, setAnchor] = useState<number | null>(null);\n const root = useRef<HTMLDivElement | null>(null);\n const width = useLayoutWidth(root);\n const narrow = !!width && width < NARROW;\n\n const flat = useMemo<Flat[]>(() => {\n const rows = (list: ListItemData[]): Flat[] =>\n list.flatMap((item) => [\n { kind: \"row\" as const, item, depth: 0 as const, lastChild: false, key: item.id },\n ...(item.children ?? []).map((c, i, a) => ({ kind: \"row\" as const, item: c, depth: 1 as const, lastChild: i === a.length - 1, key: c.id })),\n ]);\n if (groups) return groups.flatMap((g) => [{ kind: \"header\" as const, group: g, key: `h-${g.id}` }, ...(collapsed.has(g.id) ? [] : rows(g.items))]);\n return rows(items ?? []);\n }, [items, groups, collapsed]);\n const firstRow = flat.findIndex((f) => f.kind === \"row\");\n const none = groups ? groups.every((g) => g.items.length === 0) : (items ?? []).length === 0;\n\n const virtual = flat.length > virtualizeAbove;\n const estimateSize = (i: number) => (flat[i]?.kind === \"header\" ? (i === 0 ? 36 : 52) : narrow ? 64 : density === \"compact\" ? 36 : 44);\n const [rowsModule, retryRows] = useLazyModuleRetried(virtualRows, virtual);\n const VirtualRows = rowsModule?.VirtualRows;\n const scrollTo = useRef<((index: number) => void) | null>(null);\n\n if (active >= flat.length) setActive(-1);\n const tabStop = active >= 0 ? active : flat.length ? 0 : -1;\n const focusLine = (i: number) => {\n setActive(i);\n if (virtual) scrollTo.current?.(i);\n const line = () => root.current?.querySelector<HTMLElement>(`[data-index=\"${i}\"]`);\n const now = line();\n if (now) now.focus();\n else requestAnimationFrame(() => line()?.focus());\n };\n const hadVirtualRows = useRef(!!VirtualRows);\n useLayoutEffect(() => {\n if (VirtualRows && !hadVirtualRows.current && active >= 0 && document.activeElement === document.body) {\n root.current?.querySelector<HTMLElement>(`[data-index=\"${active}\"]`)?.focus();\n }\n hadVirtualRows.current = !!VirtualRows;\n });\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n removeWidgetsFromTabOrder(el);\n const observer = new MutationObserver(() => removeWidgetsFromTabOrder(el));\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, []);\n const toggle = (id: string) => {\n const s = new Set(selected);\n if (s.has(id)) s.delete(id);\n else s.add(id);\n setSelected(s);\n };\n const enabledIds = (lines: Flat[]) => lines.flatMap((f) => (f.kind === \"row\" && !f.item.disabled ? [f.item.id] : []));\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (e.defaultPrevented || !e.currentTarget.contains(target) || target.closest(TEXT_ENTRY)) return;\n const line = target.closest<HTMLElement>(\"[role=row]\");\n const primary = line?.querySelector<HTMLElement>(\"[data-index]\");\n if (!line || !primary) return;\n const index = Number(primary.dataset.index);\n const onPrimary = target === primary;\n const f = flat[index];\n const row = f?.kind === \"row\" ? f.item : undefined;\n if (e.altKey) return;\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === \"a\" && selectable && !e.shiftKey) {\n e.preventDefault();\n setSelected(new Set(enabledIds(flat)));\n }\n return;\n }\n const moveTo = (next: number) => {\n e.preventDefault();\n if (e.shiftKey && selectable) {\n const from = anchor ?? index;\n setAnchor(from);\n const s = new Set(selected);\n enabledIds(flat.slice(Math.min(from, next), Math.max(from, next) + 1)).forEach((id) => s.add(id));\n setSelected(s);\n } else setAnchor(null);\n focusLine(next);\n };\n const widgets = () =>\n [...line.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n (w) => w !== primary && !w.closest(\"[role=checkbox], [aria-hidden=true], [hidden]\") && !w.matches(\":disabled, input[type=checkbox]\"),\n );\n if (e.key === \"ArrowDown\" || (e.key === \"j\" && !e.shiftKey)) moveTo(Math.min(flat.length - 1, index + 1));\n else if (e.key === \"ArrowUp\" || (e.key === \"k\" && !e.shiftKey)) moveTo(Math.max(0, index - 1));\n else if (e.key === \"Home\") moveTo(0);\n else if (e.key === \"End\") moveTo(flat.length - 1);\n else if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") {\n const list = widgets();\n const at = onPrimary ? -1 : list.indexOf(target);\n const next = e.key === \"ArrowRight\" ? list[at + 1] : at > 0 ? list[at - 1] : at === 0 ? primary : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n } else if (e.key === \"Escape\" && !onPrimary) {\n e.preventDefault();\n primary.focus();\n } else if (!onPrimary || !row || e.shiftKey) {\n return;\n } else if ((e.key === \" \" || e.key === \"x\") && selectable) {\n e.preventDefault();\n if (!row.disabled) toggle(row.id);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (!row.disabled) onOpen?.(row);\n } else if (e.key === \"Escape\" && selectable && selected.size) {\n setSelected(new Set());\n }\n };\n const selecting = selected.size > 0;\n const render = (f: Flat, i: number) =>\n f.kind === \"header\" ? (\n <GroupHeader\n key={f.key}\n title={f.group.title}\n glyph={f.group.glyph}\n count={f.group.count ?? f.group.items.length}\n collapsed={collapsed.has(f.group.id)}\n onToggle={() => {\n const s = new Set(collapsed);\n if (s.has(f.group.id)) s.delete(f.group.id);\n else s.add(f.group.id);\n setCollapsed(s);\n }}\n onAdd={f.group.onAdd}\n addLabel={f.group.addLabel}\n indent={!!selectable}\n first={i === 0}\n index={i}\n active={i === tabStop}\n onFocus={() => setActive(i)}\n />\n ) : (\n <ListRow\n key={f.key}\n index={i}\n item={f.item}\n depth={f.depth}\n lastChild={f.lastChild}\n idWidth={idWidth}\n density={density}\n wrapSubtitle={wrapSubtitle}\n narrow={narrow}\n active={i === tabStop}\n selected={selected.has(f.item.id)}\n selectable={!!selectable}\n selecting={selecting}\n onSelect={() => toggle(f.item.id)}\n onOpen={() => onOpen?.(f.item)}\n onFocus={() => setActive(i)}\n {...(forceRow && i === firstRow ? { \"data-force\": forceRow } : {})}\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.current = e;\n }}\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={flat.length || undefined}\n aria-multiselectable={selectable || undefined}\n aria-busy={loading || undefined}\n onKeyDown={(e) => {\n retryRows();\n onKeyDown(e);\n }}\n onPointerEnter={retryRows}\n onPointerDown={retryRows}\n onFocus={retryRows}\n onWheel={retryRows}\n className={cn(\"relative flex flex-col outline-none\", inset && \"overflow-hidden rounded-group bg-raised shadow-xs\", className)}\n >\n {loading && (none || flat.length === 0) ? (\n <LoadingRows density={density} />\n ) : none && empty ? (\n <div role=\"row\">\n <div role=\"gridcell\">{empty}</div>\n </div>\n ) : virtual && VirtualRows ? (\n <VirtualRows\n count={flat.length}\n estimateSize={estimateSize}\n getScrollElement={() => scrollParent(root.current)}\n scrollTo={scrollTo}\n row={(i) => render(flat[i]!, i)}\n measure={narrow}\n />\n ) : virtual ? (\n <FirstRows count={flat.length} estimateSize={estimateSize} row={(i) => render(flat[i]!, i)} />\n ) : (\n flat.map(render)\n )}\n {selectable && selecting && selectionBar && (\n <SelectionBar count={selected.size} onClear={() => setSelected(new Set())}>\n {selectionActions}\n </SelectionBar>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") List.displayName = \"List\";\n\nfunction FirstRows({ count, estimateSize, row }: { count: number; estimateSize: (index: number) => number; row: (index: number) => ReactNode }) {\n const view = typeof window === \"undefined\" ? 1024 : window.innerHeight;\n const rows: ReactNode[] = [];\n let total = 0;\n let extra = 12;\n for (let i = 0; i < count; i++) {\n if (total >= view && extra-- <= 0) {\n for (let j = i; j < count; j++) total += estimateSize(j);\n break;\n }\n rows.push(\n <div key={i} role=\"presentation\" className=\"absolute top-0 left-0 w-full\" style={{ transform: `translateY(${Math.round(total)}px)` }}>\n {row(i)}\n </div>,\n );\n total += estimateSize(i);\n }\n return (\n <div role=\"presentation\" className=\"relative w-full\" style={{ height: total }}>\n {rows}\n </div>\n );\n}\n\nfunction LoadingRows({ density }: { density: keyof typeof KAESO_LIST_VARIANTS.density }) {\n const padded = useGutterPadded();\n return (\n <div role=\"presentation\">\n {[62, 48, 70, 54, 40, 58].map((w, i) => (\n <div key={i} role=\"presentation\" className={padded ? \"px-0\" : \"px-24\"}>\n <div className={cn(\"flex items-center gap-12 px-12\", KAESO_LIST_VARIANTS.density[density].classes)}>\n <Skeleton shape=\"line\" className=\"min-w-0\" style={{ width: `${w}%` }} />\n <span className=\"flex-1\" />\n <Skeleton shape=\"line\" className=\"w-64 shrink-0\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport interface ListRowProps {\n item: ListItemData;\n index?: number | undefined;\n depth?: 0 | 1 | undefined;\n lastChild?: boolean | undefined;\n idWidth?: keyof typeof ID_W | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n narrow?: boolean | undefined;\n active?: boolean | undefined;\n selected?: boolean | undefined;\n selectable?: boolean | undefined;\n selecting?: boolean | undefined;\n onSelect?: (() => void) | undefined;\n onOpen?: (() => void) | undefined;\n onFocus?: (() => void) | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const ListRow = /* @__PURE__ */ forwardRef<HTMLDivElement, ListRowProps>(function ListRow(\n {\n item,\n index,\n depth = 0,\n lastChild,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n narrow = false,\n active,\n selected,\n selectable,\n selecting,\n onSelect,\n onOpen,\n onFocus,\n \"data-force\": force,\n },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n const lines = narrow && !!(item.meta || item.date);\n const stacked = (card || lines) && !!item.subtitle;\n const wraps = stacked && wrapSubtitle;\n return (\n <div\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n className={card ? cn(\"px-0\", index !== undefined && index > 0 && \"hairline-t\") : padded ? \"px-0\" : \"px-24\"}\n >\n <div\n ref={ref}\n role=\"gridcell\"\n aria-selected={selectable ? !!selected : undefined}\n aria-disabled={item.disabled || undefined}\n data-index={index}\n data-row=\"\"\n tabIndex={active === false ? -1 : 0}\n onFocus={onFocus}\n onClick={(e: MouseEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.target as Node) || (e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n if (selecting && selectable) onSelect?.();\n else onOpen?.();\n }}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"group/row relative flex cursor-pointer items-center gap-12 text-body transition-control focus-ring-inset select-none\",\n card ? \"rounded-none px-20\" : \"rounded-item px-12\",\n lines || wraps ? \"min-h-56 py-8\" : stacked ? \"h-56\" : card && density === \"default\" ? \"h-48\" : KAESO_LIST_VARIANTS.density[density].classes,\n \"hover:bg-fill-1 hover:controls-on-fill\",\n selected && \"bg-fill-2 controls-on-fill hover:bg-fill-2\",\n item.disabled && \"pointer-events-none text-fg-disabled\",\n )}\n >\n {selectable && (\n <span\n className={cn(\n \"flex shrink-0 transition-control\",\n selecting || selected ? \"opacity-100\" : \"opacity-0 group-hover/row:opacity-100 group-focus-visible/row:opacity-100 coarse:opacity-100\",\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <RowCheckbox\n checked={!!selected}\n onToggle={() => onSelect?.()}\n aria-label={t(\"list.selectItem\", \"Select {name}\", { name: item.textValue ?? (typeof item.title === \"string\" ? item.title : item.id) })}\n />\n </span>\n )}\n {depth === 1 && (\n <span aria-hidden className=\"relative -ml-4 h-full w-16 shrink-0\">\n <span className={cn(\"absolute left-6 w-1 bg-line-strong\", lastChild ? \"top-0 h-1/2\" : \"inset-y-0\")} />\n <span className=\"absolute top-1/2 left-6 h-1 w-10 bg-line-strong\" />\n </span>\n )}\n {item.glyph && <span className=\"flex size-16 shrink-0 items-center justify-center\">{item.glyph}</span>}\n {item.leading && <span className=\"-mr-4 flex shrink-0\">{item.leading}</span>}\n {item.displayId && (\n <span className={cn(\"shrink-0 truncate mono text-small text-fg-tertiary tabular\", selected && \"text-fg-secondary\", idWidth && ID_W[idWidth])}>\n {item.displayId}\n </span>\n )}\n <span className={cn(\"flex min-w-0 flex-1\", lines ? \"flex-col items-start gap-4\" : \"contents\")}>\n <span className={cn(\"flex min-w-0\", lines ? \"w-full\" : \"flex-1\", stacked ? \"flex-col items-start gap-2\" : \"items-baseline gap-8\")}>\n {typeof item.title === \"string\" ? (\n <Text truncate weight=\"medium\" className={cn(\"min-w-0 shrink\", stacked && \"max-w-full\")}>\n {item.title}\n </Text>\n ) : (\n <span className={cn(\"min-w-0 truncate font-medium text-fg\", stacked && \"max-w-full\")}>{item.title}</span>\n )}\n {item.subtitle && (\n <span className={cn(\"min-w-0 text-fg-secondary\", wraps ? \"text-pretty\" : \"truncate\", stacked ? \"max-w-full text-small\" : \"flex-1 basis-0\")}>\n {item.subtitle}\n </span>\n )}\n </span>\n {lines && (\n <span className=\"flex min-w-0 flex-wrap items-center gap-x-8 gap-y-4\">\n {item.meta && <span className=\"contents\">{item.meta}</span>}\n {item.date && <span className=\"text-small whitespace-nowrap text-fg-secondary tabular\">{item.date}</span>}\n </span>\n )}\n </span>\n {lines && item.actions && <span className=\"flex shrink-0 items-center gap-2\">{item.actions}</span>}\n {!lines && (item.meta || item.actions) && (\n <span className=\"relative flex shrink-0 items-center gap-6\">\n <span className={cn(\"flex items-center gap-6\", item.actions && \"transition-control group-hover/row:opacity-0 group-focus-within/row:opacity-0\")}>\n {item.meta}\n </span>\n {item.actions && (\n <span\n className={cn(\n \"flex items-center gap-2 opacity-0 transition-control group-hover/row:opacity-100 group-focus-within/row:opacity-100 coarse:opacity-100\",\n item.meta && \"absolute inset-y-0 right-0 coarse:static\",\n )}\n >\n {item.actions}\n </span>\n )}\n </span>\n )}\n {!lines && item.date && <span className=\"min-w-80 shrink-0 text-right text-small whitespace-nowrap text-fg-secondary tabular\">{item.date}</span>}\n {item.avatar && <span className=\"flex shrink-0\">{item.avatar}</span>}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ListRow.displayName = \"ListRow\";\n\nexport interface GroupHeaderProps {\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n collapsed?: boolean | undefined;\n onToggle?: (() => void) | undefined;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n indent?: boolean | undefined;\n first?: boolean | undefined;\n index?: number | undefined;\n active?: boolean | undefined;\n onFocus?: (() => void) | undefined;\n}\n\nexport const GroupHeader = /* @__PURE__ */ forwardRef<HTMLDivElement, GroupHeaderProps>(function GroupHeader(\n { title, glyph, count, collapsed, onToggle, onAdd, addLabel, indent, first, index, active, onFocus },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n return (\n <div\n ref={ref}\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n onFocus={onFocus}\n className={card ? cn(\"group/gh bg-fill-1\", !first && \"hairline-t\") : cn(\"group/gh pt-16 first:pt-0\", padded ? \"px-0\" : \"px-24\")}\n >\n <div role=\"gridcell\" className={cn(\"flex h-36 items-center gap-4\", card && \"pr-12 pl-8\")}>\n {indent && !card && <span aria-hidden className=\"mr-8 w-18 shrink-0\" />}\n <button\n type=\"button\"\n aria-expanded={!collapsed}\n data-index={index}\n tabIndex={active === false ? -1 : 0}\n onClick={onToggle}\n className=\"relative flex h-28 min-w-0 cursor-pointer items-center gap-8 rounded-pill px-12 text-small transition-control hover:bg-fill-1 focus-ring tap-target\"\n >\n {glyph && <span className=\"flex size-16 items-center justify-center\">{glyph}</span>}\n <span className=\"truncate font-medium text-fg-secondary\">{title}</span>\n {count !== undefined && <span className=\"text-fg-tertiary tabular\">{count}</span>}\n <svg viewBox=\"0 0 8 8\" aria-hidden className={cn(\"size-8 text-fg-tertiary transition-transform duration-180\", !collapsed && \"rotate-90\")}>\n <path d=\"M2.5 1.5 5.5 4l-3 2.5z\" fill=\"currentColor\" />\n </svg>\n </button>\n <span className=\"flex-1\" />\n {onAdd && (\n <span className=\"flex opacity-0 transition-control group-hover/gh:opacity-100 group-focus-within/gh:opacity-100 coarse:opacity-100\">\n <IconButton icon={__icon_Add01Icon} aria-label={addLabel ?? t(\"list.add\", \"Add\")} size=\"xs\" onClick={onAdd} />\n </span>\n )}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") GroupHeader.displayName = \"GroupHeader\";\n\nexport function SelectionBar({ count, onClear, children }: { count: number; onClear: () => void; children?: ReactNode | undefined }) {\n const container = usePortalContainer();\n const t = useUiText();\n if (typeof document === \"undefined\") return null;\n return createPortal(\n <div\n role=\"region\"\n aria-label={t(\"list.selection\", \"Selection\")}\n className=\"pointer-events-none fixed right-0 bottom-24 left-0 z-50 flex justify-center px-16\"\n >\n <div className=\"pointer-events-auto flex min-h-44 items-center gap-4 rounded-pill bg-toast py-6 pr-6 pl-16 text-body font-medium text-toast-fg shadow-toast popup-motion\">\n <span className=\"pr-8 tabular\">{t(\"list.selected\", \"{count} selected\", { count: String(count) })}</span>\n <span className=\"mr-4 h-20 w-1 bg-toast-action\" aria-hidden />\n {children}\n <button\n type=\"button\"\n onClick={onClear}\n aria-label={t(\"list.clearSelection\", \"Clear selection\")}\n className=\"inline-flex size-32 cursor-pointer items-center justify-center rounded-pill text-toast-fg-secondary transition-control hover:bg-toast-action hover:text-toast-fg focus-ring\"\n >\n <Icon icon={__icon_Cancel01Icon} size=\"sm\" />\n </button>\n </div>\n </div>,\n container ?? document.body,\n );\n}\nif (process.env.NODE_ENV !== \"production\") SelectionBar.displayName = \"SelectionBar\";\n\nexport function SelectionAction({\n children,\n onClick,\n icon,\n danger,\n}: {\n children: ReactNode;\n onClick?: (() => void) | undefined;\n icon?: IconData | undefined;\n danger?: boolean | undefined;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"inline-flex h-32 cursor-pointer items-center gap-6 rounded-pill px-12 text-body font-medium transition-control hover:bg-toast-action focus-ring\",\n danger ? \"text-toast-danger\" : \"text-toast-fg\",\n icon && \"pl-10\",\n )}\n >\n {icon && <Icon icon={icon} size=\"sm\" className={danger ? undefined : \"text-toast-fg-secondary\"} />}\n {children}\n </button>\n );\n}\nif (process.env.NODE_ENV !== \"production\") SelectionAction.displayName = \"SelectionAction\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"list-7VARol_x.js","names":["__icon_Add01Icon","__icon_Cancel01Icon","cn","usePortalContainer","useInset","Icon","lazyModule","useLazyModuleRetried","Text","IconButton","useLayoutWidth","Skeleton","scrollParent","checkbox","n","RowCheckbox","ariaLabel","mod","retry","over","setOver","useState","pressed","setPressed","useEffect","timer","release","onToggle","checked","virtualRows","KAESO_LIST_VARIANTS","KAESO_LIST_DEFAULT_VARIANTS","ID_W","NARROW","FOCUSABLE","TEXT_ENTRY","removeWidgetsFromTabOrder","line","root","primary","widget","List","selectedProp","forceRow","inset","selectedInner","setSelectedInner","selected","setSelected","useCallback","s","onSelectedChange","collapsed","setCollapsed","groups","g","active","setActive","anchor","setAnchor","useRef","width","narrow","flat","useMemo","rows","list","item","c","i","a","items","firstRow","f","none","virtual","virtualizeAbove","estimateSize","density","rowsModule","retryRows","VirtualRows","scrollTo","tabStop","focusLine","now","hadVirtualRows","useLayoutEffect","el","observer","toggle","id","enabledIds","lines","onKeyDown","target","index","onPrimary","row","selectable","moveTo","from","next","widgets","w","at","onOpen","selecting","render","GroupHeader","ListRow","ref","loading","className","LoadingRows","empty","FirstRows","selectionBar","SelectionBar","selectionActions","view","total","extra","count","j","padded","useGutterPadded","force","card","t","useUiText","stacked","wraps","wrapSubtitle","onSelect","depth","lastChild","idWidth","first","indent","glyph","title","onAdd","Add01Icon","addLabel","container","createPortal","children","onClear","Cancel01Icon","SelectionAction","danger","icon"],"sources":["../../src/components/list/row-checkbox.tsx","../../src/components/list/list.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\n\nconst checkbox = /* @__PURE__ */ lazyModule(() => import(\"../checkbox/checkbox.js\"), { base: () => import.meta.url });\n\nexport function RowCheckbox({ checked, onToggle, \"aria-label\": ariaLabel }: { checked: boolean; onToggle: () => void; \"aria-label\": string }) {\n const [mod, retry] = useLazyModuleRetried(checkbox, true);\n const [over, setOver] = useState(false);\n const [pressed, setPressed] = useState(false);\n useEffect(() => {\n if (!pressed) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const release = () => {\n timer = setTimeout(() => setPressed(false));\n };\n window.addEventListener(\"pointerup\", release, true);\n window.addEventListener(\"pointercancel\", release, true);\n return () => {\n clearTimeout(timer);\n window.removeEventListener(\"pointerup\", release, true);\n window.removeEventListener(\"pointercancel\", release, true);\n };\n }, [pressed]);\n if (mod && !over && !pressed) return <mod.CheckboxBox checked={checked} onCheckedChange={onToggle} aria-label={ariaLabel} />;\n return (\n <span\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={ariaLabel}\n onPointerEnter={() => {\n setOver(true);\n retry();\n }}\n onPointerLeave={() => setOver(false)}\n onPointerDown={() => setPressed(true)}\n onClick={() => {\n onToggle();\n setOver(false);\n setPressed(false);\n }}\n className=\"relative -m-3 inline-flex size-24 shrink-0 cursor-pointer items-center justify-center rounded-checkbox\"\n >\n <span aria-hidden className={cn(\"flex size-18 items-center justify-center rounded-checkbox\", checked ? \"bg-ink\" : \"bg-raised shadow-selector\")} />\n </span>\n );\n}\n","import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useGutterPadded, useInset } from \"../../utils/inset.js\";\nimport { Add01Icon as __icon_Add01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Text } from \"../text/text.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\nimport { RowCheckbox } from \"./row-checkbox.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nconst virtualRows = /* @__PURE__ */ lazyModule(() => import(\"./virtual-rows.js\"), { base: () => import.meta.url });\n\nexport const KAESO_LIST_VARIANTS = {\n density: {\n default: { classes: \"h-44\" },\n compact: { classes: \"h-36\" },\n },\n} as const;\nexport const KAESO_LIST_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\nexport interface ListItemData {\n id: string;\n title: ReactNode;\n textValue?: string | undefined;\n subtitle?: ReactNode | undefined;\n glyph?: ReactNode | undefined;\n leading?: ReactNode | undefined;\n displayId?: string | undefined;\n meta?: ReactNode | undefined;\n date?: ReactNode | undefined;\n avatar?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children?: ListItemData[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ListGroup {\n id: string;\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n items: ListItemData[];\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n defaultCollapsed?: boolean | undefined;\n}\n\ntype Flat = { kind: \"header\"; group: ListGroup; key: string } | { kind: \"row\"; item: ListItemData; depth: 0 | 1; lastChild: boolean; key: string };\n\nexport interface ListProps {\n items?: ListItemData[] | undefined;\n groups?: ListGroup[] | undefined;\n onOpen?: ((item: ListItemData) => void) | undefined;\n selectable?: boolean | undefined;\n selected?: Set<string> | undefined;\n onSelectedChange?: ((selected: Set<string>) => void) | undefined;\n idWidth?: 48 | 64 | 80 | 96 | 120 | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n selectionActions?: ReactNode | undefined;\n selectionBar?: boolean | undefined;\n loading?: boolean | undefined;\n empty?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n \"data-force-row\"?: string | undefined;\n}\n\nconst ID_W = { 48: \"w-48\", 64: \"w-64\", 80: \"w-80\", 96: \"w-96\", 120: \"w-120\" } as const;\n\nconst NARROW = 520;\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 removeWidgetsFromTabOrder(root: HTMLElement) {\n for (const line of root.querySelectorAll<HTMLElement>(\"[role=row]\")) {\n const primary = line.querySelector(\"[data-index]\");\n if (!primary) continue;\n for (const widget of line.querySelectorAll<HTMLElement>(FOCUSABLE)) {\n if (widget !== primary && widget.getAttribute(\"tabindex\") !== \"-1\") widget.setAttribute(\"tabindex\", \"-1\");\n }\n }\n}\n\nexport const List = /* @__PURE__ */ forwardRef<HTMLDivElement, ListProps>(function List(\n {\n items,\n groups,\n onOpen,\n selectable,\n selected: selectedProp,\n onSelectedChange,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n virtualizeAbove = 100,\n selectionActions,\n selectionBar = true,\n loading,\n empty,\n className,\n \"aria-label\": ariaLabel,\n \"data-force-row\": forceRow,\n },\n ref,\n) {\n const inset = useInset();\n const [selectedInner, setSelectedInner] = useState<Set<string>>(new Set());\n const selected = selectedProp ?? selectedInner;\n const setSelected = useCallback(\n (s: Set<string>) => {\n if (!selectedProp) setSelectedInner(s);\n onSelectedChange?.(s);\n },\n [selectedProp, onSelectedChange],\n );\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set((groups ?? []).filter((g) => g.defaultCollapsed).map((g) => g.id)));\n const [active, setActive] = useState(-1);\n const [anchor, setAnchor] = useState<number | null>(null);\n const root = useRef<HTMLDivElement | null>(null);\n const width = useLayoutWidth(root);\n const narrow = !!width && width < NARROW;\n\n const flat = useMemo<Flat[]>(() => {\n const rows = (list: ListItemData[]): Flat[] =>\n list.flatMap((item) => [\n { kind: \"row\" as const, item, depth: 0 as const, lastChild: false, key: item.id },\n ...(item.children ?? []).map((c, i, a) => ({ kind: \"row\" as const, item: c, depth: 1 as const, lastChild: i === a.length - 1, key: c.id })),\n ]);\n if (groups) return groups.flatMap((g) => [{ kind: \"header\" as const, group: g, key: `h-${g.id}` }, ...(collapsed.has(g.id) ? [] : rows(g.items))]);\n return rows(items ?? []);\n }, [items, groups, collapsed]);\n const firstRow = flat.findIndex((f) => f.kind === \"row\");\n const none = groups ? groups.every((g) => g.items.length === 0) : (items ?? []).length === 0;\n\n const virtual = flat.length > virtualizeAbove;\n const estimateSize = (i: number) => (flat[i]?.kind === \"header\" ? (i === 0 ? 36 : 52) : narrow ? 64 : density === \"compact\" ? 36 : 44);\n const [rowsModule, retryRows] = useLazyModuleRetried(virtualRows, virtual);\n const VirtualRows = rowsModule?.VirtualRows;\n const scrollTo = useRef<((index: number) => void) | null>(null);\n\n if (active >= flat.length) setActive(-1);\n const tabStop = active >= 0 ? active : flat.length ? 0 : -1;\n const focusLine = (i: number) => {\n setActive(i);\n if (virtual) scrollTo.current?.(i);\n const line = () => root.current?.querySelector<HTMLElement>(`[data-index=\"${i}\"]`);\n const now = line();\n if (now) now.focus();\n else requestAnimationFrame(() => line()?.focus());\n };\n const hadVirtualRows = useRef(!!VirtualRows);\n useLayoutEffect(() => {\n if (VirtualRows && !hadVirtualRows.current && active >= 0 && document.activeElement === document.body) {\n root.current?.querySelector<HTMLElement>(`[data-index=\"${active}\"]`)?.focus();\n }\n hadVirtualRows.current = !!VirtualRows;\n });\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n removeWidgetsFromTabOrder(el);\n const observer = new MutationObserver(() => removeWidgetsFromTabOrder(el));\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, []);\n const toggle = (id: string) => {\n const s = new Set(selected);\n if (s.has(id)) s.delete(id);\n else s.add(id);\n setSelected(s);\n };\n const enabledIds = (lines: Flat[]) => lines.flatMap((f) => (f.kind === \"row\" && !f.item.disabled ? [f.item.id] : []));\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (e.defaultPrevented || !e.currentTarget.contains(target) || target.closest(TEXT_ENTRY)) return;\n const line = target.closest<HTMLElement>(\"[role=row]\");\n const primary = line?.querySelector<HTMLElement>(\"[data-index]\");\n if (!line || !primary) return;\n const index = Number(primary.dataset.index);\n const onPrimary = target === primary;\n const f = flat[index];\n const row = f?.kind === \"row\" ? f.item : undefined;\n if (e.altKey) return;\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === \"a\" && selectable && !e.shiftKey) {\n e.preventDefault();\n setSelected(new Set(enabledIds(flat)));\n }\n return;\n }\n const moveTo = (next: number) => {\n e.preventDefault();\n if (e.shiftKey && selectable) {\n const from = anchor ?? index;\n setAnchor(from);\n const s = new Set(selected);\n enabledIds(flat.slice(Math.min(from, next), Math.max(from, next) + 1)).forEach((id) => s.add(id));\n setSelected(s);\n } else setAnchor(null);\n focusLine(next);\n };\n const widgets = () =>\n [...line.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n (w) => w !== primary && !w.closest(\"[role=checkbox], [aria-hidden=true], [hidden]\") && !w.matches(\":disabled, input[type=checkbox]\"),\n );\n if (e.key === \"ArrowDown\" || (e.key === \"j\" && !e.shiftKey)) moveTo(Math.min(flat.length - 1, index + 1));\n else if (e.key === \"ArrowUp\" || (e.key === \"k\" && !e.shiftKey)) moveTo(Math.max(0, index - 1));\n else if (e.key === \"Home\") moveTo(0);\n else if (e.key === \"End\") moveTo(flat.length - 1);\n else if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") {\n const list = widgets();\n const at = onPrimary ? -1 : list.indexOf(target);\n const next = e.key === \"ArrowRight\" ? list[at + 1] : at > 0 ? list[at - 1] : at === 0 ? primary : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n } else if (e.key === \"Escape\" && !onPrimary) {\n e.preventDefault();\n primary.focus();\n } else if (!onPrimary || !row || e.shiftKey) {\n return;\n } else if ((e.key === \" \" || e.key === \"x\") && selectable) {\n e.preventDefault();\n if (!row.disabled) toggle(row.id);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (!row.disabled) onOpen?.(row);\n } else if (e.key === \"Escape\" && selectable && selected.size) {\n setSelected(new Set());\n }\n };\n const selecting = selected.size > 0;\n const render = (f: Flat, i: number) =>\n f.kind === \"header\" ? (\n <GroupHeader\n key={f.key}\n title={f.group.title}\n glyph={f.group.glyph}\n count={f.group.count ?? f.group.items.length}\n collapsed={collapsed.has(f.group.id)}\n onToggle={() => {\n const s = new Set(collapsed);\n if (s.has(f.group.id)) s.delete(f.group.id);\n else s.add(f.group.id);\n setCollapsed(s);\n }}\n onAdd={f.group.onAdd}\n addLabel={f.group.addLabel}\n indent={!!selectable}\n first={i === 0}\n index={i}\n active={i === tabStop}\n onFocus={() => setActive(i)}\n />\n ) : (\n <ListRow\n key={f.key}\n index={i}\n item={f.item}\n depth={f.depth}\n lastChild={f.lastChild}\n idWidth={idWidth}\n density={density}\n wrapSubtitle={wrapSubtitle}\n narrow={narrow}\n active={i === tabStop}\n selected={selected.has(f.item.id)}\n selectable={!!selectable}\n selecting={selecting}\n onSelect={() => toggle(f.item.id)}\n onOpen={() => onOpen?.(f.item)}\n onFocus={() => setActive(i)}\n {...(forceRow && i === firstRow ? { \"data-force\": forceRow } : {})}\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.current = e;\n }}\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={flat.length || undefined}\n aria-multiselectable={selectable || undefined}\n aria-busy={loading || undefined}\n onKeyDown={(e) => {\n retryRows();\n onKeyDown(e);\n }}\n onPointerEnter={retryRows}\n onPointerDown={retryRows}\n onFocus={retryRows}\n onWheel={retryRows}\n className={cn(\"relative flex flex-col outline-none\", inset && \"overflow-hidden rounded-group bg-raised shadow-xs\", className)}\n >\n {loading && (none || flat.length === 0) ? (\n <LoadingRows density={density} />\n ) : none && empty ? (\n <div role=\"row\">\n <div role=\"gridcell\">{empty}</div>\n </div>\n ) : virtual && VirtualRows ? (\n <VirtualRows\n count={flat.length}\n estimateSize={estimateSize}\n getScrollElement={() => scrollParent(root.current)}\n scrollTo={scrollTo}\n row={(i) => render(flat[i]!, i)}\n measure={narrow}\n />\n ) : virtual ? (\n <FirstRows count={flat.length} estimateSize={estimateSize} row={(i) => render(flat[i]!, i)} />\n ) : (\n flat.map(render)\n )}\n {selectable && selecting && selectionBar && (\n <SelectionBar count={selected.size} onClear={() => setSelected(new Set())}>\n {selectionActions}\n </SelectionBar>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") List.displayName = \"List\";\n\nfunction FirstRows({ count, estimateSize, row }: { count: number; estimateSize: (index: number) => number; row: (index: number) => ReactNode }) {\n const view = typeof window === \"undefined\" ? 1024 : window.innerHeight;\n const rows: ReactNode[] = [];\n let total = 0;\n let extra = 12;\n for (let i = 0; i < count; i++) {\n if (total >= view && extra-- <= 0) {\n for (let j = i; j < count; j++) total += estimateSize(j);\n break;\n }\n rows.push(\n <div key={i} role=\"presentation\" className=\"absolute top-0 left-0 w-full\" style={{ transform: `translateY(${Math.round(total)}px)` }}>\n {row(i)}\n </div>,\n );\n total += estimateSize(i);\n }\n return (\n <div role=\"presentation\" className=\"relative w-full\" style={{ height: total }}>\n {rows}\n </div>\n );\n}\n\nfunction LoadingRows({ density }: { density: keyof typeof KAESO_LIST_VARIANTS.density }) {\n const padded = useGutterPadded();\n return (\n <div role=\"presentation\">\n {[62, 48, 70, 54, 40, 58].map((w, i) => (\n <div key={i} role=\"presentation\" className={padded ? \"px-0\" : \"px-24\"}>\n <div className={cn(\"flex items-center gap-12 px-12\", KAESO_LIST_VARIANTS.density[density].classes)}>\n <Skeleton shape=\"line\" className=\"min-w-0\" style={{ width: `${w}%` }} />\n <span className=\"flex-1\" />\n <Skeleton shape=\"line\" className=\"w-64 shrink-0\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport interface ListRowProps {\n item: ListItemData;\n index?: number | undefined;\n depth?: 0 | 1 | undefined;\n lastChild?: boolean | undefined;\n idWidth?: keyof typeof ID_W | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n narrow?: boolean | undefined;\n active?: boolean | undefined;\n selected?: boolean | undefined;\n selectable?: boolean | undefined;\n selecting?: boolean | undefined;\n onSelect?: (() => void) | undefined;\n onOpen?: (() => void) | undefined;\n onFocus?: (() => void) | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const ListRow = /* @__PURE__ */ forwardRef<HTMLDivElement, ListRowProps>(function ListRow(\n {\n item,\n index,\n depth = 0,\n lastChild,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n narrow = false,\n active,\n selected,\n selectable,\n selecting,\n onSelect,\n onOpen,\n onFocus,\n \"data-force\": force,\n },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n const lines = narrow && !!(item.meta || item.date);\n const stacked = (card || lines) && !!item.subtitle;\n const wraps = stacked && wrapSubtitle;\n return (\n <div\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n className={card ? cn(\"px-0\", index !== undefined && index > 0 && \"hairline-t\") : padded ? \"px-0\" : \"px-24\"}\n >\n <div\n ref={ref}\n role=\"gridcell\"\n aria-selected={selectable ? !!selected : undefined}\n aria-disabled={item.disabled || undefined}\n data-index={index}\n data-row=\"\"\n tabIndex={active === false ? -1 : 0}\n onFocus={onFocus}\n onClick={(e: MouseEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.target as Node) || (e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n if (selecting && selectable) onSelect?.();\n else onOpen?.();\n }}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"group/row relative flex cursor-pointer items-center gap-12 text-body transition-control focus-ring-inset select-none\",\n card ? \"rounded-none px-20\" : \"rounded-item px-12\",\n lines || wraps ? \"min-h-56 py-8\" : stacked ? \"h-56\" : card && density === \"default\" ? \"h-48\" : KAESO_LIST_VARIANTS.density[density].classes,\n \"hover:bg-fill-1 hover:controls-on-fill\",\n selected && \"bg-fill-2 controls-on-fill hover:bg-fill-2\",\n item.disabled && \"pointer-events-none text-fg-disabled\",\n )}\n >\n {selectable && (\n <span\n className={cn(\n \"flex shrink-0 transition-control\",\n selecting || selected ? \"opacity-100\" : \"opacity-0 group-hover/row:opacity-100 group-focus-visible/row:opacity-100 coarse:opacity-100\",\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <RowCheckbox\n checked={!!selected}\n onToggle={() => onSelect?.()}\n aria-label={t(\"list.selectItem\", \"Select {name}\", { name: item.textValue ?? (typeof item.title === \"string\" ? item.title : item.id) })}\n />\n </span>\n )}\n {depth === 1 && (\n <span aria-hidden className=\"relative -ml-4 h-full w-16 shrink-0\">\n <span className={cn(\"absolute left-6 w-1 bg-line-strong\", lastChild ? \"top-0 h-1/2\" : \"inset-y-0\")} />\n <span className=\"absolute top-1/2 left-6 h-1 w-10 bg-line-strong\" />\n </span>\n )}\n {item.glyph && <span className=\"flex size-16 shrink-0 items-center justify-center\">{item.glyph}</span>}\n {item.leading && <span className=\"-mr-4 flex shrink-0\">{item.leading}</span>}\n {item.displayId && (\n <span className={cn(\"shrink-0 truncate mono text-small text-fg-tertiary tabular\", selected && \"text-fg-secondary\", idWidth && ID_W[idWidth])}>\n {item.displayId}\n </span>\n )}\n <span className={cn(\"flex min-w-0 flex-1\", lines ? \"flex-col items-start gap-4\" : \"contents\")}>\n <span className={cn(\"flex min-w-0\", lines ? \"w-full\" : \"flex-1\", stacked ? \"flex-col items-start gap-2\" : \"items-baseline gap-8\")}>\n {typeof item.title === \"string\" ? (\n <Text truncate weight=\"medium\" className={cn(\"min-w-0 shrink\", stacked && \"max-w-full\")}>\n {item.title}\n </Text>\n ) : (\n <span className={cn(\"min-w-0 truncate font-medium text-fg\", stacked && \"max-w-full\")}>{item.title}</span>\n )}\n {item.subtitle && (\n <span className={cn(\"min-w-0 text-fg-secondary\", wraps ? \"text-pretty\" : \"truncate\", stacked ? \"max-w-full text-small\" : \"flex-1 basis-0\")}>\n {item.subtitle}\n </span>\n )}\n </span>\n {lines && (\n <span className=\"flex min-w-0 flex-wrap items-center gap-x-8 gap-y-4\">\n {item.meta && <span className=\"contents\">{item.meta}</span>}\n {item.date && <span className=\"text-small whitespace-nowrap text-fg-secondary tabular\">{item.date}</span>}\n </span>\n )}\n </span>\n {lines && item.actions && <span className=\"flex shrink-0 items-center gap-2\">{item.actions}</span>}\n {!lines && (item.meta || item.actions) && (\n <span className=\"relative flex shrink-0 items-center gap-6\">\n <span className={cn(\"flex items-center gap-6\", item.actions && \"transition-control group-hover/row:opacity-0 group-focus-within/row:opacity-0\")}>\n {item.meta}\n </span>\n {item.actions && (\n <span\n className={cn(\n \"flex items-center gap-2 opacity-0 transition-control group-hover/row:opacity-100 group-focus-within/row:opacity-100 coarse:opacity-100\",\n item.meta && \"absolute inset-y-0 right-0 coarse:static\",\n )}\n >\n {item.actions}\n </span>\n )}\n </span>\n )}\n {!lines && item.date && <span className=\"min-w-80 shrink-0 text-right text-small whitespace-nowrap text-fg-secondary tabular\">{item.date}</span>}\n {item.avatar && <span className=\"flex shrink-0\">{item.avatar}</span>}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ListRow.displayName = \"ListRow\";\n\nexport interface GroupHeaderProps {\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n collapsed?: boolean | undefined;\n onToggle?: (() => void) | undefined;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n indent?: boolean | undefined;\n first?: boolean | undefined;\n index?: number | undefined;\n active?: boolean | undefined;\n onFocus?: (() => void) | undefined;\n}\n\nexport const GroupHeader = /* @__PURE__ */ forwardRef<HTMLDivElement, GroupHeaderProps>(function GroupHeader(\n { title, glyph, count, collapsed, onToggle, onAdd, addLabel, indent, first, index, active, onFocus },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n return (\n <div\n ref={ref}\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n onFocus={onFocus}\n className={card ? cn(\"group/gh bg-fill-1\", !first && \"hairline-t\") : cn(\"group/gh pt-16 first:pt-0\", padded ? \"px-0\" : \"px-24\")}\n >\n <div role=\"gridcell\" className={cn(\"flex h-36 items-center gap-4\", card && \"pr-12 pl-8\")}>\n {indent && !card && <span aria-hidden className=\"mr-8 w-18 shrink-0\" />}\n <button\n type=\"button\"\n aria-expanded={!collapsed}\n data-index={index}\n tabIndex={active === false ? -1 : 0}\n onClick={onToggle}\n className=\"relative flex h-28 min-w-0 cursor-pointer items-center gap-8 rounded-pill px-12 text-small transition-control hover:bg-fill-1 focus-ring tap-target\"\n >\n {glyph && <span className=\"flex size-16 items-center justify-center\">{glyph}</span>}\n <span className=\"truncate font-medium text-fg-secondary\">{title}</span>\n {count !== undefined && <span className=\"text-fg-tertiary tabular\">{count}</span>}\n <svg viewBox=\"0 0 8 8\" aria-hidden className={cn(\"size-8 text-fg-tertiary transition-transform duration-180\", !collapsed && \"rotate-90\")}>\n <path d=\"M2.5 1.5 5.5 4l-3 2.5z\" fill=\"currentColor\" />\n </svg>\n </button>\n <span className=\"flex-1\" />\n {onAdd && (\n <span className=\"flex opacity-0 transition-control group-hover/gh:opacity-100 group-focus-within/gh:opacity-100 coarse:opacity-100\">\n <IconButton icon={__icon_Add01Icon} aria-label={addLabel ?? t(\"list.add\", \"Add\")} size=\"xs\" onClick={onAdd} />\n </span>\n )}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") GroupHeader.displayName = \"GroupHeader\";\n\nexport function SelectionBar({ count, onClear, children }: { count: number; onClear: () => void; children?: ReactNode | undefined }) {\n const container = usePortalContainer();\n const t = useUiText();\n if (typeof document === \"undefined\") return null;\n return createPortal(\n <div\n role=\"region\"\n aria-label={t(\"list.selection\", \"Selection\")}\n className=\"pointer-events-none fixed right-0 bottom-24 left-0 z-50 flex justify-center px-16\"\n >\n <div className=\"pointer-events-auto flex min-h-44 items-center gap-4 rounded-pill bg-toast py-6 pr-6 pl-16 text-body font-medium text-toast-fg shadow-toast popup-motion\">\n <span className=\"pr-8 tabular\">{t(\"list.selected\", \"{count} selected\", { count: String(count) })}</span>\n <span className=\"mr-4 h-20 w-1 bg-toast-action\" aria-hidden />\n {children}\n <button\n type=\"button\"\n onClick={onClear}\n aria-label={t(\"list.clearSelection\", \"Clear selection\")}\n className=\"inline-flex size-32 cursor-pointer items-center justify-center rounded-pill text-toast-fg-secondary transition-control hover:bg-toast-action hover:text-toast-fg focus-ring\"\n >\n <Icon icon={__icon_Cancel01Icon} size=\"sm\" />\n </button>\n </div>\n </div>,\n container ?? document.body,\n );\n}\nif (process.env.NODE_ENV !== \"production\") SelectionBar.displayName = \"SelectionBar\";\n\nexport function SelectionAction({\n children,\n onClick,\n icon,\n danger,\n}: {\n children: ReactNode;\n onClick?: (() => void) | undefined;\n icon?: IconData | undefined;\n danger?: boolean | undefined;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"inline-flex h-32 cursor-pointer items-center gap-6 rounded-pill px-12 text-body font-medium transition-control hover:bg-toast-action focus-ring\",\n danger ? \"text-toast-danger\" : \"text-toast-fg\",\n icon && \"pl-10\",\n )}\n >\n {icon && <Icon icon={icon} size=\"sm\" className={danger ? undefined : \"text-toast-fg-secondary\"} />}\n {children}\n </button>\n );\n}\nif (process.env.NODE_ENV !== \"production\") SelectionAction.displayName = \"SelectionAction\";\n"],"mappings":";;;;;;;;;;;;;;;;;AAIA,IAAMa,IAA2B,wBAAiB,OAAO,yBAAA,CAAA,MAAA,MAAAC,EAAA,CAAA,GAA4B,EAAE,YAAY,YAAY,IAAI,CAAC;AAEpH,SAAgBC,EAAY,EAAE,YAAS,aAAU,cAAcC,KAA+E;CAC5I,IAAM,CAACC,GAAKC,KAASX,EAAqBM,GAAU,EAAI,GAClD,CAACM,GAAMC,KAAWC,EAAS,EAAK,GAChC,CAACC,GAASC,KAAcF,EAAS,EAAK;CAgB5C,OAfAG,QAAgB;EACd,IAAI,CAACF,GAAS;EACd,IAAIG,GACEC,UAAgB;GACpB,IAAQ,iBAAiBH,EAAW,EAAK,CAAC;EAC5C;EAGA,OAFA,OAAO,iBAAiB,aAAaG,GAAS,EAAI,GAClD,OAAO,iBAAiB,iBAAiBA,GAAS,EAAI,SACzC;GAGX,AAFA,aAAaD,CAAK,GAClB,OAAO,oBAAoB,aAAaC,GAAS,EAAI,GACrD,OAAO,oBAAoB,iBAAiBA,GAAS,EAAI;EAC3D;CACF,GAAG,CAACJ,CAAO,CAAC,GACRL,KAAO,CAACE,KAAQ,CAACG,IAAgB,kBAACL,EAAI,aAAL;EAA0B;EAAS,iBAAiBU;EAAU,cAAYX;CAAY,CAAA,IAEzH,kBAAC,QAAD;EACE,MAAK;EACL,gBAAcY;EACd,cAAYZ;EACZ,sBAAsB;GAEpB,AADAI,EAAQ,EAAI,GACZF,EAAM;EACR;EACA,sBAAsBE,EAAQ,EAAK;EACnC,qBAAqBG,EAAW,EAAI;EACpC,eAAe;GAGb,AAFAI,EAAS,GACTP,EAAQ,EAAK,GACbG,EAAW,EAAK;EAClB;EACA,WAAU;EAEV,UAAA,kBAAC,QAAD;GAAM,eAAA;GAAY,WAAWrB,EAAG,6DAA6D0B,IAAU,WAAW,2BAA2B;EAAI,CAAA;CAC7I,CAAA;AAEV;;;AC9BA,IAAMC,KAA8B,wBAAiB,OAAO,+BAAsB,EAAE,YAAY,YAAY,IAAI,CAAC,GAEpGC,IAAsB,EACjC,SAAS;CACP,SAAS,EAAE,SAAS,OAAO;CAC3B,SAAS,EAAE,SAAS,OAAO;AAC7B,EACF,GACaC,IAA8B,EAAE,SAAS,UAAU,GAmD1DC,IAAO;CAAE,IAAI;CAAQ,IAAI;CAAQ,IAAI;CAAQ,IAAI;CAAQ,KAAK;AAAQ,GAEtEC,IAAS,KACTC,IAAY,gFACZC,KAAa;AAEnB,SAASC,EAA0B,GAAmB;CACpD,KAAK,IAAMC,KAAQC,EAAK,iBAA8B,YAAY,GAAG;EACnE,IAAMC,IAAUF,EAAK,cAAc,cAAc;EACjD,IAAKE,GACL,KAAK,IAAMC,KAAUH,EAAK,iBAA8BH,CAAS,GAC/D,AAAIM,MAAWD,KAAWC,EAAO,aAAa,UAAU,MAAM,QAAMA,EAAO,aAAa,YAAY,IAAI;CAE5G;AACF;AAEA,IAAaC,IAAuB,kBAAsC,SACxE,EACE,UACA,WACA,WACA,eACA,UAAUC,GACV,qBACA,YACA,aAAU,WACV,kBAAe,IACf,qBAAkB,KAClB,qBACA,kBAAe,IACf,YACA,UACA,cACA,cAAc1B,GACd,kBAAkB2B,KAEpB,GACA;CACA,IAAMC,IAAQxC,EAAS,GACjB,CAACyC,GAAeC,MAAoBzB,kBAAsB,IAAI,IAAI,CAAC,GACnE0B,IAAWL,KAAgBG,GAC3BG,IAAcC,GACjB,MAAmB;EAElB,AADKP,KAAcI,GAAiBI,CAAC,GACrCC,IAAmBD,CAAC;CACtB,GACA,CAACR,GAAcS,CAAgB,CACjC,GACM,CAACC,GAAWC,MAAgBhC,QAA4B,IAAI,KAAKiC,KAAU,CAAC,EAAA,CAAG,QAAQ,MAAMC,EAAE,gBAAgB,CAAC,CAAC,KAAK,MAAMA,EAAE,EAAE,CAAC,CAAC,GAClI,CAACC,GAAQC,KAAapC,EAAS,EAAE,GACjC,CAACqC,IAAQC,KAAatC,EAAwB,IAAI,GAClDiB,IAAOsB,EAA8B,IAAI,GACzCC,IAAQnD,EAAe4B,CAAI,GAC3BwB,IAAS,CAAC,CAACD,KAASA,IAAQ5B,GAE5B8B,IAAOC,QAAsB;EACjC,IAAMC,KAAQ,MACZC,EAAK,SAAS,MAAS,CACrB;GAAE,MAAM;GAAgB;GAAM,OAAO;GAAY,WAAW;GAAO,KAAKC,EAAK;EAAG,GAChF,IAAIA,EAAK,YAAY,CAAC,EAAA,CAAG,KAAK,GAAG,GAAG,OAAO;GAAE,MAAM;GAAgB,MAAMC;GAAG,OAAO;GAAY,WAAWC,MAAMC,EAAE,SAAS;GAAG,KAAKF,EAAE;EAAG,EAAE,CAC5I,CAAC;EAEH,OADId,IAAeA,EAAO,SAAS,MAAM,CAAC;GAAE,MAAM;GAAmB,OAAOC;GAAG,KAAK,KAAKA,EAAE;EAAK,GAAG,GAAIH,EAAU,IAAIG,EAAE,EAAE,IAAI,CAAC,IAAIU,EAAKV,EAAE,KAAK,CAAE,CAAC,IAC1IU,EAAKM,KAAS,CAAC,CAAC;CACzB,GAAG;EAACA;EAAOjB;EAAQF;CAAS,CAAC,GACvBoB,KAAWT,EAAK,WAAW,MAAMU,EAAE,SAAS,KAAK,GACjDC,IAAOpB,IAASA,EAAO,OAAO,MAAMC,EAAE,MAAM,WAAW,CAAC,KAAKgB,KAAS,CAAC,EAAA,CAAG,WAAW,GAErFI,IAAUZ,EAAK,SAASa,GACxBC,KAAgB,MAAed,EAAKM,EAAE,EAAE,SAAS,WAAYA,MAAM,IAAI,KAAK,KAAMP,IAAS,KAAKgB,MAAY,YAAY,KAAK,IAC7H,CAACC,IAAYC,KAAazE,EAAqBsB,IAAa8C,CAAO,GACnEM,IAAcF,IAAY,aAC1BG,KAAWtB,EAAyC,IAAI;CAE9D,AAAIJ,KAAUO,EAAK,UAAQN,EAAU,EAAE;CACvC,IAAM0B,KAAU3B,KAAU,IAAIA,IAASO,EAAK,SAAS,IAAI,IACnDqB,MAAa,MAAc;EAE/B,AADA3B,EAAUY,CAAC,GACPM,KAASO,GAAS,UAAUb,CAAC;EACjC,IAAMhC,UAAaC,EAAK,SAAS,cAA2B,gBAAgB+B,EAAE,GAAG,GAC3EgB,IAAMhD,EAAK;EACjB,AAAIgD,IAAKA,EAAI,MAAM,IACd,4BAA4BhD,EAAK,CAAC,EAAE,MAAM,CAAC;CAClD,GACMiD,KAAiB1B,EAAO,CAAC,CAACqB,CAAW;CAO3C,AANAM,QAAsB;EAIpB,AAHIN,KAAe,CAACK,GAAe,WAAW9B,KAAU,KAAK,SAAS,kBAAkB,SAAS,QAC/FlB,EAAK,SAAS,cAA2B,gBAAgBkB,EAAO,GAAG,CAAC,EAAE,MAAM,GAE9E,GAAe,UAAU,CAAC,CAACyB;CAC7B,CAAC,GACDM,QAAsB;EACpB,IAAMC,IAAKlD,EAAK;EAChB,IAAI,CAACkD,GAAI;EACT,EAA0BA,CAAE;EAC5B,IAAMC,IAAW,IAAI,uBAAuBrD,EAA0BoD,CAAE,CAAC;EAEzE,OADAC,EAAS,QAAQD,GAAI;GAAE,SAAS;GAAM,WAAW;GAAM,YAAY;GAAM,iBAAiB,CAAC,UAAU;EAAE,CAAC,SAC3FC,EAAS,WAAW;CACnC,GAAG,CAAC,CAAC;CACL,IAAMC,MAAU,MAAe;EAC7B,IAAMxC,IAAI,IAAI,IAAIH,CAAQ;EAG1B,AAFIG,EAAE,IAAIyC,CAAE,IAAGzC,EAAE,OAAOyC,CAAE,IACrBzC,EAAE,IAAIyC,CAAE,GACb3C,EAAYE,CAAC;CACf,GACM0C,MAAc,MAAkBC,EAAM,SAAS,MAAOpB,EAAE,SAAS,SAAS,CAACA,EAAE,KAAK,WAAW,CAACA,EAAE,KAAK,EAAE,IAAI,CAAC,CAAE,GAC9GqB,MAAa,MAAqC;EACtD,IAAMC,IAAS,EAAE;EACjB,IAAI,EAAE,oBAAoB,CAAC,EAAE,cAAc,SAASA,CAAM,KAAKA,EAAO,QAAQ5D,EAAU,GAAG;EAC3F,IAAME,IAAO0D,EAAO,QAAqB,YAAY,GAC/CxD,IAAUF,GAAM,cAA2B,cAAc;EAC/D,IAAI,CAACA,KAAQ,CAACE,GAAS;EACvB,IAAMyD,IAAQ,OAAOzD,EAAQ,QAAQ,KAAK,GACpC0D,IAAYF,MAAWxD,GACvBkC,IAAIV,EAAKiC,IACTE,IAAMzB,GAAG,SAAS,QAAQA,EAAE,OAAO,KAAA;EACzC,IAAI,EAAE,QAAQ;EACd,IAAI,EAAE,WAAW,EAAE,SAAS;GAC1B,AAAI,EAAE,IAAI,YAAY,MAAM,OAAO0B,KAAc,CAAC,EAAE,aAClD,EAAE,eAAe,GACjBnD,EAAY,IAAI,IAAI4C,GAAW7B,CAAI,CAAC,CAAC;GAEvC;EACF;EACA,IAAMqC,KAAU,MAAiB;GAE/B,IADA,EAAE,eAAe,GACb,EAAE,YAAYD,GAAY;IAC5B,IAAME,IAAO3C,MAAUsC;IACvB,EAAUK,CAAI;IACd,IAAMnD,IAAI,IAAI,IAAIH,CAAQ;IAE1B,AADA6C,GAAW7B,EAAK,MAAM,KAAK,IAAIsC,GAAMC,CAAI,GAAG,KAAK,IAAID,GAAMC,CAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,MAAOpD,EAAE,IAAIyC,CAAE,CAAC,GAChG3C,EAAYE,CAAC;GACf,OAAO,EAAU,IAAI;GACrB,GAAUoD,CAAI;EAChB,GACMC,UACJ,CAAC,GAAGlE,EAAK,iBAA8BH,CAAS,CAAC,CAAC,CAAC,QAChD,MAAMsE,MAAMjE,KAAW,CAACiE,EAAE,QAAQ,+CAA+C,KAAK,CAACA,EAAE,QAAQ,iCAAiC,CACrI;EACF,IAAI,EAAE,QAAQ,eAAgB,EAAE,QAAQ,OAAO,CAAC,EAAE,UAAW,EAAO,KAAK,IAAIzC,EAAK,SAAS,GAAGiC,IAAQ,CAAC,CAAC;OACnG,IAAI,EAAE,QAAQ,aAAc,EAAE,QAAQ,OAAO,CAAC,EAAE,UAAW,EAAO,KAAK,IAAI,GAAGA,IAAQ,CAAC,CAAC;OACxF,IAAI,EAAE,QAAQ,QAAQ,EAAO,CAAC;OAC9B,IAAI,EAAE,QAAQ,OAAO,EAAOjC,EAAK,SAAS,CAAC;OAC3C,IAAI,EAAE,QAAQ,gBAAgB,EAAE,QAAQ,aAAa;GACxD,IAAMG,IAAOqC,EAAQ,GACfE,IAAKR,IAAY,KAAK/B,EAAK,QAAQ6B,CAAM,GACzCO,IAAO,EAAE,QAAQ,eAAepC,EAAKuC,IAAK,KAAKA,IAAK,IAAIvC,EAAKuC,IAAK,KAAKA,MAAO,IAAIlE,IAAU,KAAA;GAClG,IAAI,CAAC+D,GAAM;GAEX,AADA,EAAE,eAAe,GACjBA,EAAK,MAAM;EACb,OAAO,IAAI,EAAE,QAAQ,YAAY,CAACL,GAEhC,AADA,EAAE,eAAe,GACjB1D,EAAQ,MAAM;OACT,IAAI,CAAC0D,KAAa,CAACC,KAAO,EAAE,UACjC;OACK,CAAK,EAAE,QAAQ,OAAO,EAAE,QAAQ,QAAQC,KAC7C,EAAE,eAAe,GACZD,EAAI,YAAUR,GAAOQ,EAAI,EAAE,KACvB,EAAE,QAAQ,WACnB,EAAE,eAAe,GACZA,EAAI,YAAUQ,IAASR,CAAG,KACtB,EAAE,QAAQ,YAAYC,KAAcpD,EAAS,QACtDC,kBAAY,IAAI,IAAI,CAAC;CAEzB,GACM2D,KAAY5D,EAAS,OAAO,GAC5B6D,KAAU,GAAS,MACvBnC,EAAE,SAAS,WACT,kBAACoC,GAAD;EAEE,OAAOpC,EAAE,MAAM;EACf,OAAOA,EAAE,MAAM;EACf,OAAOA,EAAE,MAAM,SAASA,EAAE,MAAM,MAAM;EACtC,WAAWrB,EAAU,IAAIqB,EAAE,MAAM,EAAE;EACnC,gBAAgB;GACd,IAAMvB,IAAI,IAAI,IAAIE,CAAS;GAG3B,AAFIF,EAAE,IAAIuB,EAAE,MAAM,EAAE,IAAGvB,EAAE,OAAOuB,EAAE,MAAM,EAAE,IACrCvB,EAAE,IAAIuB,EAAE,MAAM,EAAE,GACrBpB,GAAaH,CAAC;EAChB;EACA,OAAOuB,EAAE,MAAM;EACf,UAAUA,EAAE,MAAM;EAClB,QAAQ,CAAC,CAAC0B;EACV,OAAO9B,MAAM;EACb,OAAOA;EACP,QAAQA,MAAMc;EACd,eAAe1B,EAAUY,CAAC;CAC3B,GAlBMI,EAAE,GAkBR,IAED,kBAACqC,GAAD;EAEE,OAAOzC;EACP,MAAMI,EAAE;EACR,OAAOA,EAAE;EACT,WAAWA,EAAE;EACJ;EACA;EACK;EACN;EACR,QAAQJ,MAAMc;EACd,UAAUpC,EAAS,IAAI0B,EAAE,KAAK,EAAE;EAChC,YAAY,CAAC,CAAC0B;EACH;EACX,gBAAgBT,GAAOjB,EAAE,KAAK,EAAE;EAChC,cAAciC,IAASjC,EAAE,IAAI;EAC7B,eAAehB,EAAUY,CAAC;EAC1B,GAAK1B,KAAY0B,MAAMG,KAAW,EAAE,cAAc7B,EAAS,IAAI,CAAC;CACjE,GAjBM8B,EAAE,GAiBR;CAGL,OACE,kBAAC,OAAD;EACE,MAAM,MAAM;GAEV,AADA,EAAK,UAAU,GACX,OAAOsC,KAAQ,aAAYA,EAAI,CAAC,IAC3BA,MAAK,EAAI,UAAU;EAC9B;EACA,MAAK;EACL,cAAY/F;EACZ,iBAAe+C,EAAK,UAAU,KAAA;EAC9B,wBAAsBoC,KAAc,KAAA;EACpC,aAAWa,KAAW,KAAA;EACtB,YAAY,MAAM;GAEhB,AADAhC,EAAU,GACVc,GAAU,CAAC;EACb;EACA,gBAAgBd;EAChB,eAAeA;EACf,SAASA;EACT,SAASA;EACT,WAAW9E,EAAG,uCAAuC0C,KAAS,qDAAqDqE,CAAS;EAnB9H,UAAA,CAqBGD,MAAYtC,KAAQX,EAAK,WAAW,KACnC,kBAACmD,IAAD,EAAsB,WAAU,CAAA,IAC9BxC,KAAQyC,IACV,kBAAC,OAAD;GAAK,MAAK;GACR,UAAA,kBAAC,OAAD;IAAK,MAAK;IAAY,UAAAA;GAAW,CAAA;EAC9B,CAAA,IACHxC,KAAWM,IACb,kBAACA,GAAD;GACE,OAAOlB,EAAK;GACE;GACd,wBAAwBnD,EAAa0B,EAAK,OAAO;GACvC;GACV,MAAM,MAAMsE,EAAO7C,EAAKM,IAAKA,CAAC;GAC9B,SAASP;EACV,CAAA,IACCa,IACF,kBAACyC,IAAD;GAAW,OAAOrD,EAAK;GAAsB;GAAc,MAAM,MAAM6C,EAAO7C,EAAKM,IAAKA,CAAC;EAAI,CAAA,IAE7FN,EAAK,IAAI6C,CAAM,GAEhBT,KAAcQ,MAAaU,KAC1B,kBAACC,GAAD;GAAc,OAAOvE,EAAS;GAAM,eAAeC,kBAAY,IAAI,IAAI,CAAC;GACrE,UAAAuE;EACW,CAAA,CAEb;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAK,cAAc;AAE9D,SAASH,GAAU,EAAE,UAAO,iBAAc,UAAsG;CAC9I,IAAMI,IAAO,OAAO,SAAW,MAAc,OAAO,OAAO,aACrDvD,IAAoB,CAAC,GACvBwD,IAAQ,GACRC,IAAQ;CACZ,KAAK,IAAIrD,IAAI,GAAGA,IAAIsD,GAAO,KAAK;EAC9B,IAAIF,KAASD,KAAQ,OAAW,GAAG;GACjC,KAAK,IAAII,IAAIvD,GAAGuD,IAAID,GAAO,KAAK,KAAS9C,EAAa+C,CAAC;GACvD;EACF;EAMA,AALA3D,EAAK,KACH,kBAAC,OAAD;GAAa,MAAK;GAAe,WAAU;GAA+B,OAAO,EAAE,WAAW,cAAc,KAAK,MAAMwD,CAAK,EAAE,KAAK;GAChI,UAAAvB,EAAI7B,CAAC;EACH,GAFKA,CAEL,CACP,GACA,KAASQ,EAAaR,CAAC;CACzB;CACA,OACE,kBAAC,OAAD;EAAK,MAAK;EAAe,WAAU;EAAkB,OAAO,EAAE,QAAQoD,EAAM;EACzE,UAAAxD;CACE,CAAA;AAET;AAEA,SAASiD,GAAY,EAAE,cAAkE;CACvF,IAAMW,IAASC,EAAgB;CAC/B,OACE,kBAAC,OAAD;EAAK,MAAK;EACP,UAAA;GAAC;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE,CAAC,CAAC,KAAK,GAAG,MAChC,kBAAC,OAAD;GAAa,MAAK;GAAe,WAAWD,IAAS,SAAS;GAC5D,UAAA,kBAAC,OAAD;IAAK,WAAW3H,EAAG,kCAAkC4B,EAAoB,QAAQgD,EAAQ,CAAC,OAAO;IAAjG,UAAA;KACE,kBAACnE,GAAD;MAAU,OAAM;MAAO,WAAU;MAAU,OAAO,EAAE,OAAO,GAAG6F,EAAE,GAAG;KAAI,CAAA;KACvE,kBAAC,QAAD,EAAM,WAAU,SAAU,CAAA;KAC1B,kBAAC7F,GAAD;MAAU,OAAM;MAAO,WAAU;KAAiB,CAAA;IAC/C;;EACF,GANK,CAML,CACN;CACE,CAAA;AAET;AAqBA,IAAamG,IAA0B,kBAAyC,SAC9E,EACE,SACA,UACA,WAAQ,GACR,cACA,YACA,aAAU,WACV,kBAAe,IACf,YAAS,IACT,WACA,aACA,eACA,cACA,aACA,WACA,YACA,cAAciB,KAEhB,GACA;CACA,IAAMC,IAAO5H,EAAS,GAChByH,IAASC,EAAgB,GACzBG,KAAIC,EAAU,GACdrC,IAAQ/B,KAAU,CAAC,EAAEK,EAAK,QAAQA,EAAK,OACvCgE,KAAWH,KAAQnC,MAAU,CAAC,CAAC1B,EAAK,UACpCiE,IAAQD,KAAWE;CACzB,OACE,kBAAC,OAAD;EACE,MAAK;EACL,iBAAerC,MAAU,KAAA,IAAwB,KAAA,IAAZA,IAAQ;EAC7C,WAAWgC,IAAO9H,EAAG,QAAQ8F,MAAU,KAAA,KAAaA,IAAQ,KAAK,YAAY,IAAI6B,IAAS,SAAS;EAEnG,UAAA,kBAAC,OAAD;GACO;GACL,MAAK;GACL,iBAAe1B,IAAa,CAAC,CAACpD,IAAW,KAAA;GACzC,iBAAeoB,EAAK,YAAY,KAAA;GAChC,cAAY6B;GACZ,YAAS;GACT,UAAUxC,MAAW,KAAQ,KAAK;GACzB;GACT,UAAU,MAA+B;IACvC,AAAK,EAAE,cAAc,SAAS,EAAE,MAAc,KAAM,GAAE,OAAuB,QAAQ,4BAA4B,MAC7GmD,KAAaR,IAAYmC,IAAW,IACnC5B,IAAS;GAChB;GACA,GAAKqB,IAAQ,EAAE,cAAcA,EAAM,IAAI,CAAC;GACxC,WAAW7H,EACT,wHACA8H,IAAO,uBAAuB,sBAC9BnC,KAASuC,IAAQ,kBAAkBD,IAAU,SAASH,KAAQlD,MAAY,YAAY,SAAShD,EAAoB,QAAQgD,EAAQ,CAAC,SACpI,0CACA/B,KAAY,8CACZoB,EAAK,YAAY,sCACnB;GAtBF,UAAA;IAwBGgC,KACC,kBAAC,QAAD;KACE,WAAWjG,EACT,oCACAyG,KAAa5D,IAAW,gBAAgB,8FAC1C;KACA,UAAU,MAAM,EAAE,gBAAgB;KAElC,UAAA,kBAAChC,GAAD;MACE,SAAS,CAAC,CAACgC;MACX,gBAAgBuF,IAAW;MAC3B,cAAYL,GAAE,mBAAmB,iBAAiB,EAAE,MAAM9D,EAAK,cAAc,OAAOA,EAAK,SAAU,WAAWA,EAAK,QAAQA,EAAK,IAAI,CAAC;KACtI,CAAA;IACG,CAAA;IAEPoE,MAAU,KACT,kBAAC,QAAD;KAAM,eAAA;KAAY,WAAU;KAA5B,UAAA,CACE,kBAAC,QAAD,EAAM,WAAWrI,EAAG,sCAAsCsI,IAAY,gBAAgB,WAAW,EAAI,CAAA,GACrG,kBAAC,QAAD,EAAM,WAAU,kDAAmD,CAAA,CAC/D;;IAEPrE,EAAK,SAAS,kBAAC,QAAD;KAAM,WAAU;KAAqD,UAAAA,EAAK;IAAY,CAAA;IACpGA,EAAK,WAAW,kBAAC,QAAD;KAAM,WAAU;KAAuB,UAAAA,EAAK;IAAc,CAAA;IAC1EA,EAAK,aACJ,kBAAC,QAAD;KAAM,WAAWjE,EAAG,8DAA8D6C,KAAY,qBAAqB0F,KAAWzG,EAAKyG,EAAQ;KACxI,UAAAtE,EAAK;IACF,CAAA;IAER,kBAAC,QAAD;KAAM,WAAWjE,EAAG,uBAAuB2F,IAAQ,+BAA+B,UAAU;KAA5F,UAAA,CACE,kBAAC,QAAD;MAAM,WAAW3F,EAAG,gBAAgB2F,IAAQ,WAAW,UAAUsC,IAAU,+BAA+B,sBAAsB;MAAhI,UAAA,CACG,OAAOhE,EAAK,SAAU,WACrB,kBAAC3D,GAAD;OAAM,UAAA;OAAS,QAAO;OAAS,WAAWN,EAAG,kBAAkBiI,KAAW,YAAY;OACnF,UAAAhE,EAAK;MACF,CAAA,IAEN,kBAAC,QAAD;OAAM,WAAWjE,EAAG,wCAAwCiI,KAAW,YAAY;OAAI,UAAAhE,EAAK;MAAY,CAAA,GAEzGA,EAAK,YACJ,kBAAC,QAAD;OAAM,WAAWjE,EAAG,6BAA6BkI,IAAQ,gBAAgB,YAAYD,IAAU,0BAA0B,gBAAgB;OACtI,UAAAhE,EAAK;MACF,CAAA,CAEJ;KACL,CAAA,GAAA0B,KACC,kBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CACG1B,EAAK,QAAQ,kBAAC,QAAD;OAAM,WAAU;OAAY,UAAAA,EAAK;MAAW,CAAA,GACzDA,EAAK,QAAQ,kBAAC,QAAD;OAAM,WAAU;OAA0D,UAAAA,EAAK;MAAW,CAAA,CACpG;KAEJ,CAAA,CAAA;;IACL0B,KAAS1B,EAAK,WAAW,kBAAC,QAAD;KAAM,WAAU;KAAoC,UAAAA,EAAK;IAAc,CAAA;IAChG,CAAC0B,MAAU1B,EAAK,QAAQA,EAAK,YAC5B,kBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACE,kBAAC,QAAD;MAAM,WAAWjE,EAAG,2BAA2BiE,EAAK,WAAW,+EAA+E;MAC3I,UAAAA,EAAK;KACF,CAAA,GACLA,EAAK,WACJ,kBAAC,QAAD;MACE,WAAWjE,EACT,0IACAiE,EAAK,QAAQ,0CACf;MAEC,UAAAA,EAAK;KACF,CAAA,CAEJ;;IAEP,CAAC0B,KAAS1B,EAAK,QAAQ,kBAAC,QAAD;KAAM,WAAU;KAAuF,UAAAA,EAAK;IAAW,CAAA;IAC9IA,EAAK,UAAU,kBAAC,QAAD;KAAM,WAAU;KAAiB,UAAAA,EAAK;IAAa,CAAA;GAChE;;CACF,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAQ,cAAc;AAiBjE,IAAa0C,IAA8B,kBAA6C,SACtF,EAAE,UAAO,UAAO,UAAO,cAAW,aAAU,UAAO,aAAU,WAAQ,UAAO,UAAO,WAAQ,cAC3F,GACA;CACA,IAAMmB,IAAO5H,EAAS,GAChByH,IAASC,EAAgB,GACzBG,IAAIC,EAAU;CACpB,OACE,kBAAC,OAAD;EACO;EACL,MAAK;EACL,iBAAelC,MAAU,KAAA,IAAwB,KAAA,IAAZA,IAAQ;EACpC;EACT,WAAWgC,IAAO9H,EAAG,sBAAsB,CAACwI,KAAS,YAAY,IAAIxI,EAAG,6BAA6B2H,IAAS,SAAS,OAAO;EAE9H,UAAA,kBAAC,OAAD;GAAK,MAAK;GAAW,WAAW3H,EAAG,gCAAgC8H,KAAQ,YAAY;GAAvF,UAAA;IACGW,KAAU,CAACX,KAAQ,kBAAC,QAAD;KAAM,eAAA;KAAY,WAAU;IAAsB,CAAA;IACtE,kBAAC,UAAD;KACE,MAAK;KACL,iBAAe,CAAC5E;KAChB,cAAY4C;KACZ,UAAUxC,MAAW,KAAQ,KAAK;KAClC,SAAS7B;KACT,WAAU;KANZ,UAAA;MAQGiH,KAAS,kBAAC,QAAD;OAAM,WAAU;OAA4C,UAAAA;MAAY,CAAA;MAClF,kBAAC,QAAD;OAAM,WAAU;OAA0C,UAAAC;MAAY,CAAA;MACrElB,MAAU,KAAA,KAAa,kBAAC,QAAD;OAAM,WAAU;OAA4B,UAAAA;MAAY,CAAA;MAChF,kBAAC,OAAD;OAAK,SAAQ;OAAU,eAAA;OAAY,WAAWzH,EAAG,6DAA6D,CAACkD,KAAa,WAAW;OACrI,UAAA,kBAAC,QAAD;QAAM,GAAE;QAAyB,MAAK;OAAgB,CAAA;MACnD,CAAA;KACC;;IACR,kBAAC,QAAD,EAAM,WAAU,SAAU,CAAA;IACzB0F,KACC,kBAAC,QAAD;KAAM,WAAU;KACd,UAAA,kBAACrI,GAAD;MAAY,MAAMT;MAAkB,cAAYgJ,KAAYf,EAAE,YAAY,KAAK;MAAG,MAAK;MAAK,SAASa;KAAQ,CAAA;IACzG,CAAA;GAEL;;CACF,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAY,cAAc;AAErE,SAAgBxB,EAAa,EAAE,UAAO,YAAS,eAAsF;CACnI,IAAM2B,IAAY9I,EAAmB,GAC/B8H,IAAIC,EAAU;CAEpB,OADI,OAAO,WAAa,MAAoB,OACrCgB,EACL,kBAAC,OAAD;EACE,MAAK;EACL,cAAYjB,EAAE,kBAAkB,WAAW;EAC3C,WAAU;EAEV,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAAC,QAAD;KAAM,WAAU;KAAgB,UAAAA,EAAE,iBAAiB,oBAAoB,EAAE,OAAO,OAAON,CAAK,EAAE,CAAC;IAAQ,CAAA;IACvG,kBAAC,QAAD;KAAM,WAAU;KAAgC,eAAA;IAAa,CAAA;IAC5DwB;IACD,kBAAC,UAAD;KACE,MAAK;KACL,SAASC;KACT,cAAYnB,EAAE,uBAAuB,iBAAiB;KACtD,WAAU;KAEV,UAAA,kBAAC5H,GAAD;MAAM,MAAMJ;MAAqB,MAAK;KAAM,CAAA;IACtC,CAAA;GACL;;CACF,CAAA,GACLgJ,KAAa,SAAS,IACxB;AACF;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAa,cAAc;AAEtE,SAAgBK,EAAgB,EAC9B,aACA,YACA,SACA,aAMC;CACD,OACE,kBAAC,UAAD;EACE,MAAK;EACI;EACT,WAAWpJ,EACT,mJACAqJ,IAAS,sBAAsB,iBAC/BC,KAAQ,OACV;EAPF,UAAA,CASGA,KAAQ,kBAACnJ,GAAD;GAAY;GAAM,MAAK;GAAK,WAAWkJ,IAAS,KAAA,IAAY;EAA4B,CAAA,GAChGJ,CACK;;AAEZ;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAgB,cAAc"}
@@ -2,12 +2,12 @@
2
2
  import { l as e } from "./styles-CVJU9t9v.js";
3
3
  import { t } from "./cn-DUDmdLpZ.js";
4
4
  import { i as n } from "./context-BELWW79w.js";
5
- import { r } from "./text-Dvvgg5Jt.js";
5
+ import { r } from "./text-IoDy3Vxi.js";
6
6
  import { r as i } from "./link-YMcxM-BZ.js";
7
7
  import { t as a } from "./code-C49NzHUQ.js";
8
8
  import { r as o } from "./separator-CpAUELNs.js";
9
- import { n as s } from "./button-CAPyW-v8.js";
10
- import { t as c } from "./code-block-DREsvJ-g.js";
9
+ import { n as s } from "./button-h2IFCER2.js";
10
+ import { t as c } from "./code-block-BU8gYeZQ.js";
11
11
  import { r as l } from "./table-D-36EM7f.js";
12
12
  import { t as u } from "./safe-href-G5DBNVwm.js";
13
13
  import { forwardRef as d, memo as f, useMemo as p, useState as m } from "react";
@@ -310,4 +310,4 @@ process.env.NODE_ENV !== "production" && (I.displayName = "Markdown");
310
310
  //#endregion
311
311
  export { D as a, T as i, x as n, b as o, I as r, E as s, S as t };
312
312
 
313
- //# sourceMappingURL=markdown-DWyxjsSY.js.map
313
+ //# sourceMappingURL=markdown-DBVNULWg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-DWyxjsSY.js","names":["_Fragment","__exportAll","useUiText","Link","Code","Separator","Button","CodeBlock","Table","safeHref","Fragment$1","markdown_exports","KAESO_MARKDOWN_DEFAULT_VARIANTS","KAESO_MARKDOWN_VARIANTS","Markdown","lexMarkdown","markdownCodeLang","previewMarkdown","lexer","tokenizer","Tokenizer","Lexer","cache","options","text","hit","tokens","limit","at","cut","space","lang","ExternalLink","title","inline","t","i","link","href","image","label","List","Tag","list","start","last","item","Text","TEXT","ctx","blocks","PROSE","block","tail","h","major","variant","level","x","tight","table","align","a","c","j","row","r","cn","Block","token","b","all","setAll","useState","long","streaming","collapseAfter","shown","useMemo","out","end","wrapCode","headingLevel","trailing","size","tone","className"],"sources":["../../src/components/markdown/markdown.tsx"],"sourcesContent":["import { forwardRef, memo, useMemo, useState, type ReactNode } from \"react\";\nimport { Lexer, Tokenizer, type Token, type Tokens } from \"marked\";\nimport { cn } from \"../../utils/cn.js\";\nimport { safeHref } from \"../../utils/safe-href.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { Button } from \"../button/button.js\";\nimport { Code } from \"../code/code.js\";\nimport { CodeBlock } from \"../code-block/code-block.js\";\nimport type { CodeLang } from \"../code-block/highlighter.js\";\nimport { Link } from \"../link/link.js\";\nimport { Separator } from \"../separator/separator.js\";\nimport { Table } from \"../table/table.js\";\nimport { Text } from \"../text/text.js\";\n\nexport { safeHref };\n\nexport const KAESO_MARKDOWN_VARIANTS = {\n size: {\n lg: { classes: \"gap-16\" },\n body: { classes: \"gap-12\" },\n small: { classes: \"gap-8\" },\n },\n tone: {\n default: { classes: \"text-fg\" },\n secondary: { classes: \"text-fg-secondary\" },\n },\n} as const;\nexport const KAESO_MARKDOWN_DEFAULT_VARIANTS = { size: \"body\", tone: \"default\" } as const;\n\nexport type MarkdownSize = keyof typeof KAESO_MARKDOWN_VARIANTS.size;\nexport type MarkdownTone = keyof typeof KAESO_MARKDOWN_VARIANTS.tone;\n\nexport interface MarkdownProps {\n text: string;\n size?: MarkdownSize | undefined;\n tone?: MarkdownTone | undefined;\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6 | undefined;\n collapseAfter?: number | undefined;\n streaming?: boolean | undefined;\n wrapCode?: boolean | undefined;\n trailing?: ReactNode | undefined;\n className?: string | undefined;\n}\n\ninterface Ctx {\n wrap: boolean;\n size: MarkdownSize;\n level: number;\n trailing: ReactNode;\n}\n\nfunction lexer() {\n const tokenizer = new Tokenizer();\n tokenizer.html = () => undefined;\n tokenizer.tag = () => undefined;\n tokenizer.def = () => undefined;\n return new Lexer({ gfm: true, breaks: true, tokenizer });\n}\n\nlet cache: Map<string, Token[]> | undefined;\n\nexport function lexMarkdown(text: string, options: { cache?: boolean | undefined } = {}): Token[] {\n if (options.cache === false) return lexer().lex(text);\n cache ??= new Map();\n const hit = cache.get(text);\n if (hit) return hit;\n const tokens = lexer().lex(text);\n if (cache.size >= 64) cache.delete(cache.keys().next().value ?? \"\");\n cache.set(text, tokens);\n return tokens;\n}\n\nexport function previewMarkdown(text: string, limit: number): string {\n if (text.length <= limit) return text;\n for (const at of [\"\\n\\n\", \"\\n\"]) {\n const cut = text.lastIndexOf(at, limit);\n if (cut > limit / 2) return text.slice(0, cut);\n }\n const space = text.lastIndexOf(\" \", limit);\n return `${text.slice(0, space > limit / 2 ? space : limit).trimEnd()}…`;\n}\n\nexport function markdownCodeLang(lang: string | undefined): CodeLang {\n const name = (lang ?? \"\").trim().split(/\\s/)[0]?.toLowerCase() ?? \"\";\n switch (name) {\n case \"ts\":\n case \"typescript\":\n return \"ts\";\n case \"tsx\":\n case \"jsx\":\n return \"tsx\";\n case \"js\":\n case \"javascript\":\n case \"mjs\":\n case \"cjs\":\n return \"js\";\n case \"json\":\n case \"jsonc\":\n case \"json5\":\n return \"json\";\n case \"bash\":\n case \"sh\":\n case \"shell\":\n case \"zsh\":\n case \"console\":\n return \"bash\";\n case \"python\":\n case \"py\":\n return \"python\";\n case \"yaml\":\n case \"yml\":\n return \"yaml\";\n case \"diff\":\n case \"patch\":\n return \"diff\";\n default:\n return \"text\";\n }\n}\n\nfunction ExternalLink({ href, title, children }: { href: string; title?: string | null | undefined; children: ReactNode }) {\n return (\n <Link href={href} external target=\"_blank\" rel=\"noopener noreferrer nofollow\" {...(title ? { title } : {})} className=\"max-w-full wrap-anywhere\">\n {children}\n </Link>\n );\n}\n\nfunction inline(tokens: Token[] | undefined): ReactNode[] {\n return (tokens ?? []).map((t, i) => {\n switch (t.type) {\n case \"text\":\n return \"tokens\" in t && t.tokens ? <span key={i}>{inline(t.tokens)}</span> : t.text;\n case \"escape\":\n return t.text;\n case \"strong\":\n return (\n <strong key={i} className=\"font-semibold\">\n {inline(t.tokens)}\n </strong>\n );\n case \"em\":\n return <em key={i}>{inline(t.tokens)}</em>;\n case \"del\":\n return <del key={i}>{inline(t.tokens)}</del>;\n case \"codespan\":\n return (\n <Code key={i} shape=\"rounded\" className=\"wrap-anywhere\">\n {t.text}\n </Code>\n );\n case \"br\":\n return <br key={i} />;\n case \"link\": {\n const link = t as Tokens.Link;\n const href = safeHref(link.href);\n return href ? (\n <ExternalLink key={i} href={href} title={link.title}>\n {inline(link.tokens)}\n </ExternalLink>\n ) : (\n <span key={i}>{inline(link.tokens)}</span>\n );\n }\n case \"image\": {\n const image = t as Tokens.Image;\n const href = safeHref(image.href);\n const label = image.text || image.href;\n return href ? (\n <ExternalLink key={i} href={href} title={image.title}>\n {label}\n </ExternalLink>\n ) : (\n label\n );\n }\n case \"checkbox\":\n return null;\n default:\n return t.raw;\n }\n });\n}\n\nfunction List({ list, ctx }: { list: Tokens.List; ctx: Ctx }) {\n const Tag = list.ordered ? \"ol\" : \"ul\";\n const start = typeof list.start === \"number\" ? list.start : 1;\n const last = list.items.length - 1;\n return (\n <Tag className=\"flex flex-col gap-4\">\n {list.items.map((item, i) => (\n <li key={i} className=\"flex gap-8\">\n {item.task ? (\n <Text as=\"span\" variant={TEXT[ctx.size]} weight=\"regular\" tone=\"tertiary\" mono className=\"shrink-0\">\n {item.checked ? \"[x]\" : \"[ ]\"}\n </Text>\n ) : (\n <Text\n as=\"span\"\n aria-hidden\n variant={TEXT[ctx.size]}\n weight=\"regular\"\n tone=\"tertiary\"\n tabular\n className={list.ordered ? \"min-w-16 shrink-0 text-right\" : \"w-8 shrink-0 text-center\"}\n >\n {list.ordered ? `${start + i}.` : \"•\"}\n </Text>\n )}\n <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n {blocks(\n item.tokens.filter((t) => t.type !== \"checkbox\"),\n i === last ? ctx : { ...ctx, trailing: null },\n !item.loose,\n )}\n </div>\n </li>\n ))}\n </Tag>\n );\n}\n\nconst PROSE = \"max-w-prose wrap-break-word\";\nconst TEXT = { lg: \"body-lg\", body: \"body\", small: \"small\" } as const;\n\nfunction block(t: Token, ctx: Ctx, tight: boolean): ReactNode {\n const tail = ctx.trailing;\n switch (t.type) {\n case \"space\":\n return null;\n case \"heading\": {\n const h = t as Tokens.Heading;\n const major = h.depth <= 2;\n const variant = ctx.size === \"lg\" ? (major ? \"title-sm\" : \"body-lg\") : ctx.size === \"body\" ? (major ? \"body-lg\" : \"body\") : major ? \"body\" : \"small\";\n const level = Math.min(6, h.depth + ctx.level - 1) as 1 | 2 | 3 | 4 | 5 | 6;\n return (\n <Text as={`h${level}`} variant={variant} weight=\"semibold\" tone=\"inherit\" className=\"mt-4 first:mt-0 wrap-break-word\">\n {inline(h.tokens)}\n {tail}\n </Text>\n );\n }\n case \"paragraph\":\n return (\n <Text as=\"p\" variant={TEXT[ctx.size]} weight=\"regular\" tone=\"inherit\" className={PROSE}>\n {inline((t as Tokens.Paragraph).tokens)}\n {tail}\n </Text>\n );\n case \"text\": {\n const x = t as Tokens.Text;\n return (\n <Text as={tight ? \"div\" : \"p\"} variant={TEXT[ctx.size]} weight=\"regular\" tone=\"inherit\" className={PROSE}>\n {x.tokens ? inline(x.tokens) : x.text}\n {tail}\n </Text>\n );\n }\n case \"list\":\n return <List list={t as Tokens.List} ctx={ctx} />;\n case \"code\":\n return (\n <>\n <CodeBlock code={(t as Tokens.Code).text} lang={markdownCodeLang((t as Tokens.Code).lang)} wrap={ctx.wrap} />\n </>\n );\n case \"blockquote\":\n return (\n <blockquote className=\"flex gap-12\">\n <Separator orientation=\"vertical\" tone=\"default\" />\n <div className=\"flex min-w-0 flex-1 flex-col gap-8 text-fg-secondary\">{blocks((t as Tokens.Blockquote).tokens, ctx)}</div>\n </blockquote>\n );\n case \"hr\":\n return (\n <>\n <Separator className=\"my-4\" />\n </>\n );\n case \"table\": {\n const table = t as Tokens.Table;\n const align = (a: Tokens.TableCell[\"align\"]) => (a === \"right\" ? \"end\" : \"start\");\n return (\n <>\n <div className=\"max-w-full overflow-x-auto scrollbar-quiet\">\n <Table className={ctx.size === \"small\" ? \"text-small\" : undefined}>\n <Table.Head>\n <Table.Row>\n {table.header.map((c, j) => (\n <Table.HeaderCell key={j} align={align(c.align)}>\n {inline(c.tokens)}\n </Table.HeaderCell>\n ))}\n </Table.Row>\n </Table.Head>\n <Table.Body>\n {table.rows.map((row, r) => (\n <Table.Row key={r}>\n {row.map((c, j) => (\n <Table.Cell key={j} align={align(c.align)}>\n {inline(c.tokens)}\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </div>\n </>\n );\n }\n default:\n return (\n <Text as=\"p\" variant={TEXT[ctx.size]} weight=\"regular\" tone=\"inherit\" className={cn(PROSE, \"whitespace-pre-wrap\")}>\n {t.raw}\n {tail}\n </Text>\n );\n }\n}\n\nconst Block = /* @__PURE__ */ memo(\n function Block({ token, ctx, tight }: { token: Token; ctx: Ctx; tight: boolean }) {\n return <>{block(token, ctx, tight)}</>;\n },\n (a, b) =>\n a.token.raw === b.token.raw &&\n a.tight === b.tight &&\n a.ctx.size === b.ctx.size &&\n a.ctx.wrap === b.ctx.wrap &&\n a.ctx.level === b.ctx.level &&\n a.ctx.trailing === b.ctx.trailing,\n);\n\nfunction blocks(tokens: Token[], ctx: Ctx, tight = false): ReactNode[] {\n let last = tokens.length - 1;\n while (last > 0 && tokens[last]?.type === \"space\") last--;\n return tokens.map((t, i) => <Block key={i} token={t} tight={tight} ctx={i === last || !ctx.trailing ? ctx : { ...ctx, trailing: null }} />);\n}\n\nexport const Markdown = /* @__PURE__ */ forwardRef<HTMLDivElement, MarkdownProps>(function Markdown(\n { text, size = \"body\", tone = \"default\", headingLevel = 3, collapseAfter = 24_000, streaming = false, wrapCode = false, trailing, className },\n ref,\n) {\n const [all, setAll] = useState(false);\n const t = useUiText();\n const long = !streaming && collapseAfter > 0 && text.length > collapseAfter;\n const shown = long && !all ? previewMarkdown(text, Math.round(collapseAfter * 0.66)) : text;\n const tokens = useMemo(() => {\n const out = lexMarkdown(shown, { cache: !streaming });\n let end = out.length;\n if (shown !== text) while (end > 1 && [\"space\", \"heading\", \"hr\"].includes(out[end - 1]?.type ?? \"\")) end--;\n return out.slice(0, end);\n }, [shown, text, streaming]);\n const ctx = useMemo<Ctx>(() => ({ size, wrap: wrapCode, level: headingLevel, trailing: trailing ?? null }), [size, wrapCode, headingLevel, trailing]);\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col\", KAESO_MARKDOWN_VARIANTS.size[size].classes, KAESO_MARKDOWN_VARIANTS.tone[tone].classes, className)}>\n {blocks(tokens, ctx)}\n {long && !all && (\n <div>\n <Button size=\"sm\" variant=\"secondary\" onClick={() => setAll(true)}>\n {t(\"markdown.showAllCharacters\", \"Show all {count} characters\", { count: text.length })}\n </Button>\n </div>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Markdown.displayName = \"Markdown\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;A,IAgBaa,IAA0B;CACrC,MAAM;EACJ,IAAI,EAAE,SAAS,SAAS;EACxB,MAAM,EAAE,SAAS,SAAS;EAC1B,OAAO,EAAE,SAAS,QAAQ;CAC5B;CACA,MAAM;EACJ,SAAS,EAAE,SAAS,UAAU;EAC9B,WAAW,EAAE,SAAS,oBAAoB;CAC5C;AACF,GACaD,IAAkC;CAAE,MAAM;CAAQ,MAAM;AAAU;AAwB/E,SAASM,IAAQ;CACf,IAAMC,IAAY,IAAIC,EAAU;CAIhC,OAHA,EAAU,aAAa,KAAA,GACvB,EAAU,YAAY,KAAA,GACtB,EAAU,YAAY,KAAA,GACf,IAAIC,EAAM;EAAE,KAAK;EAAM,QAAQ;EAAM;CAAU,CAAC;AACzD;AAEA,IAAIC;AAEJ,SAAgBP,EAAY,GAAc,IAA2C,CAAC,GAAY;CAChG,IAAIQ,EAAQ,UAAU,IAAO,OAAOL,EAAM,CAAC,CAAC,IAAIM,CAAI;CACpD,sBAAU,IAAI,IAAI;CAClB,IAAMC,IAAMH,EAAM,IAAIE,CAAI;CAC1B,IAAIC,GAAK,OAAOA;CAChB,IAAMC,IAASR,EAAM,CAAC,CAAC,IAAIM,CAAI;CAG/B,OAFIF,EAAM,QAAQ,MAAIA,EAAM,OAAOA,EAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,GAClEA,EAAM,IAAIE,GAAME,CAAM,GACfA;AACT;AAEA,SAAgBT,EAAgB,GAAc,GAAuB;CACnE,IAAIO,EAAK,UAAUG,GAAO,OAAOH;CACjC,KAAK,IAAMI,KAAM,CAAC,QAAQ,IAAI,GAAG;EAC/B,IAAMC,IAAML,EAAK,YAAYI,GAAID,CAAK;EACtC,IAAIE,IAAMF,IAAQ,GAAG,OAAOH,EAAK,MAAM,GAAGK,CAAG;CAC/C;CACA,IAAMC,IAAQN,EAAK,YAAY,KAAKG,CAAK;CACzC,OAAO,GAAGH,EAAK,MAAM,GAAGM,IAAQH,IAAQ,IAAIG,IAAQH,CAAK,CAAC,CAAC,QAAQ,EAAE;AACvE;AAEA,SAAgBX,EAAiB,GAAoC;CAEnE,SADce,KAAQ,GAAA,CAAI,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,YAAY,KAAK,IAClE;EACE,KAAK;EACL,KAAK,cACH,OAAO;EACT,KAAK;EACL,KAAK,OACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,OACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK,SACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,WACH,OAAO;EACT,KAAK;EACL,KAAK,MACH,OAAO;EACT,KAAK;EACL,KAAK,OACH,OAAO;EACT,KAAK;EACL,KAAK,SACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAASC,EAAa,EAAE,SAAM,UAAO,eAAsF;CACzH,OACE,kBAAC7B,GAAD;EAAY;EAAM,UAAA;EAAS,QAAO;EAAS,KAAI;EAA+B,GAAK8B,IAAQ,EAAE,SAAM,IAAI,CAAC;EAAI,WAAU;EACnH;CACG,CAAA;AAEV;AAEA,SAASC,EAAO,GAA0C;CACxD,QAAQR,KAAU,CAAC,EAAA,CAAG,KAAK,GAAG,MAAM;EAClC,QAAQS,EAAE,MAAV;GACE,KAAK,QACH,OAAO,YAAYA,KAAKA,EAAE,SAAS,kBAAC,QAAD,EAAA,UAAeD,EAAOC,EAAE,MAAM,EAAQ,GAA3BC,CAA2B,IAAID,EAAE;GACjF,KAAK,UACH,OAAOA,EAAE;GACX,KAAK,UACH,OACE,kBAAC,UAAD;IAAgB,WAAU;IACvB,UAAAD,EAAOC,EAAE,MAAM;GACV,GAFKC,CAEL;GAEZ,KAAK,MACH,OAAO,kBAAC,MAAD,EAAA,UAAaF,EAAOC,EAAE,MAAM,EAAM,GAAzBC,CAAyB;GAC3C,KAAK,OACH,OAAO,kBAAC,OAAD,EAAA,UAAcF,EAAOC,EAAE,MAAM,EAAO,GAA1BC,CAA0B;GAC7C,KAAK,YACH,OACE,kBAAChC,GAAD;IAAc,OAAM;IAAU,WAAU;IACrC,UAAA+B,EAAE;GACC,GAFKC,CAEL;GAEV,KAAK,MACH,OAAO,kBAAC,MAAD,CAAa,GAAJA,CAAI;GACtB,KAAK,QAAQ;IACX,IAAMC,IAAOF,GACPG,IAAO7B,EAAS4B,EAAK,IAAI;IAC/B,OAAOC,IACL,kBAACN,GAAD;KAA4B;KAAM,OAAOK,EAAK;KAC3C,UAAAH,EAAOG,EAAK,MAAM;IACP,GAFKD,CAEL,IAEd,kBAAC,QAAD,EAAA,UAAeF,EAAOG,EAAK,MAAM,EAAQ,GAA9BD,CAA8B;GAE7C;GACA,KAAK,SAAS;IACZ,IAAMG,IAAQJ,GACRG,IAAO7B,EAAS8B,EAAM,IAAI,GAC1BC,IAAQD,EAAM,QAAQA,EAAM;IAClC,OAAOD,IACL,kBAACN,GAAD;KAA4B;KAAM,OAAOO,EAAM;KAC5C,UAAAC;IACW,GAFKJ,CAEL,IAEdI;GAEJ;GACA,KAAK,YACH,OAAO;GACT,SACE,OAAOL,EAAE;EACb;CACF,CAAC;AACH;AAEA,SAASM,EAAK,EAAE,SAAM,UAAwC;CAC5D,IAAMC,IAAMC,EAAK,UAAU,OAAO,MAC5BC,IAAQ,OAAOD,EAAK,SAAU,WAAWA,EAAK,QAAQ,GACtDE,IAAOF,EAAK,MAAM,SAAS;CACjC,OACE,kBAACD,GAAD;EAAK,WAAU;EACZ,UAAAC,EAAK,MAAM,KAAK,GAAM,MACrB,kBAAC,MAAD;GAAY,WAAU;GAAtB,UAAA,CACGG,EAAK,OACJ,kBAACC,GAAD;IAAM,IAAG;IAAO,SAASC,EAAKC,EAAI;IAAO,QAAO;IAAU,MAAK;IAAW,MAAA;IAAK,WAAU;IACtF,UAAAH,EAAK,UAAU,QAAQ;GACpB,CAAA,IAEN,kBAACC,GAAD;IACE,IAAG;IACH,eAAA;IACA,SAASC,EAAKC,EAAI;IAClB,QAAO;IACP,MAAK;IACL,SAAA;IACA,WAAWN,EAAK,UAAU,iCAAiC;IAE1D,UAAAA,EAAK,UAAU,GAAGC,IAAQR,EAAE,KAAK;GAC9B,CAAA,GAER,kBAAC,OAAD;IAAK,WAAU;IACZ,UAAAc,EACCJ,EAAK,OAAO,QAAQ,MAAMX,EAAE,SAAS,UAAU,GAC/CC,MAAMS,IAAOI,IAAM;KAAE,GAAGA;KAAK,UAAU;IAAK,GAC5C,CAACH,EAAK,KACR;GACG,CAAA,CACH;EAzBK,GAAAV,CAyBL,CACL;CACE,CAAA;AAET;AAEA,IAAMe,IAAQ,+BACRH,IAAO;CAAE,IAAI;CAAW,MAAM;CAAQ,OAAO;AAAQ;AAE3D,SAASI,EAAM,GAAU,GAAU,GAA2B;CAC5D,IAAMC,IAAOJ,EAAI;CACjB,QAAQd,EAAE,MAAV;EACE,KAAK,SACH,OAAO;EACT,KAAK,WAAW;GACd,IAAMmB,IAAInB,GACJoB,IAAQD,EAAE,SAAS,GACnBE,IAAUP,EAAI,SAAS,OAAQM,IAAQ,aAAa,YAAaN,EAAI,SAAS,SAAUM,IAAQ,YAAY,SAAUA,IAAQ,SAAS,SACvIE,IAAQ,KAAK,IAAI,GAAGH,EAAE,QAAQL,EAAI,QAAQ,CAAC;GACjD,OACE,kBAACF,GAAD;IAAM,IAAI,IAAIU;IAAkB;IAAS,QAAO;IAAW,MAAK;IAAU,WAAU;IAApF,UAAA,CACGvB,EAAOoB,EAAE,MAAM,GACfD,CACG;;EAEV;EACA,KAAK,aACH,OACE,kBAACN,GAAD;GAAM,IAAG;GAAI,SAASC,EAAKC,EAAI;GAAO,QAAO;GAAU,MAAK;GAAU,WAAWE;GAAjF,UAAA,CACGjB,EAAQC,EAAuB,MAAM,GACrCkB,CACG;;EAEV,KAAK,QAAQ;GACX,IAAMK,IAAIvB;GACV,OACE,kBAACY,GAAD;IAAM,IAAIY,IAAQ,QAAQ;IAAK,SAASX,EAAKC,EAAI;IAAO,QAAO;IAAU,MAAK;IAAU,WAAWE;IAAnG,UAAA,CACGO,EAAE,SAASxB,EAAOwB,EAAE,MAAM,IAAIA,EAAE,MAChCL,CACG;;EAEV;EACA,KAAK,QACH,OAAO,kBAACZ,GAAD;GAAM,MAAMN;GAAuB;EAAM,CAAA;EAClD,KAAK,QACH,OACE,kBAAAnC,GAAA,EAAA,UACE,kBAACO,GAAD;GAAW,MAAO4B,EAAkB;GAAM,MAAMnB,EAAkBmB,EAAkB,IAAI;GAAG,MAAMc,EAAI;EAAO,CAAA,EAC5G,CAAA;EAEN,KAAK,cACH,OACE,kBAAC,cAAD;GAAY,WAAU;GAAtB,UAAA,CACE,kBAAC5C,GAAD;IAAW,aAAY;IAAW,MAAK;GAAW,CAAA,GAClD,kBAAC,OAAD;IAAK,WAAU;IAAwD,UAAA6C,EAAQf,EAAwB,QAAQc,CAAG;GAAO,CAAA,CAC/G;;EAEhB,KAAK,MACH,OACE,kBAAAjD,GAAA,EAAA,UACE,kBAACK,GAAD,EAAW,WAAU,OAAQ,CAAA,EAC7B,CAAA;EAEN,KAAK,SAAS;GACZ,IAAMuD,IAAQzB,GACR0B,KAAS,MAAkCC,MAAM,UAAU,QAAQ;GACzE,OACE,kBAAA9D,GAAA,EAAA,UACE,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACQ,GAAD;KAAO,WAAWyC,EAAI,SAAS,UAAU,eAAe,KAAA;KAAxD,UAAA,CACE,kBAACzC,EAAM,MAAP,EAAA,UACE,kBAACA,EAAM,KAAP,EAAA,UACGoD,EAAM,OAAO,KAAK,GAAG,MACpB,kBAACpD,EAAM,YAAP;MAA0B,OAAOqD,EAAME,EAAE,KAAK;MAC3C,UAAA7B,EAAO6B,EAAE,MAAM;KACA,GAFKC,CAEL,CACnB,EACQ,CAAA,EACD,CAAA,GACZ,kBAACxD,EAAM,MAAP,EAAA,UACGoD,EAAM,KAAK,KAAK,GAAK,MACpB,kBAACpD,EAAM,KAAP,EAAA,UACGyD,EAAI,KAAK,GAAG,MACX,kBAACzD,EAAM,MAAP;MAAoB,OAAOqD,EAAME,EAAE,KAAK;MACrC,UAAA7B,EAAO6B,EAAE,MAAM;KACN,GAFKC,CAEL,CACb,EACQ,GANKE,CAML,CACZ,EACS,CAAA,CACP;;GACJ,CAAA,EACL,CAAA;EAEN;EACA,SACE,OACE,kBAACnB,GAAD;GAAM,IAAG;GAAI,SAASC,EAAKC,EAAI;GAAO,QAAO;GAAU,MAAK;GAAU,WAAWkB,EAAGhB,GAAO,qBAAqB;GAAhH,UAAA,CACGhB,EAAE,KACFkB,CACG;;CAEZ;AACF;AAEA,IAAMe,IAAwB,kBAC5B,SAAe,EAAE,UAAO,QAAK,YAAqD;CAChF,OAAO,kBAAApE,GAAA,EAAA,UAAGoD,EAAMiB,GAAOpB,GAAKU,CAAK,EAAI,CAAA;AACvC,IACC,GAAG,MACFG,EAAE,MAAM,QAAQQ,EAAE,MAAM,OACxBR,EAAE,UAAUQ,EAAE,SACdR,EAAE,IAAI,SAASQ,EAAE,IAAI,QACrBR,EAAE,IAAI,SAASQ,EAAE,IAAI,QACrBR,EAAE,IAAI,UAAUQ,EAAE,IAAI,SACtBR,EAAE,IAAI,aAAaQ,EAAE,IAAI,QAC7B;AAEA,SAASpB,EAAO,GAAiB,GAAU,IAAQ,IAAoB;CACrE,IAAIL,IAAOnB,EAAO,SAAS;CAC3B,OAAOmB,IAAO,KAAKnB,EAAOmB,EAAK,EAAE,SAAS,UAAS;CACnD,OAAOnB,EAAO,KAAK,GAAG,MAAM,kBAAC0C,GAAD;EAAe,OAAOjC;EAAU;EAAO,KAAK,MAAMU,KAAQ,CAACI,EAAI,WAAWA,IAAM;GAAE,GAAGA;GAAK,UAAU;EAAK;CAAI,GAAjG,CAAiG,CAAC;AAC5I;AAEA,IAAanC,IAA2B,kBAA0C,SAChF,EAAE,SAAM,UAAO,QAAQ,UAAO,WAAW,kBAAe,GAAG,mBAAgB,MAAQ,eAAY,IAAO,cAAW,IAAO,aAAU,gBAClI,GACA;CACA,IAAM,CAACyD,GAAKC,KAAUC,EAAS,EAAK,GAC9BtC,IAAIjC,EAAU,GACdwE,IAAO,CAACC,KAAaC,IAAgB,KAAKpD,EAAK,SAASoD,GACxDC,IAAQH,KAAQ,CAACH,IAAMtD,EAAgBO,GAAM,KAAK,MAAMoD,IAAgB,GAAI,CAAC,IAAIpD,GACjFE,IAASoD,QAAc;EAC3B,IAAMC,IAAMhE,EAAY8D,GAAO,EAAE,OAAO,CAACF,EAAU,CAAC,GAChDK,IAAMD,EAAI;EACd,IAAIF,MAAUrD,GAAM,OAAOwD,IAAM,KAAK;GAAC;GAAS;GAAW;EAAI,CAAC,CAAC,SAASD,EAAIC,IAAM,EAAE,EAAE,QAAQ,EAAE,IAAG;EACrG,OAAOD,EAAI,MAAM,GAAGC,CAAG;CACzB,GAAG;EAACH;EAAOrD;EAAMmD;CAAS,CAAC,GACrB1B,IAAM6B,SAAoB;EAAE;EAAM,MAAMG;EAAU,OAAOC;EAAc,UAAUC,KAAY;CAAK,IAAI;EAACC;EAAMH;EAAUC;EAAcC;CAAQ,CAAC;CACpJ,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWhB,EAAG,yBAAyBtD,EAAwB,KAAKuE,EAAK,CAAC,SAASvE,EAAwB,KAAKwE,EAAK,CAAC,SAASC,CAAS;EAAvJ,UAAA,CACGpC,EAAOxB,GAAQuB,CAAG,GAClByB,KAAQ,CAACH,KACR,kBAAC,OAAD,EAAA,UACE,kBAACjE,GAAD;GAAQ,MAAK;GAAK,SAAQ;GAAY,eAAekE,EAAO,EAAI;GAC7D,UAAArC,EAAE,8BAA8B,+BAA+B,EAAE,OAAOX,EAAK,OAAO,CAAC;EAChF,CAAA,EACL,CAAA,CAEJ;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
1
+ {"version":3,"file":"markdown-DBVNULWg.js","names":["_Fragment","__exportAll","useUiText","Link","Code","Separator","Button","CodeBlock","Table","safeHref","Fragment$1","markdown_exports","KAESO_MARKDOWN_DEFAULT_VARIANTS","KAESO_MARKDOWN_VARIANTS","Markdown","lexMarkdown","markdownCodeLang","previewMarkdown","lexer","tokenizer","Tokenizer","Lexer","cache","options","text","hit","tokens","limit","at","cut","space","lang","ExternalLink","title","inline","t","i","link","href","image","label","List","Tag","list","start","last","item","Text","TEXT","ctx","blocks","PROSE","block","tail","h","major","variant","level","x","tight","table","align","a","c","j","row","r","cn","Block","token","b","all","setAll","useState","long","streaming","collapseAfter","shown","useMemo","out","end","wrapCode","headingLevel","trailing","size","tone","className"],"sources":["../../src/components/markdown/markdown.tsx"],"sourcesContent":["import { forwardRef, memo, useMemo, useState, type ReactNode } from \"react\";\nimport { Lexer, Tokenizer, type Token, type Tokens } from \"marked\";\nimport { cn } from \"../../utils/cn.js\";\nimport { safeHref } from \"../../utils/safe-href.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { Button } from \"../button/button.js\";\nimport { Code } from \"../code/code.js\";\nimport { CodeBlock } from \"../code-block/code-block.js\";\nimport type { CodeLang } from \"../code-block/highlighter.js\";\nimport { Link } from \"../link/link.js\";\nimport { Separator } from \"../separator/separator.js\";\nimport { Table } from \"../table/table.js\";\nimport { Text } from \"../text/text.js\";\n\nexport { safeHref };\n\nexport const KAESO_MARKDOWN_VARIANTS = {\n size: {\n lg: { classes: \"gap-16\" },\n body: { classes: \"gap-12\" },\n small: { classes: \"gap-8\" },\n },\n tone: {\n default: { classes: \"text-fg\" },\n secondary: { classes: \"text-fg-secondary\" },\n },\n} as const;\nexport const KAESO_MARKDOWN_DEFAULT_VARIANTS = { size: \"body\", tone: \"default\" } as const;\n\nexport type MarkdownSize = keyof typeof KAESO_MARKDOWN_VARIANTS.size;\nexport type MarkdownTone = keyof typeof KAESO_MARKDOWN_VARIANTS.tone;\n\nexport interface MarkdownProps {\n text: string;\n size?: MarkdownSize | undefined;\n tone?: MarkdownTone | undefined;\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6 | undefined;\n collapseAfter?: number | undefined;\n streaming?: boolean | undefined;\n wrapCode?: boolean | undefined;\n trailing?: ReactNode | undefined;\n className?: string | undefined;\n}\n\ninterface Ctx {\n wrap: boolean;\n size: MarkdownSize;\n level: number;\n trailing: ReactNode;\n}\n\nfunction lexer() {\n const tokenizer = new Tokenizer();\n tokenizer.html = () => undefined;\n tokenizer.tag = () => undefined;\n tokenizer.def = () => undefined;\n return new Lexer({ gfm: true, breaks: true, tokenizer });\n}\n\nlet cache: Map<string, Token[]> | undefined;\n\nexport function lexMarkdown(text: string, options: { cache?: boolean | undefined } = {}): Token[] {\n if (options.cache === false) return lexer().lex(text);\n cache ??= new Map();\n const hit = cache.get(text);\n if (hit) return hit;\n const tokens = lexer().lex(text);\n if (cache.size >= 64) cache.delete(cache.keys().next().value ?? \"\");\n cache.set(text, tokens);\n return tokens;\n}\n\nexport function previewMarkdown(text: string, limit: number): string {\n if (text.length <= limit) return text;\n for (const at of [\"\\n\\n\", \"\\n\"]) {\n const cut = text.lastIndexOf(at, limit);\n if (cut > limit / 2) return text.slice(0, cut);\n }\n const space = text.lastIndexOf(\" \", limit);\n return `${text.slice(0, space > limit / 2 ? space : limit).trimEnd()}…`;\n}\n\nexport function markdownCodeLang(lang: string | undefined): CodeLang {\n const name = (lang ?? \"\").trim().split(/\\s/)[0]?.toLowerCase() ?? \"\";\n switch (name) {\n case \"ts\":\n case \"typescript\":\n return \"ts\";\n case \"tsx\":\n case \"jsx\":\n return \"tsx\";\n case \"js\":\n case \"javascript\":\n case \"mjs\":\n case \"cjs\":\n return \"js\";\n case \"json\":\n case \"jsonc\":\n case \"json5\":\n return \"json\";\n case \"bash\":\n case \"sh\":\n case \"shell\":\n case \"zsh\":\n case \"console\":\n return \"bash\";\n case \"python\":\n case \"py\":\n return \"python\";\n case \"yaml\":\n case \"yml\":\n return \"yaml\";\n case \"diff\":\n case \"patch\":\n return \"diff\";\n default:\n return \"text\";\n }\n}\n\nfunction ExternalLink({ href, title, children }: { href: string; title?: string | null | undefined; children: ReactNode }) {\n return (\n <Link href={href} external target=\"_blank\" rel=\"noopener noreferrer nofollow\" {...(title ? { title } : {})} className=\"max-w-full wrap-anywhere\">\n {children}\n </Link>\n );\n}\n\nfunction inline(tokens: Token[] | undefined): ReactNode[] {\n return (tokens ?? []).map((t, i) => {\n switch (t.type) {\n case \"text\":\n return \"tokens\" in t && t.tokens ? <span key={i}>{inline(t.tokens)}</span> : t.text;\n case \"escape\":\n return t.text;\n case \"strong\":\n return (\n <strong key={i} className=\"font-semibold\">\n {inline(t.tokens)}\n </strong>\n );\n case \"em\":\n return <em key={i}>{inline(t.tokens)}</em>;\n case \"del\":\n return <del key={i}>{inline(t.tokens)}</del>;\n case \"codespan\":\n return (\n <Code key={i} shape=\"rounded\" className=\"wrap-anywhere\">\n {t.text}\n </Code>\n );\n case \"br\":\n return <br key={i} />;\n case \"link\": {\n const link = t as Tokens.Link;\n const href = safeHref(link.href);\n return href ? (\n <ExternalLink key={i} href={href} title={link.title}>\n {inline(link.tokens)}\n </ExternalLink>\n ) : (\n <span key={i}>{inline(link.tokens)}</span>\n );\n }\n case \"image\": {\n const image = t as Tokens.Image;\n const href = safeHref(image.href);\n const label = image.text || image.href;\n return href ? (\n <ExternalLink key={i} href={href} title={image.title}>\n {label}\n </ExternalLink>\n ) : (\n label\n );\n }\n case \"checkbox\":\n return null;\n default:\n return t.raw;\n }\n });\n}\n\nfunction List({ list, ctx }: { list: Tokens.List; ctx: Ctx }) {\n const Tag = list.ordered ? \"ol\" : \"ul\";\n const start = typeof list.start === \"number\" ? list.start : 1;\n const last = list.items.length - 1;\n return (\n <Tag className=\"flex flex-col gap-4\">\n {list.items.map((item, i) => (\n <li key={i} className=\"flex gap-8\">\n {item.task ? (\n <Text as=\"span\" variant={TEXT[ctx.size]} weight=\"regular\" tone=\"tertiary\" mono className=\"shrink-0\">\n {item.checked ? \"[x]\" : \"[ ]\"}\n </Text>\n ) : (\n <Text\n as=\"span\"\n aria-hidden\n variant={TEXT[ctx.size]}\n weight=\"regular\"\n tone=\"tertiary\"\n tabular\n className={list.ordered ? \"min-w-16 shrink-0 text-right\" : \"w-8 shrink-0 text-center\"}\n >\n {list.ordered ? `${start + i}.` : \"•\"}\n </Text>\n )}\n <div className=\"flex min-w-0 flex-1 flex-col gap-4\">\n {blocks(\n item.tokens.filter((t) => t.type !== \"checkbox\"),\n i === last ? ctx : { ...ctx, trailing: null },\n !item.loose,\n )}\n </div>\n </li>\n ))}\n </Tag>\n );\n}\n\nconst PROSE = \"max-w-prose wrap-break-word\";\nconst TEXT = { lg: \"body-lg\", body: \"body\", small: \"small\" } as const;\n\nfunction block(t: Token, ctx: Ctx, tight: boolean): ReactNode {\n const tail = ctx.trailing;\n switch (t.type) {\n case \"space\":\n return null;\n case \"heading\": {\n const h = t as Tokens.Heading;\n const major = h.depth <= 2;\n const variant = ctx.size === \"lg\" ? (major ? \"title-sm\" : \"body-lg\") : ctx.size === \"body\" ? (major ? \"body-lg\" : \"body\") : major ? \"body\" : \"small\";\n const level = Math.min(6, h.depth + ctx.level - 1) as 1 | 2 | 3 | 4 | 5 | 6;\n return (\n <Text as={`h${level}`} variant={variant} weight=\"semibold\" tone=\"inherit\" className=\"mt-4 first:mt-0 wrap-break-word\">\n {inline(h.tokens)}\n {tail}\n </Text>\n );\n }\n case \"paragraph\":\n return (\n <Text as=\"p\" variant={TEXT[ctx.size]} weight=\"regular\" tone=\"inherit\" className={PROSE}>\n {inline((t as Tokens.Paragraph).tokens)}\n {tail}\n </Text>\n );\n case \"text\": {\n const x = t as Tokens.Text;\n return (\n <Text as={tight ? \"div\" : \"p\"} variant={TEXT[ctx.size]} weight=\"regular\" tone=\"inherit\" className={PROSE}>\n {x.tokens ? inline(x.tokens) : x.text}\n {tail}\n </Text>\n );\n }\n case \"list\":\n return <List list={t as Tokens.List} ctx={ctx} />;\n case \"code\":\n return (\n <>\n <CodeBlock code={(t as Tokens.Code).text} lang={markdownCodeLang((t as Tokens.Code).lang)} wrap={ctx.wrap} />\n </>\n );\n case \"blockquote\":\n return (\n <blockquote className=\"flex gap-12\">\n <Separator orientation=\"vertical\" tone=\"default\" />\n <div className=\"flex min-w-0 flex-1 flex-col gap-8 text-fg-secondary\">{blocks((t as Tokens.Blockquote).tokens, ctx)}</div>\n </blockquote>\n );\n case \"hr\":\n return (\n <>\n <Separator className=\"my-4\" />\n </>\n );\n case \"table\": {\n const table = t as Tokens.Table;\n const align = (a: Tokens.TableCell[\"align\"]) => (a === \"right\" ? \"end\" : \"start\");\n return (\n <>\n <div className=\"max-w-full overflow-x-auto scrollbar-quiet\">\n <Table className={ctx.size === \"small\" ? \"text-small\" : undefined}>\n <Table.Head>\n <Table.Row>\n {table.header.map((c, j) => (\n <Table.HeaderCell key={j} align={align(c.align)}>\n {inline(c.tokens)}\n </Table.HeaderCell>\n ))}\n </Table.Row>\n </Table.Head>\n <Table.Body>\n {table.rows.map((row, r) => (\n <Table.Row key={r}>\n {row.map((c, j) => (\n <Table.Cell key={j} align={align(c.align)}>\n {inline(c.tokens)}\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n </div>\n </>\n );\n }\n default:\n return (\n <Text as=\"p\" variant={TEXT[ctx.size]} weight=\"regular\" tone=\"inherit\" className={cn(PROSE, \"whitespace-pre-wrap\")}>\n {t.raw}\n {tail}\n </Text>\n );\n }\n}\n\nconst Block = /* @__PURE__ */ memo(\n function Block({ token, ctx, tight }: { token: Token; ctx: Ctx; tight: boolean }) {\n return <>{block(token, ctx, tight)}</>;\n },\n (a, b) =>\n a.token.raw === b.token.raw &&\n a.tight === b.tight &&\n a.ctx.size === b.ctx.size &&\n a.ctx.wrap === b.ctx.wrap &&\n a.ctx.level === b.ctx.level &&\n a.ctx.trailing === b.ctx.trailing,\n);\n\nfunction blocks(tokens: Token[], ctx: Ctx, tight = false): ReactNode[] {\n let last = tokens.length - 1;\n while (last > 0 && tokens[last]?.type === \"space\") last--;\n return tokens.map((t, i) => <Block key={i} token={t} tight={tight} ctx={i === last || !ctx.trailing ? ctx : { ...ctx, trailing: null }} />);\n}\n\nexport const Markdown = /* @__PURE__ */ forwardRef<HTMLDivElement, MarkdownProps>(function Markdown(\n { text, size = \"body\", tone = \"default\", headingLevel = 3, collapseAfter = 24_000, streaming = false, wrapCode = false, trailing, className },\n ref,\n) {\n const [all, setAll] = useState(false);\n const t = useUiText();\n const long = !streaming && collapseAfter > 0 && text.length > collapseAfter;\n const shown = long && !all ? previewMarkdown(text, Math.round(collapseAfter * 0.66)) : text;\n const tokens = useMemo(() => {\n const out = lexMarkdown(shown, { cache: !streaming });\n let end = out.length;\n if (shown !== text) while (end > 1 && [\"space\", \"heading\", \"hr\"].includes(out[end - 1]?.type ?? \"\")) end--;\n return out.slice(0, end);\n }, [shown, text, streaming]);\n const ctx = useMemo<Ctx>(() => ({ size, wrap: wrapCode, level: headingLevel, trailing: trailing ?? null }), [size, wrapCode, headingLevel, trailing]);\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-col\", KAESO_MARKDOWN_VARIANTS.size[size].classes, KAESO_MARKDOWN_VARIANTS.tone[tone].classes, className)}>\n {blocks(tokens, ctx)}\n {long && !all && (\n <div>\n <Button size=\"sm\" variant=\"secondary\" onClick={() => setAll(true)}>\n {t(\"markdown.showAllCharacters\", \"Show all {count} characters\", { count: text.length })}\n </Button>\n </div>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Markdown.displayName = \"Markdown\";\n"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  import { l as e } from "./styles-CVJU9t9v.js";
3
3
  import { r as t } from "./portal-context-BBbzDKmY.js";
4
4
  import { i as n } from "./context-BELWW79w.js";
5
- import { c as r, s as i } from "./sidebar-Dey1ZfGt.js";
5
+ import { c as r, s as i } from "./sidebar-ZSTPK9Jn.js";
6
6
  import { useEffect as a, useMemo as o, useRef as s } from "react";
7
7
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
8
  import { Dialog as u } from "@base-ui/react/dialog";
@@ -57,4 +57,4 @@ process.env.NODE_ENV !== "production" && (f.displayName = "NavSheet");
57
57
  //#endregion
58
58
  export { d as n, f as t };
59
59
 
60
- //# sourceMappingURL=nav-sheet-QqNRHo-y.js.map
60
+ //# sourceMappingURL=nav-sheet-D7wIF_OU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav-sheet-QqNRHo-y.js","names":["__exportAll","usePortalContainer","useUiText","SidebarSheetContext","SidebarFloatingContext","nav_sheet_exports","NavSheet","leave","useRef","t","sheet","useMemo","onOpenChange","peek","useEffect","open","wide","onChange","Dialog","o","returnFocus"],"sources":["../../src/components/app-frame/nav-sheet.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, type ReactNode, type RefObject } from \"react\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { SidebarFloatingContext, SidebarSheetContext } from \"../sidebar/sidebar.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport function NavSheet({\n open,\n onOpenChange,\n peek = false,\n returnFocus,\n children,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n peek?: boolean | undefined;\n returnFocus?: RefObject<HTMLElement | null> | undefined;\n children: ReactNode;\n}) {\n const leave = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const t = useUiText();\n useEffect(() => () => clearTimeout(leave.current), []);\n const sheet = useMemo(() => ({ close: () => onOpenChange(false), peek }), [onOpenChange, peek]);\n useEffect(() => {\n if (!open || peek || typeof window === \"undefined\") return;\n const wide = window.matchMedia(\"(min-width: 1024px)\");\n const onChange = () => wide.matches && onOpenChange(false);\n onChange();\n wide.addEventListener(\"change\", onChange);\n return () => wide.removeEventListener(\"change\", onChange);\n }, [open, peek, onOpenChange]);\n return (\n <Dialog.Root open={open} onOpenChange={(o: boolean) => onOpenChange(o)} modal={!peek}>\n <Dialog.Portal container={usePortalContainer()}>\n <Dialog.Backdrop className=\"fixed inset-0 z-40 bg-overlay opacity-60 backdrop-motion\" />\n <Dialog.Popup\n aria-label={t(\"appFrame.navigation\", \"Navigation\")}\n data-side=\"left\"\n initialFocus={!peek}\n {...(returnFocus ? { finalFocus: returnFocus } : {})}\n className=\"fixed top-0 bottom-0 left-0 z-40 flex overflow-hidden rounded-r-sheet bg-chrome shadow-dialog outline-none safe-area-sheet sheet-motion\"\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"a[href]\")) onOpenChange(false);\n }}\n onPointerEnter={() => clearTimeout(leave.current)}\n onPointerLeave={() => {\n if (!peek) return;\n leave.current = setTimeout(() => onOpenChange(false), 160);\n }}\n >\n <SidebarFloatingContext.Provider value>\n <SidebarSheetContext.Provider value={sheet}>{children}</SidebarSheetContext.Provider>\n </SidebarFloatingContext.Provider>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") NavSheet.displayName = \"NavSheet\";\n"],"mappings":";;;;;;;;;;AAMA,SAAgBM,EAAS,EACvB,SACA,iBACA,UAAO,IACP,gBACA,eAOC;CACD,IAAMC,IAAQC,EAAkD,KAAA,CAAS,GACnEC,IAAIP,EAAU;CACpB,cAAsB,aAAaK,EAAM,OAAO,GAAG,CAAC,CAAC;CACrD,IAAMG,IAAQC,SAAe;EAAE,aAAaC,EAAa,EAAK;EAAG;CAAK,IAAI,CAACA,GAAcC,CAAI,CAAC;CAS9F,OARAC,QAAgB;EACd,IAAI,CAACC,KAAQF,KAAQ,OAAO,SAAW,KAAa;EACpD,IAAMG,IAAO,OAAO,WAAW,qBAAqB,GAC9CC,UAAiBD,EAAK,WAAWJ,EAAa,EAAK;EAGzD,OAFAK,EAAS,GACTD,EAAK,iBAAiB,UAAUC,CAAQ,SAC3BD,EAAK,oBAAoB,UAAUC,CAAQ;CAC1D,GAAG;EAACF;EAAMF;EAAMD;CAAY,CAAC,GAE3B,kBAACM,EAAO,MAAR;EAAmB;EAAM,eAAe,MAAeN,EAAaO,CAAC;EAAG,OAAO,CAACN;EAC9E,UAAA,kBAACK,EAAO,QAAR;GAAe,WAAWjB,EAAmB;GAA7C,UAAA,CACE,kBAACiB,EAAO,UAAR,EAAiB,WAAU,2DAA4D,CAAA,GACvF,kBAACA,EAAO,OAAR;IACE,cAAYT,EAAE,uBAAuB,YAAY;IACjD,aAAU;IACV,cAAc,CAACI;IACf,GAAKO,IAAc,EAAE,YAAYA,EAAY,IAAI,CAAC;IAClD,WAAU;IACV,UAAU,MAAM;KACd,AAAK,EAAE,OAAuB,QAAQ,SAAS,KAAGR,EAAa,EAAK;IACtE;IACA,sBAAsB,aAAaL,EAAM,OAAO;IAChD,sBAAsB;KACpB,AAAKM,MACL,EAAM,UAAU,iBAAiBD,EAAa,EAAK,GAAG,GAAG;IAC3D;IAEA,UAAA,kBAACR,EAAuB,UAAxB;KAAiC,OAAA;KAC/B,UAAA,kBAACD,EAAoB,UAArB;MAA8B,OAAOO;MAAQ;KAAuC,CAAA;IACrD,CAAA;GACrB,CAAA,CACD;;CACJ,CAAA;AAEjB;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
1
+ {"version":3,"file":"nav-sheet-D7wIF_OU.js","names":["__exportAll","usePortalContainer","useUiText","SidebarSheetContext","SidebarFloatingContext","nav_sheet_exports","NavSheet","leave","useRef","t","sheet","useMemo","onOpenChange","peek","useEffect","open","wide","onChange","Dialog","o","returnFocus"],"sources":["../../src/components/app-frame/nav-sheet.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, type ReactNode, type RefObject } from \"react\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { SidebarFloatingContext, SidebarSheetContext } from \"../sidebar/sidebar.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport function NavSheet({\n open,\n onOpenChange,\n peek = false,\n returnFocus,\n children,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n peek?: boolean | undefined;\n returnFocus?: RefObject<HTMLElement | null> | undefined;\n children: ReactNode;\n}) {\n const leave = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const t = useUiText();\n useEffect(() => () => clearTimeout(leave.current), []);\n const sheet = useMemo(() => ({ close: () => onOpenChange(false), peek }), [onOpenChange, peek]);\n useEffect(() => {\n if (!open || peek || typeof window === \"undefined\") return;\n const wide = window.matchMedia(\"(min-width: 1024px)\");\n const onChange = () => wide.matches && onOpenChange(false);\n onChange();\n wide.addEventListener(\"change\", onChange);\n return () => wide.removeEventListener(\"change\", onChange);\n }, [open, peek, onOpenChange]);\n return (\n <Dialog.Root open={open} onOpenChange={(o: boolean) => onOpenChange(o)} modal={!peek}>\n <Dialog.Portal container={usePortalContainer()}>\n <Dialog.Backdrop className=\"fixed inset-0 z-40 bg-overlay opacity-60 backdrop-motion\" />\n <Dialog.Popup\n aria-label={t(\"appFrame.navigation\", \"Navigation\")}\n data-side=\"left\"\n initialFocus={!peek}\n {...(returnFocus ? { finalFocus: returnFocus } : {})}\n className=\"fixed top-0 bottom-0 left-0 z-40 flex overflow-hidden rounded-r-sheet bg-chrome shadow-dialog outline-none safe-area-sheet sheet-motion\"\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"a[href]\")) onOpenChange(false);\n }}\n onPointerEnter={() => clearTimeout(leave.current)}\n onPointerLeave={() => {\n if (!peek) return;\n leave.current = setTimeout(() => onOpenChange(false), 160);\n }}\n >\n <SidebarFloatingContext.Provider value>\n <SidebarSheetContext.Provider value={sheet}>{children}</SidebarSheetContext.Provider>\n </SidebarFloatingContext.Provider>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") NavSheet.displayName = \"NavSheet\";\n"],"mappings":";;;;;;;;;;AAMA,SAAgBM,EAAS,EACvB,SACA,iBACA,UAAO,IACP,gBACA,eAOC;CACD,IAAMC,IAAQC,EAAkD,KAAA,CAAS,GACnEC,IAAIP,EAAU;CACpB,cAAsB,aAAaK,EAAM,OAAO,GAAG,CAAC,CAAC;CACrD,IAAMG,IAAQC,SAAe;EAAE,aAAaC,EAAa,EAAK;EAAG;CAAK,IAAI,CAACA,GAAcC,CAAI,CAAC;CAS9F,OARAC,QAAgB;EACd,IAAI,CAACC,KAAQF,KAAQ,OAAO,SAAW,KAAa;EACpD,IAAMG,IAAO,OAAO,WAAW,qBAAqB,GAC9CC,UAAiBD,EAAK,WAAWJ,EAAa,EAAK;EAGzD,OAFAK,EAAS,GACTD,EAAK,iBAAiB,UAAUC,CAAQ,SAC3BD,EAAK,oBAAoB,UAAUC,CAAQ;CAC1D,GAAG;EAACF;EAAMF;EAAMD;CAAY,CAAC,GAE3B,kBAACM,EAAO,MAAR;EAAmB;EAAM,eAAe,MAAeN,EAAaO,CAAC;EAAG,OAAO,CAACN;EAC9E,UAAA,kBAACK,EAAO,QAAR;GAAe,WAAWjB,EAAmB;GAA7C,UAAA,CACE,kBAACiB,EAAO,UAAR,EAAiB,WAAU,2DAA4D,CAAA,GACvF,kBAACA,EAAO,OAAR;IACE,cAAYT,EAAE,uBAAuB,YAAY;IACjD,aAAU;IACV,cAAc,CAACI;IACf,GAAKO,IAAc,EAAE,YAAYA,EAAY,IAAI,CAAC;IAClD,WAAU;IACV,UAAU,MAAM;KACd,AAAK,EAAE,OAAuB,QAAQ,SAAS,KAAGR,EAAa,EAAK;IACtE;IACA,sBAAsB,aAAaL,EAAM,OAAO;IAChD,sBAAsB;KACpB,AAAKM,MACL,EAAM,UAAU,iBAAiBD,EAAa,EAAK,GAAG,GAAG;IAC3D;IAEA,UAAA,kBAACR,EAAuB,UAAxB;KAAiC,OAAA;KAC/B,UAAA,kBAACD,EAAoB,UAArB;MAA8B,OAAOO;MAAQ;KAAuC,CAAA;IACrD,CAAA;GACrB,CAAA,CACD;;CACJ,CAAA;AAEjB;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { t as e } from "./cn-DUDmdLpZ.js";
3
3
  import { t } from "./icon-BqujXDUc.js";
4
- import { s as n } from "./app-frame-B9vrgwaE.js";
4
+ import { s as n } from "./app-frame-Cj_gCbmu.js";
5
5
  import { forwardRef as r } from "react";
6
6
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
7
  //#region src/components/page-header/page-header.tsx
@@ -38,4 +38,4 @@ process.env.NODE_ENV !== "production" && (c.displayName = "PageHeader");
38
38
  //#endregion
39
39
  export { o as n, c as r, s as t };
40
40
 
41
- //# sourceMappingURL=page-header-Ccnrspbp.js.map
41
+ //# sourceMappingURL=page-header-B3tV8Wog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-Ccnrspbp.js","names":["cn","useAppFrame","KAESO_PAGE_HEADER_VARIANTS","KAESO_PAGE_HEADER_DEFAULT_VARIANTS","PageHeader","Heading","className","start","title","icon","Icon","tabs","actions"],"sources":["../../src/components/page-header/page-header.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { useAppFrame } from \"../app-frame/app-frame.js\";\n\nexport const KAESO_PAGE_HEADER_VARIANTS = {\n size: {\n md: {\n classes: \"min-h-52 flex-wrap gap-x-12 gap-y-8 px-24 py-10 sm:h-52 sm:flex-nowrap sm:py-0\",\n },\n },\n} as const;\nexport const KAESO_PAGE_HEADER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface PageHeaderProps {\n title?: ReactNode | undefined;\n icon?: IconData | undefined;\n tabs?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n start?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nexport const PageHeader = /* @__PURE__ */ forwardRef<HTMLElement, PageHeaderProps>(function PageHeader({ title, icon, tabs, actions, start, className }, ref) {\n const Heading = useAppFrame().embedded ? \"h2\" : \"h1\";\n return (\n <header ref={ref} className={cn(\"flex shrink-0 items-center\", KAESO_PAGE_HEADER_VARIANTS.size.md.classes, className)}>\n {start}\n {title && (\n <Heading className=\"flex min-w-0 items-center gap-8 text-body-lg font-semibold text-fg\">\n {icon && <Icon icon={icon} size=\"sm\" className=\"text-fg-secondary\" />}\n <span className=\"truncate\">{title}</span>\n </Heading>\n )}\n {tabs && <div className=\"order-last min-w-0 basis-full sm:order-none sm:ml-8 sm:basis-auto\">{tabs}</div>}\n <div className=\"ml-auto flex shrink-0 items-center gap-8\">{actions}</div>\n </header>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PageHeader.displayName = \"PageHeader\";\n"],"mappings":";;;;;;;AAKA,IAAaE,IAA6B,EACxC,MAAM,EACJ,IAAI,EACF,SAAS,iFACX,EACF,EACF,GACaC,IAAqC,EAAE,MAAM,KAAK,GAWlDC,IAA6B,kBAAyC,SAAoB,EAAE,UAAO,SAAM,SAAM,YAAS,UAAO,gBAAa,GAAK;CAC5J,IAAMC,IAAUJ,EAAY,CAAC,CAAC,WAAW,OAAO;CAChD,OACE,kBAAC,UAAD;EAAa;EAAK,WAAWD,EAAG,8BAA8BE,EAA2B,KAAK,GAAG,SAASI,CAAS;EAAnH,UAAA;GACGC;GACAC,KACC,kBAACH,GAAD;IAAS,WAAU;IAAnB,UAAA,CACGI,KAAQ,kBAACC,GAAD;KAAY;KAAM,MAAK;KAAK,WAAU;IAAqB,CAAA,GACpE,kBAAC,QAAD;KAAM,WAAU;KAAY,UAAAF;IAAY,CAAA,CACjC;;GAEVG,KAAQ,kBAAC,OAAD;IAAK,WAAU;IAAqE,UAAAA;GAAU,CAAA;GACvG,kBAAC,OAAD;IAAK,WAAU;IAA4C,UAAAC;GAAa,CAAA;EAClE;;AAEZ,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}
1
+ {"version":3,"file":"page-header-B3tV8Wog.js","names":["cn","useAppFrame","KAESO_PAGE_HEADER_VARIANTS","KAESO_PAGE_HEADER_DEFAULT_VARIANTS","PageHeader","Heading","className","start","title","icon","Icon","tabs","actions"],"sources":["../../src/components/page-header/page-header.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { useAppFrame } from \"../app-frame/app-frame.js\";\n\nexport const KAESO_PAGE_HEADER_VARIANTS = {\n size: {\n md: {\n classes: \"min-h-52 flex-wrap gap-x-12 gap-y-8 px-24 py-10 sm:h-52 sm:flex-nowrap sm:py-0\",\n },\n },\n} as const;\nexport const KAESO_PAGE_HEADER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface PageHeaderProps {\n title?: ReactNode | undefined;\n icon?: IconData | undefined;\n tabs?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n start?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nexport const PageHeader = /* @__PURE__ */ forwardRef<HTMLElement, PageHeaderProps>(function PageHeader({ title, icon, tabs, actions, start, className }, ref) {\n const Heading = useAppFrame().embedded ? \"h2\" : \"h1\";\n return (\n <header ref={ref} className={cn(\"flex shrink-0 items-center\", KAESO_PAGE_HEADER_VARIANTS.size.md.classes, className)}>\n {start}\n {title && (\n <Heading className=\"flex min-w-0 items-center gap-8 text-body-lg font-semibold text-fg\">\n {icon && <Icon icon={icon} size=\"sm\" className=\"text-fg-secondary\" />}\n <span className=\"truncate\">{title}</span>\n </Heading>\n )}\n {tabs && <div className=\"order-last min-w-0 basis-full sm:order-none sm:ml-8 sm:basis-auto\">{tabs}</div>}\n <div className=\"ml-auto flex shrink-0 items-center gap-8\">{actions}</div>\n </header>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PageHeader.displayName = \"PageHeader\";\n"],"mappings":";;;;;;;AAKA,IAAaE,IAA6B,EACxC,MAAM,EACJ,IAAI,EACF,SAAS,iFACX,EACF,EACF,GACaC,IAAqC,EAAE,MAAM,KAAK,GAWlDC,IAA6B,kBAAyC,SAAoB,EAAE,UAAO,SAAM,SAAM,YAAS,UAAO,gBAAa,GAAK;CAC5J,IAAMC,IAAUJ,EAAY,CAAC,CAAC,WAAW,OAAO;CAChD,OACE,kBAAC,UAAD;EAAa;EAAK,WAAWD,EAAG,8BAA8BE,EAA2B,KAAK,GAAG,SAASI,CAAS;EAAnH,UAAA;GACGC;GACAC,KACC,kBAACH,GAAD;IAAS,WAAU;IAAnB,UAAA,CACGI,KAAQ,kBAACC,GAAD;KAAY;KAAM,MAAK;KAAK,WAAU;IAAqB,CAAA,GACpE,kBAAC,QAAD;KAAM,WAAU;KAAY,UAAAF;IAAY,CAAA,CACjC;;GAEVG,KAAQ,kBAAC,OAAD;IAAK,WAAU;IAAqE,UAAAA;GAAU,CAAA;GACvG,kBAAC,OAAD;IAAK,WAAU;IAA4C,UAAAC;GAAa,CAAA;EAClE;;AAEZ,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { t as e } from "./cn-DUDmdLpZ.js";
3
3
  import { i as t } from "./context-BELWW79w.js";
4
- import { n } from "./button-CAPyW-v8.js";
5
- import { t as r } from "./icon-button-D4O4puwH.js";
4
+ import { n } from "./button-h2IFCER2.js";
5
+ import { t as r } from "./icon-button-DmKFxQbP.js";
6
6
  import { forwardRef as i } from "react";
7
7
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
8
8
  import { ArrowLeft01Icon as s, ArrowRight01Icon as c } from "@hugeicons/core-free-icons";
@@ -83,4 +83,4 @@ process.env.NODE_ENV !== "production" && (d.displayName = "Pagination");
83
83
  //#endregion
84
84
  export { l as n, d as r, u as t };
85
85
 
86
- //# sourceMappingURL=pagination-CEmWZNjp.js.map
86
+ //# sourceMappingURL=pagination-CLfsofo3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagination-CEmWZNjp.js","names":["__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","cn","useUiText","IconButton","KAESO_PAGINATION_VARIANTS","KAESO_PAGINATION_DEFAULT_VARIANTS","Pagination","t","label","previous","next","loadMore","variant","hasMore","className","Button","onLoadMore","ArrowLeft01Icon","hasPrevious","onPrevious","ArrowRight01Icon","onNext","pages","pageCount","i","p","page","onPageChange"],"sources":["../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PAGINATION_VARIANTS = {\n variant: {\n \"load-more\": { classes: \"\" },\n cursor: { classes: \"\" },\n pages: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PAGINATION_DEFAULT_VARIANTS = { variant: \"load-more\" } as const;\n\nexport interface PaginationProps {\n variant?: keyof typeof KAESO_PAGINATION_VARIANTS.variant | undefined;\n hasMore?: boolean | undefined;\n hasPrevious?: boolean | undefined;\n loading?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n onNext?: (() => void) | undefined;\n onPrevious?: (() => void) | undefined;\n page?: number | undefined;\n pageCount?: number | undefined;\n onPageChange?: ((page: number) => void) | undefined;\n className?: string | undefined;\n}\n\nexport const Pagination = /* @__PURE__ */ forwardRef<HTMLElement, PaginationProps>(function Pagination(\n { variant = \"load-more\", hasMore, hasPrevious, loading, onLoadMore, onNext, onPrevious, page = 1, pageCount = 1, onPageChange, className },\n ref,\n) {\n const t = useUiText();\n const label = t(\"pagination.label\", \"Pagination\");\n const previous = t(\"pagination.previous\", \"Previous page\");\n const next = t(\"pagination.next\", \"Next page\");\n const loadMore = t(\"pagination.loadMore\", \"Load more\");\n\n if (variant === \"load-more\") {\n if (!hasMore) return null;\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center justify-center gap-12 py-12\", className)}>\n <Button variant=\"ghost\" size=\"sm\" loading={loading} onClick={onLoadMore} reserveLabels={[loadMore]}>\n {loadMore}\n </Button>\n </nav>\n );\n }\n if (variant === \"cursor\") {\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-8\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" disabled={!hasPrevious} onClick={onPrevious} />\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" disabled={!hasMore} onClick={onNext} />\n </nav>\n );\n }\n const pages = Array.from({ length: pageCount }, (_, i) => i + 1).filter((p) => p === 1 || p === pageCount || Math.abs(p - page) <= 1);\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-4\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} disabled={page <= 1} onClick={() => onPageChange?.(page - 1)} />\n {pages.map((p, i) => (\n <span key={p} className=\"flex items-center gap-4\">\n {i > 0 && p - (pages[i - 1] ?? p) > 1 && <span className=\"w-24 text-center text-fg-tertiary\">…</span>}\n <button\n type=\"button\"\n aria-current={p === page ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {page}\", { page: String(p) })}\n onClick={() => onPageChange?.(p)}\n className={cn(\n \"inline-flex h-32 min-w-32 cursor-pointer items-center justify-center rounded-pill px-8 text-body font-medium tabular transition-control focus-ring\",\n p === page ? \"bg-fill-2 text-fg\" : \"text-fg-secondary hover:bg-fill-1 hover:text-fg\",\n )}\n >\n {p}\n </button>\n </span>\n ))}\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} disabled={page >= pageCount} onClick={() => onPageChange?.(page + 1)} />\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Pagination.displayName = \"Pagination\";\n"],"mappings":";;;;;;;;;AAOA,IAAaK,IAA4B,EACvC,SAAS;CACP,aAAa,EAAE,SAAS,GAAG;CAC3B,QAAQ,EAAE,SAAS,GAAG;CACtB,OAAO,EAAE,SAAS,GAAG;AACvB,EACF,GACaC,IAAoC,EAAE,SAAS,YAAY,GAgB3DC,IAA6B,kBAAyC,SACjF,EAAE,aAAU,aAAa,YAAS,gBAAa,YAAS,eAAY,WAAQ,eAAY,UAAO,GAAG,eAAY,GAAG,iBAAc,gBAC/H,GACA;CACA,IAAMC,IAAIL,EAAU,GACdM,IAAQD,EAAE,oBAAoB,YAAY,GAC1CE,IAAWF,EAAE,uBAAuB,eAAe,GACnDG,IAAOH,EAAE,mBAAmB,WAAW,GACvCI,IAAWJ,EAAE,uBAAuB,WAAW;CAErD,IAAIK,MAAY,aAEd,OADKC,IAEH,kBAAC,OAAD;EAAU;EAAK,cAAYL;EAAO,WAAWP,EAAG,iDAAiDa,CAAS;EACxG,UAAA,kBAACC,GAAD;GAAQ,SAAQ;GAAQ,MAAK;GAAc;GAAS,SAASC;GAAY,eAAe,CAACL,CAAQ;GAC9F,UAAAA;EACK,CAAA;CACL,CAAA,IANc;CASvB,IAAIC,MAAY,UACd,OACE,kBAAC,OAAD;EAAU;EAAK,cAAYJ;EAAO,WAAWP,EAAG,2BAA2Ba,CAAS;EAApF,UAAA,CACE,kBAACX,GAAD;GAAY,MAAMJ;GAAwB,cAAYU;GAAU,SAAQ;GAAY,UAAU,CAACS;GAAa,SAASC;EAAa,CAAA,GAClI,kBAAChB,GAAD;GAAY,MAAMH;GAAyB,cAAYU;GAAM,SAAQ;GAAY,UAAU,CAACG;GAAS,SAASQ;EAAS,CAAA,CACpH;;CAGT,IAAMC,IAAQ,MAAM,KAAK,EAAE,QAAQC,EAAU,IAAI,GAAG,MAAMC,IAAI,CAAC,CAAC,CAAC,QAAQ,MAAMC,MAAM,KAAKA,MAAMF,KAAa,KAAK,IAAIE,IAAIC,CAAI,KAAK,CAAC;CACpI,OACE,kBAAC,OAAD;EAAU;EAAK,cAAYlB;EAAO,WAAWP,EAAG,2BAA2Ba,CAAS;EAApF,UAAA;GACE,kBAACX,GAAD;IAAY,MAAMJ;IAAwB,cAAYU;IAAU,UAAUiB,KAAQ;IAAG,eAAeC,IAAeD,IAAO,CAAC;GAAI,CAAA;GAC9HJ,EAAM,KAAK,GAAG,MACb,kBAAC,QAAD;IAAc,WAAU;IAAxB,UAAA,CACGE,IAAI,KAAKC,KAAKH,EAAME,IAAI,MAAMC,KAAK,KAAK,kBAAC,QAAD;KAAM,WAAU;KAAoC,UAAA;IAAO,CAAA,GACpG,kBAAC,UAAD;KACE,MAAK;KACL,gBAAcA,MAAMC,IAAO,SAAS,KAAA;KACpC,cAAYnB,EAAE,mBAAmB,eAAe,EAAE,MAAM,OAAOkB,CAAC,EAAE,CAAC;KACnE,eAAeE,IAAeF,CAAC;KAC/B,WAAWxB,EACT,sJACAwB,MAAMC,IAAO,sBAAsB,iDACrC;KAEC,UAAAD;IACK,CAAA,CACJ;GAdK,GAAAA,CAcL,CACP;GACD,kBAACtB,GAAD;IAAY,MAAMH;IAAyB,cAAYU;IAAM,UAAUgB,KAAQH;IAAW,eAAeI,IAAeD,IAAO,CAAC;GAAI,CAAA;EACjI;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}
1
+ {"version":3,"file":"pagination-CLfsofo3.js","names":["__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","cn","useUiText","IconButton","KAESO_PAGINATION_VARIANTS","KAESO_PAGINATION_DEFAULT_VARIANTS","Pagination","t","label","previous","next","loadMore","variant","hasMore","className","Button","onLoadMore","ArrowLeft01Icon","hasPrevious","onPrevious","ArrowRight01Icon","onNext","pages","pageCount","i","p","page","onPageChange"],"sources":["../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PAGINATION_VARIANTS = {\n variant: {\n \"load-more\": { classes: \"\" },\n cursor: { classes: \"\" },\n pages: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PAGINATION_DEFAULT_VARIANTS = { variant: \"load-more\" } as const;\n\nexport interface PaginationProps {\n variant?: keyof typeof KAESO_PAGINATION_VARIANTS.variant | undefined;\n hasMore?: boolean | undefined;\n hasPrevious?: boolean | undefined;\n loading?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n onNext?: (() => void) | undefined;\n onPrevious?: (() => void) | undefined;\n page?: number | undefined;\n pageCount?: number | undefined;\n onPageChange?: ((page: number) => void) | undefined;\n className?: string | undefined;\n}\n\nexport const Pagination = /* @__PURE__ */ forwardRef<HTMLElement, PaginationProps>(function Pagination(\n { variant = \"load-more\", hasMore, hasPrevious, loading, onLoadMore, onNext, onPrevious, page = 1, pageCount = 1, onPageChange, className },\n ref,\n) {\n const t = useUiText();\n const label = t(\"pagination.label\", \"Pagination\");\n const previous = t(\"pagination.previous\", \"Previous page\");\n const next = t(\"pagination.next\", \"Next page\");\n const loadMore = t(\"pagination.loadMore\", \"Load more\");\n\n if (variant === \"load-more\") {\n if (!hasMore) return null;\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center justify-center gap-12 py-12\", className)}>\n <Button variant=\"ghost\" size=\"sm\" loading={loading} onClick={onLoadMore} reserveLabels={[loadMore]}>\n {loadMore}\n </Button>\n </nav>\n );\n }\n if (variant === \"cursor\") {\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-8\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" disabled={!hasPrevious} onClick={onPrevious} />\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" disabled={!hasMore} onClick={onNext} />\n </nav>\n );\n }\n const pages = Array.from({ length: pageCount }, (_, i) => i + 1).filter((p) => p === 1 || p === pageCount || Math.abs(p - page) <= 1);\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-4\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} disabled={page <= 1} onClick={() => onPageChange?.(page - 1)} />\n {pages.map((p, i) => (\n <span key={p} className=\"flex items-center gap-4\">\n {i > 0 && p - (pages[i - 1] ?? p) > 1 && <span className=\"w-24 text-center text-fg-tertiary\">…</span>}\n <button\n type=\"button\"\n aria-current={p === page ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {page}\", { page: String(p) })}\n onClick={() => onPageChange?.(p)}\n className={cn(\n \"inline-flex h-32 min-w-32 cursor-pointer items-center justify-center rounded-pill px-8 text-body font-medium tabular transition-control focus-ring\",\n p === page ? \"bg-fill-2 text-fg\" : \"text-fg-secondary hover:bg-fill-1 hover:text-fg\",\n )}\n >\n {p}\n </button>\n </span>\n ))}\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} disabled={page >= pageCount} onClick={() => onPageChange?.(page + 1)} />\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Pagination.displayName = \"Pagination\";\n"],"mappings":";;;;;;;;;AAOA,IAAaK,IAA4B,EACvC,SAAS;CACP,aAAa,EAAE,SAAS,GAAG;CAC3B,QAAQ,EAAE,SAAS,GAAG;CACtB,OAAO,EAAE,SAAS,GAAG;AACvB,EACF,GACaC,IAAoC,EAAE,SAAS,YAAY,GAgB3DC,IAA6B,kBAAyC,SACjF,EAAE,aAAU,aAAa,YAAS,gBAAa,YAAS,eAAY,WAAQ,eAAY,UAAO,GAAG,eAAY,GAAG,iBAAc,gBAC/H,GACA;CACA,IAAMC,IAAIL,EAAU,GACdM,IAAQD,EAAE,oBAAoB,YAAY,GAC1CE,IAAWF,EAAE,uBAAuB,eAAe,GACnDG,IAAOH,EAAE,mBAAmB,WAAW,GACvCI,IAAWJ,EAAE,uBAAuB,WAAW;CAErD,IAAIK,MAAY,aAEd,OADKC,IAEH,kBAAC,OAAD;EAAU;EAAK,cAAYL;EAAO,WAAWP,EAAG,iDAAiDa,CAAS;EACxG,UAAA,kBAACC,GAAD;GAAQ,SAAQ;GAAQ,MAAK;GAAc;GAAS,SAASC;GAAY,eAAe,CAACL,CAAQ;GAC9F,UAAAA;EACK,CAAA;CACL,CAAA,IANc;CASvB,IAAIC,MAAY,UACd,OACE,kBAAC,OAAD;EAAU;EAAK,cAAYJ;EAAO,WAAWP,EAAG,2BAA2Ba,CAAS;EAApF,UAAA,CACE,kBAACX,GAAD;GAAY,MAAMJ;GAAwB,cAAYU;GAAU,SAAQ;GAAY,UAAU,CAACS;GAAa,SAASC;EAAa,CAAA,GAClI,kBAAChB,GAAD;GAAY,MAAMH;GAAyB,cAAYU;GAAM,SAAQ;GAAY,UAAU,CAACG;GAAS,SAASQ;EAAS,CAAA,CACpH;;CAGT,IAAMC,IAAQ,MAAM,KAAK,EAAE,QAAQC,EAAU,IAAI,GAAG,MAAMC,IAAI,CAAC,CAAC,CAAC,QAAQ,MAAMC,MAAM,KAAKA,MAAMF,KAAa,KAAK,IAAIE,IAAIC,CAAI,KAAK,CAAC;CACpI,OACE,kBAAC,OAAD;EAAU;EAAK,cAAYlB;EAAO,WAAWP,EAAG,2BAA2Ba,CAAS;EAApF,UAAA;GACE,kBAACX,GAAD;IAAY,MAAMJ;IAAwB,cAAYU;IAAU,UAAUiB,KAAQ;IAAG,eAAeC,IAAeD,IAAO,CAAC;GAAI,CAAA;GAC9HJ,EAAM,KAAK,GAAG,MACb,kBAAC,QAAD;IAAc,WAAU;IAAxB,UAAA,CACGE,IAAI,KAAKC,KAAKH,EAAME,IAAI,MAAMC,KAAK,KAAK,kBAAC,QAAD;KAAM,WAAU;KAAoC,UAAA;IAAO,CAAA,GACpG,kBAAC,UAAD;KACE,MAAK;KACL,gBAAcA,MAAMC,IAAO,SAAS,KAAA;KACpC,cAAYnB,EAAE,mBAAmB,eAAe,EAAE,MAAM,OAAOkB,CAAC,EAAE,CAAC;KACnE,eAAeE,IAAeF,CAAC;KAC/B,WAAWxB,EACT,sJACAwB,MAAMC,IAAO,sBAAsB,iDACrC;KAEC,UAAAD;IACK,CAAA,CACJ;GAdK,GAAAA,CAcL,CACP;GACD,kBAACtB,GAAD;IAAY,MAAMH;IAAyB,cAAYU;IAAM,UAAUgB,KAAQH;IAAW,eAAeI,IAAeD,IAAO,CAAC;GAAI,CAAA;EACjI;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc"}