@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.
Files changed (642) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +315 -0
  3. package/CONTRIBUTING.md +16 -10
  4. package/DESIGN.md +3 -3
  5. package/README.md +3 -3
  6. package/bin/sable-lint.mjs +18 -0
  7. package/bin/sable.mjs +470 -62
  8. package/dist/blocks/api-keys-block.js +44 -0
  9. package/dist/blocks/api-keys-block.meta.js +21 -0
  10. package/dist/blocks/chat-thread-block.js +17 -0
  11. package/dist/blocks/chat-thread-block.meta.js +20 -0
  12. package/dist/blocks/command-palette-block.js +24 -0
  13. package/dist/blocks/command-palette-block.meta.js +21 -0
  14. package/dist/blocks/cta-band-block.js +27 -0
  15. package/dist/blocks/cta-band-block.meta.js +20 -0
  16. package/dist/blocks/danger-zone-block.js +39 -0
  17. package/dist/blocks/danger-zone-block.meta.js +21 -0
  18. package/dist/blocks/device-comparison-block.js +69 -0
  19. package/dist/blocks/device-comparison-block.meta.js +21 -0
  20. package/dist/blocks/event-card-block.js +40 -0
  21. package/dist/blocks/event-card-block.meta.js +21 -0
  22. package/dist/blocks/faq-block.js +38 -0
  23. package/dist/blocks/faq-block.meta.js +20 -0
  24. package/dist/blocks/feature-grid-block.js +38 -0
  25. package/dist/blocks/feature-grid-block.meta.js +21 -0
  26. package/dist/blocks/feedback-form-block.js +30 -0
  27. package/dist/blocks/feedback-form-block.meta.js +21 -0
  28. package/dist/blocks/goal-progress-block.js +24 -0
  29. package/dist/blocks/goal-progress-block.meta.js +21 -0
  30. package/dist/blocks/hero-block.js +33 -0
  31. package/dist/blocks/hero-block.meta.js +21 -0
  32. package/dist/blocks/index.js +162 -1964
  33. package/dist/blocks/invite-team-block.js +36 -0
  34. package/dist/blocks/invite-team-block.meta.js +20 -0
  35. package/dist/blocks/invoice-history-block.js +41 -0
  36. package/dist/blocks/invoice-history-block.meta.js +21 -0
  37. package/dist/blocks/kpi-sparkline-block.js +29 -0
  38. package/dist/blocks/kpi-sparkline-block.meta.js +20 -0
  39. package/dist/blocks/media-player-block.js +68 -0
  40. package/dist/blocks/media-player-block.meta.js +21 -0
  41. package/dist/blocks/newsletter-block.js +35 -0
  42. package/dist/blocks/newsletter-block.meta.js +21 -0
  43. package/dist/blocks/not-found-block.js +27 -0
  44. package/dist/blocks/not-found-block.meta.js +20 -0
  45. package/dist/blocks/notification-list-block.js +32 -0
  46. package/dist/blocks/notification-list-block.meta.js +21 -0
  47. package/dist/blocks/notification-settings-block.js +25 -0
  48. package/dist/blocks/notification-settings-block.meta.js +20 -0
  49. package/dist/blocks/order-tracking-block.js +26 -0
  50. package/dist/blocks/order-tracking-block.meta.js +20 -0
  51. package/dist/blocks/pricing-card-block.js +46 -0
  52. package/dist/blocks/pricing-card-block.meta.js +21 -0
  53. package/dist/blocks/pricing-table-block.js +88 -0
  54. package/dist/blocks/pricing-table-block.meta.js +20 -0
  55. package/dist/blocks/product-card-block.js +26 -0
  56. package/dist/blocks/product-card-block.meta.js +21 -0
  57. package/dist/blocks/profile-card-block.js +58 -0
  58. package/dist/blocks/profile-card-block.meta.js +21 -0
  59. package/dist/blocks/profile-form-block.js +70 -0
  60. package/dist/blocks/profile-form-block.meta.js +21 -0
  61. package/dist/blocks/revenue-breakdown-block.js +38 -0
  62. package/dist/blocks/revenue-breakdown-block.meta.js +21 -0
  63. package/dist/blocks/sign-in-block.js +38 -0
  64. package/dist/blocks/sign-in-block.meta.js +21 -0
  65. package/dist/blocks/sign-up-block.js +48 -0
  66. package/dist/blocks/sign-up-block.meta.js +21 -0
  67. package/dist/blocks/site-footer-block.js +54 -0
  68. package/dist/blocks/site-footer-block.meta.js +20 -0
  69. package/dist/blocks/stat-row-block.js +28 -0
  70. package/dist/blocks/stat-row-block.meta.js +21 -0
  71. package/dist/blocks/steps-block.js +37 -0
  72. package/dist/blocks/steps-block.meta.js +20 -0
  73. package/dist/blocks/task-list-block.js +52 -0
  74. package/dist/blocks/task-list-block.meta.js +21 -0
  75. package/dist/blocks/team-members-block.js +49 -0
  76. package/dist/blocks/team-members-block.meta.js +21 -0
  77. package/dist/blocks/testimonial-block.js +49 -0
  78. package/dist/blocks/testimonial-block.meta.js +20 -0
  79. package/dist/blocks/traffic-sources-block.js +39 -0
  80. package/dist/blocks/traffic-sources-block.meta.js +21 -0
  81. package/dist/blocks/traffic-trend-block.js +61 -0
  82. package/dist/blocks/traffic-trend-block.meta.js +21 -0
  83. package/dist/blocks/upload-list-block.js +39 -0
  84. package/dist/blocks/upload-list-block.meta.js +21 -0
  85. package/dist/blocks/verify-code-block.js +28 -0
  86. package/dist/blocks/verify-code-block.meta.js +21 -0
  87. package/dist/blocks/wallet-block.js +48 -0
  88. package/dist/blocks/wallet-block.meta.js +21 -0
  89. package/dist/components/accordion/accordion.js +63 -0
  90. package/dist/components/accordion/accordion.meta.js +155 -0
  91. package/dist/components/accordion/index.js +15 -0
  92. package/dist/components/app-header/app-header.js +30 -0
  93. package/dist/components/app-header/app-header.meta.js +88 -0
  94. package/dist/components/app-header/index.js +7 -0
  95. package/dist/components/app-shell/app-shell-dock.js +37 -0
  96. package/dist/components/app-shell/app-shell.js +67 -0
  97. package/dist/components/app-shell/app-shell.meta.js +176 -0
  98. package/dist/components/app-shell/index.js +7 -0
  99. package/dist/components/area-chart/area-chart.js +10 -0
  100. package/dist/components/area-chart/area-chart.meta.js +218 -0
  101. package/dist/components/area-chart/index.js +7 -0
  102. package/dist/components/attachment/attachment.js +176 -0
  103. package/dist/components/attachment/attachment.meta.js +179 -0
  104. package/dist/components/attachment/attachment.variants.js +47 -0
  105. package/dist/components/attachment/index.js +7 -0
  106. package/dist/components/avatar/avatar.js +192 -0
  107. package/dist/components/avatar/avatar.meta.js +233 -0
  108. package/dist/components/avatar/avatar.variants.js +44 -0
  109. package/dist/components/avatar/index.js +22 -0
  110. package/dist/components/badge/badge.js +26 -0
  111. package/dist/components/badge/badge.meta.js +171 -0
  112. package/dist/components/badge/badge.variants.js +103 -0
  113. package/dist/components/badge/index.js +11 -0
  114. package/dist/components/banner/banner.js +76 -0
  115. package/dist/components/banner/banner.meta.js +172 -0
  116. package/dist/components/banner/banner.variants.js +44 -0
  117. package/dist/components/banner/index.js +9 -0
  118. package/dist/components/bar-chart/bar-chart.js +10 -0
  119. package/dist/components/bar-chart/bar-chart.meta.js +245 -0
  120. package/dist/components/bar-chart/index.js +7 -0
  121. package/dist/components/bottom-nav/bottom-nav.js +63 -0
  122. package/dist/components/bottom-nav/bottom-nav.meta.js +95 -0
  123. package/dist/components/bottom-nav/index.js +11 -0
  124. package/dist/components/breadcrumbs/breadcrumbs.js +90 -0
  125. package/dist/components/breadcrumbs/breadcrumbs.meta.js +111 -0
  126. package/dist/components/breadcrumbs/index.js +17 -0
  127. package/dist/components/browser/browser.js +39 -0
  128. package/dist/components/browser/browser.meta.js +80 -0
  129. package/dist/components/browser/index.js +7 -0
  130. package/dist/components/bubble/bubble.js +110 -0
  131. package/dist/components/bubble/bubble.meta.js +158 -0
  132. package/dist/components/bubble/bubble.variants.js +90 -0
  133. package/dist/components/bubble/index.js +13 -0
  134. package/dist/components/button/button.js +87 -0
  135. package/dist/components/button/button.meta.js +302 -0
  136. package/dist/components/button/button.variants.js +137 -0
  137. package/dist/components/button/index.js +9 -0
  138. package/dist/components/calendar/calendar.js +89 -0
  139. package/dist/components/calendar/calendar.meta.js +136 -0
  140. package/dist/components/calendar/index.js +7 -0
  141. package/dist/components/card/card.js +203 -0
  142. package/dist/components/card/card.meta.js +212 -0
  143. package/dist/components/card/index.js +23 -0
  144. package/dist/components/carousel/carousel.js +428 -0
  145. package/dist/components/carousel/carousel.meta.js +100 -0
  146. package/dist/components/carousel/index.js +7 -0
  147. package/dist/components/chat-composer/chat-composer.js +174 -0
  148. package/dist/components/chat-composer/chat-composer.meta.js +241 -0
  149. package/dist/components/chat-composer/chat-composer.variants.js +17 -0
  150. package/dist/components/chat-composer/index.js +7 -0
  151. package/dist/components/checkbox/checkbox-mark.js +28 -0
  152. package/dist/components/checkbox/checkbox.js +30 -0
  153. package/dist/components/checkbox/checkbox.meta.js +127 -0
  154. package/dist/components/checkbox/index.js +7 -0
  155. package/dist/components/checkbox-card/checkbox-card.js +94 -0
  156. package/dist/components/checkbox-card/checkbox-card.meta.js +154 -0
  157. package/dist/components/checkbox-card/checkbox-card.variants.js +43 -0
  158. package/dist/components/checkbox-card/index.js +11 -0
  159. package/dist/components/code/code.js +19 -0
  160. package/dist/components/code/code.meta.js +71 -0
  161. package/dist/components/code/index.js +7 -0
  162. package/dist/components/code-block/code-block.js +84 -0
  163. package/dist/components/code-block/code-block.meta.js +103 -0
  164. package/dist/components/code-block/index.js +8 -0
  165. package/dist/components/collapsible/collapsible.js +38 -0
  166. package/dist/components/collapsible/collapsible.meta.js +117 -0
  167. package/dist/components/collapsible/index.js +15 -0
  168. package/dist/components/color-field/color-field.js +293 -0
  169. package/dist/components/color-field/color-field.meta.js +142 -0
  170. package/dist/components/color-field/color.js +69 -0
  171. package/dist/components/color-field/index.js +15 -0
  172. package/dist/components/combobox/combobox.js +486 -0
  173. package/dist/components/combobox/combobox.meta.js +217 -0
  174. package/dist/components/combobox/index.js +37 -0
  175. package/dist/components/command-menu/command-menu-trigger.js +122 -0
  176. package/dist/components/command-menu/command-menu.js +433 -0
  177. package/dist/components/command-menu/command-menu.meta.js +279 -0
  178. package/dist/components/command-menu/index.js +21 -0
  179. package/dist/components/context-card/context-card.js +62 -0
  180. package/dist/components/context-card/context-card.meta.js +106 -0
  181. package/dist/components/context-card/index.js +17 -0
  182. package/dist/components/context-menu/context-menu.js +92 -0
  183. package/dist/components/context-menu/context-menu.meta.js +138 -0
  184. package/dist/components/context-menu/index.js +23 -0
  185. package/dist/components/data-table/data-table.js +142 -0
  186. package/dist/components/data-table/data-table.meta.js +146 -0
  187. package/dist/components/data-table/index.js +9 -0
  188. package/dist/components/date-picker/date-picker.js +196 -0
  189. package/dist/components/date-picker/date-picker.meta.js +164 -0
  190. package/dist/components/date-picker/index.js +7 -0
  191. package/dist/components/date-tile/date-tile.js +29 -0
  192. package/dist/components/date-tile/date-tile.meta.js +72 -0
  193. package/dist/components/date-tile/index.js +7 -0
  194. package/dist/components/destructive-action-modal/destructive-action-modal.js +130 -0
  195. package/dist/components/destructive-action-modal/destructive-action-modal.meta.js +136 -0
  196. package/dist/components/destructive-action-modal/index.js +9 -0
  197. package/dist/components/dialog/dialog.js +207 -0
  198. package/dist/components/dialog/dialog.meta.js +239 -0
  199. package/dist/components/dialog/index.js +45 -0
  200. package/dist/components/disclosure-picker/disclosure-picker.js +417 -0
  201. package/dist/components/disclosure-picker/disclosure-picker.meta.js +213 -0
  202. package/dist/components/disclosure-picker/index.js +21 -0
  203. package/dist/components/empty-state/empty-state.js +52 -0
  204. package/dist/components/empty-state/empty-state.meta.js +158 -0
  205. package/dist/components/empty-state/index.js +7 -0
  206. package/dist/components/entity/entity.js +70 -0
  207. package/dist/components/entity/entity.meta.js +108 -0
  208. package/dist/components/entity/entity.variants.js +16 -0
  209. package/dist/components/entity/index.js +7 -0
  210. package/dist/components/feedback/feedback.js +93 -0
  211. package/dist/components/feedback/feedback.meta.js +109 -0
  212. package/dist/components/feedback/index.js +7 -0
  213. package/dist/components/fieldset/fieldset.js +80 -0
  214. package/dist/components/fieldset/fieldset.meta.js +160 -0
  215. package/dist/components/fieldset/index.js +17 -0
  216. package/dist/components/file-dropzone/file-dropzone.js +193 -0
  217. package/dist/components/file-dropzone/file-dropzone.meta.js +210 -0
  218. package/dist/components/file-dropzone/file-dropzone.variants.js +26 -0
  219. package/dist/components/file-dropzone/index.js +13 -0
  220. package/dist/components/font-picker/font-picker.js +77 -0
  221. package/dist/components/font-picker/font-picker.meta.js +119 -0
  222. package/dist/components/font-picker/index.js +7 -0
  223. package/dist/components/form/form.js +145 -0
  224. package/dist/components/form/form.meta.js +142 -0
  225. package/dist/components/form/index.js +11 -0
  226. package/dist/components/gliding-highlight/gliding-highlight.js +50 -0
  227. package/dist/components/gliding-highlight/gliding-highlight.meta.js +135 -0
  228. package/dist/components/gliding-highlight/index.js +9 -0
  229. package/dist/components/gradient-art/gradient-art.js +168 -0
  230. package/dist/components/gradient-art/gradient-art.meta.js +81 -0
  231. package/dist/components/gradient-art/index.js +7 -0
  232. package/dist/components/gradient-art/renderer.js +336 -0
  233. package/dist/components/inline-status/index.js +7 -0
  234. package/dist/components/inline-status/inline-status.js +33 -0
  235. package/dist/components/inline-status/inline-status.meta.js +83 -0
  236. package/dist/components/inline-status/inline-status.variants.js +18 -0
  237. package/dist/components/input/index.js +7 -0
  238. package/dist/components/input/input.js +33 -0
  239. package/dist/components/input/input.meta.js +155 -0
  240. package/dist/components/kbd/index.js +8 -0
  241. package/dist/components/kbd/kbd.js +54 -0
  242. package/dist/components/kbd/kbd.meta.js +95 -0
  243. package/dist/components/label/index.js +7 -0
  244. package/dist/components/label/label.js +51 -0
  245. package/dist/components/label/label.meta.js +98 -0
  246. package/dist/components/line-chart/index.js +7 -0
  247. package/dist/components/line-chart/line-chart.js +10 -0
  248. package/dist/components/line-chart/line-chart.meta.js +222 -0
  249. package/dist/components/marker/index.js +7 -0
  250. package/dist/components/marker/marker.js +39 -0
  251. package/dist/components/marker/marker.meta.js +132 -0
  252. package/dist/components/marker/marker.variants.js +25 -0
  253. package/dist/components/marquee/index.js +7 -0
  254. package/dist/components/marquee/marquee.js +146 -0
  255. package/dist/components/marquee/marquee.meta.js +106 -0
  256. package/dist/components/media-image/index.js +7 -0
  257. package/dist/components/media-image/media-image.js +56 -0
  258. package/dist/components/media-image/media-image.meta.js +92 -0
  259. package/dist/components/media-tile/index.js +7 -0
  260. package/dist/components/media-tile/media-tile.js +135 -0
  261. package/dist/components/media-tile/media-tile.meta.js +133 -0
  262. package/dist/components/media-tile/media-tile.variants.js +48 -0
  263. package/dist/components/menu/index.js +33 -0
  264. package/dist/components/menu/menu.js +168 -0
  265. package/dist/components/menu/menu.meta.js +176 -0
  266. package/dist/components/message/index.js +7 -0
  267. package/dist/components/message/message.js +83 -0
  268. package/dist/components/message/message.meta.js +150 -0
  269. package/dist/components/message/message.variants.js +41 -0
  270. package/dist/components/message-scroller/index.js +9 -0
  271. package/dist/components/message-scroller/message-scroller.js +300 -0
  272. package/dist/components/message-scroller/message-scroller.meta.js +172 -0
  273. package/dist/components/meter/index.js +20 -0
  274. package/dist/components/meter/meter.js +112 -0
  275. package/dist/components/meter/meter.meta.js +227 -0
  276. package/dist/components/meter/meter.variants.js +61 -0
  277. package/dist/components/middle-truncate/index.js +7 -0
  278. package/dist/components/middle-truncate/middle-truncate.js +28 -0
  279. package/dist/components/middle-truncate/middle-truncate.meta.js +77 -0
  280. package/dist/components/note/index.js +9 -0
  281. package/dist/components/note/note.js +73 -0
  282. package/dist/components/note/note.meta.js +112 -0
  283. package/dist/components/note/note.variants.js +22 -0
  284. package/dist/components/notification-badge/index.js +15 -0
  285. package/dist/components/notification-badge/notification-badge.js +48 -0
  286. package/dist/components/notification-badge/notification-badge.meta.js +107 -0
  287. package/dist/components/notification-badge/notification-badge.variants.js +57 -0
  288. package/dist/components/number-field/index.js +7 -0
  289. package/dist/components/number-field/number-field.js +70 -0
  290. package/dist/components/number-field/number-field.meta.js +109 -0
  291. package/dist/components/otp-field/index.js +7 -0
  292. package/dist/components/otp-field/otp-field.js +70 -0
  293. package/dist/components/otp-field/otp-field.meta.js +197 -0
  294. package/dist/components/overflow-menu/index.js +7 -0
  295. package/dist/components/overflow-menu/overflow-menu.js +26 -0
  296. package/dist/components/overflow-menu/overflow-menu.meta.js +100 -0
  297. package/dist/components/page-header/index.js +7 -0
  298. package/dist/components/page-header/page-header.js +34 -0
  299. package/dist/components/page-header/page-header.meta.js +104 -0
  300. package/dist/components/page-loader/index.js +7 -0
  301. package/dist/components/page-loader/page-loader.js +37 -0
  302. package/dist/components/page-loader/page-loader.meta.js +85 -0
  303. package/dist/components/pagination/index.js +7 -0
  304. package/dist/components/pagination/pagination.js +105 -0
  305. package/dist/components/pagination/pagination.meta.js +141 -0
  306. package/dist/components/panel-group/index.js +10 -0
  307. package/dist/components/panel-group/panel-group.js +168 -0
  308. package/dist/components/panel-group/panel-group.meta.js +153 -0
  309. package/dist/components/panel-section/index.js +9 -0
  310. package/dist/components/panel-section/panel-section.js +115 -0
  311. package/dist/components/panel-section/panel-section.meta.js +156 -0
  312. package/dist/components/phone/index.js +7 -0
  313. package/dist/components/phone/phone.js +50 -0
  314. package/dist/{chunk-KFZ43RKU.js → components/phone/phone.meta.js} +3 -50
  315. package/dist/{chunk-NEQNXI2G.js → components/phone/status-icons.js} +4 -4
  316. package/dist/components/pie-chart/index.js +7 -0
  317. package/dist/components/pie-chart/pie-chart.js +191 -0
  318. package/dist/components/pie-chart/pie-chart.meta.js +210 -0
  319. package/dist/components/pill/index.js +9 -0
  320. package/dist/components/pill/pill.js +24 -0
  321. package/dist/components/pill/pill.meta.js +108 -0
  322. package/dist/components/pill/pill.variants.js +65 -0
  323. package/dist/components/popover/index.js +23 -0
  324. package/dist/components/popover/popover.js +100 -0
  325. package/dist/components/popover/popover.meta.js +136 -0
  326. package/dist/components/progress/index.js +19 -0
  327. package/dist/components/progress/progress.js +70 -0
  328. package/dist/components/progress/progress.meta.js +171 -0
  329. package/dist/components/progress/progress.variants.js +17 -0
  330. package/dist/components/radar-chart/index.js +7 -0
  331. package/dist/components/radar-chart/radar-chart.js +161 -0
  332. package/dist/components/radar-chart/radar-chart.meta.js +204 -0
  333. package/dist/components/radial-chart/index.js +7 -0
  334. package/dist/components/radial-chart/radial-chart.js +175 -0
  335. package/dist/components/radial-chart/radial-chart.meta.js +216 -0
  336. package/dist/components/radio/index.js +8 -0
  337. package/dist/components/radio/radio.js +39 -0
  338. package/dist/components/radio/radio.meta.js +104 -0
  339. package/dist/components/radio-card/index.js +7 -0
  340. package/dist/components/radio-card/radio-card.js +81 -0
  341. package/dist/components/radio-card/radio-card.meta.js +144 -0
  342. package/dist/components/radio-card/radio-card.variants.js +43 -0
  343. package/dist/components/relative-time/index.js +7 -0
  344. package/dist/components/relative-time/relative-time.js +47 -0
  345. package/dist/components/relative-time/relative-time.meta.js +77 -0
  346. package/dist/components/scroller/index.js +7 -0
  347. package/dist/components/scroller/scroller.js +111 -0
  348. package/dist/components/scroller/scroller.meta.js +118 -0
  349. package/dist/components/scrub-field/index.js +7 -0
  350. package/dist/components/scrub-field/scrub-field.js +124 -0
  351. package/dist/components/scrub-field/scrub-field.meta.js +139 -0
  352. package/dist/components/search-input/index.js +7 -0
  353. package/dist/components/search-input/search-input.js +91 -0
  354. package/dist/components/search-input/search-input.meta.js +129 -0
  355. package/dist/components/section-header/index.js +7 -0
  356. package/dist/components/section-header/section-header.js +39 -0
  357. package/dist/components/section-header/section-header.meta.js +174 -0
  358. package/dist/components/segmented-bar/index.js +14 -0
  359. package/dist/components/segmented-bar/segmented-bar.js +26 -0
  360. package/dist/components/segmented-bar/segmented-bar.meta.js +108 -0
  361. package/dist/components/segmented-bar/segmented-bar.variants.js +39 -0
  362. package/dist/components/select/index.js +25 -0
  363. package/dist/components/select/select.js +191 -0
  364. package/dist/components/select/select.meta.js +189 -0
  365. package/dist/components/separator/index.js +7 -0
  366. package/dist/components/separator/separator.js +42 -0
  367. package/dist/components/separator/separator.meta.js +84 -0
  368. package/dist/components/settings-menu/index.js +11 -0
  369. package/dist/components/settings-menu/settings-menu.js +101 -0
  370. package/dist/components/settings-menu/settings-menu.meta.js +177 -0
  371. package/dist/components/settings-menu/settings-menu.variants.js +15 -0
  372. package/dist/components/sheet/index.js +29 -0
  373. package/dist/components/sheet/sheet.js +121 -0
  374. package/dist/components/sheet/sheet.meta.js +167 -0
  375. package/dist/components/sheet/sheet.variants.js +21 -0
  376. package/dist/components/show-more/index.js +7 -0
  377. package/dist/components/show-more/show-more.js +87 -0
  378. package/dist/components/show-more/show-more.meta.js +79 -0
  379. package/dist/components/side-nav/index.js +13 -0
  380. package/dist/components/side-nav/side-nav.js +75 -0
  381. package/dist/components/side-nav/side-nav.meta.js +139 -0
  382. package/dist/components/side-nav/side-nav.variants.js +34 -0
  383. package/dist/components/sidebar/index.js +21 -0
  384. package/dist/components/sidebar/sidebar.js +196 -0
  385. package/dist/components/sidebar/sidebar.meta.js +118 -0
  386. package/dist/components/skeleton/index.js +7 -0
  387. package/dist/components/skeleton/skeleton.js +16 -0
  388. package/dist/components/skeleton/skeleton.meta.js +90 -0
  389. package/dist/components/slider/index.js +21 -0
  390. package/dist/components/slider/slider.js +115 -0
  391. package/dist/components/slider/slider.meta.js +214 -0
  392. package/dist/components/sparkline/index.js +7 -0
  393. package/dist/components/sparkline/sparkline.js +84 -0
  394. package/dist/components/sparkline/sparkline.meta.js +147 -0
  395. package/dist/components/spinner/index.js +7 -0
  396. package/dist/components/spinner/spinner.js +59 -0
  397. package/dist/components/spinner/spinner.meta.js +118 -0
  398. package/dist/components/status-bar/index.js +9 -0
  399. package/dist/components/status-bar/status-bar.js +40 -0
  400. package/dist/components/status-bar/status-bar.meta.js +117 -0
  401. package/dist/components/status-dot/index.js +9 -0
  402. package/dist/components/status-dot/status-dot.js +40 -0
  403. package/dist/components/status-dot/status-dot.meta.js +113 -0
  404. package/dist/components/status-dot/status-dot.variants.js +28 -0
  405. package/dist/components/stepper/index.js +17 -0
  406. package/dist/components/stepper/stepper.js +161 -0
  407. package/dist/components/stepper/stepper.meta.js +190 -0
  408. package/dist/components/stepper/stepper.variants.js +72 -0
  409. package/dist/components/streaming-text/index.js +7 -0
  410. package/dist/components/streaming-text/streaming-text.js +55 -0
  411. package/dist/components/streaming-text/streaming-text.meta.js +147 -0
  412. package/dist/components/switch/index.js +7 -0
  413. package/dist/components/switch/switch.js +26 -0
  414. package/dist/components/switch/switch.meta.js +133 -0
  415. package/dist/components/table/index.js +23 -0
  416. package/dist/components/table/table.js +117 -0
  417. package/dist/components/table/table.meta.js +143 -0
  418. package/dist/components/tabs/index.js +17 -0
  419. package/dist/components/tabs/tabs.js +58 -0
  420. package/dist/components/tabs/tabs.meta.js +120 -0
  421. package/dist/components/textarea/index.js +7 -0
  422. package/dist/components/textarea/textarea.js +38 -0
  423. package/dist/components/textarea/textarea.meta.js +117 -0
  424. package/dist/components/theme-selector/index.js +11 -0
  425. package/dist/components/theme-selector/theme-selector.js +145 -0
  426. package/dist/components/theme-selector/theme-selector.meta.js +181 -0
  427. package/dist/components/theme-switcher/index.js +7 -0
  428. package/dist/components/theme-switcher/theme-switcher.js +106 -0
  429. package/dist/components/theme-switcher/theme-switcher.meta.js +99 -0
  430. package/dist/components/thinking-orb/index.js +9 -0
  431. package/dist/components/thinking-orb/thinking-orb.js +126 -0
  432. package/dist/components/thinking-orb/thinking-orb.meta.js +142 -0
  433. package/dist/components/thinking-orb/thinking-orb.render.js +252 -0
  434. package/dist/components/toast/index.js +29 -0
  435. package/dist/components/toast/toast.js +254 -0
  436. package/dist/components/toast/toast.meta.js +261 -0
  437. package/dist/components/toggle/index.js +13 -0
  438. package/dist/components/toggle/toggle.js +51 -0
  439. package/dist/components/toggle/toggle.meta.js +129 -0
  440. package/dist/components/toolbar/index.js +27 -0
  441. package/dist/components/toolbar/toolbar.js +80 -0
  442. package/dist/components/toolbar/toolbar.meta.js +272 -0
  443. package/dist/components/toolbar/toolbar.variants.js +16 -0
  444. package/dist/components/tooltip/index.js +21 -0
  445. package/dist/components/tooltip/tooltip.js +74 -0
  446. package/dist/components/tooltip/tooltip.meta.js +156 -0
  447. package/dist/components/tree/index.js +12 -0
  448. package/dist/components/tree/tree.js +364 -0
  449. package/dist/components/tree/tree.meta.js +334 -0
  450. package/dist/components/video/index.js +7 -0
  451. package/dist/components/video/video.js +59 -0
  452. package/dist/components/video/video.meta.js +81 -0
  453. package/dist/components/workspace/index.js +9 -0
  454. package/dist/components/workspace/workspace.js +79 -0
  455. package/dist/components/workspace/workspace.meta.js +183 -0
  456. package/dist/foundations/accessibility.js +107 -0
  457. package/dist/foundations/index.js +25 -792
  458. package/dist/foundations/motion.js +135 -0
  459. package/dist/foundations/scrolling.js +62 -0
  460. package/dist/foundations/shape.js +113 -0
  461. package/dist/foundations/spacing.js +121 -0
  462. package/dist/foundations/surfaces.js +107 -0
  463. package/dist/foundations/types.js +0 -0
  464. package/dist/foundations/typography.js +152 -0
  465. package/dist/icon/Icon.js +30 -0
  466. package/dist/icon/IconProvider.js +27 -0
  467. package/dist/icon/compose.js +13 -0
  468. package/dist/icon/index.d.ts +13 -5
  469. package/dist/icon/index.js +13 -2
  470. package/dist/icon/registry.js +0 -0
  471. package/dist/icon-sets/brands.generated.js +123 -0
  472. package/dist/icon-sets/brands.js +10 -123
  473. package/dist/icon-sets/reicon.d.ts +3 -1
  474. package/dist/icon-sets/reicon.js +209 -1
  475. package/dist/index.d.ts +618 -34
  476. package/dist/index.js +211 -11351
  477. package/dist/ios/chrome.js +36 -0
  478. package/dist/ios/index.js +19 -315
  479. package/dist/ios/liquid-glass.js +103 -0
  480. package/dist/ios/native-app.js +46 -0
  481. package/dist/ios/navigation.js +63 -0
  482. package/dist/ios/phone-frame.js +64 -0
  483. package/dist/ios/preview-theme.js +83 -0
  484. package/dist/ios/preview.js +10 -137
  485. package/dist/ios/sheet.js +85 -0
  486. package/dist/ios/theme.js +19 -0
  487. package/dist/layout/AspectBox.js +27 -0
  488. package/dist/layout/Bleed.js +15 -0
  489. package/dist/layout/Center.js +21 -0
  490. package/dist/layout/Columns.js +70 -0
  491. package/dist/layout/Grid.js +50 -0
  492. package/dist/layout/GridOverlay.js +41 -0
  493. package/dist/layout/Page.js +11 -0
  494. package/dist/layout/Region.js +39 -0
  495. package/dist/layout/Row.js +45 -0
  496. package/dist/layout/SafeArea.js +26 -0
  497. package/dist/layout/Spacer.js +9 -0
  498. package/dist/layout/SplitPane.js +55 -0
  499. package/dist/layout/Stack.js +42 -0
  500. package/dist/layout/_responsive.js +16 -0
  501. package/dist/layout/_safeArea.js +18 -0
  502. package/dist/layout/index.d.ts +30 -8
  503. package/dist/layout/index.js +14 -2
  504. package/dist/lib/anchored-scroll.js +7 -0
  505. package/dist/lib/bleed.js +7 -0
  506. package/dist/lib/chart/cartesian.js +365 -0
  507. package/dist/lib/chart/chart-frame.js +163 -0
  508. package/dist/lib/chart/chart-legend.js +13 -0
  509. package/dist/lib/chart/chart-tooltip.js +38 -0
  510. package/dist/lib/chart/format.js +24 -0
  511. package/dist/lib/chart/geometry.js +114 -0
  512. package/dist/lib/chart/motion.js +34 -0
  513. package/dist/lib/chart/scale.js +72 -0
  514. package/dist/lib/chart/types.js +45 -0
  515. package/dist/lib/chart/use-arrival.js +41 -0
  516. package/dist/{chunk-SRQWQUTW.js → lib/cn.js} +5 -5
  517. package/dist/lib/component-guidance.js +215 -0
  518. package/dist/lib/density.js +54 -0
  519. package/dist/lib/field-shell.js +11 -0
  520. package/dist/lib/glyphs.js +9 -0
  521. package/dist/lib/heading-row.js +36 -0
  522. package/dist/lib/highlight-glide.js +84 -0
  523. package/dist/lib/hit-target.js +5 -0
  524. package/dist/lib/meta.js +0 -0
  525. package/dist/lib/portal-theme-scope.js +74 -0
  526. package/dist/{chunk-FKZXAFIY.js → lib/presentation.js} +8 -3
  527. package/dist/lib/refs.js +14 -0
  528. package/dist/lib/scrub-gesture.js +50 -0
  529. package/dist/lib/segmented.js +13 -0
  530. package/dist/lib/selection-card.js +41 -0
  531. package/dist/lib/status-tone.js +13 -0
  532. package/dist/lib/taxonomy.js +214 -0
  533. package/dist/lib/trim-label.js +20 -0
  534. package/dist/lib/use-copy.js +27 -0
  535. package/dist/lib/use-edge-fade.js +32 -0
  536. package/dist/lib/use-isomorphic-layout-effect.js +8 -0
  537. package/dist/lib/use-resize-observer.js +18 -0
  538. package/dist/lib/use-scroll-activity.js +52 -0
  539. package/dist/lib/use-wheel-to-horizontal.js +65 -0
  540. package/dist/motion/MotionProvider.js +75 -0
  541. package/dist/motion/Presence.js +112 -0
  542. package/dist/motion/Reveal.js +42 -0
  543. package/dist/motion/TextReveal.js +61 -0
  544. package/dist/motion/index.js +24 -0
  545. package/dist/motion/useInView.js +36 -0
  546. package/dist/motion/useReducedMotion.js +25 -0
  547. package/dist/motion/viewTransition.js +47 -0
  548. package/dist/patterns/auth-page.js +90 -0
  549. package/dist/patterns/auth-page.meta.js +27 -0
  550. package/dist/patterns/brand-landing-page.js +341 -0
  551. package/dist/patterns/brand-landing-page.meta.js +28 -0
  552. package/dist/patterns/chat-panel.js +185 -0
  553. package/dist/patterns/chat-panel.meta.js +31 -0
  554. package/dist/patterns/dashboard-page.js +332 -0
  555. package/dist/patterns/dashboard-page.meta.js +29 -0
  556. package/dist/patterns/feed-page.js +205 -0
  557. package/dist/patterns/feed-page.meta.js +25 -0
  558. package/dist/patterns/index.js +34 -2140
  559. package/dist/patterns/landing-page.js +356 -0
  560. package/dist/patterns/landing-page.meta.js +26 -0
  561. package/dist/patterns/list-detail-page.js +373 -0
  562. package/dist/patterns/list-detail-page.meta.js +24 -0
  563. package/dist/patterns/settings-page.js +268 -0
  564. package/dist/patterns/settings-page.meta.js +27 -0
  565. package/dist/presets/index.d.ts +7 -1
  566. package/dist/presets/index.js +53 -185
  567. package/dist/styles.css +118 -3
  568. package/dist/{theme-provider-kQszHYji.d.ts → theme-provider-S0NVJs2Y.d.ts} +6 -1
  569. package/dist/{chunk-NETUFI34.js → themes/_contract.js} +14 -2
  570. package/dist/themes/atelier/index.js +17 -1
  571. package/dist/themes/contrast.js +288 -0
  572. package/dist/themes/ember/ember.css +6 -6
  573. package/dist/themes/ember/index.js +16 -1
  574. package/dist/themes/index.d.ts +1 -1
  575. package/dist/themes/index.js +3 -8
  576. package/dist/themes/meridian/index.js +16 -1
  577. package/dist/themes/poppy/index.js +17 -1
  578. package/dist/themes/prism/index.js +17 -1
  579. package/dist/themes/prism/prism.css +2 -2
  580. package/dist/themes/registry.js +59 -0
  581. package/dist/themes/sable/index.js +16 -1
  582. package/dist/{chunk-EFLC4NA3.js → themes/theme-provider.js} +38 -54
  583. package/dist/themes/verdant/index.js +17 -1
  584. package/llms/blocks/media-player-block.md +20 -7
  585. package/llms/blocks/product-card-block.md +6 -4
  586. package/llms/blocks/task-list-block.md +1 -1
  587. package/llms/blocks/traffic-sources-block.md +1 -1
  588. package/llms/blocks/traffic-trend-block.md +5 -3
  589. package/llms/blocks/verify-code-block.md +1 -1
  590. package/llms/components/app-shell.md +5 -2
  591. package/llms/components/avatar.md +25 -3
  592. package/llms/components/button.md +20 -1
  593. package/llms/components/card.md +1 -1
  594. package/llms/components/disclosure-picker.md +168 -0
  595. package/llms/components/font-picker.md +104 -0
  596. package/llms/components/media-image.md +98 -0
  597. package/llms/components/media-tile.md +143 -0
  598. package/llms/components/page-header.md +6 -5
  599. package/llms/components/pie-chart.md +2 -2
  600. package/llms/components/radial-chart.md +1 -1
  601. package/llms/components/section-header.md +144 -0
  602. package/llms/components/sheet.md +10 -0
  603. package/llms/components/sidebar.md +4 -3
  604. package/llms/components/slider.md +14 -2
  605. package/llms/components/theme-selector.md +44 -4
  606. package/llms/components/tree.md +3 -3
  607. package/llms/layout/grid.md +24 -3
  608. package/llms/layout/region.md +16 -3
  609. package/llms/patterns/dashboard-page.md +3 -6
  610. package/llms/patterns/feed-page.md +4 -4
  611. package/llms/patterns/list-detail-page.md +1 -0
  612. package/llms/patterns/settings-page.md +2 -5
  613. package/llms/reference/utilities.md +84 -4
  614. package/llms/tasks/building-a-page.md +34 -3
  615. package/llms/tasks/converting-an-app.md +14 -4
  616. package/llms/tasks/creating-a-preset.md +4 -1
  617. package/llms/tasks/reviewing-a-design.md +19 -0
  618. package/llms/tasks/using-presets.md +19 -0
  619. package/llms-full.txt +1066 -78
  620. package/llms.txt +26 -9
  621. package/package.json +1 -1
  622. package/registry.json +2342 -164
  623. package/scripts/agent-setup.mjs +90 -0
  624. package/scripts/design-presets.mjs +59 -6
  625. package/scripts/grade.mjs +195 -29
  626. package/scripts/lint-rules.mjs +486 -10
  627. package/scripts/review-evidence.mjs +28 -1
  628. package/skills/sable/SKILL.md +67 -24
  629. package/targets/ios.json +45 -0
  630. package/dist/chunk-3IWZYBGH.js +0 -398
  631. package/dist/chunk-7MG4SHYX.js +0 -15
  632. package/dist/chunk-7QSDYBXO.js +0 -7421
  633. package/dist/chunk-ADLLDWLW.js +0 -15
  634. package/dist/chunk-C4Z3CF54.js +0 -15
  635. package/dist/chunk-EDXLM7YL.js +0 -5078
  636. package/dist/chunk-EHH4MHO6.js +0 -14
  637. package/dist/chunk-K7RUHUGC.js +0 -14
  638. package/dist/chunk-KO3NAEBF.js +0 -15
  639. package/dist/chunk-L4IEIQQA.js +0 -14
  640. package/dist/chunk-QJ6FWTUG.js +0 -40
  641. package/dist/chunk-VVW4UCDI.js +0 -4908
  642. 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
