tembro 2.0.4 → 2.0.6

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 (401) 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-pagination.cjs +1 -1
  20. package/dist/components/data-table/data-table-pagination.js +4 -4
  21. package/dist/components/data-table/data-table-toolbar.cjs +1 -1
  22. package/dist/components/data-table/data-table-toolbar.d.ts +5 -1
  23. package/dist/components/data-table/data-table-toolbar.js +36 -23
  24. package/dist/components/data-table/data-table.cjs +1 -1
  25. package/dist/components/data-table/data-table.d.ts +8 -6
  26. package/dist/components/data-table/data-table.js +89 -80
  27. package/dist/components/data-table/demo.cjs +1 -1
  28. package/dist/components/data-table/demo.js +3 -13
  29. package/dist/components/data-table/index.cjs +1 -1
  30. package/dist/components/data-table/index.js +5 -5
  31. package/dist/components/data-table/public.cjs +1 -1
  32. package/dist/components/data-table/public.d.ts +1 -6
  33. package/dist/components/data-table/public.js +7 -12
  34. package/dist/components/display/activity-feed.cjs +1 -1
  35. package/dist/components/display/activity-feed.d.ts +12 -1
  36. package/dist/components/display/activity-feed.js +69 -47
  37. package/dist/components/display/carousel.cjs +1 -1
  38. package/dist/components/display/carousel.d.ts +16 -1
  39. package/dist/components/display/carousel.js +71 -26
  40. package/dist/components/display/code-block.cjs +2 -1
  41. package/dist/components/display/code-block.d.ts +3 -1
  42. package/dist/components/display/code-block.js +33 -19
  43. package/dist/components/display/comparison-card.cjs +1 -1
  44. package/dist/components/display/comparison-card.d.ts +3 -3
  45. package/dist/components/display/comparison-card.js +14 -38
  46. package/dist/components/display/data-state.cjs +1 -1
  47. package/dist/components/display/data-state.d.ts +12 -2
  48. package/dist/components/display/data-state.js +80 -42
  49. package/dist/components/display/demo.cjs +1 -1
  50. package/dist/components/display/demo.js +1 -5
  51. package/dist/components/display/index.cjs +1 -1
  52. package/dist/components/display/index.d.ts +0 -3
  53. package/dist/components/display/index.js +21 -24
  54. package/dist/components/display/smart-card.d.ts +1 -1
  55. package/dist/components/display/status-legend.d.ts +1 -1
  56. package/dist/components/feedback/alert.cjs +1 -1
  57. package/dist/components/feedback/alert.d.ts +6 -1
  58. package/dist/components/feedback/alert.js +49 -19
  59. package/dist/components/feedback/index.cjs +1 -1
  60. package/dist/components/feedback/index.d.ts +0 -2
  61. package/dist/components/feedback/index.js +3 -5
  62. package/dist/components/filters/demo.cjs +1 -1
  63. package/dist/components/filters/demo.js +1 -5
  64. package/dist/components/filters/filter-bar.cjs +1 -1
  65. package/dist/components/filters/filter-bar.d.ts +15 -1
  66. package/dist/components/filters/filter-bar.js +94 -50
  67. package/dist/components/filters/index.cjs +1 -1
  68. package/dist/components/filters/index.d.ts +0 -1
  69. package/dist/components/filters/index.js +3 -4
  70. package/dist/components/form/form-field-shell.cjs +1 -1
  71. package/dist/components/form/form-field-shell.d.ts +17 -3
  72. package/dist/components/form/form-field-shell.js +54 -40
  73. package/dist/components/form/form-input.cjs +1 -1
  74. package/dist/components/form/form-input.d.ts +3 -4
  75. package/dist/components/form/form-input.js +285 -224
  76. package/dist/components/form/form-select.cjs +1 -1
  77. package/dist/components/form/form-select.d.ts +2 -2
  78. package/dist/components/form/form-select.js +49 -35
  79. package/dist/components/form/form-switch.cjs +1 -1
  80. package/dist/components/form/form-switch.js +79 -66
  81. package/dist/components/form/form-textarea.cjs +1 -1
  82. package/dist/components/form/form-textarea.js +59 -48
  83. package/dist/components/form/index.cjs +1 -1
  84. package/dist/components/form/index.js +14 -14
  85. package/dist/components/form/public.cjs +1 -1
  86. package/dist/components/form/public.d.ts +0 -8
  87. package/dist/components/form/public.js +7 -15
  88. package/dist/components/inputs/async-select.cjs +1 -1
  89. package/dist/components/inputs/async-select.d.ts +14 -2
  90. package/dist/components/inputs/async-select.js +278 -270
  91. package/dist/components/inputs/combobox.cjs +1 -1
  92. package/dist/components/inputs/combobox.d.ts +5 -1
  93. package/dist/components/inputs/combobox.js +52 -19
  94. package/dist/components/inputs/search-input.d.ts +3 -0
  95. package/dist/components/inputs/simple-select.cjs +1 -1
  96. package/dist/components/inputs/simple-select.d.ts +10 -31
  97. package/dist/components/inputs/simple-select.js +5 -85
  98. package/dist/components/layout/app-sidebar.cjs +1 -1
  99. package/dist/components/layout/app-sidebar.d.ts +4 -1
  100. package/dist/components/layout/app-sidebar.js +152 -132
  101. package/dist/components/layout/breadcrumbs.cjs +1 -1
  102. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  103. package/dist/components/layout/breadcrumbs.js +10 -10
  104. package/dist/components/layout/index.cjs +1 -1
  105. package/dist/components/layout/index.js +3 -3
  106. package/dist/components/layout/stat-card.cjs +1 -1
  107. package/dist/components/layout/stat-card.d.ts +8 -1
  108. package/dist/components/layout/stat-card.js +33 -11
  109. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  110. package/dist/components/modern/calendar-scheduler.d.ts +2 -1
  111. package/dist/components/modern/calendar-scheduler.js +21 -12
  112. package/dist/components/overlay/alert-dialog.cjs +1 -1
  113. package/dist/components/overlay/alert-dialog.d.ts +15 -1
  114. package/dist/components/overlay/alert-dialog.js +102 -27
  115. package/dist/components/overlay/drawer.cjs +1 -1
  116. package/dist/components/overlay/drawer.d.ts +4 -1
  117. package/dist/components/overlay/drawer.js +20 -17
  118. package/dist/components/patterns/index.cjs +1 -1
  119. package/dist/components/patterns/index.d.ts +0 -1
  120. package/dist/components/patterns/index.js +1 -2
  121. package/dist/components/patterns/public.cjs +1 -1
  122. package/dist/components/patterns/public.d.ts +0 -1
  123. package/dist/components/patterns/public.js +1 -2
  124. package/dist/components/ui/button/index.cjs +1 -1
  125. package/dist/components/ui/button/index.d.ts +3 -1
  126. package/dist/components/ui/button/index.js +7 -5
  127. package/dist/components/ui/card/index.cjs +1 -1
  128. package/dist/components/ui/card/index.d.ts +13 -2
  129. package/dist/components/ui/card/index.js +74 -49
  130. package/dist/components/ui/checkbox/index.cjs +1 -1
  131. package/dist/components/ui/checkbox/index.d.ts +8 -0
  132. package/dist/components/ui/checkbox/index.js +16 -14
  133. package/dist/components/ui/collapse/index.cjs +1 -1
  134. package/dist/components/ui/collapse/index.d.ts +17 -3
  135. package/dist/components/ui/collapse/index.js +88 -33
  136. package/dist/components/ui/dialog/index.cjs +1 -1
  137. package/dist/components/ui/dialog/index.d.ts +2 -1
  138. package/dist/components/ui/dialog/index.js +6 -4
  139. package/dist/components/ui/dropdown-menu/index.cjs +1 -1
  140. package/dist/components/ui/dropdown-menu/index.d.ts +9 -4
  141. package/dist/components/ui/dropdown-menu/index.js +87 -62
  142. package/dist/components/ui/input/index.cjs +1 -1
  143. package/dist/components/ui/input/index.d.ts +8 -0
  144. package/dist/components/ui/input/index.js +63 -30
  145. package/dist/components/ui/select/index.cjs +1 -1
  146. package/dist/components/ui/select/index.d.ts +33 -1
  147. package/dist/components/ui/select/index.js +154 -48
  148. package/dist/index.cjs +1 -1
  149. package/dist/index.js +137 -156
  150. package/dist/public-component-surface.cjs +1 -1
  151. package/dist/public-component-surface.js +0 -15
  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 +23 -36
  155. package/dist/showcase/create-demo.js +15 -16
  156. package/dist/showcase/fallback.cjs +3 -3
  157. package/dist/showcase/fallback.js +275 -265
  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 +16 -14
  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 +426 -467
  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/select/mock.cjs +8 -9
  224. package/dist/showcase/premium/select/mock.js +1 -1
  225. package/dist/showcase/premium/select/showcase.cjs +1 -1
  226. package/dist/showcase/premium/select/showcase.js +76 -86
  227. package/dist/showcase/premium/simple-select/mock.cjs +1 -1
  228. package/dist/showcase/premium/simple-select/mock.js +1 -1
  229. package/dist/showcase/premium/simple-select/showcase.cjs +1 -1
  230. package/dist/showcase/premium/simple-select/showcase.js +4 -2
  231. package/dist/showcase/preview-catalog.cjs +7 -10
  232. package/dist/showcase/preview-catalog.js +7 -7
  233. package/dist/showcase/registry-quality.cjs +1 -1
  234. package/dist/showcase/registry-quality.js +0 -23
  235. package/dist/showcase/registry-specific.cjs +1 -1
  236. package/dist/showcase/registry-specific.js +153 -383
  237. package/dist/showcase/render-registry-preview.cjs +1 -1
  238. package/dist/showcase/render-registry-preview.js +169 -197
  239. package/dist/showcase/site-data.cjs +1 -1
  240. package/dist/showcase/site-data.js +197 -941
  241. package/dist/showcase/supplemental.cjs +1 -1
  242. package/dist/showcase/supplemental.js +1 -1
  243. package/dist/showcase/tembro-registry.json.cjs +1 -1
  244. package/dist/showcase/tembro-registry.json.js +33 -51
  245. package/package.json +1 -1
  246. package/packages/cli/dist/index.cjs +2 -2
  247. package/packages/cli/vendor/src/components/actions/action-menu.tsx +149 -83
  248. package/packages/cli/vendor/src/components/actions/button-group.tsx +141 -33
  249. package/packages/cli/vendor/src/components/actions/copy-button.tsx +21 -16
  250. package/packages/cli/vendor/src/components/calendar/calendar.tsx +223 -88
  251. package/packages/cli/vendor/src/components/calendar/date-picker.tsx +73 -29
  252. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +154 -49
  253. package/packages/cli/vendor/src/components/data-table/data-table-pagination.tsx +7 -7
  254. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +71 -50
  255. package/packages/cli/vendor/src/components/data-table/data-table.tsx +86 -73
  256. package/packages/cli/vendor/src/components/data-table/demo.tsx +2 -12
  257. package/packages/cli/vendor/src/components/data-table/public.ts +1 -6
  258. package/packages/cli/vendor/src/components/display/activity-feed.tsx +98 -40
  259. package/packages/cli/vendor/src/components/display/carousel.tsx +104 -6
  260. package/packages/cli/vendor/src/components/display/code-block.tsx +58 -26
  261. package/packages/cli/vendor/src/components/display/comparison-card.tsx +15 -41
  262. package/packages/cli/vendor/src/components/display/data-state.tsx +119 -50
  263. package/packages/cli/vendor/src/components/display/demo.tsx +0 -4
  264. package/packages/cli/vendor/src/components/display/index.ts +0 -3
  265. package/packages/cli/vendor/src/components/display/smart-card.tsx +1 -1
  266. package/packages/cli/vendor/src/components/display/status-legend.tsx +1 -1
  267. package/packages/cli/vendor/src/components/feedback/alert.tsx +86 -28
  268. package/packages/cli/vendor/src/components/feedback/index.ts +0 -2
  269. package/packages/cli/vendor/src/components/filters/demo.tsx +0 -1
  270. package/packages/cli/vendor/src/components/filters/filter-bar.tsx +126 -54
  271. package/packages/cli/vendor/src/components/filters/index.ts +0 -1
  272. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +72 -34
  273. package/packages/cli/vendor/src/components/form/form-input.tsx +127 -23
  274. package/packages/cli/vendor/src/components/form/form-select.tsx +30 -7
  275. package/packages/cli/vendor/src/components/form/form-switch.tsx +77 -58
  276. package/packages/cli/vendor/src/components/form/form-textarea.tsx +65 -51
  277. package/packages/cli/vendor/src/components/form/public.ts +0 -9
  278. package/packages/cli/vendor/src/components/inputs/async-select.tsx +138 -91
  279. package/packages/cli/vendor/src/components/inputs/combobox.tsx +66 -9
  280. package/packages/cli/vendor/src/components/inputs/search-input.tsx +5 -2
  281. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +20 -162
  282. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +42 -1
  283. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +17 -8
  284. package/packages/cli/vendor/src/components/layout/stat-card.tsx +63 -23
  285. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +32 -22
  286. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +148 -24
  287. package/packages/cli/vendor/src/components/overlay/drawer.tsx +42 -30
  288. package/packages/cli/vendor/src/components/patterns/index.ts +0 -1
  289. package/packages/cli/vendor/src/components/patterns/public.ts +0 -1
  290. package/packages/cli/vendor/src/components/ui/button/index.tsx +27 -17
  291. package/packages/cli/vendor/src/components/ui/card/index.tsx +95 -25
  292. package/packages/cli/vendor/src/components/ui/checkbox/index.tsx +22 -5
  293. package/packages/cli/vendor/src/components/ui/collapse/index.tsx +97 -16
  294. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +12 -8
  295. package/packages/cli/vendor/src/components/ui/dropdown-menu/index.tsx +82 -28
  296. package/packages/cli/vendor/src/components/ui/input/index.tsx +98 -0
  297. package/packages/cli/vendor/src/components/ui/select/index.tsx +227 -34
  298. package/packages/cli/vendor/src/public-component-surface.ts +0 -3
  299. package/packages/cli/vendor/src/showcase/component-api-schema.ts +2 -2
  300. package/packages/cli/vendor/src/showcase/create-demo.tsx +44 -58
  301. package/packages/cli/vendor/src/showcase/fallback.tsx +80 -99
  302. package/packages/cli/vendor/src/showcase/premium/accordion/showcase.tsx +32 -2
  303. package/packages/cli/vendor/src/showcase/premium/action-menu/showcase.tsx +12 -3
  304. package/packages/cli/vendor/src/showcase/premium/activity-feed/showcase.tsx +15 -2
  305. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +32 -17
  306. package/packages/cli/vendor/src/showcase/premium/alert-dialog/showcase.tsx +28 -3
  307. package/packages/cli/vendor/src/showcase/premium/async-multi-select/mock.ts +6 -5
  308. package/packages/cli/vendor/src/showcase/premium/async-multi-select/showcase.tsx +5 -4
  309. package/packages/cli/vendor/src/showcase/premium/async-select/mock.ts +1 -1
  310. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +36 -0
  311. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +26 -5
  312. package/packages/cli/vendor/src/showcase/premium/button-group/showcase.tsx +20 -3
  313. package/packages/cli/vendor/src/showcase/premium/calendar/showcase.tsx +5 -0
  314. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +33 -5
  315. package/packages/cli/vendor/src/showcase/premium/checkbox/showcase.tsx +46 -3
  316. package/packages/cli/vendor/src/showcase/premium/clearable-input/mock.ts +5 -3
  317. package/packages/cli/vendor/src/showcase/premium/clearable-input/showcase.tsx +5 -2
  318. package/packages/cli/vendor/src/showcase/premium/collapse/showcase.tsx +4 -0
  319. package/packages/cli/vendor/src/showcase/premium/combobox/showcase.tsx +8 -0
  320. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +77 -27
  321. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +14 -14
  322. package/packages/cli/vendor/src/showcase/premium/date-input/mock.ts +1 -1
  323. package/packages/cli/vendor/src/showcase/premium/date-range-picker/showcase.tsx +7 -0
  324. package/packages/cli/vendor/src/showcase/premium/dropdown-menu/showcase.tsx +46 -3
  325. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +70 -44
  326. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +129 -12
  327. package/packages/cli/vendor/src/showcase/premium/index.ts +7 -24
  328. package/packages/cli/vendor/src/showcase/premium/input/mock.ts +2 -2
  329. package/packages/cli/vendor/src/showcase/premium/masked-input/mock.ts +1 -1
  330. package/packages/cli/vendor/src/showcase/premium/money-input/mock.ts +1 -1
  331. package/packages/cli/vendor/src/showcase/premium/number-input/mock.ts +1 -1
  332. package/packages/cli/vendor/src/showcase/premium/phone-input/mock.ts +1 -1
  333. package/packages/cli/vendor/src/showcase/premium/quantity-input/mock.ts +1 -1
  334. package/packages/cli/vendor/src/showcase/premium/select/mock.ts +1 -1
  335. package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +13 -21
  336. package/packages/cli/vendor/src/showcase/premium/simple-select/mock.ts +1 -1
  337. package/packages/cli/vendor/src/showcase/premium/simple-select/showcase.tsx +2 -1
  338. package/packages/cli/vendor/src/showcase/preview-catalog.tsx +7 -7
  339. package/packages/cli/vendor/src/showcase/registry-quality.ts +4 -28
  340. package/packages/cli/vendor/src/showcase/registry-specific.tsx +10 -186
  341. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +23 -57
  342. package/packages/cli/vendor/src/showcase/site-data.tsx +2443 -2761
  343. package/packages/cli/vendor/src/showcase/supplemental.tsx +2 -42
  344. package/packages/cli/vendor/src/showcase/tembro-registry.json +11 -58
  345. package/registry.json +11 -61
  346. package/dist/components/display/entity-card.cjs +0 -1
  347. package/dist/components/display/entity-card.d.ts +0 -18
  348. package/dist/components/display/entity-card.js +0 -61
  349. package/dist/components/display/entity-header.cjs +0 -1
  350. package/dist/components/display/entity-header.d.ts +0 -13
  351. package/dist/components/display/entity-header.js +0 -52
  352. package/dist/components/display/file-card.cjs +0 -1
  353. package/dist/components/display/file-card.d.ts +0 -14
  354. package/dist/components/display/file-card.js +0 -59
  355. package/dist/components/feedback/empty-search-state.cjs +0 -1
  356. package/dist/components/feedback/empty-search-state.d.ts +0 -11
  357. package/dist/components/feedback/empty-search-state.js +0 -45
  358. package/dist/components/feedback/empty-state.cjs +0 -1
  359. package/dist/components/feedback/empty-state.d.ts +0 -11
  360. package/dist/components/feedback/empty-state.js +0 -38
  361. package/dist/components/filters/filter-chips.cjs +0 -1
  362. package/dist/components/filters/filter-chips.d.ts +0 -18
  363. package/dist/components/filters/filter-chips.js +0 -61
  364. package/dist/components/patterns/form-builder-presets.cjs +0 -1
  365. package/dist/components/patterns/form-builder-presets.d.ts +0 -1
  366. package/dist/components/patterns/form-builder-presets.js +0 -2
  367. package/dist/components/patterns/form-builder.cjs +0 -1
  368. package/dist/components/patterns/form-builder.d.ts +0 -109
  369. package/dist/components/patterns/form-builder.js +0 -263
  370. package/dist/showcase/premium/empty-state/index.cjs +0 -1
  371. package/dist/showcase/premium/empty-state/index.d.ts +0 -2
  372. package/dist/showcase/premium/empty-state/index.js +0 -3
  373. package/dist/showcase/premium/empty-state/mock.cjs +0 -14
  374. package/dist/showcase/premium/empty-state/mock.d.ts +0 -2
  375. package/dist/showcase/premium/empty-state/mock.js +0 -31
  376. package/dist/showcase/premium/empty-state/showcase.cjs +0 -1
  377. package/dist/showcase/premium/empty-state/showcase.d.ts +0 -3
  378. package/dist/showcase/premium/empty-state/showcase.js +0 -99
  379. package/dist/showcase/premium/form-builder/index.cjs +0 -1
  380. package/dist/showcase/premium/form-builder/index.d.ts +0 -2
  381. package/dist/showcase/premium/form-builder/index.js +0 -3
  382. package/dist/showcase/premium/form-builder/mock.cjs +0 -57
  383. package/dist/showcase/premium/form-builder/mock.d.ts +0 -2
  384. package/dist/showcase/premium/form-builder/mock.js +0 -40
  385. package/dist/showcase/premium/form-builder/showcase.cjs +0 -1
  386. package/dist/showcase/premium/form-builder/showcase.d.ts +0 -3
  387. package/dist/showcase/premium/form-builder/showcase.js +0 -69
  388. package/packages/cli/vendor/src/components/display/entity-card.tsx +0 -80
  389. package/packages/cli/vendor/src/components/display/entity-header.tsx +0 -80
  390. package/packages/cli/vendor/src/components/display/file-card.tsx +0 -61
  391. package/packages/cli/vendor/src/components/feedback/empty-search-state.tsx +0 -65
  392. package/packages/cli/vendor/src/components/feedback/empty-state.tsx +0 -56
  393. package/packages/cli/vendor/src/components/filters/filter-chips.tsx +0 -89
  394. package/packages/cli/vendor/src/components/patterns/form-builder-presets.ts +0 -13
  395. package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -443
  396. package/packages/cli/vendor/src/showcase/premium/empty-state/index.ts +0 -2
  397. package/packages/cli/vendor/src/showcase/premium/empty-state/mock.ts +0 -30
  398. package/packages/cli/vendor/src/showcase/premium/empty-state/showcase.tsx +0 -65
  399. package/packages/cli/vendor/src/showcase/premium/form-builder/index.ts +0 -2
  400. package/packages/cli/vendor/src/showcase/premium/form-builder/mock.ts +0 -79
  401. package/packages/cli/vendor/src/showcase/premium/form-builder/showcase.tsx +0 -55
