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,443 +0,0 @@
1
- import * as React from "react"
2
- import type { Control, FieldPath, FieldValues } from "react-hook-form"
3
-
4
- import { Button } from "@/components/ui/button"
5
- import { FormInput, type FormInputProps } from "@/components/form/form-input"
6
- import { FormTextarea, type FormTextareaProps } from "@/components/form/form-textarea"
7
- import { FormSelect, type FormSelectProps } from "@/components/form/form-select"
8
- import { FormAsyncSelect, type FormAsyncSelectProps } from "@/components/form/form-async-select"
9
- import { FormSwitch, type FormSwitchProps } from "@/components/form/form-switch"
10
- import { FormNumberInput, type FormNumberInputProps } from "@/components/form/form-number-input"
11
- import { FormPhoneInput, type FormPhoneInputProps } from "@/components/form/form-phone-input"
12
- import { FormDateInput, type FormDateInputProps } from "@/components/form/form-date-input"
13
- import {
14
- FormDateRangeInput,
15
- type FormDateRangeInputProps,
16
- } from "@/components/form/form-date-range-input"
17
- import { cn } from "@/lib/utils"
18
-
19
- export type FormBuilderLayout = "grid" | "stack"
20
- export type FormBuilderDensity = "compact" | "default" | "comfortable"
21
-
22
- export type FormBuilderFieldRenderContext<TFieldValues extends FieldValues> = {
23
- control: Control<TFieldValues>
24
- disabled?: boolean
25
- readOnly?: boolean
26
- }
27
-
28
- type BaseFormBuilderField = {
29
- id: string
30
- hidden?: boolean
31
- className?: string
32
- colSpan?: 1 | 2 | 3 | 4 | "full"
33
- }
34
-
35
- export type FormBuilderCustomField<TFieldValues extends FieldValues> = BaseFormBuilderField & {
36
- type: "custom"
37
- render: (context: FormBuilderFieldRenderContext<TFieldValues>) => React.ReactNode
38
- }
39
-
40
- export type FormBuilderInputField<
41
- TFieldValues extends FieldValues,
42
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
43
- > = BaseFormBuilderField & {
44
- type: "input"
45
- props: Omit<FormInputProps<TFieldValues, TName>, "control">
46
- }
47
-
48
- export type FormBuilderTextareaField<
49
- TFieldValues extends FieldValues,
50
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
51
- > = BaseFormBuilderField & {
52
- type: "textarea"
53
- props: Omit<FormTextareaProps<TFieldValues, TName>, "control">
54
- }
55
-
56
- export type FormBuilderSelectField<
57
- TFieldValues extends FieldValues,
58
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
59
- > = BaseFormBuilderField & {
60
- type: "select"
61
- props: Omit<FormSelectProps<TFieldValues, TName>, "control">
62
- }
63
-
64
- export type FormBuilderAsyncSelectField<
65
- TFieldValues extends FieldValues,
66
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
67
- > = BaseFormBuilderField & {
68
- type: "async-select"
69
- props: Omit<FormAsyncSelectProps<TFieldValues, TName>, "control">
70
- }
71
-
72
- export type FormBuilderSwitchField<
73
- TFieldValues extends FieldValues,
74
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
75
- > = BaseFormBuilderField & {
76
- type: "switch"
77
- props: Omit<FormSwitchProps<TFieldValues, TName>, "control">
78
- }
79
-
80
- export type FormBuilderNumberField<
81
- TFieldValues extends FieldValues,
82
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
83
- > = BaseFormBuilderField & {
84
- type: "number"
85
- props: Omit<FormNumberInputProps<TFieldValues, TName>, "control">
86
- }
87
-
88
- export type FormBuilderPhoneField<
89
- TFieldValues extends FieldValues,
90
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
91
- > = BaseFormBuilderField & {
92
- type: "phone"
93
- props: Omit<FormPhoneInputProps<TFieldValues, TName>, "control">
94
- }
95
-
96
- export type FormBuilderDateField<
97
- TFieldValues extends FieldValues,
98
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
99
- > = BaseFormBuilderField & {
100
- type: "date"
101
- props: Omit<FormDateInputProps<TFieldValues, TName>, "control">
102
- }
103
-
104
- export type FormBuilderDateRangeField<
105
- TFieldValues extends FieldValues,
106
- TFromName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
107
- TToName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
108
- > = BaseFormBuilderField & {
109
- type: "date-range"
110
- props: Omit<FormDateRangeInputProps<TFieldValues, TFromName, TToName>, "control">
111
- }
112
-
113
- export type FormBuilderField<TFieldValues extends FieldValues> =
114
- | FormBuilderCustomField<TFieldValues>
115
- | FormBuilderInputField<TFieldValues>
116
- | FormBuilderTextareaField<TFieldValues>
117
- | FormBuilderSelectField<TFieldValues>
118
- | FormBuilderAsyncSelectField<TFieldValues>
119
- | FormBuilderSwitchField<TFieldValues>
120
- | FormBuilderNumberField<TFieldValues>
121
- | FormBuilderPhoneField<TFieldValues>
122
- | FormBuilderDateField<TFieldValues>
123
- | FormBuilderDateRangeField<TFieldValues>
124
-
125
- export type FormBuilderSection<TFieldValues extends FieldValues> = {
126
- id: string
127
- title?: React.ReactNode
128
- description?: React.ReactNode
129
- actions?: React.ReactNode
130
- hidden?: boolean
131
- className?: string
132
- fields: FormBuilderField<TFieldValues>[]
133
- }
134
-
135
- export type FormBuilderProps<TFieldValues extends FieldValues> = Omit<
136
- React.ComponentProps<"form">,
137
- "children"
138
- > & {
139
- control: Control<TFieldValues>
140
- fields?: FormBuilderField<TFieldValues>[]
141
- sections?: FormBuilderSection<TFieldValues>[]
142
- layout?: FormBuilderLayout
143
- density?: FormBuilderDensity
144
- columns?: 1 | 2 | 3 | 4
145
- disabled?: boolean
146
- readOnly?: boolean
147
- footer?: React.ReactNode
148
- submitLabel?: React.ReactNode
149
- resetLabel?: React.ReactNode
150
- onResetClick?: () => void
151
- isSubmitting?: boolean
152
- sectionClassName?: string
153
- fieldClassName?: string
154
- footerClassName?: string
155
- }
156
-
157
- const densityClassName: Record<FormBuilderDensity, string> = {
158
- compact: "gap-3",
159
- default: "gap-4",
160
- comfortable: "gap-6",
161
- }
162
-
163
- const columnsClassName: Record<1 | 2 | 3 | 4, string> = {
164
- 1: "grid-cols-1",
165
- 2: "grid-cols-1 md:grid-cols-2",
166
- 3: "grid-cols-1 md:grid-cols-2 xl:grid-cols-3",
167
- 4: "grid-cols-1 md:grid-cols-2 xl:grid-cols-4",
168
- }
169
-
170
- const colSpanClassName: Record<NonNullable<BaseFormBuilderField["colSpan"]>, string> = {
171
- 1: "col-span-1",
172
- 2: "md:col-span-2",
173
- 3: "xl:col-span-3",
174
- 4: "xl:col-span-4",
175
- full: "col-span-full",
176
- }
177
-
178
- type FieldPresetOptions<TProps> = BaseFormBuilderField & {
179
- props: TProps
180
- }
181
-
182
- function splitFieldOptions<TProps>(options: FieldPresetOptions<TProps>) {
183
- const { id, hidden, className, colSpan, props } = options
184
- return { base: { id, hidden, className, colSpan }, props }
185
- }
186
-
187
- function inputField<
188
- TFieldValues extends FieldValues,
189
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
190
- >(options: FieldPresetOptions<FormBuilderInputField<TFieldValues, TName>["props"]>): FormBuilderInputField<TFieldValues, TName> {
191
- const { base, props } = splitFieldOptions(options)
192
- return { ...base, type: "input", props }
193
- }
194
-
195
- function textareaField<
196
- TFieldValues extends FieldValues,
197
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
198
- >(options: FieldPresetOptions<FormBuilderTextareaField<TFieldValues, TName>["props"]>): FormBuilderTextareaField<TFieldValues, TName> {
199
- const { base, props } = splitFieldOptions(options)
200
- return { ...base, type: "textarea", props }
201
- }
202
-
203
- function selectField<
204
- TFieldValues extends FieldValues,
205
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
206
- >(options: FieldPresetOptions<FormBuilderSelectField<TFieldValues, TName>["props"]>): FormBuilderSelectField<TFieldValues, TName> {
207
- const { base, props } = splitFieldOptions(options)
208
- return { ...base, type: "select", props }
209
- }
210
-
211
- function asyncSelectField<
212
- TFieldValues extends FieldValues,
213
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
214
- >(options: FieldPresetOptions<FormBuilderAsyncSelectField<TFieldValues, TName>["props"]>): FormBuilderAsyncSelectField<TFieldValues, TName> {
215
- const { base, props } = splitFieldOptions(options)
216
- return { ...base, type: "async-select", props }
217
- }
218
-
219
- function switchField<
220
- TFieldValues extends FieldValues,
221
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
222
- >(options: FieldPresetOptions<FormBuilderSwitchField<TFieldValues, TName>["props"]>): FormBuilderSwitchField<TFieldValues, TName> {
223
- const { base, props } = splitFieldOptions(options)
224
- return { ...base, type: "switch", props }
225
- }
226
-
227
- function numberField<
228
- TFieldValues extends FieldValues,
229
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
230
- >(options: FieldPresetOptions<FormBuilderNumberField<TFieldValues, TName>["props"]>): FormBuilderNumberField<TFieldValues, TName> {
231
- const { base, props } = splitFieldOptions(options)
232
- return { ...base, type: "number", props }
233
- }
234
-
235
- function phoneField<
236
- TFieldValues extends FieldValues,
237
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
238
- >(options: FieldPresetOptions<FormBuilderPhoneField<TFieldValues, TName>["props"]>): FormBuilderPhoneField<TFieldValues, TName> {
239
- const { base, props } = splitFieldOptions(options)
240
- return { ...base, type: "phone", props }
241
- }
242
-
243
- function dateField<
244
- TFieldValues extends FieldValues,
245
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
246
- >(options: FieldPresetOptions<FormBuilderDateField<TFieldValues, TName>["props"]>): FormBuilderDateField<TFieldValues, TName> {
247
- const { base, props } = splitFieldOptions(options)
248
- return { ...base, type: "date", props }
249
- }
250
-
251
- function dateRangeField<
252
- TFieldValues extends FieldValues,
253
- TFromName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
254
- TToName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
255
- >(options: FieldPresetOptions<FormBuilderDateRangeField<TFieldValues, TFromName, TToName>["props"]>): FormBuilderDateRangeField<TFieldValues, TFromName, TToName> {
256
- const { base, props } = splitFieldOptions(options)
257
- return { ...base, type: "date-range", props }
258
- }
259
-
260
- function customField<TFieldValues extends FieldValues>(
261
- options: BaseFormBuilderField & Pick<FormBuilderCustomField<TFieldValues>, "render">
262
- ): FormBuilderCustomField<TFieldValues> {
263
- const { id, hidden, className, colSpan, render } = options
264
- return { id, hidden, className, colSpan, type: "custom", render }
265
- }
266
-
267
- function formSection<TFieldValues extends FieldValues>(
268
- section: FormBuilderSection<TFieldValues>
269
- ): FormBuilderSection<TFieldValues> {
270
- return section
271
- }
272
-
273
- function renderFormBuilderField<TFieldValues extends FieldValues>(
274
- field: FormBuilderField<TFieldValues>,
275
- context: FormBuilderFieldRenderContext<TFieldValues>
276
- ) {
277
- const FormInputComponent = FormInput as unknown as React.ComponentType<Record<string, unknown>>
278
- const FormSelectComponent = FormSelect as unknown as React.ComponentType<Record<string, unknown>>
279
-
280
- switch (field.type) {
281
- case "custom":
282
- return field.render(context)
283
- case "input":
284
- return React.createElement(FormInputComponent, {
285
- control: context.control,
286
- disabled: context.disabled,
287
- readOnly: context.readOnly,
288
- ...(field.props as Omit<FormInputProps<TFieldValues, FieldPath<TFieldValues>>, "control">),
289
- })
290
- case "textarea":
291
- return <FormTextarea control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
292
- case "select":
293
- return React.createElement(FormSelectComponent, {
294
- control: context.control,
295
- disabled: context.disabled,
296
- ...(field.props as Omit<FormSelectProps<TFieldValues, FieldPath<TFieldValues>>, "control">),
297
- })
298
- case "async-select":
299
- return <FormAsyncSelect control={context.control} disabled={context.disabled} {...field.props} />
300
- case "switch":
301
- return <FormSwitch control={context.control} disabled={context.disabled} {...field.props} />
302
- case "number":
303
- return <FormNumberInput control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
304
- case "phone":
305
- return <FormPhoneInput control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
306
- case "date":
307
- return <FormDateInput control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
308
- case "date-range":
309
- return (
310
- <FormDateRangeInput
311
- control={context.control}
312
- fromInputProps={{ disabled: context.disabled, readOnly: context.readOnly }}
313
- toInputProps={{ disabled: context.disabled, readOnly: context.readOnly }}
314
- {...field.props}
315
- />
316
- )
317
- default:
318
- return null
319
- }
320
- }
321
-
322
- function normalizeSections<TFieldValues extends FieldValues>({
323
- fields,
324
- sections,
325
- }: Pick<FormBuilderProps<TFieldValues>, "fields" | "sections">): FormBuilderSection<TFieldValues>[] {
326
- if (sections?.length) return sections
327
- return [{ id: "default", fields: fields ?? [] }]
328
- }
329
-
330
- function FormBuilder<TFieldValues extends FieldValues>({
331
- className,
332
- control,
333
- fields,
334
- sections,
335
- layout = "grid",
336
- density = "default",
337
- columns = 2,
338
- disabled,
339
- readOnly,
340
- footer,
341
- submitLabel,
342
- resetLabel,
343
- onResetClick,
344
- isSubmitting,
345
- sectionClassName,
346
- fieldClassName,
347
- footerClassName,
348
- ...props
349
- }: FormBuilderProps<TFieldValues>) {
350
- const normalizedSections = normalizeSections({ fields, sections })
351
- const context = React.useMemo(
352
- () => ({ control, disabled, readOnly }),
353
- [control, disabled, readOnly]
354
- )
355
-
356
- return (
357
- <form data-slot="form-builder" className={cn("grid", densityClassName[density], className)} {...props}>
358
- {normalizedSections
359
- .filter((section) => !section.hidden)
360
- .map((section) => (
361
- <section
362
- key={section.id}
363
- data-slot="form-builder-section"
364
- className={cn("grid gap-4", section.className, sectionClassName)}
365
- >
366
- {(section.title || section.description || section.actions) && (
367
- <div
368
- data-slot="form-builder-section-header"
369
- className="flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between"
370
- >
371
- <div className="min-w-0 space-y-1">
372
- {section.title && <h2 className="text-base font-semibold leading-none tracking-tight">{section.title}</h2>}
373
- {section.description && <p className="text-sm text-muted-foreground">{section.description}</p>}
374
- </div>
375
- {section.actions && <div className="flex shrink-0 flex-wrap items-center gap-2">{section.actions}</div>}
376
- </div>
377
- )}
378
-
379
- <div
380
- data-slot="form-builder-fields"
381
- data-layout={layout}
382
- className={cn(
383
- "grid",
384
- densityClassName[density],
385
- layout === "grid" ? columnsClassName[columns] : "grid-cols-1"
386
- )}
387
- >
388
- {section.fields
389
- .filter((field) => !field.hidden)
390
- .map((field) => (
391
- <div
392
- key={field.id}
393
- data-slot="form-builder-field"
394
- className={cn(
395
- field.colSpan && colSpanClassName[field.colSpan],
396
- field.className,
397
- fieldClassName
398
- )}
399
- >
400
- {renderFormBuilderField(field, context)}
401
- </div>
402
- ))}
403
- </div>
404
- </section>
405
- ))}
406
-
407
- {(footer || submitLabel || resetLabel) && (
408
- <div data-slot="form-builder-footer" className={cn("flex flex-wrap items-center justify-end gap-2", footerClassName)}>
409
- {footer ?? (
410
- <>
411
- {resetLabel && (
412
- <Button type="button" variant="outline" disabled={disabled || isSubmitting} onClick={onResetClick}>
413
- {resetLabel}
414
- </Button>
415
- )}
416
- {submitLabel && (
417
- <Button type="submit" disabled={disabled || isSubmitting}>
418
- {submitLabel}
419
- </Button>
420
- )}
421
- </>
422
- )}
423
- </div>
424
- )}
425
- </form>
426
- )
427
- }
428
-
429
- export {
430
- FormBuilder,
431
- asyncSelectField,
432
- customField,
433
- dateField,
434
- dateRangeField,
435
- formSection,
436
- inputField,
437
- numberField,
438
- phoneField,
439
- renderFormBuilderField,
440
- selectField,
441
- switchField,
442
- textareaField,
443
- }
@@ -1,2 +0,0 @@
1
- export { EmptyStateShowcase } from "./showcase"
2
- export { emptyStateMock } from "./mock"
@@ -1,30 +0,0 @@
1
- import type { ComponentDemoMock } from "../types"
2
-
3
- export const emptyStateMock: ComponentDemoMock = {
4
- code: `import { EmptyState } from "tembro"
5
-
6
- export function Example() {
7
- return (
8
- <EmptyState
9
- title="No results yet"
10
- description="Create your first item to unlock actions and charts."
11
- actionLabel="Create item"
12
- onAction={() => {
13
- console.log("Create action triggered")
14
- }}
15
- />
16
- )
17
- }`,
18
- highlights: ["No-content user messaging", "Built-in action callback", "Lightweight onboarding placeholder", "Reusable for any resource list"],
19
- scenarios: [
20
- { title: "First launch", description: "Guide users to create first entity in a clean state." },
21
- { title: "Filtered empty", description: "Tell users what changed filters removed all items." },
22
- { title: "Error fallback", description: "Use with loading and retry controls when data fetch fails." },
23
- ],
24
- capabilityNotes: [
25
- "Always provide a clear next action to recover from empty state.",
26
- "Keep titles short and outcome oriented.",
27
- "Prefer one primary action + short explanation for fastest user decision.",
28
- ],
29
- }
30
-
@@ -1,65 +0,0 @@
1
- import * as React from "react"
2
-
3
- import { Badge, Button, EmptyState } from "@/index"
4
-
5
- import type { ComponentDemoProps } from "../types"
6
-
7
- const panelClass =
8
- "rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5"
9
-
10
- export function EmptyStateShowcase({ mode }: ComponentDemoProps) {
11
- const [actionCount, setActionCount] = React.useState(0)
12
- const [showEmptyFeedback, setShowEmptyFeedback] = React.useState(true)
13
-
14
- return (
15
- <div className="space-y-5">
16
- <section className="rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6">
17
- <div className="flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between">
18
- <div className="max-w-xl">
19
- <p className="text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted">No-content state</p>
20
- <h3 className="mt-3 text-2xl font-semibold tracking-tight aui-text-strong">Empty state should unblock the next step</h3>
21
- <p className="mt-3 max-w-lg text-sm leading-6 aui-text-muted">
22
- The preview should show a clear title, short explanation, and one meaningful next action. Empty state is not decorative whitespace.
23
- </p>
24
- </div>
25
- <div className="flex flex-wrap gap-2">
26
- <Badge variant="outline" className="rounded-full">No data</Badge>
27
- <Badge variant="outline" className="rounded-full">One next action</Badge>
28
- </div>
29
- </div>
30
- </section>
31
-
32
- {showEmptyFeedback ? (
33
- <EmptyState
34
- title="No results found"
35
- description="There is nothing to show yet. Create one item to continue."
36
- actionLabel="Create first item"
37
- onAction={() => setActionCount((value) => value + 1)}
38
- />
39
- ) : (
40
- <EmptyState title="Empty state intentionally hidden" description="Use a custom fallback only when needed." />
41
- )}
42
-
43
- <div className="grid gap-4 xl:grid-cols-[0.9fr_1.1fr]">
44
- <section className={panelClass}>
45
- <p className="text-sm font-medium aui-text-muted">Interaction count</p>
46
- <p className="mt-3 text-2xl font-semibold tracking-tight aui-text-strong">{actionCount}</p>
47
- <p className="mt-2 text-sm leading-6 aui-text-muted">Use the primary CTA only for the most direct recovery path.</p>
48
- </section>
49
- {mode === "playground" ? (
50
- <section className={panelClass}>
51
- <p className="text-sm font-medium aui-text-muted">Preview controls</p>
52
- <div className="mt-4 flex flex-wrap gap-2">
53
- <Button size="sm" variant={showEmptyFeedback ? "default" : "outline"} onClick={() => setShowEmptyFeedback((value) => !value)}>
54
- Toggle feedback
55
- </Button>
56
- <Button size="sm" variant="outline" onClick={() => setActionCount(0)}>
57
- Reset actions
58
- </Button>
59
- </div>
60
- </section>
61
- ) : null}
62
- </div>
63
- </div>
64
- )
65
- }
@@ -1,2 +0,0 @@
1
- export { FormBuilderShowcase } from "./showcase"
2
- export { formBuilderMock } from "./mock"
@@ -1,79 +0,0 @@
1
- import type { ComponentDemoMock } from "../types"
2
-
3
- export const formBuilderMock: ComponentDemoMock = {
4
- code: `import { useForm } from "react-hook-form"
5
- import {
6
- FormBuilder,
7
- formSection,
8
- inputField,
9
- phoneField,
10
- switchField,
11
- textareaField,
12
- } from "tembro"
13
-
14
- type DemoValues = {
15
- workspace: string
16
- ownerPhone: string
17
- notes: string
18
- isLive: boolean
19
- }
20
-
21
- const sections = [
22
- formSection<DemoValues>({
23
- id: "main",
24
- title: "Workspace settings",
25
- description: "Field schema, sections and disabled/readOnly behavior all live in FormBuilder config.",
26
- fields: [
27
- inputField<DemoValues>({ id: "workspace", props: { name: "workspace", label: "Workspace name", required: true } }),
28
- phoneField<DemoValues>({ id: "ownerPhone", props: { name: "ownerPhone", label: "Owner phone" } }),
29
- textareaField<DemoValues>({ id: "notes", colSpan: "full", props: { name: "notes", label: "Notes", rows: 3 } }),
30
- switchField<DemoValues>({
31
- id: "isLive",
32
- colSpan: "full",
33
- props: { name: "isLive", label: "Publish workspace", description: "Toggle public availability" },
34
- }),
35
- ],
36
- }),
37
- ]
38
-
39
- export function Example() {
40
- const form = useForm<DemoValues>({
41
- defaultValues: {
42
- workspace: "Azamat UI",
43
- ownerPhone: "+998 90 123 45 67",
44
- notes: "Connected form sections with submit and reset lifecycle.",
45
- isLive: true,
46
- },
47
- })
48
-
49
- return (
50
- <FormBuilder
51
- control={form.control}
52
- sections={sections}
53
- columns={1}
54
- submitLabel="Save"
55
- resetLabel="Reset"
56
- disabled={false}
57
- readOnly={false}
58
- />
59
- )
60
- }`
61
- ,
62
- htmlCode: `<form><label for="workspace">Workspace</label><input id="workspace" value="Azamat UI" /></form>`,
63
- cliCommand: "npx tembro add form-builder",
64
- highlights: ["Field schema", "Sections and presets", "submitLabel / resetLabel wiring", "Disabled/readOnly passthrough", "Reusable field helpers"],
65
- relatedBlockSlugs: ["settings-form", "crm-dashboard"],
66
- scenarios: [
67
- { title: "Field schema validation", description: "Use typed `formSection` and helper fields for deterministic layout." },
68
- { title: "Submit + reset", description: "Pass submitLabel/resetLabel and rely on RHF formState for disabled transitions." },
69
- { title: "Custom render", description: "Inject custom field-level props through helper factories." },
70
- { title: "Read-only mode", description: "Toggle readOnly for inspect-only workflows without changing schema." },
71
- ],
72
- capabilityNotes: [
73
- "`sections` gives a single source of truth for layout and required validations.",
74
- "Use `fields` for precise schema-driven field composition.",
75
- "Expose submit and reset labels directly from component props so UX can match product language.",
76
- "Combine `disabled` + `readOnly` for different page states like locked records and review modes.",
77
- ],
78
- }
79
-
@@ -1,55 +0,0 @@
1
- import * as React from "react"
2
- import { useForm } from "react-hook-form"
3
-
4
- import { Button } from "@/index"
5
- import { FormBuilder, formSection, inputField, phoneField, switchField, textareaField } from "@/components/patterns/form-builder"
6
-
7
- import type { ComponentDemoProps } from "../types"
8
-
9
- type DemoValues = {
10
- workspace: string
11
- ownerPhone: string
12
- notes: string
13
- isLive: boolean
14
- }
15
-
16
- export function FormBuilderShowcase({ mode }: ComponentDemoProps) {
17
- const form = useForm<DemoValues>({
18
- defaultValues: {
19
- workspace: "Azamat UI",
20
- ownerPhone: "+998 90 123 45 67",
21
- notes: "Connected sections and submit/reset wiring.",
22
- isLive: true,
23
- },
24
- })
25
-
26
- const sections = React.useMemo(
27
- () => [
28
- formSection<DemoValues>({
29
- id: "main",
30
- title: "Workspace settings",
31
- description: "Schema-driven form builder with explicit submit and reset controls.",
32
- fields: [
33
- inputField<DemoValues>({ id: "workspace", props: { name: "workspace", label: "Workspace", required: true } }),
34
- phoneField<DemoValues>({ id: "ownerPhone", props: { name: "ownerPhone", label: "Owner phone" } }),
35
- textareaField<DemoValues>({ id: "notes", colSpan: "full", props: { name: "notes", label: "Notes", rows: 3 } }),
36
- switchField<DemoValues>({
37
- id: "isLive",
38
- colSpan: "full",
39
- props: { name: "isLive", label: "Publish workspace", description: "Visible only when record is active." },
40
- }),
41
- ],
42
- }),
43
- ],
44
- []
45
- )
46
-
47
- return (
48
- <div className="space-y-4">
49
- <FormBuilder control={form.control} sections={sections} columns={1} submitLabel={mode === "playground" ? "Save workspace" : undefined} />
50
- <Button type="button" variant="outline" onClick={() => form.reset()}>
51
- Reset form
52
- </Button>
53
- </div>
54
- )
55
- }