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
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Checkout conversion against its plan: a dashed reference line, the scale from zero to 5% and the change over the whole period — `reference`, `min`, `max`, `change`. */
|
|
2
|
+
import { Card, Sparkline, type SparklinePoint } from "prime-ui-kit";
|
|
3
|
+
|
|
4
|
+
import styles from "./examples.module.css";
|
|
5
|
+
|
|
6
|
+
const CONVERSION: SparklinePoint[] = [
|
|
7
|
+
{ label: "май", value: 2.1 },
|
|
8
|
+
{ label: "июн", value: 2.4 },
|
|
9
|
+
{ label: "июл", value: 2.2 },
|
|
10
|
+
{ label: "авг", value: 2.8 },
|
|
11
|
+
{ label: "сен", value: 3.1 },
|
|
12
|
+
{ label: "окт", value: 3.4 },
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const PLAN = 3;
|
|
16
|
+
|
|
17
|
+
const PERCENT = new Intl.NumberFormat("ru-RU", { maximumFractionDigits: 1 });
|
|
18
|
+
|
|
19
|
+
const formatPercent = (value: number) => `${PERCENT.format(value)}%`;
|
|
20
|
+
|
|
21
|
+
export default function SparklineReferenceExample() {
|
|
22
|
+
return (
|
|
23
|
+
<Card.Root className={styles.card}>
|
|
24
|
+
<Card.Body>
|
|
25
|
+
<Sparkline
|
|
26
|
+
data={CONVERSION}
|
|
27
|
+
label="Конверсия оформления заказа"
|
|
28
|
+
reference={PLAN}
|
|
29
|
+
min={0}
|
|
30
|
+
max={5}
|
|
31
|
+
change="first"
|
|
32
|
+
formatValue={formatPercent}
|
|
33
|
+
labels={{ reference: "План: {value}" }}
|
|
34
|
+
/>
|
|
35
|
+
</Card.Body>
|
|
36
|
+
</Card.Root>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** The same week as a line and
|
|
1
|
+
/** The same week as an area, a bare line and bars from zero — `variant`. */
|
|
2
2
|
import { Sparkline, type SparklinePoint, Typography } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
const ORDERS: SparklinePoint[] = [
|
|
@@ -11,7 +11,7 @@ const ORDERS: SparklinePoint[] = [
|
|
|
11
11
|
{ label: "8 окт", value: 52 },
|
|
12
12
|
];
|
|
13
13
|
|
|
14
|
-
const VARIANTS = ["line", "bars"] as const;
|
|
14
|
+
const VARIANTS = ["area", "line", "bars"] as const;
|
|
15
15
|
|
|
16
16
|
export default function SparklineVariantsExample() {
|
|
17
17
|
return (
|
|
@@ -249,7 +249,7 @@ Other attributes: Root `data-orientation`, `data-size`, `data-tone`, `data-full-
|
|
|
249
249
|
|---|---|
|
|
250
250
|
| [overview.tsx](examples/overview.tsx) | Sections of one screen; the active tab rises into the strip and glides to the next one — `defaultValue`. |
|
|
251
251
|
| [variants.tsx](examples/variants.tsx) | The active tab in primary text with an accent icon, or all in accent — `tone`. |
|
|
252
|
-
| [sizes.tsx](examples/sizes.tsx) | Every size tier: text, icon, folder radius and spacing grow together — `size`. |
|
|
252
|
+
| [sizes.tsx](examples/sizes.tsx) | Every size tier: text, icon, folder radius and spacing grow together; tabs sized to their content — `size`, `fullWidth`. |
|
|
253
253
|
| [states.tsx](examples/states.tsx) | A disabled tab that clicks and arrow keys skip — `disabled`. |
|
|
254
254
|
| [with-icon.tsx](examples/with-icon.tsx) | A muted icon before the label and a hairline before the service section — `Tabs.Icon`, `Tabs.Label`, `Tabs.Separator`. |
|
|
255
255
|
| [orientation.tsx](examples/orientation.tsx) | Account settings with a side list of sections: the active section reaches out of the panel, and below 600px the list moves above it — `orientation`. |
|
|
@@ -22,12 +22,6 @@
|
|
|
22
22
|
max-width: calc(10 * var(--prime-control-m-height));
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
/* in-drawer.tsx: blocks of a panel in the drawer body, the full body width. */
|
|
26
|
-
.stack {
|
|
27
|
-
display: grid;
|
|
28
|
-
gap: var(--prime-space-5);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
25
|
/* The same column, which the reader can drag narrower to watch the tabs collapse and scroll. */
|
|
32
26
|
.resizable {
|
|
33
27
|
composes: frame;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/** Order details in a Drawer: the tab bar runs along the bottom of the header, the active tab is the body rising into it, and every panel is the body's own content — `Tabs.Root`, `Tabs.List`, `Tabs.Panel`. */
|
|
2
|
-
import { Badge, Button, DescriptionList, Drawer, Input, Tabs
|
|
3
|
-
|
|
4
|
-
import styles from "./examples.module.css";
|
|
2
|
+
import { Badge, Button, DescriptionList, Drawer, Fieldset, Input, Tabs } from "prime-ui-kit";
|
|
5
3
|
|
|
6
4
|
const ITEMS = [
|
|
7
5
|
{ name: "Кресло «Орион», графит", amount: "2 × 18 900 ₽" },
|
|
@@ -10,9 +8,9 @@ const ITEMS = [
|
|
|
10
8
|
];
|
|
11
9
|
|
|
12
10
|
const HISTORY = [
|
|
13
|
-
"3 октября, 10:14
|
|
14
|
-
"3 октября, 10:20
|
|
15
|
-
"4 октября, 16:02
|
|
11
|
+
{ time: "3 октября, 10:14", event: "Заказ оформлен" },
|
|
12
|
+
{ time: "3 октября, 10:20", event: "Оплата прошла" },
|
|
13
|
+
{ time: "4 октября, 16:02", event: "Передан на склад" },
|
|
16
14
|
];
|
|
17
15
|
|
|
18
16
|
export default function TabsInDrawerExample() {
|
|
@@ -61,7 +59,7 @@ export default function TabsInDrawerExample() {
|
|
|
61
59
|
</Tabs.Panel>
|
|
62
60
|
|
|
63
61
|
<Tabs.Panel value="delivery">
|
|
64
|
-
<
|
|
62
|
+
<Fieldset aria-label="Доставка">
|
|
65
63
|
<Input.Root label="Адрес">
|
|
66
64
|
<Input.Wrapper>
|
|
67
65
|
<Input.Field defaultValue="Москва, Ленинградский проспект, 37, кв. 12" />
|
|
@@ -72,17 +70,17 @@ export default function TabsInDrawerExample() {
|
|
|
72
70
|
<Input.Field defaultValue="Позвонить за час" />
|
|
73
71
|
</Input.Wrapper>
|
|
74
72
|
</Input.Root>
|
|
75
|
-
</
|
|
73
|
+
</Fieldset>
|
|
76
74
|
</Tabs.Panel>
|
|
77
75
|
|
|
78
76
|
<Tabs.Panel value="history">
|
|
79
|
-
<
|
|
77
|
+
<DescriptionList.Root>
|
|
80
78
|
{HISTORY.map((entry) => (
|
|
81
|
-
<
|
|
82
|
-
{entry}
|
|
83
|
-
</
|
|
79
|
+
<DescriptionList.Item key={entry.time} label={entry.time}>
|
|
80
|
+
{entry.event}
|
|
81
|
+
</DescriptionList.Item>
|
|
84
82
|
))}
|
|
85
|
-
</
|
|
83
|
+
</DescriptionList.Root>
|
|
86
84
|
</Tabs.Panel>
|
|
87
85
|
</Drawer.Body>
|
|
88
86
|
</Tabs.Root>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Every size tier: text, icon, folder radius and spacing grow together — `size`. */
|
|
1
|
+
/** Every size tier: text, icon, folder radius and spacing grow together; tabs sized to their content — `size`, `fullWidth`. */
|
|
2
2
|
import { Tabs, Typography } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
const SIZES = ["xs", "s", "m", "l", "xl"] as const;
|
|
@@ -156,7 +156,7 @@ No `variant` or `tone`. The control is the field look; chips are soft Badges on
|
|
|
156
156
|
|---|---|
|
|
157
157
|
| [overview.tsx](examples/overview.tsx) | A labelled tag field: focus opens the list, typing filters it, picked tags become chips — `label`, `options`. |
|
|
158
158
|
| [sizes.tsx](examples/sizes.tsx) | Every size tier with two picked tags; chips sit one tier below the field — `size`. |
|
|
159
|
-
| [states.tsx](examples/states.tsx) | A default field next to a disabled and an invalid one, with a disabled option in the list — `disabled`, `invalid`. |
|
|
159
|
+
| [states.tsx](examples/states.tsx) | A default field next to a disabled and an invalid one and one whose focus shows without the ring, with a disabled option in the list — `disabled`, `invalid`, `focusRing`. |
|
|
160
160
|
| [validation.tsx](examples/validation.tsx) | Live validation: removing the last region shakes the field and drops the error in, adding one clears it; required and optional markers and a hint — `required`, `optional`, `hint`, `error`. |
|
|
161
161
|
| [creatable.tsx](examples/creatable.tsx) | A typed text that is not in the list becomes a new tag from the Create row or Enter and is saved on the server: the chip waits busy, and a tag the server refuses leaves again — `creatable`, `onCreate`, `defaultColor`. |
|
|
162
162
|
| [many-tags.tsx](examples/many-tags.tsx) | More tags than fit: at rest one row with «+N», focused every tag on up to three wrapped rows that scroll — `defaultValue`. |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** A default field next to a disabled and an invalid one, with a disabled option in the list — `disabled`, `invalid`. */
|
|
1
|
+
/** A default field next to a disabled and an invalid one and one whose focus shows without the ring, with a disabled option in the list — `disabled`, `invalid`, `focusRing`. */
|
|
2
2
|
import { TagSelect, type TagSelectOption } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
const OPTIONS: TagSelectOption[] = [
|
|
@@ -19,6 +19,13 @@ export default function TagSelectStatesExample() {
|
|
|
19
19
|
/>
|
|
20
20
|
<TagSelect label="disabled" options={OPTIONS} defaultValue={["msk", "kzn"]} disabled />
|
|
21
21
|
<TagSelect label="invalid" options={OPTIONS} invalid placeholder="Добавить город" />
|
|
22
|
+
<TagSelect
|
|
23
|
+
label="focusRing={false}"
|
|
24
|
+
options={OPTIONS}
|
|
25
|
+
defaultValue={["spb"]}
|
|
26
|
+
focusRing={false}
|
|
27
|
+
placeholder="Добавить город"
|
|
28
|
+
/>
|
|
22
29
|
</>
|
|
23
30
|
);
|
|
24
31
|
}
|
|
@@ -200,7 +200,7 @@ Inline save (`onCommit`): the text at focus is the committed one; blur and Mod+E
|
|
|
200
200
|
|---|---|
|
|
201
201
|
| [overview.tsx](examples/overview.tsx) | A labelled multi-line field with a hint; the height follows the text — `label`, `hint`. |
|
|
202
202
|
| [sizes.tsx](examples/sizes.tsx) | Every size tier; text, padding, label and hint follow the tier — `size`. |
|
|
203
|
-
| [states.tsx](examples/states.tsx) | A default field next to a read-only
|
|
203
|
+
| [states.tsx](examples/states.tsx) | A default field next to a read-only, a disabled and an invalid one with no message — `readOnly`, `disabled`, `invalid`. |
|
|
204
204
|
| [validation.tsx](examples/validation.tsx) | Live validation: an error shakes the field as it arrives, drops in and leaves as soon as the text is fixed; required and optional markers, a hint and a support row that does not shift — `required`, `optional`, `hint`, `error`, `reserveSupportRow`. |
|
|
205
205
|
| [auto-resize.tsx](examples/auto-resize.tsx) | A field that grows with its text, one that starts as a line and stops growing at five, and a fixed one with a resize handle — `autoResize`, `rows`, `maxRows`. |
|
|
206
206
|
| [without-focus-ring.tsx](examples/without-focus-ring.tsx) | A single reply composer where the caret and the lighter fill show focus — `focusRing`. |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Support request form: the description is checked on submit, its error leaves as soon as the text is long enough and does not shift the form, a sent request turns the button green — `required`, `error`, `reserveSupportRow`. */
|
|
2
|
-
import { Button, Input, Textarea
|
|
2
|
+
import { Button, Input, Textarea } from "prime-ui-kit";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
|
|
5
5
|
import styles from "./examples.module.css";
|
|
@@ -23,14 +23,6 @@ export default function TextareaInFormExample() {
|
|
|
23
23
|
|
|
24
24
|
return (
|
|
25
25
|
<form className={styles.form} noValidate onSubmit={submit}>
|
|
26
|
-
<div className={styles.formHeader}>
|
|
27
|
-
<Typography as="h3" variant="title-m">
|
|
28
|
-
Обращение в поддержку
|
|
29
|
-
</Typography>
|
|
30
|
-
<Typography as="p" variant="body-s" tone="secondary">
|
|
31
|
-
Ответим в течение рабочего дня.
|
|
32
|
-
</Typography>
|
|
33
|
-
</div>
|
|
34
26
|
<div className={styles.formFields}>
|
|
35
27
|
<Input.Root label="Тема" required>
|
|
36
28
|
<Input.Wrapper>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** A default field next to a read-only
|
|
1
|
+
/** A default field next to a read-only, a disabled and an invalid one with no message — `readOnly`, `disabled`, `invalid`. */
|
|
2
2
|
import { Textarea } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
export default function TextareaStatesExample() {
|
|
@@ -16,6 +16,7 @@ export default function TextareaStatesExample() {
|
|
|
16
16
|
placeholder="Причина возврата"
|
|
17
17
|
hint="Станет доступно после выбора заказа"
|
|
18
18
|
/>
|
|
19
|
+
<Textarea.Root label="invalid" invalid defaultValue="Не подошёл размер" />
|
|
19
20
|
</>
|
|
20
21
|
);
|
|
21
22
|
}
|
|
@@ -171,9 +171,10 @@ No `labels`.
|
|
|
171
171
|
| [sizes.tsx](examples/sizes.tsx) | Every height tier, 24 to 64 px; `m` fits a two-line table cell — `size`. |
|
|
172
172
|
| [states.tsx](examples/states.tsx) | No image (an icon or a short label on the fill) and an image that fails and falls back by itself. |
|
|
173
173
|
| [ratios.tsx](examples/ratios.tsx) | Every aspect ratio at the same height; keep one ratio per list — `ratio`. |
|
|
174
|
+
| [fit.tsx](examples/fit.tsx) | A supplier's wide banner in a square frame: cropped to fill or shown whole on the fill — `fit`. |
|
|
174
175
|
| [ring.tsx](examples/ring.tsx) | A faint inner ring for a white-background photo on a light surface, where the edge would vanish — `ring`. |
|
|
175
176
|
| [full-width.tsx](examples/full-width.tsx) | Covers in a card grid take the card width and keep 16:9, so every cover has one height — `fullWidth`. |
|
|
176
|
-
| [video.tsx](examples/video.tsx) | Videos in the frame: a walkthrough without a poster shows its first frame, a play mark and the duration; a short clip loops muted like a GIF; a video message plays in place with its controls — `Thumbnail.Video`, `autoPlay`, `controls`. |
|
|
177
|
+
| [video.tsx](examples/video.tsx) | Videos in the frame: a walkthrough without a poster shows its first frame, a play mark and the duration; a briefing shows its poster and its own duration format; a short clip loops muted like a GIF; a video message plays in place with its controls — `Thumbnail.Video`, `poster`, `formatDuration`, `autoPlay`, `controls`. |
|
|
177
178
|
| [pressable.tsx](examples/pressable.tsx) | Photos of a delivery that open a viewer: the frame is put on a button, so it lifts on hover, presses and takes the focus ring — `asChild`. |
|
|
178
179
|
| [controlled.tsx](examples/controlled.tsx) | A media library picks photos for a listing: each tile is a checkbox with its check in the corner, the selection lives in the parent and a button clears it — `checked`, `onCheckedChange`. |
|
|
179
180
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** A supplier's wide banner in a square frame: cropped to fill or shown whole on the fill — `fit`. */
|
|
2
|
+
import { Thumbnail, Typography } from "prime-ui-kit";
|
|
3
|
+
|
|
4
|
+
import styles from "./examples.module.css";
|
|
5
|
+
|
|
6
|
+
const BANNER = "https://picsum.photos/seed/supplier-banner/480/160";
|
|
7
|
+
const FITS = ["cover", "contain"] as const;
|
|
8
|
+
|
|
9
|
+
export default function ThumbnailFitExample() {
|
|
10
|
+
return (
|
|
11
|
+
<div className={styles.row}>
|
|
12
|
+
{FITS.map((fit) => (
|
|
13
|
+
<div key={fit} className={styles.cell}>
|
|
14
|
+
<Thumbnail.Root size="xl" color="gray">
|
|
15
|
+
<Thumbnail.Image src={BANNER} fit={fit} alt="Ферма поставщика «Северное хозяйство»" />
|
|
16
|
+
</Thumbnail.Root>
|
|
17
|
+
<Typography as="span" variant="caption" tone="muted">
|
|
18
|
+
{fit}
|
|
19
|
+
</Typography>
|
|
20
|
+
</div>
|
|
21
|
+
))}
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
/** Videos in the frame: a walkthrough without a poster shows its first frame, a play mark and the duration; a short clip loops muted like a GIF; a video message plays in place with its controls — `Thumbnail.Video`, `autoPlay`, `controls`. */
|
|
1
|
+
/** Videos in the frame: a walkthrough without a poster shows its first frame, a play mark and the duration; a briefing shows its poster and its own duration format; a short clip loops muted like a GIF; a video message plays in place with its controls — `Thumbnail.Video`, `poster`, `formatDuration`, `autoPlay`, `controls`. */
|
|
2
2
|
import { Icon, Thumbnail, Typography } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
import styles from "./examples.module.css";
|
|
5
5
|
|
|
6
6
|
const CLIP = "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4";
|
|
7
|
+
const POSTER = "https://picsum.photos/seed/safety-briefing/640/360";
|
|
8
|
+
|
|
9
|
+
const formatSeconds = (seconds: number) => `${Math.round(seconds)} с`;
|
|
7
10
|
|
|
8
11
|
export default function ThumbnailVideoExample() {
|
|
9
12
|
return (
|
|
@@ -19,6 +22,22 @@ export default function ThumbnailVideoExample() {
|
|
|
19
22
|
Обход склада · без обложки
|
|
20
23
|
</Typography>
|
|
21
24
|
</div>
|
|
25
|
+
<div className={styles.cardContent}>
|
|
26
|
+
<Thumbnail.Root fullWidth ratio="16:9">
|
|
27
|
+
<Thumbnail.Video
|
|
28
|
+
src={CLIP}
|
|
29
|
+
poster={POSTER}
|
|
30
|
+
formatDuration={formatSeconds}
|
|
31
|
+
aria-label="Инструктаж по технике безопасности"
|
|
32
|
+
/>
|
|
33
|
+
<Thumbnail.Fallback>
|
|
34
|
+
<Icon name="action.play" />
|
|
35
|
+
</Thumbnail.Fallback>
|
|
36
|
+
</Thumbnail.Root>
|
|
37
|
+
<Typography variant="caption" tone="muted">
|
|
38
|
+
Инструктаж · обложка, длительность в секундах
|
|
39
|
+
</Typography>
|
|
40
|
+
</div>
|
|
22
41
|
<div className={styles.cardContent}>
|
|
23
42
|
<Thumbnail.Root fullWidth ratio="16:9">
|
|
24
43
|
<Thumbnail.Video src={CLIP} autoPlay aria-label="Как собрать заказ, ролик" />
|
|
@@ -165,7 +165,7 @@ No `labels`.
|
|
|
165
165
|
| [variants.tsx](examples/variants.tsx) | Dot hues for categories at reduced emphasis, and status tones on items, values and gaps at full emphasis — `color`, `tone`. |
|
|
166
166
|
| [sizes.tsx](examples/sizes.tsx) | Every tier scales text, dot and row rhythm, rows 40 to 76 px — `size`. |
|
|
167
167
|
| [structure.tsx](examples/structure.tsx) | A service history with intervals between events, a caption on the right of a gap and a second value line — `Timeline.Gap`, `Timeline.GapMeta`, `Timeline.ValueMeta`. |
|
|
168
|
-
| [links.tsx](examples/links.tsx) | Rows that open an operation page
|
|
168
|
+
| [links.tsx](examples/links.tsx) | Rows that open something: an operation page by a link or by your router link through the slot, a receipt in place by a button; one Tab stop each with a focus ring — `href`, `asChild`, `onClick`. |
|
|
169
169
|
| [narrow.tsx](examples/narrow.tsx) | At 375 px the title wraps and the amount stays right; below 20rem of its own width the amount moves under the meta line. |
|
|
170
170
|
|
|
171
171
|
## Mistakes
|
|
@@ -6,14 +6,6 @@
|
|
|
6
6
|
width: min(100%, calc(var(--prime-space-24) * 5));
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.stack {
|
|
10
|
-
display: flex;
|
|
11
|
-
flex-direction: column;
|
|
12
|
-
gap: var(--prime-space-10);
|
|
13
|
-
width: min(100%, calc(var(--prime-space-24) * 5));
|
|
14
|
-
min-width: 0;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
9
|
/* narrow.tsx: a 375px phone column. */
|
|
18
10
|
.phone {
|
|
19
11
|
width: min(100%, calc(var(--prime-space-1) * 93.75));
|
|
@@ -1,28 +1,69 @@
|
|
|
1
|
-
/** Rows that open an operation page
|
|
2
|
-
import { Timeline } from "prime-ui-kit";
|
|
1
|
+
/** Rows that open something: an operation page by a link or by your router link through the slot, a receipt in place by a button; one Tab stop each with a focus ring — `href`, `asChild`, `onClick`. */
|
|
2
|
+
import { Button, Drawer, Timeline } from "prime-ui-kit";
|
|
3
|
+
import * as React from "react";
|
|
3
4
|
|
|
4
5
|
import styles from "./examples.module.css";
|
|
5
6
|
|
|
6
|
-
const
|
|
7
|
+
const OPERATIONS = [
|
|
7
8
|
{ id: "rent-ivan", title: "Аренда закончилась · Иван К.", date: "21.09.26", value: "+6 300 ₽" },
|
|
8
9
|
{ id: "oil", title: "ТО: замена масла", date: "10.09.26", value: "−689 ₽" },
|
|
9
|
-
{ id: "wash", title: "Мойка и химчистка салона", date: "01.09.26", value: "−450 ₽" },
|
|
10
10
|
];
|
|
11
11
|
|
|
12
|
+
const WASH = { title: "Мойка и химчистка салона", date: "01.09.26", value: "−450 ₽" };
|
|
13
|
+
|
|
12
14
|
export default function TimelineLinksExample() {
|
|
15
|
+
const [receiptOpen, setReceiptOpen] = React.useState(false);
|
|
16
|
+
|
|
13
17
|
return (
|
|
14
|
-
|
|
15
|
-
<Timeline.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
<Timeline.
|
|
18
|
+
<>
|
|
19
|
+
<Timeline.Root className={styles.feed}>
|
|
20
|
+
<Timeline.Group label="Операции">
|
|
21
|
+
{OPERATIONS.map((operation) => (
|
|
22
|
+
<Timeline.Item key={operation.id} href={`#${operation.id}`}>
|
|
23
|
+
<Timeline.Title>{operation.title}</Timeline.Title>
|
|
24
|
+
<Timeline.Meta>
|
|
25
|
+
<Timeline.MetaPrimary>{operation.date}</Timeline.MetaPrimary>
|
|
26
|
+
</Timeline.Meta>
|
|
27
|
+
<Timeline.Value>{operation.value}</Timeline.Value>
|
|
28
|
+
</Timeline.Item>
|
|
29
|
+
))}
|
|
30
|
+
{/* The receipt opens in place: the row is a button. */}
|
|
31
|
+
<Timeline.Item onClick={() => setReceiptOpen(true)}>
|
|
32
|
+
<Timeline.Title>{WASH.title}</Timeline.Title>
|
|
19
33
|
<Timeline.Meta>
|
|
20
|
-
<Timeline.MetaPrimary>{
|
|
34
|
+
<Timeline.MetaPrimary>{WASH.date}</Timeline.MetaPrimary> · чек
|
|
21
35
|
</Timeline.Meta>
|
|
22
|
-
<Timeline.Value>{
|
|
36
|
+
<Timeline.Value>{WASH.value}</Timeline.Value>
|
|
23
37
|
</Timeline.Item>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
38
|
+
{/* A router link (`<Link to>`) goes in the same way. */}
|
|
39
|
+
<Timeline.Item asChild>
|
|
40
|
+
<a href="#operations-archive">
|
|
41
|
+
<Timeline.Title>Операции за август</Timeline.Title>
|
|
42
|
+
<Timeline.Meta>
|
|
43
|
+
<Timeline.MetaPrimary>14 операций</Timeline.MetaPrimary>
|
|
44
|
+
</Timeline.Meta>
|
|
45
|
+
</a>
|
|
46
|
+
</Timeline.Item>
|
|
47
|
+
</Timeline.Group>
|
|
48
|
+
</Timeline.Root>
|
|
49
|
+
|
|
50
|
+
<Drawer.Root open={receiptOpen} onOpenChange={setReceiptOpen}>
|
|
51
|
+
<Drawer.Content size="s">
|
|
52
|
+
<Drawer.Header>
|
|
53
|
+
<Drawer.Title>{WASH.title}</Drawer.Title>
|
|
54
|
+
<Drawer.Description>
|
|
55
|
+
Чек от {WASH.date} · {WASH.value}
|
|
56
|
+
</Drawer.Description>
|
|
57
|
+
</Drawer.Header>
|
|
58
|
+
<Drawer.Footer>
|
|
59
|
+
<Drawer.Close>
|
|
60
|
+
<Button.Root variant="outline" tone="neutral">
|
|
61
|
+
Закрыть
|
|
62
|
+
</Button.Root>
|
|
63
|
+
</Drawer.Close>
|
|
64
|
+
</Drawer.Footer>
|
|
65
|
+
</Drawer.Content>
|
|
66
|
+
</Drawer.Root>
|
|
67
|
+
</>
|
|
27
68
|
);
|
|
28
69
|
}
|
|
@@ -20,7 +20,7 @@ const EVENTS = [
|
|
|
20
20
|
|
|
21
21
|
export default function TimelineNarrowExample() {
|
|
22
22
|
return (
|
|
23
|
-
|
|
23
|
+
<>
|
|
24
24
|
{WIDTHS.map((width) => (
|
|
25
25
|
<Timeline.Root key={width.id} className={width.className}>
|
|
26
26
|
<Timeline.Group label={width.label}>
|
|
@@ -36,6 +36,6 @@ export default function TimelineNarrowExample() {
|
|
|
36
36
|
</Timeline.Group>
|
|
37
37
|
</Timeline.Root>
|
|
38
38
|
))}
|
|
39
|
-
|
|
39
|
+
</>
|
|
40
40
|
);
|
|
41
41
|
}
|
|
@@ -7,9 +7,9 @@ const SIZES = ["xs", "s", "m", "l", "xl"] as const;
|
|
|
7
7
|
|
|
8
8
|
export default function TimelineSizesExample() {
|
|
9
9
|
return (
|
|
10
|
-
|
|
10
|
+
<>
|
|
11
11
|
{SIZES.map((size) => (
|
|
12
|
-
<Timeline.Root key={size} size={size}>
|
|
12
|
+
<Timeline.Root key={size} size={size} className={styles.feed}>
|
|
13
13
|
<Timeline.Group label={size}>
|
|
14
14
|
<Timeline.Item>
|
|
15
15
|
<Timeline.Title>Аренда закончилась · Иван К.</Timeline.Title>
|
|
@@ -28,6 +28,6 @@ export default function TimelineSizesExample() {
|
|
|
28
28
|
</Timeline.Group>
|
|
29
29
|
</Timeline.Root>
|
|
30
30
|
))}
|
|
31
|
-
|
|
31
|
+
</>
|
|
32
32
|
);
|
|
33
33
|
}
|
|
@@ -27,8 +27,8 @@ const TONES: { tone: Tone; title: string; value: string }[] = [
|
|
|
27
27
|
|
|
28
28
|
export default function TimelineVariantsExample() {
|
|
29
29
|
return (
|
|
30
|
-
|
|
31
|
-
<Timeline.Root>
|
|
30
|
+
<>
|
|
31
|
+
<Timeline.Root className={styles.feed}>
|
|
32
32
|
<Timeline.Group label="color">
|
|
33
33
|
{COLORS.map((color) => (
|
|
34
34
|
<Timeline.Item key={color} color={color}>
|
|
@@ -38,7 +38,7 @@ export default function TimelineVariantsExample() {
|
|
|
38
38
|
))}
|
|
39
39
|
</Timeline.Group>
|
|
40
40
|
</Timeline.Root>
|
|
41
|
-
<Timeline.Root>
|
|
41
|
+
<Timeline.Root className={styles.feed}>
|
|
42
42
|
<Timeline.Group label="tone">
|
|
43
43
|
{TONES.map(({ tone, title, value }) => (
|
|
44
44
|
<Timeline.Item key={tone} tone={tone}>
|
|
@@ -51,6 +51,6 @@ export default function TimelineVariantsExample() {
|
|
|
51
51
|
<Timeline.Gap tone="danger">Просрочка 30 дней</Timeline.Gap>
|
|
52
52
|
</Timeline.Group>
|
|
53
53
|
</Timeline.Root>
|
|
54
|
-
|
|
54
|
+
</>
|
|
55
55
|
);
|
|
56
56
|
}
|
|
@@ -70,7 +70,7 @@ No DOM of its own: clones the single child and links it to the tooltip with `ari
|
|
|
70
70
|
| Prop | Type | Default | Description |
|
|
71
71
|
|---|---|---|---|
|
|
72
72
|
| `side` | `"top" \| "bottom" \| "left" \| "right"` | `"top"` | Preferred side; flips to the opposite one when it does not fit, then shifts inside the viewport. |
|
|
73
|
-
| `align` | `"start" \| "center" \| "end"` | `"center"` | Alignment along the trigger:
|
|
73
|
+
| `align` | `"auto" \| "start" \| "center" \| "end"` | `"center"` | Alignment along the trigger: centred by default; `auto` lines the chip up with the trigger edge that has more room beyond it; `start` or `end` fix the edge. The arrow keeps pointing at the trigger. |
|
|
74
74
|
| `size` | `"xs" \| "s" \| "m" \| "l" \| "xl"` | `"m"` | Text and padding tier; also the size context of controls inside (a Kbd). |
|
|
75
75
|
| `children` | `ReactNode` | — (required) | Hint text, optionally with a Kbd. |
|
|
76
76
|
| `…rest` | `Omit<HTMLAttributes<HTMLDivElement>, "id" \| "role" \| "onPointerEnter" \| "onPointerLeave">` | — | `className`, `style` and the other attributes of the chip. |
|
|
@@ -100,9 +100,10 @@ A chip of tier T is as tall as a menu item of tier T; text, padding and radius s
|
|
|
100
100
|
### align (Content)
|
|
101
101
|
| Value | Looks like | Use when | Default |
|
|
102
102
|
|---|---|---|---|
|
|
103
|
-
| `start` | Chip starts at the trigger's start edge | Wide triggers, triggers at a container's start | |
|
|
104
103
|
| `center` | Chip centred on the trigger | Most triggers | yes |
|
|
105
|
-
| `
|
|
104
|
+
| `auto` | Lined up with the trigger edge that has more room: near the end of the screen the end edges meet and the chip grows toward the start, near the start the other way | A long chip on a wide trigger near a screen edge | |
|
|
105
|
+
| `start` | Chip starts at the trigger's start edge | The chip must line up with the start of a block whatever room there is | |
|
|
106
|
+
| `end` | Chip ends at the trigger's end edge | The chip must line up with the end of a block whatever room there is | |
|
|
106
107
|
|
|
107
108
|
**Combinations** — size of the tooltip = size of the trigger control; a Kbd inside takes the tier one step down by itself.
|
|
108
109
|
|
|
@@ -133,6 +134,7 @@ A chip of tier T is as tall as a menu item of tier T; text, padding and radius s
|
|
|
133
134
|
- `Tooltip.Trigger` composes the child's `ref`, sets `data-state` and chains the child's `onPointerEnter`, `onPointerLeave`, `onPointerDown`, `onFocus` and `onBlur`.
|
|
134
135
|
- The tooltip is a description, not the name: an icon-only button needs its own `aria-label`.
|
|
135
136
|
- The pointer may move onto the chip without closing it (WCAG 1.4.13); a touch does not open it, focus does.
|
|
137
|
+
- Tooltip has no `closeOnEscape` / `closeOnOutsideClick` (foundation §8): it closes on pointer-leave, blur, a press on the trigger and Escape, and Escape cannot be turned off — WCAG 1.4.13 requires the chip to be dismissable without moving the pointer or focus.
|
|
136
138
|
- A `disabled` control is wrapped by the kit in a focusable `<span>`: the host takes hover and Tab, the focus ring is drawn on the control.
|
|
137
139
|
- A trigger that is no tab stop (Badge, Avatar, ProgressCircle, `Icon` with `label`) gets `tabIndex={0}` and the focus ring; its name comes from `aria-label` or the icon `label`.
|
|
138
140
|
|
|
@@ -146,8 +148,8 @@ No `labels`.
|
|
|
146
148
|
|---|---|
|
|
147
149
|
| [overview.tsx](examples/overview.tsx) | An icon-only button with a tooltip that repeats its name on hover and keyboard focus — `Tooltip.Trigger`, `Tooltip.Content`. |
|
|
148
150
|
| [sizes.tsx](examples/sizes.tsx) | Every size tier next to buttons of the same tier; take the tier of the control it describes — `size`. |
|
|
149
|
-
| [placement.tsx](examples/placement.tsx) | Every side, and start
|
|
150
|
-
| [toolbar.tsx](examples/toolbar.tsx) | A formatting toolbar in one group: after the first tooltip the neighbours open at once, each with its name and shortcut — `Tooltip.Provider`. |
|
|
151
|
+
| [placement.tsx](examples/placement.tsx) | Every side, and alignment by room, start and end along the trigger; without room the chip flips and shifts, the arrow keeps pointing at the trigger — `side`, `align`. |
|
|
152
|
+
| [toolbar.tsx](examples/toolbar.tsx) | A formatting toolbar in one group: after the first tooltip the neighbours open at once for half a second, each with its name and shortcut — `Tooltip.Provider`, `skipDelayDuration`. |
|
|
151
153
|
| [disabled-trigger.tsx](examples/disabled-trigger.tsx) | Why an action is unavailable: the disabled button still shows its tooltip on hover and Tab, no wrapper needed — `Tooltip.Trigger`. |
|
|
152
154
|
| [non-interactive-trigger.tsx](examples/non-interactive-trigger.tsx) | A status badge, an avatar and an information icon explain themselves: the kit makes each a tab stop, so the tooltip opens from the keyboard too — `Tooltip.Trigger`. |
|
|
153
155
|
| [delay.tsx](examples/delay.tsx) | The show delay of one tooltip: at once, the default 400 ms and one second — `delayDuration`. |
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Every side, and start
|
|
1
|
+
/** Every side, and alignment by room, start and end along the trigger; without room the chip flips and shifts, the arrow keeps pointing at the trigger — `side`, `align`. */
|
|
2
2
|
import { Button, Tooltip } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
const PLACEMENTS = [
|
|
@@ -6,6 +6,7 @@ const PLACEMENTS = [
|
|
|
6
6
|
{ side: "bottom", align: "center" },
|
|
7
7
|
{ side: "left", align: "center" },
|
|
8
8
|
{ side: "right", align: "center" },
|
|
9
|
+
{ side: "bottom", align: "auto" },
|
|
9
10
|
{ side: "bottom", align: "start" },
|
|
10
11
|
{ side: "bottom", align: "end" },
|
|
11
12
|
] as const;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** A formatting toolbar in one group: after the first tooltip the neighbours open at once, each with its name and shortcut — `Tooltip.Provider`. */
|
|
1
|
+
/** A formatting toolbar in one group: after the first tooltip the neighbours open at once for half a second, each with its name and shortcut — `Tooltip.Provider`, `skipDelayDuration`. */
|
|
2
2
|
import { Button, Icon, Kbd, Tooltip } from "prime-ui-kit";
|
|
3
3
|
|
|
4
4
|
import styles from "./examples.module.css";
|
|
@@ -13,7 +13,7 @@ const TOOLS = [
|
|
|
13
13
|
|
|
14
14
|
export default function TooltipToolbarExample() {
|
|
15
15
|
return (
|
|
16
|
-
<Tooltip.Provider>
|
|
16
|
+
<Tooltip.Provider skipDelayDuration={500}>
|
|
17
17
|
<div className={styles.toolbar} role="toolbar" aria-label="Форматирование">
|
|
18
18
|
{TOOLS.map(({ icon, label, keys }) => (
|
|
19
19
|
<Tooltip.Root key={label}>
|
|
@@ -17,6 +17,9 @@ export default function TypographyWeightsExample() {
|
|
|
17
17
|
<Typography variant="body-m" weight="semibold">
|
|
18
18
|
{LINE} · semibold
|
|
19
19
|
</Typography>
|
|
20
|
+
<Typography variant="body-m" tracking="tight">
|
|
21
|
+
{LINE} · tracking tight
|
|
22
|
+
</Typography>
|
|
20
23
|
<Typography variant="body-m" tracking="tighter">
|
|
21
24
|
{LINE} · tracking tighter
|
|
22
25
|
</Typography>
|
|
@@ -79,7 +79,7 @@ One look. The circle is the video; the play disk and the pills stand on the medi
|
|
|
79
79
|
## States
|
|
80
80
|
| State | Driven by | DOM |
|
|
81
81
|
|---|---|---|
|
|
82
|
-
| loading | the first frame not drawn yet | `data-frame="loading"` on the circle: a Skeleton fills it
|
|
82
|
+
| loading | the first frame not drawn yet | `data-frame="loading"` on the circle: a Skeleton fills it; once loaded the video fades in over it (`base`), then the Skeleton goes |
|
|
83
83
|
| at rest | idle | `data-state="idle"` on the circle; the still first frame (or `poster`) with the play disk and the duration; nothing plays, loops or decodes past the metadata and the first frame — a long chat costs nothing until a press |
|
|
84
84
|
| playing | the disk (or a press on the circle), `playing` / `defaultPlaying` | `data-playing="true"` on the root, `data-state="playing"`; sound from the start, the ring fills over the edge every frame (one CSS variable on the ring), the duration counts down, the disk's glyph turns to pause and the disk fades out (it stays while it has the keyboard focus); `onPlayingChange(true)`; any other sound pauses |
|
|
85
85
|
| paused | the disk or the circle again, another sound starting, `playing={false}` | `data-state="paused"`, the disk with the play glyph comes back, the ring stays; `onPlayingChange(false)` |
|
|
@@ -155,10 +155,10 @@ One look. The circle is the video; the play disk and the pills stand on the medi
|
|
|
155
155
|
|---|---|
|
|
156
156
|
| [overview.tsx](examples/overview.tsx) | A foreman's round video report: its still first frame with the play disk and the duration, played with sound on a press — `src`, `duration`. |
|
|
157
157
|
| [states.tsx](examples/states.tsx) | Every state side by side, each labelled by its prop: the transfer is drawn on the play disk itself — in flight with the cross and the ring, failed with the retry, not fetched with the download arrow — `unplayed`, `transfer`, `transferProgress`, `disabled`. |
|
|
158
|
-
| [in-message.tsx](examples/in-message.tsx) | Round video messages in a field crew chat: the circle is the message itself, the time stands on its pill
|
|
158
|
+
| [in-message.tsx](examples/in-message.tsx) | Round video messages in a field crew chat: the circle is the message itself, the time stands on its pill, the reply follows as text and the answer circle shows the cover its server made — `Message.Root`, `time`, `status`, `poster`. |
|
|
159
159
|
| [transcript.tsx](examples/transcript.tsx) | Round video messages with a transcript: the button stands at the circle's top end like a voice message's, one text is known and one is asked for on the first open — `transcript`, `onTranscribe`. |
|
|
160
160
|
| [transfer.tsx](examples/transfer.tsx) | One look for a round video on its way in either direction: the foreman's report waits to be fetched and then arrives, the engineer's answer is being sent — the disk in the middle with the ring of the share, the cross cancels, a dropped connection offers a retry, the circle plays once it is through — `transfer`, `transferProgress`, `transferDirection`, `onCancel`, `onRetry`, `onDownload`. |
|
|
161
|
-
| [controlled.tsx](examples/controlled.tsx) | The parent knows what plays
|
|
161
|
+
| [controlled.tsx](examples/controlled.tsx) | The parent knows what plays, marks the report as watched on the first play and as seen to the end when it ends, and keeps the transcript open — `playing`, `onPlayingChange`, `unplayed`, `onEnded`, `transcriptExpanded`, `onTranscriptExpandedChange`. |
|
|
162
162
|
|
|
163
163
|
## Mistakes
|
|
164
164
|
- A `<video>` cropped round by hand in a bubble → use `VideoNote`: it plays one sound at a time, draws the transfer on its disk and keeps the meta on its pill.
|