prime-ui-kit 0.13.1 → 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 +20 -20
- package/dist/chunks/{chunk-XNOJEX55.js → chunk-2IKH55MI.js} +1 -1
- package/dist/chunks/{chunk-JV2KB5JZ.js → chunk-THFZIHKU.js} +3761 -3041
- package/dist/chunks/{chunk-PK2GC77E.js → chunk-XJAVS6FH.js} +213 -188
- package/dist/color-picker.js +2 -2
- package/dist/components/banner/Banner.d.ts +5 -2
- package/dist/components/chart-frame/ChartFrame.d.ts +19 -6
- package/dist/components/chat/Chat.d.ts +2 -2
- package/dist/components/chat/ChatPinned.d.ts +2 -2
- package/dist/components/chat/MessageList.d.ts +1 -1
- package/dist/components/chat/chatContext.d.ts +1 -1
- package/dist/components/dnd/Dnd.d.ts +1 -1
- package/dist/components/field-list/FieldList.d.ts +90 -0
- package/dist/components/index.d.ts +3 -1
- package/dist/components/input/Input.d.ts +2 -2
- package/dist/components/kanban/Kanban.d.ts +6 -3
- package/dist/components/login-form/LoginForm.d.ts +5 -1
- package/dist/components/page-content/PageContent.d.ts +55 -4
- package/dist/components/sparkline/Sparkline.d.ts +64 -15
- package/dist/components/sparkline/geometry.d.ts +26 -0
- package/dist/components/tooltip/Tooltip.d.ts +5 -2
- package/dist/hooks/usePosition.d.ts +15 -4
- package/dist/index.css +1 -1
- package/dist/index.js +4 -2
- package/dist/internal/ChartTooltip.d.ts +26 -0
- package/dist/internal/FieldAction.d.ts +6 -7
- package/dist/internal/fieldCell.d.ts +21 -0
- package/dist/internal/messageList.d.ts +2 -2
- package/dist/internal/palette.d.ts +7 -0
- 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 +32 -20
- package/dist/skill/anti-slop.md +77 -4
- package/dist/skill/api-contract.md +2 -2
- package/dist/skill/cheatsheet.md +33 -7
- package/dist/skill/checklist.md +28 -6
- package/dist/skill/choosing.md +17 -14
- package/dist/skill/components.md +9 -15
- package/dist/skill/composition.md +301 -61
- package/dist/skill/foundations.md +9 -7
- package/dist/skill/layouts.md +70 -37
- package/dist/skill/reference/components/avatar/COMPONENT.md +4 -4
- package/dist/skill/reference/components/avatar/examples/presence.tsx +1 -1
- package/dist/skill/reference/components/avatar/examples/states.tsx +5 -5
- 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/COMPONENT.md +6 -6
- package/dist/skill/reference/components/banner/examples/dismissible.tsx +22 -11
- package/dist/skill/reference/components/banner/examples/examples.module.css +4 -8
- package/dist/skill/reference/components/banner/examples/narrow.tsx +1 -1
- package/dist/skill/reference/components/banner/examples/page-strip.tsx +16 -22
- package/dist/skill/reference/components/breadcrumb/COMPONENT.md +5 -4
- package/dist/skill/reference/components/breadcrumb/examples/ellipsis.tsx +2 -2
- package/dist/skill/reference/components/breadcrumb/examples/overflow.tsx +1 -1
- 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 +7 -5
- package/dist/skill/reference/components/card/examples/examples.module.css +0 -28
- package/dist/skill/reference/components/card/examples/kpi-media.tsx +13 -11
- package/dist/skill/reference/components/card/examples/narrow.tsx +1 -1
- package/dist/skill/reference/components/card/examples/panel-chart.tsx +45 -22
- package/dist/skill/reference/components/card/examples/screen.module.css +14 -0
- 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 +12 -8
- 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/chart-frame/examples/tooltip.tsx +20 -24
- package/dist/skill/reference/components/chat/COMPONENT.md +6 -4
- 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} +187 -350
- package/dist/skill/reference/components/chat/examples/search.tsx +1 -1
- package/dist/skill/reference/components/chat-list/COMPONENT.md +2 -1
- 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 +37 -9
- 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 +6 -5
- 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/color-swatches/COMPONENT.md +1 -0
- 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/{patterns/screen-states.module.css → reference/components/crossfade/examples/screen.module.css} +3 -17
- 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 +6 -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 -12
- 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 +7 -5
- 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 +165 -0
- package/dist/skill/reference/components/field-list/examples/base-row.tsx +76 -0
- package/dist/skill/reference/components/field-list/examples/controlled.tsx +72 -0
- package/dist/skill/reference/components/field-list/examples/errors.tsx +88 -0
- package/dist/skill/reference/components/field-list/examples/examples.module.css +34 -0
- package/dist/skill/reference/components/field-list/examples/limits.tsx +55 -0
- package/dist/skill/reference/components/field-list/examples/locked.tsx +139 -0
- package/dist/skill/reference/components/field-list/examples/narrow.tsx +68 -0
- package/dist/skill/reference/components/field-list/examples/overview.tsx +66 -0
- package/dist/skill/reference/components/field-list/examples/reorder.tsx +42 -0
- package/dist/skill/reference/components/field-list/examples/screen.module.css +18 -0
- package/dist/skill/reference/components/field-list/examples/screen.tsx +316 -0
- package/dist/skill/reference/components/field-list/examples/sizes.tsx +42 -0
- package/dist/skill/reference/components/field-list/examples/states.tsx +51 -0
- 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 -23
- 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 +2 -13
- 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 +16 -11
- package/dist/skill/reference/components/kanban/examples/columns.tsx +8 -5
- package/dist/skill/reference/components/kanban/examples/limits.tsx +2 -1
- 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} +132 -172
- package/dist/skill/reference/components/kanban/examples/states.tsx +17 -6
- package/dist/skill/reference/components/kanban/examples/variants.tsx +16 -8
- package/dist/skill/reference/components/list/COMPONENT.md +1 -1
- 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 +3 -3
- package/dist/skill/reference/components/media-viewer/examples/dismiss.tsx +5 -1
- package/dist/skill/reference/components/message/COMPONENT.md +6 -5
- 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 +2 -1
- package/dist/skill/reference/components/notification/examples/dismiss.tsx +2 -2
- package/dist/skill/reference/components/page-content/COMPONENT.md +71 -14
- package/dist/skill/reference/components/page-content/examples/grid.tsx +107 -0
- package/dist/skill/reference/components/page-content/examples/list-detail.tsx +0 -3
- package/dist/skill/reference/components/page-content/examples/overview.tsx +2 -2
- package/dist/skill/{patterns/settings-page.module.css → reference/components/page-content/examples/screen.module.css} +1 -21
- package/dist/skill/{patterns/settings-page.tsx → reference/components/page-content/examples/screen.tsx} +61 -82
- package/dist/skill/reference/components/page-content/examples/sections.tsx +81 -0
- package/dist/skill/reference/components/page-content/examples/variants.tsx +4 -11
- package/dist/skill/reference/components/page-toolbar/COMPONENT.md +18 -16
- 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 +3 -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 +5 -3
- package/dist/skill/reference/components/select/examples/examples.module.css +2 -7
- package/dist/skill/reference/components/select/examples/icon-only.tsx +38 -0
- 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 +83 -30
- package/dist/skill/reference/components/sparkline/examples/compact.tsx +1 -1
- package/dist/skill/reference/components/sparkline/examples/curve.tsx +28 -0
- package/dist/skill/reference/components/sparkline/examples/gaps.tsx +33 -0
- package/dist/skill/reference/components/sparkline/examples/overview.tsx +11 -2
- package/dist/skill/reference/components/sparkline/examples/period.tsx +7 -2
- package/dist/skill/reference/components/sparkline/examples/reference.tsx +38 -0
- package/dist/skill/reference/components/sparkline/examples/variants.tsx +2 -2
- package/dist/skill/reference/components/tabs/COMPONENT.md +1 -1
- package/dist/skill/reference/components/tabs/examples/examples.module.css +0 -6
- package/dist/skill/reference/components/tabs/examples/in-drawer.tsx +11 -13
- 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/examples.module.css +0 -8
- package/dist/skill/reference/components/timeline/examples/links.tsx +55 -14
- package/dist/skill/reference/components/timeline/examples/narrow.tsx +2 -2
- package/dist/skill/reference/components/timeline/examples/sizes.tsx +3 -3
- package/dist/skill/reference/components/timeline/examples/variants.tsx +4 -4
- package/dist/skill/reference/components/tooltip/COMPONENT.md +7 -5
- package/dist/skill/reference/components/tooltip/examples/placement.tsx +2 -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 +3 -3
- 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 +3 -3
- 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 +2 -3
- 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 +5 -4
- package/dist/skill/reference/layout/app-shell/examples/footer.tsx +2 -2
- package/dist/skill/reference/layout/app-shell/examples/overview.tsx +17 -32
- package/dist/skill/{patterns/app-shell.module.css → reference/layout/app-shell/examples/screen.module.css} +1 -8
- package/dist/skill/reference/layout/app-shell/examples/screen.tsx +262 -0
- package/dist/skill/reference/layout/app-shell/examples/template.tsx +31 -11
- package/dist/skill/reference/layout/bottom-nav/examples/floating-action.tsx +2 -2
- package/dist/skill/reference/layout/bottom-nav/examples/floating.tsx +2 -2
- package/dist/skill/reference/layout/bottom-nav/examples/in-app-shell.tsx +2 -2
- 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 +7 -5
- package/dist/skill/ux.md +145 -0
- package/dist/tokens/semantic.d.ts +2 -0
- package/package.json +1 -1
- package/src/components/avatar/COMPONENT.md +4 -4
- package/src/components/avatar/examples/presence.tsx +1 -1
- package/src/components/avatar/examples/states.tsx +5 -5
- 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/COMPONENT.md +6 -6
- package/src/components/banner/examples/dismissible.tsx +22 -11
- package/src/components/banner/examples/examples.module.css +4 -8
- package/src/components/banner/examples/narrow.tsx +1 -1
- package/src/components/banner/examples/page-strip.tsx +16 -22
- package/src/components/breadcrumb/COMPONENT.md +5 -4
- package/src/components/breadcrumb/examples/ellipsis.tsx +2 -2
- package/src/components/breadcrumb/examples/overflow.tsx +1 -1
- 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 +7 -5
- package/src/components/card/examples/examples.module.css +0 -28
- package/src/components/card/examples/kpi-media.tsx +13 -11
- package/src/components/card/examples/narrow.tsx +1 -1
- package/src/components/card/examples/panel-chart.tsx +45 -22
- 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 +12 -8
- package/src/components/chart-frame/examples/fill-height.tsx +119 -0
- package/src/components/chart-frame/examples/states.tsx +3 -1
- package/src/components/chart-frame/examples/tooltip.tsx +20 -24
- package/src/components/chat/COMPONENT.md +6 -4
- 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/examples/search.tsx +1 -1
- package/src/components/chat-list/COMPONENT.md +2 -1
- 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 +37 -9
- 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 +6 -5
- 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/color-swatches/COMPONENT.md +1 -0
- 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 +6 -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 +7 -5
- 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 +165 -0
- package/src/components/field-list/examples/base-row.tsx +76 -0
- package/src/components/field-list/examples/controlled.tsx +72 -0
- package/src/components/field-list/examples/errors.tsx +88 -0
- package/src/components/field-list/examples/examples.module.css +34 -0
- package/src/components/field-list/examples/limits.tsx +55 -0
- package/src/components/field-list/examples/locked.tsx +139 -0
- package/src/components/field-list/examples/narrow.tsx +68 -0
- package/src/components/field-list/examples/overview.tsx +66 -0
- package/src/components/field-list/examples/reorder.tsx +42 -0
- package/src/components/field-list/examples/screen.module.css +18 -0
- package/src/components/field-list/examples/screen.tsx +316 -0
- package/src/components/field-list/examples/sizes.tsx +42 -0
- package/src/components/field-list/examples/states.tsx +51 -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 +2 -13
- 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 +16 -11
- package/src/components/kanban/examples/columns.tsx +8 -5
- package/src/components/kanban/examples/limits.tsx +2 -1
- 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/kanban/examples/variants.tsx +16 -8
- package/src/components/list/COMPONENT.md +1 -1
- 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 +3 -3
- package/src/components/media-viewer/examples/dismiss.tsx +5 -1
- package/src/components/message/COMPONENT.md +6 -5
- 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 +2 -1
- package/src/components/notification/examples/dismiss.tsx +2 -2
- package/src/components/page-content/COMPONENT.md +71 -14
- package/src/components/page-content/examples/grid.tsx +107 -0
- package/src/components/page-content/examples/list-detail.tsx +0 -3
- package/src/components/page-content/examples/overview.tsx +2 -2
- 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/sections.tsx +81 -0
- package/src/components/page-content/examples/variants.tsx +4 -11
- package/src/components/page-toolbar/COMPONENT.md +18 -16
- 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 +3 -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 +5 -3
- package/src/components/select/examples/examples.module.css +2 -7
- package/src/components/select/examples/icon-only.tsx +38 -0
- 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 +83 -30
- package/src/components/sparkline/examples/compact.tsx +1 -1
- package/src/components/sparkline/examples/curve.tsx +28 -0
- package/src/components/sparkline/examples/gaps.tsx +33 -0
- package/src/components/sparkline/examples/overview.tsx +11 -2
- package/src/components/sparkline/examples/period.tsx +7 -2
- package/src/components/sparkline/examples/reference.tsx +38 -0
- package/src/components/sparkline/examples/variants.tsx +2 -2
- package/src/components/tabs/COMPONENT.md +1 -1
- package/src/components/tabs/examples/examples.module.css +0 -6
- package/src/components/tabs/examples/in-drawer.tsx +11 -13
- 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/examples.module.css +0 -8
- package/src/components/timeline/examples/links.tsx +55 -14
- package/src/components/timeline/examples/narrow.tsx +2 -2
- package/src/components/timeline/examples/sizes.tsx +3 -3
- package/src/components/timeline/examples/variants.tsx +4 -4
- package/src/components/tooltip/COMPONENT.md +7 -5
- package/src/components/tooltip/examples/placement.tsx +2 -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 +3 -3
- 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 +3 -3
- 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 +2 -3
- 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 +5 -4
- package/src/layout/app-shell/examples/footer.tsx +2 -2
- package/src/layout/app-shell/examples/overview.tsx +17 -32
- 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 +31 -11
- package/src/layout/bottom-nav/examples/floating-action.tsx +2 -2
- package/src/layout/bottom-nav/examples/floating.tsx +2 -2
- package/src/layout/bottom-nav/examples/in-app-shell.tsx +2 -2
- 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/src/styles/theme-light.css +1 -0
- package/dist/skill/patterns/app-shell.tsx +0 -301
- package/dist/skill/patterns/chat.module.css +0 -8
- package/dist/skill/patterns/dashboard.module.css +0 -44
- package/dist/skill/patterns/dashboard.tsx +0 -326
- package/dist/skill/patterns/detail-page.tsx +0 -209
- 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 -638
- package/dist/skill/patterns/schedule.module.css +0 -22
- package/dist/skill/patterns/screen-states.tsx +0 -186
- /package/dist/skill/{patterns/form-drawer.module.css → reference/components/drawer/examples/screen.module.css} +0 -0
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,16 +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" ? (
|
|
420
|
+
// `plain` (the default): the board is the page's main region, so the stages are no
|
|
421
|
+
// boxes — their headers and the deal cards stand on the page, one level of nesting.
|
|
446
422
|
<Kanban.Root
|
|
447
423
|
aria-label="Воронка продаж"
|
|
448
|
-
className={styles.board}
|
|
449
424
|
columns={STAGES}
|
|
450
425
|
items={deals}
|
|
451
426
|
getId={(item) => item.id}
|
|
@@ -463,12 +438,6 @@ export default function KanbanBoardPattern() {
|
|
|
463
438
|
}
|
|
464
439
|
setPlacement(next);
|
|
465
440
|
}}
|
|
466
|
-
reorderableColumns
|
|
467
|
-
columnOrder={stageOrder}
|
|
468
|
-
onColumnOrderChange={async (next) => {
|
|
469
|
-
await saveStageOrder();
|
|
470
|
-
setStageOrder(next);
|
|
471
|
-
}}
|
|
472
441
|
renderColumnMeta={figures}
|
|
473
442
|
loading={loading}
|
|
474
443
|
onItemClick={(item) => openDeal(item.id)}
|
|
@@ -478,20 +447,7 @@ export default function KanbanBoardPattern() {
|
|
|
478
447
|
<Kanban.ItemDescription>
|
|
479
448
|
{RUBLES.format(item.amount)} · до {DAY.format(new Date(item.due))}
|
|
480
449
|
</Kanban.ItemDescription>
|
|
481
|
-
<Kanban.
|
|
482
|
-
{item.tags.map((tag) => (
|
|
483
|
-
<Badge.Root key={tag.text} color={tag.color}>
|
|
484
|
-
{tag.text}
|
|
485
|
-
</Badge.Root>
|
|
486
|
-
))}
|
|
487
|
-
</Kanban.ItemBadges>
|
|
488
|
-
<Kanban.ItemFooter>
|
|
489
|
-
<Kanban.ItemCount>
|
|
490
|
-
<Icon name="object.message" />
|
|
491
|
-
{item.comments}
|
|
492
|
-
</Kanban.ItemCount>
|
|
493
|
-
{ownerAvatar(item.owner)}
|
|
494
|
-
</Kanban.ItemFooter>
|
|
450
|
+
<Kanban.ItemFooter>{ownerAvatar(item.owner)}</Kanban.ItemFooter>
|
|
495
451
|
</Kanban.Item>
|
|
496
452
|
)}
|
|
497
453
|
/>
|
|
@@ -503,7 +459,9 @@ export default function KanbanBoardPattern() {
|
|
|
503
459
|
getRowKey={(row) => row.id}
|
|
504
460
|
getRowLabel={(row) => row.company}
|
|
505
461
|
onRowClick={(row) => openDeal(row.id)}
|
|
506
|
-
|
|
462
|
+
paging="none"
|
|
463
|
+
scrollHeight="fill"
|
|
464
|
+
stickyHeader
|
|
507
465
|
defaultSort={{ columnId: "due", order: "asc" }}
|
|
508
466
|
empty={
|
|
509
467
|
<EmptyPage.Root size="s" role="status" aria-labelledby="deals-empty">
|
|
@@ -526,87 +484,89 @@ export default function KanbanBoardPattern() {
|
|
|
526
484
|
/>
|
|
527
485
|
)}
|
|
528
486
|
</Crossfade>
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
</Drawer.
|
|
538
|
-
|
|
539
|
-
|
|
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
|
-
<Drawer.
|
|
572
|
-
<
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
</Drawer.Close>
|
|
576
|
-
<Dropdown.Root>
|
|
577
|
-
<Dropdown.Trigger>
|
|
578
|
-
<Button.Root variant="soft" tone="neutral" disabled={saving}>
|
|
579
|
-
Сменить этап
|
|
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
|
+
Закрыть
|
|
580
533
|
</Button.Root>
|
|
581
|
-
</
|
|
582
|
-
<Dropdown.
|
|
583
|
-
|
|
584
|
-
<
|
|
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
|
-
|
|
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
|
+
</>
|
|
611
571
|
);
|
|
612
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
|
/>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/** The same release board in
|
|
2
|
-
import { Kanban, type KanbanVariant, Typography } from "prime-ui-kit";
|
|
1
|
+
/** The same release board in three looks: no wells with a header plate, no wells with a header over a line, and columns as filled wells holding their cards — `variant`. */
|
|
2
|
+
import { Badge, Kanban, type KanbanVariant, Typography } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
import styles from "./examples.module.css";
|
|
5
5
|
|
|
6
|
-
type Task = { id: string; title: string; due: string };
|
|
6
|
+
type Task = { id: string; title: string; due: string; label: string };
|
|
7
7
|
|
|
8
|
-
const VARIANTS: KanbanVariant[] = ["
|
|
8
|
+
const VARIANTS: KanbanVariant[] = ["plain", "line", "well"];
|
|
9
9
|
|
|
10
10
|
const COLUMNS = [
|
|
11
11
|
{ id: "todo", title: "К выполнению", description: "Берём после планирования" },
|
|
@@ -14,10 +14,15 @@ const COLUMNS = [
|
|
|
14
14
|
];
|
|
15
15
|
|
|
16
16
|
const TASKS: Task[] = [
|
|
17
|
-
{ id: "PRJ-214", title: "Экспорт счетов в CSV для бухгалтерии", due: "14 окт" },
|
|
18
|
-
{ id: "PRJ-221", title: "Фильтр заказов по складу", due: "17 окт" },
|
|
19
|
-
{
|
|
20
|
-
|
|
17
|
+
{ id: "PRJ-214", title: "Экспорт счетов в CSV для бухгалтерии", due: "14 окт", label: "Финансы" },
|
|
18
|
+
{ id: "PRJ-221", title: "Фильтр заказов по складу", due: "17 окт", label: "Заказы" },
|
|
19
|
+
{
|
|
20
|
+
id: "PRJ-198",
|
|
21
|
+
title: "Повторная отправка приглашений в команду",
|
|
22
|
+
due: "10 окт",
|
|
23
|
+
label: "Команда",
|
|
24
|
+
},
|
|
25
|
+
{ id: "PRJ-176", title: "Онбординг нового проекта", due: "3 окт", label: "Проекты" },
|
|
21
26
|
];
|
|
22
27
|
|
|
23
28
|
const PLACEMENT = {
|
|
@@ -45,6 +50,9 @@ export default function KanbanVariantsExample() {
|
|
|
45
50
|
<Kanban.ItemDescription>
|
|
46
51
|
{task.id} · до {task.due}
|
|
47
52
|
</Kanban.ItemDescription>
|
|
53
|
+
<Kanban.ItemBadges>
|
|
54
|
+
<Badge.Root>{task.label}</Badge.Root>
|
|
55
|
+
</Kanban.ItemBadges>
|
|
48
56
|
</Kanban.Item>
|
|
49
57
|
)}
|
|
50
58
|
/>
|
|
@@ -134,7 +134,7 @@ A second line or an avatar makes a row taller than the one-line height; the vert
|
|
|
134
134
|
| current | `current` | `aria-current="true"` (button) or `"page"` (link); `fill-muted-hover` fill, primary text |
|
|
135
135
|
| focus-visible | keyboard | the focus ring inside the row edge |
|
|
136
136
|
| disabled | `disabled` | `disabled` on a button; `aria-disabled="true"`, no `href` on a link, `tabindex="-1"` on an `asChild` element; `data-disabled="true"`; disabled text; in a reorderable list the handle is disabled and the row holds its place |
|
|
137
|
-
| reorderable | `onReorder` | `data-reorderable="true"` on the root (a `Dnd.Sortable` `<ul>`); each `<li>` is a sortable item (`data-dnd-item` = `value`) with a leading `Dnd.Handle`; drag by the handle (a touch hold on touch), Alt + ↑ / ↓ from the handle or the row; a lifted row leaves a dashed gap, its neighbours glide, the copy follows the pointer and sets down in its new place |
|
|
137
|
+
| reorderable | `onReorder` | `data-reorderable="true"` on the root (a `Dnd.Sortable` `<ul>`); each `<li>` is a sortable item (`data-dnd-item` = `value`) with a leading `Dnd.Handle`; drag by the handle (a touch hold on touch), Alt + ↑ / ↓ from the handle or the row; a lifted row leaves a dashed gap in the row's radius, its neighbours glide, the copy (handle and row, in the row's padding and radius) follows the pointer and sets down in its new place without a jump |
|
|
138
138
|
| saving a move | `onReorder` returned a pending promise | the row stays in its new place, `aria-busy="true"`, a `Spinner` stands in for the handle, the row content dims to 0.6 (`--prime-motion-duration-fast` both ways); a rejection glides the row back |
|
|
139
139
|
|
|
140
140
|
Root attribute: `data-size`. The fill changes on `background-color` with `--prime-motion-duration-xfast` both ways (0 under reduced motion).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# LoginForm
|
|
2
2
|
|
|
3
|
-
**Category:**
|
|
3
|
+
**Category:** page
|
|
4
4
|
**Kind:** composite
|
|
5
5
|
|
|
6
6
|
> A sign-in card with a logo, title, provider buttons and a form; covers sign-in, sign-up, password reset and code confirmation.
|
|
@@ -54,7 +54,7 @@ Every part is optional except `Root`, `Title` and `Form`. Fields, buttons, divid
|
|
|
54
54
|
`ref` → `HTMLElement`. `<header>` with the logo, title and description, laid out by Root `align`. Native props.
|
|
55
55
|
|
|
56
56
|
### LoginForm.Logo
|
|
57
|
-
`ref` → `HTMLDivElement`. A tile for the product mark or an icon (accent tile with `start`, round with `center`); decorative unless it has an `aria-label
|
|
57
|
+
`ref` → `HTMLDivElement`. A tile for the product mark or an icon (accent tile with `start`, round with `center`); decorative unless it has an `aria-label` — then it is the product mark image (`role="img"`). Native `<div>` props.
|
|
58
58
|
|
|
59
59
|
### LoginForm.Title
|
|
60
60
|
`ref` → `HTMLHeadingElement`. The heading (kit Typography, text role by the tier).
|
|
@@ -119,7 +119,7 @@ Root carries `data-size`, `data-align` and `data-flat`.
|
|
|
119
119
|
## Layout & spacing
|
|
120
120
|
- header → body `--prime-space-8` (gap on Root); provider buttons → divider → form `--prime-space-4`; field → field → submit `--prime-space-5`; submit → back action `--prime-space-3`; form → footer `--prime-space-6`.
|
|
121
121
|
- Spacing is `gap` on parents; no margins between parts.
|
|
122
|
-
- The card has no border
|
|
122
|
+
- The card has no border, takes the full width up to the small modal width. To center it on a page, wrap it in your own flex container on the page.
|
|
123
123
|
- The form is a layer of the surface ladder like Card (`data-depth`): on the page it is white in light with the raised whisper, fields inside are one step off it.
|
|
124
124
|
|
|
125
125
|
## Accessibility
|
|
@@ -129,6 +129,7 @@ No keyboard interaction.
|
|
|
129
129
|
|
|
130
130
|
### ARIA
|
|
131
131
|
- The title is a real heading (`h1` by default) and the form is a native `<form>`: Enter submits.
|
|
132
|
+
- The logo is decorative; with an `aria-label` it is the product mark image (`role="img"`).
|
|
132
133
|
- Give `LoginForm.Form` an `aria-label` (or `aria-labelledby` pointing to the title id) so the form is a landmark.
|
|
133
134
|
- Fields use `autoComplete` (`email`, `current-password`, `new-password`, `one-time-code`) so password managers and OTP autofill work.
|
|
134
135
|
- Server errors in a Banner need `role="alert"`; field errors come from the fields (`aria-invalid`, described by the error).
|
|
@@ -141,9 +142,9 @@ No `labels`.
|
|
|
141
142
|
## Examples
|
|
142
143
|
| Example | Shows |
|
|
143
144
|
|---|---|
|
|
144
|
-
| [overview.tsx](examples/overview.tsx) | Sign in with a provider button, e-mail and password, a «forgot password» link and a sign-up link under a centered header — `align`, `LoginForm.Actions`, `LoginForm.Form`, `LoginForm.Footer`. |
|
|
145
|
+
| [overview.tsx](examples/overview.tsx) | Sign in with a provider button, e-mail and password, a «forgot password» link and a sign-up link under a centered header with the product's named mark — `align`, `LoginForm.Logo`, `LoginForm.Actions`, `LoginForm.Form`, `LoginForm.Footer`. |
|
|
145
146
|
| [sizes.tsx](examples/sizes.tsx) | Padding, gaps and text roles of the card follow the tier; the fields and buttons take the same one — `size`. |
|
|
146
|
-
| [structure.tsx](examples/structure.tsx) | The minimal form: no logo, description or footer,
|
|
147
|
+
| [structure.tsx](examples/structure.tsx) | The minimal form: no logo, description or footer, no shadow for a host that already is a surface and a second-level title under the host page's own heading — `flat`, `as`. |
|
|
147
148
|
| [register.tsx](examples/register.tsx) | Sign-up: five fields in one column, a strength meter on the new password and a mismatch shown as the field error — `strength`, `error`, `LoginForm.Form`. |
|
|
148
149
|
| [forgot-password.tsx](examples/forgot-password.tsx) | Password reset request: one field, the primary action and a quiet way back — `LoginForm.Actions`. |
|
|
149
150
|
| [reset-password.tsx](examples/reset-password.tsx) | A new password after the e-mail link: a strength meter on the first field and a mismatch error under the second one — `strength`, `error`. |
|
|
@@ -1,25 +1,6 @@
|
|
|
1
1
|
/* Layout helpers for the LoginForm examples. Semantic tokens only. */
|
|
2
2
|
|
|
3
|
-
/*
|
|
4
|
-
.stage {
|
|
5
|
-
display: flex;
|
|
6
|
-
justify-content: center;
|
|
7
|
-
width: 100%;
|
|
8
|
-
min-width: 0;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/* Several cards side by side, wrapping on narrow stages. */
|
|
12
|
-
.row {
|
|
13
|
-
display: flex;
|
|
14
|
-
flex-wrap: wrap;
|
|
15
|
-
align-items: flex-start;
|
|
16
|
-
justify-content: center;
|
|
17
|
-
gap: var(--prime-space-6);
|
|
18
|
-
width: 100%;
|
|
19
|
-
min-width: 0;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/* A field with a link under it, aligned to the field's end edge. */
|
|
3
|
+
/* overview.tsx: a field with a link under it, aligned to the field's end edge. */
|
|
23
4
|
.withLink {
|
|
24
5
|
display: flex;
|
|
25
6
|
flex-direction: column;
|
|
@@ -31,7 +12,7 @@
|
|
|
31
12
|
align-self: stretch;
|
|
32
13
|
}
|
|
33
14
|
|
|
34
|
-
/* narrow.tsx: a phone-width stage. */
|
|
15
|
+
/* narrow.tsx: a phone-width stage (320). */
|
|
35
16
|
.narrow {
|
|
36
17
|
display: flex;
|
|
37
18
|
justify-content: center;
|