tembro 2.0.3 → 2.0.5

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 (579) hide show
  1. package/dist/components/actions/action-menu.cjs +1 -1
  2. package/dist/components/actions/action-menu.d.ts +13 -1
  3. package/dist/components/actions/action-menu.js +87 -61
  4. package/dist/components/actions/button-group.cjs +1 -1
  5. package/dist/components/actions/button-group.d.ts +9 -1
  6. package/dist/components/actions/button-group.js +58 -14
  7. package/dist/components/actions/copy-button.cjs +1 -1
  8. package/dist/components/actions/copy-button.d.ts +2 -1
  9. package/dist/components/actions/copy-button.js +13 -11
  10. package/dist/components/calendar/calendar.cjs +1 -1
  11. package/dist/components/calendar/calendar.d.ts +14 -1
  12. package/dist/components/calendar/calendar.js +207 -128
  13. package/dist/components/calendar/date-picker.cjs +1 -1
  14. package/dist/components/calendar/date-picker.d.ts +3 -1
  15. package/dist/components/calendar/date-picker.js +57 -27
  16. package/dist/components/calendar/date-range-picker.cjs +1 -1
  17. package/dist/components/calendar/date-range-picker.d.ts +10 -1
  18. package/dist/components/calendar/date-range-picker.js +149 -64
  19. package/dist/components/data-table/data-table-toolbar.cjs +1 -1
  20. package/dist/components/data-table/data-table-toolbar.d.ts +5 -1
  21. package/dist/components/data-table/data-table-toolbar.js +36 -23
  22. package/dist/components/data-table/data-table.cjs +1 -1
  23. package/dist/components/data-table/data-table.d.ts +6 -4
  24. package/dist/components/data-table/data-table.js +87 -79
  25. package/dist/components/data-table/demo.cjs +1 -1
  26. package/dist/components/data-table/demo.js +3 -13
  27. package/dist/components/data-table/index.cjs +1 -1
  28. package/dist/components/data-table/index.js +5 -5
  29. package/dist/components/data-table/public.cjs +1 -1
  30. package/dist/components/data-table/public.d.ts +1 -6
  31. package/dist/components/data-table/public.js +7 -12
  32. package/dist/components/display/activity-feed.cjs +1 -1
  33. package/dist/components/display/activity-feed.d.ts +12 -1
  34. package/dist/components/display/activity-feed.js +69 -47
  35. package/dist/components/display/carousel.cjs +1 -1
  36. package/dist/components/display/carousel.d.ts +10 -1
  37. package/dist/components/display/carousel.js +68 -23
  38. package/dist/components/display/code-block.cjs +2 -1
  39. package/dist/components/display/code-block.d.ts +3 -1
  40. package/dist/components/display/code-block.js +33 -19
  41. package/dist/components/display/comparison-card.cjs +1 -1
  42. package/dist/components/display/comparison-card.d.ts +3 -3
  43. package/dist/components/display/comparison-card.js +14 -38
  44. package/dist/components/display/data-state.cjs +1 -1
  45. package/dist/components/display/data-state.d.ts +12 -2
  46. package/dist/components/display/data-state.js +80 -42
  47. package/dist/components/display/demo.cjs +1 -1
  48. package/dist/components/display/demo.js +1 -5
  49. package/dist/components/display/index.cjs +1 -1
  50. package/dist/components/display/index.d.ts +0 -8
  51. package/dist/components/display/index.js +21 -29
  52. package/dist/components/feedback/alert.cjs +1 -1
  53. package/dist/components/feedback/alert.d.ts +6 -1
  54. package/dist/components/feedback/alert.js +49 -19
  55. package/dist/components/feedback/index.cjs +1 -1
  56. package/dist/components/feedback/index.d.ts +0 -2
  57. package/dist/components/feedback/index.js +3 -5
  58. package/dist/components/filters/demo.cjs +1 -1
  59. package/dist/components/filters/demo.js +1 -5
  60. package/dist/components/filters/filter-bar.cjs +1 -1
  61. package/dist/components/filters/filter-bar.d.ts +15 -1
  62. package/dist/components/filters/filter-bar.js +94 -50
  63. package/dist/components/filters/index.cjs +1 -1
  64. package/dist/components/filters/index.d.ts +0 -1
  65. package/dist/components/filters/index.js +3 -4
  66. package/dist/components/form/demo.cjs +1 -1
  67. package/dist/components/form/demo.js +1 -2
  68. package/dist/components/form/form-field-shell.cjs +1 -1
  69. package/dist/components/form/form-field-shell.d.ts +17 -3
  70. package/dist/components/form/form-field-shell.js +54 -40
  71. package/dist/components/form/form-input.cjs +1 -1
  72. package/dist/components/form/form-input.js +278 -217
  73. package/dist/components/form/form-select.cjs +1 -1
  74. package/dist/components/form/form-select.js +47 -33
  75. package/dist/components/form/form-switch.cjs +1 -1
  76. package/dist/components/form/form-switch.js +79 -66
  77. package/dist/components/form/form-textarea.cjs +1 -1
  78. package/dist/components/form/form-textarea.js +59 -48
  79. package/dist/components/form/index.cjs +1 -1
  80. package/dist/components/form/index.d.ts +0 -1
  81. package/dist/components/form/index.js +11 -12
  82. package/dist/components/form/public.cjs +1 -1
  83. package/dist/components/form/public.d.ts +0 -9
  84. package/dist/components/form/public.js +7 -16
  85. package/dist/components/inputs/async-select.cjs +1 -1
  86. package/dist/components/inputs/async-select.d.ts +11 -2
  87. package/dist/components/inputs/async-select.js +278 -270
  88. package/dist/components/inputs/combobox.cjs +1 -1
  89. package/dist/components/inputs/combobox.d.ts +5 -1
  90. package/dist/components/inputs/combobox.js +52 -19
  91. package/dist/components/inputs/index.cjs +1 -1
  92. package/dist/components/inputs/index.d.ts +0 -2
  93. package/dist/components/inputs/index.js +3 -5
  94. package/dist/components/inputs/public.cjs +1 -1
  95. package/dist/components/inputs/public.d.ts +0 -2
  96. package/dist/components/inputs/public.js +3 -5
  97. package/dist/components/inputs/simple-select.cjs +1 -1
  98. package/dist/components/inputs/simple-select.d.ts +2 -1
  99. package/dist/components/inputs/simple-select.js +32 -16
  100. package/dist/components/layout/app-sidebar.cjs +1 -1
  101. package/dist/components/layout/app-sidebar.d.ts +4 -1
  102. package/dist/components/layout/app-sidebar.js +152 -132
  103. package/dist/components/layout/breadcrumbs.cjs +1 -1
  104. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  105. package/dist/components/layout/breadcrumbs.js +10 -10
  106. package/dist/components/layout/index.cjs +1 -1
  107. package/dist/components/layout/index.d.ts +0 -1
  108. package/dist/components/layout/index.js +4 -5
  109. package/dist/components/layout/public.cjs +1 -1
  110. package/dist/components/layout/public.d.ts +0 -1
  111. package/dist/components/layout/public.js +2 -3
  112. package/dist/components/layout/stat-card.cjs +1 -1
  113. package/dist/components/layout/stat-card.d.ts +8 -1
  114. package/dist/components/layout/stat-card.js +33 -11
  115. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  116. package/dist/components/modern/calendar-scheduler.d.ts +2 -1
  117. package/dist/components/modern/calendar-scheduler.js +21 -12
  118. package/dist/components/modern/index.cjs +1 -1
  119. package/dist/components/modern/index.d.ts +0 -4
  120. package/dist/components/modern/index.js +12 -16
  121. package/dist/components/overlay/alert-dialog.cjs +1 -1
  122. package/dist/components/overlay/alert-dialog.d.ts +15 -1
  123. package/dist/components/overlay/alert-dialog.js +102 -27
  124. package/dist/components/overlay/drawer.cjs +1 -1
  125. package/dist/components/overlay/drawer.d.ts +4 -1
  126. package/dist/components/overlay/drawer.js +20 -17
  127. package/dist/components/patterns/index.cjs +1 -1
  128. package/dist/components/patterns/index.d.ts +0 -1
  129. package/dist/components/patterns/index.js +1 -2
  130. package/dist/components/patterns/public.cjs +1 -1
  131. package/dist/components/patterns/public.d.ts +0 -1
  132. package/dist/components/patterns/public.js +1 -2
  133. package/dist/components/ui/button/index.cjs +1 -1
  134. package/dist/components/ui/button/index.d.ts +3 -1
  135. package/dist/components/ui/button/index.js +7 -5
  136. package/dist/components/ui/checkbox/index.cjs +1 -1
  137. package/dist/components/ui/checkbox/index.d.ts +8 -0
  138. package/dist/components/ui/checkbox/index.js +16 -14
  139. package/dist/components/ui/collapse/index.cjs +1 -1
  140. package/dist/components/ui/collapse/index.d.ts +17 -3
  141. package/dist/components/ui/collapse/index.js +88 -33
  142. package/dist/components/ui/dialog/index.cjs +1 -1
  143. package/dist/components/ui/dialog/index.d.ts +2 -1
  144. package/dist/components/ui/dialog/index.js +6 -4
  145. package/dist/components/ui/dropdown-menu/index.cjs +1 -1
  146. package/dist/components/ui/dropdown-menu/index.d.ts +9 -4
  147. package/dist/components/ui/dropdown-menu/index.js +87 -62
  148. package/dist/index.cjs +1 -1
  149. package/dist/index.js +145 -177
  150. package/dist/public-component-surface.cjs +1 -1
  151. package/dist/public-component-surface.js +0 -80
  152. package/dist/showcase/component-api-schema.cjs +1 -1
  153. package/dist/showcase/component-api-schema.js +2 -2
  154. package/dist/showcase/create-demo.cjs +20 -34
  155. package/dist/showcase/create-demo.js +15 -16
  156. package/dist/showcase/fallback.cjs +3 -3
  157. package/dist/showcase/fallback.js +287 -451
  158. package/dist/showcase/premium/accordion/showcase.cjs +1 -1
  159. package/dist/showcase/premium/accordion/showcase.js +36 -5
  160. package/dist/showcase/premium/action-menu/showcase.cjs +1 -1
  161. package/dist/showcase/premium/action-menu/showcase.js +26 -8
  162. package/dist/showcase/premium/activity-feed/showcase.cjs +1 -1
  163. package/dist/showcase/premium/activity-feed/showcase.js +60 -36
  164. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  165. package/dist/showcase/premium/alert/showcase.js +41 -18
  166. package/dist/showcase/premium/alert-dialog/showcase.cjs +1 -1
  167. package/dist/showcase/premium/alert-dialog/showcase.js +35 -7
  168. package/dist/showcase/premium/async-multi-select/mock.cjs +4 -3
  169. package/dist/showcase/premium/async-multi-select/mock.js +5 -5
  170. package/dist/showcase/premium/async-multi-select/showcase.cjs +1 -1
  171. package/dist/showcase/premium/async-multi-select/showcase.js +4 -3
  172. package/dist/showcase/premium/async-select/mock.cjs +1 -1
  173. package/dist/showcase/premium/async-select/mock.js +1 -1
  174. package/dist/showcase/premium/async-select/showcase.cjs +1 -1
  175. package/dist/showcase/premium/async-select/showcase.js +69 -22
  176. package/dist/showcase/premium/button/showcase.cjs +1 -1
  177. package/dist/showcase/premium/button/showcase.js +49 -3
  178. package/dist/showcase/premium/button-group/showcase.cjs +1 -1
  179. package/dist/showcase/premium/button-group/showcase.js +53 -29
  180. package/dist/showcase/premium/calendar/showcase.cjs +1 -1
  181. package/dist/showcase/premium/calendar/showcase.js +7 -2
  182. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  183. package/dist/showcase/premium/carousel/showcase.js +95 -47
  184. package/dist/showcase/premium/checkbox/showcase.cjs +1 -1
  185. package/dist/showcase/premium/checkbox/showcase.js +143 -67
  186. package/dist/showcase/premium/clearable-input/mock.cjs +4 -3
  187. package/dist/showcase/premium/clearable-input/mock.js +3 -2
  188. package/dist/showcase/premium/clearable-input/showcase.cjs +1 -1
  189. package/dist/showcase/premium/clearable-input/showcase.js +8 -2
  190. package/dist/showcase/premium/collapse/showcase.cjs +1 -1
  191. package/dist/showcase/premium/collapse/showcase.js +7 -0
  192. package/dist/showcase/premium/combobox/showcase.cjs +1 -1
  193. package/dist/showcase/premium/combobox/showcase.d.ts +2 -1
  194. package/dist/showcase/premium/combobox/showcase.js +56 -47
  195. package/dist/showcase/premium/data-table/showcase.cjs +1 -1
  196. package/dist/showcase/premium/data-table/showcase.js +138 -46
  197. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  198. package/dist/showcase/premium/data-table-parts/showcase.js +13 -13
  199. package/dist/showcase/premium/date-input/mock.cjs +1 -1
  200. package/dist/showcase/premium/date-input/mock.js +1 -1
  201. package/dist/showcase/premium/date-range-picker/showcase.cjs +1 -1
  202. package/dist/showcase/premium/date-range-picker/showcase.js +32 -1
  203. package/dist/showcase/premium/dropdown-menu/showcase.cjs +1 -1
  204. package/dist/showcase/premium/dropdown-menu/showcase.js +88 -54
  205. package/dist/showcase/premium/form-wrapper/mock.cjs +41 -15
  206. package/dist/showcase/premium/form-wrapper/mock.js +4 -4
  207. package/dist/showcase/premium/form-wrapper/showcase.cjs +1 -1
  208. package/dist/showcase/premium/form-wrapper/showcase.js +77 -28
  209. package/dist/showcase/premium/index.cjs +1 -1
  210. package/dist/showcase/premium/index.js +467 -574
  211. package/dist/showcase/premium/input/mock.cjs +4 -1
  212. package/dist/showcase/premium/input/mock.js +1 -1
  213. package/dist/showcase/premium/masked-input/mock.cjs +1 -1
  214. package/dist/showcase/premium/masked-input/mock.js +1 -1
  215. package/dist/showcase/premium/money-input/mock.cjs +1 -1
  216. package/dist/showcase/premium/money-input/mock.js +1 -1
  217. package/dist/showcase/premium/number-input/mock.cjs +1 -1
  218. package/dist/showcase/premium/number-input/mock.js +1 -1
  219. package/dist/showcase/premium/phone-input/mock.cjs +1 -1
  220. package/dist/showcase/premium/phone-input/mock.js +1 -1
  221. package/dist/showcase/premium/quantity-input/mock.cjs +1 -1
  222. package/dist/showcase/premium/quantity-input/mock.js +1 -1
  223. package/dist/showcase/premium/simple-select/mock.cjs +1 -1
  224. package/dist/showcase/premium/simple-select/mock.js +1 -1
  225. package/dist/showcase/premium/simple-select/showcase.cjs +1 -1
  226. package/dist/showcase/premium/simple-select/showcase.js +4 -2
  227. package/dist/showcase/preview-catalog.cjs +7 -10
  228. package/dist/showcase/preview-catalog.js +7 -7
  229. package/dist/showcase/registry-quality.cjs +1 -1
  230. package/dist/showcase/registry-quality.js +0 -24
  231. package/dist/showcase/registry-specific.cjs +1 -1
  232. package/dist/showcase/registry-specific.js +149 -383
  233. package/dist/showcase/render-registry-preview.cjs +1 -1
  234. package/dist/showcase/render-registry-preview.js +163 -195
  235. package/dist/showcase/site-data.cjs +1 -1
  236. package/dist/showcase/site-data.js +197 -941
  237. package/dist/showcase/supplemental.cjs +1 -1
  238. package/dist/showcase/supplemental.js +1 -1
  239. package/dist/showcase/tembro-registry.json.cjs +1 -1
  240. package/dist/showcase/tembro-registry.json.js +33 -59
  241. package/package.json +1 -1
  242. package/packages/cli/dist/index.cjs +2 -2
  243. package/packages/cli/vendor/src/components/actions/action-menu.tsx +149 -83
  244. package/packages/cli/vendor/src/components/actions/button-group.tsx +141 -33
  245. package/packages/cli/vendor/src/components/actions/copy-button.tsx +21 -16
  246. package/packages/cli/vendor/src/components/calendar/calendar.tsx +223 -88
  247. package/packages/cli/vendor/src/components/calendar/date-picker.tsx +73 -29
  248. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +154 -49
  249. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +71 -50
  250. package/packages/cli/vendor/src/components/data-table/data-table.tsx +65 -53
  251. package/packages/cli/vendor/src/components/data-table/demo.tsx +2 -12
  252. package/packages/cli/vendor/src/components/data-table/public.ts +1 -6
  253. package/packages/cli/vendor/src/components/display/activity-feed.tsx +98 -40
  254. package/packages/cli/vendor/src/components/display/carousel.tsx +88 -2
  255. package/packages/cli/vendor/src/components/display/code-block.tsx +58 -26
  256. package/packages/cli/vendor/src/components/display/comparison-card.tsx +15 -41
  257. package/packages/cli/vendor/src/components/display/data-state.tsx +119 -50
  258. package/packages/cli/vendor/src/components/display/demo.tsx +0 -4
  259. package/packages/cli/vendor/src/components/display/index.ts +0 -8
  260. package/packages/cli/vendor/src/components/feedback/alert.tsx +86 -28
  261. package/packages/cli/vendor/src/components/feedback/index.ts +0 -2
  262. package/packages/cli/vendor/src/components/filters/demo.tsx +0 -1
  263. package/packages/cli/vendor/src/components/filters/filter-bar.tsx +126 -54
  264. package/packages/cli/vendor/src/components/filters/index.ts +0 -1
  265. package/packages/cli/vendor/src/components/form/demo.tsx +0 -1
  266. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +72 -34
  267. package/packages/cli/vendor/src/components/form/form-input.tsx +118 -11
  268. package/packages/cli/vendor/src/components/form/form-select.tsx +26 -3
  269. package/packages/cli/vendor/src/components/form/form-switch.tsx +77 -58
  270. package/packages/cli/vendor/src/components/form/form-textarea.tsx +65 -51
  271. package/packages/cli/vendor/src/components/form/index.ts +0 -1
  272. package/packages/cli/vendor/src/components/form/public.ts +0 -11
  273. package/packages/cli/vendor/src/components/inputs/async-select.tsx +126 -82
  274. package/packages/cli/vendor/src/components/inputs/combobox.tsx +66 -9
  275. package/packages/cli/vendor/src/components/inputs/index.ts +0 -2
  276. package/packages/cli/vendor/src/components/inputs/public.ts +0 -2
  277. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +52 -24
  278. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +42 -1
  279. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +17 -8
  280. package/packages/cli/vendor/src/components/layout/index.ts +0 -1
  281. package/packages/cli/vendor/src/components/layout/public.ts +0 -1
  282. package/packages/cli/vendor/src/components/layout/stat-card.tsx +63 -23
  283. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +32 -22
  284. package/packages/cli/vendor/src/components/modern/index.ts +1 -5
  285. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +148 -24
  286. package/packages/cli/vendor/src/components/overlay/drawer.tsx +42 -30
  287. package/packages/cli/vendor/src/components/patterns/index.ts +0 -1
  288. package/packages/cli/vendor/src/components/patterns/public.ts +0 -1
  289. package/packages/cli/vendor/src/components/ui/button/index.tsx +27 -17
  290. package/packages/cli/vendor/src/components/ui/checkbox/index.tsx +22 -5
  291. package/packages/cli/vendor/src/components/ui/collapse/index.tsx +97 -16
  292. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +12 -8
  293. package/packages/cli/vendor/src/components/ui/dropdown-menu/index.tsx +82 -28
  294. package/packages/cli/vendor/src/public-component-surface.ts +0 -16
  295. package/packages/cli/vendor/src/showcase/component-api-schema.ts +2 -2
  296. package/packages/cli/vendor/src/showcase/create-demo.tsx +31 -46
  297. package/packages/cli/vendor/src/showcase/fallback.tsx +83 -263
  298. package/packages/cli/vendor/src/showcase/premium/accordion/showcase.tsx +32 -2
  299. package/packages/cli/vendor/src/showcase/premium/action-menu/showcase.tsx +12 -3
  300. package/packages/cli/vendor/src/showcase/premium/activity-feed/showcase.tsx +15 -2
  301. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +32 -17
  302. package/packages/cli/vendor/src/showcase/premium/alert-dialog/showcase.tsx +28 -3
  303. package/packages/cli/vendor/src/showcase/premium/async-multi-select/mock.ts +6 -5
  304. package/packages/cli/vendor/src/showcase/premium/async-multi-select/showcase.tsx +5 -4
  305. package/packages/cli/vendor/src/showcase/premium/async-select/mock.ts +1 -1
  306. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +36 -0
  307. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +26 -5
  308. package/packages/cli/vendor/src/showcase/premium/button-group/showcase.tsx +20 -3
  309. package/packages/cli/vendor/src/showcase/premium/calendar/showcase.tsx +5 -0
  310. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +33 -5
  311. package/packages/cli/vendor/src/showcase/premium/checkbox/showcase.tsx +46 -3
  312. package/packages/cli/vendor/src/showcase/premium/clearable-input/mock.ts +5 -3
  313. package/packages/cli/vendor/src/showcase/premium/clearable-input/showcase.tsx +5 -2
  314. package/packages/cli/vendor/src/showcase/premium/collapse/showcase.tsx +4 -0
  315. package/packages/cli/vendor/src/showcase/premium/combobox/showcase.tsx +8 -0
  316. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +77 -27
  317. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +11 -11
  318. package/packages/cli/vendor/src/showcase/premium/date-input/mock.ts +1 -1
  319. package/packages/cli/vendor/src/showcase/premium/date-range-picker/showcase.tsx +7 -0
  320. package/packages/cli/vendor/src/showcase/premium/dropdown-menu/showcase.tsx +46 -3
  321. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +70 -44
  322. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +129 -12
  323. package/packages/cli/vendor/src/showcase/premium/index.ts +7 -46
  324. package/packages/cli/vendor/src/showcase/premium/input/mock.ts +2 -2
  325. package/packages/cli/vendor/src/showcase/premium/masked-input/mock.ts +1 -1
  326. package/packages/cli/vendor/src/showcase/premium/money-input/mock.ts +1 -1
  327. package/packages/cli/vendor/src/showcase/premium/number-input/mock.ts +1 -1
  328. package/packages/cli/vendor/src/showcase/premium/phone-input/mock.ts +1 -1
  329. package/packages/cli/vendor/src/showcase/premium/quantity-input/mock.ts +1 -1
  330. package/packages/cli/vendor/src/showcase/premium/simple-select/mock.ts +1 -1
  331. package/packages/cli/vendor/src/showcase/premium/simple-select/showcase.tsx +2 -1
  332. package/packages/cli/vendor/src/showcase/preview-catalog.tsx +7 -7
  333. package/packages/cli/vendor/src/showcase/registry-quality.ts +4 -30
  334. package/packages/cli/vendor/src/showcase/registry-specific.tsx +3 -178
  335. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +18 -51
  336. package/packages/cli/vendor/src/showcase/site-data.tsx +2443 -2761
  337. package/packages/cli/vendor/src/showcase/supplemental.tsx +2 -42
  338. package/packages/cli/vendor/src/showcase/tembro-registry.json +206 -280
  339. package/registry.json +251 -329
  340. package/dist/components/display/aspect-ratio.cjs +0 -1
  341. package/dist/components/display/aspect-ratio.d.ts +0 -6
  342. package/dist/components/display/aspect-ratio.js +0 -21
  343. package/dist/components/display/entity-card.cjs +0 -1
  344. package/dist/components/display/entity-card.d.ts +0 -18
  345. package/dist/components/display/entity-card.js +0 -61
  346. package/dist/components/display/entity-header.cjs +0 -1
  347. package/dist/components/display/entity-header.d.ts +0 -13
  348. package/dist/components/display/entity-header.js +0 -52
  349. package/dist/components/display/file-card.cjs +0 -1
  350. package/dist/components/display/file-card.d.ts +0 -14
  351. package/dist/components/display/file-card.js +0 -59
  352. package/dist/components/display/float-button.cjs +0 -1
  353. package/dist/components/display/float-button.d.ts +0 -6
  354. package/dist/components/display/float-button.js +0 -20
  355. package/dist/components/display/key-value-card.cjs +0 -1
  356. package/dist/components/display/key-value-card.d.ts +0 -16
  357. package/dist/components/display/key-value-card.js +0 -35
  358. package/dist/components/display/keyboard-shortcut.cjs +0 -1
  359. package/dist/components/display/keyboard-shortcut.d.ts +0 -7
  360. package/dist/components/display/keyboard-shortcut.js +0 -18
  361. package/dist/components/display/skeleton-form.cjs +0 -1
  362. package/dist/components/display/skeleton-form.d.ts +0 -9
  363. package/dist/components/display/skeleton-form.js +0 -31
  364. package/dist/components/display/skeleton-table.cjs +0 -1
  365. package/dist/components/display/skeleton-table.d.ts +0 -9
  366. package/dist/components/display/skeleton-table.js +0 -42
  367. package/dist/components/display/tag-list.cjs +0 -1
  368. package/dist/components/display/tag-list.d.ts +0 -17
  369. package/dist/components/display/tag-list.js +0 -30
  370. package/dist/components/display/watermark.cjs +0 -1
  371. package/dist/components/display/watermark.d.ts +0 -6
  372. package/dist/components/display/watermark.js +0 -23
  373. package/dist/components/feedback/empty-search-state.cjs +0 -1
  374. package/dist/components/feedback/empty-search-state.d.ts +0 -11
  375. package/dist/components/feedback/empty-search-state.js +0 -45
  376. package/dist/components/feedback/empty-state.cjs +0 -1
  377. package/dist/components/feedback/empty-state.d.ts +0 -11
  378. package/dist/components/feedback/empty-state.js +0 -38
  379. package/dist/components/filters/filter-chips.cjs +0 -1
  380. package/dist/components/filters/filter-chips.d.ts +0 -18
  381. package/dist/components/filters/filter-chips.js +0 -61
  382. package/dist/components/form/repeater-field.cjs +0 -1
  383. package/dist/components/form/repeater-field.d.ts +0 -16
  384. package/dist/components/form/repeater-field.js +0 -48
  385. package/dist/components/inputs/cascader.cjs +0 -1
  386. package/dist/components/inputs/cascader.d.ts +0 -13
  387. package/dist/components/inputs/cascader.js +0 -58
  388. package/dist/components/inputs/mention-input.cjs +0 -1
  389. package/dist/components/inputs/mention-input.d.ts +0 -18
  390. package/dist/components/inputs/mention-input.js +0 -96
  391. package/dist/components/layout/stack.cjs +0 -1
  392. package/dist/components/layout/stack.d.ts +0 -23
  393. package/dist/components/layout/stack.js +0 -57
  394. package/dist/components/modern/affix.cjs +0 -1
  395. package/dist/components/modern/affix.d.ts +0 -7
  396. package/dist/components/modern/affix.js +0 -18
  397. package/dist/components/patterns/form-builder-presets.cjs +0 -1
  398. package/dist/components/patterns/form-builder-presets.d.ts +0 -1
  399. package/dist/components/patterns/form-builder-presets.js +0 -2
  400. package/dist/components/patterns/form-builder.cjs +0 -1
  401. package/dist/components/patterns/form-builder.d.ts +0 -109
  402. package/dist/components/patterns/form-builder.js +0 -263
  403. package/dist/showcase/premium/affix/index.cjs +0 -1
  404. package/dist/showcase/premium/affix/index.d.ts +0 -2
  405. package/dist/showcase/premium/affix/index.js +0 -3
  406. package/dist/showcase/premium/affix/mock.cjs +0 -12
  407. package/dist/showcase/premium/affix/mock.d.ts +0 -2
  408. package/dist/showcase/premium/affix/mock.js +0 -15
  409. package/dist/showcase/premium/affix/showcase.cjs +0 -1
  410. package/dist/showcase/premium/affix/showcase.d.ts +0 -2
  411. package/dist/showcase/premium/affix/showcase.js +0 -64
  412. package/dist/showcase/premium/aspect-ratio/index.cjs +0 -1
  413. package/dist/showcase/premium/aspect-ratio/index.d.ts +0 -2
  414. package/dist/showcase/premium/aspect-ratio/index.js +0 -3
  415. package/dist/showcase/premium/aspect-ratio/mock.cjs +0 -11
  416. package/dist/showcase/premium/aspect-ratio/mock.d.ts +0 -2
  417. package/dist/showcase/premium/aspect-ratio/mock.js +0 -26
  418. package/dist/showcase/premium/aspect-ratio/showcase.cjs +0 -1
  419. package/dist/showcase/premium/aspect-ratio/showcase.d.ts +0 -2
  420. package/dist/showcase/premium/aspect-ratio/showcase.js +0 -53
  421. package/dist/showcase/premium/cascader/index.cjs +0 -1
  422. package/dist/showcase/premium/cascader/index.d.ts +0 -2
  423. package/dist/showcase/premium/cascader/index.js +0 -3
  424. package/dist/showcase/premium/cascader/mock.cjs +0 -9
  425. package/dist/showcase/premium/cascader/mock.d.ts +0 -2
  426. package/dist/showcase/premium/cascader/mock.js +0 -19
  427. package/dist/showcase/premium/cascader/showcase.cjs +0 -1
  428. package/dist/showcase/premium/cascader/showcase.d.ts +0 -2
  429. package/dist/showcase/premium/cascader/showcase.js +0 -43
  430. package/dist/showcase/premium/empty-state/index.cjs +0 -1
  431. package/dist/showcase/premium/empty-state/index.d.ts +0 -2
  432. package/dist/showcase/premium/empty-state/index.js +0 -3
  433. package/dist/showcase/premium/empty-state/mock.cjs +0 -14
  434. package/dist/showcase/premium/empty-state/mock.d.ts +0 -2
  435. package/dist/showcase/premium/empty-state/mock.js +0 -31
  436. package/dist/showcase/premium/empty-state/showcase.cjs +0 -1
  437. package/dist/showcase/premium/empty-state/showcase.d.ts +0 -3
  438. package/dist/showcase/premium/empty-state/showcase.js +0 -99
  439. package/dist/showcase/premium/float-button/index.cjs +0 -1
  440. package/dist/showcase/premium/float-button/index.d.ts +0 -2
  441. package/dist/showcase/premium/float-button/index.js +0 -3
  442. package/dist/showcase/premium/float-button/mock.cjs +0 -10
  443. package/dist/showcase/premium/float-button/mock.d.ts +0 -2
  444. package/dist/showcase/premium/float-button/mock.js +0 -15
  445. package/dist/showcase/premium/float-button/showcase.cjs +0 -1
  446. package/dist/showcase/premium/float-button/showcase.d.ts +0 -2
  447. package/dist/showcase/premium/float-button/showcase.js +0 -28
  448. package/dist/showcase/premium/form-builder/index.cjs +0 -1
  449. package/dist/showcase/premium/form-builder/index.d.ts +0 -2
  450. package/dist/showcase/premium/form-builder/index.js +0 -3
  451. package/dist/showcase/premium/form-builder/mock.cjs +0 -57
  452. package/dist/showcase/premium/form-builder/mock.d.ts +0 -2
  453. package/dist/showcase/premium/form-builder/mock.js +0 -40
  454. package/dist/showcase/premium/form-builder/showcase.cjs +0 -1
  455. package/dist/showcase/premium/form-builder/showcase.d.ts +0 -3
  456. package/dist/showcase/premium/form-builder/showcase.js +0 -69
  457. package/dist/showcase/premium/keyboard-shortcut/index.cjs +0 -1
  458. package/dist/showcase/premium/keyboard-shortcut/index.d.ts +0 -2
  459. package/dist/showcase/premium/keyboard-shortcut/index.js +0 -3
  460. package/dist/showcase/premium/keyboard-shortcut/mock.cjs +0 -5
  461. package/dist/showcase/premium/keyboard-shortcut/mock.d.ts +0 -2
  462. package/dist/showcase/premium/keyboard-shortcut/mock.js +0 -26
  463. package/dist/showcase/premium/keyboard-shortcut/showcase.cjs +0 -1
  464. package/dist/showcase/premium/keyboard-shortcut/showcase.d.ts +0 -1
  465. package/dist/showcase/premium/keyboard-shortcut/showcase.js +0 -64
  466. package/dist/showcase/premium/mention-input/index.cjs +0 -1
  467. package/dist/showcase/premium/mention-input/index.d.ts +0 -2
  468. package/dist/showcase/premium/mention-input/index.js +0 -3
  469. package/dist/showcase/premium/mention-input/mock.cjs +0 -11
  470. package/dist/showcase/premium/mention-input/mock.d.ts +0 -2
  471. package/dist/showcase/premium/mention-input/mock.js +0 -19
  472. package/dist/showcase/premium/mention-input/showcase.cjs +0 -1
  473. package/dist/showcase/premium/mention-input/showcase.d.ts +0 -2
  474. package/dist/showcase/premium/mention-input/showcase.js +0 -35
  475. package/dist/showcase/premium/skeleton-form/index.cjs +0 -1
  476. package/dist/showcase/premium/skeleton-form/index.d.ts +0 -2
  477. package/dist/showcase/premium/skeleton-form/index.js +0 -3
  478. package/dist/showcase/premium/skeleton-form/mock.cjs +0 -5
  479. package/dist/showcase/premium/skeleton-form/mock.d.ts +0 -2
  480. package/dist/showcase/premium/skeleton-form/mock.js +0 -19
  481. package/dist/showcase/premium/skeleton-form/showcase.cjs +0 -1
  482. package/dist/showcase/premium/skeleton-form/showcase.d.ts +0 -2
  483. package/dist/showcase/premium/skeleton-form/showcase.js +0 -52
  484. package/dist/showcase/premium/skeleton-table/index.cjs +0 -1
  485. package/dist/showcase/premium/skeleton-table/index.d.ts +0 -2
  486. package/dist/showcase/premium/skeleton-table/index.js +0 -3
  487. package/dist/showcase/premium/skeleton-table/mock.cjs +0 -5
  488. package/dist/showcase/premium/skeleton-table/mock.d.ts +0 -2
  489. package/dist/showcase/premium/skeleton-table/mock.js +0 -19
  490. package/dist/showcase/premium/skeleton-table/showcase.cjs +0 -1
  491. package/dist/showcase/premium/skeleton-table/showcase.d.ts +0 -2
  492. package/dist/showcase/premium/skeleton-table/showcase.js +0 -59
  493. package/dist/showcase/premium/stack/index.cjs +0 -1
  494. package/dist/showcase/premium/stack/index.d.ts +0 -2
  495. package/dist/showcase/premium/stack/index.js +0 -3
  496. package/dist/showcase/premium/stack/mock.cjs +0 -10
  497. package/dist/showcase/premium/stack/mock.d.ts +0 -2
  498. package/dist/showcase/premium/stack/mock.js +0 -26
  499. package/dist/showcase/premium/stack/showcase.cjs +0 -1
  500. package/dist/showcase/premium/stack/showcase.d.ts +0 -1
  501. package/dist/showcase/premium/stack/showcase.js +0 -47
  502. package/dist/showcase/premium/tag-list/index.cjs +0 -1
  503. package/dist/showcase/premium/tag-list/index.d.ts +0 -2
  504. package/dist/showcase/premium/tag-list/index.js +0 -3
  505. package/dist/showcase/premium/tag-list/mock.cjs +0 -12
  506. package/dist/showcase/premium/tag-list/mock.d.ts +0 -2
  507. package/dist/showcase/premium/tag-list/mock.js +0 -26
  508. package/dist/showcase/premium/tag-list/showcase.cjs +0 -1
  509. package/dist/showcase/premium/tag-list/showcase.d.ts +0 -2
  510. package/dist/showcase/premium/tag-list/showcase.js +0 -83
  511. package/dist/showcase/premium/watermark/index.cjs +0 -1
  512. package/dist/showcase/premium/watermark/index.d.ts +0 -2
  513. package/dist/showcase/premium/watermark/index.js +0 -3
  514. package/dist/showcase/premium/watermark/mock.cjs +0 -11
  515. package/dist/showcase/premium/watermark/mock.d.ts +0 -2
  516. package/dist/showcase/premium/watermark/mock.js +0 -26
  517. package/dist/showcase/premium/watermark/showcase.cjs +0 -1
  518. package/dist/showcase/premium/watermark/showcase.d.ts +0 -2
  519. package/dist/showcase/premium/watermark/showcase.js +0 -34
  520. package/packages/cli/vendor/src/components/display/aspect-ratio.tsx +0 -22
  521. package/packages/cli/vendor/src/components/display/entity-card.tsx +0 -80
  522. package/packages/cli/vendor/src/components/display/entity-header.tsx +0 -80
  523. package/packages/cli/vendor/src/components/display/file-card.tsx +0 -61
  524. package/packages/cli/vendor/src/components/display/float-button.tsx +0 -27
  525. package/packages/cli/vendor/src/components/display/key-value-card.tsx +0 -50
  526. package/packages/cli/vendor/src/components/display/keyboard-shortcut.tsx +0 -31
  527. package/packages/cli/vendor/src/components/display/skeleton-form.tsx +0 -51
  528. package/packages/cli/vendor/src/components/display/skeleton-table.tsx +0 -59
  529. package/packages/cli/vendor/src/components/display/tag-list.tsx +0 -52
  530. package/packages/cli/vendor/src/components/display/watermark.tsx +0 -20
  531. package/packages/cli/vendor/src/components/feedback/empty-search-state.tsx +0 -65
  532. package/packages/cli/vendor/src/components/feedback/empty-state.tsx +0 -56
  533. package/packages/cli/vendor/src/components/filters/filter-chips.tsx +0 -89
  534. package/packages/cli/vendor/src/components/form/repeater-field.tsx +0 -93
  535. package/packages/cli/vendor/src/components/inputs/cascader.tsx +0 -41
  536. package/packages/cli/vendor/src/components/inputs/mention-input.tsx +0 -162
  537. package/packages/cli/vendor/src/components/layout/stack.tsx +0 -106
  538. package/packages/cli/vendor/src/components/modern/affix.tsx +0 -21
  539. package/packages/cli/vendor/src/components/patterns/form-builder-presets.ts +0 -13
  540. package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -443
  541. package/packages/cli/vendor/src/showcase/premium/affix/index.ts +0 -3
  542. package/packages/cli/vendor/src/showcase/premium/affix/mock.ts +0 -26
  543. package/packages/cli/vendor/src/showcase/premium/affix/showcase.tsx +0 -37
  544. package/packages/cli/vendor/src/showcase/premium/aspect-ratio/index.ts +0 -2
  545. package/packages/cli/vendor/src/showcase/premium/aspect-ratio/mock.ts +0 -26
  546. package/packages/cli/vendor/src/showcase/premium/aspect-ratio/showcase.tsx +0 -37
  547. package/packages/cli/vendor/src/showcase/premium/cascader/index.ts +0 -3
  548. package/packages/cli/vendor/src/showcase/premium/cascader/mock.ts +0 -24
  549. package/packages/cli/vendor/src/showcase/premium/cascader/showcase.tsx +0 -20
  550. package/packages/cli/vendor/src/showcase/premium/empty-state/index.ts +0 -2
  551. package/packages/cli/vendor/src/showcase/premium/empty-state/mock.ts +0 -30
  552. package/packages/cli/vendor/src/showcase/premium/empty-state/showcase.tsx +0 -65
  553. package/packages/cli/vendor/src/showcase/premium/float-button/index.ts +0 -3
  554. package/packages/cli/vendor/src/showcase/premium/float-button/mock.ts +0 -24
  555. package/packages/cli/vendor/src/showcase/premium/float-button/showcase.tsx +0 -21
  556. package/packages/cli/vendor/src/showcase/premium/form-builder/index.ts +0 -2
  557. package/packages/cli/vendor/src/showcase/premium/form-builder/mock.ts +0 -79
  558. package/packages/cli/vendor/src/showcase/premium/form-builder/showcase.tsx +0 -55
  559. package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/index.ts +0 -2
  560. package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/mock.ts +0 -20
  561. package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/showcase.tsx +0 -42
  562. package/packages/cli/vendor/src/showcase/premium/mention-input/index.ts +0 -3
  563. package/packages/cli/vendor/src/showcase/premium/mention-input/mock.ts +0 -26
  564. package/packages/cli/vendor/src/showcase/premium/mention-input/showcase.tsx +0 -27
  565. package/packages/cli/vendor/src/showcase/premium/skeleton-form/index.ts +0 -3
  566. package/packages/cli/vendor/src/showcase/premium/skeleton-form/mock.ts +0 -20
  567. package/packages/cli/vendor/src/showcase/premium/skeleton-form/showcase.tsx +0 -34
  568. package/packages/cli/vendor/src/showcase/premium/skeleton-table/index.ts +0 -3
  569. package/packages/cli/vendor/src/showcase/premium/skeleton-table/mock.ts +0 -20
  570. package/packages/cli/vendor/src/showcase/premium/skeleton-table/showcase.tsx +0 -37
  571. package/packages/cli/vendor/src/showcase/premium/stack/index.ts +0 -2
  572. package/packages/cli/vendor/src/showcase/premium/stack/mock.ts +0 -25
  573. package/packages/cli/vendor/src/showcase/premium/stack/showcase.tsx +0 -22
  574. package/packages/cli/vendor/src/showcase/premium/tag-list/index.ts +0 -2
  575. package/packages/cli/vendor/src/showcase/premium/tag-list/mock.ts +0 -27
  576. package/packages/cli/vendor/src/showcase/premium/tag-list/showcase.tsx +0 -55
  577. package/packages/cli/vendor/src/showcase/premium/watermark/index.ts +0 -2
  578. package/packages/cli/vendor/src/showcase/premium/watermark/mock.ts +0 -26
  579. package/packages/cli/vendor/src/showcase/premium/watermark/showcase.tsx +0 -26
