@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
|
@@ -10,9 +10,30 @@
|
|
|
10
10
|
--kui-list-action-row-trailing-hover-background: var(
|
|
11
11
|
--kui-color-neutral-fill-normal
|
|
12
12
|
);
|
|
13
|
+
/* The leading (and trailing) content inset. An inherited
|
|
14
|
+
`--kui-list-row-padding-inline` on the containing List sets it for every
|
|
15
|
+
ListItem and ListActionRow at once; the +1px wherever it is used stands in
|
|
16
|
+
for the 1px border ListItem draws and this row paints as a box-shadow, so
|
|
17
|
+
both row kinds start their leading icons on one edge. */
|
|
18
|
+
--_kui-list-action-row-padding-inline: var(
|
|
19
|
+
--kui-list-row-padding-inline,
|
|
20
|
+
var(--kui-layout-item-padding, 0.5rem)
|
|
21
|
+
);
|
|
22
|
+
/* The leading icon size, shared with ListItem through an inherited
|
|
23
|
+
`--kui-list-row-icon-size` on the containing List, so a mixed list keeps
|
|
24
|
+
its labels on one edge. It defaults to ListItem's 18px row icon. */
|
|
25
|
+
--_kui-list-action-row-icon-size: var(--kui-list-row-icon-size, 1.125rem);
|
|
26
|
+
/* The row's minimum height and the primary button's block padding follow
|
|
27
|
+
density together, so a single-line label never holds a compact row
|
|
28
|
+
taller than its minimum (the label's own minimum is the difference). */
|
|
29
|
+
--_kui-list-action-row-min-height: 2.75rem;
|
|
30
|
+
--_kui-list-action-row-padding-block: var(
|
|
31
|
+
--kui-layout-item-padding,
|
|
32
|
+
0.5rem
|
|
33
|
+
);
|
|
13
34
|
display: flex;
|
|
14
35
|
width: calc(100% - (2 * var(--kui-layout-inline-margin, 0.5rem)));
|
|
15
|
-
min-height:
|
|
36
|
+
min-height: var(--_kui-list-action-row-min-height);
|
|
16
37
|
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
17
38
|
border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
|
|
18
39
|
color: var(--kui-list-action-row-color);
|
|
@@ -22,12 +43,8 @@
|
|
|
22
43
|
}
|
|
23
44
|
|
|
24
45
|
.kui-list-action-row[data-density="compact"] {
|
|
25
|
-
min-height: 2.25rem;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
.kui-list-action-row[data-density="compact"]
|
|
29
|
-
:is(.kui-list-action-row__primary, .kui-list-action-row__trailing-action) {
|
|
30
|
-
min-height: 2.25rem;
|
|
46
|
+
--_kui-list-action-row-min-height: 2.25rem;
|
|
47
|
+
--_kui-list-action-row-padding-block: 0.25rem;
|
|
31
48
|
}
|
|
32
49
|
|
|
33
50
|
.kui-list-action-row[data-divider="before"],
|
|
@@ -60,9 +77,12 @@
|
|
|
60
77
|
border-end-end-radius: 0;
|
|
61
78
|
}
|
|
62
79
|
|
|
63
|
-
.
|
|
64
|
-
|
|
65
|
-
|
|
80
|
+
/* A selected or pressed row keeps its selected tint while hovered. */
|
|
81
|
+
.kui-list-action-row:not(
|
|
82
|
+
[data-placeholder="true"],
|
|
83
|
+
[data-selected="true"],
|
|
84
|
+
[data-pressed="true"]
|
|
85
|
+
):has(.kui-list-action-row__primary:hover) {
|
|
66
86
|
--kui-list-action-row-border: var(--kui-list-action-row-hover-border);
|
|
67
87
|
--kui-list-action-row-background: var(--kui-list-action-row-hover-background);
|
|
68
88
|
}
|
|
@@ -97,7 +117,7 @@
|
|
|
97
117
|
.kui-list-action-row[data-drop-position]::after {
|
|
98
118
|
position: absolute;
|
|
99
119
|
z-index: 1;
|
|
100
|
-
inset-inline: var(--
|
|
120
|
+
inset-inline: var(--_kui-list-action-row-padding-inline);
|
|
101
121
|
height: var(--kui-list-action-row-drop-indicator-width, 2px);
|
|
102
122
|
border-radius: var(--kui-radius-pill);
|
|
103
123
|
background: var(
|
|
@@ -119,7 +139,7 @@
|
|
|
119
139
|
.kui-list-action-row__primary,
|
|
120
140
|
.kui-list-action-row__trailing-action {
|
|
121
141
|
height: auto !important;
|
|
122
|
-
min-height:
|
|
142
|
+
min-height: var(--_kui-list-action-row-min-height);
|
|
123
143
|
padding: 0;
|
|
124
144
|
border: 0;
|
|
125
145
|
appearance: none;
|
|
@@ -134,8 +154,9 @@
|
|
|
134
154
|
display: block;
|
|
135
155
|
flex: 1 1 auto;
|
|
136
156
|
min-width: 2.75rem;
|
|
137
|
-
padding: var(--
|
|
138
|
-
padding-inline
|
|
157
|
+
padding-block: var(--_kui-list-action-row-padding-block);
|
|
158
|
+
padding-inline: calc(1px + var(--_kui-list-action-row-padding-inline))
|
|
159
|
+
var(--_kui-list-action-row-padding-inline);
|
|
139
160
|
text-align: start;
|
|
140
161
|
}
|
|
141
162
|
|
|
@@ -167,10 +188,10 @@
|
|
|
167
188
|
.kui-list-action-row__icon {
|
|
168
189
|
position: absolute;
|
|
169
190
|
inset-block-start: 50%;
|
|
170
|
-
inset-inline-start: calc(1px + var(--
|
|
191
|
+
inset-inline-start: calc(1px + var(--_kui-list-action-row-padding-inline));
|
|
171
192
|
display: grid;
|
|
172
|
-
width:
|
|
173
|
-
height:
|
|
193
|
+
width: var(--_kui-list-action-row-icon-size);
|
|
194
|
+
height: var(--_kui-list-action-row-icon-size);
|
|
174
195
|
color: currentColor;
|
|
175
196
|
transform: translateY(-50%);
|
|
176
197
|
place-items: center;
|
|
@@ -178,15 +199,16 @@
|
|
|
178
199
|
|
|
179
200
|
.kui-list-action-row__icon svg {
|
|
180
201
|
display: block;
|
|
181
|
-
width:
|
|
182
|
-
height:
|
|
202
|
+
width: var(--_kui-list-action-row-icon-size);
|
|
203
|
+
height: var(--_kui-list-action-row-icon-size);
|
|
183
204
|
}
|
|
184
205
|
|
|
185
206
|
.kui-list-action-row__label {
|
|
186
207
|
display: grid;
|
|
187
208
|
min-width: 0;
|
|
188
209
|
min-height: calc(
|
|
189
|
-
|
|
210
|
+
var(--_kui-list-action-row-min-height) -
|
|
211
|
+
(2 * var(--_kui-list-action-row-padding-block))
|
|
190
212
|
);
|
|
191
213
|
overflow: hidden;
|
|
192
214
|
white-space: nowrap;
|
|
@@ -226,7 +248,8 @@
|
|
|
226
248
|
|
|
227
249
|
.kui-list-action-row[data-has-icon="true"] .kui-list-action-row__label {
|
|
228
250
|
margin-inline-start: calc(
|
|
229
|
-
|
|
251
|
+
var(--_kui-list-action-row-icon-size) +
|
|
252
|
+
var(--kui-layout-item-gap, 0.5rem)
|
|
230
253
|
);
|
|
231
254
|
}
|
|
232
255
|
|
|
@@ -244,7 +267,7 @@
|
|
|
244
267
|
|
|
245
268
|
.kui-list-action-row[data-multiline="true"] .kui-list-action-row__icon {
|
|
246
269
|
inset-block-start: calc(
|
|
247
|
-
var(--
|
|
270
|
+
var(--_kui-list-action-row-padding-block) + (1lh / 2)
|
|
248
271
|
);
|
|
249
272
|
}
|
|
250
273
|
|
|
@@ -291,7 +314,139 @@
|
|
|
291
314
|
height: 1rem;
|
|
292
315
|
}
|
|
293
316
|
|
|
317
|
+
/* A filled icon tile (`iconTile`): the leading icon sits in a 32px rounded
|
|
318
|
+
tile with an 18px glyph, 6px clear of a standard 44px row's edges (a
|
|
319
|
+
compact row is at least 42px tall) like a ListItem tile. The 6px radius
|
|
320
|
+
is concentric with the row's 12px corner at that clearance. */
|
|
321
|
+
.kui-list-action-row[data-icon-tile] {
|
|
322
|
+
--_kui-list-action-row-icon-tile-size: 2rem;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.kui-list-action-row[data-icon-tile][data-density="compact"] {
|
|
326
|
+
--_kui-list-action-row-min-height: 2.625rem;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.kui-list-action-row[data-icon-tile] .kui-list-action-row__icon {
|
|
330
|
+
width: var(--_kui-list-action-row-icon-tile-size);
|
|
331
|
+
height: var(--_kui-list-action-row-icon-tile-size);
|
|
332
|
+
border-radius: var(--kui-radius-m, 0.375rem);
|
|
333
|
+
color: var(--_kui-list-action-row-icon-tile-foreground, currentColor);
|
|
334
|
+
background: var(--_kui-list-action-row-icon-tile-fill, transparent);
|
|
335
|
+
box-shadow: inset 0 0 0 1px
|
|
336
|
+
var(--_kui-list-action-row-icon-tile-border, transparent);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.kui-list-action-row[data-icon-tile] .kui-list-action-row__icon svg {
|
|
340
|
+
width: 1.125rem;
|
|
341
|
+
height: 1.125rem;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.kui-list-action-row[data-has-icon="true"][data-icon-tile]
|
|
345
|
+
.kui-list-action-row__label {
|
|
346
|
+
margin-inline-start: calc(
|
|
347
|
+
var(--_kui-list-action-row-icon-tile-size) +
|
|
348
|
+
var(--kui-layout-item-gap, 0.5rem)
|
|
349
|
+
);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/* An application fill defaults its glyph to black or white, whichever
|
|
353
|
+
contrasts with the fill's lightness. */
|
|
354
|
+
.kui-list-action-row[data-icon-tile="color"] .kui-list-action-row__icon {
|
|
355
|
+
color: var(--_kui-list-action-row-icon-tile-foreground, #fff);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
@supports (color: oklch(from red l c h)) {
|
|
359
|
+
.kui-list-action-row[data-icon-tile="color"] .kui-list-action-row__icon {
|
|
360
|
+
color: var(
|
|
361
|
+
--_kui-list-action-row-icon-tile-foreground,
|
|
362
|
+
oklch(
|
|
363
|
+
from var(--_kui-list-action-row-icon-tile-fill)
|
|
364
|
+
clamp(0, (0.68 - l) * 1000, 1) 0 0
|
|
365
|
+
)
|
|
366
|
+
);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.kui-list-action-row[data-icon-tile-tone="neutral"] .kui-list-action-row__icon {
|
|
371
|
+
--_kui-list-action-row-icon-tile-fill: var(--kui-color-neutral-fill-quiet);
|
|
372
|
+
--_kui-list-action-row-icon-tile-border: var(
|
|
373
|
+
--kui-color-neutral-border-quiet
|
|
374
|
+
);
|
|
375
|
+
--_kui-list-action-row-icon-tile-foreground: var(
|
|
376
|
+
--kui-color-neutral-on-quiet
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.kui-list-action-row[data-icon-tile-tone="brand"] .kui-list-action-row__icon {
|
|
381
|
+
--_kui-list-action-row-icon-tile-fill: var(--kui-color-brand-fill-quiet);
|
|
382
|
+
--_kui-list-action-row-icon-tile-border: var(--kui-color-brand-border-quiet);
|
|
383
|
+
--_kui-list-action-row-icon-tile-foreground: var(--kui-color-brand-on-quiet);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.kui-list-action-row[data-icon-tile-tone="success"] .kui-list-action-row__icon {
|
|
387
|
+
--_kui-list-action-row-icon-tile-fill: var(--kui-color-success-fill-quiet);
|
|
388
|
+
--_kui-list-action-row-icon-tile-border: var(
|
|
389
|
+
--kui-color-success-border-quiet
|
|
390
|
+
);
|
|
391
|
+
--_kui-list-action-row-icon-tile-foreground: var(
|
|
392
|
+
--kui-color-success-on-quiet
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.kui-list-action-row[data-icon-tile-tone="warning"] .kui-list-action-row__icon {
|
|
397
|
+
--_kui-list-action-row-icon-tile-fill: var(--kui-color-warning-fill-quiet);
|
|
398
|
+
--_kui-list-action-row-icon-tile-border: var(
|
|
399
|
+
--kui-color-warning-border-quiet
|
|
400
|
+
);
|
|
401
|
+
--_kui-list-action-row-icon-tile-foreground: var(
|
|
402
|
+
--kui-color-warning-on-quiet
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.kui-list-action-row[data-icon-tile-tone="danger"] .kui-list-action-row__icon {
|
|
407
|
+
--_kui-list-action-row-icon-tile-fill: var(--kui-color-danger-fill-quiet);
|
|
408
|
+
--_kui-list-action-row-icon-tile-border: var(--kui-color-danger-border-quiet);
|
|
409
|
+
--_kui-list-action-row-icon-tile-foreground: var(--kui-color-danger-on-quiet);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/* A loading row shows a tile-sized skeleton in place of the fill. */
|
|
413
|
+
.kui-list-action-row[data-icon-tile][data-placeholder="true"]
|
|
414
|
+
.kui-list-action-row__icon {
|
|
415
|
+
background: transparent;
|
|
416
|
+
box-shadow: none;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/* A wrapped label keeps its first line centered on the tile: the tile sits
|
|
420
|
+
6px below the row's top like a single-line row's, and the label starts
|
|
421
|
+
half the difference between the tile and its line box lower. */
|
|
422
|
+
.kui-list-action-row[data-icon-tile][data-multiline="true"]
|
|
423
|
+
.kui-list-action-row__primary {
|
|
424
|
+
padding-block: 0.375rem;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
.kui-list-action-row[data-icon-tile][data-multiline="true"]
|
|
428
|
+
.kui-list-action-row__icon {
|
|
429
|
+
inset-block-start: calc(
|
|
430
|
+
0.375rem + (var(--_kui-list-action-row-icon-tile-size) / 2)
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.kui-list-action-row[data-icon-tile][data-multiline="true"]
|
|
435
|
+
.kui-list-action-row__label {
|
|
436
|
+
box-sizing: border-box;
|
|
437
|
+
min-height: var(--_kui-list-action-row-icon-tile-size);
|
|
438
|
+
padding-block-start: max(
|
|
439
|
+
0px,
|
|
440
|
+
(var(--_kui-list-action-row-icon-tile-size) - 1lh) / 2
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
|
|
294
444
|
@media (forced-colors: active) {
|
|
445
|
+
.kui-list-action-row[data-icon-tile] .kui-list-action-row__icon {
|
|
446
|
+
outline: 1px solid CanvasText;
|
|
447
|
+
outline-offset: -1px;
|
|
448
|
+
}
|
|
449
|
+
|
|
295
450
|
.kui-list-action-row[data-drop-position]::after {
|
|
296
451
|
background: Highlight;
|
|
297
452
|
forced-color-adjust: none;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
.kui-list-item {
|
|
2
|
+
/* The leading icon size. An inherited `--kui-list-row-icon-size` on the
|
|
3
|
+
containing List sizes ListItem and ListActionRow icons together, so a
|
|
4
|
+
mixed list keeps its labels on one edge; `--kui-list-item-icon-size`
|
|
5
|
+
still wins for ListItem rows that set it. */
|
|
6
|
+
--_kui-list-item-icon-size: var(
|
|
7
|
+
--kui-list-item-icon-size,
|
|
8
|
+
var(--kui-list-row-icon-size, 1.125rem)
|
|
9
|
+
);
|
|
2
10
|
display: grid;
|
|
3
11
|
width: calc(100% - (2 * var(--kui-layout-inline-margin, 0.5rem)));
|
|
4
12
|
min-height: var(--kui-list-item-min-height, 2.75rem);
|
|
@@ -10,7 +18,10 @@
|
|
|
10
18
|
);
|
|
11
19
|
padding-inline: var(
|
|
12
20
|
--kui-list-item-padding-inline,
|
|
13
|
-
var(
|
|
21
|
+
var(
|
|
22
|
+
--kui-list-row-padding-inline,
|
|
23
|
+
var(--kui-layout-item-padding, 0.5rem)
|
|
24
|
+
)
|
|
14
25
|
);
|
|
15
26
|
box-sizing: border-box;
|
|
16
27
|
border: var(--kui-list-item-border-width, 1px) solid
|
|
@@ -85,7 +96,7 @@
|
|
|
85
96
|
.kui-list-item[data-has-icon="true"] {
|
|
86
97
|
grid-template-columns: var(
|
|
87
98
|
--kui-list-item-columns,
|
|
88
|
-
var(--
|
|
99
|
+
var(--_kui-list-item-icon-size) minmax(0, 1fr) auto
|
|
89
100
|
);
|
|
90
101
|
}
|
|
91
102
|
|
|
@@ -109,7 +120,12 @@
|
|
|
109
120
|
grid-column: 2;
|
|
110
121
|
}
|
|
111
122
|
|
|
112
|
-
.
|
|
123
|
+
/* A selected or current row keeps its selected tint while hovered. */
|
|
124
|
+
.kui-list-item:hover:not(
|
|
125
|
+
[data-placeholder="true"],
|
|
126
|
+
[aria-current="page"],
|
|
127
|
+
[aria-pressed="true"]
|
|
128
|
+
) {
|
|
113
129
|
border-color: var(
|
|
114
130
|
--kui-list-item-hover-border,
|
|
115
131
|
var(--kui-color-neutral-border-normal)
|
|
@@ -160,16 +176,16 @@
|
|
|
160
176
|
|
|
161
177
|
.kui-list-item__icon {
|
|
162
178
|
display: grid;
|
|
163
|
-
width: var(--
|
|
164
|
-
height: var(--
|
|
179
|
+
width: var(--_kui-list-item-icon-size);
|
|
180
|
+
height: var(--_kui-list-item-icon-size);
|
|
165
181
|
color: var(--kui-list-item-icon-color, currentColor);
|
|
166
182
|
place-items: center;
|
|
167
183
|
}
|
|
168
184
|
|
|
169
185
|
.kui-list-item__icon svg {
|
|
170
186
|
display: block;
|
|
171
|
-
width: var(--
|
|
172
|
-
height: var(--
|
|
187
|
+
width: var(--_kui-list-item-icon-size);
|
|
188
|
+
height: var(--_kui-list-item-icon-size);
|
|
173
189
|
}
|
|
174
190
|
|
|
175
191
|
.kui-list-item__label {
|
|
@@ -225,9 +241,7 @@
|
|
|
225
241
|
|
|
226
242
|
.kui-list-item[data-multiline="true"] .kui-list-item__icon {
|
|
227
243
|
align-self: start;
|
|
228
|
-
margin-block-start: calc(
|
|
229
|
-
(1lh - var(--kui-list-item-icon-size, 1.125rem)) / 2
|
|
230
|
-
);
|
|
244
|
+
margin-block-start: calc((1lh - var(--_kui-list-item-icon-size)) / 2);
|
|
231
245
|
}
|
|
232
246
|
|
|
233
247
|
.kui-list-item[data-multiline="true"][data-icon-align="center"]
|
|
@@ -275,7 +289,10 @@
|
|
|
275
289
|
z-index: 1;
|
|
276
290
|
inset-inline: var(
|
|
277
291
|
--kui-list-item-padding-inline,
|
|
278
|
-
var(
|
|
292
|
+
var(
|
|
293
|
+
--kui-list-row-padding-inline,
|
|
294
|
+
var(--kui-layout-item-padding, 0.5rem)
|
|
295
|
+
)
|
|
279
296
|
);
|
|
280
297
|
height: var(--kui-list-item-drop-indicator-width, 2px);
|
|
281
298
|
border-radius: var(--kui-radius-pill);
|
|
@@ -312,3 +329,133 @@
|
|
|
312
329
|
width: 1rem;
|
|
313
330
|
height: 1rem;
|
|
314
331
|
}
|
|
332
|
+
|
|
333
|
+
/* A filled icon tile (`iconTile`): the leading icon sits in a 32px rounded
|
|
334
|
+
tile with an 18px glyph. The tile overhangs the content box by up to 3px
|
|
335
|
+
into the block padding, so a single-line row keeps its density height
|
|
336
|
+
(44px standard, 52px spacious) and a compact row grows only to 42px; the
|
|
337
|
+
tile then sits 6px (5px compact) clear of the row edges, like a
|
|
338
|
+
ListActionRow tile, and rows with descriptions keep their height. The 6px
|
|
339
|
+
radius is concentric with the row's 12px corner at that clearance. */
|
|
340
|
+
.kui-list-item[data-icon-tile] {
|
|
341
|
+
--_kui-list-item-icon-tile-size: 2rem;
|
|
342
|
+
--_kui-list-item-icon-tile-overhang: 0.1875rem;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.kui-list-item[data-icon-tile][data-density="compact"] {
|
|
346
|
+
--_kui-list-item-icon-tile-overhang: 0px;
|
|
347
|
+
/* Native buttons take a form-control height, so a compact tile row
|
|
348
|
+
declares its tile-sized minimum rather than relying on content height. */
|
|
349
|
+
min-height: var(--kui-list-item-min-height, 2.625rem);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.kui-list-item[data-has-icon="true"][data-icon-tile] {
|
|
353
|
+
grid-template-columns: var(
|
|
354
|
+
--kui-list-item-columns,
|
|
355
|
+
var(--_kui-list-item-icon-tile-size) minmax(0, 1fr) auto
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.kui-list-item[data-icon-tile] .kui-list-item__icon {
|
|
360
|
+
width: var(--_kui-list-item-icon-tile-size);
|
|
361
|
+
height: var(--_kui-list-item-icon-tile-size);
|
|
362
|
+
margin-block: calc(-1 * var(--_kui-list-item-icon-tile-overhang));
|
|
363
|
+
border-radius: var(--kui-radius-m, 0.375rem);
|
|
364
|
+
color: var(--_kui-list-item-icon-tile-foreground, currentColor);
|
|
365
|
+
background: var(--_kui-list-item-icon-tile-fill, transparent);
|
|
366
|
+
box-shadow: inset 0 0 0 1px
|
|
367
|
+
var(--_kui-list-item-icon-tile-border, transparent);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.kui-list-item[data-icon-tile] .kui-list-item__icon svg {
|
|
371
|
+
width: 1.125rem;
|
|
372
|
+
height: 1.125rem;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* An application fill defaults its glyph to black or white, whichever
|
|
376
|
+
contrasts with the fill's lightness. */
|
|
377
|
+
.kui-list-item[data-icon-tile="color"] .kui-list-item__icon {
|
|
378
|
+
color: var(--_kui-list-item-icon-tile-foreground, #fff);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
@supports (color: oklch(from red l c h)) {
|
|
382
|
+
.kui-list-item[data-icon-tile="color"] .kui-list-item__icon {
|
|
383
|
+
color: var(
|
|
384
|
+
--_kui-list-item-icon-tile-foreground,
|
|
385
|
+
oklch(
|
|
386
|
+
from var(--_kui-list-item-icon-tile-fill) clamp(0, (0.68 - l) * 1000, 1)
|
|
387
|
+
0 0
|
|
388
|
+
)
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
.kui-list-item[data-icon-tile-tone="neutral"] .kui-list-item__icon {
|
|
394
|
+
--_kui-list-item-icon-tile-fill: var(--kui-color-neutral-fill-quiet);
|
|
395
|
+
--_kui-list-item-icon-tile-border: var(--kui-color-neutral-border-quiet);
|
|
396
|
+
--_kui-list-item-icon-tile-foreground: var(--kui-color-neutral-on-quiet);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.kui-list-item[data-icon-tile-tone="brand"] .kui-list-item__icon {
|
|
400
|
+
--_kui-list-item-icon-tile-fill: var(--kui-color-brand-fill-quiet);
|
|
401
|
+
--_kui-list-item-icon-tile-border: var(--kui-color-brand-border-quiet);
|
|
402
|
+
--_kui-list-item-icon-tile-foreground: var(--kui-color-brand-on-quiet);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.kui-list-item[data-icon-tile-tone="success"] .kui-list-item__icon {
|
|
406
|
+
--_kui-list-item-icon-tile-fill: var(--kui-color-success-fill-quiet);
|
|
407
|
+
--_kui-list-item-icon-tile-border: var(--kui-color-success-border-quiet);
|
|
408
|
+
--_kui-list-item-icon-tile-foreground: var(--kui-color-success-on-quiet);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
.kui-list-item[data-icon-tile-tone="warning"] .kui-list-item__icon {
|
|
412
|
+
--_kui-list-item-icon-tile-fill: var(--kui-color-warning-fill-quiet);
|
|
413
|
+
--_kui-list-item-icon-tile-border: var(--kui-color-warning-border-quiet);
|
|
414
|
+
--_kui-list-item-icon-tile-foreground: var(--kui-color-warning-on-quiet);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.kui-list-item[data-icon-tile-tone="danger"] .kui-list-item__icon {
|
|
418
|
+
--_kui-list-item-icon-tile-fill: var(--kui-color-danger-fill-quiet);
|
|
419
|
+
--_kui-list-item-icon-tile-border: var(--kui-color-danger-border-quiet);
|
|
420
|
+
--_kui-list-item-icon-tile-foreground: var(--kui-color-danger-on-quiet);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/* A loading row shows a tile-sized skeleton in place of the fill. */
|
|
424
|
+
.kui-list-item[data-icon-tile][data-placeholder="true"] .kui-list-item__icon {
|
|
425
|
+
background: transparent;
|
|
426
|
+
box-shadow: none;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
.kui-list-item[data-icon-tile][data-multiline="true"][data-icon-align="center"]
|
|
430
|
+
.kui-list-item__icon {
|
|
431
|
+
margin-block: calc(-1 * var(--_kui-list-item-icon-tile-overhang));
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* A wrapped label keeps its first line centered on the tile: the tile sits
|
|
435
|
+
at the top of the content box (less its overhang) and the label starts
|
|
436
|
+
the rest of the way down, instead of the tile overhanging the row edge. */
|
|
437
|
+
.kui-list-item[data-icon-tile][data-multiline="true"]:not(
|
|
438
|
+
[data-icon-align="center"]
|
|
439
|
+
)
|
|
440
|
+
.kui-list-item__icon {
|
|
441
|
+
margin-block-start: calc(-1 * var(--_kui-list-item-icon-tile-overhang));
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.kui-list-item[data-icon-tile][data-multiline="true"]:not(
|
|
445
|
+
[data-icon-align="center"]
|
|
446
|
+
)
|
|
447
|
+
.kui-list-item__label {
|
|
448
|
+
align-self: start;
|
|
449
|
+
padding-block-start: max(
|
|
450
|
+
0px,
|
|
451
|
+
(var(--_kui-list-item-icon-tile-size) - 1lh) / 2 -
|
|
452
|
+
var(--_kui-list-item-icon-tile-overhang)
|
|
453
|
+
);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
@media (forced-colors: active) {
|
|
457
|
+
.kui-list-item[data-icon-tile] .kui-list-item__icon {
|
|
458
|
+
outline: 1px solid CanvasText;
|
|
459
|
+
outline-offset: -1px;
|
|
460
|
+
}
|
|
461
|
+
}
|
package/dist/styles/list.css
CHANGED
|
@@ -8,10 +8,15 @@
|
|
|
8
8
|
--_kui-list-column-gap: var(--_kui-list-gap);
|
|
9
9
|
--_kui-list-row-gap: var(--_kui-list-gap);
|
|
10
10
|
--_kui-list-flex: 0 1 auto;
|
|
11
|
-
--_kui-list-inset-top:
|
|
12
|
-
--_kui-list-inset-right:
|
|
13
|
-
--_kui-list-inset-bottom:
|
|
14
|
-
--_kui-list-inset-left:
|
|
11
|
+
--_kui-list-inset-top: 0px;
|
|
12
|
+
--_kui-list-inset-right: 0px;
|
|
13
|
+
--_kui-list-inset-bottom: 0px;
|
|
14
|
+
--_kui-list-inset-left: 0px;
|
|
15
|
+
--_kui-list-clearance-start: 0px;
|
|
16
|
+
--_kui-list-clearance-end: 0px;
|
|
17
|
+
--_kui-list-ring-room: 0px;
|
|
18
|
+
--_kui-list-max-height: none;
|
|
19
|
+
--_kui-list-min-height: 0px;
|
|
15
20
|
--_kui-list-divider-top: transparent;
|
|
16
21
|
--_kui-list-divider-right: transparent;
|
|
17
22
|
--_kui-list-divider-bottom: transparent;
|
|
@@ -19,10 +24,15 @@
|
|
|
19
24
|
|
|
20
25
|
display: flex;
|
|
21
26
|
min-width: 0;
|
|
22
|
-
min-height:
|
|
27
|
+
min-height: var(--_kui-list-min-height);
|
|
28
|
+
max-height: var(--_kui-list-max-height);
|
|
23
29
|
box-sizing: border-box;
|
|
24
|
-
padding:
|
|
25
|
-
|
|
30
|
+
padding: calc(
|
|
31
|
+
var(--_kui-list-inset-top, 0px) + var(--_kui-list-clearance-start)
|
|
32
|
+
)
|
|
33
|
+
var(--_kui-list-inset-right, 0)
|
|
34
|
+
calc(var(--_kui-list-inset-bottom, 0px) + var(--_kui-list-clearance-end))
|
|
35
|
+
var(--_kui-list-inset-left, 0);
|
|
26
36
|
flex: var(--_kui-list-flex, initial);
|
|
27
37
|
flex-direction: column;
|
|
28
38
|
align-items: stretch;
|
|
@@ -97,6 +107,21 @@
|
|
|
97
107
|
}
|
|
98
108
|
}
|
|
99
109
|
|
|
110
|
+
/* `frame`: a bordered, rounded stack (a result picker). Its 4px inset on
|
|
111
|
+
every side replaces any side-selected or document inset, and is exactly
|
|
112
|
+
the reach of a row's focus ring (3px ring, 1px offset), so the first and
|
|
113
|
+
last rows' rings stay inside a scrolling frame's clip at the scroll
|
|
114
|
+
extremes. (The ring-room scroll padding every scrollable List carries
|
|
115
|
+
handles a row stopped mid-scroll.) */
|
|
116
|
+
.kui-list[data-frame="true"] {
|
|
117
|
+
--_kui-list-inset-top: var(--kui-space-2xs);
|
|
118
|
+
--_kui-list-inset-right: var(--kui-space-2xs);
|
|
119
|
+
--_kui-list-inset-bottom: var(--kui-space-2xs);
|
|
120
|
+
--_kui-list-inset-left: var(--kui-space-2xs);
|
|
121
|
+
border: 1px solid var(--kui-color-neutral-border-normal);
|
|
122
|
+
border-radius: var(--kui-radius-m);
|
|
123
|
+
}
|
|
124
|
+
|
|
100
125
|
.kui-list[data-h-align="left"] {
|
|
101
126
|
align-items: flex-start;
|
|
102
127
|
align-content: flex-start;
|
|
@@ -124,11 +149,56 @@
|
|
|
124
149
|
justify-content: space-between;
|
|
125
150
|
}
|
|
126
151
|
|
|
152
|
+
/* A scrollable List's scroll padding is a row's focus-ring reach (3px ring,
|
|
153
|
+
1px offset) plus 2px of slack, so a row focused or scrolled into view stops
|
|
154
|
+
with its ring inside the clip rather than flush against it: Chromium's
|
|
155
|
+
focus scroll stops 1px short of the padded target, and a row's fractional
|
|
156
|
+
position can cost another 0.3px. Scroll padding moves nothing at rest; at
|
|
157
|
+
the scroll extremes an unframed List's first and last rows still meet the
|
|
158
|
+
clip, which is what `frame`'s 4px inset is for. */
|
|
127
159
|
.kui-list[data-scrollable="true"] {
|
|
160
|
+
--_kui-list-ring-room: calc(var(--kui-space-2xs) + 2px);
|
|
128
161
|
overflow-y: auto;
|
|
129
162
|
overscroll-behavior-y: contain;
|
|
130
163
|
}
|
|
131
164
|
|
|
165
|
+
/* `scrollClearance`: chrome lying over the List's block edge (a dialog's
|
|
166
|
+
floating footer) publishes how far it covers that edge through the
|
|
167
|
+
inherited `--kui-scroll-clearance-block-*` context. The List adds it to its
|
|
168
|
+
own block padding and scroll padding, so rows scroll visibly beneath the
|
|
169
|
+
chrome while the first and last rows, and anything focused or scrolled into
|
|
170
|
+
view, still come to rest clear of it. */
|
|
171
|
+
.kui-list:is(
|
|
172
|
+
[data-scroll-clearance="block-start"],
|
|
173
|
+
[data-scroll-clearance="both"]
|
|
174
|
+
) {
|
|
175
|
+
--_kui-list-clearance-start: var(--kui-scroll-clearance-block-start, 0px);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.kui-list:is(
|
|
179
|
+
[data-scroll-clearance="block-end"],
|
|
180
|
+
[data-scroll-clearance="both"]
|
|
181
|
+
) {
|
|
182
|
+
--_kui-list-clearance-end: var(--kui-scroll-clearance-block-end, 0px);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.kui-list:is([data-scroll-clearance], [data-scrollable="true"]) {
|
|
186
|
+
scroll-padding-block: calc(
|
|
187
|
+
var(--_kui-list-clearance-start) + var(--_kui-list-ring-room)
|
|
188
|
+
)
|
|
189
|
+
calc(var(--_kui-list-clearance-end) + var(--_kui-list-ring-room));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* In a Pane's scrolling content, a List that does not scroll itself keeps
|
|
193
|
+
its full height rather than shrinking to the content box. A shrunken List
|
|
194
|
+
lets its rows overflow its own box, and the scroller's block-end padding
|
|
195
|
+
(a bottom safe area, an overlay NavStack bottom toolbar's clearance)
|
|
196
|
+
follows the List's box, not those rows, so the last row could never
|
|
197
|
+
scroll clear of the edge. A `flex` basis still grows the List to fill. */
|
|
198
|
+
.kui-pane > .kui-pane__content > .kui-list:not([data-scrollable="true"]) {
|
|
199
|
+
flex-shrink: 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
132
202
|
/* A scrollable List owns the overflow, so its rows keep their natural height
|
|
133
203
|
and scroll rather than shrink. Items that clip their own overflow (a
|
|
134
204
|
ListItem) have a zero automatic minimum height, so the default
|