@kerfjs/ui 4.4.1 → 5.0.0-beta.11
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/README.md +241 -10
- package/ai/component-catalog.json +4828 -0
- package/ai/component-catalog.schema.json +79 -0
- package/ai/public-api-signatures-v1.md +1371 -0
- package/ai/skill.md +73 -11
- package/ai/webawesome-jsx-signatures-v1.md +106 -0
- package/dist/app-tab.d.ts +14 -2
- package/dist/app-tab.js +3 -1
- package/dist/browser/app-tab.js +3 -2
- package/dist/browser/disclosure-arrow.js +4 -0
- package/dist/browser/empty-state.js +3 -3
- package/dist/browser/floating-toolbar.js +3 -0
- package/dist/browser/list-action-row.js +4 -0
- package/dist/browser/list-header.js +6 -0
- package/dist/browser/list-item.js +4 -0
- package/dist/browser/loading-spinner.js +2 -2
- package/dist/browser/lucide-icon.js +2 -2
- package/dist/browser/panel-header.js +7 -0
- package/dist/browser/resizable-region.js +2 -2
- package/dist/browser/segmented-control.js +3 -2
- package/dist/browser/select.js +4 -3
- package/dist/browser/skeleton.js +3 -0
- package/dist/browser/state-banner.js +3 -2
- package/dist/browser/tab-bar.js +2 -2
- package/dist/browser/token-search-field.js +4 -0
- package/dist/browser/toolbar-control-group.js +2 -2
- package/dist/browser/toolbar-text.js +3 -2
- package/dist/browser/toolbar.js +2 -2
- package/dist/browser/value-table.js +3 -2
- package/dist/catalog.d.ts +119 -0
- package/dist/catalog.js +146 -0
- package/dist/catalog.js.map +1 -0
- package/dist/chunk-2Z5TWHKQ.js +34 -0
- package/dist/chunk-2Z5TWHKQ.js.map +1 -0
- package/dist/chunk-37T3VNIZ.js +19 -0
- package/dist/chunk-37T3VNIZ.js.map +1 -0
- package/dist/chunk-56RJXPHG.js +43 -0
- package/dist/chunk-56RJXPHG.js.map +1 -0
- package/dist/chunk-5ATCDSQS.js +42 -0
- package/dist/chunk-5ATCDSQS.js.map +1 -0
- package/dist/chunk-5E2HVJ33.js +10 -0
- package/dist/chunk-5E2HVJ33.js.map +1 -0
- package/dist/chunk-7BR3DO2A.js +31 -0
- package/dist/chunk-7BR3DO2A.js.map +1 -0
- package/dist/chunk-7JB7VPRI.js +34 -0
- package/dist/chunk-7JB7VPRI.js.map +1 -0
- package/dist/chunk-7LDCTU7D.js +134 -0
- package/dist/chunk-7LDCTU7D.js.map +1 -0
- package/dist/{chunk-4HHCYSGT.js → chunk-AQNKJRFH.js} +2 -2
- package/dist/{chunk-4HHCYSGT.js.map → chunk-AQNKJRFH.js.map} +1 -1
- package/dist/{chunk-MBR3TYNL.js → chunk-AVZHJN6C.js} +3 -3
- package/dist/chunk-AVZHJN6C.js.map +1 -0
- package/dist/chunk-B24C4A6T.js +22 -0
- package/dist/chunk-B24C4A6T.js.map +1 -0
- package/dist/chunk-BLK3UEEI.js +23 -0
- package/dist/chunk-BLK3UEEI.js.map +1 -0
- package/dist/chunk-CH4SQ6H5.js +39 -0
- package/dist/chunk-CH4SQ6H5.js.map +1 -0
- package/dist/chunk-I7INRJO4.js +17 -0
- package/dist/chunk-I7INRJO4.js.map +1 -0
- package/dist/chunk-L4OKFDJY.js +24 -0
- package/dist/chunk-L4OKFDJY.js.map +1 -0
- package/dist/chunk-LCOBDOCC.js +265 -0
- package/dist/chunk-LCOBDOCC.js.map +1 -0
- package/dist/{chunk-3O7ZEUW2.js → chunk-M5JRI6MN.js} +3 -3
- package/dist/chunk-M5JRI6MN.js.map +1 -0
- package/dist/{chunk-MFKMHK5W.js → chunk-RNPGFQ33.js} +3 -3
- package/dist/chunk-RNPGFQ33.js.map +1 -0
- package/dist/chunk-RUNWEPR4.js +10 -0
- package/dist/chunk-RUNWEPR4.js.map +1 -0
- package/dist/chunk-XE5ZLPCC.js +20 -0
- package/dist/chunk-XE5ZLPCC.js.map +1 -0
- package/dist/{chunk-MQIZAD4A.js → chunk-XXMOARTH.js} +5 -3
- package/dist/chunk-XXMOARTH.js.map +1 -0
- package/dist/{chunk-TRNBHPNW.js → chunk-YGN7OMLT.js} +11 -8
- package/dist/chunk-YGN7OMLT.js.map +1 -0
- package/dist/collapsible-panel.d.ts +66 -0
- package/dist/collapsible-panel.js +22 -0
- package/dist/collapsible-panel.js.map +1 -0
- package/dist/device-class.d.ts +62 -0
- package/dist/device-class.js +75 -0
- package/dist/device-class.js.map +1 -0
- package/dist/disclosure-arrow.d.ts +14 -0
- package/dist/disclosure-arrow.js +4 -0
- package/dist/disclosure-arrow.js.map +1 -0
- package/dist/floating-toolbar.d.ts +28 -0
- package/dist/floating-toolbar.js +3 -0
- package/dist/floating-toolbar.js.map +1 -0
- package/dist/index.d.ts +11 -6
- package/dist/index.js +22 -16
- package/dist/list-action-row.d.ts +52 -0
- package/dist/list-action-row.js +5 -0
- package/dist/list-action-row.js.map +1 -0
- package/dist/list-header.d.ts +43 -0
- package/dist/list-header.js +7 -0
- package/dist/list-header.js.map +1 -0
- package/dist/list-item.d.ts +33 -0
- package/dist/list-item.js +5 -0
- package/dist/list-item.js.map +1 -0
- package/dist/nav-stack.d.ts +38 -0
- package/dist/nav-stack.js +5 -0
- package/dist/nav-stack.js.map +1 -0
- package/dist/panel-header.d.ts +36 -0
- package/dist/panel-header.js +7 -0
- package/dist/panel-header.js.map +1 -0
- package/dist/resizable-region.d.ts +3 -1
- package/dist/resizable-region.js +1 -1
- package/dist/segmented-control.d.ts +3 -1
- package/dist/segmented-control.js +2 -1
- package/dist/select-register.d.ts +5 -1
- package/dist/select-register.js +3 -0
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +5 -2
- package/dist/select.js +2 -1
- package/dist/skeleton.d.ts +24 -0
- package/dist/skeleton.js +3 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/split-view.d.ts +42 -0
- package/dist/split-view.js +21 -0
- package/dist/split-view.js.map +1 -0
- package/dist/state-banner.d.ts +3 -1
- package/dist/state-banner.js +2 -1
- package/dist/styles/app-tab.css +152 -0
- package/dist/styles/catalog.css +522 -0
- package/dist/styles/collapsible-panel.css +146 -0
- package/dist/styles/disclosure-arrow.css +23 -0
- package/dist/styles/empty-state.css +47 -0
- package/dist/styles/floating-toolbar.css +38 -0
- package/dist/styles/foundation.css +347 -0
- package/dist/styles/layout.css +73 -0
- package/dist/styles/list-action-row.css +160 -0
- package/dist/styles/list-header.css +160 -0
- package/dist/styles/list-item.css +123 -0
- package/dist/styles/loading-spinner.css +21 -0
- package/dist/styles/lucide-icon.css +6 -0
- package/dist/styles/nav-stack.css +111 -0
- package/dist/styles/panel-header.css +64 -0
- package/dist/styles/resizable-region.css +111 -0
- package/{src → dist/styles}/segmented-control.css +62 -31
- package/dist/styles/select.css +138 -0
- package/dist/styles/skeleton.css +31 -0
- package/dist/styles/split-view.css +35 -0
- package/dist/styles/state-banner.css +173 -0
- package/dist/styles/styles.css +23 -0
- package/dist/styles/tab-bar.css +45 -0
- package/dist/styles/tab-scaffold.css +84 -0
- package/dist/styles/token-search-field.css +289 -0
- package/dist/styles/toolbar-control-group.css +225 -0
- package/dist/styles/toolbar-text.css +40 -0
- package/dist/styles/toolbar.css +61 -0
- package/dist/styles/value-table.css +75 -0
- package/{src → dist/styles}/webawesome.css +119 -29
- package/dist/styles/workbench.css +94 -0
- package/dist/tab-bar.d.ts +8 -1
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +30 -0
- package/dist/tab-scaffold.js +16 -0
- package/dist/tab-scaffold.js.map +1 -0
- package/dist/token-search-field.d.ts +43 -0
- package/dist/token-search-field.js +4 -0
- package/dist/token-search-field.js.map +1 -0
- package/dist/toolbar-control-group.d.ts +3 -1
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.d.ts +15 -3
- package/dist/toolbar-text.js +2 -1
- package/dist/value-table.d.ts +12 -2
- package/dist/value-table.js +2 -1
- package/dist/webawesome.d.ts +100 -0
- package/dist/webawesome.js +3 -0
- package/dist/webawesome.js.map +1 -0
- package/dist/wire-catalog.d.ts +26 -0
- package/dist/wire-catalog.js +48 -0
- package/dist/wire-catalog.js.map +1 -0
- package/dist/wire-nav-stack.d.ts +15 -0
- package/dist/wire-nav-stack.js +88 -0
- package/dist/wire-nav-stack.js.map +1 -0
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-sidebar.d.ts +43 -0
- package/dist/wire-sidebar.js +117 -0
- package/dist/wire-sidebar.js.map +1 -0
- package/dist/wire-tab-bars.d.ts +15 -2
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tab-scaffold.d.ts +11 -0
- package/dist/wire-tab-scaffold.js +16 -0
- package/dist/wire-tab-scaffold.js.map +1 -0
- package/dist/wire-token-search-fields.d.ts +106 -0
- package/dist/wire-token-search-fields.js +5 -0
- package/dist/wire-token-search-fields.js.map +1 -0
- package/dist/workbench.d.ts +33 -0
- package/dist/workbench.js +17 -0
- package/dist/workbench.js.map +1 -0
- package/docs/accessibility.md +112 -3
- package/docs/app-layouts.md +61 -0
- package/docs/catalog.md +155 -0
- package/docs/collapsible-panel.md +102 -0
- package/docs/component-contract.md +169 -4
- package/docs/component-selection.md +186 -0
- package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
- package/docs/design/templates/empty-state/filtered.svg +1 -0
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
- package/docs/design/templates/empty-state/with-action.svg +1 -0
- package/docs/design/templates/empty-state-dark.svg +7 -0
- package/docs/design/templates/empty-state.svg +7 -0
- package/docs/design/templates/list-action-row/default-dark.svg +1 -0
- package/docs/design/templates/list-action-row/default.svg +1 -0
- package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
- package/docs/design/templates/list-action-row/selected.svg +1 -0
- package/docs/design/templates/list-action-row-dark.svg +7 -0
- package/docs/design/templates/list-action-row.svg +7 -0
- package/docs/design/templates/list-header/action-dark.svg +1 -0
- package/docs/design/templates/list-header/action.svg +1 -0
- package/docs/design/templates/list-header/count-dark.svg +1 -0
- package/docs/design/templates/list-header/count.svg +1 -0
- package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
- package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
- package/docs/design/templates/list-header-dark.svg +11 -0
- package/docs/design/templates/list-header.svg +11 -0
- package/docs/design/templates/list-item/default-dark.svg +1 -0
- package/docs/design/templates/list-item/default.svg +1 -0
- package/docs/design/templates/list-item/multiline-dark.svg +1 -0
- package/docs/design/templates/list-item/multiline.svg +1 -0
- package/docs/design/templates/list-item/selected-dark.svg +1 -0
- package/docs/design/templates/list-item/selected.svg +1 -0
- package/docs/design/templates/list-item/trailing-dark.svg +1 -0
- package/docs/design/templates/list-item/trailing.svg +1 -0
- package/docs/design/templates/list-item-dark.svg +11 -0
- package/docs/design/templates/list-item.svg +11 -0
- package/docs/design/templates/panel-header/icon-actions-dark.svg +1 -0
- package/docs/design/templates/panel-header/icon-actions.svg +1 -0
- package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +1 -0
- package/docs/design/templates/panel-header/icon-summary-actions.svg +1 -0
- package/docs/design/templates/panel-header/no-icon-dark.svg +1 -0
- package/docs/design/templates/panel-header/no-icon.svg +1 -0
- package/docs/design/templates/panel-header/page-heading-dark.svg +1 -0
- package/docs/design/templates/panel-header/page-heading.svg +1 -0
- package/docs/design/templates/panel-header/title-only-dark.svg +1 -0
- package/docs/design/templates/panel-header/title-only.svg +1 -0
- package/docs/design/templates/panel-header-dark.svg +13 -0
- package/docs/design/templates/panel-header.svg +13 -0
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
- package/docs/design/templates/segmented-control/equal.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
- package/docs/design/templates/segmented-control/pill-small.svg +1 -0
- package/docs/design/templates/segmented-control-dark.svg +7 -0
- package/docs/design/templates/segmented-control.svg +7 -0
- package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
- package/docs/design/templates/skeleton/avatar.svg +1 -0
- package/docs/design/templates/skeleton/block-dark.svg +1 -0
- package/docs/design/templates/skeleton/block.svg +1 -0
- package/docs/design/templates/skeleton/lines-dark.svg +1 -0
- package/docs/design/templates/skeleton/lines.svg +1 -0
- package/docs/design/templates/skeleton-dark.svg +9 -0
- package/docs/design/templates/skeleton.svg +9 -0
- package/docs/design/templates/state-banner/danger-dark.svg +1 -0
- package/docs/design/templates/state-banner/danger.svg +1 -0
- package/docs/design/templates/state-banner/info-dark.svg +1 -0
- package/docs/design/templates/state-banner/info.svg +1 -0
- package/docs/design/templates/state-banner/success-dark.svg +1 -0
- package/docs/design/templates/state-banner/success.svg +1 -0
- package/docs/design/templates/state-banner/warning-dark.svg +1 -0
- package/docs/design/templates/state-banner/warning.svg +1 -0
- package/docs/design/templates/state-banner-dark.svg +11 -0
- package/docs/design/templates/state-banner.svg +11 -0
- package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
- package/docs/design/templates/tab-bar-dark.svg +5 -0
- package/docs/design/templates/tab-bar.svg +5 -0
- package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
- package/docs/design/templates/token-search-field/empty.svg +1 -0
- package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
- package/docs/design/templates/token-search-field/tokens.svg +1 -0
- package/docs/design/templates/token-search-field-dark.svg +7 -0
- package/docs/design/templates/token-search-field.svg +7 -0
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
- package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
- package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
- package/docs/design/templates/toolbar-control-group-dark.svg +11 -0
- package/docs/design/templates/toolbar-control-group.svg +11 -0
- package/docs/design/templates/toolbar-dark.svg +5 -0
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/default.svg +1 -0
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/large.svg +1 -0
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
- package/docs/design/templates/toolbar-text/small.svg +1 -0
- package/docs/design/templates/toolbar-text-dark.svg +9 -0
- package/docs/design/templates/toolbar-text.svg +9 -0
- package/docs/design/templates/toolbar.svg +5 -0
- package/docs/design/templates/value-table/details-dark.svg +1 -0
- package/docs/design/templates/value-table/details.svg +1 -0
- package/docs/design/templates/value-table-dark.svg +5 -0
- package/docs/design/templates/value-table.svg +5 -0
- package/docs/design/templates.md +114 -0
- package/docs/design-philosophy.md +61 -1
- package/docs/device-class.md +54 -0
- package/docs/examples/command-palette-adapter.tsx +70 -0
- package/docs/layout.md +131 -0
- package/docs/nav-stack.md +47 -0
- package/docs/recipes.md +167 -0
- package/docs/split-view.md +49 -0
- package/docs/tab-scaffold.md +41 -0
- package/docs/ux-demo.md +23 -9
- package/docs/webawesome-theme.md +15 -0
- package/docs/workbench.md +47 -0
- package/llms.txt +123 -14
- package/package.json +147 -44
- package/ux-demo/recipes/app-shell.tsx +32 -0
- package/ux-demo/recipes/collapsible-sidebar.tsx +100 -0
- package/ux-demo/recipes/compact-toolbar.tsx +43 -0
- package/ux-demo/recipes/composer-form.tsx +63 -0
- package/ux-demo/recipes/list-detail-dialog.tsx +45 -0
- package/ux-demo/recipes/list-workspace-states.tsx +26 -0
- package/ux-demo/recipes/loaders.ts +33 -0
- package/ux-demo/recipes/loading-inspector.tsx +81 -0
- package/ux-demo/recipes/mount-recipe.ts +43 -0
- package/ux-demo/recipes/navigation-sidebar.tsx +26 -0
- package/ux-demo/recipes/navigation-stack.tsx +76 -0
- package/ux-demo/recipes/recipes.css +448 -0
- package/ux-demo/recipes/types.ts +17 -0
- package/ux-demo/recipes/workspace-header.tsx +12 -0
- package/dist/browser/dialog-header.js +0 -3
- package/dist/browser/menu-header.js +0 -3
- package/dist/browser/menu-item.js +0 -3
- package/dist/browser/page-header.js +0 -3
- package/dist/chunk-2PES33HS.js +0 -13
- package/dist/chunk-2PES33HS.js.map +0 -1
- package/dist/chunk-3O7ZEUW2.js.map +0 -1
- package/dist/chunk-723YNJBH.js +0 -17
- package/dist/chunk-723YNJBH.js.map +0 -1
- package/dist/chunk-GY5WH7TO.js +0 -10
- package/dist/chunk-GY5WH7TO.js.map +0 -1
- package/dist/chunk-MBR3TYNL.js.map +0 -1
- package/dist/chunk-MFKMHK5W.js.map +0 -1
- package/dist/chunk-MQIZAD4A.js.map +0 -1
- package/dist/chunk-NHXX4JI5.js +0 -28
- package/dist/chunk-NHXX4JI5.js.map +0 -1
- package/dist/chunk-OPCJRCYO.js +0 -19
- package/dist/chunk-OPCJRCYO.js.map +0 -1
- package/dist/chunk-T5XNMVOI.js +0 -24
- package/dist/chunk-T5XNMVOI.js.map +0 -1
- package/dist/chunk-TRNBHPNW.js.map +0 -1
- package/dist/chunk-VHW5YNIB.js +0 -17
- package/dist/chunk-VHW5YNIB.js.map +0 -1
- package/dist/chunk-VKH2JLDZ.js +0 -10
- package/dist/chunk-VKH2JLDZ.js.map +0 -1
- package/dist/chunk-WY4CAEPG.js +0 -14
- package/dist/chunk-WY4CAEPG.js.map +0 -1
- package/dist/dialog-header.d.ts +0 -14
- package/dist/dialog-header.js +0 -3
- package/dist/dialog-header.js.map +0 -1
- package/dist/menu-header.d.ts +0 -15
- package/dist/menu-header.js +0 -3
- package/dist/menu-header.js.map +0 -1
- package/dist/menu-item.d.ts +0 -22
- package/dist/menu-item.js +0 -3
- package/dist/menu-item.js.map +0 -1
- package/dist/page-header.d.ts +0 -9
- package/dist/page-header.js +0 -3
- package/dist/page-header.js.map +0 -1
- package/src/app-tab.css +0 -20
- package/src/dialog-header.css +0 -9
- package/src/empty-state.css +0 -6
- package/src/foundation.css +0 -106
- package/src/loading-spinner.css +0 -4
- package/src/lucide-icon.css +0 -1
- package/src/menu-header.css +0 -13
- package/src/menu-item.css +0 -12
- package/src/page-header.css +0 -3
- package/src/resizable-region.css +0 -19
- package/src/select.css +0 -18
- package/src/state-banner.css +0 -31
- package/src/styles.css +0 -18
- package/src/tab-bar.css +0 -4
- package/src/toolbar-control-group.css +0 -25
- package/src/toolbar-text.css +0 -4
- package/src/toolbar.css +0 -9
- package/src/value-table.css +0 -5
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* used by Hot Sheet 2. Component JavaScript remains independently importable
|
|
7
7
|
* and tree-shakeable.
|
|
8
8
|
*/
|
|
9
|
-
@import
|
|
9
|
+
@import "@awesome.me/webawesome/dist/styles/webawesome.css";
|
|
10
10
|
|
|
11
11
|
@layer wa-theme-overrides {
|
|
12
12
|
:where(:root),
|
|
@@ -33,15 +33,38 @@
|
|
|
33
33
|
--wa-color-text-quiet: light-dark(#6e6e73, #aeaeb2);
|
|
34
34
|
--wa-color-text-link: var(--wa-color-brand-on-quiet);
|
|
35
35
|
|
|
36
|
-
--wa-color-overlay-modal: light-dark(
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
--wa-color-overlay-modal: light-dark(
|
|
37
|
+
rgb(29 29 31 / 0.34),
|
|
38
|
+
rgb(0 0 0 / 0.6)
|
|
39
|
+
);
|
|
40
|
+
--wa-color-overlay-inline: color-mix(
|
|
41
|
+
in srgb,
|
|
42
|
+
var(--wa-color-neutral-fill-normal) 25%,
|
|
43
|
+
transparent
|
|
44
|
+
);
|
|
45
|
+
--wa-color-shadow: light-dark(rgb(0 0 0 / 0.14), rgb(0 0 0 / 0.5));
|
|
39
46
|
--wa-color-focus: light-dark(#007aff, #64d2ff);
|
|
40
47
|
--wa-color-brand-fill-loud: light-dark(#0088ff, #64d2ff);
|
|
41
|
-
--wa-color-brand-fill-quiet: color-mix(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
--wa-color-brand-fill-quiet: color-mix(
|
|
49
|
+
in srgb,
|
|
50
|
+
var(--wa-color-brand-fill-loud) 8%,
|
|
51
|
+
var(--wa-color-surface-default)
|
|
52
|
+
);
|
|
53
|
+
--wa-color-brand-fill-normal: color-mix(
|
|
54
|
+
in srgb,
|
|
55
|
+
var(--wa-color-brand-fill-loud) 16%,
|
|
56
|
+
var(--wa-color-surface-default)
|
|
57
|
+
);
|
|
58
|
+
--wa-color-brand-border-quiet: color-mix(
|
|
59
|
+
in srgb,
|
|
60
|
+
var(--wa-color-brand-fill-loud) 35%,
|
|
61
|
+
var(--wa-color-surface-default)
|
|
62
|
+
);
|
|
63
|
+
--wa-color-brand-border-normal: color-mix(
|
|
64
|
+
in srgb,
|
|
65
|
+
var(--wa-color-brand-fill-loud) 58%,
|
|
66
|
+
var(--wa-color-surface-default)
|
|
67
|
+
);
|
|
45
68
|
--wa-color-brand-border-loud: var(--wa-color-brand-fill-loud);
|
|
46
69
|
--wa-color-brand-on-quiet: light-dark(#1e6ef4, #8acbff);
|
|
47
70
|
--wa-color-brand-on-normal: var(--wa-color-brand-on-quiet);
|
|
@@ -58,31 +81,91 @@
|
|
|
58
81
|
--wa-color-neutral-on-loud: var(--wa-color-surface-default);
|
|
59
82
|
|
|
60
83
|
--wa-color-success-fill-loud: #34c759;
|
|
61
|
-
--wa-color-success-fill-quiet: color-mix(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
84
|
+
--wa-color-success-fill-quiet: color-mix(
|
|
85
|
+
in srgb,
|
|
86
|
+
var(--wa-color-success-fill-loud) 14%,
|
|
87
|
+
var(--wa-color-surface-default)
|
|
88
|
+
);
|
|
89
|
+
--wa-color-success-fill-normal: color-mix(
|
|
90
|
+
in srgb,
|
|
91
|
+
var(--wa-color-success-fill-loud) 72%,
|
|
92
|
+
var(--wa-color-surface-default)
|
|
93
|
+
);
|
|
94
|
+
--wa-color-success-border-quiet: color-mix(
|
|
95
|
+
in srgb,
|
|
96
|
+
var(--wa-color-success-fill-loud) 32%,
|
|
97
|
+
var(--wa-color-surface-default)
|
|
98
|
+
);
|
|
99
|
+
--wa-color-success-border-normal: color-mix(
|
|
100
|
+
in srgb,
|
|
101
|
+
var(--wa-color-success-fill-loud) 50%,
|
|
102
|
+
var(--wa-color-surface-default)
|
|
103
|
+
);
|
|
104
|
+
--wa-color-success-border-loud: color-mix(
|
|
105
|
+
in srgb,
|
|
106
|
+
var(--wa-color-success-fill-loud) 78%,
|
|
107
|
+
var(--wa-color-neutral-on-normal)
|
|
108
|
+
);
|
|
66
109
|
--wa-color-success-on-quiet: light-dark(#008932, #63e685);
|
|
67
110
|
--wa-color-success-on-normal: light-dark(#006d28, #8cea9f);
|
|
68
111
|
--wa-color-success-on-loud: #fff;
|
|
69
112
|
|
|
70
113
|
--wa-color-warning-fill-loud: #ffcc00;
|
|
71
|
-
--wa-color-warning-fill-quiet: color-mix(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
114
|
+
--wa-color-warning-fill-quiet: color-mix(
|
|
115
|
+
in srgb,
|
|
116
|
+
var(--wa-color-warning-fill-loud) 9%,
|
|
117
|
+
var(--wa-color-surface-default)
|
|
118
|
+
);
|
|
119
|
+
--wa-color-warning-fill-normal: color-mix(
|
|
120
|
+
in srgb,
|
|
121
|
+
var(--wa-color-warning-fill-loud) 22%,
|
|
122
|
+
var(--wa-color-surface-default)
|
|
123
|
+
);
|
|
124
|
+
--wa-color-warning-border-quiet: color-mix(
|
|
125
|
+
in srgb,
|
|
126
|
+
var(--wa-color-warning-fill-loud) 35%,
|
|
127
|
+
var(--wa-color-surface-default)
|
|
128
|
+
);
|
|
129
|
+
--wa-color-warning-border-normal: color-mix(
|
|
130
|
+
in srgb,
|
|
131
|
+
var(--wa-color-warning-fill-loud) 58%,
|
|
132
|
+
var(--wa-color-neutral-on-normal)
|
|
133
|
+
);
|
|
134
|
+
--wa-color-warning-border-loud: color-mix(
|
|
135
|
+
in srgb,
|
|
136
|
+
var(--wa-color-warning-fill-loud) 78%,
|
|
137
|
+
var(--wa-color-neutral-on-normal)
|
|
138
|
+
);
|
|
76
139
|
--wa-color-warning-on-quiet: light-dark(#a16a00, #ffd84a);
|
|
77
140
|
--wa-color-warning-on-normal: light-dark(#5f3f00, #ffe27a);
|
|
78
141
|
--wa-color-warning-on-loud: #1d1d1f;
|
|
79
142
|
|
|
80
143
|
--wa-color-danger-fill-loud: #ff383c;
|
|
81
|
-
--wa-color-danger-fill-quiet: color-mix(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
144
|
+
--wa-color-danger-fill-quiet: color-mix(
|
|
145
|
+
in srgb,
|
|
146
|
+
var(--wa-color-danger-fill-loud) 7%,
|
|
147
|
+
var(--wa-color-surface-default)
|
|
148
|
+
);
|
|
149
|
+
--wa-color-danger-fill-normal: color-mix(
|
|
150
|
+
in srgb,
|
|
151
|
+
var(--wa-color-danger-fill-loud) 14%,
|
|
152
|
+
var(--wa-color-surface-default)
|
|
153
|
+
);
|
|
154
|
+
--wa-color-danger-border-quiet: color-mix(
|
|
155
|
+
in srgb,
|
|
156
|
+
var(--wa-color-danger-fill-loud) 32%,
|
|
157
|
+
var(--wa-color-surface-default)
|
|
158
|
+
);
|
|
159
|
+
--wa-color-danger-border-normal: color-mix(
|
|
160
|
+
in srgb,
|
|
161
|
+
var(--wa-color-danger-fill-loud) 50%,
|
|
162
|
+
var(--wa-color-surface-default)
|
|
163
|
+
);
|
|
164
|
+
--wa-color-danger-border-loud: color-mix(
|
|
165
|
+
in srgb,
|
|
166
|
+
var(--wa-color-danger-fill-loud) 78%,
|
|
167
|
+
var(--wa-color-neutral-on-normal)
|
|
168
|
+
);
|
|
86
169
|
--wa-color-danger-on-quiet: light-dark(#c20b20, #ff696c);
|
|
87
170
|
--wa-color-danger-on-normal: light-dark(#8e0717, #ff8a8c);
|
|
88
171
|
--wa-color-danger-on-loud: #fff;
|
|
@@ -101,10 +184,10 @@
|
|
|
101
184
|
--kui-wa-carousel-dot-hit-size: 20px;
|
|
102
185
|
--kui-wa-carousel-control-size: 28px;
|
|
103
186
|
--kui-wa-carousel-icon-size: 16px;
|
|
104
|
-
--kui-disclosure-icon-scale: .5;
|
|
105
|
-
--wa-shadow-s: 0 1px 3px rgb(0 0 0 / .14);
|
|
106
|
-
--wa-shadow-m: 0 .35rem 1rem rgb(0 0 0 / .11);
|
|
107
|
-
--wa-shadow-l: 0 .75rem 2rem rgb(0 0 0 / .09);
|
|
187
|
+
--kui-disclosure-icon-scale: 0.5;
|
|
188
|
+
--wa-shadow-s: 0 1px 3px rgb(0 0 0 / 0.14);
|
|
189
|
+
--wa-shadow-m: 0 0.35rem 1rem rgb(0 0 0 / 0.11);
|
|
190
|
+
--wa-shadow-l: 0 0.75rem 2rem rgb(0 0 0 / 0.09);
|
|
108
191
|
}
|
|
109
192
|
|
|
110
193
|
:where(:root),
|
|
@@ -129,7 +212,10 @@
|
|
|
129
212
|
box-sizing: border-box;
|
|
130
213
|
width: var(--kui-wa-carousel-control-size);
|
|
131
214
|
height: var(--kui-wa-carousel-control-size);
|
|
132
|
-
padding: calc(
|
|
215
|
+
padding: calc(
|
|
216
|
+
(var(--kui-wa-carousel-control-size) - var(--kui-wa-carousel-icon-size)) /
|
|
217
|
+
2
|
|
218
|
+
);
|
|
133
219
|
font-size: var(--kui-wa-carousel-icon-size);
|
|
134
220
|
}
|
|
135
221
|
|
|
@@ -142,7 +228,11 @@
|
|
|
142
228
|
height: var(--kui-wa-carousel-dot-hit-size);
|
|
143
229
|
color: var(--wa-color-neutral-fill-normal);
|
|
144
230
|
background-color: transparent;
|
|
145
|
-
background-image: radial-gradient(
|
|
231
|
+
background-image: radial-gradient(
|
|
232
|
+
circle,
|
|
233
|
+
currentcolor 0 calc(var(--kui-wa-carousel-dot-size) / 2),
|
|
234
|
+
transparent calc(var(--kui-wa-carousel-dot-size) / 2 + 0.5px)
|
|
235
|
+
);
|
|
146
236
|
transform: none;
|
|
147
237
|
}
|
|
148
238
|
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
.kui-workbench {
|
|
2
|
+
display: flex;
|
|
3
|
+
min-width: 0;
|
|
4
|
+
min-height: 0;
|
|
5
|
+
height: 100%;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
background: var(--kui-color-surface);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Side rails. Collapsing snaps the flex track to zero (one reflow) while the
|
|
11
|
+
fixed-width content slides out via transform (composited, clipped) — never a
|
|
12
|
+
per-frame width animation. See docs/18 / the KF-7QKJRK catalog sidebar. */
|
|
13
|
+
.kui-workbench__rail {
|
|
14
|
+
flex: 0 0 var(--kui-workbench-rail-width, 17.5rem);
|
|
15
|
+
min-width: 0;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
background: var(--kui-color-surface);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.kui-workbench__rail--left {
|
|
21
|
+
border-inline-end: 1px solid var(--kui-color-border);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.kui-workbench__rail--right {
|
|
25
|
+
border-inline-start: 1px solid var(--kui-color-border);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.kui-workbench__rail[data-collapsed="true"] {
|
|
29
|
+
flex-basis: 0;
|
|
30
|
+
border-inline: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.kui-workbench__center {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex: 1;
|
|
36
|
+
min-width: 0;
|
|
37
|
+
min-height: 0;
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.kui-workbench__main {
|
|
43
|
+
flex: 1;
|
|
44
|
+
min-height: 0;
|
|
45
|
+
overflow: auto;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Bottom drawer — the vertical analogue of a rail. */
|
|
49
|
+
.kui-workbench__drawer {
|
|
50
|
+
flex: 0 0 var(--kui-workbench-drawer-height, 13.75rem);
|
|
51
|
+
min-height: 0;
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
border-block-start: 1px solid var(--kui-color-border);
|
|
54
|
+
background: var(--kui-color-surface);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.kui-workbench__drawer[data-collapsed="true"] {
|
|
58
|
+
flex-basis: 0;
|
|
59
|
+
border-block-start: 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* The fixed-size sliding content. The rail/drawer keeps a definite size on its
|
|
63
|
+
content so the transform reads as a slide, not a squeeze. */
|
|
64
|
+
.kui-workbench__rail .kui-workbench__panel-content {
|
|
65
|
+
width: var(--kui-workbench-rail-width, 17.5rem);
|
|
66
|
+
height: 100%;
|
|
67
|
+
transition: transform 200ms ease;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.kui-workbench__drawer .kui-workbench__panel-content {
|
|
71
|
+
width: 100%;
|
|
72
|
+
height: var(--kui-workbench-drawer-height, 13.75rem);
|
|
73
|
+
transition: transform 200ms ease;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.kui-workbench__rail--left[data-collapsed="true"]
|
|
77
|
+
.kui-workbench__panel-content {
|
|
78
|
+
transform: translateX(-100%);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.kui-workbench__rail--right[data-collapsed="true"]
|
|
82
|
+
.kui-workbench__panel-content {
|
|
83
|
+
transform: translateX(100%);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.kui-workbench__drawer[data-collapsed="true"] .kui-workbench__panel-content {
|
|
87
|
+
transform: translateY(100%);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@media (prefers-reduced-motion: reduce) {
|
|
91
|
+
.kui-workbench__panel-content {
|
|
92
|
+
transition: none;
|
|
93
|
+
}
|
|
94
|
+
}
|
package/dist/tab-bar.d.ts
CHANGED
|
@@ -7,8 +7,15 @@ interface TabBarProps {
|
|
|
7
7
|
leading?: SafeHtml;
|
|
8
8
|
trailing?: SafeHtml;
|
|
9
9
|
className?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Keyboard activation mode for this strip, emitted as `data-tab-activation` for
|
|
12
|
+
* `wireTabBars` to read (overrides its `activation` option). `'automatic'` (default)
|
|
13
|
+
* selects on arrow / Home / End; `'manual'` moves roving focus only and the user
|
|
14
|
+
* selects with Enter / Space / click — use it when selecting a tab is a heavy action.
|
|
15
|
+
*/
|
|
16
|
+
activation?: 'automatic' | 'manual';
|
|
10
17
|
}
|
|
11
18
|
/** Render a controlled tab strip. The application owns selection, order, and persistence. */
|
|
12
|
-
declare function TabBar({ id, label, children, leading, trailing, className }: TabBarProps): SafeHtml;
|
|
19
|
+
declare function TabBar({ id, label, children, leading, trailing, className, activation }: TabBarProps): SafeHtml;
|
|
13
20
|
|
|
14
21
|
export { TabBar, type TabBarProps };
|
package/dist/tab-bar.js
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
|
|
3
|
+
interface TabScaffoldTab {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
/** Decorative icon shown above the label in the bottom bar. */
|
|
7
|
+
icon?: SafeHtml;
|
|
8
|
+
/** The tab's content — typically a `NavStack` so each tab keeps its own stack. */
|
|
9
|
+
content: SafeHtml;
|
|
10
|
+
}
|
|
11
|
+
interface TabScaffoldProps {
|
|
12
|
+
id: string;
|
|
13
|
+
/** Accessible name for the tab bar. */
|
|
14
|
+
label: string;
|
|
15
|
+
tabs: TabScaffoldTab[];
|
|
16
|
+
/** The controlled active tab id (the app owns selection). */
|
|
17
|
+
active: string;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A mobile-first, iOS-like bottom tab scaffold: a bottom tab bar that switches
|
|
22
|
+
* between major sections, each tab keeping its own content (usually a `NavStack`)
|
|
23
|
+
* mounted so its stack and scroll survive a switch. Controlled — the app owns
|
|
24
|
+
* `active`; wire selection with `@kerfjs/ui/wire-tab-scaffold`'s `wireTabScaffold`.
|
|
25
|
+
* On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of
|
|
26
|
+
* a bottom bar. See `docs/23-app-layouts.md` §3.4.
|
|
27
|
+
*/
|
|
28
|
+
declare function TabScaffold({ id, label, tabs, active, className }: TabScaffoldProps): SafeHtml;
|
|
29
|
+
|
|
30
|
+
export { TabScaffold, type TabScaffoldProps, type TabScaffoldTab };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'kerfjs/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
// src/tab-scaffold.tsx
|
|
4
|
+
function TabScaffold({ id, label, tabs, active, className = "" }) {
|
|
5
|
+
return /* @__PURE__ */ jsxs("section", { class: `kui-tab-scaffold ${className}`.trim(), id, "data-component": "tab-scaffold", "data-tab-scaffold-id": id, children: [
|
|
6
|
+
/* @__PURE__ */ jsx("div", { class: "kui-tab-scaffold__scenes", children: tabs.map((tab) => /* @__PURE__ */ jsx("div", { class: "kui-tab-scaffold__scene", "data-tab-scaffold-scene": tab.id, "data-active": String(tab.id === active), "aria-hidden": String(tab.id !== active), children: tab.content })) }),
|
|
7
|
+
/* @__PURE__ */ jsx("nav", { class: "kui-tab-scaffold__bar", role: "tablist", "aria-label": label, children: tabs.map((tab) => /* @__PURE__ */ jsxs("button", { type: "button", class: "kui-tab-scaffold__tab", role: "tab", "data-tab-scaffold-tab": tab.id, "aria-selected": String(tab.id === active), tabindex: tab.id === active ? "0" : "-1", children: [
|
|
8
|
+
tab.icon && /* @__PURE__ */ jsx("span", { class: "kui-tab-scaffold__tab-icon", "aria-hidden": "true", children: tab.icon }),
|
|
9
|
+
/* @__PURE__ */ jsx("span", { class: "kui-tab-scaffold__tab-label", children: tab.label })
|
|
10
|
+
] })) })
|
|
11
|
+
] });
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { TabScaffold };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=tab-scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tab-scaffold.tsx"],"names":[],"mappings":";;;AA6BO,SAAS,WAAA,CAAY,EAAE,EAAA,EAAI,KAAA,EAAO,MAAM,MAAA,EAAQ,SAAA,GAAY,IAAG,EAAqB;AACzF,EAAA,uBAAO,IAAA,CAAC,SAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK,EAAG,EAAA,EAAQ,gBAAA,EAAe,cAAA,EAAe,sBAAA,EAAsB,EAAA,EACzH,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,0BAAA,EACR,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBAAQ,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,yBAAA,EAA0B,yBAAA,EAAyB,GAAA,CAAI,EAAA,EAAI,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA,EAAG,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA,EAAI,QAAA,EAAA,GAAA,CAAI,OAAA,EAAQ,CAAM,CAAA,EAC9L,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,uBAAA,EAAwB,MAAK,SAAA,EAAU,YAAA,EAAY,KAAA,EAC3D,QAAA,EAAA,IAAA,CAAK,IAAI,CAAC,GAAA,qBAAQ,IAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,KAAA,EAAM,uBAAA,EAAwB,IAAA,EAAK,KAAA,EAAM,uBAAA,EAAuB,GAAA,CAAI,EAAA,EAAI,iBAAe,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,GAAG,QAAA,EAAU,GAAA,CAAI,EAAA,KAAO,MAAA,GAAS,MAAM,IAAA,EAC5L,QAAA,EAAA;AAAA,MAAA,GAAA,CAAI,IAAA,wBAAS,MAAA,EAAA,EAAK,KAAA,EAAM,8BAA6B,aAAA,EAAY,MAAA,EAAQ,cAAI,IAAA,EAAK,CAAA;AAAA,sBACnF,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,6BAAA,EAA+B,cAAI,KAAA,EAAM;AAAA,KAAA,EACvD,CAAS,CAAA,EACX;AAAA,GAAA,EACF,CAAA;AACF","file":"tab-scaffold.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nexport interface TabScaffoldTab {\n id: string;\n label: string;\n /** Decorative icon shown above the label in the bottom bar. */\n icon?: SafeHtml;\n /** The tab's content — typically a `NavStack` so each tab keeps its own stack. */\n content: SafeHtml;\n}\n\nexport interface TabScaffoldProps {\n id: string;\n /** Accessible name for the tab bar. */\n label: string;\n tabs: TabScaffoldTab[];\n /** The controlled active tab id (the app owns selection). */\n active: string;\n className?: string;\n}\n\n/**\n * A mobile-first, iOS-like bottom tab scaffold: a bottom tab bar that switches\n * between major sections, each tab keeping its own content (usually a `NavStack`)\n * mounted so its stack and scroll survive a switch. Controlled — the app owns\n * `active`; wire selection with `@kerfjs/ui/wire-tab-scaffold`'s `wireTabScaffold`.\n * On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of\n * a bottom bar. See `docs/23-app-layouts.md` §3.4.\n */\nexport function TabScaffold({ id, label, tabs, active, className = '' }: TabScaffoldProps) {\n return <section class={`kui-tab-scaffold ${className}`.trim()} id={id} data-component=\"tab-scaffold\" data-tab-scaffold-id={id}>\n <div class=\"kui-tab-scaffold__scenes\">\n {tabs.map((tab) => <div class=\"kui-tab-scaffold__scene\" data-tab-scaffold-scene={tab.id} data-active={String(tab.id === active)} aria-hidden={String(tab.id !== active)}>{tab.content}</div>)}\n </div>\n <nav class=\"kui-tab-scaffold__bar\" role=\"tablist\" aria-label={label}>\n {tabs.map((tab) => <button type=\"button\" class=\"kui-tab-scaffold__tab\" role=\"tab\" data-tab-scaffold-tab={tab.id} aria-selected={String(tab.id === active)} tabindex={tab.id === active ? '0' : '-1'}>\n {tab.icon && <span class=\"kui-tab-scaffold__tab-icon\" aria-hidden=\"true\">{tab.icon}</span>}\n <span class=\"kui-tab-scaffold__tab-label\">{tab.label}</span>\n </button>)}\n </nav>\n </section>;\n}\n"]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
|
|
3
|
+
interface TokenSearchToken {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
offset?: number;
|
|
7
|
+
accessibleLabel?: string;
|
|
8
|
+
}
|
|
9
|
+
interface TokenSearchFieldProps {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
query?: string;
|
|
13
|
+
tokens?: readonly TokenSearchToken[];
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
tokenPlaceholder?: string;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
autofocus?: boolean;
|
|
18
|
+
/** Allow an empty field to render as one iconic action. */
|
|
19
|
+
collapsible?: boolean;
|
|
20
|
+
/** Keep an empty collapsible field open while the application owns focus. */
|
|
21
|
+
expanded?: boolean;
|
|
22
|
+
expandAction?: string;
|
|
23
|
+
expandLabel?: string;
|
|
24
|
+
leading?: SafeHtml;
|
|
25
|
+
trailing?: SafeHtml;
|
|
26
|
+
editAction?: string;
|
|
27
|
+
removeAction?: string;
|
|
28
|
+
clearAction?: string;
|
|
29
|
+
clearLabel?: string;
|
|
30
|
+
className?: string;
|
|
31
|
+
editorAttributes?: Readonly<Record<`data-${string}`, string>>;
|
|
32
|
+
}
|
|
33
|
+
interface TokenSearchFieldValue {
|
|
34
|
+
query: string;
|
|
35
|
+
tokens: TokenSearchToken[];
|
|
36
|
+
}
|
|
37
|
+
declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, }: TokenSearchFieldProps): SafeHtml;
|
|
38
|
+
/** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */
|
|
39
|
+
declare function readTokenSearchField(editor: HTMLElement, knownTokens?: readonly TokenSearchToken[]): TokenSearchFieldValue;
|
|
40
|
+
/** Focus an editor and place its caret at a text offset, skipping atomic token chips. */
|
|
41
|
+
declare function placeTokenSearchCaret(editor: HTMLElement, offset?: number): void;
|
|
42
|
+
|
|
43
|
+
export { TokenSearchField, type TokenSearchFieldProps, type TokenSearchFieldValue, type TokenSearchToken, placeTokenSearchCaret, readTokenSearchField };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"token-search-field.js"}
|
|
@@ -9,7 +9,9 @@ interface ToolbarControlGroupProps {
|
|
|
9
9
|
appearance?: 'contained' | 'borderless';
|
|
10
10
|
tone?: 'default' | 'dark';
|
|
11
11
|
buttonAppearance?: 'plain' | 'push';
|
|
12
|
+
/** Corner shape: fully round `pill` (default) or a softer `rounded` rectangle. */
|
|
13
|
+
shape?: 'pill' | 'rounded';
|
|
12
14
|
}
|
|
13
|
-
declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance }: ToolbarControlGroupProps): SafeHtml;
|
|
15
|
+
declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape }: ToolbarControlGroupProps): SafeHtml;
|
|
14
16
|
|
|
15
17
|
export { ToolbarControlGroup, type ToolbarControlGroupProps };
|
package/dist/toolbar-text.d.ts
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import * as kerfjs from 'kerfjs';
|
|
2
2
|
|
|
3
|
-
type ToolbarTextSize = 'large' | 'default' | 'small';
|
|
3
|
+
type ToolbarTextSize = 'xlarge' | 'large' | 'default' | 'small';
|
|
4
|
+
/** ARIA heading level for a title exposed as a heading landmark. */
|
|
5
|
+
type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
4
6
|
interface ToolbarTextProps {
|
|
5
7
|
text: string;
|
|
6
8
|
size?: ToolbarTextSize;
|
|
7
9
|
className?: string;
|
|
10
|
+
/** Optional id, e.g. so a dialog can reference the title via aria-labelledby. */
|
|
11
|
+
id?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Expose heading semantics (`role="heading"` + `aria-level`) so the text acts as
|
|
14
|
+
* a heading landmark — e.g. a page's primary title. Omit to keep the plain span
|
|
15
|
+
* (the default), which suits a dialog title referenced via `aria-labelledby`.
|
|
16
|
+
*/
|
|
17
|
+
headingLevel?: HeadingLevel;
|
|
18
|
+
/** Render the text as an unanimated loading skeleton instead of its value. */
|
|
19
|
+
placeholder?: boolean;
|
|
8
20
|
}
|
|
9
|
-
declare function ToolbarText({ text, size, className }: ToolbarTextProps): kerfjs.SafeHtml;
|
|
21
|
+
declare function ToolbarText({ text, size, className, id, headingLevel, placeholder }: ToolbarTextProps): kerfjs.SafeHtml;
|
|
10
22
|
|
|
11
|
-
export { ToolbarText, type ToolbarTextProps, type ToolbarTextSize };
|
|
23
|
+
export { type HeadingLevel, ToolbarText, type ToolbarTextProps, type ToolbarTextSize };
|
package/dist/toolbar-text.js
CHANGED
package/dist/value-table.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { SafeHtml } from 'kerfjs';
|
|
2
2
|
|
|
3
|
+
interface ValueTableRowProps {
|
|
4
|
+
label: string | SafeHtml;
|
|
5
|
+
value: string | SafeHtml;
|
|
6
|
+
icon?: SafeHtml;
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Render the value as an unanimated loading skeleton, keeping the field label. */
|
|
9
|
+
placeholder?: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare function ValueTableRow({ label, value, icon, className, placeholder }: ValueTableRowProps): SafeHtml;
|
|
12
|
+
|
|
3
13
|
interface ValueTableProps {
|
|
4
14
|
label: string;
|
|
5
15
|
className?: string;
|
|
6
|
-
children: SafeHtml | SafeHtml[];
|
|
16
|
+
children: SafeHtml | readonly SafeHtml[];
|
|
7
17
|
}
|
|
8
18
|
declare function ValueTable({ label, className, children }: ValueTableProps): SafeHtml;
|
|
9
19
|
|
|
10
|
-
export { ValueTable, type ValueTableProps };
|
|
20
|
+
export { ValueTable, type ValueTableProps, ValueTableRow, type ValueTableRowProps };
|
package/dist/value-table.js
CHANGED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { KerfCustomElement } from 'kerfjs/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Opt-in Kerf JSX declarations for the Web Awesome elements supported by the
|
|
5
|
+
* @kerfjs/ui catalog. Import this module for type effects only; component
|
|
6
|
+
* registration remains an explicit application concern.
|
|
7
|
+
*/
|
|
8
|
+
declare module 'kerfjs/jsx-runtime' {
|
|
9
|
+
namespace JSX {
|
|
10
|
+
interface IntrinsicElements {
|
|
11
|
+
'wa-accordion': KerfCustomElement;
|
|
12
|
+
'wa-accordion-item': KerfCustomElement;
|
|
13
|
+
'wa-animated-image': KerfCustomElement;
|
|
14
|
+
'wa-animation': KerfCustomElement;
|
|
15
|
+
'wa-avatar': KerfCustomElement;
|
|
16
|
+
'wa-badge': KerfCustomElement;
|
|
17
|
+
'wa-breadcrumb': KerfCustomElement;
|
|
18
|
+
'wa-breadcrumb-item': KerfCustomElement;
|
|
19
|
+
'wa-select': KerfCustomElement & {
|
|
20
|
+
class?: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
label?: string;
|
|
23
|
+
'aria-label'?: string;
|
|
24
|
+
value?: string;
|
|
25
|
+
placeholder?: string;
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
};
|
|
28
|
+
'wa-option': KerfCustomElement & {
|
|
29
|
+
value?: string;
|
|
30
|
+
};
|
|
31
|
+
'wa-button-group': KerfCustomElement;
|
|
32
|
+
'wa-callout': KerfCustomElement;
|
|
33
|
+
'wa-card': KerfCustomElement;
|
|
34
|
+
'wa-carousel': KerfCustomElement;
|
|
35
|
+
'wa-carousel-item': KerfCustomElement;
|
|
36
|
+
'wa-checkbox': KerfCustomElement;
|
|
37
|
+
'wa-checkbox-group': KerfCustomElement;
|
|
38
|
+
'wa-color-picker': KerfCustomElement;
|
|
39
|
+
'wa-comparison': KerfCustomElement;
|
|
40
|
+
'wa-copy-button': KerfCustomElement;
|
|
41
|
+
'wa-details': KerfCustomElement;
|
|
42
|
+
'wa-divider': KerfCustomElement;
|
|
43
|
+
'wa-dialog': KerfCustomElement;
|
|
44
|
+
'wa-drawer': KerfCustomElement;
|
|
45
|
+
'wa-button': KerfCustomElement & {
|
|
46
|
+
slot?: string;
|
|
47
|
+
appearance?: string;
|
|
48
|
+
'with-caret'?: boolean;
|
|
49
|
+
'aria-label'?: string;
|
|
50
|
+
};
|
|
51
|
+
'wa-dropdown': KerfCustomElement & {
|
|
52
|
+
placement?: string;
|
|
53
|
+
};
|
|
54
|
+
'wa-dropdown-item': KerfCustomElement;
|
|
55
|
+
'wa-format-bytes': KerfCustomElement;
|
|
56
|
+
'wa-format-date': KerfCustomElement;
|
|
57
|
+
'wa-format-number': KerfCustomElement;
|
|
58
|
+
'wa-icon': KerfCustomElement;
|
|
59
|
+
'wa-include': KerfCustomElement;
|
|
60
|
+
'wa-input': KerfCustomElement;
|
|
61
|
+
'wa-intersection-observer': KerfCustomElement;
|
|
62
|
+
'wa-known-date': KerfCustomElement;
|
|
63
|
+
'wa-markdown': KerfCustomElement;
|
|
64
|
+
'wa-mutation-observer': KerfCustomElement;
|
|
65
|
+
'wa-number-input': KerfCustomElement;
|
|
66
|
+
'wa-otp-input': KerfCustomElement;
|
|
67
|
+
'wa-page': KerfCustomElement;
|
|
68
|
+
'wa-pagination': KerfCustomElement;
|
|
69
|
+
'wa-popover': KerfCustomElement;
|
|
70
|
+
'wa-popup': KerfCustomElement;
|
|
71
|
+
'wa-progress-bar': KerfCustomElement;
|
|
72
|
+
'wa-progress-ring': KerfCustomElement;
|
|
73
|
+
'wa-qr-code': KerfCustomElement;
|
|
74
|
+
'wa-radio': KerfCustomElement;
|
|
75
|
+
'wa-radio-group': KerfCustomElement;
|
|
76
|
+
'wa-random-content': KerfCustomElement;
|
|
77
|
+
'wa-rating': KerfCustomElement;
|
|
78
|
+
'wa-relative-time': KerfCustomElement;
|
|
79
|
+
'wa-resize-observer': KerfCustomElement;
|
|
80
|
+
'wa-scroller': KerfCustomElement;
|
|
81
|
+
'wa-skeleton': KerfCustomElement;
|
|
82
|
+
'wa-slider': KerfCustomElement;
|
|
83
|
+
'wa-spinner': KerfCustomElement;
|
|
84
|
+
'wa-split-panel': KerfCustomElement;
|
|
85
|
+
'wa-switch': KerfCustomElement;
|
|
86
|
+
'wa-tab': KerfCustomElement;
|
|
87
|
+
'wa-tab-group': KerfCustomElement;
|
|
88
|
+
'wa-tab-panel': KerfCustomElement;
|
|
89
|
+
'wa-tag': KerfCustomElement;
|
|
90
|
+
'wa-textarea': KerfCustomElement;
|
|
91
|
+
'wa-time-input': KerfCustomElement;
|
|
92
|
+
'wa-toast': KerfCustomElement;
|
|
93
|
+
'wa-toast-item': KerfCustomElement;
|
|
94
|
+
'wa-tooltip': KerfCustomElement;
|
|
95
|
+
'wa-tree': KerfCustomElement;
|
|
96
|
+
'wa-tree-item': KerfCustomElement;
|
|
97
|
+
'wa-zoomable-frame': KerfCustomElement;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"webawesome.js"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface WireCatalogOptions {
|
|
2
|
+
/** Invoked with the entry id when a sidebar item or a related-entry option is chosen. */
|
|
3
|
+
onSelect: (id: string) => void;
|
|
4
|
+
/** Invoked when the sidebar collapse/expand control is activated. */
|
|
5
|
+
onToggleSidebar?: () => void;
|
|
6
|
+
/** Invoked when the theme toggle is activated. */
|
|
7
|
+
onToggleTheme?: () => void;
|
|
8
|
+
/** Invoked when the secondary (ecosystem) group's disclosure toggle is activated. */
|
|
9
|
+
onToggleSecondary?: () => void;
|
|
10
|
+
/** When set, `?<urlParam>=<id>` is written on select via `history.replaceState`. */
|
|
11
|
+
urlParam?: string;
|
|
12
|
+
selectAction?: string;
|
|
13
|
+
toggleSidebarAction?: string;
|
|
14
|
+
toggleThemeAction?: string;
|
|
15
|
+
toggleSecondaryAction?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Wire a {@link Catalog}'s interactions with one delegated listener set: sidebar
|
|
19
|
+
* item selection (and the related-entry popup menu), the sidebar collapse toggle, and
|
|
20
|
+
* the theme toggle. The app owns the `active`/`collapsed`/`theme` signals and updates
|
|
21
|
+
* them in the callbacks; optionally mirror the active id into the URL via `urlParam`.
|
|
22
|
+
* Returns a disposer.
|
|
23
|
+
*/
|
|
24
|
+
declare function wireCatalog(root: HTMLElement, { onSelect, onToggleSidebar, onToggleTheme, onToggleSecondary, urlParam, selectAction, toggleSidebarAction, toggleThemeAction, toggleSecondaryAction, }: WireCatalogOptions): () => void;
|
|
25
|
+
|
|
26
|
+
export { type WireCatalogOptions, wireCatalog };
|