@slotted/react 0.1.0-beta.0 → 0.1.0-beta.10
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 +23 -2
- package/dist/accordion-n5D6mcmS.js +144 -0
- package/dist/accordion.js +1 -1
- package/dist/{action-bar-C7cGnEyJ.js → action-bar-CJgBierN.js} +88 -87
- package/dist/action-bar.js +1 -1
- package/dist/action-sheet-tRrjm7WQ.js +358 -0
- package/dist/action-sheet.js +1 -1
- package/dist/alert-BTcqbG8w.js +163 -0
- package/dist/alert.js +1 -1
- package/dist/app-shell-BlkqQrOx.js +845 -0
- package/dist/app-shell.js +1 -1
- package/dist/aspect-ratio-CLxOFJVH.js +41 -0
- package/dist/aspect-ratio.js +1 -1
- package/dist/attachment-zlOPJvIm.js +305 -0
- package/dist/attachment.js +1 -1
- package/dist/avatar-C1mYlU05.js +104 -0
- package/dist/avatar-group-DhbHJlMx.js +50 -0
- package/dist/avatar-group.js +1 -1
- package/dist/avatar.js +1 -1
- package/dist/badge-pgYVOnZO.js +98 -0
- package/dist/badge.js +1 -1
- package/dist/bin/slotted-agent-docs.mjs +297 -0
- package/dist/breadcrumb-DCGynpkb.js +222 -0
- package/dist/breadcrumb.js +1 -1
- package/dist/button-BCVjdzkn.js +100 -0
- package/dist/button-group-C-m4aSqu.js +51 -0
- package/dist/button-group.js +1 -1
- package/dist/button.js +2 -2
- package/dist/calendar-qGUJ-kAy.js +457 -0
- package/dist/calendar.js +1 -1
- package/dist/card-DRmq8_5e.js +103 -0
- package/dist/card.js +1 -1
- package/dist/carousel-CjRTu8m7.js +499 -0
- package/dist/carousel.js +1 -1
- package/dist/cascader-DqlC1z5b.js +1154 -0
- package/dist/cascader.js +1 -1
- package/dist/{chart-BNzfIfQe.js → chart-CPFq3jIE.js} +327 -265
- package/dist/chart.js +1 -1
- package/dist/checkbox-CMY2KIih.js +144 -0
- package/dist/checkbox-group-DzMtLF7f.js +109 -0
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/code-block-Bh_2Eg3M.js +282 -0
- package/dist/code-block.js +1 -1
- package/dist/collapsible-B_UjYE2f.js +222 -0
- package/dist/collapsible.js +1 -1
- package/dist/color-picker-DlepH5co.js +506 -0
- package/dist/color-picker.js +1 -1
- package/dist/column-manager-CV9tCnKa.js +586 -0
- package/dist/column-manager.js +1 -1
- package/dist/combobox-YWFkxaQ3.js +902 -0
- package/dist/combobox.js +1 -1
- package/dist/command-palette-DXNq-zKN.js +741 -0
- package/dist/command-palette.js +1 -1
- package/dist/container-WoYiHo50.js +47 -0
- package/dist/container.js +1 -1
- package/dist/context-menu-Dbc0KkFp.js +151 -0
- package/dist/context-menu.js +1 -1
- package/dist/currency-field--wIfgVAx.js +469 -0
- package/dist/currency-field.js +1 -1
- package/dist/dashboard-grid-D_LbWfdZ.js +1048 -0
- package/dist/dashboard-grid.js +1 -1
- package/dist/{data-grid-BUgOJuGp.js → data-grid-XH5fGoGj.js} +1344 -1188
- package/dist/data-grid.js +1 -1
- package/dist/{data-list-2xfDpHVC.js → data-list-DZCN_uW1.js} +173 -147
- package/dist/data-list.js +1 -1
- package/dist/date-field-BrNyJBiJ.js +299 -0
- package/dist/date-field.js +1 -1
- package/dist/date-picker-Nl55so0C.js +316 -0
- package/dist/date-picker.js +1 -1
- package/dist/date-range-picker-DLkvfUJD.js +501 -0
- package/dist/date-range-picker.js +1 -1
- package/dist/datetime-field-CZRhRDPb.js +424 -0
- package/dist/datetime-field.js +1 -1
- package/dist/datetime-picker-_GHra2WL.js +662 -0
- package/dist/datetime-picker.js +1 -1
- package/dist/datetime-range-picker-Dy1A0Wqy.js +1029 -0
- package/dist/datetime-range-picker.js +1 -1
- package/dist/description-list-Cc4JYZ-3.js +240 -0
- package/dist/description-list.js +1 -1
- package/dist/{detail-panel-qOJiNuzr.js → detail-panel-BI_wHSoz.js} +103 -95
- package/dist/detail-panel.js +1 -1
- package/dist/dialog-B6MP7GYI.js +537 -0
- package/dist/dialog.js +1 -1
- package/dist/divider-ryFeK0Pi.js +35 -0
- package/dist/divider.js +1 -1
- package/dist/docs/AGENTS.snippet.md +12 -0
- package/dist/docs/alert.json +7 -1
- package/dist/docs/alert.md +3 -3
- package/dist/docs/app-shell.examples.md +1 -1
- package/dist/docs/app-shell.json +5 -5
- package/dist/docs/app-shell.md +2 -2
- package/dist/docs/avatar.json +22 -1
- package/dist/docs/avatar.md +5 -3
- package/dist/docs/badge.json +7 -1
- package/dist/docs/badge.md +3 -3
- package/dist/docs/button-group.json +2 -0
- package/dist/docs/button-group.md +1 -1
- package/dist/docs/button.json +51 -11
- package/dist/docs/button.md +10 -6
- package/dist/docs/calendar.json +8 -1
- package/dist/docs/calendar.md +1 -0
- package/dist/docs/cascader.json +1 -0
- package/dist/docs/cascader.md +1 -1
- package/dist/docs/chart.examples.md +1 -1
- package/dist/docs/chart.json +10 -1
- package/dist/docs/chart.md +3 -2
- package/dist/docs/code-block.json +93 -93
- package/dist/docs/code-block.md +71 -71
- package/dist/docs/collapsible.json +1 -1
- package/dist/docs/collapsible.md +1 -1
- package/dist/docs/combobox.json +1 -0
- package/dist/docs/combobox.md +1 -1
- package/dist/docs/currency-field.json +40 -1
- package/dist/docs/currency-field.md +5 -1
- package/dist/docs/data-grid.examples.md +2 -2
- package/dist/docs/data-grid.json +24 -7
- package/dist/docs/data-grid.md +1 -1
- package/dist/docs/data-grid.props.md +6 -4
- package/dist/docs/data-list.json +2 -1
- package/dist/docs/data-list.md +1 -1
- package/dist/docs/date-field.json +9 -1
- package/dist/docs/date-field.md +3 -2
- package/dist/docs/date-picker.examples.md +29 -0
- package/dist/docs/date-picker.json +16 -1
- package/dist/docs/date-picker.md +2 -1
- package/dist/docs/datetime-field.json +1 -0
- package/dist/docs/datetime-field.md +1 -1
- package/dist/docs/dialog.examples.md +144 -116
- package/dist/docs/dialog.json +35 -11
- package/dist/docs/dialog.md +5 -3
- package/dist/docs/drawer.json +5 -0
- package/dist/docs/drawer.md +1 -0
- package/dist/docs/entity-picker.json +18 -3
- package/dist/docs/entity-picker.md +11 -4
- package/dist/docs/event-calendar.json +7 -0
- package/dist/docs/event-calendar.md +1 -0
- package/dist/docs/filter-bar.json +115 -115
- package/dist/docs/filter-bar.md +78 -78
- package/dist/docs/form.json +2 -1
- package/dist/docs/form.md +1 -1
- package/dist/docs/guidelines/README.md +27 -0
- package/dist/docs/guidelines/async-feedback.md +129 -0
- package/dist/docs/guidelines/browsing.md +74 -0
- package/dist/docs/guidelines/builders.md +97 -0
- package/dist/docs/guidelines/composition.md +143 -0
- package/dist/docs/guidelines/conversations.md +59 -0
- package/dist/docs/guidelines/errors-and-conflicts.md +71 -0
- package/dist/docs/guidelines/forms.md +202 -0
- package/dist/docs/guidelines/index.md +129 -0
- package/dist/docs/guidelines/layout-alignment.md +95 -0
- package/dist/docs/guidelines/ledgers.md +45 -0
- package/dist/docs/guidelines/list-pages.md +206 -0
- package/dist/docs/guidelines/overviews.md +76 -0
- package/dist/docs/guidelines/own-elements.md +115 -0
- package/dist/docs/guidelines/reading-permissions.md +55 -0
- package/dist/docs/guidelines/record-pages.md +178 -0
- package/dist/docs/guidelines/reports.md +123 -0
- package/dist/docs/guidelines/shell-composition.md +94 -0
- package/dist/docs/guidelines/workspaces.md +46 -0
- package/dist/docs/icon.json +3 -1
- package/dist/docs/icon.md +3 -3
- package/dist/docs/index.md +12 -0
- package/dist/docs/inline-message.json +15 -3
- package/dist/docs/inline-message.md +5 -3
- package/dist/docs/list-item.json +9 -1
- package/dist/docs/list-item.md +3 -3
- package/dist/docs/list.json +26 -1
- package/dist/docs/list.md +4 -1
- package/dist/docs/markdown.json +75 -75
- package/dist/docs/markdown.md +63 -63
- package/dist/docs/menu.json +12 -0
- package/dist/docs/menu.md +2 -0
- package/dist/docs/message.json +7 -1
- package/dist/docs/message.md +3 -3
- package/dist/docs/multi-select.json +1 -0
- package/dist/docs/multi-select.md +1 -1
- package/dist/docs/notification-center.json +4 -0
- package/dist/docs/notification-center.md +2 -2
- package/dist/docs/number-field.json +1 -0
- package/dist/docs/number-field.md +1 -1
- package/dist/docs/otp-input.json +1 -0
- package/dist/docs/otp-input.md +1 -1
- package/dist/docs/page-header.json +3 -2
- package/dist/docs/page-header.md +2 -2
- package/dist/docs/page.json +1 -0
- package/dist/docs/page.md +1 -0
- package/dist/docs/popover.json +1 -1
- package/dist/docs/progress-indicator.json +4 -3
- package/dist/docs/progress-indicator.md +4 -4
- package/dist/docs/prompt-composer.json +41 -1
- package/dist/docs/prompt-composer.md +5 -1
- package/dist/docs/rating.json +5 -3
- package/dist/docs/rating.md +5 -5
- package/dist/docs/section.json +26 -14
- package/dist/docs/section.md +14 -8
- package/dist/docs/segmented-control.json +36 -12
- package/dist/docs/segmented-control.md +17 -1
- package/dist/docs/select.json +2 -1
- package/dist/docs/select.md +2 -2
- package/dist/docs/side-navigation.json +3 -2
- package/dist/docs/side-navigation.md +20 -5
- package/dist/docs/skills/build-own-element/SKILL.md +90 -0
- package/dist/docs/skills/compose-screen/SKILL.md +95 -0
- package/dist/docs/skills/index.md +9 -0
- package/dist/docs/skills/review-screen/SKILL.md +77 -0
- package/dist/docs/skills/theme-app/SKILL.md +87 -0
- package/dist/docs/skills/waiting-states/SKILL.md +143 -0
- package/dist/docs/sparkline.json +5 -2
- package/dist/docs/sparkline.md +4 -4
- package/dist/docs/split-button.json +4 -1
- package/dist/docs/split-button.md +3 -3
- package/dist/docs/stat-card.json +5 -1
- package/dist/docs/stat-card.md +3 -3
- package/dist/docs/table.examples.md +14 -18
- package/dist/docs/table.json +94 -5
- package/dist/docs/table.md +14 -1
- package/dist/docs/tabs.examples.md +1 -1
- package/dist/docs/tabs.json +27 -9
- package/dist/docs/tabs.md +6 -3
- package/dist/docs/tag.json +14 -4
- package/dist/docs/tag.md +6 -6
- package/dist/docs/tags-input.json +29 -2
- package/dist/docs/tags-input.md +4 -1
- package/dist/docs/text-field.json +2 -1
- package/dist/docs/text-field.md +2 -2
- package/dist/docs/textarea.examples.md +504 -0
- package/dist/docs/textarea.json +1 -0
- package/dist/docs/textarea.md +2 -498
- package/dist/docs/time-field.json +1 -0
- package/dist/docs/time-field.md +1 -1
- package/dist/docs/timeline.json +136 -130
- package/dist/docs/timeline.md +122 -122
- package/dist/docs/toast.json +7 -1
- package/dist/docs/toast.md +3 -3
- package/dist/docs/toggle-group.json +14 -3
- package/dist/docs/toggle-group.md +3 -3
- package/dist/docs/toggle.json +12 -3
- package/dist/docs/toggle.md +3 -3
- package/dist/docs/tokens.md +467 -0
- package/dist/docs/top-navigation.examples.md +23 -5
- package/dist/docs/top-navigation.json +2 -2
- package/dist/docs/tour.json +1 -1
- package/dist/docs/typography.json +4 -2
- package/dist/docs/typography.md +4 -4
- package/dist/drawer-CkpFlKYa.js +772 -0
- package/dist/drawer.js +1 -1
- package/dist/entity-picker-CFwLGQeU.js +1281 -0
- package/dist/entity-picker.js +2 -2
- package/dist/{event-calendar-BFdeGfC-.js → event-calendar-BDjI5T44.js} +465 -395
- package/dist/event-calendar.js +1 -1
- package/dist/field-CzSGs7wo.js +367 -0
- package/dist/field-group-CCM2vPKL.js +138 -0
- package/dist/field-group.js +1 -1
- package/dist/field.js +1 -1
- package/dist/filter-bar-G50WdRac.js +1340 -0
- package/dist/filter-bar.js +1 -1
- package/dist/{form-vTCQhZM-.js → form-CDq04WDY.js} +96 -87
- package/dist/form.js +1 -1
- package/dist/fullscreen-6GW4naDP.js +190 -0
- package/dist/fullscreen.js +1 -1
- package/dist/grid-l7xi6DUg.js +26 -0
- package/dist/grid.js +1 -1
- package/dist/highlight-9lRPIZ9O.js +59 -0
- package/dist/highlight.js +1 -1
- package/dist/hover-card-aadyPXzF.js +215 -0
- package/dist/hover-card.js +1 -1
- package/dist/icon-DjqSEQ-o.js +75 -0
- package/dist/icon-button-CRB218_z.js +222 -0
- package/dist/icon.js +1 -1
- package/dist/{image-DpDFrrXL.js → image-Ajqo38Uz.js} +24 -20
- package/dist/image.js +1 -1
- package/dist/import-export-center-DUrNwRKP.js +865 -0
- package/dist/import-export-center.js +1 -1
- package/dist/index.js +127 -126
- package/dist/inline-CqF8iT4m.js +17 -0
- package/dist/inline-message-DM7mf2cM.js +119 -0
- package/dist/inline-message.js +2 -2
- package/dist/inline.js +1 -1
- package/dist/kbd-Z4YmSPRy.js +105 -0
- package/dist/kbd.js +1 -1
- package/dist/link-BsSlZ1ts.js +91 -0
- package/dist/link.js +1 -1
- package/dist/list-B7gaPH1U.js +95 -0
- package/dist/list-item-DMeNfokY.js +125 -0
- package/dist/list-item.js +1 -1
- package/dist/list.js +1 -1
- package/dist/listbox-VFcfZT70.js +626 -0
- package/dist/listbox.js +1 -1
- package/dist/loading-overlay-BZPBDK4w.js +218 -0
- package/dist/loading-overlay.js +1 -1
- package/dist/markdown-BmCU_sOv.js +306 -0
- package/dist/markdown.js +1 -1
- package/dist/menu-parts-DS9JEUCt.js +805 -0
- package/dist/menu.js +1 -1
- package/dist/menubar-BV43BKep.js +157 -0
- package/dist/menubar.js +1 -1
- package/dist/message-Dtck9RJy.js +434 -0
- package/dist/message-scroller-niUJ8RoL.js +216 -0
- package/dist/message-scroller.js +1 -1
- package/dist/message.js +1 -1
- package/dist/multi-select-YaxhhH9y.js +1257 -0
- package/dist/multi-select.js +1 -1
- package/dist/navigation-menu-parts-B64gKl8B.js +492 -0
- package/dist/navigation-menu.js +1 -1
- package/dist/notification-center-Ci-OLWTO.js +516 -0
- package/dist/notification-center.js +1 -1
- package/dist/number-field-BYQmPyM-.js +345 -0
- package/dist/number-field.js +1 -1
- package/dist/{otp-input-Bf8JUiVR.js → otp-input-BKO0WPZc.js} +75 -72
- package/dist/otp-input.js +1 -1
- package/dist/page-CfjGviUA.js +179 -0
- package/dist/page-header-w_PFLnLG.js +369 -0
- package/dist/page-header.js +1 -1
- package/dist/page.js +1 -1
- package/dist/pagination-Cm9665gb.js +299 -0
- package/dist/pagination.js +1 -1
- package/dist/popover-D1krYeP-.js +500 -0
- package/dist/popover.js +1 -1
- package/dist/press-selection-DjOllE2B.js +29 -0
- package/dist/press-selection.js +2 -0
- package/dist/progress-indicator-D0acshNn.js +292 -0
- package/dist/progress-indicator.js +1 -1
- package/dist/prompt-composer-sh_TXKYZ.js +273 -0
- package/dist/prompt-composer.js +1 -1
- package/dist/prose-Bl5OjXTb.js +92 -0
- package/dist/prose.js +1 -1
- package/dist/radio-group-D9VTBLUB.js +143 -0
- package/dist/radio-group.js +1 -1
- package/dist/rating-BRqsV5OF.js +501 -0
- package/dist/rating.js +1 -1
- package/dist/result-state-BMYhelu1.js +128 -0
- package/dist/result-state.js +1 -1
- package/dist/saved-views-C_76obIv.js +456 -0
- package/dist/saved-views.js +1 -1
- package/dist/scroll-area-vrm2bbtZ.js +112 -0
- package/dist/scroll-area.js +1 -1
- package/dist/section-DY8yPm11.js +177 -0
- package/dist/section.js +2 -2
- package/dist/segmented-control-5DTOKO3g.js +156 -0
- package/dist/segmented-control.js +1 -1
- package/dist/select-BFx5EgAa.js +1018 -0
- package/dist/{select-tags-CQMcHIQN.js → select-tags-CMe5rzql.js} +11 -1
- package/dist/select.js +1 -1
- package/dist/side-navigation-MNMSkj9b.js +747 -0
- package/dist/side-navigation.js +1 -1
- package/dist/skeleton-DyOwgYmF.js +149 -0
- package/dist/skeleton.js +1 -1
- package/dist/slider-OMe1DAC-.js +264 -0
- package/dist/slider.js +1 -1
- package/dist/sparkline-ChkaLVdY.js +152 -0
- package/dist/sparkline.js +1 -1
- package/dist/split-button-DbmRwfMC.js +136 -0
- package/dist/split-button.js +1 -1
- package/dist/splitter-CspZHJz4.js +293 -0
- package/dist/splitter.js +1 -1
- package/dist/stack-BbgvuQ7m.js +16 -0
- package/dist/stack.js +1 -1
- package/dist/stat-card-BSnsTmsq.js +247 -0
- package/dist/stat-card.js +1 -1
- package/dist/status-indicator-CyKhBdvN.js +78 -0
- package/dist/status-indicator.js +1 -1
- package/dist/stepper-Cw1Auv3n.js +261 -0
- package/dist/stepper.js +1 -1
- package/dist/styles/accordion.css +2 -0
- package/dist/styles/action-bar.css +8 -0
- package/dist/styles/action-sheet.css +8 -0
- package/dist/styles/alert.css +4 -0
- package/dist/styles/app-shell.css +8 -0
- package/dist/styles/aspect-ratio.css +2 -0
- package/dist/styles/attachment.css +8 -0
- package/dist/styles/avatar-group.css +6 -0
- package/dist/styles/avatar.css +4 -0
- package/dist/styles/badge.css +2 -0
- package/dist/styles/breadcrumb.css +4 -0
- package/dist/styles/button-group.css +2 -0
- package/dist/styles/button.css +4 -0
- package/dist/styles/calendar.css +4 -0
- package/dist/styles/card.css +2 -0
- package/dist/styles/carousel.css +4 -0
- package/dist/styles/cascader.css +20 -0
- package/dist/styles/chart.css +10 -0
- package/dist/styles/checkbox-group.css +12 -0
- package/dist/styles/checkbox.css +14 -0
- package/dist/styles/code-block.css +10 -0
- package/dist/styles/collapsible.css +6 -0
- package/dist/styles/color-picker.css +18 -0
- package/dist/styles/column-manager.css +32 -0
- package/dist/styles/combobox.css +12 -0
- package/dist/styles/command-palette.css +14 -0
- package/dist/styles/container.css +2 -0
- package/dist/styles/context-menu.css +8 -0
- package/dist/styles/currency-field.css +10 -0
- package/dist/styles/dashboard-grid.css +20 -0
- package/dist/styles/data-grid.css +64 -0
- package/dist/styles/data-list.css +34 -0
- package/dist/styles/date-field.css +10 -0
- package/dist/styles/date-picker.css +14 -0
- package/dist/styles/date-range-picker.css +14 -0
- package/dist/styles/datetime-field.css +10 -0
- package/dist/styles/datetime-picker.css +14 -0
- package/dist/styles/datetime-range-picker.css +14 -0
- package/dist/styles/description-list.css +6 -0
- package/dist/styles/detail-panel.css +24 -0
- package/dist/styles/dialog.css +4 -0
- package/dist/styles/divider.css +2 -0
- package/dist/styles/drawer.css +4 -0
- package/dist/styles/entity-picker.css +22 -0
- package/dist/styles/event-calendar.css +28 -0
- package/dist/styles/field-group.css +10 -0
- package/dist/styles/field.css +8 -0
- package/dist/styles/filter-bar.css +54 -0
- package/dist/styles/form.css +2 -0
- package/dist/styles/fullscreen.css +4 -0
- package/dist/styles/grid.css +2 -0
- package/dist/styles/highlight.css +2 -0
- package/dist/styles/hover-card.css +6 -0
- package/dist/styles/i18n.css +1 -0
- package/dist/styles/icon.css +2 -0
- package/dist/styles/image.css +6 -0
- package/dist/styles/import-export-center.css +70 -0
- package/dist/styles/index.css +248 -0
- package/dist/styles/inline-message.css +4 -0
- package/dist/styles/inline.css +2 -0
- package/dist/styles/kbd.css +2 -0
- package/dist/styles/link.css +6 -0
- package/dist/styles/list-item.css +6 -0
- package/dist/styles/list.css +2 -0
- package/dist/styles/listbox.css +10 -0
- package/dist/styles/loading-overlay.css +6 -0
- package/dist/styles/markdown.css +34 -0
- package/dist/styles/menu.css +6 -0
- package/dist/styles/menubar.css +8 -0
- package/dist/styles/message-scroller.css +4 -0
- package/dist/styles/message.css +4 -0
- package/dist/styles/multi-select.css +18 -0
- package/dist/styles/navigation-menu.css +4 -0
- package/dist/styles/notification-center.css +16 -0
- package/dist/styles/number-field.css +10 -0
- package/dist/styles/otp-input.css +10 -0
- package/dist/styles/page-header.css +16 -0
- package/dist/styles/page.css +6 -0
- package/dist/styles/pagination.css +4 -0
- package/dist/styles/popover.css +4 -0
- package/dist/styles/press-selection.css +1 -0
- package/dist/styles/progress-indicator.css +4 -0
- package/dist/styles/prompt-composer.css +12 -0
- package/dist/styles/prose.css +2 -0
- package/dist/styles/radio-group.css +12 -0
- package/dist/styles/rating.css +10 -0
- package/dist/styles/result-state.css +2 -0
- package/dist/styles/saved-views.css +20 -0
- package/dist/styles/scroll-area.css +2 -0
- package/dist/styles/section.css +4 -0
- package/dist/styles/segmented-control.css +12 -0
- package/dist/styles/select.css +14 -0
- package/dist/styles/side-navigation.css +14 -0
- package/dist/styles/skeleton.css +4 -0
- package/dist/styles/slider.css +10 -0
- package/dist/styles/sparkline.css +2 -0
- package/dist/styles/split-button.css +12 -0
- package/dist/styles/splitter.css +2 -0
- package/dist/styles/stack.css +2 -0
- package/dist/styles/stat-card.css +8 -0
- package/dist/styles/status-indicator.css +6 -0
- package/dist/styles/stepper.css +6 -0
- package/dist/styles/switch.css +12 -0
- package/dist/styles/table-of-contents.css +8 -0
- package/dist/styles/table.css +60 -0
- package/dist/styles/tabs.css +4 -0
- package/dist/styles/tag.css +4 -0
- package/dist/styles/tags-input.css +12 -0
- package/dist/styles/text-field.css +10 -0
- package/dist/styles/textarea.css +10 -0
- package/dist/styles/theme.css +1 -0
- package/dist/styles/time-field.css +10 -0
- package/dist/styles/time-picker.css +12 -0
- package/dist/styles/time-range-picker.css +12 -0
- package/dist/styles/timeline.css +8 -0
- package/dist/styles/toast.css +8 -0
- package/dist/styles/toggle-group.css +10 -0
- package/dist/styles/toggle.css +2 -0
- package/dist/styles/toolbar.css +8 -0
- package/dist/styles/tooltip.css +2 -0
- package/dist/styles/top-navigation.css +14 -0
- package/dist/styles/tour.css +8 -0
- package/dist/styles/transfer.css +26 -0
- package/dist/styles/tree.css +6 -0
- package/dist/styles/typography.css +2 -0
- package/dist/styles/upload.css +16 -0
- package/dist/styles/visually-hidden.css +2 -0
- package/dist/styles/wizard.css +22 -0
- package/dist/styles.css +1 -1
- package/dist/switch-CQ1rpuKa.js +144 -0
- package/dist/switch.js +1 -1
- package/dist/table-DpGTPtnb.js +1019 -0
- package/dist/table-of-contents-BFVERMZy.js +471 -0
- package/dist/table-of-contents.js +1 -1
- package/dist/table.js +2 -2
- package/dist/tabs-DjEpS9uq.js +361 -0
- package/dist/tabs.js +1 -1
- package/dist/tag-aX7uyAN0.js +374 -0
- package/dist/tag.js +1 -1
- package/dist/tags-input-BgpS22sf.js +729 -0
- package/dist/tags-input.js +1 -1
- package/dist/text-field-DL_uhNXV.js +203 -0
- package/dist/text-field.js +1 -1
- package/dist/textarea-DNCjsQYd.js +100 -0
- package/dist/textarea.js +1 -1
- package/dist/time-field-Cm6iBjwH.js +366 -0
- package/dist/time-field.js +1 -1
- package/dist/time-picker-Ce18FSO2.js +415 -0
- package/dist/time-picker.js +1 -1
- package/dist/time-range-picker-kDnw4PQ3.js +779 -0
- package/dist/time-range-picker.js +1 -1
- package/dist/timeline-pEL30Jp8.js +446 -0
- package/dist/timeline.js +1 -1
- package/dist/{toast-wI8BtPY5.js → toast-58ex8PDK.js} +111 -109
- package/dist/toast.js +1 -1
- package/dist/toggle-group-YxVJlCnI.js +145 -0
- package/dist/toggle-group.js +1 -1
- package/dist/toggle-zDTD5G3H.js +67 -0
- package/dist/toggle.js +1 -1
- package/dist/toolbar-BtIyVbs4.js +241 -0
- package/dist/toolbar.js +1 -1
- package/dist/tooltip-DrFiRlH8.js +411 -0
- package/dist/tooltip.js +1 -1
- package/dist/top-navigation-DorkYBnR.js +744 -0
- package/dist/top-navigation.js +1 -1
- package/dist/tour-CwK_m_Jp.js +809 -0
- package/dist/tour.js +1 -1
- package/dist/transfer-DxGDWIEt.js +606 -0
- package/dist/transfer.js +1 -1
- package/dist/tree-DbLRyItM.js +792 -0
- package/dist/tree.js +1 -1
- package/dist/types/accordion/accordion.d.ts.map +1 -1
- package/dist/types/action-bar/action-bar-overflow.d.ts.map +1 -1
- package/dist/types/action-bar/action-bar-parts.d.ts.map +1 -1
- package/dist/types/action-bar/action-bar.d.ts.map +1 -1
- package/dist/types/action-sheet/action-sheet-parts.d.ts.map +1 -1
- package/dist/types/alert/alert-parts.d.ts.map +1 -1
- package/dist/types/alert/alert.d.ts.map +1 -1
- package/dist/types/alert/alert.types.d.ts +1 -1
- package/dist/types/alert/alert.types.d.ts.map +1 -1
- package/dist/types/app-shell/app-shell-parts.d.ts +6 -4
- package/dist/types/app-shell/app-shell-parts.d.ts.map +1 -1
- package/dist/types/app-shell/app-shell.d.ts.map +1 -1
- package/dist/types/aspect-ratio/aspect-ratio.d.ts.map +1 -1
- package/dist/types/attachment/attachment-parts.d.ts.map +1 -1
- package/dist/types/attachment/attachment.d.ts.map +1 -1
- package/dist/types/avatar/avatar.d.ts +1 -1
- package/dist/types/avatar/avatar.d.ts.map +1 -1
- package/dist/types/avatar/avatar.types.d.ts +10 -1
- package/dist/types/avatar/avatar.types.d.ts.map +1 -1
- package/dist/types/avatar/index.d.ts +1 -1
- package/dist/types/avatar/index.d.ts.map +1 -1
- package/dist/types/avatar-group/avatar-group.d.ts.map +1 -1
- package/dist/types/badge/badge-anchor.d.ts.map +1 -1
- package/dist/types/badge/badge.d.ts.map +1 -1
- package/dist/types/badge/badge.types.d.ts +1 -1
- package/dist/types/badge/badge.types.d.ts.map +1 -1
- package/dist/types/breadcrumb/breadcrumb-parts.d.ts.map +1 -1
- package/dist/types/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/types/breadcrumb/breadcrumb.types.d.ts +2 -1
- package/dist/types/breadcrumb/breadcrumb.types.d.ts.map +1 -1
- package/dist/types/button/button-content.d.ts.map +1 -1
- package/dist/types/button/button-indicator.d.ts.map +1 -1
- package/dist/types/button/button-link.d.ts +1 -1
- package/dist/types/button/button-link.d.ts.map +1 -1
- package/dist/types/button/button-root.d.ts +7 -5
- package/dist/types/button/button-root.d.ts.map +1 -1
- package/dist/types/button/button.constants.d.ts +2 -1
- package/dist/types/button/button.constants.d.ts.map +1 -1
- package/dist/types/button/button.d.ts +1 -1
- package/dist/types/button/button.d.ts.map +1 -1
- package/dist/types/button/button.types.d.ts +11 -3
- package/dist/types/button/button.types.d.ts.map +1 -1
- package/dist/types/button/icon-button.d.ts.map +1 -1
- package/dist/types/button/index.d.ts +1 -1
- package/dist/types/button/index.d.ts.map +1 -1
- package/dist/types/button/toggle-button.d.ts +1 -1
- package/dist/types/button/toggle-button.d.ts.map +1 -1
- package/dist/types/button-group/button-group-separator.d.ts.map +1 -1
- package/dist/types/button-group/button-group.d.ts.map +1 -1
- package/dist/types/calendar/calendar.d.ts +1 -1
- package/dist/types/calendar/calendar.d.ts.map +1 -1
- package/dist/types/calendar/calendar.types.d.ts +9 -0
- package/dist/types/calendar/calendar.types.d.ts.map +1 -1
- package/dist/types/calendar/index.d.ts +1 -1
- package/dist/types/calendar/index.d.ts.map +1 -1
- package/dist/types/card/card-actions.d.ts.map +1 -1
- package/dist/types/card/card-body.d.ts.map +1 -1
- package/dist/types/card/card-footer.d.ts.map +1 -1
- package/dist/types/card/card-header.d.ts.map +1 -1
- package/dist/types/card/card-link.d.ts.map +1 -1
- package/dist/types/card/card-media.d.ts.map +1 -1
- package/dist/types/card/card-selection.d.ts.map +1 -1
- package/dist/types/card/card.d.ts.map +1 -1
- package/dist/types/card/card.types.d.ts +2 -1
- package/dist/types/card/card.types.d.ts.map +1 -1
- package/dist/types/carousel/carousel-parts.d.ts.map +1 -1
- package/dist/types/carousel/carousel.d.ts.map +1 -1
- package/dist/types/cascader/cascader-surface.d.ts.map +1 -1
- package/dist/types/cascader/cascader.d.ts.map +1 -1
- package/dist/types/chart/chart.d.ts.map +1 -1
- package/dist/types/checkbox/checkbox.d.ts.map +1 -1
- package/dist/types/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/types/code-block/code-block.d.ts.map +1 -1
- package/dist/types/collapsible/collapsible-parts.d.ts.map +1 -1
- package/dist/types/collapsible/collapsible.d.ts.map +1 -1
- package/dist/types/color-picker/color-picker.d.ts.map +1 -1
- package/dist/types/column-manager/column-manager.d.ts.map +1 -1
- package/dist/types/combobox/combobox-collection.d.ts +1 -0
- package/dist/types/combobox/combobox-collection.d.ts.map +1 -1
- package/dist/types/combobox/combobox-items.d.ts.map +1 -1
- package/dist/types/combobox/combobox-parts.d.ts.map +1 -1
- package/dist/types/combobox/combobox.d.ts.map +1 -1
- package/dist/types/command-palette/command-palette.d.ts.map +1 -1
- package/dist/types/container/container-breakout.d.ts.map +1 -1
- package/dist/types/container/container.d.ts.map +1 -1
- package/dist/types/context-menu/context-menu.d.ts.map +1 -1
- package/dist/types/currency-field/currency-field-defaults.d.ts.map +1 -1
- package/dist/types/currency-field/currency-field.d.ts +1 -1
- package/dist/types/currency-field/currency-field.d.ts.map +1 -1
- package/dist/types/currency-field/currency-field.types.d.ts +28 -5
- package/dist/types/currency-field/currency-field.types.d.ts.map +1 -1
- package/dist/types/currency-field/index.d.ts +1 -1
- package/dist/types/currency-field/index.d.ts.map +1 -1
- package/dist/types/dashboard-grid/dashboard-grid.d.ts.map +1 -1
- package/dist/types/dashboard-grid/dashboard-widget.d.ts +1 -1
- package/dist/types/dashboard-grid/dashboard-widget.d.ts.map +1 -1
- package/dist/types/data-grid/data-grid-body.d.ts.map +1 -1
- package/dist/types/data-grid/data-grid-context.d.ts +29 -0
- package/dist/types/data-grid/data-grid-context.d.ts.map +1 -1
- package/dist/types/data-grid/data-grid-filter.d.ts.map +1 -1
- package/dist/types/data-grid/data-grid-header.d.ts.map +1 -1
- package/dist/types/data-grid/data-grid.d.ts +1 -1
- package/dist/types/data-grid/data-grid.d.ts.map +1 -1
- package/dist/types/data-grid/data-grid.types.d.ts +24 -1
- package/dist/types/data-grid/data-grid.types.d.ts.map +1 -1
- package/dist/types/data-grid/index.d.ts +1 -1
- package/dist/types/data-grid/index.d.ts.map +1 -1
- package/dist/types/data-list/data-list.d.ts.map +1 -1
- package/dist/types/date-field/date-field.d.ts +1 -1
- package/dist/types/date-field/date-field.d.ts.map +1 -1
- package/dist/types/date-field/date-field.types.d.ts +7 -0
- package/dist/types/date-field/date-field.types.d.ts.map +1 -1
- package/dist/types/date-picker/date-picker.d.ts +5 -1
- package/dist/types/date-picker/date-picker.d.ts.map +1 -1
- package/dist/types/date-picker/date-picker.types.d.ts +20 -2
- package/dist/types/date-picker/date-picker.types.d.ts.map +1 -1
- package/dist/types/date-picker/index.d.ts +1 -1
- package/dist/types/date-picker/index.d.ts.map +1 -1
- package/dist/types/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/types/datetime-field/datetime-field.d.ts.map +1 -1
- package/dist/types/datetime-picker/datetime-picker.d.ts.map +1 -1
- package/dist/types/datetime-range-picker/datetime-range-picker.d.ts.map +1 -1
- package/dist/types/description-list/description-list-parts.d.ts.map +1 -1
- package/dist/types/description-list/description-list.d.ts.map +1 -1
- package/dist/types/detail-panel/detail-panel-parts.d.ts.map +1 -1
- package/dist/types/detail-panel/detail-panel.d.ts.map +1 -1
- package/dist/types/dialog/dialog-demo.d.ts +8 -0
- package/dist/types/dialog/dialog-demo.d.ts.map +1 -1
- package/dist/types/dialog/dialog-parts.d.ts.map +1 -1
- package/dist/types/dialog/dialog.d.ts.map +1 -1
- package/dist/types/dialog/dialog.types.d.ts +12 -2
- package/dist/types/dialog/dialog.types.d.ts.map +1 -1
- package/dist/types/divider/divider.d.ts.map +1 -1
- package/dist/types/drawer/drawer-parts.d.ts.map +1 -1
- package/dist/types/drawer/drawer.d.ts +1 -1
- package/dist/types/drawer/drawer.d.ts.map +1 -1
- package/dist/types/drawer/drawer.types.d.ts +6 -0
- package/dist/types/drawer/drawer.types.d.ts.map +1 -1
- package/dist/types/entity-picker/entity-picker-control.d.ts.map +1 -1
- package/dist/types/entity-picker/entity-picker-option-parts.d.ts +13 -0
- package/dist/types/entity-picker/entity-picker-option-parts.d.ts.map +1 -0
- package/dist/types/entity-picker/entity-picker-popup.d.ts +0 -7
- package/dist/types/entity-picker/entity-picker-popup.d.ts.map +1 -1
- package/dist/types/entity-picker/entity-picker.types.d.ts +8 -0
- package/dist/types/entity-picker/entity-picker.types.d.ts.map +1 -1
- package/dist/types/entity-picker/index.d.ts +1 -0
- package/dist/types/entity-picker/index.d.ts.map +1 -1
- package/dist/types/event-calendar/event-calendar-event.d.ts.map +1 -1
- package/dist/types/event-calendar/event-calendar-list.d.ts.map +1 -1
- package/dist/types/event-calendar/event-calendar-month.d.ts.map +1 -1
- package/dist/types/event-calendar/event-calendar-time-grid.d.ts.map +1 -1
- package/dist/types/event-calendar/event-calendar.d.ts +1 -1
- package/dist/types/event-calendar/event-calendar.d.ts.map +1 -1
- package/dist/types/event-calendar/event-calendar.types.d.ts +6 -0
- package/dist/types/event-calendar/event-calendar.types.d.ts.map +1 -1
- package/dist/types/field/field-parts.d.ts.map +1 -1
- package/dist/types/field/field.d.ts.map +1 -1
- package/dist/types/field-group/field-group-parts.d.ts.map +1 -1
- package/dist/types/field-group/field-group.d.ts.map +1 -1
- package/dist/types/filter-bar/filter-bar-rules.d.ts.map +1 -1
- package/dist/types/filter-bar/filter-bar.d.ts.map +1 -1
- package/dist/types/form/form-parts.d.ts.map +1 -1
- package/dist/types/form/form.d.ts.map +1 -1
- package/dist/types/fullscreen/fullscreen.d.ts.map +1 -1
- package/dist/types/grid/grid.d.ts.map +1 -1
- package/dist/types/highlight/highlight.d.ts.map +1 -1
- package/dist/types/hover-card/hover-card.d.ts.map +1 -1
- package/dist/types/icon/glyph.d.ts.map +1 -1
- package/dist/types/icon/icon.d.ts.map +1 -1
- package/dist/types/icon/icon.types.d.ts +1 -1
- package/dist/types/icon/icon.types.d.ts.map +1 -1
- package/dist/types/image/image.d.ts.map +1 -1
- package/dist/types/import-export-center/import-export-center.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/inline/inline.d.ts.map +1 -1
- package/dist/types/inline-message/index.d.ts +2 -2
- package/dist/types/inline-message/index.d.ts.map +1 -1
- package/dist/types/inline-message/inline-message-defaults.d.ts +1 -1
- package/dist/types/inline-message/inline-message-defaults.d.ts.map +1 -1
- package/dist/types/inline-message/inline-message.d.ts +11 -3
- package/dist/types/inline-message/inline-message.d.ts.map +1 -1
- package/dist/types/inline-message/inline-message.types.d.ts +3 -1
- package/dist/types/inline-message/inline-message.types.d.ts.map +1 -1
- package/dist/types/kbd/key-element.d.ts.map +1 -1
- package/dist/types/kbd/shortcut.d.ts.map +1 -1
- package/dist/types/link/link.d.ts.map +1 -1
- package/dist/types/link/link.types.d.ts +2 -1
- package/dist/types/link/link.types.d.ts.map +1 -1
- package/dist/types/list/index.d.ts +1 -1
- package/dist/types/list/index.d.ts.map +1 -1
- package/dist/types/list/list-parts.d.ts +1 -1
- package/dist/types/list/list-parts.d.ts.map +1 -1
- package/dist/types/list/list.d.ts.map +1 -1
- package/dist/types/list/list.types.d.ts +12 -0
- package/dist/types/list/list.types.d.ts.map +1 -1
- package/dist/types/list-item/list-item-content.d.ts.map +1 -1
- package/dist/types/list-item/list-item-parts.d.ts.map +1 -1
- package/dist/types/list-item/list-item.d.ts.map +1 -1
- package/dist/types/list-item/list-item.types.d.ts +3 -2
- package/dist/types/list-item/list-item.types.d.ts.map +1 -1
- package/dist/types/listbox/listbox-parts.d.ts.map +1 -1
- package/dist/types/listbox/listbox.d.ts.map +1 -1
- package/dist/types/loading-overlay/loading-overlay.d.ts.map +1 -1
- package/dist/types/markdown/markdown.d.ts.map +1 -1
- package/dist/types/menu/index.d.ts +1 -1
- package/dist/types/menu/index.d.ts.map +1 -1
- package/dist/types/menu/menu-defaults.d.ts.map +1 -1
- package/dist/types/menu/menu-items.d.ts.map +1 -1
- package/dist/types/menu/menu-parts.d.ts.map +1 -1
- package/dist/types/menu/menu.d.ts +1 -1
- package/dist/types/menu/menu.d.ts.map +1 -1
- package/dist/types/menu/menu.types.d.ts +13 -1
- package/dist/types/menu/menu.types.d.ts.map +1 -1
- package/dist/types/menubar/menubar.d.ts.map +1 -1
- package/dist/types/message/bubble.d.ts.map +1 -1
- package/dist/types/message/message-parts.d.ts.map +1 -1
- package/dist/types/message/message.d.ts.map +1 -1
- package/dist/types/message/message.types.d.ts +1 -1
- package/dist/types/message/message.types.d.ts.map +1 -1
- package/dist/types/message-scroller/message-scroller.d.ts.map +1 -1
- package/dist/types/multi-select/multi-select-chips.d.ts.map +1 -1
- package/dist/types/multi-select/multi-select-collection.d.ts +0 -2
- package/dist/types/multi-select/multi-select-collection.d.ts.map +1 -1
- package/dist/types/multi-select/multi-select-items.d.ts.map +1 -1
- package/dist/types/multi-select/multi-select-parts.d.ts.map +1 -1
- package/dist/types/multi-select/multi-select.d.ts.map +1 -1
- package/dist/types/navigation-menu/navigation-menu-parts.d.ts.map +1 -1
- package/dist/types/navigation-menu/navigation-menu.d.ts.map +1 -1
- package/dist/types/navigation-menu/navigation-menu.types.d.ts +2 -1
- package/dist/types/navigation-menu/navigation-menu.types.d.ts.map +1 -1
- package/dist/types/notification-center/notification-center.d.ts.map +1 -1
- package/dist/types/notification-center/notification-center.types.d.ts +1 -1
- package/dist/types/notification-center/notification-center.types.d.ts.map +1 -1
- package/dist/types/number-field/number-field.d.ts.map +1 -1
- package/dist/types/otp-input/otp-input.d.ts.map +1 -1
- package/dist/types/page/page.d.ts.map +1 -1
- package/dist/types/page-header/page-header-parts.d.ts +3 -3
- package/dist/types/page-header/page-header-parts.d.ts.map +1 -1
- package/dist/types/page-header/page-header.d.ts.map +1 -1
- package/dist/types/page-header/page-header.types.d.ts +2 -1
- package/dist/types/page-header/page-header.types.d.ts.map +1 -1
- package/dist/types/pagination/pagination-parts.d.ts.map +1 -1
- package/dist/types/pagination/pagination.d.ts.map +1 -1
- package/dist/types/popover/popover-parts.d.ts.map +1 -1
- package/dist/types/press-selection/index.d.ts +3 -0
- package/dist/types/press-selection/index.d.ts.map +1 -0
- package/dist/types/press-selection/press-selection.d.ts +23 -0
- package/dist/types/press-selection/press-selection.d.ts.map +1 -0
- package/dist/types/progress-indicator/progress-bar.d.ts.map +1 -1
- package/dist/types/progress-indicator/progress-circle.d.ts.map +1 -1
- package/dist/types/progress-indicator/progress-indicator.types.d.ts +1 -1
- package/dist/types/progress-indicator/progress-indicator.types.d.ts.map +1 -1
- package/dist/types/progress-indicator/progress-parts.d.ts.map +1 -1
- package/dist/types/progress-indicator/use-progress-indicator.d.ts +6 -0
- package/dist/types/progress-indicator/use-progress-indicator.d.ts.map +1 -1
- package/dist/types/prompt-composer/index.d.ts +1 -1
- package/dist/types/prompt-composer/index.d.ts.map +1 -1
- package/dist/types/prompt-composer/prompt-composer-defaults.d.ts.map +1 -1
- package/dist/types/prompt-composer/prompt-composer.d.ts +1 -1
- package/dist/types/prompt-composer/prompt-composer.d.ts.map +1 -1
- package/dist/types/prompt-composer/prompt-composer.types.d.ts +9 -0
- package/dist/types/prompt-composer/prompt-composer.types.d.ts.map +1 -1
- package/dist/types/prose/prose-parts.d.ts.map +1 -1
- package/dist/types/prose/prose-scroll.d.ts.map +1 -1
- package/dist/types/prose/prose.d.ts.map +1 -1
- package/dist/types/radio-group/radio-group-parts.d.ts.map +1 -1
- package/dist/types/radio-group/radio-group.d.ts.map +1 -1
- package/dist/types/rating/rating-display.d.ts.map +1 -1
- package/dist/types/rating/rating-summary.d.ts.map +1 -1
- package/dist/types/rating/rating.d.ts.map +1 -1
- package/dist/types/rating/rating.types.d.ts +1 -1
- package/dist/types/rating/rating.types.d.ts.map +1 -1
- package/dist/types/result-state/result-state-parts.d.ts.map +1 -1
- package/dist/types/result-state/result-state.d.ts.map +1 -1
- package/dist/types/saved-views/saved-views.d.ts.map +1 -1
- package/dist/types/scroll-area/scroll-area.d.ts.map +1 -1
- package/dist/types/section/index.d.ts +1 -1
- package/dist/types/section/index.d.ts.map +1 -1
- package/dist/types/section/section-parts.d.ts +9 -1
- package/dist/types/section/section-parts.d.ts.map +1 -1
- package/dist/types/section/section.d.ts.map +1 -1
- package/dist/types/segmented-control/index.d.ts +1 -1
- package/dist/types/segmented-control/index.d.ts.map +1 -1
- package/dist/types/segmented-control/segmented-control-defaults.d.ts.map +1 -1
- package/dist/types/segmented-control/segmented-control-parts.d.ts.map +1 -1
- package/dist/types/segmented-control/segmented-control.d.ts +1 -1
- package/dist/types/segmented-control/segmented-control.d.ts.map +1 -1
- package/dist/types/segmented-control/segmented-control.types.d.ts +10 -0
- package/dist/types/segmented-control/segmented-control.types.d.ts.map +1 -1
- package/dist/types/select/select-collection.d.ts +0 -2
- package/dist/types/select/select-collection.d.ts.map +1 -1
- package/dist/types/select/select-items.d.ts.map +1 -1
- package/dist/types/select/select-parts.d.ts.map +1 -1
- package/dist/types/select/select-tags.d.ts.map +1 -1
- package/dist/types/select/select.d.ts.map +1 -1
- package/dist/types/side-navigation/side-navigation-parts.d.ts.map +1 -1
- package/dist/types/side-navigation/side-navigation.d.ts.map +1 -1
- package/dist/types/side-navigation/side-navigation.types.d.ts +2 -1
- package/dist/types/side-navigation/side-navigation.types.d.ts.map +1 -1
- package/dist/types/skeleton/skeleton-region.d.ts.map +1 -1
- package/dist/types/skeleton/skeleton-text.d.ts.map +1 -1
- package/dist/types/skeleton/skeleton.d.ts.map +1 -1
- package/dist/types/slider/slider.d.ts.map +1 -1
- package/dist/types/sparkline/sparkline.d.ts.map +1 -1
- package/dist/types/sparkline/sparkline.types.d.ts +3 -1
- package/dist/types/sparkline/sparkline.types.d.ts.map +1 -1
- package/dist/types/split-button/split-button-parts.d.ts.map +1 -1
- package/dist/types/split-button/split-button.d.ts.map +1 -1
- package/dist/types/splitter/splitter.d.ts.map +1 -1
- package/dist/types/stack/stack.d.ts.map +1 -1
- package/dist/types/stat-card/stat-card-delta.d.ts.map +1 -1
- package/dist/types/stat-card/stat-card-parts.d.ts.map +1 -1
- package/dist/types/stat-card/stat-card-value.d.ts.map +1 -1
- package/dist/types/stat-card/stat-card.d.ts.map +1 -1
- package/dist/types/stat-card/stat-card.types.d.ts +3 -3
- package/dist/types/stat-card/stat-card.types.d.ts.map +1 -1
- package/dist/types/status-indicator/status-indicator.d.ts.map +1 -1
- package/dist/types/stepper/stepper-parts.d.ts.map +1 -1
- package/dist/types/stepper/stepper.d.ts.map +1 -1
- package/dist/types/switch/switch.d.ts.map +1 -1
- package/dist/types/table/index.d.ts +2 -2
- package/dist/types/table/index.d.ts.map +1 -1
- package/dist/types/table/table-content.d.ts.map +1 -1
- package/dist/types/table/table-defaults.d.ts.map +1 -1
- package/dist/types/table/table-filter.d.ts.map +1 -1
- package/dist/types/table/table-parts.d.ts +12 -2
- package/dist/types/table/table-parts.d.ts.map +1 -1
- package/dist/types/table/table.d.ts +1 -1
- package/dist/types/table/table.d.ts.map +1 -1
- package/dist/types/table/table.types.d.ts +43 -1
- package/dist/types/table/table.types.d.ts.map +1 -1
- package/dist/types/table-of-contents/table-of-contents-demo.d.ts.map +1 -1
- package/dist/types/table-of-contents/table-of-contents-parts.d.ts.map +1 -1
- package/dist/types/table-of-contents/table-of-contents.d.ts.map +1 -1
- package/dist/types/table-of-contents/table-of-contents.types.d.ts +2 -1
- package/dist/types/table-of-contents/table-of-contents.types.d.ts.map +1 -1
- package/dist/types/tabs/tabs-parts.d.ts +2 -4
- package/dist/types/tabs/tabs-parts.d.ts.map +1 -1
- package/dist/types/tabs/tabs.d.ts +1 -1
- package/dist/types/tabs/tabs.d.ts.map +1 -1
- package/dist/types/tabs/tabs.types.d.ts +18 -0
- package/dist/types/tabs/tabs.types.d.ts.map +1 -1
- package/dist/types/tag/tag-button.d.ts.map +1 -1
- package/dist/types/tag/tag-chip.d.ts +2 -2
- package/dist/types/tag/tag-chip.d.ts.map +1 -1
- package/dist/types/tag/tag-group.d.ts.map +1 -1
- package/dist/types/tag/tag-link.d.ts.map +1 -1
- package/dist/types/tag/tag-toggle.d.ts.map +1 -1
- package/dist/types/tag/tag.types.d.ts +3 -2
- package/dist/types/tag/tag.types.d.ts.map +1 -1
- package/dist/types/tags-input/tags-input-chips.d.ts.map +1 -1
- package/dist/types/tags-input/tags-input.d.ts +7 -1
- package/dist/types/tags-input/tags-input.d.ts.map +1 -1
- package/dist/types/tags-input/tags-input.types.d.ts +10 -0
- package/dist/types/tags-input/tags-input.types.d.ts.map +1 -1
- package/dist/types/text-field/text-field.d.ts.map +1 -1
- package/dist/types/textarea/textarea.d.ts.map +1 -1
- package/dist/types/time-field/time-field.d.ts.map +1 -1
- package/dist/types/time-picker/time-picker.d.ts.map +1 -1
- package/dist/types/time-range-picker/time-range-picker.d.ts.map +1 -1
- package/dist/types/timeline/timeline-parts.d.ts.map +1 -1
- package/dist/types/timeline/timeline.d.ts.map +1 -1
- package/dist/types/timeline/timeline.types.d.ts +1 -1
- package/dist/types/timeline/timeline.types.d.ts.map +1 -1
- package/dist/types/toast/toast-parts.d.ts.map +1 -1
- package/dist/types/toast/toast.d.ts.map +1 -1
- package/dist/types/toast/toast.types.d.ts +1 -1
- package/dist/types/toast/toast.types.d.ts.map +1 -1
- package/dist/types/toggle/toggle.d.ts.map +1 -1
- package/dist/types/toggle/toggle.types.d.ts +1 -1
- package/dist/types/toggle/toggle.types.d.ts.map +1 -1
- package/dist/types/toggle-group/toggle-group-parts.d.ts.map +1 -1
- package/dist/types/toggle-group/toggle-group.d.ts.map +1 -1
- package/dist/types/toggle-group/toggle-group.types.d.ts +6 -1
- package/dist/types/toggle-group/toggle-group.types.d.ts.map +1 -1
- package/dist/types/toolbar/toolbar-overflow.d.ts.map +1 -1
- package/dist/types/toolbar/toolbar-parts.d.ts.map +1 -1
- package/dist/types/toolbar/toolbar.d.ts.map +1 -1
- package/dist/types/tooltip/tooltip-parts.d.ts.map +1 -1
- package/dist/types/top-navigation/top-navigation-parts.d.ts.map +1 -1
- package/dist/types/top-navigation/top-navigation.d.ts.map +1 -1
- package/dist/types/top-navigation/top-navigation.types.d.ts +8 -7
- package/dist/types/top-navigation/top-navigation.types.d.ts.map +1 -1
- package/dist/types/tour/tour-parts.d.ts.map +1 -1
- package/dist/types/tour/tour.d.ts.map +1 -1
- package/dist/types/transfer/transfer.d.ts.map +1 -1
- package/dist/types/tree/tree-parts.d.ts.map +1 -1
- package/dist/types/tree/tree.d.ts.map +1 -1
- package/dist/types/typography/heading.d.ts +2 -2
- package/dist/types/typography/heading.d.ts.map +1 -1
- package/dist/types/typography/text.d.ts.map +1 -1
- package/dist/types/typography/typography.types.d.ts +1 -1
- package/dist/types/typography/typography.types.d.ts.map +1 -1
- package/dist/types/upload/upload-viewer.d.ts.map +1 -1
- package/dist/types/upload/upload.d.ts.map +1 -1
- package/dist/types/visually-hidden/visually-hidden.d.ts.map +1 -1
- package/dist/types/wizard/wizard-parts.d.ts.map +1 -1
- package/dist/types/wizard/wizard.d.ts.map +1 -1
- package/dist/typography-BESqb4C0.js +93 -0
- package/dist/typography.js +1 -1
- package/dist/upload-CEDsfMWz.js +648 -0
- package/dist/upload.js +1 -1
- package/dist/visually-hidden-BUSrFZ1_.js +15 -0
- package/dist/visually-hidden.js +1 -1
- package/dist/wizard-B3p7zCSj.js +838 -0
- package/dist/wizard.js +1 -1
- package/package.json +24 -11
- package/dist/accordion-D-YuMJzk.js +0 -143
- package/dist/action-sheet-D8Glxl7l.js +0 -347
- package/dist/alert-CP62p9Ul.js +0 -159
- package/dist/app-shell-CXwma4XA.js +0 -836
- package/dist/aspect-ratio-C76l-aoY.js +0 -40
- package/dist/attachment-DdBbQcEB.js +0 -302
- package/dist/avatar-BnlE5jjr.js +0 -100
- package/dist/avatar-group-4rBj99tz.js +0 -47
- package/dist/badge-C6rbwVpu.js +0 -94
- package/dist/breadcrumb-Bf01N4wK.js +0 -218
- package/dist/button-DakQ-7Tm.js +0 -97
- package/dist/button-group-Det_nYor.js +0 -50
- package/dist/calendar-B3mio8iQ.js +0 -387
- package/dist/card-CpVu8PyZ.js +0 -102
- package/dist/carousel-BPi-Y5yF.js +0 -498
- package/dist/cascader-CARCYdHh.js +0 -1097
- package/dist/checkbox-CwUOc-3u.js +0 -139
- package/dist/checkbox-group-BYTjgAcX.js +0 -108
- package/dist/code-block-CFHf8uTm.js +0 -269
- package/dist/collapsible-CGo49NNW.js +0 -217
- package/dist/color-picker-BlPR4g4H.js +0 -504
- package/dist/column-manager-CNZ7Xk5_.js +0 -585
- package/dist/combobox-C46GRqAA.js +0 -852
- package/dist/command-palette-BqRyNR9Y.js +0 -707
- package/dist/container-CjxY6rYv.js +0 -46
- package/dist/context-menu-DMiHdggw.js +0 -150
- package/dist/currency-field-B7OZ0hk7.js +0 -436
- package/dist/dashboard-grid-nfhEewA4.js +0 -1005
- package/dist/date-field-D_kLLTfL.js +0 -279
- package/dist/date-picker-DQ5SIhdA.js +0 -264
- package/dist/date-range-picker-lpB08hK_.js +0 -471
- package/dist/datetime-field-T1gNdJ7t.js +0 -411
- package/dist/datetime-picker-0F0kDW-8.js +0 -629
- package/dist/datetime-range-picker-ClnEleth.js +0 -994
- package/dist/description-list-IYLnFgHT.js +0 -232
- package/dist/dialog-Dmy-m_pe.js +0 -499
- package/dist/divider-D36Jqo0J.js +0 -33
- package/dist/drawer-Ci3wuCVa.js +0 -758
- package/dist/entity-picker-UGhbVwkC.js +0 -1111
- package/dist/field-BJh5HI7w.js +0 -365
- package/dist/field-group-BDaspQPh.js +0 -138
- package/dist/filter-bar-b2Q9BZHf.js +0 -1335
- package/dist/fullscreen-CF0UN4mv.js +0 -187
- package/dist/grid-CIkG_2IQ.js +0 -25
- package/dist/highlight-0Qw23QPp.js +0 -57
- package/dist/hover-card-CSDbA6zd.js +0 -214
- package/dist/icon-T9Yt4tnm.js +0 -73
- package/dist/icon-button-TnvMhK4o.js +0 -211
- package/dist/import-export-center-D8xbCLWs.js +0 -813
- package/dist/inline-D_IjcJ1n.js +0 -16
- package/dist/inline-message-C4a-A2mw.js +0 -91
- package/dist/kbd-eFSWTKxN.js +0 -100
- package/dist/link-TjvRl2VQ.js +0 -87
- package/dist/list-C1Y8MWp2.js +0 -87
- package/dist/list-item-DN_mcouU.js +0 -123
- package/dist/listbox-4WvqR0JF.js +0 -615
- package/dist/loading-overlay-B83XFctM.js +0 -208
- package/dist/markdown-CpfDn1LF.js +0 -295
- package/dist/menu-parts-BQej6eU9.js +0 -787
- package/dist/menubar-CtGavUTO.js +0 -156
- package/dist/message-Cp0rLCyW.js +0 -430
- package/dist/message-scroller-UZjFpflz.js +0 -214
- package/dist/multi-select-CfzsvAeI.js +0 -1193
- package/dist/navigation-menu-parts-D8qFAwHX.js +0 -492
- package/dist/notification-center-C4pEHJ3h.js +0 -485
- package/dist/number-field-J_koud1r.js +0 -342
- package/dist/page-header-CWEBfMGq.js +0 -367
- package/dist/page-kQgLctsA.js +0 -167
- package/dist/pagination-DWJc521r.js +0 -292
- package/dist/popover-DE22lSpV.js +0 -476
- package/dist/progress-indicator-DwvUSFFs.js +0 -269
- package/dist/prompt-composer-B7MMcER0.js +0 -259
- package/dist/prose-CkeNYS0X.js +0 -91
- package/dist/radio-group-BFpjhDkV.js +0 -140
- package/dist/rating-D1EsADFM.js +0 -459
- package/dist/react-dom-DzrKNxo6.js +0 -273
- package/dist/result-state-CZsQfdN4.js +0 -126
- package/dist/saved-views-BueW-Lyb.js +0 -446
- package/dist/scroll-area-BriwmvYY.js +0 -111
- package/dist/section-Be7dX9MC.js +0 -176
- package/dist/segmented-control-Cy_5D3Nj.js +0 -149
- package/dist/select-UTwKjheK.js +0 -957
- package/dist/side-navigation-YUiJRpng.js +0 -729
- package/dist/skeleton-2LSpg84Z.js +0 -143
- package/dist/slider-B432T6nD.js +0 -256
- package/dist/sparkline-rY7HIFE4.js +0 -131
- package/dist/split-button-DHF3v3PJ.js +0 -135
- package/dist/splitter-Bg3UgmbV.js +0 -289
- package/dist/stack-BEFavbRs.js +0 -15
- package/dist/stat-card-BG7uLytP.js +0 -244
- package/dist/status-indicator-BOjpXkU5.js +0 -73
- package/dist/stepper-DQJuRWqR.js +0 -253
- package/dist/switch-4MHwKmkz.js +0 -138
- package/dist/table-CzBIw9ng.js +0 -970
- package/dist/table-of-contents-DfAeYtFJ.js +0 -461
- package/dist/tabs-DQ36APY-.js +0 -343
- package/dist/tag-DjtW53xN.js +0 -365
- package/dist/tags-input-DLdHLWrH.js +0 -625
- package/dist/text-field-BktZbmzD.js +0 -195
- package/dist/textarea-JAK2RJl0.js +0 -99
- package/dist/time-field-DCG_VtGO.js +0 -355
- package/dist/time-picker-DuT1tf5-.js +0 -396
- package/dist/time-range-picker-HwBvrrXN.js +0 -745
- package/dist/timeline-DH_02ysz.js +0 -421
- package/dist/toggle-CBFhM4Jh.js +0 -64
- package/dist/toggle-group-DQBlI1TV.js +0 -140
- package/dist/toolbar-CDQTydDx.js +0 -240
- package/dist/tooltip-BggqPDcW.js +0 -393
- package/dist/top-navigation-COQZsNqW.js +0 -740
- package/dist/tour-C11DmYTC.js +0 -799
- package/dist/transfer-JA9TWjAw.js +0 -596
- package/dist/tree-C6fYJqT9.js +0 -783
- package/dist/typography-B2iaigEC.js +0 -92
- package/dist/upload-Bq_UiyMr.js +0 -613
- package/dist/visually-hidden-CE6u5JLW.js +0 -14
- package/dist/wizard-B4GrlEqh.js +0 -815
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
topic: browsing
|
|
3
|
+
prefix: BR
|
|
4
|
+
triggers:
|
|
5
|
+
[
|
|
6
|
+
tree,
|
|
7
|
+
category,
|
|
8
|
+
categories,
|
|
9
|
+
hierarchy,
|
|
10
|
+
branch,
|
|
11
|
+
leaf,
|
|
12
|
+
taxonomy,
|
|
13
|
+
browse,
|
|
14
|
+
facet,
|
|
15
|
+
drill,
|
|
16
|
+
place,
|
|
17
|
+
scope,
|
|
18
|
+
breadcrumb,
|
|
19
|
+
count,
|
|
20
|
+
grain,
|
|
21
|
+
catalogue,
|
|
22
|
+
]
|
|
23
|
+
families: [tree, breadcrumb, page-header, filter-bar, data-grid]
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Browsing
|
|
27
|
+
|
|
28
|
+
How a reader moves through a set that is arranged rather than listed: a tree
|
|
29
|
+
of categories over a list of records, and one concept a backend answers for at
|
|
30
|
+
two grains. The library gives `tree` a hierarchy with a keyboard and a query,
|
|
31
|
+
`breadcrumb` a trail and `filter-bar` a tree of conditions; it does not say
|
|
32
|
+
whether a branch is a filter or a place, which of a node's two counts a row
|
|
33
|
+
draws, or how a list that reads products and a list that reads stock lead to
|
|
34
|
+
each other.
|
|
35
|
+
|
|
36
|
+
### BR-01 · A branch is the list's place, not one of its pills
|
|
37
|
+
|
|
38
|
+
Level: SHOULD
|
|
39
|
+
Applies to: a list reached by choosing a node in a `tree`, and the `filter-bar` above that list
|
|
40
|
+
Rule: The branch a reader chose is the list's heading and its `breadcrumb`; the filter bar keeps the facets and holds no pill for it.
|
|
41
|
+
Why: A place is where the reader is and a facet is what they asked for; a branch drawn as a pill reads as one condition among many, and the way back out of it becomes a chip to delete rather than a trail to walk.
|
|
42
|
+
Do: Name the list after the branch, put the trail from the catalogue's root in the header's breadcrumb with every ancestor a link, and narrow the query from the place rather than from the bar. The way out is the trail's first crumb, which names the whole set.
|
|
43
|
+
Don't: Write the branch into the bar's tree, or leave the list titled after the resource while its rows come from one branch.
|
|
44
|
+
Check: Open a branch from the tree: the heading is the branch's name, the trail stands above it, and the bar's pill count is unchanged.
|
|
45
|
+
|
|
46
|
+
### BR-02 · A place holds what is under it, and says how much of it there is
|
|
47
|
+
|
|
48
|
+
Level: MUST
|
|
49
|
+
Applies to: a list narrowed to a branch of a hierarchy
|
|
50
|
+
Rule: The query covers the branch and every node beneath it, and the page states how many nodes that is beside how many records they hold.
|
|
51
|
+
Why: A backend that files a record on a leaf answers nothing for the branch above it; a list that asked for the branch alone would tell a reader a whole department is empty, and a list that asks for the subtree without saying so leaves a count nobody can reconcile with the tree.
|
|
52
|
+
Do: Read the hierarchy before the rows, send the branch and its descendants as one condition, and write the sentence under the title: how many records the place holds, how many nodes it covers, and how many the whole set holds.
|
|
53
|
+
Don't: Narrow to the chosen node alone, or state a count without saying what it is counted over.
|
|
54
|
+
Check: Open a branch whose own records are none: the list is not empty and the sentence names the nodes it covers.
|
|
55
|
+
|
|
56
|
+
### BR-03 · A node's own count and its branch's count are two numbers
|
|
57
|
+
|
|
58
|
+
Level: MUST
|
|
59
|
+
Applies to: a count drawn on a `tree` node
|
|
60
|
+
Rule: The number on a row is one of the two and the screen says which; where a node holds records of its own and has nodes under it, the second number is said apart from the first.
|
|
61
|
+
Why: The two answer different questions — how big this branch is, and how much is filed at this level — and a tree that prints one of them without saying which is read as the other.
|
|
62
|
+
Do: Put the branch's whole count in the row's trailing cell, the one the family keeps at its intrinsic width, and say in the region's own words what that number counts. Where a node also holds records directly, say how many on the row's second line, which the family already draws in the muted step.
|
|
63
|
+
Don't: Draw the backend's own field without adding the descendants, or print two bare numbers on one row.
|
|
64
|
+
Check: A branch whose records are all on its leaves shows the leaves' total, not nought.
|
|
65
|
+
|
|
66
|
+
### BR-04 · One concept at two grains is two lists that name each other
|
|
67
|
+
|
|
68
|
+
Level: SHOULD
|
|
69
|
+
Applies to: a resource the backend answers for at two grains — a family header and the item that is counted, ordered and priced
|
|
70
|
+
Rule: Each grain is its own route with its own columns and its own filters, and each page names the other above its rows.
|
|
71
|
+
Why: The two grains are asked different questions and filtered by different fields; one bar cannot hold both sets of conditions, and a reader looking for what is below its reorder point is not looking for a family header.
|
|
72
|
+
Do: Give each list the filters its own resource offers, say in one sentence what the grain is and what the other one is for, and carry the reader's place from one to the other so a branch survives the move.
|
|
73
|
+
Don't: Put a view switch over one filter bar whose fields belong to one of the two, or leave the second grain reachable only through a record of the first.
|
|
74
|
+
Check: The two routes are in the navigation, each header links to the other, and a place chosen on one is still the place on the other.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
topic: builders
|
|
3
|
+
prefix: BD
|
|
4
|
+
triggers:
|
|
5
|
+
[
|
|
6
|
+
builder,
|
|
7
|
+
rule,
|
|
8
|
+
rule builder,
|
|
9
|
+
condition,
|
|
10
|
+
condition tree,
|
|
11
|
+
nested group,
|
|
12
|
+
workflow,
|
|
13
|
+
automation,
|
|
14
|
+
designer,
|
|
15
|
+
definition,
|
|
16
|
+
and,
|
|
17
|
+
or,
|
|
18
|
+
drag,
|
|
19
|
+
reorder,
|
|
20
|
+
move,
|
|
21
|
+
limit,
|
|
22
|
+
depth,
|
|
23
|
+
flow,
|
|
24
|
+
trace,
|
|
25
|
+
run history,
|
|
26
|
+
]
|
|
27
|
+
families: [segmented-control, select, multi-select, menu, inline-message, typography]
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# Builders
|
|
31
|
+
|
|
32
|
+
How a screen lets a person write a rule the system runs later — a trigger, a
|
|
33
|
+
tree of conditions, the actions — and how that rule is read by someone who
|
|
34
|
+
cannot change it. The library gives `filter-bar` a builder for a filter
|
|
35
|
+
applied to a list, `menu` a place for a node's commands and the field families
|
|
36
|
+
an operand; it does not say how a stored rule reads aloud, where a limit the
|
|
37
|
+
backend enforces is said, or how a tree narrows to a phone.
|
|
38
|
+
|
|
39
|
+
### BD-01 · A definition reads as a rule before a form
|
|
40
|
+
|
|
41
|
+
Level: SHOULD
|
|
42
|
+
Applies to: a stored rule — a workflow's trigger, conditions and actions — on its record
|
|
43
|
+
Rule: The record shows the rule as it reads — When, If, Then, Otherwise — every later line of the condition tree led by its join in words and every nested group opened by its own ("any of:", "all of:"); the editor opens from that reading in the section it is read in; a reader without the permission to edit reads the rule and is not shown an editor.
|
|
44
|
+
Why: A rule shown only as a form makes a reader who cannot edit it decode disabled controls, and makes one who can open an editor to learn what the rule does.
|
|
45
|
+
Do: Set the trigger beside "When", the conditions the way a query is set — the join in a column of its own at the start of each later line, a group's children stepped in one step under the line that opens it, a guide down every level — and the actions numbered under "Then". The editor is a query parameter of the record (FM-12) and stands in the same section (FM-07).
|
|
46
|
+
Don't: Draw the editor in a read-only state for a reader, or join the conditions by colour, a border or indentation alone.
|
|
47
|
+
Check: Open a stored rule as a reader who may edit it and as one who may not: both read When, If, Then, Otherwise with every later line led by its join in words, and only the first is offered the editor.
|
|
48
|
+
|
|
49
|
+
### BD-02 · A structural limit is said before it is reached
|
|
50
|
+
|
|
51
|
+
Level: SHOULD
|
|
52
|
+
Applies to: a builder whose backend limits the tree — conditions per rule, levels of nesting
|
|
53
|
+
Rule: Under the tree the builder states what it holds and what remains of each limit, and a control that would cross a limit is disabled with the limit as its stated reason.
|
|
54
|
+
Why: A limit met only as a refusal after the save is a tree written past what the backend accepts, and a control that silently does nothing at the limit reads as a broken control.
|
|
55
|
+
Do: Write one line under the root: the conditions and levels used of their maxima, and how many more of each can be added. At a limit, the add control in the group's foot is disabled and the same item in the group's `menu` carries the limit in its `description`.
|
|
56
|
+
Don't: Let the add control stay live at the limit and answer with the backend's refusal.
|
|
57
|
+
Check: Fill a tree to one of its limits: the line under the tree says nothing remains of it, and each control that would cross it is disabled with the limit as its reason.
|
|
58
|
+
|
|
59
|
+
### BD-03 · A refusal that names no node is marked at the node before the request
|
|
60
|
+
|
|
61
|
+
Level: MUST
|
|
62
|
+
Applies to: a tree the backend validates and refuses under one field, with no path to the node
|
|
63
|
+
Rule: The builder runs the backend's own check on every change and, once a save is tried, marks each node it would refuse with its message before any request is sent; a group with nothing in it is marked from the moment it is empty.
|
|
64
|
+
Why: After the request the screen knows only that the conditions were refused, not which of fifty; before it, the same check knows the node.
|
|
65
|
+
Do: Run the backend's validation code in the browser rather than writing a second one, key its issues by the node's path, outline the node and put the message under it, and keep the form's summary for the same messages (FM-03).
|
|
66
|
+
Don't: Send the tree and translate the backend's list of messages back onto nodes, or mark every node as invalid while the reader is still writing.
|
|
67
|
+
Check: Save a tree that holds an empty group and a node past a limit: each is marked at its node with its message, and the network log holds no request.
|
|
68
|
+
|
|
69
|
+
### BD-04 · The keyboard and the pointer make the same moves
|
|
70
|
+
|
|
71
|
+
Level: SHOULD
|
|
72
|
+
Applies to: moving the nodes of a tree — up, down, into the group above, out of the group
|
|
73
|
+
Rule: Every node's menu carries its moves and its removal, the grip's drag makes the same moves, and both refuse the same places — a group into itself, a level past the limit — with the reason said.
|
|
74
|
+
Why: A drag with no menu shuts out the keyboard and a phone's scrolling finger, and two code paths with two sets of boundaries let one of them build a tree the other refuses.
|
|
75
|
+
Do: Compute every move from one function over the tree and its limits; disable a menu move that would be refused, with the reason as the item's `description`; outline the place a drag is over when it is refused and announce the reason politely; keep the focus on the moved node's menu after a keyboard move.
|
|
76
|
+
Don't: Offer dragging alone, or let the drop answer with a backend refusal.
|
|
77
|
+
Check: Move one node with the keyboard from its menu and the same node by its grip: both reach the same places, both refuse a group dropped into itself with the reason said, and after the keyboard move the focus is on the node's menu.
|
|
78
|
+
|
|
79
|
+
### BD-05 · A tree narrows by stepping in, never by scrolling
|
|
80
|
+
|
|
81
|
+
Level: SHOULD
|
|
82
|
+
Applies to: a nested builder below the width its rows' three controls need, at 570 pixels and on a phone
|
|
83
|
+
Rule: Each level steps in by one space step behind a rule, and below the width a condition's field, operator and value fit on one line the field takes its own line and the operator and the value share the next; the tree never scrolls sideways.
|
|
84
|
+
Why: A tree five levels deep that indents by a column, or keeps three controls on one line, is wider than a phone, and a builder that scrolls sideways hides the join of the level the reader is in.
|
|
85
|
+
Do: Make the builder a container and switch the row's grid on its own width (OE-09), keep the grip and the node's menu at the row's two ends with the words between them wrapping, and leave the operator's popup to the family, which keeps it inside the viewport.
|
|
86
|
+
Don't: Indent by more than one space step per level, or give the tree a horizontal scroller.
|
|
87
|
+
Check: At 390 and 360 pixels open a tree five levels deep: nothing scrolls sideways, each level steps in by one space step, and a condition's field stands on its own line.
|
|
88
|
+
|
|
89
|
+
### BD-06 · A rule's record shows what flowed through it, and the rule carries its own figures
|
|
90
|
+
|
|
91
|
+
Level: SHOULD
|
|
92
|
+
Applies to: a stored rule's record, its run history and its editor — a trigger, a decision over a condition tree, the actions in order
|
|
93
|
+
Rule: The record opens on how the rule runs — every event of a stated period split where the conditions decide, the events let through split again by how their run ended, each band as thick as the events in it, the three totals over its columns — and then the rule itself, with each step's own figure at the end of its line. A run opens on the same rule as its trace, the rail lit as far as the run went; the editor, where the container has room, sets the draft the same way beside the form.
|
|
94
|
+
Why: Read as text, the rule says what it does and not how often; read as rows, the history says what happened and not where in the rule. The split by volume answers the first question a reader of a rule brings — how much of what arrives does it act on — in one look, and the figure at the end of each line answers where.
|
|
95
|
+
Do: Draw the split as an element of the screen's own (OE-01) from the measured width, with the figures in words over it. Set the rule as a sheet of four lines — When, If, Then, Otherwise — down a rail, the figures in an end column aligned across the lines, and no card, tile or badge around a step. Narrow, stand each label over its step and the end column under it.
|
|
96
|
+
Don't: Build the flow from stat cards, tiles and tags; give a figure only by a band's thickness or a tone; keep a second rendering of the rule for the trace and the preview.
|
|
97
|
+
Check: Open a rule's record: the split of its period's events comes before the rule with its totals in words, each line of the rule ends in its own figure, a run opens on the same rule lit as far as it went, and at 390 pixels nothing scrolls sideways.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
topic: composition
|
|
3
|
+
prefix: CP
|
|
4
|
+
triggers:
|
|
5
|
+
[
|
|
6
|
+
slot,
|
|
7
|
+
part,
|
|
8
|
+
anatomy,
|
|
9
|
+
where,
|
|
10
|
+
place,
|
|
11
|
+
compose,
|
|
12
|
+
wrap,
|
|
13
|
+
body,
|
|
14
|
+
header,
|
|
15
|
+
inside,
|
|
16
|
+
beside,
|
|
17
|
+
own element,
|
|
18
|
+
custom,
|
|
19
|
+
creative,
|
|
20
|
+
bespoke,
|
|
21
|
+
no family,
|
|
22
|
+
token,
|
|
23
|
+
literal,
|
|
24
|
+
hard-coded,
|
|
25
|
+
]
|
|
26
|
+
families:
|
|
27
|
+
[
|
|
28
|
+
page-header,
|
|
29
|
+
app-shell,
|
|
30
|
+
top-navigation,
|
|
31
|
+
popover,
|
|
32
|
+
drawer,
|
|
33
|
+
dialog,
|
|
34
|
+
tabs,
|
|
35
|
+
toolbar,
|
|
36
|
+
inline,
|
|
37
|
+
stack,
|
|
38
|
+
grid,
|
|
39
|
+
typography,
|
|
40
|
+
]
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
# Composition
|
|
44
|
+
|
|
45
|
+
Where a consumer's element goes in relation to a family: in a slot the family
|
|
46
|
+
names, or beside the family as a block of the consumer's own. Every family
|
|
47
|
+
publishes its anatomy — the parts it draws and the slots it leaves for the
|
|
48
|
+
consumer — and a screen that improvises a block where a slot exists loses what
|
|
49
|
+
the slot carries: a position, a sticky edge, a fold, a keyboard order.
|
|
50
|
+
|
|
51
|
+
### CP-01 · A slot the family names before a block of your own
|
|
52
|
+
|
|
53
|
+
Level: MUST
|
|
54
|
+
Applies to: any element a page places inside or beside a family — a tab strip, a toolbar, a search field, a workspace row, a footer link
|
|
55
|
+
Rule: Before writing an element next to a family, the family's anatomy is read; when it names a slot for that element, the element stands in the slot.
|
|
56
|
+
Why: The slot is where the family's promises hold — the header's tabs stay pinned, the bar's search folds, the column's header takes the row inset; a block written beside the family carries none of them and reads as a defect of the family.
|
|
57
|
+
Do: Open the reference page's anatomy table and match the element to a part described as "the slot a … sits in". Compose with the family's own members; wrap a family's part in a component of the page's own only when the host has no box.
|
|
58
|
+
Don't: Place a family's content as the first block of a body, a sibling of the family or a child of the wrong part because the markup is shorter that way.
|
|
59
|
+
Check: For every element of the page's own inside a family's root, the family's anatomy names the part it stands in; every "slot a … sits in" the page needs is used rather than imitated.
|
|
60
|
+
|
|
61
|
+
### CP-02 · Siblings of the page's own stand in a layout family
|
|
62
|
+
|
|
63
|
+
Level: MUST
|
|
64
|
+
Applies to: two or more elements a page writes beside each other with no family between them — a name and a badge, a run of tags, the lines of an address, a figure and its caption
|
|
65
|
+
Rule: Sibling elements of the page's own stand in `inline` (one row) or `stack` (one column) with a gap from the space scale, and text of the page's own takes its size from the typography family; bare inline siblings and bare text are not written.
|
|
66
|
+
Why: Two inline elements with nothing between them touch, and a badge beside a word sits on the text baseline rather than the row's centre; bare text takes the document's 16-pixel body size inside a region whose families set 13.
|
|
67
|
+
Do: Wrap the run in `inline` (centre-aligned by default, a two-step gap for marks beside a word) and each line of a block in `stack`; give every span of the page's own the typography family's `size`. The families' own parts — a list item's label, a cell's value, a description — already carry their size and gap and need none of this.
|
|
68
|
+
Don't: Write a name and a `badge` run together as text in a cell, a `description-list` value holding three tags with nothing between them, or address lines as plain spans.
|
|
69
|
+
Check: Every element of the page's own that has a sibling is a child of `inline` or `stack`; no bare span inside a family's part carries the body size.
|
|
70
|
+
|
|
71
|
+
### CP-03 · A track that holds a family states a zero minimum
|
|
72
|
+
|
|
73
|
+
Level: MUST
|
|
74
|
+
Applies to: a `grid` or a flex line of the page's own holding a family that scrolls its own content — `table`, `data-grid`, `scroll-area`
|
|
75
|
+
Rule: The track the family stands in is written with a zero minimum (`minmax(0, 1fr)`, or `min-inline-size: 0` on a flex child), so the family's scroller is what scrolls.
|
|
76
|
+
Why: A track is `auto` by default and a grid item's minimum is its content, so a table wider than the page stretches the track and pushes every sibling — the figures, the header — out of the frame, instead of scrolling inside the scroller the family already draws.
|
|
77
|
+
Do: State the single column as `minmax(0, 1fr)` on the region that holds the listing, and let the family's `scroll` part take the overflow.
|
|
78
|
+
Don't: Rely on the family to constrain itself: it cannot measure a parent that grows with it.
|
|
79
|
+
Check: At 1280 with the widest tab open, the page's scroll width equals the viewport and the family's own scroller is the only thing wider than its box.
|
|
80
|
+
|
|
81
|
+
### CP-04 · Where no family answers the problem, the screen composes its own
|
|
82
|
+
|
|
83
|
+
Level: MAY
|
|
84
|
+
Applies to: a problem no published family covers — two versions of one value side by side, a step of a lifecycle drawn on a row, a figure with its own shape, a summary that is neither a list nor a table
|
|
85
|
+
Rule: When the families' anatomies have been read and none of them answers the problem, the screen writes an element of its own rather than bending a family into a shape it does not have.
|
|
86
|
+
Why: A family used against its anatomy reads as a defect of the library — a `list-item` made to hold a chart, a `badge` made to hold a sentence — and the screen still does not answer the problem; a screen that draws only what a family draws cannot answer anything the library has not met yet.
|
|
87
|
+
Do: Read the anatomies first, and name the one that came closest and what it does not carry (CP-01 is the earlier question, not a veto). Then compose: the layout families for the arrangement (`inline`, `stack`, `grid`), the families that do fit for the parts they own, the typography family for every word, and the theme's tokens for every value the element paints (CP-05). The element takes one of three shapes, and each is legitimate — a block in the screen's template, a component of the screen's own named after what it shows, or a component the module's screens share — and it carries the state attributes the vocabulary already has, so it reads as part of the system. A screen whose problem is dense is expected to reach this rule: a flagship screen composed only of untouched families is usually a screen that gave up on its problem. Add a ledger row when a family would plausibly have covered the case: that row is what grows the library.
|
|
88
|
+
Don't: Reach for the nearest family and override its stylesheet; copy a family's parts into markup of your own; or leave the problem half-answered because no family draws it.
|
|
89
|
+
Check: For every element of the page's own, the family that came closest is named in a comment or a ledger row, and what it does not carry is named as a **part of its anatomy** — not as an impression of its examples. A claim that a family "does not do this" which its anatomy table contradicts is the defect; the approval chain was written by hand beside `timeline`, whose `rail`, `marker` and `connector` are exactly that shape, and the hand-drawn thread broke on the first step that carried a comment.
|
|
90
|
+
|
|
91
|
+
### CP-05 · An element of the page's own is built from the theme's tokens
|
|
92
|
+
|
|
93
|
+
Level: MUST
|
|
94
|
+
Applies to: any CSS a screen writes for an element of its own, under CP-04 or beside a family
|
|
95
|
+
Rule: Every value the element paints comes from the theme — space, type, ink, border, radius, elevation and motion — where the theme has a token for it; a literal is written only beside a comment that says what decided it and why no token covers it.
|
|
96
|
+
Why: A literal is what makes a screen look adjacent to the product rather than part of it: it ignores the scheme switch, the three densities and the theme's own retuning, and it is the first thing that drifts when the theme moves.
|
|
97
|
+
Do: Read `--slotted-space-*` for every gap and inset, `--slotted-text-*` and `--slotted-surface-*` for ink and ground, the typography family's `size` for every word, and the published measures of the family the element stands in — `--slotted-app-shell-row-inset` inside the navigation column, the control heights beside a control. Some values have no token and never will: a measure a column is capped at, a container query's step, an optical nudge of a pixel, the geometry of a shape the screen draws. Write those, in rem where the value scales with the type and in pixels where it does not, and put the reason beside them — the check reads that comment and passes. The escape is for a value the theme does not hold, not for a value it does.
|
|
98
|
+
Don't: Write a hex colour, a font size or a gap the theme already holds a token for, and do not read another family's private custom property. A literal with no reason beside it is the defect this rule is about; a reasoned one is a decision the next reader can weigh.
|
|
99
|
+
Check: Read every stylesheet of the screen, skipping media and container queries, hairlines and any line whose comment gives its reason: no colour, type size or gap remains that a theme token covers.
|
|
100
|
+
|
|
101
|
+
### CP-06 · A state the family already draws is not drawn again
|
|
102
|
+
|
|
103
|
+
Level: SHOULD
|
|
104
|
+
Applies to: the axes a screen passes to a family — `variant`, `tone`, `size`, `current`, `complete` — and any mark a screen adds beside a part the family fills
|
|
105
|
+
Rule: A screen states a state once. Where the family has a state for it, the screen sets that state and adds nothing louder beside it.
|
|
106
|
+
Why: The second statement is never the same size as the first: `current` on a `timeline` item draws a target, and the `solid` `variant` over it adds a halo two rules wide that crowds the title; a `badge` beside a description that already says "Waiting on this role" says it twice at two weights.
|
|
107
|
+
Do: Set the state the family names, read what it draws, and stop. Where an axis is passed as well, the screen can say what that axis adds which the state does not already carry.
|
|
108
|
+
Don't: Reach for the loudest variant to make a state visible, or add a mark beside a part that already carries the words.
|
|
109
|
+
Check: For every axis a screen passes to a family, the screen can name what it adds beyond the family's own state.
|
|
110
|
+
|
|
111
|
+
### CP-07 · A page's width is its type's
|
|
112
|
+
|
|
113
|
+
Status: retired · rewritten as CP-10, which gives every destination one width
|
|
114
|
+
|
|
115
|
+
### CP-08 · A control that changes mode keeps every box where it was
|
|
116
|
+
|
|
117
|
+
Level: MUST
|
|
118
|
+
Applies to: a segmented control, a tab or a toggle that switches what one region holds — a reply or an internal note, one view or another — and the text beside it
|
|
119
|
+
Rule: Switching the mode changes the words and the values in the region, never the size, the line count or the position of any box in it or around it; text whose length differs between modes stands on one line, cut with an ellipsis and read whole from its title.
|
|
120
|
+
Why: The line beside Reply and Internal note was longer in one mode and wrapped under the control at narrow widths, so every switch moved the composer and the conversation above it under the reader's eyes and pointer.
|
|
121
|
+
Do: Give the varying text `flex: 1 1 0`, `min-inline-size: 0` and a one-line cut, write the two texts to similar lengths, and keep a control's label set fixed across modes.
|
|
122
|
+
Don't: Let a mode add or remove a line, a hint or a control that changes the region's height, or let a row wrap differently in one mode than in the other.
|
|
123
|
+
Check: At 1280, 570 and 390 pixels, switch the mode and read the bounding box of each box in the region: every top and height is the same in both modes.
|
|
124
|
+
|
|
125
|
+
### CP-09 · A control that switches a region does not render the region in its own frame
|
|
126
|
+
|
|
127
|
+
Level: MUST
|
|
128
|
+
Applies to: tabs, a segmented control, a route link or a filter whose change mounts a region holding tables, grids, charts or forms
|
|
129
|
+
Rule: The control's own state — the selected tab, the pressed segment — updates in the interaction's frame; the region renders from a deferred value (in React, useDeferredValue or startTransition) and states aria-busy while the shown value lags the selected one.
|
|
130
|
+
Why: Mounting a region of families in the click's task blocks the next paint, and Interaction to Next Paint above 200 ms is "needs improvement" and above 500 ms "poor": a table of a hundred rows of twenty cells measured 160 ms in one task in a development build, and a 4× CPU throttle takes its 93 ms in a production build past the first threshold.
|
|
131
|
+
Do: Keep the selection state urgent and hand the region the deferred value; mount only the selected panel, with mount active.
|
|
132
|
+
Don't: Set the selection and the region from one state update inside the click handler, or mount every panel to make switching look instant.
|
|
133
|
+
Check: Switch the control with the CPU throttled 4× in Chrome: the selection marker moves in the next frame, and the Performance panel shows no long task between the click and that paint.
|
|
134
|
+
|
|
135
|
+
### CP-10 · Every destination has one width
|
|
136
|
+
|
|
137
|
+
Level: SHOULD
|
|
138
|
+
Applies to: every `page`
|
|
139
|
+
Rule: Every destination of the navigation — a list, a record, a dashboard, an overview — is `full`, so moving between destinations never moves the column's edges; a create or edit form is `wide` and lays its fields out in a grid of the form's own; a page of preferences read as prose is `measure`.
|
|
140
|
+
Why: A list at `bleed`, a record at `wide` and a form at `content` moved the column's edges on every move between destinations, and a form 56rem wide stood narrow in a desktop frame; the owner read the pages as squeezed and without a pattern.
|
|
141
|
+
Do: Set `full` on every destination and `wide` on every form, on the page and nowhere else; a list keeps `fill` (LP-12); a form arranges its fields in a `grid` within that width.
|
|
142
|
+
Don't: Give each page type a measure of its own, or cap a form's body with a width of the screen's own.
|
|
143
|
+
Check: Move between two destinations of the navigation: the header's and the body's start and end edges stay on the same lines.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
topic: conversations
|
|
3
|
+
prefix: CV
|
|
4
|
+
triggers:
|
|
5
|
+
[
|
|
6
|
+
conversation,
|
|
7
|
+
thread,
|
|
8
|
+
message,
|
|
9
|
+
reply,
|
|
10
|
+
composer,
|
|
11
|
+
internal note,
|
|
12
|
+
ticket,
|
|
13
|
+
inbox,
|
|
14
|
+
sla,
|
|
15
|
+
clock,
|
|
16
|
+
business hours,
|
|
17
|
+
queue,
|
|
18
|
+
]
|
|
19
|
+
families: [message, message-scroller, prompt-composer, filter-bar, tabs, page-header]
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Conversations
|
|
23
|
+
|
|
24
|
+
How a record that is a conversation with a clock is read and answered: a
|
|
25
|
+
support ticket, and anything else whose body is messages. The library gives
|
|
26
|
+
`message` a thread row, `message-scroller` a log that follows new rows and
|
|
27
|
+
`prompt-composer` a field that sends; it does not say where the composer
|
|
28
|
+
stands when the thread is long, how a service-level clock is said, or how an
|
|
29
|
+
inbox's queues and its filters stay one thing.
|
|
30
|
+
|
|
31
|
+
### CV-01 · The composer stays in reach of a scrolled conversation
|
|
32
|
+
|
|
33
|
+
Level: MUST
|
|
34
|
+
Applies to: a record whose body is a conversation the reader answers
|
|
35
|
+
Rule: From 600 pixels the conversation fills its region and scrolls on its own with the composer under it, and the record's context scrolls on its own beside it or behind a tab of the header; below 600 pixels the page scrolls, the composer is stuck to the bottom of the screen, and the record opens on its last message.
|
|
36
|
+
Why: A thread of 120 messages scrolled with the page put the composer 120 messages away from the line it answers, and a context that scrolled with the thread left the customer and the clocks behind.
|
|
37
|
+
Do: Give the thread a `message-scroller` that opens at its `end`, keep the composer in the row under it, and draw the context as its own scrolling column; on a phone, make the composer's row sticky on the page's ground.
|
|
38
|
+
Don't: Put the composer at the end of the page's flow, or let the context scroll away with the thread.
|
|
39
|
+
Check: Open a conversation of more than one screen of messages at 1280 and at 390 pixels: it opens on its last message, and the composer is on screen without a scroll at both widths.
|
|
40
|
+
|
|
41
|
+
### CV-02 · A service-level clock is said in business time, with the hour it falls due
|
|
42
|
+
|
|
43
|
+
Level: SHOULD
|
|
44
|
+
Applies to: a clock counted in business hours — a first response, a resolution
|
|
45
|
+
Rule: A running clock says the business time left and the hour it falls due in the organization's zone, a passed one by how much and when it was due, a paused one that it is stopped and why; a queue's row says the span alone, and no clock is ever said in raw minutes.
|
|
46
|
+
Why: "1 h 20 min left" read at 19:00 is tomorrow morning: the span alone hides that the time outside business hours does not count, and the hour alone hides how much work time is left.
|
|
47
|
+
Do: Take the remaining minutes from the backend, say them in minutes, hours and business days of the organization's own length, and add the due hour; state the policy once beside the clocks, with the business hours.
|
|
48
|
+
Don't: Recompute a clock in the client, or let a colour alone say that a clock is at risk or passed.
|
|
49
|
+
Check: Read a running, a passed and a paused clock: the first names its due hour, the second how much it passed by, the third that it is stopped and why; none is a count of minutes above 59.
|
|
50
|
+
|
|
51
|
+
### CV-03 · A queue is a view of the bar, never a second filter
|
|
52
|
+
|
|
53
|
+
Level: SHOULD
|
|
54
|
+
Applies to: a list worked as named queues — mine, unassigned, at risk, escalated
|
|
55
|
+
Rule: Each queue is a view of the list's `filter-bar`, a tree of the bar's own fields, labelled with the count of the rows it opens on; choosing it writes its pills, and editing a pill leaves a view the bar marks as changed.
|
|
56
|
+
Why: A queue picker beside the bar's pills is two answers to "what am I looking at", and they disagree the moment the reader edits a pill.
|
|
57
|
+
Do: Hand the queues to the bar as its `preset` views, count each with the list's own total for its tree, and let a door open a queue by naming it in the address.
|
|
58
|
+
Don't: Keep the chosen queue in a state of its own, or count a queue with a figure the list does not reproduce.
|
|
59
|
+
Check: Choose each queue: the bar shows its pills and the list's total equals the queue's count; remove one pill: the bar marks the view as changed.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
topic: errors and conflicts
|
|
3
|
+
prefix: ER
|
|
4
|
+
triggers:
|
|
5
|
+
[
|
|
6
|
+
error,
|
|
7
|
+
conflict,
|
|
8
|
+
refusal,
|
|
9
|
+
failed,
|
|
10
|
+
retry,
|
|
11
|
+
stale,
|
|
12
|
+
version,
|
|
13
|
+
409,
|
|
14
|
+
503,
|
|
15
|
+
transport,
|
|
16
|
+
degraded,
|
|
17
|
+
permission,
|
|
18
|
+
forbidden,
|
|
19
|
+
state,
|
|
20
|
+
transition,
|
|
21
|
+
]
|
|
22
|
+
families: [inline-message, toast, result-state, button, dialog]
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Errors and conflicts
|
|
26
|
+
|
|
27
|
+
What a screen does with an answer that is not the one it asked for. The
|
|
28
|
+
library gives `inline-message` six tones, `result-state` four statuses and
|
|
29
|
+
`toast` a place for what is passing; it does not say which of them a refusal
|
|
30
|
+
belongs in, or that two refusals a reader must answer differently should not
|
|
31
|
+
look the same.
|
|
32
|
+
|
|
33
|
+
### ER-01 · A refusal is classed before it is shown
|
|
34
|
+
|
|
35
|
+
Level: MUST
|
|
36
|
+
Applies to: every command a screen sends
|
|
37
|
+
Rule: The screen sorts the backend's answer into the class the reader must act on — a conflict (the record moved), a transport failure (nothing was written), a permission (this persona never will) or a state (the record cannot do this now) — and says the class, not the code.
|
|
38
|
+
Why: "Request failed" makes the reader guess whether to try again, to read the page again, or to ask someone else; those are three different next steps and the answer already knows which one it is.
|
|
39
|
+
Do: Keep one map from code to class in the module's store — the conflicts, the unavailable answer, the refusal of a permission and the state transitions — and one sentence per class beside the message: what happened, and what the reader does now. The words are the product's where the module knows the code, and the server's sentence where it does not.
|
|
40
|
+
Don't: Show the code, show "Something went wrong", or answer every failure with the same toast.
|
|
41
|
+
Check: Refuse a command for each class — a stale version, a failed request, a missing permission, a record in the wrong state: each message names its class in the product's words, and none shows a code.
|
|
42
|
+
|
|
43
|
+
### ER-02 · A conflict is answered by reading the record again
|
|
44
|
+
|
|
45
|
+
Level: MUST
|
|
46
|
+
Applies to: every conflict the backend answers — a stale version, a record already moved to another state, a decision already taken, a quantity that changed
|
|
47
|
+
Rule: The screen re-reads the record before it shows the message, so what the reader sees under the message is what the backend now holds; the message says that it has done so.
|
|
48
|
+
Why: A conflict means the reader's picture is out of date. Leaving the old picture under a warning invites the same command again, and the second refusal teaches nothing.
|
|
49
|
+
Do: Re-read on the conflict codes and on those alone — a transport failure changed nothing, so the picture is still true — and word the message as what happened elsewhere ("Another approver decided this one a moment ago"), not as what the reader did wrong.
|
|
50
|
+
Don't: Ask the reader to refresh, or clear the screen and start over.
|
|
51
|
+
Check: Change a record from a second session, then send a command from the first: the record on screen is re-read before the message, and the message says it was.
|
|
52
|
+
|
|
53
|
+
### ER-03 · The version a command carries is the version the page read
|
|
54
|
+
|
|
55
|
+
Level: MUST
|
|
56
|
+
Applies to: every command that carries the version it read
|
|
57
|
+
Rule: The screen holds the version as a number at the moment it read the record, and sends that; it never reads the version out of an answer it is still holding at the moment it sends.
|
|
58
|
+
Why: A client that keeps the answers it read shares them with its store, so an object read minutes ago carries whoever wrote last — and a command built from it is never refused for being stale, which silently overwrites the other writer.
|
|
59
|
+
Do: Copy the number when the record loads, and again after every command that succeeds. Where a screen holds many records — a queue — keep the number per row.
|
|
60
|
+
Don't: Read the version from the held record inside the call that sends the command.
|
|
61
|
+
Check: Change a record from a second session after the first read it, then send a command from the first: the backend refuses it as stale.
|
|
62
|
+
|
|
63
|
+
### ER-04 · Two failures that read alike are two failures the reader cannot tell apart
|
|
64
|
+
|
|
65
|
+
Level: SHOULD
|
|
66
|
+
Applies to: a screen that can meet both a conflict and a transport failure — every screen with a command, on a slow or failing network
|
|
67
|
+
Rule: A conflict and a transport failure carry different tones and different second lines: the conflict is a warning that the page has been read again, the transport failure is a danger that nothing was written and the same action can be tried again.
|
|
68
|
+
Why: On a slow or failing network both arrive within a minute of each other, and a reader who cannot tell them apart either retries a command that already ran or abandons one that never did.
|
|
69
|
+
Do: Reserve the danger tone for what did not happen, and the warning tone for what happened somewhere else.
|
|
70
|
+
Don't: Give every refusal the danger tone because it is a failure.
|
|
71
|
+
Check: With the network failing, a failed command says nothing was changed and offers the same action again; a conflict says the page has been read again. The two carry different tones.
|