@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.
- package/CHANGELOG.md +119 -0
- package/README.md +172 -0
- package/dist/components/compound/pipe-catalog/active-filters.d.mts +26 -0
- package/dist/components/compound/pipe-catalog/active-filters.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/active-filters.mjs +47 -0
- package/dist/components/compound/pipe-catalog/active-filters.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/card.d.mts +30 -0
- package/dist/components/compound/pipe-catalog/card.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/card.mjs +77 -0
- package/dist/components/compound/pipe-catalog/card.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/category-filter.d.mts +30 -0
- package/dist/components/compound/pipe-catalog/category-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/category-filter.mjs +56 -0
- package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filter.d.mts +40 -0
- package/dist/components/compound/pipe-catalog/column-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filter.mjs +66 -0
- package/dist/components/compound/pipe-catalog/column-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filters.d.mts +16 -0
- package/dist/components/compound/pipe-catalog/column-filters.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filters.mjs +21 -0
- package/dist/components/compound/pipe-catalog/column-filters.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/empty.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/empty.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/empty.mjs +31 -0
- package/dist/components/compound/pipe-catalog/empty.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/index.d.mts +13 -0
- package/dist/components/compound/pipe-catalog/index.mjs +15 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.mjs +22 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/list.d.mts +34 -0
- package/dist/components/compound/pipe-catalog/list.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/list.mjs +29 -0
- package/dist/components/compound/pipe-catalog/list.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.mjs +22 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/provider-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/provider-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/provider-filter.mjs +29 -0
- package/dist/components/compound/pipe-catalog/provider-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/root.d.mts +47 -0
- package/dist/components/compound/pipe-catalog/root.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/root.mjs +85 -0
- package/dist/components/compound/pipe-catalog/root.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/search-filter.d.mts +24 -0
- package/dist/components/compound/pipe-catalog/search-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/search-filter.mjs +46 -0
- package/dist/components/compound/pipe-catalog/search-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/tag-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/tag-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/tag-filter.mjs +22 -0
- package/dist/components/compound/pipe-catalog/tag-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-form/content.d.mts +18 -0
- package/dist/components/compound/pipe-form/content.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/content.mjs +45 -0
- package/dist/components/compound/pipe-form/content.mjs.map +1 -0
- package/dist/components/compound/pipe-form/field.d.mts +17 -0
- package/dist/components/compound/pipe-form/field.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/field.mjs +21 -0
- package/dist/components/compound/pipe-form/field.mjs.map +1 -0
- package/dist/components/compound/pipe-form/footer.d.mts +14 -0
- package/dist/components/compound/pipe-form/footer.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/footer.mjs +14 -0
- package/dist/components/compound/pipe-form/footer.mjs.map +1 -0
- package/dist/components/compound/pipe-form/group.d.mts +13 -0
- package/dist/components/compound/pipe-form/group.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/group.mjs +17 -0
- package/dist/components/compound/pipe-form/group.mjs.map +1 -0
- package/dist/components/compound/pipe-form/header.d.mts +14 -0
- package/dist/components/compound/pipe-form/header.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/header.mjs +14 -0
- package/dist/components/compound/pipe-form/header.mjs.map +1 -0
- package/dist/components/compound/pipe-form/index.d.mts +9 -0
- package/dist/components/compound/pipe-form/index.mjs +11 -0
- package/dist/components/compound/pipe-form/root.d.mts +56 -0
- package/dist/components/compound/pipe-form/root.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/root.mjs +98 -0
- package/dist/components/compound/pipe-form/root.mjs.map +1 -0
- package/dist/components/compound/pipe-form/section.d.mts +13 -0
- package/dist/components/compound/pipe-form/section.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/section.mjs +17 -0
- package/dist/components/compound/pipe-form/section.mjs.map +1 -0
- package/dist/components/compound/pipe-form/submit-button.d.mts +9 -0
- package/dist/components/compound/pipe-form/submit-button.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/submit-button.mjs +17 -0
- package/dist/components/compound/pipe-form/submit-button.mjs.map +1 -0
- package/dist/components/compound/pipe-form/title.d.mts +16 -0
- package/dist/components/compound/pipe-form/title.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/title.mjs +14 -0
- package/dist/components/compound/pipe-form/title.mjs.map +1 -0
- package/dist/components/compound/search-catalog/active-filters.d.mts +26 -0
- package/dist/components/compound/search-catalog/active-filters.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/active-filters.mjs +46 -0
- package/dist/components/compound/search-catalog/active-filters.mjs.map +1 -0
- package/dist/components/compound/search-catalog/card.d.mts +30 -0
- package/dist/components/compound/search-catalog/card.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/card.mjs +77 -0
- package/dist/components/compound/search-catalog/card.mjs.map +1 -0
- package/dist/components/compound/search-catalog/category-filter.d.mts +29 -0
- package/dist/components/compound/search-catalog/category-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/category-filter.mjs +51 -0
- package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/column-filter.d.mts +40 -0
- package/dist/components/compound/search-catalog/column-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/column-filter.mjs +63 -0
- package/dist/components/compound/search-catalog/column-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/column-filters.d.mts +15 -0
- package/dist/components/compound/search-catalog/column-filters.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/column-filters.mjs +16 -0
- package/dist/components/compound/search-catalog/column-filters.mjs.map +1 -0
- package/dist/components/compound/search-catalog/empty.d.mts +22 -0
- package/dist/components/compound/search-catalog/empty.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/empty.mjs +31 -0
- package/dist/components/compound/search-catalog/empty.mjs.map +1 -0
- package/dist/components/compound/search-catalog/index.d.mts +12 -0
- package/dist/components/compound/search-catalog/index.mjs +14 -0
- package/dist/components/compound/search-catalog/list.d.mts +19 -0
- package/dist/components/compound/search-catalog/list.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/list.mjs +29 -0
- package/dist/components/compound/search-catalog/list.mjs.map +1 -0
- package/dist/components/compound/search-catalog/output-field-filter.d.mts +22 -0
- package/dist/components/compound/search-catalog/output-field-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/output-field-filter.mjs +22 -0
- package/dist/components/compound/search-catalog/output-field-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/provider-filter.d.mts +22 -0
- package/dist/components/compound/search-catalog/provider-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/provider-filter.mjs +29 -0
- package/dist/components/compound/search-catalog/provider-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/root.d.mts +33 -0
- package/dist/components/compound/search-catalog/root.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/root.mjs +74 -0
- package/dist/components/compound/search-catalog/root.mjs.map +1 -0
- package/dist/components/compound/search-catalog/search-filter.d.mts +24 -0
- package/dist/components/compound/search-catalog/search-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/search-filter.mjs +46 -0
- package/dist/components/compound/search-catalog/search-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/tag-filter.d.mts +22 -0
- package/dist/components/compound/search-catalog/tag-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/tag-filter.mjs +22 -0
- package/dist/components/compound/search-catalog/tag-filter.mjs.map +1 -0
- package/dist/components/compound/search-form/content.d.mts +18 -0
- package/dist/components/compound/search-form/content.d.mts.map +1 -0
- package/dist/components/compound/search-form/content.mjs +45 -0
- package/dist/components/compound/search-form/content.mjs.map +1 -0
- package/dist/components/compound/search-form/field.d.mts +17 -0
- package/dist/components/compound/search-form/field.d.mts.map +1 -0
- package/dist/components/compound/search-form/field.mjs +21 -0
- package/dist/components/compound/search-form/field.mjs.map +1 -0
- package/dist/components/compound/search-form/footer.d.mts +14 -0
- package/dist/components/compound/search-form/footer.d.mts.map +1 -0
- package/dist/components/compound/search-form/footer.mjs +14 -0
- package/dist/components/compound/search-form/footer.mjs.map +1 -0
- package/dist/components/compound/search-form/group.d.mts +13 -0
- package/dist/components/compound/search-form/group.d.mts.map +1 -0
- package/dist/components/compound/search-form/group.mjs +17 -0
- package/dist/components/compound/search-form/group.mjs.map +1 -0
- package/dist/components/compound/search-form/header.d.mts +14 -0
- package/dist/components/compound/search-form/header.d.mts.map +1 -0
- package/dist/components/compound/search-form/header.mjs +14 -0
- package/dist/components/compound/search-form/header.mjs.map +1 -0
- package/dist/components/compound/search-form/index.d.mts +9 -0
- package/dist/components/compound/search-form/index.mjs +11 -0
- package/dist/components/compound/search-form/root.d.mts +45 -0
- package/dist/components/compound/search-form/root.d.mts.map +1 -0
- package/dist/components/compound/search-form/root.mjs +90 -0
- package/dist/components/compound/search-form/root.mjs.map +1 -0
- package/dist/components/compound/search-form/section.d.mts +13 -0
- package/dist/components/compound/search-form/section.d.mts.map +1 -0
- package/dist/components/compound/search-form/section.mjs +17 -0
- package/dist/components/compound/search-form/section.mjs.map +1 -0
- package/dist/components/compound/search-form/submit-button.d.mts +9 -0
- package/dist/components/compound/search-form/submit-button.d.mts.map +1 -0
- package/dist/components/compound/search-form/submit-button.mjs +17 -0
- package/dist/components/compound/search-form/submit-button.mjs.map +1 -0
- package/dist/components/compound/search-form/title.d.mts +16 -0
- package/dist/components/compound/search-form/title.d.mts.map +1 -0
- package/dist/components/compound/search-form/title.mjs +14 -0
- package/dist/components/compound/search-form/title.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/active-filters.d.mts +26 -0
- package/dist/components/compound/searches-catalog/active-filters.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/active-filters.mjs +46 -0
- package/dist/components/compound/searches-catalog/active-filters.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/card.d.mts +22 -0
- package/dist/components/compound/searches-catalog/card.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/card.mjs +70 -0
- package/dist/components/compound/searches-catalog/card.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/category-filter.d.mts +29 -0
- package/dist/components/compound/searches-catalog/category-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/category-filter.mjs +51 -0
- package/dist/components/compound/searches-catalog/category-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/column-filter.d.mts +31 -0
- package/dist/components/compound/searches-catalog/column-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/column-filter.mjs +58 -0
- package/dist/components/compound/searches-catalog/column-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/column-filters.d.mts +15 -0
- package/dist/components/compound/searches-catalog/column-filters.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/column-filters.mjs +16 -0
- package/dist/components/compound/searches-catalog/column-filters.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/empty.d.mts +22 -0
- package/dist/components/compound/searches-catalog/empty.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/empty.mjs +31 -0
- package/dist/components/compound/searches-catalog/empty.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/index.d.mts +12 -0
- package/dist/components/compound/searches-catalog/index.mjs +14 -0
- package/dist/components/compound/searches-catalog/list.d.mts +19 -0
- package/dist/components/compound/searches-catalog/list.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/list.mjs +29 -0
- package/dist/components/compound/searches-catalog/list.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/output-field-filter.d.mts +22 -0
- package/dist/components/compound/searches-catalog/output-field-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/output-field-filter.mjs +22 -0
- package/dist/components/compound/searches-catalog/output-field-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/provider-filter.d.mts +22 -0
- package/dist/components/compound/searches-catalog/provider-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/provider-filter.mjs +29 -0
- package/dist/components/compound/searches-catalog/provider-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/root.d.mts +33 -0
- package/dist/components/compound/searches-catalog/root.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/root.mjs +74 -0
- package/dist/components/compound/searches-catalog/root.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/search-filter.d.mts +24 -0
- package/dist/components/compound/searches-catalog/search-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/search-filter.mjs +46 -0
- package/dist/components/compound/searches-catalog/search-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/tag-filter.d.mts +22 -0
- package/dist/components/compound/searches-catalog/tag-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/tag-filter.mjs +22 -0
- package/dist/components/compound/searches-catalog/tag-filter.mjs.map +1 -0
- package/dist/components/defaults/adapters/async-include-exclude-select-input.mjs +32 -0
- package/dist/components/defaults/adapters/async-include-exclude-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/async-multi-select-input.mjs +26 -0
- package/dist/components/defaults/adapters/async-multi-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/boolean-input.mjs +82 -0
- package/dist/components/defaults/adapters/boolean-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/connector-input.mjs +94 -0
- package/dist/components/defaults/adapters/connector-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/context-select-input.mjs +74 -0
- package/dist/components/defaults/adapters/context-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/cursor-pagination-input.mjs +29 -0
- package/dist/components/defaults/adapters/cursor-pagination-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/date-range-input.mjs +53 -0
- package/dist/components/defaults/adapters/date-range-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/exact-range-input.mjs +75 -0
- package/dist/components/defaults/adapters/exact-range-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/fields-select-input.mjs +25 -0
- package/dist/components/defaults/adapters/fields-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/include-exclude-input.mjs +33 -0
- package/dist/components/defaults/adapters/include-exclude-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/include-exclude-select-input.mjs +36 -0
- package/dist/components/defaults/adapters/include-exclude-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/index.d.mts +11 -0
- package/dist/components/defaults/adapters/index.d.mts.map +1 -0
- package/dist/components/defaults/adapters/index.mjs +73 -0
- package/dist/components/defaults/adapters/index.mjs.map +1 -0
- package/dist/components/defaults/adapters/int-input.mjs +16 -0
- package/dist/components/defaults/adapters/int-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/json-extraction-input.mjs +333 -0
- package/dist/components/defaults/adapters/json-extraction-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/json-schema-input.mjs +30 -0
- package/dist/components/defaults/adapters/json-schema-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/key-value-list-input.mjs +100 -0
- package/dist/components/defaults/adapters/key-value-list-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/min-max-int-input.mjs +65 -0
- package/dist/components/defaults/adapters/min-max-int-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/multi-create-input.mjs +32 -0
- package/dist/components/defaults/adapters/multi-create-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/multi-select-input.mjs +26 -0
- package/dist/components/defaults/adapters/multi-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/number-input.mjs +15 -0
- package/dist/components/defaults/adapters/number-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/ordered-multi-create-input.mjs +43 -0
- package/dist/components/defaults/adapters/ordered-multi-create-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/output-field-input.mjs +37 -0
- package/dist/components/defaults/adapters/output-field-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/pipes-trigger-input.mjs +381 -0
- package/dist/components/defaults/adapters/pipes-trigger-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/prompt-input.mjs +208 -0
- package/dist/components/defaults/adapters/prompt-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/providers-input.mjs +23 -0
- package/dist/components/defaults/adapters/providers-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/range-input.mjs +61 -0
- package/dist/components/defaults/adapters/range-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/select-input.mjs +54 -0
- package/dist/components/defaults/adapters/select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/tagged-text-input.mjs +154 -0
- package/dist/components/defaults/adapters/tagged-text-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/template-input.mjs +34 -0
- package/dist/components/defaults/adapters/template-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/text-input.mjs +18 -0
- package/dist/components/defaults/adapters/text-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/textarea-input.mjs +17 -0
- package/dist/components/defaults/adapters/textarea-input.mjs.map +1 -0
- package/dist/components/defaults/catalog/active-filter-pill.mjs +30 -0
- package/dist/components/defaults/catalog/active-filter-pill.mjs.map +1 -0
- package/dist/components/defaults/catalog/card-derived.d.mts +98 -0
- package/dist/components/defaults/catalog/card-derived.d.mts.map +1 -0
- package/dist/components/defaults/catalog/card-derived.mjs +172 -0
- package/dist/components/defaults/catalog/card-derived.mjs.map +1 -0
- package/dist/components/defaults/catalog/card-primitives.d.mts +81 -0
- package/dist/components/defaults/catalog/card-primitives.d.mts.map +1 -0
- package/dist/components/defaults/catalog/card-primitives.mjs +108 -0
- package/dist/components/defaults/catalog/card-primitives.mjs.map +1 -0
- package/dist/components/defaults/catalog/category-filter.d.mts +13 -0
- package/dist/components/defaults/catalog/category-filter.d.mts.map +1 -0
- package/dist/components/defaults/catalog/category-filter.mjs +28 -0
- package/dist/components/defaults/catalog/category-filter.mjs.map +1 -0
- package/dist/components/defaults/catalog/category-section.d.mts +39 -0
- package/dist/components/defaults/catalog/category-section.d.mts.map +1 -0
- package/dist/components/defaults/catalog/category-section.mjs +59 -0
- package/dist/components/defaults/catalog/category-section.mjs.map +1 -0
- package/dist/components/defaults/catalog/empty-state.mjs +20 -0
- package/dist/components/defaults/catalog/empty-state.mjs.map +1 -0
- package/dist/components/defaults/catalog/filter-select.d.mts +13 -0
- package/dist/components/defaults/catalog/filter-select.d.mts.map +1 -0
- package/dist/components/defaults/catalog/filter-select.mjs +45 -0
- package/dist/components/defaults/catalog/filter-select.mjs.map +1 -0
- package/dist/components/defaults/catalog/layout.mjs +53 -0
- package/dist/components/defaults/catalog/layout.mjs.map +1 -0
- package/dist/components/defaults/catalog/provider-avatars.d.mts +37 -0
- package/dist/components/defaults/catalog/provider-avatars.d.mts.map +1 -0
- package/dist/components/defaults/catalog/provider-avatars.mjs +98 -0
- package/dist/components/defaults/catalog/provider-avatars.mjs.map +1 -0
- package/dist/components/defaults/field-section-enumeration.mjs +32 -0
- package/dist/components/defaults/field-section-enumeration.mjs.map +1 -0
- package/dist/components/defaults/layout/field-wrapper.d.mts +13 -0
- package/dist/components/defaults/layout/field-wrapper.d.mts.map +1 -0
- package/dist/components/defaults/layout/field-wrapper.mjs +67 -0
- package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -0
- package/dist/components/defaults/layout/form.mjs +21 -0
- package/dist/components/defaults/layout/form.mjs.map +1 -0
- package/dist/components/defaults/layout/group.d.mts +16 -0
- package/dist/components/defaults/layout/group.d.mts.map +1 -0
- package/dist/components/defaults/layout/group.mjs +87 -0
- package/dist/components/defaults/layout/group.mjs.map +1 -0
- package/dist/components/defaults/layout/section.d.mts +14 -0
- package/dist/components/defaults/layout/section.d.mts.map +1 -0
- package/dist/components/defaults/layout/section.mjs +39 -0
- package/dist/components/defaults/layout/section.mjs.map +1 -0
- package/dist/components/defaults/layout/submit-button.d.mts +9 -0
- package/dist/components/defaults/layout/submit-button.d.mts.map +1 -0
- package/dist/components/defaults/layout/submit-button.mjs +23 -0
- package/dist/components/defaults/layout/submit-button.mjs.map +1 -0
- package/dist/components/defaults/toggle-advanced-button.mjs +29 -0
- package/dist/components/defaults/toggle-advanced-button.mjs.map +1 -0
- package/dist/components/field-renderer.d.mts +14 -0
- package/dist/components/field-renderer.d.mts.map +1 -0
- package/dist/components/field-renderer.mjs +21 -0
- package/dist/components/field-renderer.mjs.map +1 -0
- package/dist/components/hover-info.mjs +30 -0
- package/dist/components/hover-info.mjs.map +1 -0
- package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs +319 -0
- package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs.map +1 -0
- package/dist/components/internal/LiquidEditor/LiquidEditor.mjs +208 -0
- package/dist/components/internal/LiquidEditor/LiquidEditor.mjs.map +1 -0
- package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs +240 -0
- package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs.map +1 -0
- package/dist/components/internal/combobox/include-exclude-combobox.mjs +368 -0
- package/dist/components/internal/combobox/include-exclude-combobox.mjs.map +1 -0
- package/dist/components/internal/combobox/suggest-combobox.mjs +294 -0
- package/dist/components/internal/combobox/suggest-combobox.mjs.map +1 -0
- package/dist/components/internal/field-legend.mjs +37 -0
- package/dist/components/internal/field-legend.mjs.map +1 -0
- package/dist/components/internal/form-level-errors.mjs +71 -0
- package/dist/components/internal/form-level-errors.mjs.map +1 -0
- package/dist/components/internal/icons.mjs +131 -0
- package/dist/components/internal/icons.mjs.map +1 -0
- package/dist/components/internal/multi-select-popover-trigger.mjs +26 -0
- package/dist/components/internal/multi-select-popover-trigger.mjs.map +1 -0
- package/dist/components/internal/schema-editor/SchemaEditor.mjs +468 -0
- package/dist/components/internal/schema-editor/SchemaEditor.mjs.map +1 -0
- package/dist/components/internal/schema-editor/generate-schema-rows.mjs +374 -0
- package/dist/components/internal/schema-editor/generate-schema-rows.mjs.map +1 -0
- package/dist/components/internal/schema-editor/schema-editor-context.mjs +32 -0
- package/dist/components/internal/schema-editor/schema-editor-context.mjs.map +1 -0
- package/dist/components/internal/schema-editor/schema-utils.mjs +249 -0
- package/dist/components/internal/schema-editor/schema-utils.mjs.map +1 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu-utils.mjs +12 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu-utils.mjs.map +1 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu.mjs +151 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu.mjs.map +1 -0
- package/dist/components/internal/tag-chip-decoration.mjs +180 -0
- package/dist/components/internal/tag-chip-decoration.mjs.map +1 -0
- package/dist/components/rich-text.mjs +42 -0
- package/dist/components/rich-text.mjs.map +1 -0
- package/dist/components/ui/badge.mjs +32 -0
- package/dist/components/ui/badge.mjs.map +1 -0
- package/dist/components/ui/button.d.mts +19 -0
- package/dist/components/ui/button.d.mts.map +1 -0
- package/dist/components/ui/button.mjs +47 -0
- package/dist/components/ui/button.mjs.map +1 -0
- package/dist/components/ui/combobox.mjs +103 -0
- package/dist/components/ui/combobox.mjs.map +1 -0
- package/dist/components/ui/input-group.mjs +30 -0
- package/dist/components/ui/input-group.mjs.map +1 -0
- package/dist/components/ui/input.mjs +17 -0
- package/dist/components/ui/input.mjs.map +1 -0
- package/dist/components/ui/label.mjs +17 -0
- package/dist/components/ui/label.mjs.map +1 -0
- package/dist/components/ui/popover.mjs +40 -0
- package/dist/components/ui/popover.mjs.map +1 -0
- package/dist/components/ui/select.mjs +92 -0
- package/dist/components/ui/select.mjs.map +1 -0
- package/dist/components/ui/switch.mjs +21 -0
- package/dist/components/ui/switch.mjs.map +1 -0
- package/dist/components/ui/table.mjs +56 -0
- package/dist/components/ui/table.mjs.map +1 -0
- package/dist/components/ui/textarea.mjs +15 -0
- package/dist/components/ui/textarea.mjs.map +1 -0
- package/dist/components/ui/tooltip.mjs +48 -0
- package/dist/components/ui/tooltip.mjs.map +1 -0
- package/dist/context/catalog-card-context.mjs +31 -0
- package/dist/context/catalog-card-context.mjs.map +1 -0
- package/dist/context/catalog-config-context.d.mts +43 -0
- package/dist/context/catalog-config-context.d.mts.map +1 -0
- package/dist/context/catalog-config-context.mjs +48 -0
- package/dist/context/catalog-config-context.mjs.map +1 -0
- package/dist/context/form-context.mjs +11 -0
- package/dist/context/form-context.mjs.map +1 -0
- package/dist/context/form-customization-context.d.mts +71 -0
- package/dist/context/form-customization-context.d.mts.map +1 -0
- package/dist/context/form-customization-context.mjs +114 -0
- package/dist/context/form-customization-context.mjs.map +1 -0
- package/dist/context/form-provider.d.mts +41 -0
- package/dist/context/form-provider.d.mts.map +1 -0
- package/dist/context/form-provider.mjs +53 -0
- package/dist/context/form-provider.mjs.map +1 -0
- package/dist/context/pipe-catalog-card-context.d.mts +17 -0
- package/dist/context/pipe-catalog-card-context.d.mts.map +1 -0
- package/dist/context/pipe-catalog-card-context.mjs +13 -0
- package/dist/context/pipe-catalog-card-context.mjs.map +1 -0
- package/dist/context/pipe-catalog-context.d.mts +26 -0
- package/dist/context/pipe-catalog-context.d.mts.map +1 -0
- package/dist/context/pipe-catalog-context.mjs +13 -0
- package/dist/context/pipe-catalog-context.mjs.map +1 -0
- package/dist/context/pipe-form-context.d.mts +25 -0
- package/dist/context/pipe-form-context.d.mts.map +1 -0
- package/dist/context/pipe-form-context.mjs +13 -0
- package/dist/context/pipe-form-context.mjs.map +1 -0
- package/dist/context/portal-container-context.d.mts +5 -0
- package/dist/context/portal-container-context.d.mts.map +1 -0
- package/dist/context/portal-container-context.mjs +15 -0
- package/dist/context/portal-container-context.mjs.map +1 -0
- package/dist/context/search-catalog-card-context.d.mts +16 -0
- package/dist/context/search-catalog-card-context.d.mts.map +1 -0
- package/dist/context/search-catalog-card-context.mjs +13 -0
- package/dist/context/search-catalog-card-context.mjs.map +1 -0
- package/dist/context/search-catalog-context.d.mts +20 -0
- package/dist/context/search-catalog-context.d.mts.map +1 -0
- package/dist/context/search-catalog-context.mjs +13 -0
- package/dist/context/search-catalog-context.mjs.map +1 -0
- package/dist/context/search-form-context.d.mts +25 -0
- package/dist/context/search-form-context.d.mts.map +1 -0
- package/dist/context/search-form-context.mjs +13 -0
- package/dist/context/search-form-context.mjs.map +1 -0
- package/dist/context/searches-catalog-card-context.d.mts +16 -0
- package/dist/context/searches-catalog-card-context.d.mts.map +1 -0
- package/dist/context/searches-catalog-card-context.mjs +13 -0
- package/dist/context/searches-catalog-card-context.mjs.map +1 -0
- package/dist/context/searches-catalog-context.d.mts +20 -0
- package/dist/context/searches-catalog-context.d.mts.map +1 -0
- package/dist/context/searches-catalog-context.mjs +13 -0
- package/dist/context/searches-catalog-context.mjs.map +1 -0
- package/dist/hooks/use-debounce.mjs +28 -0
- package/dist/hooks/use-debounce.mjs.map +1 -0
- package/dist/hooks/use-debounced-fn.mjs +47 -0
- package/dist/hooks/use-debounced-fn.mjs.map +1 -0
- package/dist/hooks/use-disclosure.mjs +35 -0
- package/dist/hooks/use-disclosure.mjs.map +1 -0
- package/dist/hooks/use-field-error.d.mts +11 -0
- package/dist/hooks/use-field-error.d.mts.map +1 -0
- package/dist/hooks/use-field-error.mjs +23 -0
- package/dist/hooks/use-field-error.mjs.map +1 -0
- package/dist/hooks/use-floating-element.mjs +45 -0
- package/dist/hooks/use-floating-element.mjs.map +1 -0
- package/dist/hooks/use-form-core.d.mts +16 -0
- package/dist/hooks/use-form-core.d.mts.map +1 -0
- package/dist/hooks/use-form-core.mjs +241 -0
- package/dist/hooks/use-form-core.mjs.map +1 -0
- package/dist/hooks/use-jsonata-preview.mjs +38 -0
- package/dist/hooks/use-jsonata-preview.mjs.map +1 -0
- package/dist/hooks/use-menu-navigation.mjs +86 -0
- package/dist/hooks/use-menu-navigation.mjs.map +1 -0
- package/dist/hooks/use-pipe-catalog-table.d.mts +47 -0
- package/dist/hooks/use-pipe-catalog-table.d.mts.map +1 -0
- package/dist/hooks/use-pipe-catalog-table.mjs +170 -0
- package/dist/hooks/use-pipe-catalog-table.mjs.map +1 -0
- package/dist/hooks/use-pipe-form.d.mts +31 -0
- package/dist/hooks/use-pipe-form.d.mts.map +1 -0
- package/dist/hooks/use-pipe-form.mjs +65 -0
- package/dist/hooks/use-pipe-form.mjs.map +1 -0
- package/dist/hooks/use-search-catalog-table.d.mts +40 -0
- package/dist/hooks/use-search-catalog-table.d.mts.map +1 -0
- package/dist/hooks/use-search-catalog-table.mjs +161 -0
- package/dist/hooks/use-search-catalog-table.mjs.map +1 -0
- package/dist/hooks/use-search-form.d.mts +17 -0
- package/dist/hooks/use-search-form.d.mts.map +1 -0
- package/dist/hooks/use-search-form.mjs +58 -0
- package/dist/hooks/use-search-form.mjs.map +1 -0
- package/dist/hooks/use-searches-catalog-table.d.mts +40 -0
- package/dist/hooks/use-searches-catalog-table.d.mts.map +1 -0
- package/dist/hooks/use-searches-catalog-table.mjs +161 -0
- package/dist/hooks/use-searches-catalog-table.mjs.map +1 -0
- package/dist/index.d.mts +96 -0
- package/dist/index.mjs +98 -0
- package/dist/lib/utils.mjs +11 -0
- package/dist/lib/utils.mjs.map +1 -0
- package/dist/styles/pipe0-form.css +3785 -0
- package/dist/types/adapters.d.mts +107 -0
- package/dist/types/adapters.d.mts.map +1 -0
- package/dist/types/catalog-adapters.d.mts +122 -0
- package/dist/types/catalog-adapters.d.mts.map +1 -0
- package/dist/types/field-handle.d.mts +3 -0
- package/dist/types/field-props.d.mts +285 -0
- package/dist/types/field-props.d.mts.map +1 -0
- package/dist/types/form-customization.d.mts +25 -0
- package/dist/types/form-customization.d.mts.map +1 -0
- package/dist/types/form-handle.d.mts +23 -0
- package/dist/types/form-handle.d.mts.map +1 -0
- package/dist/utils/build-section-handlers.mjs +419 -0
- package/dist/utils/build-section-handlers.mjs.map +1 -0
- package/dist/utils/catalog-helpers.d.mts +12 -0
- package/dist/utils/catalog-helpers.d.mts.map +1 -0
- package/dist/utils/catalog-helpers.mjs +35 -0
- package/dist/utils/catalog-helpers.mjs.map +1 -0
- package/dist/utils/generate-random-string.mjs +11 -0
- package/dist/utils/generate-random-string.mjs.map +1 -0
- package/dist/utils/merge-form-stores.mjs +14 -0
- package/dist/utils/merge-form-stores.mjs.map +1 -0
- package/dist/utils/object-path.mjs +72 -0
- package/dist/utils/object-path.mjs.map +1 -0
- package/dist/utils/render-slot.d.mts +44 -0
- package/dist/utils/render-slot.d.mts.map +1 -0
- package/dist/utils/render-slot.mjs +30 -0
- package/dist/utils/render-slot.mjs.map +1 -0
- package/dist/widgets/avatar-group.d.mts +36 -0
- package/dist/widgets/avatar-group.d.mts.map +1 -0
- package/dist/widgets/avatar-group.mjs +114 -0
- package/dist/widgets/avatar-group.mjs.map +1 -0
- package/dist/widgets/emoji-glyph.d.mts +11 -0
- package/dist/widgets/emoji-glyph.d.mts.map +1 -0
- package/dist/widgets/emoji-glyph.mjs +13 -0
- package/dist/widgets/emoji-glyph.mjs.map +1 -0
- package/dist/widgets/field-type-badge.d.mts +13 -0
- package/dist/widgets/field-type-badge.d.mts.map +1 -0
- package/dist/widgets/field-type-badge.mjs +30 -0
- package/dist/widgets/field-type-badge.mjs.map +1 -0
- package/dist/widgets/icon-glyph.d.mts +16 -0
- package/dist/widgets/icon-glyph.d.mts.map +1 -0
- package/dist/widgets/icon-glyph.mjs +59 -0
- package/dist/widgets/icon-glyph.mjs.map +1 -0
- package/dist/widgets/index.d.mts +9 -0
- package/dist/widgets/index.mjs +11 -0
- package/dist/widgets/logo-url.d.mts +17 -0
- package/dist/widgets/logo-url.d.mts.map +1 -0
- package/dist/widgets/logo-url.mjs +17 -0
- package/dist/widgets/logo-url.mjs.map +1 -0
- package/dist/widgets/pricing-badge.d.mts +11 -0
- package/dist/widgets/pricing-badge.d.mts.map +1 -0
- package/dist/widgets/pricing-badge.mjs +13 -0
- package/dist/widgets/pricing-badge.mjs.map +1 -0
- package/dist/widgets/provider-logo.d.mts +16 -0
- package/dist/widgets/provider-logo.d.mts.map +1 -0
- package/dist/widgets/provider-logo.mjs +20 -0
- package/dist/widgets/provider-logo.mjs.map +1 -0
- package/dist/widgets/widget-strip.d.mts +16 -0
- package/dist/widgets/widget-strip.d.mts.map +1 -0
- package/dist/widgets/widget-strip.mjs +42 -0
- package/dist/widgets/widget-strip.mjs.map +1 -0
- package/dist/widgets/widget-view.d.mts +14 -0
- package/dist/widgets/widget-view.d.mts.map +1 -0
- package/dist/widgets/widget-view.mjs +36 -0
- package/dist/widgets/widget-view.mjs.map +1 -0
- 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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"}
|