@pipe0/react 1.0.36 → 1.0.38

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 (96) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/components/compound/effect-catalog/category-filter.mjs +1 -1
  3. package/dist/components/compound/effect-catalog/category-filter.mjs.map +1 -1
  4. package/dist/components/compound/effect-catalog/search-filter.mjs +1 -1
  5. package/dist/components/compound/effect-catalog/search-filter.mjs.map +1 -1
  6. package/dist/components/compound/pipe-catalog/category-filter.mjs +1 -1
  7. package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -1
  8. package/dist/components/compound/pipe-catalog/input-field-filter.mjs +1 -1
  9. package/dist/components/compound/pipe-catalog/input-field-filter.mjs.map +1 -1
  10. package/dist/components/compound/pipe-catalog/output-field-filter.mjs +1 -1
  11. package/dist/components/compound/pipe-catalog/output-field-filter.mjs.map +1 -1
  12. package/dist/components/compound/pipe-catalog/provider-filter.mjs +1 -1
  13. package/dist/components/compound/pipe-catalog/provider-filter.mjs.map +1 -1
  14. package/dist/components/compound/pipe-catalog/search-filter.mjs +1 -1
  15. package/dist/components/compound/pipe-catalog/search-filter.mjs.map +1 -1
  16. package/dist/components/compound/pipe-catalog/tag-filter.mjs +1 -1
  17. package/dist/components/compound/pipe-catalog/tag-filter.mjs.map +1 -1
  18. package/dist/components/compound/search-catalog/category-filter.mjs +1 -1
  19. package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -1
  20. package/dist/components/compound/search-catalog/output-field-filter.mjs +1 -1
  21. package/dist/components/compound/search-catalog/output-field-filter.mjs.map +1 -1
  22. package/dist/components/compound/search-catalog/provider-filter.mjs +1 -1
  23. package/dist/components/compound/search-catalog/provider-filter.mjs.map +1 -1
  24. package/dist/components/compound/search-catalog/search-filter.mjs +1 -1
  25. package/dist/components/compound/search-catalog/search-filter.mjs.map +1 -1
  26. package/dist/components/compound/search-catalog/tag-filter.mjs +1 -1
  27. package/dist/components/compound/search-catalog/tag-filter.mjs.map +1 -1
  28. package/dist/components/defaults/adapters/json-extraction-input.mjs +1 -1
  29. package/dist/components/defaults/adapters/loose-object-input.mjs +1 -1
  30. package/dist/components/defaults/adapters/loose-object-input.mjs.map +1 -1
  31. package/dist/components/defaults/adapters/pipes-run-if-input.mjs +1 -1
  32. package/dist/components/defaults/adapters/prompt-input.mjs +1 -1
  33. package/dist/components/defaults/adapters/property-list-input.mjs +32 -16
  34. package/dist/components/defaults/adapters/property-list-input.mjs.map +1 -1
  35. package/dist/components/defaults/adapters/providers-input.mjs +1 -2
  36. package/dist/components/defaults/adapters/providers-input.mjs.map +1 -1
  37. package/dist/components/defaults/adapters/select-input.mjs +1 -1
  38. package/dist/components/defaults/adapters/select-input.mjs.map +1 -1
  39. package/dist/components/defaults/adapters/tagged-ordered-multi-create-input.mjs +2 -3
  40. package/dist/components/defaults/adapters/tagged-ordered-multi-create-input.mjs.map +1 -1
  41. package/dist/components/defaults/adapters/tagged-text-input.mjs +1 -1
  42. package/dist/components/defaults/adapters/tagged-text-input.mjs.map +1 -1
  43. package/dist/components/defaults/catalog/active-filter-pill.mjs +1 -1
  44. package/dist/components/defaults/catalog/active-filter-pill.mjs.map +1 -1
  45. package/dist/components/defaults/catalog/card-derived.d.mts.map +1 -1
  46. package/dist/components/defaults/catalog/card-derived.mjs +9 -6
  47. package/dist/components/defaults/catalog/card-derived.mjs.map +1 -1
  48. package/dist/components/defaults/catalog/category-section.d.mts +2 -2
  49. package/dist/components/defaults/catalog/category-section.d.mts.map +1 -1
  50. package/dist/components/defaults/catalog/category-section.mjs +10 -15
  51. package/dist/components/defaults/catalog/category-section.mjs.map +1 -1
  52. package/dist/components/defaults/catalog/provider-avatars.mjs +1 -1
  53. package/dist/components/defaults/catalog/provider-avatars.mjs.map +1 -1
  54. package/dist/components/defaults/layout/field-wrapper.mjs +2 -2
  55. package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -1
  56. package/dist/components/defaults/layout/group.mjs +2 -1
  57. package/dist/components/defaults/layout/group.mjs.map +1 -1
  58. package/dist/components/defaults/layout/section.mjs +5 -8
  59. package/dist/components/defaults/layout/section.mjs.map +1 -1
  60. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs +1 -1
  61. package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs.map +1 -1
  62. package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs +1 -1
  63. package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs.map +1 -1
  64. package/dist/components/internal/combobox/include-exclude-combobox.mjs +2 -3
  65. package/dist/components/internal/combobox/include-exclude-combobox.mjs.map +1 -1
  66. package/dist/components/internal/combobox/suggest-combobox.mjs +2 -3
  67. package/dist/components/internal/combobox/suggest-combobox.mjs.map +1 -1
  68. package/dist/components/internal/icons.d.mts +14 -0
  69. package/dist/components/internal/icons.d.mts.map +1 -0
  70. package/dist/components/internal/icons.mjs +137 -185
  71. package/dist/components/internal/icons.mjs.map +1 -1
  72. package/dist/components/ui/combobox.mjs +4 -4
  73. package/dist/components/ui/combobox.mjs.map +1 -1
  74. package/dist/components/ui/select.mjs +5 -5
  75. package/dist/components/ui/select.mjs.map +1 -1
  76. package/dist/hooks/use-pipe-catalog-table.d.mts +8 -8
  77. package/dist/hooks/use-search-catalog-table.d.mts +6 -6
  78. package/dist/styles/pipe0-form.css +1 -1
  79. package/dist/utils/catalog-helpers.d.mts +4 -5
  80. package/dist/utils/catalog-helpers.d.mts.map +1 -1
  81. package/dist/utils/catalog-helpers.mjs +4 -4
  82. package/dist/utils/catalog-helpers.mjs.map +1 -1
  83. package/dist/widgets/avatar-group.d.mts +12 -3
  84. package/dist/widgets/avatar-group.d.mts.map +1 -1
  85. package/dist/widgets/avatar-group.mjs +173 -50
  86. package/dist/widgets/avatar-group.mjs.map +1 -1
  87. package/dist/widgets/field-type-badge.d.mts.map +1 -1
  88. package/dist/widgets/field-type-badge.mjs +1 -1
  89. package/dist/widgets/field-type-badge.mjs.map +1 -1
  90. package/dist/widgets/icon-glyph.mjs +2 -3
  91. package/dist/widgets/icon-glyph.mjs.map +1 -1
  92. package/dist/widgets/token-pricing-badge.mjs +1 -1
  93. package/dist/widgets/token-pricing-badge.mjs.map +1 -1
  94. package/package.json +4 -3
  95. package/dist/widgets/glyphs/linkedin.mjs +0 -32
  96. package/dist/widgets/glyphs/linkedin.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @pipe0/elements-react
2
2
 
3
+ ## 1.0.38
4
+
5
+ ### Patch Changes
6
+
7
+ - a7a7d88: feat: add Happenstance network search, warm intro and company contacts
8
+ - e0ae99e: New pipes
9
+ - Updated dependencies [a7a7d88]
10
+ - Updated dependencies [e0ae99e]
11
+ - @pipe0/base@1.0.38
12
+
13
+ ## 1.0.37
14
+
15
+ ### Patch Changes
16
+
17
+ - a869751: Restructure CRM enrichments
18
+ - Updated dependencies [a869751]
19
+ - @pipe0/base@1.0.37
20
+
3
21
  ## 1.0.36
4
22
 
5
23
  ### Patch Changes
@@ -1,10 +1,10 @@
1
1
  import { useEffectCatalogContext } from "../../../context/effect-catalog-context.mjs";
2
2
  import { DefaultCategoryFilter } from "../../defaults/catalog/category-filter.mjs";
3
+ import { Cog, Eraser, Sparkles, X, Zap } from "../../internal/icons.mjs";
3
4
  import { mergeProps } from "@base-ui/react/merge-props";
4
5
  import { useRender } from "@base-ui/react/use-render";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  import { getSheetEffectCategoryEntries } from "@pipe0/base";
7
- import { Cog, Eraser, Sparkles, X, Zap } from "lucide-react";
8
8
 
9
9
  //#region src/components/compound/effect-catalog/category-filter.tsx
