@pipe0/react 0.0.2

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 (577) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/README.md +172 -0
  3. package/dist/components/compound/pipe-catalog/active-filters.d.mts +26 -0
  4. package/dist/components/compound/pipe-catalog/active-filters.d.mts.map +1 -0
  5. package/dist/components/compound/pipe-catalog/active-filters.mjs +47 -0
  6. package/dist/components/compound/pipe-catalog/active-filters.mjs.map +1 -0
  7. package/dist/components/compound/pipe-catalog/card.d.mts +30 -0
  8. package/dist/components/compound/pipe-catalog/card.d.mts.map +1 -0
  9. package/dist/components/compound/pipe-catalog/card.mjs +77 -0
  10. package/dist/components/compound/pipe-catalog/card.mjs.map +1 -0
  11. package/dist/components/compound/pipe-catalog/category-filter.d.mts +30 -0
  12. package/dist/components/compound/pipe-catalog/category-filter.d.mts.map +1 -0
  13. package/dist/components/compound/pipe-catalog/category-filter.mjs +56 -0
  14. package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -0
  15. package/dist/components/compound/pipe-catalog/column-filter.d.mts +40 -0
  16. package/dist/components/compound/pipe-catalog/column-filter.d.mts.map +1 -0
  17. package/dist/components/compound/pipe-catalog/column-filter.mjs +66 -0
  18. package/dist/components/compound/pipe-catalog/column-filter.mjs.map +1 -0
  19. package/dist/components/compound/pipe-catalog/column-filters.d.mts +16 -0
  20. package/dist/components/compound/pipe-catalog/column-filters.d.mts.map +1 -0
  21. package/dist/components/compound/pipe-catalog/column-filters.mjs +21 -0
  22. package/dist/components/compound/pipe-catalog/column-filters.mjs.map +1 -0
  23. package/dist/components/compound/pipe-catalog/empty.d.mts +22 -0
  24. package/dist/components/compound/pipe-catalog/empty.d.mts.map +1 -0
  25. package/dist/components/compound/pipe-catalog/empty.mjs +31 -0
  26. package/dist/components/compound/pipe-catalog/empty.mjs.map +1 -0
  27. package/dist/components/compound/pipe-catalog/index.d.mts +13 -0
  28. package/dist/components/compound/pipe-catalog/index.mjs +15 -0
  29. package/dist/components/compound/pipe-catalog/input-field-filter.d.mts +22 -0
  30. package/dist/components/compound/pipe-catalog/input-field-filter.d.mts.map +1 -0
  31. package/dist/components/compound/pipe-catalog/input-field-filter.mjs +22 -0
  32. package/dist/components/compound/pipe-catalog/input-field-filter.mjs.map +1 -0
  33. package/dist/components/compound/pipe-catalog/list.d.mts +34 -0
  34. package/dist/components/compound/pipe-catalog/list.d.mts.map +1 -0
  35. package/dist/components/compound/pipe-catalog/list.mjs +29 -0
  36. package/dist/components/compound/pipe-catalog/list.mjs.map +1 -0
  37. package/dist/components/compound/pipe-catalog/output-field-filter.d.mts +22 -0
  38. package/dist/components/compound/pipe-catalog/output-field-filter.d.mts.map +1 -0
  39. package/dist/components/compound/pipe-catalog/output-field-filter.mjs +22 -0
  40. package/dist/components/compound/pipe-catalog/output-field-filter.mjs.map +1 -0
  41. package/dist/components/compound/pipe-catalog/provider-filter.d.mts +22 -0
  42. package/dist/components/compound/pipe-catalog/provider-filter.d.mts.map +1 -0
  43. package/dist/components/compound/pipe-catalog/provider-filter.mjs +29 -0
  44. package/dist/components/compound/pipe-catalog/provider-filter.mjs.map +1 -0
  45. package/dist/components/compound/pipe-catalog/root.d.mts +47 -0
  46. package/dist/components/compound/pipe-catalog/root.d.mts.map +1 -0
  47. package/dist/components/compound/pipe-catalog/root.mjs +85 -0
  48. package/dist/components/compound/pipe-catalog/root.mjs.map +1 -0
  49. package/dist/components/compound/pipe-catalog/search-filter.d.mts +24 -0
  50. package/dist/components/compound/pipe-catalog/search-filter.d.mts.map +1 -0
  51. package/dist/components/compound/pipe-catalog/search-filter.mjs +46 -0
  52. package/dist/components/compound/pipe-catalog/search-filter.mjs.map +1 -0
  53. package/dist/components/compound/pipe-catalog/tag-filter.d.mts +22 -0
  54. package/dist/components/compound/pipe-catalog/tag-filter.d.mts.map +1 -0
  55. package/dist/components/compound/pipe-catalog/tag-filter.mjs +22 -0
  56. package/dist/components/compound/pipe-catalog/tag-filter.mjs.map +1 -0
  57. package/dist/components/compound/pipe-form/content.d.mts +18 -0
  58. package/dist/components/compound/pipe-form/content.d.mts.map +1 -0
  59. package/dist/components/compound/pipe-form/content.mjs +45 -0
  60. package/dist/components/compound/pipe-form/content.mjs.map +1 -0
  61. package/dist/components/compound/pipe-form/field.d.mts +17 -0
  62. package/dist/components/compound/pipe-form/field.d.mts.map +1 -0
  63. package/dist/components/compound/pipe-form/field.mjs +21 -0
  64. package/dist/components/compound/pipe-form/field.mjs.map +1 -0
  65. package/dist/components/compound/pipe-form/footer.d.mts +14 -0
  66. package/dist/components/compound/pipe-form/footer.d.mts.map +1 -0
  67. package/dist/components/compound/pipe-form/footer.mjs +14 -0
  68. package/dist/components/compound/pipe-form/footer.mjs.map +1 -0
  69. package/dist/components/compound/pipe-form/group.d.mts +13 -0
  70. package/dist/components/compound/pipe-form/group.d.mts.map +1 -0
  71. package/dist/components/compound/pipe-form/group.mjs +17 -0
  72. package/dist/components/compound/pipe-form/group.mjs.map +1 -0
  73. package/dist/components/compound/pipe-form/header.d.mts +14 -0
  74. package/dist/components/compound/pipe-form/header.d.mts.map +1 -0
  75. package/dist/components/compound/pipe-form/header.mjs +14 -0
  76. package/dist/components/compound/pipe-form/header.mjs.map +1 -0
  77. package/dist/components/compound/pipe-form/index.d.mts +9 -0
  78. package/dist/components/compound/pipe-form/index.mjs +11 -0
  79. package/dist/components/compound/pipe-form/root.d.mts +56 -0
  80. package/dist/components/compound/pipe-form/root.d.mts.map +1 -0
  81. package/dist/components/compound/pipe-form/root.mjs +98 -0
  82. package/dist/components/compound/pipe-form/root.mjs.map +1 -0
  83. package/dist/components/compound/pipe-form/section.d.mts +13 -0
  84. package/dist/components/compound/pipe-form/section.d.mts.map +1 -0
  85. package/dist/components/compound/pipe-form/section.mjs +17 -0
  86. package/dist/components/compound/pipe-form/section.mjs.map +1 -0
  87. package/dist/components/compound/pipe-form/submit-button.d.mts +9 -0
  88. package/dist/components/compound/pipe-form/submit-button.d.mts.map +1 -0
  89. package/dist/components/compound/pipe-form/submit-button.mjs +17 -0
  90. package/dist/components/compound/pipe-form/submit-button.mjs.map +1 -0
  91. package/dist/components/compound/pipe-form/title.d.mts +16 -0
  92. package/dist/components/compound/pipe-form/title.d.mts.map +1 -0
  93. package/dist/components/compound/pipe-form/title.mjs +14 -0
  94. package/dist/components/compound/pipe-form/title.mjs.map +1 -0
  95. package/dist/components/compound/search-catalog/active-filters.d.mts +26 -0
  96. package/dist/components/compound/search-catalog/active-filters.d.mts.map +1 -0
  97. package/dist/components/compound/search-catalog/active-filters.mjs +46 -0
  98. package/dist/components/compound/search-catalog/active-filters.mjs.map +1 -0
  99. package/dist/components/compound/search-catalog/card.d.mts +30 -0
  100. package/dist/components/compound/search-catalog/card.d.mts.map +1 -0
  101. package/dist/components/compound/search-catalog/card.mjs +77 -0
  102. package/dist/components/compound/search-catalog/card.mjs.map +1 -0
  103. package/dist/components/compound/search-catalog/category-filter.d.mts +29 -0
  104. package/dist/components/compound/search-catalog/category-filter.d.mts.map +1 -0
  105. package/dist/components/compound/search-catalog/category-filter.mjs +51 -0
  106. package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -0
  107. package/dist/components/compound/search-catalog/column-filter.d.mts +40 -0
  108. package/dist/components/compound/search-catalog/column-filter.d.mts.map +1 -0
  109. package/dist/components/compound/search-catalog/column-filter.mjs +63 -0
  110. package/dist/components/compound/search-catalog/column-filter.mjs.map +1 -0
  111. package/dist/components/compound/search-catalog/column-filters.d.mts +15 -0
  112. package/dist/components/compound/search-catalog/column-filters.d.mts.map +1 -0
  113. package/dist/components/compound/search-catalog/column-filters.mjs +16 -0
  114. package/dist/components/compound/search-catalog/column-filters.mjs.map +1 -0
  115. package/dist/components/compound/search-catalog/empty.d.mts +22 -0
  116. package/dist/components/compound/search-catalog/empty.d.mts.map +1 -0
  117. package/dist/components/compound/search-catalog/empty.mjs +31 -0
  118. package/dist/components/compound/search-catalog/empty.mjs.map +1 -0
  119. package/dist/components/compound/search-catalog/index.d.mts +12 -0
  120. package/dist/components/compound/search-catalog/index.mjs +14 -0
  121. package/dist/components/compound/search-catalog/list.d.mts +19 -0
  122. package/dist/components/compound/search-catalog/list.d.mts.map +1 -0
  123. package/dist/components/compound/search-catalog/list.mjs +29 -0
  124. package/dist/components/compound/search-catalog/list.mjs.map +1 -0
  125. package/dist/components/compound/search-catalog/output-field-filter.d.mts +22 -0
  126. package/dist/components/compound/search-catalog/output-field-filter.d.mts.map +1 -0
  127. package/dist/components/compound/search-catalog/output-field-filter.mjs +22 -0
  128. package/dist/components/compound/search-catalog/output-field-filter.mjs.map +1 -0
  129. package/dist/components/compound/search-catalog/provider-filter.d.mts +22 -0
  130. package/dist/components/compound/search-catalog/provider-filter.d.mts.map +1 -0
  131. package/dist/components/compound/search-catalog/provider-filter.mjs +29 -0
  132. package/dist/components/compound/search-catalog/provider-filter.mjs.map +1 -0
  133. package/dist/components/compound/search-catalog/root.d.mts +33 -0
  134. package/dist/components/compound/search-catalog/root.d.mts.map +1 -0
  135. package/dist/components/compound/search-catalog/root.mjs +74 -0
  136. package/dist/components/compound/search-catalog/root.mjs.map +1 -0
  137. package/dist/components/compound/search-catalog/search-filter.d.mts +24 -0
  138. package/dist/components/compound/search-catalog/search-filter.d.mts.map +1 -0
  139. package/dist/components/compound/search-catalog/search-filter.mjs +46 -0
  140. package/dist/components/compound/search-catalog/search-filter.mjs.map +1 -0
  141. package/dist/components/compound/search-catalog/tag-filter.d.mts +22 -0
  142. package/dist/components/compound/search-catalog/tag-filter.d.mts.map +1 -0
  143. package/dist/components/compound/search-catalog/tag-filter.mjs +22 -0
  144. package/dist/components/compound/search-catalog/tag-filter.mjs.map +1 -0
  145. package/dist/components/compound/search-form/content.d.mts +18 -0
  146. package/dist/components/compound/search-form/content.d.mts.map +1 -0
  147. package/dist/components/compound/search-form/content.mjs +45 -0
  148. package/dist/components/compound/search-form/content.mjs.map +1 -0
  149. package/dist/components/compound/search-form/field.d.mts +17 -0
  150. package/dist/components/compound/search-form/field.d.mts.map +1 -0
  151. package/dist/components/compound/search-form/field.mjs +21 -0
  152. package/dist/components/compound/search-form/field.mjs.map +1 -0
  153. package/dist/components/compound/search-form/footer.d.mts +14 -0
  154. package/dist/components/compound/search-form/footer.d.mts.map +1 -0
  155. package/dist/components/compound/search-form/footer.mjs +14 -0
  156. package/dist/components/compound/search-form/footer.mjs.map +1 -0
  157. package/dist/components/compound/search-form/group.d.mts +13 -0
  158. package/dist/components/compound/search-form/group.d.mts.map +1 -0
  159. package/dist/components/compound/search-form/group.mjs +17 -0
  160. package/dist/components/compound/search-form/group.mjs.map +1 -0
  161. package/dist/components/compound/search-form/header.d.mts +14 -0
  162. package/dist/components/compound/search-form/header.d.mts.map +1 -0
  163. package/dist/components/compound/search-form/header.mjs +14 -0
  164. package/dist/components/compound/search-form/header.mjs.map +1 -0
  165. package/dist/components/compound/search-form/index.d.mts +9 -0
  166. package/dist/components/compound/search-form/index.mjs +11 -0
  167. package/dist/components/compound/search-form/root.d.mts +45 -0
  168. package/dist/components/compound/search-form/root.d.mts.map +1 -0
  169. package/dist/components/compound/search-form/root.mjs +90 -0
  170. package/dist/components/compound/search-form/root.mjs.map +1 -0
  171. package/dist/components/compound/search-form/section.d.mts +13 -0
  172. package/dist/components/compound/search-form/section.d.mts.map +1 -0
  173. package/dist/components/compound/search-form/section.mjs +17 -0
  174. package/dist/components/compound/search-form/section.mjs.map +1 -0
  175. package/dist/components/compound/search-form/submit-button.d.mts +9 -0
  176. package/dist/components/compound/search-form/submit-button.d.mts.map +1 -0
  177. package/dist/components/compound/search-form/submit-button.mjs +17 -0
  178. package/dist/components/compound/search-form/submit-button.mjs.map +1 -0
  179. package/dist/components/compound/search-form/title.d.mts +16 -0
  180. package/dist/components/compound/search-form/title.d.mts.map +1 -0
  181. package/dist/components/compound/search-form/title.mjs +14 -0
  182. package/dist/components/compound/search-form/title.mjs.map +1 -0
  183. package/dist/components/compound/searches-catalog/active-filters.d.mts +26 -0
  184. package/dist/components/compound/searches-catalog/active-filters.d.mts.map +1 -0
  185. package/dist/components/compound/searches-catalog/active-filters.mjs +46 -0
  186. package/dist/components/compound/searches-catalog/active-filters.mjs.map +1 -0
  187. package/dist/components/compound/searches-catalog/card.d.mts +22 -0
  188. package/dist/components/compound/searches-catalog/card.d.mts.map +1 -0
  189. package/dist/components/compound/searches-catalog/card.mjs +70 -0
  190. package/dist/components/compound/searches-catalog/card.mjs.map +1 -0
  191. package/dist/components/compound/searches-catalog/category-filter.d.mts +29 -0
  192. package/dist/components/compound/searches-catalog/category-filter.d.mts.map +1 -0
  193. package/dist/components/compound/searches-catalog/category-filter.mjs +51 -0
  194. package/dist/components/compound/searches-catalog/category-filter.mjs.map +1 -0
  195. package/dist/components/compound/searches-catalog/column-filter.d.mts +31 -0
  196. package/dist/components/compound/searches-catalog/column-filter.d.mts.map +1 -0
  197. package/dist/components/compound/searches-catalog/column-filter.mjs +58 -0
  198. package/dist/components/compound/searches-catalog/column-filter.mjs.map +1 -0
  199. package/dist/components/compound/searches-catalog/column-filters.d.mts +15 -0
  200. package/dist/components/compound/searches-catalog/column-filters.d.mts.map +1 -0
  201. package/dist/components/compound/searches-catalog/column-filters.mjs +16 -0
  202. package/dist/components/compound/searches-catalog/column-filters.mjs.map +1 -0
  203. package/dist/components/compound/searches-catalog/empty.d.mts +22 -0
  204. package/dist/components/compound/searches-catalog/empty.d.mts.map +1 -0
  205. package/dist/components/compound/searches-catalog/empty.mjs +31 -0
  206. package/dist/components/compound/searches-catalog/empty.mjs.map +1 -0
  207. package/dist/components/compound/searches-catalog/index.d.mts +12 -0
  208. package/dist/components/compound/searches-catalog/index.mjs +14 -0
  209. package/dist/components/compound/searches-catalog/list.d.mts +19 -0
  210. package/dist/components/compound/searches-catalog/list.d.mts.map +1 -0
  211. package/dist/components/compound/searches-catalog/list.mjs +29 -0
  212. package/dist/components/compound/searches-catalog/list.mjs.map +1 -0
  213. package/dist/components/compound/searches-catalog/output-field-filter.d.mts +22 -0
  214. package/dist/components/compound/searches-catalog/output-field-filter.d.mts.map +1 -0
  215. package/dist/components/compound/searches-catalog/output-field-filter.mjs +22 -0
  216. package/dist/components/compound/searches-catalog/output-field-filter.mjs.map +1 -0
  217. package/dist/components/compound/searches-catalog/provider-filter.d.mts +22 -0
  218. package/dist/components/compound/searches-catalog/provider-filter.d.mts.map +1 -0
  219. package/dist/components/compound/searches-catalog/provider-filter.mjs +29 -0
  220. package/dist/components/compound/searches-catalog/provider-filter.mjs.map +1 -0
  221. package/dist/components/compound/searches-catalog/root.d.mts +33 -0
  222. package/dist/components/compound/searches-catalog/root.d.mts.map +1 -0
  223. package/dist/components/compound/searches-catalog/root.mjs +74 -0
  224. package/dist/components/compound/searches-catalog/root.mjs.map +1 -0
  225. package/dist/components/compound/searches-catalog/search-filter.d.mts +24 -0
  226. package/dist/components/compound/searches-catalog/search-filter.d.mts.map +1 -0
  227. package/dist/components/compound/searches-catalog/search-filter.mjs +46 -0
  228. package/dist/components/compound/searches-catalog/search-filter.mjs.map +1 -0
  229. package/dist/components/compound/searches-catalog/tag-filter.d.mts +22 -0
  230. package/dist/components/compound/searches-catalog/tag-filter.d.mts.map +1 -0
  231. package/dist/components/compound/searches-catalog/tag-filter.mjs +22 -0
  232. package/dist/components/compound/searches-catalog/tag-filter.mjs.map +1 -0
  233. package/dist/components/defaults/adapters/async-include-exclude-select-input.mjs +32 -0
  234. package/dist/components/defaults/adapters/async-include-exclude-select-input.mjs.map +1 -0
  235. package/dist/components/defaults/adapters/async-multi-select-input.mjs +26 -0
  236. package/dist/components/defaults/adapters/async-multi-select-input.mjs.map +1 -0
  237. package/dist/components/defaults/adapters/boolean-input.mjs +82 -0
  238. package/dist/components/defaults/adapters/boolean-input.mjs.map +1 -0
  239. package/dist/components/defaults/adapters/connector-input.mjs +94 -0
  240. package/dist/components/defaults/adapters/connector-input.mjs.map +1 -0
  241. package/dist/components/defaults/adapters/context-select-input.mjs +74 -0
  242. package/dist/components/defaults/adapters/context-select-input.mjs.map +1 -0
  243. package/dist/components/defaults/adapters/cursor-pagination-input.mjs +29 -0
  244. package/dist/components/defaults/adapters/cursor-pagination-input.mjs.map +1 -0
  245. package/dist/components/defaults/adapters/date-range-input.mjs +53 -0
  246. package/dist/components/defaults/adapters/date-range-input.mjs.map +1 -0
  247. package/dist/components/defaults/adapters/exact-range-input.mjs +75 -0
  248. package/dist/components/defaults/adapters/exact-range-input.mjs.map +1 -0
  249. package/dist/components/defaults/adapters/fields-select-input.mjs +25 -0
  250. package/dist/components/defaults/adapters/fields-select-input.mjs.map +1 -0
  251. package/dist/components/defaults/adapters/include-exclude-input.mjs +33 -0
  252. package/dist/components/defaults/adapters/include-exclude-input.mjs.map +1 -0
  253. package/dist/components/defaults/adapters/include-exclude-select-input.mjs +36 -0
  254. package/dist/components/defaults/adapters/include-exclude-select-input.mjs.map +1 -0
  255. package/dist/components/defaults/adapters/index.d.mts +11 -0
  256. package/dist/components/defaults/adapters/index.d.mts.map +1 -0
  257. package/dist/components/defaults/adapters/index.mjs +73 -0
  258. package/dist/components/defaults/adapters/index.mjs.map +1 -0
  259. package/dist/components/defaults/adapters/int-input.mjs +16 -0
  260. package/dist/components/defaults/adapters/int-input.mjs.map +1 -0
  261. package/dist/components/defaults/adapters/json-extraction-input.mjs +333 -0
  262. package/dist/components/defaults/adapters/json-extraction-input.mjs.map +1 -0
  263. package/dist/components/defaults/adapters/json-schema-input.mjs +30 -0
  264. package/dist/components/defaults/adapters/json-schema-input.mjs.map +1 -0
  265. package/dist/components/defaults/adapters/key-value-list-input.mjs +100 -0
  266. package/dist/components/defaults/adapters/key-value-list-input.mjs.map +1 -0
  267. package/dist/components/defaults/adapters/min-max-int-input.mjs +65 -0
  268. package/dist/components/defaults/adapters/min-max-int-input.mjs.map +1 -0
  269. package/dist/components/defaults/adapters/multi-create-input.mjs +32 -0
  270. package/dist/components/defaults/adapters/multi-create-input.mjs.map +1 -0
  271. package/dist/components/defaults/adapters/multi-select-input.mjs +26 -0
  272. package/dist/components/defaults/adapters/multi-select-input.mjs.map +1 -0
  273. package/dist/components/defaults/adapters/number-input.mjs +15 -0
  274. package/dist/components/defaults/adapters/number-input.mjs.map +1 -0
  275. package/dist/components/defaults/adapters/ordered-multi-create-input.mjs +43 -0
  276. package/dist/components/defaults/adapters/ordered-multi-create-input.mjs.map +1 -0
  277. package/dist/components/defaults/adapters/output-field-input.mjs +37 -0
  278. package/dist/components/defaults/adapters/output-field-input.mjs.map +1 -0
  279. package/dist/components/defaults/adapters/pipes-trigger-input.mjs +381 -0
  280. package/dist/components/defaults/adapters/pipes-trigger-input.mjs.map +1 -0
  281. package/dist/components/defaults/adapters/prompt-input.mjs +208 -0
  282. package/dist/components/defaults/adapters/prompt-input.mjs.map +1 -0
  283. package/dist/components/defaults/adapters/providers-input.mjs +23 -0
  284. package/dist/components/defaults/adapters/providers-input.mjs.map +1 -0
  285. package/dist/components/defaults/adapters/range-input.mjs +61 -0
  286. package/dist/components/defaults/adapters/range-input.mjs.map +1 -0
  287. package/dist/components/defaults/adapters/select-input.mjs +54 -0
  288. package/dist/components/defaults/adapters/select-input.mjs.map +1 -0
  289. package/dist/components/defaults/adapters/tagged-text-input.mjs +154 -0
  290. package/dist/components/defaults/adapters/tagged-text-input.mjs.map +1 -0
  291. package/dist/components/defaults/adapters/template-input.mjs +34 -0
  292. package/dist/components/defaults/adapters/template-input.mjs.map +1 -0
  293. package/dist/components/defaults/adapters/text-input.mjs +18 -0
  294. package/dist/components/defaults/adapters/text-input.mjs.map +1 -0
  295. package/dist/components/defaults/adapters/textarea-input.mjs +17 -0
  296. package/dist/components/defaults/adapters/textarea-input.mjs.map +1 -0
  297. package/dist/components/defaults/catalog/active-filter-pill.mjs +30 -0
  298. package/dist/components/defaults/catalog/active-filter-pill.mjs.map +1 -0
  299. package/dist/components/defaults/catalog/card-derived.d.mts +98 -0
  300. package/dist/components/defaults/catalog/card-derived.d.mts.map +1 -0
  301. package/dist/components/defaults/catalog/card-derived.mjs +172 -0
  302. package/dist/components/defaults/catalog/card-derived.mjs.map +1 -0
  303. package/dist/components/defaults/catalog/card-primitives.d.mts +81 -0
  304. package/dist/components/defaults/catalog/card-primitives.d.mts.map +1 -0
  305. package/dist/components/defaults/catalog/card-primitives.mjs +108 -0
  306. package/dist/components/defaults/catalog/card-primitives.mjs.map +1 -0
  307. package/dist/components/defaults/catalog/category-filter.d.mts +13 -0
  308. package/dist/components/defaults/catalog/category-filter.d.mts.map +1 -0
  309. package/dist/components/defaults/catalog/category-filter.mjs +28 -0
  310. package/dist/components/defaults/catalog/category-filter.mjs.map +1 -0
  311. package/dist/components/defaults/catalog/category-section.d.mts +39 -0
  312. package/dist/components/defaults/catalog/category-section.d.mts.map +1 -0
  313. package/dist/components/defaults/catalog/category-section.mjs +59 -0
  314. package/dist/components/defaults/catalog/category-section.mjs.map +1 -0
  315. package/dist/components/defaults/catalog/empty-state.mjs +20 -0
  316. package/dist/components/defaults/catalog/empty-state.mjs.map +1 -0
  317. package/dist/components/defaults/catalog/filter-select.d.mts +13 -0
  318. package/dist/components/defaults/catalog/filter-select.d.mts.map +1 -0
  319. package/dist/components/defaults/catalog/filter-select.mjs +45 -0
  320. package/dist/components/defaults/catalog/filter-select.mjs.map +1 -0
  321. package/dist/components/defaults/catalog/layout.mjs +53 -0
  322. package/dist/components/defaults/catalog/layout.mjs.map +1 -0
  323. package/dist/components/defaults/catalog/provider-avatars.d.mts +37 -0
  324. package/dist/components/defaults/catalog/provider-avatars.d.mts.map +1 -0
  325. package/dist/components/defaults/catalog/provider-avatars.mjs +98 -0
  326. package/dist/components/defaults/catalog/provider-avatars.mjs.map +1 -0
  327. package/dist/components/defaults/field-section-enumeration.mjs +32 -0
  328. package/dist/components/defaults/field-section-enumeration.mjs.map +1 -0
  329. package/dist/components/defaults/layout/field-wrapper.d.mts +13 -0
  330. package/dist/components/defaults/layout/field-wrapper.d.mts.map +1 -0
  331. package/dist/components/defaults/layout/field-wrapper.mjs +67 -0
  332. package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -0
  333. package/dist/components/defaults/layout/form.mjs +21 -0
  334. package/dist/components/defaults/layout/form.mjs.map +1 -0
  335. package/dist/components/defaults/layout/group.d.mts +16 -0
  336. package/dist/components/defaults/layout/group.d.mts.map +1 -0
  337. package/dist/components/defaults/layout/group.mjs +87 -0
  338. package/dist/components/defaults/layout/group.mjs.map +1 -0
  339. package/dist/components/defaults/layout/section.d.mts +14 -0
  340. package/dist/components/defaults/layout/section.d.mts.map +1 -0
  341. package/dist/components/defaults/layout/section.mjs +39 -0
  342. package/dist/components/defaults/layout/section.mjs.map +1 -0
  343. package/dist/components/defaults/layout/submit-button.d.mts +9 -0
  344. package/dist/components/defaults/layout/submit-button.d.mts.map +1 -0
  345. package/dist/components/defaults/layout/submit-button.mjs +23 -0
  346. package/dist/components/defaults/layout/submit-button.mjs.map +1 -0
  347. package/dist/components/defaults/toggle-advanced-button.mjs +29 -0
  348. package/dist/components/defaults/toggle-advanced-button.mjs.map +1 -0
  349. package/dist/components/field-renderer.d.mts +14 -0
  350. package/dist/components/field-renderer.d.mts.map +1 -0
  351. package/dist/components/field-renderer.mjs +21 -0
  352. package/dist/components/field-renderer.mjs.map +1 -0
  353. package/dist/components/hover-info.mjs +30 -0
  354. package/dist/components/hover-info.mjs.map +1 -0
  355. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs +319 -0
  356. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs.map +1 -0
  357. package/dist/components/internal/LiquidEditor/LiquidEditor.mjs +208 -0
  358. package/dist/components/internal/LiquidEditor/LiquidEditor.mjs.map +1 -0
  359. package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs +240 -0
  360. package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs.map +1 -0
  361. package/dist/components/internal/combobox/include-exclude-combobox.mjs +368 -0
  362. package/dist/components/internal/combobox/include-exclude-combobox.mjs.map +1 -0
  363. package/dist/components/internal/combobox/suggest-combobox.mjs +294 -0
  364. package/dist/components/internal/combobox/suggest-combobox.mjs.map +1 -0
  365. package/dist/components/internal/field-legend.mjs +37 -0
  366. package/dist/components/internal/field-legend.mjs.map +1 -0
  367. package/dist/components/internal/form-level-errors.mjs +71 -0
  368. package/dist/components/internal/form-level-errors.mjs.map +1 -0
  369. package/dist/components/internal/icons.mjs +131 -0
  370. package/dist/components/internal/icons.mjs.map +1 -0
  371. package/dist/components/internal/multi-select-popover-trigger.mjs +26 -0
  372. package/dist/components/internal/multi-select-popover-trigger.mjs.map +1 -0
  373. package/dist/components/internal/schema-editor/SchemaEditor.mjs +468 -0
  374. package/dist/components/internal/schema-editor/SchemaEditor.mjs.map +1 -0
  375. package/dist/components/internal/schema-editor/generate-schema-rows.mjs +374 -0
  376. package/dist/components/internal/schema-editor/generate-schema-rows.mjs.map +1 -0
  377. package/dist/components/internal/schema-editor/schema-editor-context.mjs +32 -0
  378. package/dist/components/internal/schema-editor/schema-editor-context.mjs.map +1 -0
  379. package/dist/components/internal/schema-editor/schema-utils.mjs +249 -0
  380. package/dist/components/internal/schema-editor/schema-utils.mjs.map +1 -0
  381. package/dist/components/internal/suggestion-menu/suggestion-menu-utils.mjs +12 -0
  382. package/dist/components/internal/suggestion-menu/suggestion-menu-utils.mjs.map +1 -0
  383. package/dist/components/internal/suggestion-menu/suggestion-menu.mjs +151 -0
  384. package/dist/components/internal/suggestion-menu/suggestion-menu.mjs.map +1 -0
  385. package/dist/components/internal/tag-chip-decoration.mjs +180 -0
  386. package/dist/components/internal/tag-chip-decoration.mjs.map +1 -0
  387. package/dist/components/rich-text.mjs +42 -0
  388. package/dist/components/rich-text.mjs.map +1 -0
  389. package/dist/components/ui/badge.mjs +32 -0
  390. package/dist/components/ui/badge.mjs.map +1 -0
  391. package/dist/components/ui/button.d.mts +19 -0
  392. package/dist/components/ui/button.d.mts.map +1 -0
  393. package/dist/components/ui/button.mjs +47 -0
  394. package/dist/components/ui/button.mjs.map +1 -0
  395. package/dist/components/ui/combobox.mjs +103 -0
  396. package/dist/components/ui/combobox.mjs.map +1 -0
  397. package/dist/components/ui/input-group.mjs +30 -0
  398. package/dist/components/ui/input-group.mjs.map +1 -0
  399. package/dist/components/ui/input.mjs +17 -0
  400. package/dist/components/ui/input.mjs.map +1 -0
  401. package/dist/components/ui/label.mjs +17 -0
  402. package/dist/components/ui/label.mjs.map +1 -0
  403. package/dist/components/ui/popover.mjs +40 -0
  404. package/dist/components/ui/popover.mjs.map +1 -0
  405. package/dist/components/ui/select.mjs +92 -0
  406. package/dist/components/ui/select.mjs.map +1 -0
  407. package/dist/components/ui/switch.mjs +21 -0
  408. package/dist/components/ui/switch.mjs.map +1 -0
  409. package/dist/components/ui/table.mjs +56 -0
  410. package/dist/components/ui/table.mjs.map +1 -0
  411. package/dist/components/ui/textarea.mjs +15 -0
  412. package/dist/components/ui/textarea.mjs.map +1 -0
  413. package/dist/components/ui/tooltip.mjs +48 -0
  414. package/dist/components/ui/tooltip.mjs.map +1 -0
  415. package/dist/context/catalog-card-context.mjs +31 -0
  416. package/dist/context/catalog-card-context.mjs.map +1 -0
  417. package/dist/context/catalog-config-context.d.mts +43 -0
  418. package/dist/context/catalog-config-context.d.mts.map +1 -0
  419. package/dist/context/catalog-config-context.mjs +48 -0
  420. package/dist/context/catalog-config-context.mjs.map +1 -0
  421. package/dist/context/form-context.mjs +11 -0
  422. package/dist/context/form-context.mjs.map +1 -0
  423. package/dist/context/form-customization-context.d.mts +71 -0
  424. package/dist/context/form-customization-context.d.mts.map +1 -0
  425. package/dist/context/form-customization-context.mjs +114 -0
  426. package/dist/context/form-customization-context.mjs.map +1 -0
  427. package/dist/context/form-provider.d.mts +41 -0
  428. package/dist/context/form-provider.d.mts.map +1 -0
  429. package/dist/context/form-provider.mjs +53 -0
  430. package/dist/context/form-provider.mjs.map +1 -0
  431. package/dist/context/pipe-catalog-card-context.d.mts +17 -0
  432. package/dist/context/pipe-catalog-card-context.d.mts.map +1 -0
  433. package/dist/context/pipe-catalog-card-context.mjs +13 -0
  434. package/dist/context/pipe-catalog-card-context.mjs.map +1 -0
  435. package/dist/context/pipe-catalog-context.d.mts +26 -0
  436. package/dist/context/pipe-catalog-context.d.mts.map +1 -0
  437. package/dist/context/pipe-catalog-context.mjs +13 -0
  438. package/dist/context/pipe-catalog-context.mjs.map +1 -0
  439. package/dist/context/pipe-form-context.d.mts +25 -0
  440. package/dist/context/pipe-form-context.d.mts.map +1 -0
  441. package/dist/context/pipe-form-context.mjs +13 -0
  442. package/dist/context/pipe-form-context.mjs.map +1 -0
  443. package/dist/context/portal-container-context.d.mts +5 -0
  444. package/dist/context/portal-container-context.d.mts.map +1 -0
  445. package/dist/context/portal-container-context.mjs +15 -0
  446. package/dist/context/portal-container-context.mjs.map +1 -0
  447. package/dist/context/search-catalog-card-context.d.mts +16 -0
  448. package/dist/context/search-catalog-card-context.d.mts.map +1 -0
  449. package/dist/context/search-catalog-card-context.mjs +13 -0
  450. package/dist/context/search-catalog-card-context.mjs.map +1 -0
  451. package/dist/context/search-catalog-context.d.mts +20 -0
  452. package/dist/context/search-catalog-context.d.mts.map +1 -0
  453. package/dist/context/search-catalog-context.mjs +13 -0
  454. package/dist/context/search-catalog-context.mjs.map +1 -0
  455. package/dist/context/search-form-context.d.mts +25 -0
  456. package/dist/context/search-form-context.d.mts.map +1 -0
  457. package/dist/context/search-form-context.mjs +13 -0
  458. package/dist/context/search-form-context.mjs.map +1 -0
  459. package/dist/context/searches-catalog-card-context.d.mts +16 -0
  460. package/dist/context/searches-catalog-card-context.d.mts.map +1 -0
  461. package/dist/context/searches-catalog-card-context.mjs +13 -0
  462. package/dist/context/searches-catalog-card-context.mjs.map +1 -0
  463. package/dist/context/searches-catalog-context.d.mts +20 -0
  464. package/dist/context/searches-catalog-context.d.mts.map +1 -0
  465. package/dist/context/searches-catalog-context.mjs +13 -0
  466. package/dist/context/searches-catalog-context.mjs.map +1 -0
  467. package/dist/hooks/use-debounce.mjs +28 -0
  468. package/dist/hooks/use-debounce.mjs.map +1 -0
  469. package/dist/hooks/use-debounced-fn.mjs +47 -0
  470. package/dist/hooks/use-debounced-fn.mjs.map +1 -0
  471. package/dist/hooks/use-disclosure.mjs +35 -0
  472. package/dist/hooks/use-disclosure.mjs.map +1 -0
  473. package/dist/hooks/use-field-error.d.mts +11 -0
  474. package/dist/hooks/use-field-error.d.mts.map +1 -0
  475. package/dist/hooks/use-field-error.mjs +23 -0
  476. package/dist/hooks/use-field-error.mjs.map +1 -0
  477. package/dist/hooks/use-floating-element.mjs +45 -0
  478. package/dist/hooks/use-floating-element.mjs.map +1 -0
  479. package/dist/hooks/use-form-core.d.mts +16 -0
  480. package/dist/hooks/use-form-core.d.mts.map +1 -0
  481. package/dist/hooks/use-form-core.mjs +241 -0
  482. package/dist/hooks/use-form-core.mjs.map +1 -0
  483. package/dist/hooks/use-jsonata-preview.mjs +38 -0
  484. package/dist/hooks/use-jsonata-preview.mjs.map +1 -0
  485. package/dist/hooks/use-menu-navigation.mjs +86 -0
  486. package/dist/hooks/use-menu-navigation.mjs.map +1 -0
  487. package/dist/hooks/use-pipe-catalog-table.d.mts +47 -0
  488. package/dist/hooks/use-pipe-catalog-table.d.mts.map +1 -0
  489. package/dist/hooks/use-pipe-catalog-table.mjs +170 -0
  490. package/dist/hooks/use-pipe-catalog-table.mjs.map +1 -0
  491. package/dist/hooks/use-pipe-form.d.mts +31 -0
  492. package/dist/hooks/use-pipe-form.d.mts.map +1 -0
  493. package/dist/hooks/use-pipe-form.mjs +65 -0
  494. package/dist/hooks/use-pipe-form.mjs.map +1 -0
  495. package/dist/hooks/use-search-catalog-table.d.mts +40 -0
  496. package/dist/hooks/use-search-catalog-table.d.mts.map +1 -0
  497. package/dist/hooks/use-search-catalog-table.mjs +161 -0
  498. package/dist/hooks/use-search-catalog-table.mjs.map +1 -0
  499. package/dist/hooks/use-search-form.d.mts +17 -0
  500. package/dist/hooks/use-search-form.d.mts.map +1 -0
  501. package/dist/hooks/use-search-form.mjs +58 -0
  502. package/dist/hooks/use-search-form.mjs.map +1 -0
  503. package/dist/hooks/use-searches-catalog-table.d.mts +40 -0
  504. package/dist/hooks/use-searches-catalog-table.d.mts.map +1 -0
  505. package/dist/hooks/use-searches-catalog-table.mjs +161 -0
  506. package/dist/hooks/use-searches-catalog-table.mjs.map +1 -0
  507. package/dist/index.d.mts +96 -0
  508. package/dist/index.mjs +98 -0
  509. package/dist/lib/utils.mjs +11 -0
  510. package/dist/lib/utils.mjs.map +1 -0
  511. package/dist/styles/pipe0-form.css +3785 -0
  512. package/dist/types/adapters.d.mts +107 -0
  513. package/dist/types/adapters.d.mts.map +1 -0
  514. package/dist/types/catalog-adapters.d.mts +122 -0
  515. package/dist/types/catalog-adapters.d.mts.map +1 -0
  516. package/dist/types/field-handle.d.mts +3 -0
  517. package/dist/types/field-props.d.mts +285 -0
  518. package/dist/types/field-props.d.mts.map +1 -0
  519. package/dist/types/form-customization.d.mts +25 -0
  520. package/dist/types/form-customization.d.mts.map +1 -0
  521. package/dist/types/form-handle.d.mts +23 -0
  522. package/dist/types/form-handle.d.mts.map +1 -0
  523. package/dist/utils/build-section-handlers.mjs +419 -0
  524. package/dist/utils/build-section-handlers.mjs.map +1 -0
  525. package/dist/utils/catalog-helpers.d.mts +12 -0
  526. package/dist/utils/catalog-helpers.d.mts.map +1 -0
  527. package/dist/utils/catalog-helpers.mjs +35 -0
  528. package/dist/utils/catalog-helpers.mjs.map +1 -0
  529. package/dist/utils/generate-random-string.mjs +11 -0
  530. package/dist/utils/generate-random-string.mjs.map +1 -0
  531. package/dist/utils/merge-form-stores.mjs +14 -0
  532. package/dist/utils/merge-form-stores.mjs.map +1 -0
  533. package/dist/utils/object-path.mjs +72 -0
  534. package/dist/utils/object-path.mjs.map +1 -0
  535. package/dist/utils/render-slot.d.mts +44 -0
  536. package/dist/utils/render-slot.d.mts.map +1 -0
  537. package/dist/utils/render-slot.mjs +30 -0
  538. package/dist/utils/render-slot.mjs.map +1 -0
  539. package/dist/widgets/avatar-group.d.mts +36 -0
  540. package/dist/widgets/avatar-group.d.mts.map +1 -0
  541. package/dist/widgets/avatar-group.mjs +114 -0
  542. package/dist/widgets/avatar-group.mjs.map +1 -0
  543. package/dist/widgets/emoji-glyph.d.mts +11 -0
  544. package/dist/widgets/emoji-glyph.d.mts.map +1 -0
  545. package/dist/widgets/emoji-glyph.mjs +13 -0
  546. package/dist/widgets/emoji-glyph.mjs.map +1 -0
  547. package/dist/widgets/field-type-badge.d.mts +13 -0
  548. package/dist/widgets/field-type-badge.d.mts.map +1 -0
  549. package/dist/widgets/field-type-badge.mjs +30 -0
  550. package/dist/widgets/field-type-badge.mjs.map +1 -0
  551. package/dist/widgets/icon-glyph.d.mts +16 -0
  552. package/dist/widgets/icon-glyph.d.mts.map +1 -0
  553. package/dist/widgets/icon-glyph.mjs +59 -0
  554. package/dist/widgets/icon-glyph.mjs.map +1 -0
  555. package/dist/widgets/index.d.mts +9 -0
  556. package/dist/widgets/index.mjs +11 -0
  557. package/dist/widgets/logo-url.d.mts +17 -0
  558. package/dist/widgets/logo-url.d.mts.map +1 -0
  559. package/dist/widgets/logo-url.mjs +17 -0
  560. package/dist/widgets/logo-url.mjs.map +1 -0
  561. package/dist/widgets/pricing-badge.d.mts +11 -0
  562. package/dist/widgets/pricing-badge.d.mts.map +1 -0
  563. package/dist/widgets/pricing-badge.mjs +13 -0
  564. package/dist/widgets/pricing-badge.mjs.map +1 -0
  565. package/dist/widgets/provider-logo.d.mts +16 -0
  566. package/dist/widgets/provider-logo.d.mts.map +1 -0
  567. package/dist/widgets/provider-logo.mjs +20 -0
  568. package/dist/widgets/provider-logo.mjs.map +1 -0
  569. package/dist/widgets/widget-strip.d.mts +16 -0
  570. package/dist/widgets/widget-strip.d.mts.map +1 -0
  571. package/dist/widgets/widget-strip.mjs +42 -0
  572. package/dist/widgets/widget-strip.mjs.map +1 -0
  573. package/dist/widgets/widget-view.d.mts +14 -0
  574. package/dist/widgets/widget-view.d.mts.map +1 -0
  575. package/dist/widgets/widget-view.mjs +36 -0
  576. package/dist/widgets/widget-view.mjs.map +1 -0
  577. package/package.json +82 -0
