tembro 2.0.5 → 2.1.0

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 (381) hide show
  1. package/dist/components/calendar/calendar.cjs +1 -1
  2. package/dist/components/calendar/calendar.d.ts +2 -1
  3. package/dist/components/calendar/calendar.js +126 -122
  4. package/dist/components/calendar/date-range-picker.cjs +1 -1
  5. package/dist/components/calendar/date-range-picker.d.ts +2 -1
  6. package/dist/components/calendar/date-range-picker.js +39 -39
  7. package/dist/components/charts/charts.cjs +1 -1
  8. package/dist/components/charts/charts.d.ts +13 -4
  9. package/dist/components/charts/charts.js +76 -46
  10. package/dist/components/charts/progress-ring.cjs +1 -1
  11. package/dist/components/charts/progress-ring.d.ts +3 -1
  12. package/dist/components/charts/progress-ring.js +11 -10
  13. package/dist/components/data-table/data-table-column-visibility-menu.cjs +1 -1
  14. package/dist/components/data-table/data-table-column-visibility-menu.d.ts +4 -1
  15. package/dist/components/data-table/data-table-column-visibility-menu.js +36 -8
  16. package/dist/components/data-table/data-table-pagination.cjs +1 -1
  17. package/dist/components/data-table/data-table-pagination.js +4 -4
  18. package/dist/components/data-table/data-table-toolbar.cjs +1 -1
  19. package/dist/components/data-table/data-table-toolbar.js +12 -13
  20. package/dist/components/data-table/data-table.cjs +1 -1
  21. package/dist/components/data-table/data-table.d.ts +2 -2
  22. package/dist/components/data-table/data-table.js +2 -1
  23. package/dist/components/display/carousel.cjs +1 -1
  24. package/dist/components/display/carousel.d.ts +15 -1
  25. package/dist/components/display/carousel.js +128 -86
  26. package/dist/components/display/code-block.cjs +2 -2
  27. package/dist/components/display/code-block.d.ts +2 -1
  28. package/dist/components/display/code-block.js +17 -12
  29. package/dist/components/display/delta-badge.cjs +1 -1
  30. package/dist/components/display/delta-badge.d.ts +2 -1
  31. package/dist/components/display/delta-badge.js +11 -7
  32. package/dist/components/display/kanban.cjs +1 -1
  33. package/dist/components/display/kanban.d.ts +4 -1
  34. package/dist/components/display/kanban.js +60 -33
  35. package/dist/components/display/metric-grid.cjs +1 -1
  36. package/dist/components/display/metric-grid.d.ts +1 -0
  37. package/dist/components/display/metric-grid.js +1 -1
  38. package/dist/components/display/qr-code.cjs +1 -1
  39. package/dist/components/display/qr-code.d.ts +2 -1
  40. package/dist/components/display/qr-code.js +19 -16
  41. package/dist/components/display/smart-card.d.ts +1 -1
  42. package/dist/components/display/status-legend.d.ts +1 -1
  43. package/dist/components/display/tag.cjs +1 -1
  44. package/dist/components/display/tag.d.ts +2 -1
  45. package/dist/components/display/tag.js +28 -22
  46. package/dist/components/display/tree-view.cjs +1 -1
  47. package/dist/components/display/tree-view.d.ts +9 -1
  48. package/dist/components/display/tree-view.js +104 -40
  49. package/dist/components/display/trend-card.cjs +1 -1
  50. package/dist/components/display/trend-card.js +27 -41
  51. package/dist/components/feedback/alert.cjs +1 -1
  52. package/dist/components/feedback/alert.d.ts +2 -1
  53. package/dist/components/feedback/alert.js +6 -6
  54. package/dist/components/feedback/loading-state.cjs +1 -1
  55. package/dist/components/feedback/loading-state.d.ts +3 -1
  56. package/dist/components/feedback/loading-state.js +23 -10
  57. package/dist/components/feedback/page-state.cjs +1 -1
  58. package/dist/components/feedback/page-state.d.ts +2 -1
  59. package/dist/components/feedback/page-state.js +7 -4
  60. package/dist/components/form/form-field-shell.cjs +1 -1
  61. package/dist/components/form/form-field-shell.d.ts +4 -2
  62. package/dist/components/form/form-field-shell.js +57 -41
  63. package/dist/components/form/form-input.cjs +1 -1
  64. package/dist/components/form/form-input.d.ts +3 -4
  65. package/dist/components/form/form-input.js +259 -257
  66. package/dist/components/form/form-select.cjs +1 -1
  67. package/dist/components/form/form-select.d.ts +2 -2
  68. package/dist/components/form/form-select.js +8 -6
  69. package/dist/components/form/form-switch.cjs +1 -1
  70. package/dist/components/form/form-switch.d.ts +1 -1
  71. package/dist/components/form/form-switch.js +58 -54
  72. package/dist/components/form/form-textarea.cjs +1 -1
  73. package/dist/components/form/form-textarea.d.ts +1 -1
  74. package/dist/components/form/form-textarea.js +29 -27
  75. package/dist/components/inputs/async-select.d.ts +3 -0
  76. package/dist/components/inputs/search-input.d.ts +3 -0
  77. package/dist/components/inputs/simple-select.cjs +1 -1
  78. package/dist/components/inputs/simple-select.d.ts +10 -32
  79. package/dist/components/inputs/simple-select.js +5 -101
  80. package/dist/components/layout/app-sidebar.cjs +1 -1
  81. package/dist/components/layout/app-sidebar.d.ts +1 -0
  82. package/dist/components/layout/app-sidebar.js +36 -36
  83. package/dist/components/layout/breadcrumbs.cjs +1 -1
  84. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  85. package/dist/components/layout/breadcrumbs.js +7 -7
  86. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  87. package/dist/components/modern/calendar-scheduler.d.ts +5 -1
  88. package/dist/components/modern/calendar-scheduler.js +47 -28
  89. package/dist/components/modern/dual-list-picker.cjs +1 -1
  90. package/dist/components/modern/dual-list-picker.d.ts +5 -1
  91. package/dist/components/modern/dual-list-picker.js +81 -23
  92. package/dist/components/modern/rich-text-editor.cjs +1 -1
  93. package/dist/components/modern/rich-text-editor.d.ts +3 -1
  94. package/dist/components/modern/rich-text-editor.js +12 -9
  95. package/dist/components/modern/tour.cjs +1 -1
  96. package/dist/components/modern/tour.d.ts +5 -1
  97. package/dist/components/modern/tour.js +57 -35
  98. package/dist/components/navigation/command-bar.cjs +1 -1
  99. package/dist/components/navigation/command-bar.d.ts +3 -1
  100. package/dist/components/navigation/command-bar.js +10 -7
  101. package/dist/components/navigation/demo.cjs +1 -1
  102. package/dist/components/navigation/demo.js +0 -1
  103. package/dist/components/navigation/nav-tabs.cjs +1 -1
  104. package/dist/components/navigation/nav-tabs.js +39 -27
  105. package/dist/components/navigation/page-tabs.cjs +1 -1
  106. package/dist/components/navigation/page-tabs.js +41 -30
  107. package/dist/components/navigation/pagination.cjs +1 -1
  108. package/dist/components/navigation/pagination.d.ts +7 -1
  109. package/dist/components/navigation/pagination.js +48 -25
  110. package/dist/components/notifications/notification-center.cjs +1 -1
  111. package/dist/components/notifications/notification-center.d.ts +3 -1
  112. package/dist/components/notifications/notification-center.js +56 -38
  113. package/dist/components/notifications/toast.cjs +1 -1
  114. package/dist/components/notifications/toast.d.ts +1 -0
  115. package/dist/components/notifications/toast.js +4 -0
  116. package/dist/components/overlay/alert-dialog.cjs +1 -1
  117. package/dist/components/overlay/alert-dialog.js +1 -1
  118. package/dist/components/overlay/confirm-dialog.cjs +1 -1
  119. package/dist/components/overlay/confirm-dialog.d.ts +4 -2
  120. package/dist/components/overlay/confirm-dialog.js +31 -22
  121. package/dist/components/overlay/drawer.cjs +1 -1
  122. package/dist/components/overlay/drawer.d.ts +3 -1
  123. package/dist/components/overlay/drawer.js +24 -16
  124. package/dist/components/ui/accordion/index.d.ts +4 -0
  125. package/dist/components/ui/badge/index.cjs +1 -1
  126. package/dist/components/ui/badge/index.d.ts +1 -1
  127. package/dist/components/ui/badge/index.js +2 -1
  128. package/dist/components/ui/button/index.cjs +1 -1
  129. package/dist/components/ui/button/index.d.ts +2 -1
  130. package/dist/components/ui/button/index.js +13 -10
  131. package/dist/components/ui/card/index.cjs +1 -1
  132. package/dist/components/ui/card/index.d.ts +13 -2
  133. package/dist/components/ui/card/index.js +74 -49
  134. package/dist/components/ui/dialog/index.cjs +1 -1
  135. package/dist/components/ui/dialog/index.js +2 -1
  136. package/dist/components/ui/hover-card.cjs +1 -1
  137. package/dist/components/ui/hover-card.d.ts +11 -3
  138. package/dist/components/ui/hover-card.js +29 -24
  139. package/dist/components/ui/input/index.cjs +1 -1
  140. package/dist/components/ui/input/index.d.ts +9 -1
  141. package/dist/components/ui/input/index.js +63 -30
  142. package/dist/components/ui/popover/index.cjs +1 -1
  143. package/dist/components/ui/popover/index.d.ts +2 -2
  144. package/dist/components/ui/popover/index.js +6 -5
  145. package/dist/components/ui/radio-group/index.cjs +1 -1
  146. package/dist/components/ui/radio-group/index.d.ts +5 -1
  147. package/dist/components/ui/radio-group/index.js +50 -16
  148. package/dist/components/ui/right-click-menu/index.cjs +1 -1
  149. package/dist/components/ui/right-click-menu/index.d.ts +5 -1
  150. package/dist/components/ui/right-click-menu/index.js +77 -23
  151. package/dist/components/ui/segmented-control/index.cjs +1 -1
  152. package/dist/components/ui/segmented-control/index.d.ts +2 -1
  153. package/dist/components/ui/segmented-control/index.js +23 -11
  154. package/dist/components/ui/select/index.cjs +1 -1
  155. package/dist/components/ui/select/index.d.ts +40 -1
  156. package/dist/components/ui/select/index.js +159 -48
  157. package/dist/components/ui/switch/index.cjs +1 -1
  158. package/dist/components/ui/switch/index.d.ts +18 -0
  159. package/dist/components/ui/switch/index.js +47 -17
  160. package/dist/components/ui/tabs/index.cjs +1 -1
  161. package/dist/components/ui/tabs/index.d.ts +14 -4
  162. package/dist/components/ui/tabs/index.js +11 -8
  163. package/dist/components/ui/textarea/index.cjs +1 -1
  164. package/dist/components/ui/textarea/index.d.ts +10 -2
  165. package/dist/components/ui/textarea/index.js +37 -8
  166. package/dist/components/ui/textarea.cjs +1 -0
  167. package/dist/components/ui/textarea.d.ts +1 -0
  168. package/dist/components/ui/textarea.js +2 -0
  169. package/dist/components/ui/tooltip/index.cjs +1 -1
  170. package/dist/components/ui/tooltip/index.d.ts +11 -3
  171. package/dist/components/ui/tooltip/index.js +41 -20
  172. package/dist/components/upload/file-upload.cjs +1 -1
  173. package/dist/components/upload/file-upload.d.ts +8 -1
  174. package/dist/components/upload/file-upload.js +132 -100
  175. package/dist/components/upload/image-upload.cjs +1 -1
  176. package/dist/components/upload/image-upload.d.ts +5 -1
  177. package/dist/components/upload/image-upload.js +34 -9
  178. package/dist/index.cjs +1 -1
  179. package/dist/index.js +31 -31
  180. package/dist/public-component-surface.cjs +1 -1
  181. package/dist/public-component-surface.js +15 -0
  182. package/dist/showcase/component-api-schema.cjs +1 -1
  183. package/dist/showcase/component-api-schema.js +187 -10
  184. package/dist/showcase/create-demo.cjs +5 -4
  185. package/dist/showcase/create-demo.js +2 -2
  186. package/dist/showcase/fallback.cjs +3 -3
  187. package/dist/showcase/fallback.js +221 -243
  188. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  189. package/dist/showcase/premium/alert/showcase.js +1 -0
  190. package/dist/showcase/premium/app-sidebar/showcase.cjs +1 -1
  191. package/dist/showcase/premium/app-sidebar/showcase.js +1 -0
  192. package/dist/showcase/premium/badge/showcase.cjs +1 -1
  193. package/dist/showcase/premium/badge/showcase.js +7 -0
  194. package/dist/showcase/premium/badge/types.d.ts +1 -1
  195. package/dist/showcase/premium/breadcrumbs/showcase.cjs +1 -1
  196. package/dist/showcase/premium/breadcrumbs/showcase.js +12 -1
  197. package/dist/showcase/premium/button/mock.cjs +1 -4
  198. package/dist/showcase/premium/button/mock.js +1 -1
  199. package/dist/showcase/premium/button/showcase.cjs +1 -1
  200. package/dist/showcase/premium/button/showcase.js +2 -2
  201. package/dist/showcase/premium/card/showcase.cjs +1 -1
  202. package/dist/showcase/premium/card/showcase.js +96 -47
  203. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  204. package/dist/showcase/premium/carousel/showcase.js +76 -49
  205. package/dist/showcase/premium/command-bar/showcase.cjs +1 -1
  206. package/dist/showcase/premium/command-bar/showcase.js +2 -0
  207. package/dist/showcase/premium/data-table/mock.cjs +12 -11
  208. package/dist/showcase/premium/data-table/mock.js +1 -1
  209. package/dist/showcase/premium/data-table/showcase.cjs +1 -1
  210. package/dist/showcase/premium/data-table/showcase.js +1 -1
  211. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  212. package/dist/showcase/premium/data-table-parts/showcase.js +3 -1
  213. package/dist/showcase/premium/file-upload/showcase.cjs +1 -1
  214. package/dist/showcase/premium/file-upload/showcase.js +25 -4
  215. package/dist/showcase/premium/image-upload/showcase.cjs +1 -1
  216. package/dist/showcase/premium/image-upload/showcase.js +4 -1
  217. package/dist/showcase/premium/index.cjs +1 -1
  218. package/dist/showcase/premium/index.js +396 -402
  219. package/dist/showcase/premium/loading-state/showcase.cjs +1 -1
  220. package/dist/showcase/premium/loading-state/showcase.js +3 -1
  221. package/dist/showcase/premium/metric-grid/showcase.cjs +1 -1
  222. package/dist/showcase/premium/metric-grid/showcase.js +96 -28
  223. package/dist/showcase/premium/notification-center/showcase.cjs +1 -1
  224. package/dist/showcase/premium/notification-center/showcase.js +7 -3
  225. package/dist/showcase/premium/page-state/showcase.cjs +1 -1
  226. package/dist/showcase/premium/page-state/showcase.js +5 -1
  227. package/dist/showcase/premium/pagination/showcase.cjs +1 -1
  228. package/dist/showcase/premium/pagination/showcase.js +15 -2
  229. package/dist/showcase/premium/popover/showcase.cjs +1 -1
  230. package/dist/showcase/premium/popover/showcase.js +85 -50
  231. package/dist/showcase/premium/radio-group/showcase.cjs +1 -1
  232. package/dist/showcase/premium/radio-group/showcase.js +27 -4
  233. package/dist/showcase/premium/right-click-menu/showcase.cjs +1 -1
  234. package/dist/showcase/premium/right-click-menu/showcase.js +56 -43
  235. package/dist/showcase/premium/segmented-control/showcase.cjs +1 -1
  236. package/dist/showcase/premium/segmented-control/showcase.js +1 -0
  237. package/dist/showcase/premium/select/data.cjs +1 -1
  238. package/dist/showcase/premium/select/data.js +69 -34
  239. package/dist/showcase/premium/select/mock.cjs +20 -8
  240. package/dist/showcase/premium/select/mock.js +3 -2
  241. package/dist/showcase/premium/select/showcase.cjs +1 -1
  242. package/dist/showcase/premium/select/showcase.js +101 -86
  243. package/dist/showcase/premium/select/types.d.ts +3 -0
  244. package/dist/showcase/premium/statistic/showcase.cjs +1 -1
  245. package/dist/showcase/premium/statistic/showcase.js +57 -25
  246. package/dist/showcase/premium/switch/showcase.cjs +1 -1
  247. package/dist/showcase/premium/switch/showcase.js +25 -14
  248. package/dist/showcase/premium/tabs/showcase.cjs +1 -1
  249. package/dist/showcase/premium/tabs/showcase.js +171 -48
  250. package/dist/showcase/premium/textarea/mock.cjs +12 -4
  251. package/dist/showcase/premium/textarea/mock.js +1 -1
  252. package/dist/showcase/premium/textarea/showcase.cjs +1 -1
  253. package/dist/showcase/premium/textarea/showcase.js +8 -3
  254. package/dist/showcase/premium/toast/showcase.cjs +1 -1
  255. package/dist/showcase/premium/toast/showcase.js +32 -6
  256. package/dist/showcase/premium/types.d.ts +1 -1
  257. package/dist/showcase/registry-quality.cjs +1 -1
  258. package/dist/showcase/registry-quality.js +1 -0
  259. package/dist/showcase/registry-specific.cjs +1 -1
  260. package/dist/showcase/registry-specific.js +78 -74
  261. package/dist/showcase/render-registry-preview.cjs +1 -1
  262. package/dist/showcase/render-registry-preview.js +90 -108
  263. package/dist/showcase/site-data.cjs +1 -1
  264. package/dist/showcase/site-data.js +60 -21
  265. package/dist/showcase/tembro-registry.json.cjs +1 -1
  266. package/dist/showcase/tembro-registry.json.js +34 -20
  267. package/dist/showcase/types.d.ts +1 -1
  268. package/package.json +1 -1
  269. package/packages/cli/dist/index.cjs +31 -31
  270. package/packages/cli/vendor/src/components/calendar/calendar.tsx +59 -50
  271. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +7 -4
  272. package/packages/cli/vendor/src/components/charts/charts.tsx +109 -66
  273. package/packages/cli/vendor/src/components/charts/progress-ring.tsx +37 -26
  274. package/packages/cli/vendor/src/components/data-table/data-table-column-visibility-menu.tsx +41 -22
  275. package/packages/cli/vendor/src/components/data-table/data-table-pagination.tsx +7 -7
  276. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +8 -6
  277. package/packages/cli/vendor/src/components/data-table/data-table.tsx +21 -20
  278. package/packages/cli/vendor/src/components/display/carousel.tsx +102 -9
  279. package/packages/cli/vendor/src/components/display/code-block.tsx +22 -2
  280. package/packages/cli/vendor/src/components/display/delta-badge.tsx +11 -11
  281. package/packages/cli/vendor/src/components/display/kanban.tsx +103 -57
  282. package/packages/cli/vendor/src/components/display/metric-grid.tsx +16 -13
  283. package/packages/cli/vendor/src/components/display/qr-code.tsx +17 -15
  284. package/packages/cli/vendor/src/components/display/smart-card.tsx +1 -1
  285. package/packages/cli/vendor/src/components/display/status-legend.tsx +1 -1
  286. package/packages/cli/vendor/src/components/display/tag.tsx +39 -21
  287. package/packages/cli/vendor/src/components/display/tree-view.tsx +221 -84
  288. package/packages/cli/vendor/src/components/display/trend-card.tsx +6 -40
  289. package/packages/cli/vendor/src/components/feedback/alert.tsx +3 -1
  290. package/packages/cli/vendor/src/components/feedback/loading-state.tsx +33 -17
  291. package/packages/cli/vendor/src/components/feedback/page-state.tsx +8 -7
  292. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +37 -8
  293. package/packages/cli/vendor/src/components/form/form-input.tsx +11 -12
  294. package/packages/cli/vendor/src/components/form/form-select.tsx +6 -4
  295. package/packages/cli/vendor/src/components/form/form-switch.tsx +9 -3
  296. package/packages/cli/vendor/src/components/form/form-textarea.tsx +6 -2
  297. package/packages/cli/vendor/src/components/inputs/async-select.tsx +11 -8
  298. package/packages/cli/vendor/src/components/inputs/search-input.tsx +5 -2
  299. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +20 -190
  300. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +3 -1
  301. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +3 -1
  302. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +28 -13
  303. package/packages/cli/vendor/src/components/modern/dual-list-picker.tsx +103 -35
  304. package/packages/cli/vendor/src/components/modern/rich-text-editor.tsx +25 -22
  305. package/packages/cli/vendor/src/components/modern/tour.tsx +47 -29
  306. package/packages/cli/vendor/src/components/navigation/command-bar.tsx +6 -0
  307. package/packages/cli/vendor/src/components/navigation/demo.tsx +0 -1
  308. package/packages/cli/vendor/src/components/navigation/nav-tabs.tsx +38 -29
  309. package/packages/cli/vendor/src/components/navigation/page-tabs.tsx +35 -23
  310. package/packages/cli/vendor/src/components/navigation/pagination.tsx +65 -31
  311. package/packages/cli/vendor/src/components/notifications/notification-center.tsx +64 -39
  312. package/packages/cli/vendor/src/components/notifications/toast.tsx +23 -21
  313. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +1 -1
  314. package/packages/cli/vendor/src/components/overlay/confirm-dialog.tsx +45 -22
  315. package/packages/cli/vendor/src/components/overlay/drawer.tsx +18 -5
  316. package/packages/cli/vendor/src/components/ui/accordion/index.tsx +4 -0
  317. package/packages/cli/vendor/src/components/ui/badge/index.tsx +2 -1
  318. package/packages/cli/vendor/src/components/ui/button/index.tsx +11 -5
  319. package/packages/cli/vendor/src/components/ui/card/index.tsx +95 -25
  320. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +2 -1
  321. package/packages/cli/vendor/src/components/ui/hover-card.tsx +54 -28
  322. package/packages/cli/vendor/src/components/ui/input/index.tsx +98 -0
  323. package/packages/cli/vendor/src/components/ui/popover/index.tsx +10 -8
  324. package/packages/cli/vendor/src/components/ui/radio-group/index.tsx +55 -6
  325. package/packages/cli/vendor/src/components/ui/right-click-menu/index.tsx +120 -9
  326. package/packages/cli/vendor/src/components/ui/segmented-control/index.tsx +29 -3
  327. package/packages/cli/vendor/src/components/ui/select/index.tsx +260 -34
  328. package/packages/cli/vendor/src/components/ui/switch/index.tsx +71 -6
  329. package/packages/cli/vendor/src/components/ui/tabs/index.tsx +22 -6
  330. package/packages/cli/vendor/src/components/ui/textarea/index.tsx +105 -15
  331. package/packages/cli/vendor/src/components/ui/textarea.tsx +2 -0
  332. package/packages/cli/vendor/src/components/ui/tooltip/index.tsx +67 -22
  333. package/packages/cli/vendor/src/components/upload/file-upload.tsx +120 -57
  334. package/packages/cli/vendor/src/components/upload/image-upload.tsx +71 -24
  335. package/packages/cli/vendor/src/public-component-surface.ts +3 -0
  336. package/packages/cli/vendor/src/showcase/component-api-schema.ts +79 -41
  337. package/packages/cli/vendor/src/showcase/create-demo.tsx +16 -15
  338. package/packages/cli/vendor/src/showcase/fallback.tsx +4 -19
  339. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +1 -0
  340. package/packages/cli/vendor/src/showcase/premium/app-sidebar/showcase.tsx +1 -0
  341. package/packages/cli/vendor/src/showcase/premium/badge/showcase.tsx +4 -2
  342. package/packages/cli/vendor/src/showcase/premium/badge/types.ts +1 -1
  343. package/packages/cli/vendor/src/showcase/premium/breadcrumbs/showcase.tsx +3 -1
  344. package/packages/cli/vendor/src/showcase/premium/button/mock.ts +2 -5
  345. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +2 -2
  346. package/packages/cli/vendor/src/showcase/premium/card/showcase.tsx +26 -1
  347. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +19 -3
  348. package/packages/cli/vendor/src/showcase/premium/command-bar/showcase.tsx +1 -1
  349. package/packages/cli/vendor/src/showcase/premium/data-table/mock.ts +26 -25
  350. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +3 -3
  351. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +3 -3
  352. package/packages/cli/vendor/src/showcase/premium/file-upload/showcase.tsx +21 -1
  353. package/packages/cli/vendor/src/showcase/premium/image-upload/showcase.tsx +4 -1
  354. package/packages/cli/vendor/src/showcase/premium/index.ts +0 -2
  355. package/packages/cli/vendor/src/showcase/premium/loading-state/showcase.tsx +1 -1
  356. package/packages/cli/vendor/src/showcase/premium/metric-grid/showcase.tsx +36 -4
  357. package/packages/cli/vendor/src/showcase/premium/notification-center/showcase.tsx +4 -3
  358. package/packages/cli/vendor/src/showcase/premium/page-state/showcase.tsx +1 -0
  359. package/packages/cli/vendor/src/showcase/premium/pagination/showcase.tsx +13 -1
  360. package/packages/cli/vendor/src/showcase/premium/popover/showcase.tsx +27 -11
  361. package/packages/cli/vendor/src/showcase/premium/radio-group/showcase.tsx +13 -1
  362. package/packages/cli/vendor/src/showcase/premium/right-click-menu/showcase.tsx +8 -5
  363. package/packages/cli/vendor/src/showcase/premium/segmented-control/showcase.tsx +1 -0
  364. package/packages/cli/vendor/src/showcase/premium/select/data.ts +12 -3
  365. package/packages/cli/vendor/src/showcase/premium/select/mock.ts +4 -4
  366. package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +35 -22
  367. package/packages/cli/vendor/src/showcase/premium/select/types.ts +3 -0
  368. package/packages/cli/vendor/src/showcase/premium/statistic/showcase.tsx +10 -1
  369. package/packages/cli/vendor/src/showcase/premium/switch/showcase.tsx +15 -6
  370. package/packages/cli/vendor/src/showcase/premium/tabs/showcase.tsx +48 -1
  371. package/packages/cli/vendor/src/showcase/premium/textarea/mock.ts +12 -4
  372. package/packages/cli/vendor/src/showcase/premium/textarea/showcase.tsx +5 -0
  373. package/packages/cli/vendor/src/showcase/premium/toast/showcase.tsx +17 -1
  374. package/packages/cli/vendor/src/showcase/premium/types.ts +1 -1
  375. package/packages/cli/vendor/src/showcase/registry-quality.ts +3 -2
  376. package/packages/cli/vendor/src/showcase/registry-specific.tsx +7 -8
  377. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +5 -21
  378. package/packages/cli/vendor/src/showcase/site-data.tsx +21 -15
  379. package/packages/cli/vendor/src/showcase/tembro-registry.json +42 -20
  380. package/packages/cli/vendor/src/showcase/types.ts +1 -1
  381. package/registry.json +18 -6
