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
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
/** A dashboard: the period switch in the header, a KPI row that cross-fades to the new period, a revenue trend to scrub, invoiced against paid in a ChartFrame with a legend, panels with plan progress and the receivables split, and a short table with a link to the full list. */
|
|
2
|
-
import {
|
|
3
|
-
Badge,
|
|
4
|
-
Button,
|
|
5
|
-
Card,
|
|
6
|
-
ChartFrame,
|
|
7
|
-
type ChartFrameSeries,
|
|
8
|
-
Crossfade,
|
|
9
|
-
chartColors,
|
|
10
|
-
DataTable,
|
|
11
|
-
type DataTableColumn,
|
|
12
|
-
Icon,
|
|
13
|
-
LinkButton,
|
|
14
|
-
PageContent,
|
|
15
|
-
ProgressBar,
|
|
16
|
-
type ProgressSegment,
|
|
17
|
-
SegmentedControl,
|
|
18
|
-
Sparkline,
|
|
19
|
-
type SparklinePoint,
|
|
20
|
-
Typography,
|
|
21
|
-
} from "prime-ui-kit";
|
|
22
|
-
import * as React from "react";
|
|
23
|
-
|
|
24
|
-
import styles from "./dashboard.module.css";
|
|
25
|
-
|
|
26
|
-
type Period = "week" | "month" | "quarter";
|
|
27
|
-
type Payment = { id: string; client: string; date: string; amount: number; late: boolean };
|
|
28
|
-
|
|
29
|
-
const KPIS: Record<
|
|
30
|
-
Period,
|
|
31
|
-
{ label: string; value: string; delta: string; tone: "success" | "danger" | "neutral" }[]
|
|
32
|
-
> = {
|
|
33
|
-
week: [
|
|
34
|
-
{ label: "Выручка", value: "2,1 млн ₽", delta: "+6% к прошлой неделе", tone: "success" },
|
|
35
|
-
{ label: "Оплачено счетов", value: "54", delta: "+4", tone: "success" },
|
|
36
|
-
{ label: "Средний чек", value: "38 900 ₽", delta: "без изменений", tone: "neutral" },
|
|
37
|
-
{ label: "Просрочено", value: "1,2 млн ₽", delta: "+180 тыс. ₽", tone: "danger" },
|
|
38
|
-
],
|
|
39
|
-
month: [
|
|
40
|
-
{ label: "Выручка", value: "8,4 млн ₽", delta: "+12% к сентябрю", tone: "success" },
|
|
41
|
-
{ label: "Оплачено счетов", value: "214", delta: "+17", tone: "success" },
|
|
42
|
-
{ label: "Средний чек", value: "39 300 ₽", delta: "−3% к сентябрю", tone: "danger" },
|
|
43
|
-
{ label: "Просрочено", value: "1,2 млн ₽", delta: "−340 тыс. ₽", tone: "success" },
|
|
44
|
-
],
|
|
45
|
-
quarter: [
|
|
46
|
-
{ label: "Выручка", value: "24,6 млн ₽", delta: "+21% ко II кварталу", tone: "success" },
|
|
47
|
-
{ label: "Оплачено счетов", value: "631", delta: "+88", tone: "success" },
|
|
48
|
-
{ label: "Средний чек", value: "39 000 ₽", delta: "+1%", tone: "neutral" },
|
|
49
|
-
{ label: "Просрочено", value: "1,2 млн ₽", delta: "−1,1 млн ₽", tone: "success" },
|
|
50
|
-
],
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const MONTHS = ["янв", "фев", "мар", "апр", "мая", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"];
|
|
54
|
-
|
|
55
|
-
/** Daily revenue up to 8 October 2026: `days` points ending that day, a deterministic wave. */
|
|
56
|
-
function dailyRevenue(days: number, base: number): SparklinePoint[] {
|
|
57
|
-
return Array.from({ length: days }, (_, i) => {
|
|
58
|
-
const day = new Date(2026, 9, 8 - (days - 1 - i));
|
|
59
|
-
const wave = Math.sin(i / 2.3) * 0.12 + Math.sin(i / 0.9) * 0.05 + i / days / 6;
|
|
60
|
-
return {
|
|
61
|
-
label: `${day.getDate()} ${MONTHS[day.getMonth()]}`,
|
|
62
|
-
value: Math.round((base * (1 + wave)) / 1000) * 1000,
|
|
63
|
-
};
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const REVENUE: Record<Period, SparklinePoint[]> = {
|
|
68
|
-
week: dailyRevenue(7, 300_000),
|
|
69
|
-
month: dailyRevenue(30, 280_000),
|
|
70
|
-
quarter: dailyRevenue(90, 270_000),
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const formatRubles = (value: number) => `${value.toLocaleString("ru-RU")} ₽`;
|
|
74
|
-
|
|
75
|
-
const BILLING_SERIES: ChartFrameSeries[] = [
|
|
76
|
-
{ id: "invoiced", label: "Выставлено" },
|
|
77
|
-
{ id: "paid", label: "Оплачено" },
|
|
78
|
-
];
|
|
79
|
-
|
|
80
|
-
/** Invoiced and paid, in millions of rubles, by the buckets of each period. */
|
|
81
|
-
const BILLING: Record<Period, { label: string; invoiced: number; paid: number }[]> = {
|
|
82
|
-
week: [
|
|
83
|
-
{ label: "пн", invoiced: 0.42, paid: 0.31 },
|
|
84
|
-
{ label: "вт", invoiced: 0.38, paid: 0.4 },
|
|
85
|
-
{ label: "ср", invoiced: 0.51, paid: 0.36 },
|
|
86
|
-
{ label: "чт", invoiced: 0.47, paid: 0.44 },
|
|
87
|
-
{ label: "пт", invoiced: 0.56, paid: 0.52 },
|
|
88
|
-
],
|
|
89
|
-
month: [
|
|
90
|
-
{ label: "нед 37", invoiced: 2.1, paid: 1.8 },
|
|
91
|
-
{ label: "нед 38", invoiced: 2.4, paid: 2.0 },
|
|
92
|
-
{ label: "нед 39", invoiced: 1.9, paid: 2.2 },
|
|
93
|
-
{ label: "нед 40", invoiced: 2.6, paid: 2.1 },
|
|
94
|
-
],
|
|
95
|
-
quarter: [
|
|
96
|
-
{ label: "авг", invoiced: 7.8, paid: 6.9 },
|
|
97
|
-
{ label: "сен", invoiced: 8.1, paid: 7.6 },
|
|
98
|
-
{ label: "окт", invoiced: 8.9, paid: 8.4 },
|
|
99
|
-
],
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
const BILLING_MARGIN = { top: 8, bottom: 24, left: 36 };
|
|
103
|
-
|
|
104
|
-
const formatMillionsShort = (value: number) => `${value.toLocaleString("ru-RU")} млн ₽`;
|
|
105
|
-
|
|
106
|
-
const PLAN = [
|
|
107
|
-
{ manager: "Анна Климова", value: 92 },
|
|
108
|
-
{ manager: "Илья Петров", value: 74 },
|
|
109
|
-
{ manager: "Марат Хасанов", value: 48 },
|
|
110
|
-
];
|
|
111
|
-
|
|
112
|
-
/** Display of an amount in millions: «5,1 млн ₽». */
|
|
113
|
-
const formatMillions = (value: number) => `${String(value).replace(".", ",")} млн ₽`;
|
|
114
|
-
|
|
115
|
-
const RECEIVABLES: ProgressSegment[] = [
|
|
116
|
-
{ value: 5.1, label: "В срок", tone: "success" },
|
|
117
|
-
{ value: 1.9, label: "До 30 дней", tone: "warning" },
|
|
118
|
-
{ value: 1.2, label: "Больше 30 дней", tone: "danger" },
|
|
119
|
-
];
|
|
120
|
-
|
|
121
|
-
const PAYMENTS: Payment[] = [
|
|
122
|
-
{ id: "p1", client: "ООО «Мостострой»", date: "7 окт.", amount: 2_480_000, late: false },
|
|
123
|
-
{ id: "p2", client: "АО «Волга-Энерго»", date: "6 окт.", amount: 1_095_000, late: false },
|
|
124
|
-
{ id: "p3", client: "ООО «Логистик Плюс»", date: "5 окт.", amount: 312_000, late: true },
|
|
125
|
-
{ id: "p4", client: "ООО «Гранит»", date: "3 окт.", amount: 94_750, late: false },
|
|
126
|
-
];
|
|
127
|
-
|
|
128
|
-
const MONEY = new Intl.NumberFormat("ru-RU", {
|
|
129
|
-
style: "currency",
|
|
130
|
-
currency: "RUB",
|
|
131
|
-
maximumFractionDigits: 0,
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
const COLUMNS: DataTableColumn<Payment>[] = [
|
|
135
|
-
{
|
|
136
|
-
id: "client",
|
|
137
|
-
header: "Клиент",
|
|
138
|
-
cell: (row) => (
|
|
139
|
-
<span className={styles.client}>
|
|
140
|
-
{row.client}
|
|
141
|
-
{row.late ? <Badge.Root color="orange">С опозданием</Badge.Root> : null}
|
|
142
|
-
</span>
|
|
143
|
-
),
|
|
144
|
-
},
|
|
145
|
-
{ id: "date", header: "Дата", accessor: "date", numeric: true, headerAlign: "end" },
|
|
146
|
-
{
|
|
147
|
-
id: "amount",
|
|
148
|
-
header: "Сумма",
|
|
149
|
-
numeric: true,
|
|
150
|
-
headerAlign: "end",
|
|
151
|
-
cell: (row) => MONEY.format(row.amount),
|
|
152
|
-
},
|
|
153
|
-
];
|
|
154
|
-
|
|
155
|
-
export default function DashboardPattern() {
|
|
156
|
-
const [period, setPeriod] = React.useState<Period>("month");
|
|
157
|
-
|
|
158
|
-
return (
|
|
159
|
-
<PageContent.Section aria-labelledby="dashboard-title">
|
|
160
|
-
<PageContent.Header>
|
|
161
|
-
<PageContent.Title id="dashboard-title">Обзор</PageContent.Title>
|
|
162
|
-
<PageContent.Description>Продажи и оплаты по всем менеджерам.</PageContent.Description>
|
|
163
|
-
<PageContent.Actions>
|
|
164
|
-
<SegmentedControl.Root
|
|
165
|
-
aria-label="Период"
|
|
166
|
-
value={period}
|
|
167
|
-
onValueChange={(next) => setPeriod(next as Period)}
|
|
168
|
-
>
|
|
169
|
-
<SegmentedControl.Item value="week">Неделя</SegmentedControl.Item>
|
|
170
|
-
<SegmentedControl.Item value="month">Месяц</SegmentedControl.Item>
|
|
171
|
-
<SegmentedControl.Item value="quarter">Квартал</SegmentedControl.Item>
|
|
172
|
-
</SegmentedControl.Root>
|
|
173
|
-
<Button.Root variant="soft" tone="neutral">
|
|
174
|
-
<Button.Icon>
|
|
175
|
-
<Icon name="action.download" />
|
|
176
|
-
</Button.Icon>
|
|
177
|
-
Отчёт
|
|
178
|
-
</Button.Root>
|
|
179
|
-
</PageContent.Actions>
|
|
180
|
-
</PageContent.Header>
|
|
181
|
-
<PageContent.Body>
|
|
182
|
-
{/* Another period is another set of values: the row cross-fades instead of flipping. */}
|
|
183
|
-
<Crossfade state={period}>
|
|
184
|
-
<div className={styles.kpis}>
|
|
185
|
-
{KPIS[period].map((kpi) => (
|
|
186
|
-
<Card.Root key={kpi.label} variant="stat-trend">
|
|
187
|
-
<Card.Label>{kpi.label}</Card.Label>
|
|
188
|
-
<Card.Value>{kpi.value}</Card.Value>
|
|
189
|
-
<Card.Delta tone={kpi.tone}>{kpi.delta}</Card.Delta>
|
|
190
|
-
</Card.Root>
|
|
191
|
-
))}
|
|
192
|
-
</div>
|
|
193
|
-
</Crossfade>
|
|
194
|
-
|
|
195
|
-
<Card.Root variant="panel">
|
|
196
|
-
<Card.Body>
|
|
197
|
-
<Sparkline data={REVENUE[period]} label="Выручка по дням" formatValue={formatRubles} />
|
|
198
|
-
</Card.Body>
|
|
199
|
-
</Card.Root>
|
|
200
|
-
|
|
201
|
-
<ChartFrame.Root series={BILLING_SERIES} formatValue={formatMillionsShort}>
|
|
202
|
-
<ChartFrame.Header>
|
|
203
|
-
<ChartFrame.Title as="h2">Выставлено и оплачено</ChartFrame.Title>
|
|
204
|
-
<ChartFrame.Description>Счета за период, млн ₽</ChartFrame.Description>
|
|
205
|
-
</ChartFrame.Header>
|
|
206
|
-
<ChartFrame.Plot
|
|
207
|
-
renderPlot={({ width, height, series }) => {
|
|
208
|
-
const rows = BILLING[period];
|
|
209
|
-
const top = Math.ceil(Math.max(...rows.map((row) => row.invoiced)));
|
|
210
|
-
const innerH = height - BILLING_MARGIN.top - BILLING_MARGIN.bottom;
|
|
211
|
-
const band = (width - BILLING_MARGIN.left) / rows.length;
|
|
212
|
-
const bar = Math.min(28, (band - 16) / series.length);
|
|
213
|
-
const y = (value: number) => BILLING_MARGIN.top + innerH * (1 - value / top);
|
|
214
|
-
return (
|
|
215
|
-
<svg width={width} height={height} aria-hidden="true">
|
|
216
|
-
{[0, top / 2, top].map((tick) => (
|
|
217
|
-
<g key={tick}>
|
|
218
|
-
<line
|
|
219
|
-
x1={BILLING_MARGIN.left}
|
|
220
|
-
x2={width}
|
|
221
|
-
y1={y(tick)}
|
|
222
|
-
y2={y(tick)}
|
|
223
|
-
stroke={tick === 0 ? chartColors.axis : chartColors.grid}
|
|
224
|
-
/>
|
|
225
|
-
<text
|
|
226
|
-
x={BILLING_MARGIN.left - 8}
|
|
227
|
-
y={y(tick)}
|
|
228
|
-
textAnchor="end"
|
|
229
|
-
dominantBaseline="middle"
|
|
230
|
-
>
|
|
231
|
-
{tick.toLocaleString("ru-RU")}
|
|
232
|
-
</text>
|
|
233
|
-
</g>
|
|
234
|
-
))}
|
|
235
|
-
{rows.map((row, i) => {
|
|
236
|
-
const center = BILLING_MARGIN.left + band * i + band / 2;
|
|
237
|
-
return (
|
|
238
|
-
<g key={row.label}>
|
|
239
|
-
{series.map((s, j) => {
|
|
240
|
-
const value = s.id === "paid" ? row.paid : row.invoiced;
|
|
241
|
-
return (
|
|
242
|
-
<rect
|
|
243
|
-
key={s.id}
|
|
244
|
-
data-hidden={s.hidden}
|
|
245
|
-
x={center - (bar * series.length) / 2 + bar * j}
|
|
246
|
-
y={y(value)}
|
|
247
|
-
width={bar - 2}
|
|
248
|
-
height={y(0) - y(value)}
|
|
249
|
-
rx={2}
|
|
250
|
-
fill={s.color}
|
|
251
|
-
/>
|
|
252
|
-
);
|
|
253
|
-
})}
|
|
254
|
-
<text x={center} y={height - 4} textAnchor="middle">
|
|
255
|
-
{row.label}
|
|
256
|
-
</text>
|
|
257
|
-
</g>
|
|
258
|
-
);
|
|
259
|
-
})}
|
|
260
|
-
</svg>
|
|
261
|
-
);
|
|
262
|
-
}}
|
|
263
|
-
/>
|
|
264
|
-
<ChartFrame.Legend />
|
|
265
|
-
<ChartFrame.Table
|
|
266
|
-
rows={BILLING[period].map((row) => ({
|
|
267
|
-
label: row.label,
|
|
268
|
-
values: { invoiced: row.invoiced, paid: row.paid },
|
|
269
|
-
}))}
|
|
270
|
-
/>
|
|
271
|
-
</ChartFrame.Root>
|
|
272
|
-
|
|
273
|
-
<div className={styles.panels}>
|
|
274
|
-
<Card.Root variant="panel">
|
|
275
|
-
<Card.Header>
|
|
276
|
-
<Card.Title as="h2">План продаж</Card.Title>
|
|
277
|
-
<Typography as="span" variant="caption" tone="muted">
|
|
278
|
-
Октябрь
|
|
279
|
-
</Typography>
|
|
280
|
-
</Card.Header>
|
|
281
|
-
<Card.Body>
|
|
282
|
-
<div className={styles.bars}>
|
|
283
|
-
{PLAN.map((row) => (
|
|
284
|
-
<ProgressBar
|
|
285
|
-
key={row.manager}
|
|
286
|
-
value={row.value}
|
|
287
|
-
label={row.manager}
|
|
288
|
-
tone={row.value < 50 ? "warning" : "accent"}
|
|
289
|
-
showValue
|
|
290
|
-
/>
|
|
291
|
-
))}
|
|
292
|
-
</div>
|
|
293
|
-
</Card.Body>
|
|
294
|
-
</Card.Root>
|
|
295
|
-
|
|
296
|
-
<Card.Root variant="panel">
|
|
297
|
-
<Card.Header>
|
|
298
|
-
<Card.Title as="h2">Дебиторка</Card.Title>
|
|
299
|
-
<Typography as="span" variant="caption" tone="muted">
|
|
300
|
-
8,2 млн ₽
|
|
301
|
-
</Typography>
|
|
302
|
-
</Card.Header>
|
|
303
|
-
<Card.Body>
|
|
304
|
-
<ProgressBar
|
|
305
|
-
segments={RECEIVABLES}
|
|
306
|
-
label="По сроку оплаты"
|
|
307
|
-
legend
|
|
308
|
-
formatValue={formatMillions}
|
|
309
|
-
/>
|
|
310
|
-
</Card.Body>
|
|
311
|
-
</Card.Root>
|
|
312
|
-
</div>
|
|
313
|
-
|
|
314
|
-
<section className={styles.recent} aria-labelledby="payments-title">
|
|
315
|
-
<div className={styles.recentHeader}>
|
|
316
|
-
<Typography as="h2" variant="title-m" id="payments-title">
|
|
317
|
-
Последние оплаты
|
|
318
|
-
</Typography>
|
|
319
|
-
<LinkButton href="#invoices">Все счета</LinkButton>
|
|
320
|
-
</div>
|
|
321
|
-
<DataTable columns={COLUMNS} rows={PAYMENTS} getRowKey={(row) => row.id} paging="none" />
|
|
322
|
-
</section>
|
|
323
|
-
</PageContent.Body>
|
|
324
|
-
</PageContent.Section>
|
|
325
|
-
);
|
|
326
|
-
}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
/** A detail page: breadcrumb and status in the header, actions by weight, a main column with the line items and a side column with the client and the history. */
|
|
2
|
-
import {
|
|
3
|
-
Avatar,
|
|
4
|
-
Badge,
|
|
5
|
-
Breadcrumb,
|
|
6
|
-
Button,
|
|
7
|
-
Card,
|
|
8
|
-
DataTable,
|
|
9
|
-
type DataTableColumn,
|
|
10
|
-
DescriptionList,
|
|
11
|
-
Dropdown,
|
|
12
|
-
Icon,
|
|
13
|
-
LinkButton,
|
|
14
|
-
PageContent,
|
|
15
|
-
Timeline,
|
|
16
|
-
Typography,
|
|
17
|
-
} from "prime-ui-kit";
|
|
18
|
-
|
|
19
|
-
import styles from "./detail-page.module.css";
|
|
20
|
-
|
|
21
|
-
type Line = { id: string; name: string; quantity: number; unit: string; price: number };
|
|
22
|
-
|
|
23
|
-
const LINES: Line[] = [
|
|
24
|
-
{ id: "l1", name: "Лицензия CRM, тариф «Бизнес»", quantity: 25, unit: "мест", price: 12_000 },
|
|
25
|
-
{ id: "l2", name: "Внедрение и настройка", quantity: 40, unit: "ч", price: 3_500 },
|
|
26
|
-
{ id: "l3", name: "Обучение менеджеров", quantity: 2, unit: "дня", price: 18_000 },
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
const HISTORY = [
|
|
30
|
-
{ id: "h1", title: "Счёт открыт клиентом", date: "2 окт., 11:40" },
|
|
31
|
-
{ id: "h2", title: "Отправлен на billing@veter.ru", date: "30 сент., 16:05" },
|
|
32
|
-
{ id: "h3", title: "Создан · Анна Климова", date: "30 сент., 15:52" },
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
const MONEY = new Intl.NumberFormat("ru-RU", {
|
|
36
|
-
style: "currency",
|
|
37
|
-
currency: "RUB",
|
|
38
|
-
maximumFractionDigits: 0,
|
|
39
|
-
});
|
|
40
|
-
const COUNT = new Intl.NumberFormat("ru-RU");
|
|
41
|
-
|
|
42
|
-
const NET = LINES.reduce((sum, line) => sum + line.quantity * line.price, 0);
|
|
43
|
-
const VAT = Math.round(NET * 0.2);
|
|
44
|
-
|
|
45
|
-
const TOTALS = [
|
|
46
|
-
{ label: "Без НДС", value: MONEY.format(NET) },
|
|
47
|
-
{ label: "НДС 20%", value: MONEY.format(VAT) },
|
|
48
|
-
];
|
|
49
|
-
|
|
50
|
-
const COLUMNS: DataTableColumn<Line>[] = [
|
|
51
|
-
{ id: "name", header: "Позиция", accessor: "name" },
|
|
52
|
-
{
|
|
53
|
-
id: "quantity",
|
|
54
|
-
header: "Кол-во",
|
|
55
|
-
numeric: true,
|
|
56
|
-
headerAlign: "end",
|
|
57
|
-
cell: (row) => `${COUNT.format(row.quantity)} ${row.unit}`,
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
id: "price",
|
|
61
|
-
header: "Цена",
|
|
62
|
-
numeric: true,
|
|
63
|
-
headerAlign: "end",
|
|
64
|
-
cell: (row) => MONEY.format(row.price),
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
id: "sum",
|
|
68
|
-
header: "Сумма",
|
|
69
|
-
numeric: true,
|
|
70
|
-
headerAlign: "end",
|
|
71
|
-
cell: (row) => MONEY.format(row.quantity * row.price),
|
|
72
|
-
},
|
|
73
|
-
];
|
|
74
|
-
|
|
75
|
-
export default function DetailPagePattern() {
|
|
76
|
-
return (
|
|
77
|
-
<PageContent.Section aria-labelledby="invoice-title">
|
|
78
|
-
<PageContent.Header>
|
|
79
|
-
<Breadcrumb.Root>
|
|
80
|
-
<Breadcrumb.Item href="#invoices">Счета</Breadcrumb.Item>
|
|
81
|
-
<Breadcrumb.Item current>№ 2026-0418</Breadcrumb.Item>
|
|
82
|
-
</Breadcrumb.Root>
|
|
83
|
-
<PageContent.Title id="invoice-title">Счёт № 2026-0418</PageContent.Title>
|
|
84
|
-
<PageContent.Description>
|
|
85
|
-
<span className={styles.status}>
|
|
86
|
-
<Badge.Root color="blue">Отправлен</Badge.Root>
|
|
87
|
-
Оплатить до 14 октября
|
|
88
|
-
</span>
|
|
89
|
-
</PageContent.Description>
|
|
90
|
-
<PageContent.Actions>
|
|
91
|
-
<Dropdown.Root>
|
|
92
|
-
<Dropdown.Trigger>
|
|
93
|
-
<Button.Root variant="soft" tone="neutral" aria-label="Другие действия">
|
|
94
|
-
<Button.Icon>
|
|
95
|
-
<Icon name="action.more" />
|
|
96
|
-
</Button.Icon>
|
|
97
|
-
</Button.Root>
|
|
98
|
-
</Dropdown.Trigger>
|
|
99
|
-
<Dropdown.Content>
|
|
100
|
-
<Dropdown.Item>Дублировать</Dropdown.Item>
|
|
101
|
-
<Dropdown.Item>Скачать PDF</Dropdown.Item>
|
|
102
|
-
<Dropdown.Separator />
|
|
103
|
-
<Dropdown.Item tone="danger">Аннулировать счёт</Dropdown.Item>
|
|
104
|
-
</Dropdown.Content>
|
|
105
|
-
</Dropdown.Root>
|
|
106
|
-
<Button.Root variant="soft" tone="neutral">
|
|
107
|
-
<Button.Icon>
|
|
108
|
-
<Icon name="action.send" />
|
|
109
|
-
</Button.Icon>
|
|
110
|
-
Напомнить
|
|
111
|
-
</Button.Root>
|
|
112
|
-
<Button.Root>Отметить оплату</Button.Root>
|
|
113
|
-
</PageContent.Actions>
|
|
114
|
-
</PageContent.Header>
|
|
115
|
-
<PageContent.Body>
|
|
116
|
-
<div className={styles.columns}>
|
|
117
|
-
<section className={styles.main} aria-labelledby="invoice-lines">
|
|
118
|
-
<Typography as="h2" variant="title-m" id="invoice-lines">
|
|
119
|
-
Позиции
|
|
120
|
-
</Typography>
|
|
121
|
-
<DataTable
|
|
122
|
-
columns={COLUMNS}
|
|
123
|
-
rows={LINES}
|
|
124
|
-
getRowKey={(row) => row.id}
|
|
125
|
-
paging="none"
|
|
126
|
-
highlightRowOnHover={false}
|
|
127
|
-
/>
|
|
128
|
-
{/* Totals line up with the «Сумма» column of the table above: a layout of its own. */}
|
|
129
|
-
<dl className={styles.totals}>
|
|
130
|
-
{TOTALS.map((row) => (
|
|
131
|
-
<div key={row.label} className={styles.totalRow}>
|
|
132
|
-
<dt>
|
|
133
|
-
<Typography variant="body-m" tone="secondary">
|
|
134
|
-
{row.label}
|
|
135
|
-
</Typography>
|
|
136
|
-
</dt>
|
|
137
|
-
<dd>
|
|
138
|
-
<Typography variant="body-m" className={styles.amount}>
|
|
139
|
-
{row.value}
|
|
140
|
-
</Typography>
|
|
141
|
-
</dd>
|
|
142
|
-
</div>
|
|
143
|
-
))}
|
|
144
|
-
<div className={styles.totalRow}>
|
|
145
|
-
<dt>
|
|
146
|
-
<Typography variant="title-m">К оплате</Typography>
|
|
147
|
-
</dt>
|
|
148
|
-
<dd>
|
|
149
|
-
<Typography variant="title-m" className={styles.amount}>
|
|
150
|
-
{MONEY.format(NET + VAT)}
|
|
151
|
-
</Typography>
|
|
152
|
-
</dd>
|
|
153
|
-
</div>
|
|
154
|
-
</dl>
|
|
155
|
-
</section>
|
|
156
|
-
<aside className={styles.aside} aria-label="Клиент и история">
|
|
157
|
-
<Card.Root variant="panel">
|
|
158
|
-
<Card.Header>
|
|
159
|
-
<Card.Title as="h2">Клиент</Card.Title>
|
|
160
|
-
</Card.Header>
|
|
161
|
-
<Card.Body>
|
|
162
|
-
<div className={styles.client}>
|
|
163
|
-
<span className={styles.person}>
|
|
164
|
-
<Avatar.Root color="teal">
|
|
165
|
-
<Avatar.Fallback>СВ</Avatar.Fallback>
|
|
166
|
-
</Avatar.Root>
|
|
167
|
-
<span className={styles.personText}>
|
|
168
|
-
<Typography as="span" variant="title-s">
|
|
169
|
-
ООО «Северный ветер»
|
|
170
|
-
</Typography>
|
|
171
|
-
<Typography as="span" variant="caption" tone="muted">
|
|
172
|
-
ИНН 7704 512 908
|
|
173
|
-
</Typography>
|
|
174
|
-
</span>
|
|
175
|
-
</span>
|
|
176
|
-
<DescriptionList.Root orientation="vertical">
|
|
177
|
-
<DescriptionList.Item label="Контакт">
|
|
178
|
-
Ольга Мартынова, финансовый директор
|
|
179
|
-
</DescriptionList.Item>
|
|
180
|
-
<DescriptionList.Item label="Почта для счетов">
|
|
181
|
-
<LinkButton href="mailto:billing@veter.ru">billing@veter.ru</LinkButton>
|
|
182
|
-
</DescriptionList.Item>
|
|
183
|
-
</DescriptionList.Root>
|
|
184
|
-
</div>
|
|
185
|
-
</Card.Body>
|
|
186
|
-
</Card.Root>
|
|
187
|
-
<Card.Root variant="panel">
|
|
188
|
-
<Card.Header>
|
|
189
|
-
<Card.Title as="h2">История</Card.Title>
|
|
190
|
-
</Card.Header>
|
|
191
|
-
<Card.Body>
|
|
192
|
-
<Timeline.Root>
|
|
193
|
-
<Timeline.Group>
|
|
194
|
-
{HISTORY.map((event) => (
|
|
195
|
-
<Timeline.Item key={event.id}>
|
|
196
|
-
<Timeline.Title>{event.title}</Timeline.Title>
|
|
197
|
-
<Timeline.Meta>{event.date}</Timeline.Meta>
|
|
198
|
-
</Timeline.Item>
|
|
199
|
-
))}
|
|
200
|
-
</Timeline.Group>
|
|
201
|
-
</Timeline.Root>
|
|
202
|
-
</Card.Body>
|
|
203
|
-
</Card.Root>
|
|
204
|
-
</aside>
|
|
205
|
-
</div>
|
|
206
|
-
</PageContent.Body>
|
|
207
|
-
</PageContent.Section>
|
|
208
|
-
);
|
|
209
|
-
}
|