tembro 2.0.4 → 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 (372) 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 -3
  51. package/dist/components/display/index.js +21 -24
  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/form-field-shell.cjs +1 -1
  67. package/dist/components/form/form-field-shell.d.ts +17 -3
  68. package/dist/components/form/form-field-shell.js +54 -40
  69. package/dist/components/form/form-input.cjs +1 -1
  70. package/dist/components/form/form-input.js +278 -217
  71. package/dist/components/form/form-select.cjs +1 -1
  72. package/dist/components/form/form-select.js +47 -33
  73. package/dist/components/form/form-switch.cjs +1 -1
  74. package/dist/components/form/form-switch.js +79 -66
  75. package/dist/components/form/form-textarea.cjs +1 -1
  76. package/dist/components/form/form-textarea.js +59 -48
  77. package/dist/components/form/index.cjs +1 -1
  78. package/dist/components/form/index.js +14 -14
  79. package/dist/components/form/public.cjs +1 -1
  80. package/dist/components/form/public.d.ts +0 -8
  81. package/dist/components/form/public.js +7 -15
  82. package/dist/components/inputs/async-select.cjs +1 -1
  83. package/dist/components/inputs/async-select.d.ts +11 -2
  84. package/dist/components/inputs/async-select.js +278 -270
  85. package/dist/components/inputs/combobox.cjs +1 -1
  86. package/dist/components/inputs/combobox.d.ts +5 -1
  87. package/dist/components/inputs/combobox.js +52 -19
  88. package/dist/components/inputs/simple-select.cjs +1 -1
  89. package/dist/components/inputs/simple-select.d.ts +2 -1
  90. package/dist/components/inputs/simple-select.js +32 -16
  91. package/dist/components/layout/app-sidebar.cjs +1 -1
  92. package/dist/components/layout/app-sidebar.d.ts +4 -1
  93. package/dist/components/layout/app-sidebar.js +152 -132
  94. package/dist/components/layout/breadcrumbs.cjs +1 -1
  95. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  96. package/dist/components/layout/breadcrumbs.js +10 -10
  97. package/dist/components/layout/index.cjs +1 -1
  98. package/dist/components/layout/index.js +3 -3
  99. package/dist/components/layout/stat-card.cjs +1 -1
  100. package/dist/components/layout/stat-card.d.ts +8 -1
  101. package/dist/components/layout/stat-card.js +33 -11
  102. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  103. package/dist/components/modern/calendar-scheduler.d.ts +2 -1
  104. package/dist/components/modern/calendar-scheduler.js +21 -12
  105. package/dist/components/overlay/alert-dialog.cjs +1 -1
  106. package/dist/components/overlay/alert-dialog.d.ts +15 -1
  107. package/dist/components/overlay/alert-dialog.js +102 -27
  108. package/dist/components/overlay/drawer.cjs +1 -1
  109. package/dist/components/overlay/drawer.d.ts +4 -1
  110. package/dist/components/overlay/drawer.js +20 -17
  111. package/dist/components/patterns/index.cjs +1 -1
  112. package/dist/components/patterns/index.d.ts +0 -1
  113. package/dist/components/patterns/index.js +1 -2
  114. package/dist/components/patterns/public.cjs +1 -1
  115. package/dist/components/patterns/public.d.ts +0 -1
  116. package/dist/components/patterns/public.js +1 -2
  117. package/dist/components/ui/button/index.cjs +1 -1
  118. package/dist/components/ui/button/index.d.ts +3 -1
  119. package/dist/components/ui/button/index.js +7 -5
  120. package/dist/components/ui/checkbox/index.cjs +1 -1
  121. package/dist/components/ui/checkbox/index.d.ts +8 -0
  122. package/dist/components/ui/checkbox/index.js +16 -14
  123. package/dist/components/ui/collapse/index.cjs +1 -1
  124. package/dist/components/ui/collapse/index.d.ts +17 -3
  125. package/dist/components/ui/collapse/index.js +88 -33
  126. package/dist/components/ui/dialog/index.cjs +1 -1
  127. package/dist/components/ui/dialog/index.d.ts +2 -1
  128. package/dist/components/ui/dialog/index.js +6 -4
  129. package/dist/components/ui/dropdown-menu/index.cjs +1 -1
  130. package/dist/components/ui/dropdown-menu/index.d.ts +9 -4
  131. package/dist/components/ui/dropdown-menu/index.js +87 -62
  132. package/dist/index.cjs +1 -1
  133. package/dist/index.js +137 -156
  134. package/dist/public-component-surface.cjs +1 -1
  135. package/dist/public-component-surface.js +0 -15
  136. package/dist/showcase/component-api-schema.cjs +1 -1
  137. package/dist/showcase/component-api-schema.js +2 -2
  138. package/dist/showcase/create-demo.cjs +20 -34
  139. package/dist/showcase/create-demo.js +15 -16
  140. package/dist/showcase/fallback.cjs +3 -3
  141. package/dist/showcase/fallback.js +275 -265
  142. package/dist/showcase/premium/accordion/showcase.cjs +1 -1
  143. package/dist/showcase/premium/accordion/showcase.js +36 -5
  144. package/dist/showcase/premium/action-menu/showcase.cjs +1 -1
  145. package/dist/showcase/premium/action-menu/showcase.js +26 -8
  146. package/dist/showcase/premium/activity-feed/showcase.cjs +1 -1
  147. package/dist/showcase/premium/activity-feed/showcase.js +60 -36
  148. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  149. package/dist/showcase/premium/alert/showcase.js +41 -18
  150. package/dist/showcase/premium/alert-dialog/showcase.cjs +1 -1
  151. package/dist/showcase/premium/alert-dialog/showcase.js +35 -7
  152. package/dist/showcase/premium/async-multi-select/mock.cjs +4 -3
  153. package/dist/showcase/premium/async-multi-select/mock.js +5 -5
  154. package/dist/showcase/premium/async-multi-select/showcase.cjs +1 -1
  155. package/dist/showcase/premium/async-multi-select/showcase.js +4 -3
  156. package/dist/showcase/premium/async-select/mock.cjs +1 -1
  157. package/dist/showcase/premium/async-select/mock.js +1 -1
  158. package/dist/showcase/premium/async-select/showcase.cjs +1 -1
  159. package/dist/showcase/premium/async-select/showcase.js +69 -22
  160. package/dist/showcase/premium/button/showcase.cjs +1 -1
  161. package/dist/showcase/premium/button/showcase.js +49 -3
  162. package/dist/showcase/premium/button-group/showcase.cjs +1 -1
  163. package/dist/showcase/premium/button-group/showcase.js +53 -29
  164. package/dist/showcase/premium/calendar/showcase.cjs +1 -1
  165. package/dist/showcase/premium/calendar/showcase.js +7 -2
  166. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  167. package/dist/showcase/premium/carousel/showcase.js +95 -47
  168. package/dist/showcase/premium/checkbox/showcase.cjs +1 -1
  169. package/dist/showcase/premium/checkbox/showcase.js +143 -67
  170. package/dist/showcase/premium/clearable-input/mock.cjs +4 -3
  171. package/dist/showcase/premium/clearable-input/mock.js +3 -2
  172. package/dist/showcase/premium/clearable-input/showcase.cjs +1 -1
  173. package/dist/showcase/premium/clearable-input/showcase.js +8 -2
  174. package/dist/showcase/premium/collapse/showcase.cjs +1 -1
  175. package/dist/showcase/premium/collapse/showcase.js +7 -0
  176. package/dist/showcase/premium/combobox/showcase.cjs +1 -1
  177. package/dist/showcase/premium/combobox/showcase.d.ts +2 -1
  178. package/dist/showcase/premium/combobox/showcase.js +56 -47
  179. package/dist/showcase/premium/data-table/showcase.cjs +1 -1
  180. package/dist/showcase/premium/data-table/showcase.js +138 -46
  181. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  182. package/dist/showcase/premium/data-table-parts/showcase.js +13 -13
  183. package/dist/showcase/premium/date-input/mock.cjs +1 -1
  184. package/dist/showcase/premium/date-input/mock.js +1 -1
  185. package/dist/showcase/premium/date-range-picker/showcase.cjs +1 -1
  186. package/dist/showcase/premium/date-range-picker/showcase.js +32 -1
  187. package/dist/showcase/premium/dropdown-menu/showcase.cjs +1 -1
  188. package/dist/showcase/premium/dropdown-menu/showcase.js +88 -54
  189. package/dist/showcase/premium/form-wrapper/mock.cjs +41 -15
  190. package/dist/showcase/premium/form-wrapper/mock.js +4 -4
  191. package/dist/showcase/premium/form-wrapper/showcase.cjs +1 -1
  192. package/dist/showcase/premium/form-wrapper/showcase.js +77 -28
  193. package/dist/showcase/premium/index.cjs +1 -1
  194. package/dist/showcase/premium/index.js +426 -467
  195. package/dist/showcase/premium/input/mock.cjs +4 -1
  196. package/dist/showcase/premium/input/mock.js +1 -1
  197. package/dist/showcase/premium/masked-input/mock.cjs +1 -1
  198. package/dist/showcase/premium/masked-input/mock.js +1 -1
  199. package/dist/showcase/premium/money-input/mock.cjs +1 -1
  200. package/dist/showcase/premium/money-input/mock.js +1 -1
  201. package/dist/showcase/premium/number-input/mock.cjs +1 -1
  202. package/dist/showcase/premium/number-input/mock.js +1 -1
  203. package/dist/showcase/premium/phone-input/mock.cjs +1 -1
  204. package/dist/showcase/premium/phone-input/mock.js +1 -1
  205. package/dist/showcase/premium/quantity-input/mock.cjs +1 -1
  206. package/dist/showcase/premium/quantity-input/mock.js +1 -1
  207. package/dist/showcase/premium/simple-select/mock.cjs +1 -1
  208. package/dist/showcase/premium/simple-select/mock.js +1 -1
  209. package/dist/showcase/premium/simple-select/showcase.cjs +1 -1
  210. package/dist/showcase/premium/simple-select/showcase.js +4 -2
  211. package/dist/showcase/preview-catalog.cjs +7 -10
  212. package/dist/showcase/preview-catalog.js +7 -7
  213. package/dist/showcase/registry-quality.cjs +1 -1
  214. package/dist/showcase/registry-quality.js +0 -23
  215. package/dist/showcase/registry-specific.cjs +1 -1
  216. package/dist/showcase/registry-specific.js +149 -383
  217. package/dist/showcase/render-registry-preview.cjs +1 -1
  218. package/dist/showcase/render-registry-preview.js +163 -195
  219. package/dist/showcase/site-data.cjs +1 -1
  220. package/dist/showcase/site-data.js +197 -941
  221. package/dist/showcase/supplemental.cjs +1 -1
  222. package/dist/showcase/supplemental.js +1 -1
  223. package/dist/showcase/tembro-registry.json.cjs +1 -1
  224. package/dist/showcase/tembro-registry.json.js +33 -51
  225. package/package.json +1 -1
  226. package/packages/cli/dist/index.cjs +2 -2
  227. package/packages/cli/vendor/src/components/actions/action-menu.tsx +149 -83
  228. package/packages/cli/vendor/src/components/actions/button-group.tsx +141 -33
  229. package/packages/cli/vendor/src/components/actions/copy-button.tsx +21 -16
  230. package/packages/cli/vendor/src/components/calendar/calendar.tsx +223 -88
  231. package/packages/cli/vendor/src/components/calendar/date-picker.tsx +73 -29
  232. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +154 -49
  233. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +71 -50
  234. package/packages/cli/vendor/src/components/data-table/data-table.tsx +65 -53
  235. package/packages/cli/vendor/src/components/data-table/demo.tsx +2 -12
  236. package/packages/cli/vendor/src/components/data-table/public.ts +1 -6
  237. package/packages/cli/vendor/src/components/display/activity-feed.tsx +98 -40
  238. package/packages/cli/vendor/src/components/display/carousel.tsx +88 -2
  239. package/packages/cli/vendor/src/components/display/code-block.tsx +58 -26
  240. package/packages/cli/vendor/src/components/display/comparison-card.tsx +15 -41
  241. package/packages/cli/vendor/src/components/display/data-state.tsx +119 -50
  242. package/packages/cli/vendor/src/components/display/demo.tsx +0 -4
  243. package/packages/cli/vendor/src/components/display/index.ts +0 -3
  244. package/packages/cli/vendor/src/components/feedback/alert.tsx +86 -28
  245. package/packages/cli/vendor/src/components/feedback/index.ts +0 -2
  246. package/packages/cli/vendor/src/components/filters/demo.tsx +0 -1
  247. package/packages/cli/vendor/src/components/filters/filter-bar.tsx +126 -54
  248. package/packages/cli/vendor/src/components/filters/index.ts +0 -1
  249. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +72 -34
  250. package/packages/cli/vendor/src/components/form/form-input.tsx +118 -11
  251. package/packages/cli/vendor/src/components/form/form-select.tsx +26 -3
  252. package/packages/cli/vendor/src/components/form/form-switch.tsx +77 -58
  253. package/packages/cli/vendor/src/components/form/form-textarea.tsx +65 -51
  254. package/packages/cli/vendor/src/components/form/public.ts +0 -9
  255. package/packages/cli/vendor/src/components/inputs/async-select.tsx +126 -82
  256. package/packages/cli/vendor/src/components/inputs/combobox.tsx +66 -9
  257. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +52 -24
  258. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +42 -1
  259. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +17 -8
  260. package/packages/cli/vendor/src/components/layout/stat-card.tsx +63 -23
  261. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +32 -22
  262. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +148 -24
  263. package/packages/cli/vendor/src/components/overlay/drawer.tsx +42 -30
  264. package/packages/cli/vendor/src/components/patterns/index.ts +0 -1
  265. package/packages/cli/vendor/src/components/patterns/public.ts +0 -1
  266. package/packages/cli/vendor/src/components/ui/button/index.tsx +27 -17
  267. package/packages/cli/vendor/src/components/ui/checkbox/index.tsx +22 -5
  268. package/packages/cli/vendor/src/components/ui/collapse/index.tsx +97 -16
  269. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +12 -8
  270. package/packages/cli/vendor/src/components/ui/dropdown-menu/index.tsx +82 -28
  271. package/packages/cli/vendor/src/public-component-surface.ts +0 -3
  272. package/packages/cli/vendor/src/showcase/component-api-schema.ts +2 -2
  273. package/packages/cli/vendor/src/showcase/create-demo.tsx +31 -46
  274. package/packages/cli/vendor/src/showcase/fallback.tsx +80 -99
  275. package/packages/cli/vendor/src/showcase/premium/accordion/showcase.tsx +32 -2
  276. package/packages/cli/vendor/src/showcase/premium/action-menu/showcase.tsx +12 -3
  277. package/packages/cli/vendor/src/showcase/premium/activity-feed/showcase.tsx +15 -2
  278. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +32 -17
  279. package/packages/cli/vendor/src/showcase/premium/alert-dialog/showcase.tsx +28 -3
  280. package/packages/cli/vendor/src/showcase/premium/async-multi-select/mock.ts +6 -5
  281. package/packages/cli/vendor/src/showcase/premium/async-multi-select/showcase.tsx +5 -4
  282. package/packages/cli/vendor/src/showcase/premium/async-select/mock.ts +1 -1
  283. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +36 -0
  284. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +26 -5
  285. package/packages/cli/vendor/src/showcase/premium/button-group/showcase.tsx +20 -3
  286. package/packages/cli/vendor/src/showcase/premium/calendar/showcase.tsx +5 -0
  287. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +33 -5
  288. package/packages/cli/vendor/src/showcase/premium/checkbox/showcase.tsx +46 -3
  289. package/packages/cli/vendor/src/showcase/premium/clearable-input/mock.ts +5 -3
  290. package/packages/cli/vendor/src/showcase/premium/clearable-input/showcase.tsx +5 -2
  291. package/packages/cli/vendor/src/showcase/premium/collapse/showcase.tsx +4 -0
  292. package/packages/cli/vendor/src/showcase/premium/combobox/showcase.tsx +8 -0
  293. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +77 -27
  294. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +11 -11
  295. package/packages/cli/vendor/src/showcase/premium/date-input/mock.ts +1 -1
  296. package/packages/cli/vendor/src/showcase/premium/date-range-picker/showcase.tsx +7 -0
  297. package/packages/cli/vendor/src/showcase/premium/dropdown-menu/showcase.tsx +46 -3
  298. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +70 -44
  299. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +129 -12
  300. package/packages/cli/vendor/src/showcase/premium/index.ts +7 -24
  301. package/packages/cli/vendor/src/showcase/premium/input/mock.ts +2 -2
  302. package/packages/cli/vendor/src/showcase/premium/masked-input/mock.ts +1 -1
  303. package/packages/cli/vendor/src/showcase/premium/money-input/mock.ts +1 -1
  304. package/packages/cli/vendor/src/showcase/premium/number-input/mock.ts +1 -1
  305. package/packages/cli/vendor/src/showcase/premium/phone-input/mock.ts +1 -1
  306. package/packages/cli/vendor/src/showcase/premium/quantity-input/mock.ts +1 -1
  307. package/packages/cli/vendor/src/showcase/premium/simple-select/mock.ts +1 -1
  308. package/packages/cli/vendor/src/showcase/premium/simple-select/showcase.tsx +2 -1
  309. package/packages/cli/vendor/src/showcase/preview-catalog.tsx +7 -7
  310. package/packages/cli/vendor/src/showcase/registry-quality.ts +4 -28
  311. package/packages/cli/vendor/src/showcase/registry-specific.tsx +3 -178
  312. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +18 -51
  313. package/packages/cli/vendor/src/showcase/site-data.tsx +2443 -2761
  314. package/packages/cli/vendor/src/showcase/supplemental.tsx +2 -42
  315. package/packages/cli/vendor/src/showcase/tembro-registry.json +11 -58
  316. package/registry.json +11 -61
  317. package/dist/components/display/entity-card.cjs +0 -1
  318. package/dist/components/display/entity-card.d.ts +0 -18
  319. package/dist/components/display/entity-card.js +0 -61
  320. package/dist/components/display/entity-header.cjs +0 -1
  321. package/dist/components/display/entity-header.d.ts +0 -13
  322. package/dist/components/display/entity-header.js +0 -52
  323. package/dist/components/display/file-card.cjs +0 -1
  324. package/dist/components/display/file-card.d.ts +0 -14
  325. package/dist/components/display/file-card.js +0 -59
  326. package/dist/components/feedback/empty-search-state.cjs +0 -1
  327. package/dist/components/feedback/empty-search-state.d.ts +0 -11
  328. package/dist/components/feedback/empty-search-state.js +0 -45
  329. package/dist/components/feedback/empty-state.cjs +0 -1
  330. package/dist/components/feedback/empty-state.d.ts +0 -11
  331. package/dist/components/feedback/empty-state.js +0 -38
  332. package/dist/components/filters/filter-chips.cjs +0 -1
  333. package/dist/components/filters/filter-chips.d.ts +0 -18
  334. package/dist/components/filters/filter-chips.js +0 -61
  335. package/dist/components/patterns/form-builder-presets.cjs +0 -1
  336. package/dist/components/patterns/form-builder-presets.d.ts +0 -1
  337. package/dist/components/patterns/form-builder-presets.js +0 -2
  338. package/dist/components/patterns/form-builder.cjs +0 -1
  339. package/dist/components/patterns/form-builder.d.ts +0 -109
  340. package/dist/components/patterns/form-builder.js +0 -263
  341. package/dist/showcase/premium/empty-state/index.cjs +0 -1
  342. package/dist/showcase/premium/empty-state/index.d.ts +0 -2
  343. package/dist/showcase/premium/empty-state/index.js +0 -3
  344. package/dist/showcase/premium/empty-state/mock.cjs +0 -14
  345. package/dist/showcase/premium/empty-state/mock.d.ts +0 -2
  346. package/dist/showcase/premium/empty-state/mock.js +0 -31
  347. package/dist/showcase/premium/empty-state/showcase.cjs +0 -1
  348. package/dist/showcase/premium/empty-state/showcase.d.ts +0 -3
  349. package/dist/showcase/premium/empty-state/showcase.js +0 -99
  350. package/dist/showcase/premium/form-builder/index.cjs +0 -1
  351. package/dist/showcase/premium/form-builder/index.d.ts +0 -2
  352. package/dist/showcase/premium/form-builder/index.js +0 -3
  353. package/dist/showcase/premium/form-builder/mock.cjs +0 -57
  354. package/dist/showcase/premium/form-builder/mock.d.ts +0 -2
  355. package/dist/showcase/premium/form-builder/mock.js +0 -40
  356. package/dist/showcase/premium/form-builder/showcase.cjs +0 -1
  357. package/dist/showcase/premium/form-builder/showcase.d.ts +0 -3
  358. package/dist/showcase/premium/form-builder/showcase.js +0 -69
  359. package/packages/cli/vendor/src/components/display/entity-card.tsx +0 -80
  360. package/packages/cli/vendor/src/components/display/entity-header.tsx +0 -80
  361. package/packages/cli/vendor/src/components/display/file-card.tsx +0 -61
  362. package/packages/cli/vendor/src/components/feedback/empty-search-state.tsx +0 -65
  363. package/packages/cli/vendor/src/components/feedback/empty-state.tsx +0 -56
  364. package/packages/cli/vendor/src/components/filters/filter-chips.tsx +0 -89
  365. package/packages/cli/vendor/src/components/patterns/form-builder-presets.ts +0 -13
  366. package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -443
  367. package/packages/cli/vendor/src/showcase/premium/empty-state/index.ts +0 -2
  368. package/packages/cli/vendor/src/showcase/premium/empty-state/mock.ts +0 -30
  369. package/packages/cli/vendor/src/showcase/premium/empty-state/showcase.tsx +0 -65
  370. package/packages/cli/vendor/src/showcase/premium/form-builder/index.ts +0 -2
  371. package/packages/cli/vendor/src/showcase/premium/form-builder/mock.ts +0 -79
  372. package/packages/cli/vendor/src/showcase/premium/form-builder/showcase.tsx +0 -55
