@kerfjs/ui 5.0.0-beta.97 → 5.0.0-beta.99
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 +42 -1
- package/ai/application-ui-diagnostic-ids-v1.json +1 -0
- package/ai/component-catalog.json +487 -66
- package/ai/component-catalog.schema.json +1 -1
- package/ai/component-composition-rules.json +22 -2
- package/ai/component-composition.json +360 -33
- package/ai/component-composition.schema.json +1 -1
- package/ai/components/README.md +18 -17
- package/ai/components/anchored-surface.md +13 -0
- package/ai/components/application-tabs.md +1 -1
- package/ai/components/chip.md +9 -5
- package/ai/components/choice-chips.md +15 -8
- package/ai/components/collapsible-panel.md +3 -2
- package/ai/components/composer.md +83 -0
- package/ai/components/content-item.md +2 -2
- package/ai/components/corner-status.md +1 -1
- package/ai/components/document-baseline.md +3 -3
- package/ai/components/foundation.md +2 -2
- package/ai/components/layout.md +1 -1
- package/ai/components/list-action-row.md +5 -1
- package/ai/components/list-item.md +5 -1
- package/ai/components/list.md +19 -3
- package/ai/components/nav-stack.md +11 -2
- package/ai/components/pane.md +13 -4
- package/ai/components/popup-menu.md +4 -4
- package/ai/components/recipe-app-shell.md +3 -3
- package/ai/components/recipe-collapsible-sidebar.md +3 -3
- package/ai/components/recipe-compact-toolbar.md +1 -1
- package/ai/components/recipe-composer-form.md +3 -3
- package/ai/components/recipe-list-detail-dialog.md +2 -2
- package/ai/components/recipe-list-workspace-states.md +3 -3
- package/ai/components/recipe-loading-inspector.md +1 -1
- package/ai/components/recipe-navigation-sidebar.md +3 -3
- package/ai/components/recipe-navigation-stack.md +3 -3
- package/ai/components/recipe-workspace-header.md +3 -3
- package/ai/components/resize.md +2 -2
- package/ai/components/split-view.md +4 -2
- package/ai/components/sunken-panel.md +2 -2
- package/ai/components/surface-scaffold.md +15 -3
- package/ai/components/tab-bar.md +1 -0
- package/ai/components/tab-navigator.md +4 -0
- package/ai/components/toolbar-control-group.md +2 -0
- package/ai/components/toolbar-text.md +1 -0
- package/ai/components/toolbar.md +1 -0
- package/ai/components/workbench.md +1 -0
- package/ai/public-api-signatures-v1.md +504 -80
- package/ai/skill.md +41 -14
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/component-ownership.mjs +1 -1
- package/analyzer/index.mjs +41 -14
- package/dist/anchored-surface.d.ts +30 -2
- package/dist/anchored-surface.js +1 -1
- package/dist/app-tab.js +1 -1
- package/dist/browser/composer.js +4 -0
- package/dist/catalog-resources.d.ts +3 -2
- package/dist/catalog-resources.js +4 -4
- package/dist/catalog-resources.js.map +1 -1
- package/dist/catalog.d.ts +39 -8
- package/dist/catalog.js +55 -32
- package/dist/catalog.js.map +1 -1
- package/dist/chip.d.ts +41 -9
- package/dist/chip.js +1 -1
- package/dist/choice-chips.d.ts +40 -16
- package/dist/choice-chips.js +1 -1
- package/dist/chunk-34U4ANDJ.js +119 -0
- package/dist/chunk-34U4ANDJ.js.map +1 -0
- package/dist/{chunk-36TL6BCR.js → chunk-3GLYIIFR.js} +34 -6
- package/dist/chunk-3GLYIIFR.js.map +1 -0
- package/dist/{chunk-HWY4BSLS.js → chunk-3VXDSIBJ.js} +2 -2
- package/dist/{chunk-HWY4BSLS.js.map → chunk-3VXDSIBJ.js.map} +1 -1
- package/dist/chunk-3WYREXW4.js +120 -0
- package/dist/chunk-3WYREXW4.js.map +1 -0
- package/dist/chunk-AV7CPAPT.js +82 -0
- package/dist/chunk-AV7CPAPT.js.map +1 -0
- package/dist/{chunk-XK4E225T.js → chunk-B53PS2LE.js} +2 -2
- package/dist/{chunk-XK4E225T.js.map → chunk-B53PS2LE.js.map} +1 -1
- package/dist/{chunk-R42D2BAO.js → chunk-CA7LNX3J.js} +2 -2
- package/dist/{chunk-R42D2BAO.js.map → chunk-CA7LNX3J.js.map} +1 -1
- package/dist/{chunk-AYHC62OZ.js → chunk-CMETHPKR.js} +26 -29
- package/dist/chunk-CMETHPKR.js.map +1 -0
- package/dist/{chunk-Y43B6DS3.js → chunk-CVD5IZGB.js} +2 -2
- package/dist/{chunk-Y43B6DS3.js.map → chunk-CVD5IZGB.js.map} +1 -1
- package/dist/{chunk-6STQXRT4.js → chunk-CXZXHZTR.js} +121 -12
- package/dist/chunk-CXZXHZTR.js.map +1 -0
- package/dist/{chunk-GZE2XVKC.js → chunk-DZJ4GBSP.js} +3 -3
- package/dist/{chunk-GZE2XVKC.js.map → chunk-DZJ4GBSP.js.map} +1 -1
- package/dist/chunk-ELCMSQNJ.js +49 -0
- package/dist/chunk-ELCMSQNJ.js.map +1 -0
- package/dist/{chunk-P74VXMB6.js → chunk-EOO6PYGF.js} +7 -14
- package/dist/chunk-EOO6PYGF.js.map +1 -0
- package/dist/{chunk-PRG4CL3Q.js → chunk-FR76ZJQC.js} +21 -19
- package/dist/chunk-FR76ZJQC.js.map +1 -0
- package/dist/{chunk-QQ3TTWFH.js → chunk-G3J7JDP6.js} +1 -1
- package/dist/{chunk-QQ3TTWFH.js.map → chunk-G3J7JDP6.js.map} +1 -1
- package/dist/{chunk-IGTWXPTN.js → chunk-HGV7J4T6.js} +3 -3
- package/dist/{chunk-IGTWXPTN.js.map → chunk-HGV7J4T6.js.map} +1 -1
- package/dist/{chunk-YWQGSUF2.js → chunk-HLDRH23D.js} +3 -3
- package/dist/{chunk-YWQGSUF2.js.map → chunk-HLDRH23D.js.map} +1 -1
- package/dist/{chunk-PBT3CPPY.js → chunk-HQZYKJ56.js} +24 -4
- package/dist/chunk-HQZYKJ56.js.map +1 -0
- package/dist/{chunk-V6W56V3N.js → chunk-HZPHCSCS.js} +16 -3
- package/dist/chunk-HZPHCSCS.js.map +1 -0
- package/dist/{chunk-GJYQ27C2.js → chunk-INI4WDWC.js} +8 -1
- package/dist/chunk-INI4WDWC.js.map +1 -0
- package/dist/{chunk-U657IHFB.js → chunk-IQSRHXZR.js} +10 -4
- package/dist/chunk-IQSRHXZR.js.map +1 -0
- package/dist/{chunk-KQDU7Z7P.js → chunk-K4AT3V3J.js} +2 -1
- package/dist/chunk-K4AT3V3J.js.map +1 -0
- package/dist/{chunk-QIAPOWHH.js → chunk-KCS6NJ3O.js} +2 -2
- package/dist/{chunk-QIAPOWHH.js.map → chunk-KCS6NJ3O.js.map} +1 -1
- package/dist/{chunk-UKKRPP56.js → chunk-LOSRXZAH.js} +2 -2
- package/dist/{chunk-UKKRPP56.js.map → chunk-LOSRXZAH.js.map} +1 -1
- package/dist/{chunk-ROZLJULF.js → chunk-MF6ZUUJZ.js} +8 -3
- package/dist/chunk-MF6ZUUJZ.js.map +1 -0
- package/dist/{chunk-6IVNMC6R.js → chunk-MHMWQ7RB.js} +2 -2
- package/dist/{chunk-6IVNMC6R.js.map → chunk-MHMWQ7RB.js.map} +1 -1
- package/dist/{chunk-JYD7G4RG.js → chunk-PIVY32AE.js} +15 -5
- package/dist/chunk-PIVY32AE.js.map +1 -0
- package/dist/{chunk-BU23Z5HZ.js → chunk-PYBBYSZ3.js} +13 -18
- package/dist/chunk-PYBBYSZ3.js.map +1 -0
- package/dist/chunk-QDSZTQXL.js +28 -0
- package/dist/chunk-QDSZTQXL.js.map +1 -0
- package/dist/{chunk-YXOMI7ES.js → chunk-QIG4IGUP.js} +2 -2
- package/dist/{chunk-YXOMI7ES.js.map → chunk-QIG4IGUP.js.map} +1 -1
- package/dist/{chunk-6BRRUPJY.js → chunk-QROYYGWU.js} +3 -3
- package/dist/chunk-QROYYGWU.js.map +1 -0
- package/dist/{chunk-FOQK4F3L.js → chunk-RHD7RKGI.js} +28 -7
- package/dist/chunk-RHD7RKGI.js.map +1 -0
- package/dist/{chunk-BBU2SPRE.js → chunk-T4WJ5VGP.js} +4 -4
- package/dist/{chunk-BBU2SPRE.js.map → chunk-T4WJ5VGP.js.map} +1 -1
- package/dist/{chunk-6NOLL5KG.js → chunk-TGLUDQP2.js} +3 -3
- package/dist/{chunk-6NOLL5KG.js.map → chunk-TGLUDQP2.js.map} +1 -1
- package/dist/{chunk-HO6FU3G7.js → chunk-TLMMFQWM.js} +4 -4
- package/dist/{chunk-HO6FU3G7.js.map → chunk-TLMMFQWM.js.map} +1 -1
- package/dist/chunk-UMKV7YVQ.js +20 -0
- package/dist/chunk-UMKV7YVQ.js.map +1 -0
- package/dist/{chunk-M2NRCFRO.js → chunk-VFYO3UGZ.js} +2 -2
- package/dist/{chunk-M2NRCFRO.js.map → chunk-VFYO3UGZ.js.map} +1 -1
- package/dist/{chunk-YOKEL75M.js → chunk-WVS6CUCT.js} +2 -2
- package/dist/{chunk-YOKEL75M.js.map → chunk-WVS6CUCT.js.map} +1 -1
- package/dist/{chunk-MN3POJFN.js → chunk-YMUIQRWK.js} +2 -2
- package/dist/{chunk-MN3POJFN.js.map → chunk-YMUIQRWK.js.map} +1 -1
- package/dist/{chunk-Y3LC7JQO.js → chunk-YOA5W5ZH.js} +2 -2
- package/dist/{chunk-Y3LC7JQO.js.map → chunk-YOA5W5ZH.js.map} +1 -1
- package/dist/{chunk-44A6LP54.js → chunk-YQ2AC4E2.js} +2 -2
- package/dist/{chunk-44A6LP54.js.map → chunk-YQ2AC4E2.js.map} +1 -1
- package/dist/chunk-ZNROKDSZ.js +54 -0
- package/dist/chunk-ZNROKDSZ.js.map +1 -0
- package/dist/collapsible-panel.d.ts +3 -2
- package/dist/collapsible-panel.js +4 -3
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/composer.d.ts +62 -0
- package/dist/composer.js +5 -0
- package/dist/composer.js.map +1 -0
- package/dist/corner-status.d.ts +1 -1
- package/dist/corner-status.js +1 -1
- package/dist/css-values.d.ts +9 -1
- package/dist/css-values.js +1 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/empty-state.js +1 -1
- package/dist/grid.js +1 -1
- package/dist/icon-button.js +1 -1
- package/dist/icon-toggle-button.js +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.js +40 -37
- package/dist/list-action-row.d.ts +10 -2
- package/dist/list-action-row.js +1 -1
- package/dist/list-header.js +1 -1
- package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
- package/dist/list-item.d.ts +10 -3
- package/dist/list-item.js +1 -1
- package/dist/list.d.ts +36 -4
- package/dist/list.js +1 -1
- package/dist/loading-spinner.js +1 -1
- package/dist/lucide-icon.js +1 -1
- package/dist/{nav-stack-BvSKY448.d.ts → nav-stack-VXTumzKa.d.ts} +53 -4
- package/dist/nav-stack.d.ts +3 -2
- package/dist/nav-stack.js +2 -1
- package/dist/pane.d.ts +40 -3
- package/dist/pane.js +1 -1
- package/dist/{panel-toolbar-CL9tYOkh.d.ts → panel-toolbar-vg6Ir5Dy.d.ts} +6 -1
- package/dist/popup-menu-register.d.ts +2 -1
- package/dist/popup-menu-register.js +97 -22
- package/dist/popup-menu-register.js.map +1 -1
- package/dist/popup-menu.js +1 -1
- package/dist/row.js +1 -1
- package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
- package/dist/select-register.js +11 -0
- package/dist/select-register.js.map +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/spacer.js +1 -1
- package/dist/split-button.js +1 -1
- package/dist/split-view.d.ts +7 -5
- package/dist/split-view.js +6 -3
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.d.ts +6 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/anchored-surface.css +27 -1
- package/dist/styles/catalog/components/catalog-example-stack.css +5 -0
- package/dist/styles/catalog/components/catalog-example.css +33 -0
- package/dist/styles/catalog/components/catalog-stage.css +7 -0
- package/dist/styles/chip.css +70 -0
- package/dist/styles/components/actions/popup-menu/popup-menu.css +21 -4
- package/dist/styles/components/actions/toolbar/toolbar.css +19 -0
- package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +75 -1
- package/dist/styles/components/actions/toolbar-text/toolbar-text.css +75 -0
- package/dist/styles/components/collections/list/list.css +77 -7
- package/dist/styles/components/collections/list-action-row/list-action-row.css +177 -22
- package/dist/styles/components/collections/list-item/list-item.css +158 -11
- package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +27 -1
- package/dist/styles/components/feedback/chip/chip.css +70 -0
- package/dist/styles/components/feedback/state-banner/state-banner.css +24 -13
- package/dist/styles/components/forms/composer/composer.css +100 -0
- package/dist/styles/components/forms/select/select.css +1 -0
- package/dist/styles/components/forms/token-search-field/token-search-field.css +13 -2
- package/dist/styles/components/layout/pane/pane.css +81 -2
- package/dist/styles/components/navigation/nav-stack/nav-stack.css +84 -0
- package/dist/styles/components/navigation/tab-bar/tab-bar.css +15 -4
- package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +79 -4
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +195 -0
- package/dist/styles/composer.css +100 -0
- package/dist/styles/foundation.css +66 -0
- package/dist/styles/list-action-row.css +177 -22
- package/dist/styles/list-item.css +158 -11
- package/dist/styles/list.css +77 -7
- package/dist/styles/nav-stack.css +84 -0
- package/dist/styles/pane.css +81 -2
- package/dist/styles/popup-menu.css +21 -4
- package/dist/styles/select.css +1 -0
- package/dist/styles/state-banner.css +24 -13
- package/dist/styles/styles.css +1 -0
- package/dist/styles/surface-scaffold.css +195 -0
- package/dist/styles/tab-bar.css +15 -4
- package/dist/styles/tab-navigator.css +79 -4
- package/dist/styles/token-search-field.css +13 -2
- package/dist/styles/toolbar-control-group.css +75 -1
- package/dist/styles/toolbar-text.css +75 -0
- package/dist/styles/toolbar.css +19 -0
- package/dist/styles/webawesome.css +18 -0
- package/dist/surface-scaffold-register.d.ts +6 -1
- package/dist/surface-scaffold-register.js +89 -3
- package/dist/surface-scaffold-register.js.map +1 -1
- package/dist/surface-scaffold.d.ts +66 -7
- package/dist/surface-scaffold.js +1 -1
- package/dist/tab-navigator.d.ts +23 -2
- package/dist/tab-navigator.js +2 -0
- package/dist/tab-navigator.js.map +1 -1
- package/dist/token-search-field.d.ts +1 -1
- package/dist/token-search-field.js +1 -1
- package/dist/{token-search-model-DTcTXWMS.d.ts → token-search-model-aYR0YAei.d.ts} +32 -2
- package/dist/token-search-model.d.ts +1 -1
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +1 -0
- package/dist/value-table.js +1 -1
- package/dist/wire-catalog.d.ts +3 -2
- package/dist/wire-catalog.js +2 -2
- package/dist/wire-composers.d.ts +16 -0
- package/dist/wire-composers.js +3 -0
- package/dist/wire-composers.js.map +1 -0
- package/dist/wire-list-focus-scroll.d.ts +16 -0
- package/dist/wire-list-focus-scroll.js +3 -0
- package/dist/wire-list-focus-scroll.js.map +1 -0
- package/dist/wire-nav-stack.js +135 -0
- package/dist/wire-nav-stack.js.map +1 -1
- package/dist/wire-scroll-dividers.d.ts +9 -0
- package/dist/wire-scroll-dividers.js +1 -1
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-tab-navigator.d.ts +3 -1
- package/dist/wire-tab-navigator.js +133 -1
- package/dist/wire-tab-navigator.js.map +1 -1
- package/dist/wire-token-search-fields.d.ts +1 -1
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +8 -3
- package/dist/workbench.js +2 -1
- package/docs/accessibility.md +132 -3
- package/docs/anchored-surface.md +46 -4
- package/docs/app-layouts.md +23 -2
- package/docs/apple-hig.md +1 -0
- package/docs/catalog.md +61 -9
- package/docs/collapsible-panel.md +9 -6
- package/docs/component-contract.md +46 -13
- package/docs/component-selection.md +147 -20
- package/docs/composer.md +143 -0
- package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
- package/docs/design/templates/choice-chips/multiple.svg +1 -0
- package/docs/design/templates/choice-chips-dark.svg +1 -1
- package/docs/design/templates/choice-chips.svg +1 -1
- package/docs/design/templates/composer/chat-dark.svg +1 -0
- package/docs/design/templates/composer/chat.svg +1 -0
- package/docs/design/templates/composer/prompt-dark.svg +1 -0
- package/docs/design/templates/composer/prompt.svg +1 -0
- package/docs/design/templates/composer-dark.svg +1 -0
- package/docs/design/templates/composer.svg +1 -0
- package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
- package/docs/design/templates/empty-state/filtered.svg +1 -1
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
- package/docs/design/templates/empty-state/with-action.svg +1 -1
- package/docs/design/templates/empty-state-dark.svg +1 -1
- package/docs/design/templates/empty-state.svg +1 -1
- package/docs/design/templates/list/compact-dark.svg +1 -1
- package/docs/design/templates/list/compact.svg +1 -1
- package/docs/design/templates/list-action-row/default-dark.svg +1 -1
- package/docs/design/templates/list-action-row/default.svg +1 -1
- package/docs/design/templates/list-action-row/icon-tile-dark.svg +1 -0
- package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
- package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
- package/docs/design/templates/list-action-row/selected.svg +1 -1
- package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -1
- package/docs/design/templates/list-action-row/trailing-menu.svg +1 -1
- package/docs/design/templates/list-action-row-dark.svg +1 -1
- package/docs/design/templates/list-action-row.svg +1 -1
- package/docs/design/templates/list-dark.svg +1 -1
- package/docs/design/templates/list-header/size-l-dark.svg +1 -1
- package/docs/design/templates/list-header/size-l.svg +1 -1
- package/docs/design/templates/list-header/size-m-dark.svg +1 -1
- package/docs/design/templates/list-header/size-m.svg +1 -1
- package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
- package/docs/design/templates/list-header/size-xl.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
- package/docs/design/templates/list-item/icon-tile.svg +1 -0
- package/docs/design/templates/list-item/selected-dark.svg +1 -1
- package/docs/design/templates/list-item/selected.svg +1 -1
- package/docs/design/templates/list-item-dark.svg +1 -1
- package/docs/design/templates/list-item.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- package/docs/design/templates/segmented-control-dark.svg +1 -1
- package/docs/design/templates/segmented-control.svg +1 -1
- package/docs/design/templates/skeleton-dark.svg +1 -1
- package/docs/design/templates/skeleton.svg +1 -1
- package/docs/design/templates/state-banner/danger-dark.svg +1 -1
- package/docs/design/templates/state-banner/danger.svg +1 -1
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -1
- package/docs/design/templates/state-banner/info-badge.svg +1 -1
- package/docs/design/templates/state-banner/info-dark.svg +1 -1
- package/docs/design/templates/state-banner/info.svg +1 -1
- package/docs/design/templates/state-banner/strip-dark.svg +1 -1
- package/docs/design/templates/state-banner/strip.svg +1 -1
- package/docs/design/templates/state-banner/success-dark.svg +1 -1
- package/docs/design/templates/state-banner/success.svg +1 -1
- package/docs/design/templates/state-banner/warning-dark.svg +1 -1
- package/docs/design/templates/state-banner/warning.svg +1 -1
- package/docs/design/templates/state-banner-dark.svg +1 -1
- package/docs/design/templates/state-banner.svg +1 -1
- package/docs/design/templates/tab-bar-dark.svg +1 -1
- package/docs/design/templates/tab-bar.svg +1 -1
- package/docs/design/templates/token-search-field-dark.svg +1 -1
- package/docs/design/templates/token-search-field.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default.svg +1 -1
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/large.svg +1 -1
- package/docs/design/templates/toolbar-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-text.svg +1 -1
- package/docs/design/templates/toolbar.svg +1 -1
- package/docs/design/templates/value-table/details-dark.svg +1 -1
- package/docs/design/templates/value-table/details.svg +1 -1
- package/docs/design/templates/value-table-dark.svg +1 -1
- package/docs/design/templates/value-table.svg +1 -1
- package/docs/design-philosophy.md +9 -1
- package/docs/examples/command-palette-adapter.tsx +3 -3
- package/docs/layout.md +147 -14
- package/docs/nav-stack.md +132 -8
- package/docs/recipes.md +9 -9
- package/docs/split-view.md +3 -3
- package/docs/sunken-panel.md +2 -2
- package/docs/surface-scaffold.md +138 -7
- package/docs/tab-navigator.md +38 -1
- package/docs/type-contracts.md +16 -16
- package/docs/ui-analyzer.md +3 -1
- package/docs/ui-doctor.md +71 -0
- package/docs/ux-demo.md +6 -6
- package/docs/webawesome-theme.md +7 -0
- package/docs/workbench.md +10 -6
- package/docs/writing.md +152 -0
- package/doctor/copy-capitalization-checks.mjs +591 -0
- package/doctor/index.mjs +17 -8
- package/llms.txt +105 -11
- package/package.json +15 -1
- package/ux-demo/recipes/app-shell.tsx +11 -11
- package/ux-demo/recipes/collapsible-sidebar.tsx +12 -11
- package/ux-demo/recipes/compact-toolbar.tsx +10 -10
- package/ux-demo/recipes/composer-form.tsx +8 -8
- package/ux-demo/recipes/list-detail-dialog.tsx +13 -13
- package/ux-demo/recipes/list-workspace-states.tsx +13 -13
- package/ux-demo/recipes/loading-inspector.tsx +10 -10
- package/ux-demo/recipes/navigation-sidebar.tsx +7 -7
- package/ux-demo/recipes/navigation-stack.tsx +5 -5
- package/ux-demo/recipes/workspace-header.tsx +5 -5
- package/dist/chunk-36TL6BCR.js.map +0 -1
- package/dist/chunk-4LOK4634.js +0 -21
- package/dist/chunk-4LOK4634.js.map +0 -1
- package/dist/chunk-6BRRUPJY.js.map +0 -1
- package/dist/chunk-6STQXRT4.js.map +0 -1
- package/dist/chunk-76PWEN5Y.js +0 -64
- package/dist/chunk-76PWEN5Y.js.map +0 -1
- package/dist/chunk-AYHC62OZ.js.map +0 -1
- package/dist/chunk-BU23Z5HZ.js.map +0 -1
- package/dist/chunk-DQDTZE4W.js +0 -70
- package/dist/chunk-DQDTZE4W.js.map +0 -1
- package/dist/chunk-FOQK4F3L.js.map +0 -1
- package/dist/chunk-GJYQ27C2.js.map +0 -1
- package/dist/chunk-JYD7G4RG.js.map +0 -1
- package/dist/chunk-KQDU7Z7P.js.map +0 -1
- package/dist/chunk-P74VXMB6.js.map +0 -1
- package/dist/chunk-PBT3CPPY.js.map +0 -1
- package/dist/chunk-PRG4CL3Q.js.map +0 -1
- package/dist/chunk-ROZLJULF.js.map +0 -1
- package/dist/chunk-U657IHFB.js.map +0 -1
- package/dist/chunk-V6W56V3N.js.map +0 -1
package/docs/writing.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Writing interface copy
|
|
2
|
+
|
|
3
|
+
Kerf UI follows Apple's capitalization conventions for interface text.
|
|
4
|
+
Apple's _Writing_ guidance asks for one style per UI element type, applied
|
|
5
|
+
consistently, and its element guidance assigns those styles. This page is the
|
|
6
|
+
package default, so every Kerf application, demo, and recipe uses the same
|
|
7
|
+
rule. An application may replace it only through a written, product-wide
|
|
8
|
+
style. It should never vary from one screen to the next.
|
|
9
|
+
|
|
10
|
+
## Capitalization
|
|
11
|
+
|
|
12
|
+
**Names are title style. Descriptions are sentence style.** Text that names a
|
|
13
|
+
command, control, view, or field uses title style ("Save Draft", "Workspace
|
|
14
|
+
Settings", "Release Date"). Text that describes, explains, reports, or asks
|
|
15
|
+
uses sentence style ("Changes sync when you reconnect").
|
|
16
|
+
|
|
17
|
+
| Element | Style | Examples |
|
|
18
|
+
| --------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------ |
|
|
19
|
+
| Buttons, split-button and toolbar actions, link-style commands | Title | Save Draft, Add to Favorites, Don’t Save, Log In |
|
|
20
|
+
| Menu items, menu group headings, popup-menu triggers | Title | Copy Reference, Sort By, Recently Updated, New Folder… |
|
|
21
|
+
| Segmented-control segments, `Select` and pop-up choices, tabs | Title | List View, Last 30 Days, In Review |
|
|
22
|
+
| Page, view, pane, dialog, and toolbar titles (`ToolbarText` titles), back labels | Title | Workspace Settings, Back to Inbox |
|
|
23
|
+
| Group and list headers (`ListHeader`), table column headings | Title | Saved Projects, Needs Attention, Last Modified |
|
|
24
|
+
| Catalog example and stack labels (`CatalogExample`, `CatalogExampleStack`) | Title | Heading Identity Stays Whole, Icon Trigger in a Group |
|
|
25
|
+
| Content item titles: the name an item or card shows | Title | Build Output, Work Area, Unsaved Changes |
|
|
26
|
+
| Field labels (`FieldLabel`, a field's `label`) | Title | Project Name, Release Date |
|
|
27
|
+
| Region and landmark names (accessible names of panes, toolbars, groups, lists, tab bars) | Title | Ticket Workbench, View Actions, Open Documents |
|
|
28
|
+
| Accessible names of icon-only controls | Title | More Actions, Clear Search |
|
|
29
|
+
| `EmptyState`, `StateBanner`, alert, and notification titles that are fragments | Title, no ending punctuation | No Release Tasks, Migration Needs Review |
|
|
30
|
+
| The same titles written as complete sentences | Sentence, with punctuation | Release tasks could not be refreshed. |
|
|
31
|
+
| Checkbox, switch, and radio option text | Sentence | Show hidden files, Notify me about replies |
|
|
32
|
+
| Body copy, `description`, `detail`, hints, empty-state and banner detail, dialog and alert messages | Sentence, with punctuation | Changes sync when you reconnect. |
|
|
33
|
+
| Tooltips and help text | Sentence | Copy the link to this ticket |
|
|
34
|
+
| Placeholders | Sentence | Search tickets |
|
|
35
|
+
| Status lines, counts, and timestamps (`ToolbarText` status, `Badge`, `CornerStatus`) | Sentence | Saved just now, 3 of 12 updated |
|
|
36
|
+
| Progress labels (`LoadingSpinner` and `Skeleton` `label`): the operation under way | Sentence, trailing ellipsis | Loading preview…, Refreshing release tasks… |
|
|
37
|
+
|
|
38
|
+
A name that a component composes into a longer label is a name too, so pass
|
|
39
|
+
it in title style. A panel toolbar's `toggle: { action, name }` labels the
|
|
40
|
+
toggle group with `name` and completes "Show …" / "Hide …" with it:
|
|
41
|
+
`name: "Navigator"` gives "Show Navigator". Kerf UI never recapitalizes it.
|
|
42
|
+
|
|
43
|
+
Data is never recapitalized. Names that a person or a system supplies keep
|
|
44
|
+
their own spelling: file names, ticket titles, user names, and tags. So do
|
|
45
|
+
code identifiers shown as text, such as a prop value a specimen is labeled
|
|
46
|
+
with (`danger`, `transparent`). A content
|
|
47
|
+
item that shows such data (a ticket subject, a message) keeps it as written;
|
|
48
|
+
only a title the interface itself names is title style. `ContentItem`'s own
|
|
49
|
+
`title` prop is a native tooltip, so it is sentence style. Keep a content
|
|
50
|
+
item's `ariaLabel` equal to its visible title.
|
|
51
|
+
|
|
52
|
+
### Title-style rules
|
|
53
|
+
|
|
54
|
+
From the [Apple Style Guide](https://support.apple.com/guide/applestyleguide/c-apsgb744e4a3/web)
|
|
55
|
+
(_capitalization_):
|
|
56
|
+
|
|
57
|
+
- **Capitalize** the first and last word, whatever their part of speech.
|
|
58
|
+
- **Capitalize** nouns, pronouns, verbs, adjectives, and adverbs, however
|
|
59
|
+
short: It, This, Your, Is, Are, Be.
|
|
60
|
+
- **Capitalize** subordinating conjunctions such as If, and prepositions of
|
|
61
|
+
five letters or more: About, Between, Through.
|
|
62
|
+
- **Capitalize** a preposition of any length that belongs to a phrasal verb
|
|
63
|
+
or acts as another part of speech: Start Up the Computer, Turn On, Log In to
|
|
64
|
+
the Server.
|
|
65
|
+
- **Capitalize** the second word of a hyphenated compound: High-Level Events,
|
|
66
|
+
Pop-Up Menu. Built-in and Plug-in are the exceptions.
|
|
67
|
+
- **Keep lowercase**:
|
|
68
|
+
- articles (a, an, the), unless one is the first word or follows a colon;
|
|
69
|
+
- coordinating conjunctions (and, but, or, nor, for, yet, so);
|
|
70
|
+
- _to_ in an infinitive (How to Start Your Computer);
|
|
71
|
+
- _as_ (Export a Document as a PDF);
|
|
72
|
+
- prepositions of four letters or fewer (at, by, for, from, in, into, of,
|
|
73
|
+
off, on, onto, out, over, to, up, with).
|
|
74
|
+
- **Keep the brand's own spelling** for words that always start lowercase,
|
|
75
|
+
such as iPad, iOS, and macOS.
|
|
76
|
+
|
|
77
|
+
### Sentence-style rules
|
|
78
|
+
|
|
79
|
+
Capitalize the first word and proper nouns or adjectives only. End a complete
|
|
80
|
+
sentence with punctuation. Leave a fragment without ending punctuation.
|
|
81
|
+
Tooltips may omit the final period.
|
|
82
|
+
|
|
83
|
+
### Related conventions
|
|
84
|
+
|
|
85
|
+
- An ellipsis (…) ends a command or menu item that needs more input before it
|
|
86
|
+
acts: New Ticket…, Save As…. The dialog it opens repeats the command as its
|
|
87
|
+
title, without the ellipsis.
|
|
88
|
+
- Label an action with its result. Prefer a verb: Publish Update, not OK.
|
|
89
|
+
- Keep a control's accessible name equal to its visible label, or starting
|
|
90
|
+
with it.
|
|
91
|
+
|
|
92
|
+
## Diagnostics
|
|
93
|
+
|
|
94
|
+
`kerf-ui-doctor` reports `KUI-D040` (warning) when a string or template
|
|
95
|
+
literal passed to a known title-style prop leaves a word lowercase that title
|
|
96
|
+
style capitalizes. In a template literal it judges only the static words:
|
|
97
|
+
`` `Edit ${name} shortcut` `` should be `` `Edit ${name} Shortcut` ``, and the
|
|
98
|
+
interpolated value keeps its own spelling. The covered props are:
|
|
99
|
+
|
|
100
|
+
- `ToolbarText` `text` when the text is a title: it has `headingLevel`, a
|
|
101
|
+
large size, or sits in a toolbar or panel `title`, `header`, or (unless small) `leading` slot;
|
|
102
|
+
- `ListHeader`, `ListActionRow`, `SplitButton`, and `Combobox` `label`;
|
|
103
|
+
- `CatalogExample` and `CatalogExampleStack` `label`;
|
|
104
|
+
- `EmptyState` and `StateBanner` `title`;
|
|
105
|
+
- `PopupMenu` `text` and item and heading labels, including submenus;
|
|
106
|
+
- `SegmentedControl`, `Select`, and `TabNavigator` choice and tab labels;
|
|
107
|
+
- `NavStack` view titles and `backText`, and `SplitView` `backLabel`;
|
|
108
|
+
- `FieldLabel` text and the text of a `button` or `wa-button`;
|
|
109
|
+
- the `name` of a panel toolbar's `toggle: { action, name }`;
|
|
110
|
+
- region and landmark names: the `label` of `Pane`, `Workbench`, `Toolbar`,
|
|
111
|
+
`ToolbarControlGroup`, `TabBar`, `NavStack`, `CollapsiblePanel`,
|
|
112
|
+
`FloatingToolbar`, and `ResizableRegion`, the `ariaLabel` of `SunkenPanel`
|
|
113
|
+
and `List`, a `Pane`'s `contentLabel`, the panel, toolbar, and pane labels
|
|
114
|
+
inside `Workbench`, `CollapsiblePanel`, and `NavStack` configuration, and
|
|
115
|
+
the `aria-label` of a landmark element (`section`, `nav`, `aside`, `main`,
|
|
116
|
+
`header`, `footer`, `form`, `search`) or landmark role;
|
|
117
|
+
- the `label` of a raw `wa-input`, `wa-select`, `wa-textarea`, or
|
|
118
|
+
`wa-radio-group`;
|
|
119
|
+
- the accessible names of icon-only controls: `IconButton` and
|
|
120
|
+
`IconToggleButton` `label`, `PopupMenu` `label`, `SplitButton`
|
|
121
|
+
`optionsLabel`, `TokenSearchField` `clearLabel`, and the `aria-label` of a
|
|
122
|
+
`button` or `wa-button` whose only content is an icon.
|
|
123
|
+
|
|
124
|
+
The check never judges sentence-style surfaces (including `wa-checkbox`,
|
|
125
|
+
`wa-switch`, and `wa-radio` option text and the `LoadingSpinner` and
|
|
126
|
+
`Skeleton` status labels), interpolated or other dynamic values, or text
|
|
127
|
+
ending with `.`, `!`, or `?`. It skips a word joined to an interpolation, tokens containing digits, code, or paths, and
|
|
128
|
+
lowercase-led brands such as iOS. It does not report capitalized short words,
|
|
129
|
+
because Apple capitalizes a phrasal verb's particle. Suppress `KUI-D040` for a
|
|
130
|
+
lowercase brand or product name. See [the doctor](./ui-doctor.md).
|
|
131
|
+
|
|
132
|
+
## Sources
|
|
133
|
+
|
|
134
|
+
- Apple Human Interface Guidelines,
|
|
135
|
+
[Writing](https://developer.apple.com/design/human-interface-guidelines/writing):
|
|
136
|
+
choose a capitalization style for each element type and use it consistently.
|
|
137
|
+
- [Menus](https://developer.apple.com/design/human-interface-guidelines/menus)
|
|
138
|
+
and [The menu bar](https://developer.apple.com/design/human-interface-guidelines/the-menu-bar):
|
|
139
|
+
menu items and multi-word menu titles use title-style capitalization.
|
|
140
|
+
- [Alerts](https://developer.apple.com/design/human-interface-guidelines/alerts)
|
|
141
|
+
and [Notifications](https://developer.apple.com/design/human-interface-guidelines/notifications):
|
|
142
|
+
a fragment title uses title style. A complete-sentence title and the
|
|
143
|
+
message use sentence style with punctuation.
|
|
144
|
+
- [Offering help](https://developer.apple.com/design/human-interface-guidelines/offering-help):
|
|
145
|
+
tooltips use sentence case.
|
|
146
|
+
- The archived OS X Human Interface Guidelines, _Use the Right Capitalization
|
|
147
|
+
Style in Labels and Text_. Title style covers menu titles and items, push
|
|
148
|
+
buttons, toolbar item labels, and labels that are not sentences, such as
|
|
149
|
+
group box and list headings. Sentence style covers checkbox and radio option
|
|
150
|
+
text and dialog messages.
|
|
151
|
+
- [Apple Style Guide](https://support.apple.com/guide/applestyleguide/c-apsgb744e4a3/web),
|
|
152
|
+
_capitalization_: the title-style word rules above.
|