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 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/ui/badge/index.cjs"),n=require("../../../components/ui/accordion/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a=`border-t border-[color:var(--aui-divider)] py-6`,o=[{key:`tokens`,title:`Theme tokens stay in one place`,description:`Radius, color and shadow should not be redefined per route.`,content:`Use shared CSS tokens so consumers can adapt the system without fighting deeply nested component styles.`},{key:`surface`,title:`One canonical public surface`,description:`Teach one entry point before helper members.`,content:`Start with Input, Select, DataTable, Card and Badge. Move aliases and advanced members lower in the docs hierarchy.`},{key:`demo`,title:`Real demos beat placeholder previews`,description:`Each route should prove the actual component behavior.`,content:`A docs page should show the real installed component with interactive state, not a generic substitute card.`}],s=[{key:`docs`,title:`Docs updated`,description:`Public route and CLI snippet verified`,content:`Component detail page, API notes, and install snippet were reviewed together before release.`},{key:`tokens`,title:`Visual tokens synced`,description:`No stray radius, border, or surface overrides`,content:`The route uses package tokens directly so the result matches what consumers install.`},{key:`qa`,title:`QA preview checked`,description:`Build and interactive preview passed`,content:`The component was verified with type-check and production build before push.`}];function c(){let[e,c]=r.useState(`surface`),[l,u]=r.useState([`docs`]);return(0,i.jsxs)(`div`,{className:`space-y-0`,children:[(0,i.jsxs)(`section`,{className:`pb-6`,children:[(0,i.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.24em] aui-text-muted`,children:`Installed primitive`}),(0,i.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`Accordion keeps dense guidance readable`}),(0,i.jsx)(`p`,{className:`mt-3 max-w-2xl text-sm leading-6 aui-text-muted`,children:`This route uses the exported accordion surface directly. The page adds only spacing and explanation around it.`})]}),(0,i.jsx)(`section`,{className:a,children:(0,i.jsxs)(`div`,{className:`grid gap-6 xl:grid-cols-[1.1fr_0.9fr]`,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`p`,{className:`text-lg font-semibold aui-text-strong`,children:`Documentation flow`}),(0,i.jsx)(`p`,{className:`mt-2 max-w-xl text-sm leading-6 aui-text-muted`,children:`Single-open mode keeps the user focused on one explanation at a time.`}),(0,i.jsx)(n.Accordion,{className:`mt-5`,type:`single`,value:e,onValueChange:c,items:[...o]})]}),(0,i.jsxs)(`div`,{className:`rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4`,children:[(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`p`,{className:`text-sm font-semibold aui-text-strong`,children:`Current open item`}),(0,i.jsx)(`p`,{className:`mt-1 text-xs aui-text-muted`,children:`Controlled state mirrors route-level docs navigation.`})]}),(0,i.jsx)(t.Badge,{variant:`secondary`,children:Array.isArray(e)?e.join(`, `):e||`none`})]}),(0,i.jsxs)(`div`,{className:`mt-4 space-y-3 text-sm leading-6 aui-text-muted`,children:[(0,i.jsx)(`p`,{children:`Use this mode on component detail pages, FAQs, or policy explanations where only one answer should dominate the layout.`}),(0,i.jsx)(`p`,{children:`The trigger keeps title and helper description together, so content stays understandable even before expansion.`})]})]})]})}),(0,i.jsx)(`section`,{className:a,children:(0,i.jsxs)(`div`,{className:`grid gap-6 xl:grid-cols-[0.95fr_1.05fr]`,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`p`,{className:`text-lg font-semibold aui-text-strong`,children:`Operational checklist`}),(0,i.jsx)(`p`,{className:`mt-2 max-w-xl text-sm leading-6 aui-text-muted`,children:`Multiple-open mode works better when teams compare several readiness items together.`}),(0,i.jsx)(`div`,{className:`mt-5 flex flex-wrap gap-2`,children:(Array.isArray(l)?l:[]).map(e=>(0,i.jsx)(t.Badge,{variant:`outline`,children:e},e))})]}),(0,i.jsx)(n.Accordion,{className:`xl:mt-8`,type:`multiple`,value:l,onValueChange:u,items:[...s]})]})})]})}exports.AccordionShowcase=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/ui/badge/index.cjs"),n=require("../../../components/ui/accordion/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a=`border-t border-[color:var(--aui-divider)] py-6`,o=[{key:`tokens`,title:`Theme tokens stay in one place`,meta:`P0`,description:`Radius, color and shadow should not be redefined per route.`,content:`Use shared CSS tokens so consumers can adapt the system without fighting deeply nested component styles.`},{key:`surface`,title:`One canonical public surface`,badge:(0,i.jsx)(t.Badge,{variant:`secondary`,children:`Core`}),description:`Teach one entry point before helper members.`,content:`Start with Input, Select, DataTable, Card and Badge. Move aliases and advanced members lower in the docs hierarchy.`},{key:`demo`,title:`Real demos beat placeholder previews`,description:`Each route should prove the actual component behavior.`,meta:`Docs`,content:`A docs page should show the real installed component with interactive state, not a generic substitute card.`}],s=[{key:`docs`,title:`Docs updated`,badge:(0,i.jsx)(t.Badge,{variant:`secondary`,children:`Done`}),description:`Public route and CLI snippet verified`,content:`Component detail page, API notes, and install snippet were reviewed together before release.`},{key:`tokens`,title:`Visual tokens synced`,meta:`Review`,description:`No stray radius, border, or surface overrides`,content:`The route uses package tokens directly so the result matches what consumers install.`},{key:`qa`,title:`QA preview checked`,description:`Build and interactive preview passed`,disabled:!0,disabledReason:`Blocked until release candidate is built.`,content:`The component was verified with type-check and production build before push.`}];function c(){let[e,c]=r.useState(`surface`),[l,u]=r.useState([`docs`]),[d,f]=r.useState(`soft`);return(0,i.jsxs)(`div`,{className:`space-y-0`,children:[(0,i.jsxs)(`section`,{className:`pb-6`,children:[(0,i.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.24em] aui-text-muted`,children:`Installed primitive`}),(0,i.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`Accordion keeps dense guidance readable`}),(0,i.jsx)(`p`,{className:`mt-3 max-w-2xl text-sm leading-6 aui-text-muted`,children:`This route uses the exported accordion surface directly. The page adds only spacing and explanation around it.`})]}),(0,i.jsxs)(`section`,{className:a,children:[(0,i.jsx)(`div`,{className:`mb-5 flex flex-wrap gap-2`,children:[`soft`,`default`,`ghost`].map(e=>(0,i.jsx)(`button`,{type:`button`,className:`rounded-full border px-3 py-1.5 text-xs font-medium ${d===e?`border-primary bg-primary/10 text-foreground`:`border-[color:var(--aui-divider)] text-muted-foreground`}`,onClick:()=>f(e),children:e},e))}),(0,i.jsxs)(`div`,{className:`grid gap-6 xl:grid-cols-[1.1fr_0.9fr]`,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`p`,{className:`text-lg font-semibold aui-text-strong`,children:`Documentation flow`}),(0,i.jsx)(`p`,{className:`mt-2 max-w-xl text-sm leading-6 aui-text-muted`,children:`Single-open mode keeps the user focused on one explanation at a time.`}),(0,i.jsx)(n.Accordion,{className:`mt-5`,type:`single`,variant:d,size:`lg`,value:e,onValueChange:c,items:[...o]})]}),(0,i.jsxs)(`div`,{className:`rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4`,children:[(0,i.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`p`,{className:`text-sm font-semibold aui-text-strong`,children:`Current open item`}),(0,i.jsx)(`p`,{className:`mt-1 text-xs aui-text-muted`,children:`Controlled state mirrors route-level docs navigation.`})]}),(0,i.jsx)(t.Badge,{variant:`secondary`,children:Array.isArray(e)?e.join(`, `):e||`none`})]}),(0,i.jsxs)(`div`,{className:`mt-4 space-y-3 text-sm leading-6 aui-text-muted`,children:[(0,i.jsx)(`p`,{children:`Use this mode on component detail pages, FAQs, or policy explanations where only one answer should dominate the layout.`}),(0,i.jsx)(`p`,{children:`The trigger keeps title and helper description together, so content stays understandable even before expansion.`})]})]})]})]}),(0,i.jsx)(`section`,{className:a,children:(0,i.jsxs)(`div`,{className:`grid gap-6 xl:grid-cols-[0.95fr_1.05fr]`,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`p`,{className:`text-lg font-semibold aui-text-strong`,children:`Operational checklist`}),(0,i.jsx)(`p`,{className:`mt-2 max-w-xl text-sm leading-6 aui-text-muted`,children:`Multiple-open mode works better when teams compare several readiness items together.`}),(0,i.jsx)(`div`,{className:`mt-5 flex flex-wrap gap-2`,children:(Array.isArray(l)?l:[]).map(e=>(0,i.jsx)(t.Badge,{variant:`outline`,children:e},e))})]}),(0,i.jsx)(n.Accordion,{className:`xl:mt-8`,type:`multiple`,variant:d,value:l,onValueChange:u,items:s.map((e,t)=>({...e,indicatorPosition:t===0?`start`:`end`}))})]})})]})}exports.AccordionShowcase=c;
@@ -7,12 +7,17 @@ var a = "border-t border-[color:var(--aui-divider)] py-6", o = [
7
7
  {
8
8
  key: "tokens",
9
9
  title: "Theme tokens stay in one place",
10
+ meta: "P0",
10
11
  description: "Radius, color and shadow should not be redefined per route.",
11
12
  content: "Use shared CSS tokens so consumers can adapt the system without fighting deeply nested component styles."
12
13
  },
13
14
  {
14
15
  key: "surface",
15
16
  title: "One canonical public surface",
17
+ badge: /* @__PURE__ */ r(e, {
18
+ variant: "secondary",
19
+ children: "Core"
20
+ }),
16
21
  description: "Teach one entry point before helper members.",
17
22
  content: "Start with Input, Select, DataTable, Card and Badge. Move aliases and advanced members lower in the docs hierarchy."
18
23
  },
@@ -20,18 +25,24 @@ var a = "border-t border-[color:var(--aui-divider)] py-6", o = [
20
25
  key: "demo",
21
26
  title: "Real demos beat placeholder previews",
22
27
  description: "Each route should prove the actual component behavior.",
28
+ meta: "Docs",
23
29
  content: "A docs page should show the real installed component with interactive state, not a generic substitute card."
24
30
  }
25
31
  ], s = [
26
32
  {
27
33
  key: "docs",
28
34
  title: "Docs updated",
35
+ badge: /* @__PURE__ */ r(e, {
36
+ variant: "secondary",
37
+ children: "Done"
38
+ }),
29
39
  description: "Public route and CLI snippet verified",
30
40
  content: "Component detail page, API notes, and install snippet were reviewed together before release."
31
41
  },
32
42
  {
33
43
  key: "tokens",
34
44
  title: "Visual tokens synced",
45
+ meta: "Review",
35
46
  description: "No stray radius, border, or surface overrides",
36
47
  content: "The route uses package tokens directly so the result matches what consumers install."
37
48
  },
@@ -39,11 +50,13 @@ var a = "border-t border-[color:var(--aui-divider)] py-6", o = [
39
50
  key: "qa",
40
51
  title: "QA preview checked",
41
52
  description: "Build and interactive preview passed",
53
+ disabled: !0,
54
+ disabledReason: "Blocked until release candidate is built.",
42
55
  content: "The component was verified with type-check and production build before push."
43
56
  }
44
57
  ];
