@pipe0/react 0.0.4 → 0.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 (307) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +58 -2
  3. package/dist/components/compound/pipe-catalog/active-filters.d.mts +7 -10
  4. package/dist/components/compound/pipe-catalog/active-filters.d.mts.map +1 -1
  5. package/dist/components/compound/pipe-catalog/active-filters.mjs +22 -18
  6. package/dist/components/compound/pipe-catalog/active-filters.mjs.map +1 -1
  7. package/dist/components/compound/pipe-catalog/card.d.mts +3 -12
  8. package/dist/components/compound/pipe-catalog/card.d.mts.map +1 -1
  9. package/dist/components/compound/pipe-catalog/card.mjs +28 -25
  10. package/dist/components/compound/pipe-catalog/card.mjs.map +1 -1
  11. package/dist/components/compound/pipe-catalog/category-filter.d.mts +6 -13
  12. package/dist/components/compound/pipe-catalog/category-filter.d.mts.map +1 -1
  13. package/dist/components/compound/pipe-catalog/category-filter.mjs +12 -13
  14. package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -1
  15. package/dist/components/compound/pipe-catalog/column-filter.d.mts +6 -14
  16. package/dist/components/compound/pipe-catalog/column-filter.d.mts.map +1 -1
  17. package/dist/components/compound/pipe-catalog/column-filter.mjs +9 -9
  18. package/dist/components/compound/pipe-catalog/column-filter.mjs.map +1 -1
  19. package/dist/components/compound/pipe-catalog/empty.d.mts +5 -10
  20. package/dist/components/compound/pipe-catalog/empty.d.mts.map +1 -1
  21. package/dist/components/compound/pipe-catalog/empty.mjs +12 -14
  22. package/dist/components/compound/pipe-catalog/empty.mjs.map +1 -1
  23. package/dist/components/compound/pipe-catalog/index.d.mts +1 -1
  24. package/dist/components/compound/pipe-catalog/input-field-filter.d.mts +3 -3
  25. package/dist/components/compound/pipe-catalog/input-field-filter.d.mts.map +1 -1
  26. package/dist/components/compound/pipe-catalog/input-field-filter.mjs.map +1 -1
  27. package/dist/components/compound/pipe-catalog/list.d.mts +8 -25
  28. package/dist/components/compound/pipe-catalog/list.d.mts.map +1 -1
  29. package/dist/components/compound/pipe-catalog/list.mjs +14 -14
  30. package/dist/components/compound/pipe-catalog/list.mjs.map +1 -1
  31. package/dist/components/compound/pipe-catalog/output-field-filter.d.mts +3 -3
  32. package/dist/components/compound/pipe-catalog/output-field-filter.d.mts.map +1 -1
  33. package/dist/components/compound/pipe-catalog/output-field-filter.mjs.map +1 -1
  34. package/dist/components/compound/pipe-catalog/provider-filter.d.mts +3 -3
  35. package/dist/components/compound/pipe-catalog/provider-filter.d.mts.map +1 -1
  36. package/dist/components/compound/pipe-catalog/provider-filter.mjs.map +1 -1
  37. package/dist/components/compound/pipe-catalog/root.d.mts +6 -6
  38. package/dist/components/compound/pipe-catalog/root.d.mts.map +1 -1
  39. package/dist/components/compound/pipe-catalog/root.mjs +2 -2
  40. package/dist/components/compound/pipe-catalog/root.mjs.map +1 -1
  41. package/dist/components/compound/pipe-catalog/search-filter.d.mts +5 -9
  42. package/dist/components/compound/pipe-catalog/search-filter.d.mts.map +1 -1
  43. package/dist/components/compound/pipe-catalog/search-filter.mjs +9 -10
  44. package/dist/components/compound/pipe-catalog/search-filter.mjs.map +1 -1
  45. package/dist/components/compound/pipe-catalog/tag-filter.d.mts +3 -3
  46. package/dist/components/compound/pipe-catalog/tag-filter.d.mts.map +1 -1
  47. package/dist/components/compound/pipe-catalog/tag-filter.mjs.map +1 -1
  48. package/dist/components/compound/pipe-form/content.d.mts +6 -3
  49. package/dist/components/compound/pipe-form/content.d.mts.map +1 -1
  50. package/dist/components/compound/pipe-form/content.mjs +17 -25
  51. package/dist/components/compound/pipe-form/content.mjs.map +1 -1
  52. package/dist/components/compound/pipe-form/errors.d.mts +23 -0
  53. package/dist/components/compound/pipe-form/errors.d.mts.map +1 -0
  54. package/dist/components/compound/pipe-form/errors.mjs +40 -0
  55. package/dist/components/compound/pipe-form/errors.mjs.map +1 -0
  56. package/dist/components/compound/pipe-form/footer.d.mts +7 -7
  57. package/dist/components/compound/pipe-form/footer.d.mts.map +1 -1
  58. package/dist/components/compound/pipe-form/footer.mjs +11 -6
  59. package/dist/components/compound/pipe-form/footer.mjs.map +1 -1
  60. package/dist/components/compound/pipe-form/header.d.mts +7 -7
  61. package/dist/components/compound/pipe-form/header.d.mts.map +1 -1
  62. package/dist/components/compound/pipe-form/header.mjs +11 -6
  63. package/dist/components/compound/pipe-form/header.mjs.map +1 -1
  64. package/dist/components/compound/pipe-form/index.d.mts +2 -1
  65. package/dist/components/compound/pipe-form/root.d.mts +18 -11
  66. package/dist/components/compound/pipe-form/root.d.mts.map +1 -1
  67. package/dist/components/compound/pipe-form/root.mjs +21 -27
  68. package/dist/components/compound/pipe-form/root.mjs.map +1 -1
  69. package/dist/components/compound/pipe-form/submit-button.d.mts +15 -4
  70. package/dist/components/compound/pipe-form/submit-button.d.mts.map +1 -1
  71. package/dist/components/compound/pipe-form/submit-button.mjs +23 -8
  72. package/dist/components/compound/pipe-form/submit-button.mjs.map +1 -1
  73. package/dist/components/compound/pipe-form/title.d.mts +9 -8
  74. package/dist/components/compound/pipe-form/title.d.mts.map +1 -1
  75. package/dist/components/compound/pipe-form/title.mjs +11 -6
  76. package/dist/components/compound/pipe-form/title.mjs.map +1 -1
  77. package/dist/components/compound/search-catalog/active-filters.d.mts +7 -10
  78. package/dist/components/compound/search-catalog/active-filters.d.mts.map +1 -1
  79. package/dist/components/compound/search-catalog/active-filters.mjs +22 -18
  80. package/dist/components/compound/search-catalog/active-filters.mjs.map +1 -1
  81. package/dist/components/compound/search-catalog/card.d.mts +4 -13
  82. package/dist/components/compound/search-catalog/card.d.mts.map +1 -1
  83. package/dist/components/compound/search-catalog/card.mjs +31 -28
  84. package/dist/components/compound/search-catalog/card.mjs.map +1 -1
  85. package/dist/components/compound/search-catalog/category-filter.d.mts +7 -13
  86. package/dist/components/compound/search-catalog/category-filter.d.mts.map +1 -1
  87. package/dist/components/compound/search-catalog/category-filter.mjs +12 -13
  88. package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -1
  89. package/dist/components/compound/search-catalog/column-filter.d.mts +6 -10
  90. package/dist/components/compound/search-catalog/column-filter.d.mts.map +1 -1
  91. package/dist/components/compound/search-catalog/column-filter.mjs +9 -9
  92. package/dist/components/compound/search-catalog/column-filter.mjs.map +1 -1
  93. package/dist/components/compound/search-catalog/empty.d.mts +5 -10
  94. package/dist/components/compound/search-catalog/empty.d.mts.map +1 -1
  95. package/dist/components/compound/search-catalog/empty.mjs +12 -14
  96. package/dist/components/compound/search-catalog/empty.mjs.map +1 -1
  97. package/dist/components/compound/search-catalog/index.d.mts +1 -1
  98. package/dist/components/compound/search-catalog/list.d.mts +8 -10
  99. package/dist/components/compound/search-catalog/list.d.mts.map +1 -1
  100. package/dist/components/compound/search-catalog/list.mjs +14 -14
  101. package/dist/components/compound/search-catalog/list.mjs.map +1 -1
  102. package/dist/components/compound/search-catalog/output-field-filter.d.mts +3 -3
  103. package/dist/components/compound/search-catalog/output-field-filter.d.mts.map +1 -1
  104. package/dist/components/compound/search-catalog/output-field-filter.mjs.map +1 -1
  105. package/dist/components/compound/search-catalog/provider-filter.d.mts +3 -3
  106. package/dist/components/compound/search-catalog/provider-filter.d.mts.map +1 -1
  107. package/dist/components/compound/search-catalog/provider-filter.mjs.map +1 -1
  108. package/dist/components/compound/search-catalog/root.d.mts +6 -6
  109. package/dist/components/compound/search-catalog/root.d.mts.map +1 -1
  110. package/dist/components/compound/search-catalog/root.mjs +2 -2
  111. package/dist/components/compound/search-catalog/root.mjs.map +1 -1
  112. package/dist/components/compound/search-catalog/search-filter.d.mts +5 -9
  113. package/dist/components/compound/search-catalog/search-filter.d.mts.map +1 -1
  114. package/dist/components/compound/search-catalog/search-filter.mjs +9 -10
  115. package/dist/components/compound/search-catalog/search-filter.mjs.map +1 -1
  116. package/dist/components/compound/search-catalog/tag-filter.d.mts +3 -3
  117. package/dist/components/compound/search-catalog/tag-filter.d.mts.map +1 -1
  118. package/dist/components/compound/search-catalog/tag-filter.mjs.map +1 -1
  119. package/dist/components/compound/search-form/content.d.mts +6 -3
  120. package/dist/components/compound/search-form/content.d.mts.map +1 -1
  121. package/dist/components/compound/search-form/content.mjs +17 -25
  122. package/dist/components/compound/search-form/content.mjs.map +1 -1
  123. package/dist/components/compound/search-form/errors.d.mts +23 -0
  124. package/dist/components/compound/search-form/errors.d.mts.map +1 -0
  125. package/dist/components/compound/search-form/errors.mjs +40 -0
  126. package/dist/components/compound/search-form/errors.mjs.map +1 -0
  127. package/dist/components/compound/search-form/footer.d.mts +7 -7
  128. package/dist/components/compound/search-form/footer.d.mts.map +1 -1
  129. package/dist/components/compound/search-form/footer.mjs +11 -6
  130. package/dist/components/compound/search-form/footer.mjs.map +1 -1
  131. package/dist/components/compound/search-form/header.d.mts +7 -7
  132. package/dist/components/compound/search-form/header.d.mts.map +1 -1
  133. package/dist/components/compound/search-form/header.mjs +11 -6
  134. package/dist/components/compound/search-form/header.mjs.map +1 -1
  135. package/dist/components/compound/search-form/index.d.mts +2 -1
  136. package/dist/components/compound/search-form/root.d.mts +19 -12
  137. package/dist/components/compound/search-form/root.d.mts.map +1 -1
  138. package/dist/components/compound/search-form/root.mjs +21 -27
  139. package/dist/components/compound/search-form/root.mjs.map +1 -1
  140. package/dist/components/compound/search-form/submit-button.d.mts +15 -4
  141. package/dist/components/compound/search-form/submit-button.d.mts.map +1 -1
  142. package/dist/components/compound/search-form/submit-button.mjs +23 -8
  143. package/dist/components/compound/search-form/submit-button.mjs.map +1 -1
  144. package/dist/components/compound/search-form/title.d.mts +9 -8
  145. package/dist/components/compound/search-form/title.d.mts.map +1 -1
  146. package/dist/components/compound/search-form/title.mjs +11 -6
  147. package/dist/components/compound/search-form/title.mjs.map +1 -1
  148. package/dist/components/compound/searches-catalog/active-filters.d.mts +7 -10
  149. package/dist/components/compound/searches-catalog/active-filters.d.mts.map +1 -1
  150. package/dist/components/compound/searches-catalog/active-filters.mjs +22 -18
  151. package/dist/components/compound/searches-catalog/active-filters.mjs.map +1 -1
  152. package/dist/components/compound/searches-catalog/card.d.mts +5 -6
  153. package/dist/components/compound/searches-catalog/card.d.mts.map +1 -1
  154. package/dist/components/compound/searches-catalog/card.mjs +38 -28
  155. package/dist/components/compound/searches-catalog/card.mjs.map +1 -1
  156. package/dist/components/compound/searches-catalog/category-filter.d.mts +7 -13
  157. package/dist/components/compound/searches-catalog/category-filter.d.mts.map +1 -1
  158. package/dist/components/compound/searches-catalog/category-filter.mjs +12 -13
  159. package/dist/components/compound/searches-catalog/category-filter.mjs.map +1 -1
  160. package/dist/components/compound/searches-catalog/column-filter.d.mts +6 -10
  161. package/dist/components/compound/searches-catalog/column-filter.d.mts.map +1 -1
  162. package/dist/components/compound/searches-catalog/column-filter.mjs +9 -9
  163. package/dist/components/compound/searches-catalog/column-filter.mjs.map +1 -1
  164. package/dist/components/compound/searches-catalog/empty.d.mts +5 -10
  165. package/dist/components/compound/searches-catalog/empty.d.mts.map +1 -1
  166. package/dist/components/compound/searches-catalog/empty.mjs +12 -14
  167. package/dist/components/compound/searches-catalog/empty.mjs.map +1 -1
  168. package/dist/components/compound/searches-catalog/index.d.mts +1 -1
  169. package/dist/components/compound/searches-catalog/list.d.mts +8 -10
  170. package/dist/components/compound/searches-catalog/list.d.mts.map +1 -1
  171. package/dist/components/compound/searches-catalog/list.mjs +14 -14
  172. package/dist/components/compound/searches-catalog/list.mjs.map +1 -1
  173. package/dist/components/compound/searches-catalog/output-field-filter.d.mts +3 -3
  174. package/dist/components/compound/searches-catalog/output-field-filter.d.mts.map +1 -1
  175. package/dist/components/compound/searches-catalog/output-field-filter.mjs.map +1 -1
  176. package/dist/components/compound/searches-catalog/provider-filter.d.mts +3 -3
  177. package/dist/components/compound/searches-catalog/provider-filter.d.mts.map +1 -1
  178. package/dist/components/compound/searches-catalog/provider-filter.mjs.map +1 -1
  179. package/dist/components/compound/searches-catalog/root.d.mts +6 -6
  180. package/dist/components/compound/searches-catalog/root.d.mts.map +1 -1
  181. package/dist/components/compound/searches-catalog/root.mjs +2 -2
  182. package/dist/components/compound/searches-catalog/root.mjs.map +1 -1
  183. package/dist/components/compound/searches-catalog/search-filter.d.mts +5 -9
  184. package/dist/components/compound/searches-catalog/search-filter.d.mts.map +1 -1
  185. package/dist/components/compound/searches-catalog/search-filter.mjs +9 -10
  186. package/dist/components/compound/searches-catalog/search-filter.mjs.map +1 -1
  187. package/dist/components/compound/searches-catalog/tag-filter.d.mts +3 -3
  188. package/dist/components/compound/searches-catalog/tag-filter.d.mts.map +1 -1
  189. package/dist/components/compound/searches-catalog/tag-filter.mjs.map +1 -1
  190. package/dist/components/defaults/adapters/index.mjs +2 -2
  191. package/dist/components/defaults/adapters/index.mjs.map +1 -1
  192. package/dist/components/defaults/adapters/json-extraction-input.mjs +291 -199
  193. package/dist/components/defaults/adapters/json-extraction-input.mjs.map +1 -1
  194. package/dist/components/defaults/adapters/{pipes-trigger-input.mjs → pipes-run-if-input.mjs} +32 -32
  195. package/dist/components/defaults/adapters/pipes-run-if-input.mjs.map +1 -0
  196. package/dist/components/defaults/adapters/providers-input.mjs +221 -13
  197. package/dist/components/defaults/adapters/providers-input.mjs.map +1 -1
  198. package/dist/components/defaults/catalog/card-primitives.d.mts +14 -24
  199. package/dist/components/defaults/catalog/card-primitives.d.mts.map +1 -1
  200. package/dist/components/defaults/catalog/card-primitives.mjs +19 -19
  201. package/dist/components/defaults/catalog/card-primitives.mjs.map +1 -1
  202. package/dist/components/defaults/catalog/layout.mjs +7 -10
  203. package/dist/components/defaults/catalog/layout.mjs.map +1 -1
  204. package/dist/components/defaults/layout/field-wrapper.d.mts +2 -2
  205. package/dist/components/defaults/layout/field-wrapper.d.mts.map +1 -1
  206. package/dist/components/defaults/layout/field-wrapper.mjs +5 -2
  207. package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -1
  208. package/dist/components/defaults/layout/group.d.mts +4 -4
  209. package/dist/components/defaults/layout/group.d.mts.map +1 -1
  210. package/dist/components/defaults/layout/group.mjs +69 -54
  211. package/dist/components/defaults/layout/group.mjs.map +1 -1
  212. package/dist/components/defaults/layout/section.d.mts +9 -4
  213. package/dist/components/defaults/layout/section.d.mts.map +1 -1
  214. package/dist/components/defaults/layout/section.mjs +11 -13
  215. package/dist/components/defaults/layout/section.mjs.map +1 -1
  216. package/dist/components/field-renderer.d.mts.map +1 -1
  217. package/dist/components/field-renderer.mjs +1 -1
  218. package/dist/components/field-renderer.mjs.map +1 -1
  219. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs +30 -15
  220. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs.map +1 -1
  221. package/dist/components/internal/icons.mjs +36 -1
  222. package/dist/components/internal/icons.mjs.map +1 -1
  223. package/dist/components/internal/multi-select-popover-trigger.mjs +0 -1
  224. package/dist/components/internal/multi-select-popover-trigger.mjs.map +1 -1
  225. package/dist/components/internal/tag-chip-decoration.mjs +15 -0
  226. package/dist/components/internal/tag-chip-decoration.mjs.map +1 -1
  227. package/dist/components/ui/badge.mjs +1 -1
  228. package/dist/components/ui/button.d.mts +2 -2
  229. package/dist/components/ui/combobox.mjs +0 -1
  230. package/dist/components/ui/combobox.mjs.map +1 -1
  231. package/dist/context/pipe-catalog-card-context.d.mts +7 -0
  232. package/dist/context/pipe-catalog-card-context.d.mts.map +1 -1
  233. package/dist/context/pipe-catalog-card-context.mjs.map +1 -1
  234. package/dist/context/pipe-form-context.d.mts +17 -3
  235. package/dist/context/pipe-form-context.d.mts.map +1 -1
  236. package/dist/context/pipe-form-context.mjs.map +1 -1
  237. package/dist/context/search-catalog-card-context.d.mts +8 -0
  238. package/dist/context/search-catalog-card-context.d.mts.map +1 -1
  239. package/dist/context/search-catalog-card-context.mjs.map +1 -1
  240. package/dist/context/search-form-context.d.mts +17 -3
  241. package/dist/context/search-form-context.d.mts.map +1 -1
  242. package/dist/context/search-form-context.mjs.map +1 -1
  243. package/dist/context/searches-catalog-card-context.d.mts +8 -0
  244. package/dist/context/searches-catalog-card-context.d.mts.map +1 -1
  245. package/dist/context/searches-catalog-card-context.mjs.map +1 -1
  246. package/dist/hooks/use-field-error.d.mts +2 -2
  247. package/dist/hooks/use-field-error.d.mts.map +1 -1
  248. package/dist/hooks/use-field-error.mjs +7 -3
  249. package/dist/hooks/use-field-error.mjs.map +1 -1
  250. package/dist/hooks/use-form-core.d.mts +0 -3
  251. package/dist/hooks/use-form-core.d.mts.map +1 -1
  252. package/dist/hooks/use-form-core.mjs +36 -2
  253. package/dist/hooks/use-form-core.mjs.map +1 -1
  254. package/dist/hooks/use-pipe-catalog-table.d.mts +8 -8
  255. package/dist/hooks/use-pipe-form.d.mts +11 -0
  256. package/dist/hooks/use-pipe-form.d.mts.map +1 -1
  257. package/dist/hooks/use-pipe-form.mjs +35 -6
  258. package/dist/hooks/use-pipe-form.mjs.map +1 -1
  259. package/dist/hooks/use-search-catalog-table.d.mts +6 -6
  260. package/dist/hooks/use-search-form.d.mts +11 -0
  261. package/dist/hooks/use-search-form.d.mts.map +1 -1
  262. package/dist/hooks/use-search-form.mjs +35 -6
  263. package/dist/hooks/use-search-form.mjs.map +1 -1
  264. package/dist/index.d.mts +9 -8
  265. package/dist/index.mjs +3 -9
  266. package/dist/styles/pipe0-form.css +418 -38
  267. package/dist/types/adapters.d.mts +6 -5
  268. package/dist/types/adapters.d.mts.map +1 -1
  269. package/dist/types/catalog-adapters.d.mts +2 -2
  270. package/dist/types/field-props.d.mts +4 -16
  271. package/dist/types/field-props.d.mts.map +1 -1
  272. package/dist/types/form-handle.d.mts +81 -1
  273. package/dist/types/form-handle.d.mts.map +1 -1
  274. package/dist/utils/build-section-handlers.mjs +6 -2
  275. package/dist/utils/build-section-handlers.mjs.map +1 -1
  276. package/dist/utils/internal-form.mjs +28 -0
  277. package/dist/utils/internal-form.mjs.map +1 -0
  278. package/dist/widgets/avatar-group.d.mts +4 -7
  279. package/dist/widgets/avatar-group.d.mts.map +1 -1
  280. package/dist/widgets/avatar-group.mjs +13 -12
  281. package/dist/widgets/avatar-group.mjs.map +1 -1
  282. package/package.json +70 -18
  283. package/dist/components/compound/pipe-catalog/index.mjs +0 -15
  284. package/dist/components/compound/pipe-form/index.mjs +0 -11
  285. package/dist/components/compound/search-catalog/index.mjs +0 -14
  286. package/dist/components/compound/search-form/index.mjs +0 -11
  287. package/dist/components/compound/searches-catalog/index.mjs +0 -14
  288. package/dist/components/defaults/adapters/pipes-trigger-input.mjs.map +0 -1
  289. package/dist/components/defaults/layout/submit-button.d.mts +0 -9
  290. package/dist/components/defaults/layout/submit-button.d.mts.map +0 -1
  291. package/dist/components/defaults/layout/submit-button.mjs +0 -23
  292. package/dist/components/defaults/layout/submit-button.mjs.map +0 -1
  293. package/dist/components/defaults/toggle-advanced-button.mjs +0 -29
  294. package/dist/components/defaults/toggle-advanced-button.mjs.map +0 -1
  295. package/dist/components/ui/input-group.mjs +0 -30
  296. package/dist/components/ui/input-group.mjs.map +0 -1
  297. package/dist/context/form-customization-context.d.mts +0 -71
  298. package/dist/context/form-customization-context.d.mts.map +0 -1
  299. package/dist/context/form-customization-context.mjs +0 -114
  300. package/dist/context/form-customization-context.mjs.map +0 -1
  301. package/dist/hooks/use-disclosure.mjs +0 -35
  302. package/dist/hooks/use-disclosure.mjs.map +0 -1
  303. package/dist/utils/render-slot.d.mts +0 -44
  304. package/dist/utils/render-slot.d.mts.map +0 -1
  305. package/dist/utils/render-slot.mjs +0 -30
  306. package/dist/utils/render-slot.mjs.map +0 -1
  307. package/dist/widgets/index.mjs +0 -11
