tembro 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/dist/components/actions/action-menu.cjs +1 -1
  2. package/dist/components/actions/action-menu.d.ts +13 -1
  3. package/dist/components/actions/action-menu.js +87 -61
  4. package/dist/components/actions/button-group.cjs +1 -1
  5. package/dist/components/actions/button-group.d.ts +9 -1
  6. package/dist/components/actions/button-group.js +58 -14
  7. package/dist/components/actions/copy-button.cjs +1 -1
  8. package/dist/components/actions/copy-button.d.ts +2 -1
  9. package/dist/components/actions/copy-button.js +13 -11
  10. package/dist/components/calendar/calendar.cjs +1 -1
  11. package/dist/components/calendar/calendar.d.ts +14 -1
  12. package/dist/components/calendar/calendar.js +207 -128
  13. package/dist/components/calendar/date-picker.cjs +1 -1
  14. package/dist/components/calendar/date-picker.d.ts +3 -1
  15. package/dist/components/calendar/date-picker.js +57 -27
  16. package/dist/components/calendar/date-range-picker.cjs +1 -1
  17. package/dist/components/calendar/date-range-picker.d.ts +10 -1
  18. package/dist/components/calendar/date-range-picker.js +149 -64
  19. package/dist/components/data-table/data-table-pagination.cjs +1 -1
  20. package/dist/components/data-table/data-table-pagination.js +4 -4
  21. package/dist/components/data-table/data-table-toolbar.cjs +1 -1
  22. package/dist/components/data-table/data-table-toolbar.d.ts +5 -1
  23. package/dist/components/data-table/data-table-toolbar.js +36 -23
  24. package/dist/components/data-table/data-table.cjs +1 -1
  25. package/dist/components/data-table/data-table.d.ts +8 -6
  26. package/dist/components/data-table/data-table.js +89 -80
  27. package/dist/components/data-table/demo.cjs +1 -1
  28. package/dist/components/data-table/demo.js +3 -13
  29. package/dist/components/data-table/index.cjs +1 -1
  30. package/dist/components/data-table/index.js +5 -5
  31. package/dist/components/data-table/public.cjs +1 -1
  32. package/dist/components/data-table/public.d.ts +1 -6
  33. package/dist/components/data-table/public.js +7 -12
  34. package/dist/components/display/activity-feed.cjs +1 -1
  35. package/dist/components/display/activity-feed.d.ts +12 -1
  36. package/dist/components/display/activity-feed.js +69 -47
  37. package/dist/components/display/carousel.cjs +1 -1
  38. package/dist/components/display/carousel.d.ts +16 -1
  39. package/dist/components/display/carousel.js +71 -26
  40. package/dist/components/display/code-block.cjs +2 -1
  41. package/dist/components/display/code-block.d.ts +3 -1
  42. package/dist/components/display/code-block.js +33 -19
  43. package/dist/components/display/comparison-card.cjs +1 -1
  44. package/dist/components/display/comparison-card.d.ts +3 -3
  45. package/dist/components/display/comparison-card.js +14 -38
  46. package/dist/components/display/data-state.cjs +1 -1
  47. package/dist/components/display/data-state.d.ts +12 -2
  48. package/dist/components/display/data-state.js +80 -42
  49. package/dist/components/display/demo.cjs +1 -1
  50. package/dist/components/display/demo.js +1 -5
  51. package/dist/components/display/index.cjs +1 -1
  52. package/dist/components/display/index.d.ts +0 -3
  53. package/dist/components/display/index.js +21 -24
  54. package/dist/components/display/smart-card.d.ts +1 -1
  55. package/dist/components/display/status-legend.d.ts +1 -1
  56. package/dist/components/feedback/alert.cjs +1 -1
  57. package/dist/components/feedback/alert.d.ts +6 -1
  58. package/dist/components/feedback/alert.js +49 -19
  59. package/dist/components/feedback/index.cjs +1 -1
  60. package/dist/components/feedback/index.d.ts +0 -2
  61. package/dist/components/feedback/index.js +3 -5
  62. package/dist/components/filters/demo.cjs +1 -1
  63. package/dist/components/filters/demo.js +1 -5
  64. package/dist/components/filters/filter-bar.cjs +1 -1
  65. package/dist/components/filters/filter-bar.d.ts +15 -1
  66. package/dist/components/filters/filter-bar.js +94 -50
  67. package/dist/components/filters/index.cjs +1 -1
  68. package/dist/components/filters/index.d.ts +0 -1
  69. package/dist/components/filters/index.js +3 -4
  70. package/dist/components/form/form-field-shell.cjs +1 -1
  71. package/dist/components/form/form-field-shell.d.ts +17 -3
  72. package/dist/components/form/form-field-shell.js +54 -40
  73. package/dist/components/form/form-input.cjs +1 -1
  74. package/dist/components/form/form-input.d.ts +3 -4
  75. package/dist/components/form/form-input.js +285 -224
  76. package/dist/components/form/form-select.cjs +1 -1
  77. package/dist/components/form/form-select.d.ts +2 -2
  78. package/dist/components/form/form-select.js +49 -35
  79. package/dist/components/form/form-switch.cjs +1 -1
  80. package/dist/components/form/form-switch.js +79 -66
  81. package/dist/components/form/form-textarea.cjs +1 -1
  82. package/dist/components/form/form-textarea.js +59 -48
  83. package/dist/components/form/index.cjs +1 -1
  84. package/dist/components/form/index.js +14 -14
  85. package/dist/components/form/public.cjs +1 -1
  86. package/dist/components/form/public.d.ts +0 -8
  87. package/dist/components/form/public.js +7 -15
  88. package/dist/components/inputs/async-select.cjs +1 -1
  89. package/dist/components/inputs/async-select.d.ts +14 -2
  90. package/dist/components/inputs/async-select.js +278 -270
  91. package/dist/components/inputs/combobox.cjs +1 -1
  92. package/dist/components/inputs/combobox.d.ts +5 -1
  93. package/dist/components/inputs/combobox.js +52 -19
  94. package/dist/components/inputs/search-input.d.ts +3 -0
  95. package/dist/components/inputs/simple-select.cjs +1 -1
  96. package/dist/components/inputs/simple-select.d.ts +10 -31
  97. package/dist/components/inputs/simple-select.js +5 -85
  98. package/dist/components/layout/app-sidebar.cjs +1 -1
  99. package/dist/components/layout/app-sidebar.d.ts +4 -1
  100. package/dist/components/layout/app-sidebar.js +152 -132
  101. package/dist/components/layout/breadcrumbs.cjs +1 -1
  102. package/dist/components/layout/breadcrumbs.d.ts +2 -1
  103. package/dist/components/layout/breadcrumbs.js +10 -10
  104. package/dist/components/layout/index.cjs +1 -1
  105. package/dist/components/layout/index.js +3 -3
  106. package/dist/components/layout/stat-card.cjs +1 -1
  107. package/dist/components/layout/stat-card.d.ts +8 -1
  108. package/dist/components/layout/stat-card.js +33 -11
  109. package/dist/components/modern/calendar-scheduler.cjs +1 -1
  110. package/dist/components/modern/calendar-scheduler.d.ts +2 -1
  111. package/dist/components/modern/calendar-scheduler.js +21 -12
  112. package/dist/components/overlay/alert-dialog.cjs +1 -1
  113. package/dist/components/overlay/alert-dialog.d.ts +15 -1
  114. package/dist/components/overlay/alert-dialog.js +102 -27
  115. package/dist/components/overlay/drawer.cjs +1 -1
  116. package/dist/components/overlay/drawer.d.ts +4 -1
  117. package/dist/components/overlay/drawer.js +20 -17
  118. package/dist/components/patterns/index.cjs +1 -1
  119. package/dist/components/patterns/index.d.ts +0 -1
  120. package/dist/components/patterns/index.js +1 -2
  121. package/dist/components/patterns/public.cjs +1 -1
  122. package/dist/components/patterns/public.d.ts +0 -1
  123. package/dist/components/patterns/public.js +1 -2
  124. package/dist/components/ui/button/index.cjs +1 -1
  125. package/dist/components/ui/button/index.d.ts +3 -1
  126. package/dist/components/ui/button/index.js +7 -5
  127. package/dist/components/ui/card/index.cjs +1 -1
  128. package/dist/components/ui/card/index.d.ts +13 -2
  129. package/dist/components/ui/card/index.js +74 -49
  130. package/dist/components/ui/checkbox/index.cjs +1 -1
  131. package/dist/components/ui/checkbox/index.d.ts +8 -0
  132. package/dist/components/ui/checkbox/index.js +16 -14
  133. package/dist/components/ui/collapse/index.cjs +1 -1
  134. package/dist/components/ui/collapse/index.d.ts +17 -3
  135. package/dist/components/ui/collapse/index.js +88 -33
  136. package/dist/components/ui/dialog/index.cjs +1 -1
  137. package/dist/components/ui/dialog/index.d.ts +2 -1
  138. package/dist/components/ui/dialog/index.js +6 -4
  139. package/dist/components/ui/dropdown-menu/index.cjs +1 -1
  140. package/dist/components/ui/dropdown-menu/index.d.ts +9 -4
  141. package/dist/components/ui/dropdown-menu/index.js +87 -62
  142. package/dist/components/ui/input/index.cjs +1 -1
  143. package/dist/components/ui/input/index.d.ts +8 -0
  144. package/dist/components/ui/input/index.js +63 -30
  145. package/dist/components/ui/select/index.cjs +1 -1
  146. package/dist/components/ui/select/index.d.ts +33 -1
  147. package/dist/components/ui/select/index.js +154 -48
  148. package/dist/index.cjs +1 -1
  149. package/dist/index.js +137 -156
  150. package/dist/public-component-surface.cjs +1 -1
  151. package/dist/public-component-surface.js +0 -15
  152. package/dist/showcase/component-api-schema.cjs +1 -1
  153. package/dist/showcase/component-api-schema.js +2 -2
  154. package/dist/showcase/create-demo.cjs +23 -36
  155. package/dist/showcase/create-demo.js +15 -16
  156. package/dist/showcase/fallback.cjs +3 -3
  157. package/dist/showcase/fallback.js +275 -265
  158. package/dist/showcase/premium/accordion/showcase.cjs +1 -1
  159. package/dist/showcase/premium/accordion/showcase.js +36 -5
  160. package/dist/showcase/premium/action-menu/showcase.cjs +1 -1
  161. package/dist/showcase/premium/action-menu/showcase.js +26 -8
  162. package/dist/showcase/premium/activity-feed/showcase.cjs +1 -1
  163. package/dist/showcase/premium/activity-feed/showcase.js +60 -36
  164. package/dist/showcase/premium/alert/showcase.cjs +1 -1
  165. package/dist/showcase/premium/alert/showcase.js +41 -18
  166. package/dist/showcase/premium/alert-dialog/showcase.cjs +1 -1
  167. package/dist/showcase/premium/alert-dialog/showcase.js +35 -7
  168. package/dist/showcase/premium/async-multi-select/mock.cjs +4 -3
  169. package/dist/showcase/premium/async-multi-select/mock.js +5 -5
  170. package/dist/showcase/premium/async-multi-select/showcase.cjs +1 -1
  171. package/dist/showcase/premium/async-multi-select/showcase.js +4 -3
  172. package/dist/showcase/premium/async-select/mock.cjs +1 -1
  173. package/dist/showcase/premium/async-select/mock.js +1 -1
  174. package/dist/showcase/premium/async-select/showcase.cjs +1 -1
  175. package/dist/showcase/premium/async-select/showcase.js +69 -22
  176. package/dist/showcase/premium/button/showcase.cjs +1 -1
  177. package/dist/showcase/premium/button/showcase.js +49 -3
  178. package/dist/showcase/premium/button-group/showcase.cjs +1 -1
  179. package/dist/showcase/premium/button-group/showcase.js +53 -29
  180. package/dist/showcase/premium/calendar/showcase.cjs +1 -1
  181. package/dist/showcase/premium/calendar/showcase.js +7 -2
  182. package/dist/showcase/premium/carousel/showcase.cjs +1 -1
  183. package/dist/showcase/premium/carousel/showcase.js +95 -47
  184. package/dist/showcase/premium/checkbox/showcase.cjs +1 -1
  185. package/dist/showcase/premium/checkbox/showcase.js +143 -67
  186. package/dist/showcase/premium/clearable-input/mock.cjs +4 -3
  187. package/dist/showcase/premium/clearable-input/mock.js +3 -2
  188. package/dist/showcase/premium/clearable-input/showcase.cjs +1 -1
  189. package/dist/showcase/premium/clearable-input/showcase.js +8 -2
  190. package/dist/showcase/premium/collapse/showcase.cjs +1 -1
  191. package/dist/showcase/premium/collapse/showcase.js +7 -0
  192. package/dist/showcase/premium/combobox/showcase.cjs +1 -1
  193. package/dist/showcase/premium/combobox/showcase.d.ts +2 -1
  194. package/dist/showcase/premium/combobox/showcase.js +56 -47
  195. package/dist/showcase/premium/data-table/showcase.cjs +1 -1
  196. package/dist/showcase/premium/data-table/showcase.js +138 -46
  197. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  198. package/dist/showcase/premium/data-table-parts/showcase.js +16 -14
  199. package/dist/showcase/premium/date-input/mock.cjs +1 -1
  200. package/dist/showcase/premium/date-input/mock.js +1 -1
  201. package/dist/showcase/premium/date-range-picker/showcase.cjs +1 -1
  202. package/dist/showcase/premium/date-range-picker/showcase.js +32 -1
  203. package/dist/showcase/premium/dropdown-menu/showcase.cjs +1 -1
  204. package/dist/showcase/premium/dropdown-menu/showcase.js +88 -54
  205. package/dist/showcase/premium/form-wrapper/mock.cjs +41 -15
  206. package/dist/showcase/premium/form-wrapper/mock.js +4 -4
  207. package/dist/showcase/premium/form-wrapper/showcase.cjs +1 -1
  208. package/dist/showcase/premium/form-wrapper/showcase.js +77 -28
  209. package/dist/showcase/premium/index.cjs +1 -1
  210. package/dist/showcase/premium/index.js +426 -467
  211. package/dist/showcase/premium/input/mock.cjs +4 -1
  212. package/dist/showcase/premium/input/mock.js +1 -1
  213. package/dist/showcase/premium/masked-input/mock.cjs +1 -1
  214. package/dist/showcase/premium/masked-input/mock.js +1 -1
  215. package/dist/showcase/premium/money-input/mock.cjs +1 -1
  216. package/dist/showcase/premium/money-input/mock.js +1 -1
  217. package/dist/showcase/premium/number-input/mock.cjs +1 -1
  218. package/dist/showcase/premium/number-input/mock.js +1 -1
  219. package/dist/showcase/premium/phone-input/mock.cjs +1 -1
  220. package/dist/showcase/premium/phone-input/mock.js +1 -1
  221. package/dist/showcase/premium/quantity-input/mock.cjs +1 -1
  222. package/dist/showcase/premium/quantity-input/mock.js +1 -1
  223. package/dist/showcase/premium/select/mock.cjs +8 -9
  224. package/dist/showcase/premium/select/mock.js +1 -1
  225. package/dist/showcase/premium/select/showcase.cjs +1 -1
  226. package/dist/showcase/premium/select/showcase.js +76 -86
  227. package/dist/showcase/premium/simple-select/mock.cjs +1 -1
  228. package/dist/showcase/premium/simple-select/mock.js +1 -1
  229. package/dist/showcase/premium/simple-select/showcase.cjs +1 -1
  230. package/dist/showcase/premium/simple-select/showcase.js +4 -2
  231. package/dist/showcase/preview-catalog.cjs +7 -10
  232. package/dist/showcase/preview-catalog.js +7 -7
  233. package/dist/showcase/registry-quality.cjs +1 -1
  234. package/dist/showcase/registry-quality.js +0 -23
  235. package/dist/showcase/registry-specific.cjs +1 -1
  236. package/dist/showcase/registry-specific.js +153 -383
  237. package/dist/showcase/render-registry-preview.cjs +1 -1
  238. package/dist/showcase/render-registry-preview.js +169 -197
  239. package/dist/showcase/site-data.cjs +1 -1
  240. package/dist/showcase/site-data.js +197 -941
  241. package/dist/showcase/supplemental.cjs +1 -1
  242. package/dist/showcase/supplemental.js +1 -1
  243. package/dist/showcase/tembro-registry.json.cjs +1 -1
  244. package/dist/showcase/tembro-registry.json.js +33 -51
  245. package/package.json +1 -1
  246. package/packages/cli/dist/index.cjs +2 -2
  247. package/packages/cli/vendor/src/components/actions/action-menu.tsx +149 -83
  248. package/packages/cli/vendor/src/components/actions/button-group.tsx +141 -33
  249. package/packages/cli/vendor/src/components/actions/copy-button.tsx +21 -16
  250. package/packages/cli/vendor/src/components/calendar/calendar.tsx +223 -88
  251. package/packages/cli/vendor/src/components/calendar/date-picker.tsx +73 -29
  252. package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +154 -49
  253. package/packages/cli/vendor/src/components/data-table/data-table-pagination.tsx +7 -7
  254. package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +71 -50
  255. package/packages/cli/vendor/src/components/data-table/data-table.tsx +86 -73
  256. package/packages/cli/vendor/src/components/data-table/demo.tsx +2 -12
  257. package/packages/cli/vendor/src/components/data-table/public.ts +1 -6
  258. package/packages/cli/vendor/src/components/display/activity-feed.tsx +98 -40
  259. package/packages/cli/vendor/src/components/display/carousel.tsx +104 -6
  260. package/packages/cli/vendor/src/components/display/code-block.tsx +58 -26
  261. package/packages/cli/vendor/src/components/display/comparison-card.tsx +15 -41
  262. package/packages/cli/vendor/src/components/display/data-state.tsx +119 -50
  263. package/packages/cli/vendor/src/components/display/demo.tsx +0 -4
  264. package/packages/cli/vendor/src/components/display/index.ts +0 -3
  265. package/packages/cli/vendor/src/components/display/smart-card.tsx +1 -1
  266. package/packages/cli/vendor/src/components/display/status-legend.tsx +1 -1
  267. package/packages/cli/vendor/src/components/feedback/alert.tsx +86 -28
  268. package/packages/cli/vendor/src/components/feedback/index.ts +0 -2
  269. package/packages/cli/vendor/src/components/filters/demo.tsx +0 -1
  270. package/packages/cli/vendor/src/components/filters/filter-bar.tsx +126 -54
  271. package/packages/cli/vendor/src/components/filters/index.ts +0 -1
  272. package/packages/cli/vendor/src/components/form/form-field-shell.tsx +72 -34
  273. package/packages/cli/vendor/src/components/form/form-input.tsx +127 -23
  274. package/packages/cli/vendor/src/components/form/form-select.tsx +30 -7
  275. package/packages/cli/vendor/src/components/form/form-switch.tsx +77 -58
  276. package/packages/cli/vendor/src/components/form/form-textarea.tsx +65 -51
  277. package/packages/cli/vendor/src/components/form/public.ts +0 -9
  278. package/packages/cli/vendor/src/components/inputs/async-select.tsx +138 -91
  279. package/packages/cli/vendor/src/components/inputs/combobox.tsx +66 -9
  280. package/packages/cli/vendor/src/components/inputs/search-input.tsx +5 -2
  281. package/packages/cli/vendor/src/components/inputs/simple-select.tsx +20 -162
  282. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +42 -1
  283. package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +17 -8
  284. package/packages/cli/vendor/src/components/layout/stat-card.tsx +63 -23
  285. package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +32 -22
  286. package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +148 -24
  287. package/packages/cli/vendor/src/components/overlay/drawer.tsx +42 -30
  288. package/packages/cli/vendor/src/components/patterns/index.ts +0 -1
  289. package/packages/cli/vendor/src/components/patterns/public.ts +0 -1
  290. package/packages/cli/vendor/src/components/ui/button/index.tsx +27 -17
  291. package/packages/cli/vendor/src/components/ui/card/index.tsx +95 -25
  292. package/packages/cli/vendor/src/components/ui/checkbox/index.tsx +22 -5
  293. package/packages/cli/vendor/src/components/ui/collapse/index.tsx +97 -16
  294. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +12 -8
  295. package/packages/cli/vendor/src/components/ui/dropdown-menu/index.tsx +82 -28
  296. package/packages/cli/vendor/src/components/ui/input/index.tsx +98 -0
  297. package/packages/cli/vendor/src/components/ui/select/index.tsx +227 -34
  298. package/packages/cli/vendor/src/public-component-surface.ts +0 -3
  299. package/packages/cli/vendor/src/showcase/component-api-schema.ts +2 -2
  300. package/packages/cli/vendor/src/showcase/create-demo.tsx +44 -58
  301. package/packages/cli/vendor/src/showcase/fallback.tsx +80 -99
  302. package/packages/cli/vendor/src/showcase/premium/accordion/showcase.tsx +32 -2
  303. package/packages/cli/vendor/src/showcase/premium/action-menu/showcase.tsx +12 -3
  304. package/packages/cli/vendor/src/showcase/premium/activity-feed/showcase.tsx +15 -2
  305. package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +32 -17
  306. package/packages/cli/vendor/src/showcase/premium/alert-dialog/showcase.tsx +28 -3
  307. package/packages/cli/vendor/src/showcase/premium/async-multi-select/mock.ts +6 -5
  308. package/packages/cli/vendor/src/showcase/premium/async-multi-select/showcase.tsx +5 -4
  309. package/packages/cli/vendor/src/showcase/premium/async-select/mock.ts +1 -1
  310. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +36 -0
  311. package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +26 -5
  312. package/packages/cli/vendor/src/showcase/premium/button-group/showcase.tsx +20 -3
  313. package/packages/cli/vendor/src/showcase/premium/calendar/showcase.tsx +5 -0
  314. package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +33 -5
  315. package/packages/cli/vendor/src/showcase/premium/checkbox/showcase.tsx +46 -3
  316. package/packages/cli/vendor/src/showcase/premium/clearable-input/mock.ts +5 -3
  317. package/packages/cli/vendor/src/showcase/premium/clearable-input/showcase.tsx +5 -2
  318. package/packages/cli/vendor/src/showcase/premium/collapse/showcase.tsx +4 -0
  319. package/packages/cli/vendor/src/showcase/premium/combobox/showcase.tsx +8 -0
  320. package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +77 -27
  321. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +14 -14
  322. package/packages/cli/vendor/src/showcase/premium/date-input/mock.ts +1 -1
  323. package/packages/cli/vendor/src/showcase/premium/date-range-picker/showcase.tsx +7 -0
  324. package/packages/cli/vendor/src/showcase/premium/dropdown-menu/showcase.tsx +46 -3
  325. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +70 -44
  326. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +129 -12
  327. package/packages/cli/vendor/src/showcase/premium/index.ts +7 -24
  328. package/packages/cli/vendor/src/showcase/premium/input/mock.ts +2 -2
  329. package/packages/cli/vendor/src/showcase/premium/masked-input/mock.ts +1 -1
  330. package/packages/cli/vendor/src/showcase/premium/money-input/mock.ts +1 -1
  331. package/packages/cli/vendor/src/showcase/premium/number-input/mock.ts +1 -1
  332. package/packages/cli/vendor/src/showcase/premium/phone-input/mock.ts +1 -1
  333. package/packages/cli/vendor/src/showcase/premium/quantity-input/mock.ts +1 -1
  334. package/packages/cli/vendor/src/showcase/premium/select/mock.ts +1 -1
  335. package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +13 -21
  336. package/packages/cli/vendor/src/showcase/premium/simple-select/mock.ts +1 -1
  337. package/packages/cli/vendor/src/showcase/premium/simple-select/showcase.tsx +2 -1
  338. package/packages/cli/vendor/src/showcase/preview-catalog.tsx +7 -7
  339. package/packages/cli/vendor/src/showcase/registry-quality.ts +4 -28
  340. package/packages/cli/vendor/src/showcase/registry-specific.tsx +10 -186
  341. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +23 -57
  342. package/packages/cli/vendor/src/showcase/site-data.tsx +2443 -2761
  343. package/packages/cli/vendor/src/showcase/supplemental.tsx +2 -42
  344. package/packages/cli/vendor/src/showcase/tembro-registry.json +11 -58
  345. package/registry.json +11 -61
  346. package/dist/components/display/entity-card.cjs +0 -1
  347. package/dist/components/display/entity-card.d.ts +0 -18
  348. package/dist/components/display/entity-card.js +0 -61
  349. package/dist/components/display/entity-header.cjs +0 -1
  350. package/dist/components/display/entity-header.d.ts +0 -13
  351. package/dist/components/display/entity-header.js +0 -52
  352. package/dist/components/display/file-card.cjs +0 -1
  353. package/dist/components/display/file-card.d.ts +0 -14
  354. package/dist/components/display/file-card.js +0 -59
  355. package/dist/components/feedback/empty-search-state.cjs +0 -1
  356. package/dist/components/feedback/empty-search-state.d.ts +0 -11
  357. package/dist/components/feedback/empty-search-state.js +0 -45
  358. package/dist/components/feedback/empty-state.cjs +0 -1
  359. package/dist/components/feedback/empty-state.d.ts +0 -11
  360. package/dist/components/feedback/empty-state.js +0 -38
  361. package/dist/components/filters/filter-chips.cjs +0 -1
  362. package/dist/components/filters/filter-chips.d.ts +0 -18
  363. package/dist/components/filters/filter-chips.js +0 -61
  364. package/dist/components/patterns/form-builder-presets.cjs +0 -1
  365. package/dist/components/patterns/form-builder-presets.d.ts +0 -1
  366. package/dist/components/patterns/form-builder-presets.js +0 -2
  367. package/dist/components/patterns/form-builder.cjs +0 -1
  368. package/dist/components/patterns/form-builder.d.ts +0 -109
  369. package/dist/components/patterns/form-builder.js +0 -263
  370. package/dist/showcase/premium/empty-state/index.cjs +0 -1
  371. package/dist/showcase/premium/empty-state/index.d.ts +0 -2
  372. package/dist/showcase/premium/empty-state/index.js +0 -3
  373. package/dist/showcase/premium/empty-state/mock.cjs +0 -14
  374. package/dist/showcase/premium/empty-state/mock.d.ts +0 -2
  375. package/dist/showcase/premium/empty-state/mock.js +0 -31
  376. package/dist/showcase/premium/empty-state/showcase.cjs +0 -1
  377. package/dist/showcase/premium/empty-state/showcase.d.ts +0 -3
  378. package/dist/showcase/premium/empty-state/showcase.js +0 -99
  379. package/dist/showcase/premium/form-builder/index.cjs +0 -1
  380. package/dist/showcase/premium/form-builder/index.d.ts +0 -2
  381. package/dist/showcase/premium/form-builder/index.js +0 -3
  382. package/dist/showcase/premium/form-builder/mock.cjs +0 -57
  383. package/dist/showcase/premium/form-builder/mock.d.ts +0 -2
  384. package/dist/showcase/premium/form-builder/mock.js +0 -40
  385. package/dist/showcase/premium/form-builder/showcase.cjs +0 -1
  386. package/dist/showcase/premium/form-builder/showcase.d.ts +0 -3
  387. package/dist/showcase/premium/form-builder/showcase.js +0 -69
  388. package/packages/cli/vendor/src/components/display/entity-card.tsx +0 -80
  389. package/packages/cli/vendor/src/components/display/entity-header.tsx +0 -80
  390. package/packages/cli/vendor/src/components/display/file-card.tsx +0 -61
  391. package/packages/cli/vendor/src/components/feedback/empty-search-state.tsx +0 -65
  392. package/packages/cli/vendor/src/components/feedback/empty-state.tsx +0 -56
  393. package/packages/cli/vendor/src/components/filters/filter-chips.tsx +0 -89
  394. package/packages/cli/vendor/src/components/patterns/form-builder-presets.ts +0 -13
  395. package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -443
  396. package/packages/cli/vendor/src/showcase/premium/empty-state/index.ts +0 -2
  397. package/packages/cli/vendor/src/showcase/premium/empty-state/mock.ts +0 -30
  398. package/packages/cli/vendor/src/showcase/premium/empty-state/showcase.tsx +0 -65
  399. package/packages/cli/vendor/src/showcase/premium/form-builder/index.ts +0 -2
  400. package/packages/cli/vendor/src/showcase/premium/form-builder/mock.ts +0 -79
  401. package/packages/cli/vendor/src/showcase/premium/form-builder/showcase.tsx +0 -55