@@ -0,0 +1,208 @@
1
+ import { cn } from "../../../lib/utils.mjs";
2
+ import { Button } from "../../ui/button.mjs";
3
+ import { Input } from "../../ui/input.mjs";
4
+ import { IconCheck, IconPencil, IconPlus, IconTrash } from "../../internal/icons.mjs";
5
+ import { useFieldError } from "../../../hooks/use-field-error.mjs";
6
+ import { generateRandomString } from "../../../utils/generate-random-string.mjs";
7
+ import { Popover, PopoverContent, PopoverTrigger } from "../../ui/popover.mjs";
8
+ import { SchemaEditor } from "../../internal/schema-editor/SchemaEditor.mjs";
9
+ import { LiquidEditor } from "../../internal/LiquidEditor/LiquidEditor.mjs";
10
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../../ui/table.mjs";
11
+ import { useCallback, useMemo, useState } from "react";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+
14
+ //#region src/components/defaults/adapters/prompt-input.tsx
15
+ function ChangeSchemaNameForm({ defaultName, existingNames, onSubmit, onClose }) {
16
+ const [inputValue, setInputValue] = useState(defaultName);
17
+ const trimmed = inputValue.trim();
18
+ const isDuplicate = trimmed !== defaultName && existingNames.includes(trimmed);
19
+ const isInvalid = !trimmed || isDuplicate;
20
+ const handleSubmit = () => {
21
+ if (isInvalid) return;
22
+ if (defaultName !== trimmed) onSubmit(trimmed);
23
+ onClose();
24
+ };
25
+ return /* @__PURE__ */ jsxs("div", {
26
+ className: "pz:flex pz:flex-col pz:gap-1",
27
+ children: [/* @__PURE__ */ jsxs("div", {
28
+ className: "pz:flex pz:items-center pz:gap-2",
29
+ children: [/* @__PURE__ */ jsx(Input, {
30
+ placeholder: "Change name…",
31
+ value: inputValue,
32
+ onChange: (e) => setInputValue(e.target.value),
33
+ minLength: 1,
34
+ "aria-invalid": isDuplicate,
35
+ onKeyDown: (e) => {
36
+ if (e.key === "Enter") {
37
+ e.preventDefault();
38
+ handleSubmit();
39
+ }
40
+ }
41
+ }), /* @__PURE__ */ jsx(Button, {
42
+ type: "button",
43
+ variant: "ghost",
44
+ size: "icon",
45
+ onClick: handleSubmit,
46
+ disabled: isInvalid,
47
+ children: /* @__PURE__ */ jsx(IconCheck, {
48
+ width: 14,
49
+ height: 14
50
+ })
51
+ })]
52
+ }), isDuplicate && /* @__PURE__ */ jsx("span", {
53
+ className: "pz:text-destructive pz:text-xs pz:font-medium",
54
+ role: "alert",
55
+ children: "A schema with that name already exists."
56
+ })]
57
+ });
58
+ }
59
+ /**
60
+ * Prompt editor with Tiptap rich text, @/​ autocomplete, and JSON schema management.
61
+ * For a more customized editor, provide a custom adapter via FormProvider.
62
+ */
63
+ const EMPTY_PROMPT = {
64
+ template: "",
65
+ json_schemas: {}
66
+ };
67
+ function PromptInputAdapter(field) {
68
+ const meta = field.meta;
69
+ const value = field.value ?? EMPTY_PROMPT;
70
+ const templateError = useFieldError(field.form, `${field.path}.template`);
71
+ const tableData = useMemo(() => Object.entries(value.json_schemas || {}), [value.json_schemas]);
72
+ const formRef = field.form;
73
+ const path = field.path;
74
+ const readCurrent = useCallback(() => formRef.getValues(path) ?? EMPTY_PROMPT, [formRef, path]);
75
+ const handleChange = useCallback((v) => field.setValue(v), [field]);
76
+ const handleAddSchema = useCallback((schemaName) => {
77
+ const current = readCurrent();
78
+ if (current.json_schemas?.[schemaName]) return;
79
+ handleChange({
80
+ ...current,
81
+ json_schemas: {
82
+ ...current.json_schemas,
83
+ [schemaName]: {
84
+ type: "object",
85
+ properties: {}
86
+ }
87
+ }
88
+ });
89
+ }, [handleChange, readCurrent]);
90
+ const handleChangeSchemaName = useCallback((oldName, newName) => {
91
+ const current = readCurrent();
92
+ const schemas = current.json_schemas ?? {};
93
+ if (!schemas[oldName] || oldName === newName || schemas[newName]) return;
94
+ const { [oldName]: oldSchema, ...rest } = schemas;
95
+ handleChange({
96
+ template: current.template,
97
+ json_schemas: {
98
+ ...rest,
99
+ [newName]: oldSchema
100
+ }
101
+ });
102
+ }, [handleChange, readCurrent]);
103
+ const handleDeleteSchema = useCallback((schemaName) => {
104
+ const current = readCurrent();
105
+ if (!current.json_schemas?.[schemaName]) return;
106
+ const { [schemaName]: _removed, ...rest } = current.json_schemas;
107
+ handleChange({
108
+ template: current.template,
109
+ json_schemas: rest
110
+ });
111
+ }, [handleChange, readCurrent]);
112
+ return /* @__PURE__ */ jsxs("div", {
113
+ "data-p0": "input",
114
+ className: "pz:flex pz:flex-col pz:gap-3",
115
+ children: [
116
+ /* @__PURE__ */ jsx("div", {
117
+ "aria-invalid": !!templateError,
118
+ className: cn("pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs", templateError && "pz:border-destructive"),
119
+ children: /* @__PURE__ */ jsx(LiquidEditor, {
120
+ value: value.template,
121
+ onChange: (v) => handleChange({
122
+ ...value,
123
+ template: v
124
+ }),
125
+ inputFields: meta.inputFields ?? [],
126
+ searchSecrets: field.searchSecrets,
127
+ multiline: true,
128
+ autoGrow: true,
129
+ directives: (meta.supportedTags ?? ["input", "output"]).includes("output") ? ["output"] : []
130
+ })
131
+ }),
132
+ templateError && /* @__PURE__ */ jsx("span", {
133
+ className: "pz:text-destructive pz:text-xs pz:font-medium",
134
+ role: "alert",
135
+ children: templateError
136
+ }),
137
+ /* @__PURE__ */ jsxs("div", {
138
+ className: "pz:flex pz:flex-col pz:gap-2",
139
+ children: [/* @__PURE__ */ jsxs("div", {
140
+ className: "pz:flex pz:items-center pz:justify-between",
141
+ children: [/* @__PURE__ */ jsx("span", {
142
+ className: "pz:text-sm pz:font-medium",
143
+ children: "JSON Schemas"
144
+ }), /* @__PURE__ */ jsxs(Button, {
145
+ type: "button",
146
+ variant: "ghost",
147
+ size: "sm",
148
+ onClick: () => handleAddSchema(generateRandomString(5)),
149
+ children: [/* @__PURE__ */ jsx(IconPlus, {
150
+ width: 14,
151
+ height: 14
152
+ }), " Add"]
153
+ })]
154
+ }), tableData.length > 0 && /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [/* @__PURE__ */ jsx(TableHead, { children: "Name" }), /* @__PURE__ */ jsx(TableHead, { children: "Schema" })] }) }), /* @__PURE__ */ jsx(TableBody, { children: tableData.map(([schemaName, schema]) => /* @__PURE__ */ jsxs(TableRow, { children: [/* @__PURE__ */ jsxs(TableCell, {
155
+ className: "pz:flex pz:items-center pz:gap-1",
156
+ children: [
157
+ /* @__PURE__ */ jsx("span", { children: schemaName }),
158
+ /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsx(PopoverTrigger, { render: /* @__PURE__ */ jsx(Button, {
159
+ type: "button",
160
+ variant: "ghost",
161
+ size: "icon",
162
+ title: "Rename",
163
+ children: /* @__PURE__ */ jsx(IconPencil, {
164
+ width: 12,
165
+ height: 12
166
+ })
167
+ }) }), /* @__PURE__ */ jsx(PopoverContent, {
168
+ sideOffset: 4,
169
+ className: "pz:w-auto pz:p-2",
170
+ children: /* @__PURE__ */ jsx(ChangeSchemaNameForm, {
171
+ defaultName: schemaName,
172
+ existingNames: Object.keys(value.json_schemas || {}),
173
+ onSubmit: (newName) => handleChangeSchemaName(schemaName, newName),
174
+ onClose: () => {}
175
+ })
176
+ })] }),
177
+ /* @__PURE__ */ jsx(Button, {
178
+ type: "button",
179
+ variant: "ghost",
180
+ size: "icon",
181
+ onClick: () => handleDeleteSchema(schemaName),
182
+ title: "Delete schema",
183
+ children: /* @__PURE__ */ jsx(IconTrash, {
184
+ width: 12,
185
+ height: 12
186
+ })
187
+ })
188
+ ]
189
+ }), /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(SchemaEditor, {
190
+ value: schema,
191
+ onChange: (newSchema) => {
192
+ handleChange({
193
+ ...value,
194
+ json_schemas: {
195
+ ...value.json_schemas,
196
+ [schemaName]: newSchema
197
+ }
198
+ });
199
+ }
200
+ }) })] }, schemaName)) })] })]
201
+ })
202
+ ]
203
+ });
204
+ }
205
+
206
+ //#endregion
207
+ export { PromptInputAdapter };
208
+ //# sourceMappingURL=prompt-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/prompt-input.tsx"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\nimport { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport type { BaseFieldProps } from \"../../../types/field-props.js\";\nimport { generateRandomString } from \"../../../utils/generate-random-string.js\";\nimport { IconCheck, IconPencil, IconPlus, IconTrash } from \"../../internal/icons.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\nimport { SchemaEditor } from \"../../internal/schema-editor/SchemaEditor.js\";\nimport { Button } from \"../../ui/button.js\";\nimport { Input } from \"../../ui/input.js\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../ui/popover.js\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"../../ui/table.js\";\n\nfunction ChangeSchemaNameForm({\n defaultName,\n existingNames,\n onSubmit,\n onClose,\n}: {\n defaultName: string;\n existingNames: string[];\n onSubmit: (newName: string) => void;\n onClose: () => void;\n}) {\n const [inputValue, setInputValue] = useState(defaultName);\n const trimmed = inputValue.trim();\n const isDuplicate = trimmed !== defaultName && existingNames.includes(trimmed);\n const isInvalid = !trimmed || isDuplicate;\n\n const handleSubmit = () => {\n if (isInvalid) return;\n if (defaultName !== trimmed) onSubmit(trimmed);\n onClose();\n };\n\n return (\n <div className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className=\"pz:flex pz:items-center pz:gap-2\">\n <Input\n placeholder=\"Change name…\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n minLength={1}\n aria-invalid={isDuplicate}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSubmit();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleSubmit}\n disabled={isInvalid}\n >\n <IconCheck width={14} height={14} />\n </Button>\n </div>\n {isDuplicate && (\n <span className=\"pz:text-destructive pz:text-xs pz:font-medium\" role=\"alert\">\n A schema with that name already exists.\n </span>\n )}\n </div>\n );\n}\n\ntype PromptValue = BaseFieldProps<\"prompt_input\">[\"value\"];\n\n/**\n * Prompt editor with Tiptap rich text, @/​ autocomplete, and JSON schema management.\n * For a more customized editor, provide a custom adapter via FormProvider.\n */\nconst EMPTY_PROMPT: PromptValue = { template: \"\", json_schemas: {} };\n\nexport function PromptInputAdapter(field: FieldHandle<\"prompt_input\">) {\n const meta = field.meta;\n const value = field.value ?? EMPTY_PROMPT;\n\n const templateError = useFieldError(field.form, `${field.path}.template`);\n\n const tableData = useMemo(() => Object.entries(value.json_schemas || {}), [value.json_schemas]);\n\n // Mutation callbacks read the freshest value from RHF at call time instead\n // of closing over `value` — so they depend only on stable identifiers\n // (`field.form` and `field.path`) and don't re-create on every keystroke\n // into the prompt template.\n const formRef = field.form;\n const path = field.path;\n\n const readCurrent = useCallback(\n (): PromptValue => (formRef.getValues(path as any) as PromptValue | undefined) ?? EMPTY_PROMPT,\n [formRef, path],\n );\n\n const handleChange = useCallback((v: PromptValue) => field.setValue(v), [field]);\n\n const handleAddSchema = useCallback(\n (schemaName: string) => {\n const current = readCurrent();\n if (current.json_schemas?.[schemaName]) return;\n handleChange({\n ...current,\n json_schemas: {\n ...current.json_schemas,\n [schemaName]: { type: \"object\", properties: {} },\n },\n });\n },\n [handleChange, readCurrent],\n );\n\n const handleChangeSchemaName = useCallback(\n (oldName: string, newName: string) => {\n const current = readCurrent();\n const schemas = current.json_schemas ?? {};\n if (!schemas[oldName] || oldName === newName || schemas[newName]) return;\n const { [oldName]: oldSchema, ...rest } = schemas;\n handleChange({ template: current.template, json_schemas: { ...rest, [newName]: oldSchema } });\n },\n [handleChange, readCurrent],\n );\n\n const handleDeleteSchema = useCallback(\n (schemaName: string) => {\n const current = readCurrent();\n if (!current.json_schemas?.[schemaName]) return;\n const { [schemaName]: _removed, ...rest } = current.json_schemas;\n handleChange({ template: current.template, json_schemas: rest });\n },\n [handleChange, readCurrent],\n );\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-3\">\n <div\n aria-invalid={!!templateError}\n className={cn(\n \"pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs\",\n templateError && \"pz:border-destructive\",\n )}\n >\n <LiquidEditor\n value={value.template}\n onChange={(v) => handleChange({ ...value, template: v })}\n inputFields={meta.inputFields ?? []}\n searchSecrets={field.searchSecrets}\n multiline\n autoGrow\n directives={\n (meta.supportedTags ?? [\"input\", \"output\"]).includes(\"output\") ? [\"output\"] : []\n }\n />\n </div>\n {templateError && (\n <span className=\"pz:text-destructive pz:text-xs pz:font-medium\" role=\"alert\">\n {templateError}\n </span>\n )}\n\n {/* JSON Schemas section */}\n <div className=\"pz:flex pz:flex-col pz:gap-2\">\n <div className=\"pz:flex pz:items-center pz:justify-between\">\n <span className=\"pz:text-sm pz:font-medium\">JSON Schemas</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleAddSchema(generateRandomString(5))}\n >\n <IconPlus width={14} height={14} /> Add\n </Button>\n </div>\n {tableData.length > 0 && (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Schema</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {tableData.map(([schemaName, schema]) => (\n <TableRow key={schemaName}>\n <TableCell className=\"pz:flex pz:items-center pz:gap-1\">\n <span>{schemaName}</span>\n <Popover>\n <PopoverTrigger\n render={\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" title=\"Rename\">\n <IconPencil width={12} height={12} />\n </Button>\n }\n />\n <PopoverContent sideOffset={4} className=\"pz:w-auto pz:p-2\">\n <ChangeSchemaNameForm\n defaultName={schemaName}\n existingNames={Object.keys(value.json_schemas || {})}\n onSubmit={(newName) => handleChangeSchemaName(schemaName, newName)}\n onClose={() => {}}\n />\n </PopoverContent>\n </Popover>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => handleDeleteSchema(schemaName)}\n title=\"Delete schema\"\n >\n <IconTrash width={12} height={12} />\n </Button>\n </TableCell>\n <TableCell>\n <SchemaEditor\n value={schema}\n onChange={(newSchema) => {\n handleChange({\n ...value,\n json_schemas: {\n ...value.json_schemas,\n [schemaName]: newSchema,\n },\n });\n }}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { SuggestCombobox } from "../../internal/combobox/suggest-combobox.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+
4
+ //#region src/components/defaults/adapters/providers-input.tsx
5
+ function ProvidersInputAdapter(field) {
6
+ return /* @__PURE__ */ jsx("div", {
7
+ "data-p0": "input",
8
+ children: /* @__PURE__ */ jsx(SuggestCombobox, {
9
+ value: (field.value ?? []).map((p) => p.provider),
10
+ onChange: (next) => field.setValue(next.map((provider) => ({ provider }))),
11
+ options: field.options,
12
+ maxItems: field.meta.maxItems,
13
+ ariaInvalid: !!field.error,
14
+ placeholder: "Select providers…",
15
+ emptyLabel: "No providers available",
16
+ reorderable: true
17
+ })
18
+ });
19
+ }
20
+
21
+ //#endregion
22
+ export { ProvidersInputAdapter };
23
+ //# sourceMappingURL=providers-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/providers-input.tsx"],"sourcesContent":["import type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\n\nexport function ProvidersInputAdapter(field: FieldHandle<\"providers_input\">) {\n const selected = (field.value ?? []).map((p: { provider: string }) => p.provider);\n\n return (\n <div data-p0=\"input\">\n <SuggestCombobox\n value={selected}\n onChange={(next) => field.setValue(next.map((provider) => ({ provider })))}\n options={field.options}\n maxItems={field.meta.maxItems}\n ariaInvalid={!!field.error}\n placeholder=\"Select providers…\"\n emptyLabel=\"No providers available\"\n reorderable\n />\n </div>\n );\n}\n"],"mappings":";;;;AAGA,SAAgB,sBAAsB,OAAuC;AAG3E,QACE,oBAAC,OAAD;EAAK,WAAQ;YACX,oBAAC,iBAAD;GACE,QALY,MAAM,SAAS,EAAE,EAAE,KAAK,MAA4B,EAAE,SAAS;GAM3E,WAAW,SAAS,MAAM,SAAS,KAAK,KAAK,cAAc,EAAE,UAAU,EAAE,CAAC;GAC1E,SAAS,MAAM;GACf,UAAU,MAAM,KAAK;GACrB,aAAa,CAAC,CAAC,MAAM;GACrB,aAAY;GACZ,YAAW;GACX;GACA;EACE"}
@@ -0,0 +1,61 @@
1
+ import { Input } from "../../ui/input.mjs";
2
+ import { useFieldError } from "../../../hooks/use-field-error.mjs";
3
+ import { Label } from "../../ui/label.mjs";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+
6
+ //#region src/components/defaults/adapters/range-input.tsx
7
+ function RangeInputAdapter(field) {
8
+ const fromError = useFieldError(field.form, `${field.path}.from`);
9
+ const toError = useFieldError(field.form, `${field.path}.to`);
10
+ return /* @__PURE__ */ jsxs("div", {
11
+ "data-p0": "input",
12
+ className: "pz:flex pz:flex-col pz:gap-1",
13
+ children: [/* @__PURE__ */ jsxs("div", {
14
+ className: "pz:flex pz:items-end pz:gap-2",
15
+ children: [
16
+ /* @__PURE__ */ jsxs("div", {
17
+ className: "pz:flex pz:flex-col pz:gap-1 pz:flex-1",
18
+ children: [/* @__PURE__ */ jsx(Label, {
19
+ className: "pz:text-xs pz:text-muted-foreground",
20
+ children: "From"
21
+ }), /* @__PURE__ */ jsx(Input, {
22
+ type: "number",
23
+ value: field.from.value ?? "",
24
+ onChange: (e) => field.from.set(e.target.value === "" ? null : Number(e.target.value)),
25
+ min: field.meta.min,
26
+ max: field.meta.max,
27
+ placeholder: field.meta.unit ?? "",
28
+ "aria-invalid": !!fromError || !!field.error
29
+ })]
30
+ }),
31
+ /* @__PURE__ */ jsx("span", {
32
+ className: "pz:pb-2 pz:text-muted-foreground",
33
+ children: "–"
34
+ }),
35
+ /* @__PURE__ */ jsxs("div", {
36
+ className: "pz:flex pz:flex-col pz:gap-1 pz:flex-1",
37
+ children: [/* @__PURE__ */ jsx(Label, {
38
+ className: "pz:text-xs pz:text-muted-foreground",
39
+ children: "To"
40
+ }), /* @__PURE__ */ jsx(Input, {
41
+ type: "number",
42
+ value: field.to.value ?? "",
43
+ onChange: (e) => field.to.set(e.target.value === "" ? null : Number(e.target.value)),
44
+ min: field.meta.min,
45
+ max: field.meta.max,
46
+ placeholder: field.meta.unit ?? "",
47
+ "aria-invalid": !!toError || !!field.error
48
+ })]
49
+ })
50
+ ]
51
+ }), (fromError || toError) && /* @__PURE__ */ jsx("span", {
52
+ className: "pz:text-destructive pz:text-xs pz:font-medium",
53
+ role: "alert",
54
+ children: fromError ?? toError
55
+ })]
56
+ });
57
+ }
58
+
59
+ //#endregion
60
+ export { RangeInputAdapter };
61
+ //# sourceMappingURL=range-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/range-input.tsx"],"sourcesContent":["import { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { Input } from \"../../ui/input.js\";\nimport { Label } from \"../../ui/label.js\";\n\nexport function RangeInputAdapter(field: FieldHandle<\"range_input\">) {\n const fromError = useFieldError(field.form, `${field.path}.from`);\n const toError = useFieldError(field.form, `${field.path}.to`);\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className=\"pz:flex pz:items-end pz:gap-2\">\n <div className=\"pz:flex pz:flex-col pz:gap-1 pz:flex-1\">\n <Label className=\"pz:text-xs pz:text-muted-foreground\">From</Label>\n <Input\n type=\"number\"\n value={field.from.value ?? \"\"}\n onChange={(e) => field.from.set(e.target.value === \"\" ? null : Number(e.target.value))}\n min={field.meta.min}\n max={field.meta.max}\n placeholder={field.meta.unit ?? \"\"}\n aria-invalid={!!fromError || !!field.error}\n />\n </div>\n <span className=\"pz:pb-2 pz:text-muted-foreground\">–</span>\n <div className=\"pz:flex pz:flex-col pz:gap-1 pz:flex-1\">\n <Label className=\"pz:text-xs pz:text-muted-foreground\">To</Label>\n <Input\n type=\"number\"\n value={field.to.value ?? \"\"}\n onChange={(e) => field.to.set(e.target.value === \"\" ? null : Number(e.target.value))}\n min={field.meta.min}\n max={field.meta.max}\n placeholder={field.meta.unit ?? \"\"}\n aria-invalid={!!toError || !!field.error}\n />\n </div>\n </div>\n {(fromError || toError) && (\n <span className=\"pz:text-destructive pz:text-xs pz:font-medium\" role=\"alert\">\n {fromError ?? toError}\n </span>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,SAAgB,kBAAkB,OAAmC;CACnE,MAAM,YAAY,cAAc,MAAM,MAAM,GAAG,MAAM,KAAK,OAAO;CACjE,MAAM,UAAU,cAAc,MAAM,MAAM,GAAG,MAAM,KAAK,KAAK;AAE7D,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B,CACE,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAO,WAAU;gBAAsC;MAAY,GACnE,oBAAC,OAAD;MACE,MAAK;MACL,OAAO,MAAM,KAAK,SAAS;MAC3B,WAAW,MAAM,MAAM,KAAK,IAAI,EAAE,OAAO,UAAU,KAAK,OAAO,OAAO,EAAE,OAAO,MAAM,CAAC;MACtF,KAAK,MAAM,KAAK;MAChB,KAAK,MAAM,KAAK;MAChB,aAAa,MAAM,KAAK,QAAQ;MAChC,gBAAc,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM;MACrC,EACE;;IACN,oBAAC,QAAD;KAAM,WAAU;eAAmC;KAAQ;IAC3D,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAO,WAAU;gBAAsC;MAAU,GACjE,oBAAC,OAAD;MACE,MAAK;MACL,OAAO,MAAM,GAAG,SAAS;MACzB,WAAW,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,UAAU,KAAK,OAAO,OAAO,EAAE,OAAO,MAAM,CAAC;MACpF,KAAK,MAAM,KAAK;MAChB,KAAK,MAAM,KAAK;MAChB,aAAa,MAAM,KAAK,QAAQ;MAChC,gBAAc,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM;MACnC,EACE;;IACF;OACJ,aAAa,YACb,oBAAC,QAAD;GAAM,WAAU;GAAgD,MAAK;aAClE,aAAa;GACT,EAEL"}
@@ -0,0 +1,54 @@
1
+ import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "../../ui/select.mjs";
2
+ import { WidgetStrip } from "../../../widgets/widget-strip.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+
5
+ //#region src/components/defaults/adapters/select-input.tsx
6
+ function OptionContent({ label, widgets }) {
7
+ return /* @__PURE__ */ jsxs("span", {
8
+ className: "pz:flex pz:items-center pz:gap-2",
9
+ children: [/* @__PURE__ */ jsx(WidgetStrip, { widgets }), /* @__PURE__ */ jsx("span", { children: label })]
10
+ });
11
+ }
12
+ function SelectInputAdapter(field) {
13
+ const placeholder = field.meta.placeholder ?? "— Select —";
14
+ const selectedOption = field.options.find((o) => o.value === field.selectedValue);
15
+ const hasOptions = field.options.length > 0;
16
+ return /* @__PURE__ */ jsxs("div", {
17
+ "data-p0": "input",
18
+ className: "pz:flex pz:flex-col pz:gap-1",
19
+ children: [/* @__PURE__ */ jsxs(Select, {
20
+ value: field.selectedValue || void 0,
21
+ onValueChange: (v) => {
22
+ if (v === null) return;
23
+ field.onSelect(v);
24
+ },
25
+ name: field.path,
26
+ disabled: !hasOptions,
27
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
28
+ id: field.id,
29
+ "aria-invalid": !!field.error,
30
+ className: "pz:w-full",
31
+ children: /* @__PURE__ */ jsx(SelectValue, {
32
+ placeholder,
33
+ children: selectedOption ? /* @__PURE__ */ jsx(OptionContent, {
34
+ label: selectedOption.label,
35
+ widgets: selectedOption.widgets
36
+ }) : void 0
37
+ })
38
+ }), /* @__PURE__ */ jsx(SelectContent, { children: /* @__PURE__ */ jsx(SelectGroup, { children: field.options.map((opt) => /* @__PURE__ */ jsx(SelectItem, {
39
+ value: opt.value,
40
+ children: /* @__PURE__ */ jsx(OptionContent, {
41
+ label: opt.label,
42
+ widgets: opt.widgets
43
+ })
44
+ }, opt.value)) }) })]
45
+ }), !hasOptions && /* @__PURE__ */ jsx("span", {
46
+ className: "pz:text-xs pz:text-muted-foreground",
47
+ children: "No options available"
48
+ })]
49
+ });
50
+ }
51
+
52
+ //#endregion
53
+ export { SelectInputAdapter };
54
+ //# sourceMappingURL=select-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/select-input.tsx"],"sourcesContent":["import type { WidgetsByKind } from \"@pipe0/base\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { WidgetStrip } from \"../../../widgets/widget-strip.js\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select.js\";\n\nfunction OptionContent({ label, widgets }: { label: string; widgets?: WidgetsByKind }) {\n return (\n <span className=\"pz:flex pz:items-center pz:gap-2\">\n <WidgetStrip widgets={widgets} />\n <span>{label}</span>\n </span>\n );\n}\n\nexport function SelectInputAdapter(field: FieldHandle<\"select_input\">) {\n const placeholder = field.meta.placeholder ?? \"— Select —\";\n const selectedOption = field.options.find((o) => o.value === field.selectedValue);\n const hasOptions = field.options.length > 0;\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <Select\n value={field.selectedValue || undefined}\n onValueChange={(v) => {\n if (v === null) return;\n field.onSelect(v);\n }}\n name={field.path}\n disabled={!hasOptions}\n >\n <SelectTrigger id={field.id} aria-invalid={!!field.error} className=\"pz:w-full\">\n <SelectValue placeholder={placeholder}>\n {selectedOption ? (\n <OptionContent label={selectedOption.label} widgets={selectedOption.widgets} />\n ) : undefined}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n {field.options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n <OptionContent label={opt.label} widgets={opt.widgets} />\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n {!hasOptions && (\n <span className=\"pz:text-xs pz:text-muted-foreground\">No options available</span>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAS,cAAc,EAAE,OAAO,WAAuD;AACrF,QACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,aAAD,EAAsB,SAAW,GACjC,oBAAC,QAAD,YAAO,OAAa,EACf;;;AAIX,SAAgB,mBAAmB,OAAoC;CACrE,MAAM,cAAc,MAAM,KAAK,eAAe;CAC9C,MAAM,iBAAiB,MAAM,QAAQ,MAAM,MAAM,EAAE,UAAU,MAAM,cAAc;CACjF,MAAM,aAAa,MAAM,QAAQ,SAAS;AAE1C,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B,CACE,qBAAC,QAAD;GACE,OAAO,MAAM,iBAAiB;GAC9B,gBAAgB,MAAM;AACpB,QAAI,MAAM,KAAM;AAChB,UAAM,SAAS,EAAE;;GAEnB,MAAM,MAAM;GACZ,UAAU,CAAC;aAPb,CASE,oBAAC,eAAD;IAAe,IAAI,MAAM;IAAI,gBAAc,CAAC,CAAC,MAAM;IAAO,WAAU;cAClE,oBAAC,aAAD;KAA0B;eACvB,iBACC,oBAAC,eAAD;MAAe,OAAO,eAAe;MAAO,SAAS,eAAe;MAAW,IAC7E;KACQ;IACA,GAChB,oBAAC,eAAD,YACE,oBAAC,aAAD,YACG,MAAM,QAAQ,KAAK,QAClB,oBAAC,YAAD;IAA4B,OAAO,IAAI;cACrC,oBAAC,eAAD;KAAe,OAAO,IAAI;KAAO,SAAS,IAAI;KAAW;IAC9C,EAFI,IAAI,MAER,CACb,EACU,GACA,EACT;MACR,CAAC,cACA,oBAAC,QAAD;GAAM,WAAU;aAAsC;GAA2B,EAE/E"}
@@ -0,0 +1,154 @@
1
+ import { cn } from "../../../lib/utils.mjs";
2
+ import { WidgetStrip } from "../../../widgets/widget-strip.mjs";
3
+ import { LiquidEditor } from "../../internal/LiquidEditor/LiquidEditor.mjs";
4
+ import { useMemo, useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { ChevronDown } from "lucide-react";
7
+ import { autoUpdate, flip, offset, shift, size, useDismiss, useFloating, useInteractions, useTransitionStyles } from "@floating-ui/react";
8
+
9
+ //#region src/components/defaults/adapters/tagged-text-input.tsx
10
+ /**
11
+ * Adapter for `pipesTaggedTextInput`. Renders a tiptap-backed editor that
12
+ * supports `/` to open a unified reference picker (input fields filtered
13
+ * by `expectedTagType`, secrets, constants).
14
+ *
15
+ * When `meta.optionsDef` is present, the input also gains a value-suggestions
16
+ * popover (e.g. listing the user's existing pipe0 sheets). The popover opens
17
+ * on focus, hides automatically when the user is composing a `{{ tag }}`,
18
+ * and is gated by `meta.optionsDef.enabledIf` (sub-feature gate — the input
19
+ * itself stays editable in every state). Picking an option REPLACES the
20
+ * input value with the option's value.
21
+ */
22
+ function TaggedTextInputAdapter(field) {
23
+ const meta = field.meta;
24
+ const hasError = !!field.error;
25
+ const hasSuggestions = !!meta.optionsDef;
26
+ const [open, setOpen] = useState(false);
27
+ const valueIsTag = useMemo(() => /\{\{[^}]*\}?\}?/.test(field.value ?? ""), [field.value]);
28
+ const hasQuery = (field.value ?? "").trim().length > 0;
29
+ const { refs, floatingStyles, context } = useFloating({
30
+ open: hasSuggestions && open && !valueIsTag,
31
+ onOpenChange: (next) => {
32
+ if (!next) setOpen(false);
33
+ },
34
+ placement: "bottom-start",
35
+ whileElementsMounted: autoUpdate,
36
+ middleware: [
37
+ offset(4),
38
+ flip({
39
+ mainAxis: true,
40
+ crossAxis: false
41
+ }),
42
+ shift(),
43
+ size({ apply({ elements, rects }) {
44
+ elements.floating.style.minWidth = `${rects.reference.width}px`;
45
+ elements.floating.style.maxWidth = "32rem";
46
+ } })
47
+ ]
48
+ });
49
+ const { isMounted, styles: transitionStyles } = useTransitionStyles(context);
50
+ const { getFloatingProps } = useInteractions([useDismiss(context, {
51
+ outsidePress: true,
52
+ outsidePressEvent: "mousedown"
53
+ })]);
54
+ const visibleOptions = useMemo(() => {
55
+ const q = (field.value ?? "").trim().toLowerCase();
56
+ if (!q) return field.options;
57
+ return field.options.filter((o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q));
58
+ }, [field.options, field.value]);
59
+ return /* @__PURE__ */ jsxs("div", {
60
+ "data-p0": "input",
61
+ className: "pz:flex pz:flex-col pz:gap-1",
62
+ children: [/* @__PURE__ */ jsxs("div", {
63
+ ref: refs.setReference,
64
+ className: cn("pz:flex pz:rounded-lg pz:border pz:border-input pz:bg-transparent", meta.multiline ? "pz:items-start" : "pz:items-center", hasError && "pz:border-destructive/60"),
65
+ "aria-invalid": hasError || void 0,
66
+ onFocusCapture: () => {
67
+ if (hasSuggestions) setOpen(true);
68
+ },
69
+ onBlurCapture: (e) => {
70
+ const next = e.relatedTarget;
71
+ if (next && e.currentTarget.contains(next)) return;
72
+ if (next && document.querySelector("[data-p0='tagged-suggestions']")?.contains(next)) return;
73
+ setOpen(false);
74
+ },
75
+ children: [/* @__PURE__ */ jsx("div", {
76
+ className: "pz:flex-1 pz:min-w-0",
77
+ children: /* @__PURE__ */ jsx(LiquidEditor, {
78
+ value: field.value ?? "",
79
+ onChange: (v) => field.setValue(v),
80
+ inputFields: meta.inputFields ?? [],
81
+ searchSecrets: field.searchSecrets,
82
+ placeholder: meta.placeholder,
83
+ multiline: meta.multiline,
84
+ expectedFieldType: meta.expectedTagType,
85
+ directives: []
86
+ })
87
+ }), hasSuggestions && /* @__PURE__ */ jsx("div", {
88
+ className: cn("pz:flex pz:items-center pz:gap-1 pz:pr-2 pz:text-muted-foreground", meta.multiline && "pz:pt-1"),
89
+ children: /* @__PURE__ */ jsx(ChevronDown, {
90
+ className: "pz:size-4 pz:pointer-events-none",
91
+ "aria-hidden": "true"
92
+ })
93
+ })]
94
+ }), hasSuggestions && isMounted && /* @__PURE__ */ jsxs("div", {
95
+ ref: refs.setFloating,
96
+ "data-p0": "tagged-suggestions",
97
+ style: {
98
+ ...floatingStyles,
99
+ ...transitionStyles,
100
+ zIndex: 50
101
+ },
102
+ ...getFloatingProps({ onMouseDown: (e) => e.preventDefault() }),
103
+ className: "pz:relative pz:rounded-lg pz:border pz:border-input pz:bg-popover pz:text-popover-foreground pz:shadow-md pz:overflow-hidden",
104
+ children: [field.pending && visibleOptions.length > 0 && /* @__PURE__ */ jsx("span", {
105
+ "aria-label": "Loading",
106
+ className: "pz:absolute pz:right-2 pz:top-2 pz:z-10 pz:inline-block pz:h-3 pz:w-3 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground"
107
+ }), /* @__PURE__ */ jsx(SuggestionsBody, {
108
+ suggestionsDisabled: field.suggestionsDisabled,
109
+ reason: field.suggestionsDisabledReason,
110
+ pending: field.pending,
111
+ options: visibleOptions,
112
+ hasQuery,
113
+ onPick: (value) => {
114
+ field.setValue(value);
115
+ setOpen(false);
116
+ }
117
+ })]
118
+ })]
119
+ });
120
+ }
121
+ function SuggestionsBody({ suggestionsDisabled, reason, pending, options, hasQuery, onPick }) {
122
+ if (suggestionsDisabled) return /* @__PURE__ */ jsx("div", {
123
+ className: "pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground",
124
+ children: reason ?? "Suggestions unavailable."
125
+ });
126
+ if (pending && options.length === 0) return /* @__PURE__ */ jsx("div", {
127
+ role: "status",
128
+ "aria-label": "Loading",
129
+ className: "pz:flex pz:items-center pz:justify-center pz:py-6",
130
+ children: /* @__PURE__ */ jsx("span", { className: "pz:inline-block pz:h-5 pz:w-5 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground" })
131
+ });
132
+ if (options.length === 0) return /* @__PURE__ */ jsx("div", {
133
+ className: "pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground",
134
+ children: hasQuery ? "No matches" : "No options available"
135
+ });
136
+ return /* @__PURE__ */ jsx("ul", {
137
+ className: "pz:flex pz:flex-col pz:gap-0.5 pz:p-1 pz:transition-opacity",
138
+ style: pending ? {
139
+ opacity: .5,
140
+ pointerEvents: "none"
141
+ } : void 0,
142
+ children: options.map((opt) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
143
+ type: "button",
144
+ role: "option",
145
+ className: "pz:flex pz:w-full pz:items-center pz:gap-2 pz:rounded-sm pz:px-2 pz:py-1.5 pz:text-sm pz:text-left pz:cursor-pointer pz:hover:bg-accent pz:hover:text-accent-foreground",
146
+ onClick: () => onPick(opt.value),
147
+ children: [/* @__PURE__ */ jsx(WidgetStrip, { widgets: opt.widgets }), /* @__PURE__ */ jsx("span", { children: opt.label })]
148
+ }) }, opt.value))
149
+ });
150
+ }
151
+
152
+ //#endregion
153
+ export { TaggedTextInputAdapter };
154
+ //# sourceMappingURL=tagged-text-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagged-text-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/tagged-text-input.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n offset,\n shift,\n size,\n useDismiss,\n useFloating,\n useInteractions,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport type { StoreOption, TaggedTextMeta } from \"@pipe0/base\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useMemo, useState } from \"react\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { WidgetStrip } from \"../../../widgets/widget-strip.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\n\n/**\n * Adapter for `pipesTaggedTextInput`. Renders a tiptap-backed editor that\n * supports `/` to open a unified reference picker (input fields filtered\n * by `expectedTagType`, secrets, constants).\n *\n * When `meta.optionsDef` is present, the input also gains a value-suggestions\n * popover (e.g. listing the user's existing pipe0 sheets). The popover opens\n * on focus, hides automatically when the user is composing a `{{ tag }}`,\n * and is gated by `meta.optionsDef.enabledIf` (sub-feature gate — the input\n * itself stays editable in every state). Picking an option REPLACES the\n * input value with the option's value.\n */\nexport function TaggedTextInputAdapter(field: FieldHandle<\"tagged_text_input\">) {\n const meta = field.meta as TaggedTextMeta;\n const hasError = !!field.error;\n const hasSuggestions = !!meta.optionsDef;\n\n const [open, setOpen] = useState(false);\n\n // Hide the popover whenever the user is composing a `{{ tag }}` — the\n // LiquidEditor SuggestionMenu owns that interaction.\n const valueIsTag = useMemo(() => /\\{\\{[^}]*\\}?\\}?/.test(field.value ?? \"\"), [field.value]);\n\n const hasQuery = (field.value ?? \"\").trim().length > 0;\n\n const popoverShow = hasSuggestions && open && !valueIsTag;\n\n // Floating UI reads positioning straight from the wrapper element via\n // `refs.setReference`; `whileElementsMounted: autoUpdate` subscribes to the\n // ancestor scroll/resize that actually matters (no global window listener,\n // no React state for the rect).\n const { refs, floatingStyles, context } = useFloating({\n open: popoverShow,\n onOpenChange: (next) => {\n if (!next) setOpen(false);\n },\n placement: \"bottom-start\",\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(4),\n flip({ mainAxis: true, crossAxis: false }),\n shift(),\n size({\n apply({ elements, rects }) {\n elements.floating.style.minWidth = `${rects.reference.width}px`;\n elements.floating.style.maxWidth = \"32rem\";\n },\n }),\n ],\n });\n\n const { isMounted, styles: transitionStyles } = useTransitionStyles(context);\n const dismiss = useDismiss(context, {\n outsidePress: true,\n outsidePressEvent: \"mousedown\",\n });\n const { getFloatingProps } = useInteractions([dismiss]);\n\n // Filter options client-side by current input text. Empty input → all options.\n const visibleOptions = useMemo(() => {\n const q = (field.value ?? \"\").trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(\n (o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q),\n );\n }, [field.options, field.value]);\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div\n ref={refs.setReference}\n className={cn(\n \"pz:flex pz:rounded-lg pz:border pz:border-input pz:bg-transparent\",\n meta.multiline ? \"pz:items-start\" : \"pz:items-center\",\n hasError && \"pz:border-destructive/60\",\n )}\n aria-invalid={hasError || undefined}\n onFocusCapture={() => {\n if (hasSuggestions) setOpen(true);\n }}\n onBlurCapture={(e) => {\n // Only close when focus leaves both the wrapper AND the popover.\n const next = e.relatedTarget as Node | null;\n if (next && e.currentTarget.contains(next)) return;\n if (next && document.querySelector(\"[data-p0='tagged-suggestions']\")?.contains(next)) {\n return;\n }\n setOpen(false);\n }}\n >\n <div className=\"pz:flex-1 pz:min-w-0\">\n <LiquidEditor\n value={field.value ?? \"\"}\n onChange={(v) => field.setValue(v)}\n inputFields={meta.inputFields ?? []}\n searchSecrets={field.searchSecrets}\n placeholder={meta.placeholder}\n multiline={meta.multiline}\n expectedFieldType={meta.expectedTagType}\n directives={[]}\n />\n </div>\n {hasSuggestions && (\n <div\n className={cn(\n \"pz:flex pz:items-center pz:gap-1 pz:pr-2 pz:text-muted-foreground\",\n meta.multiline && \"pz:pt-1\",\n )}\n >\n <ChevronDown className=\"pz:size-4 pz:pointer-events-none\" aria-hidden=\"true\" />\n </div>\n )}\n </div>\n\n {hasSuggestions && isMounted && (\n <div\n ref={refs.setFloating}\n data-p0=\"tagged-suggestions\"\n style={{ ...floatingStyles, ...transitionStyles, zIndex: 50 }}\n {...getFloatingProps({\n // Prevent stealing focus from the editor when the user clicks an option.\n onMouseDown: (e) => e.preventDefault(),\n })}\n className=\"pz:relative pz:rounded-lg pz:border pz:border-input pz:bg-popover pz:text-popover-foreground pz:shadow-md pz:overflow-hidden\"\n >\n {field.pending && visibleOptions.length > 0 && (\n // biome-ignore lint/a11y/useAriaPropsSupportedByRole: not relevant\n <span\n aria-label=\"Loading\"\n className=\"pz:absolute pz:right-2 pz:top-2 pz:z-10 pz:inline-block pz:h-3 pz:w-3 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\"\n />\n )}\n <SuggestionsBody\n suggestionsDisabled={field.suggestionsDisabled}\n reason={field.suggestionsDisabledReason}\n pending={field.pending}\n options={visibleOptions}\n hasQuery={hasQuery}\n onPick={(value) => {\n field.setValue(value);\n setOpen(false);\n }}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction SuggestionsBody({\n suggestionsDisabled,\n reason,\n pending,\n options,\n hasQuery,\n onPick,\n}: {\n suggestionsDisabled: boolean;\n reason?: string;\n pending: boolean;\n options: StoreOption[];\n hasQuery: boolean;\n onPick: (value: string) => void;\n}) {\n if (suggestionsDisabled) {\n return (\n <div className=\"pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground\">\n {reason ?? \"Suggestions unavailable.\"}\n </div>\n );\n }\n if (pending && options.length === 0) {\n // Initial load — render a visible spinner so the popover has feedback.\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className=\"pz:flex pz:items-center pz:justify-center pz:py-6\"\n >\n <span className=\"pz:inline-block pz:h-5 pz:w-5 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\" />\n </div>\n );\n }\n if (options.length === 0) {\n return (\n <div className=\"pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground\">\n {hasQuery ? \"No matches\" : \"No options available\"}\n </div>\n );\n }\n return (\n <ul\n className=\"pz:flex pz:flex-col pz:gap-0.5 pz:p-1 pz:transition-opacity\"\n style={pending ? { opacity: 0.5, pointerEvents: \"none\" } : undefined}\n >\n {options.map((opt) => (\n <li key={opt.value}>\n <button\n type=\"button\"\n role=\"option\"\n className=\"pz:flex pz:w-full pz:items-center pz:gap-2 pz:rounded-sm pz:px-2 pz:py-1.5 pz:text-sm pz:text-left pz:cursor-pointer pz:hover:bg-accent pz:hover:text-accent-foreground\"\n onClick={() => onPick(opt.value)}\n >\n <WidgetStrip widgets={opt.widgets} />\n <span>{opt.label}</span>\n </button>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { cn } from "../../../lib/utils.mjs";
2
+ import { LiquidEditor } from "../../internal/LiquidEditor/LiquidEditor.mjs";
3
+ import { jsx } from "react/jsx-runtime";
4
+
5
+ //#region src/components/defaults/adapters/template-input.tsx
6
+ /**
7
+ * Template editor with Liquid syntax support — `/` opens a unified
8
+ * reference picker (input fields, secrets, constants). Templates cannot
9
+ * declare outputs, so the directive picker is disabled.
10
+ */
11
+ function TemplateInputAdapter(field) {
12
+ const meta = field.meta;
13
+ const hasError = !!field.error;
14
+ return /* @__PURE__ */ jsx("div", {
15
+ "data-p0": "input",
16
+ className: "pz:flex pz:flex-col pz:gap-1",
17
+ children: /* @__PURE__ */ jsx("div", {
18
+ className: cn("pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs", hasError && "pz:border-destructive/60"),
19
+ "aria-invalid": hasError || void 0,
20
+ children: /* @__PURE__ */ jsx(LiquidEditor, {
21
+ value: field.value ?? "",
22
+ onChange: (v) => field.setValue(v),
23
+ inputFields: meta.inputFields ?? [],
24
+ searchSecrets: field.searchSecrets,
25
+ multiline: true,
26
+ directives: []
27
+ })
28
+ })
29
+ });
30
+ }
31
+
32
+ //#endregion
33
+ export { TemplateInputAdapter };
34
+ //# sourceMappingURL=template-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/template-input.tsx"],"sourcesContent":["import type { TemplateInputMeta } from \"@pipe0/base\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\n\n/**\n * Template editor with Liquid syntax support — `/` opens a unified\n * reference picker (input fields, secrets, constants). Templates cannot\n * declare outputs, so the directive picker is disabled.\n */\nexport function TemplateInputAdapter(field: FieldHandle<\"template_input\">) {\n const meta = field.meta as TemplateInputMeta;\n const hasError = !!field.error;\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div\n className={cn(\n \"pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs\",\n hasError && \"pz:border-destructive/60\",\n )}\n aria-invalid={hasError || undefined}\n >\n <LiquidEditor\n value={field.value ?? \"\"}\n onChange={(v) => field.setValue(v)}\n inputFields={meta.inputFields ?? []}\n searchSecrets={field.searchSecrets}\n multiline\n directives={[]}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,qBAAqB,OAAsC;CACzE,MAAM,OAAO,MAAM;CACnB,MAAM,WAAW,CAAC,CAAC,MAAM;AAEzB,QACE,oBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAC7B,oBAAC,OAAD;GACE,WAAW,GACT,0EACA,YAAY,2BACb;GACD,gBAAc,YAAY;aAE1B,oBAAC,cAAD;IACE,OAAO,MAAM,SAAS;IACtB,WAAW,MAAM,MAAM,SAAS,EAAE;IAClC,aAAa,KAAK,eAAe,EAAE;IACnC,eAAe,MAAM;IACrB;IACA,YAAY,EAAE;IACd;GACE;EACF"}
@@ -0,0 +1,18 @@
1
+ import { Input } from "../../ui/input.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+
4
+ //#region src/components/defaults/adapters/text-input.tsx
5
+ function TextInputAdapter(field) {
6
+ return /* @__PURE__ */ jsx(Input, {
7
+ ...field.inputProps,
8
+ "data-p0": "input",
9
+ "aria-invalid": !!field.error,
10
+ maxLength: field.meta.maxLength,
11
+ minLength: field.meta.minLength,
12
+ pattern: field.meta.pattern
13
+ });
14
+ }
15
+
16
+ //#endregion
17
+ export { TextInputAdapter };
18
+ //# sourceMappingURL=text-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/text-input.tsx"],"sourcesContent":["import type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport function TextInputAdapter(field: FieldHandle<\"text_input\">) {\n return (\n <Input\n {...field.inputProps}\n data-p0=\"input\"\n aria-invalid={!!field.error}\n maxLength={field.meta.maxLength}\n minLength={field.meta.minLength}\n pattern={field.meta.pattern}\n />\n );\n}\n"],"mappings":";;;;AAGA,SAAgB,iBAAiB,OAAkC;AACjE,QACE,oBAAC,OAAD;EACE,GAAI,MAAM;EACV,WAAQ;EACR,gBAAc,CAAC,CAAC,MAAM;EACtB,WAAW,MAAM,KAAK;EACtB,WAAW,MAAM,KAAK;EACtB,SAAS,MAAM,KAAK;EACpB"}