@@ -1,7 +1,11 @@
1
1
  import * as React from "react"
2
2
  import { Controller, type Control, type FieldPath, type FieldValues } from "react-hook-form"
3
3
 
4
- import { FormFieldShell, type FormFieldShellControlProps } from "@/components/form/form-field-shell"
4
+ import {
5
+ FormFieldShell,
6
+ type FormFieldShellControlProps,
7
+ resolveFormFieldIds,
8
+ } from "@/components/form/form-field-shell"
5
9
  import { Switch } from "@/components/ui/switch"
6
10
  import { cn } from "@/lib/utils"
7
11
 
@@ -47,33 +51,40 @@ function FormSwitch<
47
51
  id,
48
52
  onCheckedChange,
49
53
  ...props
50
- }: FormSwitchProps<TFieldValues, TName>) {
51
- const switchId = id ?? name
52
- const labelContent = label ? (
53
- <label
54
- htmlFor={switchId}
55
- className={cn("text-sm font-medium leading-none", disabled && "opacity-60", labelClassName)}
56
- >
57
- {label}
58
- {required && (requiredIndicator ?? <span className="ml-1 text-destructive">*</span>)}
59
- </label>
60
- ) : null
61
-
62
- return (
63
- <Controller
64
- control={control}
65
- name={name}
66
- render={({ field, fieldState }) => {
67
- const switchControl = (
68
- <Switch
69
- id={switchId}
70
- ref={field.ref}
71
- checked={Boolean(field.value)}
72
- disabled={disabled || readOnly}
73
- aria-invalid={fieldState.invalid || undefined}
74
- className={fieldClassName}
75
- onBlur={field.onBlur}
76
- onCheckedChange={(checked) => {
54
+ }: FormSwitchProps<TFieldValues, TName>) {
55
+ const switchId = id ?? name
56
+
57
+ return (
58
+ <Controller
59
+ control={control}
60
+ name={name}
61
+ render={({ field, fieldState }) => {
62
+ const error = fieldState.error?.message
63
+ const resolvedIds = resolveFormFieldIds(switchId, { description, error })
64
+ const labelContent = label ? (
65
+ <label
66
+ id={resolvedIds.labelId}
67
+ htmlFor={switchId}
68
+ className={cn("text-sm font-medium leading-none", disabled && "opacity-60", labelClassName)}
69
+ >
70
+ {label}
71
+ {required && (requiredIndicator ?? <span className="ml-1 text-destructive">*</span>)}
72
+ </label>
73
+ ) : null
74
+
75
+ const switchControl = (
76
+ <Switch
77
+ id={switchId}
78
+ ref={field.ref}
79
+ checked={Boolean(field.value)}
80
+ disabled={disabled || readOnly}
81
+ aria-invalid={fieldState.invalid || undefined}
82
+ aria-labelledby={label ? resolvedIds.labelId : undefined}
83
+ aria-describedby={resolvedIds.describedBy}
84
+ aria-errormessage={error ? resolvedIds.errorId : undefined}
85
+ className={fieldClassName}
86
+ onBlur={field.onBlur}
87
+ onCheckedChange={(checked) => {
77
88
  field.onChange(checked)
78
89
  onCheckedChange?.(checked)
79
90
  }}
@@ -81,19 +92,22 @@ function FormSwitch<
81
92
  />
82
93
  )
83
94
 
84
- return labelPlacement === "start" ? (
85
- <FormFieldShell
86
- label={label}
87
- description={description}
88
- required={required}
89
- error={fieldState.error?.message}
90
- htmlFor={switchId}
91
- className={className}
92
- layout={layout}
93
- descriptionPosition={descriptionPosition}
94
- labelAction={labelAction}
95
- requiredIndicator={requiredIndicator}
96
- errorIcon={errorIcon}
95
+ return labelPlacement === "start" ? (
96
+ <FormFieldShell
97
+ label={label}
98
+ description={description}
99
+ required={required}
100
+ error={error}
101
+ htmlFor={switchId}
102
+ labelId={resolvedIds.labelId}
103
+ descriptionId={resolvedIds.descriptionId}
104
+ errorId={resolvedIds.errorId}
105
+ className={className}
106
+ layout={layout}
107
+ descriptionPosition={descriptionPosition}
108
+ labelAction={labelAction}
109
+ requiredIndicator={requiredIndicator}
110
+ errorIcon={errorIcon}
97
111
  showErrorIcon={showErrorIcon}
98
112
  disabled={disabled}
99
113
  readOnly={readOnly}
@@ -106,12 +120,14 @@ function FormSwitch<
106
120
  {switchControl}
107
121
  </FormFieldShell>
108
122
  ) : (
109
- <FormFieldShell
110
- error={fieldState.error?.message}
111
- className={className}
112
- errorIcon={errorIcon}
113
- showErrorIcon={showErrorIcon}
114
- disabled={disabled}
123
+ <FormFieldShell
124
+ error={error}
125
+ className={className}
126
+ descriptionId={resolvedIds.descriptionId}
127
+ errorId={resolvedIds.errorId}
128
+ errorIcon={errorIcon}
129
+ showErrorIcon={showErrorIcon}
130
+ disabled={disabled}
115
131
  readOnly={readOnly}
116
132
  errorClassName={errorClassName}
117
133
  contentClassName={contentClassName}
@@ -121,17 +137,20 @@ function FormSwitch<
121
137
 
122
138
  {(label || description || labelAction) && (
123
139
  <div className="grid min-w-0 gap-1">
124
- {(label || labelAction) && (
125
- <div className={cn("flex items-center justify-between gap-2", labelRowClassName)}>
126
- {labelContent}
127
- {labelAction && <div className="shrink-0 text-sm">{labelAction}</div>}
128
- </div>
129
- )}
130
- {description && (
131
- <p className={cn("text-xs text-muted-foreground", descriptionClassName)}>
132
- {description}
133
- </p>
134
- )}
140
+ {(label || labelAction) && (
141
+ <div className={cn("flex items-center justify-between gap-2", labelRowClassName)}>
142
+ {labelContent}
143
+ {labelAction && <div className="shrink-0 text-sm">{labelAction}</div>}
144
+ </div>
145
+ )}
146
+ {description && (
147
+ <p
148
+ id={resolvedIds.descriptionId}
149
+ className={cn("text-xs text-muted-foreground", descriptionClassName)}
150
+ >
151
+ {description}
152
+ </p>
153
+ )}
135
154
  </div>
136
155
  )}
137
156
  </div>
@@ -1,7 +1,11 @@
1
1
  import * as React from "react"
2
2
  import { Controller, type Control, type FieldPath, type FieldValues, type RegisterOptions } from "react-hook-form"
3
3
 
4
- import { FormFieldShell, type FormFieldShellControlProps } from "@/components/form/form-field-shell"
4
+ import {
5
+ FormFieldShell,
6
+ type FormFieldShellControlProps,
7
+ resolveFormFieldIds,
8
+ } from "@/components/form/form-field-shell"
5
9
  import { Textarea } from "@/components/ui/textarea"
6
10
 
7
11
  export type FormTextareaProps<
@@ -48,59 +52,69 @@ function FormTextarea<
48
52
  onChange,
49
53
  onBlur,
50
54
  ...props
51
- }: FormTextareaProps<TFieldValues, TName>) {
52
- const textareaId = id ?? name
53
-
54
- return (
55
+ }: FormTextareaProps<TFieldValues, TName>) {
56
+ const textareaId = id ?? name
57
+
58
+ return (
55
59
  <Controller
56
60
  control={control}
57
61
  name={name}
58
62
  rules={rules}
59
- render={({ field, fieldState }) => (
60
- <FormFieldShell
61
- label={label}
62
- description={description}
63
- required={required}
64
- error={fieldState.error?.message}
65
- htmlFor={textareaId}
66
- className={className}
67
- layout={layout}
68
- descriptionPosition={descriptionPosition}
69
- labelAction={labelAction}
70
- requiredIndicator={requiredIndicator}
71
- errorIcon={errorIcon}
72
- showErrorIcon={showErrorIcon}
73
- disabled={disabled}
74
- readOnly={readOnly}
75
- labelClassName={labelClassName}
76
- labelRowClassName={labelRowClassName}
77
- descriptionClassName={descriptionClassName}
78
- errorClassName={errorClassName}
79
- contentClassName={contentClassName}
80
- >
81
- <Textarea
82
- id={textareaId}
83
- ref={field.ref}
84
- name={field.name}
85
- value={transformIn ? transformIn(field.value) : field.value ?? ""}
86
- disabled={disabled}
87
- readOnly={readOnly}
88
- onBlur={(event) => {
89
- field.onBlur()
90
- onBlur?.(event)
91
- }}
92
- onChange={(event) => {
93
- field.onChange(transformOut ? transformOut(event) : event)
94
- onChange?.(event)
95
- }}
96
- aria-invalid={fieldState.invalid || undefined}
97
- className={fieldClassName}
98
- {...props}
99
- />
100
- </FormFieldShell>
101
- )}
102
- />
103
- )
104
- }
63
+ render={({ field, fieldState }) => {
64
+ const error = fieldState.error?.message
65
+ const resolvedIds = resolveFormFieldIds(textareaId, { description, error })
66
+
67
+ return (
68
+ <FormFieldShell
69
+ label={label}
70
+ description={description}
71
+ required={required}
72
+ error={error}
73
+ htmlFor={textareaId}
74
+ labelId={resolvedIds.labelId}
75
+ descriptionId={resolvedIds.descriptionId}
76
+ errorId={resolvedIds.errorId}
77
+ className={className}
78
+ layout={layout}
79
+ descriptionPosition={descriptionPosition}
80
+ labelAction={labelAction}
81
+ requiredIndicator={requiredIndicator}
82
+ errorIcon={errorIcon}
83
+ showErrorIcon={showErrorIcon}
84
+ disabled={disabled}
85
+ readOnly={readOnly}
86
+ labelClassName={labelClassName}
87
+ labelRowClassName={labelRowClassName}
88
+ descriptionClassName={descriptionClassName}
89
+ errorClassName={errorClassName}
90
+ contentClassName={contentClassName}
91
+ >
92
+ <Textarea
93
+ id={textareaId}
94
+ ref={field.ref}
95
+ name={field.name}
96
+ value={transformIn ? transformIn(field.value) : field.value ?? ""}
97
+ disabled={disabled}
98
+ readOnly={readOnly}
99
+ onBlur={(event) => {
100
+ field.onBlur()
101
+ onBlur?.(event)
102
+ }}
103
+ onChange={(event) => {
104
+ field.onChange(transformOut ? transformOut(event) : event)
105
+ onChange?.(event)
106
+ }}
107
+ aria-invalid={fieldState.invalid || undefined}
108
+ aria-describedby={resolvedIds.describedBy}
109
+ aria-errormessage={error ? resolvedIds.errorId : undefined}
110
+ className={fieldClassName}
111
+ {...props}
112
+ />
113
+ </FormFieldShell>
114
+ )
115
+ }}
116
+ />
117
+ )
118
+ }
105
119
 
106
120
  export { FormTextarea }
@@ -4,13 +4,4 @@ export * from "./form-input"
4
4
  export * from "./form-select"
5
5
  export * from "./form-switch"
6
6
  export * from "./form-textarea"
7
- export * from "./form-date-picker"
8
- export * from "./form-date-range-picker"
9
- // Compatibility aliases
10
7
  export * from "./form-async-select"
11
- export * from "./form-date-input"
12
- export * from "./form-date-range-input"
13
- export * from "./form-number-input"
14
- export * from "./form-password-input"
15
- export * from "./form-phone-input"
16
- export * from "./form-search-input"
@@ -48,9 +48,10 @@ export type AsyncSelectStateRenderer<
48
48
  TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
49
49
  > = (state: AsyncSelectRenderState<TValue, TData, TOption>) => React.ReactNode
50
50
 
51
- export type AsyncSelectLabels = {
52
- placeholder?: string
53
- searchPlaceholder?: string
51
+ export type AsyncSelectLabels = {
52
+ placeholder?: string
53
+ multiPlaceholder?: string
54
+ searchPlaceholder?: string
54
55
  loading?: string
55
56
  creating?: string
56
57
  empty?: string
@@ -59,18 +60,20 @@ export type AsyncSelectLabels = {
59
60
  clearAll?: string
60
61
  selectAll?: string
61
62
  minSearchLength?: (minSearchLength: number) => string
62
- maxSelected?: (maxSelected: number) => string
63
- selectedCount?: (count: number) => string
64
- }
65
-
66
- export type AsyncSelectProps<
67
- TValue extends string = string,
68
- TData = unknown,
69
- TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
70
- > = Omit<React.ComponentProps<"div">, "onChange"> & {
71
- value?: TValue
72
- selectedOption?: TOption | null
73
- onValueChange?: (value: TValue | undefined, option?: TOption) => void
63
+ maxSelected?: (maxSelected: number) => string
64
+ selectedCount?: (count: number) => string
65
+ hiddenSelected?: (count: number) => string
66
+ }
67
+
68
+ export type AsyncSelectProps<
69
+ TValue extends string = string,
70
+ TData = unknown,
71
+ TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
72
+ > = Omit<React.ComponentProps<"div">, "onChange"> & {
73
+ isMulti?: false
74
+ value?: TValue
75
+ selectedOption?: TOption | null
76
+ onValueChange?: (value: TValue | undefined, option?: TOption) => void
74
77
  loadOptions: (search: string, signal?: AbortSignal) => Promise<AsyncSelectOptionsResult<TValue, TData, TOption>>
75
78
  loadSelectedOption?: (value: TValue, signal?: AbortSignal) => Promise<TOption | null | undefined>
76
79
  defaultOptions?: AsyncSelectOptionsResult<TValue, TData, TOption>
@@ -87,15 +90,24 @@ export type AsyncSelectProps<
87
90
  renderEmpty?: AsyncSelectStateRenderer<TValue, TData, TOption>
88
91
  renderError?: AsyncSelectStateRenderer<TValue, TData, TOption>
89
92
  renderMinSearch?: AsyncSelectStateRenderer<TValue, TData, TOption>
90
- onCreateOption?: (search: string) => Promise<TOption> | TOption
91
- createOptionLabel?: (search: string) => React.ReactNode
92
- showCreateOption?: (search: string, options: TOption[]) => boolean
93
- triggerClassName?: string
93
+ onCreateOption?: (search: string) => Promise<TOption> | TOption
94
+ createOptionLabel?: (search: string) => React.ReactNode
95
+ showCreateOption?: (search: string, options: TOption[]) => boolean
96
+ showSelectedDescription?: boolean
97
+ triggerClassName?: string
94
98
  contentClassName?: string
95
99
  searchClassName?: string
96
100
  optionClassName?: string
97
- invalid?: boolean
98
- }
101
+ invalid?: boolean
102
+ }
103
+
104
+ export type AsyncSelectMultiModeProps<
105
+ TValue extends string = string,
106
+ TData = unknown,
107
+ TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
108
+ > = AsyncMultiSelectProps<TValue, TData, TOption> & {
109
+ isMulti: true
110
+ }
99
111
 
100
112
  export type AsyncMultiSelectProps<
101
113
  TValue extends string = string,
@@ -115,8 +127,9 @@ export type AsyncMultiSelectProps<
115
127
  closeOnSelect?: boolean
116
128
  debounceMs?: number
117
129
  minSearchLength?: number
118
- maxSelected?: number
119
- showSelectAll?: boolean
130
+ maxSelected?: number
131
+ maxVisibleTags?: number
132
+ showSelectAll?: boolean
120
133
  labels?: AsyncSelectLabels
121
134
  renderOption?: (option: TOption, state: { selected: boolean }) => React.ReactNode
122
135
  renderValue?: (option: TOption) => React.ReactNode
@@ -126,10 +139,11 @@ export type AsyncMultiSelectProps<
126
139
  renderError?: AsyncSelectStateRenderer<TValue, TData, TOption>
127
140
  renderMinSearch?: AsyncSelectStateRenderer<TValue, TData, TOption>
128
141
  renderMaxSelected?: AsyncSelectStateRenderer<TValue, TData, TOption>
129
- onCreateOption?: (search: string) => Promise<TOption> | TOption
130
- createOptionLabel?: (search: string) => React.ReactNode
131
- showCreateOption?: (search: string, options: TOption[]) => boolean
132
- triggerClassName?: string
142
+ onCreateOption?: (search: string) => Promise<TOption> | TOption
143
+ createOptionLabel?: (search: string) => React.ReactNode
144
+ showCreateOption?: (search: string, options: TOption[]) => boolean
145
+ showSelectedDescription?: boolean
146
+ triggerClassName?: string
133
147
  contentClassName?: string
134
148
  searchClassName?: string
135
149
  optionClassName?: string
@@ -410,14 +424,21 @@ function AsyncCreateButton({
410
424
  )
411
425
  }
412
426
 
413
- function AsyncSelect<
414
- TValue extends string = string,
415
- TData = unknown,
416
- TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
417
- >({
418
- className,
419
- value,
420
- selectedOption,
427
+ function AsyncSelect<
428
+ TValue extends string = string,
429
+ TData = unknown,
430
+ TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
431
+ >(props: AsyncSelectProps<TValue, TData, TOption> | AsyncSelectMultiModeProps<TValue, TData, TOption>) {
432
+ if ("isMulti" in props && props.isMulti) {
433
+ const multiProps = { ...props }
434
+ delete (multiProps as { isMulti?: true }).isMulti
435
+ return <AsyncMultiSelect {...multiProps} />
436
+ }
437
+
438
+ const {
439
+ className,
440
+ value,
441
+ selectedOption,
421
442
  onValueChange,
422
443
  loadOptions,
423
444
  loadSelectedOption,
@@ -434,17 +455,18 @@ function AsyncSelect<
434
455
  renderLoading,
435
456
  renderEmpty,
436
457
  renderError,
437
- renderMinSearch,
438
- onCreateOption,
439
- createOptionLabel,
440
- showCreateOption,
441
- triggerClassName,
458
+ renderMinSearch,
459
+ onCreateOption,
460
+ createOptionLabel,
461
+ showCreateOption,
462
+ showSelectedDescription = true,
463
+ triggerClassName,
442
464
  contentClassName,
443
- searchClassName,
444
- optionClassName,
445
- invalid,
446
- ...props
447
- }: AsyncSelectProps<TValue, TData, TOption>) {
465
+ searchClassName,
466
+ optionClassName,
467
+ invalid,
468
+ ...rootProps
469
+ } = props as AsyncSelectProps<TValue, TData, TOption>
448
470
  const resolvedDefaultGroups = React.useMemo(() => normalizeOptionGroups(defaultOptions), [defaultOptions])
449
471
  const defaultFlatOptions = React.useMemo(() => flattenOptionGroups(resolvedDefaultGroups), [resolvedDefaultGroups])
450
472
  const [open, setOpen] = React.useState(false)
@@ -613,7 +635,7 @@ function AsyncSelect<
613
635
  }
614
636
 
615
637
  return (
616
- <div data-slot="async-select" className={cn("w-full", className)} {...props}>
638
+ <div data-slot="async-select" className={cn("w-full", className)} {...rootProps}>
617
639
  <Popover open={open} onOpenChange={setOpen}>
618
640
  <PopoverTrigger
619
641
  render={
@@ -633,16 +655,18 @@ function AsyncSelect<
633
655
  }
634
656
  >
635
657
  <span className="min-w-0 flex-1 text-left">
636
- {currentOption ? (
658
+ {currentOption ? (
637
659
  <span className="flex min-w-0 flex-col gap-0.5">
638
660
  <span className="truncate font-semibold">
639
- {renderValue?.(currentOption) ?? currentOption.label}
640
- </span>
641
- {currentOption.disabled && currentOption.disabledReason && (
642
- <span className="truncate text-xs text-muted-foreground">{currentOption.disabledReason}</span>
643
- )}
644
- </span>
645
- ) : (
661
+ {renderValue?.(currentOption) ?? currentOption.label}
662
+ </span>
663
+ {showSelectedDescription && (currentOption.description || (currentOption.disabled && currentOption.disabledReason)) ? (
664
+ <span className="truncate text-xs text-muted-foreground">
665
+ {currentOption.description ?? currentOption.disabledReason}
666
+ </span>
667
+ ) : null}
668
+ </span>
669
+ ) : (
646
670
  <span className="truncate text-muted-foreground">{labels?.placeholder ?? "Select"}</span>
647
671
  )}
648
672
  </span>
@@ -773,8 +797,9 @@ function AsyncMultiSelect<
773
797
  closeOnSelect = false,
774
798
  debounceMs = 250,
775
799
  minSearchLength = 0,
776
- maxSelected,
777
- showSelectAll = false,
800
+ maxSelected,
801
+ maxVisibleTags,
802
+ showSelectAll = false,
778
803
  labels,
779
804
  renderOption,
780
805
  renderValue,
@@ -783,11 +808,12 @@ function AsyncMultiSelect<
783
808
  renderEmpty,
784
809
  renderError,
785
810
  renderMinSearch,
786
- renderMaxSelected,
787
- onCreateOption,
788
- createOptionLabel,
789
- showCreateOption,
790
- triggerClassName,
811
+ renderMaxSelected,
812
+ onCreateOption,
813
+ createOptionLabel,
814
+ showCreateOption,
815
+ showSelectedDescription = true,
816
+ triggerClassName,
791
817
  contentClassName,
792
818
  searchClassName,
793
819
  optionClassName,
@@ -825,17 +851,20 @@ function AsyncMultiSelect<
825
851
  () => ({ search, minSearchLength, options: flatOptions, selectedCount: values.length, maxSelected }),
826
852
  [flatOptions, maxSelected, minSearchLength, search, values.length]
827
853
  )
828
- const hasValue = values.length > 0
829
- const canClear = clearable && hasValue && !disabled
830
- const isMaxReached = typeof maxSelected === "number" && values.length >= maxSelected
831
- const searchTooShort = searchKey.length < minSearchLength
854
+ const hasValue = values.length > 0
855
+ const canClear = clearable && hasValue && !disabled
856
+ const isMaxReached = typeof maxSelected === "number" && values.length >= maxSelected
857
+ const resolvedMaxVisibleTags = Math.max(maxVisibleTags ?? values.length, 1)
858
+ const searchTooShort = searchKey.length < minSearchLength
832
859
  const canCreate =
833
860
  !searchTooShort &&
834
861
  Boolean(onCreateOption) &&
835
862
  (showCreateOption ?? defaultShowCreateOption)(search, flatOptions)
836
863
  const visibleSelectableOptions = flatOptions.filter((option) => !option.disabled)
837
864
  const unselectedVisibleOptions = visibleSelectableOptions.filter((option) => !selectedSet.has(option.value))
838
- const canSelectAll = showSelectAll && unselectedVisibleOptions.length > 0 && !isMaxReached
865
+ const canSelectAll = showSelectAll && unselectedVisibleOptions.length > 0 && !isMaxReached
866
+ const visibleTagOptions = currentOptions.slice(0, resolvedMaxVisibleTags)
867
+ const hiddenTagCount = Math.max(currentOptions.length - visibleTagOptions.length, 0)
839
868
 
840
869
  React.useEffect(() => {
841
870
  cacheRef.current.clear()
@@ -1051,11 +1080,12 @@ function AsyncMultiSelect<
1051
1080
  }
1052
1081
  >
1053
1082
  <span className="flex min-w-0 flex-1 flex-wrap gap-1 text-left">
1054
- {currentOptions.length > 0 ? (
1055
- currentOptions.map((option) => (
1056
- <span
1057
- key={option.value}
1058
- data-slot="async-select-tag"
1083
+ {currentOptions.length > 0 ? (
1084
+ <>
1085
+ {visibleTagOptions.map((option) => (
1086
+ <span
1087
+ key={option.value}
1088
+ data-slot="async-select-tag"
1059
1089
  className={cn(
1060
1090
  "inline-flex max-w-full items-center gap-1.5 rounded-[var(--radius-sm)] border border-[color:color-mix(in_oklch,var(--primary),transparent_70%)] bg-[color:color-mix(in_oklch,var(--primary),transparent_92%)] px-2 py-1 text-xs font-medium text-foreground",
1061
1091
  tagClassName
@@ -1067,9 +1097,11 @@ function AsyncMultiSelect<
1067
1097
  renderValue?.(option) ??
1068
1098
  option.label}
1069
1099
  </span>
1070
- {option.disabled && option.disabledReason && (
1071
- <span className="truncate text-[11px] text-muted-foreground">{option.disabledReason}</span>
1072
- )}
1100
+ {showSelectedDescription && (option.description || (option.disabled && option.disabledReason)) ? (
1101
+ <span className="truncate text-[11px] text-muted-foreground">
1102
+ {option.description ?? option.disabledReason}
1103
+ </span>
1104
+ ) : null}
1073
1105
  </span>
1074
1106
  {!disabled && (
1075
1107
  <span
@@ -1086,14 +1118,26 @@ function AsyncMultiSelect<
1086
1118
  >
1087
1119
  <XIcon className="size-3" />
1088
1120
  </span>
1089
- )}
1090
- </span>
1091
- ))
1092
- ) : (
1093
- <span className="truncate text-muted-foreground">
1094
- {labels?.placeholder ?? "Select"}
1095
- </span>
1096
- )}
1121
+ )}
1122
+ </span>
1123
+ ))}
1124
+ {hiddenTagCount > 0 ? (
1125
+ <span
1126
+ data-slot="async-select-tag-overflow"
1127
+ className={cn(
1128
+ "inline-flex max-w-full items-center rounded-[var(--radius-sm)] border border-dashed border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_58%)] px-2 py-1 text-xs font-medium text-muted-foreground",
1129
+ tagClassName
1130
+ )}
1131
+ >
1132
+ {labels?.hiddenSelected?.(hiddenTagCount) ?? `+${hiddenTagCount} more`}
1133
+ </span>
1134
+ ) : null}
1135
+ </>
1136
+ ) : (
1137
+ <span className="truncate text-muted-foreground">
1138
+ {labels?.multiPlaceholder ?? labels?.placeholder ?? "Select"}
1139
+ </span>
1140
+ )}
1097
1141
  </span>
1098
1142
  <span className="ml-2 flex shrink-0 items-center gap-1">
1099
1143
  {canClear && (