@@ -1,5 +1,5 @@
1
1
  import * as React from "react"
2
- import type { ColumnDef, RowSelectionState } from "@tanstack/react-table"
2
+ import type { ColumnDef, Row, RowSelectionState } from "@tanstack/react-table"
3
3
 
4
4
  import {
5
5
  Badge,
@@ -7,13 +7,13 @@ import {
7
7
  DataTable,
8
8
  DataTableBulkActions,
9
9
  DataTableColumnVisibilityMenu,
10
- DataTableSavedFilters,
11
10
  DataTableSortableHeader,
12
11
  DataTableViewPresets,
13
- SearchInput,
14
- createDataTableActionsColumn,
15
- createDataTableSelectColumn,
12
+ Input,
16
13
  } from "@/index"
14
+ import { createDataTableActionsColumn } from "@/components/data-table/data-table-actions-column"
15
+ import { DataTableSavedFilters } from "@/components/data-table/data-table-saved-filters"
16
+ import { createDataTableSelectColumn } from "@/components/data-table/data-table-select-column"
17
17
 
18
18
  import { buildDataTableDemoRows, dataTableDemoPresets, type DataTableDemoRow } from "./data"
19
19
 
@@ -40,9 +40,9 @@ function buildColumns(setNotes: (value: string) => void): ColumnDef<DataTableDem
40
40
  accessorKey: "customer",
41
41
  header: ({ column }) => <DataTableSortableHeader column={column}>Customer</DataTableSortableHeader>,
42
42
  },
