tembro 1.0.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/README.md +2 -2
  2. package/dist/components/display/smart-card.d.ts +8 -8
  3. package/dist/components/patterns/index.cjs +1 -1
  4. package/dist/components/patterns/index.js +4 -4
  5. package/dist/components/patterns/public.cjs +1 -1
  6. package/dist/components/patterns/public.js +4 -4
  7. package/dist/index.cjs +1 -1
  8. package/dist/index.d.ts +0 -1
  9. package/dist/index.js +19 -38
  10. package/dist/showcase/index.cjs +1 -1
  11. package/dist/showcase/index.d.ts +0 -1
  12. package/dist/showcase/index.js +36 -38
  13. package/dist/showcase/package-meta.cjs +1 -1
  14. package/dist/showcase/package-meta.d.ts +2 -2
  15. package/dist/showcase/package-meta.js +1 -1
  16. package/dist/showcase/premium/accordion/mock.cjs +4 -4
  17. package/dist/showcase/premium/accordion/mock.js +1 -1
  18. package/dist/showcase/{families/data-table/types.d.ts → premium/data-table-parts/data.d.ts} +4 -0
  19. package/dist/showcase/{families/data-table → premium/data-table-parts}/data.js +1 -1
  20. package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
  21. package/dist/showcase/premium/data-table-parts/showcase.js +1 -1
  22. package/dist/showcase/site-data.cjs +1 -1
  23. package/dist/showcase/site-data.d.ts +6 -6
  24. package/dist/showcase/site-data.js +414 -451
  25. package/dist/showcase/tembro-registry.json.cjs +1 -1
  26. package/dist/showcase/tembro-registry.json.js +1 -1
  27. package/package.json +2 -13
  28. package/packages/cli/dist/index.cjs +17 -17
  29. package/packages/cli/vendor/src/components/display/smart-card.tsx +8 -8
  30. package/packages/cli/vendor/src/index.ts +3 -4
  31. package/packages/cli/vendor/src/showcase/index.ts +5 -6
  32. package/packages/cli/vendor/src/showcase/package-meta.ts +1 -1
  33. package/packages/cli/vendor/src/showcase/premium/accordion/mock.ts +4 -4
  34. package/packages/cli/vendor/src/showcase/{families/data-table → premium/data-table-parts}/data.ts +25 -1
  35. package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +1 -2
  36. package/packages/cli/vendor/src/showcase/site-data.tsx +151 -216
  37. package/packages/cli/vendor/src/showcase/tembro-registry.json +1 -1
  38. package/registry.json +1 -1
  39. package/dist/families/badge-family.cjs +0 -1
  40. package/dist/families/badge-family.d.ts +0 -5
  41. package/dist/families/badge-family.js +0 -5
  42. package/dist/families/card-family.cjs +0 -1
  43. package/dist/families/card-family.d.ts +0 -16
  44. package/dist/families/card-family.js +0 -21
  45. package/dist/families/catalog.cjs +0 -1
  46. package/dist/families/catalog.d.ts +0 -11
  47. package/dist/families/catalog.js +0 -140
  48. package/dist/families/data-table-family.cjs +0 -1
  49. package/dist/families/data-table-family.d.ts +0 -18
  50. package/dist/families/data-table-family.js +0 -29
  51. package/dist/families/docs-adoption.cjs +0 -1
  52. package/dist/families/docs-adoption.d.ts +0 -16
  53. package/dist/families/docs-adoption.js +0 -53
  54. package/dist/families/docs-groups.cjs +0 -1
  55. package/dist/families/docs-groups.d.ts +0 -18
  56. package/dist/families/docs-groups.js +0 -262
  57. package/dist/families/docs-queries.cjs +0 -1
  58. package/dist/families/docs-queries.d.ts +0 -37
  59. package/dist/families/docs-queries.js +0 -50
  60. package/dist/families/docs-routing.cjs +0 -1
  61. package/dist/families/docs-routing.d.ts +0 -17
  62. package/dist/families/docs-routing.js +0 -49
  63. package/dist/families/form-family.cjs +0 -1
  64. package/dist/families/form-family.d.ts +0 -20
  65. package/dist/families/form-family.js +0 -35
  66. package/dist/families/index.cjs +0 -1
  67. package/dist/families/index.d.ts +0 -19
  68. package/dist/families/index.js +0 -20
  69. package/dist/families/input-family.cjs +0 -1
  70. package/dist/families/input-family.d.ts +0 -32
  71. package/dist/families/input-family.js +0 -56
  72. package/dist/families/member-metadata.cjs +0 -1
  73. package/dist/families/member-metadata.d.ts +0 -11
  74. package/dist/families/member-metadata.js +0 -1013
  75. package/dist/families/member-queries.cjs +0 -1
  76. package/dist/families/member-queries.d.ts +0 -6
  77. package/dist/families/member-queries.js +0 -14
  78. package/dist/families/member-snippet-queries.cjs +0 -1
  79. package/dist/families/member-snippet-queries.d.ts +0 -8
  80. package/dist/families/member-snippet-queries.js +0 -30
  81. package/dist/families/member-snippets.cjs +0 -484
  82. package/dist/families/member-snippets.d.ts +0 -11
  83. package/dist/families/member-snippets.js +0 -1061
  84. package/dist/families/migration-map.cjs +0 -1
  85. package/dist/families/migration-map.d.ts +0 -10
  86. package/dist/families/migration-map.js +0 -787
  87. package/dist/families/overlay-family.cjs +0 -1
  88. package/dist/families/overlay-family.d.ts +0 -22
  89. package/dist/families/overlay-family.js +0 -29
  90. package/dist/families/public-surface-rationalization.cjs +0 -1
  91. package/dist/families/public-surface-rationalization.d.ts +0 -169
  92. package/dist/families/public-surface-rationalization.js +0 -296
  93. package/dist/families/queries.cjs +0 -1
  94. package/dist/families/queries.d.ts +0 -12
  95. package/dist/families/queries.js +0 -162
  96. package/dist/families/select-family.cjs +0 -1
  97. package/dist/families/select-family.d.ts +0 -22
  98. package/dist/families/select-family.js +0 -27
  99. package/dist/families/views.cjs +0 -1
  100. package/dist/families/views.d.ts +0 -26
  101. package/dist/families/views.js +0 -45
  102. package/dist/showcase/families/actions/index.cjs +0 -1
  103. package/dist/showcase/families/actions/index.d.ts +0 -2
  104. package/dist/showcase/families/actions/index.js +0 -3
  105. package/dist/showcase/families/actions/mock.cjs +0 -5
  106. package/dist/showcase/families/actions/mock.d.ts +0 -2
  107. package/dist/showcase/families/actions/mock.js +0 -40
  108. package/dist/showcase/families/actions/showcase.cjs +0 -1
  109. package/dist/showcase/families/actions/showcase.d.ts +0 -2
  110. package/dist/showcase/families/actions/showcase.js +0 -53
  111. package/dist/showcase/families/calendar/index.cjs +0 -1
  112. package/dist/showcase/families/calendar/index.d.ts +0 -2
  113. package/dist/showcase/families/calendar/index.js +0 -3
  114. package/dist/showcase/families/calendar/mock.cjs +0 -5
  115. package/dist/showcase/families/calendar/mock.d.ts +0 -2
  116. package/dist/showcase/families/calendar/mock.js +0 -40
  117. package/dist/showcase/families/calendar/showcase.cjs +0 -1
  118. package/dist/showcase/families/calendar/showcase.d.ts +0 -2
  119. package/dist/showcase/families/calendar/showcase.js +0 -60
  120. package/dist/showcase/families/command/index.cjs +0 -1
  121. package/dist/showcase/families/command/index.d.ts +0 -2
  122. package/dist/showcase/families/command/index.js +0 -3
  123. package/dist/showcase/families/command/mock.cjs +0 -5
  124. package/dist/showcase/families/command/mock.d.ts +0 -2
  125. package/dist/showcase/families/command/mock.js +0 -40
  126. package/dist/showcase/families/command/showcase.cjs +0 -1
  127. package/dist/showcase/families/command/showcase.d.ts +0 -2
  128. package/dist/showcase/families/command/showcase.js +0 -40
  129. package/dist/showcase/families/data-table/data.d.ts +0 -5
  130. package/dist/showcase/families/data-table/index.cjs +0 -1
  131. package/dist/showcase/families/data-table/index.d.ts +0 -4
  132. package/dist/showcase/families/data-table/index.js +0 -4
  133. package/dist/showcase/families/data-table/mock.cjs +0 -24
  134. package/dist/showcase/families/data-table/mock.d.ts +0 -2
  135. package/dist/showcase/families/data-table/mock.js +0 -48
  136. package/dist/showcase/families/data-table/showcase.cjs +0 -1
  137. package/dist/showcase/families/data-table/showcase.d.ts +0 -3
  138. package/dist/showcase/families/data-table/showcase.js +0 -751
  139. package/dist/showcase/families/data-table/types.cjs +0 -1
  140. package/dist/showcase/families/data-table/types.js +0 -0
  141. package/dist/showcase/families/display/data.cjs +0 -1
  142. package/dist/showcase/families/display/data.d.ts +0 -6
  143. package/dist/showcase/families/display/data.js +0 -24
  144. package/dist/showcase/families/display/index.cjs +0 -1
  145. package/dist/showcase/families/display/index.d.ts +0 -2
  146. package/dist/showcase/families/display/index.js +0 -3
  147. package/dist/showcase/families/display/mock.cjs +0 -5
  148. package/dist/showcase/families/display/mock.d.ts +0 -2
  149. package/dist/showcase/families/display/mock.js +0 -40
  150. package/dist/showcase/families/display/showcase.cjs +0 -1
  151. package/dist/showcase/families/display/showcase.d.ts +0 -2
  152. package/dist/showcase/families/display/showcase.js +0 -201
  153. package/dist/showcase/families/filters/data.cjs +0 -1
  154. package/dist/showcase/families/filters/data.d.ts +0 -31
  155. package/dist/showcase/families/filters/data.js +0 -61
  156. package/dist/showcase/families/filters/index.cjs +0 -1
  157. package/dist/showcase/families/filters/index.d.ts +0 -2
  158. package/dist/showcase/families/filters/index.js +0 -3
  159. package/dist/showcase/families/filters/mock.cjs +0 -5
  160. package/dist/showcase/families/filters/mock.d.ts +0 -2
  161. package/dist/showcase/families/filters/mock.js +0 -40
  162. package/dist/showcase/families/filters/showcase.cjs +0 -1
  163. package/dist/showcase/families/filters/showcase.d.ts +0 -3
  164. package/dist/showcase/families/filters/showcase.js +0 -213
  165. package/dist/showcase/families/form/data.cjs +0 -1
  166. package/dist/showcase/families/form/data.d.ts +0 -22
  167. package/dist/showcase/families/form/data.js +0 -53
  168. package/dist/showcase/families/form/index.cjs +0 -1
  169. package/dist/showcase/families/form/index.d.ts +0 -4
  170. package/dist/showcase/families/form/index.js +0 -4
  171. package/dist/showcase/families/form/mock.cjs +0 -12
  172. package/dist/showcase/families/form/mock.d.ts +0 -2
  173. package/dist/showcase/families/form/mock.js +0 -40
  174. package/dist/showcase/families/form/showcase.cjs +0 -1
  175. package/dist/showcase/families/form/showcase.d.ts +0 -3
  176. package/dist/showcase/families/form/showcase.js +0 -318
  177. package/dist/showcase/families/form/types.cjs +0 -1
  178. package/dist/showcase/families/form/types.d.ts +0 -9
  179. package/dist/showcase/families/form/types.js +0 -0
  180. package/dist/showcase/families/index.cjs +0 -1
  181. package/dist/showcase/families/index.d.ts +0 -3
  182. package/dist/showcase/families/index.js +0 -96
  183. package/dist/showcase/families/inputs/data.cjs +0 -1
  184. package/dist/showcase/families/inputs/data.d.ts +0 -24
  185. package/dist/showcase/families/inputs/data.js +0 -90
  186. package/dist/showcase/families/inputs/index.cjs +0 -1
  187. package/dist/showcase/families/inputs/index.d.ts +0 -2
  188. package/dist/showcase/families/inputs/index.js +0 -3
  189. package/dist/showcase/families/inputs/mock.cjs +0 -5
  190. package/dist/showcase/families/inputs/mock.d.ts +0 -2
  191. package/dist/showcase/families/inputs/mock.js +0 -40
  192. package/dist/showcase/families/inputs/showcase.cjs +0 -1
  193. package/dist/showcase/families/inputs/showcase.d.ts +0 -3
  194. package/dist/showcase/families/inputs/showcase.js +0 -404
  195. package/dist/showcase/families/layout/index.cjs +0 -1
  196. package/dist/showcase/families/layout/index.d.ts +0 -2
  197. package/dist/showcase/families/layout/index.js +0 -3
  198. package/dist/showcase/families/layout/mock.cjs +0 -5
  199. package/dist/showcase/families/layout/mock.d.ts +0 -2
  200. package/dist/showcase/families/layout/mock.js +0 -40
  201. package/dist/showcase/families/layout/showcase.cjs +0 -1
  202. package/dist/showcase/families/layout/showcase.d.ts +0 -2
  203. package/dist/showcase/families/layout/showcase.js +0 -88
  204. package/dist/showcase/families/navigation/index.cjs +0 -1
  205. package/dist/showcase/families/navigation/index.d.ts +0 -2
  206. package/dist/showcase/families/navigation/index.js +0 -3
  207. package/dist/showcase/families/navigation/mock.cjs +0 -5
  208. package/dist/showcase/families/navigation/mock.d.ts +0 -2
  209. package/dist/showcase/families/navigation/mock.js +0 -40
  210. package/dist/showcase/families/navigation/showcase.cjs +0 -1
  211. package/dist/showcase/families/navigation/showcase.d.ts +0 -2
  212. package/dist/showcase/families/navigation/showcase.js +0 -49
  213. package/dist/showcase/families/notifications/index.cjs +0 -1
  214. package/dist/showcase/families/notifications/index.d.ts +0 -2
  215. package/dist/showcase/families/notifications/index.js +0 -3
  216. package/dist/showcase/families/notifications/mock.cjs +0 -5
  217. package/dist/showcase/families/notifications/mock.d.ts +0 -2
  218. package/dist/showcase/families/notifications/mock.js +0 -40
  219. package/dist/showcase/families/notifications/showcase.cjs +0 -1
  220. package/dist/showcase/families/notifications/showcase.d.ts +0 -1
  221. package/dist/showcase/families/notifications/showcase.js +0 -50
  222. package/dist/showcase/families/overlay/index.cjs +0 -1
  223. package/dist/showcase/families/overlay/index.d.ts +0 -2
  224. package/dist/showcase/families/overlay/index.js +0 -3
  225. package/dist/showcase/families/overlay/mock.cjs +0 -5
  226. package/dist/showcase/families/overlay/mock.d.ts +0 -2
  227. package/dist/showcase/families/overlay/mock.js +0 -40
  228. package/dist/showcase/families/overlay/showcase.cjs +0 -1
  229. package/dist/showcase/families/overlay/showcase.d.ts +0 -1
  230. package/dist/showcase/families/overlay/showcase.js +0 -38
  231. package/dist/showcase/families/patterns/index.cjs +0 -1
  232. package/dist/showcase/families/patterns/index.d.ts +0 -2
  233. package/dist/showcase/families/patterns/index.js +0 -3
  234. package/dist/showcase/families/patterns/mock.cjs +0 -5
  235. package/dist/showcase/families/patterns/mock.d.ts +0 -2
  236. package/dist/showcase/families/patterns/mock.js +0 -40
  237. package/dist/showcase/families/patterns/showcase.cjs +0 -1
  238. package/dist/showcase/families/patterns/showcase.d.ts +0 -1
  239. package/dist/showcase/families/patterns/showcase.js +0 -38
  240. package/dist/showcase/families/types.cjs +0 -1
  241. package/dist/showcase/families/types.d.ts +0 -29
  242. package/dist/showcase/families/types.js +0 -10
  243. package/dist/showcase/families/upload/data.cjs +0 -1
  244. package/dist/showcase/families/upload/data.d.ts +0 -1
  245. package/dist/showcase/families/upload/data.js +0 -10
  246. package/dist/showcase/families/upload/index.cjs +0 -1
  247. package/dist/showcase/families/upload/index.d.ts +0 -2
  248. package/dist/showcase/families/upload/index.js +0 -3
  249. package/dist/showcase/families/upload/mock.cjs +0 -5
  250. package/dist/showcase/families/upload/mock.d.ts +0 -2
  251. package/dist/showcase/families/upload/mock.js +0 -40
  252. package/dist/showcase/families/upload/showcase.cjs +0 -1
  253. package/dist/showcase/families/upload/showcase.d.ts +0 -3
  254. package/dist/showcase/families/upload/showcase.js +0 -133
  255. package/dist/showcase/families/wizard/index.cjs +0 -1
  256. package/dist/showcase/families/wizard/index.d.ts +0 -2
  257. package/dist/showcase/families/wizard/index.js +0 -3
  258. package/dist/showcase/families/wizard/mock.cjs +0 -5
  259. package/dist/showcase/families/wizard/mock.d.ts +0 -2
  260. package/dist/showcase/families/wizard/mock.js +0 -40
  261. package/dist/showcase/families/wizard/showcase.cjs +0 -1
  262. package/dist/showcase/families/wizard/showcase.d.ts +0 -2
  263. package/dist/showcase/families/wizard/showcase.js +0 -56
  264. package/packages/cli/vendor/src/families/badge-family.ts +0 -7
  265. package/packages/cli/vendor/src/families/card-family.ts +0 -26
  266. package/packages/cli/vendor/src/families/catalog.ts +0 -125
  267. package/packages/cli/vendor/src/families/data-table-family.ts +0 -31
  268. package/packages/cli/vendor/src/families/docs-adoption.ts +0 -103
  269. package/packages/cli/vendor/src/families/docs-groups.ts +0 -248
  270. package/packages/cli/vendor/src/families/docs-queries.ts +0 -84
  271. package/packages/cli/vendor/src/families/docs-routing.ts +0 -89
  272. package/packages/cli/vendor/src/families/form-family.ts +0 -37
  273. package/packages/cli/vendor/src/families/index.ts +0 -19
  274. package/packages/cli/vendor/src/families/input-family.ts +0 -61
  275. package/packages/cli/vendor/src/families/member-metadata.ts +0 -1033
  276. package/packages/cli/vendor/src/families/member-queries.ts +0 -28
  277. package/packages/cli/vendor/src/families/member-snippet-queries.ts +0 -54
  278. package/packages/cli/vendor/src/families/member-snippets.ts +0 -1563
  279. package/packages/cli/vendor/src/families/migration-map.ts +0 -161
  280. package/packages/cli/vendor/src/families/overlay-family.ts +0 -31
  281. package/packages/cli/vendor/src/families/public-surface-rationalization.ts +0 -206
  282. package/packages/cli/vendor/src/families/queries.ts +0 -131
  283. package/packages/cli/vendor/src/families/select-family.ts +0 -33
  284. package/packages/cli/vendor/src/families/views.ts +0 -85
  285. package/packages/cli/vendor/src/showcase/families/actions/index.ts +0 -2
  286. package/packages/cli/vendor/src/showcase/families/actions/mock.ts +0 -18
  287. package/packages/cli/vendor/src/showcase/families/actions/showcase.tsx +0 -36
  288. package/packages/cli/vendor/src/showcase/families/calendar/index.ts +0 -2
  289. package/packages/cli/vendor/src/showcase/families/calendar/mock.ts +0 -18
  290. package/packages/cli/vendor/src/showcase/families/calendar/showcase.tsx +0 -33
  291. package/packages/cli/vendor/src/showcase/families/command/index.ts +0 -2
  292. package/packages/cli/vendor/src/showcase/families/command/mock.ts +0 -18
  293. package/packages/cli/vendor/src/showcase/families/command/showcase.tsx +0 -33
  294. package/packages/cli/vendor/src/showcase/families/data-table/index.ts +0 -4
  295. package/packages/cli/vendor/src/showcase/families/data-table/mock.ts +0 -42
  296. package/packages/cli/vendor/src/showcase/families/data-table/showcase.tsx +0 -507
  297. package/packages/cli/vendor/src/showcase/families/data-table/types.ts +0 -25
  298. package/packages/cli/vendor/src/showcase/families/display/data.ts +0 -11
  299. package/packages/cli/vendor/src/showcase/families/display/index.ts +0 -2
  300. package/packages/cli/vendor/src/showcase/families/display/mock.ts +0 -18
  301. package/packages/cli/vendor/src/showcase/families/display/showcase.tsx +0 -113
  302. package/packages/cli/vendor/src/showcase/families/filters/data.ts +0 -18
  303. package/packages/cli/vendor/src/showcase/families/filters/index.ts +0 -2
  304. package/packages/cli/vendor/src/showcase/families/filters/mock.ts +0 -18
  305. package/packages/cli/vendor/src/showcase/families/filters/showcase.tsx +0 -137
  306. package/packages/cli/vendor/src/showcase/families/form/data.ts +0 -37
  307. package/packages/cli/vendor/src/showcase/families/form/index.ts +0 -4
  308. package/packages/cli/vendor/src/showcase/families/form/mock.ts +0 -18
  309. package/packages/cli/vendor/src/showcase/families/form/showcase.tsx +0 -230
  310. package/packages/cli/vendor/src/showcase/families/form/types.ts +0 -10
  311. package/packages/cli/vendor/src/showcase/families/index.ts +0 -37
  312. package/packages/cli/vendor/src/showcase/families/inputs/data.ts +0 -40
  313. package/packages/cli/vendor/src/showcase/families/inputs/index.ts +0 -2
  314. package/packages/cli/vendor/src/showcase/families/inputs/mock.ts +0 -18
  315. package/packages/cli/vendor/src/showcase/families/inputs/showcase.tsx +0 -294
  316. package/packages/cli/vendor/src/showcase/families/layout/index.ts +0 -2
  317. package/packages/cli/vendor/src/showcase/families/layout/mock.ts +0 -18
  318. package/packages/cli/vendor/src/showcase/families/layout/showcase.tsx +0 -57
  319. package/packages/cli/vendor/src/showcase/families/navigation/index.ts +0 -2
  320. package/packages/cli/vendor/src/showcase/families/navigation/mock.ts +0 -18
  321. package/packages/cli/vendor/src/showcase/families/navigation/showcase.tsx +0 -31
  322. package/packages/cli/vendor/src/showcase/families/notifications/index.ts +0 -2
  323. package/packages/cli/vendor/src/showcase/families/notifications/mock.ts +0 -18
  324. package/packages/cli/vendor/src/showcase/families/notifications/showcase.tsx +0 -24
  325. package/packages/cli/vendor/src/showcase/families/overlay/index.ts +0 -2
  326. package/packages/cli/vendor/src/showcase/families/overlay/mock.ts +0 -18
  327. package/packages/cli/vendor/src/showcase/families/overlay/showcase.tsx +0 -23
  328. package/packages/cli/vendor/src/showcase/families/patterns/index.ts +0 -2
  329. package/packages/cli/vendor/src/showcase/families/patterns/mock.ts +0 -18
  330. package/packages/cli/vendor/src/showcase/families/patterns/showcase.tsx +0 -23
  331. package/packages/cli/vendor/src/showcase/families/types.ts +0 -40
  332. package/packages/cli/vendor/src/showcase/families/upload/data.ts +0 -7
  333. package/packages/cli/vendor/src/showcase/families/upload/index.ts +0 -2
  334. package/packages/cli/vendor/src/showcase/families/upload/mock.ts +0 -18
  335. package/packages/cli/vendor/src/showcase/families/upload/showcase.tsx +0 -86
  336. package/packages/cli/vendor/src/showcase/families/wizard/index.ts +0 -2
  337. package/packages/cli/vendor/src/showcase/families/wizard/mock.ts +0 -18
  338. package/packages/cli/vendor/src/showcase/families/wizard/showcase.tsx +0 -39
  339. /package/dist/showcase/{families/data-table → premium/data-table-parts}/data.cjs +0 -0
