@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/dist/styles.css
CHANGED
|
@@ -391,14 +391,19 @@
|
|
|
391
391
|
lifted from their text strength to an art strength, glowing over the brand
|
|
392
392
|
steeped in the first tone; a theme overrides any of it through the
|
|
393
393
|
--theme-art-* hooks. Declared here, on every scope, so a .dark island or a
|
|
394
|
-
preset-scoped preview paints from its own tokens.
|
|
394
|
+
preset-scoped preview paints from its own tokens.
|
|
395
|
+
|
|
396
|
+
Art that keys off the brand reads `--theme-art-brand`, falling back to
|
|
397
|
+
`--primary`. They are the same colour until a look turns the primary action
|
|
398
|
+
neutral (black/white buttons): then the art must keep the brand, or Ember's
|
|
399
|
+
embers go grey. Set the hook to the brand wherever --primary stops being it. */
|
|
395
400
|
--art-1: var(--theme-art-1, oklch(from var(--tone-info) clamp(0.5, calc(l + 0.16), 0.9) max(calc(c * 1.25), 0.1) h));
|
|
396
401
|
--art-2: var(--theme-art-2, oklch(from var(--tone-collectible) clamp(0.5, calc(l + 0.16), 0.9) max(calc(c * 1.25), 0.1) h));
|
|
397
402
|
--art-3: var(--theme-art-3, oklch(from var(--tone-edition) clamp(0.5, calc(l + 0.16), 0.9) max(calc(c * 1.25), 0.1) h));
|
|
398
403
|
--art-4: var(--theme-art-4, oklch(from var(--tone-standard) clamp(0.5, calc(l + 0.16), 0.9) max(calc(c * 1.25), 0.1) h));
|
|
399
404
|
--art-5: var(--theme-art-5, transparent);
|
|
400
405
|
--art-6: var(--theme-art-6, transparent);
|
|
401
|
-
--art-ground: var(--theme-art-ground, color-mix(in oklab, var(--primary) 55%, oklch(from var(--tone-info) 0.3 c h)));
|
|
406
|
+
--art-ground: var(--theme-art-ground, color-mix(in oklab, var(--theme-art-brand, var(--primary)) 55%, oklch(from var(--tone-info) 0.3 c h)));
|
|
402
407
|
--art-warp: var(--theme-art-warp, 0.8);
|
|
403
408
|
--art-softness: var(--theme-art-softness, 0.88);
|
|
404
409
|
--art-grain: var(--theme-art-grain, 0);
|
|
@@ -1062,6 +1067,103 @@
|
|
|
1062
1067
|
}
|
|
1063
1068
|
}
|
|
1064
1069
|
|
|
1070
|
+
/* Reveal on hover — row and tile actions that rest hidden and appear when the
|
|
1071
|
+
pointer is over their item, without ever becoming unreachable.
|
|
1072
|
+
|
|
1073
|
+
Every app hand-writes this, and the hand-written version is wrong in one of
|
|
1074
|
+
three ways: `group-hover:opacity-100` alone hides the action FOREVER on a
|
|
1075
|
+
phone (touch has no hover), `hidden group-hover:flex` drops it from the tab
|
|
1076
|
+
order and the accessibility tree, and the `[@media(hover:hover)]:` fix that
|
|
1077
|
+
handles the first two snaps with no transition. This is the one version that
|
|
1078
|
+
is right on all three:
|
|
1079
|
+
|
|
1080
|
+
- HIDDEN only where `(hover: hover)` — a touch or no-hover device shows the
|
|
1081
|
+
action at rest, always.
|
|
1082
|
+
- SHOWN when the nearest host is hovered, when anything in it holds focus
|
|
1083
|
+
(Tab to the row and its actions appear), and while the action's own popup
|
|
1084
|
+
is open (an overflow menu whose list took focus into a portal does not
|
|
1085
|
+
vanish from under itself).
|
|
1086
|
+
- OPACITY, never display or visibility: the action stays in the tab order
|
|
1087
|
+
and the accessibility tree, so a keyboard or screen-reader user never has
|
|
1088
|
+
to discover it first.
|
|
1089
|
+
|
|
1090
|
+
The host is the nearest ancestor with Tailwind's `group` class (or a
|
|
1091
|
+
`data-reveal-scope` attribute, for a host whose `group` is named). "Nearest"
|
|
1092
|
+
falls out of how hover works: hovering an inner host hovers every host
|
|
1093
|
+
around it, so the action hides exactly when its own host is not hovered or
|
|
1094
|
+
focused. A bare `reveal-on-hover` with no host stays visible — the safe
|
|
1095
|
+
failure. Put the host on the ITEM (the row, the tile), never on the list:
|
|
1096
|
+
hovering anywhere in a list host reveals every action in it at once.
|
|
1097
|
+
|
|
1098
|
+
The transition lists exactly what `motion-interactive` does, so it composes
|
|
1099
|
+
with a Sable Button (which carries that recipe) instead of fighting it for
|
|
1100
|
+
transition-property; the durations are motion tokens, so reduced motion and
|
|
1101
|
+
<MotionProvider> off make the reveal an instant swap. `--reveal-offset`
|
|
1102
|
+
(default 0) adds a short rise while hidden — `[--reveal-offset:--spacing(1)]`.
|
|
1103
|
+
|
|
1104
|
+
`:has()` and selector-list `:not()` are load-bearing. A browser without them
|
|
1105
|
+
drops the hiding rule entirely and the action simply stays visible. */
|
|
1106
|
+
@utility reveal-on-hover {
|
|
1107
|
+
transition-property: color, background-color, border-color, box-shadow,
|
|
1108
|
+
opacity, fill, stroke, scale, translate;
|
|
1109
|
+
transition-duration: var(--motion-duration-fast);
|
|
1110
|
+
transition-timing-function: var(--motion-ease-standard);
|
|
1111
|
+
|
|
1112
|
+
@media (hover: hover) {
|
|
1113
|
+
:is(.group, [data-reveal-scope]):not(:hover, :focus-within)
|
|
1114
|
+
&:not(:focus-within, [data-popup-open], [aria-expanded="true"]):not(
|
|
1115
|
+
:has([data-popup-open], [aria-expanded="true"])
|
|
1116
|
+
) {
|
|
1117
|
+
opacity: 0;
|
|
1118
|
+
translate: 0 var(--reveal-offset, 0);
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
/* Stretched link — one link that makes its whole item clickable, while the
|
|
1124
|
+
item's OTHER controls stay separately clickable and focusable.
|
|
1125
|
+
|
|
1126
|
+
Wrapping a card or tile in an <a> is the instinct, and it is invalid the
|
|
1127
|
+
moment the item holds a second link or a button (interactive content cannot
|
|
1128
|
+
nest): browsers re-parent the inner one, screen readers announce the whole
|
|
1129
|
+
card as one link label, and the inner control activates the outer link.
|
|
1130
|
+
Instead the item's PRIMARY link — usually its title — grows a transparent
|
|
1131
|
+
`::after` over the nearest positioned ancestor (give the item `relative`).
|
|
1132
|
+
Pointer clicks anywhere on the item land on the link; the link is still one
|
|
1133
|
+
tab stop with its own short name.
|
|
1134
|
+
|
|
1135
|
+
Raise every other control above it with `relative z-10` — a subtitle link, a
|
|
1136
|
+
play button, an overflow menu. Text that should stay selectable needs the
|
|
1137
|
+
same, or the overlay swallows the drag.
|
|
1138
|
+
|
|
1139
|
+
Focus draws on the overlay, not the text: a ring around the title alone
|
|
1140
|
+
would say "this word is the link" when the whole item is. The ring follows
|
|
1141
|
+
`--stretched-link-radius` (default 0), so set it to the item's corner.
|
|
1142
|
+
|
|
1143
|
+
Not with `hit-target` on the same element — both own `::after`. */
|
|
1144
|
+
@utility stretched-link {
|
|
1145
|
+
&::after {
|
|
1146
|
+
content: "";
|
|
1147
|
+
position: absolute;
|
|
1148
|
+
inset: 0;
|
|
1149
|
+
/* 1, not 0: a positioned sibling later in source (a cover in an
|
|
1150
|
+
AspectBox) would otherwise paint over the overlay and eat its clicks. */
|
|
1151
|
+
z-index: 1;
|
|
1152
|
+
border-radius: var(--stretched-link-radius, 0);
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
&:focus-visible {
|
|
1156
|
+
outline: none;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
&:focus-visible::after {
|
|
1160
|
+
outline: 2px solid var(--color-ring);
|
|
1161
|
+
/* 4px, not the controls' 2px: the ring goes around a whole item whose
|
|
1162
|
+
text runs to its edge, and 2px left the words touching the ring. */
|
|
1163
|
+
outline-offset: 4px;
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1065
1167
|
/* Link underline — driven by the FONT'S OWN metrics, so it retunes itself when
|
|
1066
1168
|
a theme swaps typeface (which Sable themes do). `from-font` takes the
|
|
1067
1169
|
underline position and thickness the type designer shipped in the face,
|
|
@@ -1074,12 +1176,25 @@
|
|
|
1074
1176
|
the line box. If you want an underline that GROWS on hover, that is a
|
|
1075
1177
|
separate element (a positioned pseudo-element with a scaled transform), not
|
|
1076
1178
|
this utility. Pair with `motion-interactive`, whose transition-property list
|
|
1077
|
-
already covers `color`.
|
|
1179
|
+
already covers `color`.
|
|
1180
|
+
|
|
1181
|
+
It also carries the link's focus treatment, because a plain <a> has no
|
|
1182
|
+
component to supply one and would otherwise fall back to the browser's
|
|
1183
|
+
default ring in the UA colour. An OUTLINE, not the components' box-shadow
|
|
1184
|
+
`ring`: outline follows each line fragment of a link that wraps, and it
|
|
1185
|
+
survives forced-colors where box-shadow is dropped. Full-opacity `--ring`,
|
|
1186
|
+
same floor as every component (sable docs accessibility → Focus). */
|
|
1078
1187
|
@utility link-underline {
|
|
1079
1188
|
text-decoration-line: underline;
|
|
1080
1189
|
text-underline-position: from-font;
|
|
1081
1190
|
text-decoration-thickness: from-font;
|
|
1082
1191
|
text-decoration-skip-ink: auto;
|
|
1192
|
+
|
|
1193
|
+
&:focus-visible {
|
|
1194
|
+
outline: 2px solid var(--color-ring);
|
|
1195
|
+
outline-offset: 2px;
|
|
1196
|
+
border-radius: 2px;
|
|
1197
|
+
}
|
|
1083
1198
|
}
|
|
1084
1199
|
|
|
1085
1200
|
/* ==========================================================================
|
|
@@ -56,7 +56,12 @@ interface SableThemeContextValue {
|
|
|
56
56
|
}
|
|
57
57
|
interface SableThemeProviderProps {
|
|
58
58
|
children: ReactNode;
|
|
59
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Initial color preference when uncontrolled and no stored value exists.
|
|
61
|
+
* "system", so a first visit follows the visitor's OS. Dark is still the
|
|
62
|
+
* design's home mode; pass "dark" (or a preset's `defaultMode`) to open there.
|
|
63
|
+
* @default "system"
|
|
64
|
+
*/
|
|
60
65
|
defaultPreference?: SableThemePreference;
|
|
61
66
|
/** Controlled color preference. */
|
|
62
67
|
preference?: SableThemePreference;
|
|
@@ -311,5 +311,17 @@ var TYPE_UI_TOKENS = [
|
|
|
311
311
|
"type-ui-micro-size",
|
|
312
312
|
"type-ui-micro-weight"
|
|
313
313
|
];
|
|
314
|
-
|
|
315
|
-
|
|
314
|
+
export {
|
|
315
|
+
ART_TOKENS,
|
|
316
|
+
DENSITY_TOKENS,
|
|
317
|
+
DERIVED_EDGE_TOKENS,
|
|
318
|
+
LAYERING_TOKENS,
|
|
319
|
+
MOTION_TOKENS,
|
|
320
|
+
RADIUS_TOKENS,
|
|
321
|
+
SEMANTIC_TOKENS,
|
|
322
|
+
TYPE_OVERLINE_TOKENS,
|
|
323
|
+
TYPE_REFINEMENT_TOKENS,
|
|
324
|
+
TYPE_SCALE_TOKENS,
|
|
325
|
+
TYPE_UI_TOKENS,
|
|
326
|
+
WORKSPACE_SURFACE_TOKENS
|
|
327
|
+
};
|
|
@@ -1 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
// src/themes/atelier/index.ts
|
|
2
|
+
var atelierTheme = {
|
|
3
|
+
id: "atelier",
|
|
4
|
+
label: "Atelier",
|
|
5
|
+
deprecated: { replacement: "sable" },
|
|
6
|
+
modes: ["light", "dark"],
|
|
7
|
+
defaultMode: "light",
|
|
8
|
+
fonts: {
|
|
9
|
+
sans: '"Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
|
|
10
|
+
mono: '"Martian Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Courier New", monospace'
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var atelier_default = atelierTheme;
|
|
14
|
+
export {
|
|
15
|
+
atelierTheme,
|
|
16
|
+
atelier_default as default
|
|
17
|
+
};
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
// src/themes/contrast.ts
|
|
2
|
+
function oklchToLinearRgb(L, C, H) {
|
|
3
|
+
const h = H * Math.PI / 180;
|
|
4
|
+
const a = C * Math.cos(h);
|
|
5
|
+
const b = C * Math.sin(h);
|
|
6
|
+
const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;
|
|
7
|
+
const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;
|
|
8
|
+
const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;
|
|
9
|
+
return [
|
|
10
|
+
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
11
|
+
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
12
|
+
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
function hexToLinearRgb(hex) {
|
|
16
|
+
const m = hex.trim().match(/^#([0-9a-f]{6})$/i);
|
|
17
|
+
if (!m) return null;
|
|
18
|
+
const n = Number.parseInt(m[1], 16);
|
|
19
|
+
const toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
20
|
+
return [
|
|
21
|
+
toLinear((n >> 16 & 255) / 255),
|
|
22
|
+
toLinear((n >> 8 & 255) / 255),
|
|
23
|
+
toLinear((n & 255) / 255)
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
var clamp01 = (x) => Math.min(1, Math.max(0, x));
|
|
27
|
+
function linearToSrgb(c) {
|
|
28
|
+
const v = clamp01(c);
|
|
29
|
+
return v <= 31308e-7 ? 12.92 * v : 1.055 * v ** (1 / 2.4) - 0.055;
|
|
30
|
+
}
|
|
31
|
+
function srgbToLinear(c) {
|
|
32
|
+
const v = clamp01(c);
|
|
33
|
+
return v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;
|
|
34
|
+
}
|
|
35
|
+
function compositeOver(fg, surface) {
|
|
36
|
+
if (fg.alpha >= 1) return fg.rgb;
|
|
37
|
+
const a = clamp01(fg.alpha);
|
|
38
|
+
return [0, 1, 2].map((i) => {
|
|
39
|
+
const top = linearToSrgb(fg.rgb[i]);
|
|
40
|
+
const bottom = linearToSrgb(surface[i]);
|
|
41
|
+
return srgbToLinear(top * a + bottom * (1 - a));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function parseColorWithAlpha(value) {
|
|
45
|
+
const v = value.trim();
|
|
46
|
+
if (v.startsWith("#")) {
|
|
47
|
+
const rgb2 = hexToLinearRgb(v.length === 9 ? v.slice(0, 7) : v);
|
|
48
|
+
if (!rgb2) return null;
|
|
49
|
+
const alpha2 = v.length === 9 ? Number.parseInt(v.slice(7), 16) / 255 : 1;
|
|
50
|
+
return { rgb: rgb2, alpha: Number.isNaN(alpha2) ? 1 : alpha2 };
|
|
51
|
+
}
|
|
52
|
+
const m = v.match(
|
|
53
|
+
/^oklch\(\s*([\d.]+)(%?)\s+([\d.]+)\s+([\d.]+)(?:\s*\/\s*([\d.]+)(%?))?\s*\)/i
|
|
54
|
+
);
|
|
55
|
+
if (!m) return null;
|
|
56
|
+
const rgb = oklchToLinearRgb(
|
|
57
|
+
m[2] === "%" ? Number(m[1]) / 100 : Number(m[1]),
|
|
58
|
+
Number(m[3]),
|
|
59
|
+
Number(m[4])
|
|
60
|
+
);
|
|
61
|
+
const alpha = m[5] === void 0 ? 1 : m[6] === "%" ? Number(m[5]) / 100 : Number(m[5]);
|
|
62
|
+
return { rgb, alpha };
|
|
63
|
+
}
|
|
64
|
+
function parseColor(value) {
|
|
65
|
+
return parseColorWithAlpha(value)?.rgb ?? null;
|
|
66
|
+
}
|
|
67
|
+
function luminance([r, g, b]) {
|
|
68
|
+
return 0.2126 * clamp01(r) + 0.7152 * clamp01(g) + 0.0722 * clamp01(b);
|
|
69
|
+
}
|
|
70
|
+
function contrastRatio(a, b) {
|
|
71
|
+
const [l1, l2] = [luminance(a), luminance(b)];
|
|
72
|
+
return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
|
|
73
|
+
}
|
|
74
|
+
var CONTRAST_FLOOR = 4.5;
|
|
75
|
+
var toSrgb = linearToSrgb;
|
|
76
|
+
function apcaLc(ink, surface) {
|
|
77
|
+
const Y = (rgb) => {
|
|
78
|
+
const [r, g, b] = rgb.map(toSrgb);
|
|
79
|
+
const y = 0.2126729 * r ** 2.4 + 0.7151522 * g ** 2.4 + 0.072175 * b ** 2.4;
|
|
80
|
+
return y < 0.022 ? y + (0.022 - y) ** 1.414 : y;
|
|
81
|
+
};
|
|
82
|
+
const Yt = Y(ink);
|
|
83
|
+
const Yb = Y(surface);
|
|
84
|
+
if (Math.abs(Yb - Yt) < 5e-4) return 0;
|
|
85
|
+
let out;
|
|
86
|
+
if (Yb > Yt) {
|
|
87
|
+
const s = (Yb ** 0.56 - Yt ** 0.57) * 1.14;
|
|
88
|
+
out = s < 0.035 ? 0 : s - 0.027;
|
|
89
|
+
} else {
|
|
90
|
+
const s = (Yb ** 0.65 - Yt ** 0.62) * 1.14;
|
|
91
|
+
out = s > -0.035 ? 0 : s + 0.027;
|
|
92
|
+
}
|
|
93
|
+
return out * 100;
|
|
94
|
+
}
|
|
95
|
+
var PERCEPTUAL_FLOOR = 60;
|
|
96
|
+
var WCAG_HARD_FLOOR = 3;
|
|
97
|
+
function evaluateContrast(ink, surface) {
|
|
98
|
+
const ratio = contrastRatio(ink, surface);
|
|
99
|
+
const lc = apcaLc(ink, surface);
|
|
100
|
+
const wcagRatioPasses = ratio >= CONTRAST_FLOOR;
|
|
101
|
+
if (wcagRatioPasses) return { ratio, lc, wcagRatioPasses, passes: true, basis: "wcag" };
|
|
102
|
+
if (Math.abs(lc) >= PERCEPTUAL_FLOOR && ratio >= WCAG_HARD_FLOOR) {
|
|
103
|
+
return { ratio, lc, wcagRatioPasses, passes: true, basis: "perceptual" };
|
|
104
|
+
}
|
|
105
|
+
return { ratio, lc, wcagRatioPasses, passes: false, basis: "none" };
|
|
106
|
+
}
|
|
107
|
+
var NON_TEXT_FLOOR = 3;
|
|
108
|
+
var NON_TEXT_PERCEPTUAL_FLOOR = 30;
|
|
109
|
+
var NON_TEXT_HARD_FLOOR = 2;
|
|
110
|
+
var HAIRLINE_VISIBILITY_FLOOR = 1.1;
|
|
111
|
+
var NON_TEXT_PAIRS = {
|
|
112
|
+
// The chrome hairlines, on every page surface a bounded element sits on.
|
|
113
|
+
border: { surfaces: ["background", "card", "popover", "muted"], tier: "hairline" },
|
|
114
|
+
"border-strong": {
|
|
115
|
+
surfaces: ["background", "card", "popover", "muted"],
|
|
116
|
+
tier: "hairline"
|
|
117
|
+
},
|
|
118
|
+
// A form control's outline IS the control's boundary — the case that names
|
|
119
|
+
// this whole defect class, since an invisible outline makes a text field
|
|
120
|
+
// indistinguishable from the surface it sits on.
|
|
121
|
+
input: { surfaces: ["background", "card", "popover", "muted"], tier: "hairline" },
|
|
122
|
+
// …and where the outline is the WHOLE control, the boundary is the 1.4.11 case
|
|
123
|
+
// with no softer reading: an unchecked checkbox at 1.4:1 is not a quiet
|
|
124
|
+
// checkbox, it is a missing one.
|
|
125
|
+
"control-border": { surfaces: ["background", "card", "popover", "muted"], tier: "control" },
|
|
126
|
+
ring: { surfaces: ["background", "card", "popover", "muted"], tier: "focus" },
|
|
127
|
+
// The sidebar family repeats the set against its own surface, which is exactly
|
|
128
|
+
// why it exists as a family (see token-docs: "tuned against `sidebar`").
|
|
129
|
+
"sidebar-border": { surfaces: ["sidebar"], tier: "hairline" },
|
|
130
|
+
"sidebar-ring": { surfaces: ["sidebar"], tier: "focus" }
|
|
131
|
+
};
|
|
132
|
+
function evaluateNonTextContrast(mark, surface, tier = "focus") {
|
|
133
|
+
const ratio = contrastRatio(mark, surface);
|
|
134
|
+
const lc = apcaLc(mark, surface);
|
|
135
|
+
const wcagRatioPasses = ratio >= NON_TEXT_FLOOR;
|
|
136
|
+
if (tier === "hairline") {
|
|
137
|
+
const passes = ratio >= HAIRLINE_VISIBILITY_FLOOR;
|
|
138
|
+
return { ratio, lc, wcagRatioPasses, passes, basis: wcagRatioPasses ? "wcag" : passes ? "visibility" : "none" };
|
|
139
|
+
}
|
|
140
|
+
if (tier === "control") {
|
|
141
|
+
return { ratio, lc, wcagRatioPasses, passes: wcagRatioPasses, basis: wcagRatioPasses ? "wcag" : "none" };
|
|
142
|
+
}
|
|
143
|
+
if (wcagRatioPasses) return { ratio, lc, wcagRatioPasses, passes: true, basis: "wcag" };
|
|
144
|
+
if (Math.abs(lc) >= NON_TEXT_PERCEPTUAL_FLOOR && ratio >= NON_TEXT_HARD_FLOOR) {
|
|
145
|
+
return { ratio, lc, wcagRatioPasses, passes: true, basis: "perceptual" };
|
|
146
|
+
}
|
|
147
|
+
return { ratio, lc, wcagRatioPasses, passes: false, basis: "none" };
|
|
148
|
+
}
|
|
149
|
+
var GAMUT_EPSILON = 1e-4;
|
|
150
|
+
function isInSrgbGamut(rgb, epsilon = GAMUT_EPSILON) {
|
|
151
|
+
return rgb.every((c) => c >= -epsilon && c <= 1 + epsilon);
|
|
152
|
+
}
|
|
153
|
+
function gamutExcursion(rgb) {
|
|
154
|
+
return Math.max(0, ...rgb.map((c) => Math.max(-c, c - 1)));
|
|
155
|
+
}
|
|
156
|
+
var linearOf = ({ l, c, h }) => oklchToLinearRgb(l, c, h);
|
|
157
|
+
function maxChromaAt(l, h) {
|
|
158
|
+
if (l <= 0 || l >= 1) return 0;
|
|
159
|
+
let lo = 0;
|
|
160
|
+
let hi = 0.4;
|
|
161
|
+
for (let i = 0; i < 24; i++) {
|
|
162
|
+
const mid = (lo + hi) / 2;
|
|
163
|
+
if (isInSrgbGamut(oklchToLinearRgb(l, mid, h))) lo = mid;
|
|
164
|
+
else hi = mid;
|
|
165
|
+
}
|
|
166
|
+
return lo;
|
|
167
|
+
}
|
|
168
|
+
function labelContrast(ink, fill) {
|
|
169
|
+
const a = linearOf(ink);
|
|
170
|
+
const b = linearOf(fill);
|
|
171
|
+
const ratio = contrastRatio(a, b);
|
|
172
|
+
const lc = apcaLc(a, b);
|
|
173
|
+
return { ratio, lc, reads: ratio >= CONTRAST_FLOOR && Math.abs(lc) >= PERCEPTUAL_FLOOR };
|
|
174
|
+
}
|
|
175
|
+
function inkFor(fill, inks) {
|
|
176
|
+
const rank = (ink) => {
|
|
177
|
+
const v = labelContrast(ink, fill);
|
|
178
|
+
return (v.reads ? 2 : v.ratio >= CONTRAST_FLOOR ? 1 : 0) * 1e3 + Math.abs(v.lc);
|
|
179
|
+
};
|
|
180
|
+
return inks.reduce((best, ink) => rank(ink) > rank(best) ? ink : best);
|
|
181
|
+
}
|
|
182
|
+
var FILL_GAMUT_SAFETY = 0.98;
|
|
183
|
+
function fitFillToInk(fill, ink) {
|
|
184
|
+
if (labelContrast(ink, fill).reads) return fill;
|
|
185
|
+
const step = ink.l > fill.l ? -5e-3 : 5e-3;
|
|
186
|
+
let candidate = fill;
|
|
187
|
+
for (let l = fill.l + step; l > 0.05 && l < 0.98; l += step) {
|
|
188
|
+
candidate = { ...fill, l, c: Math.min(fill.c, maxChromaAt(l, fill.h) * FILL_GAMUT_SAFETY) };
|
|
189
|
+
if (labelContrast(ink, candidate).reads) return candidate;
|
|
190
|
+
}
|
|
191
|
+
return candidate;
|
|
192
|
+
}
|
|
193
|
+
function inkPolarity(color, inks) {
|
|
194
|
+
const cost = (ink) => {
|
|
195
|
+
const fitted = fitFillToInk(color, ink);
|
|
196
|
+
const v = labelContrast(ink, fitted);
|
|
197
|
+
return (v.reads ? 0 : 10) + Math.abs(fitted.l - color.l) - Math.abs(v.lc) / 1e4;
|
|
198
|
+
};
|
|
199
|
+
return inks.reduce((best, ink) => cost(ink) < cost(best) ? ink : best);
|
|
200
|
+
}
|
|
201
|
+
function linearRgbToOklch([r, g, b]) {
|
|
202
|
+
const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
|
|
203
|
+
const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
|
|
204
|
+
const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
|
|
205
|
+
const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s;
|
|
206
|
+
const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;
|
|
207
|
+
const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;
|
|
208
|
+
const c = Math.hypot(A, B);
|
|
209
|
+
return { l: L, c, h: c < 1e-4 ? 0 : (Math.atan2(B, A) * 180 / Math.PI + 360) % 360 };
|
|
210
|
+
}
|
|
211
|
+
var formatOklchColor = ({ l, c, h }) => `oklch(${(l * 100).toFixed(1)}% ${c.toFixed(3)} ${h.toFixed(1)})`;
|
|
212
|
+
var BRAND_FILLS = ["primary", "sidebar-primary", "highlight"];
|
|
213
|
+
var STATUS_FILLS = ["destructive", "success", "tone-warning", "tone-info"];
|
|
214
|
+
var LABELLED_FILLS = [...BRAND_FILLS, ...STATUS_FILLS];
|
|
215
|
+
var LABEL_CONTRAST_RULE = "label-contrast";
|
|
216
|
+
function checkLabelledFills(tokens) {
|
|
217
|
+
const findings = [];
|
|
218
|
+
const unmeasured = [];
|
|
219
|
+
let measured = 0;
|
|
220
|
+
const read = (value) => {
|
|
221
|
+
const parsed = value ? parseColorWithAlpha(value) : null;
|
|
222
|
+
return parsed && parsed.alpha >= 1 ? linearRgbToOklch(parsed.rgb) : null;
|
|
223
|
+
};
|
|
224
|
+
for (const mode of ["light", "dark"]) {
|
|
225
|
+
for (const fill of LABELLED_FILLS) {
|
|
226
|
+
const rawFill = tokens[mode][fill];
|
|
227
|
+
const rawInk = tokens[mode][`${fill}-foreground`];
|
|
228
|
+
if (!rawFill && !rawInk) continue;
|
|
229
|
+
const fillColor = read(rawFill);
|
|
230
|
+
const ink = read(rawInk);
|
|
231
|
+
if (!fillColor || !ink) {
|
|
232
|
+
unmeasured.push(`${mode}.${fill}`);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
measured++;
|
|
236
|
+
const verdict = labelContrast(ink, fillColor);
|
|
237
|
+
if (verdict.reads) continue;
|
|
238
|
+
const opposite = ink.l > 0.5 ? { l: 0.2, c: 0.03, h: fillColor.h } : { l: 0.985, c: 0.01, h: fillColor.h };
|
|
239
|
+
const reference = read(tokens.light[fill]) ?? fillColor;
|
|
240
|
+
const chosen = inkPolarity(reference, [ink, { ...opposite, h: reference.h }]);
|
|
241
|
+
const nextInk = chosen === ink ? ink : opposite;
|
|
242
|
+
findings.push({
|
|
243
|
+
mode,
|
|
244
|
+
fill,
|
|
245
|
+
ratio: verdict.ratio,
|
|
246
|
+
lc: verdict.lc,
|
|
247
|
+
suggestion: { fill: formatOklchColor(fitFillToInk(fillColor, nextInk)), ink: formatOklchColor(nextInk) }
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return { findings, measured, unmeasured };
|
|
252
|
+
}
|
|
253
|
+
export {
|
|
254
|
+
BRAND_FILLS,
|
|
255
|
+
CONTRAST_FLOOR,
|
|
256
|
+
GAMUT_EPSILON,
|
|
257
|
+
HAIRLINE_VISIBILITY_FLOOR,
|
|
258
|
+
LABELLED_FILLS,
|
|
259
|
+
LABEL_CONTRAST_RULE,
|
|
260
|
+
NON_TEXT_FLOOR,
|
|
261
|
+
NON_TEXT_HARD_FLOOR,
|
|
262
|
+
NON_TEXT_PAIRS,
|
|
263
|
+
NON_TEXT_PERCEPTUAL_FLOOR,
|
|
264
|
+
PERCEPTUAL_FLOOR,
|
|
265
|
+
STATUS_FILLS,
|
|
266
|
+
WCAG_HARD_FLOOR,
|
|
267
|
+
apcaLc,
|
|
268
|
+
checkLabelledFills,
|
|
269
|
+
compositeOver,
|
|
270
|
+
contrastRatio,
|
|
271
|
+
evaluateContrast,
|
|
272
|
+
evaluateNonTextContrast,
|
|
273
|
+
fitFillToInk,
|
|
274
|
+
gamutExcursion,
|
|
275
|
+
hexToLinearRgb,
|
|
276
|
+
inkFor,
|
|
277
|
+
inkPolarity,
|
|
278
|
+
isInSrgbGamut,
|
|
279
|
+
labelContrast,
|
|
280
|
+
linearRgbToOklch,
|
|
281
|
+
linearToSrgb,
|
|
282
|
+
luminance,
|
|
283
|
+
maxChromaAt,
|
|
284
|
+
oklchToLinearRgb,
|
|
285
|
+
parseColor,
|
|
286
|
+
parseColorWithAlpha,
|
|
287
|
+
srgbToLinear
|
|
288
|
+
};
|
|
@@ -295,12 +295,12 @@
|
|
|
295
295
|
[data-sable-theme="ember"],
|
|
296
296
|
[data-sable-theme="ember"] .dark,
|
|
297
297
|
[data-sable-theme="ember"] .light {
|
|
298
|
-
--theme-art-1: oklch(from var(--primary) 0.17 0.03 calc(h + 20));
|
|
299
|
-
--theme-art-2: var(--primary);
|
|
300
|
-
--theme-art-3: oklch(from var(--primary) 0.68 0.21 calc(h + 15));
|
|
301
|
-
--theme-art-4: oklch(from var(--primary) 0.88 0.15 calc(h + 50));
|
|
302
|
-
--theme-art-5: oklch(from var(--primary) 0.38 0.15 calc(h - 5));
|
|
303
|
-
--theme-art-ground: oklch(from var(--primary) 0.14 0.02 calc(h + 20));
|
|
298
|
+
--theme-art-1: oklch(from var(--theme-art-brand, var(--primary)) 0.17 0.03 calc(h + 20));
|
|
299
|
+
--theme-art-2: var(--theme-art-brand, var(--primary));
|
|
300
|
+
--theme-art-3: oklch(from var(--theme-art-brand, var(--primary)) 0.68 0.21 calc(h + 15));
|
|
301
|
+
--theme-art-4: oklch(from var(--theme-art-brand, var(--primary)) 0.88 0.15 calc(h + 50));
|
|
302
|
+
--theme-art-5: oklch(from var(--theme-art-brand, var(--primary)) 0.38 0.15 calc(h - 5));
|
|
303
|
+
--theme-art-ground: oklch(from var(--theme-art-brand, var(--primary)) 0.14 0.02 calc(h + 20));
|
|
304
304
|
--theme-art-warp: 0.95;
|
|
305
305
|
--theme-art-softness: 0.72;
|
|
306
306
|
--theme-art-grain: 0;
|
|
@@ -1 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
// src/themes/ember/index.ts
|
|
2
|
+
var emberTheme = {
|
|
3
|
+
id: "ember",
|
|
4
|
+
label: "Ember",
|
|
5
|
+
modes: ["dark", "light"],
|
|
6
|
+
defaultMode: "dark",
|
|
7
|
+
fonts: {
|
|
8
|
+
sans: '"Work Sans", sans-serif',
|
|
9
|
+
mono: '"DM Mono", ui-monospace, monospace'
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var ember_default = emberTheme;
|
|
13
|
+
export {
|
|
14
|
+
ember_default as default,
|
|
15
|
+
emberTheme
|
|
16
|
+
};
|
package/dist/themes/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AnyThemeId, D as DEFAULT_THEME_ID, S as SABLE_COLOR_STORAGE_KEY, a as SABLE_THEME_ATTRIBUTE, b as SABLE_THEME_STORAGE_KEY, c as SableColorMode, d as SableThemeContextValue, e as SableThemePreference, f as SableThemeProvider, g as SableThemeProviderProps, T as ThemeId, h as applySableColorMode, i as applySableTheme, j as buildThemeManifestById, k as defaultThemeId, l as featuredThemeManifests, m as getThemeManifest, n as isKnownThemeId, o as isThemeId, t as themeIds, p as themeManifestById, q as themeManifests, u as useSableTheme } from '../theme-provider-
|
|
1
|
+
export { A as AnyThemeId, D as DEFAULT_THEME_ID, S as SABLE_COLOR_STORAGE_KEY, a as SABLE_THEME_ATTRIBUTE, b as SABLE_THEME_STORAGE_KEY, c as SableColorMode, d as SableThemeContextValue, e as SableThemePreference, f as SableThemeProvider, g as SableThemeProviderProps, T as ThemeId, h as applySableColorMode, i as applySableTheme, j as buildThemeManifestById, k as defaultThemeId, l as featuredThemeManifests, m as getThemeManifest, n as isKnownThemeId, o as isThemeId, t as themeIds, p as themeManifestById, q as themeManifests, u as useSableTheme } from '../theme-provider-S0NVJs2Y.js';
|
|
2
2
|
export { atelierTheme } from './atelier/index.js';
|
|
3
3
|
export { default as emberTheme } from './ember/index.js';
|
|
4
4
|
export { default as meridianTheme } from './meridian/index.js';
|
package/dist/themes/index.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export { emberTheme } from '../chunk-L4IEIQQA.js';
|
|
5
|
-
export { sableTheme } from '../chunk-EHH4MHO6.js';
|
|
6
|
-
export { poppyTheme } from '../chunk-ADLLDWLW.js';
|
|
7
|
-
export { meridianTheme } from '../chunk-K7RUHUGC.js';
|
|
8
|
-
export { atelierTheme } from '../chunk-C4Z3CF54.js';
|
|
1
|
+
// src/themes/index.ts
|
|
2
|
+
export * from "./registry.js";
|
|
3
|
+
export * from "./theme-provider.js";
|
|
@@ -1 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
// src/themes/meridian/index.ts
|
|
2
|
+
var meridianTheme = {
|
|
3
|
+
id: "meridian",
|
|
4
|
+
label: "Meridian",
|
|
5
|
+
modes: ["light", "dark"],
|
|
6
|
+
defaultMode: "light",
|
|
7
|
+
fonts: {
|
|
8
|
+
sans: '"Instrument Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
|
|
9
|
+
mono: '"Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Courier New", monospace'
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var meridian_default = meridianTheme;
|
|
13
|
+
export {
|
|
14
|
+
meridian_default as default,
|
|
15
|
+
meridianTheme
|
|
16
|
+
};
|
|
@@ -1 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
// src/themes/poppy/index.ts
|
|
2
|
+
var poppyTheme = {
|
|
3
|
+
id: "poppy",
|
|
4
|
+
label: "Poppy",
|
|
5
|
+
modes: ["light", "dark"],
|
|
6
|
+
defaultMode: "light",
|
|
7
|
+
fonts: {
|
|
8
|
+
sans: '"Albert Sans", ui-sans-serif, system-ui, sans-serif',
|
|
9
|
+
mono: '"Red Hat Mono", ui-monospace, monospace',
|
|
10
|
+
display: '"Unbounded", ui-sans-serif, system-ui, sans-serif'
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var poppy_default = poppyTheme;
|
|
14
|
+
export {
|
|
15
|
+
poppy_default as default,
|
|
16
|
+
poppyTheme
|
|
17
|
+
};
|
|
@@ -1 +1,17 @@
|
|
|
1
|
-
|
|
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
|
+
export {
|
|
15
|
+
prism_default as default,
|
|
16
|
+
prismTheme
|
|
17
|
+
};
|
|
@@ -204,8 +204,8 @@
|
|
|
204
204
|
--theme-art-1: oklch(from var(--tone-edition) 0.83 0.1 h);
|
|
205
205
|
--theme-art-2: oklch(from var(--tone-collectible) 0.68 0.16 h);
|
|
206
206
|
--theme-art-3: oklch(from var(--tone-info) 0.82 0.09 h);
|
|
207
|
-
--theme-art-4: oklch(from var(--primary) 0.55 0.2 h);
|
|
208
|
-
--theme-art-ground: oklch(from var(--primary) 0.35 0.14 h);
|
|
207
|
+
--theme-art-4: oklch(from var(--theme-art-brand, var(--primary)) 0.55 0.2 h);
|
|
208
|
+
--theme-art-ground: oklch(from var(--theme-art-brand, var(--primary)) 0.35 0.14 h);
|
|
209
209
|
--theme-art-warp: 0.45;
|
|
210
210
|
--theme-art-softness: 1;
|
|
211
211
|
--theme-art-grain: 0;
|