@@ -12,6 +12,7 @@ const tones = ["info", "success", "warning", "destructive"] as const
12
12
  export function AlertShowcase({ mode }: ComponentDemoProps) {
13
13
  const [toneIndex, setToneIndex] = React.useState(2)
14
14
  const [resolvedCount, setResolvedCount] = React.useState(0)
15
+ const [visible, setVisible] = React.useState(true)
15
16
 
16
17
  const tone = tones[toneIndex] ?? "warning"
17
18
 
@@ -33,24 +34,35 @@ export function AlertShowcase({ mode }: ComponentDemoProps) {
33
34
  </div>
34
35
  </section>
35
36
 
36
- <Alert
37
- tone={tone}
38
- title={tone === "success" ? "Workspace synced" : tone === "destructive" ? "Action blocked" : tone === "info" ? "Heads up" : "Review needed"}
39
- description={
40
- tone === "success"
41
- ? "Changes were saved and the team can continue safely."
42
- : tone === "destructive"
43
- ? "The release cannot continue until billing permissions are restored."
44
- : tone === "info"
45
- ? "Usage data refreshed and one metric changed since your last visit."
46
- : "Billing rules changed and one approval is pending before publish."
47
- }
48
- action={
49
- <Button size="sm" variant={tone === "destructive" ? "destructive" : "default"} onClick={() => setResolvedCount((value) => value + 1)}>
50
- {tone === "success" ? "Continue" : tone === "destructive" ? "Fix access" : tone === "info" ? "Open details" : "Open review"}
37
+ {visible ? (
38
+ <Alert
39
+ tone={tone}
40
+ dismissible
41
+ onDismiss={() => setVisible(false)}
42
+ title={tone === "success" ? "Workspace synced" : tone === "destructive" ? "Action blocked" : tone === "info" ? "Heads up" : "Review needed"}
43
+ description={
44
+ tone === "success"
45
+ ? "Changes were saved and the team can continue safely."
46
+ : tone === "destructive"
47
+ ? "The release cannot continue until billing permissions are restored."
48
+ : tone === "info"
49
+ ? "Usage data refreshed and one metric changed since your last visit."
50
+ : "Billing rules changed and one approval is pending before publish."
51
+ }
52
+ action={
53
+ <Button size="sm" variant={tone === "destructive" ? "destructive" : "default"} onClick={() => setResolvedCount((value) => value + 1)}>
54
+ {tone === "success" ? "Continue" : tone === "destructive" ? "Fix access" : tone === "info" ? "Open details" : "Open review"}
55
+ </Button>
56
+ }
57
+ />
58
+ ) : (
59
+ <section className={panelClass}>
60
+ <p className="text-sm font-medium aui-text-muted">Alert dismissed</p>
61
+ <Button className="mt-4" size="sm" variant="outline" onClick={() => setVisible(true)}>
62
+ Restore alert
51
63
  </Button>
52
- }
53
- />
64
+ </section>
65
+ )}
54
66
 
55
67
  <div className="grid gap-4 xl:grid-cols-[0.9fr_1.1fr]">
56
68
  <section className={panelClass}>
@@ -83,6 +95,9 @@ export function AlertShowcase({ mode }: ComponentDemoProps) {
83
95
  <Button size="sm" variant="outline" onClick={() => setResolvedCount(0)}>
84
96
  Reset counter
85
97
  </Button>
98
+ <Button size="sm" variant="outline" onClick={() => setVisible(true)}>
99
+ Show alert
100
+ </Button>
86
101
  </div>
87
102
  </section>
88
103
  ) : null}
@@ -11,6 +11,9 @@ export function AlertDialogShowcase({ mode }: ComponentDemoProps) {
11
11
  const [open, setOpen] = React.useState(false)
12
12
  const [loading, setLoading] = React.useState(false)
13
13
  const [lastResult, setLastResult] = React.useState("No action confirmed yet")
14
+ const [strictMode, setStrictMode] = React.useState(true)
15
+ const [caseSensitive, setCaseSensitive] = React.useState(true)
16
+ const [shouldFail, setShouldFail] = React.useState(false)
14
17
 
15
18
  return (
16
19
  <div className="space-y-5">
@@ -36,9 +39,20 @@ export function AlertDialogShowcase({ mode }: ComponentDemoProps) {
36
39
  <p className="text-sm font-medium aui-text-muted">Live destructive flow</p>
37
40
  <p className="mt-2 text-sm leading-6 aui-text-muted">Open the dialog and confirm a risky workspace action.</p>
38
41
  </div>
39
- <Button variant="destructive" onClick={() => setOpen(true)}>
40
- Delete workspace
41
- </Button>
42
+ <div className="flex flex-wrap gap-2">
43
+ <Button variant={caseSensitive ? "secondary" : "outline"} onClick={() => setCaseSensitive((value) => !value)}>
44
+ {caseSensitive ? "Case sensitive" : "Case insensitive"}
45
+ </Button>
46
+ <Button variant={strictMode ? "secondary" : "outline"} onClick={() => setStrictMode((value) => !value)}>
47
+ {strictMode ? "Typed confirm on" : "Typed confirm off"}
48
+ </Button>
49
+ <Button variant={shouldFail ? "warning" : "outline"} onClick={() => setShouldFail((value) => !value)}>
50
+ {shouldFail ? "Failure mode on" : "Failure mode off"}
51
+ </Button>
52
+ <Button variant="destructive" onClick={() => setOpen(true)}>
53
+ Delete workspace
54
+ </Button>
55
+ </div>
42
56
  </div>
43
57
  </section>
44
58
 
@@ -62,13 +76,24 @@ export function AlertDialogShowcase({ mode }: ComponentDemoProps) {
62
76
  title="Delete workspace?"
63
77
  description="This removes active billing rules, API tokens, and member access from the selected workspace."
64
78
  actionLabel="Delete workspace"
79
+ confirmValue={strictMode ? "DELETE" : undefined}
80
+ confirmCaseSensitive={caseSensitive}
81
+ confirmLabel="High-risk confirmation"
82
+ confirmDescription="Type DELETE to confirm you want to remove this workspace and its active access."
83
+ severityNote="Deleting a workspace clears active access, billing rules, and route-level secrets for the current team."
84
+ errorMessage="Workspace could not be deleted right now. Check dependent billing or retry."
65
85
  onAction={async () => {
66
86
  setLoading(true)
67
87
  await new Promise((resolve) => window.setTimeout(resolve, 450))
88
+ if (shouldFail) {
89
+ setLoading(false)
90
+ throw new Error("dependent billing")
91
+ }
68
92
  setLoading(false)
69
93
  setOpen(false)
70
94
  setLastResult("Workspace deletion confirmed")
71
95
  }}
96
+ onActionError={() => setLastResult("Workspace deletion failed")}
72
97
  />
73
98
 
74
99
  {mode === "playground" ? (
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const asyncMultiSelectMock: ComponentDemoMock = {
4
4
  code: `import { useState } from "react"
5
- import { AsyncMultiSelect } from "@/index"
5
+ import { AsyncSelect } from "tembro"
6
6
 
7
7
  const projectOptions = [
8
8
  { value: "analytics", label: "Analytics", description: "Dashboards and reports" },
@@ -25,7 +25,8 @@ export function Example() {
25
25
 
26
26
  return (
27
27
  <div className="space-y-3">
28
- <AsyncMultiSelect
28
+ <AsyncSelect
29
+ isMulti
29
30
  value={selected}
30
31
  onValueChange={(values) => setSelected(values)}
31
32
  loadOptions={loadProjectOptions}
@@ -43,8 +44,8 @@ export function Example() {
43
44
  }`
44
45
  ,
45
46
  htmlCode: `<button data-slot="async-multiselect-trigger">Choose modules</button>`,
46
- cliCommand: "npx tembro add async-multi-select",
47
- highlights: ["Multiple selected tags", "maxSelected guard", "select-all action", "remove by tag/checkbox"],
47
+ cliCommand: "npx tembro add async-select",
48
+ highlights: ["Multi-value remote tags", "maxSelected guard", "select-all action", "canonical isMulti flow"],
48
49
  relatedBlockSlugs: ["users-table", "crm-dashboard", "settings-form"],
49
50
  scenarios: [
50
51
  { title: "Project scope", description: "Attach multiple modules to one workspace or permission set." },
@@ -53,7 +54,7 @@ export function Example() {
53
54
  { title: "Async updates", description: "Keep tags synced with changing remote data." },
54
55
  ],
55
56
  capabilityNotes: [
56
- "Use `AsyncMultiSelect` for sparse multi-select forms where dataset changes over time.",
57
+ "Prefer `AsyncSelect isMulti` for sparse multi-select forms where dataset changes over time.",
57
58
  "Show clear limits with `maxSelected` and help text from validation.",
58
59
  "`onValueChange` returns both ids and resolved options when custom payloads are needed.",
59
60
  "Disable close-on-select when users are likely to make batch picks.",
@@ -1,6 +1,6 @@
1
1
  import { useState } from "react"
2
2
 
3
- import { AsyncMultiSelect, type AsyncSelectOption } from "@/index"
3
+ import { AsyncSelect, type AsyncSelectOption } from "@/index"
4
4
 
5
5
  const moduleOptions: AsyncSelectOption[] = [
6
6
  { value: "inbox", label: "Inbox" },
@@ -21,12 +21,13 @@ export function AsyncMultiSelectShowcase() {
21
21
  return (
22
22
  <div className="space-y-4">
23
23
  <div className="rounded-[20px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4">
24
- <p className="text-sm font-medium aui-text-strong">AsyncMultiSelect is the multi-value remote member</p>
24
+ <p className="text-sm font-medium aui-text-strong">Use AsyncSelect with isMulti for remote multi-value flows</p>
25
25
  <p className="mt-2 text-sm leading-6 aui-text-muted">
26
- Reach for it only when one Select surface must support remote search, visible tags, and multiple chosen values together.
26
+ Keep the Select family centered on one remote surface. This route documents the multi-value mode, but new code should stay on AsyncSelect.
27
27
  </p>
28
28
  </div>
29
- <AsyncMultiSelect
29
+ <AsyncSelect
30
+ isMulti
30
31
  value={selected}
31
32
  onValueChange={(values) => setSelected(values)}
32
33
  loadOptions={loadModules}
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const asyncSelectMock: ComponentDemoMock = {
4
4
  code: `import { useState } from "react"
5
- import { AsyncSelect, type AsyncSelectOption } from "@/index"
5
+ import { AsyncSelect, type AsyncSelectOption } from "tembro"
6
6
 
7
7
  const seedOptions: AsyncSelectOption[] = [
8
8
  { value: "acme", label: "ACME", description: "Core product line" },
@@ -17,7 +17,9 @@ const loadOptions = async (query: string): Promise<typeof workspaceOptions> => {
17
17
 
18
18
  export function AsyncSelectShowcase() {
19
19
  const [value, setValue] = useState("")
20
+ const [teamValues, setTeamValues] = useState<string[]>(["north", "west"])
20
21
  const activeOption = routeWorkspaceOptions.find((item) => item.value === value)
22
+ const selectedTeams = routeWorkspaceOptions.filter((item) => teamValues.includes(String(item.value)))
21
23
 
22
24
  return (
23
25
  <div className="space-y-5">
@@ -49,9 +51,39 @@ export function AsyncSelectShowcase() {
49
51
  defaultOptions={workspaceOptions}
50
52
  minSearchLength={1}
51
53
  clearable
54
+ showSelectedDescription
52
55
  debounceMs={220}
56
+ labels={{
57
+ placeholder: "Choose service region",
58
+ searchPlaceholder: "Search regions...",
59
+ }}
53
60
  />
54
61
  </div>
62
+ <div className="mt-5">
63
+ <p className="text-sm font-medium aui-text-muted">Multi select uses the same component</p>
64
+ <div className="mt-3">
65
+ <AsyncSelect
66
+ isMulti
67
+ value={teamValues}
68
+ onValueChange={(nextValue) => setTeamValues(nextValue)}
69
+ loadOptions={loadOptions}
70
+ defaultOptions={workspaceOptions}
71
+ minSearchLength={1}
72
+ clearable
73
+ showSelectAll
74
+ maxSelected={3}
75
+ maxVisibleTags={2}
76
+ showSelectedDescription
77
+ debounceMs={220}
78
+ labels={{
79
+ multiPlaceholder: "Choose team coverage",
80
+ searchPlaceholder: "Search team regions...",
81
+ selectedCount: (count) => `${count} regions selected`,
82
+ hiddenSelected: (count) => `+${count} more`,
83
+ }}
84
+ />
85
+ </div>
86
+ </div>
55
87
  <div className="mt-4 grid gap-3 md:grid-cols-3">
56
88
  <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
57
89
  <p className="font-medium aui-text-strong">Type to query</p>
@@ -83,6 +115,10 @@ export function AsyncSelectShowcase() {
83
115
  <p className="text-xs uppercase tracking-[0.2em] aui-text-muted">Team</p>
84
116
  <p className="mt-2 text-sm font-medium aui-text-strong">{activeOption ? routeWorkspaceOptions.find((item) => item.value === activeOption.value)?.team : "No team"}</p>
85
117
  </div>
118
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
119
+ <p className="text-xs uppercase tracking-[0.2em] aui-text-muted">Multi mode</p>
120
+ <p className="mt-2 text-sm font-medium aui-text-strong">{selectedTeams.length ? selectedTeams.map((item) => item.label).join(", ") : "No teams selected"}</p>
121
+ </div>
86
122
  </div>
87
123
  </div>
88
124
  </div>
@@ -55,11 +55,12 @@ function StateButton({
55
55
  }
56
56
 
57
57
  return (
58
- <Button
59
- variant={variant}
60
- disabled={state === "Disabled"}
61
- className={state === "Focus" ? "ring-2 ring-[color:var(--aui-ring)] ring-offset-2 ring-offset-[color:var(--aui-page-bg)]" : undefined}
62
- >
58
+ <Button
59
+ variant={variant}
60
+ pressed={state === "Focus"}
61
+ disabled={state === "Disabled"}
62
+ className={state === "Focus" ? "ring-2 ring-[color:var(--aui-ring)] ring-offset-2 ring-offset-[color:var(--aui-page-bg)]" : undefined}
63
+ >
63
64
  {state}
64
65
  </Button>
65
66
  )
@@ -127,6 +128,7 @@ export function ButtonShowcase() {
127
128
  <Button variant="outline">Preview</Button>
128
129
  <Button
129
130
  variant={selectedVariant}
131
+ fullWidth
130
132
  loading={approvalState === "saving"}
131
133
  loadingLabel="Approving"
132
134
  onClick={approveInvoice}
@@ -136,6 +138,25 @@ export function ButtonShowcase() {
136
138
  </div>
137
139
  </div>
138
140
  </div>
141
+
142
+ <div className="mt-6 grid gap-3 md:grid-cols-4">
143
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
144
+ <p className="font-medium aui-text-strong">Primary</p>
145
+ <p className="mt-2 leading-6 aui-text-muted">Main action with filled emphasis.</p>
146
+ </div>
147
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
148
+ <p className="font-medium aui-text-strong">Secondary</p>
149
+ <p className="mt-2 leading-6 aui-text-muted">Alternative action without stealing focus.</p>
150
+ </div>
151
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
152
+ <p className="font-medium aui-text-strong">Outline</p>
153
+ <p className="mt-2 leading-6 aui-text-muted">Low-emphasis action for previews and neutral workflows.</p>
154
+ </div>
155
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
156
+ <p className="font-medium aui-text-strong">Destructive</p>
157
+ <p className="mt-2 leading-6 aui-text-muted">Reserved for archive, delete, or dangerous transitions.</p>
158
+ </div>
159
+ </div>
139
160
  </section>
140
161
 
141
162
  <section className={panelClass}>
@@ -9,6 +9,7 @@ const panelClass =
9
9
 
10
10
  export function ButtonGroupShowcase({ mode }: ComponentDemoProps) {
11
11
  const [view, setView] = React.useState<"list" | "board" | "timeline">("list")
12
+ const [density, setDensity] = React.useState<"compact" | "comfortable">("comfortable")
12
13
 
13
14
  return (
14
15
  <div className="space-y-5">
@@ -31,16 +32,32 @@ export function ButtonGroupShowcase({ mode }: ComponentDemoProps) {
31
32
  <div className="grid gap-4 xl:grid-cols-2">
32
33
  <section className={panelClass}>
33
34
  <ButtonGroup
35
+ value={view}
36
+ onValueChange={(next) => setView(next as typeof view)}
34
37
  items={[
35
- { key: "list", label: "List", variant: view === "list" ? "default" : "outline", onClick: () => setView("list") },
36
- { key: "board", label: "Board", variant: view === "board" ? "default" : "outline", onClick: () => setView("board") },
37
- { key: "timeline", label: "Timeline", variant: view === "timeline" ? "default" : "outline", onClick: () => setView("timeline") },
38
+ { key: "list", label: "List", description: "Rows first" },
39
+ { key: "board", label: "Board", description: "Kanban view" },
40
+ { key: "timeline", label: "Timeline", description: "Chronology" },
38
41
  ]}
39
42
  />
43
+ <div className="mt-4">
44
+ <ButtonGroup
45
+ value={density}
46
+ onValueChange={(next) => setDensity(next as typeof density)}
47
+ size="xs"
48
+ activeVariant="secondary"
49
+ allowDeselect
50
+ items={[
51
+ { key: "comfortable", label: "Comfortable" },
52
+ { key: "compact", label: "Compact" },
53
+ ]}
54
+ />
55
+ </div>
40
56
  </section>
41
57
  <section className={panelClass}>
42
58
  <p className="text-sm font-medium aui-text-muted">Selected view</p>
43
59
  <p className="mt-3 text-base font-medium aui-text-strong">{view}</p>
60
+ <p className="mt-2 text-sm aui-text-muted">Density: {density || "none"}</p>
44
61
  </section>
45
62
  </div>
46
63
 
@@ -48,6 +48,9 @@ export function CalendarShowcase({ mode }: ComponentDemoProps) {
48
48
  disabledDates={blockedDates}
49
49
  numberOfMonths={monthCount}
50
50
  pagedNavigation
51
+ showClearShortcut
52
+ showTodayShortcut
53
+ showSelectionSummary
51
54
  />
52
55
  </div>
53
56
  </section>
@@ -63,6 +66,8 @@ export function CalendarShowcase({ mode }: ComponentDemoProps) {
63
66
  min="2026-07-01"
64
67
  max="2026-07-31"
65
68
  disabledDates={blockedDates}
69
+ showClearShortcut
70
+ showSelectionSummary
66
71
  />
67
72
  </div>
68
73
  </section>
@@ -3,15 +3,17 @@ import * as React from "react"
3
3
  import { Button, Carousel, CarouselItem } from "@/index"
4
4
 
5
5
  const steps = [
6
- { title: "Onboarding", text: "Guide quickly from first login." },
7
- { title: "Components", text: "Review ready-made dashboard patterns." },
8
- { title: "Release", text: "Publish, test, and iterate faster." },
6
+ { title: "Onboarding", text: "Guide quickly from first login.", tone: "Launch" },
7
+ { title: "Components", text: "Review ready-made dashboard patterns.", tone: "Library" },
8
+ { title: "Release", text: "Publish, test, and iterate faster.", tone: "Ship" },
9
9
  ]
10
10
 
11
11
  export function CarouselShowcase() {
12
12
  const [showArrows, setShowArrows] = React.useState(true)
13
13
  const [showDots, setShowDots] = React.useState(true)
14
+ const [autoplay, setAutoplay] = React.useState(false)
14
15
  const [index, setIndex] = React.useState(0)
16
+ const [playing, setPlaying] = React.useState(false)
15
17
 
16
18
  return (
17
19
  <div className="space-y-5">
@@ -22,6 +24,23 @@ export function CarouselShowcase() {
22
24
  <Button size="sm" variant={showDots ? "default" : "outline"} onClick={() => setShowDots((value) => !value)}>
23
25
  {showDots ? "Hide" : "Show"} dots
24
26
  </Button>
27
+ <Button size="sm" variant={autoplay ? "default" : "outline"} onClick={() => setAutoplay((value) => !value)}>
28
+ {autoplay ? "Stop" : "Start"} autoplay
29
+ </Button>
30
+ </div>
31
+
32
+ <div className="grid gap-3 md:grid-cols-3">
33
+ {steps.map((step, slideIndex) => (
34
+ <Button
35
+ key={step.title}
36
+ type="button"
37
+ variant={index === slideIndex ? "default" : "outline"}
38
+ className="justify-start"
39
+ onClick={() => setIndex(slideIndex)}
40
+ >
41
+ {slideIndex + 1}. {step.title}
42
+ </Button>
43
+ ))}
25
44
  </div>
26
45
 
27
46
  <Carousel
@@ -29,24 +48,33 @@ export function CarouselShowcase() {
29
48
  loop
30
49
  showArrows={showArrows}
31
50
  showDots={showDots}
51
+ autoplay={autoplay}
52
+ autoplayInterval={2200}
53
+ showPlaybackControl
32
54
  onIndexChange={(next) => setIndex(next)}
55
+ onAutoplayChange={setPlaying}
33
56
  previousLabel="Previous slide"
34
57
  nextLabel="Next slide"
35
58
  >
36
59
  {steps.map((step, slideIndex) => (
37
60
  <CarouselItem key={step.title}>
38
- <div className="rounded-xl border border-border bg-card p-8">
39
- <div className="flex items-start justify-between gap-3">
61
+ <div className="min-h-56 rounded-xl border border-border bg-card p-8">
62
+ <div className="flex items-start justify-between gap-3">
40
63
  <div className="grid gap-2">
64
+ <p className="text-[11px] font-semibold uppercase tracking-[0.24em] text-primary">{step.tone}</p>
41
65
  <p className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">{`Slide ${slideIndex + 1}`}</p>
42
66
  <h3 className="text-lg font-semibold text-foreground">{step.title}</h3>
43
67
  <p className="text-sm text-muted-foreground">{step.text}</p>
44
68
  </div>
69
+ <div className="rounded-full border border-border/70 px-3 py-1 text-xs text-muted-foreground">
70
+ {slideIndex + 1}/{steps.length}
71
+ </div>
45
72
  </div>
46
73
  </div>
47
74
  </CarouselItem>
48
75
  ))}
49
76
  </Carousel>
77
+ <div className="text-sm text-muted-foreground">Playback: {playing || autoplay ? "active" : "paused"}</div>
50
78
  </div>
51
79
  )
52
80
  }
@@ -8,6 +8,8 @@ const panelClass =
8
8
  "rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5"
9
9
 
10
10
  export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
11
+ const triState = state.checked ? "checked" : state.textValue === "mixed" ? "mixed" : "unchecked"
12
+
11
13
  return (
12
14
  <div className="space-y-5">
13
15
  <section className="rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6">
@@ -27,13 +29,51 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
27
29
  </div>
28
30
  </div>
29
31
 
30
- <div className="mt-6 grid gap-3">
32
+ <div className="mt-6 grid gap-3 md:grid-cols-3">
33
+ <div className={`${panelClass} flex items-start gap-3`}>
34
+ <Checkbox
35
+ size="lg"
36
+ allowIndeterminate
37
+ checked={triState === "mixed" ? "indeterminate" : triState === "checked"}
38
+ onCheckedStateChange={(checked) => {
39
+ if (checked === "indeterminate") {
40
+ setState({ checked: false, textValue: "mixed" })
41
+ } else if (checked) {
42
+ setState({ checked: true, textValue: "checked" })
43
+ } else {
44
+ setState({ checked: false, textValue: "unchecked" })
45
+ }
46
+ }}
47
+ />
48
+ <div>
49
+ <p className="text-sm font-medium aui-text-strong">Approval state</p>
50
+ <p className="mt-1 text-sm aui-text-muted">Use `indeterminate` when not all child tasks are complete.</p>
51
+ </div>
52
+ </div>
53
+ <div className={`${panelClass} flex items-start gap-3`}>
54
+ <Checkbox size="lg" checked="indeterminate" />
55
+ <div>
56
+ <p className="text-sm font-medium aui-text-strong">Indeterminate</p>
57
+ <p className="mt-1 text-sm aui-text-muted">Useful for parent rows and bulk selection summaries.</p>
58
+ </div>
59
+ </div>
60
+ <div className={`${panelClass} flex items-start gap-3`}>
61
+ <Checkbox size="lg" checked disabled />
62
+ <div>
63
+ <p className="text-sm font-medium aui-text-strong">Disabled selected</p>
64
+ <p className="mt-1 text-sm aui-text-muted">Shows permission-locked completion without becoming clickable.</p>
65
+ </div>
66
+ </div>
67
+ </div>
68
+
69
+ <div className="mt-3 grid gap-3">
31
70
  {checkboxDemoItems.map((item, index) => (
32
71
  <label key={item.label} htmlFor={item.id} className={`${panelClass} flex items-start gap-3`}>
33
72
  <Checkbox
34
73
  id={item.id}
35
74
  checked={index === 0 ? state.checked : item.checked}
36
75
  disabled={item.disabled}
76
+ invalid={index === 0 && triState === "unchecked"}
37
77
  onCheckedChange={index === 0 ? (checked) => setState({ checked: Boolean(checked) }) : undefined}
38
78
  defaultChecked={index > 0 ? item.checked : undefined}
39
79
  />
@@ -51,10 +91,10 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
51
91
  <div>
52
92
  <p className="text-xs font-semibold uppercase tracking-[0.24em] aui-text-muted">Live state</p>
53
93
  <h4 className="mt-2 text-lg font-semibold aui-text-strong">
54
- Release checklist is {state.checked ? "enabled" : "disabled"}
94
+ Release checklist is {triState}
55
95
  </h4>
56
96
  <p className="mt-2 text-sm leading-6 aui-text-muted">
57
- Toggle the first row or use these actions to verify controlled checkbox behavior.
97
+ Toggle the first row or use these actions to verify controlled tri-state checkbox behavior.
58
98
  </p>
59
99
  </div>
60
100
  <div className="flex flex-wrap gap-2">
@@ -64,6 +104,9 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
64
104
  <Button type="button" size="sm" variant="secondary" onClick={() => setState({ checked: false })}>
65
105
  Disable
66
106
  </Button>
107
+ <Button type="button" size="sm" variant="outline" onClick={() => setState({ checked: false, textValue: "mixed" })}>
108
+ Set mixed
109
+ </Button>
67
110
  </div>
68
111
  </div>
69
112
  </section>
@@ -2,20 +2,22 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const clearableInputMock: ComponentDemoMock = {
4
4
  code: `import * as React from "react"
5
- import { ClearableInput } from "tembro"
5
+ import { Input } from "tembro"
6
6
 
7
7
  export function Example() {
8
8
  const [value, setValue] = React.useState("workspace token")
9
9
 
10
10
  return (
11
- <ClearableInput
11
+ <Input
12
12
  value={value}
13
13
  onValueChange={setValue}
14
14
  placeholder="Filter or paste value..."
15
+ clearable
15
16
  clearOnEscape
16
17
  />
17
18
  )
18
19
  }`,
20
+ cliCommand: "npx tembro add input",
19
21
  highlights: ["Inline clear action", "Escape-to-clear support", "Focus restore after clearing", "Small but high-frequency utility input"],
20
22
  scenarios: [
21
23
  { title: "Filter reset", description: "Let users clear a short filter without hunting for an extra reset button." },
@@ -23,7 +25,7 @@ export function Example() {
23
25
  { title: "Toolbar utility", description: "Use in dense admin bars where compact cleanup matters." },
24
26
  ],
25
27
  capabilityNotes: [
26
- "Clearable input is strongest for short-lived values like filters and quick entry.",
28
+ "Prefer `Input clearable` for short-lived values like filters and quick entry.",
27
29
  "Escape clear is useful only when the input is frequently changed.",
28
30
  "Keep the field visually quiet so the clear action feels secondary.",
29
31
  ],
@@ -1,6 +1,6 @@
1
1
  import * as React from "react"
2
2
 
3
- import { Badge, ClearableInput } from "@/index"
3
+ import { Badge, Input } from "@/index"
4
4
 
5
5
  import type { ComponentDemoProps } from "../types"
6
6
 
@@ -29,11 +29,14 @@ export function ClearableInputShowcase({ mode }: ComponentDemoProps) {
29
29
  </section>
30
30
 
31
31
  <section className={panelClass}>
32
- <ClearableInput
32
+ <Input
33
33
  value={value}
34
34
  onValueChange={setValue}
35
35
  placeholder="Filter or paste value..."
36
+ clearable
36
37
  clearOnEscape
38
+ trailingAction={<span className="text-xs aui-text-muted">Live filter</span>}
39
+ replaceTrailingWhenClear={false}
37
40
  />
38
41
  </section>
39
42
 
@@ -9,6 +9,7 @@ const collapseItems = [
9
9
  {
10
10
  key: "permissions",
11
11
  title: "Permissions",
12
+ badge: <Badge variant="secondary">Core</Badge>,
12
13
  description: "Who can publish, archive, and rename library surfaces.",
13
14
  content: "Owners can publish. Editors can update docs. Reviewers can inspect previews and comment on API shape.",
14
15
  },
@@ -16,12 +17,15 @@ const collapseItems = [
16
17
  key: "release",
17
18
  title: "Release notes",
18
19
  description: "What changed in the current package cycle.",
20
+ meta: "July",
19
21
  content: "This release opened more public docs coverage for interactive form and overlay surfaces.",
20
22
  },
21
23
  {
22
24
  key: "handoff",
23
25
  title: "Handoff checklist",
24
26
  description: "What must be checked before a public release.",
27
+ disabled: true,
28
+ disabledReason: "Unlock after release branch is cut.",
25
29
  content: "Typecheck, lint, build, smoke routes, verify copy feedback, and confirm component docs route integrity.",
26
30
  },
27
31
  ] as const