45
58
  function c() {
46
- let [c, l] = n.useState("surface"), [u, d] = n.useState(["docs"]);
59
+ let [c, l] = n.useState("surface"), [u, d] = n.useState(["docs"]), [f, p] = n.useState("soft");
47
60
  return /* @__PURE__ */ i("div", {
48
61
  className: "space-y-0",
49
62
  children: [
@@ -64,9 +77,21 @@ function c() {
64
77
  })
65
78
  ]
66
79
  }),
67
- /* @__PURE__ */ r("section", {
80
+ /* @__PURE__ */ i("section", {
68
81
  className: a,
69
- children: /* @__PURE__ */ i("div", {
82
+ children: [/* @__PURE__ */ r("div", {
83
+ className: "mb-5 flex flex-wrap gap-2",
84
+ children: [
85
+ "soft",
86
+ "default",
87
+ "ghost"
88
+ ].map((e) => /* @__PURE__ */ r("button", {
89
+ type: "button",
90
+ className: `rounded-full border px-3 py-1.5 text-xs font-medium ${f === e ? "border-primary bg-primary/10 text-foreground" : "border-[color:var(--aui-divider)] text-muted-foreground"}`,
91
+ onClick: () => p(e),
92
+ children: e
93
+ }, e))
94
+ }), /* @__PURE__ */ i("div", {
70
95
  className: "grid gap-6 xl:grid-cols-[1.1fr_0.9fr]",
71
96
  children: [/* @__PURE__ */ i("div", { children: [
72
97
  /* @__PURE__ */ r("p", {
@@ -80,6 +105,8 @@ function c() {
80
105
  /* @__PURE__ */ r(t, {
81
106
  className: "mt-5",
82
107
  type: "single",
108
+ variant: f,
109
+ size: "lg",
83
110
  value: c,
84
111
  onValueChange: l,
85
112
  items: [...o]
@@ -103,7 +130,7 @@ function c() {
103
130
  children: [/* @__PURE__ */ r("p", { children: "Use this mode on component detail pages, FAQs, or policy explanations where only one answer should dominate the layout." }), /* @__PURE__ */ r("p", { children: "The trigger keeps title and helper description together, so content stays understandable even before expansion." })]
104
131
  })]
105
132
  })]
106
- })
133
+ })]
107
134
  }),
108
135
  /* @__PURE__ */ r("section", {
109
136
  className: a,
@@ -128,9 +155,13 @@ function c() {
128
155
  ] }), /* @__PURE__ */ r(t, {
129
156
  className: "xl:mt-8",
130
157
  type: "multiple",
158
+ variant: f,
131
159
  value: u,
132
160
  onValueChange: d,
133
- items: [...s]
161
+ items: s.map((e, t) => ({
162
+ ...e,
163
+ indicatorPosition: t === 0 ? "start" : "end"
164
+ }))
134
165
  })]
135
166
  })
136
167
  })
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/actions/action-menu.cjs"),n=require("../../../components/ui/badge/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("lucide-react"),a=require("react/jsx-runtime");var o=`rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5`;function s({mode:e}){let[s,c]=r.useState(`No action selected`);return(0,a.jsxs)(`div`,{className:`space-y-5`,children:[(0,a.jsx)(`section`,{className:`rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6`,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between`,children:[(0,a.jsxs)(`div`,{className:`max-w-xl`,children:[(0,a.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted`,children:`Compact actions`}),(0,a.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`ActionMenu should hide secondary actions, not critical path actions`}),(0,a.jsx)(`p`,{className:`mt-3 max-w-lg text-sm leading-6 aui-text-muted`,children:`This surface is ideal for row or card actions that matter, but should not dominate the layout.`})]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Contextual`}),(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Secondary actions`})]})]})}),(0,a.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,a.jsx)(`section`,{className:o,children:(0,a.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-strong`,children:`Invoice #2048`}),(0,a.jsx)(`p`,{className:`mt-1 text-sm aui-text-muted`,children:`Acme Growth payment workflow`})]}),(0,a.jsx)(t.ActionMenu,{label:`Invoice actions`,actions:[{key:`open`,label:`Open details`,icon:(0,a.jsx)(i.ExternalLinkIcon,{className:`size-4`}),onSelect:async()=>c(`Opened invoice details`)},{key:`duplicate`,label:`Duplicate`,icon:(0,a.jsx)(i.CopyIcon,{className:`size-4`}),onSelect:async()=>c(`Duplicated invoice workflow`)},{key:`archive`,label:`Archive`,icon:(0,a.jsx)(i.ArchiveIcon,{className:`size-4`}),destructive:!0,onSelect:async()=>c(`Archived invoice workflow`)}]})]})}),(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Last action`}),(0,a.jsx)(`p`,{className:`mt-3 text-base font-medium aui-text-strong`,children:s})]})]}),e===`playground`?(0,a.jsx)(`section`,{className:o,children:(0,a.jsx)(`p`,{className:`text-sm aui-text-muted`,children:`ActionMenu table row, card header yoki compact list itemlarda juda foydali.`})}):null]})}exports.ActionMenuShowcase=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/actions/action-menu.cjs"),n=require("../../../components/ui/badge/index.cjs");let r=require("react");r=e.__toESM(r,1);let i=require("lucide-react"),a=require("react/jsx-runtime");var o=`rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5`;function s({mode:e}){let[s,c]=r.useState(`No action selected`),[l,u]=r.useState(!1);return(0,a.jsxs)(`div`,{className:`space-y-5`,children:[(0,a.jsx)(`section`,{className:`rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6`,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between`,children:[(0,a.jsxs)(`div`,{className:`max-w-xl`,children:[(0,a.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted`,children:`Compact actions`}),(0,a.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`ActionMenu should hide secondary actions, not critical path actions`}),(0,a.jsx)(`p`,{className:`mt-3 max-w-lg text-sm leading-6 aui-text-muted`,children:`This surface is ideal for row or card actions that matter, but should not dominate the layout.`})]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Contextual`}),(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Secondary actions`})]})]})}),(0,a.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,a.jsx)(`section`,{className:o,children:(0,a.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-strong`,children:`Invoice #2048`}),(0,a.jsx)(`p`,{className:`mt-1 text-sm aui-text-muted`,children:`Acme Growth payment workflow`})]}),(0,a.jsx)(t.ActionMenu,{label:`Invoice actions`,closeOnSelect:!l,actions:[{key:`open`,section:`Primary`,label:`Open details`,description:`Jump into the full invoice route`,icon:(0,a.jsx)(i.ExternalLinkIcon,{className:`size-4`}),shortcut:`↵`,onSelect:async()=>c(`Opened invoice details`)},{key:`duplicate`,section:`Primary`,label:`Duplicate`,description:`Create a new workflow from this one`,icon:(0,a.jsx)(i.CopyIcon,{className:`size-4`}),keepOpen:l,onSelect:async()=>c(`Duplicated invoice workflow`)},{key:`archive`,section:`Danger zone`,label:`Archive`,description:`Hide it from active operational queues`,icon:(0,a.jsx)(i.ArchiveIcon,{className:`size-4`}),destructive:!0,onSelect:async()=>c(`Archived invoice workflow`)}]})]})}),(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Last action`}),(0,a.jsx)(`p`,{className:`mt-3 text-base font-medium aui-text-strong`,children:s}),(0,a.jsx)(`button`,{type:`button`,className:`mt-4 rounded-full border border-[color:var(--aui-divider)] px-3 py-1.5 text-xs font-medium`,onClick:()=>u(e=>!e),children:l?`Close on select off`:`Close on select on`})]})]}),e===`playground`?(0,a.jsx)(`section`,{className:o,children:(0,a.jsx)(`p`,{className:`text-sm aui-text-muted`,children:`ActionMenu table row, card header yoki compact list itemlarda juda foydali.`})}):null]})}exports.ActionMenuShowcase=s;
@@ -6,7 +6,7 @@ import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
6
  //#region src/showcase/premium/action-menu/showcase.tsx
7
7
  var c = "rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5";
8
8
  function l({ mode: l }) {
9
- let [u, d] = n.useState("No action selected");
9
+ let [u, d] = n.useState("No action selected"), [f, p] = n.useState(!1);
10
10
  return /* @__PURE__ */ s("div", {
11
11
  className: "space-y-5",
12
12
  children: [
@@ -58,22 +58,31 @@ function l({ mode: l }) {
58
58
  children: "Acme Growth payment workflow"
59
59
  })] }), /* @__PURE__ */ o(e, {
60
60
  label: "Invoice actions",
61
+ closeOnSelect: !f,
61
62
  actions: [
62
63
  {
63
64
  key: "open",
65
+ section: "Primary",
64
66
  label: "Open details",
67
+ description: "Jump into the full invoice route",
65
68
  icon: /* @__PURE__ */ o(a, { className: "size-4" }),
69
+ shortcut: "↵",
66
70
  onSelect: async () => d("Opened invoice details")
67
71
  },
68
72
  {
69
73
  key: "duplicate",
74
+ section: "Primary",
70
75
  label: "Duplicate",
76
+ description: "Create a new workflow from this one",
71
77
  icon: /* @__PURE__ */ o(i, { className: "size-4" }),
78
+ keepOpen: f,
72
79
  onSelect: async () => d("Duplicated invoice workflow")
73
80
  },
74
81
  {
75
82
  key: "archive",
83
+ section: "Danger zone",
76
84
  label: "Archive",
85
+ description: "Hide it from active operational queues",
77
86
  icon: /* @__PURE__ */ o(r, { className: "size-4" }),
78
87
  destructive: !0,
79
88
  onSelect: async () => d("Archived invoice workflow")
@@ -83,13 +92,22 @@ function l({ mode: l }) {
83
92
  })
84
93
  }), /* @__PURE__ */ s("section", {
85
94
  className: c,
86
- children: [/* @__PURE__ */ o("p", {
87
- className: "text-sm font-medium aui-text-muted",
88
- children: "Last action"
89
- }), /* @__PURE__ */ o("p", {
90
- className: "mt-3 text-base font-medium aui-text-strong",
91
- children: u
92
- })]
95
+ children: [
96
+ /* @__PURE__ */ o("p", {
97
+ className: "text-sm font-medium aui-text-muted",
98
+ children: "Last action"
99
+ }),
100
+ /* @__PURE__ */ o("p", {
101
+ className: "mt-3 text-base font-medium aui-text-strong",
102
+ children: u
103
+ }),
104
+ /* @__PURE__ */ o("button", {
105
+ type: "button",
106
+ className: "mt-4 rounded-full border border-[color:var(--aui-divider)] px-3 py-1.5 text-xs font-medium",
107
+ onClick: () => p((e) => !e),
108
+ children: f ? "Close on select off" : "Close on select on"
109
+ })
110
+ ]
93
111
  })]
94
112
  }),
95
113
  l === "playground" ? /* @__PURE__ */ o("section", {
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/display/activity-feed.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("react/jsx-runtime");var i=[{id:`i-1`,title:`Team invited`,description:`New designer joined the workspace.`,time:`2 min ago`,tone:`info`},{id:`i-2`,title:`Deployment succeeded`,description:`Staging deployment passed smoke checks.`,time:`12 min ago`,tone:`success`},{id:`i-3`,title:`Invoice warning`,description:`Payment sync delayed in queue, retrying soon.`,time:`34 min ago`,tone:`warning`},{id:`i-4`,title:`Critical alert`,description:`Webhook failed for production billing endpoint.`,time:`1h ago`,tone:`danger`}],a=[`all`,`success`,`warning`,`info`,`danger`];function o({mode:e}){let[o,s]=n.useState(e===`playground`),[c,l]=n.useState(`all`),u=n.useMemo(()=>c===`all`?i:i.filter(e=>e.tone===c),[c]);return(0,r.jsxs)(`div`,{className:`space-y-4`,children:[(0,r.jsxs)(`div`,{className:`grid gap-2`,children:[(0,r.jsxs)(`div`,{className:`aui-text-muted text-sm`,children:[`Density: `,o?`Compact`:`Spacious`]}),(0,r.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,r.jsx)(`button`,{type:`button`,className:`rounded-lg border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] px-3 py-2 text-sm`,onClick:()=>s(e=>!e),children:o?`Use spacious`:`Use compact`}),a.map(e=>(0,r.jsx)(`button`,{type:`button`,className:`rounded-lg border px-3 py-2 text-sm ${c===e?`aui-surface-strong border-[color:var(--aui-surface-strong)]`:`border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)]`}`,onClick:()=>l(e),children:e},e))]})]}),(0,r.jsx)(t.ActivityFeed,{title:`Recent activity`,description:`System and team events are grouped into one lightweight feed.`,items:u,compact:o,empty:(0,r.jsx)(`span`,{className:`aui-text-muted text-sm`,children:`No matching activity for selected tone.`})})]})}exports.ActivityFeedShowcase=o;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/ui/button/index.cjs"),n=require("../../../components/ui/badge/index.cjs"),r=require("../../../components/display/activity-feed.cjs");let i=require("react");i=e.__toESM(i,1);let a=require("react/jsx-runtime");var o=[{id:`i-1`,title:`Team invited`,description:`New designer joined the workspace.`,time:`2 min ago`,tone:`info`},{id:`i-2`,title:`Deployment succeeded`,description:`Staging deployment passed smoke checks.`,time:`12 min ago`,tone:`success`},{id:`i-3`,title:`Invoice warning`,description:`Payment sync delayed in queue, retrying soon.`,time:`34 min ago`,tone:`warning`},{id:`i-4`,title:`Critical alert`,description:`Webhook failed for production billing endpoint.`,time:`1h ago`,tone:`danger`}],s=[`all`,`success`,`warning`,`info`,`danger`];function c({mode:e}){let[c,l]=i.useState(e===`playground`),[u,d]=i.useState(`all`),[f,p]=i.useState(null),m=i.useMemo(()=>u===`all`?o:o.filter(e=>e.tone===u),[u]);return(0,a.jsxs)(`div`,{className:`space-y-4`,children:[(0,a.jsxs)(`div`,{className:`grid gap-2`,children:[(0,a.jsxs)(`div`,{className:`aui-text-muted text-sm`,children:[`Density: `,c?`Compact`:`Spacious`]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(`button`,{type:`button`,className:`rounded-lg border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] px-3 py-2 text-sm`,onClick:()=>l(e=>!e),children:c?`Use spacious`:`Use compact`}),s.map(e=>(0,a.jsx)(`button`,{type:`button`,className:`rounded-lg border px-3 py-2 text-sm ${u===e?`aui-surface-strong border-[color:var(--aui-surface-strong)]`:`border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)]`}`,onClick:()=>d(e),children:e},e))]})]}),(0,a.jsx)(r.ActivityFeed,{title:`Recent activity`,description:`System and team events are grouped into one lightweight feed.`,items:m.map((e,r)=>({...e,unread:r===0,badge:r===0?(0,a.jsx)(n.Badge,{variant:`secondary`,children:`Unread`}):void 0,interactive:!0,onSelect:()=>p(e.id),actions:(0,a.jsx)(t.Button,{size:`xs`,variant:`ghost`,onClick:()=>p(e.id),children:`Review`})})),compact:c,empty:(0,a.jsx)(`span`,{className:`aui-text-muted text-sm`,children:`No matching activity for selected tone.`})}),(0,a.jsxs)(`div`,{className:`aui-text-muted text-sm`,children:[`Selected item: `,f??`none`]})]})}exports.ActivityFeedShowcase=c;
@@ -1,8 +1,10 @@
1
- import { ActivityFeed as e } from "../../../components/display/activity-feed.js";
2
- import * as t from "react";
3
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
1
+ import { Button as e } from "../../../components/ui/button/index.js";
2
+ import { Badge as t } from "../../../components/ui/badge/index.js";
3
+ import { ActivityFeed as n } from "../../../components/display/activity-feed.js";
4
+ import * as r from "react";
5
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
6
  //#region src/showcase/premium/activity-feed/showcase.tsx
