@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,368 @@
1
+ import { cn } from "../../../lib/utils.mjs";
2
+ import { Button } from "../../ui/button.mjs";
3
+ import { IconMinus, IconPlus } from "../icons.mjs";
4
+ import { useDebouncedFn } from "../../../hooks/use-debounced-fn.mjs";
5
+ import { FieldTypeBadge } from "../../../widgets/field-type-badge.mjs";
6
+ import { WidgetStrip } from "../../../widgets/widget-strip.mjs";
7
+ import { Combobox, ComboboxChips, ComboboxChipsInput, ComboboxContent, ComboboxEmpty, ComboboxItem, ComboboxList, ComboboxTrigger, useComboboxAnchor } from "../../ui/combobox.mjs";
8
+ import { filterOptions } from "../multi-select-popover-trigger.mjs";
9
+ import { useEffect, useMemo, useRef, useState } from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { XIcon } from "lucide-react";
12
+
13
+ //#region src/components/internal/combobox/include-exclude-combobox.tsx
14
+ const includeChipClass = "pz:flex pz:h-[calc(--spacing(5.25))] pz:w-fit pz:items-center pz:gap-0 pz:rounded-sm pz:border pz:border-border pz:bg-muted pz:pl-0 pz:pr-0 pz:text-xs pz:font-medium pz:whitespace-nowrap pz:text-foreground pz:overflow-hidden";
15
+ const excludeChipClass = "pz:flex pz:h-[calc(--spacing(5.25))] pz:w-fit pz:items-center pz:gap-0 pz:rounded-sm pz:border pz:border-destructive/30 pz:bg-destructive/10 pz:pl-0 pz:pr-0 pz:text-xs pz:font-medium pz:whitespace-nowrap pz:text-destructive pz:overflow-hidden";
16
+ const includeSignClass = "pz:flex pz:h-full pz:w-5 pz:cursor-pointer pz:items-center pz:justify-center pz:border-r pz:border-border pz:bg-foreground/[0.04] pz:text-muted-foreground pz:hover:bg-foreground/[0.08] pz:hover:text-foreground";
17
+ const excludeSignClass = "pz:flex pz:h-full pz:w-5 pz:cursor-pointer pz:items-center pz:justify-center pz:border-r pz:border-destructive/30 pz:bg-destructive/[0.06] pz:text-destructive/80 pz:hover:bg-destructive/15 pz:hover:text-destructive";
18
+ /**
19
+ * Unified include/exclude combobox.
20
+ *
21
+ * Renders a single chip input where each chip carries an inline `+` / `−`
22
+ * sign toggle that flips include ↔ exclude in place. Free-text-create inputs
23
+ * (`allowCreate=true`) show a "Type to see suggestions" hint until the user
24
+ * types; select-style inputs show their options on focus. Pure-select mode
25
+ * (`disableSearch=true`) shows the chevron trigger and renders the input
26
+ * read-only.
27
+ */
28
+ function IncludeExcludeCombobox({ include, exclude, onChange, options, loadOptions, allowCreate = false, disableSearch = false, maxItems, ariaInvalid, disabled, debounceMs = 300, emptyLabel, placeholder }) {
29
+ const [input, setInput] = useState("");
30
+ const [debouncedQuery, setDebouncedQuery] = useState("");
31
+ const [asyncResults, setAsyncResults] = useState(null);
32
+ const [loading, setLoading] = useState(false);
33
+ const [open, setOpen] = useState(false);
34
+ const cacheRef = useRef(/* @__PURE__ */ new Map());
35
+ const reqIdRef = useRef(0);
36
+ const isAsync = typeof loadOptions === "function";
37
+ const debouncedSetQuery = useDebouncedFn((q) => setDebouncedQuery(q), debounceMs);
38
+ const effectiveQuery = input.trim();
39
+ useEffect(() => {
40
+ if (!isAsync || !loadOptions) return;
41
+ if (!open && debouncedQuery === "") return;
42
+ const q = debouncedQuery.trim();
43
+ const cached = cacheRef.current.get(q);
44
+ if (cached) {
45
+ setAsyncResults(cached);
46
+ setLoading(false);
47
+ return;
48
+ }
49
+ const reqId = ++reqIdRef.current;
50
+ setLoading(true);
51
+ loadOptions(q).then((opts) => {
52
+ if (reqId !== reqIdRef.current) return;
53
+ const kept = opts.filter((o) => !!o.value);
54
+ cacheRef.current.set(q, kept);
55
+ setAsyncResults(kept);
56
+ setLoading(false);
57
+ }).catch(() => {
58
+ if (reqId !== reqIdRef.current) return;
59
+ setAsyncResults([]);
60
+ setLoading(false);
61
+ });
62
+ }, [
63
+ debouncedQuery,
64
+ isAsync,
65
+ loadOptions,
66
+ open
67
+ ]);
68
+ const includeSet = useMemo(() => new Set(include), [include]);
69
+ const excludeSet = useMemo(() => new Set(exclude), [exclude]);
70
+ const totalSelected = include.length + exclude.length;
71
+ const atMax = maxItems !== void 0 && totalSelected >= maxItems;
72
+ const widgetCacheRef = useRef(/* @__PURE__ */ new Map());
73
+ for (const opt of options ?? []) if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);
74
+ for (const opt of asyncResults ?? []) if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);
75
+ const [chipOrder, setChipOrder] = useState(() => [...include, ...exclude]);
76
+ const anchor = useComboboxAnchor();
77
+ const filteredSuggestions = useMemo(() => {
78
+ const source = isAsync ? asyncResults ?? [] : options ?? [];
79
+ return isAsync ? source : filterOptions(source, effectiveQuery);
80
+ }, [
81
+ isAsync,
82
+ asyncResults,
83
+ options,
84
+ effectiveQuery
85
+ ]);
86
+ const showCreateRow = allowCreate && effectiveQuery.length > 0 && !includeSet.has(effectiveQuery) && !excludeSet.has(effectiveQuery) && !filteredSuggestions.some((o) => o.value.toLowerCase() === effectiveQuery.toLowerCase());
87
+ const resolveLabel = (v) => {
88
+ const fromStatic = options?.find((o) => o.value === v)?.label;
89
+ if (fromStatic) return fromStatic;
90
+ return asyncResults?.find((o) => o.value === v)?.label ?? v;
91
+ };
92
+ const resolveWidgets = (v) => widgetCacheRef.current.get(v) ?? options?.find((o) => o.value === v)?.widgets ?? asyncResults?.find((o) => o.value === v)?.widgets;
93
+ const chips = useMemo(() => {
94
+ const known = new Set(chipOrder);
95
+ const orderedValues = chipOrder.filter((v) => includeSet.has(v) || excludeSet.has(v));
96
+ for (const v of include) if (!known.has(v)) {
97
+ orderedValues.push(v);
98
+ known.add(v);
99
+ }
100
+ for (const v of exclude) if (!known.has(v)) {
101
+ orderedValues.push(v);
102
+ known.add(v);
103
+ }
104
+ return orderedValues.map((v) => ({
105
+ value: v,
106
+ label: resolveLabel(v),
107
+ mode: includeSet.has(v) ? "include" : "exclude",
108
+ widgets: resolveWidgets(v)
109
+ }));
110
+ }, [
111
+ chipOrder,
112
+ includeSet,
113
+ excludeSet,
114
+ options,
115
+ asyncResults
116
+ ]);
117
+ const items = useMemo(() => {
118
+ const list = [];
119
+ if (showCreateRow) list.push({
120
+ value: effectiveQuery,
121
+ label: `Add "${effectiveQuery}"`,
122
+ __create: true
123
+ });
124
+ for (const o of filteredSuggestions) list.push(o);
125
+ return list;
126
+ }, [
127
+ showCreateRow,
128
+ effectiveQuery,
129
+ filteredSuggestions
130
+ ]);
131
+ const trackInsertion = (value) => {
132
+ setChipOrder((prev) => prev.includes(value) ? prev : [...prev, value]);
133
+ };
134
+ const trackRemoval = (value) => {
135
+ setChipOrder((prev) => prev.filter((v) => v !== value));
136
+ };
137
+ const addAs = (value, mode) => {
138
+ if (!value) return;
139
+ if (atMax && !includeSet.has(value) && !excludeSet.has(value)) return;
140
+ if (mode === "include") {
141
+ if (includeSet.has(value)) return;
142
+ onChange({
143
+ include: [...include, value],
144
+ exclude: exclude.filter((v) => v !== value)
145
+ });
146
+ } else {
147
+ if (excludeSet.has(value)) return;
148
+ onChange({
149
+ include: include.filter((v) => v !== value),
150
+ exclude: [...exclude, value]
151
+ });
152
+ }
153
+ trackInsertion(value);
154
+ };
155
+ const flip = (value, currentMode) => {
156
+ if (currentMode === "include") onChange({
157
+ include: include.filter((v) => v !== value),
158
+ exclude: [...exclude, value]
159
+ });
160
+ else onChange({
161
+ include: [...include, value],
162
+ exclude: exclude.filter((v) => v !== value)
163
+ });
164
+ };
165
+ const removeChip = (value, mode) => {
166
+ if (mode === "include") onChange({
167
+ include: include.filter((v) => v !== value),
168
+ exclude
169
+ });
170
+ else onChange({
171
+ include,
172
+ exclude: exclude.filter((v) => v !== value)
173
+ });
174
+ trackRemoval(value);
175
+ };
176
+ const clearInput = () => {
177
+ setInput("");
178
+ if (isAsync) debouncedSetQuery("");
179
+ };
180
+ return /* @__PURE__ */ jsxs(Combobox, {
181
+ multiple: true,
182
+ items,
183
+ filter: null,
184
+ open,
185
+ onOpenChange: setOpen,
186
+ value: [],
187
+ onValueChange: (next) => {
188
+ if (!Array.isArray(next) || next.length === 0) return;
189
+ const last = next[next.length - 1];
190
+ const mode = last.__mode ?? "include";
191
+ addAs(last.value, mode);
192
+ clearInput();
193
+ },
194
+ isItemEqualToValue: (a, b) => a.value === b.value,
195
+ itemToStringLabel: (item) => item.label,
196
+ itemToStringValue: (item) => item.value,
197
+ inputValue: input,
198
+ onInputValueChange: (v) => {
199
+ setInput(v);
200
+ if (isAsync) debouncedSetQuery(v);
201
+ },
202
+ disabled,
203
+ children: [/* @__PURE__ */ jsxs(ComboboxChips, {
204
+ "aria-invalid": ariaInvalid || void 0,
205
+ ref: anchor,
206
+ children: [
207
+ chips.map((chip) => {
208
+ const isInc = chip.mode === "include";
209
+ return /* @__PURE__ */ jsxs("span", {
210
+ className: cn(isInc ? includeChipClass : excludeChipClass),
211
+ "data-mode": chip.mode,
212
+ children: [
213
+ /* @__PURE__ */ jsx("button", {
214
+ type: "button",
215
+ tabIndex: -1,
216
+ onClick: (e) => {
217
+ e.stopPropagation();
218
+ flip(chip.value, chip.mode);
219
+ },
220
+ "aria-label": isInc ? "Switch to exclude" : "Switch to include",
221
+ title: isInc ? "Switch to exclude" : "Switch to include",
222
+ className: cn(isInc ? includeSignClass : excludeSignClass),
223
+ children: isInc ? /* @__PURE__ */ jsx(IconPlus, {
224
+ width: 10,
225
+ height: 10
226
+ }) : /* @__PURE__ */ jsx(IconMinus, {
227
+ width: 10,
228
+ height: 10
229
+ })
230
+ }),
231
+ /* @__PURE__ */ jsxs("span", {
232
+ className: "pz:flex pz:items-center pz:gap-1 pz:px-1.5",
233
+ children: [chip.widgets && /* @__PURE__ */ jsx(WidgetStrip, {
234
+ widgets: chip.widgets,
235
+ size: 14
236
+ }), chip.label]
237
+ }),
238
+ /* @__PURE__ */ jsx(Button, {
239
+ type: "button",
240
+ variant: "ghost",
241
+ size: "icon-xs",
242
+ tabIndex: -1,
243
+ onClick: (e) => {
244
+ e.stopPropagation();
245
+ removeChip(chip.value, chip.mode);
246
+ },
247
+ "aria-label": `Remove ${chip.label}`,
248
+ className: cn("pz:opacity-50 pz:hover:opacity-100", isInc ? void 0 : "pz:text-destructive pz:hover:bg-destructive/15"),
249
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pz:pointer-events-none" })
250
+ })
251
+ ]
252
+ }, chip.value);
253
+ }),
254
+ /* @__PURE__ */ jsx(ComboboxChipsInput, {
255
+ placeholder: chips.length === 0 ? placeholder : void 0,
256
+ readOnly: disableSearch,
257
+ "aria-invalid": ariaInvalid || void 0,
258
+ onKeyDown: (e) => {
259
+ if (e.key === "Backspace" && input.length === 0) {
260
+ if (chips.length === 0) return;
261
+ e.preventDefault();
262
+ const last = chips[chips.length - 1];
263
+ removeChip(last.value, last.mode);
264
+ return;
265
+ }
266
+ if (e.key !== "Enter" || e.nativeEvent.isComposing) return;
267
+ if (effectiveQuery.length === 0) return;
268
+ e.preventDefault();
269
+ e.stopPropagation();
270
+ if (atMax) return;
271
+ const toAdd = filteredSuggestions.find((o) => o.value.toLowerCase() === effectiveQuery.toLowerCase())?.value ?? (allowCreate ? effectiveQuery : null);
272
+ if (!toAdd) return;
273
+ addAs(toAdd, "include");
274
+ clearInput();
275
+ }
276
+ }),
277
+ /* @__PURE__ */ jsx(ComboboxTrigger, { className: "pz:ml-auto pz:bg-transparent pz:hover:bg-transparent" })
278
+ ]
279
+ }), /* @__PURE__ */ jsxs(ComboboxContent, {
280
+ anchor,
281
+ children: [
282
+ loading && items.length > 0 && /* @__PURE__ */ jsx("span", {
283
+ "aria-label": "Loading",
284
+ 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"
285
+ }),
286
+ loading && items.length === 0 && /* @__PURE__ */ jsx("div", {
287
+ role: "status",
288
+ "aria-label": "Loading",
289
+ className: "pz:flex pz:items-center pz:justify-center pz:py-6",
290
+ 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" })
291
+ }),
292
+ /* @__PURE__ */ jsxs(ComboboxList, {
293
+ className: cn(loading && items.length > 0 && "pz:opacity-50 pz:transition-opacity pz:pointer-events-none"),
294
+ children: [
295
+ atMax && /* @__PURE__ */ jsxs("div", {
296
+ className: "pz:px-2 pz:py-1.5 pz:text-xs pz:text-muted-foreground",
297
+ children: [
298
+ "Maximum ",
299
+ maxItems,
300
+ " item",
301
+ maxItems === 1 ? "" : "s",
302
+ " reached."
303
+ ]
304
+ }),
305
+ items.map((item) => {
306
+ const fieldType = !item.__create ? item.widgets?.field_type : void 0;
307
+ const inIncluded = includeSet.has(item.value);
308
+ const inExcluded = excludeSet.has(item.value);
309
+ const includeDisabled = inIncluded || atMax && !inExcluded;
310
+ const excludeDisabled = inExcluded || atMax && !inIncluded;
311
+ return /* @__PURE__ */ jsxs(ComboboxItem, {
312
+ value: {
313
+ ...item,
314
+ __mode: "include"
315
+ },
316
+ className: cn("pz:pr-1", item.__create ? "pz:italic" : void 0),
317
+ disabled: includeDisabled && excludeDisabled && !item.__create,
318
+ children: [
319
+ !item.__create && item.widgets && /* @__PURE__ */ jsx(WidgetStrip, {
320
+ widgets: Object.fromEntries(Object.entries(item.widgets).filter(([k]) => k !== "field_type")),
321
+ size: 14
322
+ }),
323
+ /* @__PURE__ */ jsx("span", {
324
+ className: "pz:flex-1 pz:truncate",
325
+ children: item.label
326
+ }),
327
+ fieldType && /* @__PURE__ */ jsx(FieldTypeBadge, {
328
+ type: fieldType.type,
329
+ format: fieldType.format
330
+ }),
331
+ /* @__PURE__ */ jsx("span", {
332
+ className: "pz:flex pz:items-center pz:pl-2",
333
+ children: /* @__PURE__ */ jsx(Button, {
334
+ type: "button",
335
+ variant: "ghost",
336
+ size: "icon-xs",
337
+ tabIndex: -1,
338
+ disabled: excludeDisabled,
339
+ onClick: (e) => {
340
+ e.stopPropagation();
341
+ e.preventDefault();
342
+ if (excludeDisabled) return;
343
+ addAs(item.value, "exclude");
344
+ clearInput();
345
+ },
346
+ "aria-label": `Exclude ${item.label}`,
347
+ title: "Exclude",
348
+ className: "pz:text-muted-foreground",
349
+ children: /* @__PURE__ */ jsx(IconMinus, {
350
+ width: 10,
351
+ height: 10
352
+ })
353
+ })
354
+ })
355
+ ]
356
+ }, `${item.__create ? "__create__:" : ""}${item.value}`);
357
+ }),
358
+ !loading && items.length === 0 && /* @__PURE__ */ jsx(ComboboxEmpty, { children: emptyLabel ?? (allowCreate ? options || loadOptions ? "No matches" : "Type to add" : "No options") })
359
+ ]
360
+ })
361
+ ]
362
+ })]
363
+ });
364
+ }
365
+
366
+ //#endregion
367
+ export { IncludeExcludeCombobox };
368
+ //# sourceMappingURL=include-exclude-combobox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"include-exclude-combobox.mjs","names":[],"sources":["../../../../src/components/internal/combobox/include-exclude-combobox.tsx"],"sourcesContent":["import type { WidgetsByKind } from \"@pipe0/base\";\nimport { XIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useDebouncedFn } from \"../../../hooks/use-debounced-fn.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { FieldTypeBadge } from \"../../../widgets/field-type-badge.js\";\nimport { WidgetStrip } from \"../../../widgets/widget-strip.js\";\nimport { Button } from \"../../ui/button.js\";\nimport {\n Combobox,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxList,\n ComboboxTrigger,\n useComboboxAnchor,\n} from \"../../ui/combobox.js\";\nimport { IconMinus, IconPlus } from \"../icons.js\";\nimport { filterOptions, type PayloadOption } from \"../multi-select-popover-trigger.js\";\n\nexport type IncludeExcludeMode = \"include\" | \"exclude\";\n\nexport interface IncludeExcludeValue {\n include: string[];\n exclude: string[];\n}\n\nexport interface IncludeExcludeComboboxProps {\n include: string[];\n exclude: string[];\n /**\n * Atomic update for the entire `{ include, exclude }` value. We avoid\n * splitting include/exclude into separate add/remove callbacks because\n * flipping a chip needs to mutate both sides in one shot — otherwise the\n * stale closure in the field-handle wiring drops one of the updates.\n */\n onChange: (next: IncludeExcludeValue) => void;\n options?: PayloadOption[];\n loadOptions?: (query: string) => Promise<PayloadOption[]>;\n allowCreate?: boolean;\n disableSearch?: boolean;\n maxItems?: number;\n ariaInvalid?: boolean;\n disabled?: boolean;\n debounceMs?: number;\n emptyLabel?: string;\n placeholder?: string;\n}\n\ntype SelectableItem = PayloadOption & {\n __mode?: IncludeExcludeMode;\n __create?: boolean;\n};\n\nconst includeChipClass =\n \"pz:flex pz:h-[calc(--spacing(5.25))] pz:w-fit pz:items-center pz:gap-0 pz:rounded-sm pz:border pz:border-border pz:bg-muted pz:pl-0 pz:pr-0 pz:text-xs pz:font-medium pz:whitespace-nowrap pz:text-foreground pz:overflow-hidden\";\n\nconst excludeChipClass =\n \"pz:flex pz:h-[calc(--spacing(5.25))] pz:w-fit pz:items-center pz:gap-0 pz:rounded-sm pz:border pz:border-destructive/30 pz:bg-destructive/10 pz:pl-0 pz:pr-0 pz:text-xs pz:font-medium pz:whitespace-nowrap pz:text-destructive pz:overflow-hidden\";\n\nconst includeSignClass =\n \"pz:flex pz:h-full pz:w-5 pz:cursor-pointer pz:items-center pz:justify-center pz:border-r pz:border-border pz:bg-foreground/[0.04] pz:text-muted-foreground pz:hover:bg-foreground/[0.08] pz:hover:text-foreground\";\n\nconst excludeSignClass =\n \"pz:flex pz:h-full pz:w-5 pz:cursor-pointer pz:items-center pz:justify-center pz:border-r pz:border-destructive/30 pz:bg-destructive/[0.06] pz:text-destructive/80 pz:hover:bg-destructive/15 pz:hover:text-destructive\";\n\n/**\n * Unified include/exclude combobox.\n *\n * Renders a single chip input where each chip carries an inline `+` / `−`\n * sign toggle that flips include ↔ exclude in place. Free-text-create inputs\n * (`allowCreate=true`) show a \"Type to see suggestions\" hint until the user\n * types; select-style inputs show their options on focus. Pure-select mode\n * (`disableSearch=true`) shows the chevron trigger and renders the input\n * read-only.\n */\nexport function IncludeExcludeCombobox({\n include,\n exclude,\n onChange,\n options,\n loadOptions,\n allowCreate = false,\n disableSearch = false,\n maxItems,\n ariaInvalid,\n disabled,\n debounceMs = 300,\n emptyLabel,\n placeholder,\n}: IncludeExcludeComboboxProps) {\n const [input, setInput] = useState(\"\");\n const [debouncedQuery, setDebouncedQuery] = useState(\"\");\n const [asyncResults, setAsyncResults] = useState<PayloadOption[] | null>(null);\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const cacheRef = useRef<Map<string, PayloadOption[]>>(new Map());\n const reqIdRef = useRef(0);\n\n const isAsync = typeof loadOptions === \"function\";\n\n const debouncedSetQuery = useDebouncedFn((q: string) => setDebouncedQuery(q), debounceMs);\n\n const effectiveQuery = input.trim();\n\n useEffect(() => {\n if (!isAsync || !loadOptions) return;\n if (!open && debouncedQuery === \"\") return;\n const q = debouncedQuery.trim();\n const cached = cacheRef.current.get(q);\n if (cached) {\n setAsyncResults(cached);\n setLoading(false);\n return;\n }\n const reqId = ++reqIdRef.current;\n setLoading(true);\n loadOptions(q)\n .then((opts) => {\n if (reqId !== reqIdRef.current) return;\n const kept = opts.filter((o) => !!o.value);\n cacheRef.current.set(q, kept);\n setAsyncResults(kept);\n setLoading(false);\n })\n .catch(() => {\n if (reqId !== reqIdRef.current) return;\n setAsyncResults([]);\n setLoading(false);\n });\n }, [debouncedQuery, isAsync, loadOptions, open]);\n\n const includeSet = useMemo(() => new Set(include), [include]);\n const excludeSet = useMemo(() => new Set(exclude), [exclude]);\n const totalSelected = include.length + exclude.length;\n const atMax = maxItems !== undefined && totalSelected >= maxItems;\n\n // Persist widgets seen for any value across loadOptions cycles. Async\n // results get replaced with each query, so without this cache an icon\n // shown when picking a value would disappear on the next refetch.\n const widgetCacheRef = useRef<Map<string, WidgetsByKind>>(new Map());\n for (const opt of options ?? []) {\n if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);\n }\n for (const opt of asyncResults ?? []) {\n if (opt.widgets) widgetCacheRef.current.set(opt.value, opt.widgets);\n }\n\n // Track chip ordering locally so flipping include ↔ exclude keeps the chip\n // in its original visual position even though the field-handle data model\n // is two separate arrays. Mutated only in the action handlers below;\n // anything that arrives via an external `onChange` (e.g. form reset) is\n // appended at the end by the render-time reconciliation in `chips`.\n const [chipOrder, setChipOrder] = useState<string[]>(() => [...include, ...exclude]);\n\n const anchor = useComboboxAnchor();\n\n const filteredSuggestions = useMemo<PayloadOption[]>(() => {\n const source = isAsync ? (asyncResults ?? []) : (options ?? []);\n return isAsync ? source : filterOptions(source, effectiveQuery);\n }, [isAsync, asyncResults, options, effectiveQuery]);\n\n const showCreateRow =\n allowCreate &&\n effectiveQuery.length > 0 &&\n !includeSet.has(effectiveQuery) &&\n !excludeSet.has(effectiveQuery) &&\n !filteredSuggestions.some((o) => o.value.toLowerCase() === effectiveQuery.toLowerCase());\n\n const resolveLabel = (v: string): string => {\n const fromStatic = options?.find((o) => o.value === v)?.label;\n if (fromStatic) return fromStatic;\n const fromAsync = asyncResults?.find((o) => o.value === v)?.label;\n return fromAsync ?? v;\n };\n\n const resolveWidgets = (v: string): WidgetsByKind | undefined =>\n widgetCacheRef.current.get(v) ??\n options?.find((o) => o.value === v)?.widgets ??\n asyncResults?.find((o) => o.value === v)?.widgets;\n\n type Chip = {\n value: string;\n label: string;\n mode: IncludeExcludeMode;\n widgets?: WidgetsByKind;\n };\n\n // Order chips by the locally tracked `chipOrder`, with any not-yet-tracked\n // values appended at the end. Action handlers (`addAs`, `removeChip`) keep\n // `chipOrder` in sync; this append branch only kicks in for values that\n // arrived via an external `onChange` (e.g. a form reset).\n const chips = useMemo<Chip[]>(() => {\n const known = new Set(chipOrder);\n const orderedValues = chipOrder.filter((v) => includeSet.has(v) || excludeSet.has(v));\n for (const v of include)\n if (!known.has(v)) {\n orderedValues.push(v);\n known.add(v);\n }\n for (const v of exclude)\n if (!known.has(v)) {\n orderedValues.push(v);\n known.add(v);\n }\n return orderedValues.map((v) => ({\n value: v,\n label: resolveLabel(v),\n mode: includeSet.has(v) ? \"include\" : \"exclude\",\n widgets: resolveWidgets(v),\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [chipOrder, includeSet, excludeSet, options, asyncResults]);\n\n const items = useMemo<SelectableItem[]>(() => {\n const list: SelectableItem[] = [];\n if (showCreateRow) {\n list.push({\n value: effectiveQuery,\n label: `Add \"${effectiveQuery}\"`,\n __create: true,\n });\n }\n for (const o of filteredSuggestions) list.push(o);\n return list;\n }, [showCreateRow, effectiveQuery, filteredSuggestions]);\n\n const trackInsertion = (value: string) => {\n setChipOrder((prev) => (prev.includes(value) ? prev : [...prev, value]));\n };\n const trackRemoval = (value: string) => {\n setChipOrder((prev) => prev.filter((v) => v !== value));\n };\n\n const addAs = (value: string, mode: IncludeExcludeMode) => {\n if (!value) return;\n if (atMax && !includeSet.has(value) && !excludeSet.has(value)) return;\n if (mode === \"include\") {\n if (includeSet.has(value)) return;\n onChange({\n include: [...include, value],\n exclude: exclude.filter((v) => v !== value),\n });\n } else {\n if (excludeSet.has(value)) return;\n onChange({\n include: include.filter((v) => v !== value),\n exclude: [...exclude, value],\n });\n }\n trackInsertion(value);\n };\n\n // Flipping intentionally does NOT touch chipOrder — keeping the slot keeps\n // the chip in place visually as it changes mode.\n const flip = (value: string, currentMode: IncludeExcludeMode) => {\n if (currentMode === \"include\") {\n onChange({\n include: include.filter((v) => v !== value),\n exclude: [...exclude, value],\n });\n } else {\n onChange({\n include: [...include, value],\n exclude: exclude.filter((v) => v !== value),\n });\n }\n };\n\n const removeChip = (value: string, mode: IncludeExcludeMode) => {\n if (mode === \"include\") onChange({ include: include.filter((v) => v !== value), exclude });\n else onChange({ include, exclude: exclude.filter((v) => v !== value) });\n trackRemoval(value);\n };\n\n const clearInput = () => {\n setInput(\"\");\n if (isAsync) debouncedSetQuery(\"\");\n };\n\n return (\n <Combobox<SelectableItem, true>\n multiple\n items={items}\n filter={null}\n open={open}\n onOpenChange={setOpen}\n // We only use base-ui's value plumbing to capture pick events from list\n // rows; chips are rendered manually so we keep the include/exclude\n // grouping. Returning an empty array keeps base-ui from drawing chips.\n value={[] as SelectableItem[]}\n onValueChange={(next) => {\n if (!Array.isArray(next) || next.length === 0) return;\n const last = next[next.length - 1] as SelectableItem;\n const mode: IncludeExcludeMode = last.__mode ?? \"include\";\n addAs(last.value, mode);\n clearInput();\n }}\n isItemEqualToValue={(a, b) => (a as SelectableItem).value === (b as SelectableItem).value}\n itemToStringLabel={(item) => (item as SelectableItem).label}\n itemToStringValue={(item) => (item as SelectableItem).value}\n inputValue={input}\n onInputValueChange={(v) => {\n setInput(v);\n if (isAsync) debouncedSetQuery(v);\n }}\n disabled={disabled}\n >\n <ComboboxChips aria-invalid={ariaInvalid || undefined} ref={anchor}>\n {chips.map((chip) => {\n const isInc = chip.mode === \"include\";\n return (\n <span\n key={chip.value}\n className={cn(isInc ? includeChipClass : excludeChipClass)}\n data-mode={chip.mode}\n >\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n flip(chip.value, chip.mode);\n }}\n aria-label={isInc ? \"Switch to exclude\" : \"Switch to include\"}\n title={isInc ? \"Switch to exclude\" : \"Switch to include\"}\n className={cn(isInc ? includeSignClass : excludeSignClass)}\n >\n {isInc ? <IconPlus width={10} height={10} /> : <IconMinus width={10} height={10} />}\n </button>\n <span className=\"pz:flex pz:items-center pz:gap-1 pz:px-1.5\">\n {chip.widgets && <WidgetStrip widgets={chip.widgets} size={14} />}\n {chip.label}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n removeChip(chip.value, chip.mode);\n }}\n aria-label={`Remove ${chip.label}`}\n className={cn(\n \"pz:opacity-50 pz:hover:opacity-100\",\n isInc ? undefined : \"pz:text-destructive pz:hover:bg-destructive/15\",\n )}\n >\n <XIcon className=\"pz:pointer-events-none\" />\n </Button>\n </span>\n );\n })}\n <ComboboxChipsInput\n placeholder={chips.length === 0 ? placeholder : undefined}\n readOnly={disableSearch}\n aria-invalid={ariaInvalid || undefined}\n onKeyDown={(e) => {\n if (e.key === \"Backspace\" && input.length === 0) {\n if (chips.length === 0) return;\n e.preventDefault();\n const last = chips[chips.length - 1];\n removeChip(last.value, last.mode);\n return;\n }\n if (e.key !== \"Enter\" || e.nativeEvent.isComposing) return;\n if (effectiveQuery.length === 0) return;\n // Prevent the Enter from bubbling up and submitting an enclosing form.\n e.preventDefault();\n e.stopPropagation();\n if (atMax) return;\n const exact = filteredSuggestions.find(\n (o) => o.value.toLowerCase() === effectiveQuery.toLowerCase(),\n );\n const toAdd = exact?.value ?? (allowCreate ? effectiveQuery : null);\n if (!toAdd) return;\n addAs(toAdd, \"include\");\n clearInput();\n }}\n />\n <ComboboxTrigger className=\"pz:ml-auto pz:bg-transparent pz:hover:bg-transparent\" />\n </ComboboxChips>\n\n <ComboboxContent anchor={anchor}>\n {loading && items.length > 0 && (\n // Refetch: prior items stay visible, dimmed, with a small corner\n // spinner so the layout doesn't jump while the new page loads.\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 {loading && items.length === 0 && (\n // Initial load: nothing to dim, so render a visible spinner in the\n // popover body to confirm options are being fetched.\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 <ComboboxList\n className={cn(\n loading &&\n items.length > 0 &&\n \"pz:opacity-50 pz:transition-opacity pz:pointer-events-none\",\n )}\n >\n {atMax && (\n <div className=\"pz:px-2 pz:py-1.5 pz:text-xs pz:text-muted-foreground\">\n Maximum {maxItems} item{maxItems === 1 ? \"\" : \"s\"} reached.\n </div>\n )}\n\n {items.map((item) => {\n const fieldType = !item.__create ? item.widgets?.field_type : undefined;\n const inIncluded = includeSet.has(item.value);\n const inExcluded = excludeSet.has(item.value);\n const includeDisabled = inIncluded || (atMax && !inExcluded);\n const excludeDisabled = inExcluded || (atMax && !inIncluded);\n return (\n <ComboboxItem\n key={`${item.__create ? \"__create__:\" : \"\"}${item.value}`}\n value={{ ...item, __mode: \"include\" } as SelectableItem}\n className={cn(\"pz:pr-1\", item.__create ? \"pz:italic\" : undefined)}\n disabled={includeDisabled && excludeDisabled && !item.__create}\n >\n {!item.__create && item.widgets && (\n <WidgetStrip\n widgets={\n // Field-type renders trailing; everything else leading.\n Object.fromEntries(\n Object.entries(item.widgets).filter(([k]) => k !== \"field_type\"),\n )\n }\n size={14}\n />\n )}\n <span className=\"pz:flex-1 pz:truncate\">{item.label}</span>\n {fieldType && <FieldTypeBadge type={fieldType.type} format={fieldType.format} />}\n <span className=\"pz:flex pz:items-center pz:pl-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n tabIndex={-1}\n disabled={excludeDisabled}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n if (excludeDisabled) return;\n addAs(item.value, \"exclude\");\n clearInput();\n }}\n aria-label={`Exclude ${item.label}`}\n title=\"Exclude\"\n className=\"pz:text-muted-foreground\"\n >\n <IconMinus width={10} height={10} />\n </Button>\n </span>\n </ComboboxItem>\n );\n })}\n\n {!loading && items.length === 0 && (\n <ComboboxEmpty>\n {emptyLabel ??\n (allowCreate\n ? options || loadOptions\n ? \"No matches\"\n : \"Type to add\"\n : \"No options\")}\n </ComboboxEmpty>\n )}\n </ComboboxList>\n </ComboboxContent>\n </Combobox>\n );\n}\n"],"mappings":"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"}