@@ -1,113 +0,0 @@
1
- import * as React from "react"
2
- import { ActivityIcon, CheckCircle2Icon, FolderIcon } from "lucide-react"
3
-
4
- import { Badge, EntityCard, FileCard, InfoCard } from "@/index"
5
-
6
- import { activityItems, metricCards } from "./data"
7
-
8
- export function DisplayFamilyShowcase() {
9
- const [activeCard, setActiveCard] = React.useState("workspace")
10
-
11
- return (
12
- <div className="space-y-4">
13
- <div className="grid gap-4 md:grid-cols-3">
14
- {metricCards.map((item) => (
15
- <div key={item.label} className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-4">
16
- <p className="aui-text-muted text-sm">{item.label}</p>
17
- <p className="mt-2 text-3xl font-semibold tracking-tight">{item.value}</p>
18
- <p className="aui-text-subtle mt-2 text-sm">{item.note}</p>
19
- </div>
20
- ))}
21
- </div>
22
-
23
- <div className="grid gap-4 xl:grid-cols-[1.1fr_0.9fr]">
24
- <div className="space-y-4">
25
- <InfoCard
26
- eyebrow="Workspace surface"
27
- title="Azamat UI release rail"
28
- description="Display components should present density, metadata, actions and emphasis without requiring route-specific styling each time."
29
- meta="Updated 2 min ago"
30
- status={<Badge variant="secondary">Live</Badge>}
31
- content={
32
- <div className="grid gap-3 md:grid-cols-3">
33
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
34
- <p className="aui-text-muted text-xs uppercase tracking-[0.18em]">Surface</p>
35
- <p className="aui-text-strong mt-2 text-sm font-medium">InfoCard</p>
36
- </div>
37
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
38
- <p className="aui-text-muted text-xs uppercase tracking-[0.18em]">State</p>
39
- <p className="aui-text-strong mt-2 text-sm font-medium">Selected-safe actions</p>
40
- </div>
41
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
42
- <p className="aui-text-muted text-xs uppercase tracking-[0.18em]">Use case</p>
43
- <p className="aui-text-strong mt-2 text-sm font-medium">Overview, result, summary</p>
44
- </div>
45
- </div>
46
- }
47
- actions={<Badge variant="outline">Action-safe</Badge>}
48
- />
49
-
50
- <div className="grid gap-4 md:grid-cols-2">
51
- <EntityCard
52
- title="Workspace card"
53
- description="Composable entity block with media, status and actions."
54
- icon={<FolderIcon className="size-4" />}
55
- status={<Badge variant="outline">Review</Badge>}
56
- meta="Team: Core"
57
- selected={activeCard === "workspace"}
58
- onSelect={() => setActiveCard("workspace")}
59
- actions={<Badge variant="outline">Inspect</Badge>}
60
- />
61
- <FileCard
62
- name="release-notes.md"
63
- description="Prepared for changelog and docs page."
64
- meta="Updated 5m ago"
65
- selected={activeCard === "file"}
66
- onOpen={() => setActiveCard("file")}
67
- actions={<Badge variant="outline">Versioned</Badge>}
68
- />
69
- </div>
70
- </div>
71
-
72
- <div className="space-y-4">
73
- <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-4">
74
- <p className="font-medium">Status legend</p>
75
- <div className="mt-4 flex flex-wrap gap-2">
76
- <Badge variant="secondary">Live</Badge>
77
- <Badge variant="outline">Review</Badge>
78
- <Badge variant="destructive">Blocked</Badge>
79
- </div>
80
- </div>
81
-
82
- <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-4">
83
- <p className="font-medium">Activity feed</p>
84
- <div className="aui-text-muted mt-4 space-y-3 text-sm">
85
- {activityItems.map((item) => (
86
- <div key={item} className="flex items-center gap-3 rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
87
- <ActivityIcon className="size-4 shrink-0" />
88
- <span>{item}</span>
89
- </div>
90
- ))}
91
- </div>
92
- </div>
93
-
94
- <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-4">
95
- <p className="aui-text-muted text-sm">Focused surface</p>
96
- <p className="aui-text-strong mt-2 text-lg font-semibold">{activeCard === "workspace" ? "Workspace card" : "File card"}</p>
97
- <p className="aui-text-subtle mt-2 text-sm">Display family now shows actual card surfaces instead of only plain bordered boxes.</p>
98
- <div className="mt-3 flex flex-wrap gap-2">
99
- <Badge variant="outline">InfoCard</Badge>
100
- <Badge variant="outline">EntityCard</Badge>
101
- <Badge variant="outline">FileCard</Badge>
102
- <Badge variant="outline">Badges</Badge>
103
- </div>
104
- <div className="mt-4 flex items-center gap-2 text-sm text-emerald-600">
105
- <CheckCircle2Icon className="size-4" />
106
- <span>Nested actions stay isolated from parent selection.</span>
107
- </div>
108
- </div>
109
- </div>
110
- </div>
111
- </div>
112
- )
113
- }
@@ -1,18 +0,0 @@
1
- export const savedViews = [
2
- { value: "all-pipeline", label: "All pipeline", description: "Full team deal flow" },
3
- { value: "at-risk", label: "At risk", description: "Overdue and stalled records" },
4
- { value: "owner-azamat", label: "Owner: Azamat", description: "Personal operating view" },
5
- ]
6
-
7
- export const defaultFilterChips = [
8
- { key: "status", label: "Status", value: "Active", tone: "default" as const },
9
- { key: "segment", label: "Segment", value: "Enterprise", tone: "info" as const },
10
- { key: "period", label: "Period", value: "This month", tone: "muted" as const },
11
- { key: "owner", label: "Owner", value: "Assigned", tone: "success" as const },
12
- ]
13
-
14
- export const statusOptions = [
15
- { value: "active", label: "Active", description: "Healthy operating records" },
16
- { value: "review", label: "Review", description: "Needs manual follow-up" },
17
- { value: "overdue", label: "Overdue", description: "Past expected date" },
18
- ]
@@ -1,2 +0,0 @@
1
- export { FiltersFamilyShowcase } from "./showcase"
2
- export { filtersFamilyMock } from "./mock"
@@ -1,18 +0,0 @@
1
- import type { FamilyDemoMock } from "../types"
2
-
3
- export const filtersFamilyMock: FamilyDemoMock = {
4
- code: `import { FilterBar, FilterChips } from "tembro"\n\nexport function Example() {\n return <FilterBar />\n}`,
5
- highlights: ["Filter bars", "Applied chips", "Search + filter coupling", "Dashboard refinement"],
6
- scenarios: [
7
- { title: "Analytics toolbar", description: "Combine search, chips and status filters in one row." },
8
- { title: "Lead boards", description: "Switch quickly between open, review and won states." },
9
- { title: "Saved segments", description: "Represent active narrowing rules with persistent chips." },
10
- ],
11
- metrics: [
12
- { label: "Exports", value: "2" },
13
- { label: "Modes", value: "Bar + chips" },
14
- { label: "Status", value: "Stable" },
15
- ],
16
- }
17
-
18
-
@@ -1,137 +0,0 @@
1
- import type { ChangeEvent } from "react"
2
- import * as React from "react"
3
-
4
- import { Badge, Button, FilterChips, Input, SavedFilterSelect, SimpleSelect } from "@/index"
5
-
6
- import type { FamilyDemoProps } from "../types"
7
-
8
- import { defaultFilterChips, savedViews, statusOptions } from "./data"
9
-
10
- export function FiltersFamilyShowcase({ state, setState }: FamilyDemoProps) {
11
- const [view, setView] = React.useState<string | undefined>("all-pipeline")
12
- const [status, setStatus] = React.useState<string | undefined>("active")
13
- const [chips, setChips] = React.useState(defaultFilterChips)
14
-
15
- return (
16
- <div className="space-y-4">
17
- <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-4">
18
- <div className="flex flex-col gap-4 xl:flex-row xl:items-start xl:justify-between">
19
- <div className="space-y-3">
20
- <div className="flex flex-wrap gap-2">
21
- <Badge variant="outline">SavedFilterSelect</Badge>
22
- <Badge variant="outline">FilterChips</Badge>
23
- <Badge variant="outline">SimpleSelect</Badge>
24
- </div>
25
- <div>
26
- <p className="aui-text-strong text-sm font-medium">Filter composition flow</p>
27
- <p className="aui-text-muted mt-1 text-sm leading-6">
28
- Search, saved view switch, field-level filter and removable active chips should read like one coherent toolbar rather than separate widgets.
29
- </p>
30
- </div>
31
- </div>
32
- <div className="flex flex-wrap gap-2">
33
- <Button variant="outline" size="sm" onClick={() => setState({ search: "" })}>Clear query</Button>
34
- <Button
35
- variant="outline"
36
- size="sm"
37
- onClick={() => {
38
- setView("all-pipeline")
39
- setStatus("active")
40
- setChips(defaultFilterChips)
41
- setState({ search: "", notes: "Filters reset to default operating view." })
42
- }}
43
- >
44
- Reset
45
- </Button>
46
- <Button size="sm" onClick={() => setState({ notes: "Current filter composition prepared for save flow." })}>Save view</Button>
47
- </div>
48
- </div>
49
-
50
- <div className="mt-4 grid gap-3 xl:grid-cols-[1.2fr_0.8fr_0.8fr]">
51
- <Input
52
- value={state.search}
53
- onChange={(event: ChangeEvent<HTMLInputElement>) => setState({ search: event.target.value })}
54
- placeholder="Search records..."
55
- className="w-full"
56
- />
57
- <SavedFilterSelect
58
- value={view}
59
- onValueChange={(value) => {
60
- setView(value)
61
- setState({ notes: `${savedViews.find((item) => item.value === value)?.label ?? "View cleared"} applied to the table toolbar.` })
62
- }}
63
- filters={savedViews}
64
- onSave={(name) => setState({ notes: `Saved filter view requested: ${name}` })}
65
- onDelete={(value) => setState({ notes: `${savedViews.find((item) => item.value === value)?.label ?? value} requested for deletion.` })}
66
- />
67
- <SimpleSelect
68
- value={status}
69
- onValueChange={(value) => {
70
- setStatus(value)
71
- setState({ notes: `${statusOptions.find((item) => item.value === value)?.label ?? "Status cleared"} filter applied.` })
72
- }}
73
- options={statusOptions}
74
- placeholder="Select status"
75
- clearable
76
- searchable
77
- />
78
- </div>
79
-
80
- <div className="mt-4 rounded-[20px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] p-4">
81
- <FilterChips
82
- chips={chips}
83
- onRemove={(key) => {
84
- setChips((current) => current.filter((chip) => chip.key !== key))
85
- setState({ notes: `${key} filter removed from the active toolbar state.` })
86
- }}
87
- onClear={() => {
88
- setChips([])
89
- setState({ notes: "All active filter chips cleared." })
90
- }}
91
- />
92
- </div>
93
- </div>
94
-
95
- <div className="grid gap-4 lg:grid-cols-[1.1fr_0.9fr]">
96
- <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-4">
97
- <div className="flex flex-wrap items-center gap-2">
98
- <Badge variant="outline">Step 1: query</Badge>
99
- <Badge variant="outline">Step 2: saved view</Badge>
100
- <Badge variant="outline">Step 3: active chips</Badge>
101
- </div>
102
- <div className="mt-4 grid gap-3 md:grid-cols-3">
103
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
104
- <p className="aui-text-strong text-sm font-medium">Search narrows result scope</p>
105
- <p className="aui-text-subtle mt-2 text-sm leading-6">Top-level search stays lightweight and pairs with field filters instead of replacing them.</p>
106
- </div>
107
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
108
- <p className="aui-text-strong text-sm font-medium">Saved view restores intent</p>
109
- <p className="aui-text-subtle mt-2 text-sm leading-6">Named views bring back common operating states without manually rebuilding every chip.</p>
110
- </div>
111
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
112
- <p className="aui-text-strong text-sm font-medium">Chips expose active state</p>
113
- <p className="aui-text-subtle mt-2 text-sm leading-6">Each chip can be removed independently, and clear-all stays available for quick resets.</p>
114
- </div>
115
- </div>
116
- </div>
117
-
118
- <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-4">
119
- <div className="grid gap-3">
120
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
121
- <p className="aui-text-muted text-sm">Current query</p>
122
- <p className="aui-text-strong mt-2 text-lg font-semibold">{state.search || "All records"}</p>
123
- </div>
124
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
125
- <p className="aui-text-muted text-sm">Saved view</p>
126
- <p className="aui-text-strong mt-2 text-lg font-semibold">{savedViews.find((item) => item.value === view)?.label ?? "None"}</p>
127
- </div>
128
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
129
- <p className="aui-text-muted text-sm">Active chips</p>
130
- <p className="aui-text-strong mt-2 text-lg font-semibold">{chips.length}</p>
131
- </div>
132
- </div>
133
- </div>
134
- </div>
135
- </div>
136
- )
137
- }
@@ -1,37 +0,0 @@
1
- export type WorkspaceOption = {
2
- value: string
3
- label: string
4
- description: string
5
- data: {
6
- team: string
7
- status: "Live" | "Draft" | "Review"
8
- }
9
- }
10
-
11
- export type FormValues = {
12
- workspaceName: string
13
- status: string
14
- owner: string
15
- publishChanges: boolean
16
- notes: string
17
- }
18
-
19
- export const workspaceOptions: WorkspaceOption[] = [
20
- { value: "azamat-ui", label: "Azamat UI", description: "Public component library", data: { team: "Core", status: "Live" } },
21
- { value: "crm-pulse", label: "CRM Pulse", description: "Sales workflow module", data: { team: "Sales", status: "Review" } },
22
- { value: "store-command", label: "Store Command", description: "Commerce operations area", data: { team: "Commerce", status: "Live" } },
23
- { value: "finance-dock", label: "Finance Dock", description: "Billing admin surface", data: { team: "Finance", status: "Draft" } },
24
- ]
25
-
26
- export const groupedWorkspaceOptions = [
27
- { label: "Pinned", options: workspaceOptions.slice(0, 2) },
28
- { label: "All projects", options: workspaceOptions.slice(2) },
29
- ]
30
-
31
- export const defaultFormValues: FormValues = {
32
- workspaceName: "Tembro",
33
- status: "review",
34
- owner: "azamat-ui",
35
- publishChanges: true,
36
- notes: "Public documentation and component routes are being prepared for release.",
37
- }
@@ -1,4 +0,0 @@
1
- export { FormFamilyShowcase } from "./showcase"
2
- export { formFamilyMock } from "./mock"
3
- export { defaultFormValues, groupedWorkspaceOptions, workspaceOptions } from "./data"
4
- export type { FormValues, WorkspaceOption } from "./data"
@@ -1,18 +0,0 @@
1
- import type { FamilyDemoMock } from "../types"
2
-
3
- export const formFamilyMock: FamilyDemoMock = {
4
- code: `import { FormInput, FormSelect, FormSwitch } from "tembro"\n\nexport function Example() {\n return (\n <>\n <FormInput control={control} name="workspaceName" label="Workspace" />\n <FormInput control={control} name="ownerPhone" kind="phone" label="Owner phone" />\n <FormSelect control={control} name="owner" kind="async" label="Linked workspace" />\n <FormSwitch control={control} name="publishChanges" label="Publish after save" />\n </>\n )\n}`,
5
- highlights: ["Universal form wrappers", "Async field hydration", "Dirty + reset flow", "Consistent validation surfaces"],
6
- scenarios: [
7
- { title: "Settings form", description: "Keep labels, helper text, toggles and async fields aligned through the same wrapper language." },
8
- { title: "Edit resource flow", description: "Hydrate saved owner/workspace values back into the form route with `FormSelect kind=\"async\"`." },
9
- { title: "Long forms", description: "Scale complex field groups without splitting into many narrowly named wrappers." },
10
- ],
11
- metrics: [
12
- { label: "Exports", value: "14" },
13
- { label: "Universal wrappers", value: "2 primary" },
14
- { label: "Status", value: "Stable" },
15
- ],
16
- }
17
-
18
-
@@ -1,230 +0,0 @@
1
- import * as React from "react"
2
- import { useForm, useWatch } from "react-hook-form"
3
-
4
- import { Badge, Button, FormInput, FormSelect, FormSwitch, FormTextarea } from "@/index"
5
-
6
- import type { FamilyDemoProps } from "../types"
7
-
8
- import {
9
- defaultFormValues,
10
- groupedWorkspaceOptions,
11
- type FormValues,
12
- workspaceOptions,
13
- type WorkspaceOption,
14
- } from "./data"
15
-
16
- export function FormFamilyShowcase({ setState }: FamilyDemoProps) {
17
- const [mode, setMode] = React.useState<"editing" | "submitting" | "saved">("editing")
18
- const form = useForm<FormValues>({
19
- defaultValues: defaultFormValues,
20
- })
21
-
22
- const publishChanges = useWatch({ control: form.control, name: "publishChanges" })
23
- const workspaceName = useWatch({ control: form.control, name: "workspaceName" })
24
- const status = useWatch({ control: form.control, name: "status" })
25
- const owner = useWatch({ control: form.control, name: "owner" })
26
-
27
- const loadOptions = React.useCallback(async (search: string) => {
28
- await new Promise((resolve) => window.setTimeout(resolve, 260))
29
-
30
- const query = search.trim().toLowerCase()
31
- if (!query) return groupedWorkspaceOptions
32
-
33
- return [
34
- {
35
- label: "Search results",
36
- options: workspaceOptions.filter((item) =>
37
- [item.label, item.description, item.data.team, item.data.status].join(" ").toLowerCase().includes(query)
38
- ),
39
- },
40
- ]
41
- }, [])
42
-
43
- const loadSelectedOption = React.useCallback(async (value: string) => {
44
- await new Promise((resolve) => window.setTimeout(resolve, 120))
45
- return workspaceOptions.find((item) => item.value === value) ?? null
46
- }, [])
47
-
48
- const onSubmit = form.handleSubmit(async (values) => {
49
- setMode("submitting")
50
- await new Promise((resolve) => window.setTimeout(resolve, 420))
51
- setMode("saved")
52
- setState({
53
- notes: `Saved ${values.workspaceName} with ${values.status} status and ${values.publishChanges ? "enabled" : "disabled"} publish sync.`,
54
- })
55
- })
56
-
57
- return (
58
- <div className="space-y-4">
59
- <div className="rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-5">
60
- <div className="flex flex-col gap-4 xl:flex-row xl:items-start xl:justify-between">
61
- <div className="space-y-3">
62
- <div className="flex flex-wrap gap-2">
63
- <Badge variant="outline">react-hook-form</Badge>
64
- <Badge variant="outline">Wrapped fields</Badge>
65
- <Badge variant="outline">Async entity select</Badge>
66
- <Badge variant="outline">{form.formState.isDirty ? "Dirty" : "Pristine"}</Badge>
67
- </div>
68
- <div>
69
- <p className="aui-text-strong text-sm font-medium">Settings editor flow</p>
70
- <p className="aui-text-muted mt-1 text-sm leading-6">
71
- Wrapped field shell, async entity selection, boolean control, helper copy and submit/reset behavior should read like one coherent form route.
72
- </p>
73
- </div>
74
- </div>
75
- <div className="flex flex-wrap gap-2">
76
- <Button
77
- variant="outline"
78
- size="sm"
79
- onClick={() => {
80
- form.reset(defaultFormValues)
81
- setMode("editing")
82
- }}
83
- >
84
- Reset
85
- </Button>
86
- <Button size="sm" onClick={() => void onSubmit()} disabled={mode === "submitting"}>
87
- {mode === "submitting" ? "Saving..." : mode === "saved" ? "Saved" : "Save changes"}
88
- </Button>
89
- </div>
90
- </div>
91
- </div>
92
-
93
- <div className="grid gap-4 xl:grid-cols-[1.08fr_0.92fr]">
94
- <div className="space-y-4 rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-5">
95
- <form
96
- className="grid gap-4"
97
- onSubmit={(event) => {
98
- event.preventDefault()
99
- void onSubmit()
100
- }}
101
- >
102
- <div className="grid gap-4 md:grid-cols-2">
103
- <FormInput<FormValues>
104
- control={form.control}
105
- name="workspaceName"
106
- label="Workspace name"
107
- required
108
- placeholder="Enter workspace name"
109
- description="Primary title rendered across docs, templates, and component routes."
110
- fieldClassName="h-11"
111
- />
112
-
113
- <FormSelect<FormValues>
114
- control={form.control}
115
- name="status"
116
- label="Release status"
117
- required
118
- description="Use a controlled select for lifecycle state."
119
- options={[
120
- { label: "Draft", value: "draft" },
121
- { label: "Review", value: "review" },
122
- { label: "Live", value: "live" },
123
- ]}
124
- placeholder="Choose status"
125
- />
126
- </div>
127
-
128
- <FormSelect
129
- control={form.control}
130
- name="owner"
131
- kind="async"
132
- label="Linked workspace"
133
- required
134
- description="Hydrate saved entity values back into the form and keep async selection inside the same FormSelect API."
135
- defaultOptions={groupedWorkspaceOptions}
136
- loadOptions={loadOptions}
137
- loadSelectedOption={loadSelectedOption}
138
- labels={{
139
- placeholder: "Select workspace",
140
- searchPlaceholder: "Search workspaces...",
141
- loading: "Loading workspaces...",
142
- empty: "No workspace found",
143
- }}
144
- renderValue={(option: WorkspaceOption) => (
145
- <span className="inline-flex min-w-0 flex-col text-left">
146
- <span className="truncate">{option.label}</span>
147
- <span className="aui-text-muted truncate text-xs">{option.data.team}</span>
148
- </span>
149
- )}
150
- renderOption={(option: WorkspaceOption, optionState: { selected: boolean }) => (
151
- <span className="flex min-w-0 items-start justify-between gap-3">
152
- <span className="min-w-0">
153
- <span className="block truncate font-medium">{option.label}</span>
154
- <span className="aui-text-muted block truncate text-xs">{option.description}</span>
155
- </span>
156
- <span className={optionState.selected ? "rounded-full aui-surface-strong px-2 py-0.5 text-[11px]" : "aui-text-muted rounded-full bg-[color:var(--aui-surface-muted)] px-2 py-0.5 text-[11px]"}>
157
- {option.data.status}
158
- </span>
159
- </span>
160
- )}
161
- />
162
-
163
- <FormTextarea<FormValues>
164
- control={form.control}
165
- name="notes"
166
- label="Release notes"
167
- description="Long-form copy should stay aligned with labels, descriptions and validation shell."
168
- fieldClassName="min-h-28"
169
- />
170
-
171
- <FormSwitch<FormValues>
172
- control={form.control}
173
- name="publishChanges"
174
- label="Publish after save"
175
- description="Demonstrates wrapped boolean controls inside the same form system."
176
- />
177
- </form>
178
-
179
- <div className="grid gap-3 md:grid-cols-3">
180
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
181
- <p className="aui-text-strong text-sm font-medium">Step 1: edit fields</p>
182
- <p className="aui-text-subtle mt-2 text-sm leading-6">Text, select, async select and textarea stay aligned inside one shell system.</p>
183
- </div>
184
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
185
- <p className="aui-text-strong text-sm font-medium">Step 2: track dirty</p>
186
- <p className="aui-text-subtle mt-2 text-sm leading-6">Pristine and dirty state remain visible without building custom page-specific glue.</p>
187
- </div>
188
- <div className="rounded-[18px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
189
- <p className="aui-text-strong text-sm font-medium">Step 3: submit flow</p>
190
- <p className="aui-text-subtle mt-2 text-sm leading-6">Save and reset show real behavior instead of just decorative buttons.</p>
191
- </div>
192
- </div>
193
- </div>
194
-
195
- <div className="space-y-4 rounded-[22px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] p-5">
196
- <div className="grid gap-3 md:grid-cols-2 xl:grid-cols-1">
197
- <div className="rounded-[20px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] p-4">
198
- <p className="aui-text-muted text-sm">Form state</p>
199
- <p className="aui-text-strong mt-2 text-lg font-semibold">{mode}</p>
200
- <p className="aui-text-subtle mt-2 text-sm">{form.formState.isDirty ? "There are unsaved changes in the editor." : "Current values match the saved snapshot."}</p>
201
- </div>
202
- <div className="rounded-[20px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] p-4">
203
- <p className="aui-text-muted text-sm">Current workspace</p>
204
- <p className="aui-text-strong mt-2 text-lg font-semibold">{workspaceName || "Untitled workspace"}</p>
205
- <p className="aui-text-subtle mt-2 text-sm">Status: {status} • Owner: {owner}</p>
206
- </div>
207
- <div className="rounded-[20px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] p-4">
208
- <p className="aui-text-muted text-sm">Submit behavior</p>
209
- <div className="mt-3 flex flex-wrap gap-2">
210
- <Badge variant="outline">Reset</Badge>
211
- <Badge variant="outline">Dirty tracking</Badge>
212
- <Badge variant="outline">Async hydrate</Badge>
213
- <Badge variant="outline">{publishChanges ? "Publish on" : "Publish off"}</Badge>
214
- </div>
215
- </div>
216
- </div>
217
-
218
- <div className="rounded-[20px] border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] p-4">
219
- <p className="aui-text-muted text-sm">Why this matters</p>
220
- <div className="aui-text-subtle mt-3 space-y-2 text-sm">
221
- <p>One wrapper system keeps label, helper and error layout consistent.</p>
222
- <p>Async fields can hydrate edit values instead of only supporting fresh creation.</p>
223
- <p>Form route now shows actual submit and reset flow instead of static decoration.</p>
224
- </div>
225
- </div>
226
- </div>
227
- </div>
228
- </div>
229
- )
230
- }
@@ -1,10 +0,0 @@
1
- export type FormDemoField = {
2
- label: string
3
- kind: "input" | "badge" | "textarea"
4
- helper: string
5
- }
6
-
7
- export type FormDemoAction = {
8
- label: string
9
- variant: "default" | "outline"
10
- }
@@ -1,37 +0,0 @@
1
- import type { FamilyDemoBundle } from "./types"
2
-
3
- import { actionsFamilyMock, ActionsFamilyShowcase } from "./actions"
4
- import { calendarFamilyMock, CalendarFamilyShowcase } from "./calendar"
5
- import { commandFamilyMock, CommandFamilyShowcase } from "./command"
6
- import { dataTableFamilyMock, DataTableFamilyShowcase } from "./data-table"
7
- import { displayFamilyMock, DisplayFamilyShowcase } from "./display"
8
- import { filtersFamilyMock, FiltersFamilyShowcase } from "./filters"
9
- import { formFamilyMock, FormFamilyShowcase } from "./form"
10
- import { inputsFamilyMock, InputsFamilyShowcase } from "./inputs"
11
- import { layoutFamilyMock, LayoutFamilyShowcase } from "./layout"
12
- import { navigationFamilyMock, NavigationFamilyShowcase } from "./navigation"
13
- import { notificationsFamilyMock, NotificationsFamilyShowcase } from "./notifications"
14
- import { overlayFamilyMock, OverlayFamilyShowcase } from "./overlay"
15
- import { patternsFamilyMock, PatternsFamilyShowcase } from "./patterns"
16
- import { uploadFamilyMock, UploadFamilyShowcase } from "./upload"
17
- import { wizardFamilyMock, WizardFamilyShowcase } from "./wizard"
18
-
19
- export { defaultFamilyDemoState, type FamilyDemoBundle, type FamilyDemoProps, type FamilyDemoState } from "./types"
20
-
21
- export const familyDemoRegistry: Record<string, FamilyDemoBundle> = {
22
- actions: { mock: actionsFamilyMock, Showcase: ActionsFamilyShowcase },
23
- filters: { mock: filtersFamilyMock, Showcase: FiltersFamilyShowcase },
24
- overlay: { mock: overlayFamilyMock, Showcase: OverlayFamilyShowcase },
25
- navigation: { mock: navigationFamilyMock, Showcase: NavigationFamilyShowcase },
26
- layout: { mock: layoutFamilyMock, Showcase: LayoutFamilyShowcase },
27
- "data-table": { mock: dataTableFamilyMock, Showcase: DataTableFamilyShowcase },
28
- inputs: { mock: inputsFamilyMock, Showcase: InputsFamilyShowcase },
29
- form: { mock: formFamilyMock, Showcase: FormFamilyShowcase },
30
- display: { mock: displayFamilyMock, Showcase: DisplayFamilyShowcase },
31
- notifications: { mock: notificationsFamilyMock, Showcase: NotificationsFamilyShowcase },
32
- command: { mock: commandFamilyMock, Showcase: CommandFamilyShowcase },
33
- calendar: { mock: calendarFamilyMock, Showcase: CalendarFamilyShowcase },
34
- wizard: { mock: wizardFamilyMock, Showcase: WizardFamilyShowcase },
35
- upload: { mock: uploadFamilyMock, Showcase: UploadFamilyShowcase },
36
- patterns: { mock: patternsFamilyMock, Showcase: PatternsFamilyShowcase },
37
- }