@@ -1,10 +1,11 @@
1
- import * as React from "react"
2
- import { AlertTriangleIcon } from "lucide-react"
3
-
4
- import { Button } from "@/components/ui/button"
5
- import {
6
- Dialog,
7
- DialogClose,
1
+ import * as React from "react"
2
+ import { AlertTriangleIcon } from "lucide-react"
3
+
4
+ import { Button } from "@/components/ui/button"
5
+ import { Input } from "@/components/ui/input"
6
+ import {
7
+ Dialog,
8
+ DialogClose,
8
9
  DialogContent,
9
10
  DialogDescription,
10
11
  DialogFooter,
@@ -19,27 +20,104 @@ export type AlertDialogProps = Omit<React.ComponentProps<typeof Dialog>, "childr
19
20
  cancelLabel?: React.ReactNode
20
21
  actionLabel?: React.ReactNode
21
22
  actionTone?: "default" | "destructive"
23
+ cancelVariant?: React.ComponentProps<typeof Button>["variant"]
22
24
  loading?: boolean
25
+ closeOnAction?: boolean
26
+ confirmValue?: string
27
+ confirmLabel?: React.ReactNode
28
+ confirmPlaceholder?: string
29
+ confirmDescription?: React.ReactNode
30
+ confirmCaseSensitive?: boolean
31
+ severityNote?: React.ReactNode
32
+ errorMessage?: React.ReactNode
33
+ onActionError?: (error: unknown) => void
23
34
  onAction?: () => void | Promise<void>
24
35
  children?: React.ReactNode
36
+ preventCloseWhileLoading?: boolean
37
+ actionButtonProps?: Omit<React.ComponentProps<typeof Button>, "type" | "variant" | "loading" | "disabled" | "onClick" | "children">
38
+ cancelButtonProps?: Omit<React.ComponentProps<typeof Button>, "type" | "variant" | "disabled" | "children">
25
39
  }
26
40
 
27
41
  function AlertDialog({
28
42
  title = "Are you sure?",
29
43
  description,
30
44
  icon = <AlertTriangleIcon />,
31
- cancelLabel = "Cancel",
32
- actionLabel = "Continue",
33
- actionTone = "destructive",
34
- loading = false,
35
- onAction,
36
- children,
37
- ...props
38
- }: AlertDialogProps) {
39
- return (
40
- <Dialog {...props}>
41
- {children}
42
- <DialogContent>
45
+ cancelLabel = "Cancel",
46
+ actionLabel = "Continue",
47
+ actionTone = "destructive",
48
+ cancelVariant = "outline",
49
+ loading = false,
50
+ closeOnAction = true,
51
+ confirmValue,
52
+ confirmLabel = "Type to confirm",
53
+ confirmPlaceholder,
54
+ confirmDescription,
55
+ confirmCaseSensitive = true,
56
+ severityNote,
57
+ errorMessage = "Action could not be completed. Try again.",
58
+ onActionError,
59
+ onAction,
60
+ children,
61
+ preventCloseWhileLoading = true,
62
+ actionButtonProps,
63
+ cancelButtonProps,
64
+ onOpenChange,
65
+ ...props
66
+ }: AlertDialogProps) {
67
+ const [pending, setPending] = React.useState(false)
68
+ const [confirmationInput, setConfirmationInput] = React.useState("")
69
+ const [actionError, setActionError] = React.useState<React.ReactNode | null>(null)
70
+ const resolvedLoading = loading || pending
71
+ const requiresTypedConfirmation = Boolean(confirmValue?.trim())
72
+ const expectedConfirmation = confirmCaseSensitive ? confirmValue?.trim() : confirmValue?.trim().toLowerCase()
73
+ const actualConfirmation = confirmCaseSensitive ? confirmationInput.trim() : confirmationInput.trim().toLowerCase()
74
+ const canConfirm = !requiresTypedConfirmation || actualConfirmation === expectedConfirmation
75
+
76
+ React.useEffect(() => {
77
+ if (!props.open) {
78
+ setConfirmationInput("")
79
+ setActionError(null)
80
+ }
81
+ }, [props.open])
82
+
83
+ const handleOpenChange = React.useCallback(
84
+ (nextOpen: boolean, eventDetails: unknown) => {
85
+ if (!nextOpen && preventCloseWhileLoading && resolvedLoading) {
86
+ return
87
+ }
88
+ onOpenChange?.(nextOpen, eventDetails as never)
89
+ },
90
+ [onOpenChange, preventCloseWhileLoading, resolvedLoading]
91
+ )
92
+
93
+ const closeDialog = () => {
94
+ handleOpenChange(false, undefined)
95
+ }
96
+
97
+ const handleAction = async () => {
98
+ if (!canConfirm || resolvedLoading) return
99
+ setActionError(null)
100
+ if (!onAction) {
101
+ if (closeOnAction) closeDialog()
102
+ return
103
+ }
104
+
105
+ try {
106
+ setPending(true)
107
+ await onAction()
108
+ if (closeOnAction) closeDialog()
109
+ } catch (error) {
110
+ setActionError(errorMessage)
111
+ onActionError?.(error)
112
+ } finally {
113
+ setPending(false)
114
+ }
115
+ }
116
+
117
+ return (
118
+ <Dialog onOpenChange={handleOpenChange} {...props}>
119
+ {children}
120
+ <DialogContent>
43
121
  <DialogHeader>
44
122
  <div className="mb-3 inline-flex size-11 items-center justify-center rounded-2xl border border-destructive/20 bg-destructive/10 text-destructive [&_svg]:size-5">
45
123
  {icon}
@@ -47,19 +125,65 @@ function AlertDialog({
47
125
  <DialogTitle>{title}</DialogTitle>
48
126
  {description ? <DialogDescription>{description}</DialogDescription> : null}
49
127
  </DialogHeader>
128
+ {requiresTypedConfirmation ? (
129
+ <div className="grid gap-2.5">
130
+ <div className="space-y-1">
131
+ <p className="text-sm font-medium text-foreground">{confirmLabel}</p>
132
+ <p className="text-xs leading-5 text-muted-foreground">
133
+ {confirmDescription ?? (
134
+ <>
135
+ Type <span className="font-semibold text-foreground">{confirmValue}</span> to continue.
136
+ </>
137
+ )}
138
+ </p>
139
+ </div>
140
+ <Input
141
+ value={confirmationInput}
142
+ onValueChange={setConfirmationInput}
143
+ placeholder={confirmPlaceholder ?? confirmValue}
144
+ autoComplete="off"
145
+ autoCapitalize="off"
146
+ spellCheck={false}
147
+ aria-invalid={actionError ? true : undefined}
148
+ aria-describedby={actionError ? "alert-dialog-error" : undefined}
149
+ />
150
+ </div>
151
+ ) : null}
152
+ {severityNote ? (
153
+ <div className="rounded-2xl border border-border/70 bg-muted/35 px-3.5 py-3 text-sm leading-6 text-muted-foreground">
154
+ {severityNote}
155
+ </div>
156
+ ) : null}
157
+ {actionError ? (
158
+ <div
159
+ id="alert-dialog-error"
160
+ role="alert"
161
+ aria-live="polite"
162
+ className="rounded-2xl border border-destructive/20 bg-destructive/8 px-3.5 py-3 text-sm leading-6 text-destructive"
163
+ >
164
+ {actionError}
165
+ </div>
166
+ ) : null}
50
167
  <DialogFooter>
51
168
  <DialogClose render={() => (
52
- <Button type="button" variant="outline" disabled={loading}>
169
+ <Button type="button" variant={cancelVariant} disabled={resolvedLoading} {...cancelButtonProps}>
53
170
  {cancelLabel}
54
171
  </Button>
55
172
  )} />
56
- <Button type="button" variant={actionTone === "destructive" ? "destructive" : "default"} loading={loading} onClick={() => void onAction?.()}>
173
+ <Button
174
+ type="button"
175
+ variant={actionTone === "destructive" ? "destructive" : "default"}
176
+ loading={resolvedLoading}
177
+ disabled={!canConfirm && !resolvedLoading}
178
+ onClick={() => void handleAction()}
179
+ {...actionButtonProps}
180
+ >
57
181
  {actionLabel}
58
182
  </Button>
59
183
  </DialogFooter>
60
184
  </DialogContent>
61
- </Dialog>
62
- )
63
- }
185
+ </Dialog>
186
+ )
187
+ }
64
188
 
65
189
  export { AlertDialog }
@@ -3,8 +3,8 @@ import * as React from "react"
3
3
  import { Button } from "@/components/ui/button"
4
4
  import {
5
5
  Dialog,
6
- DialogClose,
7
- DialogContent,
6
+ DialogClose,
7
+ DialogContent,
8
8
  DialogDescription,
9
9
  DialogHeader,
10
10
  DialogTitle,
@@ -20,51 +20,63 @@ export type DrawerProps = Omit<React.ComponentProps<typeof Dialog>, "children">
20
20
  description?: React.ReactNode
21
21
  side?: DrawerSide
22
22
  footer?: React.ReactNode
23
+ headerClassName?: string
24
+ bodyClassName?: string
25
+ footerClassName?: string
23
26
  contentClassName?: string
24
27
  showCloseButton?: boolean
25
28
  children?: React.ReactNode
26
29
  }
27
30
 
28
- const sideClassName: Record<DrawerSide, string> = {
29
- right: "left-auto right-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-l-[var(--radius-3xl)] sm:max-w-lg",
30
- left: "left-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-r-[var(--radius-3xl)] sm:max-w-lg",
31
- top: "left-0 top-0 h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-b-[var(--radius-3xl)]",
32
- bottom: "bottom-0 left-0 top-auto h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-t-[var(--radius-3xl)]",
33
- }
31
+ const sideClassName: Record<DrawerSide, string> = {
32
+ right: "left-auto right-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-l-[var(--radius-3xl)] data-open:slide-in-from-right data-closed:slide-out-to-right sm:max-w-lg",
33
+ left: "left-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-r-[var(--radius-3xl)] data-open:slide-in-from-left data-closed:slide-out-to-left sm:max-w-lg",
34
+ top: "left-0 top-0 h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-b-[var(--radius-3xl)] data-open:slide-in-from-top data-closed:slide-out-to-top",
35
+ bottom: "bottom-0 left-0 top-auto h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-t-[var(--radius-3xl)] data-open:slide-in-from-bottom data-closed:slide-out-to-bottom",
36
+ }
34
37
 
35
38
  function Drawer({
36
39
  trigger,
37
40
  title,
38
- description,
39
- side = "right",
40
- footer,
41
- contentClassName,
42
- showCloseButton = true,
43
- children,
41
+ description,
42
+ side = "right",
43
+ footer,
44
+ headerClassName,
45
+ bodyClassName,
46
+ footerClassName,
47
+ contentClassName,
48
+ showCloseButton = true,
49
+ children,
44
50
  ...props
45
51
  }: DrawerProps) {
46
52
  return (
47
53
  <Dialog {...props}>
48
54
  {trigger ? <DialogTrigger render={trigger as React.ReactElement} /> : null}
49
- <DialogContent showCloseButton={showCloseButton} className={cn("fixed p-0", sideClassName[side], contentClassName)}>
50
- {(title || description) && (
51
- <DialogHeader className="border-b border-border/70 p-6">
52
- {title ? <DialogTitle>{title}</DialogTitle> : null}
53
- {description ? <DialogDescription>{description}</DialogDescription> : null}
54
- </DialogHeader>
55
- )}
56
- <div data-slot="drawer-body" className="min-h-0 flex-1 overflow-y-auto p-6">
57
- {children}
58
- </div>
59
- {footer ? <div data-slot="drawer-footer" className="border-t border-border/70 p-5">{footer}</div> : null}
60
- </DialogContent>
61
- </Dialog>
62
- )
63
- }
55
+ <DialogContent
56
+ size="full"
57
+ showCloseButton={showCloseButton}
58
+ className={cn("fixed grid grid-rows-[auto_minmax(0,1fr)_auto] gap-0 p-0", sideClassName[side], contentClassName)}
59
+ >
60
+ {(title || description) && (
61
+ <DialogHeader className={cn("border-b border-border/70 p-6", headerClassName)}>
62
+ {title ? <DialogTitle>{title}</DialogTitle> : null}
63
+ {description ? <DialogDescription>{description}</DialogDescription> : null}
64
+ </DialogHeader>
65
+ )}
66
+ <div data-slot="drawer-body" className={cn("min-h-0 flex-1 overflow-y-auto p-6", bodyClassName)}>
67
+ {children}
68
+ </div>
69
+ {footer ? <div data-slot="drawer-footer" className={cn("border-t border-border/70 p-5", footerClassName)}>{footer}</div> : null}
70
+ </DialogContent>
71
+ </Dialog>
72
+ )
73
+ }
64
74
 