10
10
  const EFFECT_CATEGORY_ICONS = {
@@ -1 +1 @@
1
- {"version":3,"file":"category-filter.mjs","names":[],"sources":["../../../../src/components/compound/effect-catalog/category-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { getSheetEffectCategoryEntries, type SheetEffectCategory } from \"@pipe0/base\";\nimport { Cog, Eraser, Sparkles, X, Zap } from \"lucide-react\";\nimport { useEffectCatalogContext } from \"../../../context/effect-catalog-context.js\";\nimport {\n type CategoryOption,\n DefaultCategoryFilter,\n} from \"../../defaults/catalog/category-filter.js\";\n\nconst EFFECT_CATEGORY_ICONS: Record<\n SheetEffectCategory,\n CategoryOption<SheetEffectCategory>[\"icon\"]\n> = {\n data_hygiene: Eraser,\n enrichment: Zap,\n internal: Cog,\n deprecated: X,\n};\n\nconst DEFAULT_OPTIONS: ReadonlyArray<CategoryOption<SheetEffectCategory>> = [\n { id: null, label: \"All\", icon: Sparkles },\n ...[...getSheetEffectCategoryEntries()]\n .sort((a, b) => a.order - b.order)\n .map(\n (entry): CategoryOption<SheetEffectCategory> => ({\n id: entry.id,\n label: entry.label,\n icon: EFFECT_CATEGORY_ICONS[entry.id],\n }),\n ),\n];\n\nexport interface EffectCatalogCategoryFilterState {\n value: SheetEffectCategory | null;\n setValue: (value: SheetEffectCategory | null) => void;\n options: ReadonlyArray<CategoryOption<SheetEffectCategory>>;\n counts: Partial<Record<SheetEffectCategory, number>>;\n totalCount: number;\n isActive: boolean;\n}\n\nexport interface EffectCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", EffectCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<SheetEffectCategory>>;\n}\n\nexport function EffectCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: EffectCatalogCategoryFilterProps) {\n const ctx = useEffectCatalogContext();\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,wBAGF;CACF,cAAc;CACd,YAAY;CACZ,UAAU;CACV,YAAY;CACb;AAED,MAAM,kBAAsE,CAC1E;CAAE,IAAI;CAAM,OAAO;CAAO,MAAM;CAAU,EAC1C,GAAG,CAAC,GAAG,+BAA+B,CAAC,CACpC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,KACE,WAAgD;CAC/C,IAAI,MAAM;CACV,OAAO,MAAM;CACb,MAAM,sBAAsB,MAAM;CACnC,EACF,CACJ;AAiBD,SAAgB,4BAA4B,EAC1C,UAAU,iBACV,WACA,QACA,GAAG,SACgC;CACnC,MAAM,MAAM,yBAAyB;CACrC,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"}
1
+ {"version":3,"file":"category-filter.mjs","names":[],"sources":["../../../../src/components/compound/effect-catalog/category-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { getSheetEffectCategoryEntries, type SheetEffectCategory } from \"@pipe0/base\";\nimport { useEffectCatalogContext } from \"../../../context/effect-catalog-context.js\";\nimport {\n type CategoryOption,\n DefaultCategoryFilter,\n} from \"../../defaults/catalog/category-filter.js\";\nimport { Cog, Eraser, Sparkles, X, Zap } from \"../../internal/icons.js\";\n\nconst EFFECT_CATEGORY_ICONS: Record<\n SheetEffectCategory,\n CategoryOption<SheetEffectCategory>[\"icon\"]\n> = {\n data_hygiene: Eraser,\n enrichment: Zap,\n internal: Cog,\n deprecated: X,\n};\n\nconst DEFAULT_OPTIONS: ReadonlyArray<CategoryOption<SheetEffectCategory>> = [\n { id: null, label: \"All\", icon: Sparkles },\n ...[...getSheetEffectCategoryEntries()]\n .sort((a, b) => a.order - b.order)\n .map(\n (entry): CategoryOption<SheetEffectCategory> => ({\n id: entry.id,\n label: entry.label,\n icon: EFFECT_CATEGORY_ICONS[entry.id],\n }),\n ),\n];\n\nexport interface EffectCatalogCategoryFilterState {\n value: SheetEffectCategory | null;\n setValue: (value: SheetEffectCategory | null) => void;\n options: ReadonlyArray<CategoryOption<SheetEffectCategory>>;\n counts: Partial<Record<SheetEffectCategory, number>>;\n totalCount: number;\n isActive: boolean;\n}\n\nexport interface EffectCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", EffectCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<SheetEffectCategory>>;\n}\n\nexport function EffectCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: EffectCatalogCategoryFilterProps) {\n const ctx = useEffectCatalogContext();\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,wBAGF;CACF,cAAc;CACd,YAAY;CACZ,UAAU;CACV,YAAY;CACb;AAED,MAAM,kBAAsE,CAC1E;CAAE,IAAI;CAAM,OAAO;CAAO,MAAM;CAAU,EAC1C,GAAG,CAAC,GAAG,+BAA+B,CAAC,CACpC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,KACE,WAAgD;CAC/C,IAAI,MAAM;CACV,OAAO,MAAM;CACb,MAAM,sBAAsB,MAAM;CACnC,EACF,CACJ;AAiBD,SAAgB,4BAA4B,EAC1C,UAAU,iBACV,WACA,QACA,GAAG,SACgC;CACnC,MAAM,MAAM,yBAAyB;CACrC,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"}
@@ -1,11 +1,11 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { useCatalogConfig } from "../../../context/catalog-config-context.mjs";
3
3
  import { useEffectCatalogContext } from "../../../context/effect-catalog-context.mjs";
4
+ import { Search } from "../../internal/icons.mjs";
4
5
  import { Input } from "../../ui/input.mjs";
5
6
  import { mergeProps } from "@base-ui/react/merge-props";
6
7
  import { useRender } from "@base-ui/react/use-render";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
- import { Search } from "lucide-react";
9
9
 
10
10
  //#region src/components/compound/effect-catalog/search-filter.tsx
11
11
  function EffectCatalogSearchFilter({ placeholder = "Search effects...", className, render, ...props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/effect-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 { useEffectCatalogContext } from \"../../../context/effect-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface EffectCatalogSearchFilterState {\n value: string;\n setValue: (value: string) => void;\n isActive: boolean;\n}\n\nexport interface EffectCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", EffectCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function EffectCatalogSearchFilter({\n placeholder = \"Search effects...\",\n className,\n render,\n ...props\n}: EffectCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = useEffectCatalogContext();\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,qBACd,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
+ {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/effect-catalog/search-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { ChangeEvent } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { useEffectCatalogContext } from \"../../../context/effect-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Search as SearchIcon } from \"../../internal/icons.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface EffectCatalogSearchFilterState {\n value: string;\n setValue: (value: string) => void;\n isActive: boolean;\n}\n\nexport interface EffectCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", EffectCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function EffectCatalogSearchFilter({\n placeholder = \"Search effects...\",\n className,\n render,\n ...props\n}: EffectCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = useEffectCatalogContext();\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,qBACd,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,10 @@
1
1
  import { usePipeCatalogContext } from "../../../context/pipe-catalog-context.mjs";
2
2
  import { DefaultCategoryFilter } from "../../defaults/catalog/category-filter.mjs";
3
+ import { Building2, Database, Hammer, Plug, ScanFace, Search, Users, X, Zap } from "../../internal/icons.mjs";
3
4
  import { mergeProps } from "@base-ui/react/merge-props";
4
5
  import { useRender } from "@base-ui/react/use-render";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  import { getPipeCategoryEntries } from "@pipe0/base";
7
- import { Building2, Database, Hammer, Plug, ScanFace, Search, Users, X, Zap } from "lucide-react";
8
8
 
9
9
  //#region src/components/compound/pipe-catalog/category-filter.tsx
10
10
  const PIPE_CATEGORY_ICONS = {
@@ -1 +1 @@
1
- {"version":3,"file":"category-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/pipe-catalog/category-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { getPipeCategoryEntries, type PipeCategory } from \"@pipe0/base\";\nimport {\n Building2,\n Database,\n Hammer,\n Plug,\n ScanFace,\n Search as SearchIcon,\n Users,\n X,\n Zap,\n} from \"lucide-react\";\nimport { usePipeCatalogContext } from \"../../../context/pipe-catalog-context.js\";\nimport {\n type CategoryOption,\n DefaultCategoryFilter,\n} from \"../../defaults/catalog/category-filter.js\";\n\nconst PIPE_CATEGORY_ICONS: Record<PipeCategory, CategoryOption<PipeCategory>[\"icon\"]> = {\n people_data: ScanFace,\n company_data: Building2,\n find_people: Users,\n find_comapnies: SearchIcon,\n tools: Hammer,\n actions: Zap,\n integrations: Plug,\n deprecated: X,\n};\n\nconst DEFAULT_OPTIONS: ReadonlyArray<CategoryOption<PipeCategory>> = [\n { id: null, label: \"All\", icon: Database },\n ...[...getPipeCategoryEntries()]\n .sort((a, b) => a.order - b.order)\n .map(\n (entry): CategoryOption<PipeCategory> => ({\n id: entry.id,\n label: entry.label,\n icon: PIPE_CATEGORY_ICONS[entry.id],\n }),\n ),\n];\n\nexport interface PipeCatalogCategoryFilterState {\n value: PipeCategory | null;\n setValue: (value: PipeCategory | null) => void;\n options: ReadonlyArray<CategoryOption<PipeCategory>>;\n counts: Partial<Record<PipeCategory, number>>;\n totalCount: number;\n isActive: boolean;\n}\n\nexport interface PipeCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", PipeCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<PipeCategory>>;\n}\n\nexport function PipeCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: PipeCatalogCategoryFilterProps) {\n const ctx = usePipeCatalogContext();\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":";;;;;;;;;AAoBA,MAAM,sBAAkF;CACtF,aAAa;CACb,cAAc;CACd,aAAa;CACb,gBAAgBA;CAChB,OAAO;CACP,SAAS;CACT,cAAc;CACd,YAAY;CACb;AAED,MAAM,kBAA+D,CACnE;CAAE,IAAI;CAAM,OAAO;CAAO,MAAM;CAAU,EAC1C,GAAG,CAAC,GAAG,wBAAwB,CAAC,CAC7B,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,KACE,WAAyC;CACxC,IAAI,MAAM;CACV,OAAO,MAAM;CACb,MAAM,oBAAoB,MAAM;CACjC,EACF,CACJ;AAiBD,SAAgB,0BAA0B,EACxC,UAAU,iBACV,WACA,QACA,GAAG,SAC8B;CACjC,MAAM,MAAM,uBAAuB;CACnC,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"}
1
+ {"version":3,"file":"category-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/pipe-catalog/category-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { getPipeCategoryEntries, type PipeCategory } from \"@pipe0/base\";\nimport { usePipeCatalogContext } from \"../../../context/pipe-catalog-context.js\";\nimport {\n type CategoryOption,\n DefaultCategoryFilter,\n} from \"../../defaults/catalog/category-filter.js\";\nimport {\n Building2,\n Database,\n Hammer,\n Plug,\n ScanFace,\n Search as SearchIcon,\n Users,\n X,\n Zap,\n} from \"../../internal/icons.js\";\n\nconst PIPE_CATEGORY_ICONS: Record<PipeCategory, CategoryOption<PipeCategory>[\"icon\"]> = {\n people_data: ScanFace,\n company_data: Building2,\n find_people: Users,\n find_comapnies: SearchIcon,\n tools: Hammer,\n actions: Zap,\n integrations: Plug,\n deprecated: X,\n};\n\nconst DEFAULT_OPTIONS: ReadonlyArray<CategoryOption<PipeCategory>> = [\n { id: null, label: \"All\", icon: Database },\n ...[...getPipeCategoryEntries()]\n .sort((a, b) => a.order - b.order)\n .map(\n (entry): CategoryOption<PipeCategory> => ({\n id: entry.id,\n label: entry.label,\n icon: PIPE_CATEGORY_ICONS[entry.id],\n }),\n ),\n];\n\nexport interface PipeCatalogCategoryFilterState {\n value: PipeCategory | null;\n setValue: (value: PipeCategory | null) => void;\n options: ReadonlyArray<CategoryOption<PipeCategory>>;\n counts: Partial<Record<PipeCategory, number>>;\n totalCount: number;\n isActive: boolean;\n}\n\nexport interface PipeCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", PipeCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<PipeCategory>>;\n}\n\nexport function PipeCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: PipeCatalogCategoryFilterProps) {\n const ctx = usePipeCatalogContext();\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":";;;;;;;;;AAoBA,MAAM,sBAAkF;CACtF,aAAa;CACb,cAAc;CACd,aAAa;CACb,gBAAgBA;CAChB,OAAO;CACP,SAAS;CACT,cAAc;CACd,YAAY;CACb;AAED,MAAM,kBAA+D,CACnE;CAAE,IAAI;CAAM,OAAO;CAAO,MAAM;CAAU,EAC1C,GAAG,CAAC,GAAG,wBAAwB,CAAC,CAC7B,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CACjC,KACE,WAAyC;CACxC,IAAI,MAAM;CACV,OAAO,MAAM;CACb,MAAM,oBAAoB,MAAM;CACjC,EACF,CACJ;AAiBD,SAAgB,0BAA0B,EACxC,UAAU,iBACV,WACA,QACA,GAAG,SAC8B;CACjC,MAAM,MAAM,uBAAuB;CACnC,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"}
@@ -1,6 +1,6 @@
1
+ import { ArrowUp } from "../../internal/icons.mjs";
1
2
  import { PipeCatalogColumnFilter } from "./column-filter.mjs";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { ArrowUp } from "lucide-react";
4
4
 
5
5
  //#region src/components/compound/pipe-catalog/input-field-filter.tsx
6
6
  const DEFAULT_PLACEHOLDER = /* @__PURE__ */ jsxs("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"input-field-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/input-field-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { ArrowUp } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogInputFieldFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <ArrowUp className=\"pz:size-4\" /> Input fields\n </span>\n);\n\nexport function PipeCatalogInputFieldFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogInputFieldFilterProps) {\n return (\n <PipeCatalogColumnFilter\n id=\"inputFields\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,SAAD,EAAS,WAAU,aAAc,mBAC5B;;AAGT,SAAgB,4BAA4B,EAC1C,SACA,cAAc,qBACd,WACA,UACmC;AACnC,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
1
+ {"version":3,"file":"input-field-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/input-field-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { ArrowUp } from \"../../internal/icons.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogInputFieldFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <ArrowUp className=\"pz:size-4\" /> Input fields\n </span>\n);\n\nexport function PipeCatalogInputFieldFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogInputFieldFilterProps) {\n return (\n <PipeCatalogColumnFilter\n id=\"inputFields\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,SAAD,EAAS,WAAU,aAAc,mBAC5B;;AAGT,SAAgB,4BAA4B,EAC1C,SACA,cAAc,qBACd,WACA,UACmC;AACnC,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
@@ -1,6 +1,6 @@
1
+ import { ArrowDown } from "../../internal/icons.mjs";
1
2
  import { PipeCatalogColumnFilter } from "./column-filter.mjs";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { ArrowDown } from "lucide-react";
4
4
 
5
5
  //#region src/components/compound/pipe-catalog/output-field-filter.tsx
6
6
  const DEFAULT_PLACEHOLDER = /* @__PURE__ */ jsxs("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"output-field-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/output-field-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { ArrowDown } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogOutputFieldFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <ArrowDown className=\"pz:size-4\" /> Output fields\n </span>\n);\n\nexport function PipeCatalogOutputFieldFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogOutputFieldFilterProps) {\n return (\n <PipeCatalogColumnFilter\n id=\"outputFields\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,oBAC9B;;AAGT,SAAgB,6BAA6B,EAC3C,SACA,cAAc,qBACd,WACA,UACoC;AACpC,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
1
+ {"version":3,"file":"output-field-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/output-field-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { ArrowDown } from \"../../internal/icons.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogOutputFieldFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <ArrowDown className=\"pz:size-4\" /> Output fields\n </span>\n);\n\nexport function PipeCatalogOutputFieldFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogOutputFieldFilterProps) {\n return (\n <PipeCatalogColumnFilter\n id=\"outputFields\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,oBAC9B;;AAGT,SAAgB,6BAA6B,EAC3C,SACA,cAAc,qBACd,WACA,UACoC;AACpC,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
@@ -1,8 +1,8 @@
1
1
  import { usePipeCatalogContext } from "../../../context/pipe-catalog-context.mjs";
2
+ import { Building2 } from "../../internal/icons.mjs";
2
3
  import { PipeCatalogColumnFilter } from "./column-filter.mjs";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
4
5
  import { getProviderEntry } from "@pipe0/base";
5
- import { Building2 } from "lucide-react";
6
6
 
7
7
  //#region src/components/compound/pipe-catalog/provider-filter.tsx
8
8
  const DEFAULT_PLACEHOLDER = /* @__PURE__ */ jsxs("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"provider-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/provider-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { getProviderEntry, type ProviderName } from \"@pipe0/base\";\nimport { Building2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { usePipeCatalogContext } from \"../../../context/pipe-catalog-context.js\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogProviderFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Building2 className=\"pz:size-4\" /> Provider\n </span>\n);\n\nexport function PipeCatalogProviderFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogProviderFilterProps) {\n const ctx = usePipeCatalogContext();\n // Provider option labels carry the logo image so the default <Select> shows\n // the brand mark — matches what dash users expect from this filter.\n const resolvedOptions =\n options ??\n ctx.sortedProviderEntries.map(([name]) => ({\n label: name,\n value: name,\n imageSrc: getProviderEntry(name as ProviderName)?.logoUrl,\n }));\n\n return (\n <PipeCatalogColumnFilter\n id=\"providers\"\n placeholder={placeholder}\n options={resolvedOptions}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;;;AAeA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,eAC9B;;AAGT,SAAgB,0BAA0B,EACxC,SACA,cAAc,qBACd,WACA,UACiC;CACjC,MAAM,MAAM,uBAAuB;AAWnC,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACb,SAXF,WACA,IAAI,sBAAsB,KAAK,CAAC,WAAW;GACzC,OAAO;GACP,OAAO;GACP,UAAU,iBAAiB,KAAqB,EAAE;GACnD,EAAE;EAOU;EACH;EACR"}
1
+ {"version":3,"file":"provider-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/provider-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { getProviderEntry, type ProviderName } from \"@pipe0/base\";\nimport type { ReactNode } from \"react\";\nimport { usePipeCatalogContext } from \"../../../context/pipe-catalog-context.js\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { Building2 } from \"../../internal/icons.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogProviderFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Building2 className=\"pz:size-4\" /> Provider\n </span>\n);\n\nexport function PipeCatalogProviderFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogProviderFilterProps) {\n const ctx = usePipeCatalogContext();\n // Provider option labels carry the logo image so the default <Select> shows\n // the brand mark — matches what dash users expect from this filter.\n const resolvedOptions =\n options ??\n ctx.sortedProviderEntries.map(([name]) => ({\n label: name,\n value: name,\n imageSrc: getProviderEntry(name as ProviderName)?.logoUrl,\n }));\n\n return (\n <PipeCatalogColumnFilter\n id=\"providers\"\n placeholder={placeholder}\n options={resolvedOptions}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;;;AAeA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,eAC9B;;AAGT,SAAgB,0BAA0B,EACxC,SACA,cAAc,qBACd,WACA,UACiC;CACjC,MAAM,MAAM,uBAAuB;AAWnC,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACb,SAXF,WACA,IAAI,sBAAsB,KAAK,CAAC,WAAW;GACzC,OAAO;GACP,OAAO;GACP,UAAU,iBAAiB,KAAqB,EAAE;GACnD,EAAE;EAOU;EACH;EACR"}
@@ -1,11 +1,11 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { useCatalogConfig } from "../../../context/catalog-config-context.mjs";
3
3
  import { usePipeCatalogContext } from "../../../context/pipe-catalog-context.mjs";
4
+ import { Search } from "../../internal/icons.mjs";
4
5
  import { Input } from "../../ui/input.mjs";
5
6
  import { mergeProps } from "@base-ui/react/merge-props";
6
7
  import { useRender } from "@base-ui/react/use-render";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
- import { Search } from "lucide-react";
9
9
 
10
10
  //#region src/components/compound/pipe-catalog/search-filter.tsx
11
11
  function PipeCatalogSearchFilter({ placeholder = "Search pipes...", className, render, ...props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/pipe-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 { usePipeCatalogContext } from \"../../../context/pipe-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface PipeCatalogSearchFilterState {\n value: string;\n setValue: (value: string) => void;\n isActive: boolean;\n}\n\nexport interface PipeCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", PipeCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function PipeCatalogSearchFilter({\n placeholder = \"Search pipes...\",\n className,\n render,\n ...props\n}: PipeCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = usePipeCatalogContext();\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,wBAAwB,EACtC,cAAc,mBACd,WACA,QACA,GAAG,SAC4B;CAC/B,MAAM,EAAE,mBAAmB,yBAAyB,uBAAuB;CAC3E,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
+ {"version":3,"file":"search-filter.mjs","names":["SearchIcon"],"sources":["../../../../src/components/compound/pipe-catalog/search-filter.tsx"],"sourcesContent":["import { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport type { ChangeEvent } from \"react\";\nimport { useCatalogConfig } from \"../../../context/catalog-config-context.js\";\nimport { usePipeCatalogContext } from \"../../../context/pipe-catalog-context.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport { Search as SearchIcon } from \"../../internal/icons.js\";\nimport { Input } from \"../../ui/input.js\";\n\nexport interface PipeCatalogSearchFilterState {\n value: string;\n setValue: (value: string) => void;\n isActive: boolean;\n}\n\nexport interface PipeCatalogSearchFilterProps\n extends useRender.ComponentProps<\"input\", PipeCatalogSearchFilterState> {\n placeholder?: string;\n}\n\nexport function PipeCatalogSearchFilter({\n placeholder = \"Search pipes...\",\n className,\n render,\n ...props\n}: PipeCatalogSearchFilterProps) {\n const { globalFilterInput, setGlobalFilterInput } = usePipeCatalogContext();\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,wBAAwB,EACtC,cAAc,mBACd,WACA,QACA,GAAG,SAC4B;CAC/B,MAAM,EAAE,mBAAmB,yBAAyB,uBAAuB;CAC3E,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,6 +1,6 @@
1
+ import { Tag } from "../../internal/icons.mjs";
1
2
  import { PipeCatalogColumnFilter } from "./column-filter.mjs";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { Tag } from "lucide-react";
4
4
 
5
5
  //#region src/components/compound/pipe-catalog/tag-filter.tsx
6
6
  const DEFAULT_PLACEHOLDER = /* @__PURE__ */ jsxs("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"tag-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/tag-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { Tag } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogTagFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Tag className=\"pz:size-4\" /> Tag\n </span>\n);\n\nexport function PipeCatalogTagFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogTagFilterProps) {\n return (\n <PipeCatalogColumnFilter\n id=\"tags\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,KAAD,EAAK,WAAU,aAAc,UACxB;;AAGT,SAAgB,qBAAqB,EACnC,SACA,cAAc,qBACd,WACA,UAC4B;AAC5B,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
1
+ {"version":3,"file":"tag-filter.mjs","names":[],"sources":["../../../../src/components/compound/pipe-catalog/tag-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { Tag } from \"../../internal/icons.js\";\nimport { type ColumnFilterState, PipeCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface PipeCatalogTagFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Tag className=\"pz:size-4\" /> Tag\n </span>\n);\n\nexport function PipeCatalogTagFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: PipeCatalogTagFilterProps) {\n return (\n <PipeCatalogColumnFilter\n id=\"tags\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,KAAD,EAAK,WAAU,aAAc,UACxB;;AAGT,SAAgB,qBAAqB,EACnC,SACA,cAAc,qBACd,WACA,UAC4B;AAC5B,QACE,oBAAC,yBAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
@@ -1,10 +1,10 @@
1
1
  import { useSearchCatalogContext } from "../../../context/search-catalog-context.mjs";
2
2
  import { DefaultCategoryFilter } from "../../defaults/catalog/category-filter.mjs";
3
+ import { Building2, Database, Table, User, X } from "../../internal/icons.mjs";
3
4
  import { mergeProps } from "@base-ui/react/merge-props";
4
5
  import { useRender } from "@base-ui/react/use-render";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  import { getSearchCategoryEntries } from "@pipe0/base";
7
- import { Building2, Database, Table, User, X } from "lucide-react";
8
8
 
9
9
  //#region src/components/compound/search-catalog/category-filter.tsx
10
10
  const SEARCH_CATEGORY_ICONS = {
@@ -1 +1 @@
1
- {"version":3,"file":"category-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-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, Table, User, X } from \"lucide-react\";\nimport { useSearchCatalogContext } from \"../../../context/search-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 data: Table,\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 SearchCatalogCategoryFilterState {\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 SearchCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", SearchCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<SearchCategory>>;\n}\n\nexport function SearchCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: SearchCatalogCategoryFilterProps) {\n const ctx = useSearchCatalogContext();\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,MAAM;CACN,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,4BAA4B,EAC1C,UAAU,iBACV,WACA,QACA,GAAG,SACgC;CACnC,MAAM,MAAM,yBAAyB;CACrC,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"}
1
+ {"version":3,"file":"category-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-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 { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport {\n type CategoryOption,\n DefaultCategoryFilter,\n} from \"../../defaults/catalog/category-filter.js\";\nimport { Building2, Database, Table, User, X } from \"../../internal/icons.js\";\n\nconst SEARCH_CATEGORY_ICONS: Record<SearchCategory, CategoryOption<SearchCategory>[\"icon\"]> = {\n people: User,\n companies: Building2,\n data: Table,\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 SearchCatalogCategoryFilterState {\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 SearchCatalogCategoryFilterProps\n extends useRender.ComponentProps<\"div\", SearchCatalogCategoryFilterState> {\n /** Override the default category options. */\n options?: ReadonlyArray<CategoryOption<SearchCategory>>;\n}\n\nexport function SearchCatalogCategoryFilter({\n options = DEFAULT_OPTIONS,\n className,\n render,\n ...props\n}: SearchCatalogCategoryFilterProps) {\n const ctx = useSearchCatalogContext();\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,MAAM;CACN,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,4BAA4B,EAC1C,UAAU,iBACV,WACA,QACA,GAAG,SACgC;CACnC,MAAM,MAAM,yBAAyB;CACrC,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"}
@@ -1,6 +1,6 @@
1
+ import { ArrowDown } from "../../internal/icons.mjs";
1
2
  import { SearchCatalogColumnFilter } from "./column-filter.mjs";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { ArrowDown } from "lucide-react";
4
4
 
5
5
  //#region src/components/compound/search-catalog/output-field-filter.tsx
6
6
  const DEFAULT_PLACEHOLDER = /* @__PURE__ */ jsxs("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"output-field-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/output-field-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { ArrowDown } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { type ColumnFilterState, SearchCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface SearchCatalogOutputFieldFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <ArrowDown className=\"pz:size-4\" /> Output fields\n </span>\n);\n\nexport function SearchCatalogOutputFieldFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: SearchCatalogOutputFieldFilterProps) {\n return (\n <SearchCatalogColumnFilter\n id=\"outputFields\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,oBAC9B;;AAGT,SAAgB,+BAA+B,EAC7C,SACA,cAAc,qBACd,WACA,UACsC;AACtC,QACE,oBAAC,2BAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
1
+ {"version":3,"file":"output-field-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/output-field-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { ArrowDown } from \"../../internal/icons.js\";\nimport { type ColumnFilterState, SearchCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface SearchCatalogOutputFieldFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <ArrowDown className=\"pz:size-4\" /> Output fields\n </span>\n);\n\nexport function SearchCatalogOutputFieldFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: SearchCatalogOutputFieldFilterProps) {\n return (\n <SearchCatalogColumnFilter\n id=\"outputFields\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,oBAC9B;;AAGT,SAAgB,+BAA+B,EAC7C,SACA,cAAc,qBACd,WACA,UACsC;AACtC,QACE,oBAAC,2BAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
@@ -1,8 +1,8 @@
1
1
  import { useSearchCatalogContext } from "../../../context/search-catalog-context.mjs";
2
+ import { Building2 } from "../../internal/icons.mjs";
2
3
  import { SearchCatalogColumnFilter } from "./column-filter.mjs";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
4
5
  import { getProviderEntry } from "@pipe0/base";
5
- import { Building2 } from "lucide-react";
6
6
 
7
7
  //#region src/components/compound/search-catalog/provider-filter.tsx
8
8
  const DEFAULT_PLACEHOLDER = /* @__PURE__ */ jsxs("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"provider-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/provider-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { getProviderEntry, type ProviderName } from \"@pipe0/base\";\nimport { Building2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { type ColumnFilterState, SearchCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface SearchCatalogProviderFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Building2 className=\"pz:size-4\" /> Provider\n </span>\n);\n\nexport function SearchCatalogProviderFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: SearchCatalogProviderFilterProps) {\n const ctx = useSearchCatalogContext();\n const resolvedOptions =\n options ??\n ctx.sortedProviderEntries.map(([name]) => ({\n label: name,\n value: name,\n imageSrc: getProviderEntry(name as ProviderName)?.logoUrl,\n }));\n\n return (\n <SearchCatalogColumnFilter\n id=\"providers\"\n placeholder={placeholder}\n options={resolvedOptions}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;;;AAeA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,eAC9B;;AAGT,SAAgB,4BAA4B,EAC1C,SACA,cAAc,qBACd,WACA,UACmC;CACnC,MAAM,MAAM,yBAAyB;AASrC,QACE,oBAAC,2BAAD;EACE,IAAG;EACU;EACb,SAXF,WACA,IAAI,sBAAsB,KAAK,CAAC,WAAW;GACzC,OAAO;GACP,OAAO;GACP,UAAU,iBAAiB,KAAqB,EAAE;GACnD,EAAE;EAOU;EACH;EACR"}
1
+ {"version":3,"file":"provider-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/provider-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { getProviderEntry, type ProviderName } from \"@pipe0/base\";\nimport type { ReactNode } from \"react\";\nimport { useSearchCatalogContext } from \"../../../context/search-catalog-context.js\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { Building2 } from \"../../internal/icons.js\";\nimport { type ColumnFilterState, SearchCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface SearchCatalogProviderFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Building2 className=\"pz:size-4\" /> Provider\n </span>\n);\n\nexport function SearchCatalogProviderFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: SearchCatalogProviderFilterProps) {\n const ctx = useSearchCatalogContext();\n const resolvedOptions =\n options ??\n ctx.sortedProviderEntries.map(([name]) => ({\n label: name,\n value: name,\n imageSrc: getProviderEntry(name as ProviderName)?.logoUrl,\n }));\n\n return (\n <SearchCatalogColumnFilter\n id=\"providers\"\n placeholder={placeholder}\n options={resolvedOptions}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;;;AAeA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,WAAD,EAAW,WAAU,aAAc,eAC9B;;AAGT,SAAgB,4BAA4B,EAC1C,SACA,cAAc,qBACd,WACA,UACmC;CACnC,MAAM,MAAM,yBAAyB;AASrC,QACE,oBAAC,2BAAD;EACE,IAAG;EACU;EACb,SAXF,WACA,IAAI,sBAAsB,KAAK,CAAC,WAAW;GACzC,OAAO;GACP,OAAO;GACP,UAAU,iBAAiB,KAAqB,EAAE;GACnD,EAAE;EAOU;EACH;EACR"}
@@ -1,11 +1,11 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { useCatalogConfig } from "../../../context/catalog-config-context.mjs";
3
3
  import { useSearchCatalogContext } from "../../../context/search-catalog-context.mjs";
4
+ import { Search } from "../../internal/icons.mjs";
4
5
  import { Input } from "../../ui/input.mjs";
5
6
  import { mergeProps } from "@base-ui/react/merge-props";
6
7
  import { useRender } from "@base-ui/react/use-render";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
- import { Search } from "lucide-react";
9
9
 
10
10
  //#region src/components/compound/search-catalog/search-filter.tsx
11
11
  function SearchCatalogSearchFilter({ placeholder = "Search searches...", className, render, ...props }) {
@@ -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 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
+ {"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 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 { Search as SearchIcon } from \"../../internal/icons.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,6 +1,6 @@
1
+ import { Tag } from "../../internal/icons.mjs";
1
2
  import { SearchCatalogColumnFilter } from "./column-filter.mjs";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { Tag } from "lucide-react";
4
4
 
5
5
  //#region src/components/compound/search-catalog/tag-filter.tsx
6
6
  const DEFAULT_PLACEHOLDER = /* @__PURE__ */ jsxs("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"tag-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/tag-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport { Tag } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { type ColumnFilterState, SearchCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface SearchCatalogTagFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Tag className=\"pz:size-4\" /> Tag\n </span>\n);\n\nexport function SearchCatalogTagFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: SearchCatalogTagFilterProps) {\n return (\n <SearchCatalogColumnFilter\n id=\"tags\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,KAAD,EAAK,WAAU,aAAc,UACxB;;AAGT,SAAgB,uBAAuB,EACrC,SACA,cAAc,qBACd,WACA,UAC8B;AAC9B,QACE,oBAAC,2BAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
1
+ {"version":3,"file":"tag-filter.mjs","names":[],"sources":["../../../../src/components/compound/search-catalog/tag-filter.tsx"],"sourcesContent":["import type { useRender } from \"@base-ui/react/use-render\";\nimport type { ReactNode } from \"react\";\nimport type { FilterSelectOption } from \"../../defaults/catalog/filter-select.js\";\nimport { Tag } from \"../../internal/icons.js\";\nimport { type ColumnFilterState, SearchCatalogColumnFilter } from \"./column-filter.js\";\n\nexport interface SearchCatalogTagFilterProps {\n options?: ReadonlyArray<FilterSelectOption>;\n placeholder?: ReactNode;\n className?: string;\n render?: useRender.ComponentProps<\"div\", ColumnFilterState>[\"render\"];\n}\n\nconst DEFAULT_PLACEHOLDER = (\n <span className=\"pz:inline-flex pz:items-center pz:gap-1.5\">\n <Tag className=\"pz:size-4\" /> Tag\n </span>\n);\n\nexport function SearchCatalogTagFilter({\n options,\n placeholder = DEFAULT_PLACEHOLDER,\n className,\n render,\n}: SearchCatalogTagFilterProps) {\n return (\n <SearchCatalogColumnFilter\n id=\"tags\"\n placeholder={placeholder}\n options={options}\n className={className}\n render={render}\n />\n );\n}\n"],"mappings":";;;;;AAaA,MAAM,sBACJ,qBAAC,QAAD;CAAM,WAAU;WAAhB,CACE,oBAAC,KAAD,EAAK,WAAU,aAAc,UACxB;;AAGT,SAAgB,uBAAuB,EACrC,SACA,cAAc,qBACd,WACA,UAC8B;AAC9B,QACE,oBAAC,2BAAD;EACE,IAAG;EACU;EACJ;EACE;EACH;EACR"}
@@ -1,8 +1,8 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { Button } from "../../ui/button.mjs";
3
+ import { IconChevronDown, IconEye, IconEyeOff, IconPlus, IconRefresh, IconTrash } from "../../internal/icons.mjs";
3
4
  import { Input } from "../../ui/input.mjs";
4
5
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../ui/select.mjs";
5
- import { IconChevronDown, IconEye, IconEyeOff, IconPlus, IconRefresh, IconTrash } from "../../internal/icons.mjs";
6
6
  import { HoverInfo } from "../../hover-info.mjs";
7
7
  import { useFieldError } from "../../../hooks/use-field-error.mjs";
8
8
  import { Label } from "../../ui/label.mjs";
@@ -1,9 +1,9 @@
1
1
  import { Button } from "../../ui/button.mjs";
2
+ import { Plus, X } from "../../internal/icons.mjs";
2
3
  import { Input } from "../../ui/input.mjs";
3
4
  import { FieldLegend } from "../../internal/field-legend.mjs";
4
5
  import { LiquidEditor } from "../../internal/LiquidEditor/LiquidEditor.mjs";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
- import { Plus, X } from "lucide-react";
7
7
 
8
8
  //#region src/components/defaults/adapters/loose-object-input.tsx
9
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"loose-object-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/loose-object-input.tsx"],"sourcesContent":["import { Plus, X } from \"lucide-react\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { FieldLegend } from \"../../internal/field-legend.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\nimport { Button } from \"../../ui/button.js\";\nimport { Input } from \"../../ui/input.js\";\n\n/**\n * Adapter for `pipesLooseObjectInput`. The form value is a plain\n * `Record<string, string>`; each entry renders as a row. The key is the\n * object key, so it's a literal text input (committed on blur, which is when\n * the row's React key — the object key — changes). The value cell uses\n * `LiquidEditor` so it supports `/` references (input fields + secrets +\n * constants). Empty and duplicate keys aren't meaningful for an object and\n * aren't supported; `maxKeys` bounds the number of entries.\n *\n * The per-cell legend would otherwise render once per value cell — too noisy.\n * The value editors run with `hideLegend`; a single legend renders below the\n * list.\n */\nexport function LooseObjectInputAdapter(field: FieldHandle<\"loose_object_input\">) {\n const { value, setObject, searchSecrets, searchConstants, meta } = field;\n const entries = Object.entries(value);\n const maxKeys = meta.maxKeys ?? 50;\n const canAdd = entries.length < maxKeys;\n\n // Rebuild the object, renaming `oldKey`→`newKey` in place (order preserved).\n const renameKey = (oldKey: string, newKey: string) => {\n if (newKey === oldKey) return;\n const next: Record<string, string> = {};\n for (const [k, v] of Object.entries(value)) next[k === oldKey ? newKey : k] = v;\n setObject(next);\n };\n const setEntryValue = (key: string, v: string) => setObject({ ...value, [key]: v });\n const removeKey = (key: string) => {\n const { [key]: _removed, ...rest } = value;\n setObject(rest);\n };\n // One blank slot at a time — fill its key before adding another.\n const addEntry = () => {\n if (Object.hasOwn(value, \"\")) return;\n setObject({ ...value, \"\": \"\" });\n };\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-2\">\n {entries.length === 0 && (\n <p className=\"pz:text-xs pz:text-muted-foreground\">\n {meta.keyLabel ? `No ${meta.keyLabel.toLowerCase()}s yet.` : \"No entries yet.\"}\n </p>\n )}\n {entries.map(([key, val]) => (\n <div key={key} className=\"pz:flex pz:items-start pz:gap-2\">\n {/* shrink-0: a long value must wrap, not squeeze the key input. */}\n <div className=\"pz:basis-1/3 pz:shrink-0\">\n <Input\n defaultValue={key}\n onBlur={(e) => renameKey(key, e.target.value)}\n placeholder={meta.keyPlaceholder ?? meta.keyLabel ?? \"Key\"}\n />\n </div>\n <div className=\"pz:min-w-0 pz:flex-1 pz:wrap-anywhere pz:rounded-md pz:border pz:border-input pz:bg-transparent\">\n <LiquidEditor\n value={val}\n onChange={(v) => setEntryValue(key, v)}\n inputFields={meta.inputFields ?? []}\n searchSecrets={searchSecrets}\n searchConstants={searchConstants}\n placeholder={meta.valuePlaceholder ?? meta.valueLabel ?? \"Value\"}\n hideLegend\n />\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Remove row\"\n onClick={() => removeKey(key)}\n >\n <X className=\"pz:size-4\" />\n </Button>\n </div>\n ))}\n {entries.length > 0 && (\n <FieldLegend entries={[{ key: \"/\", label: \"to insert a reference\" }]} />\n )}\n <div>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={addEntry} disabled={!canAdd}>\n <Plus className=\"pz:size-4 pz:mr-1\" />\n Add {meta.keyLabel ?? \"row\"}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,wBAAwB,OAA0C;CAChF,MAAM,EAAE,OAAO,WAAW,eAAe,iBAAiB,SAAS;CACnE,MAAM,UAAU,OAAO,QAAQ,MAAM;CACrC,MAAM,UAAU,KAAK,WAAW;CAChC,MAAM,SAAS,QAAQ,SAAS;CAGhC,MAAM,aAAa,QAAgB,WAAmB;AACpD,MAAI,WAAW,OAAQ;EACvB,MAAM,OAA+B,EAAE;AACvC,OAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,MAAM,CAAE,MAAK,MAAM,SAAS,SAAS,KAAK;AAC9E,YAAU,KAAK;;CAEjB,MAAM,iBAAiB,KAAa,MAAc,UAAU;EAAE,GAAG;GAAQ,MAAM;EAAG,CAAC;CACnF,MAAM,aAAa,QAAgB;EACjC,MAAM,GAAG,MAAM,UAAU,GAAG,SAAS;AACrC,YAAU,KAAK;;CAGjB,MAAM,iBAAiB;AACrB,MAAI,OAAO,OAAO,OAAO,GAAG,CAAE;AAC9B,YAAU;GAAE,GAAG;GAAO,IAAI;GAAI,CAAC;;AAGjC,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B;GACG,QAAQ,WAAW,KAClB,oBAAC,KAAD;IAAG,WAAU;cACV,KAAK,WAAW,MAAM,KAAK,SAAS,aAAa,CAAC,UAAU;IAC3D;GAEL,QAAQ,KAAK,CAAC,KAAK,SAClB,qBAAC,OAAD;IAAe,WAAU;cAAzB;KAEE,oBAAC,OAAD;MAAK,WAAU;gBACb,oBAAC,OAAD;OACE,cAAc;OACd,SAAS,MAAM,UAAU,KAAK,EAAE,OAAO,MAAM;OAC7C,aAAa,KAAK,kBAAkB,KAAK,YAAY;OACrD;MACE;KACN,oBAAC,OAAD;MAAK,WAAU;gBACb,oBAAC,cAAD;OACE,OAAO;OACP,WAAW,MAAM,cAAc,KAAK,EAAE;OACtC,aAAa,KAAK,eAAe,EAAE;OACpB;OACE;OACjB,aAAa,KAAK,oBAAoB,KAAK,cAAc;OACzD;OACA;MACE;KACN,oBAAC,QAAD;MACE,MAAK;MACL,SAAQ;MACR,MAAK;MACL,cAAW;MACX,eAAe,UAAU,IAAI;gBAE7B,oBAAC,GAAD,EAAG,WAAU,aAAc;MACpB;KACL;MA7BI,IA6BJ,CACN;GACD,QAAQ,SAAS,KAChB,oBAAC,aAAD,EAAa,SAAS,CAAC;IAAE,KAAK;IAAK,OAAO;IAAyB,CAAC,EAAI;GAE1E,oBAAC,OAAD,YACE,qBAAC,QAAD;IAAQ,MAAK;IAAS,SAAQ;IAAU,MAAK;IAAK,SAAS;IAAU,UAAU,CAAC;cAAhF;KACE,oBAAC,MAAD,EAAM,WAAU,qBAAsB;;KACjC,KAAK,YAAY;KACf;OACL;GACF"}
1
+ {"version":3,"file":"loose-object-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/loose-object-input.tsx"],"sourcesContent":["import type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { FieldLegend } from \"../../internal/field-legend.js\";\nimport { Plus, X } from \"../../internal/icons.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\nimport { Button } from \"../../ui/button.js\";\nimport { Input } from \"../../ui/input.js\";\n\n/**\n * Adapter for `pipesLooseObjectInput`. The form value is a plain\n * `Record<string, string>`; each entry renders as a row. The key is the\n * object key, so it's a literal text input (committed on blur, which is when\n * the row's React key — the object key — changes). The value cell uses\n * `LiquidEditor` so it supports `/` references (input fields + secrets +\n * constants). Empty and duplicate keys aren't meaningful for an object and\n * aren't supported; `maxKeys` bounds the number of entries.\n *\n * The per-cell legend would otherwise render once per value cell — too noisy.\n * The value editors run with `hideLegend`; a single legend renders below the\n * list.\n */\nexport function LooseObjectInputAdapter(field: FieldHandle<\"loose_object_input\">) {\n const { value, setObject, searchSecrets, searchConstants, meta } = field;\n const entries = Object.entries(value);\n const maxKeys = meta.maxKeys ?? 50;\n const canAdd = entries.length < maxKeys;\n\n // Rebuild the object, renaming `oldKey`→`newKey` in place (order preserved).\n const renameKey = (oldKey: string, newKey: string) => {\n if (newKey === oldKey) return;\n const next: Record<string, string> = {};\n for (const [k, v] of Object.entries(value)) next[k === oldKey ? newKey : k] = v;\n setObject(next);\n };\n const setEntryValue = (key: string, v: string) => setObject({ ...value, [key]: v });\n const removeKey = (key: string) => {\n const { [key]: _removed, ...rest } = value;\n setObject(rest);\n };\n // One blank slot at a time — fill its key before adding another.\n const addEntry = () => {\n if (Object.hasOwn(value, \"\")) return;\n setObject({ ...value, \"\": \"\" });\n };\n\n return (\n <div data-p0=\"input\" className=\"pz:flex pz:flex-col pz:gap-2\">\n {entries.length === 0 && (\n <p className=\"pz:text-xs pz:text-muted-foreground\">\n {meta.keyLabel ? `No ${meta.keyLabel.toLowerCase()}s yet.` : \"No entries yet.\"}\n </p>\n )}\n {entries.map(([key, val]) => (\n <div key={key} className=\"pz:flex pz:items-start pz:gap-2\">\n {/* shrink-0: a long value must wrap, not squeeze the key input. */}\n <div className=\"pz:basis-1/3 pz:shrink-0\">\n <Input\n defaultValue={key}\n onBlur={(e) => renameKey(key, e.target.value)}\n placeholder={meta.keyPlaceholder ?? meta.keyLabel ?? \"Key\"}\n />\n </div>\n <div className=\"pz:min-w-0 pz:flex-1 pz:wrap-anywhere pz:rounded-md pz:border pz:border-input pz:bg-transparent\">\n <LiquidEditor\n value={val}\n onChange={(v) => setEntryValue(key, v)}\n inputFields={meta.inputFields ?? []}\n searchSecrets={searchSecrets}\n searchConstants={searchConstants}\n placeholder={meta.valuePlaceholder ?? meta.valueLabel ?? \"Value\"}\n hideLegend\n />\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Remove row\"\n onClick={() => removeKey(key)}\n >\n <X className=\"pz:size-4\" />\n </Button>\n </div>\n ))}\n {entries.length > 0 && (\n <FieldLegend entries={[{ key: \"/\", label: \"to insert a reference\" }]} />\n )}\n <div>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={addEntry} disabled={!canAdd}>\n <Plus className=\"pz:size-4 pz:mr-1\" />\n Add {meta.keyLabel ?? \"row\"}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,wBAAwB,OAA0C;CAChF,MAAM,EAAE,OAAO,WAAW,eAAe,iBAAiB,SAAS;CACnE,MAAM,UAAU,OAAO,QAAQ,MAAM;CACrC,MAAM,UAAU,KAAK,WAAW;CAChC,MAAM,SAAS,QAAQ,SAAS;CAGhC,MAAM,aAAa,QAAgB,WAAmB;AACpD,MAAI,WAAW,OAAQ;EACvB,MAAM,OAA+B,EAAE;AACvC,OAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,MAAM,CAAE,MAAK,MAAM,SAAS,SAAS,KAAK;AAC9E,YAAU,KAAK;;CAEjB,MAAM,iBAAiB,KAAa,MAAc,UAAU;EAAE,GAAG;GAAQ,MAAM;EAAG,CAAC;CACnF,MAAM,aAAa,QAAgB;EACjC,MAAM,GAAG,MAAM,UAAU,GAAG,SAAS;AACrC,YAAU,KAAK;;CAGjB,MAAM,iBAAiB;AACrB,MAAI,OAAO,OAAO,OAAO,GAAG,CAAE;AAC9B,YAAU;GAAE,GAAG;GAAO,IAAI;GAAI,CAAC;;AAGjC,QACE,qBAAC,OAAD;EAAK,WAAQ;EAAQ,WAAU;YAA/B;GACG,QAAQ,WAAW,KAClB,oBAAC,KAAD;IAAG,WAAU;cACV,KAAK,WAAW,MAAM,KAAK,SAAS,aAAa,CAAC,UAAU;IAC3D;GAEL,QAAQ,KAAK,CAAC,KAAK,SAClB,qBAAC,OAAD;IAAe,WAAU;cAAzB;KAEE,oBAAC,OAAD;MAAK,WAAU;gBACb,oBAAC,OAAD;OACE,cAAc;OACd,SAAS,MAAM,UAAU,KAAK,EAAE,OAAO,MAAM;OAC7C,aAAa,KAAK,kBAAkB,KAAK,YAAY;OACrD;MACE;KACN,oBAAC,OAAD;MAAK,WAAU;gBACb,oBAAC,cAAD;OACE,OAAO;OACP,WAAW,MAAM,cAAc,KAAK,EAAE;OACtC,aAAa,KAAK,eAAe,EAAE;OACpB;OACE;OACjB,aAAa,KAAK,oBAAoB,KAAK,cAAc;OACzD;OACA;MACE;KACN,oBAAC,QAAD;MACE,MAAK;MACL,SAAQ;MACR,MAAK;MACL,cAAW;MACX,eAAe,UAAU,IAAI;gBAE7B,oBAAC,GAAD,EAAG,WAAU,aAAc;MACpB;KACL;MA7BI,IA6BJ,CACN;GACD,QAAQ,SAAS,KAChB,oBAAC,aAAD,EAAa,SAAS,CAAC;IAAE,KAAK;IAAK,OAAO;IAAyB,CAAC,EAAI;GAE1E,oBAAC,OAAD,YACE,qBAAC,QAAD;IAAQ,MAAK;IAAS,SAAQ;IAAU,MAAK;IAAK,SAAS;IAAU,UAAU,CAAC;cAAhF;KACE,oBAAC,MAAD,EAAM,WAAU,qBAAsB;;KACjC,KAAK,YAAY;KACf;OACL;GACF"}
@@ -1,8 +1,8 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { Button } from "../../ui/button.mjs";
3
+ import { IconPlus } from "../../internal/icons.mjs";
3
4
  import { Input } from "../../ui/input.mjs";
4
5
  import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "../../ui/select.mjs";
5
- import { IconPlus } from "../../internal/icons.mjs";
6
6
  import { HoverInfo } from "../../hover-info.mjs";
7
7
  import { Badge } from "../../ui/badge.mjs";
8
8
  import { useFieldError } from "../../../hooks/use-field-error.mjs";
@@ -1,7 +1,7 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
2
  import { Button } from "../../ui/button.mjs";
3
- import { Input } from "../../ui/input.mjs";
4
3
  import { IconCheck, IconPencil, IconPlus, IconTrash } from "../../internal/icons.mjs";
4
+ import { Input } from "../../ui/input.mjs";
5
5
  import { useFieldError } from "../../../hooks/use-field-error.mjs";
6
6
  import { generateRandomString } from "../../../utils/generate-random-string.mjs";
7
7
  import { Popover, PopoverContent, PopoverTrigger } from "../../ui/popover.mjs";
@@ -13,25 +13,41 @@ function diffReplay(prev, next, add, remove) {
13
13
  function PropertyListInputAdapter(field) {
14
14
  const itemsError = useFieldError(field.form, field.path);
15
15
  const labelFor = (value) => field.options?.find((o) => o.value === value)?.label ?? value;
16
+ const countOf = field.meta.selectionCount;
17
+ const source = countOf ? field.form.watch(countOf.ofPath) : void 0;
18
+ const total = countOf && source && typeof source === "object" ? Object.keys(source).filter((key) => key.trim()).length : 0;
16
19
  return /* @__PURE__ */ jsxs("div", {
17
20
  "data-p0": "input",
18
21
  className: cn("pz:flex pz:flex-col pz:gap-1", field.pending && "pz:opacity-60"),
19
- children: [/* @__PURE__ */ jsx(SuggestCombobox, {
20
- value: field.items,
21
- onChange: (next) => diffReplay(field.items, next, field.add, field.remove),
22
- options: field.loadOptions ? void 0 : field.options,
23
- loadOptions: field.loadOptions,
24
- labelFor,
25
- allowCreate: field.allowCreate ?? true,
26
- disabled: field.pending,
27
- maxItems: field.meta.maxItems,
28
- placeholder: field.pending ? "Loading…" : field.meta.placeholder,
29
- emptyLabel: "No matches",
30
- ariaInvalid: !!itemsError || !!field.error
31
- }), field.suggestionsDisabled && /* @__PURE__ */ jsxs("div", {
32
- className: "pz:text-xs pz:gap-y-1 pz:text-muted-foreground pz:italic",
33
- children: [field.suggestionsDisabledReason ?? "Suggestions unavailable", " "]
34
- })]
22
+ children: [
23
+ /* @__PURE__ */ jsx(SuggestCombobox, {
24
+ value: field.items,
25
+ onChange: (next) => diffReplay(field.items, next, field.add, field.remove),
26
+ options: field.loadOptions ? void 0 : field.options,
27
+ loadOptions: field.loadOptions,
28
+ labelFor,
29
+ allowCreate: field.allowCreate ?? true,
30
+ disabled: field.pending,
31
+ maxItems: field.meta.maxItems,
32
+ placeholder: field.pending ? "Loading…" : field.meta.placeholder,
33
+ emptyLabel: "No matches",
34
+ ariaInvalid: !!itemsError || !!field.error
35
+ }),
36
+ countOf && total > 0 && /* @__PURE__ */ jsxs("div", {
37
+ className: "pz:text-xs pz:text-muted-foreground",
38
+ children: [
39
+ field.items.length,
40
+ " of ",
41
+ total,
42
+ " ",
43
+ countOf.label
44
+ ]
45
+ }),
46
+ field.suggestionsDisabled && /* @__PURE__ */ jsxs("div", {
47
+ className: "pz:text-xs pz:gap-y-1 pz:text-muted-foreground pz:italic",
48
+ children: [field.suggestionsDisabledReason ?? "Suggestions unavailable", " "]
49
+ })
50
+ ]
35
51
  });
36
52
  }
37
53
 
@@ -1 +1 @@
1
- {"version":3,"file":"property-list-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/property-list-input.tsx"],"sourcesContent":["import { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\n\nfunction diffReplay(\n prev: string[],\n next: string[],\n add: (v: string) => void,\n remove: (v: string) => void,\n) {\n const prevSet = new Set(prev);\n const nextSet = new Set(next);\n for (const v of next) if (!prevSet.has(v)) add(v);\n for (const v of prev) if (!nextSet.has(v)) remove(v);\n}\n\n// Same editor as `multi_create_input`; the value shape difference\n// (`{ property }[]` vs `string[]`) is bridged in the section handler.\n// Connection-scoped suggestions (meta.optionsDef) make the field\n// suggestion-only: `allowCreate` comes through the handler as `false` and the\n// picked chips keep their fetched labels via `labelFor`.\nexport function PropertyListInputAdapter(field: FieldHandle<\"property_list_input\">) {\n const itemsError = useFieldError(field.form, field.path);\n const labelFor = (value: string) => field.options?.find((o) => o.value === value)?.label ?? value;\n\n return (\n <div\n data-p0=\"input\"\n className={cn(\"pz:flex pz:flex-col pz:gap-1\", field.pending && \"pz:opacity-60\")}\n >\n <SuggestCombobox\n value={field.items}\n onChange={(next) => diffReplay(field.items, next, field.add, field.remove)}\n options={field.loadOptions ? undefined : field.options}\n loadOptions={field.loadOptions}\n labelFor={labelFor}\n allowCreate={field.allowCreate ?? true}\n disabled={field.pending}\n maxItems={field.meta.maxItems}\n placeholder={field.pending ? \"Loading…\" : field.meta.placeholder}\n emptyLabel=\"No matches\"\n ariaInvalid={!!itemsError || !!field.error}\n />\n {field.suggestionsDisabled && (\n <div className=\"pz:text-xs pz:gap-y-1 pz:text-muted-foreground pz:italic\">\n {field.suggestionsDisabledReason ?? \"Suggestions unavailable\"}{\" \"}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,SAAS,WACP,MACA,MACA,KACA,QACA;CACA,MAAM,UAAU,IAAI,IAAI,KAAK;CAC7B,MAAM,UAAU,IAAI,IAAI,KAAK;AAC7B,MAAK,MAAM,KAAK,KAAM,KAAI,CAAC,QAAQ,IAAI,EAAE,CAAE,KAAI,EAAE;AACjD,MAAK,MAAM,KAAK,KAAM,KAAI,CAAC,QAAQ,IAAI,EAAE,CAAE,QAAO,EAAE;;AAQtD,SAAgB,yBAAyB,OAA2C;CAClF,MAAM,aAAa,cAAc,MAAM,MAAM,MAAM,KAAK;CACxD,MAAM,YAAY,UAAkB,MAAM,SAAS,MAAM,MAAM,EAAE,UAAU,MAAM,EAAE,SAAS;AAE5F,QACE,qBAAC,OAAD;EACE,WAAQ;EACR,WAAW,GAAG,gCAAgC,MAAM,WAAW,gBAAgB;YAFjF,CAIE,oBAAC,iBAAD;GACE,OAAO,MAAM;GACb,WAAW,SAAS,WAAW,MAAM,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;GAC1E,SAAS,MAAM,cAAc,SAAY,MAAM;GAC/C,aAAa,MAAM;GACT;GACV,aAAa,MAAM,eAAe;GAClC,UAAU,MAAM;GAChB,UAAU,MAAM,KAAK;GACrB,aAAa,MAAM,UAAU,aAAa,MAAM,KAAK;GACrD,YAAW;GACX,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM;GACrC,GACD,MAAM,uBACL,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,MAAM,6BAA6B,2BAA2B,IAC3D;KAEJ"}
1
+ {"version":3,"file":"property-list-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/property-list-input.tsx"],"sourcesContent":["import { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\n\nfunction diffReplay(\n prev: string[],\n next: string[],\n add: (v: string) => void,\n remove: (v: string) => void,\n) {\n const prevSet = new Set(prev);\n const nextSet = new Set(next);\n for (const v of next) if (!prevSet.has(v)) add(v);\n for (const v of prev) if (!nextSet.has(v)) remove(v);\n}\n\n// Same editor as `multi_create_input`; the value shape difference\n// (`{ property }[]` vs `string[]`) is bridged in the section handler.\n// Connection-scoped suggestions (meta.optionsDef) make the field\n// suggestion-only: `allowCreate` comes through the handler as `false` and the\n// picked chips keep their fetched labels via `labelFor`.\nexport function PropertyListInputAdapter(field: FieldHandle<\"property_list_input\">) {\n const itemsError = useFieldError(field.form, field.path);\n const labelFor = (value: string) => field.options?.find((o) => o.value === value)?.label ?? value;\n // \"2 of 5 values update existing records\": the total is the size of the map\n // this list picks from, so leaving entries out stays visible.\n const countOf = field.meta.selectionCount;\n const source = countOf ? field.form.watch(countOf.ofPath) : undefined;\n const total =\n countOf && source && typeof source === \"object\"\n ? Object.keys(source as Record<string, unknown>).filter((key) => key.trim()).length\n : 0;\n\n return (\n <div\n data-p0=\"input\"\n className={cn(\"pz:flex pz:flex-col pz:gap-1\", field.pending && \"pz:opacity-60\")}\n >\n <SuggestCombobox\n value={field.items}\n onChange={(next) => diffReplay(field.items, next, field.add, field.remove)}\n options={field.loadOptions ? undefined : field.options}\n loadOptions={field.loadOptions}\n labelFor={labelFor}\n allowCreate={field.allowCreate ?? true}\n disabled={field.pending}\n maxItems={field.meta.maxItems}\n placeholder={field.pending ? \"Loading…\" : field.meta.placeholder}\n emptyLabel=\"No matches\"\n ariaInvalid={!!itemsError || !!field.error}\n />\n {countOf && total > 0 && (\n <div className=\"pz:text-xs pz:text-muted-foreground\">\n {field.items.length} of {total} {countOf.label}\n </div>\n )}\n {field.suggestionsDisabled && (\n <div className=\"pz:text-xs pz:gap-y-1 pz:text-muted-foreground pz:italic\">\n {field.suggestionsDisabledReason ?? \"Suggestions unavailable\"}{\" \"}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,SAAS,WACP,MACA,MACA,KACA,QACA;CACA,MAAM,UAAU,IAAI,IAAI,KAAK;CAC7B,MAAM,UAAU,IAAI,IAAI,KAAK;AAC7B,MAAK,MAAM,KAAK,KAAM,KAAI,CAAC,QAAQ,IAAI,EAAE,CAAE,KAAI,EAAE;AACjD,MAAK,MAAM,KAAK,KAAM,KAAI,CAAC,QAAQ,IAAI,EAAE,CAAE,QAAO,EAAE;;AAQtD,SAAgB,yBAAyB,OAA2C;CAClF,MAAM,aAAa,cAAc,MAAM,MAAM,MAAM,KAAK;CACxD,MAAM,YAAY,UAAkB,MAAM,SAAS,MAAM,MAAM,EAAE,UAAU,MAAM,EAAE,SAAS;CAG5F,MAAM,UAAU,MAAM,KAAK;CAC3B,MAAM,SAAS,UAAU,MAAM,KAAK,MAAM,QAAQ,OAAO,GAAG;CAC5D,MAAM,QACJ,WAAW,UAAU,OAAO,WAAW,WACnC,OAAO,KAAK,OAAkC,CAAC,QAAQ,QAAQ,IAAI,MAAM,CAAC,CAAC,SAC3E;AAEN,QACE,qBAAC,OAAD;EACE,WAAQ;EACR,WAAW,GAAG,gCAAgC,MAAM,WAAW,gBAAgB;YAFjF;GAIE,oBAAC,iBAAD;IACE,OAAO,MAAM;IACb,WAAW,SAAS,WAAW,MAAM,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO;IAC1E,SAAS,MAAM,cAAc,SAAY,MAAM;IAC/C,aAAa,MAAM;IACT;IACV,aAAa,MAAM,eAAe;IAClC,UAAU,MAAM;IAChB,UAAU,MAAM,KAAK;IACrB,aAAa,MAAM,UAAU,aAAa,MAAM,KAAK;IACrD,YAAW;IACX,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM;IACrC;GACD,WAAW,QAAQ,KAClB,qBAAC,OAAD;IAAK,WAAU;cAAf;KACG,MAAM,MAAM;KAAO;KAAK;KAAM;KAAE,QAAQ;KACrC;;GAEP,MAAM,uBACL,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,MAAM,6BAA6B,2BAA2B,IAC3D;;GAEJ"}
@@ -1,5 +1,5 @@
1
1
  import { cn } from "../../../lib/utils.mjs";
2
- import { IconGripVertical, IconPlus } from "../../internal/icons.mjs";
2
+ import { IconGripVertical, IconPlus, Search, X } from "../../internal/icons.mjs";
3
3
  import { PricingBadge } from "../../../widgets/pricing-badge.mjs";
4
4
  import { WidgetStrip } from "../../../widgets/widget-strip.mjs";
5
5
  import { Popover, PopoverContent, PopoverTrigger } from "../../ui/popover.mjs";
@@ -7,7 +7,6 @@ import { AvatarGroup } from "../../../widgets/avatar-group.mjs";
7
7
  import { useMemo, useState } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { providerCatalog } from "@pipe0/base";
10
- import { Search, X } from "lucide-react";
11
10
  import { DndContext, KeyboardSensor, PointerSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
12
11
  import { SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable";
13
12