@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
package/skills/sable/SKILL.md
CHANGED
|
@@ -9,6 +9,33 @@ Build the user's idea with the installed Sable library. The product brief determ
|
|
|
9
9
|
content, structure, and behavior; a preset supplies theme values and design guidance.
|
|
10
10
|
References inform an original direction. A reference or preset is optional.
|
|
11
11
|
|
|
12
|
+
## Finish checklist — before you call any build, repair, or polish done
|
|
13
|
+
|
|
14
|
+
1. Run `sable check <source paths>` (default `src`). It runs `sable doctor`,
|
|
15
|
+
`sable lint`, and `sable grade` and exits 1 if any fails. Repair the findings
|
|
16
|
+
instead of suppressing them, then run it again until it passes. Also run the
|
|
17
|
+
project's own build and type checks.
|
|
18
|
+
2. Review the rendered design: `sable docs reviewing-a-design`. Capture desktop and
|
|
19
|
+
mobile in every promised colour mode, and judge brief fit, composition,
|
|
20
|
+
hierarchy, rhythm, and imagery.
|
|
21
|
+
3. Walk the journey: `sable docs reviewing-a-journey`. Operate the primary task and
|
|
22
|
+
its recovery path with keyboard and touch through loading, empty, error, and
|
|
23
|
+
success states.
|
|
24
|
+
4. Review the motion: `sable docs reviewing-motion`. Observe playback and
|
|
25
|
+
interruption for anything that moves.
|
|
26
|
+
5. Check reduced motion: with `prefers-reduced-motion` (or MotionProvider
|
|
27
|
+
`"reduced"`), state still changes and nothing keeps moving.
|
|
28
|
+
6. Write the reuse inventory: the Sable components, parts, utilities, and token
|
|
29
|
+
groups used, and every app-owned UI or CSS addition with the catalog search
|
|
30
|
+
that justified it. Start from the app-owned surfaces `sable check` lists:
|
|
31
|
+
each one composes the component named beside it, or the inventory says why
|
|
32
|
+
the app owns it.
|
|
33
|
+
7. Record what you learned: `sable docs learning-from-builds`. Keep conditional
|
|
34
|
+
lessons with evidence; never fabricate human approval or preference records.
|
|
35
|
+
|
|
36
|
+
Steps 2–7 are what no tool can verify; `sable check` prints them after its
|
|
37
|
+
results. A passing check is a contract result, not design approval.
|
|
38
|
+
|
|
12
39
|
## Route the request
|
|
13
40
|
|
|
14
41
|
These are agent skill modes, not shell commands. Use `$sable` in Codex and
|
|
@@ -53,7 +80,7 @@ Start in the target app, not this skill's folder. Read project instructions. Res
|
|
|
53
80
|
node -p "require.resolve('@sableui/react/registry.json')"
|
|
54
81
|
```
|
|
55
82
|
|
|
56
|
-
The registry's parent is the package root; read its `AGENTS.md` and use its
|
|
83
|
+
The registry's parent is the package root; read its `AGENTS.md` (`sable docs AGENTS`) and use its
|
|
57
84
|
`bin/sable.mjs`. In the Sable repository use `packages/sable/bin/sable.mjs` and
|
|
58
85
|
`packages/sable/registry.json`. Below, `sable` means this resolved CLI invoked with
|
|
59
86
|
the target project as its working directory. Never fetch an unrelated public
|
|
@@ -70,13 +97,24 @@ Complete setup before implementing UI:
|
|
|
70
97
|
- Dedupe React in the bundler. Import Tailwind, then Sable's stylesheet; add the
|
|
71
98
|
package `dist` glob to Tailwind `@source`, relative to the consumer stylesheet.
|
|
72
99
|
- Load the selected fonts through the project's font setup. Presets declare stacks;
|
|
73
|
-
they do not load files.
|
|
100
|
+
they do not load files.
|
|
101
|
+
- Icons are opt-in: wrap the app once in `<IconProvider set={reiconIconSet}>` with
|
|
102
|
+
`reiconIconSet` from `@sableui/react/icons/reicon`, or pass another set. Without a
|
|
103
|
+
provider every `<Icon>`, including those inside Sable components, renders nothing.
|
|
104
|
+
`sable provider IconProvider` has the props and examples; `sable provider --list`
|
|
105
|
+
covers the other providers (SableThemeProvider, MotionProvider, ToastProvider).
|
|
74
106
|
- Run `sable doctor`, repair wiring issues, and verify the app renders a real
|
|
75
107
|
Sable component. Reuse an existing app server; never start duplicate instances.
|
|
76
108
|
|
|
77
109
|
Run `sable setup --agent` once from the project root to install discoverable entry
|
|
78
110
|
files for Codex/Cursor and Claude Code. `--target codex|claude|cursor|all` selects
|
|
79
|
-
hosts.
|
|
111
|
+
hosts. For Claude Code, setup also prints a Stop hook that runs `sable check`
|
|
112
|
+
before a task can end; it writes that hook to `.claude/settings.json` only with
|
|
113
|
+
`--hook`, so add it only when the user wants it. The hook is one plain command
|
|
114
|
+
(for example `pnpm exec sable check --stop-hook`) with no `cd` or `&&`, so it runs
|
|
115
|
+
under Git Bash and PowerShell alike; `sable check --stop-hook` finds the project
|
|
116
|
+
through Claude Code's `CLAUDE_PROJECT_DIR`, plus `--root` for a workspace package.
|
|
117
|
+
The entry files read this installed package's instructions on each task;
|
|
80
118
|
upgrading the package updates the workflow. After an upgrade, use
|
|
81
119
|
`sable setup --agent --update` to refresh managed entry metadata when needed.
|
|
82
120
|
Keep project-specific preferences in project instructions rather than editing
|
|
@@ -119,12 +157,21 @@ The installed catalog and guides are authoritative for API and token names.
|
|
|
119
157
|
## Develop or use a preset
|
|
120
158
|
|
|
121
159
|
Save a short brief in the project's existing design location: audience, primary
|
|
122
|
-
task, content, constraints, selected identity, and meaningful states
|
|
123
|
-
|
|
160
|
+
task, content, constraints, selected identity, and meaningful states, plus each
|
|
161
|
+
route's width (a Region `max`, or fluid) and why, chosen by what the person does
|
|
162
|
+
there (`sable docs building-a-page`). Label invented sample content. A supplied preset is an explicit input: read its exact record and
|
|
124
163
|
revision, validate it through `sable preset --check <path> --json`, and read
|
|
125
164
|
`sable docs using-presets`. Preserve its tokens and guidance unless the user requests
|
|
126
165
|
a change or the new task requires a documented adaptation.
|
|
127
166
|
|
|
167
|
+
A preset pasted or supplied for a project that already has an app (for example
|
|
168
|
+
from Canvas's “Copy for agent”) is a request to restyle that app, so it is
|
|
169
|
+
`polish`: save and check it, then apply it. Generate its CSS, load its fonts,
|
|
170
|
+
make it SableThemeProvider's default theme and mode in place of the old one, run
|
|
171
|
+
the build and the finish checklist, and look at it rendered. Don't stop at a saved
|
|
172
|
+
file plus a list of wiring steps for the user. Stop after saving only when the
|
|
173
|
+
user says so or the project has no app yet.
|
|
174
|
+
|
|
128
175
|
Without a preset, develop an appropriate direction from the brief. Use the bundled
|
|
129
176
|
presets as starting points or create original app-owned tokens. When the project has
|
|
130
177
|
its own visual atlas, retrieve references with `sable atlas --search "<problem>"
|
|
@@ -166,24 +213,20 @@ contract violations, design judgments, intentional choices, and verified library
|
|
|
166
213
|
gaps. A visual-only review leaves code and unobserved behavior untested. For
|
|
167
214
|
`polish`, reuse the existing direction and inspect the affected product or preset.
|
|
168
215
|
|
|
169
|
-
Every build
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
For connected flows read `reviewing-a-journey`; for meaningful temporal behavior
|
|
183
|
-
read `reviewing-motion` and observe interruption as well as playback.
|
|
216
|
+
Every build ends with the finish checklist at the top of this skill. Notes on it:
|
|
217
|
+
|
|
218
|
+
- `sable check` gives one combined result; while iterating, `sable lint <paths> --json`,
|
|
219
|
+
`sable doctor`, and `sable grade <paths>` run the parts separately.
|
|
220
|
+
- `label-contrast` is Sable's opinion on a user's colour: offer its suggested pair,
|
|
221
|
+
and when the user chose the pair deliberately, keep it with a reasoned disable or
|
|
222
|
+
preset `exceptions` entry.
|
|
223
|
+
- Besides the review guides, check font loading and focus in the rendered app.
|
|
224
|
+
- In the reuse inventory, ordinary semantic content and domain logic are
|
|
225
|
+
app-owned; a recognizable control or surface must use its library
|
|
226
|
+
implementation. Explain any uncovered capability with the catalog search and
|
|
227
|
+
the smallest necessary addition, and include the inventory with the build's
|
|
228
|
+
evidence so conformance is reviewable.
|
|
184
229
|
|
|
185
230
|
Iterate on observed defects and recapture changed states. Contract checks cannot
|
|
186
|
-
judge beauty
|
|
187
|
-
|
|
188
|
-
checks performed, and material limitations. Preserve useful conditional lessons
|
|
189
|
-
through `learning-from-builds`; never fabricate human approval or preference records.
|
|
231
|
+
judge beauty. Deliver the result, the preset/revision used, the checks performed,
|
|
232
|
+
and material limitations.
|
package/targets/ios.json
CHANGED
|
@@ -389,6 +389,15 @@
|
|
|
389
389
|
],
|
|
390
390
|
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
391
391
|
},
|
|
392
|
+
"DisclosurePicker": {
|
|
393
|
+
"source": "DisclosurePicker",
|
|
394
|
+
"strategy": "preserve",
|
|
395
|
+
"importFrom": "@sableui/react",
|
|
396
|
+
"components": [
|
|
397
|
+
"DisclosurePicker"
|
|
398
|
+
],
|
|
399
|
+
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
400
|
+
},
|
|
392
401
|
"EmptyState": {
|
|
393
402
|
"source": "EmptyState",
|
|
394
403
|
"strategy": "preserve",
|
|
@@ -435,6 +444,15 @@
|
|
|
435
444
|
],
|
|
436
445
|
"guidance": "Drag and drop is not a phone interaction. Pick files with a Sable Button; show them as Attachments."
|
|
437
446
|
},
|
|
447
|
+
"FontPicker": {
|
|
448
|
+
"source": "FontPicker",
|
|
449
|
+
"strategy": "preserve",
|
|
450
|
+
"importFrom": "@sableui/react",
|
|
451
|
+
"components": [
|
|
452
|
+
"FontPicker"
|
|
453
|
+
],
|
|
454
|
+
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
455
|
+
},
|
|
438
456
|
"Form": {
|
|
439
457
|
"source": "Form",
|
|
440
458
|
"strategy": "preserve",
|
|
@@ -525,6 +543,24 @@
|
|
|
525
543
|
],
|
|
526
544
|
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
527
545
|
},
|
|
546
|
+
"MediaImage": {
|
|
547
|
+
"source": "MediaImage",
|
|
548
|
+
"strategy": "preserve",
|
|
549
|
+
"importFrom": "@sableui/react",
|
|
550
|
+
"components": [
|
|
551
|
+
"MediaImage"
|
|
552
|
+
],
|
|
553
|
+
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
554
|
+
},
|
|
555
|
+
"MediaTile": {
|
|
556
|
+
"source": "MediaTile",
|
|
557
|
+
"strategy": "preserve",
|
|
558
|
+
"importFrom": "@sableui/react",
|
|
559
|
+
"components": [
|
|
560
|
+
"MediaTile"
|
|
561
|
+
],
|
|
562
|
+
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
563
|
+
},
|
|
528
564
|
"Menu": {
|
|
529
565
|
"source": "Menu",
|
|
530
566
|
"strategy": "preserve",
|
|
@@ -787,6 +823,15 @@
|
|
|
787
823
|
],
|
|
788
824
|
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
789
825
|
},
|
|
826
|
+
"SectionHeader": {
|
|
827
|
+
"source": "SectionHeader",
|
|
828
|
+
"strategy": "preserve",
|
|
829
|
+
"importFrom": "@sableui/react",
|
|
830
|
+
"components": [
|
|
831
|
+
"SectionHeader"
|
|
832
|
+
],
|
|
833
|
+
"guidance": "Use the Sable component as it is, in the preset. Adapt layout and touch targets to the phone; do not swap in a native lookalike or restyle it."
|
|
834
|
+
},
|
|
790
835
|
"SegmentedBar": {
|
|
791
836
|
"source": "SegmentedBar",
|
|
792
837
|
"strategy": "preserve",
|
package/dist/chunk-3IWZYBGH.js
DELETED
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-SRQWQUTW.js';
|
|
2
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
|
|
4
|
-
// src/layout/_safeArea.ts
|
|
5
|
-
var EDGE_PROP = {
|
|
6
|
-
top: "paddingTop",
|
|
7
|
-
bottom: "paddingBottom",
|
|
8
|
-
left: "paddingLeft",
|
|
9
|
-
right: "paddingRight"
|
|
10
|
-
};
|
|
11
|
-
function safeAreaInsets(edges) {
|
|
12
|
-
const out = {};
|
|
13
|
-
for (const edge of edges) {
|
|
14
|
-
out[EDGE_PROP[edge]] = `env(safe-area-inset-${edge}, 0px)`;
|
|
15
|
-
}
|
|
16
|
-
return out;
|
|
17
|
-
}
|
|
18
|
-
var NAMED_MAX = {
|
|
19
|
-
prose: "var(--measure-prose)",
|
|
20
|
-
form: "var(--region-form)",
|
|
21
|
-
feed: "var(--region-feed)",
|
|
22
|
-
content: "var(--region-content)",
|
|
23
|
-
wide: "var(--region-wide)",
|
|
24
|
-
full: "var(--region-full)",
|
|
25
|
-
ultrawide: "var(--region-ultrawide)"
|
|
26
|
-
};
|
|
27
|
-
function Region({
|
|
28
|
-
as,
|
|
29
|
-
inset = true,
|
|
30
|
-
max,
|
|
31
|
-
bleed = false,
|
|
32
|
-
safeArea = false,
|
|
33
|
-
className,
|
|
34
|
-
style,
|
|
35
|
-
children,
|
|
36
|
-
ref,
|
|
37
|
-
...rest
|
|
38
|
-
}) {
|
|
39
|
-
const Comp = as ?? "div";
|
|
40
|
-
const maxWidth = max ? NAMED_MAX[max] ?? max : void 0;
|
|
41
|
-
const safeEdges = safeArea === true ? ["top", "bottom"] : Array.isArray(safeArea) ? safeArea : [];
|
|
42
|
-
const mergedStyle = {
|
|
43
|
-
...maxWidth ? { maxWidth, marginInline: "auto" } : null,
|
|
44
|
-
...!bleed && inset ? { paddingInline: "var(--page-inset)" } : null,
|
|
45
|
-
...safeAreaInsets(safeEdges),
|
|
46
|
-
...style
|
|
47
|
-
};
|
|
48
|
-
return /* @__PURE__ */ jsx(Comp, { ref, className: cn("w-full", className), style: mergedStyle, ...rest, children });
|
|
49
|
-
}
|
|
50
|
-
var ALIGN = {
|
|
51
|
-
start: "flex-start",
|
|
52
|
-
center: "center",
|
|
53
|
-
end: "flex-end",
|
|
54
|
-
stretch: "stretch"
|
|
55
|
-
};
|
|
56
|
-
var JUSTIFY = {
|
|
57
|
-
start: "flex-start",
|
|
58
|
-
center: "center",
|
|
59
|
-
end: "flex-end",
|
|
60
|
-
between: "space-between",
|
|
61
|
-
around: "space-around"
|
|
62
|
-
};
|
|
63
|
-
function resolveGap(gap) {
|
|
64
|
-
return typeof gap === "number" ? `calc(var(--rhythm-unit) * ${gap})` : gap;
|
|
65
|
-
}
|
|
66
|
-
function Stack({
|
|
67
|
-
gap = 2,
|
|
68
|
-
align = "stretch",
|
|
69
|
-
justify = "start",
|
|
70
|
-
className,
|
|
71
|
-
style,
|
|
72
|
-
children,
|
|
73
|
-
ref,
|
|
74
|
-
...rest
|
|
75
|
-
}) {
|
|
76
|
-
const mergedStyle = {
|
|
77
|
-
display: "flex",
|
|
78
|
-
flexDirection: "column",
|
|
79
|
-
alignItems: ALIGN[align],
|
|
80
|
-
justifyContent: JUSTIFY[justify],
|
|
81
|
-
gap: resolveGap(gap),
|
|
82
|
-
...style
|
|
83
|
-
};
|
|
84
|
-
return /* @__PURE__ */ jsx("div", { ref, className: cn(className), style: mergedStyle, ...rest, children });
|
|
85
|
-
}
|
|
86
|
-
function Page({ gap = 4, align, children, ...regionProps }) {
|
|
87
|
-
return /* @__PURE__ */ jsx(Region, { ...regionProps, children: /* @__PURE__ */ jsx(Stack, { gap, align, children }) });
|
|
88
|
-
}
|
|
89
|
-
Page.displayName = "Page";
|
|
90
|
-
|
|
91
|
-
// src/layout/_responsive.ts
|
|
92
|
-
var BREAKPOINTS = ["base", "sm", "md", "lg", "xl", "2xl"];
|
|
93
|
-
function responsiveVars(prefix, value) {
|
|
94
|
-
if (value === void 0) return {};
|
|
95
|
-
if (typeof value === "number") return { [`${prefix}-base`]: value };
|
|
96
|
-
const out = {};
|
|
97
|
-
for (const bp of BREAKPOINTS) {
|
|
98
|
-
const v = value[bp];
|
|
99
|
-
if (v != null) out[`${prefix}-${bp}`] = v;
|
|
100
|
-
}
|
|
101
|
-
return out;
|
|
102
|
-
}
|
|
103
|
-
function resolveGap2(gap) {
|
|
104
|
-
if (gap === void 0) return "var(--grid-gutter)";
|
|
105
|
-
if (typeof gap === "number") return `calc(var(--rhythm-unit) * ${gap})`;
|
|
106
|
-
return gap;
|
|
107
|
-
}
|
|
108
|
-
function Grid({
|
|
109
|
-
cols = 12,
|
|
110
|
-
minItemWidth,
|
|
111
|
-
gap,
|
|
112
|
-
className,
|
|
113
|
-
style,
|
|
114
|
-
children,
|
|
115
|
-
ref,
|
|
116
|
-
...rest
|
|
117
|
-
}) {
|
|
118
|
-
if (minItemWidth) {
|
|
119
|
-
const mergedStyle2 = {
|
|
120
|
-
display: "grid",
|
|
121
|
-
gridTemplateColumns: `repeat(auto-fit, minmax(min(${minItemWidth}, 100%), 1fr))`,
|
|
122
|
-
gap: resolveGap2(gap),
|
|
123
|
-
...style
|
|
124
|
-
};
|
|
125
|
-
return /* @__PURE__ */ jsx("div", { ref, className: cn(className), style: mergedStyle2, ...rest, children });
|
|
126
|
-
}
|
|
127
|
-
const mergedStyle = {
|
|
128
|
-
gap: resolveGap2(gap),
|
|
129
|
-
...responsiveVars("--cols", cols),
|
|
130
|
-
...style
|
|
131
|
-
};
|
|
132
|
-
return /* @__PURE__ */ jsx(
|
|
133
|
-
"div",
|
|
134
|
-
{
|
|
135
|
-
ref,
|
|
136
|
-
"data-sable-grid-cols": true,
|
|
137
|
-
className: cn(className),
|
|
138
|
-
style: mergedStyle,
|
|
139
|
-
...rest,
|
|
140
|
-
children
|
|
141
|
-
}
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
function resolveGap3(gap) {
|
|
145
|
-
if (gap === void 0) return "var(--grid-gutter)";
|
|
146
|
-
if (typeof gap === "number") return `calc(var(--rhythm-unit) * ${gap})`;
|
|
147
|
-
return gap;
|
|
148
|
-
}
|
|
149
|
-
function cappedColumnGap(gap) {
|
|
150
|
-
return `min(${gap}, calc(75% / max(var(--cols, var(--grid-columns)) - 1, 1)))`;
|
|
151
|
-
}
|
|
152
|
-
function Columns({
|
|
153
|
-
count,
|
|
154
|
-
gap,
|
|
155
|
-
className,
|
|
156
|
-
style,
|
|
157
|
-
children,
|
|
158
|
-
ref,
|
|
159
|
-
...rest
|
|
160
|
-
}) {
|
|
161
|
-
const resolvedGap = resolveGap3(gap);
|
|
162
|
-
const mergedStyle = {
|
|
163
|
-
rowGap: resolvedGap,
|
|
164
|
-
columnGap: cappedColumnGap(resolvedGap),
|
|
165
|
-
...responsiveVars("--cols", count),
|
|
166
|
-
...style
|
|
167
|
-
};
|
|
168
|
-
return /* @__PURE__ */ jsx(
|
|
169
|
-
"div",
|
|
170
|
-
{
|
|
171
|
-
ref,
|
|
172
|
-
"data-sable-grid-cols": true,
|
|
173
|
-
className: cn(className),
|
|
174
|
-
style: mergedStyle,
|
|
175
|
-
...rest,
|
|
176
|
-
children
|
|
177
|
-
}
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
function Col({
|
|
181
|
-
span = 1,
|
|
182
|
-
start,
|
|
183
|
-
className,
|
|
184
|
-
style,
|
|
185
|
-
children,
|
|
186
|
-
ref,
|
|
187
|
-
...rest
|
|
188
|
-
}) {
|
|
189
|
-
const mergedStyle = {
|
|
190
|
-
...responsiveVars("--col-span", span),
|
|
191
|
-
...responsiveVars("--col-start", start),
|
|
192
|
-
...style
|
|
193
|
-
};
|
|
194
|
-
return /* @__PURE__ */ jsx(
|
|
195
|
-
"div",
|
|
196
|
-
{
|
|
197
|
-
ref,
|
|
198
|
-
"data-sable-col": true,
|
|
199
|
-
className: cn(className),
|
|
200
|
-
style: mergedStyle,
|
|
201
|
-
...rest,
|
|
202
|
-
children
|
|
203
|
-
}
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
var ALIGN2 = {
|
|
207
|
-
start: "flex-start",
|
|
208
|
-
center: "center",
|
|
209
|
-
end: "flex-end",
|
|
210
|
-
stretch: "stretch",
|
|
211
|
-
baseline: "baseline"
|
|
212
|
-
};
|
|
213
|
-
var JUSTIFY2 = {
|
|
214
|
-
start: "flex-start",
|
|
215
|
-
center: "center",
|
|
216
|
-
end: "flex-end",
|
|
217
|
-
between: "space-between",
|
|
218
|
-
around: "space-around"
|
|
219
|
-
};
|
|
220
|
-
function resolveGap4(gap) {
|
|
221
|
-
return typeof gap === "number" ? `calc(var(--rhythm-unit) * ${gap})` : gap;
|
|
222
|
-
}
|
|
223
|
-
function Row({
|
|
224
|
-
gap = 2,
|
|
225
|
-
align = "center",
|
|
226
|
-
justify = "start",
|
|
227
|
-
wrap = false,
|
|
228
|
-
className,
|
|
229
|
-
style,
|
|
230
|
-
children,
|
|
231
|
-
ref,
|
|
232
|
-
...rest
|
|
233
|
-
}) {
|
|
234
|
-
const mergedStyle = {
|
|
235
|
-
display: "flex",
|
|
236
|
-
flexDirection: "row",
|
|
237
|
-
alignItems: ALIGN2[align],
|
|
238
|
-
justifyContent: JUSTIFY2[justify],
|
|
239
|
-
flexWrap: wrap ? "wrap" : "nowrap",
|
|
240
|
-
gap: resolveGap4(gap),
|
|
241
|
-
...style
|
|
242
|
-
};
|
|
243
|
-
return /* @__PURE__ */ jsx("div", { ref, className: cn(className), style: mergedStyle, ...rest, children });
|
|
244
|
-
}
|
|
245
|
-
function Spacer({ size = 1, axis = "vertical", grow, className }) {
|
|
246
|
-
const style = grow ? { flex: "1 1 0%" } : axis === "vertical" ? { height: `calc(var(--rhythm-unit) * ${size})`, flexShrink: 0 } : { width: `calc(var(--rhythm-unit) * ${size})`, flexShrink: 0 };
|
|
247
|
-
return /* @__PURE__ */ jsx("div", { "aria-hidden": true, className, style });
|
|
248
|
-
}
|
|
249
|
-
var NAMED_MAX2 = {
|
|
250
|
-
prose: "var(--measure-prose)",
|
|
251
|
-
feed: "var(--region-feed)",
|
|
252
|
-
wide: "var(--region-wide)",
|
|
253
|
-
ultrawide: "var(--region-ultrawide)"
|
|
254
|
-
};
|
|
255
|
-
function Center({ max, className, style, children, ref, ...rest }) {
|
|
256
|
-
const maxWidth = max ? NAMED_MAX2[max] ?? max : void 0;
|
|
257
|
-
const mergedStyle = {
|
|
258
|
-
marginInline: "auto",
|
|
259
|
-
...maxWidth ? { maxWidth } : null,
|
|
260
|
-
...style
|
|
261
|
-
};
|
|
262
|
-
return /* @__PURE__ */ jsx("div", { ref, className: cn("w-full", className), style: mergedStyle, ...rest, children });
|
|
263
|
-
}
|
|
264
|
-
function AspectBox({
|
|
265
|
-
ratio = 16 / 9,
|
|
266
|
-
className,
|
|
267
|
-
style,
|
|
268
|
-
children,
|
|
269
|
-
...rest
|
|
270
|
-
}) {
|
|
271
|
-
const mergedStyle = {
|
|
272
|
-
aspectRatio: String(ratio),
|
|
273
|
-
...style
|
|
274
|
-
};
|
|
275
|
-
return /* @__PURE__ */ jsx(
|
|
276
|
-
"div",
|
|
277
|
-
{
|
|
278
|
-
className: cn("relative w-full overflow-hidden", className),
|
|
279
|
-
style: mergedStyle,
|
|
280
|
-
...rest,
|
|
281
|
-
children
|
|
282
|
-
}
|
|
283
|
-
);
|
|
284
|
-
}
|
|
285
|
-
function Bleed({ className, style, children, ref, ...rest }) {
|
|
286
|
-
const mergedStyle = {
|
|
287
|
-
width: "100cqw",
|
|
288
|
-
marginInline: "calc(50% - 50cqw)",
|
|
289
|
-
...style
|
|
290
|
-
};
|
|
291
|
-
return /* @__PURE__ */ jsx("div", { ref, className: cn(className), style: mergedStyle, ...rest, children });
|
|
292
|
-
}
|
|
293
|
-
Bleed.displayName = "Bleed";
|
|
294
|
-
function parseRatio(ratio) {
|
|
295
|
-
const [a, b] = ratio.split("/");
|
|
296
|
-
const pa = Number(a);
|
|
297
|
-
const pb = Number(b);
|
|
298
|
-
if (!Number.isFinite(pa) || pa <= 0 || !Number.isFinite(pb) || pb <= 0) {
|
|
299
|
-
return { primary: "1fr", secondary: "1fr" };
|
|
300
|
-
}
|
|
301
|
-
return { primary: `${pa}fr`, secondary: `${pb}fr` };
|
|
302
|
-
}
|
|
303
|
-
function resolveGap5(gap) {
|
|
304
|
-
if (gap === void 0) return void 0;
|
|
305
|
-
return typeof gap === "number" ? `calc(var(--rhythm-unit) * ${gap})` : gap;
|
|
306
|
-
}
|
|
307
|
-
function SplitPane({
|
|
308
|
-
primary,
|
|
309
|
-
secondary,
|
|
310
|
-
collapseBelow = "lg",
|
|
311
|
-
ratio = "1/1",
|
|
312
|
-
gap,
|
|
313
|
-
className,
|
|
314
|
-
style,
|
|
315
|
-
ref,
|
|
316
|
-
...rest
|
|
317
|
-
}) {
|
|
318
|
-
const { primary: p, secondary: s } = parseRatio(ratio);
|
|
319
|
-
const splitGap = resolveGap5(gap);
|
|
320
|
-
const mergedStyle = {
|
|
321
|
-
"--split-primary": p,
|
|
322
|
-
"--split-secondary": s,
|
|
323
|
-
...splitGap ? { "--split-gap": splitGap } : null,
|
|
324
|
-
...style
|
|
325
|
-
};
|
|
326
|
-
return /* @__PURE__ */ jsxs(
|
|
327
|
-
"div",
|
|
328
|
-
{
|
|
329
|
-
ref,
|
|
330
|
-
"data-sable-split": true,
|
|
331
|
-
"data-collapse": collapseBelow,
|
|
332
|
-
className: cn(className),
|
|
333
|
-
style: mergedStyle,
|
|
334
|
-
...rest,
|
|
335
|
-
children: [
|
|
336
|
-
/* @__PURE__ */ jsx("div", { className: "min-w-0", children: primary }),
|
|
337
|
-
/* @__PURE__ */ jsx("div", { className: "min-w-0", children: secondary })
|
|
338
|
-
]
|
|
339
|
-
}
|
|
340
|
-
);
|
|
341
|
-
}
|
|
342
|
-
SplitPane.displayName = "SplitPane";
|
|
343
|
-
function SafeArea({
|
|
344
|
-
edges = ["top", "bottom", "left", "right"],
|
|
345
|
-
className,
|
|
346
|
-
style,
|
|
347
|
-
children,
|
|
348
|
-
ref,
|
|
349
|
-
...rest
|
|
350
|
-
}) {
|
|
351
|
-
return /* @__PURE__ */ jsx(
|
|
352
|
-
"div",
|
|
353
|
-
{
|
|
354
|
-
ref,
|
|
355
|
-
className: cn(className),
|
|
356
|
-
style: { ...safeAreaInsets(edges), ...style },
|
|
357
|
-
...rest,
|
|
358
|
-
children
|
|
359
|
-
}
|
|
360
|
-
);
|
|
361
|
-
}
|
|
362
|
-
function GridOverlay({
|
|
363
|
-
columns = 12,
|
|
364
|
-
gap = "var(--grid-gutter)",
|
|
365
|
-
inset = true,
|
|
366
|
-
show = true,
|
|
367
|
-
className
|
|
368
|
-
}) {
|
|
369
|
-
if (!show) return null;
|
|
370
|
-
const style = {
|
|
371
|
-
position: "absolute",
|
|
372
|
-
inset: 0,
|
|
373
|
-
display: "grid",
|
|
374
|
-
gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,
|
|
375
|
-
gap,
|
|
376
|
-
paddingInline: inset ? "var(--page-inset)" : void 0
|
|
377
|
-
};
|
|
378
|
-
return /* @__PURE__ */ jsx(
|
|
379
|
-
"div",
|
|
380
|
-
{
|
|
381
|
-
"aria-hidden": true,
|
|
382
|
-
className: cn("pointer-events-none z-(--z-overlay)", className),
|
|
383
|
-
style,
|
|
384
|
-
children: Array.from({ length: columns }, (_, i) => /* @__PURE__ */ jsx(
|
|
385
|
-
"div",
|
|
386
|
-
{
|
|
387
|
-
style: {
|
|
388
|
-
background: "color-mix(in oklab, var(--highlight) 9%, transparent)",
|
|
389
|
-
borderInline: "1px solid color-mix(in oklab, var(--highlight) 22%, transparent)"
|
|
390
|
-
}
|
|
391
|
-
},
|
|
392
|
-
i
|
|
393
|
-
))
|
|
394
|
-
}
|
|
395
|
-
);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
export { AspectBox, Bleed, Center, Col, Columns, Grid, GridOverlay, Page, Region, Row, SafeArea, Spacer, SplitPane, Stack };
|
package/dist/chunk-7MG4SHYX.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// src/themes/prism/index.ts
|
|
2
|
-
var prismTheme = {
|
|
3
|
-
id: "prism",
|
|
4
|
-
label: "Prism",
|
|
5
|
-
modes: ["light", "dark"],
|
|
6
|
-
defaultMode: "light",
|
|
7
|
-
fonts: {
|
|
8
|
-
sans: '"Outfit", ui-sans-serif, system-ui, sans-serif',
|
|
9
|
-
mono: '"Roboto Mono", ui-monospace, monospace',
|
|
10
|
-
display: '"Playfair Display", ui-serif, Georgia, serif'
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
var prism_default = prismTheme;
|
|
14
|
-
|
|
15
|
-
export { prismTheme, prism_default };
|