@@ -1,6 +1,7 @@
1
- import { RenderProp } from "../../../utils/render-slot.mjs";
2
1
  import { Button } from "../../ui/button.mjs";
3
- import { ComponentProps, MouseEvent, ReactNode } from "react";
2
+ import { useRender } from "@base-ui/react/use-render";
3
+ import * as _$react from "react";
4
+ import { ComponentProps, MouseEvent } from "react";
4
5
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
6
 
6
7
  //#region src/components/defaults/catalog/card-primitives.d.ts
@@ -23,43 +24,32 @@ declare function CatalogCard({
23
24
  ...rest
24
25
  }: CatalogCardProps): _$react_jsx_runtime0.JSX.Element;
25
26
  type CatalogCardHeaderState = {};
26
- interface CatalogCardHeaderProps {
27
- render?: RenderProp<ComponentProps<"div">, CatalogCardHeaderState>;
28
- className?: string;
29
- children?: ReactNode;
30
- }
27
+ interface CatalogCardHeaderProps extends useRender.ComponentProps<"div", CatalogCardHeaderState> {}
31
28
  declare function CatalogCardHeader({
32
29
  render,
33
30
  className,
34
- children
35
- }: CatalogCardHeaderProps): ReactNode;
31
+ ...props
32
+ }: CatalogCardHeaderProps): _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>>;
36
33
  interface CatalogCardTitleState {
37
34
  label: string;
38
35
  }
