@logicplanes/kaeso-ui 0.4.7 → 0.5.0

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 (150) hide show
  1. package/NOTICE.md +1 -1
  2. package/ai/component-guides.md +40 -6
  3. package/ai/component-registry.json +67 -5
  4. package/ai/component-registry.md +23 -5
  5. package/ai/icons.md +1 -1
  6. package/ai/tokens.md +1 -1
  7. package/dist/blocks/delete-resource.js +1 -1
  8. package/dist/blocks/pages.js +2 -2
  9. package/dist/blocks/resource-list.js +3 -3
  10. package/dist/chunks/{app-frame-CfJ7s3Q0.js → app-frame-B1FXVFYx.js} +5 -5
  11. package/dist/chunks/{app-frame-CfJ7s3Q0.js.map → app-frame-B1FXVFYx.js.map} +1 -1
  12. package/dist/chunks/{banner-B3DGLTBu.js → banner-BinTH032.js} +2 -2
  13. package/dist/chunks/{banner-B3DGLTBu.js.map → banner-BinTH032.js.map} +1 -1
  14. package/dist/chunks/{button-IblhXUyZ.js → button-DrmFgdIi.js} +2 -2
  15. package/dist/chunks/button-DrmFgdIi.js.map +1 -0
  16. package/dist/chunks/{checkbox-9tbimmF3.js → checkbox-ahl1SOqU.js} +2 -2
  17. package/dist/chunks/{checkbox-9tbimmF3.js.map → checkbox-ahl1SOqU.js.map} +1 -1
  18. package/dist/chunks/{code-block-KIvuE8jg.js → code-block-CE3H3nMu.js} +3 -3
  19. package/dist/chunks/{code-block-KIvuE8jg.js.map → code-block-CE3H3nMu.js.map} +1 -1
  20. package/dist/chunks/{code-block-64e-Cy1S.js → code-block-O_EPmMIQ.js} +2 -2
  21. package/dist/chunks/{code-block-64e-Cy1S.js.map → code-block-O_EPmMIQ.js.map} +1 -1
  22. package/dist/chunks/{combobox-DkcjkWc6.js → combobox-DghYPLVQ.js} +7 -3
  23. package/dist/chunks/combobox-DghYPLVQ.js.map +1 -0
  24. package/dist/chunks/{command-list-CypqsC4T.js → command-list-BUmEaaBi.js} +3 -3
  25. package/dist/chunks/{command-list-CypqsC4T.js.map → command-list-BUmEaaBi.js.map} +1 -1
  26. package/dist/chunks/{copy-button-CwU8t_9_.js → copy-button-DBPAA1g0.js} +2 -2
  27. package/dist/chunks/{copy-button-CwU8t_9_.js.map → copy-button-DBPAA1g0.js.map} +1 -1
  28. package/dist/chunks/{core-B0bULn-t.js → core-Cw3pNRp3.js} +2 -2
  29. package/dist/chunks/{core-B0bULn-t.js.map → core-Cw3pNRp3.js.map} +1 -1
  30. package/dist/chunks/{data-table-z7z6DqMJ.js → data-table-CGecI-FI.js} +6 -6
  31. package/dist/chunks/data-table-CGecI-FI.js.map +1 -0
  32. package/dist/chunks/{date-popup-DAnjptFt.js → date-popup-C6vVOOWF.js} +2 -2
  33. package/dist/chunks/{date-popup-DAnjptFt.js.map → date-popup-C6vVOOWF.js.map} +1 -1
  34. package/dist/chunks/{dialog-2zb6ClNR.js → dialog-s3_LUPBi.js} +4 -4
  35. package/dist/chunks/{dialog-2zb6ClNR.js.map → dialog-s3_LUPBi.js.map} +1 -1
  36. package/dist/chunks/{disclosure-BtYRTDO3.js → disclosure-3CIz2WZa.js} +2 -2
  37. package/dist/chunks/disclosure-3CIz2WZa.js.map +1 -0
  38. package/dist/chunks/{domain-BsM9UmAg.js → domain-CrQX3p6E.js} +2 -2
  39. package/dist/chunks/{domain-BsM9UmAg.js.map → domain-CrQX3p6E.js.map} +1 -1
  40. package/dist/chunks/{icon-button-Dfwpvmav.js → icon-button-6kOn2zrP.js} +2 -2
  41. package/dist/chunks/{icon-button-Dfwpvmav.js.map → icon-button-6kOn2zrP.js.map} +1 -1
  42. package/dist/chunks/identity-BwYixi8Q.js +520 -0
  43. package/dist/chunks/identity-BwYixi8Q.js.map +1 -0
  44. package/dist/chunks/{input-Bo5-UZg2.js → input-D1SeLe3X.js} +2 -2
  45. package/dist/chunks/{input-Bo5-UZg2.js.map → input-D1SeLe3X.js.map} +1 -1
  46. package/dist/chunks/{input-group-jPcK9T_a.js → input-group-BbxwEAUP.js} +2 -2
  47. package/dist/chunks/{input-group-jPcK9T_a.js.map → input-group-BbxwEAUP.js.map} +1 -1
  48. package/dist/chunks/{iso-field-DoqHBg8n.js → iso-field-BVOKAY4H.js} +2 -2
  49. package/dist/chunks/{iso-field-DoqHBg8n.js.map → iso-field-BVOKAY4H.js.map} +1 -1
  50. package/dist/chunks/{list-CU_AoVY3.js → list-o8wcuBOz.js} +3 -3
  51. package/dist/chunks/{list-CU_AoVY3.js.map → list-o8wcuBOz.js.map} +1 -1
  52. package/dist/chunks/{markdown-C565aBR7.js → markdown-BZKZi9d8.js} +4 -4
  53. package/dist/chunks/{markdown-C565aBR7.js.map → markdown-BZKZi9d8.js.map} +1 -1
  54. package/dist/chunks/{menu-Clvv6ftq.js → menu-BDce2kiw.js} +2 -2
  55. package/dist/chunks/{menu-Clvv6ftq.js.map → menu-BDce2kiw.js.map} +1 -1
  56. package/dist/chunks/{nav-sheet-Dt6JSvzX.js → nav-sheet-S7tagFJT.js} +3 -3
  57. package/dist/chunks/{nav-sheet-Dt6JSvzX.js.map → nav-sheet-S7tagFJT.js.map} +1 -1
  58. package/dist/chunks/{page-header-BQijP6Rp.js → page-header-DUaKLpK3.js} +2 -2
  59. package/dist/chunks/{page-header-BQijP6Rp.js.map → page-header-DUaKLpK3.js.map} +1 -1
  60. package/dist/chunks/{pagination-D7fAm8qg.js → pagination-D9hM6W2z.js} +3 -3
  61. package/dist/chunks/{pagination-D7fAm8qg.js.map → pagination-D9hM6W2z.js.map} +1 -1
  62. package/dist/chunks/{picker-popover-1FHb1LQG.js → picker-popover-PzVOo62-.js} +4 -4
  63. package/dist/chunks/{picker-popover-1FHb1LQG.js.map → picker-popover-PzVOo62-.js.map} +1 -1
  64. package/dist/chunks/{range-popup-lGiZsG3s.js → range-popup-Dt6Q0Ryw.js} +3 -3
  65. package/dist/chunks/{range-popup-lGiZsG3s.js.map → range-popup-Dt6Q0Ryw.js.map} +1 -1
  66. package/dist/chunks/{rights-B68ocZuq.js → rights-DAHTG_kH.js} +4 -4
  67. package/dist/chunks/{rights-B68ocZuq.js.map → rights-DAHTG_kH.js.map} +1 -1
  68. package/dist/chunks/{select-BqjmQOqx.js → select-UTdHKubp.js} +2 -2
  69. package/dist/chunks/{select-BqjmQOqx.js.map → select-UTdHKubp.js.map} +1 -1
  70. package/dist/chunks/{sidebar-Dq7oGOje.js → sidebar-BO1mnjVH.js} +3 -3
  71. package/dist/chunks/{sidebar-Dq7oGOje.js.map → sidebar-BO1mnjVH.js.map} +1 -1
  72. package/dist/chunks/{sidebar-menu-QSSNu1jJ.js → sidebar-menu-C0qJsQF5.js} +2 -2
  73. package/dist/chunks/{sidebar-menu-QSSNu1jJ.js.map → sidebar-menu-C0qJsQF5.js.map} +1 -1
  74. package/dist/chunks/styles-8fn_bHRP.js +21 -0
  75. package/dist/chunks/styles-8fn_bHRP.js.map +1 -0
  76. package/dist/chunks/{textarea-CO0HP6fK.js → textarea-CRmvC4jd.js} +3 -3
  77. package/dist/chunks/{textarea-CO0HP6fK.js.map → textarea-CRmvC4jd.js.map} +1 -1
  78. package/dist/chunks/{timeseries-nDviPxvQ.js → timeseries-CK86u7M0.js} +3 -3
  79. package/dist/chunks/{timeseries-nDviPxvQ.js.map → timeseries-CK86u7M0.js.map} +1 -1
  80. package/dist/components/app-frame.js +2 -2
  81. package/dist/components/banner.js +1 -1
  82. package/dist/components/button-group.js +1 -1
  83. package/dist/components/button.js +1 -1
  84. package/dist/components/charts/bar.js +2 -2
  85. package/dist/components/charts/donut.js +1 -1
  86. package/dist/components/charts/gauge.js +1 -1
  87. package/dist/components/charts/heatmap.js +1 -1
  88. package/dist/components/charts/sankey.js +2 -2
  89. package/dist/components/charts/timeseries.js +1 -1
  90. package/dist/components/charts.js +2 -2
  91. package/dist/components/checkbox.js +1 -1
  92. package/dist/components/code-block.js +2 -2
  93. package/dist/components/collapsible.js +29 -30
  94. package/dist/components/collapsible.js.map +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 +1 -1
  98. package/dist/components/copy-button.js +1 -1
  99. package/dist/components/data-table.js +1 -1
  100. package/dist/components/date-picker.js +2 -2
  101. package/dist/components/dialog.js +2 -2
  102. package/dist/components/display-options.js +2 -2
  103. package/dist/components/filter-chip.js +3 -3
  104. package/dist/components/filter-toggle.js +35 -0
  105. package/dist/components/filter-toggle.js.map +1 -0
  106. package/dist/components/icon-button.js +1 -1
  107. package/dist/components/input.js +3 -3
  108. package/dist/components/kaeso/conversation.js +2 -2
  109. package/dist/components/kaeso/identity.js +1 -1
  110. package/dist/components/kaeso/moments.js +3 -3
  111. package/dist/components/kaeso/rights.js +1 -1
  112. package/dist/components/kaeso/usage.js +1 -1
  113. package/dist/components/kaeso.js +9 -14
  114. package/dist/components/kaeso.js.map +1 -1
  115. package/dist/components/key-value.js +1 -1
  116. package/dist/components/list.js +1 -1
  117. package/dist/components/markdown.js +1 -1
  118. package/dist/components/menu.js +2 -2
  119. package/dist/components/page-header.js +1 -1
  120. package/dist/components/pagination.js +1 -1
  121. package/dist/components/playground.js +9 -9
  122. package/dist/components/select.js +1 -1
  123. package/dist/components/sheet.js +1 -1
  124. package/dist/components/sidebar.js +1 -1
  125. package/dist/components/tabs.js +4 -4
  126. package/dist/components/tabs.js.map +1 -1
  127. package/dist/components/theme-menu.js +2 -2
  128. package/dist/components/theme-select.js +1 -1
  129. package/dist/index.js +68 -67
  130. package/dist/kaeso.css +11 -12
  131. package/dist/styles.css +1 -1
  132. package/dist/types/components/combobox/combobox.d.ts +2 -0
  133. package/dist/types/components/filter-toggle/docs.d.ts +11 -0
  134. package/dist/types/components/filter-toggle/filter-toggle.d.ts +23 -0
  135. package/dist/types/components/filter-toggle/index.d.ts +1 -0
  136. package/dist/types/components/kaeso/docs.d.ts +1 -0
  137. package/dist/types/components/kaeso/identity.d.ts +1 -0
  138. package/dist/types/components/kaeso/provider-marks.d.ts +27 -2
  139. package/dist/types/components/menu/styles.d.ts +1 -1
  140. package/dist/types/components/tabs/tabs.d.ts +2 -2
  141. package/dist/types/index.d.ts +1 -0
  142. package/package.json +5 -5
  143. package/dist/chunks/button-IblhXUyZ.js.map +0 -1
  144. package/dist/chunks/combobox-DkcjkWc6.js.map +0 -1
  145. package/dist/chunks/data-table-z7z6DqMJ.js.map +0 -1
  146. package/dist/chunks/disclosure-BtYRTDO3.js.map +0 -1
  147. package/dist/chunks/identity-BQoh-UpW.js +0 -365
  148. package/dist/chunks/identity-BQoh-UpW.js.map +0 -1
  149. package/dist/chunks/styles-hkFkoBbi.js +0 -21
  150. package/dist/chunks/styles-hkFkoBbi.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-C565aBR7.js","names":["__icon_Tick02Icon","_Fragment","__exportAll","useUiText","Icon","Text","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","Task","done","cn","Tick02Icon","List","Tag","list","start","last","digits","item","TEXT","ctx","blocks","PROSE","HEADING","block","tail","h","step","variant","level","x","tight","table","align","a","c","j","row","r","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 { Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.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} flow=\"text\" 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 Task({ done }: { done: boolean }) {\n const t = useUiText();\n return (\n <span\n role=\"img\"\n aria-label={done ? t(\"markdown.taskDone\", \"Done\") : t(\"markdown.taskOpen\", \"Not done\")}\n className={cn(\"mt-3 inline-flex size-14 shrink-0 items-center justify-center rounded-checkbox\", done ? \"bg-ink text-on-ink\" : \"shadow-ring\")}\n >\n {done && <Icon icon={__icon_Tick02Icon} size=\"xs\" className=\"size-12\" />}\n </span>\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 const digits = String(start + last).length;\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 <Task done={!!item.checked} />\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 ? \"shrink-0 text-right\" : \"w-8 shrink-0 text-center\"}\n {...(list.ordered ? { style: { minWidth: `${digits + 0.5}ch` } } : {})}\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\";\n\nconst TEXT = { lg: \"body-lg\", body: \"body\", small: \"small\" } as const;\nconst HEADING = {\n lg: [\"title\", \"title-sm\", \"body-lg\", \"body-lg\"],\n body: [\"title-sm\", \"body-lg\", \"body\", \"body\"],\n small: [\"body-lg\", \"body\", \"small\", \"small\"],\n} 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 step = Math.min(3, h.depth - 1);\n const variant = HEADING[ctx.size][step]!;\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={step === 3 ? \"medium\" : \"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 <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)} className={c.text.length <= 24 ? \"whitespace-nowrap\" : undefined}>\n {inline(c.tokens)}\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\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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"}
