prime-ui-kit 0.16.0 → 0.18.0
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 +15 -18
- package/dist/chunks/{chunk-A7OQWH6R.js → chunk-IVS3J7AS.js} +1 -1
- package/dist/chunks/{chunk-6TPHKCUJ.js → chunk-MB4CXSLL.js} +27732 -26723
- package/dist/chunks/{chunk-4PSQ64S4.js → chunk-OAXJWF3L.js} +6818 -6264
- package/dist/chunks/{chunk-U3Q2I3MY.js → chunk-QFHE5GKW.js} +3 -2
- package/dist/chunks/{chunk-HDBQICPW.js → chunk-X3JT5CLR.js} +60 -20
- package/dist/color-picker.d.ts +1 -1
- package/dist/color-picker.js +3 -3
- package/dist/components/badge/Badge.d.ts +17 -0
- package/dist/components/breadcrumb/Breadcrumb.d.ts +12 -3
- package/dist/components/button/Button.d.ts +1 -1
- package/dist/components/button-group/ButtonGroup.d.ts +1 -1
- package/dist/components/card/Card.d.ts +8 -4
- package/dist/components/chart-frame/ChartFrame.d.ts +1 -1
- package/dist/components/chat/Chat.d.ts +3 -3
- package/dist/components/chat/ChatRows.d.ts +5 -1
- package/dist/components/chat/MessageList.d.ts +5 -1
- package/dist/components/chat/groupMessages.d.ts +12 -4
- package/dist/components/chat-list/ChatList.d.ts +18 -9
- package/dist/components/chat-list/formatChatTime.d.ts +3 -3
- package/dist/components/checkbox/Checkbox.d.ts +6 -1
- package/dist/components/color-field/ColorField.d.ts +1 -1
- package/dist/components/color-picker/ColorPicker.d.ts +23 -1
- package/dist/components/color-picker/ColorPresets.d.ts +9 -1
- package/dist/components/crossfade/Crossfade.d.ts +1 -1
- package/dist/components/data-table/DataTable.d.ts +3 -1
- package/dist/components/data-table/Head.d.ts +3 -1
- package/dist/components/data-table/types.d.ts +5 -0
- package/dist/components/digit-input/DigitInput.d.ts +1 -1
- package/dist/components/drawer/Drawer.d.ts +3 -2
- package/dist/components/field-list/FieldList.d.ts +18 -6
- package/dist/components/hint/Hint.d.ts +8 -2
- package/dist/components/index.d.ts +6 -7
- package/dist/components/input/Input.d.ts +27 -5
- package/dist/components/input/inputSuggestions.d.ts +39 -0
- package/dist/components/kanban/Kanban.d.ts +4 -9
- package/dist/components/list/List.d.ts +19 -5
- package/dist/components/message/Message.d.ts +15 -3
- package/dist/components/message/MessageSticker.d.ts +27 -0
- package/dist/components/message/formatMessageTime.d.ts +5 -2
- package/dist/components/modal/Modal.d.ts +3 -2
- package/dist/components/native-select/NativeSelect.d.ts +1 -1
- package/dist/components/pagination/Pagination.d.ts +5 -1
- package/dist/components/popover/Popover.d.ts +1 -1
- package/dist/components/radio/Radio.d.ts +11 -2
- package/dist/components/rich-text/RichText.d.ts +23 -0
- package/dist/components/scroll-container/ScrollContainer.d.ts +1 -1
- package/dist/components/scroll-container/scrollGlide.d.ts +26 -0
- package/dist/components/scroll-container/useScrollMotion.d.ts +25 -0
- package/dist/components/segmented-control/SegmentedControl.d.ts +1 -1
- package/dist/components/select/selectContext.d.ts +7 -0
- package/dist/components/slider/Slider.d.ts +2 -2
- package/dist/components/smart-filter/SmartFilter.d.ts +4 -5
- package/dist/components/switch/Switch.d.ts +6 -1
- package/dist/components/tag-select/TagSelect.d.ts +1 -1
- package/dist/components/textarea/Textarea.d.ts +6 -1
- package/dist/components/timeline/Timeline.d.ts +1 -1
- package/dist/icon-set.js +2 -2
- package/dist/index.css +1 -1
- package/dist/index.js +7 -9
- package/dist/internal/ChoiceField.d.ts +3 -1
- package/dist/internal/FieldFrame.d.ts +8 -2
- package/dist/internal/barPlan.d.ts +44 -0
- package/dist/internal/fieldCell.d.ts +1 -1
- package/dist/internal/formatClock.d.ts +23 -2
- package/dist/internal/leaveGuard.d.ts +21 -0
- package/dist/internal/messageList.d.ts +2 -0
- package/dist/internal/overlay/DialogParts.d.ts +27 -2
- package/dist/internal/overlay/FloatingPanel.d.ts +1 -1
- package/dist/internal/overlay/focus.d.ts +3 -2
- package/dist/internal/parts.d.ts +1 -1
- package/dist/internal/slot.d.ts +0 -30
- package/dist/internal/swatch.d.ts +5 -0
- package/dist/internal/tokenDefaults.d.ts +1 -0
- package/dist/layout/app-shell/AppShell.d.ts +19 -38
- package/dist/layout/index.d.ts +3 -3
- package/dist/layout/page/Page.d.ts +302 -0
- package/dist/layout/sidebar/Sidebar.d.ts +1 -1
- package/dist/skill/SKILL.md +10 -10
- package/dist/skill/anti-slop.md +106 -5
- package/dist/skill/api-contract.md +15 -8
- package/dist/skill/cheatsheet.md +46 -26
- package/dist/skill/checklist.md +12 -3
- package/dist/skill/choosing.md +34 -20
- package/dist/skill/components.md +4 -5
- package/dist/skill/composition.md +193 -154
- package/dist/skill/foundations.md +9 -9
- package/dist/skill/layouts.md +42 -99
- package/dist/skill/reference/components/avatar/COMPONENT.md +2 -2
- package/dist/skill/reference/components/avatar/examples/team-group.tsx +1 -1
- package/dist/skill/reference/components/badge/COMPONENT.md +14 -1
- package/dist/skill/reference/components/badge/examples/examples.module.css +7 -0
- package/dist/skill/reference/components/badge/examples/tag-row.tsx +34 -0
- package/dist/skill/reference/components/banner/COMPONENT.md +4 -4
- package/dist/skill/reference/components/banner/examples/examples.module.css +6 -1
- package/dist/skill/reference/components/banner/examples/page-strip.tsx +24 -22
- package/dist/skill/reference/components/breadcrumb/COMPONENT.md +18 -12
- package/dist/skill/reference/components/breadcrumb/examples/router.tsx +17 -0
- package/dist/skill/reference/components/button/COMPONENT.md +2 -1
- package/dist/skill/reference/components/button/examples/hold-to-confirm.tsx +1 -1
- package/dist/skill/reference/components/button/examples/on-colored-host.tsx +8 -8
- package/dist/skill/reference/components/button-group/COMPONENT.md +1 -0
- package/dist/skill/reference/components/card/COMPONENT.md +14 -8
- package/dist/skill/reference/components/card/examples/screen.module.css +1 -1
- package/dist/skill/reference/components/card/examples/screen.tsx +184 -198
- package/dist/skill/reference/components/card/examples/states.tsx +59 -0
- package/dist/skill/reference/components/chart-frame/COMPONENT.md +1 -1
- package/dist/skill/reference/components/chart-frame/examples/fill-height.tsx +9 -9
- package/dist/skill/reference/components/chat/COMPONENT.md +8 -5
- package/dist/skill/reference/components/chat/examples/screen.module.css +1 -1
- package/dist/skill/reference/components/chat/examples/screen.tsx +110 -117
- package/dist/skill/reference/components/chat/examples/time-zone.tsx +83 -0
- package/dist/skill/reference/components/chat-list/COMPONENT.md +14 -8
- package/dist/skill/reference/components/chat-list/examples/controlled.tsx +2 -2
- package/dist/skill/reference/components/chat-list/examples/examples.module.css +8 -0
- package/dist/skill/reference/components/chat-list/examples/links.tsx +1 -1
- package/dist/skill/reference/components/chat-list/examples/router.tsx +63 -0
- package/dist/skill/reference/components/checkbox/COMPONENT.md +1 -0
- package/dist/skill/reference/components/checkbox/examples/examples.module.css +3 -2
- package/dist/skill/reference/components/code-block/COMPONENT.md +1 -1
- package/dist/skill/reference/components/code-block/examples/color-scheme.tsx +2 -4
- package/dist/skill/reference/components/code-block/examples/examples.module.css +0 -11
- package/dist/skill/reference/components/color-field/COMPONENT.md +2 -1
- package/dist/skill/reference/components/color-picker/COMPONENT.md +31 -11
- package/dist/skill/reference/components/color-picker/examples/examples.module.css +2 -5
- package/dist/skill/reference/components/color-picker/examples/overview.tsx +5 -10
- package/dist/skill/reference/components/color-picker/examples/presets-custom.tsx +31 -0
- package/dist/skill/reference/components/color-picker/examples/sizes.tsx +4 -8
- package/dist/skill/reference/components/color-swatches/COMPONENT.md +1 -0
- package/dist/skill/reference/components/crossfade/COMPONENT.md +3 -3
- package/dist/skill/reference/components/crossfade/examples/screen.tsx +107 -112
- package/dist/skill/reference/components/data-table/COMPONENT.md +12 -7
- package/dist/skill/reference/components/data-table/examples/examples.module.css +9 -0
- package/dist/skill/reference/components/data-table/examples/numeric.tsx +9 -2
- package/dist/skill/reference/components/data-table/examples/screen.tsx +42 -52
- package/dist/skill/reference/components/data-table/examples/server.tsx +6 -2
- package/dist/skill/reference/components/datepicker/COMPONENT.md +3 -1
- package/dist/skill/reference/components/datepicker/examples/deadline.tsx +33 -0
- package/dist/skill/reference/components/datepicker/examples/examples.module.css +6 -0
- package/dist/skill/reference/components/datepicker/examples/inline-panel.tsx +3 -1
- package/dist/skill/reference/components/description-list/COMPONENT.md +1 -1
- package/dist/skill/reference/components/description-list/examples/screen.tsx +120 -127
- package/dist/skill/reference/components/digit-input/COMPONENT.md +1 -0
- package/dist/skill/reference/components/digit-input/examples/grouped.tsx +4 -4
- package/dist/skill/reference/components/digit-input/examples/validation.tsx +1 -1
- package/dist/skill/reference/components/divider/COMPONENT.md +2 -2
- package/dist/skill/reference/components/divider/examples/examples.module.css +4 -1
- package/dist/skill/reference/components/divider/examples/vertical.tsx +22 -9
- package/dist/skill/reference/components/dnd/examples/examples.module.css +3 -1
- package/dist/skill/reference/components/drawer/COMPONENT.md +16 -3
- package/dist/skill/reference/components/drawer/examples/client-card.tsx +32 -8
- package/dist/skill/reference/components/drawer/examples/placement.tsx +26 -31
- package/dist/skill/reference/components/drawer/examples/screen.tsx +137 -160
- package/dist/skill/reference/components/dropdown/COMPONENT.md +1 -1
- package/dist/skill/reference/components/example-frame/COMPONENT.md +3 -3
- package/dist/skill/reference/components/field-list/COMPONENT.md +15 -3
- package/dist/skill/reference/components/field-list/examples/saving.tsx +83 -0
- package/dist/skill/reference/components/field-list/examples/screen.module.css +1 -1
- package/dist/skill/reference/components/field-list/examples/screen.tsx +19 -19
- package/dist/skill/reference/components/field-list/examples/totals.tsx +82 -0
- package/dist/skill/reference/components/fieldset/COMPONENT.md +1 -1
- package/dist/skill/reference/components/fieldset/examples/states.tsx +1 -1
- package/dist/skill/reference/components/file-upload/COMPONENT.md +2 -1
- package/dist/skill/reference/components/file-upload/examples/screen.module.css +2 -2
- package/dist/skill/reference/components/file-upload/examples/screen.tsx +65 -81
- package/dist/skill/reference/components/gallery/COMPONENT.md +1 -0
- package/dist/skill/reference/components/gantt/COMPONENT.md +1 -1
- package/dist/skill/reference/components/gantt/examples/screen.module.css +1 -1
- package/dist/skill/reference/components/gantt/examples/screen.tsx +55 -73
- package/dist/skill/reference/components/hint/COMPONENT.md +16 -2
- package/dist/skill/reference/components/hint/examples/examples.module.css +10 -1
- package/dist/skill/reference/components/hint/examples/overview.tsx +1 -1
- package/dist/skill/reference/components/hint/examples/variants.tsx +48 -0
- package/dist/skill/reference/components/input/COMPONENT.md +39 -9
- package/dist/skill/reference/components/input/examples/affixes.tsx +4 -2
- package/dist/skill/reference/components/input/examples/dismiss.tsx +29 -0
- package/dist/skill/reference/components/input/examples/suggestions.tsx +26 -0
- package/dist/skill/reference/components/input/examples/time.tsx +24 -0
- package/dist/skill/reference/components/input/examples/with-select.tsx +44 -0
- package/dist/skill/reference/components/kanban/COMPONENT.md +7 -7
- package/dist/skill/reference/components/kanban/examples/columns.tsx +4 -2
- package/dist/skill/reference/components/kanban/examples/screen.module.css +1 -1
- package/dist/skill/reference/components/kanban/examples/screen.tsx +50 -65
- package/dist/skill/reference/components/kbd/COMPONENT.md +1 -1
- package/dist/skill/reference/components/label/examples/examples.module.css +12 -1
- package/dist/skill/reference/components/label/examples/overview.tsx +1 -1
- package/dist/skill/reference/components/list/COMPONENT.md +26 -10
- package/dist/skill/reference/components/list/examples/row-controls.tsx +80 -0
- package/dist/skill/reference/components/list/examples/with-icon.tsx +23 -2
- package/dist/skill/reference/components/login-form/COMPONENT.md +8 -7
- package/dist/skill/reference/components/login-form/examples/states.tsx +12 -14
- package/dist/skill/reference/components/media-viewer/examples/controlled.tsx +16 -16
- package/dist/skill/reference/components/media-viewer/examples/examples.module.css +1 -3
- package/dist/skill/reference/components/message/COMPONENT.md +30 -9
- package/dist/skill/reference/components/message/examples/preview.tsx +28 -0
- package/dist/skill/reference/components/message/examples/sticker.tsx +35 -0
- package/dist/skill/reference/components/modal/COMPONENT.md +15 -3
- package/dist/skill/reference/components/modal/examples/long-content.tsx +37 -18
- package/dist/skill/reference/components/native-select/COMPONENT.md +1 -0
- package/dist/skill/reference/components/notification/COMPONENT.md +1 -1
- package/dist/skill/reference/components/pagination/COMPONENT.md +11 -3
- package/dist/skill/reference/components/pagination/examples/controlled.tsx +2 -1
- package/dist/skill/reference/components/popover/COMPONENT.md +3 -2
- package/dist/skill/reference/components/popover/examples/width.tsx +13 -1
- package/dist/skill/reference/components/radio/COMPONENT.md +2 -0
- package/dist/skill/reference/components/rich-text/COMPONENT.md +93 -0
- package/dist/skill/reference/components/rich-text/examples/overview.tsx +19 -0
- package/dist/skill/reference/components/scroll-container/COMPONENT.md +8 -5
- package/dist/skill/reference/components/segmented-control/COMPONENT.md +1 -0
- package/dist/skill/reference/components/segmented-control/examples/in-form.tsx +1 -1
- package/dist/skill/reference/components/select/COMPONENT.md +7 -3
- package/dist/skill/reference/components/slider/COMPONENT.md +4 -3
- package/dist/skill/reference/components/slider/examples/controlled.tsx +1 -1
- package/dist/skill/reference/components/slider/examples/states.tsx +14 -10
- package/dist/skill/reference/components/smart-filter/COMPONENT.md +13 -13
- package/dist/skill/reference/components/smart-filter/examples/examples.module.css +3 -0
- package/dist/skill/reference/components/smart-filter/examples/many-values.tsx +12 -8
- package/dist/skill/reference/components/smart-filter/examples/sizes.tsx +7 -3
- package/dist/skill/reference/components/sparkline/COMPONENT.md +1 -0
- package/dist/skill/reference/components/sparkline/examples/curve.tsx +16 -11
- package/dist/skill/reference/components/sparkline/examples/states.tsx +14 -10
- package/dist/skill/reference/components/switch/COMPONENT.md +2 -1
- package/dist/skill/reference/components/tabs/COMPONENT.md +1 -1
- package/dist/skill/reference/components/tag-select/COMPONENT.md +1 -0
- package/dist/skill/reference/components/textarea/COMPONENT.md +1 -0
- package/dist/skill/reference/components/timeline/COMPONENT.md +3 -3
- package/dist/skill/reference/components/timeline/examples/structure.tsx +2 -1
- package/dist/skill/reference/components/typography/COMPONENT.md +2 -2
- package/dist/skill/reference/foundation.md +15 -11
- package/dist/skill/reference/layout/app-shell/COMPONENT.md +25 -38
- package/dist/skill/reference/layout/app-shell/examples/footer.tsx +10 -10
- package/dist/skill/reference/layout/app-shell/examples/overview.tsx +20 -22
- package/dist/skill/reference/layout/app-shell/examples/screen.module.css +2 -2
- package/dist/skill/reference/layout/app-shell/examples/screen.tsx +25 -30
- package/dist/skill/reference/layout/app-shell/examples/template.tsx +13 -17
- package/dist/skill/reference/layout/bottom-nav/COMPONENT.md +4 -3
- package/dist/skill/reference/layout/bottom-nav/examples/floating-action.tsx +10 -19
- package/dist/skill/reference/layout/bottom-nav/examples/floating.tsx +10 -19
- package/dist/skill/reference/layout/bottom-nav/examples/in-app-shell.tsx +11 -19
- package/dist/skill/reference/layout/page/COMPONENT.md +382 -0
- package/dist/skill/reference/layout/page/examples/actions-collapse.tsx +45 -0
- package/dist/skill/reference/layout/page/examples/collapse.tsx +68 -0
- package/dist/skill/reference/layout/page/examples/examples.module.css +92 -0
- package/{src/components/page-content → dist/skill/reference/layout/page}/examples/grid.tsx +15 -15
- package/dist/skill/reference/layout/page/examples/guard.tsx +87 -0
- package/dist/skill/reference/{components/page-content → layout/page}/examples/list-detail.tsx +14 -14
- package/dist/skill/reference/layout/page/examples/loading.tsx +57 -0
- package/dist/skill/reference/layout/page/examples/narrow.tsx +75 -0
- package/dist/skill/reference/layout/page/examples/overview.tsx +57 -0
- package/dist/skill/reference/{components/page-content → layout/page}/examples/screen.module.css +1 -1
- package/{src/components/page-content → dist/skill/reference/layout/page}/examples/screen.tsx +29 -19
- package/dist/skill/reference/{components/page-content → layout/page}/examples/sections.tsx +17 -24
- package/dist/skill/reference/layout/page/examples/structure.tsx +41 -0
- package/dist/skill/reference/{components/page-toolbar/examples/narrow.tsx → layout/page/examples/tools.tsx} +38 -35
- package/dist/skill/reference/layout/page/examples/top-bar.tsx +85 -0
- package/dist/skill/reference/{components/page-content → layout/page}/examples/variants.tsx +7 -7
- package/dist/skill/reference/layout/sidebar/COMPONENT.md +6 -4
- package/dist/skill/reference/layout/sidebar/examples/dismiss.tsx +10 -7
- package/dist/skill/reference/layout/sidebar/examples/narrow.tsx +11 -8
- package/dist/skill/responsive.md +94 -75
- package/dist/skill/ux.md +5 -3
- package/dist/tokens/layers.d.ts +2 -0
- package/dist/tokens/primitives.d.ts +12 -2
- package/dist/tokens/semantic.d.ts +9 -0
- package/dist/tokens/themes/dark.d.ts +7 -2
- package/package.json +2 -2
- package/src/components/avatar/COMPONENT.md +2 -2
- package/src/components/avatar/examples/team-group.tsx +1 -1
- package/src/components/badge/COMPONENT.md +14 -1
- package/src/components/badge/examples/examples.module.css +7 -0
- package/src/components/badge/examples/tag-row.tsx +34 -0
- package/src/components/banner/COMPONENT.md +4 -4
- package/src/components/banner/examples/examples.module.css +6 -1
- package/src/components/banner/examples/page-strip.tsx +24 -22
- package/src/components/breadcrumb/COMPONENT.md +18 -12
- package/src/components/breadcrumb/examples/router.tsx +17 -0
- package/src/components/button/COMPONENT.md +2 -1
- package/src/components/button/examples/hold-to-confirm.tsx +1 -1
- package/src/components/button/examples/on-colored-host.tsx +8 -8
- package/src/components/button-group/COMPONENT.md +1 -0
- package/src/components/card/COMPONENT.md +14 -8
- package/src/components/card/examples/screen.module.css +1 -1
- package/src/components/card/examples/screen.tsx +184 -198
- package/src/components/card/examples/states.tsx +59 -0
- package/src/components/chart-frame/COMPONENT.md +1 -1
- package/src/components/chart-frame/examples/fill-height.tsx +9 -9
- package/src/components/chat/COMPONENT.md +8 -5
- package/src/components/chat/examples/screen.module.css +1 -1
- package/src/components/chat/examples/screen.tsx +110 -117
- package/src/components/chat/examples/time-zone.tsx +83 -0
- package/src/components/chat-list/COMPONENT.md +14 -8
- package/src/components/chat-list/examples/controlled.tsx +2 -2
- package/src/components/chat-list/examples/examples.module.css +8 -0
- package/src/components/chat-list/examples/links.tsx +1 -1
- package/src/components/chat-list/examples/router.tsx +63 -0
- package/src/components/checkbox/COMPONENT.md +1 -0
- package/src/components/checkbox/examples/examples.module.css +3 -2
- package/src/components/code-block/COMPONENT.md +1 -1
- package/src/components/code-block/examples/color-scheme.tsx +2 -4
- package/src/components/code-block/examples/examples.module.css +0 -11
- package/src/components/color-field/COMPONENT.md +2 -1
- package/src/components/color-picker/COMPONENT.md +31 -11
- package/src/components/color-picker/examples/examples.module.css +2 -5
- package/src/components/color-picker/examples/overview.tsx +5 -10
- package/src/components/color-picker/examples/presets-custom.tsx +31 -0
- package/src/components/color-picker/examples/sizes.tsx +4 -8
- package/src/components/color-swatches/COMPONENT.md +1 -0
- package/src/components/crossfade/COMPONENT.md +3 -3
- package/src/components/crossfade/examples/screen.tsx +107 -112
- package/src/components/data-table/COMPONENT.md +12 -7
- package/src/components/data-table/examples/examples.module.css +9 -0
- package/src/components/data-table/examples/numeric.tsx +9 -2
- package/src/components/data-table/examples/screen.tsx +42 -52
- package/src/components/data-table/examples/server.tsx +6 -2
- package/src/components/datepicker/COMPONENT.md +3 -1
- package/src/components/datepicker/examples/deadline.tsx +33 -0
- package/src/components/datepicker/examples/examples.module.css +6 -0
- package/src/components/datepicker/examples/inline-panel.tsx +3 -1
- package/src/components/description-list/COMPONENT.md +1 -1
- package/src/components/description-list/examples/screen.tsx +120 -127
- package/src/components/digit-input/COMPONENT.md +1 -0
- package/src/components/digit-input/examples/grouped.tsx +4 -4
- package/src/components/digit-input/examples/validation.tsx +1 -1
- package/src/components/divider/COMPONENT.md +2 -2
- package/src/components/divider/examples/examples.module.css +4 -1
- package/src/components/divider/examples/vertical.tsx +22 -9
- package/src/components/dnd/examples/examples.module.css +3 -1
- package/src/components/drawer/COMPONENT.md +16 -3
- package/src/components/drawer/examples/client-card.tsx +32 -8
- package/src/components/drawer/examples/placement.tsx +26 -31
- package/src/components/drawer/examples/screen.tsx +137 -160
- package/src/components/dropdown/COMPONENT.md +1 -1
- package/src/components/example-frame/COMPONENT.md +3 -3
- package/src/components/field-list/COMPONENT.md +15 -3
- package/src/components/field-list/examples/saving.tsx +83 -0
- package/src/components/field-list/examples/screen.module.css +1 -1
- package/src/components/field-list/examples/screen.tsx +19 -19
- package/src/components/field-list/examples/totals.tsx +82 -0
- package/src/components/fieldset/COMPONENT.md +1 -1
- package/src/components/fieldset/examples/states.tsx +1 -1
- package/src/components/file-upload/COMPONENT.md +2 -1
- package/src/components/file-upload/examples/screen.module.css +2 -2
- package/src/components/file-upload/examples/screen.tsx +65 -81
- package/src/components/gallery/COMPONENT.md +1 -0
- package/src/components/gantt/COMPONENT.md +1 -1
- package/src/components/gantt/examples/screen.module.css +1 -1
- package/src/components/gantt/examples/screen.tsx +55 -73
- package/src/components/hint/COMPONENT.md +16 -2
- package/src/components/hint/examples/examples.module.css +10 -1
- package/src/components/hint/examples/overview.tsx +1 -1
- package/src/components/hint/examples/variants.tsx +48 -0
- package/src/components/input/COMPONENT.md +39 -9
- package/src/components/input/examples/affixes.tsx +4 -2
- package/src/components/input/examples/dismiss.tsx +29 -0
- package/src/components/input/examples/suggestions.tsx +26 -0
- package/src/components/input/examples/time.tsx +24 -0
- package/src/components/input/examples/with-select.tsx +44 -0
- package/src/components/kanban/COMPONENT.md +7 -7
- package/src/components/kanban/examples/columns.tsx +4 -2
- package/src/components/kanban/examples/screen.module.css +1 -1
- package/src/components/kanban/examples/screen.tsx +50 -65
- package/src/components/kbd/COMPONENT.md +1 -1
- package/src/components/label/examples/examples.module.css +12 -1
- package/src/components/label/examples/overview.tsx +1 -1
- package/src/components/list/COMPONENT.md +26 -10
- package/src/components/list/examples/row-controls.tsx +80 -0
- package/src/components/list/examples/with-icon.tsx +23 -2
- package/src/components/login-form/COMPONENT.md +8 -7
- package/src/components/login-form/examples/states.tsx +12 -14
- package/src/components/media-viewer/examples/controlled.tsx +16 -16
- package/src/components/media-viewer/examples/examples.module.css +1 -3
- package/src/components/message/COMPONENT.md +30 -9
- package/src/components/message/examples/preview.tsx +28 -0
- package/src/components/message/examples/sticker.tsx +35 -0
- package/src/components/modal/COMPONENT.md +15 -3
- package/src/components/modal/examples/long-content.tsx +37 -18
- package/src/components/native-select/COMPONENT.md +1 -0
- package/src/components/notification/COMPONENT.md +1 -1
- package/src/components/pagination/COMPONENT.md +11 -3
- package/src/components/pagination/examples/controlled.tsx +2 -1
- package/src/components/popover/COMPONENT.md +3 -2
- package/src/components/popover/examples/width.tsx +13 -1
- package/src/components/radio/COMPONENT.md +2 -0
- package/src/components/rich-text/COMPONENT.md +93 -0
- package/src/components/rich-text/examples/overview.tsx +19 -0
- package/src/components/scroll-container/COMPONENT.md +8 -5
- package/src/components/segmented-control/COMPONENT.md +1 -0
- package/src/components/segmented-control/examples/in-form.tsx +1 -1
- package/src/components/select/COMPONENT.md +7 -3
- package/src/components/slider/COMPONENT.md +4 -3
- package/src/components/slider/examples/controlled.tsx +1 -1
- package/src/components/slider/examples/states.tsx +14 -10
- package/src/components/smart-filter/COMPONENT.md +13 -13
- package/src/components/smart-filter/examples/examples.module.css +3 -0
- package/src/components/smart-filter/examples/many-values.tsx +12 -8
- package/src/components/smart-filter/examples/sizes.tsx +7 -3
- package/src/components/sparkline/COMPONENT.md +1 -0
- package/src/components/sparkline/examples/curve.tsx +16 -11
- package/src/components/sparkline/examples/states.tsx +14 -10
- package/src/components/switch/COMPONENT.md +2 -1
- package/src/components/tabs/COMPONENT.md +1 -1
- package/src/components/tag-select/COMPONENT.md +1 -0
- package/src/components/textarea/COMPONENT.md +1 -0
- package/src/components/timeline/COMPONENT.md +3 -3
- package/src/components/timeline/examples/structure.tsx +2 -1
- package/src/components/typography/COMPONENT.md +2 -2
- package/src/layout/app-shell/COMPONENT.md +25 -38
- package/src/layout/app-shell/examples/footer.tsx +10 -10
- package/src/layout/app-shell/examples/overview.tsx +20 -22
- package/src/layout/app-shell/examples/screen.module.css +2 -2
- package/src/layout/app-shell/examples/screen.tsx +25 -30
- package/src/layout/app-shell/examples/template.tsx +13 -17
- package/src/layout/bottom-nav/COMPONENT.md +4 -3
- package/src/layout/bottom-nav/examples/floating-action.tsx +10 -19
- package/src/layout/bottom-nav/examples/floating.tsx +10 -19
- package/src/layout/bottom-nav/examples/in-app-shell.tsx +11 -19
- package/src/layout/page/COMPONENT.md +382 -0
- package/src/layout/page/examples/actions-collapse.tsx +45 -0
- package/src/layout/page/examples/collapse.tsx +68 -0
- package/src/layout/page/examples/examples.module.css +92 -0
- package/{dist/skill/reference/components/page-content → src/layout/page}/examples/grid.tsx +15 -15
- package/src/layout/page/examples/guard.tsx +87 -0
- package/src/{components/page-content → layout/page}/examples/list-detail.tsx +14 -14
- package/src/layout/page/examples/loading.tsx +57 -0
- package/src/layout/page/examples/narrow.tsx +75 -0
- package/src/layout/page/examples/overview.tsx +57 -0
- package/src/{components/page-content → layout/page}/examples/screen.module.css +1 -1
- package/{dist/skill/reference/components/page-content → src/layout/page}/examples/screen.tsx +29 -19
- package/src/{components/page-content → layout/page}/examples/sections.tsx +17 -24
- package/src/layout/page/examples/structure.tsx +41 -0
- package/src/{components/page-toolbar/examples/narrow.tsx → layout/page/examples/tools.tsx} +38 -35
- package/src/layout/page/examples/top-bar.tsx +85 -0
- package/src/{components/page-content → layout/page}/examples/variants.tsx +7 -7
- package/src/layout/sidebar/COMPONENT.md +6 -4
- package/src/layout/sidebar/examples/dismiss.tsx +10 -7
- package/src/layout/sidebar/examples/narrow.tsx +11 -8
- package/src/styles/theme-dark.css +12 -10
- package/src/styles/theme-light.css +4 -0
- package/src/styles/tokens.css +3 -1
- package/dist/components/page-content/PageContent.d.ts +0 -192
- package/dist/components/page-toolbar/PageToolbar.d.ts +0 -55
- package/dist/components/scroll-container/useWheelToInline.d.ts +0 -10
- package/dist/layout/app-header/AppHeader.d.ts +0 -118
- package/dist/skill/reference/components/page-content/COMPONENT.md +0 -264
- package/dist/skill/reference/components/page-content/examples/examples.module.css +0 -56
- package/dist/skill/reference/components/page-content/examples/narrow.tsx +0 -25
- package/dist/skill/reference/components/page-content/examples/overview.tsx +0 -41
- package/dist/skill/reference/components/page-toolbar/COMPONENT.md +0 -147
- package/dist/skill/reference/components/page-toolbar/examples/examples.module.css +0 -16
- package/dist/skill/reference/components/page-toolbar/examples/overview.tsx +0 -113
- package/dist/skill/reference/components/page-toolbar/examples/save-changes.tsx +0 -43
- package/dist/skill/reference/components/page-toolbar/examples/without-search.tsx +0 -60
- package/dist/skill/reference/layout/app-header/COMPONENT.md +0 -187
- package/dist/skill/reference/layout/app-header/examples/breadcrumbs.tsx +0 -37
- package/dist/skill/reference/layout/app-header/examples/examples.module.css +0 -28
- package/dist/skill/reference/layout/app-header/examples/in-app-shell.tsx +0 -67
- package/dist/skill/reference/layout/app-header/examples/narrow.tsx +0 -66
- package/dist/skill/reference/layout/app-header/examples/overview.tsx +0 -34
- package/dist/skill/reference/layout/app-header/examples/page-title.tsx +0 -78
- package/dist/skill/reference/layout/app-shell/examples/contained.tsx +0 -30
- package/src/components/page-content/COMPONENT.md +0 -264
- package/src/components/page-content/examples/examples.module.css +0 -56
- package/src/components/page-content/examples/narrow.tsx +0 -25
- package/src/components/page-content/examples/overview.tsx +0 -41
- package/src/components/page-toolbar/COMPONENT.md +0 -147
- package/src/components/page-toolbar/examples/examples.module.css +0 -16
- package/src/components/page-toolbar/examples/overview.tsx +0 -113
- package/src/components/page-toolbar/examples/save-changes.tsx +0 -43
- package/src/components/page-toolbar/examples/without-search.tsx +0 -60
- package/src/layout/app-header/COMPONENT.md +0 -187
- package/src/layout/app-header/examples/breadcrumbs.tsx +0 -37
- package/src/layout/app-header/examples/examples.module.css +0 -28
- package/src/layout/app-header/examples/in-app-shell.tsx +0 -67
- package/src/layout/app-header/examples/narrow.tsx +0 -66
- package/src/layout/app-header/examples/overview.tsx +0 -34
- package/src/layout/app-header/examples/page-title.tsx +0 -78
- package/src/layout/app-shell/examples/contained.tsx +0 -30
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** The orders page's tools in its top bar: sections with counts, search and filter, the period, in the order written; the active filters on a line under everything — `Page.Tools`, `Page.Chips`. */
|
|
2
2
|
import {
|
|
3
3
|
Button,
|
|
4
4
|
Icon,
|
|
5
|
-
|
|
5
|
+
Page,
|
|
6
6
|
SegmentedControl,
|
|
7
7
|
Select,
|
|
8
8
|
SmartFilter,
|
|
@@ -11,17 +11,17 @@ import {
|
|
|
11
11
|
} from "prime-ui-kit";
|
|
12
12
|
import * as React from "react";
|
|
13
13
|
|
|
14
|
-
import styles from "./examples.module.css";
|
|
15
|
-
|
|
16
14
|
const SECTIONS = [
|
|
17
15
|
{ value: "all", label: "Все", count: 128 },
|
|
18
16
|
{ value: "active", label: "В работе", count: 12 },
|
|
19
17
|
{ value: "done", label: "Доставлены", count: 96 },
|
|
18
|
+
{ value: "cancelled", label: "Отменены", count: 20 },
|
|
20
19
|
];
|
|
21
20
|
|
|
22
21
|
const PERIODS = [
|
|
23
22
|
{ value: "7d", label: "7 дней" },
|
|
24
23
|
{ value: "30d", label: "30 дней" },
|
|
24
|
+
{ value: "quarter", label: "Квартал" },
|
|
25
25
|
];
|
|
26
26
|
|
|
27
27
|
const FIELDS: SmartFilterField[] = [
|
|
@@ -31,38 +31,42 @@ const FIELDS: SmartFilterField[] = [
|
|
|
31
31
|
options: [
|
|
32
32
|
{ value: "msk", label: "Москва" },
|
|
33
33
|
{ value: "spb", label: "Санкт-Петербург" },
|
|
34
|
+
{ value: "kzn", label: "Казань" },
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
key: "payment",
|
|
39
|
+
label: "Оплата",
|
|
40
|
+
options: [
|
|
41
|
+
{ value: "card", label: "Картой" },
|
|
42
|
+
{ value: "invoice", label: "По счёту" },
|
|
34
43
|
],
|
|
35
44
|
},
|
|
36
45
|
];
|
|
37
46
|
|
|
38
|
-
export default function
|
|
47
|
+
export default function PageToolsExample() {
|
|
39
48
|
const [section, setSection] = React.useState("all");
|
|
40
|
-
const [period, setPeriod] = React.useState("
|
|
49
|
+
const [period, setPeriod] = React.useState("30d");
|
|
41
50
|
const [filter, setFilter] = React.useState<SmartFilterValue>({
|
|
42
51
|
city: { include: ["msk"], exclude: [] },
|
|
43
52
|
});
|
|
44
53
|
const [search, setSearch] = React.useState("");
|
|
45
54
|
|
|
46
55
|
return (
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
>
|
|
55
|
-
<
|
|
56
|
-
<
|
|
57
|
-
<
|
|
58
|
-
</
|
|
59
|
-
<
|
|
60
|
-
<SegmentedControl.Root
|
|
61
|
-
fullWidth
|
|
62
|
-
value={section}
|
|
63
|
-
onValueChange={setSection}
|
|
64
|
-
aria-label="Раздел"
|
|
65
|
-
>
|
|
56
|
+
<SmartFilter.Root
|
|
57
|
+
fields={FIELDS}
|
|
58
|
+
value={filter}
|
|
59
|
+
onValueChange={setFilter}
|
|
60
|
+
search={search}
|
|
61
|
+
onSearchChange={setSearch}
|
|
62
|
+
>
|
|
63
|
+
<Page.Root>
|
|
64
|
+
<Page.TopBar sticky={false}>
|
|
65
|
+
<Page.Heading>
|
|
66
|
+
<Page.Title>Заказы</Page.Title>
|
|
67
|
+
</Page.Heading>
|
|
68
|
+
<Page.Tools aria-label="Заказы">
|
|
69
|
+
<SegmentedControl.Root value={section} onValueChange={setSection} aria-label="Раздел">
|
|
66
70
|
{SECTIONS.map((item) => (
|
|
67
71
|
<SegmentedControl.Item key={item.value} value={item.value}>
|
|
68
72
|
{item.label}
|
|
@@ -70,8 +74,7 @@ export default function PageToolbarNarrowExample() {
|
|
|
70
74
|
</SegmentedControl.Item>
|
|
71
75
|
))}
|
|
72
76
|
</SegmentedControl.Root>
|
|
73
|
-
|
|
74
|
-
<PageToolbar.View>
|
|
77
|
+
<SmartFilter.Toolbar />
|
|
75
78
|
<Select.Root value={period} onValueChange={setPeriod}>
|
|
76
79
|
<Select.Trigger aria-label="Период">
|
|
77
80
|
<Select.TriggerIcon>
|
|
@@ -87,20 +90,20 @@ export default function PageToolbarNarrowExample() {
|
|
|
87
90
|
))}
|
|
88
91
|
</Select.Content>
|
|
89
92
|
</Select.Root>
|
|
90
|
-
</
|
|
91
|
-
<
|
|
93
|
+
</Page.Tools>
|
|
94
|
+
<Page.Actions>
|
|
92
95
|
<Button.Root>
|
|
93
96
|
<Button.Icon>
|
|
94
97
|
<Icon name="action.add" />
|
|
95
98
|
</Button.Icon>
|
|
96
99
|
Новый заказ
|
|
97
100
|
</Button.Root>
|
|
98
|
-
</
|
|
99
|
-
<
|
|
101
|
+
</Page.Actions>
|
|
102
|
+
<Page.Chips>
|
|
100
103
|
<SmartFilter.Chips />
|
|
101
|
-
</
|
|
102
|
-
</
|
|
103
|
-
</
|
|
104
|
-
</
|
|
104
|
+
</Page.Chips>
|
|
105
|
+
</Page.TopBar>
|
|
106
|
+
</Page.Root>
|
|
107
|
+
</SmartFilter.Root>
|
|
105
108
|
);
|
|
106
109
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/** A nested record in the top bar: the path ending in the title, a line of data, the page's tools and its buttons — `Page.TopBar`, `Page.Heading`, `Page.Tools`, `Page.Actions`. */
|
|
2
|
+
import { Breadcrumb, Button, Icon, Input, Page, SegmentedControl } from "prime-ui-kit";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
const SECTIONS = [
|
|
6
|
+
{ value: "all", label: "Все" },
|
|
7
|
+
{ value: "mine", label: "Мои" },
|
|
8
|
+
{ value: "overdue", label: "Просрочены" },
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
const VIEWS = [
|
|
12
|
+
{ value: "board", label: "Доска" },
|
|
13
|
+
{ value: "list", label: "Список" },
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
export default function PageTopBarExample() {
|
|
17
|
+
const [section, setSection] = React.useState("all");
|
|
18
|
+
const [view, setView] = React.useState("board");
|
|
19
|
+
const [query, setQuery] = React.useState("");
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<Page.Root>
|
|
23
|
+
<Page.TopBar sticky={false}>
|
|
24
|
+
<Page.Heading>
|
|
25
|
+
<Breadcrumb.Root>
|
|
26
|
+
<Breadcrumb.Item href="#clients">Клиенты</Breadcrumb.Item>
|
|
27
|
+
<Breadcrumb.Item href="#north">ООО «Север»</Breadcrumb.Item>
|
|
28
|
+
</Breadcrumb.Root>
|
|
29
|
+
<Page.Title>Сделка № 2026-418</Page.Title>
|
|
30
|
+
<Page.Description>7 в работе · 6,5 млн ₽ · обновлено 9:40</Page.Description>
|
|
31
|
+
</Page.Heading>
|
|
32
|
+
<Page.Tools aria-label="Сделка № 2026-418">
|
|
33
|
+
<SegmentedControl.Root value={section} onValueChange={setSection} aria-label="Раздел">
|
|
34
|
+
{SECTIONS.map((item) => (
|
|
35
|
+
<SegmentedControl.Item key={item.value} value={item.value}>
|
|
36
|
+
{item.label}
|
|
37
|
+
</SegmentedControl.Item>
|
|
38
|
+
))}
|
|
39
|
+
</SegmentedControl.Root>
|
|
40
|
+
<Input.Root>
|
|
41
|
+
<Input.Wrapper>
|
|
42
|
+
<Input.Icon side="start">
|
|
43
|
+
<Icon name="action.search" tone="secondary" />
|
|
44
|
+
</Input.Icon>
|
|
45
|
+
<Input.Field
|
|
46
|
+
type="search"
|
|
47
|
+
aria-label="Поиск по задачам"
|
|
48
|
+
placeholder="Поиск"
|
|
49
|
+
value={query}
|
|
50
|
+
onValueChange={setQuery}
|
|
51
|
+
/>
|
|
52
|
+
</Input.Wrapper>
|
|
53
|
+
</Input.Root>
|
|
54
|
+
<SegmentedControl.Root value={view} onValueChange={setView} aria-label="Вид">
|
|
55
|
+
{VIEWS.map((item) => (
|
|
56
|
+
<SegmentedControl.Item key={item.value} value={item.value}>
|
|
57
|
+
{item.label}
|
|
58
|
+
</SegmentedControl.Item>
|
|
59
|
+
))}
|
|
60
|
+
</SegmentedControl.Root>
|
|
61
|
+
</Page.Tools>
|
|
62
|
+
<Page.Actions>
|
|
63
|
+
<Button.Root variant="soft" tone="neutral">
|
|
64
|
+
<Button.Icon>
|
|
65
|
+
<Icon name="action.forward" />
|
|
66
|
+
</Button.Icon>
|
|
67
|
+
Поделиться
|
|
68
|
+
</Button.Root>
|
|
69
|
+
<Button.Root variant="soft" tone="neutral">
|
|
70
|
+
<Button.Icon>
|
|
71
|
+
<Icon name="action.download" />
|
|
72
|
+
</Button.Icon>
|
|
73
|
+
Экспорт
|
|
74
|
+
</Button.Root>
|
|
75
|
+
<Button.Root>
|
|
76
|
+
<Button.Icon>
|
|
77
|
+
<Icon name="action.add" />
|
|
78
|
+
</Button.Icon>
|
|
79
|
+
Новая сделка
|
|
80
|
+
</Button.Root>
|
|
81
|
+
</Page.Actions>
|
|
82
|
+
</Page.TopBar>
|
|
83
|
+
</Page.Root>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** The same page
|
|
2
|
-
import { Card,
|
|
1
|
+
/** The same page at three caps: the whole main, a wide dashboard column, a reading column — `maxWidth`. */
|
|
2
|
+
import { Card, Page, Typography } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
import styles from "./examples.module.css";
|
|
5
5
|
|
|
@@ -9,13 +9,13 @@ const WIDTHS = [
|
|
|
9
9
|
{ value: "readable", text: "Условия использования: не шире колонки для чтения, по центру." },
|
|
10
10
|
] as const;
|
|
11
11
|
|
|
12
|
-
export default function
|
|
12
|
+
export default function PageVariantsExample() {
|
|
13
13
|
return (
|
|
14
14
|
<>
|
|
15
15
|
{WIDTHS.map(({ value, text }) => (
|
|
16
16
|
<div key={value} className={styles.main}>
|
|
17
|
-
<
|
|
18
|
-
<
|
|
17
|
+
<Page.Root maxWidth={value}>
|
|
18
|
+
<Page.Body>
|
|
19
19
|
<Card.Root>
|
|
20
20
|
<Card.Body>
|
|
21
21
|
<Typography variant="body-s" tone="secondary">
|
|
@@ -23,8 +23,8 @@ export default function PageContentVariantsExample() {
|
|
|
23
23
|
</Typography>
|
|
24
24
|
</Card.Body>
|
|
25
25
|
</Card.Root>
|
|
26
|
-
</
|
|
27
|
-
</
|
|
26
|
+
</Page.Body>
|
|
27
|
+
</Page.Root>
|
|
28
28
|
</div>
|
|
29
29
|
))}
|
|
30
30
|
</>
|
|
@@ -89,7 +89,7 @@ useSidebar() state hook for custom parts inside Root (useA
|
|
|
89
89
|
| `onModeChange` | `(mode: SidebarMode) => void` | — | Called with the new mode (Toggle, `useSidebar().setMode`). |
|
|
90
90
|
| `open` | `boolean` | — | Off-canvas panel on narrow viewports (controlled). |
|
|
91
91
|
| `defaultOpen` | `boolean` | `false` | Initial off-canvas state (uncontrolled). |
|
|
92
|
-
| `onOpenChange` | `(open: boolean) => void` | — | Off-canvas open / close: Toggle, the
|
|
92
|
+
| `onOpenChange` | `(open: boolean) => void` | — | Off-canvas open / close: Toggle, the menu button of `Page.TopBar`, scrim, Escape, an activated item, leaving the narrow viewport. |
|
|
93
93
|
| `offCanvas` | `"auto" \| "always" \| "never"` | `"auto"` | When the rail becomes an off-canvas panel opened by `open`: `auto` — below 768px (viewport); `always` — at any width; `never` — always a rail. |
|
|
94
94
|
| `closeOnOutsideClick` | `boolean` | `true` | A press on the scrim (outside the off-canvas panel) closes the panel. |
|
|
95
95
|
| `closeOnEscape` | `boolean` | `true` | Escape closes the off-canvas panel. |
|
|
@@ -294,13 +294,15 @@ The rail width does not depend on `size`.
|
|
|
294
294
|
| `closeOnEscape` (Root) | Escape closes the off-canvas panel | default; turn off with `closeOnOutsideClick` for a panel only its toggle closes | on |
|
|
295
295
|
| `asChild` (ItemAction) | the row action is the consumer's link with the button look | the action opens a page or `mailto:` | off |
|
|
296
296
|
|
|
297
|
-
Put `<Sidebar.Toggle variant="header" />` next to `Sidebar.Brand` in the header, or `Sidebar.Toggle` in the footer for a rail without a brand. Inside an `AppShell` the Sidebar publishes its navigation to the shell: on phones (`offCanvas="auto"`) or always (`offCanvas="always"`) the `
|
|
297
|
+
Put `<Sidebar.Toggle variant="header" />` next to `Sidebar.Brand` in the header, or `Sidebar.Toggle` in the footer for a rail without a brand. Inside an `AppShell` the Sidebar publishes its navigation to the shell: on phones (`offCanvas="auto"`) or always (`offCanvas="always"`) the page's `Page.TopBar` draws the menu button that opens the panel by itself, a `Sidebar.Toggle` outside the rail brings back a hidden one, and other triggers (a BottomNav «Ещё») read `useAppShellNav()`. One current item at a time; give every top-level item an icon when the rail can go compact (child items need none).
|
|
298
298
|
|
|
299
299
|
## States
|
|
300
300
|
| State | Driven by | DOM |
|
|
301
301
|
|---|---|---|
|
|
302
|
+
| held | a `Page.Guard` that is `busy` or `dirty` on the page | a press on `Sidebar.Item` or `Sidebar.Brand` stops before it navigates (a router link included) and the panel stays; `dirty` asks first, then repeats it |
|
|
302
303
|
| mode | `mode` / `defaultMode` | Root `data-mode`, `data-panel-mode` (the last visible mode while hidden); `<nav inert>` while hidden |
|
|
303
304
|
| off-canvas | `offCanvas="always"`, or `"auto"` + viewport < 768px | Root `data-off-canvas`, `data-state="open" \| "closed"`; `<nav inert>` while closed; the kit scrim (`role="presentation"`) while open; in an `AppShell` the shell Root `data-off-canvas` |
|
|
305
|
+
| placing | the viewport crossed the off-canvas breakpoint (not a person's choice) | Root `data-placing` for one painted frame: the rail lands at its new width with no motion (no growing from 0, no folding rows, no sliding panel) |
|
|
304
306
|
| dismiss | `closeOnOutsideClick`, `closeOnEscape` | a press on the scrim / Escape closes the open panel, or not |
|
|
305
307
|
| current | `current` or a router's `aria-current` | Item `aria-current="page"`, `data-state="active"` |
|
|
306
308
|
| active path | a child of a Sub (or an item of a Group) is current | SubTrigger (or the `…` row of a folded Group) `data-active-path`; a closed Sub opens, a closed Group opens off the compact rail |
|
|
@@ -364,7 +366,7 @@ Leaving the narrow viewport closes the off-canvas panel; activating an item (a l
|
|
|
364
366
|
- A row action is its own button next to the item (never nested), named by `label` with a tooltip.
|
|
365
367
|
- The account avatar is hidden from screen readers; the name and the muted line name the button.
|
|
366
368
|
- Off-canvas: a decorative scrim (a press on it is a press outside, `closeOnOutsideClick`), focus trap and Escape (`closeOnEscape`); focus returns to the opener.
|
|
367
|
-
- Toggle, the
|
|
369
|
+
- Toggle, the menu button of `Page.TopBar` and `useAppShellNav` triggers: `aria-expanded`, `aria-controls` → the `<nav>`, label from `labels`.
|
|
368
370
|
|
|
369
371
|
### Labels
|
|
370
372
|
<!-- Generated from api.ts by `bun run docs:build`. Edit api.ts, not this section. -->
|
|
@@ -392,7 +394,7 @@ Leaving the narrow viewport closes the off-canvas panel; activating an item (a l
|
|
|
392
394
|
| [dismiss.tsx](examples/dismiss.tsx) | An off-canvas panel only its own toggle closes: a press on the scrim and Escape leave it open, a picked item still closes it — `closeOnOutsideClick`, `closeOnEscape`. |
|
|
393
395
|
| [controlled.tsx](examples/controlled.tsx) | The parent owns the rail mode: expanded, an icon rail with tooltips, or hidden; every switch is one synchronous movement — `mode`, `onModeChange`. |
|
|
394
396
|
| [controlled-open.tsx](examples/controlled-open.tsx) | Navigation behind a menu button at any width: the parent opens the off-canvas panel, the scrim, Escape, the header toggle or a navigation closes it — `offCanvas`, `open`, `onOpenChange`. |
|
|
395
|
-
| [narrow.tsx](examples/narrow.tsx) | Below 768px the rail leaves the layout and slides in over the page from the menu button the
|
|
397
|
+
| [narrow.tsx](examples/narrow.tsx) | Below 768px the rail leaves the layout and slides in over the page from the menu button the page top bar draws by itself; from 768px it is the rail again, and the button leaves — `AppShell`, `labels`. |
|
|
396
398
|
|
|
397
399
|
## Mistakes
|
|
398
400
|
- `icon={…}` / `badge={…}` props → use the `Sidebar.ItemIcon` and `Sidebar.ItemCount` parts.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** An off-canvas panel only its own toggle closes: a press on the scrim and Escape leave it open, a picked item still closes it — `closeOnOutsideClick`, `closeOnEscape`. */
|
|
2
|
-
import {
|
|
2
|
+
import { AppShell, Icon, Page, Sidebar } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
import styles from "./examples.module.css";
|
|
5
5
|
|
|
@@ -35,12 +35,15 @@ export default function SidebarDismissExample() {
|
|
|
35
35
|
</Sidebar.Content>
|
|
36
36
|
</Sidebar.Root>
|
|
37
37
|
</AppShell.Nav>
|
|
38
|
-
<
|
|
39
|
-
<
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
<AppShell.Main>
|
|
39
|
+
<Page.Root>
|
|
40
|
+
<Page.TopBar>
|
|
41
|
+
<Page.Heading>
|
|
42
|
+
<Page.Title>Сборка заказов</Page.Title>
|
|
43
|
+
</Page.Heading>
|
|
44
|
+
</Page.TopBar>
|
|
45
|
+
</Page.Root>
|
|
46
|
+
</AppShell.Main>
|
|
44
47
|
</AppShell.Root>
|
|
45
48
|
</div>
|
|
46
49
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** Below 768px the rail leaves the layout and slides in over the page from the menu button the
|
|
2
|
-
import {
|
|
1
|
+
/** Below 768px the rail leaves the layout and slides in over the page from the menu button the page top bar draws by itself; from 768px it is the rail again, and the button leaves — `AppShell`, `labels`. */
|
|
2
|
+
import { AppShell, Icon, Page, Sidebar } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
import styles from "./examples.module.css";
|
|
5
5
|
|
|
@@ -43,12 +43,15 @@ export default function SidebarNarrowExample() {
|
|
|
43
43
|
</Sidebar.Content>
|
|
44
44
|
</Sidebar.Root>
|
|
45
45
|
</AppShell.Nav>
|
|
46
|
-
<
|
|
47
|
-
<
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
<AppShell.Main>
|
|
47
|
+
<Page.Root>
|
|
48
|
+
<Page.TopBar>
|
|
49
|
+
<Page.Heading>
|
|
50
|
+
<Page.Title>Сделки</Page.Title>
|
|
51
|
+
</Page.Heading>
|
|
52
|
+
</Page.TopBar>
|
|
53
|
+
</Page.Root>
|
|
54
|
+
</AppShell.Main>
|
|
52
55
|
</AppShell.Root>
|
|
53
56
|
</div>
|
|
54
57
|
);
|
package/dist/skill/responsive.md
CHANGED
|
@@ -38,7 +38,7 @@ everything inside a page breaks by its container.
|
|
|
38
38
|
- CSS custom properties cannot be used inside media / container conditions: write the number.
|
|
39
39
|
- Inside your own blocks prefer container queries: `container-type: inline-size` on the block,
|
|
40
40
|
`@container (min-width: 30rem)` inside it.
|
|
41
|
-
- The app takes the full width; cap only text (`
|
|
41
|
+
- The app takes the full width; cap only text (`Page.Root maxWidth="readable"`).
|
|
42
42
|
- Required minimum: `<meta name="viewport" content="width=device-width, initial-scale=1">`, no
|
|
43
43
|
`user-scalable=no`, no horizontal page scroll at 320px.
|
|
44
44
|
|
|
@@ -46,9 +46,10 @@ everything inside a page breaks by its container.
|
|
|
46
46
|
|
|
47
47
|
A layout inside a page needs no breakpoint: it takes its columns from the room it has.
|
|
48
48
|
|
|
49
|
-
- The tiles of a page (KPI cards, charts, panels) are one `
|
|
50
|
-
`
|
|
51
|
-
then small tiles pair up, from 64rem each its span).
|
|
49
|
+
- The tiles of a page (KPI cards, charts, panels) are one `Page.Grid` with a
|
|
50
|
+
`Page.Cell span` per tile: it folds by its own width (below 30rem every tile takes the row,
|
|
51
|
+
then small tiles pair up, from 64rem each its span). Write a wide tile (`span` 7–11) next to a
|
|
52
|
+
narrow one (4–5): between 40 and 64rem the two pair up as 2/3 + 1/3, so an 8 + 4 row keeps no hole.
|
|
52
53
|
- A grid inside one block (thumbnails, short fields of one record) is the block's own
|
|
53
54
|
`grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--prime-layout-tile-min-width)), 1fr))`
|
|
54
55
|
— `auto-fill`, so a lone item keeps its column width instead of stretching across the row.
|
|
@@ -61,43 +62,49 @@ Use these as they are; never wrap them in your own breakpoints.
|
|
|
61
62
|
|
|
62
63
|
| Need | Built in |
|
|
63
64
|
|---|---|
|
|
64
|
-
| app frame | AppShell gutters 16 → 24 → 32
|
|
65
|
-
| app navigation | Sidebar: on-canvas from 768px, an off-canvas panel below (`offCanvas="auto"`) opened by the menu button
|
|
66
|
-
| page
|
|
67
|
-
| page header | `AppHeader`: the page's tools wrap under the title (`AppHeader.Tools`); a document page's `PageContent.Header`: actions wrap under the title |
|
|
65
|
+
| app frame | `AppShell.Main` hands the page its gutters 16 → 24 → 32, top air 24 → 32 and bottom air 64 (the gutter under a `fill` page; above a floating BottomNav it keeps the capsule's room); `Page.TopBar` un-sticks on screens lower than 480px and respects the top safe area |
|
|
66
|
+
| app navigation | Sidebar: on-canvas from 768px, an off-canvas panel below (`offCanvas="auto"`) opened by the menu button `Page.TopBar` draws by itself while the Sidebar is off-canvas; `BottomNav` in `AppShell.Footer` for 2–6 app sections on phones — flat or a floating glass capsule (`floating`) with an optional round `BottomNav.Action`, icons with or without labels (`iconOnly`); the shell hides it by itself while the Sidebar rail is on screen (from 768px with `offCanvas="auto"`) |
|
|
67
|
+
| page top bar | `Page.TopBar` lays out its groups from their natural widths: one line while they fit, then the tools on a line of their own, then icon-only buttons, then «⋯», and the heading gives last ([below](#the-pages-top-bar--pagetopbar)). `Page.Header` in the flow: actions wrap under the title |
|
|
68
68
|
| switchers | [Switchers](#switchers) never wrap or truncate: they scroll inside themselves |
|
|
69
69
|
| tables | DataTable scrolls inside itself, edge shadows show hidden columns, `stickyFirstColumn`, `DataTable.ColumnsMenu` for a column chooser, the toolbar stacks below a 30rem table, sticky head off on short screens |
|
|
70
70
|
| floating layers | Popover (opened from a Trigger), Dropdown, Select (and Datepicker, ColorPresets) never wider than the viewport − 16, 8 from the edges, flip when out of room; below 640 they open as a bottom sheet — scrim, grab handle, swipe down to close, page scroll locked; Tooltip and TagSelect stay anchored |
|
|
71
71
|
| dialogs | Modal is a bottom sheet with a handle below 640 (swipe down closes it while `closeOnOutsideClick` allows); footer actions stack on phones and in a dialog narrower than 360px; `Sheet` is a bottom sheet for a short task at every width (centred at 560 on a tablet or desktop) and closes with a swipe down from its handle or header; a Drawer has no swipe — buttons, Escape and the scrim close it |
|
|
72
72
|
| date picking | Datepicker shows two months and side presets only when they fit; otherwise one month and presets above |
|
|
73
73
|
| system messages | Banner actions move under the text in a narrow container; Notification stays within the viewport with safe-area insets |
|
|
74
|
-
| chat | `Message` bubbles fit their content in CSS and cap at 30rem and 85% of the chat column, file / contact / location cards at 16rem and 75%, a round video at its size token × 1.15 and the row width (the Composer's recording preview at 70%), so a chat works from 320px; the message menu is a bottom sheet below 640, the reaction bar opens on a long press; `Composer` takes its container's width, keeps 16px text and 44px hit areas on touch, and the recording bar covers the field without changing the row height; `VoicePlayer` shrinks its waveform to fit; `Chat` fills its pane, a chat beside its dialogs is `
|
|
74
|
+
| chat | `Message` bubbles fit their content in CSS and cap at 30rem and 85% of the chat column, file / contact / location cards at 16rem and 75%, a round video at its size token × 1.15 and the row width (the Composer's recording preview at 70%), so a chat works from 320px; the message menu is a bottom sheet below 640, the reaction bar opens on a long press; `Composer` takes its container's width, keeps 16px text and 44px hit areas on touch, and the recording bar covers the field without changing the row height; `VoicePlayer` shrinks its waveform to fit; `Chat` fills its pane, a chat beside its dialogs is `Page.Split` (one pane at a time when narrow); `Chat.Header` keeps the avatar, a title that truncates and icon-only actions, `Chat.Search` puts its counter and arrows after a shrinking field, `Chat.Pinned` truncates its line, the «к последним» button floats inside the thread at its bottom-end, and the Composer stays one row (paperclip · field · button) from 320px with its bars above it |
|
|
75
75
|
| schedules and boards | `Gantt` scrolls inside itself with the header and the first column pinned; the first column narrows (12 → 10 → 6rem by the chart's width, or only the avatar); a long press on touch creates a one-unit bar; rows and days are virtualized. `Kanban` columns are 18rem from 40rem of board width, below that 85% of it with snapping so the next column peeks; the strip scrolls sideways inside the board |
|
|
76
76
|
| cards and properties | Card templates stack and wrap in a narrow container; `DescriptionList` stacks label over value below 24rem of its width; FileUpload `layout="grid"` shows 5 · 4 · 3 · 2 tiles across by its own width |
|
|
77
77
|
| fields | text ≥ 16px under a coarse pointer (no iOS zoom on focus); labels above fields; affixes in the field row |
|
|
78
78
|
| codes | DigitInput cells 36–64px, `fullWidth` cells share a phone column |
|
|
79
79
|
| touch | hover effects only under `(hover: hover)`; under `(pointer: coarse)` small controls get a 44px hit area; nothing is hover-only |
|
|
80
80
|
|
|
81
|
-
##
|
|
81
|
+
## The page's top bar — `Page.TopBar`
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
order
|
|
86
|
-
[PageToolbar COMPONENT.md → Layout by width](reference/components/page-toolbar/COMPONENT.md#layout-by-width).
|
|
83
|
+
The bar holds up to four groups ([what goes in each](composition.md#the-top-bar)) and lays them out
|
|
84
|
+
by one plan chosen from their natural widths. As the width runs out it gives way in five steps, always
|
|
85
|
+
in this order, and nothing ever overflows:
|
|
87
86
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
1. **One line** — `Page.Heading`, `Page.Tools` and `Page.Actions` side by side while they fit.
|
|
88
|
+
2. **Tools below** — the tools take a line of their own under the first one and fill its width: a
|
|
89
|
+
search (`SmartFilter.Toolbar`, `Input.Root`) grows first, the switchers and a period
|
|
90
|
+
(`Datepicker.Root`) share the rest and wrap when one line is not enough. Beside a search that
|
|
91
|
+
would get too little room the SmartFilter button shows only its icon and count, on the same row.
|
|
92
|
+
The actions stay on the first line beside the heading at every width.
|
|
93
|
+
3. **Icons** — every Button with an icon shows only the icon, the secondary ones first, then the
|
|
94
|
+
primary; its label stays its accessible name and becomes its tooltip.
|
|
95
|
+
4. **«⋯»** — the secondary Buttons fold into a menu (`labels.more`); the primary always stays.
|
|
96
|
+
5. **The heading gives** — only after every button step: the middle levels of the path fold into
|
|
97
|
+
«…»; a heading with a path that still does not fit stacks (the path on its own line over the
|
|
98
|
+
title, the title and its description wrapping), so no level is cut to a fragment; a heading without a path truncates.
|
|
99
|
+
|
|
100
|
+
`Page.Chips` is always a line of its own under everything, gone while no filter is set. The heading
|
|
101
|
+
keeps its natural width: the bar sizes the title, so there is nothing to tune.
|
|
95
102
|
|
|
96
103
|
```tsx
|
|
97
104
|
import {
|
|
98
105
|
Button,
|
|
99
106
|
Icon,
|
|
100
|
-
|
|
107
|
+
Page,
|
|
101
108
|
SegmentedControl,
|
|
102
109
|
Select,
|
|
103
110
|
SmartFilter,
|
|
@@ -110,7 +117,7 @@ const FIELDS: SmartFilterField[] = [
|
|
|
110
117
|
{ key: "city", label: "Город", options: [{ value: "msk", label: "Москва" }] },
|
|
111
118
|
];
|
|
112
119
|
|
|
113
|
-
export function
|
|
120
|
+
export function OrdersPage() {
|
|
114
121
|
const [section, setSection] = useState("all");
|
|
115
122
|
const [period, setPeriod] = useState("30d");
|
|
116
123
|
const [filter, setFilter] = useState<SmartFilterValue>({});
|
|
@@ -124,63 +131,75 @@ export function OrdersPanel() {
|
|
|
124
131
|
search={search}
|
|
125
132
|
onSearchChange={setSearch}
|
|
126
133
|
>
|
|
127
|
-
<
|
|
128
|
-
<
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
<Select.
|
|
144
|
-
<Select.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
<Select.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
<
|
|
154
|
-
<Button.
|
|
155
|
-
<Icon
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
134
|
+
<Page.Root>
|
|
135
|
+
<Page.TopBar>
|
|
136
|
+
<Page.Heading>
|
|
137
|
+
<Page.Title>Заказы</Page.Title>
|
|
138
|
+
<Page.Description>128 в работе · 6 ждут оплаты</Page.Description>
|
|
139
|
+
</Page.Heading>
|
|
140
|
+
<Page.Tools aria-label="Заказы">
|
|
141
|
+
<SegmentedControl.Root value={section} onValueChange={setSection} aria-label="Раздел">
|
|
142
|
+
<SegmentedControl.Item value="all">
|
|
143
|
+
Все<SegmentedControl.Count>128</SegmentedControl.Count>
|
|
144
|
+
</SegmentedControl.Item>
|
|
145
|
+
<SegmentedControl.Item value="active">
|
|
146
|
+
В работе<SegmentedControl.Count>12</SegmentedControl.Count>
|
|
147
|
+
</SegmentedControl.Item>
|
|
148
|
+
</SegmentedControl.Root>
|
|
149
|
+
<SmartFilter.Toolbar />
|
|
150
|
+
<Select.Root value={period} onValueChange={setPeriod}>
|
|
151
|
+
<Select.Trigger aria-label="Период">
|
|
152
|
+
<Select.Value />
|
|
153
|
+
</Select.Trigger>
|
|
154
|
+
<Select.Content>
|
|
155
|
+
<Select.Item value="7d">7 дней</Select.Item>
|
|
156
|
+
<Select.Item value="30d">30 дней</Select.Item>
|
|
157
|
+
</Select.Content>
|
|
158
|
+
</Select.Root>
|
|
159
|
+
</Page.Tools>
|
|
160
|
+
<Page.Actions>
|
|
161
|
+
<Button.Root variant="soft" tone="neutral">
|
|
162
|
+
<Button.Icon>
|
|
163
|
+
<Icon name="action.download" />
|
|
164
|
+
</Button.Icon>
|
|
165
|
+
Экспорт
|
|
166
|
+
</Button.Root>
|
|
167
|
+
<Button.Root>
|
|
168
|
+
<Button.Icon>
|
|
169
|
+
<Icon name="action.add" />
|
|
170
|
+
</Button.Icon>
|
|
171
|
+
Новый заказ
|
|
172
|
+
</Button.Root>
|
|
173
|
+
</Page.Actions>
|
|
174
|
+
<Page.Chips>
|
|
175
|
+
<SmartFilter.Chips />
|
|
176
|
+
</Page.Chips>
|
|
177
|
+
</Page.TopBar>
|
|
178
|
+
<Page.Body>{/* the orders table */}</Page.Body>
|
|
179
|
+
</Page.Root>
|
|
164
180
|
</SmartFilter.Root>
|
|
165
181
|
);
|
|
166
182
|
}
|
|
167
183
|
```
|
|
168
184
|
|
|
169
|
-
- One tier for the whole
|
|
170
|
-
stay level. A denser page wraps the
|
|
185
|
+
- One tier for the whole bar (default `m`): never `size` on one control inside — wrapped lines must
|
|
186
|
+
stay level. A denser page wraps the bar in `<ControlSizeProvider value="s">`; every kit control
|
|
171
187
|
inside takes that tier.
|
|
172
|
-
-
|
|
173
|
-
|
|
188
|
+
- A Button without an icon keeps its label at every step and leaves the bar less room before it
|
|
189
|
+
folds: give each one a `Button.Icon`.
|
|
190
|
+
- A SegmentedControl or a Datepicker in `Page.Tools` needs no `fullWidth`: the bar sets it.
|
|
191
|
+
- The primary action is on screen at every width — as its icon at the narrowest; it never folds and
|
|
192
|
+
never disappears.
|
|
174
193
|
- Section totals go into `SegmentedControl.Count`, not into stat cards above the table.
|
|
175
|
-
- A long form saves through the
|
|
176
|
-
bar at the bottom of a phone screen.
|
|
177
|
-
- Do not duplicate search: if the
|
|
194
|
+
- A long form saves through the bar's primary action with a count («Сохранить 3 изменения»), never a
|
|
195
|
+
sticky bar at the bottom of a phone screen.
|
|
196
|
+
- Do not duplicate search: if the bar has one, the list below filters by it.
|
|
178
197
|
|
|
179
198
|
## Switchers
|
|
180
199
|
|
|
181
|
-
- **Three width modes:** by content (`fullWidth` off), full width (`fullWidth`), full width only
|
|
182
|
-
|
|
183
|
-
- Sections of a page → SegmentedControl in `
|
|
200
|
+
- **Three width modes:** by content (`fullWidth` off), full width (`fullWidth`), full width only on
|
|
201
|
+
a line of its own (a SegmentedControl in `Page.Tools` — the bar decides).
|
|
202
|
+
- Sections of a page → SegmentedControl in `Page.Tools`; panels inside a card or a section →
|
|
184
203
|
Tabs (the folder look belongs to its panel).
|
|
185
204
|
- Every switcher — Tabs, SegmentedControl, a horizontal ButtonGroup and BottomNav — scrolls inside
|
|
186
205
|
itself when its items do not fit: never a second line, never a truncated item. Its hidden edges
|
|
@@ -195,9 +214,9 @@ export function OrdersPanel() {
|
|
|
195
214
|
|
|
196
215
|
## List + details, side panels
|
|
197
216
|
|
|
198
|
-
- A list people work through record by record (mail, a messenger, tickets) is `
|
|
199
|
-
the list in a 16–20rem column with the details beside it from 48rem
|
|
200
|
-
pane at a time with `
|
|
217
|
+
- A list people work through record by record (mail, a messenger, tickets) is `Page.Split`:
|
|
218
|
+
the list (`Page.List`) in a 16–20rem column with the details (`Page.Detail`) beside it from 48rem
|
|
219
|
+
of the split's own width, one pane at a time with `Page.BackButton` below it. Details opened now and then from a table
|
|
201
220
|
open in a Drawer.
|
|
202
221
|
- A side panel of details becomes full-screen on a phone (`Drawer.Content` is full width below 640).
|
|
203
222
|
- Its period / view controls stay visible on every tab of the panel.
|
|
@@ -205,7 +224,7 @@ export function OrdersPanel() {
|
|
|
205
224
|
## Components on narrow widths — what you still decide
|
|
206
225
|
|
|
207
226
|
**Tables.** Let DataTable scroll inside itself; offer a column chooser (`DataTable.ColumnsMenu` in
|
|
208
|
-
`toolbar`; the key column `hideable: false`); `stickyFirstColumn` for the name. On phones a table / cards switch in `
|
|
227
|
+
`toolbar`; the key column `hideable: false`); `stickyFirstColumn` for the name. On phones a table / cards switch in `Page.Tools` is fine — silently dropping columns
|
|
209
228
|
by breakpoint is not. Never ask to rotate the phone.
|
|
210
229
|
|
|
211
230
|
**Card grids.** [Intrinsic grids](#intrinsic-grids), never a breakpoint. Tiles of a row share one
|
|
@@ -257,7 +276,7 @@ Target CLS ≤ 0.1: nothing moves while loading or when a filter changes.
|
|
|
257
276
|
Drag the window through 320, 390, 768, 1024, 1280 and 1920px — continuously, not only at these points.
|
|
258
277
|
|
|
259
278
|
- [ ] No horizontal page scroll at any width (tables and switchers scroll inside themselves).
|
|
260
|
-
- [ ] The primary action is on screen at every width — never hidden ([the page
|
|
279
|
+
- [ ] The primary action is on screen at every width — never hidden ([the page's top bar](#the-pages-top-bar--pagetopbar)).
|
|
261
280
|
- [ ] Every item alone in its row stretches; items of stretched switchers are equal.
|
|
262
281
|
- [ ] All controls in a row share one height; no «staircase» after a wrap.
|
|
263
282
|
- [ ] Text never overlaps and is cut only at its own block's edge; cut text has a tooltip or `title`.
|