39
- interface CatalogCardTitleProps {
40
- /** Override the displayed label. Defaults to `card.label` from context. */
41
- children?: ReactNode;
42
- render?: RenderProp<ComponentProps<"h3">, CatalogCardTitleState>;
43
- className?: string;
44
- }
36
+ interface CatalogCardTitleProps extends useRender.ComponentProps<"h3", CatalogCardTitleState> {}
45
37
  declare function CatalogCardTitle({
46
38
  children,
47
39
  render,
48
- className
49
- }: CatalogCardTitleProps): ReactNode;
40
+ className,
41
+ ...props
42
+ }: CatalogCardTitleProps): _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>>;
50
43
  interface CatalogCardDescriptionState {
51
44
  description: string;
52
45
  }
53
- interface CatalogCardDescriptionProps {
54
- children?: ReactNode;
55
- render?: RenderProp<ComponentProps<"p">, CatalogCardDescriptionState>;
56
- className?: string;
57
- }
46
+ interface CatalogCardDescriptionProps extends useRender.ComponentProps<"p", CatalogCardDescriptionState> {}
58
47
  declare function CatalogCardDescription({
59
48
  children,
60
49
  render,
61
- className
62
- }: CatalogCardDescriptionProps): ReactNode;
50
+ className,
51
+ ...props
52
+ }: CatalogCardDescriptionProps): _$react.ReactElement<unknown, string | _$react.JSXElementConstructor<any>>;
63
53
  interface CatalogCardBadgesProps extends ComponentProps<"div"> {}