5
- var i = [
7
+ var o = [
6
8
  {
7
9
  id: "i-1",
8
10
  title: "Team invited",
@@ -31,47 +33,69 @@ var i = [
31
33
  time: "1h ago",
32
34
  tone: "danger"
33
35
  }
34
- ], a = [
36
+ ], s = [
35
37
  "all",
36
38
  "success",
37
39
  "warning",
38
40
  "info",
39
41
  "danger"
40
42
  ];
41
- function o({ mode: o }) {
42
- let [s, c] = t.useState(o === "playground"), [l, u] = t.useState("all"), d = t.useMemo(() => l === "all" ? i : i.filter((e) => e.tone === l), [l]);
43
- return /* @__PURE__ */ r("div", {
43
+ function c({ mode: c }) {
44
+ let [l, u] = r.useState(c === "playground"), [d, f] = r.useState("all"), [p, m] = r.useState(null), h = r.useMemo(() => d === "all" ? o : o.filter((e) => e.tone === d), [d]);
45
+ return /* @__PURE__ */ a("div", {
44
46
  className: "space-y-4",
45
- children: [/* @__PURE__ */ r("div", {
46
- className: "grid gap-2",
47
- children: [/* @__PURE__ */ r("div", {
47
+ children: [
48
+ /* @__PURE__ */ a("div", {
49
+ className: "grid gap-2",
50
+ children: [/* @__PURE__ */ a("div", {
51
+ className: "aui-text-muted text-sm",
52
+ children: ["Density: ", l ? "Compact" : "Spacious"]
53
+ }), /* @__PURE__ */ a("div", {
54
+ className: "flex flex-wrap gap-2",
55
+ children: [/* @__PURE__ */ i("button", {
56
+ type: "button",
57
+ className: "rounded-lg border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] px-3 py-2 text-sm",
58
+ onClick: () => u((e) => !e),
59
+ children: l ? "Use spacious" : "Use compact"
60
+ }), s.map((e) => /* @__PURE__ */ i("button", {
61
+ type: "button",
62
+ className: `rounded-lg border px-3 py-2 text-sm ${d === e ? "aui-surface-strong border-[color:var(--aui-surface-strong)]" : "border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)]"}`,
63
+ onClick: () => f(e),
64
+ children: e
65
+ }, e))]
66
+ })]
67
+ }),
68
+ /* @__PURE__ */ i(n, {
69
+ title: "Recent activity",
70
+ description: "System and team events are grouped into one lightweight feed.",
71
+ items: h.map((n, r) => ({
72
+ ...n,
73
+ unread: r === 0,
74
+ badge: r === 0 ? /* @__PURE__ */ i(t, {
75
+ variant: "secondary",
76
+ children: "Unread"
77
+ }) : void 0,
78
+ interactive: !0,
79
+ onSelect: () => m(n.id),
80
+ actions: /* @__PURE__ */ i(e, {
81
+ size: "xs",
82
+ variant: "ghost",
83
+ onClick: () => m(n.id),
84
+ children: "Review"
85
+ })
86
+ })),
87
+ compact: l,
88
+ empty: /* @__PURE__ */ i("span", {
89
+ className: "aui-text-muted text-sm",
90
+ children: "No matching activity for selected tone."
91
+ })
92
+ }),
93
+ /* @__PURE__ */ a("div", {
48
94
  className: "aui-text-muted text-sm",
49
- children: ["Density: ", s ? "Compact" : "Spacious"]
50
- }), /* @__PURE__ */ r("div", {
51
- className: "flex flex-wrap gap-2",
52
- children: [/* @__PURE__ */ n("button", {
53
- type: "button",
54
- className: "rounded-lg border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)] px-3 py-2 text-sm",
55
- onClick: () => c((e) => !e),
56
- children: s ? "Use spacious" : "Use compact"
57
- }), a.map((e) => /* @__PURE__ */ n("button", {
58
- type: "button",
59
- className: `rounded-lg border px-3 py-2 text-sm ${l === e ? "aui-surface-strong border-[color:var(--aui-surface-strong)]" : "border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface)]"}`,
60
- onClick: () => u(e),
61
- children: e
62
- }, e))]
63
- })]
64
- }), /* @__PURE__ */ n(e, {
65
- title: "Recent activity",
66
- description: "System and team events are grouped into one lightweight feed.",
67
- items: d,
68
- compact: s,
69
- empty: /* @__PURE__ */ n("span", {
70
- className: "aui-text-muted text-sm",
71
- children: "No matching activity for selected tone."
95
+ children: ["Selected item: ", p ?? "none"]
72
96
  })
73
- })]
97
+ ]
74
98
  });
75
99
  }
76
100
  //#endregion
77
- export { o as ActivityFeedShowcase };
101
+ export { c as ActivityFeedShowcase };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/ui/button/index.cjs"),n=require("../../../components/ui/badge/index.cjs"),r=require("../../../components/feedback/alert.cjs");let i=require("react");i=e.__toESM(i,1);let a=require("react/jsx-runtime");var o=`rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5`,s=[`info`,`success`,`warning`,`destructive`];function c({mode:e}){let[c,l]=i.useState(2),[u,d]=i.useState(0),f=s[c]??`warning`;return(0,a.jsxs)(`div`,{className:`space-y-5`,children:[(0,a.jsx)(`section`,{className:`rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6`,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between`,children:[(0,a.jsxs)(`div`,{className:`max-w-xl`,children:[(0,a.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted`,children:`Inline feedback`}),(0,a.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`Alert should guide the next user decision`}),(0,a.jsx)(`p`,{className:`mt-3 max-w-lg text-sm leading-6 aui-text-muted`,children:`Use alert when the page needs a visible, contextual message with a clear action. It should feel operational, not decorative.`})]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Context aware`}),(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Action ready`})]})]})}),(0,a.jsx)(r.Alert,{tone:f,title:f===`success`?`Workspace synced`:f===`destructive`?`Action blocked`:f===`info`?`Heads up`:`Review needed`,description:f===`success`?`Changes were saved and the team can continue safely.`:f===`destructive`?`The release cannot continue until billing permissions are restored.`:f===`info`?`Usage data refreshed and one metric changed since your last visit.`:`Billing rules changed and one approval is pending before publish.`,action:(0,a.jsx)(t.Button,{size:`sm`,variant:f===`destructive`?`destructive`:`default`,onClick:()=>d(e=>e+1),children:f===`success`?`Continue`:f===`destructive`?`Fix access`:f===`info`?`Open details`:`Open review`})}),(0,a.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[0.9fr_1.1fr]`,children:[(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Action count`}),(0,a.jsx)(`p`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:u}),(0,a.jsx)(`p`,{className:`mt-2 text-sm leading-6 aui-text-muted`,children:`Alert CTA should resolve a real decision, not just dismiss a message.`})]}),(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Recommended usage`}),(0,a.jsxs)(`div`,{className:`mt-4 space-y-3 text-sm leading-6 aui-text-muted`,children:[(0,a.jsx)(`p`,{children:`Put alert above the affected surface, form, or result area.`}),(0,a.jsx)(`p`,{children:`Prefer one primary action. If the user only needs acknowledgment, use toast instead.`})]})]})]}),e===`playground`?(0,a.jsx)(`section`,{className:o,children:(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[s.map((e,n)=>(0,a.jsx)(t.Button,{size:`sm`,variant:c===n?`default`:`outline`,onClick:()=>l(n),children:e},e)),(0,a.jsx)(t.Button,{size:`sm`,variant:`outline`,onClick:()=>d(0),children:`Reset counter`})]})}):null]})}exports.AlertShowcase=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/ui/button/index.cjs"),n=require("../../../components/ui/badge/index.cjs"),r=require("../../../components/feedback/alert.cjs");let i=require("react");i=e.__toESM(i,1);let a=require("react/jsx-runtime");var o=`rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5`,s=[`info`,`success`,`warning`,`destructive`];function c({mode:e}){let[c,l]=i.useState(2),[u,d]=i.useState(0),[f,p]=i.useState(!0),m=s[c]??`warning`;return(0,a.jsxs)(`div`,{className:`space-y-5`,children:[(0,a.jsx)(`section`,{className:`rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6`,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between`,children:[(0,a.jsxs)(`div`,{className:`max-w-xl`,children:[(0,a.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted`,children:`Inline feedback`}),(0,a.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`Alert should guide the next user decision`}),(0,a.jsx)(`p`,{className:`mt-3 max-w-lg text-sm leading-6 aui-text-muted`,children:`Use alert when the page needs a visible, contextual message with a clear action. It should feel operational, not decorative.`})]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Context aware`}),(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Action ready`})]})]})}),f?(0,a.jsx)(r.Alert,{tone:m,dismissible:!0,onDismiss:()=>p(!1),title:m===`success`?`Workspace synced`:m===`destructive`?`Action blocked`:m===`info`?`Heads up`:`Review needed`,description:m===`success`?`Changes were saved and the team can continue safely.`:m===`destructive`?`The release cannot continue until billing permissions are restored.`:m===`info`?`Usage data refreshed and one metric changed since your last visit.`:`Billing rules changed and one approval is pending before publish.`,action:(0,a.jsx)(t.Button,{size:`sm`,variant:m===`destructive`?`destructive`:`default`,onClick:()=>d(e=>e+1),children:m===`success`?`Continue`:m===`destructive`?`Fix access`:m===`info`?`Open details`:`Open review`})}):(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Alert dismissed`}),(0,a.jsx)(t.Button,{className:`mt-4`,size:`sm`,variant:`outline`,onClick:()=>p(!0),children:`Restore alert`})]}),(0,a.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[0.9fr_1.1fr]`,children:[(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Action count`}),(0,a.jsx)(`p`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:u}),(0,a.jsx)(`p`,{className:`mt-2 text-sm leading-6 aui-text-muted`,children:`Alert CTA should resolve a real decision, not just dismiss a message.`})]}),(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Recommended usage`}),(0,a.jsxs)(`div`,{className:`mt-4 space-y-3 text-sm leading-6 aui-text-muted`,children:[(0,a.jsx)(`p`,{children:`Put alert above the affected surface, form, or result area.`}),(0,a.jsx)(`p`,{children:`Prefer one primary action. If the user only needs acknowledgment, use toast instead.`})]})]})]}),e===`playground`?(0,a.jsx)(`section`,{className:o,children:(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[s.map((e,n)=>(0,a.jsx)(t.Button,{size:`sm`,variant:c===n?`default`:`outline`,onClick:()=>l(n),children:e},e)),(0,a.jsx)(t.Button,{size:`sm`,variant:`outline`,onClick:()=>d(0),children:`Reset counter`}),(0,a.jsx)(t.Button,{size:`sm`,variant:`outline`,onClick:()=>p(!0),children:`Show alert`})]})}):null]})}exports.AlertShowcase=c;
@@ -11,7 +11,7 @@ var o = "rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(-
11
11
  "destructive"
