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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** A default field next to a disabled
|
|
1
|
+
/** A default field next to a disabled, a read-only and an invalid one with no message — `disabled`, `readOnly`, `invalid`. */
|
|
2
2
|
import { Icon, Input } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
export default function InputStatesExample() {
|
|
@@ -22,6 +22,11 @@ export default function InputStatesExample() {
|
|
|
22
22
|
</Input.Icon>
|
|
23
23
|
</Input.Wrapper>
|
|
24
24
|
</Input.Root>
|
|
25
|
+
<Input.Root label="invalid" invalid>
|
|
26
|
+
<Input.Wrapper>
|
|
27
|
+
<Input.Field type="tel" defaultValue="+7 900 12" />
|
|
28
|
+
</Input.Wrapper>
|
|
29
|
+
</Input.Root>
|
|
25
30
|
</>
|
|
26
31
|
);
|
|
27
32
|
}
|
|
@@ -222,12 +222,13 @@ A card's own `onKeyDown` runs before the board's: `preventDefault()` in it keeps
|
|
|
222
222
|
| [structure.tsx](examples/structure.tsx) | Cards take only the parts they need: a title alone, a meta line, labels, a footer with counts and an assignee — `Kanban.ItemTitle`, `Kanban.ItemDescription`, `Kanban.ItemBadges`, `Kanban.ItemFooter`, `Kanban.ItemCount`. |
|
|
223
223
|
| [cards.tsx](examples/cards.tsx) | Three kinds of cards on one board: a plain note, a ticket with a header row of key and priority, a design task with a cover — `Kanban.ItemHeader`, `Thumbnail`, `Kanban.ItemFooter`. |
|
|
224
224
|
| [limits.tsx](examples/limits.tsx) | A support queue with a work-in-progress limit and a workflow rule, its columns drawn as wells so each reads as a bounded queue: a full column and a blocked ticket are refused before the release with the reason under the card, from the keyboard too — `limit`, `canDrop`, `variant`. |
|
|
225
|
-
| [columns.tsx](examples/columns.tsx) | A sales pipeline whose stages move by the grip in their header while the first and the last stay locked; each stage carries its color on the count, a rule and its figures under the title, and is edited in a popover — `reorderableColumns`, `onColumnOrderChange`, `locked`, `color`, `description`, `renderColumnMeta`, `renderColumnActions`. |
|
|
225
|
+
| [columns.tsx](examples/columns.tsx) | A sales pipeline whose stages move by the grip in their header while the first and the last stay locked; each stage carries its color on the count, a rule and its figures under the title, and is edited in a popover; the page keeps the order — `reorderableColumns`, `columnOrder`, `onColumnOrderChange`, `locked`, `color`, `description`, `renderColumnMeta`, `renderColumnActions`. |
|
|
226
226
|
| [saving.tsx](examples/saving.tsx) | Every move is saved on the server: the card waits busy in its new place, and an invoice the server refuses to close glides back to its column — `onValueChange`. |
|
|
227
227
|
| [item-link.tsx](examples/item-link.tsx) | Tickets that open: each card is a link to its page, so ⌘-click or a middle click opens a new tab, a plain click, Enter or Space opens it in place, and a drag only moves it — `getItemHref`, `onItemClick`. |
|
|
228
|
-
| [states.tsx](examples/states.tsx) | Loading draws skeleton cards in the card geometry and cross-fades the cards in; an empty column keeps its drop area; a read-only board drags nothing — `loading`, `disabled`. |
|
|
228
|
+
| [states.tsx](examples/states.tsx) | Loading draws skeleton cards in the card geometry and cross-fades the cards in; an empty column keeps its drop area; a closed order stays in place while the rest move; a read-only board drags nothing — `loading`, `disabled`. |
|
|
229
229
|
| [controlled.tsx](examples/controlled.tsx) | The placement lives in the parent: every move arrives with its source, target and position to save, and a button resets the board — `value`, `onValueChange`. |
|
|
230
230
|
| [narrow.tsx](examples/narrow.tsx) | On a phone-width screen a column takes 85% of the board and snaps into place, so the next one peeks; the strip scrolls inside the board, never the page. |
|
|
231
|
+
| [screen.tsx](examples/screen.tsx) | A sales pipeline as a work screen: the title with the open deals and their sum, search, filter, the board / list switch and the one primary action in the app header, a full-height Kanban of deals by stage with totals, moves saved on the server that can be refused, and the deal in a Drawer — `value`, `onValueChange`, `renderColumnMeta`, `onItemClick`. |
|
|
231
232
|
|
|
232
233
|
## Mistakes
|
|
233
234
|
- Returning something other than `Kanban.Item` from `renderItem` → the card does not drag and Alt + arrows do nothing.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** A sales pipeline whose stages move by the grip in their header while the first and the last stay locked; each stage carries its color on the count, a rule and its figures under the title, and is edited in a popover — `reorderableColumns`, `onColumnOrderChange`, `locked`, `color`, `description`, `renderColumnMeta`, `renderColumnActions`. */
|
|
1
|
+
/** A sales pipeline whose stages move by the grip in their header while the first and the last stay locked; each stage carries its color on the count, a rule and its figures under the title, and is edited in a popover; the page keeps the order — `reorderableColumns`, `columnOrder`, `onColumnOrderChange`, `locked`, `color`, `description`, `renderColumnMeta`, `renderColumnActions`. */
|
|
2
2
|
import {
|
|
3
3
|
Button,
|
|
4
4
|
ColorSwatches,
|
|
@@ -52,6 +52,8 @@ const DEALS: Deal[] = [
|
|
|
52
52
|
{ id: "DL-296", client: "ГК «Меридиан»", amount: 2_750_000 },
|
|
53
53
|
];
|
|
54
54
|
|
|
55
|
+
const INITIAL_ORDER = COLUMNS.map((column) => column.id);
|
|
56
|
+
|
|
55
57
|
const PLACEMENT: KanbanValue = {
|
|
56
58
|
lead: ["DL-318", "DL-322"],
|
|
57
59
|
demo: ["DL-309"],
|
|
@@ -77,7 +79,7 @@ const dealsWord = (count: number) => {
|
|
|
77
79
|
export default function KanbanColumnsExample() {
|
|
78
80
|
const [columns, setColumns] = React.useState(COLUMNS);
|
|
79
81
|
const [placement, setPlacement] = React.useState<KanbanValue>(PLACEMENT);
|
|
80
|
-
const [
|
|
82
|
+
const [order, setOrder] = React.useState<readonly string[]>(INITIAL_ORDER);
|
|
81
83
|
|
|
82
84
|
const updateColumn = (id: string, patch: Partial<KanbanColumn>) =>
|
|
83
85
|
setColumns((current) =>
|
|
@@ -95,8 +97,8 @@ export default function KanbanColumnsExample() {
|
|
|
95
97
|
return (
|
|
96
98
|
<div className={styles.stage}>
|
|
97
99
|
<Typography as="span" variant="body-s" tone="muted" aria-live="polite">
|
|
98
|
-
{
|
|
99
|
-
? `Порядок этапов сохранён: ${
|
|
100
|
+
{order !== INITIAL_ORDER
|
|
101
|
+
? `Порядок этапов сохранён: ${order.map(titleOf).filter(Boolean).join(" → ")}`
|
|
100
102
|
: "Перетащите этап за ручку в шапке или нажмите на ней Alt + ← / →"}
|
|
101
103
|
</Typography>
|
|
102
104
|
<Kanban.Root
|
|
@@ -109,7 +111,8 @@ export default function KanbanColumnsExample() {
|
|
|
109
111
|
value={placement}
|
|
110
112
|
onValueChange={setPlacement}
|
|
111
113
|
reorderableColumns
|
|
112
|
-
|
|
114
|
+
columnOrder={order}
|
|
115
|
+
onColumnOrderChange={setOrder}
|
|
113
116
|
renderColumnMeta={figures}
|
|
114
117
|
renderColumnActions={(column) => (
|
|
115
118
|
<Popover.Root>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* Kanban board: a work screen — the header carries the title and the tools, the page fills the app
|
|
2
|
+
panel (`AppShell.Root fillViewport` + `PageContent.Root fill`) and the board or the list takes
|
|
3
|
+
the free height; every column scrolls inside the board, never the page. */
|
|
4
|
+
|
|
5
|
+
/* Company cell: the name over the deal id. */
|
|
6
|
+
.company {
|
|
7
|
+
display: grid;
|
|
8
|
+
white-space: nowrap;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Owner: avatar, then the name. */
|
|
12
|
+
.owner {
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
gap: var(--prime-space-2);
|
|
16
|
+
white-space: nowrap;
|
|
17
|
+
}
|
package/dist/skill/{patterns/kanban-board.tsx → reference/components/kanban/examples/screen.tsx}
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
/** A sales pipeline
|
|
1
|
+
/** A sales pipeline as a work screen: the title with the open deals and their sum, search, filter, the board / list switch and the one primary action in the app header, a full-height Kanban of deals by stage with totals, moves saved on the server that can be refused, and the deal in a Drawer — `value`, `onValueChange`, `renderColumnMeta`, `onItemClick`. */
|
|
2
2
|
import {
|
|
3
|
+
AppHeader,
|
|
3
4
|
Avatar,
|
|
4
5
|
Badge,
|
|
5
6
|
Button,
|
|
@@ -27,7 +28,7 @@ import {
|
|
|
27
28
|
} from "prime-ui-kit";
|
|
28
29
|
import * as React from "react";
|
|
29
30
|
|
|
30
|
-
import styles from "./
|
|
31
|
+
import styles from "./screen.module.css";
|
|
31
32
|
|
|
32
33
|
type Owner = { name: string; initials: string; color: PaletteColor };
|
|
33
34
|
|
|
@@ -41,25 +42,17 @@ type Deal = {
|
|
|
41
42
|
source: string;
|
|
42
43
|
probability: number;
|
|
43
44
|
contract: boolean;
|
|
44
|
-
comments: number;
|
|
45
|
-
tags: { text: string; color: PaletteColor }[];
|
|
46
45
|
};
|
|
47
46
|
|
|
48
47
|
type DealRow = Deal & { stage: string };
|
|
49
48
|
|
|
50
|
-
/** The stages of the pipeline; the
|
|
49
|
+
/** The stages of the pipeline, in order; the stage color repeats on its count and its Badge. */
|
|
51
50
|
const STAGES: KanbanColumn[] = [
|
|
52
|
-
{
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
locked: true,
|
|
58
|
-
},
|
|
59
|
-
{ id: "qualified", title: "Квалификация", description: "Бюджет и сроки", color: "purple" },
|
|
60
|
-
{ id: "proposal", title: "Предложение", description: "КП отправлено", color: "orange" },
|
|
61
|
-
{ id: "negotiation", title: "Переговоры", description: "Условия договора", color: "yellow" },
|
|
62
|
-
{ id: "won", title: "Выиграна", description: "Договор подписан", color: "green", locked: true },
|
|
51
|
+
{ id: "new", title: "Новая", color: "blue" },
|
|
52
|
+
{ id: "qualified", title: "Квалификация", color: "purple" },
|
|
53
|
+
{ id: "proposal", title: "Предложение", color: "orange" },
|
|
54
|
+
{ id: "negotiation", title: "Переговоры", color: "yellow" },
|
|
55
|
+
{ id: "won", title: "Выиграна", color: "green" },
|
|
63
56
|
];
|
|
64
57
|
|
|
65
58
|
const ANNA: Owner = { name: "Анна Климова", initials: "АК", color: "purple" };
|
|
@@ -77,8 +70,6 @@ const DEALS: Deal[] = [
|
|
|
77
70
|
source: "Сайт",
|
|
78
71
|
probability: 20,
|
|
79
72
|
contract: false,
|
|
80
|
-
comments: 2,
|
|
81
|
-
tags: [{ text: "Входящая", color: "sky" }],
|
|
82
73
|
},
|
|
83
74
|
{
|
|
84
75
|
id: "DL-338",
|
|
@@ -90,8 +81,6 @@ const DEALS: Deal[] = [
|
|
|
90
81
|
source: "Выставка",
|
|
91
82
|
probability: 25,
|
|
92
83
|
contract: false,
|
|
93
|
-
comments: 0,
|
|
94
|
-
tags: [{ text: "Тендер", color: "blue" }],
|
|
95
84
|
},
|
|
96
85
|
{
|
|
97
86
|
id: "DL-332",
|
|
@@ -103,8 +92,6 @@ const DEALS: Deal[] = [
|
|
|
103
92
|
source: "Рекомендация",
|
|
104
93
|
probability: 40,
|
|
105
94
|
contract: false,
|
|
106
|
-
comments: 4,
|
|
107
|
-
tags: [{ text: "Повторная", color: "green" }],
|
|
108
95
|
},
|
|
109
96
|
{
|
|
110
97
|
id: "DL-327",
|
|
@@ -116,8 +103,6 @@ const DEALS: Deal[] = [
|
|
|
116
103
|
source: "Сайт",
|
|
117
104
|
probability: 40,
|
|
118
105
|
contract: false,
|
|
119
|
-
comments: 1,
|
|
120
|
-
tags: [{ text: "Просрочена", color: "red" }],
|
|
121
106
|
},
|
|
122
107
|
{
|
|
123
108
|
id: "DL-321",
|
|
@@ -129,8 +114,6 @@ const DEALS: Deal[] = [
|
|
|
129
114
|
source: "Холодный звонок",
|
|
130
115
|
probability: 60,
|
|
131
116
|
contract: false,
|
|
132
|
-
comments: 6,
|
|
133
|
-
tags: [{ text: "Горячая", color: "orange" }],
|
|
134
117
|
},
|
|
135
118
|
{
|
|
136
119
|
id: "DL-316",
|
|
@@ -142,11 +125,6 @@ const DEALS: Deal[] = [
|
|
|
142
125
|
source: "Рекомендация",
|
|
143
126
|
probability: 75,
|
|
144
127
|
contract: true,
|
|
145
|
-
comments: 9,
|
|
146
|
-
tags: [
|
|
147
|
-
{ text: "Тендер", color: "blue" },
|
|
148
|
-
{ text: "Горячая", color: "orange" },
|
|
149
|
-
],
|
|
150
128
|
},
|
|
151
129
|
{
|
|
152
130
|
id: "DL-309",
|
|
@@ -158,8 +136,6 @@ const DEALS: Deal[] = [
|
|
|
158
136
|
source: "Выставка",
|
|
159
137
|
probability: 80,
|
|
160
138
|
contract: false,
|
|
161
|
-
comments: 3,
|
|
162
|
-
tags: [{ text: "Ждём подпись", color: "yellow" }],
|
|
163
139
|
},
|
|
164
140
|
{
|
|
165
141
|
id: "DL-298",
|
|
@@ -171,8 +147,6 @@ const DEALS: Deal[] = [
|
|
|
171
147
|
source: "Сайт",
|
|
172
148
|
probability: 100,
|
|
173
149
|
contract: true,
|
|
174
|
-
comments: 2,
|
|
175
|
-
tags: [{ text: "Повторная", color: "green" }],
|
|
176
150
|
},
|
|
177
151
|
];
|
|
178
152
|
|
|
@@ -246,11 +220,6 @@ function saveStage(deal: Deal, to: string) {
|
|
|
246
220
|
});
|
|
247
221
|
}
|
|
248
222
|
|
|
249
|
-
/** The server's answer to a new order of the stages. */
|
|
250
|
-
function saveStageOrder() {
|
|
251
|
-
return new Promise<void>((resolve) => window.setTimeout(resolve, SAVE_MS));
|
|
252
|
-
}
|
|
253
|
-
|
|
254
223
|
const ownerAvatar = (owner: Owner) => (
|
|
255
224
|
<Avatar.Root size="s" color={owner.color} aria-label={owner.name}>
|
|
256
225
|
<Avatar.Fallback>{owner.initials}</Avatar.Fallback>
|
|
@@ -310,16 +279,13 @@ const COLUMNS: DataTableColumn<DealRow>[] = [
|
|
|
310
279
|
},
|
|
311
280
|
];
|
|
312
281
|
|
|
313
|
-
export default function
|
|
282
|
+
export default function KanbanScreenExample() {
|
|
314
283
|
const { notify } = useNotifications();
|
|
315
284
|
const [loading, setLoading] = React.useState(true);
|
|
316
285
|
const [view, setView] = React.useState("board");
|
|
317
286
|
const [filter, setFilter] = React.useState<SmartFilterValue>({});
|
|
318
287
|
const [search, setSearch] = React.useState("");
|
|
319
288
|
const [placement, setPlacement] = React.useState(PLACEMENT);
|
|
320
|
-
const [stageOrder, setStageOrder] = React.useState<readonly string[]>(
|
|
321
|
-
STAGES.map((stage) => stage.id),
|
|
322
|
-
);
|
|
323
289
|
const [openId, setOpenId] = React.useState<string | null>(null);
|
|
324
290
|
const [drawerOpen, setDrawerOpen] = React.useState(false);
|
|
325
291
|
const [saving, setSaving] = React.useState(false);
|
|
@@ -339,6 +305,11 @@ export default function KanbanBoardPattern() {
|
|
|
339
305
|
);
|
|
340
306
|
const rows: DealRow[] = deals.map((deal) => ({ ...deal, stage: stageOf(placement, deal.id) }));
|
|
341
307
|
const shown = new Set(deals.map((deal) => deal.id));
|
|
308
|
+
// The header's data line: what the filtered pipeline holds, open deals only.
|
|
309
|
+
const inWork = deals.filter((deal) => stageOf(placement, deal.id) !== "won");
|
|
310
|
+
const pipeline = `${inWork.length} ${dealsWord(inWork.length)} в работе · ${RUBLES.format(
|
|
311
|
+
inWork.reduce((total, deal) => total + deal.amount, 0),
|
|
312
|
+
)}`;
|
|
342
313
|
|
|
343
314
|
const figures = (column: KanbanColumn) => {
|
|
344
315
|
const ids = (placement[column.id] ?? []).filter((id) => shown.has(id));
|
|
@@ -383,32 +354,22 @@ export default function KanbanBoardPattern() {
|
|
|
383
354
|
|
|
384
355
|
const deal = openId === null ? undefined : BY_ID.get(openId);
|
|
385
356
|
const dealStage = deal ? stageOf(placement, deal.id) : "new";
|
|
386
|
-
const nextStage =
|
|
357
|
+
const nextStage = STAGES[STAGES.findIndex((stage) => stage.id === dealStage) + 1];
|
|
387
358
|
|
|
388
359
|
return (
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
<Button.Root>
|
|
403
|
-
<Button.Icon>
|
|
404
|
-
<Icon name="action.add" />
|
|
405
|
-
</Button.Icon>
|
|
406
|
-
Новая сделка
|
|
407
|
-
</Button.Root>
|
|
408
|
-
</PageContent.Actions>
|
|
409
|
-
</PageContent.Header>
|
|
410
|
-
<PageContent.Body>
|
|
411
|
-
<div className={styles.workspace}>
|
|
360
|
+
<>
|
|
361
|
+
{/* A work screen: in an app this header fills the shell's `header` slot and carries the page —
|
|
362
|
+
the only h1 and the page's tools; main has no PageContent.Header. */}
|
|
363
|
+
<AppHeader.Root>
|
|
364
|
+
<AppHeader.Start>
|
|
365
|
+
<AppHeader.Title>
|
|
366
|
+
Сделки
|
|
367
|
+
<AppHeader.Description>
|
|
368
|
+
{loading ? "Загружаем воронку…" : pipeline}
|
|
369
|
+
</AppHeader.Description>
|
|
370
|
+
</AppHeader.Title>
|
|
371
|
+
</AppHeader.Start>
|
|
372
|
+
<AppHeader.Tools>
|
|
412
373
|
<SmartFilter.Root
|
|
413
374
|
fields={FIELDS}
|
|
414
375
|
value={filter}
|
|
@@ -436,18 +397,30 @@ export default function KanbanBoardPattern() {
|
|
|
436
397
|
</SegmentedControl.Item>
|
|
437
398
|
</SegmentedControl.Root>
|
|
438
399
|
</PageToolbar.View>
|
|
400
|
+
<PageToolbar.Actions>
|
|
401
|
+
<Button.Root>
|
|
402
|
+
<Button.Icon>
|
|
403
|
+
<Icon name="action.add" />
|
|
404
|
+
</Button.Icon>
|
|
405
|
+
Новая сделка
|
|
406
|
+
</Button.Root>
|
|
407
|
+
</PageToolbar.Actions>
|
|
439
408
|
<PageToolbar.Chips>
|
|
440
409
|
<SmartFilter.Chips />
|
|
441
410
|
</PageToolbar.Chips>
|
|
442
411
|
</PageToolbar.Root>
|
|
443
412
|
</SmartFilter.Root>
|
|
444
|
-
|
|
413
|
+
</AppHeader.Tools>
|
|
414
|
+
</AppHeader.Root>
|
|
415
|
+
|
|
416
|
+
<PageContent.Root fill>
|
|
417
|
+
<PageContent.Body>
|
|
418
|
+
<Crossfade state={view} fill>
|
|
445
419
|
{view === "board" ? (
|
|
446
420
|
// `plain` (the default): the board is the page's main region, so the stages are no
|
|
447
421
|
// boxes — their headers and the deal cards stand on the page, one level of nesting.
|
|
448
422
|
<Kanban.Root
|
|
449
423
|
aria-label="Воронка продаж"
|
|
450
|
-
className={styles.board}
|
|
451
424
|
columns={STAGES}
|
|
452
425
|
items={deals}
|
|
453
426
|
getId={(item) => item.id}
|
|
@@ -465,12 +438,6 @@ export default function KanbanBoardPattern() {
|
|
|
465
438
|
}
|
|
466
439
|
setPlacement(next);
|
|
467
440
|
}}
|
|
468
|
-
reorderableColumns
|
|
469
|
-
columnOrder={stageOrder}
|
|
470
|
-
onColumnOrderChange={async (next) => {
|
|
471
|
-
await saveStageOrder();
|
|
472
|
-
setStageOrder(next);
|
|
473
|
-
}}
|
|
474
441
|
renderColumnMeta={figures}
|
|
475
442
|
loading={loading}
|
|
476
443
|
onItemClick={(item) => openDeal(item.id)}
|
|
@@ -480,20 +447,7 @@ export default function KanbanBoardPattern() {
|
|
|
480
447
|
<Kanban.ItemDescription>
|
|
481
448
|
{RUBLES.format(item.amount)} · до {DAY.format(new Date(item.due))}
|
|
482
449
|
</Kanban.ItemDescription>
|
|
483
|
-
<Kanban.
|
|
484
|
-
{item.tags.map((tag) => (
|
|
485
|
-
<Badge.Root key={tag.text} color={tag.color}>
|
|
486
|
-
{tag.text}
|
|
487
|
-
</Badge.Root>
|
|
488
|
-
))}
|
|
489
|
-
</Kanban.ItemBadges>
|
|
490
|
-
<Kanban.ItemFooter>
|
|
491
|
-
<Kanban.ItemCount>
|
|
492
|
-
<Icon name="object.message" />
|
|
493
|
-
{item.comments}
|
|
494
|
-
</Kanban.ItemCount>
|
|
495
|
-
{ownerAvatar(item.owner)}
|
|
496
|
-
</Kanban.ItemFooter>
|
|
450
|
+
<Kanban.ItemFooter>{ownerAvatar(item.owner)}</Kanban.ItemFooter>
|
|
497
451
|
</Kanban.Item>
|
|
498
452
|
)}
|
|
499
453
|
/>
|
|
@@ -505,7 +459,9 @@ export default function KanbanBoardPattern() {
|
|
|
505
459
|
getRowKey={(row) => row.id}
|
|
506
460
|
getRowLabel={(row) => row.company}
|
|
507
461
|
onRowClick={(row) => openDeal(row.id)}
|
|
508
|
-
|
|
462
|
+
paging="none"
|
|
463
|
+
scrollHeight="fill"
|
|
464
|
+
stickyHeader
|
|
509
465
|
defaultSort={{ columnId: "due", order: "asc" }}
|
|
510
466
|
empty={
|
|
511
467
|
<EmptyPage.Root size="s" role="status" aria-labelledby="deals-empty">
|
|
@@ -528,87 +484,89 @@ export default function KanbanBoardPattern() {
|
|
|
528
484
|
/>
|
|
529
485
|
)}
|
|
530
486
|
</Crossfade>
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
</Drawer.
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
<
|
|
556
|
-
{
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
<Drawer.
|
|
574
|
-
<
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
</Drawer.Close>
|
|
578
|
-
<Dropdown.Root>
|
|
579
|
-
<Dropdown.Trigger>
|
|
580
|
-
<Button.Root variant="soft" tone="neutral" disabled={saving}>
|
|
581
|
-
Сменить этап
|
|
487
|
+
<Drawer.Root open={drawerOpen} onOpenChange={setDrawerOpen}>
|
|
488
|
+
<Drawer.Content>
|
|
489
|
+
<Drawer.Guard busy={saving} />
|
|
490
|
+
<Drawer.Header>
|
|
491
|
+
<Drawer.Title>{deal?.company}</Drawer.Title>
|
|
492
|
+
<Drawer.Description>
|
|
493
|
+
{deal?.id} · {STAGE_BY_ID.get(dealStage)?.title}
|
|
494
|
+
</Drawer.Description>
|
|
495
|
+
</Drawer.Header>
|
|
496
|
+
<Drawer.Body>
|
|
497
|
+
{deal ? (
|
|
498
|
+
<DescriptionList.Root>
|
|
499
|
+
<DescriptionList.Item label="Этап">
|
|
500
|
+
{stageBadge(dealStage)}
|
|
501
|
+
</DescriptionList.Item>
|
|
502
|
+
<DescriptionList.Item label="Сумма">
|
|
503
|
+
{RUBLES.format(deal.amount)}
|
|
504
|
+
</DescriptionList.Item>
|
|
505
|
+
<DescriptionList.Item label="Вероятность">
|
|
506
|
+
{deal.probability} %
|
|
507
|
+
</DescriptionList.Item>
|
|
508
|
+
<DescriptionList.Item label="Срок закрытия">
|
|
509
|
+
{DAY.format(new Date(deal.due))}
|
|
510
|
+
</DescriptionList.Item>
|
|
511
|
+
<DescriptionList.Item label="Ответственный">
|
|
512
|
+
<span className={styles.owner}>
|
|
513
|
+
{ownerAvatar(deal.owner)}
|
|
514
|
+
{deal.owner.name}
|
|
515
|
+
</span>
|
|
516
|
+
</DescriptionList.Item>
|
|
517
|
+
<DescriptionList.Item label="Контакт">{deal.contact}</DescriptionList.Item>
|
|
518
|
+
<DescriptionList.Item label="Источник">{deal.source}</DescriptionList.Item>
|
|
519
|
+
<DescriptionList.Item label="Договор">
|
|
520
|
+
{deal.contract ? (
|
|
521
|
+
<Badge.Root color="green">Подписан</Badge.Root>
|
|
522
|
+
) : (
|
|
523
|
+
<Badge.Root color="gray">Не подписан</Badge.Root>
|
|
524
|
+
)}
|
|
525
|
+
</DescriptionList.Item>
|
|
526
|
+
</DescriptionList.Root>
|
|
527
|
+
) : null}
|
|
528
|
+
</Drawer.Body>
|
|
529
|
+
<Drawer.Footer>
|
|
530
|
+
<Drawer.Close>
|
|
531
|
+
<Button.Root variant="outline" tone="neutral">
|
|
532
|
+
Закрыть
|
|
582
533
|
</Button.Root>
|
|
583
|
-
</
|
|
584
|
-
<Dropdown.
|
|
585
|
-
|
|
586
|
-
<
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
534
|
+
</Drawer.Close>
|
|
535
|
+
<Dropdown.Root>
|
|
536
|
+
<Dropdown.Trigger>
|
|
537
|
+
<Button.Root variant="soft" tone="neutral" disabled={saving}>
|
|
538
|
+
Сменить этап
|
|
539
|
+
</Button.Root>
|
|
540
|
+
</Dropdown.Trigger>
|
|
541
|
+
<Dropdown.Content>
|
|
542
|
+
{STAGES.map((stage) => (
|
|
543
|
+
<Dropdown.Item
|
|
544
|
+
key={stage.id}
|
|
545
|
+
disabled={stage.id === dealStage}
|
|
546
|
+
onSelect={() => {
|
|
547
|
+
if (deal) void moveDeal(deal, stage.id);
|
|
548
|
+
}}
|
|
549
|
+
>
|
|
550
|
+
{stage.title}
|
|
551
|
+
</Dropdown.Item>
|
|
552
|
+
))}
|
|
553
|
+
</Dropdown.Content>
|
|
554
|
+
</Dropdown.Root>
|
|
555
|
+
{nextStage ? (
|
|
556
|
+
<Button.Root
|
|
557
|
+
loading={saving}
|
|
558
|
+
onClick={() => {
|
|
559
|
+
if (deal) void moveDeal(deal, nextStage.id);
|
|
560
|
+
}}
|
|
561
|
+
>
|
|
562
|
+
В «{nextStage.title}»
|
|
563
|
+
</Button.Root>
|
|
564
|
+
) : null}
|
|
565
|
+
</Drawer.Footer>
|
|
566
|
+
</Drawer.Content>
|
|
567
|
+
</Drawer.Root>
|
|
568
|
+
</PageContent.Body>
|
|
569
|
+
</PageContent.Root>
|
|
570
|
+
</>
|
|
613
571
|
);
|
|
614
572
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/** Loading draws skeleton cards in the card geometry and cross-fades the cards in; an empty column keeps its drop area; a read-only board drags nothing — `loading`, `disabled`. */
|
|
2
|
-
import { Button, Icon, Kanban, Switch } from "prime-ui-kit";
|
|
1
|
+
/** Loading draws skeleton cards in the card geometry and cross-fades the cards in; an empty column keeps its drop area; a closed order stays in place while the rest move; a read-only board drags nothing — `loading`, `disabled`. */
|
|
2
|
+
import { Badge, Button, Icon, Kanban, Switch } from "prime-ui-kit";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
|
|
5
5
|
import styles from "./examples.module.css";
|
|
6
6
|
|
|
7
|
-
type Order = { id: string; title: string; total: string };
|
|
7
|
+
type Order = { id: string; title: string; total: string; closed?: boolean };
|
|
8
8
|
|
|
9
9
|
const COLUMNS = [
|
|
10
10
|
{ id: "new", title: "Новые" },
|
|
@@ -12,13 +12,19 @@ const COLUMNS = [
|
|
|
12
12
|
{ id: "shipped", title: "Отгружены" },
|
|
13
13
|
];
|
|
14
14
|
|
|
15
|
+
/** A closed order has signed documents: its card stays where it is. */
|
|
15
16
|
const ORDERS: Order[] = [
|
|
16
17
|
{ id: "ORD-5531", title: "ООО «Север» · 12 позиций", total: "48 300 ₽" },
|
|
17
18
|
{ id: "ORD-5529", title: "ИП Лебедев · 3 позиции", total: "7 950 ₽" },
|
|
18
|
-
{ id: "ORD-5524", title: "АО «Гранит» · 40 позиций", total: "212 000 ₽" },
|
|
19
|
+
{ id: "ORD-5524", title: "АО «Гранит» · 40 позиций", total: "212 000 ₽", closed: true },
|
|
20
|
+
{ id: "ORD-5518", title: "ООО «Вектор» · 6 позиций", total: "31 400 ₽" },
|
|
19
21
|
];
|
|
20
22
|
|
|
21
|
-
const PLACEMENT = {
|
|
23
|
+
const PLACEMENT = {
|
|
24
|
+
new: ["ORD-5531", "ORD-5529"],
|
|
25
|
+
packing: [],
|
|
26
|
+
shipped: ["ORD-5524", "ORD-5518"],
|
|
27
|
+
};
|
|
22
28
|
|
|
23
29
|
const LOAD_MS = 1200;
|
|
24
30
|
|
|
@@ -62,11 +68,16 @@ export default function KanbanStatesExample() {
|
|
|
62
68
|
loading={loading}
|
|
63
69
|
disabled={readOnly}
|
|
64
70
|
renderItem={(order) => (
|
|
65
|
-
<Kanban.Item>
|
|
71
|
+
<Kanban.Item disabled={order.closed}>
|
|
66
72
|
<Kanban.ItemTitle>{order.id}</Kanban.ItemTitle>
|
|
67
73
|
<Kanban.ItemDescription>
|
|
68
74
|
{order.title} · {order.total}
|
|
69
75
|
</Kanban.ItemDescription>
|
|
76
|
+
{order.closed ? (
|
|
77
|
+
<Kanban.ItemBadges>
|
|
78
|
+
<Badge.Root color="gray">Закрыт</Badge.Root>
|
|
79
|
+
</Kanban.ItemBadges>
|
|
80
|
+
) : null}
|
|
70
81
|
</Kanban.Item>
|
|
71
82
|
)}
|
|
72
83
|
/>
|