64
54
  declare function CatalogCardBadges({
65
55
  className,
@@ -1 +1 @@
1
- {"version":3,"file":"card-primitives.d.mts","names":[],"sources":["../../../../src/components/defaults/catalog/card-primitives.tsx"],"mappings":";;;;;;UAWiB,gBAAA,SAAyB,cAAA;EACxC,OAAA,IAAW,CAAA,EAAG,UAAA,CAAW,cAAA;AAAA;AAD3B;;;;;;;;;AAAA,iBAagB,WAAA,CAAA;EAAc,SAAA;EAAW,OAAA;EAAS,QAAA;EAAA,GAAa;AAAA,GAAQ,gBAAA,GAAgB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,KA+B3E,sBAAA;AAAA,UAEK,sBAAA;EACf,MAAA,GAAS,UAAA,CAAW,cAAA,SAAuB,sBAAA;EAC3C,SAAA;EACA,QAAA,GAAW,SAAA;AAAA;AAAA,iBAGG,iBAAA,CAAA;EAAoB,MAAA;EAAQ,SAAA;EAAW;AAAA,GAAY,sBAAA,GAAsB,SAAA;AAAA,UAkBxE,qBAAA;EACf,KAAA;AAAA;AAAA,UAGe,qBAAA;EA7DsD;EA+DrE,QAAA,GAAW,SAAA;EACX,MAAA,GAAS,UAAA,CAAW,cAAA,QAAsB,qBAAA;EAC1C,SAAA;AAAA;AAAA,iBAGc,gBAAA,CAAA;EAAmB,QAAA;EAAU,MAAA;EAAQ;AAAA,GAAa,qBAAA,GAAqB,SAAA;AAAA,UAwBtE,2BAAA;EACf,WAAA;AAAA;AAAA,UAGe,2BAAA;EACf,QAAA,GAAW,SAAA;EACX,MAAA,GAAS,UAAA,CAAW,cAAA,OAAqB,2BAAA;EACzC,SAAA;AAAA;AAAA,iBAGc,sBAAA,CAAA;EACd,QAAA;EACA,MAAA;EACA;AAAA,GACC,2BAAA,GAA2B,SAAA;AAAA,UAwBb,sBAAA,SAA+B,cAAA;AAAA,iBAEhC,iBAAA,CAAA;EAAoB,SAAA;EAAW,QAAA;EAAA,GAAa;AAAA,GAAQ,sBAAA,GAAsB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,UAoBzE,qBAAA,SAA8B,IAAA,CAAK,cAAA,QAAsB,MAAA;EACxE,IAAA;AAAA;AAAA,iBAGc,gBAAA,CAAA;EACd,SAAA;EACA,OAAA;EACA,IAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,qBAAA,GAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"card-primitives.d.mts","names":[],"sources":["../../../../src/components/defaults/catalog/card-primitives.tsx"],"mappings":";;;;;;;UAYiB,gBAAA,SAAyB,cAAA;EACxC,OAAA,IAAW,CAAA,EAAG,UAAA,CAAW,cAAA;AAAA;;AAD3B;;;;;;;;iBAagB,WAAA,CAAA;EAAc,SAAA;EAAW,OAAA;EAAS,QAAA;EAAA,GAAa;AAAA,GAAQ,gBAAA,GAAgB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,KA+B3E,sBAAA;AAAA,UAEK,sBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,sBAAA;AAAA,iBAE1B,iBAAA,CAAA;EAAoB,MAAA;EAAQ,SAAA;EAAA,GAAc;AAAA,GAAS,sBAAA,GAAsB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA;AAAA,UAoBxE,qBAAA;EACf,KAAA;AAAA;AAAA,UAGe,qBAAA,SACP,SAAA,CAAU,cAAA,OAAqB,qBAAA;AAAA,iBAEzB,gBAAA,CAAA;EACd,QAAA;EACA,MAAA;EACA,SAAA;EAAA,GACG;AAAA,GACF,qBAAA,GAAqB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA;AAAA,UA2BP,2BAAA;EACf,WAAA;AAAA;AAAA,UAGe,2BAAA,SACP,SAAA,CAAU,cAAA,MAAoB,2BAAA;AAAA,iBAExB,sBAAA,CAAA;EACd,QAAA;EACA,MAAA;EACA,SAAA;EAAA,GACG;AAAA,GACF,2BAAA,GAA2B,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA;AAAA,UA2Bb,sBAAA,SAA+B,cAAA;AAAA,iBAEhC,iBAAA,CAAA;EAAoB,SAAA;EAAW,QAAA;EAAA,GAAa;AAAA,GAAQ,sBAAA,GAAsB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,UAoBzE,qBAAA,SAA8B,IAAA,CAAK,cAAA,QAAsB,MAAA;EACxE,IAAA;AAAA;AAAA,iBAGc,gBAAA,CAAA;EACd,SAAA;EACA,OAAA;EACA,IAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,qBAAA,GAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,8 +1,9 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { useCatalogConfig } from "../../../context/catalog-config-context.mjs";
3
- import { renderSlot } from "../../../utils/render-slot.mjs";
4
3
  import { useAnyCatalogCardOptional } from "../../../context/catalog-card-context.mjs";
5
4
  import { Button } from "../../ui/button.mjs";
5
+ import { mergeProps } from "@base-ui/react/merge-props";
6
+ import { useRender } from "@base-ui/react/use-render";
6
7
  import { Children } from "react";
7
8
  import { jsx } from "react/jsx-runtime";
8
9
 
@@ -35,45 +36,44 @@ function CatalogCard({ className, onClick, children, ...rest }) {
35
36
  children
36
37
  });
37
38
  }
38
- function CatalogCardHeader({ render, className, children }) {
39
+ function CatalogCardHeader({ render, className, ...props }) {
39
40
  const { classNames } = useCatalogConfig();
40
- return renderSlot({
41
+ return useRender({
41
42
  defaultTagName: "div",
42
43
  render,
43
44
  state: {},
44
- props: {
45
- "data-p0": "catalog-card-header",
45
+ props: mergeProps({
46
46
  className: cn("pz:flex pz:items-start pz:gap-2", classNames?.cardHeader, className),
47
- children
48
- }
47
+ "data-p0": "catalog-card-header"
48
+ }, props)
49
49
  });
50
50
  }
51
- function CatalogCardTitle({ children, render, className }) {
51
+ function CatalogCardTitle({ children, render, className, ...props }) {
52
52
  const { classNames } = useCatalogConfig();
53
53
  const label = (useAnyCatalogCardOptional()?.card)?.label ?? "";
54
- return renderSlot({
54
+ return useRender({
55
55
  defaultTagName: "h3",
56
56
  render,
57
57
  state: { label },
58
- props: {
59
- "data-p0": "catalog-card-title",
58
+ props: mergeProps({
60
59
  className: cn("pz:text-sm pz:font-semibold pz:leading-tight pz:m-0 pz:line-clamp-2 pz:flex-1", classNames?.cardLabel, className),
61
- children: children ?? label
62
- }
60
+ children: children ?? label,
61
+ "data-p0": "catalog-card-title"
62
+ }, props)
63
63
  });
64
64
  }
65
- function CatalogCardDescription({ children, render, className }) {
65
+ function CatalogCardDescription({ children, render, className, ...props }) {
66
66
  const { classNames } = useCatalogConfig();
67
67
  const description = (useAnyCatalogCardOptional()?.card)?.description ?? "";
68
- return renderSlot({
68
+ return useRender({
69
69
  defaultTagName: "p",
70
70
  render,
71
71
  state: { description },
72
- props: {
73
- "data-p0": "catalog-card-description",
72
+ props: mergeProps({
74
73
  className: cn("pz:text-xs pz:text-muted-foreground pz:m-0 pz:line-clamp-2", classNames?.cardDescription, className),
75
- children: children ?? description
76
- }
74
+ children: children ?? description,
75
+ "data-p0": "catalog-card-description"
76
+ }, props)
77
77
  });
78
78
  }
79
79
  function CatalogCardBadges({ className, children, ...rest }) {
@@ -1 +1 @@
1
- {"version":3,"file":"card-primitives.mjs","names":[],"sources":["../../../../src/components/defaults/catalog/card-primitives.tsx"],"sourcesContent":["import { Children, type ComponentProps, type MouseEvent, type ReactNode } from \"react\";\nimport { useAnyCatalogCardOptional } from \"../../../context/catalog-card-context.js\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { type RenderProp, renderSlot } from \"../../../utils/render-slot.js\";\nimport { Button } from \"../../ui/button.js\";\n\n/* -------------------------------------------------------------------------- */\n/* Card root */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardProps extends ComponentProps<\"div\"> {\n onClick?: (e: MouseEvent<HTMLDivElement>) => void;\n}\n\n/**\n * Bare flat card container. Defaults are structural only (flex column) so\n * consumers can override paddings/colors/borders via `classNames.card` or\n * `className` without fighting the cascade.\n *\n * Most consumers use `<PipeCatalogCard>` / `<SearchCatalogCard>` /\n * `<SearchesCatalogCard>` instead, which provides the card context for\n * self-binding child primitives.\n */\nexport function CatalogCard({ className, onClick, children, ...rest }: CatalogCardProps) {\n const { classNames } = useCatalogConfig();\n const interactive = !!onClick;\n return (\n <div\n data-p0=\"catalog-card\"\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.(e as unknown as MouseEvent<HTMLDivElement>);\n }\n }\n : undefined\n }\n className={cn(\"pz:flex pz:flex-col\", classNames?.card, className)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card header */\n/* -------------------------------------------------------------------------- */\n\nexport type CatalogCardHeaderState = {};\n\nexport interface CatalogCardHeaderProps {\n render?: RenderProp<ComponentProps<\"div\">, CatalogCardHeaderState>;\n className?: string;\n children?: ReactNode;\n}\n\nexport function CatalogCardHeader({ render, className, children }: CatalogCardHeaderProps) {\n const { classNames } = useCatalogConfig();\n return renderSlot({\n defaultTagName: \"div\",\n render,\n state: {} as CatalogCardHeaderState,\n props: {\n \"data-p0\": \"catalog-card-header\",\n className: cn(\"pz:flex pz:items-start pz:gap-2\", classNames?.cardHeader, className),\n children,\n } as ComponentProps<\"div\">,\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card title — self-binds to card.label */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardTitleState {\n label: string;\n}\n\nexport interface CatalogCardTitleProps {\n /** Override the displayed label. Defaults to `card.label` from context. */\n children?: ReactNode;\n render?: RenderProp<ComponentProps<\"h3\">, CatalogCardTitleState>;\n className?: string;\n}\n\nexport function CatalogCardTitle({ children, render, className }: CatalogCardTitleProps) {\n const { classNames } = useCatalogConfig();\n const card = useAnyCatalogCardOptional()?.card;\n const label = (card?.label ?? \"\") as string;\n return renderSlot({\n defaultTagName: \"h3\",\n render,\n state: { label },\n props: {\n \"data-p0\": \"catalog-card-title\",\n className: cn(\n \"pz:text-sm pz:font-semibold pz:leading-tight pz:m-0 pz:line-clamp-2 pz:flex-1\",\n classNames?.cardLabel,\n className,\n ),\n children: children ?? label,\n } as ComponentProps<\"h3\">,\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card description — self-binds to card.description */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardDescriptionState {\n description: string;\n}\n\nexport interface CatalogCardDescriptionProps {\n children?: ReactNode;\n render?: RenderProp<ComponentProps<\"p\">, CatalogCardDescriptionState>;\n className?: string;\n}\n\nexport function CatalogCardDescription({\n children,\n render,\n className,\n}: CatalogCardDescriptionProps) {\n const { classNames } = useCatalogConfig();\n const card = useAnyCatalogCardOptional()?.card;\n const description = (card?.description ?? \"\") as string;\n return renderSlot({\n defaultTagName: \"p\",\n render,\n state: { description },\n props: {\n \"data-p0\": \"catalog-card-description\",\n className: cn(\n \"pz:text-xs pz:text-muted-foreground pz:m-0 pz:line-clamp-2\",\n classNames?.cardDescription,\n className,\n ),\n children: children ?? description,\n } as ComponentProps<\"p\">,\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card badges row + single badge button */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardBadgesProps extends ComponentProps<\"div\"> {}\n\nexport function CatalogCardBadges({ className, children, ...rest }: CatalogCardBadgesProps) {\n const { classNames } = useCatalogConfig();\n const visible = Children.toArray(children);\n if (visible.length === 0) return null;\n return (\n <div\n data-p0=\"catalog-card-badges\"\n className={cn(\n \"pz:flex pz:flex-wrap pz:gap-1.5 pz:items-center\",\n classNames?.cardBadges,\n className,\n )}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n {visible}\n </div>\n );\n}\n\nexport interface CatalogCardBadgeProps extends Omit<ComponentProps<typeof Button>, \"size\"> {\n size?: \"xs\" | \"sm\";\n}\n\nexport function CatalogCardBadge({\n className,\n variant = \"outline\",\n size = \"xs\",\n onClick,\n ...rest\n}: CatalogCardBadgeProps) {\n const { classNames } = useCatalogConfig();\n return (\n <Button\n data-p0=\"catalog-card-badge\"\n variant={variant}\n size={size}\n className={cn(classNames?.badge, className)}\n onClick={(e) => {\n e.stopPropagation();\n onClick?.(e);\n }}\n {...rest}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,SAAgB,YAAY,EAAE,WAAW,SAAS,UAAU,GAAG,QAA0B;CACvF,MAAM,EAAE,eAAe,kBAAkB;CACzC,MAAM,cAAc,CAAC,CAAC;AACtB,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,MAAM,cAAc,WAAW;EAC/B,UAAU,cAAc,IAAI;EACnB;EACT,WACE,eACK,MAAM;AACL,OAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,MAAE,gBAAgB;AAClB,cAAU,EAA2C;;MAGzD;EAEN,WAAW,GAAG,uBAAuB,YAAY,MAAM,UAAU;EACjE,GAAI;EAEH;EACG;;AAgBV,SAAgB,kBAAkB,EAAE,QAAQ,WAAW,YAAoC;CACzF,MAAM,EAAE,eAAe,kBAAkB;AACzC,QAAO,WAAW;EAChB,gBAAgB;EAChB;EACA,OAAO,EAAE;EACT,OAAO;GACL,WAAW;GACX,WAAW,GAAG,mCAAmC,YAAY,YAAY,UAAU;GACnF;GACD;EACF,CAAC;;AAkBJ,SAAgB,iBAAiB,EAAE,UAAU,QAAQ,aAAoC;CACvF,MAAM,EAAE,eAAe,kBAAkB;CAEzC,MAAM,SADO,2BAA2B,EAAE,OACrB,SAAS;AAC9B,QAAO,WAAW;EAChB,gBAAgB;EAChB;EACA,OAAO,EAAE,OAAO;EAChB,OAAO;GACL,WAAW;GACX,WAAW,GACT,iFACA,YAAY,WACZ,UACD;GACD,UAAU,YAAY;GACvB;EACF,CAAC;;AAiBJ,SAAgB,uBAAuB,EACrC,UACA,QACA,aAC8B;CAC9B,MAAM,EAAE,eAAe,kBAAkB;CAEzC,MAAM,eADO,2BAA2B,EAAE,OACf,eAAe;AAC1C,QAAO,WAAW;EAChB,gBAAgB;EAChB;EACA,OAAO,EAAE,aAAa;EACtB,OAAO;GACL,WAAW;GACX,WAAW,GACT,8DACA,YAAY,iBACZ,UACD;GACD,UAAU,YAAY;GACvB;EACF,CAAC;;AASJ,SAAgB,kBAAkB,EAAE,WAAW,UAAU,GAAG,QAAgC;CAC1F,MAAM,EAAE,eAAe,kBAAkB;CACzC,MAAM,UAAU,SAAS,QAAQ,SAAS;AAC1C,KAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,WAAW,GACT,mDACA,YAAY,YACZ,UACD;EACD,UAAU,MAAM,EAAE,iBAAiB;EACnC,GAAI;YAEH;EACG;;AAQV,SAAgB,iBAAiB,EAC/B,WACA,UAAU,WACV,OAAO,MACP,SACA,GAAG,QACqB;CACxB,MAAM,EAAE,eAAe,kBAAkB;AACzC,QACE,oBAAC,QAAD;EACE,WAAQ;EACC;EACH;EACN,WAAW,GAAG,YAAY,OAAO,UAAU;EAC3C,UAAU,MAAM;AACd,KAAE,iBAAiB;AACnB,aAAU,EAAE;;EAEd,GAAI;EACJ"}
1
+ {"version":3,"file":"card-primitives.mjs","names":[],"sources":["../../../../src/components/defaults/catalog/card-primitives.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { Children, type ComponentProps, type MouseEvent } from \"react\";\nimport { useAnyCatalogCardOptional } from \"../../../context/catalog-card-context.js\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Button } from \"../../ui/button.js\";\n\n/* -------------------------------------------------------------------------- */\n/* Card root */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardProps extends ComponentProps<\"div\"> {\n onClick?: (e: MouseEvent<HTMLDivElement>) => void;\n}\n\n/**\n * Bare flat card container. Defaults are structural only (flex column) so\n * consumers can override paddings/colors/borders via `classNames.card` or\n * `className` without fighting the cascade.\n *\n * Most consumers use `<PipeCatalogCard>` / `<SearchCatalogCard>` /\n * `<SearchesCatalogCard>` instead, which provides the card context for\n * self-binding child primitives.\n */\nexport function CatalogCard({ className, onClick, children, ...rest }: CatalogCardProps) {\n const { classNames } = useCatalogConfig();\n const interactive = !!onClick;\n return (\n <div\n data-p0=\"catalog-card\"\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.(e as unknown as MouseEvent<HTMLDivElement>);\n }\n }\n : undefined\n }\n className={cn(\"pz:flex pz:flex-col\", classNames?.card, className)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card header */\n/* -------------------------------------------------------------------------- */\n\nexport type CatalogCardHeaderState = {};\n\nexport interface CatalogCardHeaderProps\n extends useRender.ComponentProps<\"div\", CatalogCardHeaderState> {}\n\nexport function CatalogCardHeader({ render, className, ...props }: CatalogCardHeaderProps) {\n const { classNames } = useCatalogConfig();\n return useRender({\n defaultTagName: \"div\",\n render,\n state: {} as CatalogCardHeaderState,\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:items-start pz:gap-2\", classNames?.cardHeader, className),\n ...({ \"data-p0\": \"catalog-card-header\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card title — self-binds to card.label */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardTitleState {\n label: string;\n}\n\nexport interface CatalogCardTitleProps\n extends useRender.ComponentProps<\"h3\", CatalogCardTitleState> {}\n\nexport function CatalogCardTitle({\n children,\n render,\n className,\n ...props\n}: CatalogCardTitleProps) {\n const { classNames } = useCatalogConfig();\n const card = useAnyCatalogCardOptional()?.card;\n const label = (card?.label ?? \"\") as string;\n return useRender({\n defaultTagName: \"h3\",\n render,\n state: { label },\n props: mergeProps<\"h3\">(\n {\n className: cn(\n \"pz:text-sm pz:font-semibold pz:leading-tight pz:m-0 pz:line-clamp-2 pz:flex-1\",\n classNames?.cardLabel,\n className,\n ),\n children: children ?? label,\n ...({ \"data-p0\": \"catalog-card-title\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card description — self-binds to card.description */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardDescriptionState {\n description: string;\n}\n\nexport interface CatalogCardDescriptionProps\n extends useRender.ComponentProps<\"p\", CatalogCardDescriptionState> {}\n\nexport function CatalogCardDescription({\n children,\n render,\n className,\n ...props\n}: CatalogCardDescriptionProps) {\n const { classNames } = useCatalogConfig();\n const card = useAnyCatalogCardOptional()?.card;\n const description = (card?.description ?? \"\") as string;\n return useRender({\n defaultTagName: \"p\",\n render,\n state: { description },\n props: mergeProps<\"p\">(\n {\n className: cn(\n \"pz:text-xs pz:text-muted-foreground pz:m-0 pz:line-clamp-2\",\n classNames?.cardDescription,\n className,\n ),\n children: children ?? description,\n ...({ \"data-p0\": \"catalog-card-description\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Card badges row + single badge button */\n/* -------------------------------------------------------------------------- */\n\nexport interface CatalogCardBadgesProps extends ComponentProps<\"div\"> {}\n\nexport function CatalogCardBadges({ className, children, ...rest }: CatalogCardBadgesProps) {\n const { classNames } = useCatalogConfig();\n const visible = Children.toArray(children);\n if (visible.length === 0) return null;\n return (\n <div\n data-p0=\"catalog-card-badges\"\n className={cn(\n \"pz:flex pz:flex-wrap pz:gap-1.5 pz:items-center\",\n classNames?.cardBadges,\n className,\n )}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n {visible}\n </div>\n );\n}\n\nexport interface CatalogCardBadgeProps extends Omit<ComponentProps<typeof Button>, \"size\"> {\n size?: \"xs\" | \"sm\";\n}\n\nexport function CatalogCardBadge({\n className,\n variant = \"outline\",\n size = \"xs\",\n onClick,\n ...rest\n}: CatalogCardBadgeProps) {\n const { classNames } = useCatalogConfig();\n return (\n <Button\n data-p0=\"catalog-card-badge\"\n variant={variant}\n size={size}\n className={cn(classNames?.badge, className)}\n onClick={(e) => {\n e.stopPropagation();\n onClick?.(e);\n }}\n {...rest}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,YAAY,EAAE,WAAW,SAAS,UAAU,GAAG,QAA0B;CACvF,MAAM,EAAE,eAAe,kBAAkB;CACzC,MAAM,cAAc,CAAC,CAAC;AACtB,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,MAAM,cAAc,WAAW;EAC/B,UAAU,cAAc,IAAI;EACnB;EACT,WACE,eACK,MAAM;AACL,OAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,MAAE,gBAAgB;AAClB,cAAU,EAA2C;;MAGzD;EAEN,WAAW,GAAG,uBAAuB,YAAY,MAAM,UAAU;EACjE,GAAI;EAEH;EACG;;AAaV,SAAgB,kBAAkB,EAAE,QAAQ,WAAW,GAAG,SAAiC;CACzF,MAAM,EAAE,eAAe,kBAAkB;AACzC,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,EAAE;EACT,OAAO,WACL;GACE,WAAW,GAAG,mCAAmC,YAAY,YAAY,UAAU;GAC7E,WAAW;GAClB,EACD,MACD;EACF,CAAC;;AAcJ,SAAgB,iBAAiB,EAC/B,UACA,QACA,WACA,GAAG,SACqB;CACxB,MAAM,EAAE,eAAe,kBAAkB;CAEzC,MAAM,SADO,2BAA2B,EAAE,OACrB,SAAS;AAC9B,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,EAAE,OAAO;EAChB,OAAO,WACL;GACE,WAAW,GACT,iFACA,YAAY,WACZ,UACD;GACD,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC;;AAcJ,SAAgB,uBAAuB,EACrC,UACA,QACA,WACA,GAAG,SAC2B;CAC9B,MAAM,EAAE,eAAe,kBAAkB;CAEzC,MAAM,eADO,2BAA2B,EAAE,OACf,eAAe;AAC1C,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,EAAE,aAAa;EACtB,OAAO,WACL;GACE,WAAW,GACT,8DACA,YAAY,iBACZ,UACD;GACD,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC;;AASJ,SAAgB,kBAAkB,EAAE,WAAW,UAAU,GAAG,QAAgC;CAC1F,MAAM,EAAE,eAAe,kBAAkB;CACzC,MAAM,UAAU,SAAS,QAAQ,SAAS;AAC1C,KAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,WAAW,GACT,mDACA,YAAY,YACZ,UACD;EACD,UAAU,MAAM,EAAE,iBAAiB;EACnC,GAAI;YAEH;EACG;;AAQV,SAAgB,iBAAiB,EAC/B,WACA,UAAU,WACV,OAAO,MACP,SACA,GAAG,QACqB;CACxB,MAAM,EAAE,eAAe,kBAAkB;AACzC,QACE,oBAAC,QAAD;EACE,WAAQ;EACC;EACH;EACN,WAAW,GAAG,YAAY,OAAO,UAAU;EAC3C,UAAU,MAAM;AACd,KAAE,iBAAiB;AACnB,aAAU,EAAE;;EAEd,GAAI;EACJ"}
@@ -1,11 +1,10 @@
1
1
  import { PortalContainerContext } from "../../../context/portal-container-context.mjs";
2
2
  import { cn } from "../../../lib/utils.mjs";
3
3
  import { useCatalogConfig } from "../../../context/catalog-config-context.mjs";
4
- import { renderSlot } from "../../../utils/render-slot.mjs";
5
- import { useCallback, useState } from "react";
6
- import { jsx } from "react/jsx-runtime";
7
4
  import { mergeProps } from "@base-ui/react/merge-props";
8
5
  import { useRender } from "@base-ui/react/use-render";
6
+ import { useCallback, useState } from "react";
7
+ import { jsx } from "react/jsx-runtime";
9
8
 
10
9
  //#region src/components/defaults/catalog/layout.tsx
11
10
  /**
@@ -23,17 +22,15 @@ function DefaultCatalogRoot({ className, render, children, ...props }) {
23
22
  value: portalContainer,
24
23
  children
25
24
  });
26
- return renderSlot({
25
+ return useRender({
27
26
  defaultTagName: "div",
28
27
  render,
29
- state: {},
30
- props: {
31
- "data-p0": "catalog",
28
+ ref: portalRef,
29
+ props: mergeProps({
32
30
  className: cn("pz:flex pz:flex-col pz:gap-4", classNames?.root, className),
33
- ref: portalRef,
34
31
  children: wrappedChildren,
35
- ...props
36
- }
32
+ "data-p0": "catalog"
33
+ }, props)
37
34
  });
38
35
  }
39
36
  function DefaultCatalogFilters({ className, render, ...props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"layout.mjs","names":[],"sources":["../../../../src/components/defaults/catalog/layout.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { type ComponentProps, type ReactNode, useCallback, useState } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { PortalContainerContext } from \"../../../context/portal-container-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { type RenderProp, renderSlot } from \"../../../utils/render-slot.js\";\n\n/**\n * Outermost catalog wrapper. Owns the `PortalContainerContext.Provider` so\n * elements-react popovers/dropdowns mounted inside the catalog tree portal\n * back into this container — keeping them inside the catalog's CSS scope.\n */\nexport function DefaultCatalogRoot({\n className,\n render,\n children,\n ...props\n}: ComponentProps<\"div\"> & {\n render?: RenderProp<ComponentProps<\"div\">, Record<never, never>>;\n}) {\n const { classNames } = useCatalogConfig();\n const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n const portalRef = useCallback((node: HTMLElement | null) => {\n setPortalContainer(node);\n }, []);\n\n const wrappedChildren: ReactNode = (\n <PortalContainerContext.Provider value={portalContainer}>\n {children}\n </PortalContainerContext.Provider>\n );\n\n return renderSlot({\n defaultTagName: \"div\",\n render,\n state: {},\n props: {\n \"data-p0\": \"catalog\",\n className: cn(\"pz:flex pz:flex-col pz:gap-4\", classNames?.root, className),\n ref: portalRef,\n children: wrappedChildren,\n ...props,\n } as ComponentProps<\"div\">,\n });\n}\n\nexport function DefaultCatalogList({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">) {\n const { classNames } = useCatalogConfig();\n return useRender({\n defaultTagName: \"div\",\n render,\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"pz:grid pz:gap-3 pz:grid-cols-1 pz:sm:grid-cols-2 pz:lg:grid-cols-3\",\n classNames?.list,\n className,\n ),\n ...({ \"data-p0\": \"catalog-list\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n\nexport function DefaultCatalogFilters({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">) {\n const { classNames } = useCatalogConfig();\n return useRender({\n defaultTagName: \"div\",\n render,\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:flex-wrap pz:gap-2\", classNames?.filters, className),\n ...({ \"data-p0\": \"catalog-filters\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;AAaA,SAAgB,mBAAmB,EACjC,WACA,QACA,UACA,GAAG,SAGF;CACD,MAAM,EAAE,eAAe,kBAAkB;CACzC,MAAM,CAAC,iBAAiB,sBAAsB,SAA6B,KAAK;CAChF,MAAM,YAAY,aAAa,SAA6B;AAC1D,qBAAmB,KAAK;IACvB,EAAE,CAAC;CAEN,MAAM,kBACJ,oBAAC,uBAAuB,UAAxB;EAAiC,OAAO;EACrC;EAC+B;AAGpC,QAAO,WAAW;EAChB,gBAAgB;EAChB;EACA,OAAO,EAAE;EACT,OAAO;GACL,WAAW;GACX,WAAW,GAAG,gCAAgC,YAAY,MAAM,UAAU;GAC1E,KAAK;GACL,UAAU;GACV,GAAG;GACJ;EACF,CAAC;;AA0BJ,SAAgB,sBAAsB,EACpC,WACA,QACA,GAAG,SAC+B;CAClC,MAAM,EAAE,eAAe,kBAAkB;AACzC,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,WACL;GACE,WAAW,GAAG,iCAAiC,YAAY,SAAS,UAAU;GACxE,WAAW;GAClB,EACD,MACD;EACF,CAAC"}
1
+ {"version":3,"file":"layout.mjs","names":[],"sources":["../../../../src/components/defaults/catalog/layout.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { type ReactNode, useCallback, useState } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { PortalContainerContext } from \"../../../context/portal-container-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\n\n/**\n * Outermost catalog wrapper. Owns the `PortalContainerContext.Provider` so\n * elements-react popovers/dropdowns mounted inside the catalog tree portal\n * back into this container — keeping them inside the catalog's CSS scope.\n */\nexport function DefaultCatalogRoot({\n className,\n render,\n children,\n ...props\n}: useRender.ComponentProps<\"div\">) {\n const { classNames } = useCatalogConfig();\n const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n const portalRef = useCallback((node: HTMLElement | null) => {\n setPortalContainer(node);\n }, []);\n\n const wrappedChildren: ReactNode = (\n <PortalContainerContext.Provider value={portalContainer}>\n {children}\n </PortalContainerContext.Provider>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n ref: portalRef,\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:flex-col pz:gap-4\", classNames?.root, className),\n children: wrappedChildren,\n ...({ \"data-p0\": \"catalog\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n\nexport function DefaultCatalogList({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">) {\n const { classNames } = useCatalogConfig();\n return useRender({\n defaultTagName: \"div\",\n render,\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"pz:grid pz:gap-3 pz:grid-cols-1 pz:sm:grid-cols-2 pz:lg:grid-cols-3\",\n classNames?.list,\n className,\n ),\n ...({ \"data-p0\": \"catalog-list\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n\nexport function DefaultCatalogFilters({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\">) {\n const { classNames } = useCatalogConfig();\n return useRender({\n defaultTagName: \"div\",\n render,\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:flex-wrap pz:gap-2\", classNames?.filters, className),\n ...({ \"data-p0\": \"catalog-filters\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAYA,SAAgB,mBAAmB,EACjC,WACA,QACA,UACA,GAAG,SAC+B;CAClC,MAAM,EAAE,eAAe,kBAAkB;CACzC,MAAM,CAAC,iBAAiB,sBAAsB,SAA6B,KAAK;CAChF,MAAM,YAAY,aAAa,SAA6B;AAC1D,qBAAmB,KAAK;IACvB,EAAE,CAAC;CAEN,MAAM,kBACJ,oBAAC,uBAAuB,UAAxB;EAAiC,OAAO;EACrC;EAC+B;AAGpC,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,KAAK;EACL,OAAO,WACL;GACE,WAAW,GAAG,gCAAgC,YAAY,MAAM,UAAU;GAC1E,UAAU;GACJ,WAAW;GAClB,EACD,MACD;EACF,CAAC;;AA0BJ,SAAgB,sBAAsB,EACpC,WACA,QACA,GAAG,SAC+B;CAClC,MAAM,EAAE,eAAe,kBAAkB;AACzC,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,WACL;GACE,WAAW,GAAG,iCAAiC,YAAY,SAAS,UAAU;GACxE,WAAW;GAClB,EACD,MACD;EACF,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { AnyFieldProps } from "../../../types/field-props.mjs";
2
2
  import { useRender } from "@base-ui/react/use-render";
3
-
4
3
  //#region src/components/defaults/layout/field-wrapper.d.ts
5
4
  interface DefaultFieldWrapperState {
6
- field: AnyFieldProps;
5
+ disabled: boolean;
6
+ hasError: boolean;
7
7
  }
8
8
  interface DefaultFieldWrapperProps extends useRender.ComponentProps<"div", DefaultFieldWrapperState> {
9
9
  field: AnyFieldProps;
@@ -1 +1 @@
1
- {"version":3,"file":"field-wrapper.d.mts","names":[],"sources":["../../../../src/components/defaults/layout/field-wrapper.tsx"],"mappings":";;;;UAQiB,wBAAA;EACf,KAAA,EAAO,aAAA;AAAA;AAAA,UAGQ,wBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,wBAAA;EACxC,KAAA,EAAO,aAAA;AAAA"}
1
+ {"version":3,"file":"field-wrapper.d.mts","names":[],"sources":["../../../../src/components/defaults/layout/field-wrapper.tsx"],"mappings":";;;UAQiB,wBAAA;EACf,QAAA;EACA,QAAA;AAAA;AAAA,UAGe,wBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,wBAAA;EACxC,KAAA,EAAO,aAAA;AAAA"}
@@ -2,9 +2,9 @@ import { cn } from "../../../lib/utils.mjs";
2
2
  import { useFormConfig } from "../../../context/form-context.mjs";
3
3
  import { HoverInfo } from "../../hover-info.mjs";
4
4
  import { RichText } from "../../rich-text.mjs";
5
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
5
  import { mergeProps } from "@base-ui/react/merge-props";
7
6
  import { useRender } from "@base-ui/react/use-render";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
 
9
9
  //#region src/components/defaults/layout/field-wrapper.tsx
10
10
  function DefaultFieldWrapper({ field, children, className, render, ...props }) {
@@ -47,7 +47,10 @@ function DefaultFieldWrapper({ field, children, className, render, ...props }) {
47
47
  return useRender({
48
48
  defaultTagName: "div",
49
49
  render,
50
- state: { field },
50
+ state: {
51
+ disabled: isDisabled,
52
+ hasError
53
+ },
51
54
  props: mergeProps({
52
55
  className: cn(classNames?.field ?? "pz:grid pz:gap-2", isDisabled && classNames?.fieldDisabled, className),
53
56
  children: defaultContent,
@@ -1 +1 @@
1
- {"version":3,"file":"field-wrapper.mjs","names":[],"sources":["../../../../src/components/defaults/layout/field-wrapper.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useFormConfig } from \"../../../context/form-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { AnyFieldProps } from \"../../../types/field-props.js\";\nimport { HoverInfo } from \"../../hover-info.js\";\nimport { RichText } from \"../../rich-text.js\";\n\nexport interface DefaultFieldWrapperState {\n field: AnyFieldProps;\n}\n\nexport interface DefaultFieldWrapperProps\n extends useRender.ComponentProps<\"div\", DefaultFieldWrapperState> {\n field: AnyFieldProps;\n}\n\nexport function DefaultFieldWrapper({\n field,\n children,\n className,\n render,\n ...props\n}: DefaultFieldWrapperProps) {\n const { classNames } = useFormConfig();\n const hasError = !!field.error;\n const isDisabled = field.disabled;\n\n // Boolean toggles render their label inline with the switch (settings-row\n // pattern), so the wrapper's label/description block is suppressed for them.\n const inlineLabel = field.kind === \"boolean_input\";\n\n const defaultContent = (\n <>\n {!inlineLabel && (field.label || field.description || field.info) && (\n <div className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className=\"pz:flex pz:items-center pz:gap-1.5\">\n {field.label && (\n <label\n data-p0=\"label\"\n htmlFor={field.id}\n className={\n classNames?.label ??\n cn(\n \"pz:text-sm pz:leading-none pz:font-medium pz:select-none\",\n hasError && \"pz:text-destructive\",\n )\n }\n >\n <RichText>{field.label}</RichText>\n </label>\n )}\n {field.info && (\n <HoverInfo>\n <RichText>{field.info}</RichText>\n </HoverInfo>\n )}\n </div>\n {field.description && (\n <p\n data-p0=\"description\"\n className={classNames?.description ?? \"pz:text-xs pz:text-muted-foreground\"}\n >\n <RichText>{field.description}</RichText>\n </p>\n )}\n </div>\n )}\n {isDisabled ? (\n <div className=\"pz:opacity-60 pz:pointer-events-none\">{children}</div>\n ) : (\n children\n )}\n {isDisabled && field.disabledReason && (\n <div\n data-p0=\"disabled-reason\"\n className={\n classNames?.disabledReason ??\n \"pz:rounded-md pz:border pz:border-input pz:bg-muted/40 pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground\"\n }\n >\n <RichText>{field.disabledReason}</RichText>\n </div>\n )}\n {hasError && (\n <span\n data-p0=\"error\"\n className={classNames?.error ?? \"pz:text-destructive pz:text-xs pz:font-medium\"}\n role=\"alert\"\n >\n <RichText>{field.error}</RichText>\n </span>\n )}\n </>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: { field },\n props: mergeProps<\"div\">(\n {\n className: cn(\n classNames?.field ?? \"pz:grid pz:gap-2\",\n isDisabled && classNames?.fieldDisabled,\n className,\n ),\n children: defaultContent,\n ...({\n \"data-p0\": \"field\",\n \"data-p0-field\": field.path,\n \"data-p0-kind\": field.kind,\n ...(isDisabled ? { \"data-p0-disabled\": \"true\", \"aria-disabled\": \"true\" } : {}),\n } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;AAiBA,SAAgB,oBAAoB,EAClC,OACA,UACA,WACA,QACA,GAAG,SACwB;CAC3B,MAAM,EAAE,eAAe,eAAe;CACtC,MAAM,WAAW,CAAC,CAAC,MAAM;CACzB,MAAM,aAAa,MAAM;CAMzB,MAAM,iBACJ;EACG,EAJe,MAAM,SAAS,qBAIb,MAAM,SAAS,MAAM,eAAe,MAAM,SAC1D,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,MAAM,SACL,oBAAC,SAAD;KACE,WAAQ;KACR,SAAS,MAAM;KACf,WACE,YAAY,SACZ,GACE,4DACA,YAAY,sBACb;eAGH,oBAAC,UAAD,YAAW,MAAM,OAAiB;KAC5B,GAET,MAAM,QACL,oBAAC,WAAD,YACE,oBAAC,UAAD,YAAW,MAAM,MAAgB,GACvB,EAEV;OACL,MAAM,eACL,oBAAC,KAAD;IACE,WAAQ;IACR,WAAW,YAAY,eAAe;cAEtC,oBAAC,UAAD,YAAW,MAAM,aAAuB;IACtC,EAEF;;EAEP,aACC,oBAAC,OAAD;GAAK,WAAU;GAAwC;GAAe,IAEtE;EAED,cAAc,MAAM,kBACnB,oBAAC,OAAD;GACE,WAAQ;GACR,WACE,YAAY,kBACZ;aAGF,oBAAC,UAAD,YAAW,MAAM,gBAA0B;GACvC;EAEP,YACC,oBAAC,QAAD;GACE,WAAQ;GACR,WAAW,YAAY,SAAS;GAChC,MAAK;aAEL,oBAAC,UAAD,YAAW,MAAM,OAAiB;GAC7B;EAER;AAGL,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,EAAE,OAAO;EAChB,OAAO,WACL;GACE,WAAW,GACT,YAAY,SAAS,oBACrB,cAAc,YAAY,eAC1B,UACD;GACD,UAAU;GAER,WAAW;GACX,iBAAiB,MAAM;GACvB,gBAAgB,MAAM;GACtB,GAAI,aAAa;IAAE,oBAAoB;IAAQ,iBAAiB;IAAQ,GAAG,EAAE;GAEhF,EACD,MACD;EACF,CAAC"}
1
+ {"version":3,"file":"field-wrapper.mjs","names":[],"sources":["../../../../src/components/defaults/layout/field-wrapper.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useFormConfig } from \"../../../context/form-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { AnyFieldProps } from \"../../../types/field-props.js\";\nimport { HoverInfo } from \"../../hover-info.js\";\nimport { RichText } from \"../../rich-text.js\";\n\nexport interface DefaultFieldWrapperState {\n disabled: boolean;\n hasError: boolean;\n}\n\nexport interface DefaultFieldWrapperProps\n extends useRender.ComponentProps<\"div\", DefaultFieldWrapperState> {\n field: AnyFieldProps;\n}\n\nexport function DefaultFieldWrapper({\n field,\n children,\n className,\n render,\n ...props\n}: DefaultFieldWrapperProps) {\n const { classNames } = useFormConfig();\n const hasError = !!field.error;\n const isDisabled = field.disabled;\n\n // Boolean toggles render their label inline with the switch (settings-row\n // pattern), so the wrapper's label/description block is suppressed for them.\n const inlineLabel = field.kind === \"boolean_input\";\n\n const defaultContent = (\n <>\n {!inlineLabel && (field.label || field.description || field.info) && (\n <div className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className=\"pz:flex pz:items-center pz:gap-1.5\">\n {field.label && (\n <label\n data-p0=\"label\"\n htmlFor={field.id}\n className={\n classNames?.label ??\n cn(\n \"pz:text-sm pz:leading-none pz:font-medium pz:select-none\",\n hasError && \"pz:text-destructive\",\n )\n }\n >\n <RichText>{field.label}</RichText>\n </label>\n )}\n {field.info && (\n <HoverInfo>\n <RichText>{field.info}</RichText>\n </HoverInfo>\n )}\n </div>\n {field.description && (\n <p\n data-p0=\"description\"\n className={classNames?.description ?? \"pz:text-xs pz:text-muted-foreground\"}\n >\n <RichText>{field.description}</RichText>\n </p>\n )}\n </div>\n )}\n {isDisabled ? (\n <div className=\"pz:opacity-60 pz:pointer-events-none\">{children}</div>\n ) : (\n children\n )}\n {isDisabled && field.disabledReason && (\n <div\n data-p0=\"disabled-reason\"\n className={\n classNames?.disabledReason ??\n \"pz:rounded-md pz:border pz:border-input pz:bg-muted/40 pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground\"\n }\n >\n <RichText>{field.disabledReason}</RichText>\n </div>\n )}\n {hasError && (\n <span\n data-p0=\"error\"\n className={classNames?.error ?? \"pz:text-destructive pz:text-xs pz:font-medium\"}\n role=\"alert\"\n >\n <RichText>{field.error}</RichText>\n </span>\n )}\n </>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: { disabled: isDisabled, hasError },\n props: mergeProps<\"div\">(\n {\n className: cn(\n classNames?.field ?? \"pz:grid pz:gap-2\",\n isDisabled && classNames?.fieldDisabled,\n className,\n ),\n children: defaultContent,\n ...({\n \"data-p0\": \"field\",\n \"data-p0-field\": field.path,\n \"data-p0-kind\": field.kind,\n ...(isDisabled ? { \"data-p0-disabled\": \"true\", \"aria-disabled\": \"true\" } : {}),\n } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgB,oBAAoB,EAClC,OACA,UACA,WACA,QACA,GAAG,SACwB;CAC3B,MAAM,EAAE,eAAe,eAAe;CACtC,MAAM,WAAW,CAAC,CAAC,MAAM;CACzB,MAAM,aAAa,MAAM;CAMzB,MAAM,iBACJ;EACG,EAJe,MAAM,SAAS,qBAIb,MAAM,SAAS,MAAM,eAAe,MAAM,SAC1D,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,MAAM,SACL,oBAAC,SAAD;KACE,WAAQ;KACR,SAAS,MAAM;KACf,WACE,YAAY,SACZ,GACE,4DACA,YAAY,sBACb;eAGH,oBAAC,UAAD,YAAW,MAAM,OAAiB;KAC5B,GAET,MAAM,QACL,oBAAC,WAAD,YACE,oBAAC,UAAD,YAAW,MAAM,MAAgB,GACvB,EAEV;OACL,MAAM,eACL,oBAAC,KAAD;IACE,WAAQ;IACR,WAAW,YAAY,eAAe;cAEtC,oBAAC,UAAD,YAAW,MAAM,aAAuB;IACtC,EAEF;;EAEP,aACC,oBAAC,OAAD;GAAK,WAAU;GAAwC;GAAe,IAEtE;EAED,cAAc,MAAM,kBACnB,oBAAC,OAAD;GACE,WAAQ;GACR,WACE,YAAY,kBACZ;aAGF,oBAAC,UAAD,YAAW,MAAM,gBAA0B;GACvC;EAEP,YACC,oBAAC,QAAD;GACE,WAAQ;GACR,WAAW,YAAY,SAAS;GAChC,MAAK;aAEL,oBAAC,UAAD,YAAW,MAAM,OAAiB;GAC7B;EAER;AAGL,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GAAE,UAAU;GAAY;GAAU;EACzC,OAAO,WACL;GACE,WAAW,GACT,YAAY,SAAS,oBACrB,cAAc,YAAY,eAC1B,UACD;GACD,UAAU;GAER,WAAW;GACX,iBAAiB,MAAM;GACvB,gBAAgB,MAAM;GACtB,GAAI,aAAa;IAAE,oBAAoB;IAAQ,iBAAiB;IAAQ,GAAG,EAAE;GAEhF,EACD,MACD;EACF,CAAC"}
@@ -1,12 +1,12 @@
1
- import { AnyFieldProps } from "../../../types/field-props.mjs";
2
1
  import { FormGroupHandle } from "../../../types/form-handle.mjs";
3
2
  import { useRender } from "@base-ui/react/use-render";
4
-
5
3
  //#region src/components/defaults/layout/group.d.ts
6
4
  interface DefaultGroupState {
7
- group: FormGroupHandle;
8
- fields: AnyFieldProps[];
9
5
  expanded: boolean;
6
+ hasErrors: boolean;
7
+ errorCount: number;
8
+ setCount: number;
9
+ dirtyCount: number;
10
10
  }
11
11
  interface DefaultGroupProps extends useRender.ComponentProps<"div", DefaultGroupState> {
12
12
  group: FormGroupHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"group.d.mts","names":[],"sources":["../../../../src/components/defaults/layout/group.tsx"],"mappings":";;;;;UAYiB,iBAAA;EACf,KAAA,EAAO,eAAA;EACP,MAAA,EAAQ,aAAA;EACR,QAAA;AAAA;AAAA,UAGe,iBAAA,SAA0B,SAAA,CAAU,cAAA,QAAsB,iBAAA;EACzE,KAAA,EAAO,eAAA;AAAA"}
1
+ {"version":3,"file":"group.d.mts","names":[],"sources":["../../../../src/components/defaults/layout/group.tsx"],"mappings":";;;UAYiB,iBAAA;EACf,QAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,UAAA;AAAA;AAAA,UAGe,iBAAA,SAA0B,SAAA,CAAU,cAAA,QAAsB,iBAAA;EACzE,KAAA,EAAO,eAAA;AAAA"}
@@ -4,76 +4,91 @@ import { IconGlyph } from "../../../widgets/icon-glyph.mjs";
4
4
  import { IconChevronDown } from "../../internal/icons.mjs";
5
5
  import { HoverInfo } from "../../hover-info.mjs";
6
6
  import { Badge } from "../../ui/badge.mjs";
7
- import { useState } from "react";
8
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
7
  import { mergeProps } from "@base-ui/react/merge-props";
10
8
  import { useRender } from "@base-ui/react/use-render";
9
+ import { useState } from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { Accordion } from "@base-ui/react/accordion";
11
12
 
12
13
  //#region src/components/defaults/layout/group.tsx
14
+ const ITEM_VALUE = "group";
13
15
  function DefaultGroup({ group, children, className, render, ...props }) {
14
16
  const { classNames } = useFormConfig();
15
17
  const [expanded, setExpanded] = useState(group.defaultExpand);
16
18
  const hasErrors = group.errorCount > 0;
17
- const defaultContent = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("button", {
18
- type: "button",
19
- "data-p0": "group-header",
20
- className: classNames?.groupHeader ?? cn("pz:flex pz:items-center pz:justify-between pz:gap-4 pz:px-4 pz:py-2 pz:bg-muted pz:cursor-default pz:hover:shadow-sm pz:hover:bg-muted/80 pz:transition-colors pz:text-sm pz:font-medium pz:text-left", hasErrors && "pz:text-destructive pz:bg-destructive/10"),
21
- onClick: () => setExpanded(!expanded),
22
- "aria-expanded": expanded,
23
- children: [/* @__PURE__ */ jsxs("span", {
24
- className: "pz:flex pz:items-center pz:gap-2",
25
- children: [
26
- group.iconKey && /* @__PURE__ */ jsx(IconGlyph, {
27
- keyName: group.iconKey,
28
- size: 14,
29
- className: "pz:text-muted-foreground pz:shrink-0"
30
- }),
31
- group.label ?? group.key,
32
- group.description && /* @__PURE__ */ jsx("span", {
33
- onClick: (e) => e.stopPropagation(),
34
- onKeyDown: (e) => e.stopPropagation(),
35
- children: /* @__PURE__ */ jsx(HoverInfo, { children: group.description })
19
+ const countLabel = group.dirtyCount > 0 ? `${group.dirtyCount} modified` : group.setCount > 0 ? `${group.setCount} set` : null;
20
+ const defaultContent = /* @__PURE__ */ jsx(Accordion.Root, {
21
+ value: expanded ? [ITEM_VALUE] : [],
22
+ onValueChange: (next) => setExpanded(next.includes(ITEM_VALUE)),
23
+ children: /* @__PURE__ */ jsxs(Accordion.Item, {
24
+ value: ITEM_VALUE,
25
+ children: [/* @__PURE__ */ jsx(Accordion.Header, {
26
+ className: "pz:flex",
27
+ children: /* @__PURE__ */ jsxs(Accordion.Trigger, {
28
+ "data-p0": "group-header",
29
+ className: classNames?.groupHeader ?? cn("pz:group/group-trigger", "pz:flex pz:items-center pz:justify-between pz:gap-4 pz:w-full", "pz:px-3.5 pz:py-2.5 pz:cursor-pointer pz:text-sm pz:font-medium pz:text-left", "pz:transition-colors pz:hover:bg-muted/60", "pz:aria-expanded:hover:bg-transparent", "pz:focus-visible:outline-none", hasErrors && "pz:text-destructive pz:bg-destructive/10"),
30
+ children: [/* @__PURE__ */ jsxs("span", {
31
+ className: "pz:flex pz:items-center pz:gap-2",
32
+ children: [
33
+ group.iconKey && /* @__PURE__ */ jsx(IconGlyph, {
34
+ keyName: group.iconKey,
35
+ size: 14,
36
+ className: "pz:text-muted-foreground pz:shrink-0"
37
+ }),
38
+ group.label ?? group.key,
39
+ group.description && /* @__PURE__ */ jsx("span", {
40
+ onClick: (e) => e.stopPropagation(),
41
+ onKeyDown: (e) => e.stopPropagation(),
42
+ children: /* @__PURE__ */ jsx(HoverInfo, { children: group.description })
43
+ })
44
+ ]
45
+ }), /* @__PURE__ */ jsxs("span", {
46
+ className: "pz:flex pz:items-center pz:gap-2",
47
+ children: [
48
+ countLabel && /* @__PURE__ */ jsx(Badge, {
49
+ variant: "secondary",
50
+ "data-p0": "group-badge",
51
+ children: countLabel
52
+ }),
53
+ hasErrors && /* @__PURE__ */ jsxs(Badge, {
54
+ variant: "destructive",
55
+ "data-p0": "group-error-badge",
56
+ children: [
57
+ group.errorCount,
58
+ " ",
59
+ group.errorCount === 1 ? "error" : "errors"
60
+ ]
61
+ }),
62
+ /* @__PURE__ */ jsx(IconChevronDown, {
63
+ width: 16,
64
+ height: 16,
65
+ className: cn("pz:text-muted-foreground pz:transition-transform pz:duration-150", "pz:group-aria-expanded/group-trigger:rotate-180")
66
+ })
67
+ ]
68
+ })]
36
69
  })
37
- ]
38
- }), /* @__PURE__ */ jsxs("span", {
39
- className: "pz:flex pz:items-center pz:gap-2",
40
- children: [
41
- group.setCount > 0 && /* @__PURE__ */ jsxs(Badge, {
42
- variant: "default",
43
- "data-p0": "group-badge",
44
- children: [group.setCount, " set"]
45
- }),
46
- hasErrors && /* @__PURE__ */ jsxs(Badge, {
47
- variant: "destructive",
48
- "data-p0": "group-error-badge",
49
- children: [
50
- group.errorCount,
51
- " ",
52
- group.errorCount === 1 ? "error" : "errors"
53
- ]
54
- }),
55
- /* @__PURE__ */ jsx(IconChevronDown, {
56
- width: 16,
57
- height: 16,
58
- className: cn("pz:text-muted-foreground pz:transition-transform", expanded && "pz:rotate-180")
70
+ }), /* @__PURE__ */ jsx(Accordion.Panel, {
71
+ "data-p0": "group-content",
72
+ className: "pz:overflow-hidden pz:border-t pz:border-border pz:data-open:animate-accordion-down pz:data-closed:animate-accordion-up",
73
+ children: /* @__PURE__ */ jsx("div", {
74
+ className: classNames?.groupContent ?? cn("pz:flex pz:flex-col pz:gap-3 pz:px-3.5 pz:pb-3.5 pz:pt-2", "pz:h-(--accordion-panel-height) pz:data-ending-style:h-0 pz:data-starting-style:h-0"),
75
+ children
59
76
  })
60
- ]
61
- })]
62
- }), expanded && /* @__PURE__ */ jsx("div", {
63
- "data-p0": "group-content",
64
- className: classNames?.groupContent ?? "pz:flex pz:flex-col pz:gap-3 pz:px-3 pz:pb-3 pz:pt-1",
65
- children
66
- })] });
77
+ })]
78
+ })
79
+ });
67
80
  return useRender({
68
81
  defaultTagName: "div",
69
82
  render,
70
83
  state: {
71
- group,
72
- fields: group.fields,
73
- expanded
84
+ expanded,
85
+ hasErrors,
86
+ errorCount: group.errorCount,
87
+ setCount: group.setCount,
88
+ dirtyCount: group.dirtyCount
74
89
  },
75
90
  props: mergeProps({
76
- className: cn(classNames?.group ?? cn("pz:flex pz:flex-col pz:gap-2 pz:border pz:border-input pz:rounded-md pz:overflow-hidden pz:mb-2", hasErrors && "pz:border-destructive"), className),
91
+ className: cn(classNames?.group ?? cn("pz:flex pz:flex-col pz:bg-card pz:border pz:border-border pz:rounded-lg pz:overflow-hidden", hasErrors && "pz:border-destructive"), className),
77
92
  children: defaultContent,
78
93
  "data-p0": "group",
79
94
  "data-p0-group": group.key,
@@ -1 +1 @@
1
- {"version":3,"file":"group.mjs","names":[],"sources":["../../../../src/components/defaults/layout/group.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useState } from \"react\";\nimport { useFormConfig } from \"../../../context/form-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { AnyFieldProps } from \"../../../types/field-props.js\";\nimport type { FormGroupHandle } from \"../../../types/form-handle.js\";\nimport { IconGlyph } from \"../../../widgets/icon-glyph.js\";\nimport { HoverInfo } from \"../../hover-info.js\";\nimport { IconChevronDown } from \"../../internal/icons.js\";\nimport { Badge } from \"../../ui/badge.js\";\n\nexport interface DefaultGroupState {\n group: FormGroupHandle;\n fields: AnyFieldProps[];\n expanded: boolean;\n}\n\nexport interface DefaultGroupProps extends useRender.ComponentProps<\"div\", DefaultGroupState> {\n group: FormGroupHandle;\n}\n\nexport function DefaultGroup({ group, children, className, render, ...props }: DefaultGroupProps) {\n const { classNames } = useFormConfig();\n const [expanded, setExpanded] = useState(group.defaultExpand);\n const hasErrors = group.errorCount > 0;\n\n const defaultContent = (\n <>\n <button\n type=\"button\"\n data-p0=\"group-header\"\n className={\n classNames?.groupHeader ??\n cn(\n \"pz:flex pz:items-center pz:justify-between pz:gap-4 pz:px-4 pz:py-2 pz:bg-muted pz:cursor-default pz:hover:shadow-sm pz:hover:bg-muted/80 pz:transition-colors pz:text-sm pz:font-medium pz:text-left\",\n hasErrors && \"pz:text-destructive pz:bg-destructive/10\",\n )\n }\n onClick={() => setExpanded(!expanded)}\n aria-expanded={expanded}\n >\n <span className=\"pz:flex pz:items-center pz:gap-2\">\n {group.iconKey && (\n <IconGlyph\n keyName={group.iconKey}\n size={14}\n className=\"pz:text-muted-foreground pz:shrink-0\"\n />\n )}\n {group.label ?? group.key}\n {group.description && (\n <span onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()}>\n <HoverInfo>{group.description}</HoverInfo>\n </span>\n )}\n </span>\n <span className=\"pz:flex pz:items-center pz:gap-2\">\n {group.setCount > 0 && (\n <Badge variant=\"default\" data-p0=\"group-badge\">\n {group.setCount} set\n </Badge>\n )}\n {hasErrors && (\n <Badge variant=\"destructive\" data-p0=\"group-error-badge\">\n {group.errorCount} {group.errorCount === 1 ? \"error\" : \"errors\"}\n </Badge>\n )}\n <IconChevronDown\n width={16}\n height={16}\n className={cn(\n \"pz:text-muted-foreground pz:transition-transform\",\n expanded && \"pz:rotate-180\",\n )}\n />\n </span>\n </button>\n {expanded && (\n <div\n data-p0=\"group-content\"\n className={\n classNames?.groupContent ?? \"pz:flex pz:flex-col pz:gap-3 pz:px-3 pz:pb-3 pz:pt-1\"\n }\n >\n {children}\n </div>\n )}\n </>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: { group, fields: group.fields, expanded },\n props: mergeProps<\"div\">(\n {\n className: cn(\n classNames?.group ??\n cn(\n \"pz:flex pz:flex-col pz:gap-2 pz:border pz:border-input pz:rounded-md pz:overflow-hidden pz:mb-2\",\n hasErrors && \"pz:border-destructive\",\n ),\n className,\n ),\n children: defaultContent,\n ...({\n \"data-p0\": \"group\",\n \"data-p0-group\": group.key,\n \"data-p0-expanded\": String(expanded),\n } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;;;;AAsBA,SAAgB,aAAa,EAAE,OAAO,UAAU,WAAW,QAAQ,GAAG,SAA4B;CAChG,MAAM,EAAE,eAAe,eAAe;CACtC,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM,cAAc;CAC7D,MAAM,YAAY,MAAM,aAAa;CAErC,MAAM,iBACJ,8CACE,qBAAC,UAAD;EACE,MAAK;EACL,WAAQ;EACR,WACE,YAAY,eACZ,GACE,yMACA,aAAa,2CACd;EAEH,eAAe,YAAY,CAAC,SAAS;EACrC,iBAAe;YAXjB,CAaE,qBAAC,QAAD;GAAM,WAAU;aAAhB;IACG,MAAM,WACL,oBAAC,WAAD;KACE,SAAS,MAAM;KACf,MAAM;KACN,WAAU;KACV;IAEH,MAAM,SAAS,MAAM;IACrB,MAAM,eACL,oBAAC,QAAD;KAAM,UAAU,MAAM,EAAE,iBAAiB;KAAE,YAAY,MAAM,EAAE,iBAAiB;eAC9E,oBAAC,WAAD,YAAY,MAAM,aAAwB;KACrC;IAEJ;MACP,qBAAC,QAAD;GAAM,WAAU;aAAhB;IACG,MAAM,WAAW,KAChB,qBAAC,OAAD;KAAO,SAAQ;KAAU,WAAQ;eAAjC,CACG,MAAM,UAAS,OACV;;IAET,aACC,qBAAC,OAAD;KAAO,SAAQ;KAAc,WAAQ;eAArC;MACG,MAAM;MAAW;MAAE,MAAM,eAAe,IAAI,UAAU;MACjD;;IAEV,oBAAC,iBAAD;KACE,OAAO;KACP,QAAQ;KACR,WAAW,GACT,oDACA,YAAY,gBACb;KACD;IACG;KACA;KACR,YACC,oBAAC,OAAD;EACE,WAAQ;EACR,WACE,YAAY,gBAAgB;EAG7B;EACG,EAEP;AAGL,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO,QAAQ,MAAM;GAAQ;GAAU;EAChD,OAAO,WACL;GACE,WAAW,GACT,YAAY,SACV,GACE,mGACA,aAAa,wBACd,EACH,UACD;GACD,UAAU;GAER,WAAW;GACX,iBAAiB,MAAM;GACvB,oBAAoB,OAAO,SAAS;GAEvC,EACD,MACD;EACF,CAAC"}
1
+ {"version":3,"file":"group.mjs","names":["AccordionPrimitive"],"sources":["../../../../src/components/defaults/layout/group.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useState } from \"react\";\nimport { useFormConfig } from \"../../../context/form-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FormGroupHandle } from \"../../../types/form-handle.js\";\nimport { IconGlyph } from \"../../../widgets/icon-glyph.js\";\nimport { HoverInfo } from \"../../hover-info.js\";\nimport { IconChevronDown } from \"../../internal/icons.js\";\nimport { Badge } from \"../../ui/badge.js\";\n\nexport interface DefaultGroupState {\n expanded: boolean;\n hasErrors: boolean;\n errorCount: number;\n setCount: number;\n dirtyCount: number;\n}\n\nexport interface DefaultGroupProps extends useRender.ComponentProps<\"div\", DefaultGroupState> {\n group: FormGroupHandle;\n}\n\nconst ITEM_VALUE = \"group\";\n\nexport function DefaultGroup({ group, children, className, render, ...props }: DefaultGroupProps) {\n const { classNames } = useFormConfig();\n // Track open state alongside the accordion so consumers reading\n // `state.expanded` (via render-prop) still get the right value.\n const [expanded, setExpanded] = useState(group.defaultExpand);\n const hasErrors = group.errorCount > 0;\n const showDirty = group.dirtyCount > 0;\n const countLabel = showDirty\n ? `${group.dirtyCount} modified`\n : group.setCount > 0\n ? `${group.setCount} set`\n : null;\n\n const defaultContent = (\n <AccordionPrimitive.Root\n value={expanded ? [ITEM_VALUE] : []}\n onValueChange={(next) => setExpanded(next.includes(ITEM_VALUE))}\n >\n <AccordionPrimitive.Item value={ITEM_VALUE}>\n <AccordionPrimitive.Header className=\"pz:flex\">\n <AccordionPrimitive.Trigger\n data-p0=\"group-header\"\n className={\n classNames?.groupHeader ??\n cn(\n \"pz:group/group-trigger\",\n \"pz:flex pz:items-center pz:justify-between pz:gap-4 pz:w-full\",\n \"pz:px-3.5 pz:py-2.5 pz:cursor-pointer pz:text-sm pz:font-medium pz:text-left\",\n \"pz:transition-colors pz:hover:bg-muted/60\",\n \"pz:aria-expanded:hover:bg-transparent\",\n \"pz:focus-visible:outline-none\",\n hasErrors && \"pz:text-destructive pz:bg-destructive/10\",\n )\n }\n >\n <span className=\"pz:flex pz:items-center pz:gap-2\">\n {group.iconKey && (\n <IconGlyph\n keyName={group.iconKey}\n size={14}\n className=\"pz:text-muted-foreground pz:shrink-0\"\n />\n )}\n {group.label ?? group.key}\n {group.description && (\n <span onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()}>\n <HoverInfo>{group.description}</HoverInfo>\n </span>\n )}\n </span>\n <span className=\"pz:flex pz:items-center pz:gap-2\">\n {countLabel && (\n <Badge variant=\"secondary\" data-p0=\"group-badge\">\n {countLabel}\n </Badge>\n )}\n {hasErrors && (\n <Badge variant=\"destructive\" data-p0=\"group-error-badge\">\n {group.errorCount} {group.errorCount === 1 ? \"error\" : \"errors\"}\n </Badge>\n )}\n <IconChevronDown\n width={16}\n height={16}\n className={cn(\n \"pz:text-muted-foreground pz:transition-transform pz:duration-150\",\n \"pz:group-aria-expanded/group-trigger:rotate-180\",\n )}\n />\n </span>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n <AccordionPrimitive.Panel\n data-p0=\"group-content\"\n // The library ships keyframes via `tw-animate-css` —\n // `animate-accordion-down` / `animate-accordion-up` plus the\n // `--accordion-panel-height` var that base-ui populates on the\n // panel give a smooth height transition without JS measuring.\n className=\"pz:overflow-hidden pz:border-t pz:border-border pz:data-open:animate-accordion-down pz:data-closed:animate-accordion-up\"\n >\n <div\n className={\n classNames?.groupContent ??\n cn(\n \"pz:flex pz:flex-col pz:gap-3 pz:px-3.5 pz:pb-3.5 pz:pt-2\",\n \"pz:h-(--accordion-panel-height) pz:data-ending-style:h-0 pz:data-starting-style:h-0\",\n )\n }\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n </AccordionPrimitive.Item>\n </AccordionPrimitive.Root>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: {\n expanded,\n hasErrors,\n errorCount: group.errorCount,\n setCount: group.setCount,\n dirtyCount: group.dirtyCount,\n },\n props: mergeProps<\"div\">(\n {\n className: cn(\n classNames?.group ??\n cn(\n \"pz:flex pz:flex-col pz:bg-card pz:border pz:border-border pz:rounded-lg pz:overflow-hidden\",\n hasErrors && \"pz:border-destructive\",\n ),\n className,\n ),\n children: defaultContent,\n ...({\n \"data-p0\": \"group\",\n \"data-p0-group\": group.key,\n \"data-p0-expanded\": String(expanded),\n } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAwBA,MAAM,aAAa;AAEnB,SAAgB,aAAa,EAAE,OAAO,UAAU,WAAW,QAAQ,GAAG,SAA4B;CAChG,MAAM,EAAE,eAAe,eAAe;CAGtC,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM,cAAc;CAC7D,MAAM,YAAY,MAAM,aAAa;CAErC,MAAM,aADY,MAAM,aAAa,IAEjC,GAAG,MAAM,WAAW,aACpB,MAAM,WAAW,IACf,GAAG,MAAM,SAAS,QAClB;CAEN,MAAM,iBACJ,oBAACA,UAAmB,MAApB;EACE,OAAO,WAAW,CAAC,WAAW,GAAG,EAAE;EACnC,gBAAgB,SAAS,YAAY,KAAK,SAAS,WAAW,CAAC;YAE/D,qBAACA,UAAmB,MAApB;GAAyB,OAAO;aAAhC,CACE,oBAACA,UAAmB,QAApB;IAA2B,WAAU;cACnC,qBAACA,UAAmB,SAApB;KACE,WAAQ;KACR,WACE,YAAY,eACZ,GACE,0BACA,iEACA,gFACA,6CACA,yCACA,iCACA,aAAa,2CACd;eAZL,CAeE,qBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,MAAM,WACL,oBAAC,WAAD;QACE,SAAS,MAAM;QACf,MAAM;QACN,WAAU;QACV;OAEH,MAAM,SAAS,MAAM;OACrB,MAAM,eACL,oBAAC,QAAD;QAAM,UAAU,MAAM,EAAE,iBAAiB;QAAE,YAAY,MAAM,EAAE,iBAAiB;kBAC9E,oBAAC,WAAD,YAAY,MAAM,aAAwB;QACrC;OAEJ;SACP,qBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,cACC,oBAAC,OAAD;QAAO,SAAQ;QAAY,WAAQ;kBAChC;QACK;OAET,aACC,qBAAC,OAAD;QAAO,SAAQ;QAAc,WAAQ;kBAArC;SACG,MAAM;SAAW;SAAE,MAAM,eAAe,IAAI,UAAU;SACjD;;OAEV,oBAAC,iBAAD;QACE,OAAO;QACP,QAAQ;QACR,WAAW,GACT,oEACA,kDACD;QACD;OACG;QACoB;;IACH,GAC5B,oBAACA,UAAmB,OAApB;IACE,WAAQ;IAKR,WAAU;cAEV,oBAAC,OAAD;KACE,WACE,YAAY,gBACZ,GACE,4DACA,sFACD;KAGF;KACG;IACmB,EACH;;EACF;AAG5B,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GACL;GACA;GACA,YAAY,MAAM;GAClB,UAAU,MAAM;GAChB,YAAY,MAAM;GACnB;EACD,OAAO,WACL;GACE,WAAW,GACT,YAAY,SACV,GACE,8FACA,aAAa,wBACd,EACH,UACD;GACD,UAAU;GAER,WAAW;GACX,iBAAiB,MAAM;GACvB,oBAAoB,OAAO,SAAS;GAEvC,EACD,MACD;EACF,CAAC"}
@@ -1,13 +1,18 @@
1
- import { FormGroupHandle, FormSectionHandle } from "../../../types/form-handle.mjs";
1
+ import { FormSectionHandle } from "../../../types/form-handle.mjs";
2
2
  import { useRender } from "@base-ui/react/use-render";
3
-
4
3
  //#region src/components/defaults/layout/section.d.ts
5
4
  interface DefaultSectionState {
6
- section: FormSectionHandle;
7
- groups: FormGroupHandle[];
5
+ hasErrors: boolean;
8
6
  }
9
7
  interface DefaultSectionProps extends useRender.ComponentProps<"div", DefaultSectionState> {
10
8
  section: FormSectionHandle;
9
+ /**
10
+ * Suppress the section's own header. Set when several consecutive sections
11
+ * share an umbrella label so the label only renders above the first
12
+ * section in the cluster (the renderer in `pipe-form/content.tsx` and
13
+ * `search-form/content.tsx` handles this automatically).
14
+ */
15
+ hideLabel?: boolean;
11
16
  }
12
17
  //#endregion
13
18
  export { DefaultSectionProps };
@@ -1 +1 @@
1
- {"version":3,"file":"section.d.mts","names":[],"sources":["../../../../src/components/defaults/layout/section.tsx"],"mappings":";;;;UAMiB,mBAAA;EACf,OAAA,EAAS,iBAAA;EACT,MAAA,EAAQ,eAAA;AAAA;AAAA,UAGO,mBAAA,SAA4B,SAAA,CAAU,cAAA,QAAsB,mBAAA;EAC3E,OAAA,EAAS,iBAAA;AAAA"}
1
+ {"version":3,"file":"section.d.mts","names":[],"sources":["../../../../src/components/defaults/layout/section.tsx"],"mappings":";;;UAMiB,mBAAA;EACf,SAAA;AAAA;AAAA,UAGe,mBAAA,SAA4B,SAAA,CAAU,cAAA,QAAsB,mBAAA;EAC3E,OAAA,EAAS,iBAAA;;;;AADX;;;EAQE,SAAA;AAAA"}
@@ -1,32 +1,30 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { useFormConfig } from "../../../context/form-context.mjs";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
3
  import { mergeProps } from "@base-ui/react/merge-props";
5
4
  import { useRender } from "@base-ui/react/use-render";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
 
7
7
  //#region src/components/defaults/layout/section.tsx
8
- function DefaultSection({ section, children, className, render, ...props }) {
8
+ function DefaultSection({ section, children, className, render, hideLabel, ...props }) {
9
9
  const { classNames } = useFormConfig();
10
- const defaultContent = /* @__PURE__ */ jsxs(Fragment, { children: [section.label && /* @__PURE__ */ jsxs("div", {
10
+ const hasErrors = section.groups.some((g) => g.errorCount > 0);
11
+ const defaultContent = /* @__PURE__ */ jsxs(Fragment, { children: [!hideLabel && section.label && /* @__PURE__ */ jsxs("div", {
11
12
  "data-p0": "section-header",
12
- className: classNames?.sectionLabel ?? "pz:mb-2 pz:flex pz:flex-col pz:gap-1",
13
+ className: classNames?.sectionLabel ?? "pz:flex pz:items-center pz:gap-2.5 pz:px-1",
13
14
  children: [/* @__PURE__ */ jsx("h2", {
14
- className: "pz:text-sm pz:font-semibold pz:tracking-tight pz:m-0",
15
+ className: cn("pz:text-[10.5px] pz:font-medium pz:tracking-[0.12em] pz:uppercase pz:text-muted-foreground pz:m-0 pz:whitespace-nowrap"),
15
16
  children: section.label
16
- }), section.description && /* @__PURE__ */ jsx("p", {
17
- className: cn("pz:text-xs pz:text-muted-foreground pz:m-0", classNames?.sectionDescription),
18
- children: section.description
17
+ }), /* @__PURE__ */ jsx("span", {
18
+ "aria-hidden": true,
19
+ className: "pz:flex-1 pz:h-px pz:bg-border"
19
20
  })]
20
21
  }), children] });
21
22
  return useRender({
22
23
  defaultTagName: "div",
23
24
  render,
24
- state: {
25
- section,
26
- groups: section.groups
27
- },
25
+ state: { hasErrors },
28
26
  props: mergeProps({
29
- className: cn(classNames?.section ?? "pz:py-2", className),
27
+ className: cn(classNames?.section ?? "pz:flex pz:flex-col pz:gap-2", className),
30
28
  children: defaultContent,
31
29
  "data-p0": "section",
32
30
  "data-p0-section": section.key