65
75
  function DrawerCloseButton({ children = "Close", ...props }: React.ComponentProps<typeof Button>) {
66
76
  return (
67
- <DialogClose render={() => <Button type="button" variant="outline" {...props}>{children}</Button>} />
77
+ <DialogClose render={<Button type="button" variant="outline" {...props} />}>
78
+ {children}
79
+ </DialogClose>
68
80
  )
69
81
  }
70
82
 
@@ -1,3 +1,2 @@
1
1
  export * from './resource-page'
2
2
  export * from './resource-detail-page'
3
- export * from './form-builder'
@@ -1,3 +1,2 @@
1
1
  export * from "./resource-page"
2
2
  export * from "./resource-detail-page"
3
- export * from "./form-builder"
@@ -40,26 +40,30 @@ const buttonVariants = cva(
40
40
  }
41
41
  )
42
42
 
43
- export type ButtonProps = ButtonPrimitive.Props &
44
- VariantProps<typeof buttonVariants> & {
45
- loading?: boolean
46
- loadingLabel?: string
47
- leftIcon?: React.ReactNode
48
- rightIcon?: React.ReactNode
49
- }
43
+ export type ButtonProps = ButtonPrimitive.Props &
44
+ VariantProps<typeof buttonVariants> & {
45
+ loading?: boolean
46
+ loadingLabel?: string
47
+ leftIcon?: React.ReactNode
48
+ rightIcon?: React.ReactNode
49
+ fullWidth?: boolean
50
+ pressed?: boolean
51
+ }
50
52
 