12
12
  ];
13
13
  function c({ mode: c }) {
14
- let [l, u] = r.useState(2), [d, f] = r.useState(0), p = s[l] ?? "warning";
14
+ let [l, u] = r.useState(2), [d, f] = r.useState(0), [p, m] = r.useState(!0), h = s[l] ?? "warning";
15
15
  return /* @__PURE__ */ a("div", {
16
16
  className: "space-y-5",
17
17
  children: [
@@ -49,16 +49,30 @@ function c({ mode: c }) {
49
49
  })]
50
50
  })
51
51
  }),
52
- /* @__PURE__ */ i(n, {
53
- tone: p,
54
- title: p === "success" ? "Workspace synced" : p === "destructive" ? "Action blocked" : p === "info" ? "Heads up" : "Review needed",
55
- description: p === "success" ? "Changes were saved and the team can continue safely." : p === "destructive" ? "The release cannot continue until billing permissions are restored." : p === "info" ? "Usage data refreshed and one metric changed since your last visit." : "Billing rules changed and one approval is pending before publish.",
52
+ p ? /* @__PURE__ */ i(n, {
53
+ tone: h,
54
+ dismissible: !0,
55
+ onDismiss: () => m(!1),
56
+ title: h === "success" ? "Workspace synced" : h === "destructive" ? "Action blocked" : h === "info" ? "Heads up" : "Review needed",
57
+ description: h === "success" ? "Changes were saved and the team can continue safely." : h === "destructive" ? "The release cannot continue until billing permissions are restored." : h === "info" ? "Usage data refreshed and one metric changed since your last visit." : "Billing rules changed and one approval is pending before publish.",
56
58
  action: /* @__PURE__ */ i(e, {
57
59
  size: "sm",
58
- variant: p === "destructive" ? "destructive" : "default",
60
+ variant: h === "destructive" ? "destructive" : "default",
59
61
  onClick: () => f((e) => e + 1),
60
- children: p === "success" ? "Continue" : p === "destructive" ? "Fix access" : p === "info" ? "Open details" : "Open review"
62
+ children: h === "success" ? "Continue" : h === "destructive" ? "Fix access" : h === "info" ? "Open details" : "Open review"
61
63
  })
64
+ }) : /* @__PURE__ */ a("section", {
65
+ className: o,
66
+ children: [/* @__PURE__ */ i("p", {
67
+ className: "text-sm font-medium aui-text-muted",
68
+ children: "Alert dismissed"
69
+ }), /* @__PURE__ */ i(e, {
70
+ className: "mt-4",
71
+ size: "sm",
72
+ variant: "outline",
73
+ onClick: () => m(!0),
74
+ children: "Restore alert"
75
+ })]
62
76
  }),
63
77
  /* @__PURE__ */ a("div", {
64
78
  className: "grid gap-4 xl:grid-cols-[0.9fr_1.1fr]",
@@ -93,17 +107,26 @@ function c({ mode: c }) {
93
107
  className: o,
94
108
  children: /* @__PURE__ */ a("div", {
95
109
  className: "flex flex-wrap gap-2",
96
- children: [s.map((t, n) => /* @__PURE__ */ i(e, {
97
- size: "sm",
98
- variant: l === n ? "default" : "outline",
99
- onClick: () => u(n),
100
- children: t
101
- }, t)), /* @__PURE__ */ i(e, {
102
- size: "sm",
103
- variant: "outline",
104
- onClick: () => f(0),
105
- children: "Reset counter"
106
- })]
110
+ children: [
111
+ s.map((t, n) => /* @__PURE__ */ i(e, {
112
+ size: "sm",
113
+ variant: l === n ? "default" : "outline",
114
+ onClick: () => u(n),
115
+ children: t
116
+ }, t)),
117
+ /* @__PURE__ */ i(e, {
118
+ size: "sm",
119
+ variant: "outline",
120
+ onClick: () => f(0),
121
+ children: "Reset counter"
122
+ }),
123
+ /* @__PURE__ */ i(e, {
124
+ size: "sm",
125
+ variant: "outline",
126
+ onClick: () => m(!0),
127
+ children: "Show alert"
128
+ })
129
+ ]
107
130
  })
108
131
  }) : null
109
132
  ]
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/ui/button/index.cjs"),n=require("../../../components/ui/badge/index.cjs"),r=require("../../../components/overlay/alert-dialog.cjs");let i=require("react");i=e.__toESM(i,1);let a=require("react/jsx-runtime");var o=`rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5`;function s({mode:e}){let[s,c]=i.useState(!1),[l,u]=i.useState(!1),[d,f]=i.useState(`No action confirmed yet`);return(0,a.jsxs)(`div`,{className:`space-y-5`,children:[(0,a.jsx)(`section`,{className:`rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6`,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between`,children:[(0,a.jsxs)(`div`,{className:`max-w-xl`,children:[(0,a.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted`,children:`Destructive gate`}),(0,a.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`AlertDialog should interrupt only when the action has real consequence`}),(0,a.jsx)(`p`,{className:`mt-3 max-w-lg text-sm leading-6 aui-text-muted`,children:`This is not a generic modal. It exists to slow the user down before irreversible, expensive, or risky operations.`})]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`High risk`}),(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Explicit confirmation`})]})]})}),(0,a.jsx)(`section`,{className:o,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Live destructive flow`}),(0,a.jsx)(`p`,{className:`mt-2 text-sm leading-6 aui-text-muted`,children:`Open the dialog and confirm a risky workspace action.`})]}),(0,a.jsx)(t.Button,{variant:`destructive`,onClick:()=>c(!0),children:`Delete workspace`})]})}),(0,a.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Last result`}),(0,a.jsx)(`p`,{className:`mt-3 text-base font-medium aui-text-strong`,children:d})]}),(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Design rule`}),(0,a.jsx)(`p`,{className:`mt-3 text-sm leading-6 aui-text-muted`,children:`Keep alert-dialog copy direct: what will happen, what is lost, and what the user should expect next.`})]})]}),(0,a.jsx)(r.AlertDialog,{open:s,onOpenChange:c,loading:l,title:`Delete workspace?`,description:`This removes active billing rules, API tokens, and member access from the selected workspace.`,actionLabel:`Delete workspace`,onAction:async()=>{u(!0),await new Promise(e=>window.setTimeout(e,450)),u(!1),c(!1),f(`Workspace deletion confirmed`)}}),e===`playground`?(0,a.jsx)(`section`,{className:o,children:(0,a.jsx)(t.Button,{size:`sm`,variant:`outline`,onClick:()=>f(`No action confirmed yet`),children:`Reset result`})}):null]})}exports.AlertDialogShowcase=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../components/ui/button/index.cjs"),n=require("../../../components/ui/badge/index.cjs"),r=require("../../../components/overlay/alert-dialog.cjs");let i=require("react");i=e.__toESM(i,1);let a=require("react/jsx-runtime");var o=`rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5`;function s({mode:e}){let[s,c]=i.useState(!1),[l,u]=i.useState(!1),[d,f]=i.useState(`No action confirmed yet`),[p,m]=i.useState(!0),[h,g]=i.useState(!0),[_,v]=i.useState(!1);return(0,a.jsxs)(`div`,{className:`space-y-5`,children:[(0,a.jsx)(`section`,{className:`rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6`,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between`,children:[(0,a.jsxs)(`div`,{className:`max-w-xl`,children:[(0,a.jsx)(`p`,{className:`text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted`,children:`Destructive gate`}),(0,a.jsx)(`h3`,{className:`mt-3 text-2xl font-semibold tracking-tight aui-text-strong`,children:`AlertDialog should interrupt only when the action has real consequence`}),(0,a.jsx)(`p`,{className:`mt-3 max-w-lg text-sm leading-6 aui-text-muted`,children:`This is not a generic modal. It exists to slow the user down before irreversible, expensive, or risky operations.`})]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`High risk`}),(0,a.jsx)(n.Badge,{variant:`outline`,className:`rounded-full`,children:`Explicit confirmation`})]})]})}),(0,a.jsx)(`section`,{className:o,children:(0,a.jsxs)(`div`,{className:`flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Live destructive flow`}),(0,a.jsx)(`p`,{className:`mt-2 text-sm leading-6 aui-text-muted`,children:`Open the dialog and confirm a risky workspace action.`})]}),(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,a.jsx)(t.Button,{variant:h?`secondary`:`outline`,onClick:()=>g(e=>!e),children:h?`Case sensitive`:`Case insensitive`}),(0,a.jsx)(t.Button,{variant:p?`secondary`:`outline`,onClick:()=>m(e=>!e),children:p?`Typed confirm on`:`Typed confirm off`}),(0,a.jsx)(t.Button,{variant:_?`warning`:`outline`,onClick:()=>v(e=>!e),children:_?`Failure mode on`:`Failure mode off`}),(0,a.jsx)(t.Button,{variant:`destructive`,onClick:()=>c(!0),children:`Delete workspace`})]})]})}),(0,a.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Last result`}),(0,a.jsx)(`p`,{className:`mt-3 text-base font-medium aui-text-strong`,children:d})]}),(0,a.jsxs)(`section`,{className:o,children:[(0,a.jsx)(`p`,{className:`text-sm font-medium aui-text-muted`,children:`Design rule`}),(0,a.jsx)(`p`,{className:`mt-3 text-sm leading-6 aui-text-muted`,children:`Keep alert-dialog copy direct: what will happen, what is lost, and what the user should expect next.`})]})]}),(0,a.jsx)(r.AlertDialog,{open:s,onOpenChange:c,loading:l,title:`Delete workspace?`,description:`This removes active billing rules, API tokens, and member access from the selected workspace.`,actionLabel:`Delete workspace`,confirmValue:p?`DELETE`:void 0,confirmCaseSensitive:h,confirmLabel:`High-risk confirmation`,confirmDescription:`Type DELETE to confirm you want to remove this workspace and its active access.`,severityNote:`Deleting a workspace clears active access, billing rules, and route-level secrets for the current team.`,errorMessage:`Workspace could not be deleted right now. Check dependent billing or retry.`,onAction:async()=>{if(u(!0),await new Promise(e=>window.setTimeout(e,450)),_)throw u(!1),Error(`dependent billing`);u(!1),c(!1),f(`Workspace deletion confirmed`)},onActionError:()=>f(`Workspace deletion failed`)}),e===`playground`?(0,a.jsx)(`section`,{className:o,children:(0,a.jsx)(t.Button,{size:`sm`,variant:`outline`,onClick:()=>f(`No action confirmed yet`),children:`Reset result`})}):null]})}exports.AlertDialogShowcase=s;
@@ -6,7 +6,7 @@ import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
6
  //#region src/showcase/premium/alert-dialog/showcase.tsx
