@logicplanes/kaeso-ui 0.4.1 → 0.4.2
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/ai/component-guides.md +51 -1
- package/ai/component-registry.json +104 -8
- package/ai/component-registry.md +30 -4
- 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 +5 -5
- package/dist/blocks/resource-list.js +4 -4
- package/dist/chunks/{app-frame-DZPEf2NQ.js → app-frame-C8csevkL.js} +7 -7
- package/dist/chunks/{app-frame-DZPEf2NQ.js.map → app-frame-C8csevkL.js.map} +1 -1
- package/dist/chunks/{avatar-HnvBUoe5.js → avatar-CWbdwbJv.js} +2 -2
- package/dist/chunks/{avatar-HnvBUoe5.js.map → avatar-CWbdwbJv.js.map} +1 -1
- package/dist/chunks/{badge-CM8ahjDR.js → badge-C2KtxCLB.js} +2 -2
- package/dist/chunks/{badge-CM8ahjDR.js.map → badge-C2KtxCLB.js.map} +1 -1
- package/dist/chunks/{banner-CvYgPwCc.js → banner-Cb8OWnqJ.js} +4 -4
- package/dist/chunks/{banner-CvYgPwCc.js.map → banner-Cb8OWnqJ.js.map} +1 -1
- package/dist/chunks/{button-9q66Ta23.js → button-Dzu7_csE.js} +7 -7
- package/dist/chunks/{button-9q66Ta23.js.map → button-Dzu7_csE.js.map} +1 -1
- package/dist/chunks/{calendar-CeNcqLFd.js → calendar--YemJsv4.js} +2 -2
- package/dist/chunks/{calendar-CeNcqLFd.js.map → calendar--YemJsv4.js.map} +1 -1
- package/dist/chunks/{checkbox-C_DrNA2N.js → checkbox-CDfC6E-M.js} +2 -2
- package/dist/chunks/{checkbox-C_DrNA2N.js.map → checkbox-CDfC6E-M.js.map} +1 -1
- package/dist/chunks/{cn-Isw2DnQX.js → cn-Dj6sRgkF.js} +8 -1
- package/dist/chunks/cn-Dj6sRgkF.js.map +1 -0
- package/dist/chunks/{code-block-mEH6Sy3h.js → code-block-U5fCqwgC.js} +75 -54
- package/dist/chunks/code-block-U5fCqwgC.js.map +1 -0
- package/dist/chunks/{code-Bp2p9AuD.js → code-tqj0uhBL.js} +2 -2
- package/dist/chunks/{code-Bp2p9AuD.js.map → code-tqj0uhBL.js.map} +1 -1
- package/dist/chunks/{collapsible-CtQNJn9b.js → collapsible-CKrCX_T9.js} +3 -3
- package/dist/chunks/{collapsible-CtQNJn9b.js.map → collapsible-CKrCX_T9.js.map} +1 -1
- package/dist/chunks/{combobox-D8ZOm8uT.js → combobox-BARyrpXH.js} +6 -6
- package/dist/chunks/{combobox-D8ZOm8uT.js.map → combobox-BARyrpXH.js.map} +1 -1
- package/dist/chunks/{command-list-CzMbdtJs.js → command-list-0RR4DpUe.js} +54 -54
- package/dist/chunks/command-list-0RR4DpUe.js.map +1 -0
- package/dist/chunks/{copy-button-Cdea0wKl.js → copy-button-7-irieJw.js} +5 -5
- package/dist/chunks/{copy-button-Cdea0wKl.js.map → copy-button-7-irieJw.js.map} +1 -1
- package/dist/chunks/{core-FtMDNELx.js → core-Bl9NrBLS.js} +4 -4
- package/dist/chunks/{core-FtMDNELx.js.map → core-Bl9NrBLS.js.map} +1 -1
- package/dist/chunks/{date-popup-NytWvSNh.js → date-popup-RQkqhko4.js} +4 -4
- package/dist/chunks/{date-popup-NytWvSNh.js.map → date-popup-RQkqhko4.js.map} +1 -1
- package/dist/chunks/{dialog-BZCVFmGF.js → dialog-DQ9vZ7vr.js} +5 -5
- package/dist/chunks/{dialog-BZCVFmGF.js.map → dialog-DQ9vZ7vr.js.map} +1 -1
- package/dist/chunks/{empty-By1qTJr6.js → empty-DvhyMXQq.js} +2 -2
- package/dist/chunks/{empty-By1qTJr6.js.map → empty-DvhyMXQq.js.map} +1 -1
- package/dist/chunks/{field-DfITT6Jm.js → field-TviMvYa2.js} +2 -2
- package/dist/chunks/{field-DfITT6Jm.js.map → field-TviMvYa2.js.map} +1 -1
- package/dist/chunks/{icon-D5uD_mnL.js → icon-D7ja-_Yk.js} +2 -2
- package/dist/chunks/{icon-D5uD_mnL.js.map → icon-D7ja-_Yk.js.map} +1 -1
- package/dist/chunks/{icon-button-C7Du4pvb.js → icon-button-CPYR21Sz.js} +3 -3
- package/dist/chunks/{icon-button-C7Du4pvb.js.map → icon-button-CPYR21Sz.js.map} +1 -1
- package/dist/chunks/{identity-BcVQd-7H.js → identity-DPuTkMsa.js} +6 -6
- package/dist/chunks/{identity-BcVQd-7H.js.map → identity-DPuTkMsa.js.map} +1 -1
- package/dist/chunks/{input-B6Docqrk.js → input-TyLIaQ5k.js} +5 -5
- package/dist/chunks/{input-B6Docqrk.js.map → input-TyLIaQ5k.js.map} +1 -1
- package/dist/chunks/{input-group-Dgdb0JpZ.js → input-group-CUSNsQjQ.js} +4 -4
- package/dist/chunks/{input-group-Dgdb0JpZ.js.map → input-group-CUSNsQjQ.js.map} +1 -1
- package/dist/chunks/{iso-field-SOZ7Z-yE.js → iso-field-CWbxlll-.js} +2 -2
- package/dist/chunks/{iso-field-SOZ7Z-yE.js.map → iso-field-CWbxlll-.js.map} +1 -1
- package/dist/chunks/{json-view-DCTMY_j4.js → json-view-Dqd2TDkc.js} +3 -3
- package/dist/chunks/{json-view-DCTMY_j4.js.map → json-view-Dqd2TDkc.js.map} +1 -1
- package/dist/chunks/{kbd-9A9rX60U.js → kbd-BF1vKXJf.js} +2 -2
- package/dist/chunks/{kbd-9A9rX60U.js.map → kbd-BF1vKXJf.js.map} +1 -1
- package/dist/chunks/{link-CtII7u3h.js → link-B2I55xg9.js} +3 -3
- package/dist/chunks/{link-CtII7u3h.js.map → link-B2I55xg9.js.map} +1 -1
- package/dist/chunks/{list-CMXBTVkI.js → list-CkOozrVY.js} +8 -8
- package/dist/chunks/{list-CMXBTVkI.js.map → list-CkOozrVY.js.map} +1 -1
- package/dist/chunks/{loader-DqOUwS1j.js → loader-DCfPndXa.js} +2 -2
- package/dist/chunks/{loader-DqOUwS1j.js.map → loader-DCfPndXa.js.map} +1 -1
- package/dist/chunks/{markdown-CwVQ0niB.js → markdown-BEgwZFlu.js} +9 -9
- package/dist/chunks/{markdown-CwVQ0niB.js.map → markdown-BEgwZFlu.js.map} +1 -1
- package/dist/chunks/{menu-Cjg4RggA.js → menu-fl_QQb38.js} +4 -4
- package/dist/chunks/{menu-Cjg4RggA.js.map → menu-fl_QQb38.js.map} +1 -1
- package/dist/chunks/{meter-VrC2J2GF.js → meter-Bj4N3Xuh.js} +2 -2
- package/dist/chunks/{meter-VrC2J2GF.js.map → meter-Bj4N3Xuh.js.map} +1 -1
- package/dist/chunks/{nav-sheet-Y2Ite-iF.js → nav-sheet-B2rNb8GB.js} +2 -2
- package/dist/chunks/{nav-sheet-Y2Ite-iF.js.map → nav-sheet-B2rNb8GB.js.map} +1 -1
- package/dist/chunks/{nav-wordmark-CjWM3NYa.js → nav-wordmark-_pjheAsZ.js} +2 -2
- package/dist/chunks/{nav-wordmark-CjWM3NYa.js.map → nav-wordmark-_pjheAsZ.js.map} +1 -1
- package/dist/chunks/{page-header-CZCQVHYE.js → page-header-DjUMDG69.js} +4 -4
- package/dist/chunks/{page-header-CZCQVHYE.js.map → page-header-DjUMDG69.js.map} +1 -1
- package/dist/chunks/{pagination-BStrMDqM.js → pagination-BaY8jdli.js} +4 -4
- package/dist/chunks/{pagination-BStrMDqM.js.map → pagination-BaY8jdli.js.map} +1 -1
- package/dist/chunks/{picker-popover-BerQAEBT.js → picker-popover-DShea4b8.js} +6 -6
- package/dist/chunks/{picker-popover-BerQAEBT.js.map → picker-popover-DShea4b8.js.map} +1 -1
- package/dist/chunks/{popover-CgLt_4yG.js → popover-CFMwaeIP.js} +2 -2
- package/dist/chunks/{popover-CgLt_4yG.js.map → popover-CFMwaeIP.js.map} +1 -1
- package/dist/chunks/{radio-07Muf4cX.js → radio-Yl0nO-Sj.js} +2 -2
- package/dist/chunks/{radio-07Muf4cX.js.map → radio-Yl0nO-Sj.js.map} +1 -1
- package/dist/chunks/{range-popup-BCov1iPe.js → range-popup-CkhsK3wI.js} +6 -6
- package/dist/chunks/{range-popup-BCov1iPe.js.map → range-popup-CkhsK3wI.js.map} +1 -1
- package/dist/chunks/{release-art-69WpgVik.js → release-art-ZwfFQImt.js} +2 -2
- package/dist/chunks/{release-art-69WpgVik.js.map → release-art-ZwfFQImt.js.map} +1 -1
- package/dist/chunks/{rights-UVngOX_4.js → rights-BlQx9C_j.js} +9 -9
- package/dist/chunks/{rights-UVngOX_4.js.map → rights-BlQx9C_j.js.map} +1 -1
- package/dist/chunks/scroll-area-D8MD7Vpo.js +42 -0
- package/dist/chunks/scroll-area-D8MD7Vpo.js.map +1 -0
- package/dist/chunks/{section-Bvg0EUnr.js → section-Ce1efbsP.js} +3 -3
- package/dist/chunks/{section-Bvg0EUnr.js.map → section-Ce1efbsP.js.map} +1 -1
- package/dist/chunks/{segmented-DRLDN8EW.js → segmented-C97zvDR1.js} +4 -4
- package/dist/chunks/{segmented-DRLDN8EW.js.map → segmented-C97zvDR1.js.map} +1 -1
- package/dist/chunks/{select-eFTHLeYG.js → select-x4XVsdCI.js} +4 -4
- package/dist/chunks/{select-eFTHLeYG.js.map → select-x4XVsdCI.js.map} +1 -1
- package/dist/chunks/{separator-D86IW7Ge.js → separator-D7TzNHmX.js} +2 -2
- package/dist/chunks/{separator-D86IW7Ge.js.map → separator-D7TzNHmX.js.map} +1 -1
- package/dist/chunks/{sidebar-DifJ5KgE.js → sidebar-DtFlejU7.js} +7 -7
- package/dist/chunks/{sidebar-DifJ5KgE.js.map → sidebar-DtFlejU7.js.map} +1 -1
- package/dist/chunks/{sidebar-menu-XKOiwrQp.js → sidebar-menu-CxQbGwyj.js} +2 -2
- package/dist/chunks/{sidebar-menu-XKOiwrQp.js.map → sidebar-menu-CxQbGwyj.js.map} +1 -1
- package/dist/chunks/{skeleton-Cu74kGJA.js → skeleton-Dcz57Zyp.js} +2 -2
- package/dist/chunks/{skeleton-Cu74kGJA.js.map → skeleton-Dcz57Zyp.js.map} +1 -1
- package/dist/chunks/{slider-Dh0qq1wa.js → slider-Ci83PGtj.js} +2 -2
- package/dist/chunks/{slider-Dh0qq1wa.js.map → slider-Ci83PGtj.js.map} +1 -1
- package/dist/chunks/{status-dot-u4Izk-uC.js → status-dot-QJTF0Yv4.js} +3 -3
- package/dist/chunks/{status-dot-u4Izk-uC.js.map → status-dot-QJTF0Yv4.js.map} +1 -1
- package/dist/chunks/{swap-text-CC77iKJF.js → swap-text-Dr0Irxz6.js} +2 -2
- package/dist/chunks/{swap-text-CC77iKJF.js.map → swap-text-Dr0Irxz6.js.map} +1 -1
- package/dist/chunks/{switch-CbU9m9gi.js → switch-b-VkStWj.js} +3 -3
- package/dist/chunks/{switch-CbU9m9gi.js.map → switch-b-VkStWj.js.map} +1 -1
- package/dist/chunks/table-BeOSKl_3.js +84 -0
- package/dist/chunks/table-BeOSKl_3.js.map +1 -0
- package/dist/chunks/{tag-CqSk8F7M.js → tag-DNdX1XRR.js} +4 -4
- package/dist/chunks/{tag-CqSk8F7M.js.map → tag-DNdX1XRR.js.map} +1 -1
- package/dist/chunks/{text-hFc6TDp9.js → text-DCGGNqTM.js} +3 -3
- package/dist/chunks/{text-hFc6TDp9.js.map → text-DCGGNqTM.js.map} +1 -1
- package/dist/chunks/{textarea-17Ftvph_.js → textarea-CT2S2JVM.js} +5 -5
- package/dist/chunks/{textarea-17Ftvph_.js.map → textarea-CT2S2JVM.js.map} +1 -1
- package/dist/chunks/{timeseries-CbnSFD5q.js → timeseries-B-8OfeZm.js} +3 -3
- package/dist/chunks/{timeseries-CbnSFD5q.js.map → timeseries-B-8OfeZm.js.map} +1 -1
- package/dist/chunks/{toolbar-B_960Ttx.js → toolbar-DL6zVrzU.js} +2 -2
- package/dist/chunks/{toolbar-B_960Ttx.js.map → toolbar-DL6zVrzU.js.map} +1 -1
- package/dist/chunks/{tooltip-CRApbLF6.js → tooltip-BMQ9BtPp.js} +4 -4
- package/dist/chunks/{tooltip-CRApbLF6.js.map → tooltip-BMQ9BtPp.js.map} +1 -1
- package/dist/chunks/{tooltip-root-Dssjjp-E.js → tooltip-root-BeAMXzxU.js} +4 -4
- package/dist/chunks/{tooltip-root-Dssjjp-E.js.map → tooltip-root-BeAMXzxU.js.map} +1 -1
- package/dist/components/app-frame.js +2 -2
- package/dist/components/avatar.js +1 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +4 -4
- package/dist/components/button.js +1 -1
- package/dist/components/calendar.js +1 -1
- package/dist/components/charts/bar.js +2 -2
- package/dist/components/charts/donut.js +2 -2
- package/dist/components/charts/gauge.js +2 -2
- package/dist/components/charts/heatmap.js +1 -1
- package/dist/components/charts/sankey.js +2 -2
- package/dist/components/charts/sparkline.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 +2 -2
- package/dist/components/code.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +32 -31
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +12 -12
- package/dist/components/date-picker.js +6 -6
- package/dist/components/dialog.js +2 -2
- package/dist/components/display-options.js +8 -8
- package/dist/components/empty.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/figure.js +60 -0
- package/dist/components/figure.js.map +1 -0
- package/dist/components/filter-chip.js +5 -5
- package/dist/components/filter-row.js +1 -1
- package/dist/components/flow.js +2 -2
- package/dist/components/heading.js +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon.js +1 -1
- package/dist/components/input.js +7 -7
- package/dist/components/kaeso/conversation.js +8 -8
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +5 -5
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +5 -5
- package/dist/components/kaeso.js +10 -10
- package/dist/components/kbd.js +1 -1
- package/dist/components/key-value.js +3 -3
- package/dist/components/label.js +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/loader.js +2 -2
- package/dist/components/logo.js +2 -2
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +16 -16
- package/dist/components/popover.js +2 -2
- package/dist/components/qr-code.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/release-art.js +1 -1
- package/dist/components/scroll-area.js +1 -41
- package/dist/components/section.js +1 -1
- package/dist/components/segmented.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/separator.js +1 -1
- package/dist/components/settings.js +2 -2
- package/dist/components/sheet.js +2 -2
- package/dist/components/sidebar.js +1 -1
- package/dist/components/skeleton.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/stat.js +3 -3
- package/dist/components/status-dot.js +1 -1
- package/dist/components/surface.js +1 -1
- package/dist/components/swap-text.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +2 -2
- package/dist/components/tag.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/theme-image.js +1 -1
- package/dist/components/theme-menu.js +2 -2
- package/dist/components/theme-select.js +1 -1
- package/dist/components/timeline.js +1 -1
- package/dist/components/toast.js +4 -4
- package/dist/components/toc.js +37 -22
- package/dist/components/toc.js.map +1 -1
- package/dist/components/toolbar.js +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/visually-hidden.js +1 -1
- package/dist/index.js +88 -86
- package/dist/styles.css +1 -1
- package/dist/types/components/code-block/code-block.d.ts +1 -1
- package/dist/types/components/code-block/indent.d.ts +3 -0
- package/dist/types/components/command-list/command-list.d.ts +1 -0
- package/dist/types/components/command-list/docs.d.ts +1 -0
- package/dist/types/components/command-palette/command-palette.d.ts +1 -0
- package/dist/types/components/command-palette/docs.d.ts +1 -0
- package/dist/types/components/figure/docs.d.ts +12 -0
- package/dist/types/components/figure/figure.d.ts +25 -0
- package/dist/types/components/figure/index.d.ts +1 -0
- package/dist/types/components/table/docs.d.ts +3 -1
- package/dist/types/components/table/table.d.ts +18 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/utils/cn.d.ts +4 -0
- package/dist/utils.js +1 -1
- package/package.json +3 -3
- package/dist/chunks/cn-Isw2DnQX.js.map +0 -1
- package/dist/chunks/code-block-mEH6Sy3h.js.map +0 -1
- package/dist/chunks/command-list-CzMbdtJs.js.map +0 -1
- package/dist/chunks/table-CTxDp7zC.js +0 -67
- package/dist/chunks/table-CTxDp7zC.js.map +0 -1
- package/dist/components/scroll-area.js.map +0 -1
package/ai/component-guides.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @logicplanes/kaeso-ui component guides
|
|
2
2
|
|
|
3
|
-
Version 0.4.
|
|
3
|
+
Version 0.4.2. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
|
|
4
4
|
|
|
5
5
|
## AlertDialog
|
|
6
6
|
|
|
@@ -1735,6 +1735,27 @@ A label, a control and its help, wired together; an error shows under the contro
|
|
|
1735
1735
|
</div>
|
|
1736
1736
|
```
|
|
1737
1737
|
|
|
1738
|
+
## Figure
|
|
1739
|
+
|
|
1740
|
+
A diagram or image set apart from the text: centred on a well, with a caption, scrolling sideways only when it can't shrink to fit.
|
|
1741
|
+
|
|
1742
|
+
`import { Figure } from "@logicplanes/kaeso-ui";`
|
|
1743
|
+
|
|
1744
|
+
### Accessibility
|
|
1745
|
+
|
|
1746
|
+
- The caption names the figure; the label names the region that scrolls, so keyboard users know what they scroll.
|
|
1747
|
+
- Put a diagram's longer description in a visually hidden element and point the image's aria-describedby at it.
|
|
1748
|
+
|
|
1749
|
+
### Examples
|
|
1750
|
+
|
|
1751
|
+
#### A diagram with its caption
|
|
1752
|
+
|
|
1753
|
+
```tsx
|
|
1754
|
+
<Figure label="Diagram: route of a request" caption="Route of a request" className="w-full">
|
|
1755
|
+
<ThemeImage light="/demos/route.light.svg" dark="/demos/route.dark.svg" alt="Route of a request: app, Kaeso, provider" width={364} height={49} />
|
|
1756
|
+
</Figure>
|
|
1757
|
+
```
|
|
1758
|
+
|
|
1738
1759
|
## FilterChip
|
|
1739
1760
|
|
|
1740
1761
|
A filter as one pill, “Status is 2xx”: property, operator and value, each opening a menu.
|
|
@@ -4655,6 +4676,35 @@ Long text and links wrap like prose; the row grows and keeps its padding, and on
|
|
|
4655
4676
|
</Table>
|
|
4656
4677
|
```
|
|
4657
4678
|
|
|
4679
|
+
#### Compact
|
|
4680
|
+
|
|
4681
|
+
A reference table of five or more columns puts 8px between them, so it fits the column without scrolling.
|
|
4682
|
+
|
|
4683
|
+
```tsx
|
|
4684
|
+
<Table density="compact" className="w-640">
|
|
4685
|
+
<Table.Head>
|
|
4686
|
+
<Table.Row>
|
|
4687
|
+
<Table.HeaderCell>Variable</Table.HeaderCell>
|
|
4688
|
+
<Table.HeaderCell>TOML key</Table.HeaderCell>
|
|
4689
|
+
<Table.HeaderCell>Type</Table.HeaderCell>
|
|
4690
|
+
<Table.HeaderCell>Default</Table.HeaderCell>
|
|
4691
|
+
<Table.HeaderCell>What it does</Table.HeaderCell>
|
|
4692
|
+
</Table.Row>
|
|
4693
|
+
</Table.Head>
|
|
4694
|
+
<Table.Body>
|
|
4695
|
+
{settings.map((s) => (
|
|
4696
|
+
<Table.Row key={s.variable}>
|
|
4697
|
+
<Table.Cell className="mono text-small">{s.variable}</Table.Cell>
|
|
4698
|
+
<Table.Cell className="mono text-small">{s.key}</Table.Cell>
|
|
4699
|
+
<Table.Cell>{s.type}</Table.Cell>
|
|
4700
|
+
<Table.Cell className="mono text-small whitespace-nowrap">{s.default}</Table.Cell>
|
|
4701
|
+
<Table.Cell>{s.does}</Table.Cell>
|
|
4702
|
+
</Table.Row>
|
|
4703
|
+
))}
|
|
4704
|
+
</Table.Body>
|
|
4705
|
+
</Table>
|
|
4706
|
+
```
|
|
4707
|
+
|
|
4658
4708
|
## TableOfContents
|
|
4659
4709
|
|
|
4660
4710
|
“On this page”: the heading in view in text color with a 2px ink bar.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "@logicplanes/kaeso-ui",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"entry": "app-frame",
|
|
@@ -2261,10 +2261,10 @@
|
|
|
2261
2261
|
},
|
|
2262
2262
|
{
|
|
2263
2263
|
"name": "wrap",
|
|
2264
|
-
"type": "boolean",
|
|
2264
|
+
"type": "boolean | \"phone\"",
|
|
2265
2265
|
"required": false,
|
|
2266
2266
|
"default": "false",
|
|
2267
|
-
"description": "Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response)."
|
|
2267
|
+
"description": "Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response). `phone` wraps them only below 640px, with wrapped parts indented, and scrolls from there up."
|
|
2268
2268
|
}
|
|
2269
2269
|
],
|
|
2270
2270
|
"file": "src/components/code-block/code-block.tsx"
|
|
@@ -2359,10 +2359,10 @@
|
|
|
2359
2359
|
},
|
|
2360
2360
|
{
|
|
2361
2361
|
"name": "wrap",
|
|
2362
|
-
"type": "boolean",
|
|
2362
|
+
"type": "boolean | \"phone\"",
|
|
2363
2363
|
"required": false,
|
|
2364
2364
|
"default": "false",
|
|
2365
|
-
"description": "Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response)."
|
|
2365
|
+
"description": "Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response). `phone` wraps them only below 640px, with wrapped parts indented, and scrolls from there up."
|
|
2366
2366
|
}
|
|
2367
2367
|
],
|
|
2368
2368
|
"file": "src/components/code-block/code-block.tsx"
|
|
@@ -2955,6 +2955,13 @@
|
|
|
2955
2955
|
"default": null,
|
|
2956
2956
|
"description": "Classes for the layout of the outer element: margin, width and placement, never its look."
|
|
2957
2957
|
},
|
|
2958
|
+
{
|
|
2959
|
+
"name": "counts",
|
|
2960
|
+
"type": "boolean",
|
|
2961
|
+
"required": false,
|
|
2962
|
+
"default": "true",
|
|
2963
|
+
"description": "Shows each group's count beside its caption; false leaves them out, for a site whose house style has no result counters."
|
|
2964
|
+
},
|
|
2958
2965
|
{
|
|
2959
2966
|
"name": "data-force",
|
|
2960
2967
|
"type": "string",
|
|
@@ -3266,6 +3273,13 @@
|
|
|
3266
3273
|
"default": null,
|
|
3267
3274
|
"description": "The commands, in groups with a heading each."
|
|
3268
3275
|
},
|
|
3276
|
+
{
|
|
3277
|
+
"name": "counts",
|
|
3278
|
+
"type": "boolean",
|
|
3279
|
+
"required": false,
|
|
3280
|
+
"default": null,
|
|
3281
|
+
"description": "Shows each group's count beside its caption; false leaves them out, for a site whose house style has no result counters."
|
|
3282
|
+
},
|
|
3269
3283
|
{
|
|
3270
3284
|
"name": "defaultQuery",
|
|
3271
3285
|
"type": "string",
|
|
@@ -5026,6 +5040,75 @@
|
|
|
5026
5040
|
}
|
|
5027
5041
|
}
|
|
5028
5042
|
},
|
|
5043
|
+
{
|
|
5044
|
+
"entry": "figure",
|
|
5045
|
+
"kind": "components",
|
|
5046
|
+
"import": "@logicplanes/kaeso-ui/figure",
|
|
5047
|
+
"components": [
|
|
5048
|
+
{
|
|
5049
|
+
"name": "Figure",
|
|
5050
|
+
"description": "A diagram or image set apart from the text: centred on a well, with a caption, scrolling sideways only when it can't shrink to fit.",
|
|
5051
|
+
"props": [
|
|
5052
|
+
{
|
|
5053
|
+
"name": "children",
|
|
5054
|
+
"type": "ReactNode",
|
|
5055
|
+
"required": true,
|
|
5056
|
+
"default": null,
|
|
5057
|
+
"description": "What the figure shows, usually a ThemeImage."
|
|
5058
|
+
},
|
|
5059
|
+
{
|
|
5060
|
+
"name": "label",
|
|
5061
|
+
"type": "string",
|
|
5062
|
+
"required": true,
|
|
5063
|
+
"default": null,
|
|
5064
|
+
"description": "The name of the figure's scrolling region, read by screen readers."
|
|
5065
|
+
},
|
|
5066
|
+
{
|
|
5067
|
+
"name": "caption",
|
|
5068
|
+
"type": "ReactNode",
|
|
5069
|
+
"required": false,
|
|
5070
|
+
"default": null,
|
|
5071
|
+
"description": "A few words under the figure that say what it shows, such as a diagram's title."
|
|
5072
|
+
},
|
|
5073
|
+
{
|
|
5074
|
+
"name": "className",
|
|
5075
|
+
"type": "string",
|
|
5076
|
+
"required": false,
|
|
5077
|
+
"default": null,
|
|
5078
|
+
"description": "Classes for the layout of the outer element: margin, width and placement, never its look."
|
|
5079
|
+
},
|
|
5080
|
+
{
|
|
5081
|
+
"name": "focus",
|
|
5082
|
+
"type": "number",
|
|
5083
|
+
"required": false,
|
|
5084
|
+
"default": "0.5",
|
|
5085
|
+
"description": "Where a figure wider than its column starts, as a share of its width: 0.5, the middle, by default."
|
|
5086
|
+
},
|
|
5087
|
+
{
|
|
5088
|
+
"name": "surface",
|
|
5089
|
+
"type": "\"well\" | \"plain\"",
|
|
5090
|
+
"required": false,
|
|
5091
|
+
"default": "well",
|
|
5092
|
+
"description": "The figure's background: a well like a code block's, or none."
|
|
5093
|
+
}
|
|
5094
|
+
],
|
|
5095
|
+
"file": "src/components/figure/figure.tsx"
|
|
5096
|
+
}
|
|
5097
|
+
],
|
|
5098
|
+
"variants": {
|
|
5099
|
+
"FIGURE": {
|
|
5100
|
+
"axes": {
|
|
5101
|
+
"surface": {
|
|
5102
|
+
"well": "A well like a code block's: radius 14, fill, no ring (default)",
|
|
5103
|
+
"plain": "No surface, for a figure that brings its own"
|
|
5104
|
+
}
|
|
5105
|
+
},
|
|
5106
|
+
"defaults": {
|
|
5107
|
+
"surface": "well"
|
|
5108
|
+
}
|
|
5109
|
+
}
|
|
5110
|
+
}
|
|
5111
|
+
},
|
|
5029
5112
|
{
|
|
5030
5113
|
"entry": "filter-chip",
|
|
5031
5114
|
"kind": "components",
|
|
@@ -12374,7 +12457,15 @@
|
|
|
12374
12457
|
{
|
|
12375
12458
|
"name": "Table",
|
|
12376
12459
|
"description": "A plain table for small amounts of data; use `DataTable` for sorting, selection and many rows.",
|
|
12377
|
-
"props": [
|
|
12460
|
+
"props": [
|
|
12461
|
+
{
|
|
12462
|
+
"name": "density",
|
|
12463
|
+
"type": "\"default\" | \"compact\"",
|
|
12464
|
+
"required": false,
|
|
12465
|
+
"default": "default",
|
|
12466
|
+
"description": "12px between columns (`default`), or 8px (`compact`) for reference tables of five or more columns."
|
|
12467
|
+
}
|
|
12468
|
+
],
|
|
12378
12469
|
"file": "src/components/table/table.tsx"
|
|
12379
12470
|
}
|
|
12380
12471
|
],
|
|
@@ -12384,10 +12475,15 @@
|
|
|
12384
12475
|
"align": {
|
|
12385
12476
|
"start": "Text (default)",
|
|
12386
12477
|
"end": "Numbers"
|
|
12478
|
+
},
|
|
12479
|
+
"density": {
|
|
12480
|
+
"default": "12px between columns (default)",
|
|
12481
|
+
"compact": "8px between columns, for reference tables of five or more columns"
|
|
12387
12482
|
}
|
|
12388
12483
|
},
|
|
12389
12484
|
"defaults": {
|
|
12390
|
-
"align": "start"
|
|
12485
|
+
"align": "start",
|
|
12486
|
+
"density": "default"
|
|
12391
12487
|
}
|
|
12392
12488
|
}
|
|
12393
12489
|
}
|
|
@@ -12743,7 +12839,7 @@
|
|
|
12743
12839
|
},
|
|
12744
12840
|
{
|
|
12745
12841
|
"name": "variant",
|
|
12746
|
-
"type": "\"title\" | \"display\" | \"
|
|
12842
|
+
"type": "\"title\" | \"display\" | \"caption\" | \"title-sm\" | \"title-lg\" | \"body\" | \"small\" | \"micro\" | \"body-lg\" | \"metric\"",
|
|
12747
12843
|
"required": false,
|
|
12748
12844
|
"default": "body",
|
|
12749
12845
|
"description": "The type style, from `micro` to `display`."
|
package/ai/component-registry.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @logicplanes/kaeso-ui component registry
|
|
2
2
|
|
|
3
|
-
Version 0.4.
|
|
3
|
+
Version 0.4.2. Generated from the component types, their descriptions and variants; do not edit.
|
|
4
4
|
|
|
5
5
|
## app-frame
|
|
6
6
|
|
|
@@ -523,7 +523,7 @@ Highlighted code on a well: Kaeso's monochrome theme, copy on hover, tabs, line
|
|
|
523
523
|
| `tab` | `string` | | The label of the tab to show, such as a language the reader chose before. A label the block lacks leaves its own choice. |
|
|
524
524
|
| `tabs` | `CodeTab[]` | | Several versions: "Python · Node · curl", shown as pill tabs. |
|
|
525
525
|
| `title` | `ReactNode` | | A file name in the title bar. |
|
|
526
|
-
| `wrap` | `boolean` | `false` | Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response). |
|
|
526
|
+
| `wrap` | `boolean \| "phone"` | `false` | Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response). `phone` wraps them only below 640px, with wrapped parts indented, and scrolls from there up. |
|
|
527
527
|
|
|
528
528
|
### CodeHighlighted
|
|
529
529
|
|
|
@@ -543,7 +543,7 @@ The same component as `CodeBlock`, under another name.
|
|
|
543
543
|
| `tab` | `string` | | The label of the tab to show, such as a language the reader chose before. A label the block lacks leaves its own choice. |
|
|
544
544
|
| `tabs` | `CodeTab[]` | | Several versions: "Python · Node · curl", shown as pill tabs. |
|
|
545
545
|
| `title` | `ReactNode` | | A file name in the title bar. |
|
|
546
|
-
| `wrap` | `boolean` | `false` | Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response). |
|
|
546
|
+
| `wrap` | `boolean \| "phone"` | `false` | Long lines wrap instead of scrolling sideways: code in a narrow column (a model's response). `phone` wraps them only below 640px, with wrapped parts indented, and scrolls from there up. |
|
|
547
547
|
|
|
548
548
|
### JsonView
|
|
549
549
|
|
|
@@ -680,6 +680,7 @@ A search field over a long list that stays fast with thousands of rows: fuzzy ma
|
|
|
680
680
|
| `groups` * | `CommandListGroup[]` | | The rows, in groups; a group with a label gets a sticky caption with its mark and count, and a loading group keeps its caption while it has no rows yet. |
|
|
681
681
|
| `autoFocus` | `boolean` | | Focuses the search field when it appears, as in a popover or a dialog step. |
|
|
682
682
|
| `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
|
|
683
|
+
| `counts` | `boolean` | `true` | Shows each group's count beside its caption; false leaves them out, for a site whose house style has no result counters. |
|
|
683
684
|
| `data-force` | `string` | | Forces an interaction state for state matrices: `hover`, `pressed`, `focus`, `open`. |
|
|
684
685
|
| `defaultQuery` | `string` | | The search text on first render. |
|
|
685
686
|
| `emptyText` | `ReactNode` | | What the list says when nothing matches: "No models match". |
|
|
@@ -743,6 +744,7 @@ The pill that opens a picker and shows its value, in the same looks and sizes as
|
|
|
743
744
|
| Prop | Type | Default | Description |
|
|
744
745
|
|---|---|---|---|
|
|
745
746
|
| `groups` * | `CommandGroup[]` | | The commands, in groups with a heading each. |
|
|
747
|
+
| `counts` | `boolean` | | Shows each group's count beside its caption; false leaves them out, for a site whose house style has no result counters. |
|
|
746
748
|
| `defaultQuery` | `string` | | Start with this query (documentation). |
|
|
747
749
|
| `emptyText` | `ReactNode` | | Defaults to "No results" in the provider's language. |
|
|
748
750
|
| `hotkey` | `boolean` | | Open with ⌘K / Ctrl+K anywhere (default true). |
|
|
@@ -1117,6 +1119,25 @@ A group of fields under one legend.
|
|
|
1117
1119
|
| `legend` * | `ReactNode` | | The heading of the group of fields. |
|
|
1118
1120
|
| `description` | `ReactNode` | | One sentence of help under the heading. |
|
|
1119
1121
|
|
|
1122
|
+
## figure
|
|
1123
|
+
|
|
1124
|
+
`import { Figure } from "@logicplanes/kaeso-ui/figure";`
|
|
1125
|
+
|
|
1126
|
+
- **surface** (figure): `well` (default) — A well like a code block's: radius 14, fill, no ring (default); `plain` — No surface, for a figure that brings its own
|
|
1127
|
+
|
|
1128
|
+
### Figure
|
|
1129
|
+
|
|
1130
|
+
A diagram or image set apart from the text: centred on a well, with a caption, scrolling sideways only when it can't shrink to fit.
|
|
1131
|
+
|
|
1132
|
+
| Prop | Type | Default | Description |
|
|
1133
|
+
|---|---|---|---|
|
|
1134
|
+
| `children` * | `ReactNode` | | What the figure shows, usually a ThemeImage. |
|
|
1135
|
+
| `label` * | `string` | | The name of the figure's scrolling region, read by screen readers. |
|
|
1136
|
+
| `caption` | `ReactNode` | | A few words under the figure that say what it shows, such as a diagram's title. |
|
|
1137
|
+
| `className` | `string` | | Classes for the layout of the outer element: margin, width and placement, never its look. |
|
|
1138
|
+
| `focus` | `number` | `0.5` | Where a figure wider than its column starts, as a share of its width: 0.5, the middle, by default. |
|
|
1139
|
+
| `surface` | `"well" \| "plain"` | `well` | The figure's background: a well like a code block's, or none. |
|
|
1140
|
+
|
|
1120
1141
|
## filter-chip
|
|
1121
1142
|
|
|
1122
1143
|
`import { FilterChip } from "@logicplanes/kaeso-ui/filter-chip";`
|
|
@@ -2905,11 +2926,16 @@ A pill track and a round thumb that travels in 180ms.
|
|
|
2905
2926
|
`import { Table } from "@logicplanes/kaeso-ui/table";`
|
|
2906
2927
|
|
|
2907
2928
|
- **align** (table): `start` (default) — Text (default); `end` — Numbers
|
|
2929
|
+
- **density** (table): `default` (default) — 12px between columns (default); `compact` — 8px between columns, for reference tables of five or more columns
|
|
2908
2930
|
|
|
2909
2931
|
### Table
|
|
2910
2932
|
|
|
2911
2933
|
A plain table for small amounts of data; use `DataTable` for sorting, selection and many rows.
|
|
2912
2934
|
|
|
2935
|
+
| Prop | Type | Default | Description |
|
|
2936
|
+
|---|---|---|---|
|
|
2937
|
+
| `density` | `"default" \| "compact"` | `default` | 12px between columns (`default`), or 8px (`compact`) for reference tables of five or more columns. |
|
|
2938
|
+
|
|
2913
2939
|
## tabs
|
|
2914
2940
|
|
|
2915
2941
|
`import { PillTabs, Tabs } from "@logicplanes/kaeso-ui/tabs";`
|
|
@@ -3003,7 +3029,7 @@ Text in the type scale.
|
|
|
3003
3029
|
| `tabular` | `boolean` | | Tabular numerals. On by default for `metric`. |
|
|
3004
3030
|
| `tone` | `"success" \| "warning" \| "danger" \| "info" \| "inherit" \| "secondary" \| "default" \| "tertiary"` | `default` | The text color role; status tones go next to words that say the same. |
|
|
3005
3031
|
| `truncate` | `boolean` | | One line with an ellipsis; the full text appears in a tooltip when it is cut. |
|
|
3006
|
-
| `variant` | `"title" \| "display" \| "title-sm" \| "title-lg" \| "body" \| "
|
|
3032
|
+
| `variant` | `"title" \| "display" \| "caption" \| "title-sm" \| "title-lg" \| "body" \| "small" \| "micro" \| "body-lg" \| "metric"` | `body` | The type style, from `micro` to `display`. |
|
|
3007
3033
|
| `weight` | `"medium" \| "regular" \| "semibold"` | | The weight, when it differs from the type style's. |
|
|
3008
3034
|
|
|
3009
3035
|
## theme-image
|
package/ai/icons.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Icon vocabulary
|
|
2
2
|
|
|
3
|
-
Version 0.4.
|
|
3
|
+
Version 0.4.2. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
|
|
4
4
|
|
|
5
5
|
## Kaeso objects
|
|
6
6
|
|
package/ai/tokens.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @logicplanes/kaeso-ui tokens
|
|
2
2
|
|
|
3
|
-
Version 0.4.
|
|
3
|
+
Version 0.4.2. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
|
|
4
4
|
|
|
5
5
|
## Neutrals
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { i as e } from "../chunks/context-BELWW79w.js";
|
|
3
|
-
import { t } from "../chunks/dialog-
|
|
3
|
+
import { t } from "../chunks/dialog-DQ9vZ7vr.js";
|
|
4
4
|
import { jsx as n } from "react/jsx-runtime";
|
|
5
5
|
//#region src/blocks/delete-resource/delete-resource.tsx
|
|
6
6
|
var r = { confirm: {
|
package/dist/blocks/pages.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "../chunks/cn-
|
|
3
|
-
import { t } from "../chunks/app-frame-
|
|
4
|
-
import { r as n } from "../chunks/page-header-
|
|
5
|
-
import { t as r } from "../chunks/empty-
|
|
6
|
-
import { a as i, t as a } from "../chunks/section-
|
|
2
|
+
import { t as e } from "../chunks/cn-Dj6sRgkF.js";
|
|
3
|
+
import { t } from "../chunks/app-frame-C8csevkL.js";
|
|
4
|
+
import { r as n } from "../chunks/page-header-DjUMDG69.js";
|
|
5
|
+
import { t as r } from "../chunks/empty-DvhyMXQq.js";
|
|
6
|
+
import { a as i, t as a } from "../chunks/section-Ce1efbsP.js";
|
|
7
7
|
import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
8
8
|
//#region src/blocks/pages/pages.tsx
|
|
9
9
|
var l = { page: {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { i as e } from "../chunks/context-BELWW79w.js";
|
|
3
|
-
import { i as t } from "../chunks/input-
|
|
4
|
-
import { r as n } from "../chunks/toolbar-
|
|
5
|
-
import { t as r } from "../chunks/empty-
|
|
6
|
-
import { i, o as a } from "../chunks/list-
|
|
3
|
+
import { i as t } from "../chunks/input-TyLIaQ5k.js";
|
|
4
|
+
import { r as n } from "../chunks/toolbar-DL6zVrzU.js";
|
|
5
|
+
import { t as r } from "../chunks/empty-DvhyMXQq.js";
|
|
6
|
+
import { i, o as a } from "../chunks/list-CkOozrVY.js";
|
|
7
7
|
import { useMemo as o, useState as s } from "react";
|
|
8
8
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
9
9
|
//#region src/blocks/resource-list/resource-list.tsx
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { n as t, t as n } from "./inset-BnBj8NJV.js";
|
|
4
4
|
import { i as r } from "./context-BELWW79w.js";
|
|
5
|
-
import { l as i, s as a } from "./tooltip-
|
|
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 { l as i, s as a } from "./tooltip-BMQ9BtPp.js";
|
|
6
|
+
import { a as o } from "./button-Dzu7_csE.js";
|
|
7
|
+
import { t as s } from "./icon-button-CPYR21Sz.js";
|
|
8
|
+
import { l as c, t as l } from "./sidebar-DtFlejU7.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,7 +103,7 @@ 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__ */ a(() => import("./nav-sheet-
|
|
106
|
+
var j = 750, M = /* @__PURE__ */ a(() => import("./nav-sheet-B2rNb8GB.js").then((e) => e.n), { base: () => import.meta.url });
|
|
107
107
|
function N({ navOpen: e, setNavOpen: t, toggle: n, ready: r, children: a }) {
|
|
108
108
|
let { peeking: o, setPeeking: s } = c(), [l, d] = b(!1);
|
|
109
109
|
h(() => u(() => d(!0)), []);
|
|
@@ -217,4 +217,4 @@ var B = /* @__PURE__ */ Object.assign(O, {
|
|
|
217
217
|
//#endregion
|
|
218
218
|
export { w as a, T as i, L as n, j as o, I as r, D as s, B as t };
|
|
219
219
|
|
|
220
|
-
//# sourceMappingURL=app-frame-
|
|
220
|
+
//# sourceMappingURL=app-frame-C8csevkL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-frame-DZPEf2NQ.js","names":["__icon_SidebarLeftIcon","cn","InsetContent","GutterContent","useUiText","useLazyModule","lazyModule","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\nfunction MenuButton({ className }: { className?: string | undefined }) {\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 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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"}
|
|
1
|
+
{"version":3,"file":"app-frame-C8csevkL.js","names":["__icon_SidebarLeftIcon","cn","InsetContent","GutterContent","useUiText","useLazyModule","lazyModule","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\nfunction MenuButton({ className }: { className?: string | undefined }) {\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 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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
4
|
import { forwardRef as n, useState as r } from "react";
|
|
5
5
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
@@ -80,4 +80,4 @@ process.env.NODE_ENV !== "production" && (d.displayName = "AvatarGroup");
|
|
|
80
80
|
//#endregion
|
|
81
81
|
export { c as a, o as i, d as n, s as r, l as t };
|
|
82
82
|
|
|
83
|
-
//# sourceMappingURL=avatar-
|
|
83
|
+
//# sourceMappingURL=avatar-CWbdwbJv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar-
|
|
1
|
+
{"version":3,"file":"avatar-CWbdwbJv.js","names":["cn","useUiText","KAESO_AVATAR_VARIANTS","KAESO_AVATAR_DEFAULT_VARIANTS","initials","parts","name","first","max","Avatar","failedSrc","setFailedSrc","useState","decorative","size","kind","className","src","GROUP_OVERLAP","AvatarGroup","t","shown","people","rest","overlap","p","i","children"],"sources":["../../src/components/avatar/avatar.tsx"],"sourcesContent":["import { forwardRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_AVATAR_VARIANTS = {\n size: {\n 20: { classes: \"size-20 text-micro\" },\n 24: { classes: \"size-24 text-micro\" },\n 28: { classes: \"size-28 text-caption\" },\n 32: { classes: \"size-32 text-caption\" },\n 40: { classes: \"size-40 text-body\" },\n },\n kind: {\n person: { classes: \"rounded-pill\" },\n org: { classes: \"rounded-org\" },\n },\n} as const;\nexport const KAESO_AVATAR_DEFAULT_VARIANTS = { size: 24, kind: \"person\" } as const;\n\nexport function initials(name: string, max: 1 | 2 = 2): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n const first = parts[0]?.[0] ?? \"\";\n return (max === 1 || parts.length < 2 ? first : first + (parts[parts.length - 1]?.[0] ?? \"\")).toUpperCase();\n}\n\nexport interface AvatarProps {\n name: string;\n src?: string | undefined;\n size?: keyof typeof KAESO_AVATAR_VARIANTS.size | undefined;\n kind?: keyof typeof KAESO_AVATAR_VARIANTS.kind | undefined;\n decorative?: boolean | undefined;\n className?: string | undefined;\n}\n\nexport const Avatar = /* @__PURE__ */ forwardRef<HTMLSpanElement, AvatarProps>(function Avatar({ name, src, size = 24, kind = \"person\", decorative, className }, ref) {\n const [failedSrc, setFailedSrc] = useState<string | undefined>(undefined);\n return (\n <span\n ref={ref}\n {...(decorative ? { \"aria-hidden\": true } : { role: \"img\", \"aria-label\": name })}\n className={cn(\n \"relative inline-flex shrink-0 items-center justify-center overflow-hidden bg-fill-2 font-semibold text-fg select-none\",\n KAESO_AVATAR_VARIANTS.size[size].classes,\n KAESO_AVATAR_VARIANTS.kind[kind].classes,\n size <= 24 && kind === \"org\" && \"rounded-avatar\",\n className,\n )}\n >\n {src && src !== failedSrc ? (\n <img src={src} alt=\"\" className=\"size-full object-cover\" onError={() => setFailedSrc(src)} />\n ) : (\n initials(name, size === 20 ? 1 : 2)\n )}\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Avatar.displayName = \"Avatar\";\n\nexport interface AvatarGroupProps {\n people: { name: string; src?: string | undefined }[];\n size?: keyof typeof KAESO_AVATAR_VARIANTS.size | undefined;\n max?: number | undefined;\n className?: string | undefined;\n children?: ReactNode | undefined;\n}\n\nconst GROUP_OVERLAP = { 20: \"-ms-4\", 24: \"-ms-2\", 28: \"-ms-2\", 32: \"-ms-4\", 40: \"-ms-6\" } as const;\n\nexport const AvatarGroup = /* @__PURE__ */ forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup({ people, size = 24, max = 4, className, children }, ref) {\n const t = useUiText();\n const shown = people.slice(0, max);\n const rest = people.length - shown.length;\n const overlap = GROUP_OVERLAP[size];\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={people.map((p) => p.name).join(t(\"avatarGroup.listSeparator\", \", \"))}\n className={cn(\"flex items-center\", className)}\n >\n {shown.map((p, i) => (\n <Avatar\n key={p.name + i}\n name={p.name}\n {...(p.src ? { src: p.src } : {})}\n size={size}\n decorative\n className={cn(\"ring-2 ring-panel\", i > 0 && overlap)}\n />\n ))}\n {rest > 0 && (\n <span\n className={cn(\n \"inline-flex shrink-0 items-center justify-center rounded-pill bg-fill-1 font-medium text-fg-secondary ring-2 ring-panel tabular\",\n KAESO_AVATAR_VARIANTS.size[size].classes,\n overlap,\n )}\n >\n +{rest}\n </span>\n )}\n {children && <span className=\"ms-8 inline-flex items-center\">{children}</span>}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") AvatarGroup.displayName = \"AvatarGroup\";\n"],"mappings":";;;;;;AAIA,IAAaE,IAAwB;CACnC,MAAM;EACJ,IAAI,EAAE,SAAS,qBAAqB;EACpC,IAAI,EAAE,SAAS,qBAAqB;EACpC,IAAI,EAAE,SAAS,uBAAuB;EACtC,IAAI,EAAE,SAAS,uBAAuB;EACtC,IAAI,EAAE,SAAS,oBAAoB;CACrC;CACA,MAAM;EACJ,QAAQ,EAAE,SAAS,eAAe;EAClC,KAAK,EAAE,SAAS,cAAc;CAChC;AACF,GACaC,IAAgC;CAAE,MAAM;CAAI,MAAM;AAAS;AAExE,SAAgBC,EAAS,GAAc,IAAa,GAAW;CAC7D,IAAMC,IAAQC,EAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;CACrD,IAAID,EAAM,WAAW,GAAG,OAAO;CAC/B,IAAME,IAAQF,EAAM,EAAE,GAAG,MAAM;CAC/B,QAAQG,MAAQ,KAAKH,EAAM,SAAS,IAAIE,IAAQA,KAASF,EAAMA,EAAM,SAAS,EAAE,GAAG,MAAM,IAAA,CAAK,YAAY;AAC5G;AAWA,IAAaI,IAAyB,kBAAyC,SAAgB,EAAE,SAAM,QAAK,UAAO,IAAI,UAAO,UAAU,eAAY,gBAAa,GAAK;CACpK,IAAM,CAACC,GAAWC,KAAgBC,EAA6B,KAAA,CAAS;CACxE,OACE,kBAAC,QAAD;EACO;EACL,GAAKC,IAAa,EAAE,eAAe,GAAK,IAAI;GAAE,MAAM;GAAO,cAAcP;EAAK;EAC9E,WAAWN,EACT,yHACAE,EAAsB,KAAKY,EAAK,CAAC,SACjCZ,EAAsB,KAAKa,EAAK,CAAC,SACjCD,KAAQ,MAAMC,MAAS,SAAS,kBAChCC,CACF;EAEC,UAAAC,KAAOA,MAAQP,IACd,kBAAC,OAAD;GAAU;GAAK,KAAI;GAAG,WAAU;GAAyB,eAAeC,EAAaM,CAAG;EAAI,CAAA,IAE5Fb,EAASE,GAAMQ,MAAS,KAAK,IAAI,CAAC;CAEhC,CAAA;AAEV,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAO,cAAc;AAUhE,IAAMI,IAAgB;CAAE,IAAI;CAAS,IAAI;CAAS,IAAI;CAAS,IAAI;CAAS,IAAI;AAAQ,GAE3EC,IAA8B,kBAA6C,SAAqB,EAAE,WAAQ,UAAO,IAAI,SAAM,GAAG,cAAW,eAAY,GAAK;CACrK,IAAMC,IAAInB,EAAU,GACdoB,IAAQC,EAAO,MAAM,GAAGd,CAAG,GAC3Be,IAAOD,EAAO,SAASD,EAAM,QAC7BG,IAAUN,EAAcJ;CAC9B,OACE,kBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAYQ,EAAO,KAAK,MAAMG,EAAE,IAAI,CAAC,CAAC,KAAKL,EAAE,6BAA6B,IAAI,CAAC;EAC/E,WAAWpB,EAAG,qBAAqBgB,CAAS;EAJ9C,UAAA;GAMGK,EAAM,KAAK,GAAG,MACb,kBAACZ,GAAD;IAEE,MAAMgB,EAAE;IACR,GAAKA,EAAE,MAAM,EAAE,KAAKA,EAAE,IAAI,IAAI,CAAC;IACzB;IACN,YAAA;IACA,WAAWzB,EAAG,qBAAqB0B,IAAI,KAAKF,CAAO;GACpD,GANMC,EAAE,OAAOC,CAMf,CACF;GACAH,IAAO,KACN,kBAAC,QAAD;IACE,WAAWvB,EACT,mIACAE,EAAsB,KAAKY,EAAK,CAAC,SACjCU,CACF;IALF,UAAA,CAMC,KACGD,CACE;;GAEPI,KAAY,kBAAC,QAAD;IAAM,WAAU;IAAiC;GAAe,CAAA;EAC1E;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAY,cAAc"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { forwardRef as t } from "react";
|
|
4
4
|
import { jsx as n } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/badge/badge.tsx
|
|
@@ -23,4 +23,4 @@ process.env.NODE_ENV !== "production" && (a.displayName = "Badge");
|
|
|
23
23
|
//#endregion
|
|
24
24
|
export { i as n, r, a as t };
|
|
25
25
|
|
|
26
|
-
//# sourceMappingURL=badge-
|
|
26
|
+
//# sourceMappingURL=badge-C2KtxCLB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge-
|
|
1
|
+
{"version":3,"file":"badge-C2KtxCLB.js","names":["cn","KAESO_BADGE_VARIANTS","KAESO_BADGE_DEFAULT_VARIANTS","Badge","props","tone","className"],"sources":["../../src/components/badge/badge.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport const KAESO_BADGE_VARIANTS = {\n tone: {\n neutral: { classes: \"bg-fill-2 text-fg-secondary\" },\n success: { classes: \"bg-success-tint text-success-text\" },\n warning: { classes: \"bg-warning-tint text-warning-text\" },\n danger: { classes: \"bg-danger-tint text-danger-text\" },\n info: { classes: \"bg-info-tint text-info-text\" },\n outline: { classes: \"bg-transparent text-fg-secondary shadow-ring\" },\n ink: { classes: \"bg-ink text-on-ink\" },\n },\n} as const;\nexport const KAESO_BADGE_DEFAULT_VARIANTS = { tone: \"neutral\" } as const;\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: keyof typeof KAESO_BADGE_VARIANTS.tone | undefined;\n children: ReactNode;\n}\n\nexport const Badge = /* @__PURE__ */ forwardRef<HTMLSpanElement, BadgeProps>(function Badge({ tone = \"neutral\", className, children, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex h-22 shrink-0 items-center rounded-pill px-8 text-caption font-medium whitespace-nowrap tabular\",\n KAESO_BADGE_VARIANTS.tone[tone].classes,\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Badge.displayName = \"Badge\";\n"],"mappings":";;;;;AAGA,IAAaC,IAAuB,EAClC,MAAM;CACJ,SAAS,EAAE,SAAS,8BAA8B;CAClD,SAAS,EAAE,SAAS,oCAAoC;CACxD,SAAS,EAAE,SAAS,oCAAoC;CACxD,QAAQ,EAAE,SAAS,kCAAkC;CACrD,MAAM,EAAE,SAAS,8BAA8B;CAC/C,SAAS,EAAE,SAAS,+CAA+C;CACnE,KAAK,EAAE,SAAS,qBAAqB;AACvC,EACF,GACaC,IAA+B,EAAE,MAAM,UAAU,GAOjDC,IAAwB,kBAAwC,SAAe,EAAE,UAAO,WAAW,cAAW,aAAU,GAAGC,KAAS,GAAK;CACpJ,OACE,kBAAC,QAAD;EACO;EACL,WAAWJ,EACT,+GACAC,EAAqB,KAAKI,EAAK,CAAC,SAChCC,CACF;EACA,GAAIF;EAEH;CACG,CAAA;AAEV,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAM,cAAc"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./cn-
|
|
2
|
+
import { t as e } from "./cn-Dj6sRgkF.js";
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
|
-
import { t as n } from "./icon-
|
|
5
|
-
import { t as r } from "./icon-button-
|
|
4
|
+
import { t as n } from "./icon-D7ja-_Yk.js";
|
|
5
|
+
import { t as r } from "./icon-button-CPYR21Sz.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-Cb8OWnqJ.js.map
|