@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.
- package/NOTICE.md +1 -1
- package/ai/component-guides.md +40 -6
- package/ai/component-registry.json +67 -5
- package/ai/component-registry.md +23 -5
- package/ai/icons.md +1 -1
- package/ai/tokens.md +1 -1
- package/dist/blocks/delete-resource.js +1 -1
- package/dist/blocks/pages.js +2 -2
- package/dist/blocks/resource-list.js +3 -3
- package/dist/chunks/{app-frame-CfJ7s3Q0.js → app-frame-B1FXVFYx.js} +5 -5
- package/dist/chunks/{app-frame-CfJ7s3Q0.js.map → app-frame-B1FXVFYx.js.map} +1 -1
- package/dist/chunks/{banner-B3DGLTBu.js → banner-BinTH032.js} +2 -2
- package/dist/chunks/{banner-B3DGLTBu.js.map → banner-BinTH032.js.map} +1 -1
- package/dist/chunks/{button-IblhXUyZ.js → button-DrmFgdIi.js} +2 -2
- package/dist/chunks/button-DrmFgdIi.js.map +1 -0
- package/dist/chunks/{checkbox-9tbimmF3.js → checkbox-ahl1SOqU.js} +2 -2
- package/dist/chunks/{checkbox-9tbimmF3.js.map → checkbox-ahl1SOqU.js.map} +1 -1
- package/dist/chunks/{code-block-KIvuE8jg.js → code-block-CE3H3nMu.js} +3 -3
- package/dist/chunks/{code-block-KIvuE8jg.js.map → code-block-CE3H3nMu.js.map} +1 -1
- package/dist/chunks/{code-block-64e-Cy1S.js → code-block-O_EPmMIQ.js} +2 -2
- package/dist/chunks/{code-block-64e-Cy1S.js.map → code-block-O_EPmMIQ.js.map} +1 -1
- package/dist/chunks/{combobox-DkcjkWc6.js → combobox-DghYPLVQ.js} +7 -3
- package/dist/chunks/combobox-DghYPLVQ.js.map +1 -0
- package/dist/chunks/{command-list-CypqsC4T.js → command-list-BUmEaaBi.js} +3 -3
- package/dist/chunks/{command-list-CypqsC4T.js.map → command-list-BUmEaaBi.js.map} +1 -1
- package/dist/chunks/{copy-button-CwU8t_9_.js → copy-button-DBPAA1g0.js} +2 -2
- package/dist/chunks/{copy-button-CwU8t_9_.js.map → copy-button-DBPAA1g0.js.map} +1 -1
- package/dist/chunks/{core-B0bULn-t.js → core-Cw3pNRp3.js} +2 -2
- package/dist/chunks/{core-B0bULn-t.js.map → core-Cw3pNRp3.js.map} +1 -1
- package/dist/chunks/{data-table-z7z6DqMJ.js → data-table-CGecI-FI.js} +6 -6
- package/dist/chunks/data-table-CGecI-FI.js.map +1 -0
- package/dist/chunks/{date-popup-DAnjptFt.js → date-popup-C6vVOOWF.js} +2 -2
- package/dist/chunks/{date-popup-DAnjptFt.js.map → date-popup-C6vVOOWF.js.map} +1 -1
- package/dist/chunks/{dialog-2zb6ClNR.js → dialog-s3_LUPBi.js} +4 -4
- package/dist/chunks/{dialog-2zb6ClNR.js.map → dialog-s3_LUPBi.js.map} +1 -1
- package/dist/chunks/{disclosure-BtYRTDO3.js → disclosure-3CIz2WZa.js} +2 -2
- package/dist/chunks/disclosure-3CIz2WZa.js.map +1 -0
- package/dist/chunks/{domain-BsM9UmAg.js → domain-CrQX3p6E.js} +2 -2
- package/dist/chunks/{domain-BsM9UmAg.js.map → domain-CrQX3p6E.js.map} +1 -1
- package/dist/chunks/{icon-button-Dfwpvmav.js → icon-button-6kOn2zrP.js} +2 -2
- package/dist/chunks/{icon-button-Dfwpvmav.js.map → icon-button-6kOn2zrP.js.map} +1 -1
- package/dist/chunks/identity-BwYixi8Q.js +520 -0
- package/dist/chunks/identity-BwYixi8Q.js.map +1 -0
- package/dist/chunks/{input-Bo5-UZg2.js → input-D1SeLe3X.js} +2 -2
- package/dist/chunks/{input-Bo5-UZg2.js.map → input-D1SeLe3X.js.map} +1 -1
- package/dist/chunks/{input-group-jPcK9T_a.js → input-group-BbxwEAUP.js} +2 -2
- package/dist/chunks/{input-group-jPcK9T_a.js.map → input-group-BbxwEAUP.js.map} +1 -1
- package/dist/chunks/{iso-field-DoqHBg8n.js → iso-field-BVOKAY4H.js} +2 -2
- package/dist/chunks/{iso-field-DoqHBg8n.js.map → iso-field-BVOKAY4H.js.map} +1 -1
- package/dist/chunks/{list-CU_AoVY3.js → list-o8wcuBOz.js} +3 -3
- package/dist/chunks/{list-CU_AoVY3.js.map → list-o8wcuBOz.js.map} +1 -1
- package/dist/chunks/{markdown-C565aBR7.js → markdown-BZKZi9d8.js} +4 -4
- package/dist/chunks/{markdown-C565aBR7.js.map → markdown-BZKZi9d8.js.map} +1 -1
- package/dist/chunks/{menu-Clvv6ftq.js → menu-BDce2kiw.js} +2 -2
- package/dist/chunks/{menu-Clvv6ftq.js.map → menu-BDce2kiw.js.map} +1 -1
- package/dist/chunks/{nav-sheet-Dt6JSvzX.js → nav-sheet-S7tagFJT.js} +3 -3
- package/dist/chunks/{nav-sheet-Dt6JSvzX.js.map → nav-sheet-S7tagFJT.js.map} +1 -1
- package/dist/chunks/{page-header-BQijP6Rp.js → page-header-DUaKLpK3.js} +2 -2
- package/dist/chunks/{page-header-BQijP6Rp.js.map → page-header-DUaKLpK3.js.map} +1 -1
- package/dist/chunks/{pagination-D7fAm8qg.js → pagination-D9hM6W2z.js} +3 -3
- package/dist/chunks/{pagination-D7fAm8qg.js.map → pagination-D9hM6W2z.js.map} +1 -1
- package/dist/chunks/{picker-popover-1FHb1LQG.js → picker-popover-PzVOo62-.js} +4 -4
- package/dist/chunks/{picker-popover-1FHb1LQG.js.map → picker-popover-PzVOo62-.js.map} +1 -1
- package/dist/chunks/{range-popup-lGiZsG3s.js → range-popup-Dt6Q0Ryw.js} +3 -3
- package/dist/chunks/{range-popup-lGiZsG3s.js.map → range-popup-Dt6Q0Ryw.js.map} +1 -1
- package/dist/chunks/{rights-B68ocZuq.js → rights-DAHTG_kH.js} +4 -4
- package/dist/chunks/{rights-B68ocZuq.js.map → rights-DAHTG_kH.js.map} +1 -1
- package/dist/chunks/{select-BqjmQOqx.js → select-UTdHKubp.js} +2 -2
- package/dist/chunks/{select-BqjmQOqx.js.map → select-UTdHKubp.js.map} +1 -1
- package/dist/chunks/{sidebar-Dq7oGOje.js → sidebar-BO1mnjVH.js} +3 -3
- package/dist/chunks/{sidebar-Dq7oGOje.js.map → sidebar-BO1mnjVH.js.map} +1 -1
- package/dist/chunks/{sidebar-menu-QSSNu1jJ.js → sidebar-menu-C0qJsQF5.js} +2 -2
- package/dist/chunks/{sidebar-menu-QSSNu1jJ.js.map → sidebar-menu-C0qJsQF5.js.map} +1 -1
- package/dist/chunks/styles-8fn_bHRP.js +21 -0
- package/dist/chunks/styles-8fn_bHRP.js.map +1 -0
- package/dist/chunks/{textarea-CO0HP6fK.js → textarea-CRmvC4jd.js} +3 -3
- package/dist/chunks/{textarea-CO0HP6fK.js.map → textarea-CRmvC4jd.js.map} +1 -1
- package/dist/chunks/{timeseries-nDviPxvQ.js → timeseries-CK86u7M0.js} +3 -3
- package/dist/chunks/{timeseries-nDviPxvQ.js.map → timeseries-CK86u7M0.js.map} +1 -1
- package/dist/components/app-frame.js +2 -2
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/charts/bar.js +2 -2
- package/dist/components/charts/donut.js +1 -1
- package/dist/components/charts/gauge.js +1 -1
- package/dist/components/charts/heatmap.js +1 -1
- package/dist/components/charts/sankey.js +2 -2
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-block.js +2 -2
- package/dist/components/collapsible.js +29 -30
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +1 -1
- package/dist/components/date-picker.js +2 -2
- package/dist/components/dialog.js +2 -2
- package/dist/components/display-options.js +2 -2
- package/dist/components/filter-chip.js +3 -3
- package/dist/components/filter-toggle.js +35 -0
- package/dist/components/filter-toggle.js.map +1 -0
- package/dist/components/icon-button.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/kaeso/conversation.js +2 -2
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +3 -3
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +1 -1
- package/dist/components/kaeso.js +9 -14
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/key-value.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +2 -2
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +9 -9
- package/dist/components/select.js +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/tabs.js +4 -4
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/theme-menu.js +2 -2
- package/dist/components/theme-select.js +1 -1
- package/dist/index.js +68 -67
- package/dist/kaeso.css +11 -12
- package/dist/styles.css +1 -1
- package/dist/types/components/combobox/combobox.d.ts +2 -0
- package/dist/types/components/filter-toggle/docs.d.ts +11 -0
- package/dist/types/components/filter-toggle/filter-toggle.d.ts +23 -0
- package/dist/types/components/filter-toggle/index.d.ts +1 -0
- package/dist/types/components/kaeso/docs.d.ts +1 -0
- package/dist/types/components/kaeso/identity.d.ts +1 -0
- package/dist/types/components/kaeso/provider-marks.d.ts +27 -2
- package/dist/types/components/menu/styles.d.ts +1 -1
- package/dist/types/components/tabs/tabs.d.ts +2 -2
- package/dist/types/index.d.ts +1 -0
- package/package.json +5 -5
- package/dist/chunks/button-IblhXUyZ.js.map +0 -1
- package/dist/chunks/combobox-DkcjkWc6.js.map +0 -1
- package/dist/chunks/data-table-z7z6DqMJ.js.map +0 -1
- package/dist/chunks/disclosure-BtYRTDO3.js.map +0 -1
- package/dist/chunks/identity-BQoh-UpW.js +0 -365
- package/dist/chunks/identity-BQoh-UpW.js.map +0 -1
- package/dist/chunks/styles-hkFkoBbi.js +0 -21
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
67
|
+
//# sourceMappingURL=nav-sheet-S7tagFJT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-sheet-
|
|
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-
|
|
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-
|
|
45
|
+
//# sourceMappingURL=page-header-DUaKLpK3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header-
|
|
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-
|
|
5
|
-
import { t as r } from "./icon-button-
|
|
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-
|
|
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":"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"}
|
|
@@ -4,9 +4,9 @@ import { n as t, r as n } from "./portal-context-CTatR2Z8.js";
|
|
|
4
4
|
import { i as r } from "./context-BELWW79w.js";
|
|
5
5
|
import { t as i } from "./icon-CBzOwqrX.js";
|
|
6
6
|
import { d as a, f as o, p as s } from "./tooltip-Tkm-urbi.js";
|
|
7
|
-
import { t as c } from "./icon-button-
|
|
8
|
-
import { n as l } from "./select-
|
|
9
|
-
import { n as u } from "./command-list-
|
|
7
|
+
import { t as c } from "./icon-button-6kOn2zrP.js";
|
|
8
|
+
import { n as l } from "./select-UTdHKubp.js";
|
|
9
|
+
import { n as u } from "./command-list-BUmEaaBi.js";
|
|
10
10
|
import { forwardRef as d, useState as f, useSyncExternalStore as p } from "react";
|
|
11
11
|
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
12
12
|
import { ArrowDown01Icon as _, Cancel01Icon as v } from "@hugeicons/core-free-icons";
|
|
@@ -116,4 +116,4 @@ process.env.NODE_ENV !== "production" && (D.displayName = "PickerTrigger");
|
|
|
116
116
|
//#endregion
|
|
117
117
|
export { D as i, x as n, E as r, S as t };
|
|
118
118
|
|
|
119
|
-
//# sourceMappingURL=picker-popover-
|
|
119
|
+
//# sourceMappingURL=picker-popover-PzVOo62-.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-popover-1FHb1LQG.js","names":["BaseDialog","__icon_Cancel01Icon","BasePopover","_Fragment","__icon_ArrowDown01Icon","cn","pageBoundary","usePortalContainer","useUiText","Icon","joinIds","showsText","useHiddenDescription","IconButton","KAESO_SELECT_VARIANTS","CommandListHeightContext","Fragment$1","KAESO_PICKER_POPOVER_VARIANTS","KAESO_PICKER_POPOVER_DEFAULT_VARIANTS","NARROW","subscribeNarrow","q","onChange","isNarrow","PickerPopover","t","container","narrow","useSyncExternalStore","change","onOpenChange","o","state","open","Dialog","trigger","title","Cancel01Icon","Popover","width","PickerTrigger","ariaLabel","describedBy","props","focused","setFocused","useState","held","disabled","empty","children","shows","placeholder","purpose","descriptions","onFocus","onBlur","onClickCapture","invalid","size","appearance","fullWidth","className","ArrowDown01Icon"],"sources":["../../src/components/command-list/picker-popover.tsx"],"sourcesContent":["import { forwardRef, useState, useSyncExternalStore, type ButtonHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowDown01Icon as __icon_ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { KAESO_SELECT_VARIANTS } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { joinIds, showsText, useHiddenDescription } from \"../../utils/hidden-description.js\";\nimport { CommandListHeightContext } from \"./command-list.js\";\n\nexport const KAESO_PICKER_POPOVER_VARIANTS = {\n width: {\n sm: { classes: \"w-320\" },\n md: { classes: \"w-400\" },\n lg: { classes: \"w-560\" },\n },\n} as const;\nexport const KAESO_PICKER_POPOVER_DEFAULT_VARIANTS = { width: \"md\" } as const;\n\nconst NARROW = \"(max-width: 767px)\";\nconst subscribeNarrow = (onChange: () => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n};\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\n\nexport interface PickerPopoverProps {\n trigger: ReactElement;\n title: string;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n width?: keyof typeof KAESO_PICKER_POPOVER_VARIANTS.width | undefined;\n align?: \"start\" | \"end\" | undefined;\n children: ReactNode;\n}\n\nexport const PickerPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, PickerPopoverProps>(function PickerPopover(\n { trigger, title, open, onOpenChange, width = \"md\", align = \"start\", children },\n ref,\n) {\n const t = useUiText();\n const container = usePortalContainer();\n const narrow = useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n const change = onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {};\n const state = open !== undefined ? { open } : {};\n if (narrow)\n return (\n <BaseDialog.Root {...state} {...change}>\n <BaseDialog.Trigger render={trigger} />\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className=\"fixed inset-0 z-50 bg-overlay opacity-50 backdrop-motion\" />\n <BaseDialog.Popup\n ref={ref}\n data-side=\"bottom\"\n className=\"fixed inset-safe-8 z-50 flex flex-col overflow-hidden rounded-sheet bg-raised text-fg shadow-dialog outline-none sheet-motion\"\n >\n <div className=\"flex min-h-60 shrink-0 items-center gap-12 px-24 py-12 hairline-b\">\n <BaseDialog.Title className=\"min-w-0 flex-1 text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</BaseDialog.Title>\n <BaseDialog.Close render={<IconButton icon={__icon_Cancel01Icon} aria-label={t(\"pickerPopover.close\", \"Close\")} tooltip={false} />} />\n </div>\n <CommandListHeightContext.Provider value=\"fill\">{children}</CommandListHeightContext.Provider>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n return (\n <BasePopover.Root {...state} {...change} modal={false}>\n <BasePopover.Trigger render={trigger} />\n <BasePopover.Portal container={container}>\n <BasePopover.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side=\"bottom\"\n align={align}\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BasePopover.Popup\n ref={ref}\n aria-label={title}\n className={cn(\n \"flex max-w-full-bleed-4 flex-col overflow-hidden rounded-popover bg-raised text-fg shadow-raised outline-none popup-motion\",\n KAESO_PICKER_POPOVER_VARIANTS.width[width].classes,\n )}\n >\n <CommandListHeightContext.Provider value=\"popover\">{children}</CommandListHeightContext.Provider>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerPopover.displayName = \"PickerPopover\";\n\nexport interface PickerTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n fullWidth?: boolean | undefined;\n invalid?: boolean | undefined;\n placeholder?: ReactNode | undefined;\n children?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const PickerTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, PickerTriggerProps>(function PickerTrigger(\n {\n appearance = \"default\",\n size = \"md\",\n fullWidth,\n invalid,\n placeholder,\n children,\n className,\n type = \"button\",\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n disabled,\n onFocus,\n onBlur,\n onClickCapture,\n ...props\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n // A natively disabled button that holds focus drops it to <body>; stay focusable until it blurs.\n const held = !!disabled && focused;\n const empty = children === undefined || children === null || children === false;\n const shows = showsText(empty ? placeholder : children);\n const purpose = useHiddenDescription(shows ? ariaLabel : undefined);\n const descriptions = joinIds(purpose.id, describedBy);\n return (\n <>\n <button\n ref={ref}\n type={type}\n data-picker=\"\"\n {...props}\n {...(held ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : { disabled })}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n onClickCapture={(e) => {\n if (held) {\n e.preventDefault();\n e.stopPropagation();\n }\n onClickCapture?.(e);\n }}\n {...(!shows && ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(descriptions ? { \"aria-describedby\": descriptions } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n className={cn(\n \"group/picker inline-flex min-w-0 cursor-pointer items-center justify-between rounded-pill font-medium whitespace-nowrap transition-control disabled:cursor-not-allowed\",\n KAESO_SELECT_VARIANTS.size[size].classes,\n KAESO_SELECT_VARIANTS.appearance[appearance].classes,\n invalid && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n className,\n )}\n >\n <span\n className={cn(\n \"flex min-w-0 flex-1 items-center truncate text-left group-disabled/picker:opacity-40\",\n empty ? \"font-regular text-fg-tertiary\" : \"group-disabled/picker:text-fg\",\n )}\n >\n {empty ? placeholder : children}\n </span>\n <span className=\"flex shrink-0 text-fg-tertiary group-disabled/picker:opacity-40\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerTrigger.displayName = \"PickerTrigger\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker-popover-PzVOo62-.js","names":["BaseDialog","__icon_Cancel01Icon","BasePopover","_Fragment","__icon_ArrowDown01Icon","cn","pageBoundary","usePortalContainer","useUiText","Icon","joinIds","showsText","useHiddenDescription","IconButton","KAESO_SELECT_VARIANTS","CommandListHeightContext","Fragment$1","KAESO_PICKER_POPOVER_VARIANTS","KAESO_PICKER_POPOVER_DEFAULT_VARIANTS","NARROW","subscribeNarrow","q","onChange","isNarrow","PickerPopover","t","container","narrow","useSyncExternalStore","change","onOpenChange","o","state","open","Dialog","trigger","title","Cancel01Icon","Popover","width","PickerTrigger","ariaLabel","describedBy","props","focused","setFocused","useState","held","disabled","empty","children","shows","placeholder","purpose","descriptions","onFocus","onBlur","onClickCapture","invalid","size","appearance","fullWidth","className","ArrowDown01Icon"],"sources":["../../src/components/command-list/picker-popover.tsx"],"sourcesContent":["import { forwardRef, useState, useSyncExternalStore, type ButtonHTMLAttributes, type ReactElement, type ReactNode } from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowDown01Icon as __icon_ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { KAESO_SELECT_VARIANTS } from \"../select/select.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { joinIds, showsText, useHiddenDescription } from \"../../utils/hidden-description.js\";\nimport { CommandListHeightContext } from \"./command-list.js\";\n\nexport const KAESO_PICKER_POPOVER_VARIANTS = {\n width: {\n sm: { classes: \"w-320\" },\n md: { classes: \"w-400\" },\n lg: { classes: \"w-560\" },\n },\n} as const;\nexport const KAESO_PICKER_POPOVER_DEFAULT_VARIANTS = { width: \"md\" } as const;\n\nconst NARROW = \"(max-width: 767px)\";\nconst subscribeNarrow = (onChange: () => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const q = window.matchMedia(NARROW);\n q.addEventListener(\"change\", onChange);\n return () => q.removeEventListener(\"change\", onChange);\n};\nconst isNarrow = () => typeof window !== \"undefined\" && !!window.matchMedia?.(NARROW).matches;\n\nexport interface PickerPopoverProps {\n trigger: ReactElement;\n title: string;\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n width?: keyof typeof KAESO_PICKER_POPOVER_VARIANTS.width | undefined;\n align?: \"start\" | \"end\" | undefined;\n children: ReactNode;\n}\n\nexport const PickerPopover = /* @__PURE__ */ forwardRef<HTMLDivElement, PickerPopoverProps>(function PickerPopover(\n { trigger, title, open, onOpenChange, width = \"md\", align = \"start\", children },\n ref,\n) {\n const t = useUiText();\n const container = usePortalContainer();\n const narrow = useSyncExternalStore(subscribeNarrow, isNarrow, () => false);\n const change = onOpenChange ? { onOpenChange: (o: boolean) => onOpenChange(o) } : {};\n const state = open !== undefined ? { open } : {};\n if (narrow)\n return (\n <BaseDialog.Root {...state} {...change}>\n <BaseDialog.Trigger render={trigger} />\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className=\"fixed inset-0 z-50 bg-overlay opacity-50 backdrop-motion\" />\n <BaseDialog.Popup\n ref={ref}\n data-side=\"bottom\"\n className=\"fixed inset-safe-8 z-50 flex flex-col overflow-hidden rounded-sheet bg-raised text-fg shadow-dialog outline-none sheet-motion\"\n >\n <div className=\"flex min-h-60 shrink-0 items-center gap-12 px-24 py-12 hairline-b\">\n <BaseDialog.Title className=\"min-w-0 flex-1 text-title-sm font-semibold text-fg text-balance wrap-anywhere\">{title}</BaseDialog.Title>\n <BaseDialog.Close render={<IconButton icon={__icon_Cancel01Icon} aria-label={t(\"pickerPopover.close\", \"Close\")} tooltip={false} />} />\n </div>\n <CommandListHeightContext.Provider value=\"fill\">{children}</CommandListHeightContext.Provider>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n return (\n <BasePopover.Root {...state} {...change} modal={false}>\n <BasePopover.Trigger render={trigger} />\n <BasePopover.Portal container={container}>\n <BasePopover.Positioner\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n side=\"bottom\"\n align={align}\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BasePopover.Popup\n ref={ref}\n aria-label={title}\n className={cn(\n \"flex max-w-full-bleed-4 flex-col overflow-hidden rounded-popover bg-raised text-fg shadow-raised outline-none popup-motion\",\n KAESO_PICKER_POPOVER_VARIANTS.width[width].classes,\n )}\n >\n <CommandListHeightContext.Provider value=\"popover\">{children}</CommandListHeightContext.Provider>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerPopover.displayName = \"PickerPopover\";\n\nexport interface PickerTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n appearance?: keyof typeof KAESO_SELECT_VARIANTS.appearance | undefined;\n size?: keyof typeof KAESO_SELECT_VARIANTS.size | undefined;\n fullWidth?: boolean | undefined;\n invalid?: boolean | undefined;\n placeholder?: ReactNode | undefined;\n children?: ReactNode | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const PickerTrigger = /* @__PURE__ */ forwardRef<HTMLButtonElement, PickerTriggerProps>(function PickerTrigger(\n {\n appearance = \"default\",\n size = \"md\",\n fullWidth,\n invalid,\n placeholder,\n children,\n className,\n type = \"button\",\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n disabled,\n onFocus,\n onBlur,\n onClickCapture,\n ...props\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n // A natively disabled button that holds focus drops it to <body>; stay focusable until it blurs.\n const held = !!disabled && focused;\n const empty = children === undefined || children === null || children === false;\n const shows = showsText(empty ? placeholder : children);\n const purpose = useHiddenDescription(shows ? ariaLabel : undefined);\n const descriptions = joinIds(purpose.id, describedBy);\n return (\n <>\n <button\n ref={ref}\n type={type}\n data-picker=\"\"\n {...props}\n {...(held ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : { disabled })}\n onFocus={(e) => {\n setFocused(true);\n onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n onBlur?.(e);\n }}\n onClickCapture={(e) => {\n if (held) {\n e.preventDefault();\n e.stopPropagation();\n }\n onClickCapture?.(e);\n }}\n {...(!shows && ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(descriptions ? { \"aria-describedby\": descriptions } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n className={cn(\n \"group/picker inline-flex min-w-0 cursor-pointer items-center justify-between rounded-pill font-medium whitespace-nowrap transition-control disabled:cursor-not-allowed\",\n KAESO_SELECT_VARIANTS.size[size].classes,\n KAESO_SELECT_VARIANTS.appearance[appearance].classes,\n invalid && appearance !== \"default\" && \"ring-invalid\",\n fullWidth && \"w-full\",\n className,\n )}\n >\n <span\n className={cn(\n \"flex min-w-0 flex-1 items-center truncate text-left group-disabled/picker:opacity-40\",\n empty ? \"font-regular text-fg-tertiary\" : \"group-disabled/picker:text-fg\",\n )}\n >\n {empty ? placeholder : children}\n </span>\n <span className=\"flex shrink-0 text-fg-tertiary group-disabled/picker:opacity-40\">\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") PickerTrigger.displayName = \"PickerTrigger\";\n"],"mappings":";;;;;;;;;;;;;;;AAaA,IAAaiB,IAAgC,EAC3C,OAAO;CACL,IAAI,EAAE,SAAS,QAAQ;CACvB,IAAI,EAAE,SAAS,QAAQ;CACvB,IAAI,EAAE,SAAS,QAAQ;AACzB,EACF,GACaC,IAAwC,EAAE,OAAO,KAAK,GAE7DC,IAAS,sBACTC,KAAmB,MAAyB;CAChD,IAAI,OAAO,SAAW,OAAe,CAAC,OAAO,YAAY,aAAa,CAAC;CACvE,IAAMC,IAAI,OAAO,WAAWF,CAAM;CAElC,OADAE,EAAE,iBAAiB,UAAUC,CAAQ,SACxBD,EAAE,oBAAoB,UAAUC,CAAQ;AACvD,GACMC,UAAiB,OAAO,SAAW,OAAe,CAAC,CAAC,OAAO,aAAaJ,CAAM,CAAC,CAAC,SAYzEK,IAAgC,kBAA+C,SAC1F,EAAE,YAAS,UAAO,SAAM,iBAAc,WAAQ,MAAM,WAAQ,SAAS,eACrE,GACA;CACA,IAAMC,IAAIjB,EAAU,GACdkB,IAAYnB,EAAmB,GAC/BoB,IAASC,EAAqBR,GAAiBG,SAAgB,EAAK,GACpEM,IAASC,IAAe,EAAE,eAAe,MAAeA,EAAaC,CAAC,EAAE,IAAI,CAAC,GAC7EC,IAAQC,MAAS,KAAA,IAAuB,CAAC,IAAZ,EAAE,QAAK;CAqB1C,OApBIN,IAEA,kBAAC3B,EAAW,MAAZ;EAAiB,GAAIgC;EAAO,GAAIH;EAAhC,UAAA,CACE,kBAAC7B,EAAW,SAAZ,EAAoB,QAAQmC,EAAU,CAAA,GACtC,kBAACnC,EAAW,QAAZ;GAA8B;GAA9B,UAAA,CACE,kBAACA,EAAW,UAAZ,EAAqB,WAAU,2DAA4D,CAAA,GAC3F,kBAACA,EAAW,OAAZ;IACO;IACL,aAAU;IACV,WAAU;IAHZ,UAAA,CAKE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAACA,EAAW,OAAZ;MAAkB,WAAU;MAAiF,UAAAoC;KAAwB,CAAA,GACrI,kBAACpC,EAAW,OAAZ,EAAkB,QAAQ,kBAACa,GAAD;MAAY,MAAMZ;MAAqB,cAAYwB,EAAE,uBAAuB,OAAO;MAAG,SAAS;KAAQ,CAAA,EAAI,CAAA,CAClI;IACL,CAAA,GAAA,kBAACV,EAAyB,UAA1B;KAAmC,OAAM;KAAQ;IAA4C,CAAA,CAC7E;GACD,CAAA,CAAA;EACJ,CAAA,CAAA;C,KAGnB,kBAACb,EAAY,MAAb;EAAkB,GAAI8B;EAAO,GAAIH;EAAQ,OAAO;EAAhD,UAAA,CACE,kBAAC3B,EAAY,SAAb,EAAqB,QAAQiC,EAAU,CAAA,GACvC,kBAACjC,EAAY,QAAb;GAA+B;GAC7B,UAAA,kBAACA,EAAY,YAAb;IACE,gBAAe;IACf,mBAAmBI,EAAa;IAChC,MAAK;IACE;IACP,YAAY;IACZ,kBAAkB;IAClB,WAAU;IAEV,UAAA,kBAACJ,EAAY,OAAb;KACO;KACL,cAAYkC;KACZ,WAAW/B,EACT,8HACAY,EAA8B,MAAMsB,EAAM,CAAC,OAC7C;KAEA,UAAA,kBAACxB,EAAyB,UAA1B;MAAmC,OAAM;MAAW;KAA4C,CAAA;IAC/E,CAAA;GACG,CAAA;EACN,CAAA,CACJ;;AAEtB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAc,cAAc;AAavE,IAAayB,IAAgC,kBAAkD,SAC7F,EACE,gBAAa,WACb,UAAO,MACP,cACA,YACA,gBACA,aACA,cACA,UAAO,UACP,cAAcC,GACd,oBAAoBC,GACpB,aACA,YACA,WACA,mBACA,GAAGC,KAEL,GACA;CACA,IAAM,CAACC,GAASC,KAAcC,EAAS,EAAK,GAEtCC,IAAO,CAAC,CAACC,KAAYJ,GACrBK,IAAQC,KAAuC,QAAQA,MAAa,IACpEC,IAAQxC,EAAUsC,IAAQG,IAAcF,CAAQ,GAChDG,IAAUzC,EAAqBuC,IAAQV,IAAY,KAAA,CAAS,GAC5Da,IAAe5C,EAAQ2C,EAAQ,IAAIX,CAAW;CACpD,OACE,kBAAAvC,GAAA,EAAA,UAAA,CACE,kBAAC,UAAD;EACO;EACC;EACN,eAAY;EACZ,GAAIwC;EACJ,GAAKI,IAAO;GAAE,iBAAiB;GAAM,iBAAiB;EAAG,IAAI,EAAE,YAAS;EACxE,UAAU,MAAM;GAEd,AADAF,EAAW,EAAI,GACfU,IAAU,CAAC;EACb;EACA,SAAS,MAAM;GAEb,AADAV,EAAW,EAAK,GAChBW,IAAS,CAAC;EACZ;EACA,iBAAiB,MAAM;GAKrB,AAJIT,MACF,EAAE,eAAe,GACjB,EAAE,gBAAgB,IAEpBU,IAAiB,CAAC;EACpB;EACA,GAAK,CAACN,KAASV,IAAY,EAAE,cAAcA,EAAU,IAAI,CAAC;EAC1D,GAAKa,IAAe,EAAE,oBAAoBA,EAAa,IAAI,CAAC;EAC5D,GAAKI,IAAU,EAAE,gBAAgB,GAAK,IAAI,CAAC;EAC3C,WAAWrD,EACT,0KACAS,EAAsB,KAAK6C,EAAK,CAAC,SACjC7C,EAAsB,WAAW8C,EAAW,CAAC,SAC7CF,KAAWE,MAAe,aAAa,gBACvCC,KAAa,UACbC,CACF;EA/BF,UAAA,CAiCE,kBAAC,QAAD;GACE,WAAWzD,EACT,wFACA4C,IAAQ,kCAAkC,+BAC5C;GAEC,UAAAA,IAAQG,IAAcF;EACnB,CAAA,GACN,kBAAC,QAAD;GAAM,WAAU;GACd,UAAA,kBAACzC,GAAD;IAAM,MAAML;IAAwB,MAAK;GAAM,CAAA;EAC3C,CAAA,CACA;CACP,CAAA,GAAAiD,EAAQ,IACT,EAAA,CAAA;AAEN,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAc,cAAc"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { t as e } from "./cn-BjnOAUrA.js";
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
4
|
import { t as n } from "./icon-CBzOwqrX.js";
|
|
5
|
-
import { n as r } from "./button-
|
|
5
|
+
import { n as r } from "./button-DrmFgdIi.js";
|
|
6
6
|
import { i } from "./popover-Bl5QYqnh.js";
|
|
7
7
|
import { t as a } from "./calendar-Dc6_dl0f.js";
|
|
8
|
-
import { n as o, r as s, t as c } from "./iso-field-
|
|
8
|
+
import { n as o, r as s, t as c } from "./iso-field-BVOKAY4H.js";
|
|
9
9
|
import { useId as l, useRef as u, useState as d, useSyncExternalStore as f } from "react";
|
|
10
10
|
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
11
11
|
import { Tick02Icon as h } from "@hugeicons/core-free-icons";
|
|
@@ -157,4 +157,4 @@ function w({ range: f, preset: _, presets: v, onPick: y, onClose: w, weekStartsO
|
|
|
157
157
|
//#endregion
|
|
158
158
|
export { w as RangePopup };
|
|
159
159
|
|
|
160
|
-
//# sourceMappingURL=range-popup-
|
|
160
|
+
//# sourceMappingURL=range-popup-Dt6Q0Ryw.js.map
|