prime-ui-kit 0.14.0 → 0.15.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 +13 -14
- package/dist/chunks/{chunk-P6ZO37JM.js → chunk-2IKH55MI.js} +1 -1
- package/dist/chunks/{chunk-SYEX7OVT.js → chunk-THFZIHKU.js} +276 -263
- package/dist/chunks/{chunk-WXKRUVSE.js → chunk-XJAVS6FH.js} +49 -48
- package/dist/color-picker.js +2 -2
- package/dist/components/dnd/Dnd.d.ts +1 -1
- package/dist/components/login-form/LoginForm.d.ts +5 -1
- package/dist/index.css +1 -1
- package/dist/index.js +2 -2
- package/dist/internal/swatch.d.ts +6 -2
- package/dist/layout/app-header/AppHeader.d.ts +9 -28
- package/dist/layout/index.d.ts +1 -1
- package/dist/skill/SKILL.md +9 -7
- package/dist/skill/api-contract.md +2 -2
- package/dist/skill/cheatsheet.md +9 -2
- package/dist/skill/checklist.md +9 -5
- package/dist/skill/choosing.md +7 -9
- package/dist/skill/components.md +5 -12
- package/dist/skill/composition.md +281 -54
- package/dist/skill/foundations.md +1 -1
- package/dist/skill/layouts.md +70 -37
- package/dist/skill/reference/components/avatar/examples/states.tsx +4 -4
- package/dist/skill/reference/components/badge/examples/applied-filters.tsx +13 -19
- package/dist/skill/reference/components/badge/examples/examples.module.css +1 -8
- package/dist/skill/reference/components/badge/examples/server-tags.tsx +2 -6
- package/dist/skill/reference/components/banner/examples/examples.module.css +1 -5
- package/dist/skill/reference/components/banner/examples/page-strip.tsx +16 -22
- package/dist/skill/reference/components/breadcrumb/COMPONENT.md +4 -3
- package/dist/skill/reference/components/breadcrumb/examples/ellipsis.tsx +2 -2
- package/dist/skill/reference/components/button-group/COMPONENT.md +2 -2
- package/dist/skill/reference/components/button-group/examples/in-form.tsx +22 -2
- package/dist/skill/reference/components/button-group/examples/states.tsx +10 -1
- package/dist/skill/reference/components/card/COMPONENT.md +2 -1
- package/dist/skill/reference/components/card/examples/screen.tsx +362 -0
- package/dist/skill/reference/components/card/examples/variants.tsx +15 -1
- package/dist/skill/reference/components/chart-frame/COMPONENT.md +2 -1
- package/dist/skill/reference/components/chart-frame/examples/fill-height.tsx +119 -0
- package/dist/skill/reference/components/chart-frame/examples/states.tsx +3 -1
- package/dist/skill/reference/components/chat/COMPONENT.md +3 -1
- package/dist/skill/reference/components/chat/examples/group-chat.tsx +15 -2
- package/dist/skill/reference/components/chat/examples/reactions.tsx +121 -0
- package/dist/skill/reference/components/chat/examples/screen.module.css +9 -0
- package/dist/skill/{patterns/chat.tsx → reference/components/chat/examples/screen.tsx} +170 -351
- package/dist/skill/reference/components/chat-list/COMPONENT.md +1 -0
- package/dist/skill/reference/components/chat-list/examples/links.tsx +72 -0
- package/dist/skill/reference/components/checkbox/COMPONENT.md +1 -1
- package/dist/skill/reference/components/checkbox/examples/examples.module.css +5 -1
- package/dist/skill/reference/components/checkbox/examples/indicator.tsx +13 -7
- package/dist/skill/reference/components/checkbox/examples/states.tsx +6 -1
- package/dist/skill/reference/components/color-field/COMPONENT.md +1 -1
- package/dist/skill/reference/components/color-picker/COMPONENT.md +4 -3
- package/dist/skill/reference/components/color-picker/examples/controlled-open.tsx +37 -0
- package/dist/skill/reference/components/color-picker/examples/presets.tsx +2 -2
- package/dist/skill/reference/components/color-picker/examples/states.tsx +23 -14
- package/dist/skill/reference/components/composer/COMPONENT.md +2 -1
- package/dist/skill/reference/components/composer/examples/attach-menu.tsx +78 -0
- package/dist/skill/reference/components/composer/examples/attachments.tsx +2 -2
- package/dist/skill/reference/components/crossfade/COMPONENT.md +1 -0
- package/dist/skill/reference/components/crossfade/examples/screen.tsx +197 -0
- package/dist/skill/reference/components/data-table/COMPONENT.md +3 -2
- package/dist/skill/reference/components/data-table/examples/detail-panel.tsx +36 -37
- package/dist/skill/reference/components/data-table/examples/examples.module.css +0 -12
- package/dist/skill/reference/components/data-table/examples/numeric.tsx +36 -4
- package/dist/skill/reference/components/data-table/examples/overview.tsx +1 -0
- package/dist/skill/reference/components/data-table/examples/row-open.tsx +7 -36
- package/dist/skill/{patterns/list-page.module.css → reference/components/data-table/examples/screen.module.css} +1 -7
- package/dist/skill/{patterns/list-page.tsx → reference/components/data-table/examples/screen.tsx} +84 -64
- package/dist/skill/reference/components/datepicker/COMPONENT.md +5 -4
- package/dist/skill/reference/components/datepicker/examples/examples.module.css +2 -6
- package/dist/skill/reference/components/datepicker/examples/in-form.tsx +47 -55
- package/dist/skill/reference/components/datepicker/examples/locale.tsx +35 -0
- package/dist/skill/reference/components/datepicker/examples/range-presets.tsx +11 -2
- package/dist/skill/reference/components/datepicker/examples/states.tsx +9 -1
- package/dist/skill/reference/components/description-list/COMPONENT.md +1 -0
- package/dist/skill/{patterns/detail-page.module.css → reference/components/description-list/examples/screen.module.css} +2 -9
- package/dist/skill/reference/components/description-list/examples/screen.tsx +214 -0
- package/dist/skill/reference/components/description-list/examples/structure.tsx +1 -1
- package/dist/skill/reference/components/digit-input/COMPONENT.md +3 -1
- package/dist/skill/reference/components/digit-input/examples/states.tsx +3 -1
- package/dist/skill/reference/components/digit-input/examples/without-focus-ring.tsx +13 -0
- package/dist/skill/reference/components/divider/examples/with-icon.tsx +2 -2
- package/dist/skill/reference/components/dnd/COMPONENT.md +4 -2
- package/dist/skill/reference/components/dnd/examples/drop-zones.tsx +82 -49
- package/dist/skill/reference/components/dnd/examples/examples.module.css +50 -0
- package/dist/skill/reference/components/dnd/examples/states.tsx +54 -0
- package/dist/skill/reference/components/dnd/examples/table.tsx +113 -0
- package/dist/skill/reference/components/drawer/COMPONENT.md +1 -0
- package/dist/skill/reference/components/drawer/examples/dismiss.tsx +5 -3
- package/dist/skill/reference/components/drawer/examples/examples.module.css +0 -13
- package/dist/skill/reference/components/drawer/examples/header-actions.tsx +5 -9
- package/dist/skill/reference/components/drawer/examples/overview.tsx +6 -18
- package/dist/skill/reference/components/drawer/examples/screen.tsx +298 -0
- package/dist/skill/reference/components/dropdown/examples/examples.module.css +1 -5
- package/dist/skill/reference/components/empty-page/COMPONENT.md +1 -1
- package/dist/skill/reference/components/empty-page/examples/region-error.tsx +8 -2
- package/dist/skill/reference/components/example-frame/COMPONENT.md +3 -2
- package/dist/skill/reference/components/example-frame/examples/initial-view.tsx +44 -0
- package/dist/skill/reference/components/field-list/COMPONENT.md +2 -1
- package/dist/skill/reference/components/field-list/examples/errors.tsx +5 -2
- package/dist/skill/{patterns/record-editor.tsx → reference/components/field-list/examples/screen.tsx} +3 -43
- package/dist/skill/reference/components/file-upload/COMPONENT.md +7 -6
- package/dist/skill/reference/components/file-upload/examples/custom-body.tsx +2 -1
- package/dist/skill/reference/components/file-upload/examples/examples.module.css +1 -7
- package/dist/skill/reference/components/file-upload/examples/file-cards.tsx +10 -1
- package/dist/skill/reference/components/file-upload/examples/gallery.tsx +2 -2
- package/dist/skill/reference/components/file-upload/examples/in-form.tsx +4 -9
- package/dist/skill/reference/components/file-upload/examples/overview.tsx +5 -1
- package/dist/skill/reference/components/file-upload/examples/row-parts.tsx +24 -1
- package/dist/skill/{patterns/media-library.module.css → reference/components/file-upload/examples/screen.module.css} +2 -1
- package/dist/skill/reference/components/file-upload/examples/screen.tsx +646 -0
- package/dist/skill/reference/components/file-upload/examples/states.tsx +6 -2
- package/dist/skill/reference/components/file-upload/examples/validation.tsx +11 -2
- package/dist/skill/reference/components/file-upload/examples/variants.tsx +3 -20
- package/dist/skill/reference/components/gantt/COMPONENT.md +2 -1
- package/dist/skill/reference/components/gantt/examples/screen.module.css +14 -0
- package/dist/skill/{patterns/schedule.tsx → reference/components/gantt/examples/screen.tsx} +174 -170
- package/dist/skill/reference/components/gantt/examples/states.tsx +6 -2
- package/dist/skill/reference/components/input/COMPONENT.md +2 -2
- package/dist/skill/reference/components/input/examples/examples.module.css +0 -6
- package/dist/skill/reference/components/input/examples/in-form.tsx +1 -9
- package/dist/skill/reference/components/input/examples/password-strength.tsx +34 -8
- package/dist/skill/reference/components/input/examples/states.tsx +6 -1
- package/dist/skill/reference/components/kanban/COMPONENT.md +3 -2
- package/dist/skill/reference/components/kanban/examples/columns.tsx +8 -5
- package/dist/skill/reference/components/kanban/examples/screen.module.css +17 -0
- package/dist/skill/{patterns/kanban-board.tsx → reference/components/kanban/examples/screen.tsx} +130 -172
- package/dist/skill/reference/components/kanban/examples/states.tsx +17 -6
- package/dist/skill/reference/components/login-form/COMPONENT.md +6 -5
- package/dist/skill/reference/components/login-form/examples/examples.module.css +2 -21
- package/dist/skill/reference/components/login-form/examples/forgot-password.tsx +28 -32
- package/dist/skill/reference/components/login-form/examples/narrow.tsx +1 -1
- package/dist/skill/reference/components/login-form/examples/overview.tsx +45 -47
- package/dist/skill/reference/components/login-form/examples/register.tsx +64 -68
- package/dist/skill/reference/components/login-form/examples/reset-password.tsx +50 -47
- package/dist/skill/reference/components/login-form/examples/sizes.tsx +4 -6
- package/dist/skill/reference/components/login-form/examples/states.tsx +53 -57
- package/dist/skill/reference/components/login-form/examples/structure.tsx +18 -22
- package/dist/skill/reference/components/login-form/examples/verification-code.tsx +41 -45
- package/dist/skill/reference/components/media-viewer/COMPONENT.md +1 -1
- package/dist/skill/reference/components/media-viewer/examples/dismiss.tsx +5 -1
- package/dist/skill/reference/components/message/COMPONENT.md +4 -3
- package/dist/skill/reference/components/message/examples/file.tsx +5 -1
- package/dist/skill/reference/components/message/examples/media-open.tsx +48 -0
- package/dist/skill/reference/components/message/examples/status.tsx +21 -3
- package/dist/skill/reference/components/message/examples/text-formatting.tsx +7 -1
- package/dist/skill/reference/components/modal/COMPONENT.md +2 -1
- package/dist/skill/reference/components/modal/examples/custom-container.tsx +20 -20
- package/dist/skill/reference/components/modal/examples/dismiss.tsx +5 -3
- package/dist/skill/reference/components/modal/examples/enter-key.tsx +116 -0
- package/dist/skill/reference/components/modal/examples/examples.module.css +7 -13
- package/dist/skill/reference/components/modal/examples/structure.tsx +5 -2
- package/dist/skill/reference/components/native-select/COMPONENT.md +1 -1
- package/dist/skill/reference/components/native-select/examples/states.tsx +5 -1
- package/dist/skill/reference/components/notification/COMPONENT.md +1 -1
- package/dist/skill/reference/components/notification/examples/dismiss.tsx +2 -2
- package/dist/skill/reference/components/page-content/COMPONENT.md +1 -0
- package/dist/skill/reference/components/page-content/examples/list-detail.tsx +0 -3
- package/dist/skill/{patterns/settings-page.tsx → reference/components/page-content/examples/screen.tsx} +3 -3
- package/dist/skill/reference/components/page-content/examples/variants.tsx +4 -11
- package/dist/skill/reference/components/page-toolbar/COMPONENT.md +17 -15
- package/dist/skill/reference/components/page-toolbar/examples/narrow.tsx +6 -3
- package/dist/skill/reference/components/pagination/examples/controlled.tsx +29 -29
- package/dist/skill/reference/components/pagination/examples/examples.module.css +0 -2
- package/dist/skill/reference/components/progress-bar/COMPONENT.md +1 -1
- package/dist/skill/reference/components/progress-bar/examples/segments.tsx +2 -2
- package/dist/skill/reference/components/progress-circle/COMPONENT.md +1 -1
- package/dist/skill/reference/components/progress-circle/examples/segments.tsx +8 -3
- package/dist/skill/reference/components/radio/COMPONENT.md +1 -0
- package/dist/skill/reference/components/radio/examples/examples.module.css +14 -0
- package/dist/skill/reference/components/radio/examples/in-form.tsx +45 -0
- package/dist/skill/reference/components/scroll-container/COMPONENT.md +1 -0
- package/dist/skill/reference/components/scroll-container/examples/auto-scroll.tsx +3 -3
- package/dist/skill/reference/components/scroll-container/examples/chat.tsx +3 -3
- package/dist/skill/reference/components/scroll-container/examples/edges.tsx +6 -3
- package/dist/skill/reference/components/scroll-container/examples/examples.module.css +4 -17
- package/dist/skill/reference/components/scroll-container/examples/load-more.tsx +51 -0
- package/dist/skill/reference/components/scroll-container/examples/lock.tsx +3 -5
- package/dist/skill/reference/components/scroll-container/examples/overscroll.tsx +3 -3
- package/dist/skill/reference/components/scroll-container/examples/overview.tsx +3 -3
- package/dist/skill/reference/components/scroll-container/examples/scrollbar.tsx +13 -7
- package/dist/skill/reference/components/scroll-container/examples/variants.tsx +13 -7
- package/dist/skill/reference/components/segmented-control/COMPONENT.md +2 -2
- package/dist/skill/reference/components/segmented-control/examples/in-form.tsx +5 -1
- package/dist/skill/reference/components/segmented-control/examples/states.tsx +10 -1
- package/dist/skill/reference/components/select/COMPONENT.md +1 -1
- package/dist/skill/reference/components/select/examples/examples.module.css +2 -7
- package/dist/skill/reference/components/select/examples/states.tsx +13 -1
- package/dist/skill/reference/components/sheet/COMPONENT.md +2 -0
- package/dist/skill/reference/components/sheet/examples/guard.tsx +72 -0
- package/dist/skill/reference/components/sheet/examples/header-actions.tsx +56 -0
- package/dist/skill/reference/components/slider/COMPONENT.md +2 -1
- package/dist/skill/reference/components/slider/examples/examples.module.css +8 -0
- package/dist/skill/reference/components/slider/examples/in-form.tsx +47 -0
- package/dist/skill/reference/components/slider/examples/states.tsx +4 -1
- package/dist/skill/reference/components/smart-filter/COMPONENT.md +1 -1
- package/dist/skill/reference/components/smart-filter/examples/controlled.tsx +3 -3
- package/dist/skill/reference/components/smart-filter/examples/ranges.tsx +44 -10
- package/dist/skill/reference/components/sparkline/COMPONENT.md +1 -1
- package/dist/skill/reference/components/sparkline/examples/reference.tsx +2 -1
- package/dist/skill/reference/components/tabs/COMPONENT.md +1 -1
- package/dist/skill/reference/components/tabs/examples/sizes.tsx +1 -1
- package/dist/skill/reference/components/tag-select/COMPONENT.md +1 -1
- package/dist/skill/reference/components/tag-select/examples/states.tsx +8 -1
- package/dist/skill/reference/components/textarea/COMPONENT.md +1 -1
- package/dist/skill/reference/components/textarea/examples/examples.module.css +0 -6
- package/dist/skill/reference/components/textarea/examples/in-form.tsx +1 -9
- package/dist/skill/reference/components/textarea/examples/states.tsx +2 -1
- package/dist/skill/reference/components/thumbnail/COMPONENT.md +2 -1
- package/dist/skill/reference/components/thumbnail/examples/examples.module.css +1 -1
- package/dist/skill/reference/components/thumbnail/examples/fit.tsx +24 -0
- package/dist/skill/reference/components/thumbnail/examples/video.tsx +20 -1
- package/dist/skill/reference/components/timeline/COMPONENT.md +1 -1
- package/dist/skill/reference/components/timeline/examples/links.tsx +55 -14
- package/dist/skill/reference/components/tooltip/COMPONENT.md +1 -1
- package/dist/skill/reference/components/tooltip/examples/toolbar.tsx +2 -2
- package/dist/skill/reference/components/typography/examples/weights.tsx +3 -0
- package/dist/skill/reference/components/video-note/COMPONENT.md +2 -2
- package/dist/skill/reference/components/video-note/examples/controlled.tsx +19 -2
- package/dist/skill/reference/components/video-note/examples/in-message.tsx +5 -2
- package/dist/skill/reference/components/visually-hidden/COMPONENT.md +2 -1
- package/dist/skill/reference/components/visually-hidden/examples/assertive.tsx +39 -0
- package/dist/skill/reference/components/voice-player/COMPONENT.md +2 -2
- package/dist/skill/reference/components/voice-player/examples/call-recording.tsx +19 -9
- package/dist/skill/reference/components/voice-player/examples/controlled.tsx +20 -3
- package/dist/skill/reference/layout/app-header/COMPONENT.md +46 -63
- package/dist/skill/reference/layout/app-header/examples/breadcrumbs.tsx +10 -9
- package/dist/skill/reference/layout/app-header/examples/examples.module.css +1 -1
- package/dist/skill/reference/layout/app-header/examples/in-app-shell.tsx +0 -1
- package/dist/skill/reference/layout/app-header/examples/narrow.tsx +4 -5
- package/dist/skill/reference/layout/app-header/examples/overview.tsx +8 -10
- package/dist/skill/reference/layout/app-header/examples/page-title.tsx +3 -10
- package/dist/skill/reference/layout/app-shell/COMPONENT.md +4 -3
- package/dist/skill/reference/layout/app-shell/examples/overview.tsx +15 -30
- package/dist/skill/reference/layout/app-shell/examples/screen.tsx +262 -0
- package/dist/skill/reference/layout/app-shell/examples/template.tsx +29 -9
- package/dist/skill/reference/layout/sidebar/COMPONENT.md +7 -4
- package/dist/skill/reference/layout/sidebar/examples/account.tsx +2 -2
- package/dist/skill/reference/layout/sidebar/examples/collapsible-groups.tsx +12 -4
- package/dist/skill/reference/layout/sidebar/examples/custom-part.tsx +53 -0
- package/dist/skill/reference/layout/sidebar/examples/examples.module.css +5 -0
- package/dist/skill/reference/layout/sidebar/examples/narrow.tsx +53 -0
- package/dist/skill/reference/layout/sidebar/examples/persist.tsx +57 -0
- package/dist/skill/reference/layout/sidebar/examples/router.tsx +14 -2
- package/dist/skill/reference/layout/sidebar/examples/structure.tsx +7 -2
- package/dist/skill/responsive.md +2 -2
- package/package.json +1 -1
- package/src/components/avatar/examples/states.tsx +4 -4
- package/src/components/badge/examples/applied-filters.tsx +13 -19
- package/src/components/badge/examples/examples.module.css +1 -8
- package/src/components/badge/examples/server-tags.tsx +2 -6
- package/src/components/banner/examples/examples.module.css +1 -5
- package/src/components/banner/examples/page-strip.tsx +16 -22
- package/src/components/breadcrumb/COMPONENT.md +4 -3
- package/src/components/breadcrumb/examples/ellipsis.tsx +2 -2
- package/src/components/button-group/COMPONENT.md +2 -2
- package/src/components/button-group/examples/in-form.tsx +22 -2
- package/src/components/button-group/examples/states.tsx +10 -1
- package/src/components/card/COMPONENT.md +2 -1
- package/src/components/card/examples/screen.module.css +14 -0
- package/src/components/card/examples/screen.tsx +362 -0
- package/src/components/card/examples/variants.tsx +15 -1
- package/src/components/chart-frame/COMPONENT.md +2 -1
- package/src/components/chart-frame/examples/fill-height.tsx +119 -0
- package/src/components/chart-frame/examples/states.tsx +3 -1
- package/src/components/chat/COMPONENT.md +3 -1
- package/src/components/chat/examples/group-chat.tsx +15 -2
- package/src/components/chat/examples/reactions.tsx +121 -0
- package/src/components/chat/examples/screen.module.css +9 -0
- package/src/components/chat/examples/screen.tsx +718 -0
- package/src/components/chat-list/COMPONENT.md +1 -0
- package/src/components/chat-list/examples/links.tsx +72 -0
- package/src/components/checkbox/COMPONENT.md +1 -1
- package/src/components/checkbox/examples/examples.module.css +5 -1
- package/src/components/checkbox/examples/indicator.tsx +13 -7
- package/src/components/checkbox/examples/states.tsx +6 -1
- package/src/components/color-field/COMPONENT.md +1 -1
- package/src/components/color-picker/COMPONENT.md +4 -3
- package/src/components/color-picker/examples/controlled-open.tsx +37 -0
- package/src/components/color-picker/examples/presets.tsx +2 -2
- package/src/components/color-picker/examples/states.tsx +23 -14
- package/src/components/composer/COMPONENT.md +2 -1
- package/src/components/composer/examples/attach-menu.tsx +78 -0
- package/src/components/composer/examples/attachments.tsx +2 -2
- package/src/components/crossfade/COMPONENT.md +1 -0
- package/src/components/crossfade/examples/screen.module.css +40 -0
- package/src/components/crossfade/examples/screen.tsx +197 -0
- package/src/components/data-table/COMPONENT.md +3 -2
- package/src/components/data-table/examples/detail-panel.tsx +36 -37
- package/src/components/data-table/examples/examples.module.css +0 -12
- package/src/components/data-table/examples/numeric.tsx +36 -4
- package/src/components/data-table/examples/overview.tsx +1 -0
- package/src/components/data-table/examples/row-open.tsx +7 -36
- package/src/components/data-table/examples/screen.module.css +13 -0
- package/src/components/data-table/examples/screen.tsx +354 -0
- package/src/components/datepicker/COMPONENT.md +5 -4
- package/src/components/datepicker/examples/examples.module.css +2 -6
- package/src/components/datepicker/examples/in-form.tsx +47 -55
- package/src/components/datepicker/examples/locale.tsx +35 -0
- package/src/components/datepicker/examples/range-presets.tsx +11 -2
- package/src/components/datepicker/examples/states.tsx +9 -1
- package/src/components/description-list/COMPONENT.md +1 -0
- package/src/components/description-list/examples/screen.module.css +64 -0
- package/src/components/description-list/examples/screen.tsx +214 -0
- package/src/components/description-list/examples/structure.tsx +1 -1
- package/src/components/digit-input/COMPONENT.md +3 -1
- package/src/components/digit-input/examples/states.tsx +3 -1
- package/src/components/digit-input/examples/without-focus-ring.tsx +13 -0
- package/src/components/divider/examples/with-icon.tsx +2 -2
- package/src/components/dnd/COMPONENT.md +4 -2
- package/src/components/dnd/examples/drop-zones.tsx +82 -49
- package/src/components/dnd/examples/examples.module.css +50 -0
- package/src/components/dnd/examples/states.tsx +54 -0
- package/src/components/dnd/examples/table.tsx +113 -0
- package/src/components/drawer/COMPONENT.md +1 -0
- package/src/components/drawer/examples/dismiss.tsx +5 -3
- package/src/components/drawer/examples/examples.module.css +0 -13
- package/src/components/drawer/examples/header-actions.tsx +5 -9
- package/src/components/drawer/examples/overview.tsx +6 -18
- package/src/components/drawer/examples/screen.module.css +14 -0
- package/src/components/drawer/examples/screen.tsx +298 -0
- package/src/components/dropdown/examples/examples.module.css +1 -5
- package/src/components/empty-page/COMPONENT.md +1 -1
- package/src/components/empty-page/examples/region-error.tsx +8 -2
- package/src/components/example-frame/COMPONENT.md +3 -2
- package/src/components/example-frame/examples/initial-view.tsx +44 -0
- package/src/components/field-list/COMPONENT.md +2 -1
- package/src/components/field-list/examples/errors.tsx +5 -2
- package/src/components/field-list/examples/screen.module.css +18 -0
- package/src/components/field-list/examples/screen.tsx +316 -0
- package/src/components/file-upload/COMPONENT.md +7 -6
- package/src/components/file-upload/examples/custom-body.tsx +2 -1
- package/src/components/file-upload/examples/examples.module.css +1 -7
- package/src/components/file-upload/examples/file-cards.tsx +10 -1
- package/src/components/file-upload/examples/gallery.tsx +2 -2
- package/src/components/file-upload/examples/in-form.tsx +4 -9
- package/src/components/file-upload/examples/overview.tsx +5 -1
- package/src/components/file-upload/examples/row-parts.tsx +24 -1
- package/src/components/file-upload/examples/screen.module.css +45 -0
- package/src/components/file-upload/examples/screen.tsx +646 -0
- package/src/components/file-upload/examples/states.tsx +6 -2
- package/src/components/file-upload/examples/validation.tsx +11 -2
- package/src/components/file-upload/examples/variants.tsx +3 -20
- package/src/components/gantt/COMPONENT.md +2 -1
- package/src/components/gantt/examples/screen.module.css +14 -0
- package/src/components/gantt/examples/screen.tsx +726 -0
- package/src/components/gantt/examples/states.tsx +6 -2
- package/src/components/input/COMPONENT.md +2 -2
- package/src/components/input/examples/examples.module.css +0 -6
- package/src/components/input/examples/in-form.tsx +1 -9
- package/src/components/input/examples/password-strength.tsx +34 -8
- package/src/components/input/examples/states.tsx +6 -1
- package/src/components/kanban/COMPONENT.md +3 -2
- package/src/components/kanban/examples/columns.tsx +8 -5
- package/src/components/kanban/examples/screen.module.css +17 -0
- package/src/components/kanban/examples/screen.tsx +572 -0
- package/src/components/kanban/examples/states.tsx +17 -6
- package/src/components/login-form/COMPONENT.md +6 -5
- package/src/components/login-form/examples/examples.module.css +2 -21
- package/src/components/login-form/examples/forgot-password.tsx +28 -32
- package/src/components/login-form/examples/narrow.tsx +1 -1
- package/src/components/login-form/examples/overview.tsx +45 -47
- package/src/components/login-form/examples/register.tsx +64 -68
- package/src/components/login-form/examples/reset-password.tsx +50 -47
- package/src/components/login-form/examples/sizes.tsx +4 -6
- package/src/components/login-form/examples/states.tsx +53 -57
- package/src/components/login-form/examples/structure.tsx +18 -22
- package/src/components/login-form/examples/verification-code.tsx +41 -45
- package/src/components/media-viewer/COMPONENT.md +1 -1
- package/src/components/media-viewer/examples/dismiss.tsx +5 -1
- package/src/components/message/COMPONENT.md +4 -3
- package/src/components/message/examples/file.tsx +5 -1
- package/src/components/message/examples/media-open.tsx +48 -0
- package/src/components/message/examples/status.tsx +21 -3
- package/src/components/message/examples/text-formatting.tsx +7 -1
- package/src/components/modal/COMPONENT.md +2 -1
- package/src/components/modal/examples/custom-container.tsx +20 -20
- package/src/components/modal/examples/dismiss.tsx +5 -3
- package/src/components/modal/examples/enter-key.tsx +116 -0
- package/src/components/modal/examples/examples.module.css +7 -13
- package/src/components/modal/examples/structure.tsx +5 -2
- package/src/components/native-select/COMPONENT.md +1 -1
- package/src/components/native-select/examples/states.tsx +5 -1
- package/src/components/notification/COMPONENT.md +1 -1
- package/src/components/notification/examples/dismiss.tsx +2 -2
- package/src/components/page-content/COMPONENT.md +1 -0
- package/src/components/page-content/examples/list-detail.tsx +0 -3
- package/src/components/page-content/examples/screen.module.css +27 -0
- package/src/components/page-content/examples/screen.tsx +196 -0
- package/src/components/page-content/examples/variants.tsx +4 -11
- package/src/components/page-toolbar/COMPONENT.md +17 -15
- package/src/components/page-toolbar/examples/narrow.tsx +6 -3
- package/src/components/pagination/examples/controlled.tsx +29 -29
- package/src/components/pagination/examples/examples.module.css +0 -2
- package/src/components/progress-bar/COMPONENT.md +1 -1
- package/src/components/progress-bar/examples/segments.tsx +2 -2
- package/src/components/progress-circle/COMPONENT.md +1 -1
- package/src/components/progress-circle/examples/segments.tsx +8 -3
- package/src/components/radio/COMPONENT.md +1 -0
- package/src/components/radio/examples/examples.module.css +14 -0
- package/src/components/radio/examples/in-form.tsx +45 -0
- package/src/components/scroll-container/COMPONENT.md +1 -0
- package/src/components/scroll-container/examples/auto-scroll.tsx +3 -3
- package/src/components/scroll-container/examples/chat.tsx +3 -3
- package/src/components/scroll-container/examples/edges.tsx +6 -3
- package/src/components/scroll-container/examples/examples.module.css +4 -17
- package/src/components/scroll-container/examples/load-more.tsx +51 -0
- package/src/components/scroll-container/examples/lock.tsx +3 -5
- package/src/components/scroll-container/examples/overscroll.tsx +3 -3
- package/src/components/scroll-container/examples/overview.tsx +3 -3
- package/src/components/scroll-container/examples/scrollbar.tsx +13 -7
- package/src/components/scroll-container/examples/variants.tsx +13 -7
- package/src/components/segmented-control/COMPONENT.md +2 -2
- package/src/components/segmented-control/examples/in-form.tsx +5 -1
- package/src/components/segmented-control/examples/states.tsx +10 -1
- package/src/components/select/COMPONENT.md +1 -1
- package/src/components/select/examples/examples.module.css +2 -7
- package/src/components/select/examples/states.tsx +13 -1
- package/src/components/sheet/COMPONENT.md +2 -0
- package/src/components/sheet/examples/guard.tsx +72 -0
- package/src/components/sheet/examples/header-actions.tsx +56 -0
- package/src/components/slider/COMPONENT.md +2 -1
- package/src/components/slider/examples/examples.module.css +8 -0
- package/src/components/slider/examples/in-form.tsx +47 -0
- package/src/components/slider/examples/states.tsx +4 -1
- package/src/components/smart-filter/COMPONENT.md +1 -1
- package/src/components/smart-filter/examples/controlled.tsx +3 -3
- package/src/components/smart-filter/examples/ranges.tsx +44 -10
- package/src/components/sparkline/COMPONENT.md +1 -1
- package/src/components/sparkline/examples/reference.tsx +2 -1
- package/src/components/tabs/COMPONENT.md +1 -1
- package/src/components/tabs/examples/sizes.tsx +1 -1
- package/src/components/tag-select/COMPONENT.md +1 -1
- package/src/components/tag-select/examples/states.tsx +8 -1
- package/src/components/textarea/COMPONENT.md +1 -1
- package/src/components/textarea/examples/examples.module.css +0 -6
- package/src/components/textarea/examples/in-form.tsx +1 -9
- package/src/components/textarea/examples/states.tsx +2 -1
- package/src/components/thumbnail/COMPONENT.md +2 -1
- package/src/components/thumbnail/examples/examples.module.css +1 -1
- package/src/components/thumbnail/examples/fit.tsx +24 -0
- package/src/components/thumbnail/examples/video.tsx +20 -1
- package/src/components/timeline/COMPONENT.md +1 -1
- package/src/components/timeline/examples/links.tsx +55 -14
- package/src/components/tooltip/COMPONENT.md +1 -1
- package/src/components/tooltip/examples/toolbar.tsx +2 -2
- package/src/components/typography/examples/weights.tsx +3 -0
- package/src/components/video-note/COMPONENT.md +2 -2
- package/src/components/video-note/examples/controlled.tsx +19 -2
- package/src/components/video-note/examples/in-message.tsx +5 -2
- package/src/components/visually-hidden/COMPONENT.md +2 -1
- package/src/components/visually-hidden/examples/assertive.tsx +39 -0
- package/src/components/voice-player/COMPONENT.md +2 -2
- package/src/components/voice-player/examples/call-recording.tsx +19 -9
- package/src/components/voice-player/examples/controlled.tsx +20 -3
- package/src/layout/app-header/COMPONENT.md +46 -63
- package/src/layout/app-header/examples/breadcrumbs.tsx +10 -9
- package/src/layout/app-header/examples/examples.module.css +1 -1
- package/src/layout/app-header/examples/in-app-shell.tsx +0 -1
- package/src/layout/app-header/examples/narrow.tsx +4 -5
- package/src/layout/app-header/examples/overview.tsx +8 -10
- package/src/layout/app-header/examples/page-title.tsx +3 -10
- package/src/layout/app-shell/COMPONENT.md +4 -3
- package/src/layout/app-shell/examples/overview.tsx +15 -30
- package/src/layout/app-shell/examples/screen.module.css +11 -0
- package/src/layout/app-shell/examples/screen.tsx +262 -0
- package/src/layout/app-shell/examples/template.tsx +29 -9
- package/src/layout/sidebar/COMPONENT.md +7 -4
- package/src/layout/sidebar/examples/account.tsx +2 -2
- package/src/layout/sidebar/examples/collapsible-groups.tsx +12 -4
- package/src/layout/sidebar/examples/custom-part.tsx +53 -0
- package/src/layout/sidebar/examples/examples.module.css +5 -0
- package/src/layout/sidebar/examples/narrow.tsx +53 -0
- package/src/layout/sidebar/examples/persist.tsx +57 -0
- package/src/layout/sidebar/examples/router.tsx +14 -2
- package/src/layout/sidebar/examples/structure.tsx +7 -2
- package/dist/skill/patterns/app-shell.tsx +0 -303
- package/dist/skill/patterns/chat.module.css +0 -8
- package/dist/skill/patterns/dashboard.tsx +0 -340
- package/dist/skill/patterns/detail-page.tsx +0 -206
- package/dist/skill/patterns/form-drawer.tsx +0 -240
- package/dist/skill/patterns/kanban-board.module.css +0 -28
- package/dist/skill/patterns/media-library.tsx +0 -637
- package/dist/skill/patterns/schedule.module.css +0 -22
- package/dist/skill/patterns/screen-states.tsx +0 -187
- /package/dist/skill/{patterns/dashboard.module.css → reference/components/card/examples/screen.module.css} +0 -0
- /package/dist/skill/{patterns/screen-states.module.css → reference/components/crossfade/examples/screen.module.css} +0 -0
- /package/dist/skill/{patterns/form-drawer.module.css → reference/components/drawer/examples/screen.module.css} +0 -0
- /package/dist/skill/{patterns/record-editor.module.css → reference/components/field-list/examples/screen.module.css} +0 -0
- /package/dist/skill/{patterns/settings-page.module.css → reference/components/page-content/examples/screen.module.css} +0 -0
- /package/dist/skill/{patterns/app-shell.module.css → reference/layout/app-shell/examples/screen.module.css} +0 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/** Screen states: the title and the date of the statement in the app header, a page-level error in a Banner with a retry, a region loading with a Skeleton of its rows and a table skeleton, the table error in place and a first-run EmptyPage; regions cross-fade between states — `state`. */
|
|
2
|
+
import {
|
|
3
|
+
AppHeader,
|
|
4
|
+
Banner,
|
|
5
|
+
Button,
|
|
6
|
+
Card,
|
|
7
|
+
Crossfade,
|
|
8
|
+
DataTable,
|
|
9
|
+
type DataTableColumn,
|
|
10
|
+
EmptyPage,
|
|
11
|
+
Icon,
|
|
12
|
+
PageContent,
|
|
13
|
+
Skeleton,
|
|
14
|
+
Typography,
|
|
15
|
+
useNotifications,
|
|
16
|
+
} from "prime-ui-kit";
|
|
17
|
+
import * as React from "react";
|
|
18
|
+
|
|
19
|
+
import styles from "./screen.module.css";
|
|
20
|
+
|
|
21
|
+
type Status = "error" | "loading" | "ready";
|
|
22
|
+
type Payment = { id: string; payer: string; purpose: string; amount: number };
|
|
23
|
+
|
|
24
|
+
const PAYMENTS: Payment[] = [
|
|
25
|
+
{ id: "b1", payer: "ООО «Гранит»", purpose: "Оплата по сч. 2026-0414", amount: 94_750 },
|
|
26
|
+
{ id: "b2", payer: "ИП Орлов Д. С.", purpose: "Предоплата за обучение", amount: 18_000 },
|
|
27
|
+
{ id: "b3", payer: "АО «Альфа Медиа»", purpose: "Без указания счёта", amount: 380_000 },
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
const ACCOUNTS = [
|
|
31
|
+
{ name: "Т-Банк, расчётный", balance: "4 812 300 ₽" },
|
|
32
|
+
{ name: "Сбербанк, расчётный", balance: "1 207 950 ₽" },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const MONEY = new Intl.NumberFormat("ru-RU", {
|
|
36
|
+
style: "currency",
|
|
37
|
+
currency: "RUB",
|
|
38
|
+
maximumFractionDigits: 0,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const COLUMNS: DataTableColumn<Payment>[] = [
|
|
42
|
+
{ id: "payer", header: "Плательщик", accessor: "payer" },
|
|
43
|
+
{ id: "purpose", header: "Назначение", accessor: "purpose" },
|
|
44
|
+
{
|
|
45
|
+
id: "amount",
|
|
46
|
+
header: "Сумма",
|
|
47
|
+
numeric: true,
|
|
48
|
+
headerAlign: "end",
|
|
49
|
+
cell: (row) => MONEY.format(row.amount),
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
export default function CrossfadeScreenExample() {
|
|
54
|
+
const { notify } = useNotifications();
|
|
55
|
+
const [status, setStatus] = React.useState<Status>("error");
|
|
56
|
+
|
|
57
|
+
const retry = () => {
|
|
58
|
+
setStatus("loading");
|
|
59
|
+
window.setTimeout(() => {
|
|
60
|
+
setStatus("ready");
|
|
61
|
+
notify({
|
|
62
|
+
tone: "success",
|
|
63
|
+
title: "Выписка получена",
|
|
64
|
+
description: "3 платежа ждут разнесения",
|
|
65
|
+
});
|
|
66
|
+
}, 1500);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<>
|
|
71
|
+
{/* The header carries the page: the only h1 and a line of data, here the date of the last
|
|
72
|
+
statement — it moves on once the statement arrives. Main has no PageContent.Header. */}
|
|
73
|
+
<AppHeader.Root>
|
|
74
|
+
<AppHeader.Start>
|
|
75
|
+
<AppHeader.Title>
|
|
76
|
+
Сверка с банком
|
|
77
|
+
<AppHeader.Description>
|
|
78
|
+
2 счёта · выписка на {status === "ready" ? "7" : "6"} октября
|
|
79
|
+
</AppHeader.Description>
|
|
80
|
+
</AppHeader.Title>
|
|
81
|
+
</AppHeader.Start>
|
|
82
|
+
</AppHeader.Root>
|
|
83
|
+
|
|
84
|
+
<PageContent.Root>
|
|
85
|
+
<PageContent.Body>
|
|
86
|
+
{/* The page banner and the panels are one block: the banner, with the 40 below it, comes and
|
|
87
|
+
goes inside a Crossfade, so the panels glide instead of jumping. */}
|
|
88
|
+
<div className={styles.lead}>
|
|
89
|
+
<Crossfade state={status === "error" ? "error" : "ok"}>
|
|
90
|
+
{status === "error" ? (
|
|
91
|
+
<div className={styles.bannerSlot}>
|
|
92
|
+
<Banner.Root tone="danger">
|
|
93
|
+
<Banner.Content>
|
|
94
|
+
<Banner.Icon>
|
|
95
|
+
<Icon name="status.danger" />
|
|
96
|
+
</Banner.Icon>
|
|
97
|
+
<Banner.Title>Выписка за 7 октября не получена</Banner.Title>
|
|
98
|
+
<Banner.Description>
|
|
99
|
+
Т-Банк не ответил на запрос. Остатки показаны на 6 октября.
|
|
100
|
+
</Banner.Description>
|
|
101
|
+
<Banner.Actions>
|
|
102
|
+
<Button.Root tone="danger" onClick={retry}>
|
|
103
|
+
Повторить
|
|
104
|
+
</Button.Root>
|
|
105
|
+
</Banner.Actions>
|
|
106
|
+
</Banner.Content>
|
|
107
|
+
</Banner.Root>
|
|
108
|
+
</div>
|
|
109
|
+
) : null}
|
|
110
|
+
</Crossfade>
|
|
111
|
+
|
|
112
|
+
<PageContent.Grid>
|
|
113
|
+
<PageContent.Cell span={6}>
|
|
114
|
+
<Card.Root variant="panel" aria-busy={status === "loading"}>
|
|
115
|
+
<Card.Header>
|
|
116
|
+
<Card.Title as="h2">Остатки</Card.Title>
|
|
117
|
+
<Typography as="span" variant="caption" tone="muted">
|
|
118
|
+
{status === "ready" ? "на 7 октября" : "на 6 октября"}
|
|
119
|
+
</Typography>
|
|
120
|
+
</Card.Header>
|
|
121
|
+
<Card.Body>
|
|
122
|
+
{/* Loading ↔ data cross-fade in place; the table below swaps its body the same way. */}
|
|
123
|
+
<Crossfade state={status === "loading" ? "loading" : "ready"}>
|
|
124
|
+
{status === "loading" ? (
|
|
125
|
+
<ul className={styles.accounts}>
|
|
126
|
+
{ACCOUNTS.map((account) => (
|
|
127
|
+
<li key={account.name} className={styles.account}>
|
|
128
|
+
<Skeleton className={styles.nameBar} />
|
|
129
|
+
{/* title-m is the l text tier: 16 / 24. */}
|
|
130
|
+
<Skeleton size="l" className={styles.balanceBar} />
|
|
131
|
+
</li>
|
|
132
|
+
))}
|
|
133
|
+
</ul>
|
|
134
|
+
) : (
|
|
135
|
+
<ul className={styles.accounts}>
|
|
136
|
+
{ACCOUNTS.map((account) => (
|
|
137
|
+
<li key={account.name} className={styles.account}>
|
|
138
|
+
<Typography as="span" variant="body-m" tone="secondary">
|
|
139
|
+
{account.name}
|
|
140
|
+
</Typography>
|
|
141
|
+
<Typography as="span" variant="title-m" className={styles.amount}>
|
|
142
|
+
{account.balance}
|
|
143
|
+
</Typography>
|
|
144
|
+
</li>
|
|
145
|
+
))}
|
|
146
|
+
</ul>
|
|
147
|
+
)}
|
|
148
|
+
</Crossfade>
|
|
149
|
+
</Card.Body>
|
|
150
|
+
</Card.Root>
|
|
151
|
+
</PageContent.Cell>
|
|
152
|
+
|
|
153
|
+
<PageContent.Cell span={6}>
|
|
154
|
+
<Card.Root variant="panel">
|
|
155
|
+
<Card.Header>
|
|
156
|
+
<Card.Title as="h2">Правила разнесения</Card.Title>
|
|
157
|
+
</Card.Header>
|
|
158
|
+
<Card.Body>
|
|
159
|
+
<EmptyPage.Root size="s" aria-labelledby="rules-empty">
|
|
160
|
+
<EmptyPage.Icon tone="accent">
|
|
161
|
+
<Icon name="action.filter" />
|
|
162
|
+
</EmptyPage.Icon>
|
|
163
|
+
<EmptyPage.Title as="h3" id="rules-empty">
|
|
164
|
+
Правил пока нет
|
|
165
|
+
</EmptyPage.Title>
|
|
166
|
+
<EmptyPage.Description>
|
|
167
|
+
Правило свяжет платёж со счётом по ИНН или назначению.
|
|
168
|
+
</EmptyPage.Description>
|
|
169
|
+
<EmptyPage.Actions>
|
|
170
|
+
<Button.Root variant="soft" tone="neutral">
|
|
171
|
+
Создать правило
|
|
172
|
+
</Button.Root>
|
|
173
|
+
</EmptyPage.Actions>
|
|
174
|
+
</EmptyPage.Root>
|
|
175
|
+
</Card.Body>
|
|
176
|
+
</Card.Root>
|
|
177
|
+
</PageContent.Cell>
|
|
178
|
+
</PageContent.Grid>
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
<PageContent.Section label="Неразнесённые платежи">
|
|
182
|
+
<DataTable
|
|
183
|
+
columns={COLUMNS}
|
|
184
|
+
rows={status === "ready" ? PAYMENTS : []}
|
|
185
|
+
getRowKey={(row) => row.id}
|
|
186
|
+
paging="none"
|
|
187
|
+
loading={status === "loading"}
|
|
188
|
+
loadingRows={3}
|
|
189
|
+
error={status === "error" ? "Платежи появятся после загрузки выписки" : undefined}
|
|
190
|
+
empty="Все платежи разнесены"
|
|
191
|
+
/>
|
|
192
|
+
</PageContent.Section>
|
|
193
|
+
</PageContent.Body>
|
|
194
|
+
</PageContent.Root>
|
|
195
|
+
</>
|
|
196
|
+
);
|
|
197
|
+
}
|
|
@@ -327,7 +327,7 @@ Root attributes: `data-size`, `data-row-dividers`, `data-column-dividers`, `data
|
|
|
327
327
|
|---|---|
|
|
328
328
|
| [overview.tsx](examples/overview.tsx) | Recent orders: sortable columns, a status Badge, numeric sums and five rows per page — `columns`, `getRowKey`, `pageSize`. |
|
|
329
329
|
| [sizes.tsx](examples/sizes.tsx) | Every density: rows from 36 to 52 px, the head at the control height of the tier — `size`. |
|
|
330
|
-
| [numeric.tsx](examples/numeric.tsx) | An inventory report: number columns align to the end in tabular figures, a long name stays on one line with a title — `numeric`, `truncate`, `maxWidth`. |
|
|
330
|
+
| [numeric.tsx](examples/numeric.tsx) | An inventory report: number columns align to the end in tabular figures, a long name stays on one line with a title, formatted cells sort by their raw number and article numbers in natural order — `numeric`, `truncate`, `maxWidth`, `sortAccessor`, `sortComparator`. |
|
|
331
331
|
| [heatmap.tsx](examples/heatmap.tsx) | Deals closed per manager and month as a heatmap: each count shades its cell on the chart scale and stays readable in it — `scale`, `numeric`. |
|
|
332
332
|
| [trend.tsx](examples/trend.tsx) | Clients with revenue by month as a compact Sparkline in a cell of each row, next to the half-year total — `cell`, `width`. |
|
|
333
333
|
| [content-width.tsx](examples/content-width.tsx) | A short lookup table sized by its content with a centered column, and a `grow` column that takes the free width and wraps — `fullWidth`, `align`, `grow`. |
|
|
@@ -335,7 +335,7 @@ Root attributes: `data-size`, `data-row-dividers`, `data-column-dividers`, `data
|
|
|
335
335
|
| [toolbar.tsx](examples/toolbar.tsx) | A campaign list with search, a status filter and export above the table; the empty text when nothing matches — `toolbar`, `empty`. |
|
|
336
336
|
| [selection.tsx](examples/selection.tsx) | Team members with checkboxes: Shift+click range, press-and-drag, «select all» and bulk actions in the toolbar — `selectable`, `selected`, `onSelectedChange`, `getRowLabel`. |
|
|
337
337
|
| [nested-rows.tsx](examples/nested-rows.tsx) | Partners with their expense lines: sub-rows indented under the parent's name, a chevron toggle, together with selection and sorting — `getRowChildren`, `expanded`, `onExpandedChange`. |
|
|
338
|
-
| [detail-panel.tsx](examples/detail-panel.tsx) | Order details in a full-width row under an expanded order, aligned with the first content column — `renderExpanded`, `defaultExpanded`. |
|
|
338
|
+
| [detail-panel.tsx](examples/detail-panel.tsx) | Order details in a full-width row under an expanded order, aligned with the first content column; a cancelled order has nothing to show and gets no toggle — `renderExpanded`, `defaultExpanded`, `isRowExpandable`. |
|
|
339
339
|
| [sticky.tsx](examples/sticky.tsx) | Monthly sales by region in a 280 px window: the head and the region column stay while scrolling both ways — `stickyHeader`, `stickyFirstColumn`, `scrollHeight`. |
|
|
340
340
|
| [row-link.tsx](examples/row-link.tsx) | Invoices whose rows are links: ⌘-click or a middle click opens a new tab, a plain click routes inside the app, the totals row and the ⋯ menu never open a row — `getRowHref`, `onRowClick`, `isRowClickable`. |
|
|
341
341
|
| [row-open.tsx](examples/row-open.tsx) | Deals that open in a side panel: a click, or Enter and Space on the focused row; the panel keeps the last deal while it slides away — `onRowClick`. |
|
|
@@ -348,6 +348,7 @@ Root attributes: `data-size`, `data-row-dividers`, `data-column-dividers`, `data
|
|
|
348
348
|
| [states.tsx](examples/states.tsx) | Loading skeleton, an empty period and a load error with a retry: the head stays, only the body changes — `loading`, `loadingRows`, `empty`, `error`. |
|
|
349
349
|
| [controlled.tsx](examples/controlled.tsx) | Sort and page owned by the parent (a URL or a store): a header click goes asc → desc → none, a new sort returns to page 1 — `sort`, `onSortChange`, `page`, `onPageChange`. |
|
|
350
350
|
| [narrow.tsx](examples/narrow.tsx) | A 320 px support queue: columns scroll inside the table with the first one pinned, the toolbar and footer reflow and the pager turns compact — `stickyFirstColumn`, `size`. |
|
|
351
|
+
| [screen.tsx](examples/screen.tsx) | A list page: the title, a line of figures, search, filters and the one primary action in the app header, a DataTable of invoices with statuses, row actions, pages and a filtered empty state — `empty`, `pageSize`, `stickyFirstColumn`. |
|
|
351
352
|
|
|
352
353
|
## Mistakes
|
|
353
354
|
- No `getRowKey` with `selectable`, expansion or sorting → selection follows positions, not records.
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
/** Order details in a full-width row under an expanded order, aligned with the first content column — `renderExpanded`, `defaultExpanded`. */
|
|
2
|
-
import { DataTable, type DataTableColumn,
|
|
3
|
-
|
|
4
|
-
import styles from "./examples.module.css";
|
|
1
|
+
/** Order details in a full-width row under an expanded order, aligned with the first content column; a cancelled order has nothing to show and gets no toggle — `renderExpanded`, `defaultExpanded`, `isRowExpandable`. */
|
|
2
|
+
import { DataTable, type DataTableColumn, DescriptionList } from "prime-ui-kit";
|
|
5
3
|
|
|
6
4
|
type Order = {
|
|
7
5
|
id: string;
|
|
@@ -9,8 +7,8 @@ type Order = {
|
|
|
9
7
|
customer: string;
|
|
10
8
|
date: string;
|
|
11
9
|
total: number;
|
|
12
|
-
|
|
13
|
-
items: string;
|
|
10
|
+
/** Delivery details; a cancelled order has none. */
|
|
11
|
+
delivery: { address: string; items: string } | null;
|
|
14
12
|
};
|
|
15
13
|
|
|
16
14
|
const ORDERS: Order[] = [
|
|
@@ -20,8 +18,10 @@ const ORDERS: Order[] = [
|
|
|
20
18
|
customer: "Анна Соколова",
|
|
21
19
|
date: "07.10.26",
|
|
22
20
|
total: 12_480,
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
delivery: {
|
|
22
|
+
address: "Москва, ул. Тверская, 12, кв. 45",
|
|
23
|
+
items: "Кабель USB-C, 2 м × 2, док-станция × 1",
|
|
24
|
+
},
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
id: "o2",
|
|
@@ -29,17 +29,23 @@ const ORDERS: Order[] = [
|
|
|
29
29
|
customer: "Дмитрий Орлов",
|
|
30
30
|
date: "06.10.26",
|
|
31
31
|
total: 34_900,
|
|
32
|
-
address: "Санкт-Петербург, Невский пр., 28",
|
|
33
|
-
items: 'Монитор 27" × 1',
|
|
32
|
+
delivery: { address: "Санкт-Петербург, Невский пр., 28", items: 'Монитор 27" × 1' },
|
|
34
33
|
},
|
|
35
34
|
{
|
|
36
35
|
id: "o3",
|
|
36
|
+
number: "№ 10 479",
|
|
37
|
+
customer: "Игорь Белов",
|
|
38
|
+
date: "06.10.26",
|
|
39
|
+
total: 2_990,
|
|
40
|
+
delivery: null,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "o4",
|
|
37
44
|
number: "№ 10 477",
|
|
38
45
|
customer: "Мария Ким",
|
|
39
46
|
date: "05.10.26",
|
|
40
47
|
total: 4_350,
|
|
41
|
-
address: "Казань, ул. Баумана, 7",
|
|
42
|
-
items: "Клавиатура × 1",
|
|
48
|
+
delivery: { address: "Казань, ул. Баумана, 7", items: "Клавиатура × 1" },
|
|
43
49
|
},
|
|
44
50
|
];
|
|
45
51
|
|
|
@@ -51,7 +57,13 @@ const RUB = new Intl.NumberFormat("ru-RU", {
|
|
|
51
57
|
|
|
52
58
|
const COLUMNS: DataTableColumn<Order>[] = [
|
|
53
59
|
{ id: "number", header: "Заказ", accessor: "number", minWidth: "8rem" },
|
|
54
|
-
{
|
|
60
|
+
{
|
|
61
|
+
id: "customer",
|
|
62
|
+
header: "Покупатель",
|
|
63
|
+
accessor: "customer",
|
|
64
|
+
sortable: true,
|
|
65
|
+
cell: (row) => (row.delivery ? row.customer : `${row.customer} · отменён`),
|
|
66
|
+
},
|
|
55
67
|
{ id: "date", header: "Дата", accessor: "date", numeric: true },
|
|
56
68
|
{
|
|
57
69
|
id: "total",
|
|
@@ -70,30 +82,17 @@ export default function DataTableDetailPanelExample() {
|
|
|
70
82
|
rows={ORDERS}
|
|
71
83
|
getRowKey={(row) => row.id}
|
|
72
84
|
getRowLabel={(row) => row.number}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
</dd>
|
|
85
|
-
<dt>
|
|
86
|
-
<Typography as="span" variant="body-s" tone="muted">
|
|
87
|
-
Состав
|
|
88
|
-
</Typography>
|
|
89
|
-
</dt>
|
|
90
|
-
<dd>
|
|
91
|
-
<Typography as="span" variant="body-s">
|
|
92
|
-
{row.items}
|
|
93
|
-
</Typography>
|
|
94
|
-
</dd>
|
|
95
|
-
</dl>
|
|
96
|
-
)}
|
|
85
|
+
isRowExpandable={(row) => row.delivery !== null}
|
|
86
|
+
renderExpanded={(row) =>
|
|
87
|
+
row.delivery ? (
|
|
88
|
+
<DescriptionList.Root size="s">
|
|
89
|
+
<DescriptionList.Item label="Адрес доставки">
|
|
90
|
+
{row.delivery.address}
|
|
91
|
+
</DescriptionList.Item>
|
|
92
|
+
<DescriptionList.Item label="Состав">{row.delivery.items}</DescriptionList.Item>
|
|
93
|
+
</DescriptionList.Root>
|
|
94
|
+
) : null
|
|
95
|
+
}
|
|
97
96
|
defaultExpanded={["o1"]}
|
|
98
97
|
paging="none"
|
|
99
98
|
/>
|
|
@@ -57,18 +57,6 @@
|
|
|
57
57
|
min-width: 0;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
.details {
|
|
61
|
-
display: grid;
|
|
62
|
-
grid-template-columns: max-content minmax(0, 1fr);
|
|
63
|
-
gap: var(--prime-space-1) var(--prime-space-4);
|
|
64
|
-
margin: 0;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.details dd {
|
|
68
|
-
margin: 0;
|
|
69
|
-
min-width: 0;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
60
|
/* fill-height: a panel of a fixed height (the rest of a page, a pane) the table fills. */
|
|
73
61
|
.fillStage {
|
|
74
62
|
display: flex;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** An inventory report: number columns align to the end in tabular figures, a long name stays on one line with a title — `numeric`, `truncate`, `maxWidth`. */
|
|
1
|
+
/** An inventory report: number columns align to the end in tabular figures, a long name stays on one line with a title, formatted cells sort by their raw number and article numbers in natural order — `numeric`, `truncate`, `maxWidth`, `sortAccessor`, `sortComparator`. */
|
|
2
2
|
import { DataTable, type DataTableColumn } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
type Sku = {
|
|
@@ -22,18 +22,50 @@ const SKUS: Sku[] = [
|
|
|
22
22
|
{ sku: "MS-044", name: "Мышь оптическая", stock: 86, price: 1290, sold: 1204, margin: 0.312 },
|
|
23
23
|
{ sku: "MN-27Q", name: 'Монитор 27" QHD IPS', stock: 12, price: 32_900, sold: 41, margin: 0.118 },
|
|
24
24
|
{ sku: "HB-7P", name: "USB-хаб на 7 портов", stock: 530, price: 2190, sold: 97, margin: 0.402 },
|
|
25
|
+
{
|
|
26
|
+
sku: "HB-10P",
|
|
27
|
+
name: "USB-хаб на 10 портов",
|
|
28
|
+
stock: 210,
|
|
29
|
+
price: 3490,
|
|
30
|
+
sold: 64,
|
|
31
|
+
margin: 0.356,
|
|
32
|
+
},
|
|
25
33
|
];
|
|
26
34
|
|
|
27
35
|
const INT = new Intl.NumberFormat("ru-RU");
|
|
28
36
|
const PCT = new Intl.NumberFormat("ru-RU", { style: "percent", maximumFractionDigits: 1 });
|
|
29
37
|
|
|
38
|
+
/** Article numbers in natural order: HB-7P before HB-10P. */
|
|
39
|
+
const NATURAL = new Intl.Collator("ru-RU", { numeric: true });
|
|
40
|
+
|
|
30
41
|
const COLUMNS: DataTableColumn<Sku>[] = [
|
|
31
|
-
{
|
|
42
|
+
{
|
|
43
|
+
id: "sku",
|
|
44
|
+
header: "Артикул",
|
|
45
|
+
accessor: "sku",
|
|
46
|
+
width: "6rem",
|
|
47
|
+
sortable: true,
|
|
48
|
+
sortComparator: (a, b) => NATURAL.compare(a.sku, b.sku),
|
|
49
|
+
},
|
|
32
50
|
{ id: "name", header: "Товар", accessor: "name", truncate: true, maxWidth: "14rem" },
|
|
33
|
-
{
|
|
51
|
+
{
|
|
52
|
+
id: "stock",
|
|
53
|
+
header: "Остаток, шт",
|
|
54
|
+
numeric: true,
|
|
55
|
+
sortable: true,
|
|
56
|
+
sortAccessor: (row) => row.stock,
|
|
57
|
+
cell: (row) => INT.format(row.stock),
|
|
58
|
+
},
|
|
34
59
|
{ id: "price", header: "Цена, ₽", numeric: true, cell: (row) => INT.format(row.price) },
|
|
35
60
|
{ id: "sold", header: "Продано", numeric: true, cell: (row) => INT.format(row.sold) },
|
|
36
|
-
{
|
|
61
|
+
{
|
|
62
|
+
id: "margin",
|
|
63
|
+
header: "Маржа",
|
|
64
|
+
numeric: true,
|
|
65
|
+
sortable: true,
|
|
66
|
+
sortAccessor: (row) => row.margin,
|
|
67
|
+
cell: (row) => PCT.format(row.margin),
|
|
68
|
+
},
|
|
37
69
|
];
|
|
38
70
|
|
|
39
71
|
export default function DataTableNumericExample() {
|
|
@@ -34,6 +34,7 @@ const COLUMNS: DataTableColumn<Order>[] = [
|
|
|
34
34
|
header: "Статус",
|
|
35
35
|
accessor: "status",
|
|
36
36
|
sortable: true,
|
|
37
|
+
sortAccessor: (row) => STATUS[row.status].label,
|
|
37
38
|
cell: (row) => (
|
|
38
39
|
<Badge.Root color={STATUS[row.status].color}>{STATUS[row.status].label}</Badge.Root>
|
|
39
40
|
),
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/** Deals that open in a side panel: a click, or Enter and Space on the focused row; the panel keeps the last deal while it slides away — `onRowClick`. */
|
|
2
|
-
import { Badge, DataTable, type DataTableColumn,
|
|
2
|
+
import { Badge, DataTable, type DataTableColumn, DescriptionList, Drawer } from "prime-ui-kit";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
|
|
5
|
-
import styles from "./examples.module.css";
|
|
6
|
-
|
|
7
5
|
type Stage = "new" | "talks" | "won";
|
|
8
6
|
type Deal = { id: string; title: string; client: string; owner: string; stage: Stage; sum: number };
|
|
9
7
|
|
|
@@ -47,7 +45,7 @@ const RUB = new Intl.NumberFormat("ru-RU", {
|
|
|
47
45
|
});
|
|
48
46
|
|
|
49
47
|
const COLUMNS: DataTableColumn<Deal>[] = [
|
|
50
|
-
{ id: "title", header: "Сделка", accessor: "title"
|
|
48
|
+
{ id: "title", header: "Сделка", accessor: "title" },
|
|
51
49
|
{ id: "client", header: "Клиент", accessor: "client" },
|
|
52
50
|
{
|
|
53
51
|
id: "stage",
|
|
@@ -88,38 +86,11 @@ export default function DataTableRowOpenExample() {
|
|
|
88
86
|
</Drawer.Header>
|
|
89
87
|
<Drawer.Body>
|
|
90
88
|
{deal ? (
|
|
91
|
-
<
|
|
92
|
-
<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
</dt>
|
|
97
|
-
<dd>
|
|
98
|
-
<Typography as="span" variant="body-m">
|
|
99
|
-
{deal.client}
|
|
100
|
-
</Typography>
|
|
101
|
-
</dd>
|
|
102
|
-
<dt>
|
|
103
|
-
<Typography as="span" variant="body-m" tone="muted">
|
|
104
|
-
Ответственный
|
|
105
|
-
</Typography>
|
|
106
|
-
</dt>
|
|
107
|
-
<dd>
|
|
108
|
-
<Typography as="span" variant="body-m">
|
|
109
|
-
{deal.owner}
|
|
110
|
-
</Typography>
|
|
111
|
-
</dd>
|
|
112
|
-
<dt>
|
|
113
|
-
<Typography as="span" variant="body-m" tone="muted">
|
|
114
|
-
Сумма
|
|
115
|
-
</Typography>
|
|
116
|
-
</dt>
|
|
117
|
-
<dd>
|
|
118
|
-
<Typography as="span" variant="body-m">
|
|
119
|
-
{RUB.format(deal.sum)}
|
|
120
|
-
</Typography>
|
|
121
|
-
</dd>
|
|
122
|
-
</dl>
|
|
89
|
+
<DescriptionList.Root>
|
|
90
|
+
<DescriptionList.Item label="Клиент">{deal.client}</DescriptionList.Item>
|
|
91
|
+
<DescriptionList.Item label="Ответственный">{deal.owner}</DescriptionList.Item>
|
|
92
|
+
<DescriptionList.Item label="Сумма">{RUB.format(deal.sum)}</DescriptionList.Item>
|
|
93
|
+
</DescriptionList.Root>
|
|
123
94
|
) : null}
|
|
124
95
|
</Drawer.Body>
|
|
125
96
|
</Drawer.Content>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* List page: the header carries the title and the tools; this module lays out table cells only. */
|
|
2
|
+
|
|
3
|
+
/* Client cell: avatar, then the name over the tax id. On a phone the table scrolls sideways. */
|
|
4
|
+
.client {
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
gap: var(--prime-space-3);
|
|
8
|
+
white-space: nowrap;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.clientText {
|
|
12
|
+
display: grid;
|
|
13
|
+
}
|