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
@@ -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"
@@ -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}
@@ -7,9 +7,21 @@ export type CollapseProps = React.ComponentProps<"details"> & {
7
7
  defaultOpen?: boolean
8
8
  open?: boolean
9
9
  onOpenChange?: (open: boolean) => void
10
+ variant?: "default" | "soft" | "ghost"
11
+ size?: "sm" | "md" | "lg"
10
12
  }
11
13
 
12
- function Collapse({ open, defaultOpen, onOpenChange, onToggle, className, children, ...props }: CollapseProps) {
14
+ function Collapse({
15
+ open,
16
+ defaultOpen,
17
+ onOpenChange,
18
+ onToggle,
19
+ className,
20
+ children,
21
+ variant = "default",
22
+ size = "md",
23
+ ...props
24
+ }: CollapseProps) {
13
25
  const isControlled = open !== undefined
14
26
  const [internalOpen, setInternalOpen] = React.useState(defaultOpen ?? false)
15
27
  const currentOpen = isControlled ? open : internalOpen
@@ -17,8 +29,10 @@ function Collapse({ open, defaultOpen, onOpenChange, onToggle, className, childr
17
29
  return (
18
30
  <details
19
31
  data-slot="collapse"
32
+ data-variant={variant}
33
+ data-size={size}
20
34
  className={cn(
21
- "group rounded-[var(--aui-card-radius,var(--radius-xl))] border border-[color:var(--aui-card-border,var(--border))] bg-card text-card-foreground shadow-[var(--aui-card-shadow,var(--aui-control-shadow,none))] transition-[background-color,border-color,box-shadow] open:border-[color:var(--aui-control-hover-border,var(--ring))]",
35
+ "group overflow-hidden rounded-[var(--aui-card-radius,var(--radius-xl))] border border-[color:var(--aui-card-border,var(--border))] bg-card text-card-foreground shadow-[var(--aui-card-shadow,var(--aui-control-shadow,none))] transition-[background-color,border-color,box-shadow] hover:border-[color:var(--aui-control-hover-border,var(--ring))] open:border-[color:var(--aui-control-hover-border,var(--ring))] data-[variant=soft]:bg-[color:color-mix(in_oklch,var(--muted),transparent_58%)] data-[variant=soft]:shadow-none data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:shadow-none",
22
36
  className
23
37
  )}
24
38
  onToggle={(event) => {
@@ -26,6 +40,8 @@ function Collapse({ open, defaultOpen, onOpenChange, onToggle, className, childr
26
40
  const nextOpen = event.currentTarget.open
27
41
  if (!isControlled) {
28
42
  setInternalOpen(nextOpen)
43
+ } else if (nextOpen !== currentOpen) {
44
+ event.currentTarget.open = currentOpen
29
45
  }
30
46
  onOpenChange?.(nextOpen)
31
47
  }}
@@ -40,24 +56,51 @@ function Collapse({ open, defaultOpen, onOpenChange, onToggle, className, childr
40
56
  export type CollapseTriggerProps = React.ComponentProps<"summary"> & {
41
57
  icon?: React.ReactNode
42
58
  hideIcon?: boolean
59
+ size?: "sm" | "md" | "lg"
60
+ inset?: boolean
61
+ indicatorPosition?: "start" | "end"
43
62
  }
44
63
 
45
- function CollapseTrigger({ icon, hideIcon = false, className, children, ...props }: CollapseTriggerProps) {
64
+ function CollapseTrigger({
65
+ icon,
66
+ hideIcon = false,
67
+ size = "md",
68
+ inset = false,
69
+ indicatorPosition = "end",
70
+ className,
71
+ children,
72
+ onClick,
73
+ ...props
74
+ }: CollapseTriggerProps) {
75
+ const indicator = !hideIcon ? (
76
+ <span className="shrink-0 rounded-md text-muted-foreground transition-[color,transform] group-open:rotate-180 group-open:text-foreground">
77
+ {icon ?? <ChevronDownIcon className="size-4" />}
78
+ </span>
79
+ ) : null
80
+
46
81
  return (
47
82
  <summary
48
83
  data-slot="collapse-trigger"
84
+ data-size={size}
85
+ data-inset={inset || undefined}
86
+ data-indicator-position={indicatorPosition}
49
87
  className={cn(
50
- "flex cursor-pointer list-none items-center justify-between gap-3 rounded-[calc(var(--aui-card-radius,var(--radius-xl))-1px)] px-4 py-3 text-sm font-semibold outline-none transition-[background-color,color,box-shadow] hover:bg-[color:var(--aui-control-surface-hover,var(--muted))] focus-visible:shadow-[0_0_0_1px_var(--aui-focus-ring,var(--ring)),0_0_0_5px_var(--aui-focus-ring-soft,transparent)] group-open:text-foreground [&::-webkit-details-marker]:hidden",
88
+ "rounded-[calc(var(--aui-card-radius,var(--radius-xl))-1px)] group-open:rounded-b-none flex cursor-pointer list-none items-start gap-3 px-4 text-sm font-semibold outline-none transition-[background-color,color,box-shadow,border-radius] hover:bg-[color:var(--aui-control-surface-hover,var(--muted))] focus-visible:bg-[color:var(--aui-control-surface-hover,var(--muted))] focus-visible:shadow-[0_0_0_1px_var(--aui-focus-ring,var(--ring)),0_0_0_5px_var(--aui-focus-ring-soft,transparent)] group-open:text-foreground data-[indicator-position=end]:justify-between data-[indicator-position=start]:justify-start data-[size=sm]:py-2.5 data-[size=md]:py-3.5 data-[size=lg]:py-4.5 data-[inset=true]:px-5 [&::-webkit-details-marker]:hidden",
89
+ props["aria-disabled"] && "cursor-not-allowed opacity-75 hover:bg-transparent",
51
90
  className
52
91
  )}
92
+ onClick={(event) => {
93
+ if (props["aria-disabled"]) {
94
+ event.preventDefault()
95
+ return
96
+ }
97
+ onClick?.(event)
98
+ }}
53
99
  {...props}
54
100
  >
101
+ {indicatorPosition === "start" ? indicator : null}
55
102
  <span className="min-w-0 flex-1">{children}</span>
56
- {!hideIcon && (
57
- <span className="shrink-0 rounded-md text-muted-foreground transition-[color,transform] group-open:rotate-180 group-open:text-foreground">
58
- {icon ?? <ChevronDownIcon className="size-4" />}
59
- </span>
60
- )}
103
+ {indicatorPosition === "end" ? indicator : null}
61
104
  </summary>
62
105
  )
63
106
  }
@@ -67,7 +110,7 @@ function CollapseContent({ className, ...props }: React.ComponentProps<"div">) {
67
110
  <div
68
111
  data-slot="collapse-content"
69
112
  className={cn(
70
- "border-t border-[color:var(--aui-card-border,var(--border))] px-4 py-3 text-sm leading-6 text-muted-foreground",
113
+ "border-t border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_70%)] px-4 py-3.5 text-sm leading-6 text-muted-foreground",
71
114
  className
72
115
  )}
73
116
  {...props}
@@ -80,7 +123,14 @@ export type CollapseItem = {
80
123
  title: React.ReactNode
81
124
  content: React.ReactNode
82
125
  description?: React.ReactNode
126
+ meta?: React.ReactNode
127
+ badge?: React.ReactNode
83
128
  disabled?: boolean
129
+ disabledReason?: React.ReactNode
130
+ icon?: React.ReactNode
131
+ indicatorPosition?: CollapseTriggerProps["indicatorPosition"]
132
+ triggerClassName?: string
133
+ contentClassName?: string
84
134
  }
85
135
 
86
136
  export type CollapseGroupProps = React.ComponentProps<"div"> & {
@@ -89,9 +139,21 @@ export type CollapseGroupProps = React.ComponentProps<"div"> & {
89
139
  value?: string | string[]
90
140
  defaultValue?: string | string[]
91
141
  onValueChange?: (value: string | string[]) => void
142
+ variant?: CollapseProps["variant"]
143
+ size?: CollapseTriggerProps["size"]
92
144
  }
93
145
 
94
- function CollapseGroup({ items, type = "multiple", value, defaultValue, onValueChange, className, ...props }: CollapseGroupProps) {
146
+ function CollapseGroup({
147
+ items,
148
+ type = "multiple",
149
+ value,
150
+ defaultValue,
151
+ onValueChange,
152
+ variant = "default",
153
+ size = "md",
154
+ className,
155
+ ...props
156
+ }: CollapseGroupProps) {
95
157
  const initialValue = React.useMemo(() => {
96
158
  if (value !== undefined) return value
97
159
  if (defaultValue !== undefined) return defaultValue
@@ -119,16 +181,35 @@ function CollapseGroup({ items, type = "multiple", value, defaultValue, onValueC
119
181
  <Collapse
120
182
  key={item.key}
121
183
  open={isOpen(item.key)}
122
- onOpenChange={(open) => updateValue(item.key, open)}
184
+ onOpenChange={(open) => {
185
+ if (item.disabled) return
186
+ updateValue(item.key, open)
187
+ }}
188
+ variant={variant}
189
+ size={size}
123
190
  className={cn(item.disabled && "pointer-events-none opacity-60")}
124
191
  >
125
- <CollapseTrigger>
126
- <span className="grid gap-0.5">
127
- <span>{item.title}</span>
192
+ <CollapseTrigger
193
+ size={size}
194
+ icon={item.icon}
195
+ indicatorPosition={item.indicatorPosition}
196
+ className={item.triggerClassName}
197
+ aria-disabled={item.disabled || undefined}
198
+ title={typeof item.disabledReason === "string" ? item.disabledReason : undefined}
199
+ >
200
+ <span className="grid min-w-0 gap-0.5">
201
+ <span className="flex min-w-0 items-center gap-2">
202
+ <span className="truncate">{item.title}</span>
203
+ {item.badge ? <span className="shrink-0">{item.badge}</span> : null}
204
+ {item.meta ? <span className="ml-auto shrink-0 text-[11px] font-medium text-muted-foreground">{item.meta}</span> : null}
205
+ </span>
128
206
  {item.description && <span className="text-xs font-normal text-muted-foreground">{item.description}</span>}
207
+ {item.disabled && item.disabledReason ? (
208
+ <span className="text-[11px] font-medium text-muted-foreground">{item.disabledReason}</span>
209
+ ) : null}
129
210
  </span>
130
211
  </CollapseTrigger>
131
- <CollapseContent>{item.content}</CollapseContent>
212
+ <CollapseContent className={item.contentClassName}>{item.content}</CollapseContent>
132
213
  </Collapse>
133
214
  ))}
134
215
  </div>