@pipe0/react 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +14 -3
  3. package/dist/components/compound/pipe-catalog/card.d.mts +1 -0
  4. package/dist/components/compound/pipe-catalog/card.d.mts.map +1 -1
  5. package/dist/components/compound/pipe-catalog/card.mjs +3 -1
  6. package/dist/components/compound/pipe-catalog/card.mjs.map +1 -1
  7. package/dist/components/compound/pipe-catalog/category-filter.d.mts +4 -0
  8. package/dist/components/compound/pipe-catalog/category-filter.d.mts.map +1 -1
  9. package/dist/components/compound/pipe-catalog/category-filter.mjs +11 -1
  10. package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -1
  11. package/dist/components/compound/pipe-catalog/column-filter.d.mts +2 -0
  12. package/dist/components/compound/pipe-catalog/column-filter.d.mts.map +1 -1
  13. package/dist/components/compound/pipe-catalog/column-filter.mjs +6 -0
  14. package/dist/components/compound/pipe-catalog/column-filter.mjs.map +1 -1
  15. package/dist/components/compound/pipe-catalog/list.d.mts +2 -0
  16. package/dist/components/compound/pipe-catalog/list.d.mts.map +1 -1
  17. package/dist/components/compound/pipe-catalog/list.mjs +5 -1
  18. package/dist/components/compound/pipe-catalog/list.mjs.map +1 -1
  19. package/dist/components/compound/pipe-catalog/search-filter.d.mts +1 -0
  20. package/dist/components/compound/pipe-catalog/search-filter.d.mts.map +1 -1
  21. package/dist/components/compound/pipe-catalog/search-filter.mjs +2 -0
  22. package/dist/components/compound/pipe-catalog/search-filter.mjs.map +1 -1
  23. package/dist/components/compound/pipe-form/content.d.mts +3 -1
  24. package/dist/components/compound/pipe-form/content.d.mts.map +1 -1
  25. package/dist/components/compound/pipe-form/content.mjs +8 -2
  26. package/dist/components/compound/pipe-form/content.mjs.map +1 -1
  27. package/dist/components/compound/pipe-form/errors.d.mts +4 -0
  28. package/dist/components/compound/pipe-form/errors.d.mts.map +1 -1
  29. package/dist/components/compound/pipe-form/errors.mjs +9 -1
  30. package/dist/components/compound/pipe-form/errors.mjs.map +1 -1
  31. package/dist/components/compound/search-catalog/card.d.mts +1 -0
  32. package/dist/components/compound/search-catalog/card.d.mts.map +1 -1
  33. package/dist/components/compound/search-catalog/card.mjs +3 -1
  34. package/dist/components/compound/search-catalog/card.mjs.map +1 -1
  35. package/dist/components/compound/search-catalog/category-filter.d.mts +4 -0
  36. package/dist/components/compound/search-catalog/category-filter.d.mts.map +1 -1
  37. package/dist/components/compound/search-catalog/category-filter.mjs +11 -1
  38. package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -1
  39. package/dist/components/compound/search-catalog/column-filter.d.mts +2 -0
  40. package/dist/components/compound/search-catalog/column-filter.d.mts.map +1 -1
  41. package/dist/components/compound/search-catalog/column-filter.mjs +6 -0
  42. package/dist/components/compound/search-catalog/column-filter.mjs.map +1 -1
  43. package/dist/components/compound/search-catalog/list.d.mts +2 -0
  44. package/dist/components/compound/search-catalog/list.d.mts.map +1 -1
  45. package/dist/components/compound/search-catalog/list.mjs +5 -1
  46. package/dist/components/compound/search-catalog/list.mjs.map +1 -1
  47. package/dist/components/compound/search-catalog/search-filter.d.mts +1 -0
  48. package/dist/components/compound/search-catalog/search-filter.d.mts.map +1 -1
  49. package/dist/components/compound/search-catalog/search-filter.mjs +2 -0
  50. package/dist/components/compound/search-catalog/search-filter.mjs.map +1 -1
  51. package/dist/components/compound/search-form/content.d.mts +3 -1
  52. package/dist/components/compound/search-form/content.d.mts.map +1 -1
  53. package/dist/components/compound/search-form/content.mjs +8 -2
  54. package/dist/components/compound/search-form/content.mjs.map +1 -1
  55. package/dist/components/compound/search-form/errors.d.mts +4 -0
  56. package/dist/components/compound/search-form/errors.d.mts.map +1 -1
  57. package/dist/components/compound/search-form/errors.mjs +9 -1
  58. package/dist/components/compound/search-form/errors.mjs.map +1 -1
  59. package/dist/components/compound/searches-catalog/card.d.mts +1 -0
  60. package/dist/components/compound/searches-catalog/card.d.mts.map +1 -1
  61. package/dist/components/compound/searches-catalog/card.mjs +3 -1
  62. package/dist/components/compound/searches-catalog/card.mjs.map +1 -1
  63. package/dist/components/compound/searches-catalog/category-filter.d.mts +4 -0
  64. package/dist/components/compound/searches-catalog/category-filter.d.mts.map +1 -1
  65. package/dist/components/compound/searches-catalog/category-filter.mjs +11 -1
  66. package/dist/components/compound/searches-catalog/category-filter.mjs.map +1 -1
  67. package/dist/components/compound/searches-catalog/column-filter.d.mts +2 -0
  68. package/dist/components/compound/searches-catalog/column-filter.d.mts.map +1 -1
  69. package/dist/components/compound/searches-catalog/column-filter.mjs +6 -0
  70. package/dist/components/compound/searches-catalog/column-filter.mjs.map +1 -1
  71. package/dist/components/compound/searches-catalog/list.d.mts +2 -0
  72. package/dist/components/compound/searches-catalog/list.d.mts.map +1 -1
  73. package/dist/components/compound/searches-catalog/list.mjs +5 -1
  74. package/dist/components/compound/searches-catalog/list.mjs.map +1 -1
  75. package/dist/components/compound/searches-catalog/search-filter.d.mts +1 -0
  76. package/dist/components/compound/searches-catalog/search-filter.d.mts.map +1 -1
  77. package/dist/components/compound/searches-catalog/search-filter.mjs +2 -0
  78. package/dist/components/compound/searches-catalog/search-filter.mjs.map +1 -1
  79. package/dist/components/defaults/adapters/connector-input.mjs +1 -0
  80. package/dist/components/defaults/adapters/connector-input.mjs.map +1 -1
  81. package/dist/components/defaults/adapters/providers-input.mjs +32 -24
  82. package/dist/components/defaults/adapters/providers-input.mjs.map +1 -1
  83. package/dist/components/defaults/catalog/layout.mjs +1 -1
  84. package/dist/components/defaults/catalog/layout.mjs.map +1 -1
  85. package/dist/components/defaults/layout/field-wrapper.d.mts +1 -0
  86. package/dist/components/defaults/layout/field-wrapper.d.mts.map +1 -1
  87. package/dist/components/defaults/layout/field-wrapper.mjs +2 -0
  88. package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -1
  89. package/dist/components/defaults/layout/group.d.mts +3 -0
  90. package/dist/components/defaults/layout/group.d.mts.map +1 -1
  91. package/dist/components/defaults/layout/group.mjs +10 -3
  92. package/dist/components/defaults/layout/group.mjs.map +1 -1
  93. package/dist/components/defaults/layout/section.d.mts +2 -1
  94. package/dist/components/defaults/layout/section.d.mts.map +1 -1
  95. package/dist/components/defaults/layout/section.mjs +6 -2
  96. package/dist/components/defaults/layout/section.mjs.map +1 -1
  97. package/dist/components/ui/button.d.mts +1 -1
  98. package/dist/context/catalog-config-context.d.mts +0 -10
  99. package/dist/context/catalog-config-context.d.mts.map +1 -1
  100. package/dist/context/catalog-config-context.mjs +0 -10
  101. package/dist/context/catalog-config-context.mjs.map +1 -1
  102. package/dist/index.mjs +1 -1
  103. package/dist/styles/pipe0-form.css +0 -55
  104. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"column-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/column-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport {\n DefaultFilterSelect,\n type FilterSelectOption,\n} from \"../../defaults/catalog/filter-select.js\";\n\nexport type SearchColumnFilterId = \"outputFields\" | \"providers\" | \"tags\";\n\n/**\n * Render-prop state shared by every specific column filter component\n * (output/provider/tag) and the generic `<SearchCatalogColumnFilter>`.\n */\nexport interface ColumnFilterState {\n value: string;\n isActive: boolean;\n}\n\nexport interface SearchCatalogColumnFilterProps\n extends useRender.ComponentProps<\"div\", ColumnFilterState> {\n id: SearchColumnFilterId;\n placeholder?: ReactNode;\n options?: ReadonlyArray<FilterSelectOption>;\n}\n\nfunction getDefaultOptions(\n id: SearchColumnFilterId,\n ctx: ReturnType<typeof useSearchCatalogContext>,\n): FilterSelectOption[] {\n let entries: ReadonlyArray<readonly [string, unknown]> = [];\n switch (id) {\n case \"outputFields\":\n entries = ctx.sortedOutputFieldEntries;\n break;\n case \"providers\":\n entries = ctx.sortedProviderEntries;\n break;\n case \"tags\":\n entries = ctx.sortedTagEntries;\n break;\n }\n return entries.map(([name]) => ({ label: name, value: name }));\n}\n\n/**\n * Generic column-filter escape hatch. For built-in filters prefer the specific\n * components: `<SearchCatalogOutputFieldFilter>`, `<SearchCatalogProviderFilter>`,\n * `<SearchCatalogTagFilter>`.\n */\nexport function SearchCatalogColumnFilter({\n id,\n placeholder,\n options,\n className,\n render,\n ...props\n}: SearchCatalogColumnFilterProps) {\n const ctx = useSearchCatalogContext();\n const value = ctx.getColumnFilterValue(id) || \"\";\n const resolvedOptions = options ?? getDefaultOptions(id, ctx);\n const setValue = (v: string | null) => {\n if (v == null) ctx.removeColumnFilter(id);\n else ctx.addColumnFilter(id, v);\n };\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { value, isActive: !!value },\n props: mergeProps<\"div\">(\n {\n className,\n ...({ \"data-p0\": `catalog-column-filter-${id}` } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (render) return element;\n\n return (\n <DefaultFilterSelect\n placeholder={placeholder}\n value={value}\n onChange={setValue}\n options={resolvedOptions}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;AA2BA,SAAS,kBACP,IACA,KACsB;CACtB,IAAI,UAAqD,EAAE;AAC3D,SAAQ,IAAR;EACE,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;;AAEJ,QAAO,QAAQ,KAAK,CAAC,WAAW;EAAE,OAAO;EAAM,OAAO;EAAM,EAAE;;;;;;;AAQhE,SAAgB,0BAA0B,EACxC,IACA,aACA,SACA,WACA,QACA,GAAG,SAC8B;CACjC,MAAM,MAAM,yBAAyB;CACrC,MAAM,QAAQ,IAAI,qBAAqB,GAAG,IAAI;CAC9C,MAAM,kBAAkB,WAAW,kBAAkB,IAAI,IAAI;CAC7D,MAAM,YAAY,MAAqB;AACrC,MAAI,KAAK,KAAM,KAAI,mBAAmB,GAAG;MACpC,KAAI,gBAAgB,IAAI,EAAE;;CAGjC,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO,UAAU,CAAC,CAAC;GAAO;EACnC,OAAO,WACL;GACE;GACM,WAAW,yBAAyB;GAC3C,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,oBAAC,qBAAD;EACe;EACN;EACP,UAAU;EACV,SAAS;EACE;EACX"}