43
- {
44
- accessorKey: "status",
45
- header: "Status",
43
+ {
44
+ accessorKey: "status",
45
+ header: "Status",
46
46
  cell: ({ row }) => (
47
47
  <Badge variant={row.original.status === "Paid" ? "secondary" : row.original.status === "Review" ? "outline" : "destructive"}>
48
48
  {row.original.status}
@@ -54,7 +54,7 @@ function buildColumns(setNotes: (value: string) => void): ColumnDef<DataTableDem
54
54
  header: ({ column }) => <DataTableSortableHeader column={column}>Amount</DataTableSortableHeader>,
55
55
  },
56
56
  createDataTableActionsColumn<DataTableDemoRow>({
57
- getActions: (_row, original) => [
57
+ getActions: (_row: Row<DataTableDemoRow>, original: DataTableDemoRow) => [
58
58
  { key: "open", label: "Open detail", onSelect: () => setNotes(`${original.invoice} opened from row action`) },
59
59
  { key: "archive", label: "Archive", destructive: true, onSelect: () => setNotes(`${original.invoice} sent to archive`) },
60
60
  ],
@@ -129,9 +129,9 @@ export function DataTablePartShowcase({
129
129
  { id: "risk", name: "At risk", filters: {} },
130
130
  ]}
131
131
  activeFilterId={view === "all" ? "all" : view === "finance" ? "finance" : "risk"}
132
- onSelectFilter={(id) => setView(id === "finance" ? "finance" : id === "risk" ? "at-risk" : "all")}
133
- onSaveFilter={(name) => setNotes(`Saved filter created: ${name}`)}
134
- onDeleteFilter={(id) => setNotes(`Saved filter deleted: ${id}`)}
132
+ onSelectFilter={(id: string) => setView(id === "finance" ? "finance" : id === "risk" ? "at-risk" : "all")}
133
+ onSaveFilter={(name: string) => setNotes(`Saved filter created: ${name}`)}
134
+ onDeleteFilter={(id: string) => setNotes(`Saved filter deleted: ${id}`)}
135
135
  onClearFilters={() => setView("all")}
136
136
  />
137
137
  </div>
@@ -147,7 +147,7 @@ export function DataTablePartShowcase({
147
147
  size="sm"
148
148
  />
149
149
  <div className="w-full max-w-[320px]">
150
- <SearchInput value={search} onValueChange={setSearch} placeholder="Search invoice, customer..." />
150
+ <Input type="search" value={search} onValueChange={setSearch} placeholder="Search invoice, customer..." />
151
151
  </div>
152
152
  </div>
153
153
  </div>
@@ -168,7 +168,7 @@ export function DataTablePartShowcase({
168
168
  toolbarProps={(table) => ({
169
169
  title: "Invoices",
170
170
  description: "Premium subroute preview for reusable DataTable parts.",
171
- search: <SearchInput value={search} onValueChange={setSearch} placeholder="Search rows..." />,
171
+ search: <Input type="search" value={search} onValueChange={setSearch} placeholder="Search rows..." />,
172
172
  actions: (
173
173
  <div className="flex items-center gap-2">
174
174
  <DataTableColumnVisibilityMenu table={table} />
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const dateInputMock: ComponentDemoMock = {
4
4
  code: `import { useState } from "react"
5
- import { DateInput } from "@/index"
5
+ import { DateInput } from "tembro"
6
6
 
7
7
  export function Example() {
8
8
  const [value, setValue] = useState("2026-06-19")
@@ -15,6 +15,13 @@ export function DateRangePickerShowcase({ mode }: ComponentDemoProps) {
15
15
  min="2026-06-01"
16
16
  max="2026-12-31"
17
17
  disabledDates={["2026-06-21", "2026-06-22"]}
18
+ closeOnPresetSelect
19
+ presets={[
20
+ { label: "This week", value: { from: "2026-06-01", to: "2026-06-07" } },
21
+ { label: "Next 14 days", value: { from: "2026-06-08", to: "2026-06-20" } },
22
+ { label: "Q3", value: { from: "2026-07-01", to: "2026-09-30" } },
23
+ ]}
24
+ labels={{ placeholder: "Choose reporting range", apply: "Apply range", clear: "Clear", start: "Start", end: "End" }}
18
25
  />
19
26
  <p className="aui-text-subtle text-sm">Range: {value.from} → {value.to}</p>
20
27
  <p className="aui-text-muted text-sm">Mode: {mode}</p>
@@ -7,11 +7,15 @@ import {
7
7
  DropdownMenuContent,
8
8
  DropdownMenuGroup,
9
9
  DropdownMenuItem,
10
+ DropdownMenuItemDescription,
10
11
  DropdownMenuLabel,
11
12
  DropdownMenuRadioGroup,
12
13
  DropdownMenuRadioItem,
13
14
  DropdownMenuSeparator,
14
15
  DropdownMenuShortcut,
16
+ DropdownMenuSub,
17
+ DropdownMenuSubContent,
18
+ DropdownMenuSubTrigger,
15
19
  DropdownMenuTrigger,
16
20
  } from "@/index"
17
21
 
@@ -22,6 +26,8 @@ const panelClass = "border-t border-[color:var(--aui-divider)] py-6"
22
26
  export function DropdownMenuShowcase({ mode }: ComponentDemoProps) {
23
27
  const [status, setStatus] = React.useState("private")
24
28
  const [notifications, setNotifications] = React.useState(true)
29
+ const [compact, setCompact] = React.useState(false)
30
+ const [keepOpen, setKeepOpen] = React.useState(false)
25
31
 
26
32
  return (
27
33
  <div className="space-y-0">
@@ -46,6 +52,10 @@ export function DropdownMenuShowcase({ mode }: ComponentDemoProps) {
46
52
  <p className="text-xs font-semibold uppercase tracking-[0.22em] aui-text-muted">Route</p>
47
53
  <p className="mt-2 text-lg font-semibold aui-text-strong">{mode === "playground" ? "Interactive" : "Docs"}</p>
48
54
  </div>
55
+ <div className="rounded-[18px] border border-[color:var(--aui-divider)] px-4 py-3">
56
+ <p className="text-xs font-semibold uppercase tracking-[0.22em] aui-text-muted">Menu close</p>
57
+ <p className="mt-2 text-lg font-semibold aui-text-strong">{keepOpen ? "Pinned open" : "Auto close"}</p>
58
+ </div>
49
59
  </div>
50
60
  </div>
51
61
  </section>
@@ -63,12 +73,45 @@ export function DropdownMenuShowcase({ mode }: ComponentDemoProps) {
63
73
  </DropdownMenuTrigger>
64
74
  <DropdownMenuContent>
65
75
  <DropdownMenuLabel>Workspace actions</DropdownMenuLabel>
66
- <DropdownMenuItem>Open workspace</DropdownMenuItem>
67
- <DropdownMenuItem disabled>Delete from archive</DropdownMenuItem>
76
+ <DropdownMenuItem>
77
+ <span className="grid gap-0.5">
78
+ <span>Open workspace</span>
79
+ <DropdownMenuItemDescription>Go to the main dashboard route</DropdownMenuItemDescription>
80
+ </span>
81
+ <DropdownMenuShortcut>↵</DropdownMenuShortcut>
82
+ </DropdownMenuItem>
83
+ <DropdownMenuItem disabled>
84
+ <span className="grid gap-0.5">
85
+ <span>Delete from archive</span>
86
+ <DropdownMenuItemDescription>Locked until retention expires</DropdownMenuItemDescription>
87
+ </span>
88
+ </DropdownMenuItem>
68
89
  <DropdownMenuSeparator />
69
- <DropdownMenuCheckboxItem checked={notifications} onCheckedChange={(value) => setNotifications(Boolean(value))}>
90
+ <DropdownMenuCheckboxItem
91
+ checked={notifications}
92
+ closeOnSelect={!keepOpen}
93
+ onCheckedChange={(value) => setNotifications(Boolean(value))}
94
+ >
70
95
  Notification access
71
96
  </DropdownMenuCheckboxItem>
97
+ <DropdownMenuCheckboxItem
98
+ checked={compact}
99
+ closeOnSelect={!keepOpen}
100
+ onCheckedChange={(value) => setCompact(Boolean(value))}
101
+ >
102
+ Compact density
103
+ </DropdownMenuCheckboxItem>
104
+ <DropdownMenuCheckboxItem checked={keepOpen} closeOnSelect={false} onCheckedChange={(value) => setKeepOpen(Boolean(value))}>
105
+ Keep menu open
106
+ </DropdownMenuCheckboxItem>
107
+ <DropdownMenuSub>
108
+ <DropdownMenuSubTrigger>Export</DropdownMenuSubTrigger>
109
+ <DropdownMenuSubContent>
110
+ <DropdownMenuItem>CSV</DropdownMenuItem>
111
+ <DropdownMenuItem>PDF summary</DropdownMenuItem>
112
+ <DropdownMenuItem>JSON payload</DropdownMenuItem>
113
+ </DropdownMenuSubContent>
114
+ </DropdownMenuSub>
72
115
  <DropdownMenuGroup>
73
116
  <DropdownMenuRadioGroup value={status} onValueChange={(value) => setStatus(value)}>
74
117
  <DropdownMenuRadioItem value="public">Public</DropdownMenuRadioItem>
@@ -1,11 +1,11 @@
1
1
  import type { ComponentDemoMock } from "../types"
2
2
 
3
- export const formRHFWrapperMock: ComponentDemoMock = {
4
- code: `import { useForm } from "react-hook-form"
5
- import { Button, FormFieldShell, FormInput, FormSwitch, FormTextarea } from "@/index"
6
-
7
- type DemoValues = {
8
- name: string
3
+ export const formRHFWrapperMock: ComponentDemoMock = {
4
+ code: `import { useForm } from "react-hook-form"
5
+ import { Button, FormInput, FormSwitch, FormTextarea } from "tembro"
6
+
7
+ type DemoValues = {
8
+ name: string
9
9
  ownerPhone: string
10
10
  price: number | null
11
11
  notes: string
@@ -27,24 +27,22 @@ export function Example() {
27
27
  console.log(values)
28
28
  })
29
29
 
30
- return (
31
- <form onSubmit={onSubmit} className="space-y-4">
32
- <FormFieldShell label="Workspace name" required>
33
- <FormInput
34
- control={form.control}
35
- name="name"
36
- label="Workspace name"
37
- required
38
- placeholder="Write a workspace title"
39
- rules={{
40
- required: "Workspace name is required",
41
- minLength: { value: 3, message: "At least 3 characters" },
42
- }}
43
- />
44
- </FormFieldShell>
45
-
46
- <FormInput
47
- control={form.control}
30
+ return (
31
+ <form onSubmit={onSubmit} className="space-y-4">
32
+ <FormInput
33
+ control={form.control}
34
+ name="name"
35
+ label="Workspace name"
36
+ required
37
+ placeholder="Write a workspace title"
38
+ rules={{
39
+ required: "Workspace name is required",
40
+ minLength: { value: 3, message: "At least 3 characters" },
41
+ }}
42
+ />
43
+
44
+ <FormInput
45
+ control={form.control}
48
46
  name="ownerPhone"
49
47
  kind="phone"
50
48
  label="Owner phone"
@@ -75,10 +73,10 @@ export function Example() {
75
73
 
76
74
  <Button type="submit">Save</Button>
77
75
  </form>
78
- )`
79
- ,
80
- htmlCode: '<form><label for="workspace">Workspace</label><input id="workspace" value="Azamat UI" /></form>',
81
- cliCommand: "npx tembro add form-wrapper",
76
+ )`
77
+ ,
78
+ htmlCode: '<form><label for="workspace">Workspace</label><input id="workspace" value="Azamat UI" /></form>',
79
+ cliCommand: "npx tembro add form-input form-textarea form-switch",
82
80
  highlights: ["control + name contract", "Universal `kind` variants", "Error display and required markers", "Consistent wrapper shell behavior"],
83
81
  relatedBlockSlugs: ["settings-form", "crm-dashboard", "users-table"],
84
82
  scenarios: [
@@ -96,17 +94,31 @@ export function Example() {
96
94
  ],
97
95
  }
98
96
 
99
- export const formSelectMock: ComponentDemoMock = {
100
- code: `import { useForm } from "react-hook-form"
101
- import { Button, FormSelect } from "tembro"
102
-
103
- const statusOptions = [
104
- { label: "Draft", value: "draft" },
105
- { label: "Review", value: "review" },
106
- { label: "Live", value: "live" },
107
- ]
108
-
109
- export function Example() {
97
+ export const formSelectMock: ComponentDemoMock = {
98
+ code: `import { useForm } from "react-hook-form"
99
+ import { Button, FormSelect } from "tembro"
100
+
101
+ const statusOptions = [
102
+ { label: "Draft", value: "draft" },
103
+ { label: "Review", value: "review" },
104
+ { label: "Live", value: "live" },
105
+ ]
106
+
107
+ const workspaceOptions = [
108
+ { value: "workspace-alpha", label: "Workspace Alpha", description: "Core design system route" },
109
+ { value: "workspace-beta", label: "Workspace Beta", description: "CRM rollout workspace" },
110
+ ]
111
+
112
+ async function loadWorkspaces(search: string) {
113
+ const query = search.trim().toLowerCase()
114
+ return workspaceOptions.filter((option) => !query || option.label.toLowerCase().includes(query))
115
+ }
116
+
117
+ async function loadWorkspace(value: string) {
118
+ return workspaceOptions.find((option) => option.value === value) ?? null
119
+ }
120
+
121
+ export function Example() {
110
122
  const form = useForm({
111
123
  defaultValues: {
112
124
  status: "review",
@@ -152,11 +164,25 @@ export function Example() {
152
164
  ],
153
165
  }
154
166
 
155
- export const formAsyncSelectMock: ComponentDemoMock = {
156
- code: `import { useForm } from "react-hook-form"
157
- import { Button, FormAsyncSelect } from "tembro"
158
-
159
- export function Example() {
167
+ export const formAsyncSelectMock: ComponentDemoMock = {
168
+ code: `import { useForm } from "react-hook-form"
169
+ import { Button, FormAsyncSelect } from "tembro"
170
+
171
+ const workspaceOptions = [
172
+ { value: "workspace-alpha", label: "Workspace Alpha", description: "Core design system route" },
173
+ { value: "workspace-beta", label: "Workspace Beta", description: "CRM rollout workspace" },
174
+ ]
175
+
176
+ async function loadWorkspaces(search: string) {
177
+ const query = search.trim().toLowerCase()
178
+ return workspaceOptions.filter((option) => !query || option.label.toLowerCase().includes(query))
179
+ }
180
+
181
+ async function loadWorkspace(value: string) {
182
+ return workspaceOptions.find((option) => option.value === value) ?? null
183
+ }
184
+
185
+ export function Example() {
160
186
  const form = useForm({
161
187
  defaultValues: {
162
188
  ownerId: "workspace-alpha",
@@ -1,7 +1,16 @@
1
1
  import * as React from "react"
2
2
  import { useForm, useWatch } from "react-hook-form"
3
3
 
4
- import { Badge, Button, FormAsyncSelect, FormFieldShell, FormInput, FormSelect, FormSwitch, FormTextarea } from "@/index"
4
+ import {
5
+ Badge,
6
+ Button,
7
+ FormInput,
8
+ FormSelect,
9
+ FormSwitch,
10
+ FormTextarea,
11
+ } from "@/index"
12
+ import { FormDatePicker } from "@/components/form/form-date-picker"
13
+ import { FormDateRangePicker } from "@/components/form/form-date-range-picker"
5
14
 
6
15
  import type { ComponentDemoProps } from "../types"
7
16
 
@@ -11,6 +20,15 @@ type DemoValues = {
11
20
  budget: number | null
12
21
  notes: string
13
22
  active: boolean
23
+ query: string
24
+ password: string
25
+ dueDate: string
26
+ period: {
27
+ from: string
28
+ to: string
29
+ }
30
+ periodFrom: string
31
+ periodTo: string
14
32
  status: string
15
33
  ownerId: string
16
34
  }
@@ -55,6 +73,15 @@ export function FormWrapperShowcase({ mode }: ComponentDemoProps) {
55
73
  budget: 120,
56
74
  notes: "RHF wrapper coverage for control, name, and validation.",
57
75
  active: true,
76
+ query: "billing",
77
+ password: "",
78
+ dueDate: "2026-07-18",
79
+ period: {
80
+ from: "2026-07-01",
81
+ to: "2026-07-14",
82
+ },
83
+ periodFrom: "2026-07-01",
84
+ periodTo: "2026-07-14",
58
85
  status: "review",
59
86
  ownerId: "workspace-alpha",
60
87
  },
@@ -63,7 +90,7 @@ export function FormWrapperShowcase({ mode }: ComponentDemoProps) {
63
90
  const activeValue = useWatch({ control: form.control, name: "active" })
64
91
  const slug = pathname.split("/").filter(Boolean).at(-1)
65
92
 
66
- if (slug === "form-select") {
93
+ if (slug === "form-select" || slug === "form-async-select") {
67
94
  return (
68
95
  <div className="grid gap-4 xl:grid-cols-2">
69
96
  <FormSelect control={form.control} name="status" label="Release status" options={[...statusOptions]} />
@@ -80,15 +107,101 @@ export function FormWrapperShowcase({ mode }: ComponentDemoProps) {
80
107
  )
81
108
  }
82
109
 
83
- if (slug === "form-async-select") {
110
+ if (slug === "form-search-input") {
111
+ return (
112
+ <FormInput
113
+ control={form.control}
114
+ name="query"
115
+ kind="search"
116
+ label="Search query"
117
+ description="Search wrapper should keep label, hint and result-ready spacing together."
118
+ placeholder="Search workspaces"
119
+ />
120
+ )
121
+ }
122
+
123
+ if (slug === "form-password-input") {
84
124
  return (
85
- <FormAsyncSelect
125
+ <FormInput
86
126
  control={form.control}
87
- name="ownerId"
88
- label="Linked workspace"
89
- defaultOptions={workspaceOptions.map((option) => ({ ...option }))}
90
- loadOptions={loadWorkspaceOptions}
91
- loadSelectedOption={loadSelectedWorkspace}
127
+ name="password"
128
+ kind="password"
129
+ label="Workspace password"
130
+ description="Password wrapper keeps toggle behavior inside the same form shell."
131
+ placeholder="Enter secure password"
132
+ />
133
+ )
134
+ }
135
+
136
+ if (slug === "form-number-input") {
137
+ return (
138
+ <FormInput
139
+ control={form.control}
140
+ name="budget"
141
+ kind="number"
142
+ label="Budget"
143
+ description="Numeric wrapper keeps parsed value handling inside the field contract."
144
+ min={0}
145
+ max={999999}
146
+ />
147
+ )
148
+ }
149
+
150
+ if (slug === "form-phone-input") {
151
+ return (
152
+ <FormInput
153
+ control={form.control}
154
+ name="ownerPhone"
155
+ kind="phone"
156
+ label="Owner phone"
157
+ description="Phone wrapper preserves stable raw value while showing a formatted UI."
158
+ />
159
+ )
160
+ }
161
+
162
+ if (slug === "form-date-input") {
163
+ return (
164
+ <FormInput
165
+ control={form.control}
166
+ name="dueDate"
167
+ kind="date"
168
+ label="Due date"
169
+ description="Use the lightweight date input wrapper when string date entry is enough."
170
+ />
171
+ )
172
+ }
173
+
174
+ if (slug === "form-date-range-input") {
175
+ return (
176
+ <FormInput
177
+ control={form.control}
178
+ name="period"
179
+ kind="date-range"
180
+ label="Reporting period"
181
+ description="Range input wrapper keeps from/to fields under one shell."
182
+ />
183
+ )
184
+ }
185
+
186
+ if (slug === "form-date-picker") {
187
+ return (
188
+ <FormDatePicker
189
+ control={form.control}
190
+ name="dueDate"
191
+ label="Launch date"
192
+ description="Use the picker wrapper when calendar selection matters more than raw typing."
193
+ />
194
+ )
195
+ }
196
+
197
+ if (slug === "form-date-range-picker") {
198
+ return (
199
+ <FormDateRangePicker
200
+ control={form.control}
201
+ fromName="periodFrom"
202
+ toName="periodTo"
203
+ label="Launch window"
204
+ description="Popover range picker keeps both fields synchronized inside one wrapper."
92
205
  />
93
206
  )
94
207
  }
@@ -96,9 +209,13 @@ export function FormWrapperShowcase({ mode }: ComponentDemoProps) {
96
209
  return (
97
210
  <form className="space-y-5">
98
211
  <div className="grid gap-4 xl:grid-cols-2">
99
- <FormFieldShell label="Workspace setup" description="Shared shell for required marker, error flow and spacing." required>
100
- <FormInput control={form.control} name="name" label="Workspace name" required />
101
- </FormFieldShell>
212
+ <FormInput
213
+ control={form.control}
214
+ name="name"
215
+ label="Workspace name"
216
+ description="Shared shell keeps required marker, helper text and error spacing aligned."
217
+ required
218
+ />
102
219
 
103
220
  <FormInput control={form.control} name="ownerPhone" kind="phone" label="Owner phone" />
104
221
  <FormInput control={form.control} name="budget" kind="number" label="Budget" min={0} max={999999} />
@@ -1,5 +1,3 @@
1
- import * as React from "react"
2
-
3
1
  import type { ComponentDemoBundle } from "./types"
4
2
 
5
3
  import { alertMock, AlertShowcase } from "./alert"
@@ -9,10 +7,11 @@ import { activityFeedMock, ActivityFeedShowcase } from "./activity-feed"
9
7
  import { ActionMenuShowcase, actionMenuMock } from "./action-menu"
10
8
  import { appShellMock, AppShellShowcase } from "./app-shell"
11
9
  import { appSidebarMock, AppSidebarShowcase } from "./app-sidebar"
12
- import { asyncMultiSelectMock, AsyncMultiSelectShowcase } from "./async-multi-select"
13
10
  import { asyncSelectMock, AsyncSelectShowcase } from "./async-select"
11
+ import { asyncMultiSelectMock, AsyncMultiSelectShowcase } from "./async-multi-select"
14
12
  import { avatarMock, AvatarShowcase } from "./avatar"
15
13
  import { carouselMock, CarouselShowcase } from "./carousel"
14
+ import { clearableInputMock, ClearableInputShowcase } from "./clearable-input"
16
15
  import { jsonInputMock, JsonInputShowcase } from "./json-input"
17
16
  import { qrCodeMock, QRCodeShowcase } from "./qr-code"
18
17
  import { menubarMock, MenubarShowcase } from "./menubar"
@@ -28,25 +27,15 @@ import { cardMock, CardShowcase } from "./card"
28
27
  import { checkboxMock, CheckboxShowcase } from "./checkbox"
29
28
  import { codeBlockMock, CodeBlockShowcase } from "./code-block"
30
29
  import { dualListPickerMock, DualListPickerShowcase } from "./dual-list-picker"
31
- import { ClearableInputShowcase, clearableInputMock } from "./clearable-input"
32
30
  import { collapseMock, CollapseShowcase } from "./collapse"
33
31
  import { comboboxMock, ComboboxShowcase } from "./combobox"
34
32
  import { commandBarMock, CommandBarShowcase } from "./command-bar"
35
- import { ConfirmDialogShowcase, confirmDialogMock } from "./confirm-dialog"
36
33
  import { commandPaletteMock, CommandPaletteShowcase } from "./command-palette"
34
+ import { ConfirmDialogShowcase, confirmDialogMock } from "./confirm-dialog"
37
35
  import { copyButtonMock, CopyButtonShowcase } from "./copy-button"
38
36
  import { copyFieldMock, CopyFieldShowcase } from "./copy-field"
39
37
  import { dataStateMock, DataStateShowcase } from "./data-state"
40
38
  import { dataTableMock, DataTableShowcase } from "./data-table"
41
- import {
42
- DataTablePartShowcase,
43
- dataTableActionsColumnMock,
44
- dataTablePaginationMock,
45
- dataTableRowActionsMock,
46
- dataTableSavedFiltersMock,
47
- dataTableSelectColumnMock,
48
- dataTableToolbarMock,
49
- } from "./data-table-parts"
50
39
  import { dateInputMock, DateInputShowcase } from "./date-input"
51
40
  import { DatePickerShowcase, datePickerMock } from "./date-picker"
52
41
  import { DateRangeInputShowcase, dateRangeInputMock } from "./date-range-input"
@@ -56,8 +45,6 @@ import { descriptionsMock, DescriptionsShowcase } from "./descriptions"
56
45
  import { dialogMock, DialogShowcase } from "./dialog"
57
46
  import { dropdownMenuMock, DropdownMenuShowcase } from "./dropdown-menu"
58
47
  import { DrawerShowcase, drawerMock } from "./drawer"
59
- import { emptyStateMock, EmptyStateShowcase } from "./empty-state"
60
- import { FormBuilderShowcase, formBuilderMock } from "./form-builder"
61
48
  import { FormWrapperShowcase, formAsyncSelectMock, formRHFWrapperMock, formSelectMock } from "./form-wrapper"
62
49
  import { hoverCardMock, HoverCardShowcase } from "./hover-card"
63
50
  import { kanbanBoardMock, KanbanBoardShowcase } from "./kanban-board"
@@ -190,12 +177,10 @@ export const premiumShowcaseDemoRegistry: Record<string, ComponentDemoBundle> =
190
177
  "hover-card": { mock: hoverCardMock, Showcase: HoverCardShowcase },
191
178
  "right-click-menu": { mock: rightClickMenuMock, Showcase: RightClickMenuShowcase },
192
179
  "data-table": { mock: dataTableMock, Showcase: DataTableShowcase },
193
- "data-table-pagination": { mock: dataTablePaginationMock, Showcase: (props) => React.createElement(DataTablePartShowcase, { ...props, slug: "data-table-pagination" }) },
194
- "data-table-toolbar": { mock: dataTableToolbarMock, Showcase: (props) => React.createElement(DataTablePartShowcase, { ...props, slug: "data-table-toolbar" }) },
195
- "data-table-row-actions": { mock: dataTableRowActionsMock, Showcase: (props) => React.createElement(DataTablePartShowcase, { ...props, slug: "data-table-row-actions" }) },
196
- "data-table-actions-column": { mock: dataTableActionsColumnMock, Showcase: (props) => React.createElement(DataTablePartShowcase, { ...props, slug: "data-table-actions-column" }) },
197
- "data-table-select-column": { mock: dataTableSelectColumnMock, Showcase: (props) => React.createElement(DataTablePartShowcase, { ...props, slug: "data-table-select-column" }) },
198
- "data-table-saved-filters": { mock: dataTableSavedFiltersMock, Showcase: (props) => React.createElement(DataTablePartShowcase, { ...props, slug: "data-table-saved-filters" }) },
180
+ "data-table-column-visibility-menu": { mock: dataTableMock, Showcase: DataTableShowcase },
181
+ "data-table-sortable-header": { mock: dataTableMock, Showcase: DataTableShowcase },
182
+ "data-table-bulk-actions": { mock: dataTableMock, Showcase: DataTableShowcase },
183
+ "data-table-view-presets": { mock: dataTableMock, Showcase: DataTableShowcase },
199
184
  "saved-filter-select": { mock: savedFilterSelectMock, Showcase: SavedFilterSelectShowcase },
200
185
  "form-field": { mock: formRHFWrapperMock, Showcase: FormWrapperShowcase },
201
186
  "form-field-shell": { mock: formRHFWrapperMock, Showcase: FormWrapperShowcase },
@@ -212,7 +197,6 @@ export const premiumShowcaseDemoRegistry: Record<string, ComponentDemoBundle> =
212
197
  "form-date-range-input": { mock: formRHFWrapperMock, Showcase: FormWrapperShowcase },
213
198
  "form-date-picker": { mock: formRHFWrapperMock, Showcase: FormWrapperShowcase },
214
199
  "form-date-range-picker": { mock: formRHFWrapperMock, Showcase: FormWrapperShowcase },
215
- "form-builder": { mock: formBuilderMock, Showcase: FormBuilderShowcase },
216
200
  "segmented-control": { mock: segmentedControlMock, Showcase: SegmentedControlShowcase },
217
201
  skeleton: { mock: skeletonMock, Showcase: SkeletonShowcase },
218
202
  spinner: { mock: spinnerMock, Showcase: SpinnerShowcase },
@@ -233,7 +217,6 @@ export const premiumShowcaseDemoRegistry: Record<string, ComponentDemoBundle> =
233
217
  list: { mock: listMock, Showcase: ListShowcase },
234
218
  "property-grid": { mock: propertyGridMock, Showcase: PropertyGridShowcase },
235
219
  "activity-feed": { mock: activityFeedMock, Showcase: ActivityFeedShowcase },
236
- "empty-state": { mock: emptyStateMock, Showcase: EmptyStateShowcase },
237
220
  "loading-state": { mock: loadingStateMock, Showcase: LoadingStateShowcase },
238
221
  "data-state": { mock: dataStateMock, Showcase: DataStateShowcase },
239
222
  progress: { mock: progressMock, Showcase: ProgressShowcase },
@@ -1,7 +1,7 @@
1
1
  import type { ComponentDemoMock } from "../types"
2
2
 
3
- export const inputMock: ComponentDemoMock = {
4
- code: `import { Label, Input } from "tembro"\n\nexport function Example() {\n return (\n <form className="space-y-4">\n <div>\n <Label htmlFor="support-email">Support email</Label>\n <Input id="support-email" type="email" defaultValue="team@acme.io" required />\n </div>\n\n <div>\n <Label htmlFor="component-search">Search components</Label>\n <Input\n id="component-search"\n value={query}\n onValueChange={setQuery}\n placeholder="Search by slug or title"\n clearable\n trailingAction={<span className="text-xs text-muted-foreground">12 results</span>}\n replaceTrailingWhenClear={false}\n />\n </div>\n\n <div>\n <Label htmlFor="api-prefix">Cost estimate</Label>\n <Input\n id="api-prefix"\n defaultValue="120"\n readOnly\n trailing={<span className="text-sm aui-text-muted">USD</span>}\n />\n </div>\n\n <div>\n <Label htmlFor="disabled-input">Locked status</Label>\n <Input id="disabled-input" disabled value="Locked while syncing" />\n </div>\n </form>\n )\n}\n`,
3
+ export const inputMock: ComponentDemoMock = {
4
+ code: `import { useState } from "react"\nimport { Label, Input } from "tembro"\n\nexport function Example() {\n const [query, setQuery] = useState("buttons")\n\n return (\n <form className="space-y-4">\n <div>\n <Label htmlFor="support-email">Support email</Label>\n <Input id="support-email" type="email" defaultValue="team@acme.io" required />\n </div>\n\n <div>\n <Label htmlFor="component-search">Search components</Label>\n <Input\n id="component-search"\n value={query}\n onValueChange={setQuery}\n placeholder="Search by slug or title"\n clearable\n trailingAction={<span className="text-xs text-muted-foreground">12 results</span>}\n replaceTrailingWhenClear={false}\n />\n </div>\n\n <div>\n <Label htmlFor="api-prefix">Cost estimate</Label>\n <Input\n id="api-prefix"\n defaultValue="120"\n readOnly\n trailing={<span className="text-sm aui-text-muted">USD</span>}\n />\n </div>\n\n <div>\n <Label htmlFor="disabled-input">Locked status</Label>\n <Input id="disabled-input" disabled value="Locked while syncing" />\n </div>\n </form>\n )\n}\n`,
5
5
  htmlCode: `<label for="example">Search components</label>\n<input id="example" data-slot="input" type="text" placeholder="Search components..." />`,
6
6
  cliCommand: "npx tembro add input",
7
7
  highlights: [
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const maskedInputMock: ComponentDemoMock = {
4
4
  code: `import { useState } from "react"
5
- import { MaskedInput } from "@/index"
5
+ import { MaskedInput } from "tembro"
6
6
 
7
7
  export function Example() {
8
8
  const [value, setValue] = useState("AA-123")
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const moneyInputMock: ComponentDemoMock = {
4
4
  code: `import { useState } from "react"
5
- import { MoneyInput } from "@/index"
5
+ import { MoneyInput } from "tembro"
6
6
 
7
7
  export function Example() {
8
8
  const [value, setValue] = useState<number | null>(2990.5)
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
2
2
 
3
3
  export const numberInputMock: ComponentDemoMock = {
4
4
  code: `import { useState } from "react"
5
- import { NumberInput, parseNumberInput } from "@/index"
5
+ import { NumberInput, parseNumberInput } from "tembro"
6
6
 
7
7
  export function Example() {
8
8
  const [value, setValue] = useState<number | null>(14)