- /** Initial color preference when uncontrolled and no stored value exists. @default "dark" */
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
- export { ART_TOKENS, DENSITY_TOKENS, DERIVED_EDGE_TOKENS, LAYERING_TOKENS, MOTION_TOKENS, RADIUS_TOKENS, SEMANTIC_TOKENS, TYPE_OVERLINE_TOKENS, TYPE_REFINEMENT_TOKENS, TYPE_SCALE_TOKENS, TYPE_UI_TOKENS, WORKSPACE_SURFACE_TOKENS };
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
- export { atelierTheme, atelier_default as default } from '../../chunk-C4Z3CF54.js';
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
- export { ember_default as default, emberTheme } from '../../chunk-L4IEIQQA.js';
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
+ };
@@ -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-kQszHYji.js';
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';
@@ -1,8 +1,3 @@
1
- export { DEFAULT_THEME_ID, SABLE_COLOR_STORAGE_KEY, SABLE_THEME_ATTRIBUTE, SABLE_THEME_STORAGE_KEY, SableThemeProvider, applySableColorMode, applySableTheme, buildThemeManifestById, defaultThemeId, featuredThemeManifests, getThemeManifest, isKnownThemeId, isThemeId, themeIds, themeManifestById, themeManifests, useSableTheme } from '../chunk-EFLC4NA3.js';
2
- export { prismTheme } from '../chunk-7MG4SHYX.js';
3
- export { verdantTheme } from '../chunk-KO3NAEBF.js';
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
- export { meridian_default as default, meridianTheme } from '../../chunk-K7RUHUGC.js';
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
- export { poppy_default as default, poppyTheme } from '../../chunk-ADLLDWLW.js';
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
- export { prism_default as default, prismTheme } from '../../chunk-7MG4SHYX.js';
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;