@pipe0/react 0.0.5 → 0.0.7

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 +16 -0
  2. package/README.md +69 -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 -11
  8. package/dist/components/compound/pipe-catalog/card.d.mts.map +1 -1
  9. package/dist/components/compound/pipe-catalog/card.mjs +30 -25
  10. package/dist/components/compound/pipe-catalog/card.mjs.map +1 -1
  11. package/dist/components/compound/pipe-catalog/category-filter.d.mts +7 -10
  12. package/dist/components/compound/pipe-catalog/category-filter.d.mts.map +1 -1
  13. package/dist/components/compound/pipe-catalog/category-filter.mjs +18 -9
  14. package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -1
  15. package/dist/components/compound/pipe-catalog/column-filter.d.mts +7 -13
  16. package/dist/components/compound/pipe-catalog/column-filter.d.mts.map +1 -1
  17. package/dist/components/compound/pipe-catalog/column-filter.mjs +13 -7
  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 +9 -24
  28. package/dist/components/compound/pipe-catalog/list.d.mts.map +1 -1
  29. package/dist/components/compound/pipe-catalog/list.mjs +18 -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 +6 -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 +10 -9
  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 +7 -2
  49. package/dist/components/compound/pipe-form/content.d.mts.map +1 -1
  50. package/dist/components/compound/pipe-form/content.mjs +23 -25
  51. package/dist/components/compound/pipe-form/content.mjs.map +1 -1
  52. package/dist/components/compound/pipe-form/errors.d.mts +27 -0
  53. package/dist/components/compound/pipe-form/errors.d.mts.map +1 -0
  54. package/dist/components/compound/pipe-form/errors.mjs +48 -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 -12
  82. package/dist/components/compound/search-catalog/card.d.mts.map +1 -1
  83. package/dist/components/compound/search-catalog/card.mjs +33 -28
  84. package/dist/components/compound/search-catalog/card.mjs.map +1 -1
  85. package/dist/components/compound/search-catalog/category-filter.d.mts +8 -10
  86. package/dist/components/compound/search-catalog/category-filter.d.mts.map +1 -1
  87. package/dist/components/compound/search-catalog/category-filter.mjs +18 -9
  88. package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -1
  89. package/dist/components/compound/search-catalog/column-filter.d.mts +7 -9
  90. package/dist/components/compound/search-catalog/column-filter.d.mts.map +1 -1
  91. package/dist/components/compound/search-catalog/column-filter.mjs +13 -7
  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 +9 -9
  99. package/dist/components/compound/search-catalog/list.d.mts.map +1 -1
  100. package/dist/components/compound/search-catalog/list.mjs +18 -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 +6 -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 +10 -9
  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 +7 -2
  120. package/dist/components/compound/search-form/content.d.mts.map +1 -1
  121. package/dist/components/compound/search-form/content.mjs +23 -25
  122. package/dist/components/compound/search-form/content.mjs.map +1 -1
  123. package/dist/components/compound/search-form/errors.d.mts +27 -0
  124. package/dist/components/compound/search-form/errors.d.mts.map +1 -0
  125. package/dist/components/compound/search-form/errors.mjs +48 -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 +6 -6
  153. package/dist/components/compound/searches-catalog/card.d.mts.map +1 -1
  154. package/dist/components/compound/searches-catalog/card.mjs +40 -28
  155. package/dist/components/compound/searches-catalog/card.mjs.map +1 -1
  156. package/dist/components/compound/searches-catalog/category-filter.d.mts +8 -10
  157. package/dist/components/compound/searches-catalog/category-filter.d.mts.map +1 -1
  158. package/dist/components/compound/searches-catalog/category-filter.mjs +18 -9
  159. package/dist/components/compound/searches-catalog/category-filter.mjs.map +1 -1
  160. package/dist/components/compound/searches-catalog/column-filter.d.mts +7 -9
  161. package/dist/components/compound/searches-catalog/column-filter.d.mts.map +1 -1
  162. package/dist/components/compound/searches-catalog/column-filter.mjs +13 -7
  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 +9 -9
  170. package/dist/components/compound/searches-catalog/list.d.mts.map +1 -1
  171. package/dist/components/compound/searches-catalog/list.mjs +18 -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 +6 -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 +10 -9
  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 -1
  205. package/dist/components/defaults/layout/field-wrapper.d.mts.map +1 -1
  206. package/dist/components/defaults/layout/field-wrapper.mjs +7 -2
  207. package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -1
  208. package/dist/components/defaults/layout/group.d.mts +6 -3
  209. package/dist/components/defaults/layout/group.d.mts.map +1 -1
  210. package/dist/components/defaults/layout/group.mjs +74 -53
  211. package/dist/components/defaults/layout/group.mjs.map +1 -1
  212. package/dist/components/defaults/layout/section.d.mts +9 -3
  213. package/dist/components/defaults/layout/section.d.mts.map +1 -1
  214. package/dist/components/defaults/layout/section.mjs +13 -11
  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 +1 -1
  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 +4116 -1
  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
package/package.json CHANGED
@@ -1,7 +1,34 @@
1
1
  {
2
2
  "name": "@pipe0/react",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
+ "description": "React component library for building forms and catalogs powered by pipe0 pipes and searches.",
5
+ "license": "MIT",
6
+ "author": "pipe0",
4
7
  "type": "module",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/pipe-0/pipe0-ts.git",
11
+ "directory": "packages/react"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/pipe-0/pipe0-ts/issues"
15
+ },
16
+ "keywords": [
17
+ "react",
18
+ "react-component",
19
+ "pipe0",
20
+ "forms",
21
+ "catalog",
22
+ "ui",
23
+ "data-enrichment",
24
+ "prospecting"
25
+ ],
26
+ "sideEffects": [
27
+ "**/*.css"
28
+ ],
29
+ "engines": {
30
+ "node": ">=18.0.0"
31
+ },
5
32
  "publishConfig": {
6
33
  "provenance": false,
7
34
  "access": "public"
@@ -21,52 +48,77 @@
21
48
  "CHANGELOG.md"
22
49
  ],
23
50
  "peerDependencies": {
51
+ "@dnd-kit/core": "^6.0.0",
52
+ "@dnd-kit/sortable": "^10.0.0",
53
+ "@dnd-kit/utilities": "^3.0.0",
54
+ "@floating-ui/react": "^0.26.0 || ^0.27.0",
55
+ "@hookform/resolvers": "^5.0.0",
56
+ "@tanstack/react-table": "^8.0.0",
57
+ "@tiptap/pm": "^2.12.0 || ^3.0.0",
58
+ "@tiptap/react": "^2.12.0 || ^3.0.0",
59
+ "@tiptap/starter-kit": "^2.12.0 || ^3.0.0",
60
+ "@tiptap/suggestion": "^2.12.0 || ^3.0.0",
61
+ "@types/react": "^18.0.0 || ^19.0.0",
62
+ "@types/react-dom": "^18.0.0 || ^19.0.0",
24
63
  "react": "^18.0.0 || ^19.0.0",
25
- "react-dom": "^18.0.0 || ^19.0.0"
64
+ "react-dom": "^18.0.0 || ^19.0.0",
65
+ "react-hook-form": "^7.0.0",
66
+ "zod": "^4.0.0"
67
+ },
68
+ "peerDependenciesMeta": {
69
+ "@hookform/resolvers": {
70
+ "optional": true
71
+ },
72
+ "@types/react": {
73
+ "optional": true
74
+ },
75
+ "@types/react-dom": {
76
+ "optional": true
77
+ }
26
78
  },