1
+ {"version":3,"file":"column-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/column-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport {\n DefaultFilterSelect,\n type FilterSelectOption,\n} from \"../../defaults/catalog/filter-select.js\";\n\nexport type SearchColumnFilterId = \"outputFields\" | \"providers\" | \"tags\";\n\n/**\n * Render-prop state shared by every specific column filter component\n * (output/provider/tag) and the generic `<SearchCatalogColumnFilter>`.\n */\nexport interface ColumnFilterState {\n value: string;\n setValue: (value: string | null) => void;\n options: ReadonlyArray<FilterSelectOption>;\n isActive: boolean;\n}\n\nexport interface SearchCatalogColumnFilterProps\n extends useRender.ComponentProps<\"div\", ColumnFilterState> {\n id: SearchColumnFilterId;\n placeholder?: ReactNode;\n options?: ReadonlyArray<FilterSelectOption>;\n}\n\nfunction getDefaultOptions(\n id: SearchColumnFilterId,\n ctx: ReturnType<typeof useSearchCatalogContext>,\n): FilterSelectOption[] {\n let entries: ReadonlyArray<readonly [string, unknown]> = [];\n switch (id) {\n case \"outputFields\":\n entries = ctx.sortedOutputFieldEntries;\n break;\n case \"providers\":\n entries = ctx.sortedProviderEntries;\n break;\n case \"tags\":\n entries = ctx.sortedTagEntries;\n break;\n }\n return entries.map(([name]) => ({ label: name, value: name }));\n}\n\n/**\n * Generic column-filter escape hatch. For built-in filters prefer the specific\n * components: `<SearchCatalogOutputFieldFilter>`, `<SearchCatalogProviderFilter>`,\n * `<SearchCatalogTagFilter>`.\n */\nexport function SearchCatalogColumnFilter({\n id,\n placeholder,\n options,\n className,\n render,\n ...props\n}: SearchCatalogColumnFilterProps) {\n const ctx = useSearchCatalogContext();\n const value = ctx.getColumnFilterValue(id) || \"\";\n const resolvedOptions = options ?? getDefaultOptions(id, ctx);\n const setValue = (v: string | null) => {\n if (v == null) ctx.removeColumnFilter(id);\n else ctx.addColumnFilter(id, v);\n };\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { value, setValue, options: resolvedOptions, isActive: !!value },\n stateAttributesMapping: {\n setValue: () => null,\n options: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className,\n ...({ \"data-p0\": `catalog-column-filter-${id}` } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (render) return element;\n\n return (\n <DefaultFilterSelect\n placeholder={placeholder}\n value={value}\n onChange={setValue}\n options={resolvedOptions}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;AA6BA,SAAS,kBACP,IACA,KACsB;CACtB,IAAI,UAAqD,EAAE;AAC3D,SAAQ,IAAR;EACE,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;;AAEJ,QAAO,QAAQ,KAAK,CAAC,WAAW;EAAE,OAAO;EAAM,OAAO;EAAM,EAAE;;;;;;;AAQhE,SAAgB,0BAA0B,EACxC,IACA,aACA,SACA,WACA,QACA,GAAG,SAC8B;CACjC,MAAM,MAAM,yBAAyB;CACrC,MAAM,QAAQ,IAAI,qBAAqB,GAAG,IAAI;CAC9C,MAAM,kBAAkB,WAAW,kBAAkB,IAAI,IAAI;CAC7D,MAAM,YAAY,MAAqB;AACrC,MAAI,KAAK,KAAM,KAAI,mBAAmB,GAAG;MACpC,KAAI,gBAAgB,IAAI,EAAE;;CAGjC,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO;GAAU,SAAS;GAAiB,UAAU,CAAC,CAAC;GAAO;EACvE,wBAAwB;GACtB,gBAAgB;GAChB,eAAe;GAChB;EACD,OAAO,WACL;GACE;GACM,WAAW,yBAAyB;GAC3C,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,oBAAC,qBAAD;EACe;EACN;EACP,UAAU;EACV,SAAS;EACE;EACX"}
@@ -1,8 +1,10 @@
1
+ import { SearchCardData } from "../../../types/catalog-adapters.mjs";
1
2
  import { useRender } from "@base-ui/react/use-render";
2
3
  import * as _$react from "react";
3
4
 
4
5
  //#region src/components/compound/search-catalog/list.d.ts
5
6
  interface SearchCatalogListState {
7
+ cards: ReadonlyArray<SearchCardData>;
6
8
  isEmpty: boolean;
7
9
  }
8
10
  interface SearchCatalogListProps extends useRender.ComponentProps<"div", SearchCatalogListState> {}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.mts","names":[],"sources":["../../../../src/components/compound/search-catalog/list.tsx"],"mappings":";;;;UAMiB,sBAAA;EACf,OAAA;AAAA;AAAA,UAGe,sBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,sBAAA;AAAA,iBAE1B,iBAAA,CAAA;EACd,MAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,sBAAA,GAAsB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