51
53
  function Button({
52
54
  className,
53
55
  variant = "default",
54
56
  size = "default",
55
57
  disabled,
56
- loading = false,
57
- loadingLabel = "Loading",
58
- leftIcon,
59
- rightIcon,
60
- children,
61
- ...props
62
- }: ButtonProps) {
58
+ loading = false,
59
+ loadingLabel = "Loading",
60
+ leftIcon,
61
+ rightIcon,
62
+ fullWidth = false,
63
+ pressed = false,
64
+ children,
65
+ ...props
66
+ }: ButtonProps) {
63
67
  const isDisabled = disabled || loading
64
68
 
65
69
  return (
@@ -68,11 +72,17 @@ function Button({
68
72
  data-variant={variant ?? "default"}
69
73
  data-size={size ?? "default"}
70
74
  data-loading={loading || undefined}
75
+ data-pressed={pressed || undefined}
71
76
  disabled={isDisabled}
72
77
  aria-busy={loading || undefined}
73
- className={cn(buttonVariants({ variant, size, className }))}
74
- {...props}
75
- >
78
+ aria-pressed={pressed || undefined}
79
+ className={cn(
80
+ buttonVariants({ variant, size, className }),
81
+ fullWidth && "w-full",
82
+ pressed && "shadow-[var(--aui-control-shadow,0_1px_2px_rgba(15,23,42,0.04)),0_0_0_1px_var(--aui-focus-ring,var(--ring))]"
83
+ )}
84
+ {...props}
85
+ >
76
86
  {loading ? (
77
87
  <span
78
88
  data-slot="button-spinner"
@@ -65,14 +65,28 @@ type CardSurfaceSlots = {
65
65
  media?: React.ReactNode
66
66
  content?: React.ReactNode
67
67
  footer?: React.ReactNode
68
+ mediaClassName?: string
69
+ bodyClassName?: string
68
70
  headerClassName?: string
71
+ eyebrowClassName?: string
69
72
  titleClassName?: string
70
73
  descriptionClassName?: string
71
74
  contentClassName?: string
72
75
  footerClassName?: string
73
76
  }
74
77
 
75
- export type CardProps = Omit<React.ComponentProps<"div">, keyof CardSurfaceSlots> & VariantProps<typeof cardVariants> & CardSurfaceSlots
78
+ export type CardOrientation = "vertical" | "horizontal"
79
+ export type CardMediaAspect = "auto" | "square" | "video" | "poster" | "wide"
80
+ export type CardPadding = "none" | "sm" | "default" | "lg"
81
+
82
+ export type CardProps = Omit<React.ComponentProps<"div">, keyof CardSurfaceSlots> &
83
+ VariantProps<typeof cardVariants> &
84
+ CardSurfaceSlots & {
85
+ orientation?: CardOrientation
86
+ mediaPosition?: "start" | "end"
87
+ mediaAspect?: CardMediaAspect
88
+ padding?: CardPadding
89
+ }
76
90
 
77
91
  function hasSurfaceContent(props: CardSurfaceSlots) {
78
92
  return (
@@ -96,6 +110,10 @@ function Card({
96
110
  interactive,
97
111
  selected,
98
112
  disabled,
113
+ orientation = "vertical",
114
+ mediaPosition = "start",
115
+ mediaAspect = "auto",
116
+ padding = "default",
99
117
  tabIndex,
100
118
  eyebrow,
101
119
  title,
@@ -105,7 +123,10 @@ function Card({
105
123
  media,
106
124
  content,
107
125
  footer,
126
+ mediaClassName,
127
+ bodyClassName,
108
128
  headerClassName,
129
+ eyebrowClassName,
109
130
  titleClassName,
110
131
  descriptionClassName,
111
132
  contentClassName,
@@ -126,6 +147,36 @@ function Card({
126
147
  const resolvedContent = content ?? children
127
148
  const hasHeader = eyebrow != null || title != null || description != null || badge != null || action != null
128
149
  const hasFooter = footer != null
150
+ const mediaNode = media ? (
151
+ <div
152
+ data-slot="card-media"
153
+ data-media-position={mediaPosition}
154
+ data-media-aspect={mediaAspect}
155
+ className={cn(
156
+ "overflow-hidden",
157
+ orientation === "horizontal" ? "shrink-0 self-stretch" : "",
158
+ mediaAspect === "square" && (orientation === "horizontal" ? "w-40" : "aspect-square"),
159
+ mediaAspect === "video" && (orientation === "horizontal" ? "w-56" : "aspect-video"),
160
+ mediaAspect === "poster" && (orientation === "horizontal" ? "w-36" : "aspect-[3/4]"),
161
+ mediaAspect === "wide" && (orientation === "horizontal" ? "w-72" : "aspect-[16/7]"),
162
+ mediaClassName
163
+ )}
164
+ >
165
+ {media}
166
+ </div>
167
+ ) : null
168
+ const surfacePaddingClassName = {
169
+ none: "",
170
+ sm: "px-4",
171
+ default: "px-(--card-spacing)",
172
+ lg: "px-6",
173
+ } satisfies Record<CardPadding, string>
174
+ const bodyPaddingClassName = {
175
+ none: "",
176
+ sm: "pb-4",
177
+ default: "",
178
+ lg: "pb-6",
179
+ } satisfies Record<CardPadding, string>
129
180
 
130
181
  return (
131
182
  <div
@@ -139,37 +190,56 @@ function Card({
139
190
  data-selected={selected || undefined}
140
191
  data-disabled={disabled || undefined}
141
192
  data-has-footer={hasFooter || undefined}
193
+ data-orientation={orientation}
194
+ data-padding={padding}
142
195
  aria-disabled={disabled || undefined}
143
196
  tabIndex={interactive && !disabled ? tabIndex ?? 0 : tabIndex}
144
- className={cn(cardVariants({ variant, size, density, tone, interactive, selected, disabled }), className)}
197
+ className={cn(
198
+ cardVariants({ variant, size, density, tone, interactive, selected, disabled }),
199
+ orientation === "horizontal" && "flex-row py-0",
200
+ interactive && "hover:border-[color:var(--aui-control-hover-border,var(--ring))] hover:shadow-[var(--aui-card-shadow-hover,var(--aui-card-shadow,0_12px_32px_rgba(15,23,42,0.08)))]",
201
+ selected && "border-[color:var(--aui-control-border-strong,var(--ring))] shadow-[var(--aui-card-shadow-hover,var(--aui-card-shadow,0_12px_32px_rgba(15,23,42,0.08)))]",
202
+ className
203
+ )}
145
204
  {...props}
146
205
  >
147
206
  {surfaceMode ? (
148
207
  <>
149
- {media}
150
- {hasHeader ? (
151
- <CardHeader className={headerClassName}>
152
- <div className="min-w-0 space-y-1">
153
- {eyebrow != null ? (
154
- <div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/80">
155
- {eyebrow}
156
- </div>
157
- ) : null}
158
- {title != null ? <CardTitle className={titleClassName}>{title}</CardTitle> : null}
159
- {description != null ? (
160
- <CardDescription className={descriptionClassName}>{description}</CardDescription>
208
+ {mediaPosition === "start" ? mediaNode : null}
209
+ <div
210
+ data-slot="card-body"
211
+ className={cn(
212
+ "flex min-w-0 flex-1 flex-col",
213
+ orientation === "horizontal" ? "py-(--card-spacing)" : "",
214
+ bodyPaddingClassName[padding],
215
+ bodyClassName
216
+ )}
217
+ >
218
+ {hasHeader ? (
219
+ <CardHeader className={cn(surfacePaddingClassName[padding], headerClassName)}>
220
+ <div className="min-w-0 space-y-1">
221
+ {eyebrow != null ? (
222
+ <div className={cn("text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground/80", eyebrowClassName)}>
223
+ {eyebrow}
224
+ </div>
225
+ ) : null}
226
+ {title != null ? <CardTitle className={titleClassName}>{title}</CardTitle> : null}
227
+ {description != null ? (
228
+ <CardDescription className={descriptionClassName}>{description}</CardDescription>
229
+ ) : null}
230
+ </div>
231
+ {badge != null || action != null ? (
232
+ <CardAction className="flex items-center gap-2">
233
+ {badge}
234
+ {action}
235
+ </CardAction>
161
236
  ) : null}
162
- </div>
163
- {badge != null || action != null ? (
164
- <CardAction className="flex items-center gap-2">
165
- {badge}
166
- {action}
167
- </CardAction>
168
- ) : null}
169
- </CardHeader>
170
- ) : null}
171
- {resolvedContent != null ? <CardContent className={contentClassName}>{resolvedContent}</CardContent> : null}
172
- {hasFooter ? <CardFooter className={footerClassName}>{footer}</CardFooter> : null}
237
+ </CardHeader>
238
+ ) : null}
239
+ {resolvedContent != null ? <CardContent className={cn(surfacePaddingClassName[padding], contentClassName)}>{resolvedContent}</CardContent> : null}
240
+ {hasFooter ? <CardFooter className={cn(surfacePaddingClassName[padding], footerClassName)}>{footer}</CardFooter> : null}
241
+ </div>
242
+ {mediaPosition === "end" ? mediaNode : null}
173
243
  </>
174
244
  ) : (
175
245
  children
@@ -12,10 +12,20 @@ export type CheckboxProps = Omit<
12
12
  checked?: CheckboxCheckedState
13
13
  defaultChecked?: CheckboxCheckedState
14
14
  onCheckedChange?: (checked: boolean) => void
15
+ onCheckedStateChange?: (checked: CheckboxCheckedState) => void
16
+ size?: "sm" | "md" | "lg"
17
+ invalid?: boolean
18
+ allowIndeterminate?: boolean
15
19
  }
16
20
 
17
- function getNextCheckedState(checked: CheckboxCheckedState) {
18
- return checked === true ? false : true
21
+ function getNextCheckedState(checked: CheckboxCheckedState, allowIndeterminate: boolean) {
22
+ if (!allowIndeterminate) {
23
+ return checked === true ? false : true
24
+ }
25
+
26
+ if (checked === false) return "indeterminate"
27
+ if (checked === "indeterminate") return true
28
+ return false
19
29
  }
20
30
 
21
31
  const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
@@ -25,6 +35,10 @@ const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
25
35
  checked,
26
36
  defaultChecked = false,
27
37
  onCheckedChange,
38
+ onCheckedStateChange,
39
+ size = "md",
40
+ invalid = false,
41
+ allowIndeterminate = false,
28
42
  disabled,
29
43
  onClick,
30
44
  children,
@@ -38,13 +52,14 @@ const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
38
52
  const dataState = currentChecked === "indeterminate" ? "indeterminate" : currentChecked ? "checked" : "unchecked"
39
53
 
40
54
  const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
41
- const nextChecked = getNextCheckedState(currentChecked)
55
+ const nextChecked = getNextCheckedState(currentChecked, allowIndeterminate)
42
56
 
43
57
  if (!isControlled) {
44
58
  setInternalChecked(nextChecked)
45
59
  }
46
60
 
47
- onCheckedChange?.(nextChecked)
61
+ onCheckedStateChange?.(nextChecked)
62
+ onCheckedChange?.(nextChecked === true)
48
63
  onClick?.(event)
49
64
  }
50
65
 
@@ -55,10 +70,12 @@ const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
55
70
  role="checkbox"
56
71
  aria-checked={currentChecked === "indeterminate" ? "mixed" : currentChecked}
57
72
  data-state={dataState}
73
+ data-size={size}
58
74
  data-slot="checkbox"
59
75
  disabled={disabled}
76
+ aria-invalid={invalid || undefined}
60
77
  className={cn(
61
- "peer flex size-5 shrink-0 items-center justify-center rounded-[10px] border border-input/88 bg-background text-primary-foreground shadow-[inset_0_1px_0_rgba(255,255,255,0.10)] outline-none transition-[background-color,border-color,box-shadow,color,transform] hover:border-ring/30 hover:bg-background focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/45 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary/28 data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_10px_24px_color-mix(in_oklch,var(--primary),transparent_82%)] data-[state=indeterminate]:border-primary/28 data-[state=indeterminate]:bg-primary data-[state=indeterminate]:shadow-[0_10px_24px_color-mix(in_oklch,var(--primary),transparent_82%)] dark:border-white/12 dark:bg-white/[0.04] dark:hover:bg-white/[0.08]",
78
+ "peer flex shrink-0 items-center justify-center rounded-[10px] border border-input/88 bg-background text-primary-foreground shadow-[inset_0_1px_0_rgba(255,255,255,0.10)] outline-none transition-[background-color,border-color,box-shadow,color,transform] hover:border-ring/30 hover:bg-background focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/45 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/25 data-[size=sm]:size-4 data-[size=md]:size-5 data-[size=lg]:size-6 data-[state=checked]:border-primary/28 data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_10px_24px_color-mix(in_oklch,var(--primary),transparent_82%)] data-[state=indeterminate]:border-primary/28 data-[state=indeterminate]:bg-primary data-[state=indeterminate]:shadow-[0_10px_24px_color-mix(in_oklch,var(--primary),transparent_82%)] dark:border-white/12 dark:bg-white/[0.04] dark:hover:bg-white/[0.08]",
62
79
  className
63
80
  )}
64
81
  onClick={handleClick}