7
7
  var o = "rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5";
8
8
  function s({ mode: s }) {
9
- let [c, l] = r.useState(!1), [u, d] = r.useState(!1), [f, p] = r.useState("No action confirmed yet");
9
+ let [c, l] = r.useState(!1), [u, d] = r.useState(!1), [f, p] = r.useState("No action confirmed yet"), [m, h] = r.useState(!0), [g, _] = r.useState(!0), [v, y] = r.useState(!1);
10
10
  return /* @__PURE__ */ a("div", {
11
11
  className: "space-y-5",
12
12
  children: [
@@ -54,10 +54,30 @@ function s({ mode: s }) {
54
54
  }), /* @__PURE__ */ i("p", {
55
55
  className: "mt-2 text-sm leading-6 aui-text-muted",
56
56
  children: "Open the dialog and confirm a risky workspace action."
57
- })] }), /* @__PURE__ */ i(e, {
58
- variant: "destructive",
59
- onClick: () => l(!0),
60
- children: "Delete workspace"
57
+ })] }), /* @__PURE__ */ a("div", {
58
+ className: "flex flex-wrap gap-2",
59
+ children: [
60
+ /* @__PURE__ */ i(e, {
61
+ variant: g ? "secondary" : "outline",
62
+ onClick: () => _((e) => !e),
63
+ children: g ? "Case sensitive" : "Case insensitive"
64
+ }),
65
+ /* @__PURE__ */ i(e, {
66
+ variant: m ? "secondary" : "outline",
67
+ onClick: () => h((e) => !e),
68
+ children: m ? "Typed confirm on" : "Typed confirm off"
69
+ }),
70
+ /* @__PURE__ */ i(e, {
71
+ variant: v ? "warning" : "outline",
72
+ onClick: () => y((e) => !e),
73
+ children: v ? "Failure mode on" : "Failure mode off"
74
+ }),
75
+ /* @__PURE__ */ i(e, {
76
+ variant: "destructive",
77
+ onClick: () => l(!0),
78
+ children: "Delete workspace"
79
+ })
80
+ ]
61
81
  })]