1
+ {"version":3,"file":"markdown-BZKZi9d8.js","names":["__icon_Tick02Icon","_Fragment","__exportAll","useUiText","Icon","Text","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","Task","done","cn","Tick02Icon","List","Tag","list","start","last","digits","item","TEXT","ctx","blocks","PROSE","HEADING","block","tail","h","step","variant","level","x","tight","table","align","a","c","j","row","r","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 { Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.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} flow=\"text\" 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 Task({ done }: { done: boolean }) {\n const t = useUiText();\n return (\n <span\n role=\"img\"\n aria-label={done ? t(\"markdown.taskDone\", \"Done\") : t(\"markdown.taskOpen\", \"Not done\")}\n className={cn(\"mt-3 inline-flex size-14 shrink-0 items-center justify-center rounded-checkbox\", done ? \"bg-ink text-on-ink\" : \"shadow-ring\")}\n >\n {done && <Icon icon={__icon_Tick02Icon} size=\"xs\" className=\"size-12\" />}\n </span>\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 const digits = String(start + last).length;\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 <Task done={!!item.checked} />\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 ? \"shrink-0 text-right\" : \"w-8 shrink-0 text-center\"}\n {...(list.ordered ? { style: { minWidth: `${digits + 0.5}ch` } } : {})}\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\";\n\nconst TEXT = { lg: \"body-lg\", body: \"body\", small: \"small\" } as const;\nconst HEADING = {\n lg: [\"title\", \"title-sm\", \"body-lg\", \"body-lg\"],\n body: [\"title-sm\", \"body-lg\", \"body\", \"body\"],\n small: [\"body-lg\", \"body\", \"small\", \"small\"],\n} 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 step = Math.min(3, h.depth - 1);\n const variant = HEADING[ctx.size][step]!;\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={step === 3 ? \"medium\" : \"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 <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)} className={c.text.length <= 24 ? \"whitespace-nowrap\" : undefined}>\n {inline(c.tokens)}\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\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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"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { i as e, o as t, s as n, t as r } from "./styles-hkFkoBbi.js";
2
+ import { i as e, o as t, s as n, t as r } from "./styles-8fn_bHRP.js";
3
3
  import { t as i } from "./cn-BjnOAUrA.js";
4
4
  import { r as a } from "./link-provider-cvl8lSTT.js";
5
5
  import { n as o, r as s } from "./portal-context-CTatR2Z8.js";
@@ -482,4 +482,4 @@ var ce = /* @__PURE__ */ Object.assign(Q, {
482
482
  //#endregion
483
483
  export { oe as a, te as c, se as i, ce as l, re as n, k as o, ne as r, O as s, ae as t };
484
484
 
485
- //# sourceMappingURL=menu-Clvv6ftq.js.map
485
+ //# sourceMappingURL=menu-BDce2kiw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu-Clvv6ftq.js","names":["BaseMenu","_Fragment","__icon_ArrowUpRight01Icon","__icon_Tick02Icon","__icon_ArrowRight01Icon","Menu","BaseContextMenu","ContextMenu","Menubar","BaseMenubar","MENU_ITEM","MENU_POPUP","MENU_SEPARATOR","MENU_DANGER","cn","useLinkComponent","pageBoundary","usePortalContainer","Icon","KbdSequence","useLayoutWidth","anchorWidthStyle","Fragment$1","KAESO_MENU_VARIANTS","KAESO_MENU_DEFAULT_VARIANTS","NO_TRIGGER","TriggerContext","Root","trigger","useRef","Menu","open","defaultOpen","onOpenChange","o","Trigger","useContext","setTrigger","useCallback","el","children","openOnHover","framed","labelledBy","orientation","rest","props","className","header","footer","Popup","triggerWidth","width","popup","ref","at","Content","ItemContent","leading","description","icon","danger","descriptionTone","shortcut","hint","hintId","Item","force","useId","disabled","onClick","closeOnClick","variant","LinkItem","LinkComp","external","ArrowUpRight01Icon","CheckboxItem","checked","defaultChecked","onCheckedChange","c","Tick02Icon","RadioGroup","value","defaultValue","onValueChange","v","RadioItem","Group","label","Separator","Header","avatar","name","email","Sub","SubTrigger","setRef","ArrowRight01Icon","SubContent","Menu$1","KAESO_CONTEXT_MENU_VARIANTS","KAESO_CONTEXT_MENU_DEFAULT_VARIANTS","FOCUSABLE","ContextRoot","opener","ContextMenu","ContextTrigger","own","focusable","setFocusable","useState","useLayoutEffect","ContextContent","ContextMenu$1","KAESO_MENUBAR_VARIANTS","KAESO_MENUBAR_DEFAULT_VARIANTS","MenubarRoot","ariaLabel","Menubar","MenubarTrigger","Menubar$1"],"sources":["../../src/components/menu/menu.tsx"],"sourcesContent":["import { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefObject,\n} from \"react\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport { ContextMenu as BaseContextMenu } from \"@base-ui/react/context-menu\";\nimport { Menubar as BaseMenubar } from \"@base-ui/react/menubar\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useLinkComponent } from \"../../utils/link-provider.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { KbdSequence } from \"../kbd/kbd.js\";\nimport { ArrowUpRight01Icon as __icon_ArrowUpRight01Icon, Tick02Icon as __icon_Tick02Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { anchorWidthStyle, useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { MENU_DANGER, MENU_HINT, MENU_ICON, MENU_ITEM, MENU_LABEL, MENU_POPUP, MENU_SEPARATOR } from \"./styles.js\";\n\nexport const KAESO_MENU_VARIANTS = {\n item: {\n default: { classes: \"\" },\n danger: { classes: MENU_DANGER },\n },\n width: {\n auto: { classes: \"\" },\n trigger: { classes: \"w-anchor\" },\n },\n description: {\n secondary: { classes: \"text-fg-secondary\" },\n danger: { classes: \"text-danger-text\" },\n },\n} as const;\nexport const KAESO_MENU_DEFAULT_VARIANTS = { item: \"default\", width: \"auto\", description: \"secondary\" } as const;\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype Align = \"start\" | \"center\" | \"end\";\n\nexport interface MenuProps {\n children: ReactNode;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n modal?: boolean | undefined;\n}\n\nconst NO_TRIGGER: RefObject<HTMLElement | null> = { current: null };\nconst TriggerContext = /* @__PURE__ */ createContext<RefObject<HTMLElement | null> | null>(null);\n\nfunction Root({ open, defaultOpen, onOpenChange, modal = false, children }: MenuProps) {\n const trigger = useRef<HTMLElement | null>(null);\n return (\n <BaseMenu.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n modal={modal}\n >\n <TriggerContext.Provider value={trigger}>{children}</TriggerContext.Provider>\n </BaseMenu.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Menu\";\n\nfunction Trigger({ children, openOnHover }: { children: ReactElement; openOnHover?: boolean | undefined }) {\n const trigger = useContext(TriggerContext);\n const setTrigger = useCallback(\n (el: HTMLElement | null) => {\n if (trigger) trigger.current = el;\n },\n [trigger],\n );\n return <BaseMenu.Trigger ref={setTrigger} render={children} {...(openOnHover ? { openOnHover } : {})} />;\n}\nif (process.env.NODE_ENV !== \"production\") Trigger.displayName = \"Menu.Trigger\";\n\nexport interface MenuContentProps {\n children: ReactNode;\n side?: Side | undefined;\n align?: Align | undefined;\n sideOffset?: number | undefined;\n width?: keyof typeof KAESO_MENU_VARIANTS.width | undefined;\n className?: string | undefined;\n header?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n}\n\nfunction framed(header: ReactNode, footer: ReactNode) {\n return function framedMenuPopup(props: HTMLAttributes<HTMLDivElement> & { ref?: Ref<HTMLDivElement> | undefined }) {\n const { role, id, \"aria-labelledby\": labelledBy, \"aria-orientation\": orientation, children, className, ...rest } = props;\n return (\n <div {...rest} className={cn(className, \"overflow-hidden p-0\")}>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain rounded-menu p-6 scrollbar-quiet\">\n {header && <div className=\"mb-6 px-10 pt-6 pb-10 hairline-b\">{header}</div>}\n <div role={role} id={id} aria-labelledby={labelledBy} aria-orientation={orientation} className=\"flex flex-col\">\n {children}\n </div>\n {footer && <div className=\"px-10 pt-6 pb-4 text-caption text-fg-tertiary\">{footer}</div>}\n </div>\n </div>\n );\n };\n}\n\nconst Popup = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuContentProps & { alignOffset?: number | undefined }>(function MenuPopup(\n { children, side = \"bottom\", align = \"start\", sideOffset = 6, alignOffset = 0, width = \"auto\", className, header, footer },\n ref,\n) {\n const trigger = useContext(TriggerContext);\n const triggerWidth = useLayoutWidth(trigger ?? NO_TRIGGER, width === \"trigger\" && !!trigger);\n const popup = useRef<HTMLDivElement | null>(null);\n return (\n <BaseMenu.Portal container={usePortalContainer()}>\n <BaseMenu.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BaseMenu.Popup\n ref={(el) => {\n popup.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n finalFocus={() => {\n const at = document.activeElement;\n if (at && at !== document.body && !popup.current?.contains(at)) return false;\n return trigger?.current?.isConnected ? trigger.current : true;\n }}\n tabIndex={0}\n className={cn(MENU_POPUP, KAESO_MENU_VARIANTS.width[width].classes, className)}\n style={width === \"trigger\" ? anchorWidthStyle(triggerWidth) : undefined}\n {...(header || footer ? { render: framed(header, footer) } : {})}\n >\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Popup.displayName = \"Menu.Popup\";\n\nconst Content = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuContentProps>(function MenuContent(props, ref) {\n return <Popup ref={ref} {...props} />;\n});\nif (process.env.NODE_ENV !== \"production\") Content.displayName = \"Menu.Content\";\n\nexport interface MenuItemProps {\n children: ReactNode;\n icon?: IconData | undefined;\n leading?: ReactNode | undefined;\n description?: ReactNode | undefined;\n descriptionTone?: keyof typeof KAESO_MENU_VARIANTS.description | undefined;\n shortcut?: string[] | string[][] | undefined;\n hint?: ReactNode | undefined;\n variant?: keyof typeof KAESO_MENU_VARIANTS.item | undefined;\n disabled?: boolean | undefined;\n onClick?: (() => void) | undefined;\n closeOnClick?: boolean | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nfunction ItemContent({\n icon,\n leading,\n description,\n descriptionTone = \"secondary\",\n shortcut,\n hint,\n children,\n danger,\n hintId,\n}: Pick<MenuItemProps, \"icon\" | \"leading\" | \"description\" | \"descriptionTone\" | \"shortcut\" | \"hint\" | \"children\"> & {\n danger?: boolean | undefined;\n hintId?: string | undefined;\n}) {\n return (\n <>\n {leading ? (\n <span className={cn(\"flex size-16 shrink-0 items-center justify-center\", description && \"self-start mt-10\")}>{leading}</span>\n ) : (\n icon && (\n <Icon icon={icon} size=\"sm\" className={cn(danger ? \"text-danger-text forced-colors:text-current\" : MENU_ICON, description && \"self-start mt-10\")} />\n )\n )}\n {description ? (\n <span className=\"flex min-w-0 flex-1 flex-col gap-2 py-8\">\n <span className=\"text-pretty wrap-break-word\">{children}</span>\n <span className={cn(\"text-small font-regular whitespace-normal\", KAESO_MENU_VARIANTS.description[descriptionTone].classes)}>{description}</span>\n </span>\n ) : (\n <span className=\"min-w-0 flex-1 py-6 text-pretty wrap-break-word\">{children}</span>\n )}\n {(shortcut || hint) && (\n <span id={hintId} aria-hidden className={MENU_HINT}>\n {hint}\n {shortcut && <KbdSequence keys={shortcut} />}\n </span>\n )}\n </>\n );\n}\n\nconst Item = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuItemProps>(function MenuItem(\n {\n children,\n icon,\n leading,\n description,\n descriptionTone,\n shortcut,\n hint,\n variant = \"default\",\n disabled,\n onClick,\n closeOnClick,\n className,\n \"data-force\": force,\n },\n ref,\n) {\n const hintId = useId();\n return (\n <BaseMenu.Item\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n {...(disabled ? { disabled } : {})}\n {...(onClick ? { onClick } : {})}\n {...(closeOnClick !== undefined ? { closeOnClick } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(MENU_ITEM, KAESO_MENU_VARIANTS.item[variant].classes, className)}\n >\n <ItemContent\n icon={icon}\n leading={leading}\n description={description}\n descriptionTone={descriptionTone}\n shortcut={shortcut}\n hint={hint}\n danger={variant === \"danger\"}\n hintId={hintId}\n >\n {children}\n </ItemContent>\n </BaseMenu.Item>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Item.displayName = \"Menu.Item\";\n\nexport interface MenuLinkItemProps extends Pick<\n MenuItemProps,\n \"icon\" | \"leading\" | \"description\" | \"descriptionTone\" | \"shortcut\" | \"hint\" | \"children\" | \"className\"\n> {\n href: string;\n external?: boolean | undefined;\n}\n\nconst LinkItem = /* @__PURE__ */ forwardRef<HTMLAnchorElement, MenuLinkItemProps>(function MenuLinkItem(\n { children, href, external, icon, leading, description, descriptionTone, shortcut, hint, className },\n ref,\n) {\n const LinkComp = useLinkComponent();\n const hintId = useId();\n return (\n <BaseMenu.LinkItem\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n href={href}\n {...(external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : { render: <LinkComp href={href} /> })}\n className={cn(MENU_ITEM, \"no-underline\", className)}\n >\n <ItemContent\n icon={icon}\n leading={leading}\n description={description}\n descriptionTone={descriptionTone}\n shortcut={shortcut}\n hint={hint ?? (external ? <Icon icon={__icon_ArrowUpRight01Icon} size=\"xs\" /> : undefined)}\n hintId={hintId}\n >\n {children}\n </ItemContent>\n </BaseMenu.LinkItem>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LinkItem.displayName = \"Menu.LinkItem\";\n\nexport interface MenuCheckboxItemProps extends Omit<MenuItemProps, \"variant\" | \"onClick\"> {\n checked?: boolean | undefined;\n defaultChecked?: boolean | undefined;\n onCheckedChange?: ((checked: boolean) => void) | undefined;\n}\n\nconst CheckboxItem = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuCheckboxItemProps>(function MenuCheckboxItem(\n {\n children,\n icon,\n leading,\n description,\n descriptionTone,\n shortcut,\n hint,\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n closeOnClick = false,\n className,\n },\n ref,\n) {\n const hintId = useId();\n return (\n <BaseMenu.CheckboxItem\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n {...(checked !== undefined ? { checked } : {})}\n {...(defaultChecked !== undefined ? { defaultChecked } : {})}\n {...(onCheckedChange ? { onCheckedChange: (c: boolean) => onCheckedChange(c) } : {})}\n {...(disabled ? { disabled } : {})}\n closeOnClick={closeOnClick}\n className={cn(MENU_ITEM, className)}\n >\n <ItemContent icon={icon} leading={leading} description={description} descriptionTone={descriptionTone} shortcut={shortcut} hint={hint} hintId={hintId}>\n {children}\n </ItemContent>\n <BaseMenu.CheckboxItemIndicator keepMounted className=\"flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-checked:opacity-100\">\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </BaseMenu.CheckboxItemIndicator>\n </BaseMenu.CheckboxItem>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxItem.displayName = \"Menu.CheckboxItem\";\n\nconst RadioGroup = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n { value?: string | undefined; defaultValue?: string | undefined; onValueChange?: ((v: string) => void) | undefined; children: ReactNode }\n>(function MenuRadioGroup({ value, defaultValue, onValueChange, children }, ref) {\n return (\n <BaseMenu.RadioGroup\n ref={ref}\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n {...(onValueChange ? { onValueChange: (v: unknown) => onValueChange(String(v)) } : {})}\n >\n {children}\n </BaseMenu.RadioGroup>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RadioGroup.displayName = \"Menu.RadioGroup\";\n\nconst RadioItem = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuItemProps, \"variant\"> & { value: string }>(function MenuRadioItem(\n { children, value, icon, leading, description, descriptionTone, shortcut, hint, disabled, closeOnClick, className },\n ref,\n) {\n const hintId = useId();\n return (\n <BaseMenu.RadioItem\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n value={value}\n {...(disabled ? { disabled } : {})}\n {...(closeOnClick !== undefined ? { closeOnClick } : {})}\n className={cn(MENU_ITEM, className)}\n >\n <ItemContent icon={icon} leading={leading} description={description} descriptionTone={descriptionTone} shortcut={shortcut} hint={hint} hintId={hintId}>\n {children}\n </ItemContent>\n <BaseMenu.RadioItemIndicator keepMounted className=\"flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-checked:opacity-100\">\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </BaseMenu.RadioItemIndicator>\n </BaseMenu.RadioItem>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RadioItem.displayName = \"Menu.RadioItem\";\n\nconst Group = /* @__PURE__ */ forwardRef<HTMLDivElement, { label?: ReactNode | undefined; children: ReactNode }>(function MenuGroup({ label, children }, ref) {\n return (\n <BaseMenu.Group ref={ref} className=\"flex flex-col\">\n {label && <BaseMenu.GroupLabel className={MENU_LABEL}>{label}</BaseMenu.GroupLabel>}\n {children}\n </BaseMenu.Group>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Group.displayName = \"Menu.Group\";\n\nconst Separator = /* @__PURE__ */ forwardRef<HTMLDivElement>(function MenuSeparator(_props, ref) {\n return <div ref={ref} role=\"separator\" aria-orientation=\"horizontal\" className={MENU_SEPARATOR} />;\n});\nif (process.env.NODE_ENV !== \"production\") Separator.displayName = \"Menu.Separator\";\n\nconst Header = /* @__PURE__ */ forwardRef<HTMLDivElement, { avatar?: ReactNode | undefined; name: ReactNode; email?: ReactNode | undefined }>(function MenuHeader(\n { avatar, name, email },\n ref,\n) {\n return (\n <div ref={ref} className=\"flex min-w-0 items-center gap-10 px-10 pt-8 pb-10\">\n {avatar}\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"text-body font-semibold text-fg wrap-break-word\">{name}</span>\n {email && <span className=\"text-caption font-regular text-fg-secondary wrap-anywhere\">{email}</span>}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Header.displayName = \"Menu.Header\";\n\nfunction Sub({ children, open, onOpenChange }: { children: ReactNode; open?: boolean | undefined; onOpenChange?: ((o: boolean) => void) | undefined }) {\n const trigger = useRef<HTMLElement | null>(null);\n return (\n <BaseMenu.SubmenuRoot {...(open !== undefined ? { open } : {})} {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}>\n <TriggerContext.Provider value={trigger}>{children}</TriggerContext.Provider>\n </BaseMenu.SubmenuRoot>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Sub.displayName = \"Menu.Sub\";\n\nconst SubTrigger = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuItemProps, \"shortcut\" | \"variant\" | \"onClick\">>(function MenuSubTrigger(\n { children, icon, leading, description, descriptionTone, hint, disabled, className },\n ref,\n) {\n const trigger = useContext(TriggerContext);\n const setRef = useCallback(\n (el: HTMLDivElement | null) => {\n if (trigger) trigger.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [trigger, ref],\n );\n const hintId = useId();\n return (\n <BaseMenu.SubmenuTrigger\n ref={setRef}\n {...(disabled ? { disabled } : {})}\n {...(hint ? { \"aria-describedby\": hintId } : {})}\n className={cn(MENU_ITEM, \"open:bg-item-hover\", className)}\n >\n <ItemContent icon={icon} leading={leading} description={description} descriptionTone={descriptionTone} hint={hint} hintId={hintId}>\n {children}\n </ItemContent>\n <Icon icon={__icon_ArrowRight01Icon} size=\"sm\" className=\"-mr-2 text-fg-tertiary\" />\n </BaseMenu.SubmenuTrigger>\n );\n});\nif (process.env.NODE_ENV !== \"production\") SubTrigger.displayName = \"Menu.SubTrigger\";\n\nconst SubContent = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuContentProps, \"side\" | \"align\">>(function MenuSubContent(props, ref) {\n return <Popup ref={ref} side=\"right\" align=\"start\" sideOffset={8} alignOffset={-6} {...props} />;\n});\nif (process.env.NODE_ENV !== \"production\") SubContent.displayName = \"Menu.SubContent\";\n\nexport const Menu = /* @__PURE__ */ Object.assign(Root, {\n Trigger,\n Content,\n Item,\n LinkItem,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Group,\n Separator,\n Header,\n Sub,\n SubTrigger,\n SubContent,\n});\n\nexport const KAESO_CONTEXT_MENU_VARIANTS = {} as const;\nexport const KAESO_CONTEXT_MENU_DEFAULT_VARIANTS = {} as const;\n\nconst FOCUSABLE = 'a[href], button, input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nfunction ContextRoot({ children, onOpenChange }: { children: ReactNode; onOpenChange?: ((open: boolean) => void) | undefined }) {\n const opener = useRef<HTMLElement | null>(null);\n return (\n <BaseContextMenu.Root\n onOpenChange={(o: boolean) => {\n if (o) {\n const at = document.activeElement;\n opener.current = at instanceof HTMLElement && at !== document.body ? at : null;\n }\n onOpenChange?.(o);\n }}\n >\n <TriggerContext.Provider value={opener}>{children}</TriggerContext.Provider>\n </BaseContextMenu.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ContextRoot.displayName = \"ContextMenu\";\nconst ContextTrigger = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined; \"data-force\"?: string | undefined }>(\n function ContextMenuTrigger({ children, className, \"data-force\": force }, ref) {\n const own = useRef<HTMLDivElement | null>(null);\n const [focusable, setFocusable] = useState(false);\n useLayoutEffect(() => {\n setFocusable(!own.current?.querySelector(FOCUSABLE));\n }, [children]);\n return (\n <BaseContextMenu.Trigger\n ref={(el: HTMLDivElement | null) => {\n own.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n {...(focusable ? { tabIndex: 0 } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(focusable && \"focus-ring\", className)}\n >\n {children}\n </BaseContextMenu.Trigger>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") ContextTrigger.displayName = \"ContextMenu.Trigger\";\nconst ContextContent = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuContentProps, \"side\" | \"align\" | \"sideOffset\">>(function ContextMenuContent(\n { children, className, header, footer, width = \"auto\" },\n ref,\n) {\n const opener = useContext(TriggerContext);\n const popup = useRef<HTMLDivElement | null>(null);\n return (\n <BaseContextMenu.Portal container={usePortalContainer()}>\n <BaseContextMenu.Positioner positionMethod=\"fixed\" collisionBoundary={pageBoundary()} collisionPadding={8} className=\"z-50 outline-none\">\n <BaseContextMenu.Popup\n ref={(el: HTMLDivElement | null) => {\n popup.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n finalFocus={() => {\n const at = document.activeElement;\n if (at && at !== document.body && !popup.current?.contains(at)) return false;\n return opener?.current?.isConnected ? opener.current : true;\n }}\n tabIndex={0}\n className={cn(MENU_POPUP, KAESO_MENU_VARIANTS.width[width].classes, className)}\n {...(header || footer ? { render: framed(header, footer) } : {})}\n >\n {children}\n </BaseContextMenu.Popup>\n </BaseContextMenu.Positioner>\n </BaseContextMenu.Portal>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ContextContent.displayName = \"ContextMenu.Content\";\nexport const ContextMenu = /* @__PURE__ */ Object.assign(ContextRoot, {\n Trigger: ContextTrigger,\n Content: ContextContent,\n Item,\n LinkItem,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Group,\n Separator,\n Sub,\n SubTrigger,\n SubContent,\n});\n\nexport const KAESO_MENUBAR_VARIANTS = {} as const;\nexport const KAESO_MENUBAR_DEFAULT_VARIANTS = {} as const;\n\nconst MenubarRoot = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined; \"aria-label\"?: string | undefined }>(function Menubar(\n { children, className, \"aria-label\": ariaLabel },\n ref,\n) {\n return (\n <BaseMenubar ref={ref} className={cn(\"inline-flex items-center gap-8\", className)} {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}>\n {children}\n </BaseMenubar>\n );\n});\nif (process.env.NODE_ENV !== \"production\") MenubarRoot.displayName = \"Menubar\";\nconst MenubarTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, { children: ReactNode; className?: string | undefined; \"data-force\"?: string | undefined }>(\n function MenubarTrigger({ children, className, \"data-force\": force }, ref) {\n return (\n <BaseMenu.Trigger\n ref={ref}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"relative inline-flex h-32 cursor-pointer items-center rounded-pill px-12 text-body font-medium text-fg material-ghost transition-control focus-ring tap-target\",\n className,\n )}\n >\n {children}\n </BaseMenu.Trigger>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") MenubarTrigger.displayName = \"Menubar.Trigger\";\nexport const Menubar = /* @__PURE__ */ Object.assign(MenubarRoot, {\n Menu: Root,\n Trigger: MenubarTrigger,\n Content,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Group,\n Separator,\n Sub,\n SubTrigger,\n SubContent,\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"menu-BDce2kiw.js","names":["BaseMenu","_Fragment","__icon_ArrowUpRight01Icon","__icon_Tick02Icon","__icon_ArrowRight01Icon","Menu","BaseContextMenu","ContextMenu","Menubar","BaseMenubar","MENU_ITEM","MENU_POPUP","MENU_SEPARATOR","MENU_DANGER","cn","useLinkComponent","pageBoundary","usePortalContainer","Icon","KbdSequence","useLayoutWidth","anchorWidthStyle","Fragment$1","KAESO_MENU_VARIANTS","KAESO_MENU_DEFAULT_VARIANTS","NO_TRIGGER","TriggerContext","Root","trigger","useRef","Menu","open","defaultOpen","onOpenChange","o","Trigger","useContext","setTrigger","useCallback","el","children","openOnHover","framed","labelledBy","orientation","rest","props","className","header","footer","Popup","triggerWidth","width","popup","ref","at","Content","ItemContent","leading","description","icon","danger","descriptionTone","shortcut","hint","hintId","Item","force","useId","disabled","onClick","closeOnClick","variant","LinkItem","LinkComp","external","ArrowUpRight01Icon","CheckboxItem","checked","defaultChecked","onCheckedChange","c","Tick02Icon","RadioGroup","value","defaultValue","onValueChange","v","RadioItem","Group","label","Separator","Header","avatar","name","email","Sub","SubTrigger","setRef","ArrowRight01Icon","SubContent","Menu$1","KAESO_CONTEXT_MENU_VARIANTS","KAESO_CONTEXT_MENU_DEFAULT_VARIANTS","FOCUSABLE","ContextRoot","opener","ContextMenu","ContextTrigger","own","focusable","setFocusable","useState","useLayoutEffect","ContextContent","ContextMenu$1","KAESO_MENUBAR_VARIANTS","KAESO_MENUBAR_DEFAULT_VARIANTS","MenubarRoot","ariaLabel","Menubar","MenubarTrigger","Menubar$1"],"sources":["../../src/components/menu/menu.tsx"],"sourcesContent":["import { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefObject,\n} from \"react\";\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport { ContextMenu as BaseContextMenu } from \"@base-ui/react/context-menu\";\nimport { Menubar as BaseMenubar } from \"@base-ui/react/menubar\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useLinkComponent } from \"../../utils/link-provider.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { KbdSequence } from \"../kbd/kbd.js\";\nimport { ArrowUpRight01Icon as __icon_ArrowUpRight01Icon, Tick02Icon as __icon_Tick02Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { anchorWidthStyle, useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { MENU_DANGER, MENU_HINT, MENU_ICON, MENU_ITEM, MENU_LABEL, MENU_POPUP, MENU_SEPARATOR } from \"./styles.js\";\n\nexport const KAESO_MENU_VARIANTS = {\n item: {\n default: { classes: \"\" },\n danger: { classes: MENU_DANGER },\n },\n width: {\n auto: { classes: \"\" },\n trigger: { classes: \"w-anchor\" },\n },\n description: {\n secondary: { classes: \"text-fg-secondary\" },\n danger: { classes: \"text-danger-text\" },\n },\n} as const;\nexport const KAESO_MENU_DEFAULT_VARIANTS = { item: \"default\", width: \"auto\", description: \"secondary\" } as const;\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype Align = \"start\" | \"center\" | \"end\";\n\nexport interface MenuProps {\n children: ReactNode;\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n modal?: boolean | undefined;\n}\n\nconst NO_TRIGGER: RefObject<HTMLElement | null> = { current: null };\nconst TriggerContext = /* @__PURE__ */ createContext<RefObject<HTMLElement | null> | null>(null);\n\nfunction Root({ open, defaultOpen, onOpenChange, modal = false, children }: MenuProps) {\n const trigger = useRef<HTMLElement | null>(null);\n return (\n <BaseMenu.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}\n modal={modal}\n >\n <TriggerContext.Provider value={trigger}>{children}</TriggerContext.Provider>\n </BaseMenu.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Menu\";\n\nfunction Trigger({ children, openOnHover }: { children: ReactElement; openOnHover?: boolean | undefined }) {\n const trigger = useContext(TriggerContext);\n const setTrigger = useCallback(\n (el: HTMLElement | null) => {\n if (trigger) trigger.current = el;\n },\n [trigger],\n );\n return <BaseMenu.Trigger ref={setTrigger} render={children} {...(openOnHover ? { openOnHover } : {})} />;\n}\nif (process.env.NODE_ENV !== \"production\") Trigger.displayName = \"Menu.Trigger\";\n\nexport interface MenuContentProps {\n children: ReactNode;\n side?: Side | undefined;\n align?: Align | undefined;\n sideOffset?: number | undefined;\n width?: keyof typeof KAESO_MENU_VARIANTS.width | undefined;\n className?: string | undefined;\n header?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n}\n\nfunction framed(header: ReactNode, footer: ReactNode) {\n return function framedMenuPopup(props: HTMLAttributes<HTMLDivElement> & { ref?: Ref<HTMLDivElement> | undefined }) {\n const { role, id, \"aria-labelledby\": labelledBy, \"aria-orientation\": orientation, children, className, ...rest } = props;\n return (\n <div {...rest} className={cn(className, \"overflow-hidden p-0\")}>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain rounded-menu p-6 scrollbar-quiet\">\n {header && <div className=\"mb-6 px-10 pt-6 pb-10 hairline-b\">{header}</div>}\n <div role={role} id={id} aria-labelledby={labelledBy} aria-orientation={orientation} className=\"flex flex-col\">\n {children}\n </div>\n {footer && <div className=\"px-10 pt-6 pb-4 text-caption text-fg-tertiary\">{footer}</div>}\n </div>\n </div>\n );\n };\n}\n\nconst Popup = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuContentProps & { alignOffset?: number | undefined }>(function MenuPopup(\n { children, side = \"bottom\", align = \"start\", sideOffset = 6, alignOffset = 0, width = \"auto\", className, header, footer },\n ref,\n) {\n const trigger = useContext(TriggerContext);\n const triggerWidth = useLayoutWidth(trigger ?? NO_TRIGGER, width === \"trigger\" && !!trigger);\n const popup = useRef<HTMLDivElement | null>(null);\n return (\n <BaseMenu.Portal container={usePortalContainer()}>\n <BaseMenu.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BaseMenu.Popup\n ref={(el) => {\n popup.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n finalFocus={() => {\n const at = document.activeElement;\n if (at && at !== document.body && !popup.current?.contains(at)) return false;\n return trigger?.current?.isConnected ? trigger.current : true;\n }}\n tabIndex={0}\n className={cn(MENU_POPUP, KAESO_MENU_VARIANTS.width[width].classes, className)}\n style={width === \"trigger\" ? anchorWidthStyle(triggerWidth) : undefined}\n {...(header || footer ? { render: framed(header, footer) } : {})}\n >\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Popup.displayName = \"Menu.Popup\";\n\nconst Content = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuContentProps>(function MenuContent(props, ref) {\n return <Popup ref={ref} {...props} />;\n});\nif (process.env.NODE_ENV !== \"production\") Content.displayName = \"Menu.Content\";\n\nexport interface MenuItemProps {\n children: ReactNode;\n icon?: IconData | undefined;\n leading?: ReactNode | undefined;\n description?: ReactNode | undefined;\n descriptionTone?: keyof typeof KAESO_MENU_VARIANTS.description | undefined;\n shortcut?: string[] | string[][] | undefined;\n hint?: ReactNode | undefined;\n variant?: keyof typeof KAESO_MENU_VARIANTS.item | undefined;\n disabled?: boolean | undefined;\n onClick?: (() => void) | undefined;\n closeOnClick?: boolean | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nfunction ItemContent({\n icon,\n leading,\n description,\n descriptionTone = \"secondary\",\n shortcut,\n hint,\n children,\n danger,\n hintId,\n}: Pick<MenuItemProps, \"icon\" | \"leading\" | \"description\" | \"descriptionTone\" | \"shortcut\" | \"hint\" | \"children\"> & {\n danger?: boolean | undefined;\n hintId?: string | undefined;\n}) {\n return (\n <>\n {leading ? (\n <span className={cn(\"flex size-16 shrink-0 items-center justify-center\", description && \"self-start mt-10\")}>{leading}</span>\n ) : (\n icon && (\n <Icon icon={icon} size=\"sm\" className={cn(danger ? \"text-danger-text forced-colors:text-current\" : MENU_ICON, description && \"self-start mt-10\")} />\n )\n )}\n {description ? (\n <span className=\"flex min-w-0 flex-1 flex-col gap-2 py-8\">\n <span className=\"text-pretty wrap-break-word\">{children}</span>\n <span className={cn(\"text-small font-regular whitespace-normal\", KAESO_MENU_VARIANTS.description[descriptionTone].classes)}>{description}</span>\n </span>\n ) : (\n <span className=\"min-w-0 flex-1 py-6 text-pretty wrap-break-word\">{children}</span>\n )}\n {(shortcut || hint) && (\n <span id={hintId} aria-hidden className={MENU_HINT}>\n {hint}\n {shortcut && <KbdSequence keys={shortcut} />}\n </span>\n )}\n </>\n );\n}\n\nconst Item = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuItemProps>(function MenuItem(\n {\n children,\n icon,\n leading,\n description,\n descriptionTone,\n shortcut,\n hint,\n variant = \"default\",\n disabled,\n onClick,\n closeOnClick,\n className,\n \"data-force\": force,\n },\n ref,\n) {\n const hintId = useId();\n return (\n <BaseMenu.Item\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n {...(disabled ? { disabled } : {})}\n {...(onClick ? { onClick } : {})}\n {...(closeOnClick !== undefined ? { closeOnClick } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(MENU_ITEM, KAESO_MENU_VARIANTS.item[variant].classes, className)}\n >\n <ItemContent\n icon={icon}\n leading={leading}\n description={description}\n descriptionTone={descriptionTone}\n shortcut={shortcut}\n hint={hint}\n danger={variant === \"danger\"}\n hintId={hintId}\n >\n {children}\n </ItemContent>\n </BaseMenu.Item>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Item.displayName = \"Menu.Item\";\n\nexport interface MenuLinkItemProps extends Pick<\n MenuItemProps,\n \"icon\" | \"leading\" | \"description\" | \"descriptionTone\" | \"shortcut\" | \"hint\" | \"children\" | \"className\"\n> {\n href: string;\n external?: boolean | undefined;\n}\n\nconst LinkItem = /* @__PURE__ */ forwardRef<HTMLAnchorElement, MenuLinkItemProps>(function MenuLinkItem(\n { children, href, external, icon, leading, description, descriptionTone, shortcut, hint, className },\n ref,\n) {\n const LinkComp = useLinkComponent();\n const hintId = useId();\n return (\n <BaseMenu.LinkItem\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n href={href}\n {...(external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : { render: <LinkComp href={href} /> })}\n className={cn(MENU_ITEM, \"no-underline\", className)}\n >\n <ItemContent\n icon={icon}\n leading={leading}\n description={description}\n descriptionTone={descriptionTone}\n shortcut={shortcut}\n hint={hint ?? (external ? <Icon icon={__icon_ArrowUpRight01Icon} size=\"xs\" /> : undefined)}\n hintId={hintId}\n >\n {children}\n </ItemContent>\n </BaseMenu.LinkItem>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LinkItem.displayName = \"Menu.LinkItem\";\n\nexport interface MenuCheckboxItemProps extends Omit<MenuItemProps, \"variant\" | \"onClick\"> {\n checked?: boolean | undefined;\n defaultChecked?: boolean | undefined;\n onCheckedChange?: ((checked: boolean) => void) | undefined;\n}\n\nconst CheckboxItem = /* @__PURE__ */ forwardRef<HTMLDivElement, MenuCheckboxItemProps>(function MenuCheckboxItem(\n {\n children,\n icon,\n leading,\n description,\n descriptionTone,\n shortcut,\n hint,\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n closeOnClick = false,\n className,\n },\n ref,\n) {\n const hintId = useId();\n return (\n <BaseMenu.CheckboxItem\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n {...(checked !== undefined ? { checked } : {})}\n {...(defaultChecked !== undefined ? { defaultChecked } : {})}\n {...(onCheckedChange ? { onCheckedChange: (c: boolean) => onCheckedChange(c) } : {})}\n {...(disabled ? { disabled } : {})}\n closeOnClick={closeOnClick}\n className={cn(MENU_ITEM, className)}\n >\n <ItemContent icon={icon} leading={leading} description={description} descriptionTone={descriptionTone} shortcut={shortcut} hint={hint} hintId={hintId}>\n {children}\n </ItemContent>\n <BaseMenu.CheckboxItemIndicator keepMounted className=\"flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-checked:opacity-100\">\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </BaseMenu.CheckboxItemIndicator>\n </BaseMenu.CheckboxItem>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxItem.displayName = \"Menu.CheckboxItem\";\n\nconst RadioGroup = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n { value?: string | undefined; defaultValue?: string | undefined; onValueChange?: ((v: string) => void) | undefined; children: ReactNode }\n>(function MenuRadioGroup({ value, defaultValue, onValueChange, children }, ref) {\n return (\n <BaseMenu.RadioGroup\n ref={ref}\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n {...(onValueChange ? { onValueChange: (v: unknown) => onValueChange(String(v)) } : {})}\n >\n {children}\n </BaseMenu.RadioGroup>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RadioGroup.displayName = \"Menu.RadioGroup\";\n\nconst RadioItem = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuItemProps, \"variant\"> & { value: string }>(function MenuRadioItem(\n { children, value, icon, leading, description, descriptionTone, shortcut, hint, disabled, closeOnClick, className },\n ref,\n) {\n const hintId = useId();\n return (\n <BaseMenu.RadioItem\n ref={ref}\n {...(shortcut || hint ? { \"aria-describedby\": hintId } : {})}\n value={value}\n {...(disabled ? { disabled } : {})}\n {...(closeOnClick !== undefined ? { closeOnClick } : {})}\n className={cn(MENU_ITEM, className)}\n >\n <ItemContent icon={icon} leading={leading} description={description} descriptionTone={descriptionTone} shortcut={shortcut} hint={hint} hintId={hintId}>\n {children}\n </ItemContent>\n <BaseMenu.RadioItemIndicator keepMounted className=\"flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-checked:opacity-100\">\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </BaseMenu.RadioItemIndicator>\n </BaseMenu.RadioItem>\n );\n});\nif (process.env.NODE_ENV !== \"production\") RadioItem.displayName = \"Menu.RadioItem\";\n\nconst Group = /* @__PURE__ */ forwardRef<HTMLDivElement, { label?: ReactNode | undefined; children: ReactNode }>(function MenuGroup({ label, children }, ref) {\n return (\n <BaseMenu.Group ref={ref} className=\"flex flex-col\">\n {label && <BaseMenu.GroupLabel className={MENU_LABEL}>{label}</BaseMenu.GroupLabel>}\n {children}\n </BaseMenu.Group>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Group.displayName = \"Menu.Group\";\n\nconst Separator = /* @__PURE__ */ forwardRef<HTMLDivElement>(function MenuSeparator(_props, ref) {\n return <div ref={ref} role=\"separator\" aria-orientation=\"horizontal\" className={MENU_SEPARATOR} />;\n});\nif (process.env.NODE_ENV !== \"production\") Separator.displayName = \"Menu.Separator\";\n\nconst Header = /* @__PURE__ */ forwardRef<HTMLDivElement, { avatar?: ReactNode | undefined; name: ReactNode; email?: ReactNode | undefined }>(function MenuHeader(\n { avatar, name, email },\n ref,\n) {\n return (\n <div ref={ref} className=\"flex min-w-0 items-center gap-10 px-10 pt-8 pb-10\">\n {avatar}\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"text-body font-semibold text-fg wrap-break-word\">{name}</span>\n {email && <span className=\"text-caption font-regular text-fg-secondary wrap-anywhere\">{email}</span>}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Header.displayName = \"Menu.Header\";\n\nfunction Sub({ children, open, onOpenChange }: { children: ReactNode; open?: boolean | undefined; onOpenChange?: ((o: boolean) => void) | undefined }) {\n const trigger = useRef<HTMLElement | null>(null);\n return (\n <BaseMenu.SubmenuRoot {...(open !== undefined ? { open } : {})} {...(onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {})}>\n <TriggerContext.Provider value={trigger}>{children}</TriggerContext.Provider>\n </BaseMenu.SubmenuRoot>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Sub.displayName = \"Menu.Sub\";\n\nconst SubTrigger = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuItemProps, \"shortcut\" | \"variant\" | \"onClick\">>(function MenuSubTrigger(\n { children, icon, leading, description, descriptionTone, hint, disabled, className },\n ref,\n) {\n const trigger = useContext(TriggerContext);\n const setRef = useCallback(\n (el: HTMLDivElement | null) => {\n if (trigger) trigger.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [trigger, ref],\n );\n const hintId = useId();\n return (\n <BaseMenu.SubmenuTrigger\n ref={setRef}\n {...(disabled ? { disabled } : {})}\n {...(hint ? { \"aria-describedby\": hintId } : {})}\n className={cn(MENU_ITEM, \"open:bg-item-hover\", className)}\n >\n <ItemContent icon={icon} leading={leading} description={description} descriptionTone={descriptionTone} hint={hint} hintId={hintId}>\n {children}\n </ItemContent>\n <Icon icon={__icon_ArrowRight01Icon} size=\"sm\" className=\"-mr-2 text-fg-tertiary\" />\n </BaseMenu.SubmenuTrigger>\n );\n});\nif (process.env.NODE_ENV !== \"production\") SubTrigger.displayName = \"Menu.SubTrigger\";\n\nconst SubContent = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuContentProps, \"side\" | \"align\">>(function MenuSubContent(props, ref) {\n return <Popup ref={ref} side=\"right\" align=\"start\" sideOffset={8} alignOffset={-6} {...props} />;\n});\nif (process.env.NODE_ENV !== \"production\") SubContent.displayName = \"Menu.SubContent\";\n\nexport const Menu = /* @__PURE__ */ Object.assign(Root, {\n Trigger,\n Content,\n Item,\n LinkItem,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Group,\n Separator,\n Header,\n Sub,\n SubTrigger,\n SubContent,\n});\n\nexport const KAESO_CONTEXT_MENU_VARIANTS = {} as const;\nexport const KAESO_CONTEXT_MENU_DEFAULT_VARIANTS = {} as const;\n\nconst FOCUSABLE = 'a[href], button, input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nfunction ContextRoot({ children, onOpenChange }: { children: ReactNode; onOpenChange?: ((open: boolean) => void) | undefined }) {\n const opener = useRef<HTMLElement | null>(null);\n return (\n <BaseContextMenu.Root\n onOpenChange={(o: boolean) => {\n if (o) {\n const at = document.activeElement;\n opener.current = at instanceof HTMLElement && at !== document.body ? at : null;\n }\n onOpenChange?.(o);\n }}\n >\n <TriggerContext.Provider value={opener}>{children}</TriggerContext.Provider>\n </BaseContextMenu.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ContextRoot.displayName = \"ContextMenu\";\nconst ContextTrigger = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined; \"data-force\"?: string | undefined }>(\n function ContextMenuTrigger({ children, className, \"data-force\": force }, ref) {\n const own = useRef<HTMLDivElement | null>(null);\n const [focusable, setFocusable] = useState(false);\n useLayoutEffect(() => {\n setFocusable(!own.current?.querySelector(FOCUSABLE));\n }, [children]);\n return (\n <BaseContextMenu.Trigger\n ref={(el: HTMLDivElement | null) => {\n own.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n {...(focusable ? { tabIndex: 0 } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(focusable && \"focus-ring\", className)}\n >\n {children}\n </BaseContextMenu.Trigger>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") ContextTrigger.displayName = \"ContextMenu.Trigger\";\nconst ContextContent = /* @__PURE__ */ forwardRef<HTMLDivElement, Omit<MenuContentProps, \"side\" | \"align\" | \"sideOffset\">>(function ContextMenuContent(\n { children, className, header, footer, width = \"auto\" },\n ref,\n) {\n const opener = useContext(TriggerContext);\n const popup = useRef<HTMLDivElement | null>(null);\n return (\n <BaseContextMenu.Portal container={usePortalContainer()}>\n <BaseContextMenu.Positioner positionMethod=\"fixed\" collisionBoundary={pageBoundary()} collisionPadding={8} className=\"z-50 outline-none\">\n <BaseContextMenu.Popup\n ref={(el: HTMLDivElement | null) => {\n popup.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n finalFocus={() => {\n const at = document.activeElement;\n if (at && at !== document.body && !popup.current?.contains(at)) return false;\n return opener?.current?.isConnected ? opener.current : true;\n }}\n tabIndex={0}\n className={cn(MENU_POPUP, KAESO_MENU_VARIANTS.width[width].classes, className)}\n {...(header || footer ? { render: framed(header, footer) } : {})}\n >\n {children}\n </BaseContextMenu.Popup>\n </BaseContextMenu.Positioner>\n </BaseContextMenu.Portal>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ContextContent.displayName = \"ContextMenu.Content\";\nexport const ContextMenu = /* @__PURE__ */ Object.assign(ContextRoot, {\n Trigger: ContextTrigger,\n Content: ContextContent,\n Item,\n LinkItem,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Group,\n Separator,\n Sub,\n SubTrigger,\n SubContent,\n});\n\nexport const KAESO_MENUBAR_VARIANTS = {} as const;\nexport const KAESO_MENUBAR_DEFAULT_VARIANTS = {} as const;\n\nconst MenubarRoot = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined; \"aria-label\"?: string | undefined }>(function Menubar(\n { children, className, \"aria-label\": ariaLabel },\n ref,\n) {\n return (\n <BaseMenubar ref={ref} className={cn(\"inline-flex items-center gap-8\", className)} {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}>\n {children}\n </BaseMenubar>\n );\n});\nif (process.env.NODE_ENV !== \"production\") MenubarRoot.displayName = \"Menubar\";\nconst MenubarTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, { children: ReactNode; className?: string | undefined; \"data-force\"?: string | undefined }>(\n function MenubarTrigger({ children, className, \"data-force\": force }, ref) {\n return (\n <BaseMenu.Trigger\n ref={ref}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"relative inline-flex h-32 cursor-pointer items-center rounded-pill px-12 text-body font-medium text-fg material-ghost transition-control focus-ring tap-target\",\n className,\n )}\n >\n {children}\n </BaseMenu.Trigger>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") MenubarTrigger.displayName = \"Menubar.Trigger\";\nexport const Menubar = /* @__PURE__ */ Object.assign(MenubarRoot, {\n Menu: Root,\n Trigger: MenubarTrigger,\n Content,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Group,\n Separator,\n Sub,\n SubTrigger,\n SubContent,\n});\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import { l as e } from "./styles-hkFkoBbi.js";
2
+ import { l as e } from "./styles-8fn_bHRP.js";
3
3
  import { t } from "./cn-BjnOAUrA.js";
4
4
  import { r as n } from "./portal-context-CTatR2Z8.js";
5
5
  import { i as r } from "./context-BELWW79w.js";
6
6
  import { t as i } from "./merge-refs-BN1FyQt9.js";
7
- import { c as a, s as o } from "./sidebar-Dq7oGOje.js";
7
+ import { c as a, s as o } from "./sidebar-BO1mnjVH.js";
8
8
  import { forwardRef as s, useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
9
9
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
10
  import { Dialog as m } from "@base-ui/react/dialog";
@@ -64,4 +64,4 @@ process.env.NODE_ENV !== "production" && (_.displayName = "NavSheet");
64
64
  //#endregion
65
65
  export { h as n, _ as t };
66
66
 
67
- //# sourceMappingURL=nav-sheet-Dt6JSvzX.js.map
67
+ //# sourceMappingURL=nav-sheet-S7tagFJT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nav-sheet-Dt6JSvzX.js","names":["__exportAll","usePortalContainer","useUiText","mergeRefs","SidebarSheetContext","SidebarFloatingContext","nav_sheet_exports","NavSheet","PEEK_LEAVE","leave","useRef","t","sheet","useMemo","onOpenChange","peek","open","wide","onChange","popup","contained","setContained","useState","refs","ref","el","place","Dialog","o","cn","returnFocus"],"sources":["../../src/components/app-frame/nav-sheet.tsx"],"sourcesContent":["import { forwardRef, useEffect, useMemo, useRef, useState, 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 { mergeRefs } from \"../../utils/merge-refs.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nconst PEEK_LEAVE = 160;\n\nexport interface NavSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n peek?: boolean | undefined;\n returnFocus?: RefObject<HTMLElement | null> | undefined;\n children: ReactNode;\n}\n\nexport const NavSheet = /* @__PURE__ */ forwardRef<HTMLDivElement, NavSheetProps>(function NavSheet({ open, onOpenChange, peek = false, returnFocus, children }, ref) {\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 const popup = useRef<HTMLDivElement | null>(null);\n const [contained, setContained] = useState(false);\n const refs = useMemo(\n () =>\n mergeRefs(popup, ref, (el: HTMLDivElement | null) => {\n if (el) setContained(!!el.closest('[data-app-frame=\"parent\"]'));\n }),\n [ref],\n );\n const place = contained ? \"absolute\" : \"fixed\";\n return (\n <Dialog.Root open={open} onOpenChange={(o: boolean) => onOpenChange(o)} modal={!peek}>\n <Dialog.Portal container={usePortalContainer()}>\n {!peek && <Dialog.Backdrop className={cn(place, \"inset-0 z-40 bg-overlay opacity-60 backdrop-motion\")} />}\n <Dialog.Popup\n ref={refs}\n aria-label={t(\"appFrame.navigation\", \"Navigation\")}\n data-side=\"left\"\n data-nav-sheet=\"\"\n initialFocus={peek ? false : () => popup.current?.querySelector<HTMLElement>('[aria-current=\"page\"]') ?? true}\n {...(returnFocus ? { finalFocus: returnFocus } : {})}\n className={cn(\n place,\n \"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 )}\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), PEEK_LEAVE);\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":";;;;;;;;;;;A,kDAQMQ,IAAa,KAUND,IAA2B,kBAA0C,SAAkB,EAAE,SAAM,iBAAc,UAAO,IAAO,gBAAa,eAAY,GAAK;CACpK,IAAME,IAAQC,EAAkD,KAAA,CAAS,GACnEC,IAAIT,EAAU;CACpB,cAAsB,aAAaO,EAAM,OAAO,GAAG,CAAC,CAAC;CACrD,IAAMG,IAAQC,SAAe;EAAE,aAAaC,EAAa,EAAK;EAAG;CAAK,IAAI,CAACA,GAAcC,CAAI,CAAC;CAC9F,QAAgB;EACd,IAAI,CAACC,KAAQD,KAAQ,OAAO,SAAW,KAAa;EACpD,IAAME,IAAO,OAAO,WAAW,qBAAqB,GAC9CC,UAAiBD,EAAK,WAAWH,EAAa,EAAK;EAGzD,OAFAI,EAAS,GACTD,EAAK,iBAAiB,UAAUC,CAAQ,SAC3BD,EAAK,oBAAoB,UAAUC,CAAQ;CAC1D,GAAG;EAACF;EAAMD;EAAMD;CAAY,CAAC;CAC7B,IAAMK,IAAQT,EAA8B,IAAI,GAC1C,CAACU,GAAWC,KAAgBC,EAAS,EAAK,GAC1CC,IAAOV,QAETV,EAAUgB,GAAOK,IAAM,MAA8B;EACnD,AAAIC,KAAIJ,EAAa,CAAC,CAACI,EAAG,QAAQ,6BAA2B,CAAC;CAChE,CAAC,GACH,CAACD,CAAG,CACN,GACME,IAAQN,IAAY,aAAa;CACvC,OACE,kBAACO,EAAO,MAAR;EAAmB;EAAM,eAAe,MAAeb,EAAac,CAAC;EAAG,OAAO,CAACb;EAC9E,UAAA,kBAACY,EAAO,QAAR;GAAe,WAAW1B,EAAmB;GAA7C,UAAA,CACG,CAACc,KAAQ,kBAACY,EAAO,UAAR,EAAiB,WAAWE,EAAGH,GAAO,oDAAoD,EAAI,CAAA,GACxG,kBAACC,EAAO,OAAR;IACE,KAAKJ;IACL,cAAYZ,EAAE,uBAAuB,YAAY;IACjD,aAAU;IACV,kBAAe;IACf,cAAcI,IAAO,WAAcI,EAAM,SAAS,cAA2B,yBAAuB,KAAK;IACzG,GAAKW,IAAc,EAAE,YAAYA,EAAY,IAAI,CAAC;IAClD,WAAWD,EACTH,GACA,mIACF;IACA,UAAU,MAAM;KACd,AAAK,EAAE,OAAuB,QAAQ,SAAS,KAAGZ,EAAa,EAAK;IACtE;IACA,sBAAsB,aAAaL,EAAM,OAAO;IAChD,sBAAsB;KACpB,AAAKM,MACL,EAAM,UAAU,iBAAiBD,EAAa,EAAK,GAAGN,CAAU;IAClE;IAEA,UAAA,kBAACH,EAAuB,UAAxB;KAAiC,OAAA;KAC/B,UAAA,kBAACD,EAAoB,UAArB;MAA8B,OAAOQ;MAAQ;KAAuC,CAAA;IACrD,CAAA;GACrB,CAAA,CACD;;CACJ,CAAA;AAEjB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
1
+ {"version":3,"file":"nav-sheet-S7tagFJT.js","names":["__exportAll","usePortalContainer","useUiText","mergeRefs","SidebarSheetContext","SidebarFloatingContext","nav_sheet_exports","NavSheet","PEEK_LEAVE","leave","useRef","t","sheet","useMemo","onOpenChange","peek","open","wide","onChange","popup","contained","setContained","useState","refs","ref","el","place","Dialog","o","cn","returnFocus"],"sources":["../../src/components/app-frame/nav-sheet.tsx"],"sourcesContent":["import { forwardRef, useEffect, useMemo, useRef, useState, 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 { mergeRefs } from \"../../utils/merge-refs.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nconst PEEK_LEAVE = 160;\n\nexport interface NavSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n peek?: boolean | undefined;\n returnFocus?: RefObject<HTMLElement | null> | undefined;\n children: ReactNode;\n}\n\nexport const NavSheet = /* @__PURE__ */ forwardRef<HTMLDivElement, NavSheetProps>(function NavSheet({ open, onOpenChange, peek = false, returnFocus, children }, ref) {\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 const popup = useRef<HTMLDivElement | null>(null);\n const [contained, setContained] = useState(false);\n const refs = useMemo(\n () =>\n mergeRefs(popup, ref, (el: HTMLDivElement | null) => {\n if (el) setContained(!!el.closest('[data-app-frame=\"parent\"]'));\n }),\n [ref],\n );\n const place = contained ? \"absolute\" : \"fixed\";\n return (\n <Dialog.Root open={open} onOpenChange={(o: boolean) => onOpenChange(o)} modal={!peek}>\n <Dialog.Portal container={usePortalContainer()}>\n {!peek && <Dialog.Backdrop className={cn(place, \"inset-0 z-40 bg-overlay opacity-60 backdrop-motion\")} />}\n <Dialog.Popup\n ref={refs}\n aria-label={t(\"appFrame.navigation\", \"Navigation\")}\n data-side=\"left\"\n data-nav-sheet=\"\"\n initialFocus={peek ? false : () => popup.current?.querySelector<HTMLElement>('[aria-current=\"page\"]') ?? true}\n {...(returnFocus ? { finalFocus: returnFocus } : {})}\n className={cn(\n place,\n \"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 )}\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), PEEK_LEAVE);\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":";;;;;;;;;;;A,kDAQMQ,IAAa,KAUND,IAA2B,kBAA0C,SAAkB,EAAE,SAAM,iBAAc,UAAO,IAAO,gBAAa,eAAY,GAAK;CACpK,IAAME,IAAQC,EAAkD,KAAA,CAAS,GACnEC,IAAIT,EAAU;CACpB,cAAsB,aAAaO,EAAM,OAAO,GAAG,CAAC,CAAC;CACrD,IAAMG,IAAQC,SAAe;EAAE,aAAaC,EAAa,EAAK;EAAG;CAAK,IAAI,CAACA,GAAcC,CAAI,CAAC;CAC9F,QAAgB;EACd,IAAI,CAACC,KAAQD,KAAQ,OAAO,SAAW,KAAa;EACpD,IAAME,IAAO,OAAO,WAAW,qBAAqB,GAC9CC,UAAiBD,EAAK,WAAWH,EAAa,EAAK;EAGzD,OAFAI,EAAS,GACTD,EAAK,iBAAiB,UAAUC,CAAQ,SAC3BD,EAAK,oBAAoB,UAAUC,CAAQ;CAC1D,GAAG;EAACF;EAAMD;EAAMD;CAAY,CAAC;CAC7B,IAAMK,IAAQT,EAA8B,IAAI,GAC1C,CAACU,GAAWC,KAAgBC,EAAS,EAAK,GAC1CC,IAAOV,QAETV,EAAUgB,GAAOK,IAAM,MAA8B;EACnD,AAAIC,KAAIJ,EAAa,CAAC,CAACI,EAAG,QAAQ,6BAA2B,CAAC;CAChE,CAAC,GACH,CAACD,CAAG,CACN,GACME,IAAQN,IAAY,aAAa;CACvC,OACE,kBAACO,EAAO,MAAR;EAAmB;EAAM,eAAe,MAAeb,EAAac,CAAC;EAAG,OAAO,CAACb;EAC9E,UAAA,kBAACY,EAAO,QAAR;GAAe,WAAW1B,EAAmB;GAA7C,UAAA,CACG,CAACc,KAAQ,kBAACY,EAAO,UAAR,EAAiB,WAAWE,EAAGH,GAAO,oDAAoD,EAAI,CAAA,GACxG,kBAACC,EAAO,OAAR;IACE,KAAKJ;IACL,cAAYZ,EAAE,uBAAuB,YAAY;IACjD,aAAU;IACV,kBAAe;IACf,cAAcI,IAAO,WAAcI,EAAM,SAAS,cAA2B,yBAAuB,KAAK;IACzG,GAAKW,IAAc,EAAE,YAAYA,EAAY,IAAI,CAAC;IAClD,WAAWD,EACTH,GACA,mIACF;IACA,UAAU,MAAM;KACd,AAAK,EAAE,OAAuB,QAAQ,SAAS,KAAGZ,EAAa,EAAK;IACtE;IACA,sBAAsB,aAAaL,EAAM,OAAO;IAChD,sBAAsB;KACpB,AAAKM,MACL,EAAM,UAAU,iBAAiBD,EAAa,EAAK,GAAGN,CAAU;IAClE;IAEA,UAAA,kBAACH,EAAuB,UAAxB;KAAiC,OAAA;KAC/B,UAAA,kBAACD,EAAoB,UAArB;MAA8B,OAAOQ;MAAQ;KAAuC,CAAA;IACrD,CAAA;GACrB,CAAA,CACD;;CACJ,CAAA;AAEjB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
@@ -2,7 +2,7 @@
2
2
  import { t as e } from "./cn-BjnOAUrA.js";
3
3
  import { t } from "./icon-CBzOwqrX.js";
4
4
  import { r as n } from "./text-DkKdTVUf.js";
5
- import { s as r } from "./app-frame-CfJ7s3Q0.js";
5
+ import { s as r } from "./app-frame-B1FXVFYx.js";
6
6
  import { forwardRef as i } from "react";
7
7
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
8
8
  //#region src/components/page-header/page-header.tsx
@@ -42,4 +42,4 @@ process.env.NODE_ENV !== "production" && (l.displayName = "PageHeader");
42
42
  //#endregion
43
43
  export { s as n, l as r, c as t };
44
44
 
45
- //# sourceMappingURL=page-header-BQijP6Rp.js.map
45
+ //# sourceMappingURL=page-header-DUaKLpK3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-header-BQijP6Rp.js","names":["cn","Text","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\";\nimport { Text } from \"../text/text.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 flex-1 shrink-4 items-center gap-8 text-body-lg font-semibold text-fg sm:flex-initial\">\n {icon && <Icon icon={icon} size=\"sm\" className=\"shrink-0 text-fg-secondary\" />}\n <Text truncate variant=\"body-lg\" weight=\"semibold\" tone=\"inherit\">\n {title}\n </Text>\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":";;;;;;;;AAMA,IAAaG,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,WAAWF,EAAG,8BAA8BG,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;IAA8B,CAAA,GAC7E,kBAACV,GAAD;KAAM,UAAA;KAAS,SAAQ;KAAU,QAAO;KAAW,MAAK;KACrD,UAAAQ;IACG,CAAA,CACC;;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-DUaKLpK3.js","names":["cn","Text","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\";\nimport { Text } from \"../text/text.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 flex-1 shrink-4 items-center gap-8 text-body-lg font-semibold text-fg sm:flex-initial\">\n {icon && <Icon icon={icon} size=\"sm\" className=\"shrink-0 text-fg-secondary\" />}\n <Text truncate variant=\"body-lg\" weight=\"semibold\" tone=\"inherit\">\n {title}\n </Text>\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":";;;;;;;;AAMA,IAAaG,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,WAAWF,EAAG,8BAA8BG,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;IAA8B,CAAA,GAC7E,kBAACV,GAAD;KAAM,UAAA;KAAS,SAAQ;KAAU,QAAO;KAAW,MAAK;KACrD,UAAAQ;IACG,CAAA,CACC;;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-BjnOAUrA.js";
3
3
  import { i as t } from "./context-BELWW79w.js";
4
- import { n } from "./button-IblhXUyZ.js";
5
- import { t as r } from "./icon-button-Dfwpvmav.js";
4
+ import { n } from "./button-DrmFgdIi.js";
5
+ import { t as r } from "./icon-button-6kOn2zrP.js";
6
6
  import { forwardRef as i, useLayoutEffect as a, useRef as o, useState as s } from "react";
7
7
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
8
  import { ArrowLeft01Icon as u, ArrowRight01Icon as d } from "@hugeicons/core-free-icons";
@@ -144,4 +144,4 @@ process.env.NODE_ENV !== "production" && (v.displayName = "Pagination.LoadMore")
144
144
  //#endregion
145
145
  export { f as n, _ as r, p as t };
146
146
 
147
- //# sourceMappingURL=pagination-D7fAm8qg.js.map
147
+ //# sourceMappingURL=pagination-D9hM6W2z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagination-D7fAm8qg.js","names":["__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","cn","useUiText","IconButton","KAESO_PAGINATION_VARIANTS","KAESO_PAGINATION_DEFAULT_VARIANTS","SLOTS","pageSlots","count","pageCount","current","page","i","soft","blocked","run","Pagination","t","label","previous","next","variant","LoadMore","hasMore","hasPrevious","className","ArrowLeft01Icon","onPrevious","ArrowRight01Icon","onNext","onPageChange","p","loadMore","inside","setInside","useState","ended","setEnded","caption","useRef","useLayoutEffect","Button","onLoadMore"],"sources":["../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState, type FocusEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PAGINATION_VARIANTS = {\n variant: {\n \"load-more\": {\n classes: \"\",\n },\n cursor: { classes: \"\" },\n pages: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PAGINATION_DEFAULT_VARIANTS = { variant: \"load-more\" } as const;\n\nexport interface PaginationProps {\n variant?: keyof typeof KAESO_PAGINATION_VARIANTS.variant | undefined;\n hasMore?: boolean | undefined;\n hasPrevious?: boolean | undefined;\n loading?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n onNext?: (() => void) | undefined;\n onPrevious?: (() => void) | undefined;\n page?: number | undefined;\n pageCount?: number | undefined;\n onPageChange?: ((page: number) => void) | undefined;\n className?: string | undefined;\n}\n\nconst SLOTS = 7;\n\nfunction pageSlots(page: number, pageCount: number): (number | \"gap\")[] {\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n if (count <= SLOTS) return Array.from({ length: count }, (_, i) => i + 1);\n if (current <= 4) return [1, 2, 3, 4, 5, \"gap\", count];\n if (current >= count - 3) return [1, \"gap\", count - 4, count - 3, count - 2, count - 1, count];\n return [1, \"gap\", current - 1, current, current + 1, \"gap\", count];\n}\n\nfunction soft(blocked: boolean, run: (() => void) | undefined) {\n return {\n ...(blocked ? { \"aria-disabled\": true } : {}),\n onClick: () => {\n if (!blocked) run?.();\n },\n };\n}\n\nexport const Pagination = /* @__PURE__ */ forwardRef<HTMLElement, PaginationProps>(function Pagination(\n { variant = \"load-more\", hasMore, hasPrevious, loading, onLoadMore, onNext, onPrevious, page = 1, pageCount = 1, onPageChange, className },\n ref,\n) {\n const t = useUiText();\n const label = t(\"pagination.label\", \"Pagination\");\n const previous = t(\"pagination.previous\", \"Previous page\");\n const next = t(\"pagination.next\", \"Next page\");\n\n if (variant === \"load-more\") {\n return <LoadMore ref={ref} label={label} hasMore={!!hasMore} loading={loading} onLoadMore={onLoadMore} className={className} />;\n }\n if (variant === \"cursor\") {\n if (!hasMore && !hasPrevious) return null;\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-8\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(!hasPrevious, onPrevious)} />\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(!hasMore, onNext)} />\n </nav>\n );\n }\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-4\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(current <= 1, () => onPageChange?.(current - 1))} />\n <span className=\"flex items-center gap-4 px-4\">\n {pageSlots(current, count).map((p, i) =>\n p === \"gap\" ? (\n <span key={`gap-${i}`} aria-hidden className=\"inline-flex h-32 min-w-40 items-center justify-center text-body text-fg-tertiary\">\n …\n </span>\n ) : (\n <button\n key={`slot-${i}`}\n type=\"button\"\n aria-current={p === current ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {page}\", { page: String(p) })}\n onClick={() => {\n if (p !== page) onPageChange?.(p);\n }}\n className={cn(\n \"relative inline-flex h-32 min-w-40 cursor-pointer items-center justify-center rounded-pill px-8 text-body font-medium tabular transition-control tap-target focus-ring-inset\",\n p === current ? \"bg-fill-2 text-fg\" : \"text-fg-secondary hover:bg-fill-1 hover:text-fg active:bg-fill-2\",\n )}\n >\n {p}\n </button>\n ),\n )}\n </span>\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(current >= count, () => onPageChange?.(current + 1))} />\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Pagination.displayName = \"Pagination\";\n\nconst LoadMore = /* @__PURE__ */ forwardRef<\n HTMLElement,\n { label: string; hasMore: boolean; loading: boolean | undefined; onLoadMore: (() => void) | undefined; className: string | undefined }\n>(function PaginationLoadMore({ label, hasMore, loading, onLoadMore, className }, ref) {\n const t = useUiText();\n const loadMore = t(\"pagination.loadMore\", \"Load more\");\n const [inside, setInside] = useState(false);\n const [ended, setEnded] = useState(false);\n const caption = useRef<HTMLParagraphElement>(null);\n if (hasMore && ended) setEnded(false);\n if (!hasMore && inside && !ended) setEnded(true);\n useLayoutEffect(() => {\n if (ended) caption.current?.focus();\n }, [ended]);\n if (!hasMore && !ended) return null;\n return (\n <nav\n ref={ref}\n aria-label={label}\n className={cn(\"flex items-center justify-center gap-12 py-12\", className)}\n onFocus={() => setInside(true)}\n onBlur={(e: FocusEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget)) setInside(false);\n }}\n >\n {hasMore ? (\n <Button variant=\"secondary\" size=\"sm\" loading={loading} onClick={onLoadMore} reserveLabels={[loadMore]}>\n {loadMore}\n </Button>\n ) : (\n <p ref={caption} tabIndex={-1} className=\"flex h-32 items-center text-small text-fg-secondary outline-none\">\n {t(\"pagination.allShown\", \"All rows shown\")}\n </p>\n )}\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LoadMore.displayName = \"Pagination.LoadMore\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"pagination-D9hM6W2z.js","names":["__icon_ArrowLeft01Icon","__icon_ArrowRight01Icon","cn","useUiText","IconButton","KAESO_PAGINATION_VARIANTS","KAESO_PAGINATION_DEFAULT_VARIANTS","SLOTS","pageSlots","count","pageCount","current","page","i","soft","blocked","run","Pagination","t","label","previous","next","variant","LoadMore","hasMore","hasPrevious","className","ArrowLeft01Icon","onPrevious","ArrowRight01Icon","onNext","onPageChange","p","loadMore","inside","setInside","useState","ended","setEnded","caption","useRef","useLayoutEffect","Button","onLoadMore"],"sources":["../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState, type FocusEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { ArrowLeft01Icon as __icon_ArrowLeft01Icon, ArrowRight01Icon as __icon_ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { Button } from \"../button/button.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_PAGINATION_VARIANTS = {\n variant: {\n \"load-more\": {\n classes: \"\",\n },\n cursor: { classes: \"\" },\n pages: { classes: \"\" },\n },\n} as const;\nexport const KAESO_PAGINATION_DEFAULT_VARIANTS = { variant: \"load-more\" } as const;\n\nexport interface PaginationProps {\n variant?: keyof typeof KAESO_PAGINATION_VARIANTS.variant | undefined;\n hasMore?: boolean | undefined;\n hasPrevious?: boolean | undefined;\n loading?: boolean | undefined;\n onLoadMore?: (() => void) | undefined;\n onNext?: (() => void) | undefined;\n onPrevious?: (() => void) | undefined;\n page?: number | undefined;\n pageCount?: number | undefined;\n onPageChange?: ((page: number) => void) | undefined;\n className?: string | undefined;\n}\n\nconst SLOTS = 7;\n\nfunction pageSlots(page: number, pageCount: number): (number | \"gap\")[] {\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n if (count <= SLOTS) return Array.from({ length: count }, (_, i) => i + 1);\n if (current <= 4) return [1, 2, 3, 4, 5, \"gap\", count];\n if (current >= count - 3) return [1, \"gap\", count - 4, count - 3, count - 2, count - 1, count];\n return [1, \"gap\", current - 1, current, current + 1, \"gap\", count];\n}\n\nfunction soft(blocked: boolean, run: (() => void) | undefined) {\n return {\n ...(blocked ? { \"aria-disabled\": true } : {}),\n onClick: () => {\n if (!blocked) run?.();\n },\n };\n}\n\nexport const Pagination = /* @__PURE__ */ forwardRef<HTMLElement, PaginationProps>(function Pagination(\n { variant = \"load-more\", hasMore, hasPrevious, loading, onLoadMore, onNext, onPrevious, page = 1, pageCount = 1, onPageChange, className },\n ref,\n) {\n const t = useUiText();\n const label = t(\"pagination.label\", \"Pagination\");\n const previous = t(\"pagination.previous\", \"Previous page\");\n const next = t(\"pagination.next\", \"Next page\");\n\n if (variant === \"load-more\") {\n return <LoadMore ref={ref} label={label} hasMore={!!hasMore} loading={loading} onLoadMore={onLoadMore} className={className} />;\n }\n if (variant === \"cursor\") {\n if (!hasMore && !hasPrevious) return null;\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-8\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(!hasPrevious, onPrevious)} />\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(!hasMore, onNext)} />\n </nav>\n );\n }\n const count = Math.max(1, Math.floor(pageCount));\n const current = Math.min(count, Math.max(1, Math.floor(page)));\n return (\n <nav ref={ref} aria-label={label} className={cn(\"flex items-center gap-4\", className)}>\n <IconButton icon={__icon_ArrowLeft01Icon} aria-label={previous} variant=\"secondary\" {...soft(current <= 1, () => onPageChange?.(current - 1))} />\n <span className=\"flex items-center gap-4 px-4\">\n {pageSlots(current, count).map((p, i) =>\n p === \"gap\" ? (\n <span key={`gap-${i}`} aria-hidden className=\"inline-flex h-32 min-w-40 items-center justify-center text-body text-fg-tertiary\">\n …\n </span>\n ) : (\n <button\n key={`slot-${i}`}\n type=\"button\"\n aria-current={p === current ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {page}\", { page: String(p) })}\n onClick={() => {\n if (p !== page) onPageChange?.(p);\n }}\n className={cn(\n \"relative inline-flex h-32 min-w-40 cursor-pointer items-center justify-center rounded-pill px-8 text-body font-medium tabular transition-control tap-target focus-ring-inset\",\n p === current ? \"bg-fill-2 text-fg\" : \"text-fg-secondary hover:bg-fill-1 hover:text-fg active:bg-fill-2\",\n )}\n >\n {p}\n </button>\n ),\n )}\n </span>\n <IconButton icon={__icon_ArrowRight01Icon} aria-label={next} variant=\"secondary\" {...soft(current >= count, () => onPageChange?.(current + 1))} />\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Pagination.displayName = \"Pagination\";\n\nconst LoadMore = /* @__PURE__ */ forwardRef<\n HTMLElement,\n { label: string; hasMore: boolean; loading: boolean | undefined; onLoadMore: (() => void) | undefined; className: string | undefined }\n>(function PaginationLoadMore({ label, hasMore, loading, onLoadMore, className }, ref) {\n const t = useUiText();\n const loadMore = t(\"pagination.loadMore\", \"Load more\");\n const [inside, setInside] = useState(false);\n const [ended, setEnded] = useState(false);\n const caption = useRef<HTMLParagraphElement>(null);\n if (hasMore && ended) setEnded(false);\n if (!hasMore && inside && !ended) setEnded(true);\n useLayoutEffect(() => {\n if (ended) caption.current?.focus();\n }, [ended]);\n if (!hasMore && !ended) return null;\n return (\n <nav\n ref={ref}\n aria-label={label}\n className={cn(\"flex items-center justify-center gap-12 py-12\", className)}\n onFocus={() => setInside(true)}\n onBlur={(e: FocusEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.relatedTarget)) setInside(false);\n }}\n >\n {hasMore ? (\n <Button variant=\"secondary\" size=\"sm\" loading={loading} onClick={onLoadMore} reserveLabels={[loadMore]}>\n {loadMore}\n </Button>\n ) : (\n <p ref={caption} tabIndex={-1} className=\"flex h-32 items-center text-small text-fg-secondary outline-none\">\n {t(\"pagination.allShown\", \"All rows shown\")}\n </p>\n )}\n </nav>\n );\n});\nif (process.env.NODE_ENV !== \"production\") LoadMore.displayName = \"Pagination.LoadMore\";\n"],"mappings":";;;;;;;;;AAOA,IAAaK,IAA4B,EACvC,SAAS;CACP,aAAa,EACX,SAAS,GACX;CACA,QAAQ,EAAE,SAAS,GAAG;CACtB,OAAO,EAAE,SAAS,GAAG;AACvB,EACF,GACaC,IAAoC,EAAE,SAAS,YAAY,GAgBlEC,IAAQ;AAEd,SAASC,EAAU,GAAc,GAAuC;CACtE,IAAMC,IAAQ,KAAK,IAAI,GAAG,KAAK,MAAMC,CAAS,CAAC,GACzCC,IAAU,KAAK,IAAIF,GAAO,KAAK,IAAI,GAAG,KAAK,MAAMG,CAAI,CAAC,CAAC;CAI7D,OAHIH,KAASF,IAAc,MAAM,KAAK,EAAE,QAAQE,EAAM,IAAI,GAAG,MAAMI,IAAI,CAAC,IACpEF,KAAW,IAAU;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAOF;CAAK,IACjDE,KAAWF,IAAQ,IAAU;EAAC;EAAG;EAAOA,IAAQ;EAAGA,IAAQ;EAAGA,IAAQ;EAAGA,IAAQ;EAAGA;CAAK,IACtF;EAAC;EAAG;EAAOE,IAAU;EAAGA;EAASA,IAAU;EAAG;EAAOF;CAAK;AACnE;AAEA,SAASK,EAAK,GAAkB,GAA+B;CAC7D,OAAO;EACL,GAAIC,IAAU,EAAE,iBAAiB,GAAK,IAAI,CAAC;EAC3C,eAAe;GACb,AAAKA,KAASC,IAAM;EACtB;CACF;AACF;AAEA,IAAaC,IAA6B,kBAAyC,SACjF,EAAE,aAAU,aAAa,YAAS,gBAAa,YAAS,eAAY,WAAQ,eAAY,UAAO,GAAG,eAAY,GAAG,iBAAc,gBAC/H,GACA;CACA,IAAMC,IAAIf,EAAU,GACdgB,IAAQD,EAAE,oBAAoB,YAAY,GAC1CE,IAAWF,EAAE,uBAAuB,eAAe,GACnDG,IAAOH,EAAE,mBAAmB,WAAW;CAE7C,IAAII,MAAY,aACd,OAAO,kBAACC,GAAD;EAAe;EAAY;EAAO,SAAS,CAAC,CAACC;EAAkB;EAAqB;EAAuB;CAAY,CAAA;CAEhI,IAAIF,MAAY,UAEd,OADI,CAACE,KAAW,CAACC,IAAoB,OAEnC,kBAAC,OAAD;EAAU;EAAK,cAAYN;EAAO,WAAWjB,EAAG,2BAA2BwB,CAAS;EAApF,UAAA,CACE,kBAACtB,GAAD;GAAY,MAAMJ;GAAwB,cAAYoB;GAAU,SAAQ;GAAY,GAAIN,EAAK,CAACW,GAAaG,CAAU;EAAI,CAAA,GACzH,kBAACxB,GAAD;GAAY,MAAMH;GAAyB,cAAYoB;GAAM,SAAQ;GAAY,GAAIP,EAAK,CAACU,GAASM,CAAM;EAAI,CAAA,CAC3G;;CAGT,IAAMrB,IAAQ,KAAK,IAAI,GAAG,KAAK,MAAMC,CAAS,CAAC,GACzCC,IAAU,KAAK,IAAIF,GAAO,KAAK,IAAI,GAAG,KAAK,MAAMG,CAAI,CAAC,CAAC;CAC7D,OACE,kBAAC,OAAD;EAAU;EAAK,cAAYO;EAAO,WAAWjB,EAAG,2BAA2BwB,CAAS;EAApF,UAAA;GACE,kBAACtB,GAAD;IAAY,MAAMJ;IAAwB,cAAYoB;IAAU,SAAQ;IAAY,GAAIN,EAAKH,KAAW,SAASoB,IAAepB,IAAU,CAAC,CAAC;GAAI,CAAA;GAChJ,kBAAC,QAAD;IAAM,WAAU;IACb,UAAAH,EAAUG,GAASF,CAAK,CAAC,CAAC,KAAK,GAAG,MACjCuB,MAAM,QACJ,kBAAC,QAAD;KAAuB,eAAA;KAAY,WAAU;KAAmF,UAAA;IAE1H,GAFK,OAAOnB,GAEZ,IAEN,kBAAC,UAAD;KAEE,MAAK;KACL,gBAAcmB,MAAMrB,IAAU,SAAS,KAAA;KACvC,cAAYO,EAAE,mBAAmB,eAAe,EAAE,MAAM,OAAOc,CAAC,EAAE,CAAC;KACnE,eAAe;MACb,AAAIA,MAAMpB,KAAMmB,IAAeC,CAAC;KAClC;KACA,WAAW9B,EACT,gLACA8B,MAAMrB,IAAU,sBAAsB,kEACxC;KAEC,UAAAqB;IACK,GAbD,QAAQnB,GAaP,CAEZ;GACI,CAAA;GACN,kBAACT,GAAD;IAAY,MAAMH;IAAyB,cAAYoB;IAAM,SAAQ;IAAY,GAAIP,EAAKH,KAAWF,SAAasB,IAAepB,IAAU,CAAC,CAAC;GAAI,CAAA;EAC9I;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc;AAEpE,IAAMY,IAA2B,kBAG/B,SAA4B,EAAE,UAAO,YAAS,YAAS,eAAY,gBAAa,GAAK;CACrF,IAAML,IAAIf,EAAU,GACd8B,IAAWf,EAAE,uBAAuB,WAAW,GAC/C,CAACgB,GAAQC,KAAaC,EAAS,EAAK,GACpC,CAACC,GAAOC,KAAYF,EAAS,EAAK,GAClCG,IAAUC,EAA6B,IAAI;CAOjD,OANIhB,KAAWa,KAAOC,EAAS,EAAK,GAChC,CAACd,KAAWU,KAAU,CAACG,KAAOC,EAAS,EAAI,GAC/CG,QAAsB;EACpB,AAAIJ,KAAOE,EAAQ,SAAS,MAAM;CACpC,GAAG,CAACF,CAAK,CAAC,GACN,CAACb,KAAW,CAACa,IAAc,OAE7B,kBAAC,OAAD;EACO;EACL,cAAYlB;EACZ,WAAWjB,EAAG,iDAAiDwB,CAAS;EACxE,eAAeS,EAAU,EAAI;EAC7B,SAAS,MAA+B;GACtC,AAAK,EAAE,cAAc,SAAS,EAAE,aAAa,KAAGA,EAAU,EAAK;EACjE;EAEC,UAAAX,IACC,kBAACkB,GAAD;GAAQ,SAAQ;GAAY,MAAK;GAAc;GAAS,SAASC;GAAY,eAAe,CAACV,CAAQ;GAClG,UAAAA;EACK,CAAA,IAER,kBAAC,KAAD;GAAG,KAAKM;GAAS,UAAU;GAAI,WAAU;GACtC,UAAArB,EAAE,uBAAuB,gBAAgB;EACzC,CAAA;CAEF,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
@@ -4,9 +4,9 @@ import { n as t, r as n } from "./portal-context-CTatR2Z8.js";
4
4
  import { i as r } from "./context-BELWW79w.js";
5
5
  import { t as i } from "./icon-CBzOwqrX.js";
6
6
  import { d as a, f as o, p as s } from "./tooltip-Tkm-urbi.js";
7
- import { t as c } from "./icon-button-Dfwpvmav.js";
8
- import { n as l } from "./select-BqjmQOqx.js";
9
- import { n as u } from "./command-list-CypqsC4T.js";
7
+ import { t as c } from "./icon-button-6kOn2zrP.js";
8
+ import { n as l } from "./select-UTdHKubp.js";
9
+ import { n as u } from "./command-list-BUmEaaBi.js";
10
10
  import { forwardRef as d, useState as f, useSyncExternalStore as p } from "react";
11
11
  import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
12
12
  import { ArrowDown01Icon as _, Cancel01Icon as v } from "@hugeicons/core-free-icons";
@@ -116,4 +116,4 @@ process.env.NODE_ENV !== "production" && (D.displayName = "PickerTrigger");
116
116
  //#endregion
117
117
  export { D as i, x as n, E as r, S as t };
118
118
 
119
- //# sourceMappingURL=picker-popover-1FHb1LQG.js.map
119
+ //# sourceMappingURL=picker-popover-PzVOo62-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker-popover-1FHb1LQG.js","names":["BaseDialog","__icon_Cancel01Icon","BasePopover","_Fragment","__icon_ArrowDown01Icon","cn","pageBoundary","usePortalContainer","useUiText","Icon","joinIds","showsText","useHiddenDescription","IconButton","KAESO_SELECT_VARIANTS","CommandListHeightContext","Fragment$1","KAESO_PICKER_POPOVER_VARIANTS","KAESO_PICKER_POPOVER_DEFAULT_VARIANTS","NARROW","subscribeNarrow","q","onChange","isNarrow","PickerPopover","t","container","narrow","useSyncExternalStore","change","onOpenChange","o","state","open","Dialog","trigger","title","Cancel01Icon","Popover","width","PickerTrigger","ariaLabel","describedBy","props","focused","setFocused","useState","held","disabled","empty","children","shows","placeholder","purpose","descriptions","onFocus","onBlur","onClickCapture","invalid","size","appearance","fullWidth","className","ArrowDown01Icon"],"sources":["../../src/components/command-list/picker-popover.tsx"],"sourcesContent":["import { forwardRef, useState, useSyncExternalStore, type ButtonHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowDown01Icon as __icon_ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { KAESO_SELECT_VARIANTS } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { joinIds, showsText, useHiddenDescription } from \"../../utils/hidden-description.js\";\nimport { CommandListHeightContext } from \"./command-list.js\";\n\nexport const KAESO_PICKER_POPOVER_VARIANTS = {\n width: {\n sm: { classes: \"w-320\" },\n md: { classes: \"w-400\" },\n lg: { classes: \"w-560\" },\n },\n} as const;\nexport const KAESO_PICKER_POPOVER_DEFAULT_VARIANTS = { width: \"md\" } as const;\n\nconst NARROW = \"(max-width: 767px)\";\nconst subscribeNarrow = (onChange: () => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n};\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\n\nexport interface PickerPopoverProps {\n trigger: ReactElement;\n title: string;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n width?: keyof typeof KAESO_PICKER_POPOVER_VARIANTS.width | undefined;\n align?: \"start\" | \"end\" | undefined;\n children: ReactNode;\n}\n\nexport const PickerPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, PickerPopoverProps>(function PickerPopover(\n { trigger, title, open, onOpenChange, width = \"md\", align = \"start\", children },\n ref,\n) {\n const t = useUiText();\n const container = usePortalContainer();\n const narrow = useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n const change = onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {};\n const state = open !== undefined ? { open } : {};\n if (narrow)\n return (\n <BaseDialog.Root {...state} {...change}>\n <BaseDialog.Trigger render={trigger} />\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className=\"fixed inset-0 z-50 bg-overlay opacity-50 backdrop-motion\" />\n <BaseDialog.Popup\n ref={ref}\n data-side=\"bottom\"\n className=\"fixed inset-safe-8 z-50 flex flex-col overflow-hidden rounded-sheet bg-raised text-fg shadow-dialog outline-none sheet-motion\"\n >\n <div className=\"flex min-h-60 shrink-0 items-center gap-12 px-24 py-12 hairline-b\">\n <BaseDialog.Title className=\"min-w-0 flex-1 text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</BaseDialog.Title>\n <BaseDialog.Close render={<IconButton icon={__icon_Cancel01Icon} aria-label={t(\"pickerPopover.close\", \"Close\")} tooltip={false} />} />\n </div>\n <CommandListHeightContext.Provider value=\"fill\">{children}</CommandListHeightContext.Provider>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n return (\n <BasePopover.Root {...state} {...change} modal={false}>\n <BasePopover.Trigger render={trigger} />\n <BasePopover.Portal container={container}>\n <BasePopover.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side=\"bottom\"\n align={align}\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BasePopover.Popup\n ref={ref}\n aria-label={title}\n className={cn(\n \"flex max-w-full-bleed-4 flex-col overflow-hidden rounded-popover bg-raised text-fg shadow-raised outline-none popup-motion\",\n KAESO_PICKER_POPOVER_VARIANTS.width[width].classes,\n )}\n >\n <CommandListHeightContext.Provider value=\"popover\">{children}</CommandListHeightContext.Provider>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerPopover.displayName = \"PickerPopover\";\n\nexport interface PickerTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n fullWidth?: boolean | undefined;\n invalid?: boolean | undefined;\n placeholder?: ReactNode | undefined;\n children?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const PickerTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, PickerTriggerProps>(function PickerTrigger(\n {\n appearance = \"default\",\n size = \"md\",\n fullWidth,\n invalid,\n placeholder,\n children,\n className,\n type = \"button\",\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n disabled,\n onFocus,\n onBlur,\n onClickCapture,\n ...props\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n // A natively disabled button that holds focus drops it to <body>; stay focusable until it blurs.\n const held = !!disabled && focused;\n const empty = children === undefined || children === null || children === false;\n const shows = showsText(empty ? placeholder : children);\n const purpose = useHiddenDescription(shows ? ariaLabel : undefined);\n const descriptions = joinIds(purpose.id, describedBy);\n return (\n <>\n <button\n ref={ref}\n type={type}\n data-picker=\"\"\n {...props}\n {...(held ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : { disabled })}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n onClickCapture={(e) => {\n if (held) {\n e.preventDefault();\n e.stopPropagation();\n }\n onClickCapture?.(e);\n }}\n {...(!shows && ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(descriptions ? { \"aria-describedby\": descriptions } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n className={cn(\n \"group/picker inline-flex min-w-0 cursor-pointer items-center justify-between rounded-pill font-medium whitespace-nowrap transition-control disabled:cursor-not-allowed\",\n KAESO_SELECT_VARIANTS.size[size].classes,\n KAESO_SELECT_VARIANTS.appearance[appearance].classes,\n invalid && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n className,\n )}\n >\n <span\n className={cn(\n \"flex min-w-0 flex-1 items-center truncate text-left group-disabled/picker:opacity-40\",\n empty ? \"font-regular text-fg-tertiary\" : \"group-disabled/picker:text-fg\",\n )}\n >\n {empty ? placeholder : children}\n </span>\n <span className=\"flex shrink-0 text-fg-tertiary group-disabled/picker:opacity-40\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerTrigger.displayName = \"PickerTrigger\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"picker-popover-PzVOo62-.js","names":["BaseDialog","__icon_Cancel01Icon","BasePopover","_Fragment","__icon_ArrowDown01Icon","cn","pageBoundary","usePortalContainer","useUiText","Icon","joinIds","showsText","useHiddenDescription","IconButton","KAESO_SELECT_VARIANTS","CommandListHeightContext","Fragment$1","KAESO_PICKER_POPOVER_VARIANTS","KAESO_PICKER_POPOVER_DEFAULT_VARIANTS","NARROW","subscribeNarrow","q","onChange","isNarrow","PickerPopover","t","container","narrow","useSyncExternalStore","change","onOpenChange","o","state","open","Dialog","trigger","title","Cancel01Icon","Popover","width","PickerTrigger","ariaLabel","describedBy","props","focused","setFocused","useState","held","disabled","empty","children","shows","placeholder","purpose","descriptions","onFocus","onBlur","onClickCapture","invalid","size","appearance","fullWidth","className","ArrowDown01Icon"],"sources":["../../src/components/command-list/picker-popover.tsx"],"sourcesContent":["import { forwardRef, useState, useSyncExternalStore, type ButtonHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowDown01Icon as __icon_ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { KAESO_SELECT_VARIANTS } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { joinIds, showsText, useHiddenDescription } from \"../../utils/hidden-description.js\";\nimport { CommandListHeightContext } from \"./command-list.js\";\n\nexport const KAESO_PICKER_POPOVER_VARIANTS = {\n width: {\n sm: { classes: \"w-320\" },\n md: { classes: \"w-400\" },\n lg: { classes: \"w-560\" },\n },\n} as const;\nexport const KAESO_PICKER_POPOVER_DEFAULT_VARIANTS = { width: \"md\" } as const;\n\nconst NARROW = \"(max-width: 767px)\";\nconst subscribeNarrow = (onChange: () => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n};\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\n\nexport interface PickerPopoverProps {\n trigger: ReactElement;\n title: string;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n width?: keyof typeof KAESO_PICKER_POPOVER_VARIANTS.width | undefined;\n align?: \"start\" | \"end\" | undefined;\n children: ReactNode;\n}\n\nexport const PickerPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, PickerPopoverProps>(function PickerPopover(\n { trigger, title, open, onOpenChange, width = \"md\", align = \"start\", children },\n ref,\n) {\n const t = useUiText();\n const container = usePortalContainer();\n const narrow = useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n const change = onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {};\n const state = open !== undefined ? { open } : {};\n if (narrow)\n return (\n <BaseDialog.Root {...state} {...change}>\n <BaseDialog.Trigger render={trigger} />\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className=\"fixed inset-0 z-50 bg-overlay opacity-50 backdrop-motion\" />\n <BaseDialog.Popup\n ref={ref}\n data-side=\"bottom\"\n className=\"fixed inset-safe-8 z-50 flex flex-col overflow-hidden rounded-sheet bg-raised text-fg shadow-dialog outline-none sheet-motion\"\n >\n <div className=\"flex min-h-60 shrink-0 items-center gap-12 px-24 py-12 hairline-b\">\n <BaseDialog.Title className=\"min-w-0 flex-1 text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</BaseDialog.Title>\n <BaseDialog.Close render={<IconButton icon={__icon_Cancel01Icon} aria-label={t(\"pickerPopover.close\", \"Close\")} tooltip={false} />} />\n </div>\n <CommandListHeightContext.Provider value=\"fill\">{children}</CommandListHeightContext.Provider>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n return (\n <BasePopover.Root {...state} {...change} modal={false}>\n <BasePopover.Trigger render={trigger} />\n <BasePopover.Portal container={container}>\n <BasePopover.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side=\"bottom\"\n align={align}\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BasePopover.Popup\n ref={ref}\n aria-label={title}\n className={cn(\n \"flex max-w-full-bleed-4 flex-col overflow-hidden rounded-popover bg-raised text-fg shadow-raised outline-none popup-motion\",\n KAESO_PICKER_POPOVER_VARIANTS.width[width].classes,\n )}\n >\n <CommandListHeightContext.Provider value=\"popover\">{children}</CommandListHeightContext.Provider>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerPopover.displayName = \"PickerPopover\";\n\nexport interface PickerTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n fullWidth?: boolean | undefined;\n invalid?: boolean | undefined;\n placeholder?: ReactNode | undefined;\n children?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const PickerTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, PickerTriggerProps>(function PickerTrigger(\n {\n appearance = \"default\",\n size = \"md\",\n fullWidth,\n invalid,\n placeholder,\n children,\n className,\n type = \"button\",\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n disabled,\n onFocus,\n onBlur,\n onClickCapture,\n ...props\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n // A natively disabled button that holds focus drops it to <body>; stay focusable until it blurs.\n const held = !!disabled && focused;\n const empty = children === undefined || children === null || children === false;\n const shows = showsText(empty ? placeholder : children);\n const purpose = useHiddenDescription(shows ? ariaLabel : undefined);\n const descriptions = joinIds(purpose.id, describedBy);\n return (\n <>\n <button\n ref={ref}\n type={type}\n data-picker=\"\"\n {...props}\n {...(held ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : { disabled })}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n onClickCapture={(e) => {\n if (held) {\n e.preventDefault();\n e.stopPropagation();\n }\n onClickCapture?.(e);\n }}\n {...(!shows && ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(descriptions ? { \"aria-describedby\": descriptions } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n className={cn(\n \"group/picker inline-flex min-w-0 cursor-pointer items-center justify-between rounded-pill font-medium whitespace-nowrap transition-control disabled:cursor-not-allowed\",\n KAESO_SELECT_VARIANTS.size[size].classes,\n KAESO_SELECT_VARIANTS.appearance[appearance].classes,\n invalid && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n className,\n )}\n >\n <span\n className={cn(\n \"flex min-w-0 flex-1 items-center truncate text-left group-disabled/picker:opacity-40\",\n empty ? \"font-regular text-fg-tertiary\" : \"group-disabled/picker:text-fg\",\n )}\n >\n {empty ? placeholder : children}\n </span>\n <span className=\"flex shrink-0 text-fg-tertiary group-disabled/picker:opacity-40\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerTrigger.displayName = \"PickerTrigger\";\n"],"mappings":"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"}
@@ -2,10 +2,10 @@
2
2
  import { t as e } from "./cn-BjnOAUrA.js";
3
3
  import { i as t } from "./context-BELWW79w.js";
4
4
  import { t as n } from "./icon-CBzOwqrX.js";
5
- import { n as r } from "./button-IblhXUyZ.js";
5
+ import { n as r } from "./button-DrmFgdIi.js";
6
6
  import { i } from "./popover-Bl5QYqnh.js";
7
7
  import { t as a } from "./calendar-Dc6_dl0f.js";
8
- import { n as o, r as s, t as c } from "./iso-field-DoqHBg8n.js";
8
+ import { n as o, r as s, t as c } from "./iso-field-BVOKAY4H.js";
9
9
  import { useId as l, useRef as u, useState as d, useSyncExternalStore as f } from "react";
10
10
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
11
11
  import { Tick02Icon as h } from "@hugeicons/core-free-icons";
@@ -157,4 +157,4 @@ function w({ range: f, preset: _, presets: v, onPick: y, onClose: w, weekStartsO
157
157
  //#endregion
158
158
  export { w as RangePopup };
159
159
 
160
- //# sourceMappingURL=range-popup-lGiZsG3s.js.map
160
+ //# sourceMappingURL=range-popup-Dt6Q0Ryw.js.map