@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,208 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.mjs";
|
|
2
|
+
import { Button } from "../../ui/button.mjs";
|
|
3
|
+
import { Input } from "../../ui/input.mjs";
|
|
4
|
+
import { IconCheck, IconPencil, IconPlus, IconTrash } from "../../internal/icons.mjs";
|
|
5
|
+
import { useFieldError } from "../../../hooks/use-field-error.mjs";
|
|
6
|
+
import { generateRandomString } from "../../../utils/generate-random-string.mjs";
|
|
7
|
+
import { Popover, PopoverContent, PopoverTrigger } from "../../ui/popover.mjs";
|
|
8
|
+
import { SchemaEditor } from "../../internal/schema-editor/SchemaEditor.mjs";
|
|
9
|
+
import { LiquidEditor } from "../../internal/LiquidEditor/LiquidEditor.mjs";
|
|
10
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../../ui/table.mjs";
|
|
11
|
+
import { useCallback, useMemo, useState } from "react";
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
|
|
14
|
+
//#region src/components/defaults/adapters/prompt-input.tsx
|
|
15
|
+
function ChangeSchemaNameForm({ defaultName, existingNames, onSubmit, onClose }) {
|
|
16
|
+
const [inputValue, setInputValue] = useState(defaultName);
|
|
17
|
+
const trimmed = inputValue.trim();
|
|
18
|
+
const isDuplicate = trimmed !== defaultName && existingNames.includes(trimmed);
|
|
19
|
+
const isInvalid = !trimmed || isDuplicate;
|
|
20
|
+
const handleSubmit = () => {
|
|
21
|
+
if (isInvalid) return;
|
|
22
|
+
if (defaultName !== trimmed) onSubmit(trimmed);
|
|
23
|
+
onClose();
|
|
24
|
+
};
|
|
25
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
26
|
+
className: "pz:flex pz:flex-col pz:gap-1",
|
|
27
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
28
|
+
className: "pz:flex pz:items-center pz:gap-2",
|
|
29
|
+
children: [/* @__PURE__ */ jsx(Input, {
|
|
30
|
+
placeholder: "Change name…",
|
|
31
|
+
value: inputValue,
|
|
32
|
+
onChange: (e) => setInputValue(e.target.value),
|
|
33
|
+
minLength: 1,
|
|
34
|
+
"aria-invalid": isDuplicate,
|
|
35
|
+
onKeyDown: (e) => {
|
|
36
|
+
if (e.key === "Enter") {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
handleSubmit();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
42
|
+
type: "button",
|
|
43
|
+
variant: "ghost",
|
|
44
|
+
size: "icon",
|
|
45
|
+
onClick: handleSubmit,
|
|
46
|
+
disabled: isInvalid,
|
|
47
|
+
children: /* @__PURE__ */ jsx(IconCheck, {
|
|
48
|
+
width: 14,
|
|
49
|
+
height: 14
|
|
50
|
+
})
|
|
51
|
+
})]
|
|
52
|
+
}), isDuplicate && /* @__PURE__ */ jsx("span", {
|
|
53
|
+
className: "pz:text-destructive pz:text-xs pz:font-medium",
|
|
54
|
+
role: "alert",
|
|
55
|
+
children: "A schema with that name already exists."
|
|
56
|
+
})]
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Prompt editor with Tiptap rich text, @/ autocomplete, and JSON schema management.
|
|
61
|
+
* For a more customized editor, provide a custom adapter via FormProvider.
|
|
62
|
+
*/
|
|
63
|
+
const EMPTY_PROMPT = {
|
|
64
|
+
template: "",
|
|
65
|
+
json_schemas: {}
|
|
66
|
+
};
|
|
67
|
+
function PromptInputAdapter(field) {
|
|
68
|
+
const meta = field.meta;
|
|
69
|
+
const value = field.value ?? EMPTY_PROMPT;
|
|
70
|
+
const templateError = useFieldError(field.form, `${field.path}.template`);
|
|
71
|
+
const tableData = useMemo(() => Object.entries(value.json_schemas || {}), [value.json_schemas]);
|
|
72
|
+
const formRef = field.form;
|
|
73
|
+
const path = field.path;
|
|
74
|
+
const readCurrent = useCallback(() => formRef.getValues(path) ?? EMPTY_PROMPT, [formRef, path]);
|
|
75
|
+
const handleChange = useCallback((v) => field.setValue(v), [field]);
|
|
76
|
+
const handleAddSchema = useCallback((schemaName) => {
|
|
77
|
+
const current = readCurrent();
|
|
78
|
+
if (current.json_schemas?.[schemaName]) return;
|
|
79
|
+
handleChange({
|
|
80
|
+
...current,
|
|
81
|
+
json_schemas: {
|
|
82
|
+
...current.json_schemas,
|
|
83
|
+
[schemaName]: {
|
|
84
|
+
type: "object",
|
|
85
|
+
properties: {}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}, [handleChange, readCurrent]);
|
|
90
|
+
const handleChangeSchemaName = useCallback((oldName, newName) => {
|
|
91
|
+
const current = readCurrent();
|
|
92
|
+
const schemas = current.json_schemas ?? {};
|
|
93
|
+
if (!schemas[oldName] || oldName === newName || schemas[newName]) return;
|
|
94
|
+
const { [oldName]: oldSchema, ...rest } = schemas;
|
|
95
|
+
handleChange({
|
|
96
|
+
template: current.template,
|
|
97
|
+
json_schemas: {
|
|
98
|
+
...rest,
|
|
99
|
+
[newName]: oldSchema
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}, [handleChange, readCurrent]);
|
|
103
|
+
const handleDeleteSchema = useCallback((schemaName) => {
|
|
104
|
+
const current = readCurrent();
|
|
105
|
+
if (!current.json_schemas?.[schemaName]) return;
|
|
106
|
+
const { [schemaName]: _removed, ...rest } = current.json_schemas;
|
|
107
|
+
handleChange({
|
|
108
|
+
template: current.template,
|
|
109
|
+
json_schemas: rest
|
|
110
|
+
});
|
|
111
|
+
}, [handleChange, readCurrent]);
|
|
112
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
113
|
+
"data-p0": "input",
|
|
114
|
+
className: "pz:flex pz:flex-col pz:gap-3",
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ jsx("div", {
|
|
117
|
+
"aria-invalid": !!templateError,
|
|
118
|
+
className: cn("pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs", templateError && "pz:border-destructive"),
|
|
119
|
+
children: /* @__PURE__ */ jsx(LiquidEditor, {
|
|
120
|
+
value: value.template,
|
|
121
|
+
onChange: (v) => handleChange({
|
|
122
|
+
...value,
|
|
123
|
+
template: v
|
|
124
|
+
}),
|
|
125
|
+
inputFields: meta.inputFields ?? [],
|
|
126
|
+
searchSecrets: field.searchSecrets,
|
|
127
|
+
multiline: true,
|
|
128
|
+
autoGrow: true,
|
|
129
|
+
directives: (meta.supportedTags ?? ["input", "output"]).includes("output") ? ["output"] : []
|
|
130
|
+
})
|
|
131
|
+
}),
|
|
132
|
+
templateError && /* @__PURE__ */ jsx("span", {
|
|
133
|
+
className: "pz:text-destructive pz:text-xs pz:font-medium",
|
|
134
|
+
role: "alert",
|
|
135
|
+
children: templateError
|
|
136
|
+
}),
|
|
137
|
+
/* @__PURE__ */ jsxs("div", {
|
|
138
|
+
className: "pz:flex pz:flex-col pz:gap-2",
|
|
139
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
140
|
+
className: "pz:flex pz:items-center pz:justify-between",
|
|
141
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
142
|
+
className: "pz:text-sm pz:font-medium",
|
|
143
|
+
children: "JSON Schemas"
|
|
144
|
+
}), /* @__PURE__ */ jsxs(Button, {
|
|
145
|
+
type: "button",
|
|
146
|
+
variant: "ghost",
|
|
147
|
+
size: "sm",
|
|
148
|
+
onClick: () => handleAddSchema(generateRandomString(5)),
|
|
149
|
+
children: [/* @__PURE__ */ jsx(IconPlus, {
|
|
150
|
+
width: 14,
|
|
151
|
+
height: 14
|
|
152
|
+
}), " Add"]
|
|
153
|
+
})]
|
|
154
|
+
}), tableData.length > 0 && /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [/* @__PURE__ */ jsx(TableHead, { children: "Name" }), /* @__PURE__ */ jsx(TableHead, { children: "Schema" })] }) }), /* @__PURE__ */ jsx(TableBody, { children: tableData.map(([schemaName, schema]) => /* @__PURE__ */ jsxs(TableRow, { children: [/* @__PURE__ */ jsxs(TableCell, {
|
|
155
|
+
className: "pz:flex pz:items-center pz:gap-1",
|
|
156
|
+
children: [
|
|
157
|
+
/* @__PURE__ */ jsx("span", { children: schemaName }),
|
|
158
|
+
/* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsx(PopoverTrigger, { render: /* @__PURE__ */ jsx(Button, {
|
|
159
|
+
type: "button",
|
|
160
|
+
variant: "ghost",
|
|
161
|
+
size: "icon",
|
|
162
|
+
title: "Rename",
|
|
163
|
+
children: /* @__PURE__ */ jsx(IconPencil, {
|
|
164
|
+
width: 12,
|
|
165
|
+
height: 12
|
|
166
|
+
})
|
|
167
|
+
}) }), /* @__PURE__ */ jsx(PopoverContent, {
|
|
168
|
+
sideOffset: 4,
|
|
169
|
+
className: "pz:w-auto pz:p-2",
|
|
170
|
+
children: /* @__PURE__ */ jsx(ChangeSchemaNameForm, {
|
|
171
|
+
defaultName: schemaName,
|
|
172
|
+
existingNames: Object.keys(value.json_schemas || {}),
|
|
173
|
+
onSubmit: (newName) => handleChangeSchemaName(schemaName, newName),
|
|
174
|
+
onClose: () => {}
|
|
175
|
+
})
|
|
176
|
+
})] }),
|
|
177
|
+
/* @__PURE__ */ jsx(Button, {
|
|
178
|
+
type: "button",
|
|
179
|
+
variant: "ghost",
|
|
180
|
+
size: "icon",
|
|
181
|
+
onClick: () => handleDeleteSchema(schemaName),
|
|
182
|
+
title: "Delete schema",
|
|
183
|
+
children: /* @__PURE__ */ jsx(IconTrash, {
|
|
184
|
+
width: 12,
|
|
185
|
+
height: 12
|
|
186
|
+
})
|
|
187
|
+
})
|
|
188
|
+
]
|
|
189
|
+
}), /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(SchemaEditor, {
|
|
190
|
+
value: schema,
|
|
191
|
+
onChange: (newSchema) => {
|
|
192
|
+
handleChange({
|
|
193
|
+
...value,
|
|
194
|
+
json_schemas: {
|
|
195
|
+
...value.json_schemas,
|
|
196
|
+
[schemaName]: newSchema
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}) })] }, schemaName)) })] })]
|
|
201
|
+
})
|
|
202
|
+
]
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
//#endregion
|
|
207
|
+
export { PromptInputAdapter };
|
|
208
|
+
//# sourceMappingURL=prompt-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/prompt-input.tsx"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\nimport { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport type { BaseFieldProps } from \"../../../types/field-props.js\";\nimport { generateRandomString } from \"../../../utils/generate-random-string.js\";\nimport { IconCheck, IconPencil, IconPlus, IconTrash } from \"../../internal/icons.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\nimport { SchemaEditor } from \"../../internal/schema-editor/SchemaEditor.js\";\nimport { Button } from \"../../ui/button.js\";\nimport { Input } from \"../../ui/input.js\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../ui/popover.js\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"../../ui/table.js\";\n\nfunction ChangeSchemaNameForm({\n defaultName,\n existingNames,\n onSubmit,\n onClose,\n}: {\n defaultName: string;\n existingNames: string[];\n onSubmit: (newName: string) => void;\n onClose: () => void;\n}) {\n const [inputValue, setInputValue] = useState(defaultName);\n const trimmed = inputValue.trim();\n const isDuplicate = trimmed !== defaultName && existingNames.includes(trimmed);\n const isInvalid = !trimmed || isDuplicate;\n\n const handleSubmit = () => {\n if (isInvalid) return;\n if (defaultName !== trimmed) onSubmit(trimmed);\n onClose();\n };\n\n return (\n <div className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className=\"pz:flex pz:items-center pz:gap-2\">\n <Input\n placeholder=\"Change name…\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n minLength={1}\n aria-invalid={isDuplicate}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSubmit();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleSubmit}\n disabled={isInvalid}\n >\n <IconCheck width={14} height={14} />\n </Button>\n </div>\n {isDuplicate && (\n <span className=\"pz:text-destructive pz:text-xs pz:font-medium\" role=\"alert\">\n A schema with that name already exists.\n </span>\n )}\n </div>\n );\n}\n\ntype PromptValue = BaseFieldProps<\"prompt_input\">[\"value\"];\n\n/**\n * Prompt editor with Tiptap rich text, @/ autocomplete, and JSON schema management.\n * For a more customized editor, provide a custom adapter via FormProvider.\n */\nconst EMPTY_PROMPT: PromptValue = { template: \"\", json_schemas: {} };\n\nexport function PromptInputAdapter(field: FieldHandle<\"prompt_input\">) {\n const meta = field.meta;\n const value = field.value ?? EMPTY_PROMPT;\n\n const templateError = useFieldError(field.form, `${field.path}.template`);\n\n const tableData = useMemo(() => Object.entries(value.json_schemas || {}), [value.json_schemas]);\n\n // Mutation callbacks read the freshest value from RHF at call time instead\n // of closing over `value` — so they depend only on stable identifiers\n // (`field.form` and `field.path`) and don't re-create on every keystroke\n // into the prompt template.\n const formRef = field.form;\n const path = field.path;\n\n const readCurrent = useCallback(\n (): PromptValue => (formRef.getValues(path as any) as PromptValue | undefined) ?? EMPTY_PROMPT,\n [formRef, path],\n );\n\n const handleChange = useCallback((v: PromptValue) => field.setValue(v), [field]);\n\n const handleAddSchema = useCallback(\n (schemaName: string) => {\n const current = readCurrent();\n if (current.json_schemas?.[schemaName]) return;\n handleChange({\n ...current,\n json_schemas: {\n ...current.json_schemas,\n [schemaName]: { type: \"object\", properties: {} },\n },\n });\n },\n [handleChange, readCurrent],\n );\n\n const handleChangeSchemaName = useCallback(\n (oldName: string, newName: string) => {\n const current = readCurrent();\n const schemas = current.json_schemas ?? {};\n if (!schemas[oldName] || oldName === newName || schemas[newName]) return;\n const { [oldName]: oldSchema, ...rest } = schemas;\n handleChange({ template: current.template, json_schemas: { ...rest, [newName]: oldSchema } });\n },\n [handleChange, readCurrent],\n );\n\n const handleDeleteSchema = useCallback(\n (schemaName: string) => {\n const current = readCurrent();\n if (!current.json_schemas?.[schemaName]) return;\n const { [schemaName]: _removed, ...rest } = current.json_schemas;\n handleChange({ template: current.template, json_schemas: rest });\n },\n [handleChange, readCurrent],\n );\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-3\">\n <div\n aria-invalid={!!templateError}\n className={cn(\n \"pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs\",\n templateError && \"pz:border-destructive\",\n )}\n >\n <LiquidEditor\n value={value.template}\n onChange={(v) => handleChange({ ...value, template: v })}\n inputFields={meta.inputFields ?? []}\n searchSecrets={field.searchSecrets}\n multiline\n autoGrow\n directives={\n (meta.supportedTags ?? [\"input\", \"output\"]).includes(\"output\") ? [\"output\"] : []\n }\n />\n </div>\n {templateError && (\n <span className=\"pz:text-destructive pz:text-xs pz:font-medium\" role=\"alert\">\n {templateError}\n </span>\n )}\n\n {/* JSON Schemas section */}\n <div className=\"pz:flex pz:flex-col pz:gap-2\">\n <div className=\"pz:flex pz:items-center pz:justify-between\">\n <span className=\"pz:text-sm pz:font-medium\">JSON Schemas</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleAddSchema(generateRandomString(5))}\n >\n <IconPlus width={14} height={14} /> Add\n </Button>\n </div>\n {tableData.length > 0 && (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Schema</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {tableData.map(([schemaName, schema]) => (\n <TableRow key={schemaName}>\n <TableCell className=\"pz:flex pz:items-center pz:gap-1\">\n <span>{schemaName}</span>\n <Popover>\n <PopoverTrigger\n render={\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" title=\"Rename\">\n <IconPencil width={12} height={12} />\n </Button>\n }\n />\n <PopoverContent sideOffset={4} className=\"pz:w-auto pz:p-2\">\n <ChangeSchemaNameForm\n defaultName={schemaName}\n existingNames={Object.keys(value.json_schemas || {})}\n onSubmit={(newName) => handleChangeSchemaName(schemaName, newName)}\n onClose={() => {}}\n />\n </PopoverContent>\n </Popover>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => handleDeleteSchema(schemaName)}\n title=\"Delete schema\"\n >\n <IconTrash width={12} height={12} />\n </Button>\n </TableCell>\n <TableCell>\n <SchemaEditor\n value={schema}\n onChange={(newSchema) => {\n handleChange({\n ...value,\n json_schemas: {\n ...value.json_schemas,\n [schemaName]: newSchema,\n },\n });\n }}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SuggestCombobox } from "../../internal/combobox/suggest-combobox.mjs";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/defaults/adapters/providers-input.tsx
|
|
5
|
+
function ProvidersInputAdapter(field) {
|
|
6
|
+
return /* @__PURE__ */ jsx("div", {
|
|
7
|
+
"data-p0": "input",
|
|
8
|
+
children: /* @__PURE__ */ jsx(SuggestCombobox, {
|
|
9
|
+
value: (field.value ?? []).map((p) => p.provider),
|
|
10
|
+
onChange: (next) => field.setValue(next.map((provider) => ({ provider }))),
|
|
11
|
+
options: field.options,
|
|
12
|
+
maxItems: field.meta.maxItems,
|
|
13
|
+
ariaInvalid: !!field.error,
|
|
14
|
+
placeholder: "Select providers…",
|
|
15
|
+
emptyLabel: "No providers available",
|
|
16
|
+
reorderable: true
|
|
17
|
+
})
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { ProvidersInputAdapter };
|
|
23
|
+
//# sourceMappingURL=providers-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/providers-input.tsx"],"sourcesContent":["import type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\n\nexport function ProvidersInputAdapter(field: FieldHandle<\"providers_input\">) {\n const selected = (field.value ?? []).map((p: { provider: string }) => p.provider);\n\n return (\n <div data-p0=\"input\">\n <SuggestCombobox\n value={selected}\n onChange={(next) => field.setValue(next.map((provider) => ({ provider })))}\n options={field.options}\n maxItems={field.meta.maxItems}\n ariaInvalid={!!field.error}\n placeholder=\"Select providers…\"\n emptyLabel=\"No providers available\"\n reorderable\n />\n </div>\n );\n}\n"],"mappings":";;;;AAGA,SAAgB,sBAAsB,OAAuC;AAG3E,QACE,oBAAC,OAAD;EAAK,WAAQ;YACX,oBAAC,iBAAD;GACE,QALY,MAAM,SAAS,EAAE,EAAE,KAAK,MAA4B,EAAE,SAAS;GAM3E,WAAW,SAAS,MAAM,SAAS,KAAK,KAAK,cAAc,EAAE,UAAU,EAAE,CAAC;GAC1E,SAAS,MAAM;GACf,UAAU,MAAM,KAAK;GACrB,aAAa,CAAC,CAAC,MAAM;GACrB,aAAY;GACZ,YAAW;GACX;GACA;EACE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Input } from "../../ui/input.mjs";
|
|
2
|
+
import { useFieldError } from "../../../hooks/use-field-error.mjs";
|
|
3
|
+
import { Label } from "../../ui/label.mjs";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/components/defaults/adapters/range-input.tsx
|
|
7
|
+
function RangeInputAdapter(field) {
|
|
8
|
+
const fromError = useFieldError(field.form, `${field.path}.from`);
|
|
9
|
+
const toError = useFieldError(field.form, `${field.path}.to`);
|
|
10
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
11
|
+
"data-p0": "input",
|
|
12
|
+
className: "pz:flex pz:flex-col pz:gap-1",
|
|
13
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
14
|
+
className: "pz:flex pz:items-end pz:gap-2",
|
|
15
|
+
children: [
|
|
16
|
+
/* @__PURE__ */ jsxs("div", {
|
|
17
|
+
className: "pz:flex pz:flex-col pz:gap-1 pz:flex-1",
|
|
18
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
19
|
+
className: "pz:text-xs pz:text-muted-foreground",
|
|
20
|
+
children: "From"
|
|
21
|
+
}), /* @__PURE__ */ jsx(Input, {
|
|
22
|
+
type: "number",
|
|
23
|
+
value: field.from.value ?? "",
|
|
24
|
+
onChange: (e) => field.from.set(e.target.value === "" ? null : Number(e.target.value)),
|
|
25
|
+
min: field.meta.min,
|
|
26
|
+
max: field.meta.max,
|
|
27
|
+
placeholder: field.meta.unit ?? "",
|
|
28
|
+
"aria-invalid": !!fromError || !!field.error
|
|
29
|
+
})]
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ jsx("span", {
|
|
32
|
+
className: "pz:pb-2 pz:text-muted-foreground",
|
|
33
|
+
children: "–"
|
|
34
|
+
}),
|
|
35
|
+
/* @__PURE__ */ jsxs("div", {
|
|
36
|
+
className: "pz:flex pz:flex-col pz:gap-1 pz:flex-1",
|
|
37
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
38
|
+
className: "pz:text-xs pz:text-muted-foreground",
|
|
39
|
+
children: "To"
|
|
40
|
+
}), /* @__PURE__ */ jsx(Input, {
|
|
41
|
+
type: "number",
|
|
42
|
+
value: field.to.value ?? "",
|
|
43
|
+
onChange: (e) => field.to.set(e.target.value === "" ? null : Number(e.target.value)),
|
|
44
|
+
min: field.meta.min,
|
|
45
|
+
max: field.meta.max,
|
|
46
|
+
placeholder: field.meta.unit ?? "",
|
|
47
|
+
"aria-invalid": !!toError || !!field.error
|
|
48
|
+
})]
|
|
49
|
+
})
|
|
50
|
+
]
|
|
51
|
+
}), (fromError || toError) && /* @__PURE__ */ jsx("span", {
|
|
52
|
+
className: "pz:text-destructive pz:text-xs pz:font-medium",
|
|
53
|
+
role: "alert",
|
|
54
|
+
children: fromError ?? toError
|
|
55
|
+
})]
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { RangeInputAdapter };
|
|
61
|
+
//# sourceMappingURL=range-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/range-input.tsx"],"sourcesContent":["import { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { Input } from \"../../ui/input.js\";\nimport { Label } from \"../../ui/label.js\";\n\nexport function RangeInputAdapter(field: FieldHandle<\"range_input\">) {\n const fromError = useFieldError(field.form, `${field.path}.from`);\n const toError = useFieldError(field.form, `${field.path}.to`);\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className=\"pz:flex pz:items-end pz:gap-2\">\n <div className=\"pz:flex pz:flex-col pz:gap-1 pz:flex-1\">\n <Label className=\"pz:text-xs pz:text-muted-foreground\">From</Label>\n <Input\n type=\"number\"\n value={field.from.value ?? \"\"}\n onChange={(e) => field.from.set(e.target.value === \"\" ? null : Number(e.target.value))}\n min={field.meta.min}\n max={field.meta.max}\n placeholder={field.meta.unit ?? \"\"}\n aria-invalid={!!fromError || !!field.error}\n />\n </div>\n <span className=\"pz:pb-2 pz:text-muted-foreground\">–</span>\n <div className=\"pz:flex pz:flex-col pz:gap-1 pz:flex-1\">\n <Label className=\"pz:text-xs pz:text-muted-foreground\">To</Label>\n <Input\n type=\"number\"\n value={field.to.value ?? \"\"}\n onChange={(e) => field.to.set(e.target.value === \"\" ? null : Number(e.target.value))}\n min={field.meta.min}\n max={field.meta.max}\n placeholder={field.meta.unit ?? \"\"}\n aria-invalid={!!toError || !!field.error}\n />\n </div>\n </div>\n {(fromError || toError) && (\n <span className=\"pz:text-destructive pz:text-xs pz:font-medium\" role=\"alert\">\n {fromError ?? toError}\n </span>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,SAAgB,kBAAkB,OAAmC;CACnE,MAAM,YAAY,cAAc,MAAM,MAAM,GAAG,MAAM,KAAK,OAAO;CACjE,MAAM,UAAU,cAAc,MAAM,MAAM,GAAG,MAAM,KAAK,KAAK;AAE7D,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B,CACE,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAO,WAAU;gBAAsC;MAAY,GACnE,oBAAC,OAAD;MACE,MAAK;MACL,OAAO,MAAM,KAAK,SAAS;MAC3B,WAAW,MAAM,MAAM,KAAK,IAAI,EAAE,OAAO,UAAU,KAAK,OAAO,OAAO,EAAE,OAAO,MAAM,CAAC;MACtF,KAAK,MAAM,KAAK;MAChB,KAAK,MAAM,KAAK;MAChB,aAAa,MAAM,KAAK,QAAQ;MAChC,gBAAc,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM;MACrC,EACE;;IACN,oBAAC,QAAD;KAAM,WAAU;eAAmC;KAAQ;IAC3D,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MAAO,WAAU;gBAAsC;MAAU,GACjE,oBAAC,OAAD;MACE,MAAK;MACL,OAAO,MAAM,GAAG,SAAS;MACzB,WAAW,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,UAAU,KAAK,OAAO,OAAO,EAAE,OAAO,MAAM,CAAC;MACpF,KAAK,MAAM,KAAK;MAChB,KAAK,MAAM,KAAK;MAChB,aAAa,MAAM,KAAK,QAAQ;MAChC,gBAAc,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM;MACnC,EACE;;IACF;OACJ,aAAa,YACb,oBAAC,QAAD;GAAM,WAAU;GAAgD,MAAK;aAClE,aAAa;GACT,EAEL"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "../../ui/select.mjs";
|
|
2
|
+
import { WidgetStrip } from "../../../widgets/widget-strip.mjs";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region src/components/defaults/adapters/select-input.tsx
|
|
6
|
+
function OptionContent({ label, widgets }) {
|
|
7
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
8
|
+
className: "pz:flex pz:items-center pz:gap-2",
|
|
9
|
+
children: [/* @__PURE__ */ jsx(WidgetStrip, { widgets }), /* @__PURE__ */ jsx("span", { children: label })]
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function SelectInputAdapter(field) {
|
|
13
|
+
const placeholder = field.meta.placeholder ?? "— Select —";
|
|
14
|
+
const selectedOption = field.options.find((o) => o.value === field.selectedValue);
|
|
15
|
+
const hasOptions = field.options.length > 0;
|
|
16
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
17
|
+
"data-p0": "input",
|
|
18
|
+
className: "pz:flex pz:flex-col pz:gap-1",
|
|
19
|
+
children: [/* @__PURE__ */ jsxs(Select, {
|
|
20
|
+
value: field.selectedValue || void 0,
|
|
21
|
+
onValueChange: (v) => {
|
|
22
|
+
if (v === null) return;
|
|
23
|
+
field.onSelect(v);
|
|
24
|
+
},
|
|
25
|
+
name: field.path,
|
|
26
|
+
disabled: !hasOptions,
|
|
27
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
28
|
+
id: field.id,
|
|
29
|
+
"aria-invalid": !!field.error,
|
|
30
|
+
className: "pz:w-full",
|
|
31
|
+
children: /* @__PURE__ */ jsx(SelectValue, {
|
|
32
|
+
placeholder,
|
|
33
|
+
children: selectedOption ? /* @__PURE__ */ jsx(OptionContent, {
|
|
34
|
+
label: selectedOption.label,
|
|
35
|
+
widgets: selectedOption.widgets
|
|
36
|
+
}) : void 0
|
|
37
|
+
})
|
|
38
|
+
}), /* @__PURE__ */ jsx(SelectContent, { children: /* @__PURE__ */ jsx(SelectGroup, { children: field.options.map((opt) => /* @__PURE__ */ jsx(SelectItem, {
|
|
39
|
+
value: opt.value,
|
|
40
|
+
children: /* @__PURE__ */ jsx(OptionContent, {
|
|
41
|
+
label: opt.label,
|
|
42
|
+
widgets: opt.widgets
|
|
43
|
+
})
|
|
44
|
+
}, opt.value)) }) })]
|
|
45
|
+
}), !hasOptions && /* @__PURE__ */ jsx("span", {
|
|
46
|
+
className: "pz:text-xs pz:text-muted-foreground",
|
|
47
|
+
children: "No options available"
|
|
48
|
+
})]
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { SelectInputAdapter };
|
|
54
|
+
//# sourceMappingURL=select-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/select-input.tsx"],"sourcesContent":["import type { WidgetsByKind } from \"@pipe0/base\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { WidgetStrip } from \"../../../widgets/widget-strip.js\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select.js\";\n\nfunction OptionContent({ label, widgets }: { label: string; widgets?: WidgetsByKind }) {\n return (\n <span className=\"pz:flex pz:items-center pz:gap-2\">\n <WidgetStrip widgets={widgets} />\n <span>{label}</span>\n </span>\n );\n}\n\nexport function SelectInputAdapter(field: FieldHandle<\"select_input\">) {\n const placeholder = field.meta.placeholder ?? \"— Select —\";\n const selectedOption = field.options.find((o) => o.value === field.selectedValue);\n const hasOptions = field.options.length > 0;\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <Select\n value={field.selectedValue || undefined}\n onValueChange={(v) => {\n if (v === null) return;\n field.onSelect(v);\n }}\n name={field.path}\n disabled={!hasOptions}\n >\n <SelectTrigger id={field.id} aria-invalid={!!field.error} className=\"pz:w-full\">\n <SelectValue placeholder={placeholder}>\n {selectedOption ? (\n <OptionContent label={selectedOption.label} widgets={selectedOption.widgets} />\n ) : undefined}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n {field.options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n <OptionContent label={opt.label} widgets={opt.widgets} />\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n {!hasOptions && (\n <span className=\"pz:text-xs pz:text-muted-foreground\">No options available</span>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAS,cAAc,EAAE,OAAO,WAAuD;AACrF,QACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,aAAD,EAAsB,SAAW,GACjC,oBAAC,QAAD,YAAO,OAAa,EACf;;;AAIX,SAAgB,mBAAmB,OAAoC;CACrE,MAAM,cAAc,MAAM,KAAK,eAAe;CAC9C,MAAM,iBAAiB,MAAM,QAAQ,MAAM,MAAM,EAAE,UAAU,MAAM,cAAc;CACjF,MAAM,aAAa,MAAM,QAAQ,SAAS;AAE1C,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B,CACE,qBAAC,QAAD;GACE,OAAO,MAAM,iBAAiB;GAC9B,gBAAgB,MAAM;AACpB,QAAI,MAAM,KAAM;AAChB,UAAM,SAAS,EAAE;;GAEnB,MAAM,MAAM;GACZ,UAAU,CAAC;aAPb,CASE,oBAAC,eAAD;IAAe,IAAI,MAAM;IAAI,gBAAc,CAAC,CAAC,MAAM;IAAO,WAAU;cAClE,oBAAC,aAAD;KAA0B;eACvB,iBACC,oBAAC,eAAD;MAAe,OAAO,eAAe;MAAO,SAAS,eAAe;MAAW,IAC7E;KACQ;IACA,GAChB,oBAAC,eAAD,YACE,oBAAC,aAAD,YACG,MAAM,QAAQ,KAAK,QAClB,oBAAC,YAAD;IAA4B,OAAO,IAAI;cACrC,oBAAC,eAAD;KAAe,OAAO,IAAI;KAAO,SAAS,IAAI;KAAW;IAC9C,EAFI,IAAI,MAER,CACb,EACU,GACA,EACT;MACR,CAAC,cACA,oBAAC,QAAD;GAAM,WAAU;aAAsC;GAA2B,EAE/E"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.mjs";
|
|
2
|
+
import { WidgetStrip } from "../../../widgets/widget-strip.mjs";
|
|
3
|
+
import { LiquidEditor } from "../../internal/LiquidEditor/LiquidEditor.mjs";
|
|
4
|
+
import { useMemo, useState } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { ChevronDown } from "lucide-react";
|
|
7
|
+
import { autoUpdate, flip, offset, shift, size, useDismiss, useFloating, useInteractions, useTransitionStyles } from "@floating-ui/react";
|
|
8
|
+
|
|
9
|
+
//#region src/components/defaults/adapters/tagged-text-input.tsx
|
|
10
|
+
/**
|
|
11
|
+
* Adapter for `pipesTaggedTextInput`. Renders a tiptap-backed editor that
|
|
12
|
+
* supports `/` to open a unified reference picker (input fields filtered
|
|
13
|
+
* by `expectedTagType`, secrets, constants).
|
|
14
|
+
*
|
|
15
|
+
* When `meta.optionsDef` is present, the input also gains a value-suggestions
|
|
16
|
+
* popover (e.g. listing the user's existing pipe0 sheets). The popover opens
|
|
17
|
+
* on focus, hides automatically when the user is composing a `{{ tag }}`,
|
|
18
|
+
* and is gated by `meta.optionsDef.enabledIf` (sub-feature gate — the input
|
|
19
|
+
* itself stays editable in every state). Picking an option REPLACES the
|
|
20
|
+
* input value with the option's value.
|
|
21
|
+
*/
|
|
22
|
+
function TaggedTextInputAdapter(field) {
|
|
23
|
+
const meta = field.meta;
|
|
24
|
+
const hasError = !!field.error;
|
|
25
|
+
const hasSuggestions = !!meta.optionsDef;
|
|
26
|
+
const [open, setOpen] = useState(false);
|
|
27
|
+
const valueIsTag = useMemo(() => /\{\{[^}]*\}?\}?/.test(field.value ?? ""), [field.value]);
|
|
28
|
+
const hasQuery = (field.value ?? "").trim().length > 0;
|
|
29
|
+
const { refs, floatingStyles, context } = useFloating({
|
|
30
|
+
open: hasSuggestions && open && !valueIsTag,
|
|
31
|
+
onOpenChange: (next) => {
|
|
32
|
+
if (!next) setOpen(false);
|
|
33
|
+
},
|
|
34
|
+
placement: "bottom-start",
|
|
35
|
+
whileElementsMounted: autoUpdate,
|
|
36
|
+
middleware: [
|
|
37
|
+
offset(4),
|
|
38
|
+
flip({
|
|
39
|
+
mainAxis: true,
|
|
40
|
+
crossAxis: false
|
|
41
|
+
}),
|
|
42
|
+
shift(),
|
|
43
|
+
size({ apply({ elements, rects }) {
|
|
44
|
+
elements.floating.style.minWidth = `${rects.reference.width}px`;
|
|
45
|
+
elements.floating.style.maxWidth = "32rem";
|
|
46
|
+
} })
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
const { isMounted, styles: transitionStyles } = useTransitionStyles(context);
|
|
50
|
+
const { getFloatingProps } = useInteractions([useDismiss(context, {
|
|
51
|
+
outsidePress: true,
|
|
52
|
+
outsidePressEvent: "mousedown"
|
|
53
|
+
})]);
|
|
54
|
+
const visibleOptions = useMemo(() => {
|
|
55
|
+
const q = (field.value ?? "").trim().toLowerCase();
|
|
56
|
+
if (!q) return field.options;
|
|
57
|
+
return field.options.filter((o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q));
|
|
58
|
+
}, [field.options, field.value]);
|
|
59
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
60
|
+
"data-p0": "input",
|
|
61
|
+
className: "pz:flex pz:flex-col pz:gap-1",
|
|
62
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
63
|
+
ref: refs.setReference,
|
|
64
|
+
className: cn("pz:flex pz:rounded-lg pz:border pz:border-input pz:bg-transparent", meta.multiline ? "pz:items-start" : "pz:items-center", hasError && "pz:border-destructive/60"),
|
|
65
|
+
"aria-invalid": hasError || void 0,
|
|
66
|
+
onFocusCapture: () => {
|
|
67
|
+
if (hasSuggestions) setOpen(true);
|
|
68
|
+
},
|
|
69
|
+
onBlurCapture: (e) => {
|
|
70
|
+
const next = e.relatedTarget;
|
|
71
|
+
if (next && e.currentTarget.contains(next)) return;
|
|
72
|
+
if (next && document.querySelector("[data-p0='tagged-suggestions']")?.contains(next)) return;
|
|
73
|
+
setOpen(false);
|
|
74
|
+
},
|
|
75
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
76
|
+
className: "pz:flex-1 pz:min-w-0",
|
|
77
|
+
children: /* @__PURE__ */ jsx(LiquidEditor, {
|
|
78
|
+
value: field.value ?? "",
|
|
79
|
+
onChange: (v) => field.setValue(v),
|
|
80
|
+
inputFields: meta.inputFields ?? [],
|
|
81
|
+
searchSecrets: field.searchSecrets,
|
|
82
|
+
placeholder: meta.placeholder,
|
|
83
|
+
multiline: meta.multiline,
|
|
84
|
+
expectedFieldType: meta.expectedTagType,
|
|
85
|
+
directives: []
|
|
86
|
+
})
|
|
87
|
+
}), hasSuggestions && /* @__PURE__ */ jsx("div", {
|
|
88
|
+
className: cn("pz:flex pz:items-center pz:gap-1 pz:pr-2 pz:text-muted-foreground", meta.multiline && "pz:pt-1"),
|
|
89
|
+
children: /* @__PURE__ */ jsx(ChevronDown, {
|
|
90
|
+
className: "pz:size-4 pz:pointer-events-none",
|
|
91
|
+
"aria-hidden": "true"
|
|
92
|
+
})
|
|
93
|
+
})]
|
|
94
|
+
}), hasSuggestions && isMounted && /* @__PURE__ */ jsxs("div", {
|
|
95
|
+
ref: refs.setFloating,
|
|
96
|
+
"data-p0": "tagged-suggestions",
|
|
97
|
+
style: {
|
|
98
|
+
...floatingStyles,
|
|
99
|
+
...transitionStyles,
|
|
100
|
+
zIndex: 50
|
|
101
|
+
},
|
|
102
|
+
...getFloatingProps({ onMouseDown: (e) => e.preventDefault() }),
|
|
103
|
+
className: "pz:relative pz:rounded-lg pz:border pz:border-input pz:bg-popover pz:text-popover-foreground pz:shadow-md pz:overflow-hidden",
|
|
104
|
+
children: [field.pending && visibleOptions.length > 0 && /* @__PURE__ */ jsx("span", {
|
|
105
|
+
"aria-label": "Loading",
|
|
106
|
+
className: "pz:absolute pz:right-2 pz:top-2 pz:z-10 pz:inline-block pz:h-3 pz:w-3 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground"
|
|
107
|
+
}), /* @__PURE__ */ jsx(SuggestionsBody, {
|
|
108
|
+
suggestionsDisabled: field.suggestionsDisabled,
|
|
109
|
+
reason: field.suggestionsDisabledReason,
|
|
110
|
+
pending: field.pending,
|
|
111
|
+
options: visibleOptions,
|
|
112
|
+
hasQuery,
|
|
113
|
+
onPick: (value) => {
|
|
114
|
+
field.setValue(value);
|
|
115
|
+
setOpen(false);
|
|
116
|
+
}
|
|
117
|
+
})]
|
|
118
|
+
})]
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function SuggestionsBody({ suggestionsDisabled, reason, pending, options, hasQuery, onPick }) {
|
|
122
|
+
if (suggestionsDisabled) return /* @__PURE__ */ jsx("div", {
|
|
123
|
+
className: "pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground",
|
|
124
|
+
children: reason ?? "Suggestions unavailable."
|
|
125
|
+
});
|
|
126
|
+
if (pending && options.length === 0) return /* @__PURE__ */ jsx("div", {
|
|
127
|
+
role: "status",
|
|
128
|
+
"aria-label": "Loading",
|
|
129
|
+
className: "pz:flex pz:items-center pz:justify-center pz:py-6",
|
|
130
|
+
children: /* @__PURE__ */ jsx("span", { className: "pz:inline-block pz:h-5 pz:w-5 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground" })
|
|
131
|
+
});
|
|
132
|
+
if (options.length === 0) return /* @__PURE__ */ jsx("div", {
|
|
133
|
+
className: "pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground",
|
|
134
|
+
children: hasQuery ? "No matches" : "No options available"
|
|
135
|
+
});
|
|
136
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
137
|
+
className: "pz:flex pz:flex-col pz:gap-0.5 pz:p-1 pz:transition-opacity",
|
|
138
|
+
style: pending ? {
|
|
139
|
+
opacity: .5,
|
|
140
|
+
pointerEvents: "none"
|
|
141
|
+
} : void 0,
|
|
142
|
+
children: options.map((opt) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
|
|
143
|
+
type: "button",
|
|
144
|
+
role: "option",
|
|
145
|
+
className: "pz:flex pz:w-full pz:items-center pz:gap-2 pz:rounded-sm pz:px-2 pz:py-1.5 pz:text-sm pz:text-left pz:cursor-pointer pz:hover:bg-accent pz:hover:text-accent-foreground",
|
|
146
|
+
onClick: () => onPick(opt.value),
|
|
147
|
+
children: [/* @__PURE__ */ jsx(WidgetStrip, { widgets: opt.widgets }), /* @__PURE__ */ jsx("span", { children: opt.label })]
|
|
148
|
+
}) }, opt.value))
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
//#endregion
|
|
153
|
+
export { TaggedTextInputAdapter };
|
|
154
|
+
//# sourceMappingURL=tagged-text-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagged-text-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/tagged-text-input.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n offset,\n shift,\n size,\n useDismiss,\n useFloating,\n useInteractions,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport type { StoreOption, TaggedTextMeta } from \"@pipe0/base\";\nimport { ChevronDown } from \"lucide-react\";\nimport { useMemo, useState } from \"react\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { WidgetStrip } from \"../../../widgets/widget-strip.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\n\n/**\n * Adapter for `pipesTaggedTextInput`. Renders a tiptap-backed editor that\n * supports `/` to open a unified reference picker (input fields filtered\n * by `expectedTagType`, secrets, constants).\n *\n * When `meta.optionsDef` is present, the input also gains a value-suggestions\n * popover (e.g. listing the user's existing pipe0 sheets). The popover opens\n * on focus, hides automatically when the user is composing a `{{ tag }}`,\n * and is gated by `meta.optionsDef.enabledIf` (sub-feature gate — the input\n * itself stays editable in every state). Picking an option REPLACES the\n * input value with the option's value.\n */\nexport function TaggedTextInputAdapter(field: FieldHandle<\"tagged_text_input\">) {\n const meta = field.meta as TaggedTextMeta;\n const hasError = !!field.error;\n const hasSuggestions = !!meta.optionsDef;\n\n const [open, setOpen] = useState(false);\n\n // Hide the popover whenever the user is composing a `{{ tag }}` — the\n // LiquidEditor SuggestionMenu owns that interaction.\n const valueIsTag = useMemo(() => /\\{\\{[^}]*\\}?\\}?/.test(field.value ?? \"\"), [field.value]);\n\n const hasQuery = (field.value ?? \"\").trim().length > 0;\n\n const popoverShow = hasSuggestions && open && !valueIsTag;\n\n // Floating UI reads positioning straight from the wrapper element via\n // `refs.setReference`; `whileElementsMounted: autoUpdate` subscribes to the\n // ancestor scroll/resize that actually matters (no global window listener,\n // no React state for the rect).\n const { refs, floatingStyles, context } = useFloating({\n open: popoverShow,\n onOpenChange: (next) => {\n if (!next) setOpen(false);\n },\n placement: \"bottom-start\",\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(4),\n flip({ mainAxis: true, crossAxis: false }),\n shift(),\n size({\n apply({ elements, rects }) {\n elements.floating.style.minWidth = `${rects.reference.width}px`;\n elements.floating.style.maxWidth = \"32rem\";\n },\n }),\n ],\n });\n\n const { isMounted, styles: transitionStyles } = useTransitionStyles(context);\n const dismiss = useDismiss(context, {\n outsidePress: true,\n outsidePressEvent: \"mousedown\",\n });\n const { getFloatingProps } = useInteractions([dismiss]);\n\n // Filter options client-side by current input text. Empty input → all options.\n const visibleOptions = useMemo(() => {\n const q = (field.value ?? \"\").trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(\n (o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q),\n );\n }, [field.options, field.value]);\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div\n ref={refs.setReference}\n className={cn(\n \"pz:flex pz:rounded-lg pz:border pz:border-input pz:bg-transparent\",\n meta.multiline ? \"pz:items-start\" : \"pz:items-center\",\n hasError && \"pz:border-destructive/60\",\n )}\n aria-invalid={hasError || undefined}\n onFocusCapture={() => {\n if (hasSuggestions) setOpen(true);\n }}\n onBlurCapture={(e) => {\n // Only close when focus leaves both the wrapper AND the popover.\n const next = e.relatedTarget as Node | null;\n if (next && e.currentTarget.contains(next)) return;\n if (next && document.querySelector(\"[data-p0='tagged-suggestions']\")?.contains(next)) {\n return;\n }\n setOpen(false);\n }}\n >\n <div className=\"pz:flex-1 pz:min-w-0\">\n <LiquidEditor\n value={field.value ?? \"\"}\n onChange={(v) => field.setValue(v)}\n inputFields={meta.inputFields ?? []}\n searchSecrets={field.searchSecrets}\n placeholder={meta.placeholder}\n multiline={meta.multiline}\n expectedFieldType={meta.expectedTagType}\n directives={[]}\n />\n </div>\n {hasSuggestions && (\n <div\n className={cn(\n \"pz:flex pz:items-center pz:gap-1 pz:pr-2 pz:text-muted-foreground\",\n meta.multiline && \"pz:pt-1\",\n )}\n >\n <ChevronDown className=\"pz:size-4 pz:pointer-events-none\" aria-hidden=\"true\" />\n </div>\n )}\n </div>\n\n {hasSuggestions && isMounted && (\n <div\n ref={refs.setFloating}\n data-p0=\"tagged-suggestions\"\n style={{ ...floatingStyles, ...transitionStyles, zIndex: 50 }}\n {...getFloatingProps({\n // Prevent stealing focus from the editor when the user clicks an option.\n onMouseDown: (e) => e.preventDefault(),\n })}\n className=\"pz:relative pz:rounded-lg pz:border pz:border-input pz:bg-popover pz:text-popover-foreground pz:shadow-md pz:overflow-hidden\"\n >\n {field.pending && visibleOptions.length > 0 && (\n // biome-ignore lint/a11y/useAriaPropsSupportedByRole: not relevant\n <span\n aria-label=\"Loading\"\n className=\"pz:absolute pz:right-2 pz:top-2 pz:z-10 pz:inline-block pz:h-3 pz:w-3 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\"\n />\n )}\n <SuggestionsBody\n suggestionsDisabled={field.suggestionsDisabled}\n reason={field.suggestionsDisabledReason}\n pending={field.pending}\n options={visibleOptions}\n hasQuery={hasQuery}\n onPick={(value) => {\n field.setValue(value);\n setOpen(false);\n }}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction SuggestionsBody({\n suggestionsDisabled,\n reason,\n pending,\n options,\n hasQuery,\n onPick,\n}: {\n suggestionsDisabled: boolean;\n reason?: string;\n pending: boolean;\n options: StoreOption[];\n hasQuery: boolean;\n onPick: (value: string) => void;\n}) {\n if (suggestionsDisabled) {\n return (\n <div className=\"pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground\">\n {reason ?? \"Suggestions unavailable.\"}\n </div>\n );\n }\n if (pending && options.length === 0) {\n // Initial load — render a visible spinner so the popover has feedback.\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className=\"pz:flex pz:items-center pz:justify-center pz:py-6\"\n >\n <span className=\"pz:inline-block pz:h-5 pz:w-5 pz:animate-spin pz:rounded-full pz:border-2 pz:border-muted-foreground/30 pz:border-t-muted-foreground\" />\n </div>\n );\n }\n if (options.length === 0) {\n return (\n <div className=\"pz:px-3 pz:py-2 pz:text-xs pz:text-muted-foreground\">\n {hasQuery ? \"No matches\" : \"No options available\"}\n </div>\n );\n }\n return (\n <ul\n className=\"pz:flex pz:flex-col pz:gap-0.5 pz:p-1 pz:transition-opacity\"\n style={pending ? { opacity: 0.5, pointerEvents: \"none\" } : undefined}\n >\n {options.map((opt) => (\n <li key={opt.value}>\n <button\n type=\"button\"\n role=\"option\"\n className=\"pz:flex pz:w-full pz:items-center pz:gap-2 pz:rounded-sm pz:px-2 pz:py-1.5 pz:text-sm pz:text-left pz:cursor-pointer pz:hover:bg-accent pz:hover:text-accent-foreground\"\n onClick={() => onPick(opt.value)}\n >\n <WidgetStrip widgets={opt.widgets} />\n <span>{opt.label}</span>\n </button>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.mjs";
|
|
2
|
+
import { LiquidEditor } from "../../internal/LiquidEditor/LiquidEditor.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region src/components/defaults/adapters/template-input.tsx
|
|
6
|
+
/**
|
|
7
|
+
* Template editor with Liquid syntax support — `/` opens a unified
|
|
8
|
+
* reference picker (input fields, secrets, constants). Templates cannot
|
|
9
|
+
* declare outputs, so the directive picker is disabled.
|
|
10
|
+
*/
|
|
11
|
+
function TemplateInputAdapter(field) {
|
|
12
|
+
const meta = field.meta;
|
|
13
|
+
const hasError = !!field.error;
|
|
14
|
+
return /* @__PURE__ */ jsx("div", {
|
|
15
|
+
"data-p0": "input",
|
|
16
|
+
className: "pz:flex pz:flex-col pz:gap-1",
|
|
17
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
18
|
+
className: cn("pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs", hasError && "pz:border-destructive/60"),
|
|
19
|
+
"aria-invalid": hasError || void 0,
|
|
20
|
+
children: /* @__PURE__ */ jsx(LiquidEditor, {
|
|
21
|
+
value: field.value ?? "",
|
|
22
|
+
onChange: (v) => field.setValue(v),
|
|
23
|
+
inputFields: meta.inputFields ?? [],
|
|
24
|
+
searchSecrets: field.searchSecrets,
|
|
25
|
+
multiline: true,
|
|
26
|
+
directives: []
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
export { TemplateInputAdapter };
|
|
34
|
+
//# sourceMappingURL=template-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/template-input.tsx"],"sourcesContent":["import type { TemplateInputMeta } from \"@pipe0/base\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\n\n/**\n * Template editor with Liquid syntax support — `/` opens a unified\n * reference picker (input fields, secrets, constants). Templates cannot\n * declare outputs, so the directive picker is disabled.\n */\nexport function TemplateInputAdapter(field: FieldHandle<\"template_input\">) {\n const meta = field.meta as TemplateInputMeta;\n const hasError = !!field.error;\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div\n className={cn(\n \"pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:shadow-xs\",\n hasError && \"pz:border-destructive/60\",\n )}\n aria-invalid={hasError || undefined}\n >\n <LiquidEditor\n value={field.value ?? \"\"}\n onChange={(v) => field.setValue(v)}\n inputFields={meta.inputFields ?? []}\n searchSecrets={field.searchSecrets}\n multiline\n directives={[]}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,qBAAqB,OAAsC;CACzE,MAAM,OAAO,MAAM;CACnB,MAAM,WAAW,CAAC,CAAC,MAAM;AAEzB,QACE,oBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAC7B,oBAAC,OAAD;GACE,WAAW,GACT,0EACA,YAAY,2BACb;GACD,gBAAc,YAAY;aAE1B,oBAAC,cAAD;IACE,OAAO,MAAM,SAAS;IACtB,WAAW,MAAM,MAAM,SAAS,EAAE;IAClC,aAAa,KAAK,eAAe,EAAE;IACnC,eAAe,MAAM;IACrB;IACA,YAAY,EAAE;IACd;GACE;EACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Input } from "../../ui/input.mjs";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/defaults/adapters/text-input.tsx
|
|
5
|
+
function TextInputAdapter(field) {
|
|
6
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
7
|
+
...field.inputProps,
|
|
8
|
+
"data-p0": "input",
|
|
9
|
+
"aria-invalid": !!field.error,
|
|
10
|
+
maxLength: field.meta.maxLength,
|
|
11
|
+
minLength: field.meta.minLength,
|
|
12
|
+
pattern: field.meta.pattern
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { TextInputAdapter };
|
|
18
|
+
//# sourceMappingURL=text-input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/text-input.tsx"],"sourcesContent":["import type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport function TextInputAdapter(field: FieldHandle<\"text_input\">) {\n return (\n <Input\n {...field.inputProps}\n data-p0=\"input\"\n aria-invalid={!!field.error}\n maxLength={field.meta.maxLength}\n minLength={field.meta.minLength}\n pattern={field.meta.pattern}\n />\n );\n}\n"],"mappings":";;;;AAGA,SAAgB,iBAAiB,OAAkC;AACjE,QACE,oBAAC,OAAD;EACE,GAAI,MAAM;EACV,WAAQ;EACR,gBAAc,CAAC,CAAC,MAAM;EACtB,WAAW,MAAM,KAAK;EACtB,WAAW,MAAM,KAAK;EACtB,SAAS,MAAM,KAAK;EACpB"}
|