@logicplanes/kaeso-ui 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +1 -1
- package/ai/component-guides.md +283 -21
- package/ai/component-registry.json +528 -25
- package/ai/component-registry.md +135 -25
- package/ai/icons.md +3 -3
- package/ai/tokens.md +1 -1
- package/dist/blocks/delete-resource.js +15 -14
- package/dist/blocks/delete-resource.js.map +1 -1
- package/dist/blocks/pages.js +2 -2
- package/dist/blocks/resource-list.js +41 -40
- package/dist/blocks/resource-list.js.map +1 -1
- package/dist/chunks/agent-avatar-0pdBTWkR.js +171 -0
- package/dist/chunks/agent-avatar-0pdBTWkR.js.map +1 -0
- package/dist/chunks/{app-frame-C8csevkL.js → app-frame-DogGRmsu.js} +22 -21
- package/dist/chunks/app-frame-DogGRmsu.js.map +1 -0
- package/dist/chunks/{banner-Cb8OWnqJ.js → banner-BA2ALw9M.js} +2 -2
- package/dist/chunks/{banner-Cb8OWnqJ.js.map → banner-BA2ALw9M.js.map} +1 -1
- package/dist/chunks/{button-Dzu7_csE.js → button-CzuxqawA.js} +3 -3
- package/dist/chunks/{button-Dzu7_csE.js.map → button-CzuxqawA.js.map} +1 -1
- package/dist/chunks/{calendar--YemJsv4.js → calendar-BWaf2MXc.js} +57 -41
- package/dist/chunks/calendar-BWaf2MXc.js.map +1 -0
- package/dist/chunks/{checkbox-CDfC6E-M.js → checkbox-CQjwCPkc.js} +11 -9
- package/dist/chunks/checkbox-CQjwCPkc.js.map +1 -0
- package/dist/chunks/{code-block-U5fCqwgC.js → code-block-D5A-CGXG.js} +2 -2
- package/dist/chunks/{code-block-U5fCqwgC.js.map → code-block-D5A-CGXG.js.map} +1 -1
- package/dist/chunks/combobox-DjDI7SUC.js +319 -0
- package/dist/chunks/combobox-DjDI7SUC.js.map +1 -0
- package/dist/chunks/{command-list-0RR4DpUe.js → command-list-C2Y7V_lt.js} +2 -2
- package/dist/chunks/{command-list-0RR4DpUe.js.map → command-list-C2Y7V_lt.js.map} +1 -1
- package/dist/chunks/{copy-button-7-irieJw.js → copy-button-FJvPJn72.js} +3 -3
- package/dist/chunks/{copy-button-7-irieJw.js.map → copy-button-FJvPJn72.js.map} +1 -1
- package/dist/chunks/{core-Bl9NrBLS.js → core-BYns5ytV.js} +145 -139
- package/dist/chunks/core-BYns5ytV.js.map +1 -0
- package/dist/chunks/{date-popup-RQkqhko4.js → date-popup-CPA_zt6o.js} +4 -4
- package/dist/chunks/{date-popup-RQkqhko4.js.map → date-popup-CPA_zt6o.js.map} +1 -1
- package/dist/chunks/{de-BnNQtBSV.js → de-CPXJh9cq.js} +3 -1
- package/dist/chunks/de-CPXJh9cq.js.map +1 -0
- package/dist/chunks/dialog-Cg9A_6SF.js +383 -0
- package/dist/chunks/dialog-Cg9A_6SF.js.map +1 -0
- package/dist/chunks/icon-DVooQfk4.js +94 -0
- package/dist/chunks/icon-DVooQfk4.js.map +1 -0
- package/dist/chunks/{icon-button-CPYR21Sz.js → icon-button-CrdF_eMG.js} +3 -3
- package/dist/chunks/{icon-button-CPYR21Sz.js.map → icon-button-CrdF_eMG.js.map} +1 -1
- package/dist/chunks/{identity-DPuTkMsa.js → identity-BmhQ6BQ-.js} +15 -15
- package/dist/chunks/identity-BmhQ6BQ-.js.map +1 -0
- package/dist/chunks/{input-TyLIaQ5k.js → input-2VJuj_M4.js} +10 -5
- package/dist/chunks/input-2VJuj_M4.js.map +1 -0
- package/dist/chunks/{input-group-CUSNsQjQ.js → input-group-DQ_4DoXg.js} +2 -2
- package/dist/chunks/{input-group-CUSNsQjQ.js.map → input-group-DQ_4DoXg.js.map} +1 -1
- package/dist/chunks/{inset-BnBj8NJV.js → inset-BUzyXLK4.js} +14 -4
- package/dist/chunks/inset-BUzyXLK4.js.map +1 -0
- package/dist/chunks/{iso-field-CWbxlll-.js → iso-field-B2rTwiBo.js} +2 -2
- package/dist/chunks/{iso-field-CWbxlll-.js.map → iso-field-B2rTwiBo.js.map} +1 -1
- package/dist/chunks/{link-B2I55xg9.js → link-KWI7PevW.js} +2 -2
- package/dist/chunks/{link-B2I55xg9.js.map → link-KWI7PevW.js.map} +1 -1
- package/dist/chunks/link-provider-cvl8lSTT.js +29 -0
- package/dist/chunks/link-provider-cvl8lSTT.js.map +1 -0
- package/dist/chunks/{list-CkOozrVY.js → list-M1csq-d4.js} +18 -16
- package/dist/chunks/{list-CkOozrVY.js.map → list-M1csq-d4.js.map} +1 -1
- package/dist/chunks/{markdown-BEgwZFlu.js → markdown-DULktoTK.js} +5 -5
- package/dist/chunks/{markdown-BEgwZFlu.js.map → markdown-DULktoTK.js.map} +1 -1
- package/dist/chunks/{menu-fl_QQb38.js → menu-DEmBfdPm.js} +29 -26
- package/dist/chunks/menu-DEmBfdPm.js.map +1 -0
- package/dist/chunks/nav-sheet-CzgIwgAm.js +60 -0
- package/dist/chunks/nav-sheet-CzgIwgAm.js.map +1 -0
- package/dist/chunks/{page-header-DjUMDG69.js → page-header-DL2y2iZp.js} +2 -2
- package/dist/chunks/{page-header-DjUMDG69.js.map → page-header-DL2y2iZp.js.map} +1 -1
- package/dist/chunks/{pagination-BaY8jdli.js → pagination-Cn_qF4cg.js} +3 -3
- package/dist/chunks/{pagination-BaY8jdli.js.map → pagination-Cn_qF4cg.js.map} +1 -1
- package/dist/chunks/{picker-popover-DShea4b8.js → picker-popover-BxyU1U9F.js} +14 -13
- package/dist/chunks/{picker-popover-DShea4b8.js.map → picker-popover-BxyU1U9F.js.map} +1 -1
- package/dist/chunks/{popover-CFMwaeIP.js → popover-DNN4S47w.js} +2 -2
- package/dist/chunks/{popover-CFMwaeIP.js.map → popover-DNN4S47w.js.map} +1 -1
- package/dist/chunks/portal-context-BBbzDKmY.js.map +1 -1
- package/dist/chunks/{radio-Yl0nO-Sj.js → radio-CDDFpdtL.js} +4 -4
- package/dist/chunks/{radio-Yl0nO-Sj.js.map → radio-CDDFpdtL.js.map} +1 -1
- package/dist/chunks/{range-popup-CkhsK3wI.js → range-popup-CRyWYUB1.js} +5 -5
- package/dist/chunks/{range-popup-CkhsK3wI.js.map → range-popup-CRyWYUB1.js.map} +1 -1
- package/dist/chunks/{rights-BlQx9C_j.js → rights-Cyp0Pzp-.js} +5 -5
- package/dist/chunks/{rights-BlQx9C_j.js.map → rights-Cyp0Pzp-.js.map} +1 -1
- package/dist/chunks/{segmented-C97zvDR1.js → segmented-CErcoxwi.js} +2 -2
- package/dist/chunks/{segmented-C97zvDR1.js.map → segmented-CErcoxwi.js.map} +1 -1
- package/dist/chunks/{sidebar-DtFlejU7.js → sidebar-3r1ZRXlN.js} +253 -235
- package/dist/chunks/sidebar-3r1ZRXlN.js.map +1 -0
- package/dist/chunks/{sidebar-menu-CxQbGwyj.js → sidebar-menu-BN3jkTlK.js} +2 -2
- package/dist/chunks/{sidebar-menu-CxQbGwyj.js.map → sidebar-menu-BN3jkTlK.js.map} +1 -1
- package/dist/chunks/{switch-b-VkStWj.js → switch-BNMq_kGt.js} +2 -2
- package/dist/chunks/{switch-b-VkStWj.js.map → switch-BNMq_kGt.js.map} +1 -1
- package/dist/chunks/{tag-DNdX1XRR.js → tag-D_M1s2qS.js} +2 -2
- package/dist/chunks/{tag-DNdX1XRR.js.map → tag-D_M1s2qS.js.map} +1 -1
- package/dist/chunks/{text-DCGGNqTM.js → text-CIXH8rmT.js} +2 -2
- package/dist/chunks/{text-DCGGNqTM.js.map → text-CIXH8rmT.js.map} +1 -1
- package/dist/chunks/{textarea-CT2S2JVM.js → textarea--4FRL3Pb.js} +3 -3
- package/dist/chunks/{textarea-CT2S2JVM.js.map → textarea--4FRL3Pb.js.map} +1 -1
- package/dist/chunks/theme-provider-DJhORMlc.js.map +1 -1
- package/dist/chunks/{timeseries-B-8OfeZm.js → timeseries-D1xjRXfk.js} +2 -2
- package/dist/chunks/{timeseries-B-8OfeZm.js.map → timeseries-D1xjRXfk.js.map} +1 -1
- package/dist/chunks/{toolbar-DL6zVrzU.js → toolbar-WA_oZgu-.js} +5 -4
- package/dist/chunks/{toolbar-DL6zVrzU.js.map → toolbar-WA_oZgu-.js.map} +1 -1
- package/dist/chunks/tooltip-OcwO0VUT.js +154 -0
- package/dist/chunks/tooltip-OcwO0VUT.js.map +1 -0
- package/dist/chunks/{tooltip-root-BeAMXzxU.js → tooltip-root-DzahJDVj.js} +2 -2
- package/dist/chunks/{tooltip-root-BeAMXzxU.js.map → tooltip-root-DzahJDVj.js.map} +1 -1
- package/dist/chunks/{use-scroll-margin-DfdTc_5D.js → use-scroll-margin-atRtf0v_.js} +14 -10
- package/dist/chunks/use-scroll-margin-atRtf0v_.js.map +1 -0
- package/dist/chunks/{virtual-rows-yAMjeAwj.js → virtual-rows-CC_kc2PR.js} +2 -2
- package/dist/chunks/{virtual-rows-yAMjeAwj.js.map → virtual-rows-CC_kc2PR.js.map} +1 -1
- package/dist/chunks/{zh-CN-CKffAT7j.js → zh-CN-29X4CDLE.js} +3 -1
- package/dist/chunks/zh-CN-29X4CDLE.js.map +1 -0
- package/dist/components/agent-avatar.js +2 -0
- package/dist/components/app-frame.js +2 -2
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +2 -2
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/charts/bar.js +1 -1
- package/dist/components/charts/donut.js +1 -1
- package/dist/components/charts/gauge.js +1 -1
- package/dist/components/charts/sankey.js +1 -1
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-block.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +85 -81
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +191 -187
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +6 -4
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dialog.js +125 -91
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/display-options.js +49 -46
- package/dist/components/display-options.js.map +1 -1
- package/dist/components/filter-chip.js +3 -3
- package/dist/components/filter-chip.js.map +1 -1
- package/dist/components/filter-row.js +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon.js +1 -1
- package/dist/components/input.js +49 -49
- package/dist/components/input.js.map +1 -1
- package/dist/components/kaeso/conversation.js +3 -3
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +3 -3
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +8 -8
- package/dist/components/kaeso/usage.js.map +1 -1
- package/dist/components/kaeso.js +263 -95
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/key-value.js +2 -2
- package/dist/components/link.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +2 -2
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +27 -26
- package/dist/components/playground.js.map +1 -1
- package/dist/components/popover.js +12 -11
- package/dist/components/popover.js.map +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/segmented.js +1 -1
- package/dist/components/settings.js +8 -8
- package/dist/components/settings.js.map +1 -1
- package/dist/components/sheet.js +2 -2
- package/dist/components/sidebar.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/tabs.js +22 -22
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/theme-menu.js +33 -30
- package/dist/components/theme-menu.js.map +1 -1
- package/dist/components/thumbnail.js +41 -0
- package/dist/components/thumbnail.js.map +1 -0
- package/dist/components/toast.js +96 -87
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/format.js.map +1 -1
- package/dist/i18n-provider.js +1 -1
- package/dist/index.js +89 -87
- package/dist/kaeso.css +3 -0
- package/dist/styles.css +1 -1
- package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -5
- package/dist/types/blocks/resource-list/resource-list.d.ts +1 -4
- package/dist/types/component-docs.d.ts +1 -1
- package/dist/types/components/agent-avatar/agent-avatar.d.ts +94 -0
- package/dist/types/components/agent-avatar/docs.d.ts +19 -0
- package/dist/types/components/agent-avatar/index.d.ts +3 -0
- package/dist/types/components/agent-avatar/model-name.d.ts +9 -0
- package/dist/types/components/agent-avatar/models.d.ts +4 -0
- package/dist/types/components/app-frame/app-frame.d.ts +3 -8
- package/dist/types/components/app-frame/nav-sheet.d.ts +2 -4
- package/dist/types/components/calendar/calendar.d.ts +1 -4
- package/dist/types/components/charts/core.d.ts +11 -18
- package/dist/types/components/checkbox/checkbox.d.ts +2 -0
- package/dist/types/components/combobox/combobox.d.ts +26 -2
- package/dist/types/components/command-list/picker-popover.d.ts +1 -4
- package/dist/types/components/command-palette/command-palette.d.ts +1 -4
- package/dist/types/components/data-table/data-table.d.ts +2 -1
- package/dist/types/components/data-table/docs.d.ts +1 -0
- package/dist/types/components/dialog/dialog.d.ts +7 -9
- package/dist/types/components/dialog/docs.d.ts +2 -0
- package/dist/types/components/dialog/scope.d.ts +2 -0
- package/dist/types/components/dialog/step-dialog.d.ts +38 -5
- package/dist/types/components/display-options/display-options.d.ts +2 -5
- package/dist/types/components/input/input.d.ts +23 -0
- package/dist/types/components/kaeso/client-button.d.ts +17 -0
- package/dist/types/components/kaeso/docs.d.ts +18 -0
- package/dist/types/components/kaeso/grant-summary.d.ts +12 -0
- package/dist/types/components/kaeso/identity.d.ts +2 -0
- package/dist/types/components/kaeso/index.d.ts +2 -0
- package/dist/types/components/kaeso/provider-picker.d.ts +5 -0
- package/dist/types/components/kaeso/usage.d.ts +2 -0
- package/dist/types/components/list/list.d.ts +4 -8
- package/dist/types/components/menu/docs.d.ts +8 -1
- package/dist/types/components/menu/menu.d.ts +19 -31
- package/dist/types/components/playground/parameter-panel.d.ts +1 -4
- package/dist/types/components/popover/hover-card.d.ts +2 -0
- package/dist/types/components/radio/docs.d.ts +15 -0
- package/dist/types/components/radio/radio.d.ts +2 -4
- package/dist/types/components/settings/settings.d.ts +2 -0
- package/dist/types/components/sidebar/sidebar.d.ts +13 -35
- package/dist/types/components/tabs/tabs.d.ts +15 -0
- package/dist/types/components/theme-menu/docs.d.ts +2 -0
- package/dist/types/components/theme-menu/theme-menu.d.ts +6 -5
- package/dist/types/components/thumbnail/docs.d.ts +10 -0
- package/dist/types/components/thumbnail/index.d.ts +1 -0
- package/dist/types/components/thumbnail/thumbnail.d.ts +26 -0
- package/dist/types/components/toast/toast.d.ts +5 -12
- package/dist/types/components/toolbar/toolbar.d.ts +1 -6
- package/dist/types/components/tooltip/tooltip.d.ts +2 -4
- package/dist/types/components/tooltip/trigger-props.d.ts +0 -1
- package/dist/types/format/index.d.ts +5 -5
- package/dist/types/hooks/use-scroll-margin.d.ts +1 -1
- package/dist/types/icons/groups.d.ts +2 -2
- package/dist/types/icons/vocabulary.d.ts +15 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/utils/inset.d.ts +4 -0
- package/dist/types/utils/link-provider.d.ts +1 -1
- package/dist/types/utils/merge-refs.d.ts +3 -0
- package/dist/types/utils/portal-context.d.ts +1 -1
- package/dist/utils.js +3 -3
- package/foundations/shape.md +1 -1
- package/package.json +2 -2
- package/dist/chunks/app-frame-C8csevkL.js.map +0 -1
- package/dist/chunks/calendar--YemJsv4.js.map +0 -1
- package/dist/chunks/checkbox-CDfC6E-M.js.map +0 -1
- package/dist/chunks/combobox-BARyrpXH.js +0 -314
- package/dist/chunks/combobox-BARyrpXH.js.map +0 -1
- package/dist/chunks/core-Bl9NrBLS.js.map +0 -1
- package/dist/chunks/de-BnNQtBSV.js.map +0 -1
- package/dist/chunks/dialog-DQ9vZ7vr.js +0 -353
- package/dist/chunks/dialog-DQ9vZ7vr.js.map +0 -1
- package/dist/chunks/icon-CBzvyEqC.js +0 -91
- package/dist/chunks/icon-CBzvyEqC.js.map +0 -1
- package/dist/chunks/identity-DPuTkMsa.js.map +0 -1
- package/dist/chunks/input-TyLIaQ5k.js.map +0 -1
- package/dist/chunks/inset-BnBj8NJV.js.map +0 -1
- package/dist/chunks/link-provider-BsUxhZKG.js +0 -27
- package/dist/chunks/link-provider-BsUxhZKG.js.map +0 -1
- package/dist/chunks/menu-fl_QQb38.js.map +0 -1
- package/dist/chunks/nav-sheet-B2rNb8GB.js +0 -60
- package/dist/chunks/nav-sheet-B2rNb8GB.js.map +0 -1
- package/dist/chunks/sidebar-DtFlejU7.js.map +0 -1
- package/dist/chunks/tooltip-BMQ9BtPp.js +0 -151
- package/dist/chunks/tooltip-BMQ9BtPp.js.map +0 -1
- package/dist/chunks/use-scroll-margin-DfdTc_5D.js.map +0 -1
- package/dist/chunks/zh-CN-CKffAT7j.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-list.js","names":["useUiText","SearchInput","Toolbar","Empty","SelectionAction","KAESO_RESOURCE_LIST_VARIANTS","KAESO_RESOURCE_LIST_DEFAULT_VARIANTS","searchText","i","ResourceList","ariaLabel","t","query","setQuery","useState","selected","setSelected","q","filtered","useMemo","groups","g","visibleSelection","shown","id","toolbar","emptyTitle","emptyDescription","emptyAction","List","bulkActions","onOpen","a"],"sources":["../../src/blocks/resource-list/resource-list.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { List, SelectionAction, type ListGroup, type ListItemData } from \"../../components/list/list.js\";\nimport { Toolbar } from \"../../components/toolbar/toolbar.js\";\nimport { SearchInput } from \"../../components/input/input.js\";\nimport { Empty } from \"../../components/empty/empty.js\";\nimport type { IconData } from \"../../components/icon/icon.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESOURCE_LIST_VARIANTS = {\n grouping: {\n grouped: { classes: \"\" },\n flat: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RESOURCE_LIST_DEFAULT_VARIANTS = { grouping: \"grouped\" } as const;\n\nexport interface ResourceListProps {\n groups: ListGroup[];\n \"aria-label\": string;\n onOpen?: ((item: ListItemData) => void) | undefined;\n bulkActions?: { label: string; icon?: IconData | undefined; onClick: (ids: string[]) => void }[] | undefined;\n toolbar?: ReactNode | undefined;\n emptyTitle?: string | undefined;\n emptyDescription?: string | undefined;\n emptyAction?: ReactNode | undefined;\n}\n\nfunction searchText(i: ListItemData) {\n return `${i.textValue ?? (typeof i.title === \"string\" ? i.title : \"\")} ${i.displayId ?? \"\"}`.toLowerCase();\n}\n\nexport function ResourceList(
|
|
1
|
+
{"version":3,"file":"resource-list.js","names":["useUiText","SearchInput","Toolbar","Empty","SelectionAction","KAESO_RESOURCE_LIST_VARIANTS","KAESO_RESOURCE_LIST_DEFAULT_VARIANTS","searchText","i","ResourceList","ariaLabel","t","query","setQuery","useState","selected","setSelected","q","filtered","useMemo","groups","g","visibleSelection","shown","id","toolbar","emptyTitle","emptyDescription","emptyAction","List","bulkActions","onOpen","a"],"sources":["../../src/blocks/resource-list/resource-list.tsx"],"sourcesContent":["import { forwardRef, useMemo, useState, type ReactNode } from \"react\";\nimport { List, SelectionAction, type ListGroup, type ListItemData } from \"../../components/list/list.js\";\nimport { Toolbar } from \"../../components/toolbar/toolbar.js\";\nimport { SearchInput } from \"../../components/input/input.js\";\nimport { Empty } from \"../../components/empty/empty.js\";\nimport type { IconData } from \"../../components/icon/icon.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_RESOURCE_LIST_VARIANTS = {\n grouping: {\n grouped: { classes: \"\" },\n flat: { classes: \"\" },\n },\n} as const;\nexport const KAESO_RESOURCE_LIST_DEFAULT_VARIANTS = { grouping: \"grouped\" } as const;\n\nexport interface ResourceListProps {\n groups: ListGroup[];\n \"aria-label\": string;\n onOpen?: ((item: ListItemData) => void) | undefined;\n bulkActions?: { label: string; icon?: IconData | undefined; onClick: (ids: string[]) => void }[] | undefined;\n toolbar?: ReactNode | undefined;\n emptyTitle?: string | undefined;\n emptyDescription?: string | undefined;\n emptyAction?: ReactNode | undefined;\n}\n\nfunction searchText(i: ListItemData) {\n return `${i.textValue ?? (typeof i.title === \"string\" ? i.title : \"\")} ${i.displayId ?? \"\"}`.toLowerCase();\n}\n\nexport const ResourceList = /* @__PURE__ */ forwardRef<HTMLDivElement, ResourceListProps>(function ResourceList(\n { groups, onOpen, bulkActions = [], toolbar, emptyTitle, emptyDescription, emptyAction, \"aria-label\": ariaLabel },\n ref,\n) {\n const t = useUiText();\n const [query, setQuery] = useState(\"\");\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const q = query.trim().toLowerCase();\n const filtered = useMemo(\n () => groups.map((g) => ({ ...g, items: g.items.filter((i) => !q || searchText(i).includes(q)) })).filter((g) => g.items.length > 0),\n [groups, q],\n );\n const visibleSelection = useMemo(() => {\n const shown = new Set(filtered.flatMap((g) => g.items.map((i) => i.id)));\n return new Set([...selected].filter((id) => shown.has(id)));\n }, [filtered, selected]);\n return (\n <div ref={ref} className=\"flex flex-col\">\n <Toolbar aria-label={t(\"resourceList.filters\", \"Filters\")}>\n {toolbar}\n <Toolbar.Spacer />\n <div className=\"w-240\">\n <SearchInput\n aria-label={t(\"resourceList.search\", \"Search\")}\n placeholder={t(\"resourceList.search\", \"Search\")}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClear={() => setQuery(\"\")}\n shortcut={[\"/\"]}\n />\n </div>\n </Toolbar>\n {filtered.length === 0 ? (\n <Empty\n size=\"md\"\n title={q ? t(\"resourceList.noMatches\", \"No matches\") : (emptyTitle ?? t(\"resourceList.nothingHereYet\", \"Nothing here yet\"))}\n {...(q ? { description: t(\"resourceList.tryShorterSearch\", \"Try a shorter search.\") } : emptyDescription ? { description: emptyDescription } : {})}\n {...(!q && emptyAction ? { actions: emptyAction } : {})}\n />\n ) : (\n <List\n aria-label={ariaLabel}\n groups={filtered}\n selectable={bulkActions.length > 0}\n selected={visibleSelection}\n onSelectedChange={setSelected}\n {...(onOpen ? { onOpen } : {})}\n selectionActions={bulkActions.map((a) => (\n <SelectionAction key={a.label} {...(a.icon ? { icon: a.icon } : {})} onClick={() => a.onClick([...visibleSelection])}>\n {a.label}\n </SelectionAction>\n ))}\n />\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ResourceList.displayName = \"ResourceList\";\n"],"mappings":";;;;;;;;;AAQA,IAAaK,IAA+B,EAC1C,UAAU;CACR,SAAS,EAAE,SAAS,GAAG;CACvB,MAAM,EAAE,SAAS,GAAG;AACtB,EACF,GACaC,IAAuC,EAAE,UAAU,UAAU;AAa1E,SAASC,EAAW,GAAiB;CACnC,OAAO,GAAGC,EAAE,cAAc,OAAOA,EAAE,SAAU,WAAWA,EAAE,QAAQ,IAAI,GAAGA,EAAE,aAAa,KAAK,YAAY;AAC3G;AAEA,IAAaC,IAA+B,kBAA8C,SACxF,EAAE,WAAQ,WAAQ,iBAAc,CAAC,GAAG,YAAS,eAAY,qBAAkB,gBAAa,cAAcC,KACtG,GACA;CACA,IAAMC,IAAIX,EAAU,GACd,CAACY,GAAOC,KAAYC,EAAS,EAAE,GAC/B,CAACC,GAAUC,KAAeF,kBAAsB,IAAI,IAAI,CAAC,GACzDG,IAAIL,EAAM,KAAK,CAAC,CAAC,YAAY,GAC7BM,IAAWC,QACTC,EAAO,KAAK,OAAO;EAAE,GAAGC;EAAG,OAAOA,EAAE,MAAM,QAAQ,MAAM,CAACJ,KAAKV,EAAWC,CAAC,CAAC,CAAC,SAASS,CAAC,CAAC;CAAE,EAAE,CAAC,CAAC,QAAQ,MAAMI,EAAE,MAAM,SAAS,CAAC,GACnI,CAACD,GAAQH,CAAC,CACZ,GACMK,IAAmBH,QAAc;EACrC,IAAMI,IAAQ,IAAI,IAAIL,EAAS,SAAS,MAAMG,EAAE,MAAM,KAAK,MAAMb,EAAE,EAAE,CAAC,CAAC;EACvE,OAAO,IAAI,IAAI,CAAC,GAAGO,CAAQ,CAAC,CAAC,QAAQ,MAAOQ,EAAM,IAAIC,CAAE,CAAC,CAAC;CAC5D,GAAG,CAACN,GAAUH,CAAQ,CAAC;CACvB,OACE,kBAAC,OAAD;EAAU;EAAK,WAAU;EAAzB,UAAA,CACE,kBAACb,GAAD;GAAS,cAAYS,EAAE,wBAAwB,SAAS;GAAxD,UAAA;IACGc;IACD,kBAACvB,EAAQ,QAAT,CAAiB,CAAA;IACjB,kBAAC,OAAD;KAAK,WAAU;KACb,UAAA,kBAACD,GAAD;MACE,cAAYU,EAAE,uBAAuB,QAAQ;MAC7C,aAAaA,EAAE,uBAAuB,QAAQ;MAC9C,OAAOC;MACP,WAAW,MAAMC,EAAS,EAAE,OAAO,KAAK;MACxC,eAAeA,EAAS,EAAE;MAC1B,UAAU,CAAC,GAAG;KACf,CAAA;IACE,CAAA;GACE;EACR,CAAA,GAAAK,EAAS,WAAW,IACnB,kBAACf,GAAD;GACE,MAAK;GACL,OAAOc,IAAIN,EAAE,0BAA0B,YAAY,IAAKe,KAAcf,EAAE,+BAA+B,kBAAkB;GACzH,GAAKM,IAAI,EAAE,aAAaN,EAAE,iCAAiC,uBAAuB,EAAE,IAAIgB,IAAmB,EAAE,aAAaA,EAAiB,IAAI,CAAC;GAChJ,GAAK,CAACV,KAAKW,IAAc,EAAE,SAASA,EAAY,IAAI,CAAC;EACtD,CAAA,IAED,kBAACC,GAAD;GACE,cAAYnB;GACZ,QAAQQ;GACR,YAAYY,EAAY,SAAS;GACjC,UAAUR;GACV,kBAAkBN;GAClB,GAAKe,IAAS,EAAE,UAAO,IAAI,CAAC;GAC5B,kBAAkBD,EAAY,KAAK,MACjC,kBAAC1B,GAAD;IAA+B,GAAK4B,EAAE,OAAO,EAAE,MAAMA,EAAE,KAAK,IAAI,CAAC;IAAI,eAAeA,EAAE,QAAQ,CAAC,GAAGV,CAAgB,CAAC;IAChH,UAAAU,EAAE;GACY,GAFKA,EAAE,KAEP,CAClB;EACF,CAAA,CAEA;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAa,cAAc"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
|
+
import { i as t, n } from "./context-BELWW79w.js";
|
|
4
|
+
import { t as r } from "./avatar-CWbdwbJv.js";
|
|
5
|
+
import { forwardRef as i, useMemo as a } from "react";
|
|
6
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
|
+
//#region src/components/agent-avatar/models.ts
|
|
8
|
+
var c = /* @__PURE__ */ "claude.gpt.gemini.gemma.grok.llama.mistral.deepseek.qwen.kimi.glm.minimax.command.nova.phi.granite.jamba.ernie.hunyuan.doubao.yi.nemotron.olmo.sonar.reka.unknown".split(".");
|
|
9
|
+
function l(e) {
|
|
10
|
+
return c.includes(e) ? e : "unknown";
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/components/agent-avatar/model-name.ts
|
|
14
|
+
var u = {
|
|
15
|
+
claude: "Claude",
|
|
16
|
+
gpt: "GPT",
|
|
17
|
+
gemini: "Gemini",
|
|
18
|
+
gemma: "Gemma",
|
|
19
|
+
grok: "Grok",
|
|
20
|
+
llama: "Llama",
|
|
21
|
+
mistral: "Mistral",
|
|
22
|
+
deepseek: "DeepSeek",
|
|
23
|
+
qwen: "Qwen",
|
|
24
|
+
kimi: "Kimi",
|
|
25
|
+
glm: "GLM",
|
|
26
|
+
minimax: "MiniMax",
|
|
27
|
+
command: "Command",
|
|
28
|
+
nova: "Nova",
|
|
29
|
+
phi: "Phi",
|
|
30
|
+
granite: "Granite",
|
|
31
|
+
jamba: "Jamba",
|
|
32
|
+
ernie: "ERNIE",
|
|
33
|
+
hunyuan: "Hunyuan",
|
|
34
|
+
doubao: "Doubao",
|
|
35
|
+
yi: "Yi",
|
|
36
|
+
nemotron: "Nemotron",
|
|
37
|
+
olmo: "OLMo",
|
|
38
|
+
sonar: "Sonar",
|
|
39
|
+
reka: "Reka"
|
|
40
|
+
};
|
|
41
|
+
function d(e, t = n) {
|
|
42
|
+
let r = l(e);
|
|
43
|
+
return r === "unknown" ? t("agentAvatar.unknownModel", "Unknown") : u[r];
|
|
44
|
+
}
|
|
45
|
+
function f() {
|
|
46
|
+
let e = t();
|
|
47
|
+
return a(() => (t) => d(t, e), [e]);
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/components/agent-avatar/agent-avatar.tsx
|
|
51
|
+
var p = { size: {
|
|
52
|
+
20: {
|
|
53
|
+
classes: "size-20 rounded-avatar",
|
|
54
|
+
glyph: "size-14",
|
|
55
|
+
stroke: 2.25
|
|
56
|
+
},
|
|
57
|
+
24: {
|
|
58
|
+
classes: "size-24 rounded-avatar",
|
|
59
|
+
glyph: "size-16",
|
|
60
|
+
stroke: 2
|
|
61
|
+
},
|
|
62
|
+
28: {
|
|
63
|
+
classes: "size-28 rounded-org",
|
|
64
|
+
glyph: "size-18",
|
|
65
|
+
stroke: 2
|
|
66
|
+
},
|
|
67
|
+
32: {
|
|
68
|
+
classes: "size-32 rounded-org",
|
|
69
|
+
glyph: "size-20",
|
|
70
|
+
stroke: 1.75
|
|
71
|
+
},
|
|
72
|
+
40: {
|
|
73
|
+
classes: "size-40 rounded-org",
|
|
74
|
+
glyph: "size-28",
|
|
75
|
+
stroke: 1.5
|
|
76
|
+
}
|
|
77
|
+
} }, m = { size: 24 }, h = { size: {
|
|
78
|
+
20: {
|
|
79
|
+
classes: "size-10 right-0 bottom-0 rounded-cell",
|
|
80
|
+
glyph: "size-8",
|
|
81
|
+
stroke: 3
|
|
82
|
+
},
|
|
83
|
+
24: {
|
|
84
|
+
classes: "size-12 right-0 bottom-0 rounded-cell",
|
|
85
|
+
glyph: "size-10",
|
|
86
|
+
stroke: 2.75
|
|
87
|
+
},
|
|
88
|
+
28: {
|
|
89
|
+
classes: "size-14 right-0 bottom-0 rounded-cell",
|
|
90
|
+
glyph: "size-10",
|
|
91
|
+
stroke: 2.5
|
|
92
|
+
},
|
|
93
|
+
32: {
|
|
94
|
+
classes: "size-16 right-0 bottom-0 rounded-cell",
|
|
95
|
+
glyph: "size-12",
|
|
96
|
+
stroke: 2.25
|
|
97
|
+
},
|
|
98
|
+
40: {
|
|
99
|
+
classes: "size-20 right-0 bottom-0 rounded-avatar",
|
|
100
|
+
glyph: "size-14",
|
|
101
|
+
stroke: 2
|
|
102
|
+
}
|
|
103
|
+
} }, g = { size: 24 }, _ = [
|
|
104
|
+
"M6.5 7h11A3.5 3.5 0 0 1 21 10.5v6a3.5 3.5 0 0 1-3.5 3.5h-11A3.5 3.5 0 0 1 3 16.5v-6A3.5 3.5 0 0 1 6.5 7z",
|
|
105
|
+
"M12 7V3.5",
|
|
106
|
+
"M9 13v1.5",
|
|
107
|
+
"M15 13v1.5"
|
|
108
|
+
], v = [
|
|
109
|
+
"M7.5 8h9A3.5 3.5 0 0 1 20 11.5v5a3.5 3.5 0 0 1-3.5 3.5h-9A3.5 3.5 0 0 1 4 16.5v-5A3.5 3.5 0 0 1 7.5 8z",
|
|
110
|
+
"M12 8V4.5",
|
|
111
|
+
"M9.5 13.5v1",
|
|
112
|
+
"M14.5 13.5v1",
|
|
113
|
+
"M2 13v2",
|
|
114
|
+
"M22 13v2"
|
|
115
|
+
];
|
|
116
|
+
function y(e, t = v) {
|
|
117
|
+
return /* @__PURE__ */ o("svg", {
|
|
118
|
+
viewBox: "0 0 24 24",
|
|
119
|
+
fill: "none",
|
|
120
|
+
stroke: "currentColor",
|
|
121
|
+
strokeWidth: e.stroke,
|
|
122
|
+
strokeLinecap: "round",
|
|
123
|
+
strokeLinejoin: "round",
|
|
124
|
+
"aria-hidden": !0,
|
|
125
|
+
focusable: "false",
|
|
126
|
+
className: e.glyph,
|
|
127
|
+
children: t.map((e) => /* @__PURE__ */ o("path", { d: e }, e))
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
var b = /* @__PURE__ */ i(function({ name: t, size: n = 24, decorative: r, className: i }, a) {
|
|
131
|
+
let s = p.size[n];
|
|
132
|
+
return /* @__PURE__ */ o("span", {
|
|
133
|
+
ref: a,
|
|
134
|
+
...r ? { "aria-hidden": !0 } : {
|
|
135
|
+
role: "img",
|
|
136
|
+
"aria-label": t
|
|
137
|
+
},
|
|
138
|
+
className: e("inline-flex shrink-0 items-center justify-center bg-ink text-on-ink select-none", s.classes, i),
|
|
139
|
+
children: y(s)
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
process.env.NODE_ENV !== "production" && (b.displayName = "AgentAvatar");
|
|
143
|
+
var x = /* @__PURE__ */ i(function({ name: n, src: i, agent: a, size: c = 24, className: l }, u) {
|
|
144
|
+
let f = t(), p = h.size[c];
|
|
145
|
+
return /* @__PURE__ */ s("span", {
|
|
146
|
+
ref: u,
|
|
147
|
+
role: "img",
|
|
148
|
+
"aria-label": f("agentAttribution.label", "{name} via {agent} ({model})", {
|
|
149
|
+
name: n,
|
|
150
|
+
agent: a.name,
|
|
151
|
+
model: d(a.model, f)
|
|
152
|
+
}),
|
|
153
|
+
className: e("relative inline-flex shrink-0", l),
|
|
154
|
+
children: [/* @__PURE__ */ o(r, {
|
|
155
|
+
name: n,
|
|
156
|
+
...i ? { src: i } : {},
|
|
157
|
+
size: c,
|
|
158
|
+
decorative: !0
|
|
159
|
+
}), /* @__PURE__ */ o("span", {
|
|
160
|
+
"aria-hidden": !0,
|
|
161
|
+
"data-agent-badge": "",
|
|
162
|
+
className: e("absolute inline-flex items-center justify-center bg-ink text-on-ink ring-2 ring-panel", p.classes),
|
|
163
|
+
children: y(p, _)
|
|
164
|
+
})]
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
process.env.NODE_ENV !== "production" && (x.displayName = "AgentAttribution");
|
|
168
|
+
//#endregion
|
|
169
|
+
export { m as a, f as c, h as i, c as l, b as n, p as o, g as r, d as s, x as t, l as u };
|
|
170
|
+
|
|
171
|
+
//# sourceMappingURL=agent-avatar-0pdBTWkR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-avatar-0pdBTWkR.js","names":["cn","useUiText","Avatar","AGENT_MODELS","agentModel","model","PRODUCT_NAMES","modelName","englishText","known","useModelName","t","useMemo","KAESO_AGENT_AVATAR_VARIANTS","KAESO_AGENT_AVATAR_DEFAULT_VARIANTS","KAESO_AGENT_ATTRIBUTION_VARIANTS","KAESO_AGENT_ATTRIBUTION_DEFAULT_VARIANTS","BADGE_BOT","BOT","botGlyph","tile","paths","d","AgentAvatar","size","decorative","name","className","AgentAttribution","badge","agent","src"],"sources":["../../src/components/agent-avatar/models.ts","../../src/components/agent-avatar/model-name.ts","../../src/components/agent-avatar/agent-avatar.tsx"],"sourcesContent":["export const AGENT_MODELS = [\n \"claude\",\n \"gpt\",\n \"gemini\",\n \"gemma\",\n \"grok\",\n \"llama\",\n \"mistral\",\n \"deepseek\",\n \"qwen\",\n \"kimi\",\n \"glm\",\n \"minimax\",\n \"command\",\n \"nova\",\n \"phi\",\n \"granite\",\n \"jamba\",\n \"ernie\",\n \"hunyuan\",\n \"doubao\",\n \"yi\",\n \"nemotron\",\n \"olmo\",\n \"sonar\",\n \"reka\",\n \"unknown\",\n] as const;\n\nexport type AgentModel = (typeof AGENT_MODELS)[number];\n\n/** The model family an API string names, or `unknown` for anything the library doesn't know. */\nexport function agentModel(model: string): AgentModel {\n return (AGENT_MODELS as readonly string[]).includes(model) ? (model as AgentModel) : \"unknown\";\n}\n","import { useMemo } from \"react\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\nimport { agentModel, type AgentModel } from \"./models.js\";\n\nconst PRODUCT_NAMES: Readonly<Record<Exclude<AgentModel, \"unknown\">, string>> = {\n claude: \"Claude\",\n gpt: \"GPT\",\n gemini: \"Gemini\",\n gemma: \"Gemma\",\n grok: \"Grok\",\n llama: \"Llama\",\n mistral: \"Mistral\",\n deepseek: \"DeepSeek\",\n qwen: \"Qwen\",\n kimi: \"Kimi\",\n glm: \"GLM\",\n minimax: \"MiniMax\",\n command: \"Command\",\n nova: \"Nova\",\n phi: \"Phi\",\n granite: \"Granite\",\n jamba: \"Jamba\",\n ernie: \"ERNIE\",\n hunyuan: \"Hunyuan\",\n doubao: \"Doubao\",\n yi: \"Yi\",\n nemotron: \"Nemotron\",\n olmo: \"OLMo\",\n sonar: \"Sonar\",\n reka: \"Reka\",\n};\n\n/**\n * The display name of a model family from the API, such as `deepseek` → \"DeepSeek\". Product names are never\n * translated; `unknown` and ids the library doesn't know are \"Unknown\", translated through `t` (English without it).\n * In a component, prefer `useModelName()`, which translates into the page's language.\n */\nexport function modelName(model: string, t: UiText = englishText): string {\n const known = agentModel(model);\n return known === \"unknown\" ? t(\"agentAvatar.unknownModel\", \"Unknown\") : PRODUCT_NAMES[known];\n}\n\n/** `modelName` in the language of the nearest `LocaleProvider`. */\nexport function useModelName(): (model: string) => string {\n const t = useUiText();\n return useMemo(() => (model: string) => modelName(model, t), [t]);\n}\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { Avatar } from \"../avatar/avatar.js\";\nimport { modelName } from \"./model-name.js\";\n\nexport const KAESO_AGENT_AVATAR_VARIANTS = {\n size: {\n 20: { classes: \"size-20 rounded-avatar\", glyph: \"size-14\", stroke: 2.25 },\n 24: { classes: \"size-24 rounded-avatar\", glyph: \"size-16\", stroke: 2 },\n 28: { classes: \"size-28 rounded-org\", glyph: \"size-18\", stroke: 2 },\n 32: { classes: \"size-32 rounded-org\", glyph: \"size-20\", stroke: 1.75 },\n 40: { classes: \"size-40 rounded-org\", glyph: \"size-28\", stroke: 1.5 },\n },\n} as const;\nexport const KAESO_AGENT_AVATAR_DEFAULT_VARIANTS = { size: 24 } as const;\n\nexport const KAESO_AGENT_ATTRIBUTION_VARIANTS = {\n size: {\n 20: { classes: \"size-10 right-0 bottom-0 rounded-cell\", glyph: \"size-8\", stroke: 3 },\n 24: { classes: \"size-12 right-0 bottom-0 rounded-cell\", glyph: \"size-10\", stroke: 2.75 },\n 28: { classes: \"size-14 right-0 bottom-0 rounded-cell\", glyph: \"size-10\", stroke: 2.5 },\n 32: { classes: \"size-16 right-0 bottom-0 rounded-cell\", glyph: \"size-12\", stroke: 2.25 },\n 40: { classes: \"size-20 right-0 bottom-0 rounded-avatar\", glyph: \"size-14\", stroke: 2 },\n },\n} as const;\nexport const KAESO_AGENT_ATTRIBUTION_DEFAULT_VARIANTS = { size: 24 } as const;\n\ntype AvatarSize = keyof typeof KAESO_AGENT_AVATAR_VARIANTS.size;\n\n// A bot's face on a 24 grid: head 4–20, ears at 2 and 22, antenna to 4.5, eyes as round-capped dots. Badges\n// drop the ears and widen the head, which is all that still reads at 8 to 14 pixels.\nconst BADGE_BOT = [\n \"M6.5 7h11A3.5 3.5 0 0 1 21 10.5v6a3.5 3.5 0 0 1-3.5 3.5h-11A3.5 3.5 0 0 1 3 16.5v-6A3.5 3.5 0 0 1 6.5 7z\",\n \"M12 7V3.5\",\n \"M9 13v1.5\",\n \"M15 13v1.5\",\n];\nconst BOT = [\n \"M7.5 8h9A3.5 3.5 0 0 1 20 11.5v5a3.5 3.5 0 0 1-3.5 3.5h-9A3.5 3.5 0 0 1 4 16.5v-5A3.5 3.5 0 0 1 7.5 8z\",\n \"M12 8V4.5\",\n \"M9.5 13.5v1\",\n \"M14.5 13.5v1\",\n \"M2 13v2\",\n \"M22 13v2\",\n];\n\nfunction botGlyph(tile: { glyph: string; stroke: number }, paths: readonly string[] = BOT) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={tile.stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n focusable=\"false\"\n className={tile.glyph}\n >\n {paths.map((d) => (\n <path key={d} d={d} />\n ))}\n </svg>\n );\n}\n\nexport interface AgentAvatarProps {\n name: string;\n size?: AvatarSize | undefined;\n decorative?: boolean | undefined;\n className?: string | undefined;\n}\n\nexport const AgentAvatar = /* @__PURE__ */ forwardRef<HTMLSpanElement, AgentAvatarProps>(function AgentAvatar({ name, size = 24, decorative, className }, ref) {\n const tile = KAESO_AGENT_AVATAR_VARIANTS.size[size];\n return (\n <span\n ref={ref}\n {...(decorative ? { \"aria-hidden\": true } : { role: \"img\", \"aria-label\": name })}\n className={cn(\"inline-flex shrink-0 items-center justify-center bg-ink text-on-ink select-none\", tile.classes, className)}\n >\n {botGlyph(tile)}\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") AgentAvatar.displayName = \"AgentAvatar\";\n\nexport interface AgentAttributionProps {\n name: string;\n src?: string | undefined;\n agent: { name: string; model: string };\n size?: AvatarSize | undefined;\n className?: string | undefined;\n}\n\nexport const AgentAttribution = /* @__PURE__ */ forwardRef<HTMLSpanElement, AgentAttributionProps>(function AgentAttribution({ name, src, agent, size = 24, className }, ref) {\n const t = useUiText();\n const badge = KAESO_AGENT_ATTRIBUTION_VARIANTS.size[size];\n return (\n <span\n ref={ref}\n role=\"img\"\n aria-label={t(\"agentAttribution.label\", \"{name} via {agent} ({model})\", { name, agent: agent.name, model: modelName(agent.model, t) })}\n className={cn(\"relative inline-flex shrink-0\", className)}\n >\n <Avatar name={name} {...(src ? { src } : {})} size={size} decorative />\n <span\n aria-hidden\n data-agent-badge=\"\"\n className={cn(\"absolute inline-flex items-center justify-center bg-ink text-on-ink ring-2 ring-panel\", badge.classes)}\n >\n {botGlyph(badge, BADGE_BOT)}\n </span>\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") AgentAttribution.displayName = \"AgentAttribution\";\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
|
-
import { n as t, t as n } from "./inset-
|
|
3
|
+
import { n as t, t as n } from "./inset-BUzyXLK4.js";
|
|
4
4
|
import { i as r } from "./context-BELWW79w.js";
|
|
5
|
-
import {
|
|
6
|
-
import { a as o } from "./button-
|
|
7
|
-
import { t as s } from "./icon-button-
|
|
8
|
-
import { l as c, t as l } from "./sidebar-
|
|
5
|
+
import { c as i, u as a } from "./tooltip-OcwO0VUT.js";
|
|
6
|
+
import { a as o } from "./button-CzuxqawA.js";
|
|
7
|
+
import { t as s } from "./icon-button-CrdF_eMG.js";
|
|
8
|
+
import { l as c, t as l } from "./sidebar-3r1ZRXlN.js";
|
|
9
9
|
import { t as u } from "./when-idle-Cy3pinqO.js";
|
|
10
10
|
import { createContext as d, forwardRef as f, useCallback as p, useContext as m, useEffect as h, useId as g, useLayoutEffect as _, useMemo as v, useRef as y, useState as b } from "react";
|
|
11
11
|
import { jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
@@ -103,13 +103,13 @@ function A({ banner: e, href: t, label: n, actions: i, open: a, onToggle: o, tog
|
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
105
|
process.env.NODE_ENV !== "production" && (A.displayName = "AppFrame.PhoneBar");
|
|
106
|
-
var j = 750, M = /* @__PURE__ */
|
|
107
|
-
function N({ navOpen: e, setNavOpen: t, toggle: n, ready: r, children:
|
|
106
|
+
var j = 750, M = /* @__PURE__ */ i(() => import("./nav-sheet-CzgIwgAm.js").then((e) => e.n), { base: () => import.meta.url });
|
|
107
|
+
function N({ navOpen: e, setNavOpen: t, toggle: n, ready: r, children: i }) {
|
|
108
108
|
let { peeking: o, setPeeking: s } = c(), [l, d] = b(!1);
|
|
109
109
|
h(() => u(() => d(!0)), []);
|
|
110
110
|
let f = p(() => {
|
|
111
111
|
t(!1), s(!1);
|
|
112
|
-
}, [t, s]), m =
|
|
112
|
+
}, [t, s]), m = a(M, l || e || o, () => {
|
|
113
113
|
d(!1), f();
|
|
114
114
|
})?.NavSheet, g = (e || o) && !m;
|
|
115
115
|
return _(() => {
|
|
@@ -121,7 +121,7 @@ function N({ navOpen: e, setNavOpen: t, toggle: n, ready: r, children: a }) {
|
|
|
121
121
|
onOpenChange: (e) => {
|
|
122
122
|
e || f();
|
|
123
123
|
},
|
|
124
|
-
children:
|
|
124
|
+
children: i
|
|
125
125
|
}) : null;
|
|
126
126
|
}
|
|
127
127
|
function P(e, t, n) {
|
|
@@ -141,27 +141,28 @@ function P(e, t, n) {
|
|
|
141
141
|
n
|
|
142
142
|
]);
|
|
143
143
|
}
|
|
144
|
-
|
|
145
|
-
let { openNav:
|
|
146
|
-
h(() => () => clearTimeout(
|
|
147
|
-
let
|
|
144
|
+
var F = /* @__PURE__ */ f(function({ className: t }, n) {
|
|
145
|
+
let { openNav: i, sheetReady: a } = D(), { collapsed: o, setCollapsed: l, setPeeking: u } = c(), d = y(void 0);
|
|
146
|
+
h(() => () => clearTimeout(d.current), []);
|
|
147
|
+
let f = r(), p = () => typeof window < "u" && window.matchMedia("(min-width: 1024px)").matches;
|
|
148
148
|
return /* @__PURE__ */ x(s, {
|
|
149
|
+
ref: n,
|
|
149
150
|
onPointerEnter: () => {
|
|
150
|
-
|
|
151
|
+
o && p() && (d.current = setTimeout(() => u(!0), 750));
|
|
151
152
|
},
|
|
152
153
|
onPointerLeave: () => {
|
|
153
|
-
clearTimeout(
|
|
154
|
+
clearTimeout(d.current), a.current || u(!1);
|
|
154
155
|
},
|
|
155
156
|
icon: C,
|
|
156
157
|
"data-sidebar-expand": "",
|
|
157
|
-
"aria-label":
|
|
158
|
-
shortcut:
|
|
158
|
+
"aria-label": o ? f("appFrame.expandSidebar", "Expand sidebar") : f("appFrame.openNavigation", "Open navigation"),
|
|
159
|
+
shortcut: o ? ["["] : void 0,
|
|
159
160
|
onClick: () => {
|
|
160
|
-
clearTimeout(
|
|
161
|
+
clearTimeout(d.current), o && p() ? l(!1) : i();
|
|
161
162
|
},
|
|
162
|
-
className: e("hidden",
|
|
163
|
+
className: e("hidden", o && "lg:inline-flex", t)
|
|
163
164
|
});
|
|
164
|
-
}
|
|
165
|
+
});
|
|
165
166
|
process.env.NODE_ENV !== "production" && (F.displayName = "AppFrame.MenuButton");
|
|
166
167
|
var I = { padding: {
|
|
167
168
|
none: { classes: "" },
|
|
@@ -217,4 +218,4 @@ var B = /* @__PURE__ */ Object.assign(O, {
|
|
|
217
218
|
//#endregion
|
|
218
219
|
export { w as a, T as i, L as n, j as o, I as r, D as s, B as t };
|
|
219
220
|
|
|
220
|
-
//# sourceMappingURL=app-frame-
|
|
221
|
+
//# sourceMappingURL=app-frame-DogGRmsu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-frame-DogGRmsu.js","names":["__icon_SidebarLeftIcon","cn","InsetContent","GutterContent","useUiText","lazyModule","useLazyModule","buttonClasses","IconButton","useSidebar","BrandWordmark","whenIdle","KAESO_APP_FRAME_VARIANTS","KAESO_APP_FRAME_DEFAULT_VARIANTS","Ctx","useAppFrame","useContext","Root","navOpen","setNavOpen","useState","toggle","useRef","sheetReady","mainId","useId","Main","fill","frame","useMemo","className","SkipLink","sidebar","PhoneBar","brandHref","brandLabel","phoneActions","o","corner","FrameSheet","t","target","main","Bar","banner","actions","toggleRef","SidebarLeftIcon","open","onToggle","PEEK_DELAY","navSheet","n","idle","setIdle","dismiss","useCallback","setPeeking","NavSheet","peeking","pending","useLayoutEffect","usePendingDismiss","doc","onKeyDown","onPointerDown","MenuButton","intent","wide","collapsed","setCollapsed","openNav","KAESO_APP_FRAME_BODY_VARIANTS","KAESO_APP_FRAME_BODY_DEFAULT_VARIANTS","Body","props","padding","Settings","title","description","AppFrame"],"sources":["../../src/components/app-frame/app-frame.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { GutterContent, InsetContent } from \"../../utils/inset.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SidebarLeftIcon as __icon_SidebarLeftIcon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { buttonClasses } from \"../button/button.js\";\nimport { useSidebar, BrandWordmark } from \"../sidebar/sidebar.js\";\nimport { lazyModule, useLazyModule } from \"../../utils/lazy-module.js\";\nimport { whenIdle } from \"../../utils/when-idle.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_APP_FRAME_VARIANTS = {\n fill: {\n screen: { classes: \"h-dvh\" },\n parent: { classes: \"h-full\" },\n },\n} as const;\nexport const KAESO_APP_FRAME_DEFAULT_VARIANTS = { fill: \"screen\" } as const;\n\nconst Ctx = /* @__PURE__ */ createContext<{ openNav: () => void; embedded: boolean; sheetReady: RefObject<boolean> }>({\n openNav: () => undefined,\n embedded: false,\n sheetReady: { current: false },\n});\nexport const useAppFrame = () => useContext(Ctx);\n\nexport interface AppFrameProps {\n sidebar: ReactNode;\n children: ReactNode;\n corner?: ReactNode | undefined;\n fill?: keyof typeof KAESO_APP_FRAME_VARIANTS.fill | undefined;\n brandHref?: string | undefined;\n brandLabel?: string | undefined;\n phoneActions?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, AppFrameProps>(function AppFrame(\n { sidebar, children, corner, fill = \"screen\", brandHref, brandLabel, phoneActions, className },\n ref,\n) {\n const [navOpen, setNavOpen] = useState(false);\n const toggle = useRef<HTMLButtonElement | null>(null);\n const sheetReady = useRef(false);\n const mainId = `k-main-${useId().replace(/[^\\w-]/g, \"\")}`;\n const Main = fill === \"screen\" ? \"main\" : \"div\";\n const frame = useMemo(() => ({ openNav: () => setNavOpen(true), embedded: fill === \"parent\", sheetReady }), [fill]);\n return (\n <Ctx.Provider value={frame}>\n <div\n ref={ref}\n className={cn(\n \"relative isolate flex w-full flex-col overflow-hidden bg-chrome text-fg lg:flex-row\",\n KAESO_APP_FRAME_VARIANTS.fill[fill].classes,\n className,\n )}\n >\n <SkipLink target={mainId} />\n <div className=\"hidden h-full lg:flex\">{sidebar}</div>\n <PhoneBar\n banner={fill === \"screen\"}\n href={brandHref}\n label={brandLabel}\n actions={phoneActions}\n open={navOpen}\n onToggle={() => setNavOpen((o) => !o)}\n toggleRef={toggle}\n />\n <Main\n id={mainId}\n className=\"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-panel outline-none safe-area-panel lg:my-8 lg:mr-8 lg:rounded-panel lg:shadow-panel\"\n >\n {children}\n </Main>\n {corner && <div className=\"fixed right-16 bottom-16 z-10 flex items-center gap-8\">{corner}</div>}\n </div>\n <FrameSheet navOpen={navOpen} setNavOpen={setNavOpen} toggle={toggle} ready={sheetReady}>\n {sidebar}\n </FrameSheet>\n </Ctx.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"AppFrame\";\n\nfunction SkipLink({ target }: { target: string }) {\n const t = useUiText();\n return (\n <a\n href={`#${target}`}\n onClick={(e) => {\n const main = document.getElementById(target);\n if (!main) return;\n e.preventDefault();\n main.setAttribute(\"tabindex\", \"-1\");\n main.addEventListener(\"blur\", () => main.removeAttribute(\"tabindex\"), { once: true });\n main.focus();\n }}\n className={cn(buttonClasses({ size: \"sm\" }), \"absolute top-8 left-8 z-50 not-focus:sr-only\")}\n >\n {t(\"appFrame.skipToContent\", \"Skip to content\")}\n </a>\n );\n}\nif (process.env.NODE_ENV !== \"production\") SkipLink.displayName = \"AppFrame.SkipLink\";\n\nfunction PhoneBar({\n banner,\n href,\n label,\n actions,\n open,\n onToggle,\n toggleRef,\n}: {\n banner: boolean;\n href: string | undefined;\n label: string | undefined;\n actions: ReactNode;\n open: boolean;\n onToggle: () => void;\n toggleRef: RefObject<HTMLButtonElement | null>;\n}) {\n const Bar = banner ? \"header\" : \"div\";\n const t = useUiText();\n return (\n <Bar data-phone-bar=\"\" className=\"shrink-0 bg-panel safe-area-bar lg:hidden\">\n <div className=\"mt-8 flex h-52 items-center justify-between px-24\">\n <BrandWordmark href={href} label={label} />\n <span className=\"flex items-center\">\n {actions}\n <IconButton\n ref={toggleRef}\n icon={__icon_SidebarLeftIcon}\n aria-label={t(\"appFrame.openNavigation\", \"Open navigation\")}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n tooltip={false}\n onClick={onToggle}\n />\n </span>\n </div>\n </Bar>\n );\n}\nif (process.env.NODE_ENV !== \"production\") PhoneBar.displayName = \"AppFrame.PhoneBar\";\n\nexport const PEEK_DELAY = 750;\n\nconst navSheet = /* @__PURE__ */ lazyModule(() => import(\"./nav-sheet.js\"), { base: () => import.meta.url });\n\nfunction FrameSheet({\n navOpen,\n setNavOpen,\n toggle,\n ready,\n children,\n}: {\n navOpen: boolean;\n setNavOpen: (o: boolean) => void;\n toggle: RefObject<HTMLElement | null>;\n ready: RefObject<boolean>;\n children: ReactNode;\n}) {\n const { peeking, setPeeking } = useSidebar();\n const [idle, setIdle] = useState(false);\n useEffect(() => whenIdle(() => setIdle(true)), []);\n const dismiss = useCallback(() => {\n setNavOpen(false);\n setPeeking(false);\n }, [setNavOpen, setPeeking]);\n const NavSheet = useLazyModule(navSheet, idle || navOpen || peeking, () => {\n setIdle(false);\n dismiss();\n })?.NavSheet;\n const pending = (navOpen || peeking) && !NavSheet;\n useLayoutEffect(() => {\n ready.current = !!NavSheet;\n });\n usePendingDismiss(pending, toggle, dismiss);\n if (!NavSheet) return null;\n return (\n <NavSheet\n open={navOpen || peeking}\n peek={peeking && !navOpen}\n {...(navOpen ? { returnFocus: toggle } : {})}\n onOpenChange={(o) => {\n if (!o) dismiss();\n }}\n >\n {children}\n </NavSheet>\n );\n}\n\nfunction usePendingDismiss(pending: boolean, toggle: RefObject<HTMLElement | null>, dismiss: () => void) {\n useEffect(() => {\n if (!pending) return;\n const doc = toggle.current?.ownerDocument ?? document;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopPropagation();\n dismiss();\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!toggle.current?.contains(e.target as Node)) dismiss();\n };\n doc.addEventListener(\"keydown\", onKeyDown, true);\n doc.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n doc.removeEventListener(\"keydown\", onKeyDown, true);\n doc.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }, [pending, toggle, dismiss]);\n}\n\nconst MenuButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, { className?: string | undefined }>(function AppFrameMenuButton({ className }, ref) {\n const { openNav, sheetReady } = useAppFrame();\n const { collapsed, setCollapsed, setPeeking } = useSidebar();\n const intent = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(intent.current), []);\n const t = useUiText();\n const wide = () => typeof window !== \"undefined\" && window.matchMedia(\"(min-width: 1024px)\").matches;\n return (\n <IconButton\n ref={ref}\n onPointerEnter={() => {\n if (collapsed && wide()) intent.current = setTimeout(() => setPeeking(true), PEEK_DELAY);\n }}\n onPointerLeave={() => {\n clearTimeout(intent.current);\n if (!sheetReady.current) setPeeking(false);\n }}\n icon={__icon_SidebarLeftIcon}\n data-sidebar-expand=\"\"\n aria-label={collapsed ? t(\"appFrame.expandSidebar\", \"Expand sidebar\") : t(\"appFrame.openNavigation\", \"Open navigation\")}\n shortcut={collapsed ? [\"[\"] : undefined}\n onClick={() => {\n clearTimeout(intent.current);\n if (collapsed && wide()) setCollapsed(false);\n else openNav();\n }}\n className={cn(\"hidden\", collapsed && \"lg:inline-flex\", className)}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") MenuButton.displayName = \"AppFrame.MenuButton\";\n\nexport const KAESO_APP_FRAME_BODY_VARIANTS = {\n padding: {\n none: { classes: \"\" },\n list: { classes: \"pt-8 pb-24\" },\n page: { classes: \"px-24 pt-16 pb-48\" },\n },\n} as const;\nexport const KAESO_APP_FRAME_BODY_DEFAULT_VARIANTS = { padding: \"none\" } as const;\n\nexport interface AppFrameBodyProps extends HTMLAttributes<HTMLDivElement> {\n padding?: keyof typeof KAESO_APP_FRAME_BODY_VARIANTS.padding | undefined;\n}\n\nconst Body = /* @__PURE__ */ forwardRef<HTMLDivElement, AppFrameBodyProps>(function AppFrameBody({ className, padding = \"none\", children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"min-h-0 flex-1 overflow-y-auto overscroll-contain scrollbar-quiet\", KAESO_APP_FRAME_BODY_VARIANTS.padding[padding].classes, className)}\n {...props}\n >\n <GutterContent padded={padding === \"page\"}>{children}</GutterContent>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Body.displayName = \"AppFrame.Body\";\n\nexport interface SettingsPageProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n}\n\nconst Settings = /* @__PURE__ */ forwardRef<HTMLDivElement, SettingsPageProps>(function AppFrameSettings({ title, description, actions, className, children, ...props }, ref) {\n return (\n <Body ref={ref} className=\"relative\">\n <MenuButton className=\"absolute top-10 left-24 z-10\" />\n <div className={cn(\"mx-auto w-full max-w-settings px-24 pt-64 pb-96\", className)} {...props}>\n <header className=\"flex flex-col gap-8\">\n <div className=\"flex flex-wrap items-start justify-between gap-x-16 gap-y-8\">\n <h1 className=\"min-w-0 text-title-lg font-semibold text-fg text-balance\">{title}</h1>\n {actions && <div className=\"ml-auto flex h-34 shrink-0 items-center gap-8\">{actions}</div>}\n </div>\n {description && <p className=\"text-body-lg font-regular text-fg-secondary\">{description}</p>}\n </header>\n <div className=\"mt-8\">\n <InsetContent>\n <GutterContent>{children}</GutterContent>\n </InsetContent>\n </div>\n </div>\n </Body>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Settings.displayName = \"AppFrame.Settings\";\n\nexport const AppFrame = /* @__PURE__ */ Object.assign(Root, { MenuButton, Body, Settings });\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
4
|
import { t as n } from "./icon-D7ja-_Yk.js";
|
|
5
|
-
import { t as r } from "./icon-button-
|
|
5
|
+
import { t as r } from "./icon-button-CrdF_eMG.js";
|
|
6
6
|
import { forwardRef as i, useState as a } from "react";
|
|
7
7
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
8
8
|
import { Alert02Icon as c, AlertCircleIcon as l, Cancel01Icon as u, CheckmarkCircle02Icon as d, InformationCircleIcon as f } from "@hugeicons/core-free-icons";
|
|
@@ -82,4 +82,4 @@ process.env.NODE_ENV !== "production" && (_.displayName = "Banner");
|
|
|
82
82
|
//#endregion
|
|
83
83
|
export { m as n, p as r, _ as t };
|
|
84
84
|
|
|
85
|
-
//# sourceMappingURL=banner-
|
|
85
|
+
//# sourceMappingURL=banner-BA2ALw9M.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner-
|
|
1
|
+
{"version":3,"file":"banner-BA2ALw9M.js","names":["__icon_InformationCircleIcon","__icon_CheckmarkCircle02Icon","__icon_Alert02Icon","__icon_AlertCircleIcon","__icon_Cancel01Icon","cn","useUiText","Icon","IconButton","KAESO_BANNER_VARIANTS","KAESO_BANNER_DEFAULT_VARIANTS","ICON","InformationCircleIcon","CheckmarkCircle02Icon","Alert02Icon","AlertCircleIcon","ICON_TONE","Banner","hidden","setHidden","useState","t","dismissible","onDismiss","tone","layout","className","actions","icon","title","children","Cancel01Icon"],"sources":["../../src/components/banner/banner.tsx"],"sourcesContent":["import { forwardRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { InformationCircleIcon as __icon_InformationCircleIcon, CheckmarkCircle02Icon as __icon_CheckmarkCircle02Icon, Alert02Icon as __icon_Alert02Icon, AlertCircleIcon as __icon_AlertCircleIcon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_BANNER_VARIANTS = {\n tone: {\n neutral: { classes: \"bg-fill-1 text-fg\" },\n info: { classes: \"bg-info-tint text-fg\" },\n success: { classes: \"bg-success-tint text-fg\" },\n warning: { classes: \"bg-warning-tint text-fg\" },\n danger: { classes: \"bg-danger-tint text-fg\" },\n },\n layout: {\n inline: { classes: \"rounded-well px-16 py-12\" },\n full: { classes: \"rounded-none px-24 py-10\" },\n },\n} as const;\nexport const KAESO_BANNER_DEFAULT_VARIANTS = { tone: \"neutral\", layout: \"inline\" } as const;\n\nconst ICON: Record<keyof typeof KAESO_BANNER_VARIANTS.tone, IconData> = {\n neutral: __icon_InformationCircleIcon,\n info: __icon_InformationCircleIcon,\n success: __icon_CheckmarkCircle02Icon,\n warning: __icon_Alert02Icon,\n danger: __icon_AlertCircleIcon,\n};\nconst ICON_TONE = {\n neutral: \"text-fg-secondary\",\n info: \"text-info-text\",\n success: \"text-success-text\",\n warning: \"text-warning-text\",\n danger: \"text-danger-text\",\n} as const;\n\nexport interface BannerProps {\n tone?: keyof typeof KAESO_BANNER_VARIANTS.tone | undefined;\n layout?: keyof typeof KAESO_BANNER_VARIANTS.layout | undefined;\n title?: ReactNode | undefined;\n children?: ReactNode | undefined;\n icon?: IconData | undefined;\n actions?: ReactNode | undefined;\n onDismiss?: (() => void) | undefined;\n className?: string | undefined;\n}\n\nexport const Banner = /* @__PURE__ */ forwardRef<HTMLDivElement, BannerProps>(function Banner(\n { tone = \"neutral\", layout = \"inline\", title, children, icon, actions, onDismiss, className },\n ref,\n) {\n const [hidden, setHidden] = useState(false);\n const t = useUiText();\n if (hidden) return null;\n const dismissible = onDismiss && (tone === \"neutral\" || tone === \"info\");\n return (\n <div\n ref={ref}\n role={tone === \"danger\" ? \"alert\" : \"status\"}\n className={cn(\"@container w-full\", KAESO_BANNER_VARIANTS.tone[tone].classes, KAESO_BANNER_VARIANTS.layout[layout].classes, className)}\n >\n <div className={cn(\"flex items-start gap-8\", actions && \"@banner:items-center\")}>\n <div className=\"flex min-w-0 flex-1 flex-col gap-12 @banner:flex-row @banner:items-center @banner:gap-24\">\n <div className=\"flex min-w-0 flex-1 items-start gap-8\">\n <Icon icon={icon ?? ICON[tone]} size=\"sm\" className={cn(\"mt-2\", ICON_TONE[tone])} />\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 text-body\">\n {title && <span className=\"font-semibold text-fg\">{title}</span>}\n {children && <div className=\"text-fg text-pretty\">{children}</div>}\n </div>\n </div>\n {actions && <div className=\"ml-24 flex shrink-0 flex-wrap items-center gap-8 @banner:ml-0\">{actions}</div>}\n </div>\n {dismissible && (\n <IconButton\n icon={__icon_Cancel01Icon}\n aria-label={t(\"banner.dismiss\", \"Dismiss\")}\n size=\"xs\"\n className=\"-my-2 -mr-6\"\n onClick={() => {\n setHidden(true);\n onDismiss?.();\n }}\n />\n )}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Banner.displayName = \"Banner\";\n"],"mappings":";;;;;;;;;AAOA,IAAaS,IAAwB;CACnC,MAAM;EACJ,SAAS,EAAE,SAAS,oBAAoB;EACxC,MAAM,EAAE,SAAS,uBAAuB;EACxC,SAAS,EAAE,SAAS,0BAA0B;EAC9C,SAAS,EAAE,SAAS,0BAA0B;EAC9C,QAAQ,EAAE,SAAS,yBAAyB;CAC9C;CACA,QAAQ;EACN,QAAQ,EAAE,SAAS,2BAA2B;EAC9C,MAAM,EAAE,SAAS,2BAA2B;CAC9C;AACF,GACaC,IAAgC;CAAE,MAAM;CAAW,QAAQ;AAAS,GAE3EC,IAAkE;CACtE,SAASX;CACT,MAAMA;CACN,SAASC;CACT,SAASC;CACT,QAAQC;AACV,GACMa,IAAY;CAChB,SAAS;CACT,MAAM;CACN,SAAS;CACT,SAAS;CACT,QAAQ;AACV,GAaaC,IAAyB,kBAAwC,SAC5E,EAAE,UAAO,WAAW,YAAS,UAAU,UAAO,aAAU,SAAM,YAAS,cAAW,gBAClF,GACA;CACA,IAAM,CAACC,GAAQC,KAAaC,EAAS,EAAK,GACpCC,IAAIf,EAAU;CACpB,IAAIY,GAAQ,OAAO;CACnB,IAAMI,IAAcC,MAAcC,MAAS,aAAaA,MAAS;CACjE,OACE,kBAAC,OAAD;EACO;EACL,MAAMA,MAAS,WAAW,UAAU;EACpC,WAAWnB,EAAG,qBAAqBI,EAAsB,KAAKe,EAAK,CAAC,SAASf,EAAsB,OAAOgB,EAAO,CAAC,SAASC,CAAS;EAEpI,UAAA,kBAAC,OAAD;GAAK,WAAWrB,EAAG,0BAA0BsB,KAAW,sBAAsB;GAA9E,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAACpB,GAAD;MAAM,MAAMqB,KAAQjB,EAAKa;MAAO,MAAK;MAAK,WAAWnB,EAAG,QAAQW,EAAUQ,EAAK;KAAI,CAAA,GACnF,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACGK,KAAS,kBAAC,QAAD;OAAM,WAAU;OAAyB,UAAAA;MAAY,CAAA,GAC9DC,KAAY,kBAAC,OAAD;OAAK,WAAU;OAAuB;MAAc,CAAA,CAC9D;KACF,CAAA,CAAA;IACJ,CAAA,GAAAH,KAAW,kBAAC,OAAD;KAAK,WAAU;KAAiE,UAAAA;IAAa,CAAA,CACtG;GACJ,CAAA,GAAAL,KACC,kBAACd,GAAD;IACE,MAAMJ;IACN,cAAYiB,EAAE,kBAAkB,SAAS;IACzC,MAAK;IACL,WAAU;IACV,eAAe;KAEb,AADAF,EAAU,EAAI,GACdI,IAAY;IACd;GACD,CAAA,CAEA;;CACF,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAO,cAAc"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { i as t, r as n } from "./dev-CR1p7gCm.js";
|
|
4
|
-
import { n as r, r as i } from "./link-provider-
|
|
4
|
+
import { n as r, r as i } from "./link-provider-cvl8lSTT.js";
|
|
5
5
|
import { t as a } from "./icon-D7ja-_Yk.js";
|
|
6
6
|
import { i as o } from "./kbd-BF1vKXJf.js";
|
|
7
|
-
import { r as s } from "./tooltip-
|
|
7
|
+
import { r as s } from "./tooltip-OcwO0VUT.js";
|
|
8
8
|
import { i as c, r as l } from "./loader-DCfPndXa.js";
|
|
9
9
|
import { r as u } from "./swap-text-Dr0Irxz6.js";
|
|
10
10
|
import { forwardRef as d } from "react";
|
|
@@ -161,4 +161,4 @@ process.env.NODE_ENV !== "production" && (S.displayName = "Button");
|
|
|
161
161
|
//#endregion
|
|
162
162
|
export { x as a, h as i, S as n, g as r, b as t };
|
|
163
163
|
|
|
164
|
-
//# sourceMappingURL=button-
|
|
164
|
+
//# sourceMappingURL=button-CzuxqawA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-Dzu7_csE.js","names":["_Fragment","cn","warnStylingClassName","warnMissingName","isExternalHref","useLinkComponent","Icon","KbdSequence","Tooltip","useDelayedLoading","Spinner","SwapText","Fragment$1","KAESO_BUTTON_VARIANTS","KAESO_BUTTON_DEFAULT_VARIANTS","LEADING_ICON_PADDING","TRAILING_ICON_PADDING","CIRCLE","BUTTON_ICON_SIZE","buttonClasses","size","shape","leading","variant","trailing","fullWidth","Button","rest","props","LinkComp","className","spinning","loading","busy","isCircle","iconSize","spinnerSize","leadingIcon","trailingIcon","shortcut","count","reserveLabels","domProps","k","softDisabled","disabledReason","disabled","inert","classes","content","handleClick","onClick","el","href","external","target","rel","type"],"sources":["../../src/components/button/button.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type MouseEvent, type ReactElement, type ReactNode, type Ref } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useLinkComponent, isExternalHref } from \"../../utils/link-provider.js\";\nimport { warnMissingName, warnStylingClassName } from \"../../utils/dev.js\";\nimport { Icon, type IconData, type IconSize } from \"../icon/icon.js\";\nimport { Spinner, useDelayedLoading } from \"../loader/loader.js\";\nimport { KbdSequence } from \"../kbd/kbd.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { SwapText } from \"../swap-text/swap-text.js\";\n\nexport const KAESO_BUTTON_VARIANTS = {\n variant: {\n primary: { classes: \"material-primary\" },\n secondary: { classes: \"material-secondary\" },\n ghost: { classes: \"material-ghost\" },\n quiet: {\n classes: \"material-ghost text-fg-secondary hover:text-fg\",\n },\n soft: { classes: \"material-soft\" },\n danger: { classes: \"material-danger\" },\n \"danger-secondary\": { classes: \"material-danger-secondary\" },\n link: {\n classes: \"bg-transparent text-fg underline decoration-line-strong decoration-1 underline-offset-3 hover:decoration-current disabled:text-fg-disabled\",\n },\n },\n size: {\n xs: { classes: \"h-24 px-10 gap-4 text-caption font-medium ghost-end:-mr-10 ghost-start:-ml-10\" },\n sm: { classes: \"h-32 px-12 gap-6 text-body font-medium ghost-end:-mr-12 ghost-start:-ml-12\" },\n md: { classes: \"h-36 px-16 gap-6 text-body font-medium ghost-end:-mr-16 ghost-start:-ml-16\" },\n lg: { classes: \"h-40 px-18 gap-8 text-body font-medium ghost-end:-mr-18 ghost-start:-ml-18\" },\n xl: {\n classes: \"h-48 px-22 gap-8 text-body-lg font-medium ghost-end:-mr-22 ghost-start:-ml-22\",\n },\n },\n shape: {\n pill: { classes: \"rounded-pill\" },\n circle: { classes: \"rounded-pill p-0 justify-center ghost-end:mr-0 ghost-start:ml-0\" },\n },\n} as const;\nexport const KAESO_BUTTON_DEFAULT_VARIANTS = { variant: \"secondary\", size: \"md\", shape: \"pill\" } as const;\n\nexport type ButtonVariant = keyof typeof KAESO_BUTTON_VARIANTS.variant;\nexport type ButtonSize = keyof typeof KAESO_BUTTON_VARIANTS.size;\nexport type ButtonShape = keyof typeof KAESO_BUTTON_VARIANTS.shape;\n\nconst LEADING_ICON_PADDING: Record<ButtonSize, string> = { xs: \"pl-8\", sm: \"pl-10\", md: \"pl-14\", lg: \"pl-16\", xl: \"pl-20\" };\nconst TRAILING_ICON_PADDING: Record<ButtonSize, string> = { xs: \"pr-8\", sm: \"pr-10\", md: \"pr-14\", lg: \"pr-16\", xl: \"pr-20\" };\nconst CIRCLE: Record<ButtonSize, string> = { xs: \"size-24\", sm: \"size-32\", md: \"size-36\", lg: \"size-40\", xl: \"size-48\" };\nexport const BUTTON_ICON_SIZE: Record<ButtonSize, IconSize> = { xs: \"xs\", sm: \"sm\", md: \"sm\", lg: \"md\", xl: \"lg\" };\n\nexport function buttonClasses({\n variant = KAESO_BUTTON_DEFAULT_VARIANTS.variant,\n size = KAESO_BUTTON_DEFAULT_VARIANTS.size,\n shape = KAESO_BUTTON_DEFAULT_VARIANTS.shape,\n leading = false,\n trailing = false,\n fullWidth = false,\n}: {\n variant?: ButtonVariant | undefined;\n size?: ButtonSize | undefined;\n shape?: ButtonShape | undefined;\n leading?: boolean | undefined;\n trailing?: boolean | undefined;\n fullWidth?: boolean | undefined;\n} = {}) {\n return cn(\n \"relative inline-flex shrink-0 select-none items-center justify-center whitespace-nowrap no-underline\",\n \"cursor-pointer transition-control focus-ring tap-target disabled:cursor-not-allowed\",\n KAESO_BUTTON_VARIANTS.size[size].classes,\n KAESO_BUTTON_VARIANTS.shape[shape].classes,\n shape === \"circle\" && CIRCLE[size],\n shape === \"pill\" && leading && variant !== \"link\" && LEADING_ICON_PADDING[size],\n shape === \"pill\" && trailing && variant !== \"link\" && TRAILING_ICON_PADDING[size],\n variant === \"link\" && \"-mx-4 px-4\",\n KAESO_BUTTON_VARIANTS.variant[variant].classes,\n fullWidth && \"w-full\",\n );\n}\n\ninterface CommonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n variant?: ButtonVariant | undefined;\n size?: ButtonSize | undefined;\n loading?: boolean | undefined;\n disabledReason?: string | undefined;\n href?: string | undefined;\n target?: string | undefined;\n rel?: string | undefined;\n fullWidth?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport interface PillButtonProps extends CommonProps {\n shape?: \"pill\" | undefined;\n children: ReactNode;\n leadingIcon?: IconData | undefined;\n trailingIcon?: IconData | undefined;\n shortcut?: string[] | string[][] | undefined;\n count?: number | undefined;\n reserveLabels?: ReactNode[] | undefined;\n}\n\nexport interface CircleButtonProps extends CommonProps {\n shape: \"circle\";\n icon: IconData;\n \"aria-label\": string;\n children?: never | undefined;\n}\n\nexport type ButtonProps = PillButtonProps | CircleButtonProps;\n\nexport const Button = /* @__PURE__ */ forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(function Button(props, ref) {\n const {\n variant = KAESO_BUTTON_DEFAULT_VARIANTS.variant,\n size = KAESO_BUTTON_DEFAULT_VARIANTS.size,\n loading = false,\n disabled = false,\n disabledReason,\n href,\n target,\n rel,\n fullWidth,\n className,\n type,\n onClick,\n ...rest\n } = props;\n const LinkComp = useLinkComponent();\n warnStylingClassName(\"Button\", className);\n\n const spinning = useDelayedLoading(loading);\n const busy = loading || spinning;\n const isCircle = props.shape === \"circle\";\n const iconSize = BUTTON_ICON_SIZE[size];\n const spinnerSize = iconSize === \"xs\" ? \"xs\" : iconSize === \"sm\" ? \"sm\" : \"md\";\n const leadingIcon = !isCircle ? (props as PillButtonProps).leadingIcon : undefined;\n const trailingIcon = !isCircle ? (props as PillButtonProps).trailingIcon : undefined;\n const shortcut = !isCircle ? (props as PillButtonProps).shortcut : undefined;\n const count = !isCircle ? (props as PillButtonProps).count : undefined;\n const reserveLabels = !isCircle ? (props as PillButtonProps).reserveLabels : undefined;\n if (isCircle) warnMissingName(\"Button\", !!(props as CircleButtonProps)[\"aria-label\"]);\n\n const domProps = { ...rest } as Record<string, unknown>;\n for (const k of [\"shape\", \"icon\", \"leadingIcon\", \"trailingIcon\", \"shortcut\", \"count\", \"children\", \"reserveLabels\"]) delete domProps[k];\n\n const softDisabled = !!disabledReason && disabled;\n const inert = busy || softDisabled;\n const classes = cn(\n buttonClasses({\n variant,\n size,\n shape: isCircle ? \"circle\" : \"pill\",\n leading: !!leadingIcon,\n trailing: !!trailingIcon || !!shortcut || count !== undefined,\n fullWidth: !!fullWidth,\n }),\n busy && \"cursor-progress\",\n className,\n );\n\n const content = isCircle ? (\n spinning ? (\n <Spinner size={spinnerSize} />\n ) : (\n <Icon icon={(props as CircleButtonProps).icon} size={iconSize} />\n )\n ) : (\n <>\n {spinning && leadingIcon ? <Spinner size={spinnerSize} /> : leadingIcon ? <Icon icon={leadingIcon} size={iconSize} /> : null}\n <span className={cn(\"inline-flex min-w-0 items-center\", spinning && !leadingIcon && \"opacity-0\")}>\n {reserveLabels ? <SwapText reserve={reserveLabels}>{(props as PillButtonProps).children}</SwapText> : (props as PillButtonProps).children}\n </span>\n {count !== undefined && (\n <span\n className={cn(\n \"inline-flex h-20 min-w-20 items-center justify-center rounded-pill px-6 text-caption font-medium tabular\",\n variant === \"primary\" ? \"bg-on-ink/15 text-on-ink\" : variant === \"danger\" ? \"bg-on-danger/20 text-on-danger\" : \"bg-fill-2 text-fg-secondary\",\n )}\n >\n {count}\n </span>\n )}\n {shortcut && <KbdSequence keys={shortcut} tone={variant === \"primary\" || variant === \"danger\" ? \"onInk\" : \"default\"} />}\n {trailingIcon && <Icon icon={trailingIcon} size={iconSize} />}\n {spinning && !leadingIcon && <Spinner size={spinnerSize} className=\"absolute inset-0 m-auto\" />}\n </>\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement & HTMLAnchorElement>) => {\n if (inert) {\n e.preventDefault();\n return;\n }\n onClick?.(e as MouseEvent<HTMLButtonElement>);\n };\n\n let el: ReactNode;\n if (href && !disabled) {\n const external = isExternalHref(href);\n el = (\n <LinkComp\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n className={classes}\n {...(target ? { target } : external ? { target: \"_blank\" } : {})}\n {...(rel ? { rel } : external ? { rel: \"noopener noreferrer\" } : {})}\n {...(domProps as object)}\n {...(busy ? { \"aria-busy\": true, \"data-loading\": \"\" } : {})}\n onClick={handleClick}\n >\n {content}\n </LinkComp>\n );\n } else {\n el = (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type={type ?? \"button\"}\n className={classes}\n disabled={disabled && !softDisabled}\n {...(domProps as object)}\n {...(softDisabled ? { \"aria-disabled\": true } : {})}\n {...(busy ? { \"aria-busy\": true, \"data-loading\": \"\" } : {})}\n {...(softDisabled ? { \"data-disabled\": \"\" } : {})}\n onClick={handleClick}\n >\n {content}\n </button>\n );\n }\n\n if (disabledReason && disabled) {\n return <Tooltip content={disabledReason}>{el as ReactElement}</Tooltip>;\n }\n return el;\n});\nif (process.env.NODE_ENV !== \"production\") Button.displayName = \"Button\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button-CzuxqawA.js","names":["_Fragment","cn","warnStylingClassName","warnMissingName","isExternalHref","useLinkComponent","Icon","KbdSequence","Tooltip","useDelayedLoading","Spinner","SwapText","Fragment$1","KAESO_BUTTON_VARIANTS","KAESO_BUTTON_DEFAULT_VARIANTS","LEADING_ICON_PADDING","TRAILING_ICON_PADDING","CIRCLE","BUTTON_ICON_SIZE","buttonClasses","size","shape","leading","variant","trailing","fullWidth","Button","rest","props","LinkComp","className","spinning","loading","busy","isCircle","iconSize","spinnerSize","leadingIcon","trailingIcon","shortcut","count","reserveLabels","domProps","k","softDisabled","disabledReason","disabled","inert","classes","content","handleClick","onClick","el","href","external","target","rel","type"],"sources":["../../src/components/button/button.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, type MouseEvent, type ReactElement, type ReactNode, type Ref } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useLinkComponent, isExternalHref } from \"../../utils/link-provider.js\";\nimport { warnMissingName, warnStylingClassName } from \"../../utils/dev.js\";\nimport { Icon, type IconData, type IconSize } from \"../icon/icon.js\";\nimport { Spinner, useDelayedLoading } from \"../loader/loader.js\";\nimport { KbdSequence } from \"../kbd/kbd.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { SwapText } from \"../swap-text/swap-text.js\";\n\nexport const KAESO_BUTTON_VARIANTS = {\n variant: {\n primary: { classes: \"material-primary\" },\n secondary: { classes: \"material-secondary\" },\n ghost: { classes: \"material-ghost\" },\n quiet: {\n classes: \"material-ghost text-fg-secondary hover:text-fg\",\n },\n soft: { classes: \"material-soft\" },\n danger: { classes: \"material-danger\" },\n \"danger-secondary\": { classes: \"material-danger-secondary\" },\n link: {\n classes: \"bg-transparent text-fg underline decoration-line-strong decoration-1 underline-offset-3 hover:decoration-current disabled:text-fg-disabled\",\n },\n },\n size: {\n xs: { classes: \"h-24 px-10 gap-4 text-caption font-medium ghost-end:-mr-10 ghost-start:-ml-10\" },\n sm: { classes: \"h-32 px-12 gap-6 text-body font-medium ghost-end:-mr-12 ghost-start:-ml-12\" },\n md: { classes: \"h-36 px-16 gap-6 text-body font-medium ghost-end:-mr-16 ghost-start:-ml-16\" },\n lg: { classes: \"h-40 px-18 gap-8 text-body font-medium ghost-end:-mr-18 ghost-start:-ml-18\" },\n xl: {\n classes: \"h-48 px-22 gap-8 text-body-lg font-medium ghost-end:-mr-22 ghost-start:-ml-22\",\n },\n },\n shape: {\n pill: { classes: \"rounded-pill\" },\n circle: { classes: \"rounded-pill p-0 justify-center ghost-end:mr-0 ghost-start:ml-0\" },\n },\n} as const;\nexport const KAESO_BUTTON_DEFAULT_VARIANTS = { variant: \"secondary\", size: \"md\", shape: \"pill\" } as const;\n\nexport type ButtonVariant = keyof typeof KAESO_BUTTON_VARIANTS.variant;\nexport type ButtonSize = keyof typeof KAESO_BUTTON_VARIANTS.size;\nexport type ButtonShape = keyof typeof KAESO_BUTTON_VARIANTS.shape;\n\nconst LEADING_ICON_PADDING: Record<ButtonSize, string> = { xs: \"pl-8\", sm: \"pl-10\", md: \"pl-14\", lg: \"pl-16\", xl: \"pl-20\" };\nconst TRAILING_ICON_PADDING: Record<ButtonSize, string> = { xs: \"pr-8\", sm: \"pr-10\", md: \"pr-14\", lg: \"pr-16\", xl: \"pr-20\" };\nconst CIRCLE: Record<ButtonSize, string> = { xs: \"size-24\", sm: \"size-32\", md: \"size-36\", lg: \"size-40\", xl: \"size-48\" };\nexport const BUTTON_ICON_SIZE: Record<ButtonSize, IconSize> = { xs: \"xs\", sm: \"sm\", md: \"sm\", lg: \"md\", xl: \"lg\" };\n\nexport function buttonClasses({\n variant = KAESO_BUTTON_DEFAULT_VARIANTS.variant,\n size = KAESO_BUTTON_DEFAULT_VARIANTS.size,\n shape = KAESO_BUTTON_DEFAULT_VARIANTS.shape,\n leading = false,\n trailing = false,\n fullWidth = false,\n}: {\n variant?: ButtonVariant | undefined;\n size?: ButtonSize | undefined;\n shape?: ButtonShape | undefined;\n leading?: boolean | undefined;\n trailing?: boolean | undefined;\n fullWidth?: boolean | undefined;\n} = {}) {\n return cn(\n \"relative inline-flex shrink-0 select-none items-center justify-center whitespace-nowrap no-underline\",\n \"cursor-pointer transition-control focus-ring tap-target disabled:cursor-not-allowed\",\n KAESO_BUTTON_VARIANTS.size[size].classes,\n KAESO_BUTTON_VARIANTS.shape[shape].classes,\n shape === \"circle\" && CIRCLE[size],\n shape === \"pill\" && leading && variant !== \"link\" && LEADING_ICON_PADDING[size],\n shape === \"pill\" && trailing && variant !== \"link\" && TRAILING_ICON_PADDING[size],\n variant === \"link\" && \"-mx-4 px-4\",\n KAESO_BUTTON_VARIANTS.variant[variant].classes,\n fullWidth && \"w-full\",\n );\n}\n\ninterface CommonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n variant?: ButtonVariant | undefined;\n size?: ButtonSize | undefined;\n loading?: boolean | undefined;\n disabledReason?: string | undefined;\n href?: string | undefined;\n target?: string | undefined;\n rel?: string | undefined;\n fullWidth?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport interface PillButtonProps extends CommonProps {\n shape?: \"pill\" | undefined;\n children: ReactNode;\n leadingIcon?: IconData | undefined;\n trailingIcon?: IconData | undefined;\n shortcut?: string[] | string[][] | undefined;\n count?: number | undefined;\n reserveLabels?: ReactNode[] | undefined;\n}\n\nexport interface CircleButtonProps extends CommonProps {\n shape: \"circle\";\n icon: IconData;\n \"aria-label\": string;\n children?: never | undefined;\n}\n\nexport type ButtonProps = PillButtonProps | CircleButtonProps;\n\nexport const Button = /* @__PURE__ */ forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>(function Button(props, ref) {\n const {\n variant = KAESO_BUTTON_DEFAULT_VARIANTS.variant,\n size = KAESO_BUTTON_DEFAULT_VARIANTS.size,\n loading = false,\n disabled = false,\n disabledReason,\n href,\n target,\n rel,\n fullWidth,\n className,\n type,\n onClick,\n ...rest\n } = props;\n const LinkComp = useLinkComponent();\n warnStylingClassName(\"Button\", className);\n\n const spinning = useDelayedLoading(loading);\n const busy = loading || spinning;\n const isCircle = props.shape === \"circle\";\n const iconSize = BUTTON_ICON_SIZE[size];\n const spinnerSize = iconSize === \"xs\" ? \"xs\" : iconSize === \"sm\" ? \"sm\" : \"md\";\n const leadingIcon = !isCircle ? (props as PillButtonProps).leadingIcon : undefined;\n const trailingIcon = !isCircle ? (props as PillButtonProps).trailingIcon : undefined;\n const shortcut = !isCircle ? (props as PillButtonProps).shortcut : undefined;\n const count = !isCircle ? (props as PillButtonProps).count : undefined;\n const reserveLabels = !isCircle ? (props as PillButtonProps).reserveLabels : undefined;\n if (isCircle) warnMissingName(\"Button\", !!(props as CircleButtonProps)[\"aria-label\"]);\n\n const domProps = { ...rest } as Record<string, unknown>;\n for (const k of [\"shape\", \"icon\", \"leadingIcon\", \"trailingIcon\", \"shortcut\", \"count\", \"children\", \"reserveLabels\"]) delete domProps[k];\n\n const softDisabled = !!disabledReason && disabled;\n const inert = busy || softDisabled;\n const classes = cn(\n buttonClasses({\n variant,\n size,\n shape: isCircle ? \"circle\" : \"pill\",\n leading: !!leadingIcon,\n trailing: !!trailingIcon || !!shortcut || count !== undefined,\n fullWidth: !!fullWidth,\n }),\n busy && \"cursor-progress\",\n className,\n );\n\n const content = isCircle ? (\n spinning ? (\n <Spinner size={spinnerSize} />\n ) : (\n <Icon icon={(props as CircleButtonProps).icon} size={iconSize} />\n )\n ) : (\n <>\n {spinning && leadingIcon ? <Spinner size={spinnerSize} /> : leadingIcon ? <Icon icon={leadingIcon} size={iconSize} /> : null}\n <span className={cn(\"inline-flex min-w-0 items-center\", spinning && !leadingIcon && \"opacity-0\")}>\n {reserveLabels ? <SwapText reserve={reserveLabels}>{(props as PillButtonProps).children}</SwapText> : (props as PillButtonProps).children}\n </span>\n {count !== undefined && (\n <span\n className={cn(\n \"inline-flex h-20 min-w-20 items-center justify-center rounded-pill px-6 text-caption font-medium tabular\",\n variant === \"primary\" ? \"bg-on-ink/15 text-on-ink\" : variant === \"danger\" ? \"bg-on-danger/20 text-on-danger\" : \"bg-fill-2 text-fg-secondary\",\n )}\n >\n {count}\n </span>\n )}\n {shortcut && <KbdSequence keys={shortcut} tone={variant === \"primary\" || variant === \"danger\" ? \"onInk\" : \"default\"} />}\n {trailingIcon && <Icon icon={trailingIcon} size={iconSize} />}\n {spinning && !leadingIcon && <Spinner size={spinnerSize} className=\"absolute inset-0 m-auto\" />}\n </>\n );\n\n const handleClick = (e: MouseEvent<HTMLButtonElement & HTMLAnchorElement>) => {\n if (inert) {\n e.preventDefault();\n return;\n }\n onClick?.(e as MouseEvent<HTMLButtonElement>);\n };\n\n let el: ReactNode;\n if (href && !disabled) {\n const external = isExternalHref(href);\n el = (\n <LinkComp\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n className={classes}\n {...(target ? { target } : external ? { target: \"_blank\" } : {})}\n {...(rel ? { rel } : external ? { rel: \"noopener noreferrer\" } : {})}\n {...(domProps as object)}\n {...(busy ? { \"aria-busy\": true, \"data-loading\": \"\" } : {})}\n onClick={handleClick}\n >\n {content}\n </LinkComp>\n );\n } else {\n el = (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type={type ?? \"button\"}\n className={classes}\n disabled={disabled && !softDisabled}\n {...(domProps as object)}\n {...(softDisabled ? { \"aria-disabled\": true } : {})}\n {...(busy ? { \"aria-busy\": true, \"data-loading\": \"\" } : {})}\n {...(softDisabled ? { \"data-disabled\": \"\" } : {})}\n onClick={handleClick}\n >\n {content}\n </button>\n );\n }\n\n if (disabledReason && disabled) {\n return <Tooltip content={disabledReason}>{el as ReactElement}</Tooltip>;\n }\n return el;\n});\nif (process.env.NODE_ENV !== \"production\") Button.displayName = \"Button\";\n"],"mappings":"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"}
|