@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,45 @@
|
|
|
1
|
+
import { useEffect, useMemo } from "react";
|
|
2
|
+
import { useDismiss, useFloating, useInteractions, useTransitionStyles } from "@floating-ui/react";
|
|
3
|
+
|
|
4
|
+
//#region src/hooks/use-floating-element.ts
|
|
5
|
+
function useFloatingElement(show, referencePos, zIndex, options) {
|
|
6
|
+
const { dismissOptions, ...floatingOptions } = options || {};
|
|
7
|
+
const { refs, update, context, floatingStyles } = useFloating({
|
|
8
|
+
open: show,
|
|
9
|
+
...floatingOptions
|
|
10
|
+
});
|
|
11
|
+
const { isMounted, styles } = useTransitionStyles(context);
|
|
12
|
+
const { getReferenceProps, getFloatingProps } = useInteractions([useDismiss(context, dismissOptions)]);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
update();
|
|
15
|
+
}, [referencePos, update]);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (referencePos === null) return;
|
|
18
|
+
refs.setReference({ getBoundingClientRect: () => referencePos });
|
|
19
|
+
}, [referencePos, refs]);
|
|
20
|
+
return useMemo(() => ({
|
|
21
|
+
isMounted,
|
|
22
|
+
ref: refs.setFloating,
|
|
23
|
+
style: {
|
|
24
|
+
...styles,
|
|
25
|
+
...floatingStyles,
|
|
26
|
+
zIndex
|
|
27
|
+
},
|
|
28
|
+
update,
|
|
29
|
+
getFloatingProps,
|
|
30
|
+
getReferenceProps
|
|
31
|
+
}), [
|
|
32
|
+
floatingStyles,
|
|
33
|
+
isMounted,
|
|
34
|
+
refs.setFloating,
|
|
35
|
+
styles,
|
|
36
|
+
update,
|
|
37
|
+
zIndex,
|
|
38
|
+
getFloatingProps,
|
|
39
|
+
getReferenceProps
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
export { useFloatingElement };
|
|
45
|
+
//# sourceMappingURL=use-floating-element.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-floating-element.mjs","names":[],"sources":["../../src/hooks/use-floating-element.ts"],"sourcesContent":["import type { UseDismissProps, UseFloatingOptions } from \"@floating-ui/react\";\nimport { useDismiss, useFloating, useInteractions, useTransitionStyles } from \"@floating-ui/react\";\nimport { type CSSProperties, type HTMLProps, useEffect, useMemo } from \"react\";\n\nexport function useFloatingElement(\n show: boolean,\n referencePos: DOMRect | null,\n zIndex: number,\n options?: Partial<UseFloatingOptions & { dismissOptions?: UseDismissProps }>,\n) {\n const { dismissOptions, ...floatingOptions } = options || {};\n\n const { refs, update, context, floatingStyles } = useFloating({\n open: show,\n ...floatingOptions,\n });\n\n const { isMounted, styles } = useTransitionStyles(context);\n const dismiss = useDismiss(context, dismissOptions);\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n useEffect(() => {\n update();\n }, [referencePos, update]);\n\n useEffect(() => {\n if (referencePos === null) return;\n refs.setReference({\n getBoundingClientRect: () => referencePos,\n });\n }, [referencePos, refs]);\n\n return useMemo(\n () => ({\n isMounted,\n ref: refs.setFloating,\n style: {\n ...styles,\n ...floatingStyles,\n zIndex,\n } as CSSProperties,\n update,\n getFloatingProps: getFloatingProps as (\n userProps?: HTMLProps<HTMLElement>,\n ) => Record<string, unknown>,\n getReferenceProps,\n }),\n [\n floatingStyles,\n isMounted,\n refs.setFloating,\n styles,\n update,\n zIndex,\n getFloatingProps,\n getReferenceProps,\n ],\n );\n}\n"],"mappings":";;;;AAIA,SAAgB,mBACd,MACA,cACA,QACA,SACA;CACA,MAAM,EAAE,gBAAgB,GAAG,oBAAoB,WAAW,EAAE;CAE5D,MAAM,EAAE,MAAM,QAAQ,SAAS,mBAAmB,YAAY;EAC5D,MAAM;EACN,GAAG;EACJ,CAAC;CAEF,MAAM,EAAE,WAAW,WAAW,oBAAoB,QAAQ;CAE1D,MAAM,EAAE,mBAAmB,qBAAqB,gBAAgB,CADhD,WAAW,SAAS,eAAe,CACsB,CAAC;AAE1E,iBAAgB;AACd,UAAQ;IACP,CAAC,cAAc,OAAO,CAAC;AAE1B,iBAAgB;AACd,MAAI,iBAAiB,KAAM;AAC3B,OAAK,aAAa,EAChB,6BAA6B,cAC9B,CAAC;IACD,CAAC,cAAc,KAAK,CAAC;AAExB,QAAO,eACE;EACL;EACA,KAAK,KAAK;EACV,OAAO;GACL,GAAG;GACH,GAAG;GACH;GACD;EACD;EACkB;EAGlB;EACD,GACD;EACE;EACA;EACA,KAAK;EACL;EACA;EACA;EACA;EACA;EACD,CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Dispatch } from "react";
|
|
2
|
+
import { FormResolvers, FormStore, PipesEnvironment } from "@pipe0/base";
|
|
3
|
+
import { UseFormReturn } from "react-hook-form";
|
|
4
|
+
|
|
5
|
+
//#region src/hooks/use-form-core.d.ts
|
|
6
|
+
type ResourceStatus = "idle" | "loading" | "ready" | "error";
|
|
7
|
+
type FieldLoadState = {
|
|
8
|
+
status: ResourceStatus; /** Field-level disabled (from `meta.enabledIf`). */
|
|
9
|
+
disabled: boolean; /** Field-level disabled reason. */
|
|
10
|
+
disabledReason?: string; /** Suggestions sub-feature gate (from `optionsDef.enabledIf`). */
|
|
11
|
+
suggestionsDisabled: boolean; /** Suggestions sub-feature reason. */
|
|
12
|
+
suggestionsDisabledReason?: string;
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { FieldLoadState, ResourceStatus };
|
|
16
|
+
//# sourceMappingURL=use-form-core.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form-core.d.mts","names":[],"sources":["../../src/hooks/use-form-core.ts"],"mappings":";;;;;KA8BY,cAAA;AAAA,KASA,cAAA;EACV,MAAA,EAAQ,cAAA,EADgB;EAGxB,QAAA,WAFsB;EAItB,cAAA,WAJQ;EAMR,mBAAA,WAFA;EAIA,yBAAA;AAAA"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { buildSectionHandles } from "../utils/build-section-handlers.mjs";
|
|
2
|
+
import { mergeFormStores } from "../utils/merge-form-stores.mjs";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { useForm } from "react-hook-form";
|
|
5
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
6
|
+
|
|
7
|
+
//#region src/hooks/use-form-core.ts
|
|
8
|
+
function collectEnabledSlots(formConfig) {
|
|
9
|
+
const out = [];
|
|
10
|
+
for (const section of formConfig) for (const group of section.groups) for (const field of group.fields) {
|
|
11
|
+
if (field.enabledIf) out.push({
|
|
12
|
+
fieldPath: field.path,
|
|
13
|
+
slotId: "field",
|
|
14
|
+
enabledIf: field.enabledIf
|
|
15
|
+
});
|
|
16
|
+
if ((field.type === "context_select_input" || field.type === "tagged_text_input") && "optionsDef" in field && field.optionsDef) {
|
|
17
|
+
const optionsDef = field.optionsDef;
|
|
18
|
+
if (optionsDef?.enabledIf) out.push({
|
|
19
|
+
fieldPath: field.path,
|
|
20
|
+
slotId: "suggestions",
|
|
21
|
+
enabledIf: optionsDef.enabledIf,
|
|
22
|
+
optionsDef
|
|
23
|
+
});
|
|
24
|
+
else out.push({
|
|
25
|
+
fieldPath: field.path,
|
|
26
|
+
slotId: "suggestions",
|
|
27
|
+
enabledIf: () => ({ disabled: false }),
|
|
28
|
+
optionsDef
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
function getPathValue(obj, path) {
|
|
35
|
+
const parts = path.split(".");
|
|
36
|
+
let cur = obj;
|
|
37
|
+
for (const part of parts) {
|
|
38
|
+
if (cur == null) return void 0;
|
|
39
|
+
cur = cur[part];
|
|
40
|
+
}
|
|
41
|
+
return cur;
|
|
42
|
+
}
|
|
43
|
+
function evalSlot(slot, payload) {
|
|
44
|
+
return slot.enabledIf(payload);
|
|
45
|
+
}
|
|
46
|
+
function useFormCore(options) {
|
|
47
|
+
const { schema, publicKey, defaultValues, formConfig, resolvers, pipeOrSearchId, kind, setStore, environment = "production", scopes, teamId } = options;
|
|
48
|
+
const scopesKey = useMemo(() => scopes ? JSON.stringify(scopes) : "", [scopes]);
|
|
49
|
+
const [connectionsStatus, setConnectionsStatus] = useState(resolvers?.getConnections ? "loading" : "idle");
|
|
50
|
+
const [fieldLoadStates, setFieldLoadStates] = useState({});
|
|
51
|
+
const form = useForm({
|
|
52
|
+
resolver: zodResolver(schema),
|
|
53
|
+
defaultValues
|
|
54
|
+
});
|
|
55
|
+
const mergeStore = useCallback((incoming) => setStore((old) => mergeFormStores(old, incoming)), [setStore]);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (!resolvers?.getConnections) {
|
|
58
|
+
setConnectionsStatus("idle");
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
let cancelled = false;
|
|
62
|
+
setConnectionsStatus("loading");
|
|
63
|
+
Promise.resolve(resolvers.getConnections({
|
|
64
|
+
id: pipeOrSearchId,
|
|
65
|
+
environment
|
|
66
|
+
})).then((conns) => {
|
|
67
|
+
if (cancelled) return;
|
|
68
|
+
mergeStore({ field_options: { connections: { options: conns.map((c) => ({
|
|
69
|
+
label: c.public_id,
|
|
70
|
+
value: c.public_id,
|
|
71
|
+
widgets: { provider_logo: { provider: c.provider } }
|
|
72
|
+
})) } } });
|
|
73
|
+
setConnectionsStatus("ready");
|
|
74
|
+
}).catch(() => {
|
|
75
|
+
if (!cancelled) setConnectionsStatus("error");
|
|
76
|
+
});
|
|
77
|
+
return () => {
|
|
78
|
+
cancelled = true;
|
|
79
|
+
};
|
|
80
|
+
}, [
|
|
81
|
+
pipeOrSearchId,
|
|
82
|
+
environment,
|
|
83
|
+
resolvers?.getConnections,
|
|
84
|
+
mergeStore
|
|
85
|
+
]);
|
|
86
|
+
const getSecretsResolver = resolvers?.getSecrets;
|
|
87
|
+
const searchSecrets = useCallback(async (query) => {
|
|
88
|
+
if (!getSecretsResolver) return [];
|
|
89
|
+
return Promise.resolve(getSecretsResolver({
|
|
90
|
+
query,
|
|
91
|
+
environment,
|
|
92
|
+
scopes,
|
|
93
|
+
teamId
|
|
94
|
+
}));
|
|
95
|
+
}, [
|
|
96
|
+
getSecretsResolver,
|
|
97
|
+
environment,
|
|
98
|
+
scopesKey,
|
|
99
|
+
teamId
|
|
100
|
+
]);
|
|
101
|
+
const slots = useMemo(() => collectEnabledSlots(formConfig), [formConfig]);
|
|
102
|
+
const watchedValues = form.watch();
|
|
103
|
+
const slotResults = useMemo(() => {
|
|
104
|
+
const out = {};
|
|
105
|
+
for (const slot of slots) out[`${slot.fieldPath}::${slot.slotId}`] = evalSlot(slot, watchedValues);
|
|
106
|
+
return out;
|
|
107
|
+
}, [slots, watchedValues]);
|
|
108
|
+
const slotResultsSig = useMemo(() => JSON.stringify(slotResults), [slotResults]);
|
|
109
|
+
const prevResultsRef = useRef({});
|
|
110
|
+
const lastFiredSigRef = useRef({});
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
if (slots.length === 0) return;
|
|
113
|
+
let cancelled = false;
|
|
114
|
+
const nextLoadStates = { ...fieldLoadStates };
|
|
115
|
+
const byField = {};
|
|
116
|
+
for (const slot of slots) {
|
|
117
|
+
const r = slotResults[`${slot.fieldPath}::${slot.slotId}`];
|
|
118
|
+
if (r == null) continue;
|
|
119
|
+
byField[slot.fieldPath] ??= {};
|
|
120
|
+
byField[slot.fieldPath][slot.slotId] = r;
|
|
121
|
+
}
|
|
122
|
+
for (const slot of slots) {
|
|
123
|
+
const key = `${slot.fieldPath}::${slot.slotId}`;
|
|
124
|
+
const r = slotResults[key];
|
|
125
|
+
if (r == null) continue;
|
|
126
|
+
const prev = prevResultsRef.current[key];
|
|
127
|
+
if (slot.slotId === "field" && r.disabled && prev != null && !prev.disabled) form.setValue(slot.fieldPath, "", {
|
|
128
|
+
shouldDirty: true,
|
|
129
|
+
shouldTouch: true
|
|
130
|
+
});
|
|
131
|
+
if (slot.slotId === "suggestions" && resolvers?.getFieldContext) {
|
|
132
|
+
if (r.disabled) {
|
|
133
|
+
delete lastFiredSigRef.current[slot.fieldPath];
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const watchedConnections = watchedValues?.connector?.connections;
|
|
137
|
+
const required = slot.optionsDef?.requires;
|
|
138
|
+
let connectionId;
|
|
139
|
+
if (required?.connection) {
|
|
140
|
+
connectionId = (watchedConnections?.find((c) => c?.connection?.startsWith(`${required.connection}_`)))?.connection;
|
|
141
|
+
if (!connectionId) continue;
|
|
142
|
+
}
|
|
143
|
+
const perFieldSig = JSON.stringify({
|
|
144
|
+
connectionId,
|
|
145
|
+
deps: required?.fields?.map((d) => getPathValue(watchedValues, d)) ?? []
|
|
146
|
+
});
|
|
147
|
+
if (lastFiredSigRef.current[slot.fieldPath] === perFieldSig) continue;
|
|
148
|
+
lastFiredSigRef.current[slot.fieldPath] = perFieldSig;
|
|
149
|
+
const existing = nextLoadStates[slot.fieldPath];
|
|
150
|
+
nextLoadStates[slot.fieldPath] = {
|
|
151
|
+
status: "loading",
|
|
152
|
+
disabled: existing?.disabled ?? false,
|
|
153
|
+
disabledReason: existing?.disabledReason,
|
|
154
|
+
suggestionsDisabled: false,
|
|
155
|
+
suggestionsDisabledReason: void 0
|
|
156
|
+
};
|
|
157
|
+
const idKey = kind === "search" ? "search_id" : "pipe_id";
|
|
158
|
+
Promise.resolve(resolvers.getFieldContext({
|
|
159
|
+
fieldPath: slot.fieldPath,
|
|
160
|
+
query: "",
|
|
161
|
+
payload: {
|
|
162
|
+
...watchedValues,
|
|
163
|
+
[idKey]: pipeOrSearchId
|
|
164
|
+
}
|
|
165
|
+
})).then((incoming) => {
|
|
166
|
+
if (cancelled) return;
|
|
167
|
+
mergeStore(incoming);
|
|
168
|
+
setFieldLoadStates((s) => ({
|
|
169
|
+
...s,
|
|
170
|
+
[slot.fieldPath]: {
|
|
171
|
+
...s[slot.fieldPath] ?? {
|
|
172
|
+
disabled: false,
|
|
173
|
+
suggestionsDisabled: false
|
|
174
|
+
},
|
|
175
|
+
status: "ready"
|
|
176
|
+
}
|
|
177
|
+
}));
|
|
178
|
+
}).catch(() => {
|
|
179
|
+
if (cancelled) return;
|
|
180
|
+
setFieldLoadStates((s) => ({
|
|
181
|
+
...s,
|
|
182
|
+
[slot.fieldPath]: {
|
|
183
|
+
...s[slot.fieldPath] ?? {
|
|
184
|
+
disabled: false,
|
|
185
|
+
suggestionsDisabled: false
|
|
186
|
+
},
|
|
187
|
+
status: "error"
|
|
188
|
+
}
|
|
189
|
+
}));
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
for (const fieldPath of Object.keys(byField)) {
|
|
194
|
+
const { field: fieldR, suggestions: sugR } = byField[fieldPath];
|
|
195
|
+
const prevState = nextLoadStates[fieldPath];
|
|
196
|
+
nextLoadStates[fieldPath] = {
|
|
197
|
+
status: prevState?.status ?? "idle",
|
|
198
|
+
disabled: fieldR == null ? prevState?.disabled ?? false : fieldR.disabled,
|
|
199
|
+
disabledReason: fieldR == null ? prevState?.disabledReason : fieldR.message,
|
|
200
|
+
suggestionsDisabled: sugR == null ? prevState?.suggestionsDisabled ?? false : sugR.disabled,
|
|
201
|
+
suggestionsDisabledReason: sugR == null ? prevState?.suggestionsDisabledReason : sugR.message
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
setFieldLoadStates(nextLoadStates);
|
|
205
|
+
prevResultsRef.current = slotResults;
|
|
206
|
+
return () => {
|
|
207
|
+
cancelled = true;
|
|
208
|
+
};
|
|
209
|
+
}, [
|
|
210
|
+
slotResultsSig,
|
|
211
|
+
slots,
|
|
212
|
+
pipeOrSearchId
|
|
213
|
+
]);
|
|
214
|
+
const isSubmitted = form.formState.isSubmitted;
|
|
215
|
+
const formErrors = form.formState.errors;
|
|
216
|
+
const sections = useMemo(() => buildSectionHandles(formConfig, form, publicKey, {
|
|
217
|
+
fieldLoadStates,
|
|
218
|
+
searchSecrets
|
|
219
|
+
}), [
|
|
220
|
+
formConfig,
|
|
221
|
+
form,
|
|
222
|
+
publicKey,
|
|
223
|
+
fieldLoadStates,
|
|
224
|
+
isSubmitted,
|
|
225
|
+
searchSecrets,
|
|
226
|
+
watchedValues,
|
|
227
|
+
formErrors
|
|
228
|
+
]);
|
|
229
|
+
return {
|
|
230
|
+
connectionsStatus,
|
|
231
|
+
fieldLoadStates,
|
|
232
|
+
form,
|
|
233
|
+
sections,
|
|
234
|
+
fields: useMemo(() => sections.flatMap((s) => s.groups.flatMap((g) => g.fields)), [sections]),
|
|
235
|
+
reset: form.reset
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
//#endregion
|
|
240
|
+
export { useFormCore };
|
|
241
|
+
//# sourceMappingURL=use-form-core.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form-core.mjs","names":[],"sources":["../../src/hooks/use-form-core.ts"],"sourcesContent":["import { zodResolver } from \"@hookform/resolvers/zod\";\nimport type {\n EnabledIf,\n EnabledResult,\n FormResolvers,\n FormSection,\n FormStore,\n GeneratedInputMeta,\n PipesEnvironment,\n ProviderName,\n} from \"@pipe0/base\";\nimport {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { type FieldValues, type UseFormReturn, useForm } from \"react-hook-form\";\nimport type { AnyFieldProps, SecretSuggestion } from \"../types/field-props.js\";\nimport type { FormSectionHandle } from \"../types/form-handle.js\";\nimport { buildSectionHandles } from \"../utils/build-section-handlers.js\";\nimport { mergeFormStores } from \"../utils/merge-form-stores.js\";\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport type ResourceStatus = \"idle\" | \"loading\" | \"ready\" | \"error\";\n\nexport type SlotId = \"field\" | \"suggestions\";\n\nexport type FieldEnabledState = {\n disabled: boolean;\n reason?: string;\n};\n\nexport type FieldLoadState = {\n status: ResourceStatus;\n /** Field-level disabled (from `meta.enabledIf`). */\n disabled: boolean;\n /** Field-level disabled reason. */\n disabledReason?: string;\n /** Suggestions sub-feature gate (from `optionsDef.enabledIf`). */\n suggestionsDisabled: boolean;\n /** Suggestions sub-feature reason. */\n suggestionsDisabledReason?: string;\n};\n\nexport interface UseFormCoreOptions<T extends FieldValues> {\n pipeOrSearchId: string;\n kind: \"pipe\" | \"search\";\n schema: any;\n publicKey: string;\n defaultValues?: T;\n formConfig: FormSection[];\n resolvers?: FormResolvers;\n store: FormStore;\n setStore: Dispatch<SetStateAction<FormStore>>;\n environment?: PipesEnvironment;\n /**\n * Form-level scope tags. Bundled into every `resolvers.getSecrets` call so\n * the backend can return only the secrets allowed in the declared scopes\n * (intersection on top of cascade visibility).\n */\n scopes?: string[];\n /**\n * Current team context. Bundled into every `resolvers.getSecrets` call so\n * the backend can restrict team-level secrets to exactly this team.\n */\n teamId?: string;\n}\n\nexport interface UseFormCoreReturn<T extends FieldValues> {\n connectionsStatus: ResourceStatus;\n /** Map of field path → load state for dynamic context_select_input fields. */\n fieldLoadStates: Record<string, FieldLoadState>;\n form: UseFormReturn<T, any, any>;\n sections: FormSectionHandle[];\n fields: AnyFieldProps[];\n reset: (values?: T) => void;\n}\n\ntype EnabledSlot = {\n fieldPath: string;\n slotId: SlotId;\n enabledIf: EnabledIf;\n /** Only present for \"suggestions\" slots — used to drive option fetching. */\n optionsDef?: {\n requires: { connection?: ProviderName; fields?: readonly string[] };\n };\n};\n\nfunction collectEnabledSlots(formConfig: FormSection[]): EnabledSlot[] {\n const out: EnabledSlot[] = [];\n for (const section of formConfig) {\n for (const group of section.groups) {\n for (const field of group.fields as GeneratedInputMeta[]) {\n if (field.enabledIf) {\n out.push({\n fieldPath: field.path,\n slotId: \"field\",\n enabledIf: field.enabledIf,\n });\n }\n const supportsOptionsDef =\n field.type === \"context_select_input\" || field.type === \"tagged_text_input\";\n if (supportsOptionsDef && \"optionsDef\" in field && field.optionsDef) {\n const optionsDef = field.optionsDef as EnabledSlot[\"optionsDef\"] & {\n enabledIf?: EnabledIf;\n };\n if (optionsDef?.enabledIf) {\n out.push({\n fieldPath: field.path,\n slotId: \"suggestions\",\n enabledIf: optionsDef.enabledIf,\n optionsDef,\n });\n } else {\n // Even without a sub-feature enabledIf, we still need to track\n // this field as having a fetchable suggestions slot — it's\n // always enabled and the fetch fires on every value change.\n out.push({\n fieldPath: field.path,\n slotId: \"suggestions\",\n enabledIf: () => ({ disabled: false }),\n optionsDef,\n });\n }\n }\n }\n }\n }\n return out;\n}\n\nfunction getPathValue(obj: unknown, path: string): unknown {\n const parts = path.split(\".\");\n let cur: any = obj;\n for (const part of parts) {\n if (cur == null) return undefined;\n cur = cur[part];\n }\n return cur;\n}\n\nfunction evalSlot(slot: EnabledSlot, payload: unknown): EnabledResult {\n return slot.enabledIf(payload);\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nexport function useFormCore<T extends FieldValues>(\n options: UseFormCoreOptions<T>,\n): UseFormCoreReturn<T> {\n const {\n schema,\n publicKey,\n defaultValues,\n formConfig,\n resolvers,\n pipeOrSearchId,\n kind,\n setStore,\n environment = \"production\",\n scopes,\n teamId,\n } = options;\n\n // Stable signature for `scopes` so its identity doesn't churn the effect\n // dep across renders when callers pass a fresh array literal each time.\n const scopesKey = useMemo(() => (scopes ? JSON.stringify(scopes) : \"\"), [scopes]);\n\n // --- Per-resource status ---\n const [connectionsStatus, setConnectionsStatus] = useState<ResourceStatus>(\n resolvers?.getConnections ? \"loading\" : \"idle\",\n );\n const [fieldLoadStates, setFieldLoadStates] = useState<Record<string, FieldLoadState>>({});\n\n // --- Form ---\n const form = useForm<T>({\n resolver: zodResolver(schema),\n defaultValues: defaultValues as any,\n });\n\n // --- Helpers ---\n const mergeStore = useCallback(\n (incoming: FormStore) => setStore((old) => mergeFormStores(old, incoming)),\n [setStore],\n );\n\n // --- Effect 1: Load connections ---\n useEffect(() => {\n if (!resolvers?.getConnections) {\n setConnectionsStatus(\"idle\");\n return;\n }\n\n let cancelled = false;\n setConnectionsStatus(\"loading\");\n\n Promise.resolve(resolvers.getConnections({ id: pipeOrSearchId, environment }))\n .then((conns) => {\n if (cancelled) return;\n\n mergeStore({\n field_options: {\n connections: {\n options: conns.map((c) => ({\n label: c.public_id,\n value: c.public_id,\n widgets: {\n provider_logo: { provider: c.provider as ProviderName },\n },\n })),\n },\n },\n });\n\n setConnectionsStatus(\"ready\");\n })\n .catch(() => {\n if (!cancelled) setConnectionsStatus(\"error\");\n });\n\n return () => {\n cancelled = true;\n };\n }, [pipeOrSearchId, environment, resolvers?.getConnections, mergeStore]);\n\n // --- Curried secrets search ---\n // Each keystroke in the reference picker fires this with the latest query.\n // The picker handles debounce + race-correctness; here we just bundle in\n // form-level args (environment / scopes / teamId) and call the resolver.\n // No caching: every call hits the resolver. Returns [] if no resolver.\n const getSecretsResolver = resolvers?.getSecrets;\n const searchSecrets = useCallback(\n async (query: string): Promise<SecretSuggestion[]> => {\n if (!getSecretsResolver) return [];\n return Promise.resolve(getSecretsResolver({ query, environment, scopes, teamId }));\n },\n // `scopesKey` is the stable serialization of `scopes`; depending on the\n // raw array would churn the callback identity on every parent render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [getSecretsResolver, environment, scopesKey, teamId],\n );\n\n // --- Effect 2: Evaluate enabledIf slots + drive context_select fetching ---\n const slots = useMemo(() => collectEnabledSlots(formConfig), [formConfig]);\n\n // Subscribe to all form value changes so resolvers re-evaluate.\n const watchedValues = form.watch();\n\n // Evaluate every slot against the current payload. Keep the result\n // serialized so the effect's deps stay stable across reference-identical\n // re-renders.\n const slotResults = useMemo(() => {\n const out: Record<string, EnabledResult> = {};\n for (const slot of slots) {\n out[`${slot.fieldPath}::${slot.slotId}`] = evalSlot(slot, watchedValues);\n }\n return out;\n }, [slots, watchedValues]);\n const slotResultsSig = useMemo(() => JSON.stringify(slotResults), [slotResults]);\n\n // Track previous results so we can detect enabled→disabled transitions\n // (drives field-value clearing) and last-fired fetch signatures.\n const prevResultsRef = useRef<Record<string, EnabledResult>>({});\n const lastFiredSigRef = useRef<Record<string, string>>({});\n\n useEffect(() => {\n if (slots.length === 0) return;\n\n let cancelled = false;\n const nextLoadStates: Record<string, FieldLoadState> = {\n ...fieldLoadStates,\n };\n\n // Group slot results by field path for the load-state map.\n const byField: Record<string, { field?: EnabledResult; suggestions?: EnabledResult }> = {};\n for (const slot of slots) {\n const r = slotResults[`${slot.fieldPath}::${slot.slotId}`];\n if (r == null) continue;\n byField[slot.fieldPath] ??= {};\n byField[slot.fieldPath][slot.slotId] = r;\n }\n\n for (const slot of slots) {\n const key = `${slot.fieldPath}::${slot.slotId}`;\n const r = slotResults[key];\n if (r == null) continue;\n const prev = prevResultsRef.current[key];\n\n // Field-slot only: clear value on enabled→disabled transition.\n if (slot.slotId === \"field\" && r.disabled && prev != null && !prev.disabled) {\n form.setValue(slot.fieldPath as any, \"\" as any, {\n shouldDirty: true,\n shouldTouch: true,\n });\n }\n\n // Suggestions-slot: drive the existing context_select_input fetch.\n if (slot.slotId === \"suggestions\" && resolvers?.getFieldContext) {\n // If suggestions are gated, skip the fetch and reset dedupe so\n // re-enabling re-fires.\n if (r.disabled) {\n delete lastFiredSigRef.current[slot.fieldPath];\n continue;\n }\n\n // Resolve the connection for the legacy `requires.connection`\n // (still needed to pick the right secret for the fetch).\n const watchedConnections = (\n watchedValues as {\n connector?: { connections?: { connection?: string }[] };\n }\n )?.connector?.connections;\n const required = slot.optionsDef?.requires;\n\n let connectionId: string | undefined;\n if (required?.connection) {\n const match = watchedConnections?.find((c) =>\n c?.connection?.startsWith(`${required.connection}_`),\n );\n connectionId = match?.connection;\n // No matching connection — can't fetch, even if enabledIf passed.\n if (!connectionId) continue;\n }\n\n // Per-field signature for dedupe.\n const perFieldSig = JSON.stringify({\n connectionId,\n deps: required?.fields?.map((d) => getPathValue(watchedValues, d)) ?? [],\n });\n if (lastFiredSigRef.current[slot.fieldPath] === perFieldSig) continue;\n lastFiredSigRef.current[slot.fieldPath] = perFieldSig;\n\n // Mark loading for this field's fetch.\n const existing = nextLoadStates[slot.fieldPath];\n nextLoadStates[slot.fieldPath] = {\n status: \"loading\",\n disabled: existing?.disabled ?? false,\n disabledReason: existing?.disabledReason,\n suggestionsDisabled: false,\n suggestionsDisabledReason: undefined,\n };\n\n const idKey = kind === \"search\" ? \"search_id\" : \"pipe_id\";\n\n Promise.resolve(\n resolvers.getFieldContext({\n fieldPath: slot.fieldPath,\n query: \"\",\n payload: {\n ...(watchedValues as Record<string, unknown>),\n [idKey]: pipeOrSearchId,\n },\n }),\n )\n .then((incoming: FormStore) => {\n if (cancelled) return;\n mergeStore(incoming);\n setFieldLoadStates((s) => ({\n ...s,\n [slot.fieldPath]: {\n ...(s[slot.fieldPath] ?? {\n disabled: false,\n suggestionsDisabled: false,\n }),\n status: \"ready\",\n },\n }));\n })\n .catch(() => {\n if (cancelled) return;\n setFieldLoadStates((s) => ({\n ...s,\n [slot.fieldPath]: {\n ...(s[slot.fieldPath] ?? {\n disabled: false,\n suggestionsDisabled: false,\n }),\n status: \"error\",\n },\n }));\n });\n }\n }\n\n // Reflect the latest enabledIf evaluation into fieldLoadStates so the\n // adapters and field-wrapper can render the disabled state.\n for (const fieldPath of Object.keys(byField)) {\n const { field: fieldR, suggestions: sugR } = byField[fieldPath]!;\n const prevState = nextLoadStates[fieldPath];\n nextLoadStates[fieldPath] = {\n status: prevState?.status ?? \"idle\",\n disabled: fieldR == null ? (prevState?.disabled ?? false) : fieldR.disabled,\n disabledReason: fieldR == null ? prevState?.disabledReason : fieldR.message,\n suggestionsDisabled:\n sugR == null ? (prevState?.suggestionsDisabled ?? false) : sugR.disabled,\n suggestionsDisabledReason:\n sugR == null ? prevState?.suggestionsDisabledReason : sugR.message,\n };\n }\n\n setFieldLoadStates(nextLoadStates);\n prevResultsRef.current = slotResults;\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [slotResultsSig, slots, pipeOrSearchId]);\n\n // --- Sections & fields ---\n const isSubmitted = form.formState.isSubmitted;\n const formErrors = form.formState.errors;\n\n // `watchedValues` and `formErrors` must be in the dep array: field handles\n // bake `form.getValues(path)` snapshots into `field.value` / textareaProps /\n // selectedValue, and adapters render those as controlled inputs. Without\n // these deps, the memo never refreshes on keystrokes and the controlled\n // inputs snap back to their stale snapshot — typing/selecting appears to\n // do nothing. See FieldRenderer's memo comment for the intended contract.\n const sections = useMemo(\n () =>\n buildSectionHandles(formConfig, form as any, publicKey, {\n fieldLoadStates,\n searchSecrets,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n formConfig,\n form,\n publicKey,\n fieldLoadStates,\n isSubmitted,\n searchSecrets,\n watchedValues,\n formErrors,\n ],\n );\n\n const fields = useMemo(\n () => sections.flatMap((s) => s.groups.flatMap((g) => g.fields)),\n [sections],\n );\n\n return {\n connectionsStatus,\n fieldLoadStates,\n form,\n sections,\n fields,\n reset: form.reset,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useDebouncedFn } from "./use-debounced-fn.mjs";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import useSWR from "swr";
|
|
4
|
+
import jsonata from "jsonata";
|
|
5
|
+
|
|
6
|
+
//#region src/hooks/use-jsonata-preview.ts
|
|
7
|
+
async function evalJsonata(_key, expression, input) {
|
|
8
|
+
if (!expression) return input;
|
|
9
|
+
return jsonata(expression).evaluate(input);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Returns the live preview of a JSONata expression evaluated against
|
|
13
|
+
* `jsonObject`. The expression input is debounced (400ms) so typing doesn't
|
|
14
|
+
* fire one evaluation per keystroke; SWR caches results by `(expression,
|
|
15
|
+
* input-identity)` and dedupes concurrent evaluations.
|
|
16
|
+
*/
|
|
17
|
+
function useJsonataPreview(pathValue, jsonObject) {
|
|
18
|
+
const [debounced, setDebounced] = useState(pathValue);
|
|
19
|
+
const commitDebounced = useDebouncedFn(setDebounced, 400);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
commitDebounced(pathValue);
|
|
22
|
+
}, [pathValue, commitDebounced]);
|
|
23
|
+
const { data, error, isValidating } = useSWR([
|
|
24
|
+
"jsonata-preview",
|
|
25
|
+
debounced,
|
|
26
|
+
jsonObject
|
|
27
|
+
], ([, expression, input]) => evalJsonata("", expression, input), { keepPreviousData: true });
|
|
28
|
+
const isPending = pathValue !== debounced;
|
|
29
|
+
return {
|
|
30
|
+
preview: error ? void 0 : data,
|
|
31
|
+
error: error?.message ?? null,
|
|
32
|
+
isLoading: isPending || isValidating
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { useJsonataPreview };
|
|
38
|
+
//# sourceMappingURL=use-jsonata-preview.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-jsonata-preview.mjs","names":[],"sources":["../../src/hooks/use-jsonata-preview.ts"],"sourcesContent":["import jsonata from \"jsonata\";\nimport { useEffect, useState } from \"react\";\nimport useSWR from \"swr\";\nimport { useDebouncedFn } from \"./use-debounced-fn.js\";\n\nasync function evalJsonata(_key: string, expression: string, input: unknown): Promise<unknown> {\n if (!expression) return input;\n return jsonata(expression).evaluate(input);\n}\n\n/**\n * Returns the live preview of a JSONata expression evaluated against\n * `jsonObject`. The expression input is debounced (400ms) so typing doesn't\n * fire one evaluation per keystroke; SWR caches results by `(expression,\n * input-identity)` and dedupes concurrent evaluations.\n */\nexport function useJsonataPreview(pathValue: string, jsonObject: unknown) {\n const [debounced, setDebounced] = useState(pathValue);\n const commitDebounced = useDebouncedFn(setDebounced, 400);\n\n useEffect(() => {\n commitDebounced(pathValue);\n }, [pathValue, commitDebounced]);\n\n // Identity-keyed cache — SWR can't introspect `jsonObject`, so the caller\n // is expected to pass a stable reference (which holds in practice; the\n // example payload is built once per pipe).\n const { data, error, isValidating } = useSWR<unknown, Error>(\n [\"jsonata-preview\", debounced, jsonObject] as const,\n ([, expression, input]) => evalJsonata(\"\", expression as string, input),\n { keepPreviousData: true },\n );\n\n // While the user is typing, `pathValue !== debounced` — surface that as\n // loading so the UI doesn't flash a stale preview as \"settled\".\n const isPending = pathValue !== debounced;\n\n return {\n preview: error ? undefined : data,\n error: error?.message ?? null,\n isLoading: isPending || isValidating,\n };\n}\n"],"mappings":";;;;;;AAKA,eAAe,YAAY,MAAc,YAAoB,OAAkC;AAC7F,KAAI,CAAC,WAAY,QAAO;AACxB,QAAO,QAAQ,WAAW,CAAC,SAAS,MAAM;;;;;;;;AAS5C,SAAgB,kBAAkB,WAAmB,YAAqB;CACxE,MAAM,CAAC,WAAW,gBAAgB,SAAS,UAAU;CACrD,MAAM,kBAAkB,eAAe,cAAc,IAAI;AAEzD,iBAAgB;AACd,kBAAgB,UAAU;IACzB,CAAC,WAAW,gBAAgB,CAAC;CAKhC,MAAM,EAAE,MAAM,OAAO,iBAAiB,OACpC;EAAC;EAAmB;EAAW;EAAW,GACzC,GAAG,YAAY,WAAW,YAAY,IAAI,YAAsB,MAAM,EACvE,EAAE,kBAAkB,MAAM,CAC3B;CAID,MAAM,YAAY,cAAc;AAEhC,QAAO;EACL,SAAS,QAAQ,SAAY;EAC7B,OAAO,OAAO,WAAW;EACzB,WAAW,aAAa;EACzB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/use-menu-navigation.ts
|
|
4
|
+
function useMenuNavigation({ editor, containerRef, query, items, onSelect, onClose, orientation = "vertical", autoSelectFirstItem = true }) {
|
|
5
|
+
const [selectedIndex, setSelectedIndex] = useState(autoSelectFirstItem ? 0 : -1);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const handleKeyboardNavigation = (event) => {
|
|
8
|
+
if (!items.length) return false;
|
|
9
|
+
const moveNext = () => setSelectedIndex((i) => i === -1 ? 0 : (i + 1) % items.length);
|
|
10
|
+
const movePrev = () => setSelectedIndex((i) => i === -1 ? items.length - 1 : (i - 1 + items.length) % items.length);
|
|
11
|
+
switch (event.key) {
|
|
12
|
+
case "ArrowUp":
|
|
13
|
+
if (orientation === "horizontal") return false;
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
movePrev();
|
|
16
|
+
return true;
|
|
17
|
+
case "ArrowDown":
|
|
18
|
+
if (orientation === "horizontal") return false;
|
|
19
|
+
event.preventDefault();
|
|
20
|
+
moveNext();
|
|
21
|
+
return true;
|
|
22
|
+
case "ArrowLeft":
|
|
23
|
+
if (orientation === "vertical") return false;
|
|
24
|
+
event.preventDefault();
|
|
25
|
+
movePrev();
|
|
26
|
+
return true;
|
|
27
|
+
case "ArrowRight":
|
|
28
|
+
if (orientation === "vertical") return false;
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
moveNext();
|
|
31
|
+
return true;
|
|
32
|
+
case "Tab":
|
|
33
|
+
event.preventDefault();
|
|
34
|
+
if (event.shiftKey) movePrev();
|
|
35
|
+
else moveNext();
|
|
36
|
+
return true;
|
|
37
|
+
case "Home":
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
setSelectedIndex(0);
|
|
40
|
+
return true;
|
|
41
|
+
case "End":
|
|
42
|
+
event.preventDefault();
|
|
43
|
+
setSelectedIndex(items.length - 1);
|
|
44
|
+
return true;
|
|
45
|
+
case "Enter":
|
|
46
|
+
if (event.isComposing) return false;
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
if (selectedIndex !== -1 && items[selectedIndex]) onSelect?.(items[selectedIndex]);
|
|
49
|
+
return true;
|
|
50
|
+
case "Escape":
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
onClose?.();
|
|
53
|
+
return true;
|
|
54
|
+
default: return false;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
let targetElement = null;
|
|
58
|
+
if (editor) targetElement = editor.view.dom;
|
|
59
|
+
else if (containerRef?.current) targetElement = containerRef.current;
|
|
60
|
+
if (targetElement) {
|
|
61
|
+
targetElement.addEventListener("keydown", handleKeyboardNavigation, true);
|
|
62
|
+
return () => {
|
|
63
|
+
targetElement?.removeEventListener("keydown", handleKeyboardNavigation, true);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}, [
|
|
67
|
+
editor,
|
|
68
|
+
containerRef,
|
|
69
|
+
items,
|
|
70
|
+
selectedIndex,
|
|
71
|
+
onSelect,
|
|
72
|
+
onClose,
|
|
73
|
+
orientation
|
|
74
|
+
]);
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
if (query) setSelectedIndex(autoSelectFirstItem ? 0 : -1);
|
|
77
|
+
}, [query, autoSelectFirstItem]);
|
|
78
|
+
return {
|
|
79
|
+
selectedIndex: items.length ? selectedIndex : void 0,
|
|
80
|
+
setSelectedIndex
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//#endregion
|
|
85
|
+
export { useMenuNavigation };
|
|
86
|
+
//# sourceMappingURL=use-menu-navigation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-menu-navigation.mjs","names":[],"sources":["../../src/hooks/use-menu-navigation.ts"],"sourcesContent":["import type { Editor } from \"@tiptap/react\";\nimport { type RefObject, useEffect, useState } from \"react\";\n\ntype Orientation = \"horizontal\" | \"vertical\" | \"both\";\n\ninterface MenuNavigationOptions<T> {\n editor?: Editor | null;\n containerRef?: RefObject<HTMLElement | null>;\n query?: string;\n items: T[];\n onSelect?: (item: T) => void;\n onClose?: () => void;\n orientation?: Orientation;\n autoSelectFirstItem?: boolean;\n}\n\nexport function useMenuNavigation<T>({\n editor,\n containerRef,\n query,\n items,\n onSelect,\n onClose,\n orientation = \"vertical\",\n autoSelectFirstItem = true,\n}: MenuNavigationOptions<T>) {\n const [selectedIndex, setSelectedIndex] = useState<number>(autoSelectFirstItem ? 0 : -1);\n\n useEffect(() => {\n const handleKeyboardNavigation = (event: KeyboardEvent) => {\n if (!items.length) return false;\n\n const moveNext = () => setSelectedIndex((i) => (i === -1 ? 0 : (i + 1) % items.length));\n const movePrev = () =>\n setSelectedIndex((i) =>\n i === -1 ? items.length - 1 : (i - 1 + items.length) % items.length,\n );\n\n switch (event.key) {\n case \"ArrowUp\":\n if (orientation === \"horizontal\") return false;\n event.preventDefault();\n movePrev();\n return true;\n case \"ArrowDown\":\n if (orientation === \"horizontal\") return false;\n event.preventDefault();\n moveNext();\n return true;\n case \"ArrowLeft\":\n if (orientation === \"vertical\") return false;\n event.preventDefault();\n movePrev();\n return true;\n case \"ArrowRight\":\n if (orientation === \"vertical\") return false;\n event.preventDefault();\n moveNext();\n return true;\n case \"Tab\":\n event.preventDefault();\n if (event.shiftKey) movePrev();\n else moveNext();\n return true;\n case \"Home\":\n event.preventDefault();\n setSelectedIndex(0);\n return true;\n case \"End\":\n event.preventDefault();\n setSelectedIndex(items.length - 1);\n return true;\n case \"Enter\":\n if (event.isComposing) return false;\n event.preventDefault();\n if (selectedIndex !== -1 && items[selectedIndex]) {\n onSelect?.(items[selectedIndex]);\n }\n return true;\n case \"Escape\":\n event.preventDefault();\n onClose?.();\n return true;\n default:\n return false;\n }\n };\n\n let targetElement: HTMLElement | null = null;\n\n if (editor) {\n targetElement = editor.view.dom;\n } else if (containerRef?.current) {\n targetElement = containerRef.current;\n }\n\n if (targetElement) {\n targetElement.addEventListener(\"keydown\", handleKeyboardNavigation, true);\n return () => {\n targetElement?.removeEventListener(\"keydown\", handleKeyboardNavigation, true);\n };\n }\n\n return undefined;\n }, [editor, containerRef, items, selectedIndex, onSelect, onClose, orientation]);\n\n useEffect(() => {\n if (query) {\n setSelectedIndex(autoSelectFirstItem ? 0 : -1);\n }\n }, [query, autoSelectFirstItem]);\n\n return {\n selectedIndex: items.length ? selectedIndex : undefined,\n setSelectedIndex,\n };\n}\n"],"mappings":";;;AAgBA,SAAgB,kBAAqB,EACnC,QACA,cACA,OACA,OACA,UACA,SACA,cAAc,YACd,sBAAsB,QACK;CAC3B,MAAM,CAAC,eAAe,oBAAoB,SAAiB,sBAAsB,IAAI,GAAG;AAExF,iBAAgB;EACd,MAAM,4BAA4B,UAAyB;AACzD,OAAI,CAAC,MAAM,OAAQ,QAAO;GAE1B,MAAM,iBAAiB,kBAAkB,MAAO,MAAM,KAAK,KAAK,IAAI,KAAK,MAAM,OAAQ;GACvF,MAAM,iBACJ,kBAAkB,MAChB,MAAM,KAAK,MAAM,SAAS,KAAK,IAAI,IAAI,MAAM,UAAU,MAAM,OAC9D;AAEH,WAAQ,MAAM,KAAd;IACE,KAAK;AACH,SAAI,gBAAgB,aAAc,QAAO;AACzC,WAAM,gBAAgB;AACtB,eAAU;AACV,YAAO;IACT,KAAK;AACH,SAAI,gBAAgB,aAAc,QAAO;AACzC,WAAM,gBAAgB;AACtB,eAAU;AACV,YAAO;IACT,KAAK;AACH,SAAI,gBAAgB,WAAY,QAAO;AACvC,WAAM,gBAAgB;AACtB,eAAU;AACV,YAAO;IACT,KAAK;AACH,SAAI,gBAAgB,WAAY,QAAO;AACvC,WAAM,gBAAgB;AACtB,eAAU;AACV,YAAO;IACT,KAAK;AACH,WAAM,gBAAgB;AACtB,SAAI,MAAM,SAAU,WAAU;SACzB,WAAU;AACf,YAAO;IACT,KAAK;AACH,WAAM,gBAAgB;AACtB,sBAAiB,EAAE;AACnB,YAAO;IACT,KAAK;AACH,WAAM,gBAAgB;AACtB,sBAAiB,MAAM,SAAS,EAAE;AAClC,YAAO;IACT,KAAK;AACH,SAAI,MAAM,YAAa,QAAO;AAC9B,WAAM,gBAAgB;AACtB,SAAI,kBAAkB,MAAM,MAAM,eAChC,YAAW,MAAM,eAAe;AAElC,YAAO;IACT,KAAK;AACH,WAAM,gBAAgB;AACtB,gBAAW;AACX,YAAO;IACT,QACE,QAAO;;;EAIb,IAAI,gBAAoC;AAExC,MAAI,OACF,iBAAgB,OAAO,KAAK;WACnB,cAAc,QACvB,iBAAgB,aAAa;AAG/B,MAAI,eAAe;AACjB,iBAAc,iBAAiB,WAAW,0BAA0B,KAAK;AACzE,gBAAa;AACX,mBAAe,oBAAoB,WAAW,0BAA0B,KAAK;;;IAKhF;EAAC;EAAQ;EAAc;EAAO;EAAe;EAAU;EAAS;EAAY,CAAC;AAEhF,iBAAgB;AACd,MAAI,MACF,kBAAiB,sBAAsB,IAAI,GAAG;IAE/C,CAAC,OAAO,oBAAoB,CAAC;AAEhC,QAAO;EACL,eAAe,MAAM,SAAS,gBAAgB;EAC9C;EACD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PipeCardData } from "../types/catalog-adapters.mjs";
|
|
2
|
+
import * as _$react from "react";
|
|
3
|
+
import { CatalogFilter, PipeCategory, PipeEntryWithLatestVersion, PipeId } from "@pipe0/base";
|
|
4
|
+
import * as _$_tanstack_react_table0 from "@tanstack/react-table";
|
|
5
|
+
import { ColumnFilter } from "@tanstack/react-table";
|
|
6
|
+
|
|
7
|
+
//#region src/hooks/use-pipe-catalog-table.d.ts
|
|
8
|
+
type InputFieldEntries = Record<string, PipeId[]>;
|
|
9
|
+
type OutputFieldEntries = Record<string, PipeId[]>;
|
|
10
|
+
declare function usePipeCatalogTable(config?: {
|
|
11
|
+
initialColumnFilters?: ColumnFilter[];
|
|
12
|
+
/**
|
|
13
|
+
* Optional whitelist/blacklist of pipes and providers. Memoize to avoid
|
|
14
|
+
* recomputing the table data on every render.
|
|
15
|
+
*/
|
|
16
|
+
filter?: CatalogFilter;
|
|
17
|
+
}): {
|
|
18
|
+
table: _$_tanstack_react_table0.Table<PipeEntryWithLatestVersion>;
|
|
19
|
+
cards: PipeCardData[];
|
|
20
|
+
cardsByCategory: {
|
|
21
|
+
category: PipeCategory;
|
|
22
|
+
cards: PipeCardData[];
|
|
23
|
+
}[];
|
|
24
|
+
categoryCounts: Partial<Record<PipeCategory, number>>;
|
|
25
|
+
baselineCardCount: number;
|
|
26
|
+
baselineCategoryCounts: Partial<Record<PipeCategory, number>>;
|
|
27
|
+
category: PipeCategory | null;
|
|
28
|
+
setCategory: (category: PipeCategory | null) => void;
|
|
29
|
+
globalFilterInput: string;
|
|
30
|
+
setGlobalFilterInput: _$react.Dispatch<_$react.SetStateAction<string>>;
|
|
31
|
+
addColumnFilter: (id: "inputFields" | "outputFields" | "tags" | "providers", value: string) => void;
|
|
32
|
+
removeColumnFilter: (id: "inputFields" | "outputFields" | "tags" | "providers") => void;
|
|
33
|
+
resetFilters: () => void;
|
|
34
|
+
getColumnFilterValue: (id: "inputFields" | "outputFields" | "tags" | "providers") => string;
|
|
35
|
+
sortedInputFieldEntries: [string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]][];
|
|
36
|
+
sortedOutputFieldEntries: [string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]][];
|
|
37
|
+
sortedTagEntries: [string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]][];
|
|
38
|
+
sortedProviderEntries: [string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]][];
|
|
39
|
+
pipeIdsByInputField: Record<string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]>;
|
|
40
|
+
pipeIdsByOutputField: Record<string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]>;
|
|
41
|
+
pipeIdsByProvider: Record<string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]>;
|
|
42
|
+
pipeIdsByTag: Record<string, ("prompt:run@1" | "company:newssummary:website@1" | "company:techstack:builtwith@1" | "company:websiteurl:email@1" | "company:funding:leadmagic@1" | "people:workemail:waterfall@1" | "people:email:iswork@1" | "people:name:split@1" | "people:name:join@1" | "people:validate:email:zerobounce@1" | "people:email:validate:zerobounce@2" | "people:mobilenumber:workemail:waterfall@1" | "company:overview@1" | "company:overview@2" | "json:extract@1" | "email:write@1" | "message:write@1" | "email:send:resend@1" | "email:send:gmail@1" | "message:send:slack@1" | "template:fill@1" | "contact:create:resend@1" | "people:match:role:waterfall@1" | "people:identity:amplemarket@1" | "company:identity@2" | "people:match:amplemarket@1" | "people:phone:profile:waterfall@1" | "people:personalemail:profile:waterfall@1" | "people:profile:waterfall@1" | "people:profileurl:email:waterfall@1" | "people:profileurl:name@1" | "people:email:validate:zerobounce@1" | "people:email:validate:millionverifier@1" | "people:phone:workemail:waterfall@1" | "fields:merge@1" | "field:slugify@1" | "field:domainify@1" | "website:scrape:firecrawl@1" | "website:scrapelist:firecrawl@1" | "website:extract:firecrawl@1" | "website:maplinks:firecrawl@1" | "sheet:row:append@1" | "sheet:row:expandappend@1" | "company:lookalikes:companyenrich@1" | "company:match:logodev@1" | "people:posts:crustdata@1" | "company:match:crustdata@1" | "people:profile:workemail:crustdata@1" | "people:workemail:profileurl:waterfall@1" | "people:identity:email:waterfall@1" | "http:request@1" | "company:identity@1" | "people:professionalprofile:waterfall@1" | "people:professionalprofileurl:name@1" | "people:professionalprofileurl:email:waterfall@1" | "people:mobilenumber:professionalprofile:waterfall@1")[]>;
|
|
43
|
+
};
|
|
44
|
+
type UsePipeCatalogTableReturn = ReturnType<typeof usePipeCatalogTable>;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { InputFieldEntries, OutputFieldEntries, UsePipeCatalogTableReturn, usePipeCatalogTable };
|
|
47
|
+
//# sourceMappingURL=use-pipe-catalog-table.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-pipe-catalog-table.d.mts","names":[],"sources":["../../src/hooks/use-pipe-catalog-table.ts"],"mappings":";;;;;;;KA2BY,iBAAA,GAAoB,MAAA,SAAe,MAAA;AAAA,KACnC,kBAAA,GAAqB,MAAA,SAAe,MAAA;AAAA,iBA6ChC,mBAAA,CACd,MAAA;EACE,oBAAA,GAAuB,YAAA;EAhDf;;;;EAqDR,MAAA,GAAS,aAAA;AAAA;;;;cA6HiC,YAAA;WAAqB,YAAA;EAAA;;;;;0BA/DpD,YAAA;;yCAAY,OAAA,CAAA,cAAA;+EARmC,KAAA;;;;;;;;;;;;;KAoJlD,yBAAA,GAA4B,UAAA,QAAkB,mBAAA"}
|