27
79
  "dependencies": {
28
80
  "@base-ui/react": "^1.3.0",
29
- "@dnd-kit/core": "^6.3.1",
30
- "@dnd-kit/sortable": "^10.0.0",
31
- "@dnd-kit/utilities": "^3.2.2",
32
- "@floating-ui/react": "^0.26.0",
33
- "@hookform/resolvers": "^5.2.1",
34
81
  "@radix-ui/react-slot": "^1.2.2",
35
82
  "@tanstack/match-sorter-utils": "^8.19.4",
36
- "@tanstack/react-table": "^8.21.3",
37
- "@tiptap/pm": "^2.12.0",
38
- "@tiptap/react": "^2.12.0",
39
- "@tiptap/starter-kit": "^2.12.0",
40
- "@tiptap/suggestion": "^2.12.0",
41
83
  "class-variance-authority": "^0.7.1",
42
84
  "clsx": "^2.1.1",
43
85
  "cmdk": "^1.1.1",
44
86
  "jsonata": "^2.1.0",
45
87
  "lucide-react": "^0.475.0",
46
- "react-hook-form": "^7.62.0",
47
- "shadcn": "^4.2.0",
48
88
  "swr": "^2.4.1",
49
89
  "tailwind-merge": "^3.3.1",
50
- "tw-animate-css": "^1.4.0",
51
- "zod": "4.1.12",
52
- "@pipe0/base": "0.0.5"
90
+ "@pipe0/base": "0.0.7"
53
91
  },
54
92
  "devDependencies": {
93
+ "@dnd-kit/core": "^6.3.1",
94
+ "@dnd-kit/sortable": "^10.0.0",
95
+ "@dnd-kit/utilities": "^3.2.2",
96
+ "@floating-ui/react": "^0.26.0",
97
+ "@hookform/resolvers": "^5.2.1",
55
98
  "@storybook/addon-docs": "^10.3.5",
56
99
  "@storybook/react-vite": "^10.3.5",
57
100
  "@tailwindcss/cli": "^4.2.3",
58
101
  "@tailwindcss/vite": "^4.1.11",
102
+ "@tanstack/react-table": "^8.21.3",
103
+ "@tiptap/pm": "^2.12.0",
104
+ "@tiptap/react": "^2.12.0",
105
+ "@tiptap/starter-kit": "^2.12.0",
106
+ "@tiptap/suggestion": "^2.12.0",
59
107
  "@types/react": "^19.0.8",
60
108
  "@types/react-dom": "^19.0.3",
61
109
  "@vitejs/plugin-react": "^6.0.1",
62
110
  "react": "^19.0.0",
63
111
  "react-dom": "^19.0.0",
112
+ "react-hook-form": "^7.62.0",
113
+ "shadcn": "^4.2.0",
64
114
  "storybook": "^10.3.5",
65
115
  "tailwindcss": "^4.1.11",
66
116
  "tailwindcss-animate": "^1.0.7",
67
117
  "tsdown": "^0.21.9",
118
+ "tw-animate-css": "^1.4.0",
68
119
  "typescript": "^5.9.3",
69
- "vite": "^8.0.10"
120
+ "vite": "^8.0.10",
121
+ "zod": "4.1.12"
70
122
  },