62
82
  })
63
83
  }),
@@ -90,9 +110,17 @@ function s({ mode: s }) {
90
110
  title: "Delete workspace?",
91
111
  description: "This removes active billing rules, API tokens, and member access from the selected workspace.",
92
112
  actionLabel: "Delete workspace",
113
+ confirmValue: m ? "DELETE" : void 0,
114
+ confirmCaseSensitive: g,
115
+ confirmLabel: "High-risk confirmation",
116
+ confirmDescription: "Type DELETE to confirm you want to remove this workspace and its active access.",
117
+ severityNote: "Deleting a workspace clears active access, billing rules, and route-level secrets for the current team.",
118
+ errorMessage: "Workspace could not be deleted right now. Check dependent billing or retry.",
93
119
  onAction: async () => {
94
- d(!0), await new Promise((e) => window.setTimeout(e, 450)), d(!1), l(!1), p("Workspace deletion confirmed");
95
- }
120
+ if (d(!0), await new Promise((e) => window.setTimeout(e, 450)), v) throw d(!1), Error("dependent billing");
121
+ d(!1), l(!1), p("Workspace deletion confirmed");
122
+ },
123
+ onActionError: () => p("Workspace deletion failed")
96
124
  }),
97
125
  s === "playground" ? /* @__PURE__ */ i("section", {
98
126
  className: o,
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e={code:`import { useState } from "react"
2
- import { AsyncMultiSelect } from "@/index"
2
+ import { AsyncSelect } from "tembro"
3
3
 
4
4
  const projectOptions = [
5
5
  { value: "analytics", label: "Analytics", description: "Dashboards and reports" },
@@ -22,7 +22,8 @@ export function Example() {
22
22
 
23
23
  return (
24
24
  <div className="space-y-3">
25
- <AsyncMultiSelect
25
+ <AsyncSelect
26
+ isMulti
26
27
  value={selected}
27
28
  onValueChange={(values) => setSelected(values)}
28
29
  loadOptions={loadProjectOptions}
@@ -37,4 +38,4 @@ export function Example() {
37
38
  </div>
38
39
  </div>
39
40
  )
40
- }`,htmlCode:`<button data-slot="async-multiselect-trigger">Choose modules</button>`,cliCommand:`npx tembro add async-multi-select`,highlights:[`Multiple selected tags`,`maxSelected guard`,`select-all action`,`remove by tag/checkbox`],relatedBlockSlugs:[`users-table`,`crm-dashboard`,`settings-form`],scenarios:[{title:`Project scope`,description:`Attach multiple modules to one workspace or permission set.`},{title:`Max selected`,description:`Limit selections to keep downstream payloads predictable.`},{title:`Keyboard remove`,description:`Support tag cleanup for power users in dense inputs.`},{title:`Async updates`,description:`Keep tags synced with changing remote data.`}],capabilityNotes:["Use `AsyncMultiSelect` for sparse multi-select forms where dataset changes over time.","Show clear limits with `maxSelected` and help text from validation.","`onValueChange` returns both ids and resolved options when custom payloads are needed.",`Disable close-on-select when users are likely to make batch picks.`]};exports.asyncMultiSelectMock=e;
41
+ }`,htmlCode:`<button data-slot="async-multiselect-trigger">Choose modules</button>`,cliCommand:`npx tembro add async-select`,highlights:[`Multi-value remote tags`,`maxSelected guard`,`select-all action`,`canonical isMulti flow`],relatedBlockSlugs:[`users-table`,`crm-dashboard`,`settings-form`],scenarios:[{title:`Project scope`,description:`Attach multiple modules to one workspace or permission set.`},{title:`Max selected`,description:`Limit selections to keep downstream payloads predictable.`},{title:`Keyboard remove`,description:`Support tag cleanup for power users in dense inputs.`},{title:`Async updates`,description:`Keep tags synced with changing remote data.`}],capabilityNotes:["Prefer `AsyncSelect isMulti` for sparse multi-select forms where dataset changes over time.","Show clear limits with `maxSelected` and help text from validation.","`onValueChange` returns both ids and resolved options when custom payloads are needed.",`Disable close-on-select when users are likely to make batch picks.`]};exports.asyncMultiSelectMock=e;
@@ -1,13 +1,13 @@
1
1
  //#region src/showcase/premium/async-multi-select/mock.ts
2
2
  var e = {
3
- code: "import { useState } from \"react\"\nimport { AsyncMultiSelect } from \"@/index\"\n\nconst projectOptions = [\n { value: \"analytics\", label: \"Analytics\", description: \"Dashboards and reports\" },\n { value: \"billing\", label: \"Billing\", description: \"Invoices and subscriptions\" },\n { value: \"support\", label: \"Support\", description: \"Customer tickets\" },\n { value: \"security\", label: \"Security\", description: \"Permissions and audit\" },\n { value: \"search\", label: \"Search\", description: \"Discovery and recommendations\" },\n { value: \"archive\", label: \"Archive\", description: \"Legacy read-only project\", disabled: true },\n]\n\nconst loadProjectOptions = async (search: string) => {\n await new Promise((resolve) => setTimeout(resolve, 300))\n const query = search.trim().toLowerCase()\n if (!query) return projectOptions\n return projectOptions.filter((option) => String(option.label ?? \"\").toLowerCase().includes(query))\n}\n\nexport function Example() {\n const [selected, setSelected] = useState<string[]>([\"analytics\"])\n\n return (\n <div className=\"space-y-3\">\n <AsyncMultiSelect\n value={selected}\n onValueChange={(values) => setSelected(values)}\n loadOptions={loadProjectOptions}\n loadSelectedOptions={async (values) => projectOptions.filter((item) => values.includes(item.value))}\n maxSelected={3}\n closeOnSelect={false}\n showSelectAll\n clearable\n />\n <div className=\"rounded-2xl border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] px-4 py-3 text-sm aui-text-muted\">\n Modules: <strong>{selected.length}</strong> selected\n </div>\n </div>\n )\n}",
3
+ code: "import { useState } from \"react\"\nimport { AsyncSelect } from \"tembro\"\n\nconst projectOptions = [\n { value: \"analytics\", label: \"Analytics\", description: \"Dashboards and reports\" },\n { value: \"billing\", label: \"Billing\", description: \"Invoices and subscriptions\" },\n { value: \"support\", label: \"Support\", description: \"Customer tickets\" },\n { value: \"security\", label: \"Security\", description: \"Permissions and audit\" },\n { value: \"search\", label: \"Search\", description: \"Discovery and recommendations\" },\n { value: \"archive\", label: \"Archive\", description: \"Legacy read-only project\", disabled: true },\n]\n\nconst loadProjectOptions = async (search: string) => {\n await new Promise((resolve) => setTimeout(resolve, 300))\n const query = search.trim().toLowerCase()\n if (!query) return projectOptions\n return projectOptions.filter((option) => String(option.label ?? \"\").toLowerCase().includes(query))\n}\n\nexport function Example() {\n const [selected, setSelected] = useState<string[]>([\"analytics\"])\n\n return (\n <div className=\"space-y-3\">\n <AsyncSelect\n isMulti\n value={selected}\n onValueChange={(values) => setSelected(values)}\n loadOptions={loadProjectOptions}\n loadSelectedOptions={async (values) => projectOptions.filter((item) => values.includes(item.value))}\n maxSelected={3}\n closeOnSelect={false}\n showSelectAll\n clearable\n />\n <div className=\"rounded-2xl border border-[color:var(--aui-surface-border)] bg-[color:var(--aui-surface-muted)] px-4 py-3 text-sm aui-text-muted\">\n Modules: <strong>{selected.length}</strong> selected\n </div>\n </div>\n )\n}",
4
4
  htmlCode: "<button data-slot=\"async-multiselect-trigger\">Choose modules</button>",
5
- cliCommand: "npx tembro add async-multi-select",
5
+ cliCommand: "npx tembro add async-select",
6
6
  highlights: [
7
- "Multiple selected tags",
7
+ "Multi-value remote tags",
8
8
  "maxSelected guard",
9
9
  "select-all action",
10
- "remove by tag/checkbox"
10
+ "canonical isMulti flow"
11
11
  ],
12
12
  relatedBlockSlugs: [
13
13
  "users-table",
@@ -33,7 +33,7 @@ var e = {
33
33
  }
34
34
  ],
35
35
  capabilityNotes: [
36
- "Use `AsyncMultiSelect` for sparse multi-select forms where dataset changes over time.",
36
+ "Prefer `AsyncSelect isMulti` for sparse multi-select forms where dataset changes over time.",
37
37
  "Show clear limits with `maxSelected` and help text from validation.",
38
38
  "`onValueChange` returns both ids and resolved options when custom payloads are needed.",
39
39
  "Disable close-on-select when users are likely to make batch picks."
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../components/inputs/async-select.cjs");let t=require("react"),n=require("react/jsx-runtime");var r=[{value:`inbox`,label:`Inbox`},{value:`analytics`,label:`Analytics`},{value:`billing`,label:`Billing`},{value:`support`,label:`Support`}],i=async e=>(await new Promise(e=>setTimeout(e,240)),e?r.filter(t=>String(t.label??``).toLowerCase().includes(e.toLowerCase())):r);function a(){let[r,a]=(0,t.useState)([`analytics`]);return(0,n.jsxs)(`div`,{className:`space-y-4`,children:[(0,n.jsxs)(`div`,{className:`rounded-[20px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4`,children:[(0,n.jsx)(`p`,{className:`text-sm font-medium aui-text-strong`,children:`AsyncMultiSelect is the multi-value remote member`}),(0,n.jsx)(`p`,{className:`mt-2 text-sm leading-6 aui-text-muted`,children:`Reach for it only when one Select surface must support remote search, visible tags, and multiple chosen values together.`})]}),(0,n.jsx)(e.AsyncMultiSelect,{value:r,onValueChange:e=>a(e),loadOptions:i,maxSelected:3,showSelectAll:!0}),(0,n.jsxs)(`p`,{className:`aui-text-muted text-sm`,children:[`Selected count: `,r.length]})]})}exports.AsyncMultiSelectShowcase=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../components/inputs/async-select.cjs");let t=require("react"),n=require("react/jsx-runtime");var r=[{value:`inbox`,label:`Inbox`},{value:`analytics`,label:`Analytics`},{value:`billing`,label:`Billing`},{value:`support`,label:`Support`}],i=async e=>(await new Promise(e=>setTimeout(e,240)),e?r.filter(t=>String(t.label??``).toLowerCase().includes(e.toLowerCase())):r);function a(){let[r,a]=(0,t.useState)([`analytics`]);return(0,n.jsxs)(`div`,{className:`space-y-4`,children:[(0,n.jsxs)(`div`,{className:`rounded-[20px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4`,children:[(0,n.jsx)(`p`,{className:`text-sm font-medium aui-text-strong`,children:`Use AsyncSelect with isMulti for remote multi-value flows`}),(0,n.jsx)(`p`,{className:`mt-2 text-sm leading-6 aui-text-muted`,children:`Keep the Select family centered on one remote surface. This route documents the multi-value mode, but new code should stay on AsyncSelect.`})]}),(0,n.jsx)(e.AsyncSelect,{isMulti:!0,value:r,onValueChange:e=>a(e),loadOptions:i,maxSelected:3,showSelectAll:!0}),(0,n.jsxs)(`p`,{className:`aui-text-muted text-sm`,children:[`Selected count: `,r.length]})]})}exports.AsyncMultiSelectShowcase=a;