@kerfjs/ui 5.0.0-beta.6 → 5.0.0-beta.61
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 +494 -138
- package/ai/application-ui-diagnostic-ids-v1.json +109 -0
- package/ai/application-ui-profile-sync.cjs +529 -0
- package/ai/application-ui-profile.d.mts +1 -0
- package/ai/application-ui-profile.d.ts +102 -0
- package/ai/application-ui-profile.defaults.json +96 -0
- package/ai/application-ui-profile.mjs +626 -0
- package/ai/application-ui-profile.schema.json +130 -0
- package/ai/catalog-authoring.json +36 -0
- package/ai/catalog-authoring.schema.json +109 -0
- package/ai/compile-time-contracts-v1.json +149 -0
- package/ai/compile-time-contracts-v1.schema.json +52 -0
- package/ai/component-catalog-extension.schema.json +79 -0
- package/ai/component-catalog.json +4041 -591
- package/ai/component-catalog.schema.json +78 -1
- package/ai/component-class-owners.cjs +83 -0
- package/ai/component-composition-extension.d.ts +7 -0
- package/ai/component-composition-extension.schema.json +7 -0
- package/ai/component-composition-rules.json +524 -0
- package/ai/component-composition.d.ts +125 -0
- package/ai/component-composition.json +7074 -0
- package/ai/component-composition.schema.json +375 -0
- package/ai/components/README.md +171 -0
- package/ai/components/application-tabs.md +65 -0
- package/ai/components/badge.md +72 -0
- package/ai/components/chip.md +72 -0
- package/ai/components/collapsible-panel.md +102 -0
- package/ai/components/content-item.md +90 -0
- package/ai/components/disclosure-arrow.md +77 -0
- package/ai/components/document-baseline.md +75 -0
- package/ai/components/empty-state.md +80 -0
- package/ai/components/feedback.md +71 -0
- package/ai/components/floating-toolbar.md +82 -0
- package/ai/components/foundation.md +65 -0
- package/ai/components/grid.md +96 -0
- package/ai/components/headers.md +63 -0
- package/ai/components/layout.md +75 -0
- package/ai/components/list-action-row.md +91 -0
- package/ai/components/list-header.md +89 -0
- package/ai/components/list-inset-control.md +74 -0
- package/ai/components/list-inset-text.md +72 -0
- package/ai/components/list-item.md +94 -0
- package/ai/components/list.md +103 -0
- package/ai/components/loading-spinner.md +72 -0
- package/ai/components/lucide-icon.md +66 -0
- package/ai/components/nav-stack.md +103 -0
- package/ai/components/pane.md +100 -0
- package/ai/components/popup-menu.md +171 -0
- package/ai/components/recipe-app-shell.md +57 -0
- package/ai/components/recipe-collapsible-sidebar.md +57 -0
- package/ai/components/recipe-compact-toolbar.md +57 -0
- package/ai/components/recipe-composer-form.md +57 -0
- package/ai/components/recipe-list-detail-dialog.md +57 -0
- package/ai/components/recipe-list-workspace-states.md +57 -0
- package/ai/components/recipe-loading-inspector.md +57 -0
- package/ai/components/recipe-navigation-sidebar.md +57 -0
- package/ai/components/recipe-navigation-stack.md +57 -0
- package/ai/components/recipe-workspace-header.md +57 -0
- package/ai/components/resize.md +106 -0
- package/ai/components/row.md +96 -0
- package/ai/components/segmented-control.md +82 -0
- package/ai/components/select.md +112 -0
- package/ai/components/skeleton.md +84 -0
- package/ai/components/spacer.md +86 -0
- package/ai/components/split-view.md +102 -0
- package/ai/components/state-banner.md +94 -0
- package/ai/components/sunken-panel.md +79 -0
- package/ai/components/surface-scaffold.md +78 -0
- package/ai/components/tab-bar.md +112 -0
- package/ai/components/tab-scaffold.md +94 -0
- package/ai/components/tabs.md +95 -0
- package/ai/components/text.md +83 -0
- package/ai/components/token-search-field.md +103 -0
- package/ai/components/toolbar-control-group.md +102 -0
- package/ai/components/toolbar-text.md +78 -0
- package/ai/components/toolbar.md +97 -0
- package/ai/components/value-table.md +73 -0
- package/ai/components/wa-accordion-item.md +55 -0
- package/ai/components/wa-accordion.md +65 -0
- package/ai/components/wa-animated-image.md +55 -0
- package/ai/components/wa-animation.md +55 -0
- package/ai/components/wa-avatar.md +55 -0
- package/ai/components/wa-badge.md +55 -0
- package/ai/components/wa-breadcrumb-item.md +53 -0
- package/ai/components/wa-breadcrumb.md +55 -0
- package/ai/components/wa-button-group.md +59 -0
- package/ai/components/wa-button.md +55 -0
- package/ai/components/wa-callout.md +58 -0
- package/ai/components/wa-card.md +59 -0
- package/ai/components/wa-carousel-item.md +53 -0
- package/ai/components/wa-carousel.md +55 -0
- package/ai/components/wa-checkbox-group.md +55 -0
- package/ai/components/wa-checkbox.md +55 -0
- package/ai/components/wa-color-picker.md +55 -0
- package/ai/components/wa-comparison.md +55 -0
- package/ai/components/wa-copy-button.md +55 -0
- package/ai/components/wa-details.md +61 -0
- package/ai/components/wa-dialog.md +59 -0
- package/ai/components/wa-divider.md +53 -0
- package/ai/components/wa-drawer.md +55 -0
- package/ai/components/wa-dropdown-item.md +60 -0
- package/ai/components/wa-dropdown.md +60 -0
- package/ai/components/wa-format-bytes.md +53 -0
- package/ai/components/wa-format-date.md +53 -0
- package/ai/components/wa-format-number.md +53 -0
- package/ai/components/wa-icon.md +58 -0
- package/ai/components/wa-include.md +53 -0
- package/ai/components/wa-input.md +59 -0
- package/ai/components/wa-intersection-observer.md +53 -0
- package/ai/components/wa-known-date.md +53 -0
- package/ai/components/wa-markdown.md +53 -0
- package/ai/components/wa-mutation-observer.md +53 -0
- package/ai/components/wa-number-input.md +55 -0
- package/ai/components/wa-option.md +59 -0
- package/ai/components/wa-otp-input.md +53 -0
- package/ai/components/wa-page.md +53 -0
- package/ai/components/wa-pagination.md +55 -0
- package/ai/components/wa-popover.md +55 -0
- package/ai/components/wa-popup.md +53 -0
- package/ai/components/wa-progress-bar.md +53 -0
- package/ai/components/wa-progress-ring.md +53 -0
- package/ai/components/wa-qr-code.md +53 -0
- package/ai/components/wa-radio-group.md +59 -0
- package/ai/components/wa-radio.md +55 -0
- package/ai/components/wa-random-content.md +53 -0
- package/ai/components/wa-rating.md +55 -0
- package/ai/components/wa-relative-time.md +53 -0
- package/ai/components/wa-resize-observer.md +53 -0
- package/ai/components/wa-scroller.md +53 -0
- package/ai/components/wa-select.md +63 -0
- package/ai/components/wa-skeleton.md +53 -0
- package/ai/components/wa-slider.md +55 -0
- package/ai/components/wa-spinner.md +58 -0
- package/ai/components/wa-split-panel.md +58 -0
- package/ai/components/wa-switch.md +53 -0
- package/ai/components/wa-tab-group.md +69 -0
- package/ai/components/wa-tab-panel.md +60 -0
- package/ai/components/wa-tab.md +59 -0
- package/ai/components/wa-tag.md +59 -0
- package/ai/components/wa-textarea.md +53 -0
- package/ai/components/wa-time-input.md +55 -0
- package/ai/components/wa-toast-item.md +60 -0
- package/ai/components/wa-toast.md +60 -0
- package/ai/components/wa-tooltip.md +55 -0
- package/ai/components/wa-tree-item.md +55 -0
- package/ai/components/wa-tree.md +55 -0
- package/ai/components/wa-zoomable-frame.md +55 -0
- package/ai/components/workbench.md +114 -0
- package/ai/public-api-signatures-v1.md +2597 -190
- package/ai/skill.md +259 -65
- package/ai/webawesome-jsx-signatures-v1.md +9 -2
- package/analyzer/cli.mjs +49 -0
- package/analyzer/component-ownership.d.mts +56 -0
- package/analyzer/component-ownership.mjs +184 -0
- package/analyzer/index.d.mts +49 -0
- package/analyzer/index.mjs +1458 -0
- package/analyzer/loud-pairs.d.mts +49 -0
- package/analyzer/loud-pairs.mjs +357 -0
- package/analyzer/report.schema.json +66 -0
- package/analyzer/selectors.d.mts +21 -0
- package/analyzer/selectors.mjs +212 -0
- package/dist/app-tab.d.ts +41 -4
- package/dist/app-tab.js +3 -1
- package/dist/badge.d.ts +52 -0
- package/dist/badge.js +3 -0
- package/dist/badge.js.map +1 -0
- package/dist/browser/app-tab.js +1 -0
- package/dist/browser/badge.js +3 -0
- package/dist/browser/catalog.js +25 -0
- package/dist/browser/chip.js +3 -0
- package/dist/browser/collapsible-panel.js +7 -0
- package/dist/browser/content-item.js +3 -0
- package/dist/browser/floating-toolbar.js +3 -0
- package/dist/browser/grid.js +3 -0
- package/dist/browser/list-action-row.js +5 -0
- package/dist/browser/list-header.js +8 -0
- package/dist/browser/list-inset-control.js +3 -0
- package/dist/browser/list-inset-text.js +3 -0
- package/dist/browser/list-item.js +5 -0
- package/dist/browser/list.js +3 -0
- package/dist/browser/{panel-header.js → nav-stack.js} +4 -2
- package/dist/browser/pane.js +3 -0
- package/dist/browser/popup-menu.js +3 -0
- package/dist/browser/row.js +3 -0
- package/dist/browser/select.js +2 -0
- package/dist/browser/skeleton.js +3 -0
- package/dist/browser/spacer.js +3 -0
- package/dist/browser/split-view.js +10 -0
- package/dist/browser/state-banner.js +2 -0
- package/dist/browser/sunken-panel.js +3 -0
- package/dist/browser/surface-scaffold.js +3 -0
- package/dist/browser/tab-scaffold.js +4 -0
- package/dist/browser/text.js +3 -0
- package/dist/browser/toolbar-text.js +1 -0
- package/dist/browser/value-table.js +1 -0
- package/dist/browser/workbench.js +10 -0
- package/dist/catalog-resources.d.ts +46 -0
- package/dist/catalog-resources.js +22 -0
- package/dist/catalog-resources.js.map +1 -0
- package/dist/catalog.d.ts +90 -0
- package/dist/catalog.js +501 -0
- package/dist/catalog.js.map +1 -0
- package/dist/chip.d.ts +29 -0
- package/dist/chip.js +3 -0
- package/dist/chip.js.map +1 -0
- package/dist/chunk-2G2ZJQYK.js +152 -0
- package/dist/chunk-2G2ZJQYK.js.map +1 -0
- package/dist/chunk-3SXMEK3B.js +43 -0
- package/dist/chunk-3SXMEK3B.js.map +1 -0
- package/dist/{chunk-W2FK7ZNY.js → chunk-4R777DUZ.js} +10 -2
- package/dist/chunk-4R777DUZ.js.map +1 -0
- package/dist/chunk-4SQK27MR.js +202 -0
- package/dist/chunk-4SQK27MR.js.map +1 -0
- package/dist/chunk-5I7QGQVT.js +24 -0
- package/dist/chunk-5I7QGQVT.js.map +1 -0
- package/dist/chunk-5PESG2VP.js +115 -0
- package/dist/chunk-5PESG2VP.js.map +1 -0
- package/dist/chunk-5Q3N6EV7.js +156 -0
- package/dist/chunk-5Q3N6EV7.js.map +1 -0
- package/dist/chunk-6ZXOQEAN.js +27 -0
- package/dist/chunk-6ZXOQEAN.js.map +1 -0
- package/dist/chunk-7JUBXOIV.js +103 -0
- package/dist/chunk-7JUBXOIV.js.map +1 -0
- package/dist/chunk-A3CKOW2R.js +622 -0
- package/dist/chunk-A3CKOW2R.js.map +1 -0
- package/dist/chunk-AHEG27M7.js +66 -0
- package/dist/chunk-AHEG27M7.js.map +1 -0
- package/dist/chunk-AUKT3KMG.js +37 -0
- package/dist/chunk-AUKT3KMG.js.map +1 -0
- package/dist/chunk-AYUHMAI6.js +48 -0
- package/dist/chunk-AYUHMAI6.js.map +1 -0
- package/dist/chunk-BFPBS5Y4.js +250 -0
- package/dist/chunk-BFPBS5Y4.js.map +1 -0
- package/dist/{chunk-MQIZAD4A.js → chunk-C4OYOKWX.js} +138 -22
- package/dist/chunk-C4OYOKWX.js.map +1 -0
- package/dist/chunk-DG6G5EPF.js +35 -0
- package/dist/chunk-DG6G5EPF.js.map +1 -0
- package/dist/chunk-E36EVCKG.js +34 -0
- package/dist/chunk-E36EVCKG.js.map +1 -0
- package/dist/chunk-EAC4CDY7.js +57 -0
- package/dist/chunk-EAC4CDY7.js.map +1 -0
- package/dist/chunk-EZVNC4J6.js +104 -0
- package/dist/chunk-EZVNC4J6.js.map +1 -0
- package/dist/chunk-F4QMLOXJ.js +135 -0
- package/dist/chunk-F4QMLOXJ.js.map +1 -0
- package/dist/chunk-GLDWRCAM.js +49 -0
- package/dist/chunk-GLDWRCAM.js.map +1 -0
- package/dist/chunk-I3Q7KKYM.js +33 -0
- package/dist/chunk-I3Q7KKYM.js.map +1 -0
- package/dist/chunk-IA7TMD4Y.js +288 -0
- package/dist/chunk-IA7TMD4Y.js.map +1 -0
- package/dist/chunk-JCV4GXWB.js +249 -0
- package/dist/chunk-JCV4GXWB.js.map +1 -0
- package/dist/chunk-K47P7QZC.js +17 -0
- package/dist/chunk-K47P7QZC.js.map +1 -0
- package/dist/chunk-KLJKU6ZL.js +109 -0
- package/dist/chunk-KLJKU6ZL.js.map +1 -0
- package/dist/{chunk-56RJXPHG.js → chunk-KROD7KZK.js} +7 -4
- package/dist/chunk-KROD7KZK.js.map +1 -0
- package/dist/chunk-MA73TA6D.js +42 -0
- package/dist/chunk-MA73TA6D.js.map +1 -0
- package/dist/chunk-MERWRTBG.js +45 -0
- package/dist/chunk-MERWRTBG.js.map +1 -0
- package/dist/chunk-MEY33VWB.js +44 -0
- package/dist/chunk-MEY33VWB.js.map +1 -0
- package/dist/chunk-MP2GDBQZ.js +50 -0
- package/dist/chunk-MP2GDBQZ.js.map +1 -0
- package/dist/chunk-N3GKMPDW.js +51 -0
- package/dist/chunk-N3GKMPDW.js.map +1 -0
- package/dist/chunk-NAPE7WUS.js +75 -0
- package/dist/chunk-NAPE7WUS.js.map +1 -0
- package/dist/chunk-NN6GYOA2.js +47 -0
- package/dist/chunk-NN6GYOA2.js.map +1 -0
- package/dist/chunk-NNMLEDMD.js +399 -0
- package/dist/chunk-NNMLEDMD.js.map +1 -0
- package/dist/chunk-NYL63PSD.js +95 -0
- package/dist/chunk-NYL63PSD.js.map +1 -0
- package/dist/chunk-P7D3EMXM.js +52 -0
- package/dist/chunk-P7D3EMXM.js.map +1 -0
- package/dist/chunk-PSHUSWQH.js +18 -0
- package/dist/chunk-PSHUSWQH.js.map +1 -0
- package/dist/chunk-Q6YU3BT7.js +138 -0
- package/dist/chunk-Q6YU3BT7.js.map +1 -0
- package/dist/chunk-RRB26JRJ.js +247 -0
- package/dist/chunk-RRB26JRJ.js.map +1 -0
- package/dist/{chunk-7BR3DO2A.js → chunk-SRSJO5QE.js} +13 -4
- package/dist/chunk-SRSJO5QE.js.map +1 -0
- package/dist/chunk-SWVW56CV.js +188 -0
- package/dist/chunk-SWVW56CV.js.map +1 -0
- package/dist/chunk-TEYARRAK.js +216 -0
- package/dist/chunk-TEYARRAK.js.map +1 -0
- package/dist/chunk-UCKKT6KO.js +71 -0
- package/dist/chunk-UCKKT6KO.js.map +1 -0
- package/dist/chunk-UIDKY4UB.js +14 -0
- package/dist/chunk-UIDKY4UB.js.map +1 -0
- package/dist/chunk-VCBTX62E.js +135 -0
- package/dist/chunk-VCBTX62E.js.map +1 -0
- package/dist/chunk-VZOFZPSO.js +71 -0
- package/dist/chunk-VZOFZPSO.js.map +1 -0
- package/dist/{chunk-TRNBHPNW.js → chunk-X5QSICJ3.js} +13 -7
- package/dist/chunk-X5QSICJ3.js.map +1 -0
- package/dist/chunk-Y74NWGQW.js +418 -0
- package/dist/chunk-Y74NWGQW.js.map +1 -0
- package/dist/chunk-ZLWQZUGF.js +27 -0
- package/dist/chunk-ZLWQZUGF.js.map +1 -0
- package/dist/collapsible-panel.d.ts +122 -0
- package/dist/collapsible-panel.js +115 -0
- package/dist/collapsible-panel.js.map +1 -0
- package/dist/content-item.d.ts +46 -0
- package/dist/content-item.js +4 -0
- package/dist/content-item.js.map +1 -0
- package/dist/css-values.d.ts +107 -0
- package/dist/css-values.js +3 -0
- package/dist/css-values.js.map +1 -0
- package/dist/device-class.js +33 -5
- package/dist/device-class.js.map +1 -1
- package/dist/disclosure-arrow.d.ts +6 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/empty-state.d.ts +5 -2
- package/dist/empty-state.js +1 -1
- package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
- package/dist/floating-toolbar.d.ts +51 -0
- package/dist/floating-toolbar.js +3 -0
- package/dist/floating-toolbar.js.map +1 -0
- package/dist/grid.d.ts +42 -0
- package/dist/grid.js +5 -0
- package/dist/grid.js.map +1 -0
- package/dist/help-tags-register.d.ts +13 -0
- package/dist/help-tags-register.js +9 -0
- package/dist/help-tags-register.js.map +1 -0
- package/dist/index.d.ts +35 -14
- package/dist/index.js +43 -22
- package/dist/list-action-row.d.ts +64 -0
- package/dist/list-action-row.js +8 -0
- package/dist/list-action-row.js.map +1 -0
- package/dist/list-header.d.ts +99 -0
- package/dist/list-header.js +10 -0
- package/dist/list-header.js.map +1 -0
- package/dist/list-inset-control.d.ts +22 -0
- package/dist/list-inset-control.js +3 -0
- package/dist/list-inset-control.js.map +1 -0
- package/dist/list-inset-text.d.ts +30 -0
- package/dist/list-inset-text.js +4 -0
- package/dist/list-inset-text.js.map +1 -0
- package/dist/list-item.d.ts +62 -0
- package/dist/list-item.js +8 -0
- package/dist/list-item.js.map +1 -0
- package/dist/list.d.ts +59 -0
- package/dist/list.js +6 -0
- package/dist/list.js.map +1 -0
- package/dist/loading-spinner.d.ts +3 -1
- package/dist/loading-spinner.js +1 -1
- package/dist/lucide-icon.d.ts +3 -1
- package/dist/lucide-icon.js +1 -1
- package/dist/nav-stack.d.ts +60 -10
- package/dist/nav-stack.js +6 -1
- package/dist/pane.d.ts +102 -0
- package/dist/pane.js +4 -0
- package/dist/pane.js.map +1 -0
- package/dist/panel-toolbar-DqwtBxQL.d.ts +63 -0
- package/dist/popup-menu-register.d.ts +9 -0
- package/dist/popup-menu-register.js +31 -0
- package/dist/popup-menu-register.js.map +1 -0
- package/dist/popup-menu.d.ts +99 -0
- package/dist/popup-menu.js +3 -0
- package/dist/popup-menu.js.map +1 -0
- package/dist/resizable-region.d.ts +32 -3
- package/dist/resizable-region.js +1 -1
- package/dist/row.d.ts +48 -0
- package/dist/row.js +6 -0
- package/dist/row.js.map +1 -0
- package/dist/segmented-control.d.ts +13 -8
- package/dist/segmented-control.js +1 -1
- package/dist/select-register.d.ts +5 -1
- package/dist/select-register.js +243 -2
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +101 -8
- package/dist/select.js +4 -1
- package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
- package/dist/sides-BPSWde0A.d.ts +4 -0
- package/dist/skeleton.d.ts +31 -0
- package/dist/skeleton.js +4 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/spacer.d.ts +18 -0
- package/dist/spacer.js +4 -0
- package/dist/spacer.js.map +1 -0
- package/dist/split-view.d.ts +39 -7
- package/dist/split-view.js +120 -10
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.d.ts +19 -5
- package/dist/state-banner.js +4 -1
- package/dist/styles/app-tab.css +104 -0
- package/dist/styles/badge.css +118 -0
- package/dist/styles/catalog/components/catalog-example-stack.css +9 -0
- package/dist/styles/catalog/components/catalog-example.css +164 -0
- package/dist/styles/catalog/components/catalog-stage.css +55 -0
- package/dist/styles/catalog/components/catalog.css +12 -0
- package/dist/styles/catalog.css +5 -0
- package/dist/styles/chip.css +118 -0
- package/dist/styles/collapsible-panel.css +575 -0
- package/dist/styles/content-item.css +30 -0
- package/dist/styles/document.css +23 -0
- package/dist/styles/floating-toolbar.css +119 -0
- package/dist/styles/foundation.css +178 -40
- package/dist/styles/grid.css +28 -0
- package/dist/styles/layout.css +3 -41
- package/dist/styles/list-action-row.css +257 -0
- package/dist/styles/list-header.css +228 -0
- package/dist/styles/list-inset-control.css +30 -0
- package/dist/styles/list-inset-text.css +29 -0
- package/dist/styles/list-item.css +245 -0
- package/dist/styles/list.css +133 -0
- package/dist/styles/nav-stack.css +158 -50
- package/dist/styles/pane.css +229 -0
- package/dist/styles/popup-menu.css +271 -0
- package/dist/styles/resizable-region.css +429 -4
- package/dist/styles/row.css +111 -0
- package/dist/styles/segmented-control.css +33 -9
- package/dist/styles/select.css +262 -9
- package/dist/styles/skeleton.css +92 -0
- package/dist/styles/spacer.css +11 -0
- package/dist/styles/split-view.css +108 -3
- package/dist/styles/state-banner.css +94 -19
- package/dist/styles/styles.css +14 -4
- package/dist/styles/sunken-panel.css +22 -0
- package/dist/styles/surface-scaffold.css +56 -0
- package/dist/styles/tab-bar.css +132 -9
- package/dist/styles/tab-scaffold.css +113 -3
- package/dist/styles/text.css +65 -0
- package/dist/styles/token-search-field.css +49 -43
- package/dist/styles/toolbar-control-group.css +465 -28
- package/dist/styles/toolbar-text.css +88 -4
- package/dist/styles/toolbar.css +322 -11
- package/dist/styles/value-table.css +34 -4
- package/dist/styles/webawesome.css +348 -10
- package/dist/styles/workbench.css +828 -7
- package/dist/sunken-panel.d.ts +22 -0
- package/dist/sunken-panel.js +3 -0
- package/dist/sunken-panel.js.map +1 -0
- package/dist/surface-scaffold.d.ts +30 -0
- package/dist/surface-scaffold.js +3 -0
- package/dist/surface-scaffold.js.map +1 -0
- package/dist/tab-bar.d.ts +31 -6
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +54 -7
- package/dist/tab-scaffold.js +82 -9
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/text.d.ts +38 -0
- package/dist/text.js +3 -0
- package/dist/text.js.map +1 -0
- package/dist/token-search-field-DvgFLhLL.d.ts +130 -0
- package/dist/token-search-field.d.ts +3 -43
- package/dist/token-search-field.js +1 -1
- package/dist/token-search-model.d.ts +3 -0
- package/dist/token-search-model.js +3 -0
- package/dist/token-search-model.js.map +1 -0
- package/dist/toolbar-control-group.d.ts +65 -7
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.d.ts +37 -4
- package/dist/toolbar-text.js +3 -1
- package/dist/toolbar.d.ts +56 -7
- package/dist/toolbar.js +1 -1
- package/dist/types-BuHELdXR.d.ts +117 -0
- package/dist/value-table.d.ts +13 -3
- package/dist/value-table.js +3 -1
- package/dist/webawesome.d.ts +8 -1
- package/dist/wire-catalog.d.ts +82 -0
- package/dist/wire-catalog.js +327 -0
- package/dist/wire-catalog.js.map +1 -0
- package/dist/wire-nav-stack.d.ts +4 -1
- package/dist/wire-nav-stack.js +147 -7
- package/dist/wire-nav-stack.js.map +1 -1
- package/dist/wire-resizable-regions.d.ts +2 -1
- package/dist/wire-resizable-regions.js +2 -1
- package/dist/wire-scroll-dividers.d.ts +69 -0
- package/dist/wire-scroll-dividers.js +3 -0
- package/dist/wire-scroll-dividers.js.map +1 -0
- package/dist/wire-sidebar.d.ts +63 -0
- package/dist/wire-sidebar.js +231 -0
- package/dist/wire-sidebar.js.map +1 -0
- package/dist/wire-tab-bars.d.ts +19 -2
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tab-scaffold.js +9 -4
- package/dist/wire-tab-scaffold.js.map +1 -1
- package/dist/wire-token-search-fields.d.ts +65 -3
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/wire-workbench.d.ts +109 -0
- package/dist/wire-workbench.js +6 -0
- package/dist/wire-workbench.js.map +1 -0
- package/dist/workbench.d.ts +218 -7
- package/dist/workbench.js +13 -15
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +413 -23
- package/docs/app-layouts.md +106 -8
- package/docs/catalog.md +440 -0
- package/docs/collapsible-panel.md +363 -0
- package/docs/component-contract.md +560 -52
- package/docs/component-integration.md +75 -0
- package/docs/component-selection.md +421 -89
- 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 +1 -0
- package/docs/design/templates/empty-state.svg +1 -0
- package/docs/design/templates/list/compact-dark.svg +1 -0
- package/docs/design/templates/list/compact.svg +1 -0
- package/docs/design/templates/list/stack-dark.svg +1 -0
- package/docs/design/templates/list/stack.svg +1 -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 +1 -0
- package/docs/design/templates/list-action-row.svg +1 -0
- package/docs/design/templates/list-dark.svg +1 -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/inline-action-dark.svg +1 -0
- package/docs/design/templates/list-header/inline-action.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 +1 -0
- package/docs/design/templates/list-header.svg +1 -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 +1 -0
- package/docs/design/templates/list-item.svg +1 -0
- package/docs/design/templates/list.svg +1 -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 +1 -0
- package/docs/design/templates/segmented-control.svg +1 -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 +1 -0
- package/docs/design/templates/skeleton.svg +1 -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-badge-dark.svg +1 -0
- package/docs/design/templates/state-banner/info-badge.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 +1 -0
- package/docs/design/templates/state-banner.svg +1 -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 +1 -0
- package/docs/design/templates/tab-bar.svg +1 -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 +1 -0
- package/docs/design/templates/token-search-field.svg +1 -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 +1 -0
- package/docs/design/templates/toolbar-control-group.svg +1 -0
- package/docs/design/templates/toolbar-dark.svg +1 -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 +1 -0
- package/docs/design/templates/toolbar-text.svg +1 -0
- package/docs/design/templates/toolbar.svg +1 -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 +1 -0
- package/docs/design/templates/value-table.svg +1 -0
- package/docs/design/templates.md +138 -0
- package/docs/design-philosophy.md +48 -20
- package/docs/device-class.md +10 -9
- package/docs/document-baseline.md +38 -0
- package/docs/examples/application-ui-profile.json +60 -0
- package/docs/examples/command-palette-adapter.tsx +69 -17
- package/docs/examples/component-catalog-extension.json +45 -0
- package/docs/examples/component-composition-extension.json +80 -0
- package/docs/layout.md +409 -59
- package/docs/nav-stack.md +126 -14
- package/docs/recipes.md +137 -54
- package/docs/split-view.md +69 -6
- package/docs/sunken-panel.md +58 -0
- package/docs/surface-scaffold.md +25 -0
- package/docs/tab-scaffold.md +94 -10
- package/docs/type-contracts.md +134 -0
- package/docs/ui-analyzer.md +306 -0
- package/docs/ui-doctor.md +107 -0
- package/docs/ui-evaluator.md +139 -0
- package/docs/ux-demo.md +40 -16
- package/docs/webawesome-theme.md +175 -16
- package/docs/workbench.md +534 -12
- package/doctor/cli.mjs +115 -0
- package/doctor/config.schema.json +68 -0
- package/doctor/eslint-diagnostics.d.mts +24 -0
- package/doctor/eslint-diagnostics.mjs +24 -0
- package/doctor/index.d.mts +116 -0
- package/doctor/index.mjs +1277 -0
- package/doctor/report.schema.json +118 -0
- package/evaluator/cli.mjs +89 -0
- package/evaluator/index.d.mts +90 -0
- package/evaluator/index.mjs +1203 -0
- package/evaluator/report.schema.json +152 -0
- package/llms.txt +423 -42
- package/package.json +241 -37
- package/traversal-exclusions.mjs +27 -0
- package/ux-demo/recipes/app-shell.tsx +205 -17
- package/ux-demo/recipes/collapsible-sidebar.tsx +260 -0
- package/ux-demo/recipes/compact-toolbar.tsx +135 -14
- package/ux-demo/recipes/composer-form.tsx +133 -21
- package/ux-demo/recipes/list-detail-dialog.tsx +282 -0
- package/ux-demo/recipes/list-workspace-states.tsx +183 -11
- package/ux-demo/recipes/loaders.ts +15 -5
- package/ux-demo/recipes/loading-inspector.tsx +204 -0
- package/ux-demo/recipes/mount-recipe.ts +28 -10
- package/ux-demo/recipes/navigation-sidebar.tsx +139 -13
- package/ux-demo/recipes/navigation-stack.tsx +79 -24
- package/ux-demo/recipes/types.ts +23 -2
- package/ux-demo/recipes/workspace-header.tsx +86 -5
- package/dist/browser/menu-action-row.js +0 -3
- package/dist/browser/menu-header.js +0 -5
- package/dist/browser/menu-item.js +0 -3
- package/dist/chunk-24Z2XE6C.js +0 -10
- package/dist/chunk-24Z2XE6C.js.map +0 -1
- package/dist/chunk-2RJBFNB6.js +0 -172
- package/dist/chunk-2RJBFNB6.js.map +0 -1
- package/dist/chunk-55DATV3A.js +0 -10
- package/dist/chunk-55DATV3A.js.map +0 -1
- package/dist/chunk-56RJXPHG.js.map +0 -1
- package/dist/chunk-7BR3DO2A.js.map +0 -1
- package/dist/chunk-7LDCTU7D.js +0 -134
- package/dist/chunk-7LDCTU7D.js.map +0 -1
- package/dist/chunk-AQNKJRFH.js +0 -79
- package/dist/chunk-AQNKJRFH.js.map +0 -1
- package/dist/chunk-CTQKI2XL.js +0 -28
- package/dist/chunk-CTQKI2XL.js.map +0 -1
- package/dist/chunk-DAFFDO33.js +0 -14
- package/dist/chunk-DAFFDO33.js.map +0 -1
- package/dist/chunk-EGHL5S4P.js +0 -33
- package/dist/chunk-EGHL5S4P.js.map +0 -1
- package/dist/chunk-KZKSBUKC.js +0 -19
- package/dist/chunk-KZKSBUKC.js.map +0 -1
- package/dist/chunk-M5JRI6MN.js +0 -27
- package/dist/chunk-M5JRI6MN.js.map +0 -1
- package/dist/chunk-MBR3TYNL.js +0 -14
- package/dist/chunk-MBR3TYNL.js.map +0 -1
- package/dist/chunk-MFKMHK5W.js +0 -10
- package/dist/chunk-MFKMHK5W.js.map +0 -1
- package/dist/chunk-MQIZAD4A.js.map +0 -1
- package/dist/chunk-NPPD2A6O.js +0 -40
- package/dist/chunk-NPPD2A6O.js.map +0 -1
- package/dist/chunk-R6JHHBKQ.js +0 -19
- package/dist/chunk-R6JHHBKQ.js.map +0 -1
- package/dist/chunk-RBTVBGRD.js +0 -23
- package/dist/chunk-RBTVBGRD.js.map +0 -1
- package/dist/chunk-S3TPM2LP.js +0 -23
- package/dist/chunk-S3TPM2LP.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-W2FK7ZNY.js.map +0 -1
- package/dist/chunk-WVPYVDXY.js +0 -15
- package/dist/chunk-WVPYVDXY.js.map +0 -1
- package/dist/chunk-XZXRLY5Q.js +0 -33
- package/dist/chunk-XZXRLY5Q.js.map +0 -1
- package/dist/menu-action-row.d.ts +0 -50
- package/dist/menu-action-row.js +0 -4
- package/dist/menu-action-row.js.map +0 -1
- package/dist/menu-header.d.ts +0 -41
- package/dist/menu-header.js +0 -6
- package/dist/menu-header.js.map +0 -1
- package/dist/menu-item.d.ts +0 -31
- package/dist/menu-item.js +0 -4
- package/dist/menu-item.js.map +0 -1
- package/dist/panel-header.d.ts +0 -26
- package/dist/panel-header.js +0 -6
- package/dist/panel-header.js.map +0 -1
- package/dist/styles/menu-action-row.css +0 -160
- package/dist/styles/menu-header.css +0 -160
- package/dist/styles/menu-item.css +0 -123
- package/dist/styles/panel-header.css +0 -59
- package/ux-demo/recipes/master-detail-dialog.tsx +0 -45
- package/ux-demo/recipes/recipes.css +0 -355
package/dist/list.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
|
|
3
|
+
import { H as HorizontalAlignment, L as ListVerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
|
|
4
|
+
export { V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
|
|
5
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
6
|
+
import { S as Sides } from './sides-BPSWde0A.js';
|
|
7
|
+
|
|
8
|
+
type ListRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
9
|
+
'data-component'?: never;
|
|
10
|
+
'data-gap'?: never;
|
|
11
|
+
'data-flex'?: never;
|
|
12
|
+
'data-fill'?: never;
|
|
13
|
+
'data-h-align'?: never;
|
|
14
|
+
'data-v-align'?: never;
|
|
15
|
+
'data-scrollable'?: never;
|
|
16
|
+
'data-text-insets'?: never;
|
|
17
|
+
'data-control-insets'?: never;
|
|
18
|
+
}>;
|
|
19
|
+
interface ListProps {
|
|
20
|
+
children?: KerfUiContent;
|
|
21
|
+
/** Use the standard item gap, a named UI spacing token, or a typed CSS length. Defaults to no gap. */
|
|
22
|
+
gap?: boolean | UiSpaceName | CssLength;
|
|
23
|
+
/** Allow this list to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
|
|
24
|
+
flex?: boolean | CssFlexKeyword | CssFlex;
|
|
25
|
+
/**
|
|
26
|
+
* Fill the height of a parent with a definite height, such as an app root or
|
|
27
|
+
* a fixed-height frame, when this list is that parent's layout root. Inside a
|
|
28
|
+
* flex layout use `flex` instead. Defaults to false.
|
|
29
|
+
*/
|
|
30
|
+
fill?: boolean;
|
|
31
|
+
/** Horizontal alignment. Defaults to full to preserve stretch-aligned list children. */
|
|
32
|
+
hAlign?: HorizontalAlignment;
|
|
33
|
+
/** Vertical distribution. Defaults to top. */
|
|
34
|
+
vAlign?: ListVerticalAlignment;
|
|
35
|
+
/** Own vertical scrolling and overscroll containment. */
|
|
36
|
+
scrollable?: boolean;
|
|
37
|
+
/** Physical divider edges in canonical top/right/bottom/left order. */
|
|
38
|
+
dividerSides?: Sides;
|
|
39
|
+
/** Physical sides that receive the standard 17px text inset. */
|
|
40
|
+
textInsets?: Sides;
|
|
41
|
+
/** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
|
|
42
|
+
controlInsets?: Sides;
|
|
43
|
+
className?: string;
|
|
44
|
+
/** Safe `data-*` metadata; List-owned structural attributes remain protected. */
|
|
45
|
+
rootAttributes?: ListRootAttributes;
|
|
46
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
47
|
+
slot?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A list's configuration, apart from its content and styling hooks: the props a
|
|
51
|
+
* composite that renders a `List` for the app (the Workbench's `mainHeader` /
|
|
52
|
+
* `mainFooter` chrome) forwards, so the app configures that list instead of
|
|
53
|
+
* styling it. An omitted or `undefined` field keeps the composite's default.
|
|
54
|
+
*/
|
|
55
|
+
type ListConfig = Pick<ListProps, 'gap' | 'hAlign' | 'vAlign' | 'dividerSides' | 'textInsets' | 'controlInsets'>;
|
|
56
|
+
/** A stretch-aligned vertical stack with optional gap, flex, fill, scroll, and dividers. */
|
|
57
|
+
declare function List({ children, gap, flex, fill, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, rootAttributes, slot, }: ListProps): kerfjs.SafeHtml;
|
|
58
|
+
|
|
59
|
+
export { CssFlex, CssFlexKeyword, CssLength, HorizontalAlignment, List, type ListConfig, type ListProps, ListVerticalAlignment, Sides, UiSpaceName };
|
package/dist/list.js
ADDED
package/dist/list.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"list.js"}
|
|
@@ -3,8 +3,10 @@ import * as kerfjs from 'kerfjs';
|
|
|
3
3
|
interface LoadingSpinnerProps {
|
|
4
4
|
className?: string;
|
|
5
5
|
label?: string;
|
|
6
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
7
|
+
slot?: string;
|
|
6
8
|
}
|
|
7
9
|
/** Stable viewBox-centered progress ring based on svg-spinners' MIT-licensed 180-ring. */
|
|
8
|
-
declare function LoadingSpinner({ className, label }: LoadingSpinnerProps): kerfjs.SafeHtml;
|
|
10
|
+
declare function LoadingSpinner({ className, label, slot, }: LoadingSpinnerProps): kerfjs.SafeHtml;
|
|
9
11
|
|
|
10
12
|
export { LoadingSpinner, type LoadingSpinnerProps };
|
package/dist/loading-spinner.js
CHANGED
package/dist/lucide-icon.d.ts
CHANGED
|
@@ -7,8 +7,10 @@ interface LucideIconProps {
|
|
|
7
7
|
name: string;
|
|
8
8
|
className?: string;
|
|
9
9
|
label?: string;
|
|
10
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
11
|
+
slot?: string;
|
|
10
12
|
}
|
|
11
13
|
/** Render a Lucide-compatible icon node without copying icon SVG strings. */
|
|
12
|
-
declare function LucideIcon({ icon, name, className, label }: LucideIconProps): kerfjs.SafeHtml;
|
|
14
|
+
declare function LucideIcon({ icon, name, className, label, slot, }: LucideIconProps): kerfjs.SafeHtml;
|
|
13
15
|
|
|
14
16
|
export { LucideIcon, type LucideIconProps, type LucideNode };
|
package/dist/lucide-icon.js
CHANGED
package/dist/nav-stack.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
import { ToolbarConfig } from './toolbar.js';
|
|
4
|
+
import { ToolbarTextSize, HeadingLevel } from './toolbar-text.js';
|
|
5
|
+
import './pane.js';
|
|
6
|
+
import './sides-BPSWde0A.js';
|
|
2
7
|
|
|
3
8
|
/**
|
|
4
9
|
* One entry in a {@link NavStack}. The app owns the stack as an array (usually a
|
|
@@ -7,11 +12,30 @@ import { SafeHtml } from 'kerfjs';
|
|
|
7
12
|
interface NavStackView {
|
|
8
13
|
/** Stable identity for keyed reconcile and transition direction. */
|
|
9
14
|
key: string;
|
|
10
|
-
content:
|
|
15
|
+
content: KerfUiContent;
|
|
11
16
|
/** Title shown in the top toolbar for this view. */
|
|
12
17
|
title?: string;
|
|
18
|
+
/** Leading groups for this view's top toolbar, after the back control and before the title. */
|
|
19
|
+
leading?: KerfUiContent;
|
|
20
|
+
/** Center content for this view's top toolbar (placed per `toolbarConfig.centerAlign`). */
|
|
21
|
+
center?: KerfUiContent;
|
|
13
22
|
/** Trailing actions for this view's top toolbar. */
|
|
14
|
-
toolbar?:
|
|
23
|
+
toolbar?: KerfUiContent;
|
|
24
|
+
/** Bottom toolbar for this view. Cross-fades with the top chrome on navigation. */
|
|
25
|
+
bottomToolbar?: KerfUiContent;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The top toolbar's configuration. Its `ToolbarConfig` forwards to the real
|
|
29
|
+
* `Toolbar` the stack renders; by default that toolbar draws no divider and
|
|
30
|
+
* claims the top and side safe-area edges the stack still touches.
|
|
31
|
+
*/
|
|
32
|
+
interface NavStackToolbarConfig extends ToolbarConfig {
|
|
33
|
+
/** Accessible name of the top toolbar (default: none). */
|
|
34
|
+
label?: string;
|
|
35
|
+
/** Size of the view title's `ToolbarText` (default `large`). */
|
|
36
|
+
titleSize?: ToolbarTextSize;
|
|
37
|
+
/** Expose the view title as a heading at this level (default: a plain span). */
|
|
38
|
+
headingLevel?: HeadingLevel;
|
|
15
39
|
}
|
|
16
40
|
interface NavStackProps {
|
|
17
41
|
id: string;
|
|
@@ -19,20 +43,46 @@ interface NavStackProps {
|
|
|
19
43
|
label: string;
|
|
20
44
|
/** The stack, root first; the last entry is the active top view. */
|
|
21
45
|
views: NavStackView[];
|
|
22
|
-
/** Accessible label for the back control (default "Back"). */
|
|
46
|
+
/** Accessible label for the icon-only back control (default "Back"). */
|
|
23
47
|
backLabel?: string;
|
|
48
|
+
/** The back control's icon (default a chevron-left `LucideIcon`). */
|
|
49
|
+
backIcon?: KerfUiContent;
|
|
50
|
+
/**
|
|
51
|
+
* Visible text beside the back icon, such as the previous view's title
|
|
52
|
+
* (default: icon only). When set, the text names the control and
|
|
53
|
+
* `backLabel` is not used.
|
|
54
|
+
*/
|
|
55
|
+
backText?: string;
|
|
56
|
+
/** The top toolbar's configuration, forwarded to its `Toolbar`. */
|
|
57
|
+
toolbarConfig?: NavStackToolbarConfig;
|
|
24
58
|
/** Hide the top toolbar entirely (rare — a fully custom-chrome view). */
|
|
25
59
|
hideToolbar?: boolean;
|
|
26
|
-
/** Optional persistent bottom toolbar. */
|
|
27
|
-
bottomToolbar?:
|
|
60
|
+
/** Optional persistent bottom toolbar used when the active view does not provide one. */
|
|
61
|
+
bottomToolbar?: KerfUiContent;
|
|
62
|
+
/**
|
|
63
|
+
* The line under the top chrome and over the bottom toolbar, where they
|
|
64
|
+
* meet the active view. `scroll` (default) shows the chrome's line only
|
|
65
|
+
* while the view's content is scrolled beneath it, and the bottom
|
|
66
|
+
* toolbar's only while more content lies below — never when the content
|
|
67
|
+
* fits — once `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is
|
|
68
|
+
* wired above the stack; unwired, neither shows. `always` shows both
|
|
69
|
+
* without the wiring; `none` neither, even when wired. The line is drawn
|
|
70
|
+
* inside the chrome, so no state moves the chrome or the content. A
|
|
71
|
+
* `toolbarConfig.dividerSides` edge is the Toolbar's own and is unaffected.
|
|
72
|
+
*/
|
|
73
|
+
chromeDividers?: 'scroll' | 'always' | 'none';
|
|
28
74
|
className?: string;
|
|
75
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
76
|
+
slot?: string;
|
|
29
77
|
}
|
|
30
78
|
/**
|
|
31
79
|
* A navigation stack (iOS-style push/pop). Renders every entry stacked, the last
|
|
32
80
|
* one active; `@kerfjs/ui/wire-nav-stack`'s `wireNavStack` slides the content and
|
|
33
|
-
* cross-fades the chrome across a change.
|
|
34
|
-
*
|
|
81
|
+
* cross-fades the chrome across a change. Its top chrome is a real `Toolbar`: the
|
|
82
|
+
* back control and title lead, the active view's `leading` / `center` / `toolbar`
|
|
83
|
+
* content fills the zones, and `toolbarConfig` configures it. A single-pane
|
|
84
|
+
* layout is a `NavStack` with one entry. See `docs/23-app-layouts.md` §3.1.
|
|
35
85
|
*/
|
|
36
|
-
declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className }: NavStackProps): SafeHtml;
|
|
86
|
+
declare function NavStack({ id, label, views, backLabel, backIcon, backText, toolbarConfig, hideToolbar, bottomToolbar, chromeDividers, className, slot, }: NavStackProps): kerfjs.SafeHtml;
|
|
37
87
|
|
|
38
|
-
export { NavStack, type NavStackProps, type NavStackView };
|
|
88
|
+
export { NavStack, type NavStackProps, type NavStackToolbarConfig, type NavStackView };
|
package/dist/nav-stack.js
CHANGED
package/dist/pane.d.ts
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Logical pane sides: where a {@link Pane} can show a separator and where it can
|
|
6
|
+
* compensate for a device safe-area inset.
|
|
7
|
+
*/
|
|
8
|
+
type PaneSeparatorSide = 'block-start' | 'block-end' | 'inline-start' | 'inline-end';
|
|
9
|
+
/** Semantic root elements supported by {@link Pane}. */
|
|
10
|
+
type PaneElement = 'article' | 'aside' | 'div' | 'main' | 'section';
|
|
11
|
+
/** Semantic elements supported by the scrolling content slot. */
|
|
12
|
+
type PaneContentElement = 'div' | 'main' | 'nav' | 'section';
|
|
13
|
+
type PaneRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
14
|
+
'data-component'?: never;
|
|
15
|
+
'data-separator-block-start'?: never;
|
|
16
|
+
'data-separator-block-end'?: never;
|
|
17
|
+
'data-separator-inline-start'?: never;
|
|
18
|
+
'data-separator-inline-end'?: never;
|
|
19
|
+
'data-safe-area-block-start'?: never;
|
|
20
|
+
'data-safe-area-block-end'?: never;
|
|
21
|
+
'data-safe-area-inline-start'?: never;
|
|
22
|
+
'data-safe-area-inline-end'?: never;
|
|
23
|
+
'data-chrome-placement'?: never;
|
|
24
|
+
'data-chrome-dividers'?: never;
|
|
25
|
+
}>;
|
|
26
|
+
/** How a Pane's header and footer relate to its scrolling content. */
|
|
27
|
+
type PaneChromePlacement = 'fixed' | 'auto';
|
|
28
|
+
/**
|
|
29
|
+
* When a Pane draws the divider between its pinned header or footer and its
|
|
30
|
+
* scrolling content: `scroll` while content is scrolled away beneath that
|
|
31
|
+
* chrome, as `wireScrollDividers` reports; `always`; or `none`.
|
|
32
|
+
*/
|
|
33
|
+
type PaneChromeDividers = 'scroll' | 'always' | 'none';
|
|
34
|
+
interface PaneProps {
|
|
35
|
+
/** Optional fixed chrome above the scrolling content, arranged vertically. */
|
|
36
|
+
header?: KerfUiContent;
|
|
37
|
+
/** The pane's primary vertical, scrolling content stack. */
|
|
38
|
+
children?: KerfUiContent;
|
|
39
|
+
/** Optional fixed chrome below the scrolling content. */
|
|
40
|
+
footer?: KerfUiContent;
|
|
41
|
+
/**
|
|
42
|
+
* Whether the header and footer stay pinned around the scrolling content.
|
|
43
|
+
* `fixed` (default) always pins them. `auto` pins them while the pane is
|
|
44
|
+
* tall enough, and below 480px of height (30rem, so it scales with the text
|
|
45
|
+
* size) lets the whole pane scroll as one column, so tall chrome can never
|
|
46
|
+
* squeeze the content to nothing.
|
|
47
|
+
*/
|
|
48
|
+
chromePlacement?: PaneChromePlacement;
|
|
49
|
+
/**
|
|
50
|
+
* The divider under the header and over the footer, where they meet the
|
|
51
|
+
* scrolling content. `scroll` (default) shows the header's divider only
|
|
52
|
+
* while the content is scrolled down, and the footer's only while more
|
|
53
|
+
* content lies below — never when the content fits — once
|
|
54
|
+
* `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is wired above
|
|
55
|
+
* the pane; unwired, neither shows. `always` shows both; `none` neither.
|
|
56
|
+
* The line is drawn inside the chrome, so no state moves the content.
|
|
57
|
+
*/
|
|
58
|
+
chromeDividers?: PaneChromeDividers;
|
|
59
|
+
/** Root semantics. Defaults to `div`. */
|
|
60
|
+
element?: PaneElement;
|
|
61
|
+
/** Scrolling content semantics. Defaults to `div`. */
|
|
62
|
+
contentElement?: PaneContentElement;
|
|
63
|
+
/** Independent logical-edge separator lines. Defaults to none. */
|
|
64
|
+
separators?: readonly PaneSeparatorSide[];
|
|
65
|
+
/**
|
|
66
|
+
* Sides on which the pane may compensate for a device safe-area inset.
|
|
67
|
+
* Defaults to every side: the pane pads its slots for each side that still
|
|
68
|
+
* reaches an unsafe screen edge, as its surrounding layout reports, while its
|
|
69
|
+
* background and separators paint through. List only the sides an app-owned
|
|
70
|
+
* layout places at a screen edge, or pass `[]` to opt out.
|
|
71
|
+
*/
|
|
72
|
+
safeAreaEdges?: readonly PaneSeparatorSide[];
|
|
73
|
+
id?: string;
|
|
74
|
+
/** Accessible name for a landmark root such as `aside` or `main`. */
|
|
75
|
+
label?: string;
|
|
76
|
+
/** Accessible name for a landmark scrolling slot such as `nav`. */
|
|
77
|
+
contentLabel?: string;
|
|
78
|
+
className?: string;
|
|
79
|
+
headerClassName?: string;
|
|
80
|
+
contentClassName?: string;
|
|
81
|
+
footerClassName?: string;
|
|
82
|
+
/** Safe `data-*` metadata; Pane-owned structural attributes remain protected. */
|
|
83
|
+
rootAttributes?: PaneRootAttributes;
|
|
84
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
85
|
+
slot?: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A pane's configuration, apart from its content and styling hooks: the props a
|
|
89
|
+
* composite that renders a `Pane` for the app (a Workbench panel or work area,
|
|
90
|
+
* or a CollapsiblePanel) forwards, so the app configures that pane instead of
|
|
91
|
+
* styling it. An omitted or `undefined` field keeps the composite's default.
|
|
92
|
+
*/
|
|
93
|
+
type PaneConfig = Pick<PaneProps, 'contentElement' | 'contentLabel' | 'separators' | 'safeAreaEdges' | 'chromeDividers'>;
|
|
94
|
+
/**
|
|
95
|
+
* An unpadded application column with optional fixed header/footer slots and one
|
|
96
|
+
* scrolling vertical content owner. Separator lines are independently opt-in on
|
|
97
|
+
* each logical edge, so the same component works as a sidebar, main area,
|
|
98
|
+
* inspector, or dialog column.
|
|
99
|
+
*/
|
|
100
|
+
declare function Pane({ header, children, footer, chromePlacement, chromeDividers, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
|
|
101
|
+
|
|
102
|
+
export { Pane, type PaneChromeDividers, type PaneChromePlacement, type PaneConfig, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
|
package/dist/pane.js
ADDED
package/dist/pane.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"pane.js"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { LucideIcon } from './lucide-icon.js';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
import { ToolbarConfig } from './toolbar.js';
|
|
4
|
+
|
|
5
|
+
/** Which edge a collapsible panel docks to. */
|
|
6
|
+
type PanelSide = 'left' | 'right' | 'bottom';
|
|
7
|
+
/**
|
|
8
|
+
* The standard collapse/expand icon for a panel `side` and `collapsed` state,
|
|
9
|
+
* so every app's sidebars and drawers use one recognizable convention:
|
|
10
|
+
* `PanelLeft*` for a left rail, `PanelRight*` for a right rail, `PanelBottom*`
|
|
11
|
+
* for a bottom drawer — the `Close` glyph while open, the `Open` glyph while
|
|
12
|
+
* collapsed. Exposed so an app can render its own toggle affordance.
|
|
13
|
+
*/
|
|
14
|
+
declare function collapsiblePanelToggleIcon(side: PanelSide, collapsed: boolean): {
|
|
15
|
+
icon: Parameters<typeof LucideIcon>[0]['icon'];
|
|
16
|
+
name: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* The standard collapse toggle a panel toolbar renders. The app handles the
|
|
20
|
+
* button's `data-action` and flips its own `collapsed` flag.
|
|
21
|
+
*/
|
|
22
|
+
interface PanelToggle {
|
|
23
|
+
/** The `data-action` the toggle button carries. */
|
|
24
|
+
action: string;
|
|
25
|
+
/** The panel's short name, for the accessible "Show …" / "Hide …" label. */
|
|
26
|
+
name: string;
|
|
27
|
+
/** Accessible label while the panel is collapsed. Defaults to `Show {name}`. */
|
|
28
|
+
showLabel?: string;
|
|
29
|
+
/** Accessible label while the panel is open. Defaults to `Hide {name}`. */
|
|
30
|
+
hideLabel?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A collapsible panel's top toolbar, composed so its groups follow the
|
|
34
|
+
* panel's open state.
|
|
35
|
+
*
|
|
36
|
+
* - `title` precedes the `leading` zone. Groups may appear in any of the
|
|
37
|
+
* `leading`, `center`, and `trailing` zones while the panel is open.
|
|
38
|
+
* - Groups marked `relocateOnCollapse` move to the work area's toolbar while
|
|
39
|
+
* the panel is collapsed, preserving their order across the three zones.
|
|
40
|
+
* - `toggle` is always the last group: in the panel's toolbar while it is
|
|
41
|
+
* open, and right after the relocated groups in the work area's toolbar
|
|
42
|
+
* while it is collapsed.
|
|
43
|
+
*
|
|
44
|
+
* Relocated content renders in both places while the panel is collapsed (the
|
|
45
|
+
* panel's copy is inert), so give it no `id`s. Pass groups directly or in
|
|
46
|
+
* arrays so their render-time annotation remains available to the panel.
|
|
47
|
+
*
|
|
48
|
+
* The toolbar's configuration (`dividerSides`, `centerAlign`, `responsive`,
|
|
49
|
+
* `responsiveAt`, `safeAreaEdges`) forwards to its `Toolbar`. It draws no
|
|
50
|
+
* divider of its own: the panel's `Pane` draws the line under it while the
|
|
51
|
+
* content is scrolled (its `chromeDividers`, wired by `wireScrollDividers`).
|
|
52
|
+
*/
|
|
53
|
+
interface PanelToolbar extends ToolbarConfig {
|
|
54
|
+
/** Accessible name of the panel's toolbar. */
|
|
55
|
+
label: string;
|
|
56
|
+
title?: KerfUiContent;
|
|
57
|
+
leading?: KerfUiContent;
|
|
58
|
+
center?: KerfUiContent;
|
|
59
|
+
trailing?: KerfUiContent;
|
|
60
|
+
toggle?: PanelToggle;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { type PanelSide as P, type PanelToolbar as a, type PanelToggle as b, collapsiblePanelToggleIcon as c };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marker export for tests and tooling; importing this module registers the
|
|
3
|
+
* Web Awesome elements a `PopupMenu` renders (`wa-dropdown`,
|
|
4
|
+
* `wa-dropdown-item`, `wa-button`, and `wa-divider`) and routes a keyboard
|
|
5
|
+
* choice through the item's click so delegated `data-action`s run.
|
|
6
|
+
*/
|
|
7
|
+
declare const popupMenuElementsRegistered = true;
|
|
8
|
+
|
|
9
|
+
export { popupMenuElementsRegistered };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { installHelpTags } from './chunk-BFPBS5Y4.js';
|
|
2
|
+
import '@awesome.me/webawesome/dist/components/button/button.js';
|
|
3
|
+
import '@awesome.me/webawesome/dist/components/divider/divider.js';
|
|
4
|
+
import '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';
|
|
5
|
+
import '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';
|
|
6
|
+
import WaDropdown from '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';
|
|
7
|
+
|
|
8
|
+
// src/install-popup-menu-keyboard.ts
|
|
9
|
+
var installed = /* @__PURE__ */ new WeakSet();
|
|
10
|
+
function installPopupMenuKeyboard(prototype) {
|
|
11
|
+
if (installed.has(prototype)) return;
|
|
12
|
+
installed.add(prototype);
|
|
13
|
+
const target = prototype;
|
|
14
|
+
const makeSelection = target.makeSelection;
|
|
15
|
+
target.makeSelection = function(item, event) {
|
|
16
|
+
if (event instanceof KeyboardEvent && this.classList.contains("kui-popup-menu") && !item.disabled) {
|
|
17
|
+
item.click();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
makeSelection.call(this, item, event);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// src/popup-menu-register.ts
|
|
25
|
+
installPopupMenuKeyboard(WaDropdown.prototype);
|
|
26
|
+
installHelpTags();
|
|
27
|
+
var popupMenuElementsRegistered = true;
|
|
28
|
+
|
|
29
|
+
export { popupMenuElementsRegistered };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=popup-menu-register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/install-popup-menu-keyboard.ts","../src/popup-menu-register.ts"],"names":[],"mappings":";;;;;;;;AAOA,IAAM,SAAA,uBAAgB,OAAA,EAAgB;AAW/B,SAAS,yBAAyB,SAAA,EAAyB;AAChE,EAAA,IAAI,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,EAAG;AAC9B,EAAA,SAAA,CAAU,IAAI,SAAS,CAAA;AACvB,EAAA,MAAM,MAAA,GAAS,SAAA;AACf,EAAA,MAAM,gBAAgB,MAAA,CAAO,aAAA;AAC7B,EAAA,MAAA,CAAO,aAAA,GAAgB,SAAmC,IAAA,EAAM,KAAA,EAAa;AAC3E,IAAA,IACE,KAAA,YAAiB,iBACjB,IAAA,CAAK,SAAA,CAAU,SAAS,gBAAgB,CAAA,IACxC,CAAC,IAAA,CAAK,QAAA,EACN;AACA,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA;AAAA,IACF;AACA,IAAA,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,EACtC,CAAA;AACF;;;ACxBA,wBAAA,CAAyB,WAAW,SAAS,CAAA;AAC7C,eAAA,EAAgB;AAQT,IAAM,2BAAA,GAA8B","file":"popup-menu-register.js","sourcesContent":["interface PopupMenuDropdown extends HTMLElement {\n makeSelection(\n item: HTMLElement & { disabled?: boolean },\n event?: Event,\n ): void;\n}\n\nconst installed = new WeakSet<object>();\n\n/**\n * Route a keyboard choice in a `PopupMenu` through the item's click. Web Awesome\n * selects a pointer choice from the item's click event but a keyboard choice\n * (Enter or Space) directly, so delegated `data-action` click handlers would\n * never run for keyboard users. Clicking the item makes Web Awesome select it\n * exactly as it does for a pointer — one `wa-select`, then close and focus\n * return — while the click reaches the application's delegation. Raw\n * `wa-dropdown`s outside `PopupMenu` are unaffected.\n */\nexport function installPopupMenuKeyboard(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as PopupMenuDropdown;\n const makeSelection = target.makeSelection;\n target.makeSelection = function (this: PopupMenuDropdown, item, event): void {\n if (\n event instanceof KeyboardEvent &&\n this.classList.contains('kui-popup-menu') &&\n !item.disabled\n ) {\n item.click();\n return;\n }\n makeSelection.call(this, item, event);\n };\n}\n","import '@awesome.me/webawesome/dist/components/button/button.js';\nimport '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\nimport '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';\n\nimport WaDropdown from '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';\n\nimport { installHelpTags } from './install-help-tag.js';\nimport { installPopupMenuKeyboard } from './install-popup-menu-keyboard.js';\n\ninstallPopupMenuKeyboard(WaDropdown.prototype);\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module registers the\n * Web Awesome elements a `PopupMenu` renders (`wa-dropdown`,\n * `wa-dropdown-item`, `wa-button`, and `wa-divider`) and routes a keyboard\n * choice through the item's click so delegated `data-action`s run.\n */\nexport const popupMenuElementsRegistered = true;\n"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
+
|
|
4
|
+
type PopupMenuPlacement = 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';
|
|
5
|
+
type PopupMenuDataAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
6
|
+
'data-action'?: never;
|
|
7
|
+
'data-component'?: never;
|
|
8
|
+
'data-key'?: never;
|
|
9
|
+
'data-morph-skip-children'?: never;
|
|
10
|
+
}>;
|
|
11
|
+
/** One command in the menu. */
|
|
12
|
+
interface PopupMenuItem {
|
|
13
|
+
kind?: 'item';
|
|
14
|
+
label: string;
|
|
15
|
+
/** Delegated `data-action` the app handles when the item is chosen. */
|
|
16
|
+
action?: string;
|
|
17
|
+
/** Native `wa-dropdown-item` value, reported by its `wa-select` event. */
|
|
18
|
+
value?: string;
|
|
19
|
+
/** Leading icon, typically a `LucideIcon`; it is placed in the item's icon slot. */
|
|
20
|
+
icon?: SafeHtml;
|
|
21
|
+
/** A checked menu choice, including nested choices. */
|
|
22
|
+
checked?: boolean;
|
|
23
|
+
/** Trailing safe content, such as a selected-choice tick. */
|
|
24
|
+
details?: SafeHtml;
|
|
25
|
+
/** Destructive command styling. */
|
|
26
|
+
tone?: 'default' | 'danger';
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
/** Native tooltip text for a disabled command. */
|
|
29
|
+
disabledReason?: string;
|
|
30
|
+
/** Application `data-*` metadata such as a record id. */
|
|
31
|
+
attributes?: PopupMenuDataAttributes;
|
|
32
|
+
/** Child commands, headings, and dividers opened by hover or keyboard navigation. */
|
|
33
|
+
submenu?: readonly PopupMenuEntry[];
|
|
34
|
+
}
|
|
35
|
+
/** A labeled group heading; items that follow it belong to the group. */
|
|
36
|
+
interface PopupMenuHeading {
|
|
37
|
+
kind: 'heading';
|
|
38
|
+
label: string;
|
|
39
|
+
}
|
|
40
|
+
/** A separator between groups of items. */
|
|
41
|
+
interface PopupMenuDivider {
|
|
42
|
+
kind: 'divider';
|
|
43
|
+
}
|
|
44
|
+
type PopupMenuEntry = PopupMenuItem | PopupMenuHeading | PopupMenuDivider;
|
|
45
|
+
type PopupMenuTriggerName = {
|
|
46
|
+
/** Visible trigger text, which is also its accessible name. */
|
|
47
|
+
text: string;
|
|
48
|
+
label?: never;
|
|
49
|
+
} | {
|
|
50
|
+
text?: never;
|
|
51
|
+
/**
|
|
52
|
+
* Accessible name of an icon-only trigger, rendered as visually hidden
|
|
53
|
+
* slotted text (a Web Awesome button takes its name from its content).
|
|
54
|
+
*/
|
|
55
|
+
label: string;
|
|
56
|
+
};
|
|
57
|
+
type PopupMenuTrigger = (PopupMenuTriggerName & {
|
|
58
|
+
context?: false;
|
|
59
|
+
}) | {
|
|
60
|
+
context: true;
|
|
61
|
+
label: string;
|
|
62
|
+
text?: never;
|
|
63
|
+
icon?: never;
|
|
64
|
+
caret?: never;
|
|
65
|
+
disabled?: never;
|
|
66
|
+
};
|
|
67
|
+
type PopupMenuProps = PopupMenuTrigger & {
|
|
68
|
+
/** Trigger icon, typically a `LucideIcon`, before any visible text. */
|
|
69
|
+
icon?: KerfUiContent;
|
|
70
|
+
items: readonly PopupMenuEntry[];
|
|
71
|
+
/** Where the menu opens relative to its trigger. Defaults to `bottom-start`. */
|
|
72
|
+
placement?: PopupMenuPlacement;
|
|
73
|
+
/** Show the disclosure caret after the trigger content. Defaults to true. */
|
|
74
|
+
caret?: boolean;
|
|
75
|
+
disabled?: boolean;
|
|
76
|
+
/** Application `data-*` metadata on the menu root. */
|
|
77
|
+
rootAttributes?: PopupMenuDataAttributes;
|
|
78
|
+
/** Native named-slot assignment when composed inside a web component. */
|
|
79
|
+
slot?: string;
|
|
80
|
+
};
|
|
81
|
+
/** A rendered context PopupMenu with Web Awesome's controlled open state. */
|
|
82
|
+
type PopupMenuElement = HTMLElement & {
|
|
83
|
+
open: boolean;
|
|
84
|
+
};
|
|
85
|
+
/** Open a context PopupMenu at viewport pointer coordinates. */
|
|
86
|
+
declare function openPopupMenuAt(menu: PopupMenuElement, x: number, y: number): void;
|
|
87
|
+
/** Close a programmatically opened PopupMenu. */
|
|
88
|
+
declare function closePopupMenu(menu: PopupMenuElement): void;
|
|
89
|
+
/**
|
|
90
|
+
* An action menu: a trigger button that opens a list of commands. Renders the
|
|
91
|
+
* `wa-dropdown` root directly, so a `single` `ToolbarControlGroup` (with
|
|
92
|
+
* `nestedDropdown`) or a `PopupSurface` sizes and insets it as usual. Items
|
|
93
|
+
* dispatch through delegated `data-action`s; the app owns the commands and any
|
|
94
|
+
* open-state reaction. Import `@kerfjs/ui/popup-menu/register` once to register
|
|
95
|
+
* the Web Awesome elements.
|
|
96
|
+
*/
|
|
97
|
+
declare function PopupMenu({ text, label, icon, items, placement, caret, disabled, rootAttributes, slot, context, }: PopupMenuProps): SafeHtml;
|
|
98
|
+
|
|
99
|
+
export { PopupMenu, type PopupMenuDivider, type PopupMenuElement, type PopupMenuEntry, type PopupMenuHeading, type PopupMenuItem, type PopupMenuPlacement, type PopupMenuProps, closePopupMenu, openPopupMenuAt };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"popup-menu.js"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
import { CssLength } from './css-values.js';
|
|
3
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
4
|
|
|
3
5
|
type ResizableRegionAxis = 'horizontal' | 'vertical';
|
|
4
6
|
type ResizableRegionEdge = 'start' | 'end';
|
|
7
|
+
type ResizableRegionSeparator = 'auto' | 'hidden';
|
|
8
|
+
type ResizableRegionCollapseMotion = 'none' | 'slide' | 'fade-slide';
|
|
9
|
+
type ResizableRegionContentOverflow = 'clip' | 'auto' | 'visible';
|
|
10
|
+
type ResizableRegionPresentation = 'inline' | 'overlay' | 'hidden';
|
|
11
|
+
type ResizableRegionRestorePosition = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
|
|
12
|
+
type ResizableRegionResponsiveFillAt = 'compact' | 'narrow';
|
|
5
13
|
interface ResizableRegionProps {
|
|
6
14
|
id: string;
|
|
7
15
|
label: string;
|
|
@@ -10,14 +18,35 @@ interface ResizableRegionProps {
|
|
|
10
18
|
max: number;
|
|
11
19
|
axis?: ResizableRegionAxis;
|
|
12
20
|
edge?: ResizableRegionEdge;
|
|
21
|
+
/** Snap the track to zero. The region renders `inert` and `aria-hidden`
|
|
22
|
+
* while collapsed, so neither Tab nor assistive technology reaches it or
|
|
23
|
+
* lands on an empty landmark; `restoreControl` renders outside the region. */
|
|
13
24
|
collapsed?: boolean;
|
|
14
25
|
transitioning?: boolean;
|
|
26
|
+
/** Whether the separator line is painted. The resize hit target remains available. */
|
|
27
|
+
separator?: ResizableRegionSeparator;
|
|
28
|
+
/** Keep the track change instant while optionally sliding the fixed-size content. */
|
|
29
|
+
collapseMotion?: ResizableRegionCollapseMotion;
|
|
30
|
+
/** Use `visible` while an anchored popup must escape the content box; it raises the region to the popup layer. */
|
|
31
|
+
contentOverflow?: ResizableRegionContentOverflow;
|
|
32
|
+
/** Inline layout, an edge overlay, or a responsive replacement that removes the region. */
|
|
33
|
+
presentation?: ResizableRegionPresentation;
|
|
34
|
+
/** Always-available control rendered while collapsed, outside the clipped region. */
|
|
35
|
+
restoreControl?: SafeHtml;
|
|
36
|
+
/** Safe-area-aware corner of the region's container (not the viewport) for `restoreControl`. */
|
|
37
|
+
restorePosition?: ResizableRegionRestorePosition;
|
|
38
|
+
/** Position a restore control in its container corner or leave it in normal flow. */
|
|
39
|
+
restorePlacement?: 'corner' | 'inline';
|
|
40
|
+
/** Corner distance before the container's safe-area inset. */
|
|
41
|
+
restoreInset?: CssLength;
|
|
42
|
+
/** Fill the available inline track and hide the separator below a container breakpoint. */
|
|
43
|
+
responsiveFillAt?: ResizableRegionResponsiveFillAt;
|
|
15
44
|
/** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
|
|
16
45
|
handleIcon?: SafeHtml;
|
|
17
|
-
children:
|
|
46
|
+
children: KerfUiContent;
|
|
18
47
|
}
|
|
19
48
|
declare const clampRegionSize: (size: number, min: number, max: number) => number;
|
|
20
49
|
declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
|
|
21
|
-
declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, handleIcon, children }: ResizableRegionProps): SafeHtml;
|
|
50
|
+
declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, separator, collapseMotion, contentOverflow, presentation, restoreControl, restorePosition, restorePlacement, restoreInset, responsiveFillAt, handleIcon, children, }: ResizableRegionProps): SafeHtml;
|
|
22
51
|
|
|
23
|
-
export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionEdge, type ResizableRegionProps, clampRegionSize, resizeRegionFromPointer };
|
|
52
|
+
export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionCollapseMotion, type ResizableRegionContentOverflow, type ResizableRegionEdge, type ResizableRegionPresentation, type ResizableRegionProps, type ResizableRegionResponsiveFillAt, type ResizableRegionRestorePosition, type ResizableRegionSeparator, clampRegionSize, resizeRegionFromPointer };
|
package/dist/resizable-region.js
CHANGED