1
+ {"version":3,"file":"list.d.mts","names":[],"sources":["../../../../src/components/compound/search-catalog/list.tsx"],"mappings":";;;;;UAOiB,sBAAA;EACf,KAAA,EAAO,aAAA,CAAc,cAAA;EACrB,OAAA;AAAA;AAAA,UAGe,sBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,sBAAA;AAAA,iBAE1B,iBAAA,CAAA;EACd,MAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,sBAAA,GAAsB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
@@ -13,7 +13,11 @@ function SearchCatalogList({ render, className, children, ...props }) {
13
13
  const element = useRender({
14
14
  defaultTagName: "div",
15
15
  render,
16
- state: { isEmpty },
16
+ state: {
17
+ cards,
18
+ isEmpty
19
+ },
20
+ stateAttributesMapping: { cards: () => null },
17
21
  props: mergeProps({
18
22
  className: cn("pz:flex pz:flex-col pz:gap-2", className),
19
23
  children: children ?? defaultBody,
@@ -1 +1 @@
1
- {"version":3,"file":"list.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/list.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { SearchCatalogCard } from \"./card.js\";\n\nexport interface SearchCatalogListState {\n isEmpty: boolean;\n}\n\nexport interface SearchCatalogListProps\n extends useRender.ComponentProps<\"div\", SearchCatalogListState> {}\n\nexport function SearchCatalogList({\n render,\n className,\n children,\n ...props\n}: SearchCatalogListProps) {\n const { cards } = useSearchCatalogContext();\n const isEmpty = cards.length === 0;\n\n const defaultBody = cards.map((card, idx) => (\n <SearchCatalogCard key={`${card.searchId}-${idx}`} card={card} />\n ));\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { isEmpty },\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:flex-col pz:gap-2\", className),\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"catalog-list\" } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (isEmpty) return null;\n return element;\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,kBAAkB,EAChC,QACA,WACA,UACA,GAAG,SACsB;CACzB,MAAM,EAAE,UAAU,yBAAyB;CAC3C,MAAM,UAAU,MAAM,WAAW;CAEjC,MAAM,cAAc,MAAM,KAAK,MAAM,QACnC,oBAAC,mBAAD,EAAyD,MAAQ,EAAzC,GAAG,KAAK,SAAS,GAAG,MAAqB,CACjE;CAEF,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO,EAAE,SAAS;EAClB,OAAO,WACL;GACE,WAAW,GAAG,gCAAgC,UAAU;GACxD,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC;AAEF,KAAI,QAAS,QAAO;AACpB,QAAO"}
1
+ {"version":3,"file":"list.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/list.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { SearchCardData } from \"../../../types/catalog-adapters.js\";\nimport { SearchCatalogCard } from \"./card.js\";\n\nexport interface SearchCatalogListState {\n cards: ReadonlyArray<SearchCardData>;\n isEmpty: boolean;\n}\n\nexport interface SearchCatalogListProps\n extends useRender.ComponentProps<\"div\", SearchCatalogListState> {}\n\nexport function SearchCatalogList({\n render,\n className,\n children,\n ...props\n}: SearchCatalogListProps) {\n const { cards } = useSearchCatalogContext();\n const isEmpty = cards.length === 0;\n\n const defaultBody = cards.map((card, idx) => (\n <SearchCatalogCard key={`${card.searchId}-${idx}`} card={card} />\n ));\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { cards, isEmpty },\n stateAttributesMapping: {\n cards: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:flex-col pz:gap-2\", className),\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"catalog-list\" } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (isEmpty) return null;\n return element;\n}\n"],"mappings":";;;;;;;;AAeA,SAAgB,kBAAkB,EAChC,QACA,WACA,UACA,GAAG,SACsB;CACzB,MAAM,EAAE,UAAU,yBAAyB;CAC3C,MAAM,UAAU,MAAM,WAAW;CAEjC,MAAM,cAAc,MAAM,KAAK,MAAM,QACnC,oBAAC,mBAAD,EAAyD,MAAQ,EAAzC,GAAG,KAAK,SAAS,GAAG,MAAqB,CACjE;CAEF,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO;GAAS;EACzB,wBAAwB,EACtB,aAAa,MACd;EACD,OAAO,WACL;GACE,WAAW,GAAG,gCAAgC,UAAU;GACxD,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC;AAEF,KAAI,QAAS,QAAO;AACpB,QAAO"}
@@ -4,6 +4,7 @@ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
4
  //#region src/components/compound/search-catalog/search-filter.d.ts
5
5
  interface SearchCatalogSearchFilterState {
6
6
  value: string;
7
+ setValue: (value: string) => void;
7
8
  isActive: boolean;
8
9
  }
9
10
  interface SearchCatalogSearchFilterProps extends useRender.ComponentProps<"input", SearchCatalogSearchFilterState> {
@@ -1 +1 @@
1
- {"version":3,"file":"search-filter.d.mts","names":[],"sources":["../../../../src/components/compound/search-catalog/search-filter.tsx"],"mappings":";;;;UASiB,8BAAA;EACf,KAAA;EACA,QAAA;AAAA;AAAA,UAGe,8BAAA,SACP,SAAA,CAAU,cAAA,UAAwB,8BAAA;EAC1C,WAAA;AAAA;AAAA,iBAGc,yBAAA,CAAA;EACd,WAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,8BAAA,GAA8B,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"search-filter.d.mts","names":[],"sources":["../../../../src/components/compound/search-catalog/search-filter.tsx"],"mappings":";;;;UASiB,8BAAA;EACf,KAAA;EACA,QAAA,GAAW,KAAA;EACX,QAAA;AAAA;AAAA,UAGe,8BAAA,SACP,SAAA,CAAU,cAAA,UAAwB,8BAAA;EAC1C,WAAA;AAAA;AAAA,iBAGc,yBAAA,CAAA;EACd,WAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,8BAAA,GAA8B,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -16,8 +16,10 @@ function SearchCatalogSearchFilter({ placeholder = "Search searches...", classNa
16
16
  render,
17
17
  state: {
18
18
  value: globalFilterInput,
19
+ setValue: setGlobalFilterInput,
19
20
  isActive: !!globalFilterInput
20
21
  },
22
+ stateAttributesMapping: { setValue: () => null },
21
23
  props: mergeProps({
22
24
  type: "search",
23
25
  placeholder,
@@ -1 +1 @@
1
- {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/search-catalog/search-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { Search as SearchIcon } from \"lucide-react\";\nimport type { ChangeEvent } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface SearchCatalogSearchFilterState {\n value: string;\n isActive: boolean;\n}\n\nexport interface SearchCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", SearchCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function SearchCatalogSearchFilter({\n placeholder = \"Search searches...\",\n className,\n render,\n ...props\n}: SearchCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = useSearchCatalogContext();\n const { classNames } = useCatalogConfig();\n const isActive = !!globalFilterInput;\n\n const inputElement = useRender({\n defaultTagName: \"input\",\n render,\n state: { value: globalFilterInput, isActive },\n props: mergeProps<\"input\">(\n {\n type: \"search\",\n placeholder,\n value: globalFilterInput,\n onChange: (e: ChangeEvent<HTMLInputElement>) => setGlobalFilterInput(e.target.value),\n className: render ? cn(classNames?.searchInput, className) : undefined,\n },\n props,\n ),\n });\n\n if (render) return inputElement;\n\n return (\n <div data-p0=\"catalog-search\" className={cn(\"pz:relative\", classNames?.searchInputContainer)}>\n <SearchIcon className=\"pz:absolute pz:left-2.5 pz:top-1/2 pz:-translate-y-1/2 pz:size-4 pz:text-muted-foreground pz:pointer-events-none\" />\n <Input\n type=\"search\"\n placeholder={placeholder}\n value={globalFilterInput}\n onChange={(e) => setGlobalFilterInput(e.target.value)}\n className={cn(\"pz:pl-8\", classNames?.searchInput, className)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAmBA,SAAgB,0BAA0B,EACxC,cAAc,sBACd,WACA,QACA,GAAG,SAC8B;CACjC,MAAM,EAAE,mBAAmB,yBAAyB,yBAAyB;CAC7E,MAAM,EAAE,eAAe,kBAAkB;CAGzC,MAAM,eAAe,UAAU;EAC7B,gBAAgB;EAChB;EACA,OAAO;GAAE,OAAO;GAAmB,UALpB,CAAC,CAAC;GAK4B;EAC7C,OAAO,WACL;GACE,MAAM;GACN;GACA,OAAO;GACP,WAAW,MAAqC,qBAAqB,EAAE,OAAO,MAAM;GACpF,WAAW,SAAS,GAAG,YAAY,aAAa,UAAU,GAAG;GAC9D,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAiB,WAAW,GAAG,eAAe,YAAY,qBAAqB;YAA5F,CACE,oBAACA,QAAD,EAAY,WAAU,oHAAqH,GAC3I,oBAAC,OAAD;GACE,MAAK;GACQ;GACb,OAAO;GACP,WAAW,MAAM,qBAAqB,EAAE,OAAO,MAAM;GACrD,WAAW,GAAG,WAAW,YAAY,aAAa,UAAU;GAC5D,EACE"}
1
+ {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/search-catalog/search-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { Search as SearchIcon } from \"lucide-react\";\nimport type { ChangeEvent } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface SearchCatalogSearchFilterState {\n value: string;\n setValue: (value: string) => void;\n isActive: boolean;\n}\n\nexport interface SearchCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", SearchCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function SearchCatalogSearchFilter({\n placeholder = \"Search searches...\",\n className,\n render,\n ...props\n}: SearchCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = useSearchCatalogContext();\n const { classNames } = useCatalogConfig();\n const isActive = !!globalFilterInput;\n\n const inputElement = useRender({\n defaultTagName: \"input\",\n render,\n state: { value: globalFilterInput, setValue: setGlobalFilterInput, isActive },\n stateAttributesMapping: {\n setValue: () => null,\n },\n props: mergeProps<\"input\">(\n {\n type: \"search\",\n placeholder,\n value: globalFilterInput,\n onChange: (e: ChangeEvent<HTMLInputElement>) => setGlobalFilterInput(e.target.value),\n className: render ? cn(classNames?.searchInput, className) : undefined,\n },\n props,\n ),\n });\n\n if (render) return inputElement;\n\n return (\n <div data-p0=\"catalog-search\" className={cn(\"pz:relative\", classNames?.searchInputContainer)}>\n <SearchIcon className=\"pz:absolute pz:left-2.5 pz:top-1/2 pz:-translate-y-1/2 pz:size-4 pz:text-muted-foreground pz:pointer-events-none\" />\n <Input\n type=\"search\"\n placeholder={placeholder}\n value={globalFilterInput}\n onChange={(e) => setGlobalFilterInput(e.target.value)}\n className={cn(\"pz:pl-8\", classNames?.searchInput, className)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAoBA,SAAgB,0BAA0B,EACxC,cAAc,sBACd,WACA,QACA,GAAG,SAC8B;CACjC,MAAM,EAAE,mBAAmB,yBAAyB,yBAAyB;CAC7E,MAAM,EAAE,eAAe,kBAAkB;CAGzC,MAAM,eAAe,UAAU;EAC7B,gBAAgB;EAChB;EACA,OAAO;GAAE,OAAO;GAAmB,UAAU;GAAsB,UALpD,CAAC,CAAC;GAK4D;EAC7E,wBAAwB,EACtB,gBAAgB,MACjB;EACD,OAAO,WACL;GACE,MAAM;GACN;GACA,OAAO;GACP,WAAW,MAAqC,qBAAqB,EAAE,OAAO,MAAM;GACpF,WAAW,SAAS,GAAG,YAAY,aAAa,UAAU,GAAG;GAC9D,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAiB,WAAW,GAAG,eAAe,YAAY,qBAAqB;YAA5F,CACE,oBAACA,QAAD,EAAY,WAAU,oHAAqH,GAC3I,oBAAC,OAAD;GACE,MAAK;GACQ;GACb,OAAO;GACP,WAAW,MAAM,qBAAqB,EAAE,OAAO,MAAM;GACrD,WAAW,GAAG,WAAW,YAAY,aAAa,UAAU;GAC5D,EACE"}
@@ -1,10 +1,12 @@
1
- import { FormHandle } from "../../../types/form-handle.mjs";
1
+ import { FormHandle, FormSectionHandle } from "../../../types/form-handle.mjs";
2
2
  import { useRender } from "@base-ui/react/use-render";
3
3
  import * as _$react from "react";
4
4
  import { SearchPayload } from "@pipe0/base";
5
5
 
6
6
  //#region src/components/compound/search-form/content.d.ts
7
7
  interface SearchFormContentState {
8
+ sections: FormSectionHandle[];
9
+ fieldPaths: Set<string>;
8
10
  hasFieldLoaderError: boolean;
9
11
  isFieldLoaderLoading: boolean;
10
12
  form: FormHandle<SearchPayload>;
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.mts","names":[],"sources":["../../../../src/components/compound/search-form/content.tsx"],"mappings":";;;;;;UAQiB,sBAAA;EACf,mBAAA;EACA,oBAAA;EACA,IAAA,EAAM,UAAA,CAAW,aAAA;AAAA;AAAA,UAGF,sBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,sBAAA;AAAA,iBAE1B,iBAAA,CAAA;EACd,QAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,sBAAA,GAAsB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
1
+ {"version":3,"file":"content.d.mts","names":[],"sources":["../../../../src/components/compound/search-form/content.tsx"],"mappings":";;;;;;UAQiB,sBAAA;EACf,QAAA,EAAU,iBAAA;EACV,UAAA,EAAY,GAAA;EACZ,mBAAA;EACA,oBAAA;EACA,IAAA,EAAM,UAAA,CAAW,aAAA;AAAA;AAAA,UAGF,sBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,sBAAA;AAAA,iBAE1B,iBAAA,CAAA;EACd,QAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,sBAAA,GAAsB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
@@ -7,7 +7,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
8
  //#region src/components/compound/search-form/content.tsx
9
9
  function SearchFormContent({ children, className, render, ...props }) {
10
- const { sections, hasFieldLoaderError, isFieldLoaderLoading, form } = useSearchFormContext();
10
+ const { sections, fieldPaths, hasFieldLoaderError, isFieldLoaderLoading, form } = useSearchFormContext();
11
11
  const defaultBody = /* @__PURE__ */ jsxs(Fragment, { children: [sections.map((section, idx) => {
12
12
  const prev = idx > 0 ? sections[idx - 1] : null;
13
13
  return /* @__PURE__ */ jsx(SearchFormSection, {
@@ -19,11 +19,17 @@ function SearchFormContent({ children, className, render, ...props }) {
19
19
  defaultTagName: "div",
20
20
  render,
21
21
  state: {
22
+ sections,
23
+ fieldPaths,
22
24
  hasFieldLoaderError,
23
25
  isFieldLoaderLoading,
24
26
  form
25
27
  },
26
- stateAttributesMapping: { form: () => null },
28
+ stateAttributesMapping: {
29
+ sections: () => null,
30
+ fieldPaths: () => null,
31
+ form: () => null
32
+ },
27
33
  props: mergeProps({
28
34
  className,
29
35
  children: children ?? defaultBody,
@@ -1 +1 @@
1
- {"version":3,"file":"content.mjs","names":[],"sources":["../../../../src/components/compound/search-form/content.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { SearchPayload } from \"@pipe0/base\";\nimport { useSearchFormContext } from \"../../../context/search-form-context.js\";\nimport type { FormHandle } from \"../../../types/form-handle.js\";\nimport { SearchFormErrors } from \"./errors.js\";\nimport { SearchFormSection } from \"./section.js\";\n\nexport interface SearchFormContentState {\n hasFieldLoaderError: boolean;\n isFieldLoaderLoading: boolean;\n form: FormHandle<SearchPayload>;\n}\n\nexport interface SearchFormContentProps\n extends useRender.ComponentProps<\"div\", SearchFormContentState> {}\n\nexport function SearchFormContent({\n children,\n className,\n render,\n ...props\n}: SearchFormContentProps) {\n const { sections, hasFieldLoaderError, isFieldLoaderLoading, form } = useSearchFormContext();\n\n // Sections that share a label render under one umbrella header.\n // Hide the label on every section except the first in each contiguous cluster.\n const defaultBody = (\n <>\n {sections.map((section, idx) => {\n const prev = idx > 0 ? sections[idx - 1] : null;\n const hideLabel = !!(section.label && prev && prev.label === section.label);\n return <SearchFormSection key={section.key} section={section} hideLabel={hideLabel} />;\n })}\n <SearchFormErrors />\n </>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: { hasFieldLoaderError, isFieldLoaderLoading, form },\n stateAttributesMapping: {\n form: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className,\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"form-content\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,kBAAkB,EAChC,UACA,WACA,QACA,GAAG,SACsB;CACzB,MAAM,EAAE,UAAU,qBAAqB,sBAAsB,SAAS,sBAAsB;CAI5F,MAAM,cACJ,4CACG,SAAS,KAAK,SAAS,QAAQ;EAC9B,MAAM,OAAO,MAAM,IAAI,SAAS,MAAM,KAAK;AAE3C,SAAO,oBAAC,mBAAD;GAA8C;GAAS,WAD5C,CAAC,EAAE,QAAQ,SAAS,QAAQ,KAAK,UAAU,QAAQ;GACiB,EAAvD,QAAQ,IAA+C;GACtF,EACF,oBAAC,kBAAD,EAAoB,EACnB;AAGL,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAqB;GAAsB;GAAM;EAC1D,wBAAwB,EACtB,YAAY,MACb;EACD,OAAO,WACL;GACE;GACA,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC"}
1
+ {"version":3,"file":"content.mjs","names":[],"sources":["../../../../src/components/compound/search-form/content.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { SearchPayload } from \"@pipe0/base\";\nimport { useSearchFormContext } from \"../../../context/search-form-context.js\";\nimport type { FormHandle, FormSectionHandle } from \"../../../types/form-handle.js\";\nimport { SearchFormErrors } from \"./errors.js\";\nimport { SearchFormSection } from \"./section.js\";\n\nexport interface SearchFormContentState {\n sections: FormSectionHandle[];\n fieldPaths: Set<string>;\n hasFieldLoaderError: boolean;\n isFieldLoaderLoading: boolean;\n form: FormHandle<SearchPayload>;\n}\n\nexport interface SearchFormContentProps\n extends useRender.ComponentProps<\"div\", SearchFormContentState> {}\n\nexport function SearchFormContent({\n children,\n className,\n render,\n ...props\n}: SearchFormContentProps) {\n const { sections, fieldPaths, hasFieldLoaderError, isFieldLoaderLoading, form } =\n useSearchFormContext();\n\n // Sections that share a label render under one umbrella header.\n // Hide the label on every section except the first in each contiguous cluster.\n const defaultBody = (\n <>\n {sections.map((section, idx) => {\n const prev = idx > 0 ? sections[idx - 1] : null;\n const hideLabel = !!(section.label && prev && prev.label === section.label);\n return <SearchFormSection key={section.key} section={section} hideLabel={hideLabel} />;\n })}\n <SearchFormErrors />\n </>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: { sections, fieldPaths, hasFieldLoaderError, isFieldLoaderLoading, form },\n stateAttributesMapping: {\n sections: () => null,\n fieldPaths: () => null,\n form: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className,\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"form-content\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;AAmBA,SAAgB,kBAAkB,EAChC,UACA,WACA,QACA,GAAG,SACsB;CACzB,MAAM,EAAE,UAAU,YAAY,qBAAqB,sBAAsB,SACvE,sBAAsB;CAIxB,MAAM,cACJ,4CACG,SAAS,KAAK,SAAS,QAAQ;EAC9B,MAAM,OAAO,MAAM,IAAI,SAAS,MAAM,KAAK;AAE3C,SAAO,oBAAC,mBAAD;GAA8C;GAAS,WAD5C,CAAC,EAAE,QAAQ,SAAS,QAAQ,KAAK,UAAU,QAAQ;GACiB,EAAvD,QAAQ,IAA+C;GACtF,EACF,oBAAC,kBAAD,EAAoB,EACnB;AAGL,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAU;GAAY;GAAqB;GAAsB;GAAM;EAChF,wBAAwB;GACtB,gBAAgB;GAChB,kBAAkB;GAClB,YAAY;GACb;EACD,OAAO,WACL;GACE;GACA,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC"}
@@ -1,9 +1,13 @@
1
+ import { FormHandle } from "../../../types/form-handle.mjs";
1
2
  import { useRender } from "@base-ui/react/use-render";
2
3
  import * as _$react from "react";
4
+ import { SearchPayload } from "@pipe0/base";
3
5
 
4
6
  //#region src/components/compound/search-form/errors.d.ts
5
7
  interface SearchFormErrorsState {
6
8
  hasFieldLoaderError: boolean;
9
+ fieldPaths: Set<string>;
10
+ form: FormHandle<SearchPayload>;
7
11
  }
8
12
  interface SearchFormErrorsProps extends useRender.ComponentProps<"div", SearchFormErrorsState> {}
9
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.mts","names":[],"sources":["../../../../src/components/compound/search-form/errors.tsx"],"mappings":";;;;UAMiB,qBAAA;EACf,mBAAA;AAAA;AAAA,UAGe,qBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,qBAAA;;;;AAD1C;;;iBASgB,gBAAA,CAAA;EAAmB,QAAA;EAAU,SAAA;EAAW,MAAA;EAAA,GAAW;AAAA,GAAS,qBAAA,GAAqB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
1
+ {"version":3,"file":"errors.d.mts","names":[],"sources":["../../../../src/components/compound/search-form/errors.tsx"],"mappings":";;;;;;UAQiB,qBAAA;EACf,mBAAA;EACA,UAAA,EAAY,GAAA;EACZ,IAAA,EAAM,UAAA,CAAW,aAAA;AAAA;AAAA,UAGF,qBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,qBAAA;;;;;;;iBAQ1B,gBAAA,CAAA;EAAmB,QAAA;EAAU,SAAA;EAAW,MAAA;EAAA,GAAW;AAAA,GAAS,qBAAA,GAAqB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
@@ -26,7 +26,15 @@ function SearchFormErrors({ children, className, render, ...props }) {
26
26
  return useRender({
27
27
  defaultTagName: "div",
28
28
  render,
29
- state: { hasFieldLoaderError },
29
+ state: {
30
+ hasFieldLoaderError,
31
+ fieldPaths,
32
+ form
33
+ },
34
+ stateAttributesMapping: {
35
+ fieldPaths: () => null,
36
+ form: () => null
37
+ },
30
38
  props: mergeProps({
31
39
  className,
32
40
  children: children ?? defaultBody,
@@ -1 +1 @@
1
- {"version":3,"file":"errors.mjs","names":[],"sources":["../../../../src/components/compound/search-form/errors.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useSearchFormContext } from \"../../../context/search-form-context.js\";\nimport { asInternalForm } from \"../../../utils/internal-form.js\";\nimport { FormLevelErrors } from \"../../internal/form-level-errors.js\";\n\nexport interface SearchFormErrorsState {\n hasFieldLoaderError: boolean;\n}\n\nexport interface SearchFormErrorsProps\n extends useRender.ComponentProps<\"div\", SearchFormErrorsState> {}\n\n/**\n * Renders form-wide errors that don't belong to a specific visible field:\n * the field-loader banner (when a resolver fails to load options for a\n * field) and form-level validation errors (errors not attached to any\n * rendered field).\n */\nexport function SearchFormErrors({ children, className, render, ...props }: SearchFormErrorsProps) {\n const { hasFieldLoaderError, fieldPaths, form } = useSearchFormContext();\n\n const defaultBody = (\n <>\n {hasFieldLoaderError && (\n <div\n data-p0=\"store-error\"\n role=\"alert\"\n className=\"pz:flex pz:flex-col pz:gap-1 pz:rounded-md pz:border pz:border-destructive/50 pz:bg-destructive/5 pz:px-3 pz:py-2 pz:text-destructive pz:text-xs pz:font-medium\"\n >\n <span>\n Failed to load options for one or more fields. Check that your connection is valid.\n </span>\n </div>\n )}\n <FormLevelErrors control={asInternalForm(form).control} fieldPaths={fieldPaths} />\n </>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: { hasFieldLoaderError },\n props: mergeProps<\"div\">(\n {\n className,\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"form-errors\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,SAAgB,iBAAiB,EAAE,UAAU,WAAW,QAAQ,GAAG,SAAgC;CACjG,MAAM,EAAE,qBAAqB,YAAY,SAAS,sBAAsB;CAExE,MAAM,cACJ,4CACG,uBACC,oBAAC,OAAD;EACE,WAAQ;EACR,MAAK;EACL,WAAU;YAEV,oBAAC,QAAD,YAAM,uFAEC;EACH,GAER,oBAAC,iBAAD;EAAiB,SAAS,eAAe,KAAK,CAAC;EAAqB;EAAc,EACjF;AAGL,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO,EAAE,qBAAqB;EAC9B,OAAO,WACL;GACE;GACA,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC"}
1
+ {"version":3,"file":"errors.mjs","names":[],"sources":["../../../../src/components/compound/search-form/errors.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { SearchPayload } from \"@pipe0/base\";\nimport { useSearchFormContext } from \"../../../context/search-form-context.js\";\nimport type { FormHandle } from \"../../../types/form-handle.js\";\nimport { asInternalForm } from \"../../../utils/internal-form.js\";\nimport { FormLevelErrors } from \"../../internal/form-level-errors.js\";\n\nexport interface SearchFormErrorsState {\n hasFieldLoaderError: boolean;\n fieldPaths: Set<string>;\n form: FormHandle<SearchPayload>;\n}\n\nexport interface SearchFormErrorsProps\n extends useRender.ComponentProps<\"div\", SearchFormErrorsState> {}\n\n/**\n * Renders form-wide errors that don't belong to a specific visible field:\n * the field-loader banner (when a resolver fails to load options for a\n * field) and form-level validation errors (errors not attached to any\n * rendered field).\n */\nexport function SearchFormErrors({ children, className, render, ...props }: SearchFormErrorsProps) {\n const { hasFieldLoaderError, fieldPaths, form } = useSearchFormContext();\n\n const defaultBody = (\n <>\n {hasFieldLoaderError && (\n <div\n data-p0=\"store-error\"\n role=\"alert\"\n className=\"pz:flex pz:flex-col pz:gap-1 pz:rounded-md pz:border pz:border-destructive/50 pz:bg-destructive/5 pz:px-3 pz:py-2 pz:text-destructive pz:text-xs pz:font-medium\"\n >\n <span>\n Failed to load options for one or more fields. Check that your connection is valid.\n </span>\n </div>\n )}\n <FormLevelErrors control={asInternalForm(form).control} fieldPaths={fieldPaths} />\n </>\n );\n\n return useRender({\n defaultTagName: \"div\",\n render,\n state: { hasFieldLoaderError, fieldPaths, form },\n stateAttributesMapping: {\n fieldPaths: () => null,\n form: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className,\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"form-errors\" } as Record<string, string>),\n },\n props,\n ),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAuBA,SAAgB,iBAAiB,EAAE,UAAU,WAAW,QAAQ,GAAG,SAAgC;CACjG,MAAM,EAAE,qBAAqB,YAAY,SAAS,sBAAsB;CAExE,MAAM,cACJ,4CACG,uBACC,oBAAC,OAAD;EACE,WAAQ;EACR,MAAK;EACL,WAAU;YAEV,oBAAC,QAAD,YAAM,uFAEC;EACH,GAER,oBAAC,iBAAD;EAAiB,SAAS,eAAe,KAAK,CAAC;EAAqB;EAAc,EACjF;AAGL,QAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAqB;GAAY;GAAM;EAChD,wBAAwB;GACtB,kBAAkB;GAClB,YAAY;GACb;EACD,OAAO,WACL;GACE;GACA,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC"}
@@ -7,6 +7,7 @@ import { MouseEvent } from "react";
7
7
  interface SearchesCatalogCardState {
8
8
  selected: boolean;
9
9
  expanded: boolean;
10
+ setExpanded: (open: boolean) => void;
10
11
  }
11
12
  interface SearchesCatalogCardProps extends useRender.ComponentProps<"div", SearchesCatalogCardState> {
12
13
  card: SearchesCardData;
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/card.tsx"],"mappings":";;;;;;UAyBiB,wBAAA;EACf,QAAA;EACA,QAAA;AAAA;AAAA,UAGe,wBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,wBAAA;EACxC,IAAA,EAAM,gBAAA;EACN,KAAA;EACA,QAAA;EAJe;EAMf,OAAA,IAAW,CAAA,EAAG,UAAA,CAAW,cAAA;AAAA;AAAA,cAUd,mBAAA,EAAmB,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,wBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"card.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/card.tsx"],"mappings":";;;;;;UAyBiB,wBAAA;EACf,QAAA;EACA,QAAA;EACA,WAAA,GAAc,IAAA;AAAA;AAAA,UAGC,wBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,wBAAA;EACxC,IAAA,EAAM,gBAAA;EACN,KAAA;EACA,QAAA;EAPA;EASA,OAAA,IAAW,CAAA,EAAG,UAAA,CAAW,cAAA;AAAA;AAAA,cAUd,mBAAA,EAAmB,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,wBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA"}
@@ -53,8 +53,10 @@ const SearchesCatalogCard = forwardRef(function SearchesCatalogCard({ card, inde
53
53
  render,
54
54
  state: {
55
55
  selected,
56
- expanded
56
+ expanded,
57
+ setExpanded
57
58
  },
59
+ stateAttributesMapping: { setExpanded: () => null },
58
60
  props: mergeProps({
59
61
  role: interactive ? "button" : void 0,
60
62
  tabIndex: interactive ? 0 : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"card.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/card.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport {\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type SyntheticEvent,\n useCallback,\n useId,\n useMemo,\n} from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport {\n SearchesCatalogCardContext,\n type SearchesCatalogCardContextValue,\n} from \"../../../context/searches-catalog-card-context.js\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { SearchesCardData } from \"../../../types/catalog-adapters.js\";\nimport {\n CatalogCardDescription,\n CatalogCardHeader,\n CatalogCardTitle,\n} from \"../../defaults/catalog/card-primitives.js\";\n\nexport interface SearchesCatalogCardState {\n selected: boolean;\n expanded: boolean;\n}\n\nexport interface SearchesCatalogCardProps\n extends useRender.ComponentProps<\"div\", SearchesCatalogCardState> {\n card: SearchesCardData;\n index?: number;\n selected?: boolean;\n /** Overrides the default click handler that fires `onSelectCard`. */\n onClick?: (e: MouseEvent<HTMLDivElement>) => void;\n}\n\nconst DEFAULT_BODY = (\n <CatalogCardHeader>\n <CatalogCardTitle />\n <CatalogCardDescription />\n </CatalogCardHeader>\n);\n\nexport const SearchesCatalogCard = forwardRef<HTMLDivElement, SearchesCatalogCardProps>(\n function SearchesCatalogCard(\n { card, index = 0, selected = false, render, onClick, className, ...rest },\n ref,\n ) {\n const { onSelectCard, expandedCardId, setExpandedCardId } = useSearchesCatalogContext();\n const { classNames, components } = useCatalogConfig();\n const instanceId = useId();\n const expanded = expandedCardId === instanceId;\n\n const setExpanded = useCallback(\n (open: boolean) => {\n setExpandedCardId(open ? instanceId : null);\n },\n [instanceId, setExpandedCardId],\n );\n\n const onSelect = useCallback(\n (e: SyntheticEvent) => {\n onSelectCard?.(card, e);\n },\n [onSelectCard, card],\n );\n\n const contextValue = useMemo<SearchesCatalogCardContextValue>(\n () => ({ card, index, selected, expanded, onSelect, setExpanded }),\n [card, index, selected, expanded, onSelect, setExpanded],\n );\n\n const interactive = !!(onClick || onSelectCard);\n const handleClick = onClick\n ? onClick\n : onSelectCard\n ? (e: MouseEvent<HTMLDivElement>) => onSelect(e)\n : undefined;\n const handleKeyDown = interactive\n ? (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (onClick) onClick(e as unknown as MouseEvent<HTMLDivElement>);\n else onSelect(e);\n }\n }\n : undefined;\n\n const isUsingDefaultBody = !render;\n\n const Card = components?.Card;\n\n const element = useRender({\n ref,\n defaultTagName: \"div\",\n render,\n state: { selected, expanded },\n props: mergeProps<\"div\">(\n {\n role: interactive ? \"button\" : undefined,\n tabIndex: interactive ? 0 : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n className: cn(\n \"pz:flex pz:flex-col\",\n isUsingDefaultBody &&\n \"pz:rounded-md pz:border pz:border-input pz:bg-card pz:px-3 pz:py-2.5 pz:transition-colors\",\n isUsingDefaultBody && interactive && \"pz:hover:bg-muted/40\",\n interactive && \"pz:cursor-pointer\",\n classNames?.card,\n className,\n ),\n ...(isUsingDefaultBody ? { children: DEFAULT_BODY } : {}),\n ...({ \"data-p0\": \"catalog-card\" } as Record<string, string>),\n },\n rest as Record<string, unknown>,\n ),\n });\n\n if (Card) {\n return (\n <SearchesCatalogCardContext.Provider value={contextValue}>\n <Card>{DEFAULT_BODY}</Card>\n </SearchesCatalogCardContext.Provider>\n );\n }\n\n return (\n <SearchesCatalogCardContext.Provider value={contextValue}>\n {element}\n </SearchesCatalogCardContext.Provider>\n );\n },\n);\n"],"mappings":";;;;;;;;;;;AAuCA,MAAM,eACJ,qBAAC,mBAAD,aACE,oBAAC,kBAAD,EAAoB,GACpB,oBAAC,wBAAD,EAA0B,EACR;AAGtB,MAAa,sBAAsB,WACjC,SAAS,oBACP,EAAE,MAAM,QAAQ,GAAG,WAAW,OAAO,QAAQ,SAAS,WAAW,GAAG,QACpE,KACA;CACA,MAAM,EAAE,cAAc,gBAAgB,sBAAsB,2BAA2B;CACvF,MAAM,EAAE,YAAY,eAAe,kBAAkB;CACrD,MAAM,aAAa,OAAO;CAC1B,MAAM,WAAW,mBAAmB;CAEpC,MAAM,cAAc,aACjB,SAAkB;AACjB,oBAAkB,OAAO,aAAa,KAAK;IAE7C,CAAC,YAAY,kBAAkB,CAChC;CAED,MAAM,WAAW,aACd,MAAsB;AACrB,iBAAe,MAAM,EAAE;IAEzB,CAAC,cAAc,KAAK,CACrB;CAED,MAAM,eAAe,eACZ;EAAE;EAAM;EAAO;EAAU;EAAU;EAAU;EAAa,GACjE;EAAC;EAAM;EAAO;EAAU;EAAU;EAAU;EAAY,CACzD;CAED,MAAM,cAAc,CAAC,EAAE,WAAW;CAClC,MAAM,cAAc,UAChB,UACA,gBACG,MAAkC,SAAS,EAAE,GAC9C;CACN,MAAM,gBAAgB,eACjB,MAAqC;AACpC,MAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,KAAE,gBAAgB;AAClB,OAAI,QAAS,SAAQ,EAA2C;OAC3D,UAAS,EAAE;;KAGpB;CAEJ,MAAM,qBAAqB,CAAC;CAE5B,MAAM,OAAO,YAAY;CAEzB,MAAM,UAAU,UAAU;EACxB;EACA,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAU;GAAU;EAC7B,OAAO,WACL;GACE,MAAM,cAAc,WAAW;GAC/B,UAAU,cAAc,IAAI;GAC5B,SAAS;GACT,WAAW;GACX,WAAW,GACT,uBACA,sBACE,6FACF,sBAAsB,eAAe,wBACrC,eAAe,qBACf,YAAY,MACZ,UACD;GACD,GAAI,qBAAqB,EAAE,UAAU,cAAc,GAAG,EAAE;GAClD,WAAW;GAClB,EACD,KACD;EACF,CAAC;AAEF,KAAI,KACF,QACE,oBAAC,2BAA2B,UAA5B;EAAqC,OAAO;YAC1C,oBAAC,MAAD,YAAO,cAAoB;EACS;AAI1C,QACE,oBAAC,2BAA2B,UAA5B;EAAqC,OAAO;YACzC;EACmC;EAG3C"}
1
+ {"version":3,"file":"card.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/card.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport {\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type SyntheticEvent,\n useCallback,\n useId,\n useMemo,\n} from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport {\n SearchesCatalogCardContext,\n type SearchesCatalogCardContextValue,\n} from \"../../../context/searches-catalog-card-context.js\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { SearchesCardData } from \"../../../types/catalog-adapters.js\";\nimport {\n CatalogCardDescription,\n CatalogCardHeader,\n CatalogCardTitle,\n} from \"../../defaults/catalog/card-primitives.js\";\n\nexport interface SearchesCatalogCardState {\n selected: boolean;\n expanded: boolean;\n setExpanded: (open: boolean) => void;\n}\n\nexport interface SearchesCatalogCardProps\n extends useRender.ComponentProps<\"div\", SearchesCatalogCardState> {\n card: SearchesCardData;\n index?: number;\n selected?: boolean;\n /** Overrides the default click handler that fires `onSelectCard`. */\n onClick?: (e: MouseEvent<HTMLDivElement>) => void;\n}\n\nconst DEFAULT_BODY = (\n <CatalogCardHeader>\n <CatalogCardTitle />\n <CatalogCardDescription />\n </CatalogCardHeader>\n);\n\nexport const SearchesCatalogCard = forwardRef<HTMLDivElement, SearchesCatalogCardProps>(\n function SearchesCatalogCard(\n { card, index = 0, selected = false, render, onClick, className, ...rest },\n ref,\n ) {\n const { onSelectCard, expandedCardId, setExpandedCardId } = useSearchesCatalogContext();\n const { classNames, components } = useCatalogConfig();\n const instanceId = useId();\n const expanded = expandedCardId === instanceId;\n\n const setExpanded = useCallback(\n (open: boolean) => {\n setExpandedCardId(open ? instanceId : null);\n },\n [instanceId, setExpandedCardId],\n );\n\n const onSelect = useCallback(\n (e: SyntheticEvent) => {\n onSelectCard?.(card, e);\n },\n [onSelectCard, card],\n );\n\n const contextValue = useMemo<SearchesCatalogCardContextValue>(\n () => ({ card, index, selected, expanded, onSelect, setExpanded }),\n [card, index, selected, expanded, onSelect, setExpanded],\n );\n\n const interactive = !!(onClick || onSelectCard);\n const handleClick = onClick\n ? onClick\n : onSelectCard\n ? (e: MouseEvent<HTMLDivElement>) => onSelect(e)\n : undefined;\n const handleKeyDown = interactive\n ? (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (onClick) onClick(e as unknown as MouseEvent<HTMLDivElement>);\n else onSelect(e);\n }\n }\n : undefined;\n\n const isUsingDefaultBody = !render;\n\n const Card = components?.Card;\n\n const element = useRender({\n ref,\n defaultTagName: \"div\",\n render,\n state: { selected, expanded, setExpanded },\n stateAttributesMapping: {\n setExpanded: () => null,\n },\n props: mergeProps<\"div\">(\n {\n role: interactive ? \"button\" : undefined,\n tabIndex: interactive ? 0 : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n className: cn(\n \"pz:flex pz:flex-col\",\n isUsingDefaultBody &&\n \"pz:rounded-md pz:border pz:border-input pz:bg-card pz:px-3 pz:py-2.5 pz:transition-colors\",\n isUsingDefaultBody && interactive && \"pz:hover:bg-muted/40\",\n interactive && \"pz:cursor-pointer\",\n classNames?.card,\n className,\n ),\n ...(isUsingDefaultBody ? { children: DEFAULT_BODY } : {}),\n ...({ \"data-p0\": \"catalog-card\" } as Record<string, string>),\n },\n rest as Record<string, unknown>,\n ),\n });\n\n if (Card) {\n return (\n <SearchesCatalogCardContext.Provider value={contextValue}>\n <Card>{DEFAULT_BODY}</Card>\n </SearchesCatalogCardContext.Provider>\n );\n }\n\n return (\n <SearchesCatalogCardContext.Provider value={contextValue}>\n {element}\n </SearchesCatalogCardContext.Provider>\n );\n },\n);\n"],"mappings":";;;;;;;;;;;AAwCA,MAAM,eACJ,qBAAC,mBAAD,aACE,oBAAC,kBAAD,EAAoB,GACpB,oBAAC,wBAAD,EAA0B,EACR;AAGtB,MAAa,sBAAsB,WACjC,SAAS,oBACP,EAAE,MAAM,QAAQ,GAAG,WAAW,OAAO,QAAQ,SAAS,WAAW,GAAG,QACpE,KACA;CACA,MAAM,EAAE,cAAc,gBAAgB,sBAAsB,2BAA2B;CACvF,MAAM,EAAE,YAAY,eAAe,kBAAkB;CACrD,MAAM,aAAa,OAAO;CAC1B,MAAM,WAAW,mBAAmB;CAEpC,MAAM,cAAc,aACjB,SAAkB;AACjB,oBAAkB,OAAO,aAAa,KAAK;IAE7C,CAAC,YAAY,kBAAkB,CAChC;CAED,MAAM,WAAW,aACd,MAAsB;AACrB,iBAAe,MAAM,EAAE;IAEzB,CAAC,cAAc,KAAK,CACrB;CAED,MAAM,eAAe,eACZ;EAAE;EAAM;EAAO;EAAU;EAAU;EAAU;EAAa,GACjE;EAAC;EAAM;EAAO;EAAU;EAAU;EAAU;EAAY,CACzD;CAED,MAAM,cAAc,CAAC,EAAE,WAAW;CAClC,MAAM,cAAc,UAChB,UACA,gBACG,MAAkC,SAAS,EAAE,GAC9C;CACN,MAAM,gBAAgB,eACjB,MAAqC;AACpC,MAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,KAAE,gBAAgB;AAClB,OAAI,QAAS,SAAQ,EAA2C;OAC3D,UAAS,EAAE;;KAGpB;CAEJ,MAAM,qBAAqB,CAAC;CAE5B,MAAM,OAAO,YAAY;CAEzB,MAAM,UAAU,UAAU;EACxB;EACA,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAU;GAAU;GAAa;EAC1C,wBAAwB,EACtB,mBAAmB,MACpB;EACD,OAAO,WACL;GACE,MAAM,cAAc,WAAW;GAC/B,UAAU,cAAc,IAAI;GAC5B,SAAS;GACT,WAAW;GACX,WAAW,GACT,uBACA,sBACE,6FACF,sBAAsB,eAAe,wBACrC,eAAe,qBACf,YAAY,MACZ,UACD;GACD,GAAI,qBAAqB,EAAE,UAAU,cAAc,GAAG,EAAE;GAClD,WAAW;GAClB,EACD,KACD;EACF,CAAC;AAEF,KAAI,KACF,QACE,oBAAC,2BAA2B,UAA5B;EAAqC,OAAO;YAC1C,oBAAC,MAAD,YAAO,cAAoB;EACS;AAI1C,QACE,oBAAC,2BAA2B,UAA5B;EAAqC,OAAO;YACzC;EACmC;EAG3C"}
@@ -6,6 +6,10 @@ import { SearchCategory } from "@pipe0/base";
6
6
  //#region src/components/compound/searches-catalog/category-filter.d.ts
7
7
  interface SearchesCatalogCategoryFilterState {
8
8
  value: SearchCategory | null;
9
+ setValue: (value: SearchCategory | null) => void;
10
+ options: ReadonlyArray<CategoryOption<SearchCategory>>;
11
+ counts: Partial<Record<SearchCategory, number>>;
12
+ totalCount: number;
9
13
  isActive: boolean;
10
14
  }
11
15
  interface SearchesCatalogCategoryFilterProps extends useRender.ComponentProps<"div", SearchesCatalogCategoryFilterState> {
@@ -1 +1 @@
1
- {"version":3,"file":"category-filter.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/category-filter.tsx"],"mappings":";;;;;;UA6BiB,kCAAA;EACf,KAAA,EAAO,cAAA;EACP,QAAA;AAAA;AAAA,UAGe,kCAAA,SACP,SAAA,CAAU,cAAA,QAAsB,kCAAA;;EAExC,OAAA,GAAU,aAAA,CAAc,cAAA,CAAe,cAAA;AAAA;AAAA,iBAGzB,6BAAA,CAAA;EACd,OAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,kCAAA,GAAkC,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"category-filter.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/category-filter.tsx"],"mappings":";;;;;;UA6BiB,kCAAA;EACf,KAAA,EAAO,cAAA;EACP,QAAA,GAAW,KAAA,EAAO,cAAA;EAClB,OAAA,EAAS,aAAA,CAAc,cAAA,CAAe,cAAA;EACtC,MAAA,EAAQ,OAAA,CAAQ,MAAA,CAAO,cAAA;EACvB,UAAA;EACA,QAAA;AAAA;AAAA,UAGe,kCAAA,SACP,SAAA,CAAU,cAAA,QAAsB,kCAAA;EAPjB;EASvB,OAAA,GAAU,aAAA,CAAc,cAAA,CAAe,cAAA;AAAA;AAAA,iBAGzB,6BAAA,CAAA;EACd,OAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,kCAAA,GAAkC,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -24,12 +24,22 @@ const DEFAULT_OPTIONS = [{
24
24
  function SearchesCatalogCategoryFilter({ options = DEFAULT_OPTIONS, className, render, ...props }) {
25
25
  const ctx = useSearchesCatalogContext();
26
26
  const value = ctx.category;
27
+ const isActive = value !== null;
27
28
  const element = useRender({
28
29
  defaultTagName: "div",
29
30
  render,
30
31
  state: {
31
32
  value,
32
- isActive: value !== null
33
+ setValue: ctx.setCategory,
34
+ options,
35
+ counts: ctx.baselineCategoryCounts,
36
+ totalCount: ctx.baselineCardCount,
37
+ isActive
38
+ },
39
+ stateAttributesMapping: {
40
+ setValue: () => null,
41
+ options: () => null,
42
+ counts: () => null
33
43
  },
34
44
  props: mergeProps({
35
45
  className,
@@ -1 +1 @@
1
- {"version":3,"file":"category-filter.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/category-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { getSearchCategoryEntries, type SearchCategory } from \"@pipe0/base\";\nimport { Building2, Database, User, X } from \"lucide-react\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport {\n type CategoryOption,\n DefaultCategoryFilter,\n} from \"../../defaults/catalog/category-filter.js\";\n\nconst SEARCH_CATEGORY_ICONS: Record<SearchCategory, CategoryOption<SearchCategory>[\"icon\"]> = {\n people: User,\n companies: Building2,\n deprecated: X,\n};\n\nconst DEFAULT_OPTIONS: ReadonlyArray<CategoryOption<SearchCategory>> = [\n { id: null, label: \"All\", icon: Database },\n ...[...getSearchCategoryEntries()]\n .sort((a, b) => a.order - b.order)\n .map(\n (entry): CategoryOption<SearchCategory> => ({\n id: entry.id,\n label: entry.label,\n icon: SEARCH_CATEGORY_ICONS[entry.id],\n }),\n ),\n];\n\nexport interface SearchesCatalogCategoryFilterState {\n value: SearchCategory | null;\n isActive: boolean;\n}\n\nexport interface SearchesCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", SearchesCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<SearchCategory>>;\n}\n\nexport function SearchesCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: SearchesCatalogCategoryFilterProps) {\n const ctx = useSearchesCatalogContext();\n const value = ctx.category;\n const isActive = value !== null;\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { value, isActive },\n props: mergeProps<\"div\">(\n {\n className,\n ...({ \"data-p0\": \"catalog-category-filter\" } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (render) return element;\n\n return (\n <DefaultCategoryFilter\n options={options}\n value={ctx.category}\n onChange={ctx.setCategory}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAUA,MAAM,wBAAwF;CAC5F,QAAQ;CACR,WAAW;CACX,YAAY;CACb;AAED,MAAM,kBAAiE,CACrE;CAAE,IAAI;CAAM,OAAO;CAAO,MAAM;CAAU,EAC1C,GAAG,CAAC,GAAG,0BAA0B,CAAC,CAC/B,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,KACE,WAA2C;CAC1C,IAAI,MAAM;CACV,OAAO,MAAM;CACb,MAAM,sBAAsB,MAAM;CACnC,EACF,CACJ;AAaD,SAAgB,8BAA8B,EAC5C,UAAU,iBACV,WACA,QACA,GAAG,SACkC;CACrC,MAAM,MAAM,2BAA2B;CACvC,MAAM,QAAQ,IAAI;CAGlB,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO,UALD,UAAU;GAKC;EAC1B,OAAO,WACL;GACE;GACM,WAAW;GAClB,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,oBAAC,uBAAD;EACW;EACT,OAAO,IAAI;EACX,UAAU,IAAI;EACH;EACX"}
1
+ {"version":3,"file":"category-filter.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/category-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { getSearchCategoryEntries, type SearchCategory } from \"@pipe0/base\";\nimport { Building2, Database, User, X } from \"lucide-react\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport {\n type CategoryOption,\n DefaultCategoryFilter,\n} from \"../../defaults/catalog/category-filter.js\";\n\nconst SEARCH_CATEGORY_ICONS: Record<SearchCategory, CategoryOption<SearchCategory>[\"icon\"]> = {\n people: User,\n companies: Building2,\n deprecated: X,\n};\n\nconst DEFAULT_OPTIONS: ReadonlyArray<CategoryOption<SearchCategory>> = [\n { id: null, label: \"All\", icon: Database },\n ...[...getSearchCategoryEntries()]\n .sort((a, b) => a.order - b.order)\n .map(\n (entry): CategoryOption<SearchCategory> => ({\n id: entry.id,\n label: entry.label,\n icon: SEARCH_CATEGORY_ICONS[entry.id],\n }),\n ),\n];\n\nexport interface SearchesCatalogCategoryFilterState {\n value: SearchCategory | null;\n setValue: (value: SearchCategory | null) => void;\n options: ReadonlyArray<CategoryOption<SearchCategory>>;\n counts: Partial<Record<SearchCategory, number>>;\n totalCount: number;\n isActive: boolean;\n}\n\nexport interface SearchesCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", SearchesCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<SearchCategory>>;\n}\n\nexport function SearchesCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: SearchesCatalogCategoryFilterProps) {\n const ctx = useSearchesCatalogContext();\n const value = ctx.category;\n const isActive = value !== null;\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: {\n value,\n setValue: ctx.setCategory,\n options,\n counts: ctx.baselineCategoryCounts,\n totalCount: ctx.baselineCardCount,\n isActive,\n },\n stateAttributesMapping: {\n setValue: () => null,\n options: () => null,\n counts: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className,\n ...({ \"data-p0\": \"catalog-category-filter\" } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (render) return element;\n\n return (\n <DefaultCategoryFilter\n options={options}\n value={ctx.category}\n onChange={ctx.setCategory}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAUA,MAAM,wBAAwF;CAC5F,QAAQ;CACR,WAAW;CACX,YAAY;CACb;AAED,MAAM,kBAAiE,CACrE;CAAE,IAAI;CAAM,OAAO;CAAO,MAAM;CAAU,EAC1C,GAAG,CAAC,GAAG,0BAA0B,CAAC,CAC/B,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,KACE,WAA2C;CAC1C,IAAI,MAAM;CACV,OAAO,MAAM;CACb,MAAM,sBAAsB,MAAM;CACnC,EACF,CACJ;AAiBD,SAAgB,8BAA8B,EAC5C,UAAU,iBACV,WACA,QACA,GAAG,SACkC;CACrC,MAAM,MAAM,2BAA2B;CACvC,MAAM,QAAQ,IAAI;CAClB,MAAM,WAAW,UAAU;CAE3B,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GACL;GACA,UAAU,IAAI;GACd;GACA,QAAQ,IAAI;GACZ,YAAY,IAAI;GAChB;GACD;EACD,wBAAwB;GACtB,gBAAgB;GAChB,eAAe;GACf,cAAc;GACf;EACD,OAAO,WACL;GACE;GACM,WAAW;GAClB,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,oBAAC,uBAAD;EACW;EACT,OAAO,IAAI;EACX,UAAU,IAAI;EACH;EACX"}
@@ -7,6 +7,8 @@ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
7
7
  type SearchesColumnFilterId = "outputFields" | "providers" | "tags";
8
8
  interface ColumnFilterState {
9
9
  value: string;
10
+ setValue: (value: string | null) => void;
11
+ options: ReadonlyArray<FilterSelectOption>;
10
12
  isActive: boolean;
11
13
  }
12
14
  interface SearchesCatalogColumnFilterProps extends useRender.ComponentProps<"div", ColumnFilterState> {
@@ -1 +1 @@
1
- {"version":3,"file":"column-filter.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/column-filter.tsx"],"mappings":";;;;;;KASY,sBAAA;AAAA,UAEK,iBAAA;EACf,KAAA;EACA,QAAA;AAAA;AAAA,UAGe,gCAAA,SACP,SAAA,CAAU,cAAA,QAAsB,iBAAA;EACxC,EAAA,EAAI,sBAAA;EACJ,WAAA,GAAc,SAAA;EACd,OAAA,GAAU,aAAA,CAAc,kBAAA;AAAA;AAAA,iBAsBV,2BAAA,CAAA;EACd,EAAA;EACA,WAAA;EACA,OAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,gCAAA,GAAgC,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"column-filter.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/column-filter.tsx"],"mappings":";;;;;;KASY,sBAAA;AAAA,UAEK,iBAAA;EACf,KAAA;EACA,QAAA,GAAW,KAAA;EACX,OAAA,EAAS,aAAA,CAAc,kBAAA;EACvB,QAAA;AAAA;AAAA,UAGe,gCAAA,SACP,SAAA,CAAU,cAAA,QAAsB,iBAAA;EACxC,EAAA,EAAI,sBAAA;EACJ,WAAA,GAAc,SAAA;EACd,OAAA,GAAU,aAAA,CAAc,kBAAA;AAAA;AAAA,iBAsBV,2BAAA,CAAA;EACd,EAAA;EACA,WAAA;EACA,OAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,gCAAA,GAAgC,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -36,8 +36,14 @@ function SearchesCatalogColumnFilter({ id, placeholder, options, className, rend
36
36
  render,
37
37
  state: {
38
38
  value,
39
+ setValue,
40
+ options: resolvedOptions,
39
41
  isActive: !!value
40
42
  },
43
+ stateAttributesMapping: {
44
+ setValue: () => null,
45
+ options: () => null
46
+ },
41
47
  props: mergeProps({
42
48
  className,
43
49
  "data-p0": `catalog-column-filter-${id}`
@@ -1 +1 @@
1
- {"version":3,"file":"column-filter.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/column-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport {\n DefaultFilterSelect,\n type FilterSelectOption,\n} from \"../../defaults/catalog/filter-select.js\";\n\nexport type SearchesColumnFilterId = \"outputFields\" | \"providers\" | \"tags\";\n\nexport interface ColumnFilterState {\n value: string;\n isActive: boolean;\n}\n\nexport interface SearchesCatalogColumnFilterProps\n extends useRender.ComponentProps<\"div\", ColumnFilterState> {\n id: SearchesColumnFilterId;\n placeholder?: ReactNode;\n options?: ReadonlyArray<FilterSelectOption>;\n}\n\nfunction getDefaultOptions(\n id: SearchesColumnFilterId,\n ctx: ReturnType<typeof useSearchesCatalogContext>,\n): FilterSelectOption[] {\n let entries: ReadonlyArray<readonly [string, unknown]> = [];\n switch (id) {\n case \"outputFields\":\n entries = ctx.sortedOutputFieldEntries;\n break;\n case \"providers\":\n entries = ctx.sortedProviderEntries;\n break;\n case \"tags\":\n entries = ctx.sortedTagEntries;\n break;\n }\n return entries.map(([name]) => ({ label: name, value: name }));\n}\n\nexport function SearchesCatalogColumnFilter({\n id,\n placeholder,\n options,\n className,\n render,\n ...props\n}: SearchesCatalogColumnFilterProps) {\n const ctx = useSearchesCatalogContext();\n const value = ctx.getColumnFilterValue(id) || \"\";\n const resolvedOptions = options ?? getDefaultOptions(id, ctx);\n const setValue = (v: string | null) => {\n if (v == null) ctx.removeColumnFilter(id);\n else ctx.addColumnFilter(id, v);\n };\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { value, isActive: !!value },\n props: mergeProps<\"div\">(\n {\n className,\n ...({ \"data-p0\": `catalog-column-filter-${id}` } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (render) return element;\n\n return (\n <DefaultFilterSelect\n placeholder={placeholder}\n value={value}\n onChange={setValue}\n options={resolvedOptions}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;AAuBA,SAAS,kBACP,IACA,KACsB;CACtB,IAAI,UAAqD,EAAE;AAC3D,SAAQ,IAAR;EACE,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;;AAEJ,QAAO,QAAQ,KAAK,CAAC,WAAW;EAAE,OAAO;EAAM,OAAO;EAAM,EAAE;;AAGhE,SAAgB,4BAA4B,EAC1C,IACA,aACA,SACA,WACA,QACA,GAAG,SACgC;CACnC,MAAM,MAAM,2BAA2B;CACvC,MAAM,QAAQ,IAAI,qBAAqB,GAAG,IAAI;CAC9C,MAAM,kBAAkB,WAAW,kBAAkB,IAAI,IAAI;CAC7D,MAAM,YAAY,MAAqB;AACrC,MAAI,KAAK,KAAM,KAAI,mBAAmB,GAAG;MACpC,KAAI,gBAAgB,IAAI,EAAE;;CAGjC,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO,UAAU,CAAC,CAAC;GAAO;EACnC,OAAO,WACL;GACE;GACM,WAAW,yBAAyB;GAC3C,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,oBAAC,qBAAD;EACe;EACN;EACP,UAAU;EACV,SAAS;EACE;EACX"}
1
+ {"version":3,"file":"column-filter.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/column-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport {\n DefaultFilterSelect,\n type FilterSelectOption,\n} from \"../../defaults/catalog/filter-select.js\";\n\nexport type SearchesColumnFilterId = \"outputFields\" | \"providers\" | \"tags\";\n\nexport interface ColumnFilterState {\n value: string;\n setValue: (value: string | null) => void;\n options: ReadonlyArray<FilterSelectOption>;\n isActive: boolean;\n}\n\nexport interface SearchesCatalogColumnFilterProps\n extends useRender.ComponentProps<\"div\", ColumnFilterState> {\n id: SearchesColumnFilterId;\n placeholder?: ReactNode;\n options?: ReadonlyArray<FilterSelectOption>;\n}\n\nfunction getDefaultOptions(\n id: SearchesColumnFilterId,\n ctx: ReturnType<typeof useSearchesCatalogContext>,\n): FilterSelectOption[] {\n let entries: ReadonlyArray<readonly [string, unknown]> = [];\n switch (id) {\n case \"outputFields\":\n entries = ctx.sortedOutputFieldEntries;\n break;\n case \"providers\":\n entries = ctx.sortedProviderEntries;\n break;\n case \"tags\":\n entries = ctx.sortedTagEntries;\n break;\n }\n return entries.map(([name]) => ({ label: name, value: name }));\n}\n\nexport function SearchesCatalogColumnFilter({\n id,\n placeholder,\n options,\n className,\n render,\n ...props\n}: SearchesCatalogColumnFilterProps) {\n const ctx = useSearchesCatalogContext();\n const value = ctx.getColumnFilterValue(id) || \"\";\n const resolvedOptions = options ?? getDefaultOptions(id, ctx);\n const setValue = (v: string | null) => {\n if (v == null) ctx.removeColumnFilter(id);\n else ctx.addColumnFilter(id, v);\n };\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { value, setValue, options: resolvedOptions, isActive: !!value },\n stateAttributesMapping: {\n setValue: () => null,\n options: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className,\n ...({ \"data-p0\": `catalog-column-filter-${id}` } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (render) return element;\n\n return (\n <DefaultFilterSelect\n placeholder={placeholder}\n value={value}\n onChange={setValue}\n options={resolvedOptions}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;AAyBA,SAAS,kBACP,IACA,KACsB;CACtB,IAAI,UAAqD,EAAE;AAC3D,SAAQ,IAAR;EACE,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;EACF,KAAK;AACH,aAAU,IAAI;AACd;;AAEJ,QAAO,QAAQ,KAAK,CAAC,WAAW;EAAE,OAAO;EAAM,OAAO;EAAM,EAAE;;AAGhE,SAAgB,4BAA4B,EAC1C,IACA,aACA,SACA,WACA,QACA,GAAG,SACgC;CACnC,MAAM,MAAM,2BAA2B;CACvC,MAAM,QAAQ,IAAI,qBAAqB,GAAG,IAAI;CAC9C,MAAM,kBAAkB,WAAW,kBAAkB,IAAI,IAAI;CAC7D,MAAM,YAAY,MAAqB;AACrC,MAAI,KAAK,KAAM,KAAI,mBAAmB,GAAG;MACpC,KAAI,gBAAgB,IAAI,EAAE;;CAGjC,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO;GAAU,SAAS;GAAiB,UAAU,CAAC,CAAC;GAAO;EACvE,wBAAwB;GACtB,gBAAgB;GAChB,eAAe;GAChB;EACD,OAAO,WACL;GACE;GACM,WAAW,yBAAyB;GAC3C,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,oBAAC,qBAAD;EACe;EACN;EACP,UAAU;EACV,SAAS;EACE;EACX"}
@@ -1,8 +1,10 @@
1
+ import { SearchesCardData } from "../../../types/catalog-adapters.mjs";
1
2
  import { useRender } from "@base-ui/react/use-render";
2
3
  import * as _$react from "react";
3
4
 
4
5
  //#region src/components/compound/searches-catalog/list.d.ts
5
6
  interface SearchesCatalogListState {
7
+ cards: ReadonlyArray<SearchesCardData>;
6
8
  isEmpty: boolean;
7
9
  }
8
10
  interface SearchesCatalogListProps extends useRender.ComponentProps<"div", SearchesCatalogListState> {}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/list.tsx"],"mappings":";;;;UAMiB,wBAAA;EACf,OAAA;AAAA;AAAA,UAGe,wBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,wBAAA;AAAA,iBAE1B,mBAAA,CAAA;EACd,MAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,wBAAA,GAAwB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
1
+ {"version":3,"file":"list.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/list.tsx"],"mappings":";;;;;UAOiB,wBAAA;EACf,KAAA,EAAO,aAAA,CAAc,gBAAA;EACrB,OAAA;AAAA;AAAA,UAGe,wBAAA,SACP,SAAA,CAAU,cAAA,QAAsB,wBAAA;AAAA,iBAE1B,mBAAA,CAAA;EACd,MAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,wBAAA,GAAwB,OAAA,CAAA,YAAA,mBAAA,OAAA,CAAA,qBAAA"}
@@ -13,7 +13,11 @@ function SearchesCatalogList({ render, className, children, ...props }) {
13
13
  const element = useRender({
14
14
  defaultTagName: "div",
15
15
  render,
16
- state: { isEmpty },
16
+ state: {
17
+ cards,
18
+ isEmpty
19
+ },
20
+ stateAttributesMapping: { cards: () => null },
17
21
  props: mergeProps({
18
22
  className: cn("pz:flex pz:flex-col pz:gap-2", className),
19
23
  children: children ?? defaultBody,
@@ -1 +1 @@
1
- {"version":3,"file":"list.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/list.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { SearchesCatalogCard } from \"./card.js\";\n\nexport interface SearchesCatalogListState {\n isEmpty: boolean;\n}\n\nexport interface SearchesCatalogListProps\n extends useRender.ComponentProps<\"div\", SearchesCatalogListState> {}\n\nexport function SearchesCatalogList({\n render,\n className,\n children,\n ...props\n}: SearchesCatalogListProps) {\n const { cards } = useSearchesCatalogContext();\n const isEmpty = cards.length === 0;\n\n const defaultBody = cards.map((card, idx) => (\n <SearchesCatalogCard key={`${card.searchesId}-${idx}`} card={card} />\n ));\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { isEmpty },\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:flex-col pz:gap-2\", className),\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"catalog-list\" } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (isEmpty) return null;\n return element;\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,oBAAoB,EAClC,QACA,WACA,UACA,GAAG,SACwB;CAC3B,MAAM,EAAE,UAAU,2BAA2B;CAC7C,MAAM,UAAU,MAAM,WAAW;CAEjC,MAAM,cAAc,MAAM,KAAK,MAAM,QACnC,oBAAC,qBAAD,EAA6D,MAAQ,EAA3C,GAAG,KAAK,WAAW,GAAG,MAAqB,CACrE;CAEF,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO,EAAE,SAAS;EAClB,OAAO,WACL;GACE,WAAW,GAAG,gCAAgC,UAAU;GACxD,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC;AAEF,KAAI,QAAS,QAAO;AACpB,QAAO"}
1
+ {"version":3,"file":"list.mjs","names":[],"sources":["../../../../src/components/compound/searches-catalog/list.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { SearchesCardData } from \"../../../types/catalog-adapters.js\";\nimport { SearchesCatalogCard } from \"./card.js\";\n\nexport interface SearchesCatalogListState {\n cards: ReadonlyArray<SearchesCardData>;\n isEmpty: boolean;\n}\n\nexport interface SearchesCatalogListProps\n extends useRender.ComponentProps<\"div\", SearchesCatalogListState> {}\n\nexport function SearchesCatalogList({\n render,\n className,\n children,\n ...props\n}: SearchesCatalogListProps) {\n const { cards } = useSearchesCatalogContext();\n const isEmpty = cards.length === 0;\n\n const defaultBody = cards.map((card, idx) => (\n <SearchesCatalogCard key={`${card.searchesId}-${idx}`} card={card} />\n ));\n\n const element = useRender({\n defaultTagName: \"div\",\n render,\n state: { cards, isEmpty },\n stateAttributesMapping: {\n cards: () => null,\n },\n props: mergeProps<\"div\">(\n {\n className: cn(\"pz:flex pz:flex-col pz:gap-2\", className),\n children: children ?? defaultBody,\n ...({ \"data-p0\": \"catalog-list\" } as Record<string, string>),\n },\n props,\n ),\n });\n\n if (isEmpty) return null;\n return element;\n}\n"],"mappings":";;;;;;;;AAeA,SAAgB,oBAAoB,EAClC,QACA,WACA,UACA,GAAG,SACwB;CAC3B,MAAM,EAAE,UAAU,2BAA2B;CAC7C,MAAM,UAAU,MAAM,WAAW;CAEjC,MAAM,cAAc,MAAM,KAAK,MAAM,QACnC,oBAAC,qBAAD,EAA6D,MAAQ,EAA3C,GAAG,KAAK,WAAW,GAAG,MAAqB,CACrE;CAEF,MAAM,UAAU,UAAU;EACxB,gBAAgB;EAChB;EACA,OAAO;GAAE;GAAO;GAAS;EACzB,wBAAwB,EACtB,aAAa,MACd;EACD,OAAO,WACL;GACE,WAAW,GAAG,gCAAgC,UAAU;GACxD,UAAU,YAAY;GAChB,WAAW;GAClB,EACD,MACD;EACF,CAAC;AAEF,KAAI,QAAS,QAAO;AACpB,QAAO"}
@@ -4,6 +4,7 @@ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
4
  //#region src/components/compound/searches-catalog/search-filter.d.ts
5
5
  interface SearchesCatalogSearchFilterState {
6
6
  value: string;
7
+ setValue: (value: string) => void;
7
8
  isActive: boolean;
8
9
  }
9
10
  interface SearchesCatalogSearchFilterProps extends useRender.ComponentProps<"input", SearchesCatalogSearchFilterState> {
@@ -1 +1 @@
1
- {"version":3,"file":"search-filter.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/search-filter.tsx"],"mappings":";;;;UASiB,gCAAA;EACf,KAAA;EACA,QAAA;AAAA;AAAA,UAGe,gCAAA,SACP,SAAA,CAAU,cAAA,UAAwB,gCAAA;EAC1C,WAAA;AAAA;AAAA,iBAGc,2BAAA,CAAA;EACd,WAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,gCAAA,GAAgC,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"search-filter.d.mts","names":[],"sources":["../../../../src/components/compound/searches-catalog/search-filter.tsx"],"mappings":";;;;UASiB,gCAAA;EACf,KAAA;EACA,QAAA,GAAW,KAAA;EACX,QAAA;AAAA;AAAA,UAGe,gCAAA,SACP,SAAA,CAAU,cAAA,UAAwB,gCAAA;EAC1C,WAAA;AAAA;AAAA,iBAGc,2BAAA,CAAA;EACd,WAAA;EACA,SAAA;EACA,MAAA;EAAA,GACG;AAAA,GACF,gCAAA,GAAgC,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -16,8 +16,10 @@ function SearchesCatalogSearchFilter({ placeholder = "Search searches...", class
16
16
  render,
17
17
  state: {
18
18
  value: globalFilterInput,
19
+ setValue: setGlobalFilterInput,
19
20
  isActive: !!globalFilterInput
20
21
  },
22
+ stateAttributesMapping: { setValue: () => null },
21
23
  props: mergeProps({
22
24
  type: "search",
23
25
  placeholder,
@@ -1 +1 @@
1
- {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/searches-catalog/search-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { Search as SearchIcon } from \"lucide-react\";\nimport type { ChangeEvent } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface SearchesCatalogSearchFilterState {\n value: string;\n isActive: boolean;\n}\n\nexport interface SearchesCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", SearchesCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function SearchesCatalogSearchFilter({\n placeholder = \"Search searches...\",\n className,\n render,\n ...props\n}: SearchesCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = useSearchesCatalogContext();\n const { classNames } = useCatalogConfig();\n const isActive = !!globalFilterInput;\n\n const inputElement = useRender({\n defaultTagName: \"input\",\n render,\n state: { value: globalFilterInput, isActive },\n props: mergeProps<\"input\">(\n {\n type: \"search\",\n placeholder,\n value: globalFilterInput,\n onChange: (e: ChangeEvent<HTMLInputElement>) => setGlobalFilterInput(e.target.value),\n className: render ? cn(classNames?.searchInput, className) : undefined,\n },\n props,\n ),\n });\n\n if (render) return inputElement;\n\n return (\n <div data-p0=\"catalog-search\" className={cn(\"pz:relative\", classNames?.searchInputContainer)}>\n <SearchIcon className=\"pz:absolute pz:left-2.5 pz:top-1/2 pz:-translate-y-1/2 pz:size-4 pz:text-muted-foreground pz:pointer-events-none\" />\n <Input\n type=\"search\"\n placeholder={placeholder}\n value={globalFilterInput}\n onChange={(e) => setGlobalFilterInput(e.target.value)}\n className={cn(\"pz:pl-8\", classNames?.searchInput, className)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAmBA,SAAgB,4BAA4B,EAC1C,cAAc,sBACd,WACA,QACA,GAAG,SACgC;CACnC,MAAM,EAAE,mBAAmB,yBAAyB,2BAA2B;CAC/E,MAAM,EAAE,eAAe,kBAAkB;CAGzC,MAAM,eAAe,UAAU;EAC7B,gBAAgB;EAChB;EACA,OAAO;GAAE,OAAO;GAAmB,UALpB,CAAC,CAAC;GAK4B;EAC7C,OAAO,WACL;GACE,MAAM;GACN;GACA,OAAO;GACP,WAAW,MAAqC,qBAAqB,EAAE,OAAO,MAAM;GACpF,WAAW,SAAS,GAAG,YAAY,aAAa,UAAU,GAAG;GAC9D,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAiB,WAAW,GAAG,eAAe,YAAY,qBAAqB;YAA5F,CACE,oBAACA,QAAD,EAAY,WAAU,oHAAqH,GAC3I,oBAAC,OAAD;GACE,MAAK;GACQ;GACb,OAAO;GACP,WAAW,MAAM,qBAAqB,EAAE,OAAO,MAAM;GACrD,WAAW,GAAG,WAAW,YAAY,aAAa,UAAU;GAC5D,EACE"}
1
+ {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/searches-catalog/search-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { Search as SearchIcon } from \"lucide-react\";\nimport type { ChangeEvent } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { useSearchesCatalogContext } from \"../../../context/searches-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface SearchesCatalogSearchFilterState {\n value: string;\n setValue: (value: string) => void;\n isActive: boolean;\n}\n\nexport interface SearchesCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", SearchesCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function SearchesCatalogSearchFilter({\n placeholder = \"Search searches...\",\n className,\n render,\n ...props\n}: SearchesCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = useSearchesCatalogContext();\n const { classNames } = useCatalogConfig();\n const isActive = !!globalFilterInput;\n\n const inputElement = useRender({\n defaultTagName: \"input\",\n render,\n state: { value: globalFilterInput, setValue: setGlobalFilterInput, isActive },\n stateAttributesMapping: {\n setValue: () => null,\n },\n props: mergeProps<\"input\">(\n {\n type: \"search\",\n placeholder,\n value: globalFilterInput,\n onChange: (e: ChangeEvent<HTMLInputElement>) => setGlobalFilterInput(e.target.value),\n className: render ? cn(classNames?.searchInput, className) : undefined,\n },\n props,\n ),\n });\n\n if (render) return inputElement;\n\n return (\n <div data-p0=\"catalog-search\" className={cn(\"pz:relative\", classNames?.searchInputContainer)}>\n <SearchIcon className=\"pz:absolute pz:left-2.5 pz:top-1/2 pz:-translate-y-1/2 pz:size-4 pz:text-muted-foreground pz:pointer-events-none\" />\n <Input\n type=\"search\"\n placeholder={placeholder}\n value={globalFilterInput}\n onChange={(e) => setGlobalFilterInput(e.target.value)}\n className={cn(\"pz:pl-8\", classNames?.searchInput, className)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAoBA,SAAgB,4BAA4B,EAC1C,cAAc,sBACd,WACA,QACA,GAAG,SACgC;CACnC,MAAM,EAAE,mBAAmB,yBAAyB,2BAA2B;CAC/E,MAAM,EAAE,eAAe,kBAAkB;CAGzC,MAAM,eAAe,UAAU;EAC7B,gBAAgB;EAChB;EACA,OAAO;GAAE,OAAO;GAAmB,UAAU;GAAsB,UALpD,CAAC,CAAC;GAK4D;EAC7E,wBAAwB,EACtB,gBAAgB,MACjB;EACD,OAAO,WACL;GACE,MAAM;GACN;GACA,OAAO;GACP,WAAW,MAAqC,qBAAqB,EAAE,OAAO,MAAM;GACpF,WAAW,SAAS,GAAG,YAAY,aAAa,UAAU,GAAG;GAC9D,EACD,MACD;EACF,CAAC;AAEF,KAAI,OAAQ,QAAO;AAEnB,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAiB,WAAW,GAAG,eAAe,YAAY,qBAAqB;YAA5F,CACE,oBAACA,QAAD,EAAY,WAAU,oHAAqH,GAC3I,oBAAC,OAAD;GACE,MAAK;GACQ;GACb,OAAO;GACP,WAAW,MAAM,qBAAqB,EAAE,OAAO,MAAM;GACrD,WAAW,GAAG,WAAW,YAAY,aAAa,UAAU;GAC5D,EACE"}
@@ -53,6 +53,7 @@ function ConnectorInputAdapter(field) {
53
53
  type: "button",
54
54
  variant: "link",
55
55
  size: "xs",
56
+ className: "pz:px-0",
56
57
  onClick: () => field.setValue({ connections: [] }),
57
58
  children: [/* @__PURE__ */ jsx(IconPlus, {}), "Add custom connection"]
58
59
  })
@@ -1 +1 @@
1
- {"version":3,"file":"connector-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/connector-input.tsx"],"sourcesContent":["import type { ProviderName } from \"@pipe0/base\";\nimport { useMemo } 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 { ProviderLogo } from \"../../../widgets/provider-logo.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\nimport { IconPlus } from \"../../internal/icons.js\";\nimport { Button } from \"../../ui/button.js\";\n\nexport function ConnectorInputAdapter(field: FieldHandle<\"connector_input\">) {\n const connections = field.meta.filteredConnections ?? [];\n const value = field.value ?? null;\n const current = value?.connections ?? [];\n const error = useFieldError(field.form, field.path);\n const hasError = !!error;\n\n const options = useMemo(\n () =>\n connections.map((c) => ({\n value: c.connection,\n label: c.connection,\n })),\n [connections],\n );\n\n const providerByConnection = useMemo(() => {\n const map = new Map<string, string>();\n for (const c of connections) map.set(c.connection, c.provider);\n return map;\n }, [connections]);\n\n const renderLogo = (connectionId: string) => {\n const provider = providerByConnection.get(connectionId);\n if (!provider) return null;\n return <ProviderLogo provider={provider as ProviderName} size={16} />;\n };\n\n if (field.meta.connectorMode === \"disabled\") {\n return (\n <div\n data-p0=\"input\"\n className=\"pz:flex pz:items-center pz:rounded-md pz:border pz:border-input pz:bg-muted pz:px-3 pz:py-2 pz:opacity-60\"\n >\n <span className=\"pz:text-sm pz:text-muted-foreground\">\n Custom connections are not supported for this pipe.\n </span>\n </div>\n );\n }\n\n if (connections.length === 0) {\n return (\n <div\n data-p0=\"input\"\n className=\"pz:flex pz:flex-col pz:gap-2 pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:px-3 pz:py-2\"\n >\n <span className=\"pz:text-xs pz:text-muted-foreground\">No connections available.</span>\n </div>\n );\n }\n\n if (value == null) {\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:items-center\">\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"xs\"\n onClick={() => field.setValue({ connections: [] })}\n >\n <IconPlus />\n Add custom connection\n </Button>\n </div>\n );\n }\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className={cn(hasError && \"pz:[&_[data-slot=combobox-chips]]:border-destructive\")}>\n <SuggestCombobox\n value={current.map((c) => c.connection)}\n onChange={(next) =>\n field.setValue({\n ...value,\n connections: next.map((connection) => ({\n type: \"vault\",\n connection,\n })),\n })\n }\n options={options}\n iconFor={renderLogo}\n ariaInvalid={hasError}\n placeholder=\"Select a connection\"\n />\n </div>\n <div className=\"pz:flex pz:items-center pz:justify-end\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" onClick={() => field.setValue(null)}>\n Reset\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,sBAAsB,OAAuC;CAC3E,MAAM,cAAc,MAAM,KAAK,uBAAuB,EAAE;CACxD,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,UAAU,OAAO,eAAe,EAAE;CAExC,MAAM,WAAW,CAAC,CADJ,cAAc,MAAM,MAAM,MAAM,KAAK;CAGnD,MAAM,UAAU,cAEZ,YAAY,KAAK,OAAO;EACtB,OAAO,EAAE;EACT,OAAO,EAAE;EACV,EAAE,EACL,CAAC,YAAY,CACd;CAED,MAAM,uBAAuB,cAAc;EACzC,MAAM,sBAAM,IAAI,KAAqB;AACrC,OAAK,MAAM,KAAK,YAAa,KAAI,IAAI,EAAE,YAAY,EAAE,SAAS;AAC9D,SAAO;IACN,CAAC,YAAY,CAAC;CAEjB,MAAM,cAAc,iBAAyB;EAC3C,MAAM,WAAW,qBAAqB,IAAI,aAAa;AACvD,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,oBAAC,cAAD;GAAwB;GAA0B,MAAM;GAAM;;AAGvE,KAAI,MAAM,KAAK,kBAAkB,WAC/B,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,WAAU;YAEV,oBAAC,QAAD;GAAM,WAAU;aAAsC;GAE/C;EACH;AAIV,KAAI,YAAY,WAAW,EACzB,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,WAAU;YAEV,oBAAC,QAAD;GAAM,WAAU;aAAsC;GAAgC;EAClF;AAIV,KAAI,SAAS,KACX,QACE,oBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAC7B,qBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,eAAe,MAAM,SAAS,EAAE,aAAa,EAAE,EAAE,CAAC;aAJpD,CAME,oBAAC,UAAD,EAAY,2BAEL;;EACL;AAIV,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B,CACE,oBAAC,OAAD;GAAK,WAAW,GAAG,YAAY,uDAAuD;aACpF,oBAAC,iBAAD;IACE,OAAO,QAAQ,KAAK,MAAM,EAAE,WAAW;IACvC,WAAW,SACT,MAAM,SAAS;KACb,GAAG;KACH,aAAa,KAAK,KAAK,gBAAgB;MACrC,MAAM;MACN;MACD,EAAE;KACJ,CAAC;IAEK;IACT,SAAS;IACT,aAAa;IACb,aAAY;IACZ;GACE,GACN,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,QAAD;IAAQ,MAAK;IAAS,SAAQ;IAAO,MAAK;IAAK,eAAe,MAAM,SAAS,KAAK;cAAE;IAE3E;GACL,EACF"}
1
+ {"version":3,"file":"connector-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/connector-input.tsx"],"sourcesContent":["import type { ProviderName } from \"@pipe0/base\";\nimport { useMemo } 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 { ProviderLogo } from \"../../../widgets/provider-logo.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\nimport { IconPlus } from \"../../internal/icons.js\";\nimport { Button } from \"../../ui/button.js\";\n\nexport function ConnectorInputAdapter(field: FieldHandle<\"connector_input\">) {\n const connections = field.meta.filteredConnections ?? [];\n const value = field.value ?? null;\n const current = value?.connections ?? [];\n const error = useFieldError(field.form, field.path);\n const hasError = !!error;\n\n const options = useMemo(\n () =>\n connections.map((c) => ({\n value: c.connection,\n label: c.connection,\n })),\n [connections],\n );\n\n const providerByConnection = useMemo(() => {\n const map = new Map<string, string>();\n for (const c of connections) map.set(c.connection, c.provider);\n return map;\n }, [connections]);\n\n const renderLogo = (connectionId: string) => {\n const provider = providerByConnection.get(connectionId);\n if (!provider) return null;\n return <ProviderLogo provider={provider as ProviderName} size={16} />;\n };\n\n if (field.meta.connectorMode === \"disabled\") {\n return (\n <div\n data-p0=\"input\"\n className=\"pz:flex pz:items-center pz:rounded-md pz:border pz:border-input pz:bg-muted pz:px-3 pz:py-2 pz:opacity-60\"\n >\n <span className=\"pz:text-sm pz:text-muted-foreground\">\n Custom connections are not supported for this pipe.\n </span>\n </div>\n );\n }\n\n if (connections.length === 0) {\n return (\n <div\n data-p0=\"input\"\n className=\"pz:flex pz:flex-col pz:gap-2 pz:rounded-md pz:border pz:border-input pz:bg-transparent pz:px-3 pz:py-2\"\n >\n <span className=\"pz:text-xs pz:text-muted-foreground\">No connections available.</span>\n </div>\n );\n }\n\n if (value == null) {\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:items-center\">\n <Button\n type=\"button\"\n variant=\"link\"\n size=\"xs\"\n className=\"pz:px-0\"\n onClick={() => field.setValue({ connections: [] })}\n >\n <IconPlus />\n Add custom connection\n </Button>\n </div>\n );\n }\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-1\">\n <div className={cn(hasError && \"pz:[&_[data-slot=combobox-chips]]:border-destructive\")}>\n <SuggestCombobox\n value={current.map((c) => c.connection)}\n onChange={(next) =>\n field.setValue({\n ...value,\n connections: next.map((connection) => ({\n type: \"vault\",\n connection,\n })),\n })\n }\n options={options}\n iconFor={renderLogo}\n ariaInvalid={hasError}\n placeholder=\"Select a connection\"\n />\n </div>\n <div className=\"pz:flex pz:items-center pz:justify-end\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" onClick={() => field.setValue(null)}>\n Reset\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,sBAAsB,OAAuC;CAC3E,MAAM,cAAc,MAAM,KAAK,uBAAuB,EAAE;CACxD,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,UAAU,OAAO,eAAe,EAAE;CAExC,MAAM,WAAW,CAAC,CADJ,cAAc,MAAM,MAAM,MAAM,KAAK;CAGnD,MAAM,UAAU,cAEZ,YAAY,KAAK,OAAO;EACtB,OAAO,EAAE;EACT,OAAO,EAAE;EACV,EAAE,EACL,CAAC,YAAY,CACd;CAED,MAAM,uBAAuB,cAAc;EACzC,MAAM,sBAAM,IAAI,KAAqB;AACrC,OAAK,MAAM,KAAK,YAAa,KAAI,IAAI,EAAE,YAAY,EAAE,SAAS;AAC9D,SAAO;IACN,CAAC,YAAY,CAAC;CAEjB,MAAM,cAAc,iBAAyB;EAC3C,MAAM,WAAW,qBAAqB,IAAI,aAAa;AACvD,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,oBAAC,cAAD;GAAwB;GAA0B,MAAM;GAAM;;AAGvE,KAAI,MAAM,KAAK,kBAAkB,WAC/B,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,WAAU;YAEV,oBAAC,QAAD;GAAM,WAAU;aAAsC;GAE/C;EACH;AAIV,KAAI,YAAY,WAAW,EACzB,QACE,oBAAC,OAAD;EACE,WAAQ;EACR,WAAU;YAEV,oBAAC,QAAD;GAAM,WAAU;aAAsC;GAAgC;EAClF;AAIV,KAAI,SAAS,KACX,QACE,oBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAC7B,qBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAK;GACL,WAAU;GACV,eAAe,MAAM,SAAS,EAAE,aAAa,EAAE,EAAE,CAAC;aALpD,CAOE,oBAAC,UAAD,EAAY,2BAEL;;EACL;AAIV,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B,CACE,oBAAC,OAAD;GAAK,WAAW,GAAG,YAAY,uDAAuD;aACpF,oBAAC,iBAAD;IACE,OAAO,QAAQ,KAAK,MAAM,EAAE,WAAW;IACvC,WAAW,SACT,MAAM,SAAS;KACb,GAAG;KACH,aAAa,KAAK,KAAK,gBAAgB;MACrC,MAAM;MACN;MACD,EAAE;KACJ,CAAC;IAEK;IACT,SAAS;IACT,aAAa;IACb,aAAY;IACZ;GACE,GACN,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,QAAD;IAAQ,MAAK;IAAS,SAAQ;IAAO,MAAK;IAAK,eAAe,MAAM,SAAS,KAAK;cAAE;IAE3E;GACL,EACF"}