@@ -11,9 +11,10 @@ export type PageStateProps = Omit<React.ComponentProps<"div">, "title"> & {
11
11
  title?: React.ReactNode
12
12
  description?: React.ReactNode
13
13
  icon?: React.ReactNode
14
- action?: React.ReactNode
15
- compact?: boolean
16
- }
14
+ action?: React.ReactNode
15
+ extra?: React.ReactNode
16
+ compact?: boolean
17
+ }
17
18
 
18
19
  function defaultPageStateIcon(tone: PageStateTone) {
19
20
  switch (tone) {
@@ -30,7 +31,7 @@ function defaultPageStateIcon(tone: PageStateTone) {
30
31
  }
31
32
  }
32
33
 
33
- function PageState({ tone = "empty", title, description, icon, action, compact = false, className, ...props }: PageStateProps) {
34
+ function PageState({ tone = "empty", title, description, icon, action, extra, compact = false, className, ...props }: PageStateProps) {
34
35
  return (
35
36
  <div
36
37
  data-slot="page-state"
@@ -49,10 +50,10 @@ function PageState({ tone = "empty", title, description, icon, action, compact =
49
50
  {title && <div className="text-base font-semibold tracking-tight text-foreground">{title}</div>}
50
51
  {description && <div className="max-w-md text-sm leading-6 text-muted-foreground">{description}</div>}
51
52
  </div>
52
- {action && <div>{action}</div>}
53
+ {(action || extra) ? <div className="flex flex-wrap items-center justify-center gap-2">{action}{extra}</div> : null}
53
54
  </div>
54
- )
55
- }
55
+ )
56
+ }
56
57
 
57
58
  export type InlineStateProps = Omit<PageStateProps, "compact"> & {
58
59
  retryLabel?: React.ReactNode
@@ -10,6 +10,8 @@ export type FormFieldShellProps = React.ComponentProps<"div"> & {
10
10
  label?: React.ReactNode
11
11
  description?: React.ReactNode
12
12
  error?: React.ReactNode
13
+ success?: React.ReactNode
14
+ loading?: boolean
13
15
  required?: boolean
14
16
  htmlFor?: string
15
17
  labelId?: string
@@ -34,6 +36,8 @@ export type FormFieldShellControlProps = Pick<
34
36
  FormFieldShellProps,
35
37
  | "label"
36
38
  | "description"
39
+ | "success"
40
+ | "loading"
37
41
  | "required"
38
42
  | "className"
39
43
  | "htmlFor"
@@ -89,6 +93,8 @@ function FormFieldShell({
89
93
  label,
90
94
  description,
91
95
  error,
96
+ success,
97
+ loading = false,
92
98
  required = false,
93
99
  htmlFor,
94
100
  labelId,
@@ -181,13 +187,30 @@ function FormFieldShell({
181
187
  {showErrorIcon && <span className="mt-1 shrink-0">{resolvedErrorIcon}</span>}
182
188
  <span className="min-w-0">{error}</span>
183
189
  </p>
184
- ) : null
185
-
186
- return (
190
+ ) : null
191
+
192
+ const successNode = success && !error ? (
193
+ <p
194
+ data-slot="form-field-success"
195
+ className="rounded-[min(var(--radius-xl),16px)] border border-emerald-500/18 bg-emerald-500/8 px-3 py-2 text-sm font-medium leading-6 text-emerald-700 dark:text-emerald-300"
196
+ >
197
+ {success}
198
+ </p>
199
+ ) : null
200
+
201
+ const loadingNode = loading ? (
202
+ <p data-slot="form-field-loading" className="text-sm leading-6 text-muted-foreground">
203
+ Loading...
204
+ </p>
205
+ ) : null
206
+
207
+ return (
187
208
  <div
188
209
  data-slot="form-field-shell"
189
210
  data-layout={layout}
190
211
  data-invalid={Boolean(error) || undefined}
212
+ data-success={Boolean(success && !error) || undefined}
213
+ data-loading={loading || undefined}
191
214
  data-disabled={disabled || undefined}
192
215
  data-readonly={readOnly || undefined}
193
216
  aria-disabled={disabled || undefined}
@@ -202,7 +225,9 @@ function FormFieldShell({
202
225
  </div>
203
226
  <div className="grid min-w-0 gap-2">
204
227
  {content}
228
+ {loadingNode}
205
229
  {hasDescriptionBottom && descriptionNode}
230
+ {successNode}
206
231
  {errorNode}
207
232
  </div>
208
233
  </>
@@ -212,17 +237,21 @@ function FormFieldShell({
212
237
  <div className="grid min-w-0 flex-1 gap-2">
213
238
  {hasDescriptionTop && descriptionNode}
214
239
  {content}
240
+ {loadingNode}
215
241
  {hasDescriptionBottom && descriptionNode}
216
- {errorNode}
242
+ {successNode}
243
+ {errorNode}
217
244
  </div>
218
245
  </>
219
246
  ) : (
220
247
  <>
221
248
  {header}
222
- {hasDescriptionTop && descriptionNode}
223
- {content}
224
- {hasDescriptionBottom && descriptionNode}
225
- {errorNode}
249
+ {hasDescriptionTop && descriptionNode}
250
+ {content}
251
+ {loadingNode}
252
+ {hasDescriptionBottom && descriptionNode}
253
+ {successNode}
254
+ {errorNode}
226
255
  </>
227
256
  )}
228
257
  </div>
@@ -8,7 +8,7 @@ import {
8
8
  type DateRangeValue,
9
9
  } from "@/components/inputs/date-range-input"
10
10
  import { DateInput, type DateInputProps } from "@/components/inputs/date-input"
11
- import { Input, type InputTextProps } from "@/components/ui/input"
11
+ import { Input, type InputClearableProps, type InputSearchProps, type InputTextProps } from "@/components/ui/input"
12
12
  import { MaskedInput, type MaskedInputProps } from "@/components/inputs/masked-input"
13
13
  import { MoneyInput, type MoneyInputProps } from "@/components/inputs/money-input"
14
14
  import { NumberInput, type NumberInputProps } from "@/components/inputs/number-input"
@@ -18,11 +18,6 @@ import {
18
18
  type PhoneInputProps,
19
19
  } from "@/components/inputs/phone-input"
20
20
  import { QuantityInput, type QuantityInputProps } from "@/components/inputs/quantity-input"
21
- import { SearchInput, type SearchInputProps } from "@/components/inputs/search-input"
22
- import {
23
- ClearableInput,
24
- type ClearableInputProps,
25
- } from "@/components/inputs/clearable-input"
26
21
  import {
27
22
  FormFieldShell,
28
23
  type FormFieldShellControlProps,
@@ -76,7 +71,7 @@ export type FormTextInputProps<
76
71
  export type FormInputSearchVariantProps<
77
72
  TFieldValues extends FieldValues = FieldValues,
78
73
  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
79
- > = Omit<SearchInputProps, "name" | "value" | "defaultValue" | "onValueChange"> &
74
+ > = Omit<InputSearchProps, "name" | "value" | "defaultValue" | "onValueChange" | "kind"> &
80
75
  FormControlledFieldProps<TFieldValues, TName> & {
81
76
  kind: "search"
82
77
  onValueChange?: (value: string) => void
@@ -134,7 +129,7 @@ export type FormInputDateRangeVariantProps<
134
129
  export type FormInputClearableVariantProps<
135
130
  TFieldValues extends FieldValues = FieldValues,
136
131
  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
137
- > = Omit<ClearableInputProps, "name" | "value" | "defaultValue" | "onValueChange"> &
132
+ > = Omit<InputClearableProps, "name" | "value" | "defaultValue" | "onValueChange" | "kind"> &
138
133
  FormControlledFieldProps<TFieldValues, TName> & {
139
134
  kind: "clearable"
140
135
  emptyValue?: unknown
@@ -197,6 +192,8 @@ function buildShellProps<
197
192
  return {
198
193
  label: props.label,
199
194
  description: props.description,
195
+ success: props.success,
196
+ loading: props.loading,
200
197
  required: props.required,
201
198
  className: props.className,
202
199
  htmlFor: props.id ?? props.name,
@@ -275,8 +272,9 @@ function FormInput<
275
272
  error={error}
276
273
  htmlFor={id ?? inputId}
277
274
  >
278
- <SearchInput
279
- {...searchProps}
275
+ <Input
276
+ {...(searchProps as Omit<InputSearchProps, "kind">)}
277
+ type="search"
280
278
  id={id ?? inputId}
281
279
  name={field.name}
282
280
  ref={field.ref}
@@ -605,8 +603,9 @@ function FormInput<
605
603
  error={error}
606
604
  htmlFor={id ?? inputId}
607
605
  >
608
- <ClearableInput
609
- {...clearableProps}
606
+ <Input
607
+ {...(clearableProps as Omit<InputClearableProps, "kind">)}
608
+ clearable
610
609
  id={id ?? inputId}
611
610
  name={field.name}
612
611
  ref={field.ref}
@@ -6,7 +6,7 @@ import {
6
6
  type AsyncSelectOption,
7
7
  type AsyncSelectProps,
8
8
  } from "@/components/inputs/async-select"
9
- import { SimpleSelect, type SimpleSelectProps } from "@/components/inputs/simple-select"
9
+ import { Select, type SelectProps } from "@/components/ui/select"
10
10
  import {
11
11
  FormFieldShell,
12
12
  type FormFieldShellControlProps,
@@ -27,7 +27,7 @@ type FormSelectBaseProps<
27
27
  export type FormSimpleSelectProps<
28
28
  TFieldValues extends FieldValues = FieldValues,
29
29
  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
30
- > = Omit<SimpleSelectProps, "value" | "onValueChange" | "disabled"> &
30
+ > = Omit<SelectProps, "children" | "value" | "onValueChange" | "disabled"> &
31
31
  FormSelectBaseProps<TFieldValues, TName> & {
32
32
  kind?: "simple"
33
33
  emptyValue?: unknown
@@ -67,6 +67,8 @@ function buildShellProps<
67
67
  return {
68
68
  label: props.label,
69
69
  description: props.description,
70
+ success: props.success,
71
+ loading: props.loading,
70
72
  required: props.required,
71
73
  className: props.className,
72
74
  htmlFor: props.name,
@@ -196,9 +198,9 @@ function FormSelect<
196
198
  errorId={resolvedIds.errorId}
197
199
  error={error}
198
200
  >
199
- <SimpleSelect
201
+ <Select
200
202
  {...simpleProps}
201
- value={field.value == null ? "" : String(field.value)}
203
+ value={field.value == null ? undefined : String(field.value)}
202
204
  disabled={disabled || readOnly}
203
205
  aria-describedby={resolvedIds.describedBy}
204
206
  aria-errormessage={error ? resolvedIds.errorId : undefined}
@@ -29,9 +29,11 @@ function FormSwitch<
29
29
  >({
30
30
  control,
31
31
  name,
32
- label,
33
- description,
34
- required,
32
+ label,
33
+ description,
34
+ success,
35
+ loading,
36
+ required,
35
37
  className,
36
38
  layout,
37
39
  descriptionPosition,
@@ -96,6 +98,8 @@ function FormSwitch<
96
98
  <FormFieldShell
97
99
  label={label}
98
100
  description={description}
101
+ success={success}
102
+ loading={loading}
99
103
  required={required}
100
104
  error={error}
101
105
  htmlFor={switchId}
@@ -122,6 +126,8 @@ function FormSwitch<
122
126
  ) : (
123
127
  <FormFieldShell
124
128
  error={error}
129
+ success={success}
130
+ loading={loading}
125
131
  className={className}
126
132
  descriptionId={resolvedIds.descriptionId}
127
133
  errorId={resolvedIds.errorId}
@@ -29,8 +29,10 @@ function FormTextarea<
29
29
  name,
30
30
  rules,
31
31
  label,
32
- description,
33
- required,
32
+ description,
33
+ success,
34
+ loading,
35
+ required,
34
36
  className,
35
37
  layout,
36
38
  descriptionPosition,
@@ -68,6 +70,8 @@ function FormTextarea<
68
70
  <FormFieldShell
69
71
  label={label}
70
72
  description={description}
73
+ success={success}
74
+ loading={loading}
71
75
  required={required}
72
76
  error={error}
73
77
  htmlFor={textareaId}
@@ -109,11 +109,11 @@ export type AsyncSelectMultiModeProps<
109
109
  isMulti: true
110
110
  }
111
111
 
112
- export type AsyncMultiSelectProps<
113
- TValue extends string = string,
114
- TData = unknown,
115
- TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
116
- > = Omit<React.ComponentProps<"div">, "onChange"> & {
112
+ export type AsyncMultiSelectProps<
113
+ TValue extends string = string,
114
+ TData = unknown,
115
+ TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
116
+ > = Omit<React.ComponentProps<"div">, "onChange"> & {
117
117
  value?: TValue[]
118
118
  selectedOptions?: TOption[]
119
119
  onValueChange?: (value: TValue[], options: TOption[]) => void
@@ -148,8 +148,8 @@ export type AsyncMultiSelectProps<
148
148
  searchClassName?: string
149
149
  optionClassName?: string
150
150
  tagClassName?: string
151
- invalid?: boolean
152
- }
151
+ invalid?: boolean
152
+ }
153
153
 
154
154
  type AsyncSelectCacheEntry<
155
155
  TValue extends string,
@@ -778,7 +778,10 @@ function AsyncSelect<
778
778
  )
779
779
  }
780
780
 
781
- function AsyncMultiSelect<
781
+ /**
782
+ * @deprecated Prefer `AsyncSelect` with `isMulti` for new usage.
783
+ */
784
+ function AsyncMultiSelect<
782
785
  TValue extends string = string,
783
786
  TData = unknown,
784
787
  TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
@@ -14,8 +14,11 @@ export type SearchInputProps = Omit<ClearableInputProps, "leadingIcon" | "type"
14
14
  onValueChange?: (value: string) => void
15
15
  onDebouncedValueChange?: (value: string) => void
16
16
  }
17
-
18
- const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(
17
+
18
+ /**
19
+ * @deprecated Prefer `Input` with `type="search"` and search-related props for new usage.
20
+ */
21
+ const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(
19
22
  (
20
23
  {
21
24
  searchIcon,
@@ -1,193 +1,23 @@
1
- import * as React from "react"
2
- import { CheckIcon, LoaderCircleIcon, SearchIcon, XIcon } from "lucide-react"
3
-
4
1
  import {
5
2
  Select,
6
- SelectContent,
7
- SelectItem,
8
- SelectTrigger,
9
- SelectValue,
3
+ type SelectOption,
4
+ type SelectProps,
10
5
  } from "@/components/ui/select"
11
- import { cn, stopInteractivePropagation } from "@/lib/utils"
12
-
13
- export type SimpleSelectOption = {
14
- label: React.ReactNode
15
- value: string
16
- disabled?: boolean
17
- description?: React.ReactNode
18
- keywords?: string[]
19
- }
20
-
21
- export type SimpleSelectProps = Omit<
22
- React.ComponentProps<typeof Select>,
23
- "value" | "onValueChange"
24
- > & {
25
- value?: string
26
- onValueChange?: (value: string | undefined) => void
27
- options: SimpleSelectOption[]
28
- placeholder?: string
29
- searchPlaceholder?: string
30
- emptyLabel?: React.ReactNode
31
- clearLabel?: string
32
- size?: "sm" | "default" | "lg"
33
- clearable?: boolean
34
- searchable?: boolean
35
- loading?: boolean
36
- loadingLabel?: React.ReactNode
37
- disabled?: boolean
38
- showSelectedDescription?: boolean
39
- triggerClassName?: string
40
- contentClassName?: string
41
- itemClassName?: string
42
- searchClassName?: string
43
- renderOption?: (option: SimpleSelectOption, state: { selected: boolean }) => React.ReactNode
44
- invalid?: boolean
45
- }
46
-
47
- function optionMatchesSearch(option: SimpleSelectOption, search: string) {
48
- const normalized = search.trim().toLowerCase()
49
- if (!normalized) return true
50
-
51
- const labelText = typeof option.label === "string" || typeof option.label === "number" ? String(option.label) : option.value
52
- const haystack = [labelText, option.value, ...(option.keywords ?? [])].join(" ").toLowerCase()
53
- return haystack.includes(normalized)
54
- }
55
-
56
- function SimpleSelect({
57
- value,
58
- onValueChange,
59
- options,
60
- placeholder = "Select",
61
- searchPlaceholder = "Search options...",
62
- emptyLabel = "No options found",
63
- clearLabel = "Clear selection",
64
- size = "default",
65
- clearable = false,
66
- searchable = false,
67
- loading = false,
68
- loadingLabel = "Loading options...",
69
- disabled = false,
70
- showSelectedDescription = true,
71
- triggerClassName,
72
- contentClassName,
73
- itemClassName,
74
- searchClassName,
75
- renderOption,
76
- invalid,
77
- onOpenChange,
78
- ...props
79
- }: SimpleSelectProps) {
80
- const [search, setSearch] = React.useState("")
81
- const selectedOption = options.find((option) => option.value === value)
82
- const filteredOptions = options.filter((option) => optionMatchesSearch(option, search))
83
-
84
- return (
85
- <Select
86
- value={value}
87
- onValueChange={(val) => onValueChange?.(val as string)}
88
- disabled={disabled || loading}
89
- onOpenChange={(open, eventDetails) => {
90
- if (!open) setSearch("")
91
- onOpenChange?.(open, eventDetails)
92
- }}
93
- {...props}
94
- >
95
- <SelectTrigger
96
- size={size}
97
- aria-invalid={invalid || undefined}
98
- className={cn(
99
- "w-full",
100
- triggerClassName
101
- )}
102
- >
103
- <SelectValue placeholder={placeholder}>
104
- {selectedOption ? (
105
- <span className="flex min-w-0 flex-col items-start">
106
- <span className="truncate">{selectedOption.label}</span>
107
- {showSelectedDescription && selectedOption.description ? (
108
- <span className="truncate text-[11px] font-medium text-muted-foreground">{selectedOption.description}</span>
109
- ) : null}
110
- </span>
111
- ) : null}
112
- </SelectValue>
113
- {loading ? <LoaderCircleIcon className="size-4 animate-spin text-muted-foreground" /> : null}
114
- {clearable && value && !disabled && !loading ? (
115
- <span
116
- role="button"
117
- tabIndex={0}
118
- aria-label={clearLabel}
119
- className="ml-1 rounded-[var(--radius-sm)] border border-border/65 p-1 text-muted-foreground transition-colors hover:border-border hover:bg-muted/55 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
120
- onClick={(event) => {
121
- event.preventDefault()
122
- stopInteractivePropagation(event)
123
- onValueChange?.(undefined)
124
- }}
125
- onMouseDown={stopInteractivePropagation}
126
- onDoubleClick={stopInteractivePropagation}
127
- onKeyDown={(event) => {
128
- if (event.key === "Enter" || event.key === " ") {
129
- event.preventDefault()
130
- onValueChange?.(undefined)
131
- }
132
- }}
133
- >
134
- <XIcon className="size-3.5" />
135
- </span>
136
- ) : null}
137
- </SelectTrigger>
138
- <SelectContent
139
- className={cn(
140
- "w-(--anchor-width)",
141
- contentClassName
142
- )}
143
- >
144
- {searchable ? (
145
- <div data-slot="select-search" className="sticky top-0 z-10 mb-1 flex items-center gap-2 rounded-[var(--radius-md)] border border-[color:var(--aui-card-border,var(--border))] bg-popover px-2.5 py-2 text-sm">
146
- <SearchIcon className="size-4 text-muted-foreground" />
147
- <input
148
- value={search}
149
- onChange={(event) => setSearch(event.target.value)}
150
- placeholder={searchPlaceholder}
151
- className={cn("min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground", searchClassName)}
152
- />
153
- </div>
154
- ) : null}
155
-
156
- {loading ? (
157
- <div data-slot="select-state" className="flex items-center gap-2 rounded-[var(--radius-md)] border border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_55%)] px-3 py-2.5 text-sm text-muted-foreground">
158
- <LoaderCircleIcon className="size-4 animate-spin" />
159
- {loadingLabel}
160
- </div>
161
- ) : filteredOptions.length === 0 ? (
162
- <div data-slot="select-state" className="rounded-[var(--radius-md)] border border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_55%)] px-3 py-2.5 text-sm text-muted-foreground">{emptyLabel}</div>
163
- ) : (
164
- filteredOptions.map((option) => {
165
- const selected = option.value === value
166
- return (
167
- <SelectItem
168
- key={option.value}
169
- value={option.value}
170
- disabled={option.disabled}
171
- className={cn("rounded-[var(--radius-md)]", itemClassName)}
172
- >
173
- {renderOption ? (
174
- renderOption(option, { selected })
175
- ) : (
176
- <span className="flex min-w-0 flex-1 flex-col">
177
- <span className="flex min-w-0 items-center gap-2">
178
- <span className="truncate">{option.label}</span>
179
- {selected ? <CheckIcon className="ml-auto size-3.5 text-primary" /> : null}
180
- </span>
181
- {option.description && <span className="truncate text-xs text-muted-foreground">{option.description}</span>}
182
- </span>
183
- )}
184
- </SelectItem>
185
- )
186
- })
187
- )}
188
- </SelectContent>
189
- </Select>
190
- )
191
- }
192
-
193
- export { SimpleSelect }
6
+
7
+ export type SimpleSelectOption = SelectOption
8
+
9
+ /**
10
+ * @deprecated Prefer `Select` with `options` for new usage.
11
+ */
12
+ export type SimpleSelectProps = Omit<SelectProps, "children"> & {
13
+ options: SimpleSelectOption[]
14
+ }
15
+
16
+ /**
17
+ * @deprecated Prefer `Select` with `options` for new usage.
18
+ */
19
+ function SimpleSelect(props: SimpleSelectProps) {
20
+ return <Select {...props} />
21
+ }
22
+
23
+ export { SimpleSelect }
@@ -59,6 +59,7 @@ export type AppSidebarProps = React.ComponentProps<"aside"> & {
59
59
  mobileToggleClassName?: string
60
60
  mobilePanelClassName?: string
61
61
  mobileOverlayClassName?: string
62
+ footerClassName?: string
62
63
  renderMobileToggle?: (state: { open: boolean; setOpen: (open: boolean) => void }) => React.ReactNode
63
64
  onItemSelect?: (item: AppSidebarNavItem) => void
64
65
  renderItem?: (item: AppSidebarNavItem, state: { collapsed: boolean }) => React.ReactNode
@@ -433,6 +434,7 @@ function SidebarSurface({
433
434
  footerAccount,
434
435
  secondaryActions = [],
435
436
  footerSecondary,
437
+ footerClassName,
436
438
  tooltipOnCollapsed,
437
439
  onItemSelect,
438
440
  renderItem,
@@ -531,7 +533,7 @@ function SidebarSurface({
531
533
  </nav>
532
534
 
533
535
  {(footerAccount || footerSecondary || footer || visibleSecondaryActions.length > 0 || (collapsed && (collapsedRail || visibleRailItems.length > 0))) && (
534
- <div data-slot="app-sidebar-footer" className="shrink-0 border-t p-3">
536
+ <div data-slot="app-sidebar-footer" className={cn("shrink-0 border-t p-3", footerClassName)}>
535
537
  {collapsed ? (
536
538
  <>
537
539
  {visibleRailItems.length > 0 ? (
@@ -19,6 +19,7 @@ export type BreadcrumbsProps = React.ComponentProps<"nav"> & {
19
19
  collapseLabel?: React.ReactNode
20
20
  separator?: React.ReactNode
21
21
  wrap?: boolean
22
+ currentItemLabel?: React.AriaAttributes["aria-current"]
22
23
  renderLink?: (props: React.ComponentProps<"a"> & { item: BreadcrumbItem; [key: `data-${string}`]: string | boolean | undefined }) => React.ReactNode
23
24
  }
24
25
 
@@ -46,6 +47,7 @@ function Breadcrumbs({
46
47
  collapseLabel = "…",
47
48
  separator = <ChevronRightIcon className="size-3.5" />,
48
49
  wrap = false,
50
+ currentItemLabel,
49
51
  renderLink,
50
52
  ...props
51
53
  }: BreadcrumbsProps) {
@@ -106,7 +108,7 @@ function Breadcrumbs({
106
108
  ) : (
107
109
  <span
108
110
  data-slot="breadcrumbs-current"
109
- aria-current={isCurrent ? (item.currentLabel ?? "page") : undefined}
111
+ aria-current={isCurrent ? ((item.currentLabel ?? currentItemLabel ?? "page") as React.AriaAttributes["aria-current"]) : undefined}
110
112
  className={cn(
111
113
  "inline-flex min-w-0 items-center gap-1.5 truncate rounded-[var(--radius-sm)] px-1 py-0.5",
112
114
  isCurrent && "bg-accent/45 font-medium text-foreground"