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