71
123
  "scripts": {
72
124
  "dev:css": "tailwindcss -i src/styles/pipe0.css -o dist/styles/pipe0-form.css --watch",
@@ -1,15 +0,0 @@
1
- import { PipeCatalogActiveFilters } from "./active-filters.mjs";
2
- import { PipeCatalogCard } from "./card.mjs";
3
- import { PipeCatalogCategoryFilter } from "./category-filter.mjs";
4
- import { PipeCatalogColumnFilter } from "./column-filter.mjs";
5
- import { PipeCatalogInputFieldFilter } from "./input-field-filter.mjs";
6
- import { PipeCatalogOutputFieldFilter } from "./output-field-filter.mjs";
7
- import { PipeCatalogProviderFilter } from "./provider-filter.mjs";
8
- import { PipeCatalogColumnFilters } from "./column-filters.mjs";
9
- import { PipeCatalogEmpty } from "./empty.mjs";
10
- import { PipeCatalogList } from "./list.mjs";
11
- import { PipeCatalogSearchFilter } from "./search-filter.mjs";
12
- import { PipeCatalog } from "./root.mjs";
13
- import { PipeCatalogTagFilter } from "./tag-filter.mjs";
14
-
15
- export { };
@@ -1,11 +0,0 @@
1
- import { PipeFormField } from "./field.mjs";
2
- import { PipeFormGroup } from "./group.mjs";
3
- import { PipeFormSection } from "./section.mjs";
4
- import { PipeFormContent } from "./content.mjs";
5
- import { PipeFormFooter } from "./footer.mjs";
6
- import { PipeFormHeader } from "./header.mjs";
7
- import { PipeFormSubmitButton } from "./submit-button.mjs";
8
- import { PipeForm } from "./root.mjs";
9
- import { PipeFormTitle } from "./title.mjs";
10
-
11
- export { };
@@ -1,14 +0,0 @@
1
- import { SearchCatalogActiveFilters } from "./active-filters.mjs";
2
- import { SearchCatalogCard } from "./card.mjs";
3
- import { SearchCatalogCategoryFilter } from "./category-filter.mjs";
4
- import { SearchCatalogColumnFilter } from "./column-filter.mjs";
5
- import { SearchCatalogOutputFieldFilter } from "./output-field-filter.mjs";
6
- import { SearchCatalogProviderFilter } from "./provider-filter.mjs";
7
- import { SearchCatalogColumnFilters } from "./column-filters.mjs";
8
- import { SearchCatalogEmpty } from "./empty.mjs";
9
- import { SearchCatalogList } from "./list.mjs";
10
- import { SearchCatalogSearchFilter } from "./search-filter.mjs";
11
- import { SearchCatalog } from "./root.mjs";
12
- import { SearchCatalogTagFilter } from "./tag-filter.mjs";
13
-
14
- export { };
@@ -1,11 +0,0 @@
1
- import { SearchFormField } from "./field.mjs";
2
- import { SearchFormGroup } from "./group.mjs";
3
- import { SearchFormSection } from "./section.mjs";
4
- import { SearchFormContent } from "./content.mjs";
5
- import { SearchFormFooter } from "./footer.mjs";
6
- import { SearchFormHeader } from "./header.mjs";
7
- import { SearchFormSubmitButton } from "./submit-button.mjs";
8
- import { SearchForm } from "./root.mjs";
9
- import { SearchFormTitle } from "./title.mjs";
10
-
11
- export { };
@@ -1,14 +0,0 @@
1
- import { SearchesCatalogActiveFilters } from "./active-filters.mjs";
2
- import { SearchesCatalogCard } from "./card.mjs";
3
- import { SearchesCatalogCategoryFilter } from "./category-filter.mjs";
4
- import { SearchesCatalogColumnFilter } from "./column-filter.mjs";
5
- import { SearchesCatalogOutputFieldFilter } from "./output-field-filter.mjs";
6
- import { SearchesCatalogProviderFilter } from "./provider-filter.mjs";
7
- import { SearchesCatalogColumnFilters } from "./column-filters.mjs";
8
- import { SearchesCatalogEmpty } from "./empty.mjs";
9
- import { SearchesCatalogList } from "./list.mjs";
10
- import { SearchesCatalogSearchFilter } from "./search-filter.mjs";
11
- import { SearchesCatalog } from "./root.mjs";
12
- import { SearchesCatalogTagFilter } from "./tag-filter.mjs";
13
-
14
- export { };
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipes-trigger-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/pipes-trigger-input.tsx"],"sourcesContent":["import {\n type ConditionOperators,\n type PipesTriggerMeta,\n type PipeTrigger,\n type RecordFieldType,\n TRIGGER_OPERATOR_LABELS,\n TRIGGER_STATUS_OPERATORS,\n TRIGGER_VALUE_OPERATORS,\n} from \"@pipe0/base\";\nimport { useCallback, useMemo } from \"react\";\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { HoverInfo } from \"../../hover-info.js\";\nimport { IconPlus } from \"../../internal/icons.js\";\nimport { Badge } from \"../../ui/badge.js\";\nimport { Button } from \"../../ui/button.js\";\nimport { Input } from \"../../ui/input.js\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select.js\";\nimport { FieldSectionEnumeration } from \"../field-section-enumeration.js\";\n\n// Use a loose type for internal manipulation since the discriminated union\n// is strict about property/operator/value combinations.\ntype Condition = {\n field_name: string;\n property: string;\n operator: string;\n value: unknown;\n};\n\nconst OPERATORS_BY_TYPE: Record<RecordFieldType, ConditionOperators[]> = {\n string: [\"eq\", \"neq\", \"contains\"],\n number: [\"eq\", \"neq\", \"gt\", \"gte\", \"lt\", \"lte\"],\n boolean: [\"eq\", \"neq\"],\n json: [],\n unknown: [],\n};\n\nconst EMPTY_CONDITION: Condition = {\n field_name: \"\",\n property: \"value\",\n operator: \"eq\",\n value: \"\",\n};\n\nconst CONNECTOR_GAP = 32;\n\ntype MetaField = {\n fieldName: string;\n fieldLabel: string;\n type: RecordFieldType;\n format: string | null;\n};\n\nfunction ConditionRow({\n condition,\n index,\n eligibleFields,\n fieldsByName,\n isFirst,\n isLast,\n logic,\n form,\n basePath,\n onUpdate,\n onRemove,\n onAddCondition,\n onLogicChange,\n}: {\n condition: Condition;\n index: number;\n eligibleFields: MetaField[];\n fieldsByName: ReadonlyMap<string, MetaField>;\n isFirst: boolean;\n isLast: boolean;\n logic: PipeTrigger[\"when\"][\"logic\"];\n form: UseFormReturn<any>;\n basePath: string;\n onUpdate: (index: number, condition: Condition) => void;\n onRemove: (index: number) => void;\n onAddCondition: () => void;\n onLogicChange: (logic: PipeTrigger[\"when\"][\"logic\"]) => void;\n}) {\n const conditionPath = `${basePath}.when.conditions.${index}`;\n const valueError = useFieldError(form, `${conditionPath}.value`);\n const fieldNameError = useFieldError(form, `${conditionPath}.field_name`);\n const operatorError = useFieldError(form, `${conditionPath}.operator`);\n const propertyError = useFieldError(form, `${conditionPath}.property`);\n\n const showConnector = !(isFirst && isLast);\n const hasEligibleFields = eligibleFields.length > 0;\n const selectedField = condition.field_name ? fieldsByName.get(condition.field_name) : undefined;\n\n const availableOperators = useMemo(() => {\n if (condition.property === \"status\") {\n return TRIGGER_STATUS_OPERATORS.map((op) => ({\n value: op,\n label: TRIGGER_OPERATOR_LABELS[op],\n }));\n }\n if (!selectedField?.type) return [];\n return TRIGGER_VALUE_OPERATORS.map((op) => ({\n value: op,\n label: TRIGGER_OPERATOR_LABELS[op],\n })).filter((op) => OPERATORS_BY_TYPE[selectedField.type].includes(op.value));\n }, [condition.property, selectedField]);\n\n const renderValueInput = () => {\n if (!condition.field_name || !selectedField) {\n return <Input className=\"pz:w-32\" placeholder=\"\" disabled aria-invalid={!!valueError} />;\n }\n\n if (condition.property === \"status\") {\n return (\n <Select\n value={String(condition.value) || undefined}\n onValueChange={(v) => onUpdate(index, { ...condition, value: v })}\n >\n <SelectTrigger className=\"pz:w-32\" aria-invalid={!!valueError}>\n <SelectValue placeholder=\"--status--\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"completed\">completed</SelectItem>\n <SelectItem value=\"skipped\">skipped</SelectItem>\n <SelectItem value=\"failed\">failed</SelectItem>\n <SelectItem value=\"no_result\">no_result</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n if (selectedField.type === \"boolean\") {\n return (\n <Select\n value={String(condition.value)}\n onValueChange={(v) => onUpdate(index, { ...condition, value: v })}\n >\n <SelectTrigger className=\"pz:w-24\" aria-invalid={!!valueError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n if (selectedField.type === \"number\") {\n return (\n <Input\n type=\"number\"\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(Number(condition.value ?? 0))}\n onChange={(e) =>\n onUpdate(index, {\n ...condition,\n value: Number(e.target.value) || 0,\n })\n }\n placeholder=\"\"\n />\n );\n }\n\n return (\n <Input\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(condition.value ?? \"\")}\n onChange={(e) => onUpdate(index, { ...condition, value: e.target.value })}\n placeholder=\"\"\n />\n );\n };\n\n const errorMessage = valueError || fieldNameError || operatorError || propertyError;\n\n return (\n <div>\n <div className={cn(\"pz:relative\", showConnector && \"pz:pl-17\")}>\n {showConnector && (\n <>\n {isFirst ? (\n <div\n className=\"pz:absolute pz:left-7 pz:w-10 pz:border-l-2 pz:border-t-2 pz:border-input pz:rounded-tl-lg pz:pointer-events-none\"\n style={{ top: \"50%\", bottom: -CONNECTOR_GAP }}\n />\n ) : (\n <div\n className=\"pz:absolute pz:left-7 pz:w-10 pz:border-l-2 pz:border-b-2 pz:border-input pz:rounded-bl-lg pz:pointer-events-none\"\n style={{ top: -CONNECTOR_GAP, bottom: \"50%\" }}\n />\n )}\n {!isFirst && !isLast && (\n <div\n className=\"pz:absolute pz:left-7 pz:border-l-2 pz:border-input pz:pointer-events-none\"\n style={{ top: \"50%\", bottom: -CONNECTOR_GAP }}\n />\n )}\n {!isFirst && (\n <div\n className=\"pz:absolute pz:left-7 pz:z-10\"\n style={{\n top: -CONNECTOR_GAP / 2,\n transform: \"translate(-50%, -50%)\",\n }}\n >\n <Select value={logic} onValueChange={(v) => onLogicChange(v as \"and\" | \"or\")}>\n <SelectTrigger className=\"pz:w-17 pz:h-6 pz:text-xs pz:bg-background pz:hover:bg-accent\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n <SelectItem value=\"and\">AND</SelectItem>\n <SelectItem value=\"or\">OR</SelectItem>\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n )}\n </>\n )}\n <div className=\"pz:flex pz:flex-wrap pz:items-center pz:gap-2\">\n <FieldSectionEnumeration index={index} onRemove={onRemove} />\n <Select\n value={condition.field_name || undefined}\n disabled={!hasEligibleFields}\n onValueChange={(v) => {\n if (v === null) return;\n onUpdate(index, {\n ...condition,\n field_name: v,\n operator: \"eq\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"pz:w-40\" aria-invalid={!!fieldNameError}>\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent>\n {eligibleFields.map((f) => (\n <SelectItem key={f.fieldName} value={f.fieldName}>\n {f.fieldLabel || f.fieldName}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {!hasEligibleFields && (\n <span className=\"pz:text-xs pz:text-muted-foreground\">\n No fields available{\" \"}\n <HoverInfo>Conditions require plain fields. JSON fields are not allowed.</HoverInfo>\n </span>\n )}\n\n {selectedField?.type && (\n <>\n <Badge\n variant=\"secondary\"\n className=\"pz:bg-accent pz:border pz:border-input pz:font-normal pz:text-muted-foreground pz:h-8\"\n >\n &apos;s\n </Badge>\n <Select\n defaultValue=\"value\"\n value={condition.property}\n onValueChange={(v) => {\n if (v === null) return;\n onUpdate(index, {\n ...condition,\n property: v,\n operator: \"eq\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"pz:w-28\" aria-invalid={!!propertyError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"value\">value</SelectItem>\n <SelectItem value=\"status\">status</SelectItem>\n </SelectContent>\n </Select>\n\n <Select\n value={condition.operator}\n onValueChange={(v) =>\n onUpdate(index, {\n ...condition,\n operator: v as ConditionOperators,\n })\n }\n >\n <SelectTrigger className=\"pz:w-28\" aria-invalid={!!operatorError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {availableOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {renderValueInput()}\n </>\n )}\n </div>\n {errorMessage && (\n <span\n className=\"pz:text-destructive pz:text-xs pz:font-medium pz:mt-1 pz:block\"\n role=\"alert\"\n >\n {errorMessage}\n </span>\n )}\n </div>\n {isLast && (\n <div className=\"pz:flex pz:items-center pz:gap-2\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" onClick={onAddCondition}>\n <IconPlus />\n New rule\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nexport function PipesTriggerInputAdapter(field: FieldHandle<\"pipes_trigger_input\">) {\n const pipeTrigger = field.value as PipeTrigger | null;\n const meta = field.meta as PipesTriggerMeta;\n\n // Built once per render of the adapter and reused across every condition\n // row, instead of each row scanning `meta.fields` linearly. With N rows and\n // M fields this turns O(N·M) lookups into O(N+M).\n const eligibleFields = useMemo(\n () => meta.fields.filter((f) => OPERATORS_BY_TYPE[f.type].length > 0),\n [meta.fields],\n );\n const fieldsByName = useMemo(\n () => new Map(meta.fields.map((f) => [f.fieldName, f])),\n [meta.fields],\n );\n\n const addTrigger = useCallback(() => {\n field.setValue({\n action: \"run\",\n when: {\n logic: \"and\",\n conditions: [{ ...EMPTY_CONDITION }],\n },\n });\n }, [field]);\n\n const updateCondition = (index: number, condition: Condition) => {\n if (!pipeTrigger) return;\n const newConditions = [...pipeTrigger.when.conditions] as Condition[];\n newConditions[index] = condition;\n field.setValue({\n ...pipeTrigger,\n when: { ...pipeTrigger.when, conditions: newConditions },\n });\n };\n\n const removeCondition = (index: number) => {\n if (!pipeTrigger) return;\n if (pipeTrigger.when.conditions.length <= 1) {\n field.setValue(null);\n return;\n }\n const newConditions = pipeTrigger.when.conditions.filter((_, i) => i !== index);\n field.setValue({\n ...pipeTrigger,\n when: { ...pipeTrigger.when, conditions: newConditions },\n });\n };\n\n const addCondition = () => {\n if (!pipeTrigger) return;\n field.setValue({\n ...pipeTrigger,\n when: {\n ...pipeTrigger.when,\n conditions: [...pipeTrigger.when.conditions, { ...EMPTY_CONDITION }],\n },\n });\n };\n\n const changeLogic = (logic: \"and\" | \"or\") => {\n if (!pipeTrigger) return;\n field.setValue({\n ...pipeTrigger,\n when: { ...pipeTrigger.when, logic },\n });\n };\n\n return (\n <div data-p0=\"input\">\n {!pipeTrigger ? (\n <div className=\"pz:flex pz:items-center\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" className=\"pz:px-0\" onClick={addTrigger}>\n <IconPlus />\n New rule\n </Button>\n </div>\n ) : (\n <div className=\"pz:flex pz:flex-col pz:gap-8\">\n {pipeTrigger.when.conditions.map((condition, idx) => (\n <ConditionRow\n key={idx}\n condition={condition}\n index={idx}\n eligibleFields={eligibleFields}\n fieldsByName={fieldsByName}\n isFirst={idx === 0}\n isLast={idx === pipeTrigger.when.conditions.length - 1}\n logic={pipeTrigger.when.logic}\n form={field.form}\n basePath={field.path}\n onUpdate={updateCondition}\n onRemove={removeCondition}\n onAddCondition={addCondition}\n onLogicChange={changeLogic}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { useRender } from "@base-ui/react/use-render";
2
-
3
- //#region src/components/defaults/layout/submit-button.d.ts
4
- interface DefaultSubmitButtonProps extends useRender.ComponentProps<"button"> {
5
- isSubmitting: boolean;
6
- }
7
- //#endregion
8
- export { DefaultSubmitButtonProps };
9
- //# sourceMappingURL=submit-button.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"submit-button.d.mts","names":[],"sources":["../../../../src/components/defaults/layout/submit-button.tsx"],"mappings":";;;UAKiB,wBAAA,SAAiC,SAAA,CAAU,cAAA;EAC1D,YAAA;AAAA"}
@@ -1,23 +0,0 @@
1
- import { cn } from "../../../lib/utils.mjs";
2
- import { buttonVariants } from "../../ui/button.mjs";
3
- import { mergeProps } from "@base-ui/react/merge-props";
4
- import { useRender } from "@base-ui/react/use-render";
5
-
6
- //#region src/components/defaults/layout/submit-button.tsx
7
- function DefaultSubmitButton({ isSubmitting, className, children, render, ...props }) {
8
- return useRender({
9
- defaultTagName: "button",
10
- render,
11
- props: mergeProps({
12
- type: "submit",
13
- disabled: isSubmitting,
14
- className: cn(buttonVariants({}), "pz:mt-4", className),
15
- children: children ?? (isSubmitting ? "Submitting..." : "Submit"),
16
- "data-p0": "submit"
17
- }, props)
18
- });
19
- }
20
-
21
- //#endregion
22
- export { DefaultSubmitButton };
23
- //# sourceMappingURL=submit-button.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"submit-button.mjs","names":[],"sources":["../../../../src/components/defaults/layout/submit-button.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { buttonVariants } from \"../../ui/button.js\";\n\nexport interface DefaultSubmitButtonProps extends useRender.ComponentProps<\"button\"> {\n isSubmitting: boolean;\n}\n\nexport function DefaultSubmitButton({\n isSubmitting,\n className,\n children,\n render,\n ...props\n}: DefaultSubmitButtonProps) {\n return useRender({\n defaultTagName: \"button\",\n render,\n props: mergeProps<\"button\">(\n {\n type: \"submit\",\n disabled: isSubmitting,\n className: cn(buttonVariants({}), \"pz:mt-4\", className),\n children: children ?? (isSubmitting ? \"Submitting...\" : \"Submit\"),\n ...({ \"data-p0\": \"submit\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;AASA,SAAgB,oBAAoB,EAClC,cACA,WACA,UACA,QACA,GAAG,SACwB;AAC3B,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,WACL;GACE,MAAM;GACN,UAAU;GACV,WAAW,GAAG,eAAe,EAAE,CAAC,EAAE,WAAW,UAAU;GACvD,UAAU,aAAa,eAAe,kBAAkB;GAClD,WAAW;GAClB,EACD,MACD;EACF,CAAC"}
@@ -1,29 +0,0 @@
1
- import { cn } from "../../lib/utils.mjs";
2
- import { Button } from "../ui/button.mjs";
3
- import { IconChevronDown } from "../internal/icons.mjs";
4
- import { useDisclosure } from "../../hooks/use-disclosure.mjs";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
-
7
- //#region src/components/defaults/toggle-advanced-button.tsx
8
- function ToggleAdvancedButton({ className, children, onClick, ...rest }) {
9
- const { open, onOpenChange } = useDisclosure();
10
- return /* @__PURE__ */ jsxs(Button, {
11
- type: "button",
12
- variant: "link",
13
- size: "xs",
14
- onClick: (e) => {
15
- onClick?.(e);
16
- onOpenChange(!open);
17
- },
18
- className: cn(className),
19
- ...rest,
20
- children: [children, /* @__PURE__ */ jsx(IconChevronDown, { style: {
21
- transform: open ? "rotate(180deg)" : "rotate(0deg)",
22
- transition: "transform 0.2s ease"
23
- } })]
24
- });
25
- }
26
-
27
- //#endregion
28
- export { ToggleAdvancedButton };
29
- //# sourceMappingURL=toggle-advanced-button.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle-advanced-button.mjs","names":[],"sources":["../../../src/components/defaults/toggle-advanced-button.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport { useDisclosure } from \"../../hooks/use-disclosure\";\nimport { cn } from \"../../lib/utils\";\nimport { IconChevronDown } from \"../internal/icons\";\nimport { Button } from \"../ui/button\";\n\ninterface ToggleAdvancedButtonProps extends ComponentProps<typeof Button> {}\n\nexport function ToggleAdvancedButton({\n className,\n children,\n onClick,\n ...rest\n}: ToggleAdvancedButtonProps) {\n const { open, onOpenChange } = useDisclosure();\n\n return (\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"xs\"\n onClick={(e) => {\n onClick?.(e);\n onOpenChange(!open);\n }}\n className={cn(className)}\n {...rest}\n >\n {children}\n <IconChevronDown\n style={{\n transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\",\n transition: \"transform 0.2s ease\",\n }}\n />\n </Button>\n );\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,qBAAqB,EACnC,WACA,UACA,SACA,GAAG,QACyB;CAC5B,MAAM,EAAE,MAAM,iBAAiB,eAAe;AAE9C,QACE,qBAAC,QAAD;EACE,MAAK;EACL,SAAQ;EACR,MAAK;EACL,UAAU,MAAM;AACd,aAAU,EAAE;AACZ,gBAAa,CAAC,KAAK;;EAErB,WAAW,GAAG,UAAU;EACxB,GAAI;YATN,CAWG,UACD,oBAAC,iBAAD,EACE,OAAO;GACL,WAAW,OAAO,mBAAmB;GACrC,YAAY;GACb,EACD,EACK"}
@@ -1,30 +0,0 @@
1
- import "../../lib/utils.mjs";
2
- import "./button.mjs";
3
- import "./input.mjs";
4
- import "./textarea.mjs";
5
- import { jsx } from "react/jsx-runtime";
6
- import { cva } from "class-variance-authority";
7
-
8
- //#region src/components/ui/input-group.tsx
9
- const inputGroupAddonVariants = cva("pz:flex pz:h-auto pz:cursor-text pz:items-center pz:justify-center pz:gap-2 pz:py-1.5 pz:text-sm pz:font-medium pz:text-muted-foreground pz:select-none pz:group-data-[disabled=true]/input-group:opacity-50 pz:[&>kbd]:rounded-[calc(var(--p0-radius)-5px)] pz:[&>svg:not([class*=size-])]:size-4", {
10
- variants: { align: {
11
- "inline-start": "pz:order-first pz:pl-2 pz:has-[>button]:ml-[-0.3rem] pz:has-[>kbd]:ml-[-0.15rem]",
12
- "inline-end": "pz:order-last pz:pr-2 pz:has-[>button]:mr-[-0.3rem] pz:has-[>kbd]:mr-[-0.15rem]",
13
- "block-start": "pz:order-first pz:w-full pz:justify-start pz:px-2.5 pz:pt-2 pz:group-has-[>input]/input-group:pt-2 pz:[.border-b]:pb-2",
14
- "block-end": "pz:order-last pz:w-full pz:justify-start pz:px-2.5 pz:pb-2 pz:group-has-[>input]/input-group:pb-2 pz:[.border-t]:pt-2"
15
- } },
16
- defaultVariants: { align: "inline-start" }
17
- });
18
- const inputGroupButtonVariants = cva("pz:flex pz:items-center pz:gap-2 pz:text-sm pz:shadow-none", {
19
- variants: { size: {
20
- xs: "pz:h-6 pz:gap-1 pz:rounded-[calc(var(--p0-radius)-3px)] pz:px-1.5 pz:[&>svg:not([class*=size-])]:size-3.5",
21
- sm: "pz:",
22
- "icon-xs": "pz:size-6 pz:rounded-[calc(var(--p0-radius)-3px)] pz:p-0 pz:has-[>svg]:p-0",
23
- "icon-sm": "pz:size-8 pz:p-0 pz:has-[>svg]:p-0"
24
- } },
25
- defaultVariants: { size: "xs" }
26
- });
27
-
28
- //#endregion
29
- export { };
30
- //# sourceMappingURL=input-group.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-group.mjs","names":[],"sources":["../../../src/components/ui/input-group.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"pz:group/input-group pz:relative pz:flex pz:h-8 pz:w-full pz:min-w-0 pz:items-center pz:rounded-lg pz:border pz:border-input pz:transition-colors pz:outline-none pz:in-data-[slot=combobox-content]:focus-within:border-inherit pz:in-data-[slot=combobox-content]:focus-within:ring-0 pz:has-disabled:bg-input/50 pz:has-disabled:opacity-50 pz:has-[[data-slot=input-group-control]:focus-visible]:border-ring pz:has-[[data-slot=input-group-control]:focus-visible]:ring-3 pz:has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 pz:has-[[data-slot][aria-invalid=true]]:border-destructive pz:has-[[data-slot][aria-invalid=true]]:ring-3 pz:has-[[data-slot][aria-invalid=true]]:ring-destructive/20 pz:has-[>[data-align=block-end]]:h-auto pz:has-[>[data-align=block-end]]:flex-col pz:has-[>[data-align=block-start]]:h-auto pz:has-[>[data-align=block-start]]:flex-col pz:has-[>textarea]:h-auto pz:dark:bg-input/30 pz:dark:has-disabled:bg-input/80 pz:dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 pz:has-[>[data-align=block-end]]:[&>input]:pt-3 pz:has-[>[data-align=block-start]]:[&>input]:pb-3 pz:has-[>[data-align=inline-end]]:[&>input]:pr-1.5 pz:has-[>[data-align=inline-start]]:[&>input]:pl-1.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"pz:flex pz:h-auto pz:cursor-text pz:items-center pz:justify-center pz:gap-2 pz:py-1.5 pz:text-sm pz:font-medium pz:text-muted-foreground pz:select-none pz:group-data-[disabled=true]/input-group:opacity-50 pz:[&>kbd]:rounded-[calc(var(--p0-radius)-5px)] pz:[&>svg:not([class*=size-])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"pz:order-first pz:pl-2 pz:has-[>button]:ml-[-0.3rem] pz:has-[>kbd]:ml-[-0.15rem]\",\n \"inline-end\":\n \"pz:order-last pz:pr-2 pz:has-[>button]:mr-[-0.3rem] pz:has-[>kbd]:mr-[-0.15rem]\",\n \"block-start\":\n \"pz:order-first pz:w-full pz:justify-start pz:px-2.5 pz:pt-2 pz:group-has-[>input]/input-group:pt-2 pz:[.border-b]:pb-2\",\n \"block-end\":\n \"pz:order-last pz:w-full pz:justify-start pz:px-2.5 pz:pb-2 pz:group-has-[>input]/input-group:pb-2 pz:[.border-t]:pt-2\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n },\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\"pz:flex pz:items-center pz:gap-2 pz:text-sm pz:shadow-none\", {\n variants: {\n size: {\n xs: \"pz:h-6 pz:gap-1 pz:rounded-[calc(var(--p0-radius)-3px)] pz:px-1.5 pz:[&>svg:not([class*=size-])]:size-3.5\",\n sm: \"pz:\",\n \"icon-xs\": \"pz:size-6 pz:rounded-[calc(var(--p0-radius)-3px)] pz:p-0 pz:has-[>svg]:p-0\",\n \"icon-sm\": \"pz:size-8 pz:p-0 pz:has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n});\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\" | \"type\"> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: \"button\" | \"submit\" | \"reset\";\n }) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"pz:flex pz:items-center pz:gap-2 pz:text-sm pz:text-muted-foreground pz:[&_svg]:pointer-events-none pz:[&_svg:not([class*=size-])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"pz:flex-1 pz:rounded-none pz:border-0 pz:bg-transparent pz:shadow-none pz:ring-0 pz:focus-visible:ring-0 pz:disabled:bg-transparent pz:aria-invalid:ring-0 pz:dark:bg-transparent pz:dark:disabled:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"pz:flex-1 pz:resize-none pz:rounded-none pz:border-0 pz:bg-transparent pz:py-2 pz:shadow-none pz:ring-0 pz:focus-visible:ring-0 pz:disabled:bg-transparent pz:aria-invalid:ring-0 pz:dark:bg-transparent pz:dark:disabled:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n};\n"],"mappings":";;;;;;;;AAsBA,MAAM,0BAA0B,IAC9B,sSACA;CACE,UAAU,EACR,OAAO;EACL,gBACE;EACF,cACE;EACF,eACE;EACF,aACE;EACH,EACF;CACD,iBAAiB,EACf,OAAO,gBACR;CACF,CACF;AAwBD,MAAM,2BAA2B,IAAI,8DAA8D;CACjG,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,WAAW;EACX,WAAW;EACZ,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CAAC"}
@@ -1,71 +0,0 @@
1
- import { GroupMap, PathMap, SectionMap } from "../types/form-customization.mjs";
2
- import { Dispatch, PropsWithChildren } from "react";
3
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
- import { SectionKeys } from "@pipe0/base";
5
-
6
- //#region src/context/form-customization-context.d.ts
7
- interface FormCustomizationState {
8
- sectionMap: SectionMap;
9
- groupMap: GroupMap;
10
- pathMap: PathMap;
11
- }
12
- type FormCustomizationAction = {
13
- type: "SET_SECTION_MAP";
14
- payload: SectionMap;
15
- } | {
16
- type: "SET_GROUP_MAP";
17
- payload: GroupMap;
18
- } | {
19
- type: "SET_PATH_MAP";
20
- payload: PathMap;
21
- } | {
22
- type: "MERGE_SECTION_MAP";
23
- payload: SectionMap;
24
- } | {
25
- type: "MERGE_GROUP_MAP";
26
- payload: GroupMap;
27
- } | {
28
- type: "MERGE_PATH_MAP";
29
- payload: PathMap;
30
- } | {
31
- type: "HIDE_SECTION";
32
- payload: SectionKeys;
33
- } | {
34
- type: "SHOW_SECTION";
35
- payload: SectionKeys;
36
- } | {
37
- type: "HIDE_GROUP";
38
- payload: string;
39
- } | {
40
- type: "SHOW_GROUP";
41
- payload: string;
42
- } | {
43
- type: "HIDE_FIELD";
44
- payload: string;
45
- } | {
46
- type: "SHOW_FIELD";
47
- payload: string;
48
- };
49
- interface FormCustomizationProviderProps {
50
- sectionMap?: SectionMap;
51
- groupMap?: GroupMap;
52
- pathMap?: PathMap;
53
- }
54
- /**
55
- * The `sectionMap` / `groupMap` / `pathMap` props seed the reducer **once**
56
- * on mount. To swap maps after mount, either dispatch (`SET_*` / `MERGE_*`),
57
- * or remount the provider with a different `key`. We deliberately don't
58
- * sync prop changes into the reducer — doing so silently overwrote
59
- * dispatched mutations whenever a parent re-rendered with a fresh map
60
- * literal.
61
- */
62
- declare function FormCustomizationProvider({
63
- children,
64
- sectionMap,
65
- groupMap,
66
- pathMap
67
- }: PropsWithChildren<FormCustomizationProviderProps>): _$react_jsx_runtime0.JSX.Element;
68
- declare function useFormCustomization(): readonly [FormCustomizationState, Dispatch<FormCustomizationAction>];
69
- //#endregion
70
- export { FormCustomizationAction, FormCustomizationProvider, FormCustomizationState, useFormCustomization };
71
- //# sourceMappingURL=form-customization-context.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-customization-context.d.mts","names":[],"sources":["../../src/context/form-customization-context.tsx"],"mappings":";;;;;;UAWiB,sBAAA;EACf,UAAA,EAAY,UAAA;EACZ,QAAA,EAAU,QAAA;EACV,OAAA,EAAS,OAAA;AAAA;AAAA,KAGC,uBAAA;EACN,IAAA;EAAyB,OAAA,EAAS,UAAA;AAAA;EAClC,IAAA;EAAuB,OAAA,EAAS,QAAA;AAAA;EAChC,IAAA;EAAsB,OAAA,EAAS,OAAA;AAAA;EAC/B,IAAA;EAA2B,OAAA,EAAS,UAAA;AAAA;EACpC,IAAA;EAAyB,OAAA,EAAS,QAAA;AAAA;EAClC,IAAA;EAAwB,OAAA,EAAS,OAAA;AAAA;EACjC,IAAA;EAAsB,OAAA,EAAS,WAAA;AAAA;EAC/B,IAAA;EAAsB,OAAA,EAAS,WAAA;AAAA;EAC/B,IAAA;EAAoB,OAAA;AAAA;EACpB,IAAA;EAAoB,OAAA;AAAA;EACpB,IAAA;EAAoB,OAAA;AAAA;EACpB,IAAA;EAAoB,OAAA;AAAA;AAAA,UA0DT,8BAAA;EACf,UAAA,GAAa,UAAA;EACb,QAAA,GAAW,QAAA;EACX,OAAA,GAAU,OAAA;AAAA;;;;;;;;;iBAWI,yBAAA,CAAA;EACd,QAAA;EACA,UAAA;EACA,QAAA;EACA;AAAA,GACC,iBAAA,CAAkB,8BAAA,IAA+B,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAapC,oBAAA,CAAA,aAAoB,sBAAA,EAAA,QAAA,CAAA,uBAAA"}
@@ -1,114 +0,0 @@
1
- import { createContext, useContext, useMemo, useReducer } from "react";
2
- import { jsx } from "react/jsx-runtime";
3
-
4
- //#region src/context/form-customization-context.tsx
5
- const FormCustomizationContext = createContext(void 0);
6
- function reducer(state, action) {
7
- switch (action.type) {
8
- case "SET_SECTION_MAP": return {
9
- ...state,
10
- sectionMap: action.payload
11
- };
12
- case "SET_GROUP_MAP": return {
13
- ...state,
14
- groupMap: action.payload
15
- };
16
- case "SET_PATH_MAP": return {
17
- ...state,
18
- pathMap: action.payload
19
- };
20
- case "MERGE_SECTION_MAP": return {
21
- ...state,
22
- sectionMap: {
23
- ...state.sectionMap,
24
- ...action.payload
25
- }
26
- };
27
- case "MERGE_GROUP_MAP": return {
28
- ...state,
29
- groupMap: {
30
- ...state.groupMap,
31
- ...action.payload
32
- }
33
- };
34
- case "MERGE_PATH_MAP": return {
35
- ...state,
36
- pathMap: {
37
- ...state.pathMap,
38
- ...action.payload
39
- }
40
- };
41
- case "HIDE_SECTION": return {
42
- ...state,
43
- sectionMap: {
44
- ...state.sectionMap,
45
- [action.payload]: null
46
- }
47
- };
48
- case "SHOW_SECTION": {
49
- const { [action.payload]: _, ...rest } = state.sectionMap;
50
- return {
51
- ...state,
52
- sectionMap: rest
53
- };
54
- }
55
- case "HIDE_GROUP": return {
56
- ...state,
57
- groupMap: {
58
- ...state.groupMap,
59
- [action.payload]: null
60
- }
61
- };
62
- case "SHOW_GROUP": {
63
- const { [action.payload]: _, ...rest } = state.groupMap;
64
- return {
65
- ...state,
66
- groupMap: rest
67
- };
68
- }
69
- case "HIDE_FIELD": return {
70
- ...state,
71
- pathMap: {
72
- ...state.pathMap,
73
- [action.payload]: null
74
- }
75
- };
76
- case "SHOW_FIELD": {
77
- const { [action.payload]: _, ...rest } = state.pathMap;
78
- return {
79
- ...state,
80
- pathMap: rest
81
- };
82
- }
83
- default: throw new Error("Unknown action in FormCustomizationContext");
84
- }
85
- }
86
- /**
87
- * The `sectionMap` / `groupMap` / `pathMap` props seed the reducer **once**
88
- * on mount. To swap maps after mount, either dispatch (`SET_*` / `MERGE_*`),
89
- * or remount the provider with a different `key`. We deliberately don't
90
- * sync prop changes into the reducer — doing so silently overwrote
91
- * dispatched mutations whenever a parent re-rendered with a fresh map
92
- * literal.
93
- */
94
- function FormCustomizationProvider({ children, sectionMap, groupMap, pathMap }) {
95
- const [state, dispatch] = useReducer(reducer, void 0, () => ({
96
- sectionMap: sectionMap ?? {},
97
- groupMap: groupMap ?? {},
98
- pathMap: pathMap ?? {}
99
- }));
100
- const value = useMemo(() => [state, dispatch], [state]);
101
- return /* @__PURE__ */ jsx(FormCustomizationContext.Provider, {
102
- value,
103
- children
104
- });
105
- }
106
- function useFormCustomization() {
107
- const value = useContext(FormCustomizationContext);
108
- if (value == null) throw new Error("useFormCustomization must be used within FormCustomizationProvider");
109
- return value;
110
- }
111
-
112
- //#endregion
113
- export { FormCustomizationProvider, useFormCustomization };
114
- //# sourceMappingURL=form-customization-context.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-customization-context.mjs","names":[],"sources":["../../src/context/form-customization-context.tsx"],"sourcesContent":["import type { SectionKeys } from \"@pipe0/base\";\nimport {\n createContext,\n type Dispatch,\n type PropsWithChildren,\n useContext,\n useMemo,\n useReducer,\n} from \"react\";\nimport type { GroupMap, PathMap, SectionMap } from \"../types/form-customization.js\";\n\nexport interface FormCustomizationState {\n sectionMap: SectionMap;\n groupMap: GroupMap;\n pathMap: PathMap;\n}\n\nexport type FormCustomizationAction =\n | { type: \"SET_SECTION_MAP\"; payload: SectionMap }\n | { type: \"SET_GROUP_MAP\"; payload: GroupMap }\n | { type: \"SET_PATH_MAP\"; payload: PathMap }\n | { type: \"MERGE_SECTION_MAP\"; payload: SectionMap }\n | { type: \"MERGE_GROUP_MAP\"; payload: GroupMap }\n | { type: \"MERGE_PATH_MAP\"; payload: PathMap }\n | { type: \"HIDE_SECTION\"; payload: SectionKeys }\n | { type: \"SHOW_SECTION\"; payload: SectionKeys }\n | { type: \"HIDE_GROUP\"; payload: string }\n | { type: \"SHOW_GROUP\"; payload: string }\n | { type: \"HIDE_FIELD\"; payload: string }\n | { type: \"SHOW_FIELD\"; payload: string };\n\nconst FormCustomizationContext = createContext<\n readonly [FormCustomizationState, Dispatch<FormCustomizationAction>] | undefined\n>(undefined);\n\nfunction reducer(\n state: FormCustomizationState,\n action: FormCustomizationAction,\n): FormCustomizationState {\n switch (action.type) {\n case \"SET_SECTION_MAP\":\n return { ...state, sectionMap: action.payload };\n case \"SET_GROUP_MAP\":\n return { ...state, groupMap: action.payload };\n case \"SET_PATH_MAP\":\n return { ...state, pathMap: action.payload };\n case \"MERGE_SECTION_MAP\":\n return {\n ...state,\n sectionMap: { ...state.sectionMap, ...action.payload },\n };\n case \"MERGE_GROUP_MAP\":\n return { ...state, groupMap: { ...state.groupMap, ...action.payload } };\n case \"MERGE_PATH_MAP\":\n return { ...state, pathMap: { ...state.pathMap, ...action.payload } };\n case \"HIDE_SECTION\":\n return {\n ...state,\n sectionMap: { ...state.sectionMap, [action.payload]: null },\n };\n case \"SHOW_SECTION\": {\n const { [action.payload]: _, ...rest } = state.sectionMap;\n return { ...state, sectionMap: rest };\n }\n case \"HIDE_GROUP\":\n return {\n ...state,\n groupMap: { ...state.groupMap, [action.payload]: null },\n };\n case \"SHOW_GROUP\": {\n const { [action.payload]: _, ...rest } = state.groupMap;\n return { ...state, groupMap: rest };\n }\n case \"HIDE_FIELD\":\n return {\n ...state,\n pathMap: { ...state.pathMap, [action.payload]: null },\n };\n case \"SHOW_FIELD\": {\n const { [action.payload]: _, ...rest } = state.pathMap;\n return { ...state, pathMap: rest };\n }\n default:\n throw new Error(\"Unknown action in FormCustomizationContext\");\n }\n}\n\nexport interface FormCustomizationProviderProps {\n sectionMap?: SectionMap;\n groupMap?: GroupMap;\n pathMap?: PathMap;\n}\n\n/**\n * The `sectionMap` / `groupMap` / `pathMap` props seed the reducer **once**\n * on mount. To swap maps after mount, either dispatch (`SET_*` / `MERGE_*`),\n * or remount the provider with a different `key`. We deliberately don't\n * sync prop changes into the reducer — doing so silently overwrote\n * dispatched mutations whenever a parent re-rendered with a fresh map\n * literal.\n */\nexport function FormCustomizationProvider({\n children,\n sectionMap,\n groupMap,\n pathMap,\n}: PropsWithChildren<FormCustomizationProviderProps>) {\n const [state, dispatch] = useReducer(reducer, undefined, () => ({\n sectionMap: sectionMap ?? {},\n groupMap: groupMap ?? {},\n pathMap: pathMap ?? {},\n }));\n const value = useMemo(() => [state, dispatch] as const, [state]);\n\n return (\n <FormCustomizationContext.Provider value={value}>{children}</FormCustomizationContext.Provider>\n );\n}\n\nexport function useFormCustomization() {\n const value = useContext(FormCustomizationContext);\n if (value == null)\n throw new Error(\"useFormCustomization must be used within FormCustomizationProvider\");\n return value;\n}\n"],"mappings":";;;;AA+BA,MAAM,2BAA2B,cAE/B,OAAU;AAEZ,SAAS,QACP,OACA,QACwB;AACxB,SAAQ,OAAO,MAAf;EACE,KAAK,kBACH,QAAO;GAAE,GAAG;GAAO,YAAY,OAAO;GAAS;EACjD,KAAK,gBACH,QAAO;GAAE,GAAG;GAAO,UAAU,OAAO;GAAS;EAC/C,KAAK,eACH,QAAO;GAAE,GAAG;GAAO,SAAS,OAAO;GAAS;EAC9C,KAAK,oBACH,QAAO;GACL,GAAG;GACH,YAAY;IAAE,GAAG,MAAM;IAAY,GAAG,OAAO;IAAS;GACvD;EACH,KAAK,kBACH,QAAO;GAAE,GAAG;GAAO,UAAU;IAAE,GAAG,MAAM;IAAU,GAAG,OAAO;IAAS;GAAE;EACzE,KAAK,iBACH,QAAO;GAAE,GAAG;GAAO,SAAS;IAAE,GAAG,MAAM;IAAS,GAAG,OAAO;IAAS;GAAE;EACvE,KAAK,eACH,QAAO;GACL,GAAG;GACH,YAAY;IAAE,GAAG,MAAM;KAAa,OAAO,UAAU;IAAM;GAC5D;EACH,KAAK,gBAAgB;GACnB,MAAM,GAAG,OAAO,UAAU,GAAG,GAAG,SAAS,MAAM;AAC/C,UAAO;IAAE,GAAG;IAAO,YAAY;IAAM;;EAEvC,KAAK,aACH,QAAO;GACL,GAAG;GACH,UAAU;IAAE,GAAG,MAAM;KAAW,OAAO,UAAU;IAAM;GACxD;EACH,KAAK,cAAc;GACjB,MAAM,GAAG,OAAO,UAAU,GAAG,GAAG,SAAS,MAAM;AAC/C,UAAO;IAAE,GAAG;IAAO,UAAU;IAAM;;EAErC,KAAK,aACH,QAAO;GACL,GAAG;GACH,SAAS;IAAE,GAAG,MAAM;KAAU,OAAO,UAAU;IAAM;GACtD;EACH,KAAK,cAAc;GACjB,MAAM,GAAG,OAAO,UAAU,GAAG,GAAG,SAAS,MAAM;AAC/C,UAAO;IAAE,GAAG;IAAO,SAAS;IAAM;;EAEpC,QACE,OAAM,IAAI,MAAM,6CAA6C;;;;;;;;;;;AAkBnE,SAAgB,0BAA0B,EACxC,UACA,YACA,UACA,WACoD;CACpD,MAAM,CAAC,OAAO,YAAY,WAAW,SAAS,eAAkB;EAC9D,YAAY,cAAc,EAAE;EAC5B,UAAU,YAAY,EAAE;EACxB,SAAS,WAAW,EAAE;EACvB,EAAE;CACH,MAAM,QAAQ,cAAc,CAAC,OAAO,SAAS,EAAW,CAAC,MAAM,CAAC;AAEhE,QACE,oBAAC,yBAAyB,UAA1B;EAA0C;EAAQ;EAA6C;;AAInG,SAAgB,uBAAuB;CACrC,MAAM,QAAQ,WAAW,yBAAyB;AAClD,KAAI,SAAS,KACX,OAAM,IAAI,MAAM,qEAAqE;AACvF,QAAO"}
@@ -1,35 +0,0 @@
1
- import { useCallback, useState } from "react";
2
-
3
- //#region src/hooks/use-disclosure.ts
4
- function useDisclosure(props = {}) {
5
- const { onClose: onCloseProp, onOpen: onOpenProp, isOpen: isOpenProp } = props;
6
- const [isOpenState, setIsOpen] = useState(props.defaultIsOpen || false);
7
- const isOpen = isOpenProp !== void 0 ? isOpenProp : isOpenState;
8
- const isControlled = isOpenProp !== void 0;
9
- const onClose = useCallback(() => {
10
- if (!isControlled) setIsOpen(false);
11
- onCloseProp?.();
12
- }, [isControlled, onCloseProp]);
13
- const onOpen = useCallback(() => {
14
- if (!isControlled) setIsOpen(true);
15
- onOpenProp?.();
16
- }, [isControlled, onOpenProp]);
17
- return {
18
- isOpen,
19
- open: isOpen,
20
- onOpen,
21
- onClose,
22
- onOpenChange: useCallback((open) => {
23
- if (open && !isOpen) onOpen();
24
- if (isOpen && !open) onClose();
25
- }, [
26
- isOpen,
27
- onClose,
28
- onOpen
29
- ])
30
- };
31
- }
32
-
33
- //#endregion
34
- export { useDisclosure };
35
- //# sourceMappingURL=use-disclosure.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-disclosure.mjs","names":[],"sources":["../../src/hooks/use-disclosure.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface UseDisclosureProps {\n isOpen?: boolean;\n defaultIsOpen?: boolean;\n onClose?(): void;\n onOpen?(): void;\n}\n\nexport function useDisclosure(props: UseDisclosureProps = {}) {\n const { onClose: onCloseProp, onOpen: onOpenProp, isOpen: isOpenProp } = props;\n\n const [isOpenState, setIsOpen] = useState(props.defaultIsOpen || false);\n\n const isOpen = isOpenProp !== undefined ? isOpenProp : isOpenState;\n const isControlled = isOpenProp !== undefined;\n\n const onClose = useCallback(() => {\n if (!isControlled) setIsOpen(false);\n onCloseProp?.();\n }, [isControlled, onCloseProp]);\n\n const onOpen = useCallback(() => {\n if (!isControlled) setIsOpen(true);\n onOpenProp?.();\n }, [isControlled, onOpenProp]);\n\n const onOpenChange = useCallback(\n (open: boolean) => {\n if (open && !isOpen) onOpen();\n if (isOpen && !open) onClose();\n },\n [isOpen, onClose, onOpen],\n );\n\n return { isOpen, open: isOpen, onOpen, onClose, onOpenChange };\n}\n\nexport type UseDisclosureReturn = ReturnType<typeof useDisclosure>;\n"],"mappings":";;;AASA,SAAgB,cAAc,QAA4B,EAAE,EAAE;CAC5D,MAAM,EAAE,SAAS,aAAa,QAAQ,YAAY,QAAQ,eAAe;CAEzE,MAAM,CAAC,aAAa,aAAa,SAAS,MAAM,iBAAiB,MAAM;CAEvE,MAAM,SAAS,eAAe,SAAY,aAAa;CACvD,MAAM,eAAe,eAAe;CAEpC,MAAM,UAAU,kBAAkB;AAChC,MAAI,CAAC,aAAc,WAAU,MAAM;AACnC,iBAAe;IACd,CAAC,cAAc,YAAY,CAAC;CAE/B,MAAM,SAAS,kBAAkB;AAC/B,MAAI,CAAC,aAAc,WAAU,KAAK;AAClC,gBAAc;IACb,CAAC,cAAc,WAAW,CAAC;AAU9B,QAAO;EAAE;EAAQ,MAAM;EAAQ;EAAQ;EAAS,cAR3B,aAClB,SAAkB;AACjB,OAAI,QAAQ,CAAC,OAAQ,SAAQ;AAC7B,OAAI,UAAU,CAAC,KAAM,UAAS;KAEhC;GAAC;GAAQ;GAAS;GAAO,CAC1B;EAE6D"}