@sableui/react 0.6.2 → 0.7.1
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/AGENTS.md +2 -2
- package/CHANGELOG.md +315 -0
- package/CONTRIBUTING.md +16 -10
- package/DESIGN.md +3 -3
- package/README.md +3 -3
- package/bin/sable-lint.mjs +18 -0
- package/bin/sable.mjs +470 -62
- package/dist/blocks/api-keys-block.js +44 -0
- package/dist/blocks/api-keys-block.meta.js +21 -0
- package/dist/blocks/chat-thread-block.js +17 -0
- package/dist/blocks/chat-thread-block.meta.js +20 -0
- package/dist/blocks/command-palette-block.js +24 -0
- package/dist/blocks/command-palette-block.meta.js +21 -0
- package/dist/blocks/cta-band-block.js +27 -0
- package/dist/blocks/cta-band-block.meta.js +20 -0
- package/dist/blocks/danger-zone-block.js +39 -0
- package/dist/blocks/danger-zone-block.meta.js +21 -0
- package/dist/blocks/device-comparison-block.js +69 -0
- package/dist/blocks/device-comparison-block.meta.js +21 -0
- package/dist/blocks/event-card-block.js +40 -0
- package/dist/blocks/event-card-block.meta.js +21 -0
- package/dist/blocks/faq-block.js +38 -0
- package/dist/blocks/faq-block.meta.js +20 -0
- package/dist/blocks/feature-grid-block.js +38 -0
- package/dist/blocks/feature-grid-block.meta.js +21 -0
- package/dist/blocks/feedback-form-block.js +30 -0
- package/dist/blocks/feedback-form-block.meta.js +21 -0
- package/dist/blocks/goal-progress-block.js +24 -0
- package/dist/blocks/goal-progress-block.meta.js +21 -0
- package/dist/blocks/hero-block.js +33 -0
- package/dist/blocks/hero-block.meta.js +21 -0
- package/dist/blocks/index.js +162 -1964
- package/dist/blocks/invite-team-block.js +36 -0
- package/dist/blocks/invite-team-block.meta.js +20 -0
- package/dist/blocks/invoice-history-block.js +41 -0
- package/dist/blocks/invoice-history-block.meta.js +21 -0
- package/dist/blocks/kpi-sparkline-block.js +29 -0
- package/dist/blocks/kpi-sparkline-block.meta.js +20 -0
- package/dist/blocks/media-player-block.js +68 -0
- package/dist/blocks/media-player-block.meta.js +21 -0
- package/dist/blocks/newsletter-block.js +35 -0
- package/dist/blocks/newsletter-block.meta.js +21 -0
- package/dist/blocks/not-found-block.js +27 -0
- package/dist/blocks/not-found-block.meta.js +20 -0
- package/dist/blocks/notification-list-block.js +32 -0
- package/dist/blocks/notification-list-block.meta.js +21 -0
- package/dist/blocks/notification-settings-block.js +25 -0
- package/dist/blocks/notification-settings-block.meta.js +20 -0
- package/dist/blocks/order-tracking-block.js +26 -0
- package/dist/blocks/order-tracking-block.meta.js +20 -0
- package/dist/blocks/pricing-card-block.js +46 -0
- package/dist/blocks/pricing-card-block.meta.js +21 -0
- package/dist/blocks/pricing-table-block.js +88 -0
- package/dist/blocks/pricing-table-block.meta.js +20 -0
- package/dist/blocks/product-card-block.js +26 -0
- package/dist/blocks/product-card-block.meta.js +21 -0
- package/dist/blocks/profile-card-block.js +58 -0
- package/dist/blocks/profile-card-block.meta.js +21 -0
- package/dist/blocks/profile-form-block.js +70 -0
- package/dist/blocks/profile-form-block.meta.js +21 -0
- package/dist/blocks/revenue-breakdown-block.js +38 -0
- package/dist/blocks/revenue-breakdown-block.meta.js +21 -0
- package/dist/blocks/sign-in-block.js +38 -0
- package/dist/blocks/sign-in-block.meta.js +21 -0
- package/dist/blocks/sign-up-block.js +48 -0
- package/dist/blocks/sign-up-block.meta.js +21 -0
- package/dist/blocks/site-footer-block.js +54 -0
- package/dist/blocks/site-footer-block.meta.js +20 -0
- package/dist/blocks/stat-row-block.js +28 -0
- package/dist/blocks/stat-row-block.meta.js +21 -0
- package/dist/blocks/steps-block.js +37 -0
- package/dist/blocks/steps-block.meta.js +20 -0
- package/dist/blocks/task-list-block.js +52 -0
- package/dist/blocks/task-list-block.meta.js +21 -0
- package/dist/blocks/team-members-block.js +49 -0
- package/dist/blocks/team-members-block.meta.js +21 -0
- package/dist/blocks/testimonial-block.js +49 -0
- package/dist/blocks/testimonial-block.meta.js +20 -0
- package/dist/blocks/traffic-sources-block.js +39 -0
- package/dist/blocks/traffic-sources-block.meta.js +21 -0
- package/dist/blocks/traffic-trend-block.js +61 -0
- package/dist/blocks/traffic-trend-block.meta.js +21 -0
- package/dist/blocks/upload-list-block.js +39 -0
- package/dist/blocks/upload-list-block.meta.js +21 -0
- package/dist/blocks/verify-code-block.js +28 -0
- package/dist/blocks/verify-code-block.meta.js +21 -0
- package/dist/blocks/wallet-block.js +48 -0
- package/dist/blocks/wallet-block.meta.js +21 -0
- package/dist/components/accordion/accordion.js +63 -0
- package/dist/components/accordion/accordion.meta.js +155 -0
- package/dist/components/accordion/index.js +15 -0
- package/dist/components/app-header/app-header.js +30 -0
- package/dist/components/app-header/app-header.meta.js +88 -0
- package/dist/components/app-header/index.js +7 -0
- package/dist/components/app-shell/app-shell-dock.js +37 -0
- package/dist/components/app-shell/app-shell.js +67 -0
- package/dist/components/app-shell/app-shell.meta.js +176 -0
- package/dist/components/app-shell/index.js +7 -0
- package/dist/components/area-chart/area-chart.js +10 -0
- package/dist/components/area-chart/area-chart.meta.js +218 -0
- package/dist/components/area-chart/index.js +7 -0
- package/dist/components/attachment/attachment.js +176 -0
- package/dist/components/attachment/attachment.meta.js +179 -0
- package/dist/components/attachment/attachment.variants.js +47 -0
- package/dist/components/attachment/index.js +7 -0
- package/dist/components/avatar/avatar.js +192 -0
- package/dist/components/avatar/avatar.meta.js +233 -0
- package/dist/components/avatar/avatar.variants.js +44 -0
- package/dist/components/avatar/index.js +22 -0
- package/dist/components/badge/badge.js +26 -0
- package/dist/components/badge/badge.meta.js +171 -0
- package/dist/components/badge/badge.variants.js +103 -0
- package/dist/components/badge/index.js +11 -0
- package/dist/components/banner/banner.js +76 -0
- package/dist/components/banner/banner.meta.js +172 -0
- package/dist/components/banner/banner.variants.js +44 -0
- package/dist/components/banner/index.js +9 -0
- package/dist/components/bar-chart/bar-chart.js +10 -0
- package/dist/components/bar-chart/bar-chart.meta.js +245 -0
- package/dist/components/bar-chart/index.js +7 -0
- package/dist/components/bottom-nav/bottom-nav.js +63 -0
- package/dist/components/bottom-nav/bottom-nav.meta.js +95 -0
- package/dist/components/bottom-nav/index.js +11 -0
- package/dist/components/breadcrumbs/breadcrumbs.js +90 -0
- package/dist/components/breadcrumbs/breadcrumbs.meta.js +111 -0
- package/dist/components/breadcrumbs/index.js +17 -0
- package/dist/components/browser/browser.js +39 -0
- package/dist/components/browser/browser.meta.js +80 -0
- package/dist/components/browser/index.js +7 -0
- package/dist/components/bubble/bubble.js +110 -0
- package/dist/components/bubble/bubble.meta.js +158 -0
- package/dist/components/bubble/bubble.variants.js +90 -0
- package/dist/components/bubble/index.js +13 -0
- package/dist/components/button/button.js +87 -0
- package/dist/components/button/button.meta.js +302 -0
- package/dist/components/button/button.variants.js +137 -0
- package/dist/components/button/index.js +9 -0
- package/dist/components/calendar/calendar.js +89 -0
- package/dist/components/calendar/calendar.meta.js +136 -0
- package/dist/components/calendar/index.js +7 -0
- package/dist/components/card/card.js +203 -0
- package/dist/components/card/card.meta.js +212 -0
- package/dist/components/card/index.js +23 -0
- package/dist/components/carousel/carousel.js +428 -0
- package/dist/components/carousel/carousel.meta.js +100 -0
- package/dist/components/carousel/index.js +7 -0
- package/dist/components/chat-composer/chat-composer.js +174 -0
- package/dist/components/chat-composer/chat-composer.meta.js +241 -0
- package/dist/components/chat-composer/chat-composer.variants.js +17 -0
- package/dist/components/chat-composer/index.js +7 -0
- package/dist/components/checkbox/checkbox-mark.js +28 -0
- package/dist/components/checkbox/checkbox.js +30 -0
- package/dist/components/checkbox/checkbox.meta.js +127 -0
- package/dist/components/checkbox/index.js +7 -0
- package/dist/components/checkbox-card/checkbox-card.js +94 -0
- package/dist/components/checkbox-card/checkbox-card.meta.js +154 -0
- package/dist/components/checkbox-card/checkbox-card.variants.js +43 -0
- package/dist/components/checkbox-card/index.js +11 -0
- package/dist/components/code/code.js +19 -0
- package/dist/components/code/code.meta.js +71 -0
- package/dist/components/code/index.js +7 -0
- package/dist/components/code-block/code-block.js +84 -0
- package/dist/components/code-block/code-block.meta.js +103 -0
- package/dist/components/code-block/index.js +8 -0
- package/dist/components/collapsible/collapsible.js +38 -0
- package/dist/components/collapsible/collapsible.meta.js +117 -0
- package/dist/components/collapsible/index.js +15 -0
- package/dist/components/color-field/color-field.js +293 -0
- package/dist/components/color-field/color-field.meta.js +142 -0
- package/dist/components/color-field/color.js +69 -0
- package/dist/components/color-field/index.js +15 -0
- package/dist/components/combobox/combobox.js +486 -0
- package/dist/components/combobox/combobox.meta.js +217 -0
- package/dist/components/combobox/index.js +37 -0
- package/dist/components/command-menu/command-menu-trigger.js +122 -0
- package/dist/components/command-menu/command-menu.js +433 -0
- package/dist/components/command-menu/command-menu.meta.js +279 -0
- package/dist/components/command-menu/index.js +21 -0
- package/dist/components/context-card/context-card.js +62 -0
- package/dist/components/context-card/context-card.meta.js +106 -0
- package/dist/components/context-card/index.js +17 -0
- package/dist/components/context-menu/context-menu.js +92 -0
- package/dist/components/context-menu/context-menu.meta.js +138 -0
- package/dist/components/context-menu/index.js +23 -0
- package/dist/components/data-table/data-table.js +142 -0
- package/dist/components/data-table/data-table.meta.js +146 -0
- package/dist/components/data-table/index.js +9 -0
- package/dist/components/date-picker/date-picker.js +196 -0
- package/dist/components/date-picker/date-picker.meta.js +164 -0
- package/dist/components/date-picker/index.js +7 -0
- package/dist/components/date-tile/date-tile.js +29 -0
- package/dist/components/date-tile/date-tile.meta.js +72 -0
- package/dist/components/date-tile/index.js +7 -0
- package/dist/components/destructive-action-modal/destructive-action-modal.js +130 -0
- package/dist/components/destructive-action-modal/destructive-action-modal.meta.js +136 -0
- package/dist/components/destructive-action-modal/index.js +9 -0
- package/dist/components/dialog/dialog.js +207 -0
- package/dist/components/dialog/dialog.meta.js +239 -0
- package/dist/components/dialog/index.js +45 -0
- package/dist/components/disclosure-picker/disclosure-picker.js +417 -0
- package/dist/components/disclosure-picker/disclosure-picker.meta.js +213 -0
- package/dist/components/disclosure-picker/index.js +21 -0
- package/dist/components/empty-state/empty-state.js +52 -0
- package/dist/components/empty-state/empty-state.meta.js +158 -0
- package/dist/components/empty-state/index.js +7 -0
- package/dist/components/entity/entity.js +70 -0
- package/dist/components/entity/entity.meta.js +108 -0
- package/dist/components/entity/entity.variants.js +16 -0
- package/dist/components/entity/index.js +7 -0
- package/dist/components/feedback/feedback.js +93 -0
- package/dist/components/feedback/feedback.meta.js +109 -0
- package/dist/components/feedback/index.js +7 -0
- package/dist/components/fieldset/fieldset.js +80 -0
- package/dist/components/fieldset/fieldset.meta.js +160 -0
- package/dist/components/fieldset/index.js +17 -0
- package/dist/components/file-dropzone/file-dropzone.js +193 -0
- package/dist/components/file-dropzone/file-dropzone.meta.js +210 -0
- package/dist/components/file-dropzone/file-dropzone.variants.js +26 -0
- package/dist/components/file-dropzone/index.js +13 -0
- package/dist/components/font-picker/font-picker.js +77 -0
- package/dist/components/font-picker/font-picker.meta.js +119 -0
- package/dist/components/font-picker/index.js +7 -0
- package/dist/components/form/form.js +145 -0
- package/dist/components/form/form.meta.js +142 -0
- package/dist/components/form/index.js +11 -0
- package/dist/components/gliding-highlight/gliding-highlight.js +50 -0
- package/dist/components/gliding-highlight/gliding-highlight.meta.js +135 -0
- package/dist/components/gliding-highlight/index.js +9 -0
- package/dist/components/gradient-art/gradient-art.js +168 -0
- package/dist/components/gradient-art/gradient-art.meta.js +81 -0
- package/dist/components/gradient-art/index.js +7 -0
- package/dist/components/gradient-art/renderer.js +336 -0
- package/dist/components/inline-status/index.js +7 -0
- package/dist/components/inline-status/inline-status.js +33 -0
- package/dist/components/inline-status/inline-status.meta.js +83 -0
- package/dist/components/inline-status/inline-status.variants.js +18 -0
- package/dist/components/input/index.js +7 -0
- package/dist/components/input/input.js +33 -0
- package/dist/components/input/input.meta.js +155 -0
- package/dist/components/kbd/index.js +8 -0
- package/dist/components/kbd/kbd.js +54 -0
- package/dist/components/kbd/kbd.meta.js +95 -0
- package/dist/components/label/index.js +7 -0
- package/dist/components/label/label.js +51 -0
- package/dist/components/label/label.meta.js +98 -0
- package/dist/components/line-chart/index.js +7 -0
- package/dist/components/line-chart/line-chart.js +10 -0
- package/dist/components/line-chart/line-chart.meta.js +222 -0
- package/dist/components/marker/index.js +7 -0
- package/dist/components/marker/marker.js +39 -0
- package/dist/components/marker/marker.meta.js +132 -0
- package/dist/components/marker/marker.variants.js +25 -0
- package/dist/components/marquee/index.js +7 -0
- package/dist/components/marquee/marquee.js +146 -0
- package/dist/components/marquee/marquee.meta.js +106 -0
- package/dist/components/media-image/index.js +7 -0
- package/dist/components/media-image/media-image.js +56 -0
- package/dist/components/media-image/media-image.meta.js +92 -0
- package/dist/components/media-tile/index.js +7 -0
- package/dist/components/media-tile/media-tile.js +135 -0
- package/dist/components/media-tile/media-tile.meta.js +133 -0
- package/dist/components/media-tile/media-tile.variants.js +48 -0
- package/dist/components/menu/index.js +33 -0
- package/dist/components/menu/menu.js +168 -0
- package/dist/components/menu/menu.meta.js +176 -0
- package/dist/components/message/index.js +7 -0
- package/dist/components/message/message.js +83 -0
- package/dist/components/message/message.meta.js +150 -0
- package/dist/components/message/message.variants.js +41 -0
- package/dist/components/message-scroller/index.js +9 -0
- package/dist/components/message-scroller/message-scroller.js +300 -0
- package/dist/components/message-scroller/message-scroller.meta.js +172 -0
- package/dist/components/meter/index.js +20 -0
- package/dist/components/meter/meter.js +112 -0
- package/dist/components/meter/meter.meta.js +227 -0
- package/dist/components/meter/meter.variants.js +61 -0
- package/dist/components/middle-truncate/index.js +7 -0
- package/dist/components/middle-truncate/middle-truncate.js +28 -0
- package/dist/components/middle-truncate/middle-truncate.meta.js +77 -0
- package/dist/components/note/index.js +9 -0
- package/dist/components/note/note.js +73 -0
- package/dist/components/note/note.meta.js +112 -0
- package/dist/components/note/note.variants.js +22 -0
- package/dist/components/notification-badge/index.js +15 -0
- package/dist/components/notification-badge/notification-badge.js +48 -0
- package/dist/components/notification-badge/notification-badge.meta.js +107 -0
- package/dist/components/notification-badge/notification-badge.variants.js +57 -0
- package/dist/components/number-field/index.js +7 -0
- package/dist/components/number-field/number-field.js +70 -0
- package/dist/components/number-field/number-field.meta.js +109 -0
- package/dist/components/otp-field/index.js +7 -0
- package/dist/components/otp-field/otp-field.js +70 -0
- package/dist/components/otp-field/otp-field.meta.js +197 -0
- package/dist/components/overflow-menu/index.js +7 -0
- package/dist/components/overflow-menu/overflow-menu.js +26 -0
- package/dist/components/overflow-menu/overflow-menu.meta.js +100 -0
- package/dist/components/page-header/index.js +7 -0
- package/dist/components/page-header/page-header.js +34 -0
- package/dist/components/page-header/page-header.meta.js +104 -0
- package/dist/components/page-loader/index.js +7 -0
- package/dist/components/page-loader/page-loader.js +37 -0
- package/dist/components/page-loader/page-loader.meta.js +85 -0
- package/dist/components/pagination/index.js +7 -0
- package/dist/components/pagination/pagination.js +105 -0
- package/dist/components/pagination/pagination.meta.js +141 -0
- package/dist/components/panel-group/index.js +10 -0
- package/dist/components/panel-group/panel-group.js +168 -0
- package/dist/components/panel-group/panel-group.meta.js +153 -0
- package/dist/components/panel-section/index.js +9 -0
- package/dist/components/panel-section/panel-section.js +115 -0
- package/dist/components/panel-section/panel-section.meta.js +156 -0
- package/dist/components/phone/index.js +7 -0
- package/dist/components/phone/phone.js +50 -0
- package/dist/{chunk-KFZ43RKU.js → components/phone/phone.meta.js} +3 -50
- package/dist/{chunk-NEQNXI2G.js → components/phone/status-icons.js} +4 -4
- package/dist/components/pie-chart/index.js +7 -0
- package/dist/components/pie-chart/pie-chart.js +191 -0
- package/dist/components/pie-chart/pie-chart.meta.js +210 -0
- package/dist/components/pill/index.js +9 -0
- package/dist/components/pill/pill.js +24 -0
- package/dist/components/pill/pill.meta.js +108 -0
- package/dist/components/pill/pill.variants.js +65 -0
- package/dist/components/popover/index.js +23 -0
- package/dist/components/popover/popover.js +100 -0
- package/dist/components/popover/popover.meta.js +136 -0
- package/dist/components/progress/index.js +19 -0
- package/dist/components/progress/progress.js +70 -0
- package/dist/components/progress/progress.meta.js +171 -0
- package/dist/components/progress/progress.variants.js +17 -0
- package/dist/components/radar-chart/index.js +7 -0
- package/dist/components/radar-chart/radar-chart.js +161 -0
- package/dist/components/radar-chart/radar-chart.meta.js +204 -0
- package/dist/components/radial-chart/index.js +7 -0
- package/dist/components/radial-chart/radial-chart.js +175 -0
- package/dist/components/radial-chart/radial-chart.meta.js +216 -0
- package/dist/components/radio/index.js +8 -0
- package/dist/components/radio/radio.js +39 -0
- package/dist/components/radio/radio.meta.js +104 -0
- package/dist/components/radio-card/index.js +7 -0
- package/dist/components/radio-card/radio-card.js +81 -0
- package/dist/components/radio-card/radio-card.meta.js +144 -0
- package/dist/components/radio-card/radio-card.variants.js +43 -0
- package/dist/components/relative-time/index.js +7 -0
- package/dist/components/relative-time/relative-time.js +47 -0
- package/dist/components/relative-time/relative-time.meta.js +77 -0
- package/dist/components/scroller/index.js +7 -0
- package/dist/components/scroller/scroller.js +111 -0
- package/dist/components/scroller/scroller.meta.js +118 -0
- package/dist/components/scrub-field/index.js +7 -0
- package/dist/components/scrub-field/scrub-field.js +124 -0
- package/dist/components/scrub-field/scrub-field.meta.js +139 -0
- package/dist/components/search-input/index.js +7 -0
- package/dist/components/search-input/search-input.js +91 -0
- package/dist/components/search-input/search-input.meta.js +129 -0
- package/dist/components/section-header/index.js +7 -0
- package/dist/components/section-header/section-header.js +39 -0
- package/dist/components/section-header/section-header.meta.js +174 -0
- package/dist/components/segmented-bar/index.js +14 -0
- package/dist/components/segmented-bar/segmented-bar.js +26 -0
- package/dist/components/segmented-bar/segmented-bar.meta.js +108 -0
- package/dist/components/segmented-bar/segmented-bar.variants.js +39 -0
- package/dist/components/select/index.js +25 -0
- package/dist/components/select/select.js +191 -0
- package/dist/components/select/select.meta.js +189 -0
- package/dist/components/separator/index.js +7 -0
- package/dist/components/separator/separator.js +42 -0
- package/dist/components/separator/separator.meta.js +84 -0
- package/dist/components/settings-menu/index.js +11 -0
- package/dist/components/settings-menu/settings-menu.js +101 -0
- package/dist/components/settings-menu/settings-menu.meta.js +177 -0
- package/dist/components/settings-menu/settings-menu.variants.js +15 -0
- package/dist/components/sheet/index.js +29 -0
- package/dist/components/sheet/sheet.js +121 -0
- package/dist/components/sheet/sheet.meta.js +167 -0
- package/dist/components/sheet/sheet.variants.js +21 -0
- package/dist/components/show-more/index.js +7 -0
- package/dist/components/show-more/show-more.js +87 -0
- package/dist/components/show-more/show-more.meta.js +79 -0
- package/dist/components/side-nav/index.js +13 -0
- package/dist/components/side-nav/side-nav.js +75 -0
- package/dist/components/side-nav/side-nav.meta.js +139 -0
- package/dist/components/side-nav/side-nav.variants.js +34 -0
- package/dist/components/sidebar/index.js +21 -0
- package/dist/components/sidebar/sidebar.js +196 -0
- package/dist/components/sidebar/sidebar.meta.js +118 -0
- package/dist/components/skeleton/index.js +7 -0
- package/dist/components/skeleton/skeleton.js +16 -0
- package/dist/components/skeleton/skeleton.meta.js +90 -0
- package/dist/components/slider/index.js +21 -0
- package/dist/components/slider/slider.js +115 -0
- package/dist/components/slider/slider.meta.js +214 -0
- package/dist/components/sparkline/index.js +7 -0
- package/dist/components/sparkline/sparkline.js +84 -0
- package/dist/components/sparkline/sparkline.meta.js +147 -0
- package/dist/components/spinner/index.js +7 -0
- package/dist/components/spinner/spinner.js +59 -0
- package/dist/components/spinner/spinner.meta.js +118 -0
- package/dist/components/status-bar/index.js +9 -0
- package/dist/components/status-bar/status-bar.js +40 -0
- package/dist/components/status-bar/status-bar.meta.js +117 -0
- package/dist/components/status-dot/index.js +9 -0
- package/dist/components/status-dot/status-dot.js +40 -0
- package/dist/components/status-dot/status-dot.meta.js +113 -0
- package/dist/components/status-dot/status-dot.variants.js +28 -0
- package/dist/components/stepper/index.js +17 -0
- package/dist/components/stepper/stepper.js +161 -0
- package/dist/components/stepper/stepper.meta.js +190 -0
- package/dist/components/stepper/stepper.variants.js +72 -0
- package/dist/components/streaming-text/index.js +7 -0
- package/dist/components/streaming-text/streaming-text.js +55 -0
- package/dist/components/streaming-text/streaming-text.meta.js +147 -0
- package/dist/components/switch/index.js +7 -0
- package/dist/components/switch/switch.js +26 -0
- package/dist/components/switch/switch.meta.js +133 -0
- package/dist/components/table/index.js +23 -0
- package/dist/components/table/table.js +117 -0
- package/dist/components/table/table.meta.js +143 -0
- package/dist/components/tabs/index.js +17 -0
- package/dist/components/tabs/tabs.js +58 -0
- package/dist/components/tabs/tabs.meta.js +120 -0
- package/dist/components/textarea/index.js +7 -0
- package/dist/components/textarea/textarea.js +38 -0
- package/dist/components/textarea/textarea.meta.js +117 -0
- package/dist/components/theme-selector/index.js +11 -0
- package/dist/components/theme-selector/theme-selector.js +145 -0
- package/dist/components/theme-selector/theme-selector.meta.js +181 -0
- package/dist/components/theme-switcher/index.js +7 -0
- package/dist/components/theme-switcher/theme-switcher.js +106 -0
- package/dist/components/theme-switcher/theme-switcher.meta.js +99 -0
- package/dist/components/thinking-orb/index.js +9 -0
- package/dist/components/thinking-orb/thinking-orb.js +126 -0
- package/dist/components/thinking-orb/thinking-orb.meta.js +142 -0
- package/dist/components/thinking-orb/thinking-orb.render.js +252 -0
- package/dist/components/toast/index.js +29 -0
- package/dist/components/toast/toast.js +254 -0
- package/dist/components/toast/toast.meta.js +261 -0
- package/dist/components/toggle/index.js +13 -0
- package/dist/components/toggle/toggle.js +51 -0
- package/dist/components/toggle/toggle.meta.js +129 -0
- package/dist/components/toolbar/index.js +27 -0
- package/dist/components/toolbar/toolbar.js +80 -0
- package/dist/components/toolbar/toolbar.meta.js +272 -0
- package/dist/components/toolbar/toolbar.variants.js +16 -0
- package/dist/components/tooltip/index.js +21 -0
- package/dist/components/tooltip/tooltip.js +74 -0
- package/dist/components/tooltip/tooltip.meta.js +156 -0
- package/dist/components/tree/index.js +12 -0
- package/dist/components/tree/tree.js +364 -0
- package/dist/components/tree/tree.meta.js +334 -0
- package/dist/components/video/index.js +7 -0
- package/dist/components/video/video.js +59 -0
- package/dist/components/video/video.meta.js +81 -0
- package/dist/components/workspace/index.js +9 -0
- package/dist/components/workspace/workspace.js +79 -0
- package/dist/components/workspace/workspace.meta.js +183 -0
- package/dist/foundations/accessibility.js +107 -0
- package/dist/foundations/index.js +25 -792
- package/dist/foundations/motion.js +135 -0
- package/dist/foundations/scrolling.js +62 -0
- package/dist/foundations/shape.js +113 -0
- package/dist/foundations/spacing.js +121 -0
- package/dist/foundations/surfaces.js +107 -0
- package/dist/foundations/types.js +0 -0
- package/dist/foundations/typography.js +152 -0
- package/dist/icon/Icon.js +30 -0
- package/dist/icon/IconProvider.js +27 -0
- package/dist/icon/compose.js +13 -0
- package/dist/icon/index.d.ts +13 -5
- package/dist/icon/index.js +13 -2
- package/dist/icon/registry.js +0 -0
- package/dist/icon-sets/brands.generated.js +123 -0
- package/dist/icon-sets/brands.js +10 -123
- package/dist/icon-sets/reicon.d.ts +3 -1
- package/dist/icon-sets/reicon.js +209 -1
- package/dist/index.d.ts +618 -34
- package/dist/index.js +211 -11351
- package/dist/ios/chrome.js +36 -0
- package/dist/ios/index.js +19 -315
- package/dist/ios/liquid-glass.js +103 -0
- package/dist/ios/native-app.js +46 -0
- package/dist/ios/navigation.js +63 -0
- package/dist/ios/phone-frame.js +64 -0
- package/dist/ios/preview-theme.js +83 -0
- package/dist/ios/preview.js +10 -137
- package/dist/ios/sheet.js +85 -0
- package/dist/ios/theme.js +19 -0
- package/dist/layout/AspectBox.js +27 -0
- package/dist/layout/Bleed.js +15 -0
- package/dist/layout/Center.js +21 -0
- package/dist/layout/Columns.js +70 -0
- package/dist/layout/Grid.js +50 -0
- package/dist/layout/GridOverlay.js +41 -0
- package/dist/layout/Page.js +11 -0
- package/dist/layout/Region.js +39 -0
- package/dist/layout/Row.js +45 -0
- package/dist/layout/SafeArea.js +26 -0
- package/dist/layout/Spacer.js +9 -0
- package/dist/layout/SplitPane.js +55 -0
- package/dist/layout/Stack.js +42 -0
- package/dist/layout/_responsive.js +16 -0
- package/dist/layout/_safeArea.js +18 -0
- package/dist/layout/index.d.ts +30 -8
- package/dist/layout/index.js +14 -2
- package/dist/lib/anchored-scroll.js +7 -0
- package/dist/lib/bleed.js +7 -0
- package/dist/lib/chart/cartesian.js +365 -0
- package/dist/lib/chart/chart-frame.js +163 -0
- package/dist/lib/chart/chart-legend.js +13 -0
- package/dist/lib/chart/chart-tooltip.js +38 -0
- package/dist/lib/chart/format.js +24 -0
- package/dist/lib/chart/geometry.js +114 -0
- package/dist/lib/chart/motion.js +34 -0
- package/dist/lib/chart/scale.js +72 -0
- package/dist/lib/chart/types.js +45 -0
- package/dist/lib/chart/use-arrival.js +41 -0
- package/dist/{chunk-SRQWQUTW.js → lib/cn.js} +5 -5
- package/dist/lib/component-guidance.js +215 -0
- package/dist/lib/density.js +54 -0
- package/dist/lib/field-shell.js +11 -0
- package/dist/lib/glyphs.js +9 -0
- package/dist/lib/heading-row.js +36 -0
- package/dist/lib/highlight-glide.js +84 -0
- package/dist/lib/hit-target.js +5 -0
- package/dist/lib/meta.js +0 -0
- package/dist/lib/portal-theme-scope.js +74 -0
- package/dist/{chunk-FKZXAFIY.js → lib/presentation.js} +8 -3
- package/dist/lib/refs.js +14 -0
- package/dist/lib/scrub-gesture.js +50 -0
- package/dist/lib/segmented.js +13 -0
- package/dist/lib/selection-card.js +41 -0
- package/dist/lib/status-tone.js +13 -0
- package/dist/lib/taxonomy.js +214 -0
- package/dist/lib/trim-label.js +20 -0
- package/dist/lib/use-copy.js +27 -0
- package/dist/lib/use-edge-fade.js +32 -0
- package/dist/lib/use-isomorphic-layout-effect.js +8 -0
- package/dist/lib/use-resize-observer.js +18 -0
- package/dist/lib/use-scroll-activity.js +52 -0
- package/dist/lib/use-wheel-to-horizontal.js +65 -0
- package/dist/motion/MotionProvider.js +75 -0
- package/dist/motion/Presence.js +112 -0
- package/dist/motion/Reveal.js +42 -0
- package/dist/motion/TextReveal.js +61 -0
- package/dist/motion/index.js +24 -0
- package/dist/motion/useInView.js +36 -0
- package/dist/motion/useReducedMotion.js +25 -0
- package/dist/motion/viewTransition.js +47 -0
- package/dist/patterns/auth-page.js +90 -0
- package/dist/patterns/auth-page.meta.js +27 -0
- package/dist/patterns/brand-landing-page.js +341 -0
- package/dist/patterns/brand-landing-page.meta.js +28 -0
- package/dist/patterns/chat-panel.js +185 -0
- package/dist/patterns/chat-panel.meta.js +31 -0
- package/dist/patterns/dashboard-page.js +332 -0
- package/dist/patterns/dashboard-page.meta.js +29 -0
- package/dist/patterns/feed-page.js +205 -0
- package/dist/patterns/feed-page.meta.js +25 -0
- package/dist/patterns/index.js +34 -2140
- package/dist/patterns/landing-page.js +356 -0
- package/dist/patterns/landing-page.meta.js +26 -0
- package/dist/patterns/list-detail-page.js +373 -0
- package/dist/patterns/list-detail-page.meta.js +24 -0
- package/dist/patterns/settings-page.js +268 -0
- package/dist/patterns/settings-page.meta.js +27 -0
- package/dist/presets/index.d.ts +7 -1
- package/dist/presets/index.js +53 -185
- package/dist/styles.css +118 -3
- package/dist/{theme-provider-kQszHYji.d.ts → theme-provider-S0NVJs2Y.d.ts} +6 -1
- package/dist/{chunk-NETUFI34.js → themes/_contract.js} +14 -2
- package/dist/themes/atelier/index.js +17 -1
- package/dist/themes/contrast.js +288 -0
- package/dist/themes/ember/ember.css +6 -6
- package/dist/themes/ember/index.js +16 -1
- package/dist/themes/index.d.ts +1 -1
- package/dist/themes/index.js +3 -8
- package/dist/themes/meridian/index.js +16 -1
- package/dist/themes/poppy/index.js +17 -1
- package/dist/themes/prism/index.js +17 -1
- package/dist/themes/prism/prism.css +2 -2
- package/dist/themes/registry.js +59 -0
- package/dist/themes/sable/index.js +16 -1
- package/dist/{chunk-EFLC4NA3.js → themes/theme-provider.js} +38 -54
- package/dist/themes/verdant/index.js +17 -1
- package/llms/blocks/media-player-block.md +20 -7
- package/llms/blocks/product-card-block.md +6 -4
- package/llms/blocks/task-list-block.md +1 -1
- package/llms/blocks/traffic-sources-block.md +1 -1
- package/llms/blocks/traffic-trend-block.md +5 -3
- package/llms/blocks/verify-code-block.md +1 -1
- package/llms/components/app-shell.md +5 -2
- package/llms/components/avatar.md +25 -3
- package/llms/components/button.md +20 -1
- package/llms/components/card.md +1 -1
- package/llms/components/disclosure-picker.md +168 -0
- package/llms/components/font-picker.md +104 -0
- package/llms/components/media-image.md +98 -0
- package/llms/components/media-tile.md +143 -0
- package/llms/components/page-header.md +6 -5
- package/llms/components/pie-chart.md +2 -2
- package/llms/components/radial-chart.md +1 -1
- package/llms/components/section-header.md +144 -0
- package/llms/components/sheet.md +10 -0
- package/llms/components/sidebar.md +4 -3
- package/llms/components/slider.md +14 -2
- package/llms/components/theme-selector.md +44 -4
- package/llms/components/tree.md +3 -3
- package/llms/layout/grid.md +24 -3
- package/llms/layout/region.md +16 -3
- package/llms/patterns/dashboard-page.md +3 -6
- package/llms/patterns/feed-page.md +4 -4
- package/llms/patterns/list-detail-page.md +1 -0
- package/llms/patterns/settings-page.md +2 -5
- package/llms/reference/utilities.md +84 -4
- package/llms/tasks/building-a-page.md +34 -3
- package/llms/tasks/converting-an-app.md +14 -4
- package/llms/tasks/creating-a-preset.md +4 -1
- package/llms/tasks/reviewing-a-design.md +19 -0
- package/llms/tasks/using-presets.md +19 -0
- package/llms-full.txt +1066 -78
- package/llms.txt +26 -9
- package/package.json +1 -1
- package/registry.json +2342 -164
- package/scripts/agent-setup.mjs +90 -0
- package/scripts/design-presets.mjs +59 -6
- package/scripts/grade.mjs +195 -29
- package/scripts/lint-rules.mjs +486 -10
- package/scripts/review-evidence.mjs +28 -1
- package/skills/sable/SKILL.md +67 -24
- package/targets/ios.json +45 -0
- package/dist/chunk-3IWZYBGH.js +0 -398
- package/dist/chunk-7MG4SHYX.js +0 -15
- package/dist/chunk-7QSDYBXO.js +0 -7421
- package/dist/chunk-ADLLDWLW.js +0 -15
- package/dist/chunk-C4Z3CF54.js +0 -15
- package/dist/chunk-EDXLM7YL.js +0 -5078
- package/dist/chunk-EHH4MHO6.js +0 -14
- package/dist/chunk-K7RUHUGC.js +0 -14
- package/dist/chunk-KO3NAEBF.js +0 -15
- package/dist/chunk-L4IEIQQA.js +0 -14
- package/dist/chunk-QJ6FWTUG.js +0 -40
- package/dist/chunk-VVW4UCDI.js +0 -4908
- package/dist/chunk-XAZGMY73.js +0 -187
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// src/components/pill/pill.variants.ts
|
|
2
|
+
import { cva } from "class-variance-authority";
|
|
3
|
+
var pillVariants = cva(
|
|
4
|
+
/*
|
|
5
|
+
* The asymmetric `pt-[0.23em] pb-[0.1em]` is the LEGACY optical correction: a
|
|
6
|
+
* hand-tuned em nudge compensating for the fact that centring a line box does
|
|
7
|
+
* not centre the glyphs. It stays as the fallback, and `sable-label-trim`
|
|
8
|
+
* (applied to the label in pill.tsx) supersedes it wherever `text-box-trim`
|
|
9
|
+
* exists — `styles.css` neutralises this padding back to symmetric inside the
|
|
10
|
+
* same `@supports` block that turns the trim on.
|
|
11
|
+
*
|
|
12
|
+
* Why not simply delete it: a hardcoded nudge is wrong per font, but deleting
|
|
13
|
+
* it outright would regress every browser without `text-box` to an uncorrected
|
|
14
|
+
* label. Progressive enhancement keeps the tuned value where it is still the
|
|
15
|
+
* only thing available and drops it where the metric-derived fix applies.
|
|
16
|
+
*
|
|
17
|
+
* `whitespace-nowrap`: a chip's label is one line; in a scrolling or
|
|
18
|
+
* wrapping strip it must not break inside itself.
|
|
19
|
+
*/
|
|
20
|
+
"sable-optical-pad inline-flex w-fit items-center gap-1 whitespace-nowrap rounded-full px-2 pt-[0.23em] pb-[0.1em] text-label-md cursor-pointer motion-interactive motion-press focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&_svg]:shrink-0",
|
|
21
|
+
{
|
|
22
|
+
variants: {
|
|
23
|
+
appearance: {
|
|
24
|
+
solid: "",
|
|
25
|
+
outline: "border"
|
|
26
|
+
},
|
|
27
|
+
size: {
|
|
28
|
+
md: "h-(--control-xs) px-3 py-0 [--sable-optical-pad:0px]",
|
|
29
|
+
sm: "h-6 py-0 text-label-sm [--sable-optical-pad:0px]"
|
|
30
|
+
},
|
|
31
|
+
selected: {
|
|
32
|
+
true: "",
|
|
33
|
+
false: ""
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
compoundVariants: [
|
|
37
|
+
{ appearance: "solid", selected: true, class: "bg-primary text-primary-foreground hover:bg-primary" },
|
|
38
|
+
{
|
|
39
|
+
appearance: "solid",
|
|
40
|
+
selected: false,
|
|
41
|
+
class: "bg-secondary text-secondary-foreground hover:bg-accent hover:text-accent-foreground"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
appearance: "outline",
|
|
45
|
+
selected: true,
|
|
46
|
+
class: "border-primary/40 bg-primary/10 text-foreground hover:bg-primary/15"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
appearance: "outline",
|
|
50
|
+
selected: false,
|
|
51
|
+
// Transparent on whatever it sits on; the hover is derived from that
|
|
52
|
+
// surface (sable-surface-interactive), not a fixed accent fill.
|
|
53
|
+
class: "border-border text-muted-foreground sable-surface-interactive"
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
defaultVariants: {
|
|
57
|
+
appearance: "solid",
|
|
58
|
+
size: "md",
|
|
59
|
+
selected: false
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
export {
|
|
64
|
+
pillVariants
|
|
65
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/components/popover/index.ts
|
|
2
|
+
import {
|
|
3
|
+
Popover,
|
|
4
|
+
PopoverTrigger,
|
|
5
|
+
PopoverPortal,
|
|
6
|
+
PopoverClose,
|
|
7
|
+
PopoverContent,
|
|
8
|
+
PopoverTitle,
|
|
9
|
+
PopoverDescription,
|
|
10
|
+
PopoverArrow
|
|
11
|
+
} from "./popover.js";
|
|
12
|
+
import { popoverMeta } from "./popover.meta.js";
|
|
13
|
+
export {
|
|
14
|
+
Popover,
|
|
15
|
+
PopoverArrow,
|
|
16
|
+
PopoverClose,
|
|
17
|
+
PopoverContent,
|
|
18
|
+
PopoverDescription,
|
|
19
|
+
PopoverPortal,
|
|
20
|
+
PopoverTitle,
|
|
21
|
+
PopoverTrigger,
|
|
22
|
+
popoverMeta
|
|
23
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// src/components/popover/popover.tsx
|
|
2
|
+
import { Popover as Base } from "@base-ui/react/popover";
|
|
3
|
+
import { anchoredScroll } from "../../lib/anchored-scroll.js";
|
|
4
|
+
import { cn } from "../../lib/cn.js";
|
|
5
|
+
import { withPortalThemeScope } from "../../lib/portal-theme-scope.js";
|
|
6
|
+
import { PresentationProvider } from "../../lib/presentation.js";
|
|
7
|
+
import { useAnchoredDensity } from "../../lib/density.js";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
var Popover = Base.Root;
|
|
10
|
+
var PopoverTrigger = Base.Trigger;
|
|
11
|
+
var PopoverPortal = withPortalThemeScope(Base.Portal);
|
|
12
|
+
var PopoverClose = Base.Close;
|
|
13
|
+
function PopoverContent({
|
|
14
|
+
className,
|
|
15
|
+
children,
|
|
16
|
+
side = "bottom",
|
|
17
|
+
align = "center",
|
|
18
|
+
sideOffset = 8,
|
|
19
|
+
anchor,
|
|
20
|
+
...props
|
|
21
|
+
}) {
|
|
22
|
+
const anchoredDensity = useAnchoredDensity();
|
|
23
|
+
return /* @__PURE__ */ jsx(PopoverPortal, { children: /* @__PURE__ */ jsx(
|
|
24
|
+
Base.Positioner,
|
|
25
|
+
{
|
|
26
|
+
side,
|
|
27
|
+
align,
|
|
28
|
+
sideOffset,
|
|
29
|
+
anchor,
|
|
30
|
+
className: "z-(--z-overlay)",
|
|
31
|
+
children: /* @__PURE__ */ jsx(
|
|
32
|
+
Base.Popup,
|
|
33
|
+
{
|
|
34
|
+
...anchoredDensity,
|
|
35
|
+
className: cn(
|
|
36
|
+
"w-72 rounded-md border border-border-floating bg-popover sable-surface-popover p-4 text-popover-foreground shadow-md outline-none",
|
|
37
|
+
// A popover holds arbitrary content, so it is the surface most likely
|
|
38
|
+
// to outgrow the room under its trigger. See lib/anchored-scroll.
|
|
39
|
+
// PopoverArrow is unaffected: its containing block is the positioner
|
|
40
|
+
// (an ancestor of the popup), so it escapes the popup's overflow clip.
|
|
41
|
+
anchoredScroll,
|
|
42
|
+
"motion-pop",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
...props,
|
|
46
|
+
children: /* @__PURE__ */ jsx(PresentationProvider, { value: "page", children })
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
) });
|
|
51
|
+
}
|
|
52
|
+
function PopoverTitle({ className, ...props }) {
|
|
53
|
+
return /* @__PURE__ */ jsx(
|
|
54
|
+
Base.Title,
|
|
55
|
+
{
|
|
56
|
+
className: cn("mb-1 text-title-sm text-popover-foreground", className),
|
|
57
|
+
...props
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
function PopoverDescription({ className, ...props }) {
|
|
62
|
+
return /* @__PURE__ */ jsx(
|
|
63
|
+
Base.Description,
|
|
64
|
+
{
|
|
65
|
+
className: cn("text-body-sm text-muted-foreground", className),
|
|
66
|
+
...props
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
function PopoverArrow({ className, ...props }) {
|
|
71
|
+
return /* @__PURE__ */ jsx(
|
|
72
|
+
Base.Arrow,
|
|
73
|
+
{
|
|
74
|
+
className: cn(
|
|
75
|
+
// Offsets on the spacing scale, like the size-2.5 square they place, so
|
|
76
|
+
// the point stays seated on the popup's edge at every density.
|
|
77
|
+
"group/arrow data-[side=bottom]:-top-1.5 data-[side=left]:-right-1.5 data-[side=right]:-left-1.5 data-[side=top]:-bottom-1.5",
|
|
78
|
+
className
|
|
79
|
+
),
|
|
80
|
+
...props,
|
|
81
|
+
children: /* @__PURE__ */ jsx(
|
|
82
|
+
"span",
|
|
83
|
+
{
|
|
84
|
+
"aria-hidden": true,
|
|
85
|
+
className: "block size-2.5 rotate-45 border-border-floating bg-popover group-data-[side=top]/arrow:border-b group-data-[side=top]/arrow:border-r group-data-[side=bottom]/arrow:border-t group-data-[side=bottom]/arrow:border-l group-data-[side=left]/arrow:border-t group-data-[side=left]/arrow:border-r group-data-[side=right]/arrow:border-b group-data-[side=right]/arrow:border-l"
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
export {
|
|
92
|
+
Popover,
|
|
93
|
+
PopoverArrow,
|
|
94
|
+
PopoverClose,
|
|
95
|
+
PopoverContent,
|
|
96
|
+
PopoverDescription,
|
|
97
|
+
PopoverPortal,
|
|
98
|
+
PopoverTitle,
|
|
99
|
+
PopoverTrigger
|
|
100
|
+
};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// src/components/popover/popover.meta.ts
|
|
2
|
+
var popoverMeta = {
|
|
3
|
+
name: "Popover",
|
|
4
|
+
summary: "Click-triggered overlay over Base UI Popover (focus management, collision-aware positioning, Esc/outside dismissal). Holds interactive content; 18rem-wide surface.",
|
|
5
|
+
status: "stable",
|
|
6
|
+
keywords: [
|
|
7
|
+
"popover",
|
|
8
|
+
"floating panel",
|
|
9
|
+
"anchored",
|
|
10
|
+
"disclosure"
|
|
11
|
+
],
|
|
12
|
+
usage: {
|
|
13
|
+
description: "Use Popover for anchored secondary content that needs more room than a tooltip but less commitment than a dialog.",
|
|
14
|
+
bestPractices: [
|
|
15
|
+
{
|
|
16
|
+
guidance: "do",
|
|
17
|
+
description: "Use it for small pickers, summaries, or contextual controls tied to a trigger."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
guidance: "do",
|
|
21
|
+
description: "Keep focus behavior and dismissal predictable."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
guidance: "dont",
|
|
25
|
+
description: "Do not use Popover for blocking confirmations, long forms, or critical information."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
guidance: "dont",
|
|
29
|
+
description: "Do not put a form that can fail validation inside one. A popover dismisses on outside click, which discards what the user typed with no warning \u2014 that is a Dialog."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
anatomy: [
|
|
33
|
+
{
|
|
34
|
+
name: "PopoverTrigger",
|
|
35
|
+
required: true,
|
|
36
|
+
description: "The element that anchors and opens the popover."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "PopoverContent",
|
|
40
|
+
required: true,
|
|
41
|
+
description: "The floating content surface."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "PopoverTitle",
|
|
45
|
+
required: false,
|
|
46
|
+
description: "An optional heading for the content."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "PopoverDescription",
|
|
50
|
+
required: false,
|
|
51
|
+
description: "Optional supporting copy."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "PopoverClose",
|
|
55
|
+
required: false,
|
|
56
|
+
description: "An explicit close control when helpful."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "PopoverArrow",
|
|
60
|
+
required: false,
|
|
61
|
+
description: "An optional arrow pointing to the trigger."
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
related: {
|
|
66
|
+
components: [
|
|
67
|
+
"Tooltip",
|
|
68
|
+
"ContextCard",
|
|
69
|
+
"Dialog"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
props: [
|
|
73
|
+
{
|
|
74
|
+
name: "Popover (Root)",
|
|
75
|
+
type: "Base UI Popover.Root props (open, defaultOpen, onOpenChange, modal)",
|
|
76
|
+
description: "Groups the trigger and content. Uncontrolled by default."
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
subcomponents: [
|
|
80
|
+
{
|
|
81
|
+
name: "PopoverTrigger",
|
|
82
|
+
type: "Base UI Trigger props + render",
|
|
83
|
+
description: "The anchor element. Use render={<Button/>} to compose with another component."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "PopoverContent",
|
|
87
|
+
type: 'Base UI Popup props + side: "top" | "bottom" | "left" | "right" | "inline-*" + align: "start" | "center" | "end" + sideOffset: number + anchor: Element | Ref | (() => Element) | VirtualElement + className',
|
|
88
|
+
description: 'Portals + positions + paints the popup. side picks which side of the trigger to render against (auto-flips on collision; defaults to "bottom"); align sets alignment along that side (defaults to "center"); sideOffset is the gap in px (defaults to 8). anchor positions against a different element/ref/getter than the trigger \u2014 Base UI 1.5 has no separate Anchor part, so pass it here to decouple the open-location from the trigger.'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: "PopoverTitle",
|
|
92
|
+
type: "Base UI Title props + className",
|
|
93
|
+
description: "Accessible heading; Base UI wires aria-labelledby to the popup."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "PopoverDescription",
|
|
97
|
+
type: "Base UI Description props + className",
|
|
98
|
+
description: "Supplementary copy; Base UI wires aria-describedby to the popup."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: "PopoverClose",
|
|
102
|
+
type: "Base UI Close props + render",
|
|
103
|
+
description: "A button that closes the popover. Use render={<Button/>} to compose."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: "PopoverArrow",
|
|
107
|
+
type: "Base UI Arrow props + className",
|
|
108
|
+
description: "Optional pointer connecting the popup to its trigger. Place inside PopoverContent."
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
tokensUsed: [
|
|
112
|
+
"popover",
|
|
113
|
+
"popover-foreground",
|
|
114
|
+
"border-floating",
|
|
115
|
+
"muted-foreground"
|
|
116
|
+
],
|
|
117
|
+
a11y: [
|
|
118
|
+
"Base UI manages focus into and out of the popup, traps focus when modal, and restores focus to the trigger on close.",
|
|
119
|
+
"Opens on trigger press (click/Enter/Space); dismisses on Esc and outside press.",
|
|
120
|
+
"PopoverTitle/PopoverDescription wire aria-labelledby/aria-describedby on the popup.",
|
|
121
|
+
"Enters and exits on the motion-pop recipe (Base UI starting/ending-style attributes), so it follows the motion policy."
|
|
122
|
+
],
|
|
123
|
+
examples: [
|
|
124
|
+
{
|
|
125
|
+
label: "Basic",
|
|
126
|
+
code: '<Popover><PopoverTrigger render={<Button variant="secondary">Details</Button>} /><PopoverContent><PopoverTitle>Edition details</PopoverTitle><PopoverDescription>A limited run of 100, stored permanently on Arweave.</PopoverDescription></PopoverContent></Popover>'
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
label: "With close",
|
|
130
|
+
code: '<Popover><PopoverTrigger render={<Button variant="secondary">Open</Button>} /><PopoverContent><PopoverTitle>Heads up</PopoverTitle><PopoverDescription>Collecting mints a compressed NFT to your wallet.</PopoverDescription><PopoverClose render={<Button size="sm">Got it</Button>} /></PopoverContent></Popover>'
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
};
|
|
134
|
+
export {
|
|
135
|
+
popoverMeta
|
|
136
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/components/progress/index.ts
|
|
2
|
+
import {
|
|
3
|
+
Progress,
|
|
4
|
+
ProgressTrack,
|
|
5
|
+
ProgressIndicator,
|
|
6
|
+
ProgressLabel,
|
|
7
|
+
ProgressValue
|
|
8
|
+
} from "./progress.js";
|
|
9
|
+
import { progressTrackVariants } from "./progress.variants.js";
|
|
10
|
+
import { progressMeta } from "./progress.meta.js";
|
|
11
|
+
export {
|
|
12
|
+
Progress,
|
|
13
|
+
ProgressIndicator,
|
|
14
|
+
ProgressLabel,
|
|
15
|
+
ProgressTrack,
|
|
16
|
+
ProgressValue,
|
|
17
|
+
progressMeta,
|
|
18
|
+
progressTrackVariants
|
|
19
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// src/components/progress/progress.tsx
|
|
2
|
+
import { Progress as Base } from "@base-ui/react/progress";
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
import { cn } from "../../lib/cn.js";
|
|
5
|
+
import { progressTrackVariants } from "./progress.variants.js";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
var SizeContext = createContext(void 0);
|
|
8
|
+
function Progress({
|
|
9
|
+
className,
|
|
10
|
+
children,
|
|
11
|
+
value = null,
|
|
12
|
+
size,
|
|
13
|
+
...props
|
|
14
|
+
}) {
|
|
15
|
+
return /* @__PURE__ */ jsx(SizeContext.Provider, { value: size, children: /* @__PURE__ */ jsx(Base.Root, { value, className: cn("w-full", className), ...props, children: children ?? /* @__PURE__ */ jsx(ProgressTrack, {}) }) });
|
|
16
|
+
}
|
|
17
|
+
Progress.displayName = "Progress";
|
|
18
|
+
function ProgressTrack({ className, children, size, ...props }) {
|
|
19
|
+
const inherited = useContext(SizeContext);
|
|
20
|
+
return /* @__PURE__ */ jsx(
|
|
21
|
+
Base.Track,
|
|
22
|
+
{
|
|
23
|
+
className: cn(progressTrackVariants({ size: size ?? inherited }), className),
|
|
24
|
+
...props,
|
|
25
|
+
children: children ?? /* @__PURE__ */ jsx(ProgressIndicator, {})
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
ProgressTrack.displayName = "ProgressTrack";
|
|
30
|
+
function ProgressIndicator({ className, ...props }) {
|
|
31
|
+
return /* @__PURE__ */ jsx(
|
|
32
|
+
Base.Indicator,
|
|
33
|
+
{
|
|
34
|
+
className: cn(
|
|
35
|
+
"h-full rounded-full bg-primary transition-[width] duration-(--motion-duration-slower) ease-decelerate",
|
|
36
|
+
"data-[indeterminate]:w-full data-[indeterminate]:motion-pulse",
|
|
37
|
+
className
|
|
38
|
+
),
|
|
39
|
+
...props
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
ProgressIndicator.displayName = "ProgressIndicator";
|
|
44
|
+
function ProgressLabel({ className, ...props }) {
|
|
45
|
+
return /* @__PURE__ */ jsx(
|
|
46
|
+
Base.Label,
|
|
47
|
+
{
|
|
48
|
+
className: cn("text-label-md text-foreground", className),
|
|
49
|
+
...props
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
ProgressLabel.displayName = "ProgressLabel";
|
|
54
|
+
function ProgressValue({ className, ...props }) {
|
|
55
|
+
return /* @__PURE__ */ jsx(
|
|
56
|
+
Base.Value,
|
|
57
|
+
{
|
|
58
|
+
className: cn("text-mono-sm text-muted-foreground", className),
|
|
59
|
+
...props
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
ProgressValue.displayName = "ProgressValue";
|
|
64
|
+
export {
|
|
65
|
+
Progress,
|
|
66
|
+
ProgressIndicator,
|
|
67
|
+
ProgressLabel,
|
|
68
|
+
ProgressTrack,
|
|
69
|
+
ProgressValue
|
|
70
|
+
};
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// src/components/progress/progress.meta.ts
|
|
2
|
+
var progressMeta = {
|
|
3
|
+
name: "Progress",
|
|
4
|
+
summary: "Linear progress bar over Base UI Progress \u2014 value 0\u2013100 drives the fill; omit value (or pass null) for an indeterminate, pulsing bar.",
|
|
5
|
+
status: "stable",
|
|
6
|
+
keywords: [
|
|
7
|
+
"progress",
|
|
8
|
+
"task progress",
|
|
9
|
+
"meter",
|
|
10
|
+
"loading"
|
|
11
|
+
],
|
|
12
|
+
usage: {
|
|
13
|
+
description: "Use Progress to communicate determinate or indeterminate completion for a task or process.",
|
|
14
|
+
bestPractices: [
|
|
15
|
+
{
|
|
16
|
+
guidance: "do",
|
|
17
|
+
description: "Use determinate values when progress can be measured."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
guidance: "do",
|
|
21
|
+
description: "Pair the visual indicator with text when users need context or exact values."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
guidance: "dont",
|
|
25
|
+
description: "Do not use Progress as a decorative divider or status color bar."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
guidance: "dont",
|
|
29
|
+
description: "Do not use a determinate Progress for an unknown duration. A bar that sits at 90% is worse than a Spinner, because it makes a promise about time that you cannot keep."
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
anatomy: [
|
|
33
|
+
{
|
|
34
|
+
name: "ProgressTrack",
|
|
35
|
+
required: true,
|
|
36
|
+
description: "The background track that defines the range."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "ProgressIndicator",
|
|
40
|
+
required: true,
|
|
41
|
+
description: "The filled or animated progress indicator."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "ProgressLabel",
|
|
45
|
+
required: false,
|
|
46
|
+
description: "A text label for the progress task."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "ProgressValue",
|
|
50
|
+
required: false,
|
|
51
|
+
description: "A readable value such as 45 percent."
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
related: {
|
|
56
|
+
components: [
|
|
57
|
+
"Spinner",
|
|
58
|
+
"Skeleton"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
props: [
|
|
62
|
+
{
|
|
63
|
+
name: "value",
|
|
64
|
+
type: "number | null",
|
|
65
|
+
default: "null",
|
|
66
|
+
description: "Current value between min and max. null (or omitted) renders the indeterminate state."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "min",
|
|
70
|
+
type: "number",
|
|
71
|
+
default: "0",
|
|
72
|
+
description: "The minimum value of the range."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "max",
|
|
76
|
+
type: "number",
|
|
77
|
+
default: "100",
|
|
78
|
+
description: "The maximum value of the range."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: "format",
|
|
82
|
+
type: "Intl.NumberFormatOptions",
|
|
83
|
+
description: "Formatting options for ProgressValue (e.g. style: 'percent', or a currency)."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "getAriaValueText",
|
|
87
|
+
type: "(formatted, value) => string",
|
|
88
|
+
description: "Returns a human-readable text alternative for aria-valuenow."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: "size",
|
|
92
|
+
type: '"sm" | "md" | "lg"',
|
|
93
|
+
default: '"md"',
|
|
94
|
+
description: "Bar thickness, on the same three rails as Meter so the two match on one page. ProgressTrack inherits it."
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
variants: {
|
|
98
|
+
size: ["sm", "md", "lg"]
|
|
99
|
+
},
|
|
100
|
+
subcomponents: [
|
|
101
|
+
{
|
|
102
|
+
name: "ProgressTrack",
|
|
103
|
+
type: "Base UI Track props + className",
|
|
104
|
+
description: "The rail. Rendered automatically when Progress has no children; renders a ProgressIndicator child by default. Takes `size` (inherited from Progress) for its thickness \u2014 use that rather than a className height."
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: "ProgressIndicator",
|
|
108
|
+
type: "Base UI Indicator props + className",
|
|
109
|
+
description: "The fill. Width is set by Base UI from the value; spans full width and pulses while indeterminate."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "ProgressLabel",
|
|
113
|
+
type: "Base UI Label props + className",
|
|
114
|
+
description: "Accessible label; wires aria-labelledby on the Root."
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: "ProgressValue",
|
|
118
|
+
type: "Base UI Value props + className",
|
|
119
|
+
description: "Formatted value readout. Accepts a render-function child for custom formatting."
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
tokensUsed: ["secondary", "primary", "foreground", "muted-foreground"],
|
|
123
|
+
motion: [
|
|
124
|
+
{
|
|
125
|
+
slot: "arrival",
|
|
126
|
+
recipe: "none",
|
|
127
|
+
part: "Root",
|
|
128
|
+
why: "A progress bar appears because work started. Staging its entrance delays the one piece of information the reader is waiting for."
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
slot: "response",
|
|
132
|
+
recipe: "none",
|
|
133
|
+
part: "Root",
|
|
134
|
+
why: "It reports; it does not accept input. A bar that reacted to the pointer would read as a Slider, which is a control the reader can drag."
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
slot: "transition",
|
|
138
|
+
recipe: "custom",
|
|
139
|
+
part: "ProgressIndicator",
|
|
140
|
+
why: "Fill width eases between values on the motion tokens (no recipe animates width), so the bar reads as filling rather than as a series of unrelated widths. It matters most where progress arrives in coarse jumps \u2014 four chunked upload callbacks look like a glitching bar without it."
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
slot: "activity",
|
|
144
|
+
recipe: "motion-pulse",
|
|
145
|
+
part: "ProgressIndicator",
|
|
146
|
+
why: "Indeterminate (value null) has no width to animate, so the pulse carries the whole signal that work is still happening. Without it the indeterminate state is a static bar \u2014 indistinguishable from a stalled determinate one."
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
a11y: [
|
|
150
|
+
"Base UI sets role=progressbar with aria-valuenow / aria-valuemin / aria-valuemax and reports status to screen readers.",
|
|
151
|
+
"Indeterminate state (value null) omits aria-valuenow per the ARIA spec.",
|
|
152
|
+
"Pair ProgressLabel with the bar for a visible, associated name; ProgressValue exposes the formatted value."
|
|
153
|
+
],
|
|
154
|
+
examples: [
|
|
155
|
+
{
|
|
156
|
+
label: "Determinate",
|
|
157
|
+
code: '<Progress value={64} aria-label="Upload" />'
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
label: "Indeterminate",
|
|
161
|
+
code: '<Progress aria-label="Preparing export" />'
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
label: "With label and value",
|
|
165
|
+
code: '<Progress value={40}><div className="mb-2 flex flex-wrap items-center justify-between gap-x-3 gap-y-1"><ProgressLabel>Uploading</ProgressLabel><ProgressValue /></div><ProgressTrack /></Progress>'
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
};
|
|
169
|
+
export {
|
|
170
|
+
progressMeta
|
|
171
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/components/progress/progress.variants.ts
|
|
2
|
+
import { cva } from "class-variance-authority";
|
|
3
|
+
var progressTrackVariants = cva("relative w-full overflow-hidden rounded-full bg-secondary", {
|
|
4
|
+
variants: {
|
|
5
|
+
size: {
|
|
6
|
+
sm: "h-1.5",
|
|
7
|
+
md: "h-2",
|
|
8
|
+
lg: "h-3"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
defaultVariants: {
|
|
12
|
+
size: "md"
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
export {
|
|
16
|
+
progressTrackVariants
|
|
17
|
+
};
|