@pipe0/react 1.0.34 → 1.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @pipe0/elements-react
2
2
 
3
+ ## 1.0.36
4
+
5
+ ### Patch Changes
6
+
7
+ - 07494cc: Deprecate aviate post reactors
8
+ - 4d3da70: feat: Add new operator
9
+ - Updated dependencies [07494cc]
10
+ - Updated dependencies [4d3da70]
11
+ - @pipe0/base@1.0.36
12
+
13
+ ## 1.0.35
14
+
15
+ ### Patch Changes
16
+
17
+ - 404ea0a: Add post reactors
18
+ - Updated dependencies [404ea0a]
19
+ - @pipe0/base@1.0.35
20
+
3
21
  ## 1.0.34
4
22
 
5
23
  ### Patch Changes
@@ -20,6 +20,7 @@ const OPERATORS_BY_TYPE = {
20
20
  "eq",
21
21
  "neq",
22
22
  "contains",
23
+ "not_contains",
23
24
  "matches"
24
25
  ],
25
26
  number: [
@@ -1 +1 @@
1
- {"version":3,"file":"pipes-run-if-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/pipes-run-if-input.tsx"],"sourcesContent":["import {\n type ConditionBlockMeta,\n type ConditionOperators,\n type ConstantSuggestion,\n type PipeRunIf,\n type PipesFieldDefinitionWithName,\n type PipesRunIfMeta,\n type RecordFieldType,\n RUN_IF_OPERATOR_LABELS,\n RUN_IF_STATUS_OPERATORS,\n RUN_IF_VALUE_OPERATORS,\n type SecretSuggestion,\n type StoreOption,\n} from \"@pipe0/base\";\nimport { useCallback, useMemo } from \"react\";\nimport { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport type { FormHandle } from \"../../../types/form-handle.js\";\nimport { HoverInfo } from \"../../hover-info.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\nimport { FieldLegend } from \"../../internal/field-legend.js\";\nimport { IconPlus } from \"../../internal/icons.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\nimport { Badge } from \"../../ui/badge.js\";\nimport { Button } from \"../../ui/button.js\";\nimport { Input } from \"../../ui/input.js\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select.js\";\nimport { FieldSectionEnumeration } from \"../field-section-enumeration.js\";\n\n// Use a loose type for internal manipulation since the discriminated union\n// is strict about property/operator/value combinations.\ntype Condition = {\n field_name: string;\n property: string;\n operator: string;\n value: unknown;\n};\n\n// Loose shape of a bare condition block ({logic, conditions}) — the run-if\n// `when` block, and an effect's `config.where`. The editor below is shared by\n// both; the strict discriminated-union types live in @pipe0/base.\ntype ConditionBlockValue = {\n logic: \"and\" | \"or\";\n conditions: Condition[];\n};\n\nconst OPERATORS_BY_TYPE: Record<RecordFieldType, ConditionOperators[]> = {\n string: [\"eq\", \"neq\", \"contains\", \"matches\"],\n number: [\"eq\", \"neq\", \"gt\", \"gte\", \"lt\", \"lte\"],\n boolean: [\"eq\", \"neq\"],\n json: [],\n unknown: [],\n};\n\n/**\n * json fields carry no VALUE operators (a json cell can't be compared as a\n * primitive) but their STATUS is a first-class condition target — \"count if\n * status(person_profile_match) eq failed\" is the canonical freshness pattern.\n * The editor locks such fields to the status property.\n */\nconst isStatusOnlyField = (type: RecordFieldType | undefined): boolean => type === \"json\";\n\nconst EMPTY_CONDITION: Condition = {\n field_name: \"\",\n property: \"value\",\n operator: \"eq\",\n value: \"\",\n};\n\nconst CONNECTOR_GAP = 32;\n\n/**\n * Maps a fetched field-name suggestion's `data.type` (stringly, from\n * `sheetColumnsOptionsDef`) to an operator list. Unknown/dynamic/json types\n * return `undefined` — callers keep the FULL operator set, since a free-typed\n * column name must never be hard-restricted.\n */\nfunction operatorsForSuggestion(\n suggestion: StoreOption | undefined,\n): ConditionOperators[] | undefined {\n const type = suggestion?.data?.type;\n if (!type || !(type in OPERATORS_BY_TYPE)) return undefined;\n const operators = OPERATORS_BY_TYPE[type as RecordFieldType];\n return operators.length > 0 ? operators : undefined;\n}\n\ntype MetaField = {\n fieldName: string;\n fieldLabel: string;\n type: RecordFieldType;\n format: string | null;\n};\n\nfunction ConditionRow({\n condition,\n index,\n eligibleFields,\n fieldsByName,\n isFirst,\n isLast,\n logic,\n form,\n conditionsPath,\n fieldNameMode,\n fieldNamePlaceholder,\n fieldNameSuggestions,\n showStatusProperty,\n inputFields,\n searchSecrets,\n searchConstants,\n onUpdate,\n onRemove,\n onAddCondition,\n onLogicChange,\n}: {\n condition: Condition;\n index: number;\n eligibleFields: MetaField[];\n fieldsByName: ReadonlyMap<string, MetaField>;\n isFirst: boolean;\n isLast: boolean;\n logic: PipeRunIf[\"when\"][\"logic\"];\n form: FormHandle;\n conditionsPath: string;\n fieldNameMode: \"select\" | \"text\";\n fieldNamePlaceholder?: string;\n /** Fetched `field_name` suggestions (text mode) — upgrades the free-text input to a combobox. */\n fieldNameSuggestions?: StoreOption[];\n showStatusProperty: boolean;\n inputFields?: PipesFieldDefinitionWithName[];\n searchSecrets?: (query: string) => Promise<SecretSuggestion[]>;\n searchConstants?: (query: string) => Promise<ConstantSuggestion[]>;\n onUpdate: (index: number, condition: Condition) => void;\n onRemove: (index: number) => void;\n onAddCondition: () => void;\n onLogicChange: (logic: PipeRunIf[\"when\"][\"logic\"]) => void;\n}) {\n const conditionPath = `${conditionsPath}.${index}`;\n const valueError = useFieldError(form, `${conditionPath}.value`);\n const fieldNameError = useFieldError(form, `${conditionPath}.field_name`);\n const operatorError = useFieldError(form, `${conditionPath}.operator`);\n const propertyError = useFieldError(form, `${conditionPath}.property`);\n\n const showConnector = !(isFirst && isLast);\n const isTextMode = fieldNameMode === \"text\";\n const hasEligibleFields = eligibleFields.length > 0;\n const selectedField = condition.field_name ? fieldsByName.get(condition.field_name) : undefined;\n\n const matchedSuggestion = useMemo(\n () =>\n isTextMode && condition.field_name\n ? fieldNameSuggestions?.find((s) => s.value === condition.field_name)\n : undefined,\n [isTextMode, condition.field_name, fieldNameSuggestions],\n );\n\n const availableOperators = useMemo(() => {\n if (condition.property === \"status\") {\n return RUN_IF_STATUS_OPERATORS.map((op) => ({\n value: op,\n label: RUN_IF_OPERATOR_LABELS[op],\n }));\n }\n const valueOperators = RUN_IF_VALUE_OPERATORS.map((op) => ({\n value: op,\n label: RUN_IF_OPERATOR_LABELS[op],\n }));\n if (isTextMode) {\n // Free-text field names target a sheet whose column types are unknown —\n // offer the full operator set, narrowed only when the typed name matches\n // a fetched suggestion with a known type.\n const suggested = operatorsForSuggestion(matchedSuggestion);\n return suggested\n ? valueOperators.filter((op) => suggested.includes(op.value))\n : valueOperators;\n }\n if (!selectedField?.type) return [];\n return valueOperators.filter((op) => OPERATORS_BY_TYPE[selectedField.type].includes(op.value));\n }, [condition.property, selectedField, isTextMode, matchedSuggestion]);\n\n const renderValueInput = () => {\n if (!isTextMode && (!condition.field_name || !selectedField)) {\n return <Input className=\"pz:w-32\" placeholder=\"\" disabled aria-invalid={!!valueError} />;\n }\n\n if (isTextMode && condition.property !== \"status\") {\n if (inputFields) {\n return (\n <div\n className={cn(\n \"pz:w-64 pz:rounded-md pz:border pz:border-input pz:bg-transparent\",\n valueError && \"pz:border-destructive\",\n )}\n >\n <LiquidEditor\n value={String(condition.value ?? \"\")}\n onChange={(v) => onUpdate(index, { ...condition, value: v })}\n inputFields={inputFields}\n searchSecrets={searchSecrets}\n searchConstants={searchConstants}\n placeholder=\"\"\n hideLegend\n />\n </div>\n );\n }\n return (\n <Input\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(condition.value ?? \"\")}\n onChange={(e) => onUpdate(index, { ...condition, value: e.target.value })}\n placeholder=\"\"\n />\n );\n }\n\n if (condition.property === \"status\") {\n return (\n <Select\n value={String(condition.value) || null}\n onValueChange={(v) => onUpdate(index, { ...condition, value: v })}\n >\n <SelectTrigger className=\"pz:w-32\" aria-invalid={!!valueError}>\n <SelectValue placeholder=\"--status--\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"completed\">completed</SelectItem>\n <SelectItem value=\"skipped\">skipped</SelectItem>\n <SelectItem value=\"failed\">failed</SelectItem>\n <SelectItem value=\"no_result\">no_result</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n if (selectedField?.type === \"boolean\") {\n return (\n <Select\n value={String(condition.value)}\n onValueChange={(v) => onUpdate(index, { ...condition, value: v })}\n >\n <SelectTrigger className=\"pz:w-24\" aria-invalid={!!valueError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n if (selectedField?.type === \"number\") {\n return (\n <Input\n type=\"number\"\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(Number(condition.value ?? 0))}\n onChange={(e) =>\n onUpdate(index, {\n ...condition,\n value: Number(e.target.value) || 0,\n })\n }\n placeholder=\"\"\n />\n );\n }\n\n return (\n <Input\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(condition.value ?? \"\")}\n onChange={(e) => onUpdate(index, { ...condition, value: e.target.value })}\n placeholder=\"\"\n />\n );\n };\n\n const errorMessage = valueError || fieldNameError || operatorError || propertyError;\n\n return (\n <div>\n <div className={cn(\"pz:relative\", showConnector && \"pz:pl-17\")}>\n {showConnector && (\n <>\n {isFirst ? (\n <div\n className=\"pz:absolute pz:left-7 pz:w-10 pz:border-l-2 pz:border-t-2 pz:border-input pz:rounded-tl-lg pz:pointer-events-none\"\n style={{ top: \"50%\", bottom: -CONNECTOR_GAP }}\n />\n ) : (\n <div\n className=\"pz:absolute pz:left-7 pz:w-10 pz:border-l-2 pz:border-b-2 pz:border-input pz:rounded-bl-lg pz:pointer-events-none\"\n style={{ top: -CONNECTOR_GAP, bottom: \"50%\" }}\n />\n )}\n {!isFirst && !isLast && (\n <div\n className=\"pz:absolute pz:left-7 pz:border-l-2 pz:border-input pz:pointer-events-none\"\n style={{ top: \"50%\", bottom: -CONNECTOR_GAP }}\n />\n )}\n {!isFirst && (\n <div\n className=\"pz:absolute pz:left-7 pz:z-10\"\n style={{\n top: -CONNECTOR_GAP / 2,\n transform: \"translate(-50%, -50%)\",\n }}\n >\n <Select value={logic} onValueChange={(v) => onLogicChange(v as \"and\" | \"or\")}>\n <SelectTrigger className=\"pz:w-17 pz:h-6 pz:text-xs pz:bg-background pz:hover:bg-accent\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n <SelectItem value=\"and\">AND</SelectItem>\n <SelectItem value=\"or\">OR</SelectItem>\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n )}\n </>\n )}\n <div className=\"pz:flex pz:flex-wrap pz:items-center pz:gap-2\">\n <FieldSectionEnumeration index={index} onRemove={onRemove} />\n {isTextMode ? (\n fieldNameSuggestions && fieldNameSuggestions.length > 0 ? (\n // Fetched target-sheet columns available → suggest combobox.\n // `allowCreate` keeps any literal column name typeable.\n <div className=\"pz:min-w-40\">\n <SuggestCombobox\n single\n value={condition.field_name ? [condition.field_name] : []}\n onChange={(next) => {\n const fieldName = next[next.length - 1] ?? \"\";\n const suggested = operatorsForSuggestion(\n fieldNameSuggestions.find((s) => s.value === fieldName),\n );\n const operatorStillValid =\n !suggested || suggested.includes(condition.operator as ConditionOperators);\n onUpdate(index, {\n ...condition,\n field_name: fieldName,\n ...(operatorStillValid ? {} : { operator: \"eq\", value: \"\" }),\n });\n }}\n options={fieldNameSuggestions}\n allowCreate\n ariaInvalid={!!fieldNameError}\n placeholder={fieldNamePlaceholder ?? \"column\"}\n emptyLabel=\"No columns found\"\n />\n </div>\n ) : (\n <Input\n className=\"pz:w-40\"\n aria-invalid={!!fieldNameError}\n value={condition.field_name}\n onChange={(e) => onUpdate(index, { ...condition, field_name: e.target.value })}\n placeholder={fieldNamePlaceholder ?? \"column\"}\n />\n )\n ) : (\n <>\n <Select\n value={condition.field_name || null}\n disabled={!hasEligibleFields}\n onValueChange={(v) => {\n if (v === null) return;\n // A json field supports only status conditions — lock the\n // property on selection so the row stays authorable.\n const statusOnly = isStatusOnlyField(fieldsByName.get(v)?.type);\n onUpdate(index, {\n ...condition,\n field_name: v,\n ...(statusOnly ? { property: \"status\" } : {}),\n operator: \"eq\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"pz:w-40\" aria-invalid={!!fieldNameError}>\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent>\n {eligibleFields.map((f) => (\n <SelectItem key={f.fieldName} value={f.fieldName}>\n {f.fieldLabel || f.fieldName}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {!hasEligibleFields && (\n <span className=\"pz:text-xs pz:text-muted-foreground\">\n No fields available{\" \"}\n <HoverInfo>\n No condition-capable fields exist yet. JSON fields support status conditions\n only; their values cannot be compared directly.\n </HoverInfo>\n </span>\n )}\n </>\n )}\n\n {(isTextMode || selectedField?.type) && (\n <>\n {showStatusProperty && (\n <>\n <Badge\n variant=\"secondary\"\n className=\"pz:bg-accent pz:border pz:border-input pz:font-normal pz:text-muted-foreground pz:h-8\"\n >\n &apos;s\n </Badge>\n <Select\n defaultValue=\"value\"\n value={condition.property}\n onValueChange={(v) => {\n if (v === null) return;\n onUpdate(index, {\n ...condition,\n property: v,\n operator: \"eq\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"pz:w-28\" aria-invalid={!!propertyError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {/* A json field's value cannot be compared — only its\n status is a condition target, so `value` is not\n offered at all. */}\n {!isStatusOnlyField(selectedField?.type) && (\n <SelectItem value=\"value\">value</SelectItem>\n )}\n <SelectItem value=\"status\">status</SelectItem>\n </SelectContent>\n </Select>\n </>\n )}\n\n <Select\n value={condition.operator}\n onValueChange={(v) =>\n onUpdate(index, {\n ...condition,\n operator: v as ConditionOperators,\n })\n }\n >\n <SelectTrigger className=\"pz:w-28\" aria-invalid={!!operatorError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {availableOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {renderValueInput()}\n </>\n )}\n </div>\n {errorMessage && (\n <span\n className=\"pz:text-destructive pz:text-xs pz:font-medium pz:mt-1 pz:block\"\n role=\"alert\"\n >\n {errorMessage}\n </span>\n )}\n </div>\n {isLast && (\n <div className=\"pz:flex pz:items-center pz:gap-2\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" onClick={onAddCondition}>\n <IconPlus />\n New rule\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Presentational condition-block editor shared by the pipe run-if gate and by\n * effects that filter rows by a condition (e.g. `rows:remove@1`'s `where`).\n * Operates on a bare `{logic, conditions}` block via `value`/`onChange`; the\n * wrapping adapters own where that block lives in their payload.\n */\nexport function ConditionBlockEditor({\n value,\n onChange,\n fields,\n form,\n conditionsPath,\n fieldNameMode = \"select\",\n fieldNamePlaceholder,\n fieldNameSuggestions,\n properties,\n inputFields,\n searchSecrets,\n searchConstants,\n}: {\n value: ConditionBlockValue | null;\n onChange: (value: ConditionBlockValue | null) => void;\n fields: MetaField[];\n form: FormHandle;\n // Field-error path of the conditions array (e.g. `run_if.when.conditions` or\n // `config.where.conditions`).\n conditionsPath: string;\n // \"text\" renders field_name as a free-form column name (the condition\n // targets a sheet whose columns are unknown at config time).\n fieldNameMode?: \"select\" | \"text\";\n fieldNamePlaceholder?: string;\n // Fetched target-sheet column suggestions (text mode only) — when non-empty\n // the free-text field name upgrades to a suggest combobox.\n fieldNameSuggestions?: StoreOption[];\n // Which condition properties are offered; defaults to value + status.\n properties?: (\"value\" | \"status\")[];\n // When present, string values render a LiquidEditor with the `/` picker.\n inputFields?: PipesFieldDefinitionWithName[];\n searchSecrets?: (query: string) => Promise<SecretSuggestion[]>;\n searchConstants?: (query: string) => Promise<ConstantSuggestion[]>;\n}) {\n // Built once and reused across every condition row, instead of each row\n // scanning `fields` linearly. With N rows and M fields this turns O(N·M)\n // lookups into O(N+M). A field is eligible when it supports at least one\n // offered property: value operators exist for its type, or the status\n // property is offered and the field is status-capable (json fields).\n const statusOffered = (properties ?? [\"value\", \"status\"]).includes(\"status\");\n const eligibleFields = useMemo(\n () =>\n fields.filter(\n (f) => OPERATORS_BY_TYPE[f.type].length > 0 || (statusOffered && isStatusOnlyField(f.type)),\n ),\n [fields, statusOffered],\n );\n const fieldsByName = useMemo(() => new Map(fields.map((f) => [f.fieldName, f])), [fields]);\n\n const addBlock = useCallback(() => {\n onChange({ logic: \"and\", conditions: [{ ...EMPTY_CONDITION }] });\n }, [onChange]);\n\n const updateCondition = (index: number, condition: Condition) => {\n if (!value) return;\n const newConditions = [...value.conditions];\n newConditions[index] = condition;\n onChange({ ...value, conditions: newConditions });\n };\n\n const removeCondition = (index: number) => {\n if (!value) return;\n if (value.conditions.length <= 1) {\n onChange(null);\n return;\n }\n onChange({ ...value, conditions: value.conditions.filter((_, i) => i !== index) });\n };\n\n const addCondition = () => {\n if (!value) return;\n onChange({ ...value, conditions: [...value.conditions, { ...EMPTY_CONDITION }] });\n };\n\n const changeLogic = (logic: \"and\" | \"or\") => {\n if (!value) return;\n onChange({ ...value, logic });\n };\n\n return (\n <div data-p0=\"input\">\n {!value ? (\n <div className=\"pz:flex pz:items-center\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" className=\"pz:px-0\" onClick={addBlock}>\n <IconPlus />\n New rule\n </Button>\n </div>\n ) : (\n <div className=\"pz:flex pz:flex-col pz:gap-8\">\n {value.conditions.map((condition, idx) => (\n <ConditionRow\n key={idx}\n condition={condition}\n index={idx}\n eligibleFields={eligibleFields}\n fieldsByName={fieldsByName}\n isFirst={idx === 0}\n isLast={idx === value.conditions.length - 1}\n logic={value.logic}\n form={form}\n conditionsPath={conditionsPath}\n fieldNameMode={fieldNameMode}\n fieldNamePlaceholder={fieldNamePlaceholder}\n fieldNameSuggestions={fieldNameSuggestions}\n showStatusProperty={(properties ?? [\"value\", \"status\"]).includes(\"status\")}\n inputFields={inputFields}\n searchSecrets={searchSecrets}\n searchConstants={searchConstants}\n onUpdate={updateCondition}\n onRemove={removeCondition}\n onAddCondition={addCondition}\n onLogicChange={changeLogic}\n />\n ))}\n {fieldNameMode === \"text\" && inputFields && (\n <FieldLegend entries={[{ key: \"/\", label: \"to insert a reference\" }]} />\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport function PipesRunIfInputAdapter(field: FieldHandle<\"pipes_run_if_input\">) {\n const pipeRunIf = field.value as PipeRunIf | null;\n const meta = field.meta as PipesRunIfMeta;\n\n return (\n <ConditionBlockEditor\n value={(pipeRunIf?.when as ConditionBlockValue | undefined) ?? null}\n onChange={(block) => field.setValue(block ? { action: \"run\", when: block } : null)}\n fields={meta.fields}\n form={field.form}\n conditionsPath={`${field.path}.when.conditions`}\n />\n );\n}\n\nexport function ConditionBlockInputAdapter(field: FieldHandle<\"condition_block_input\">) {\n const block = field.value as ConditionBlockValue | null;\n const meta = field.meta as ConditionBlockMeta;\n\n return (\n <ConditionBlockEditor\n value={block}\n onChange={(next) => field.setValue(next)}\n fields={meta.fields}\n form={field.form}\n conditionsPath={`${field.path}.conditions`}\n fieldNameMode={meta.fieldNameMode}\n fieldNamePlaceholder={meta.fieldNamePlaceholder}\n fieldNameSuggestions={meta.options}\n properties={meta.properties}\n inputFields={meta.inputFields}\n searchSecrets={field.searchSecrets}\n searchConstants={field.searchConstants}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"pipes-run-if-input.mjs","names":[],"sources":["../../../../src/components/defaults/adapters/pipes-run-if-input.tsx"],"sourcesContent":["import {\n type ConditionBlockMeta,\n type ConditionOperators,\n type ConstantSuggestion,\n type PipeRunIf,\n type PipesFieldDefinitionWithName,\n type PipesRunIfMeta,\n type RecordFieldType,\n RUN_IF_OPERATOR_LABELS,\n RUN_IF_STATUS_OPERATORS,\n RUN_IF_VALUE_OPERATORS,\n type SecretSuggestion,\n type StoreOption,\n} from \"@pipe0/base\";\nimport { useCallback, useMemo } from \"react\";\nimport { useFieldError } from \"../../../hooks/use-field-error.js\";\nimport { cn } from \"../../../lib/utils.js\";\nimport type { FieldHandle } from \"../../../types/field-handle.js\";\nimport type { FormHandle } from \"../../../types/form-handle.js\";\nimport { HoverInfo } from \"../../hover-info.js\";\nimport { SuggestCombobox } from \"../../internal/combobox/suggest-combobox.js\";\nimport { FieldLegend } from \"../../internal/field-legend.js\";\nimport { IconPlus } from \"../../internal/icons.js\";\nimport { LiquidEditor } from \"../../internal/LiquidEditor/LiquidEditor.js\";\nimport { Badge } from \"../../ui/badge.js\";\nimport { Button } from \"../../ui/button.js\";\nimport { Input } from \"../../ui/input.js\";\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select.js\";\nimport { FieldSectionEnumeration } from \"../field-section-enumeration.js\";\n\n// Use a loose type for internal manipulation since the discriminated union\n// is strict about property/operator/value combinations.\ntype Condition = {\n field_name: string;\n property: string;\n operator: string;\n value: unknown;\n};\n\n// Loose shape of a bare condition block ({logic, conditions}) — the run-if\n// `when` block, and an effect's `config.where`. The editor below is shared by\n// both; the strict discriminated-union types live in @pipe0/base.\ntype ConditionBlockValue = {\n logic: \"and\" | \"or\";\n conditions: Condition[];\n};\n\nconst OPERATORS_BY_TYPE: Record<RecordFieldType, ConditionOperators[]> = {\n string: [\"eq\", \"neq\", \"contains\", \"not_contains\", \"matches\"],\n number: [\"eq\", \"neq\", \"gt\", \"gte\", \"lt\", \"lte\"],\n boolean: [\"eq\", \"neq\"],\n json: [],\n unknown: [],\n};\n\n/**\n * json fields carry no VALUE operators (a json cell can't be compared as a\n * primitive) but their STATUS is a first-class condition target — \"count if\n * status(person_profile_match) eq failed\" is the canonical freshness pattern.\n * The editor locks such fields to the status property.\n */\nconst isStatusOnlyField = (type: RecordFieldType | undefined): boolean => type === \"json\";\n\nconst EMPTY_CONDITION: Condition = {\n field_name: \"\",\n property: \"value\",\n operator: \"eq\",\n value: \"\",\n};\n\nconst CONNECTOR_GAP = 32;\n\n/**\n * Maps a fetched field-name suggestion's `data.type` (stringly, from\n * `sheetColumnsOptionsDef`) to an operator list. Unknown/dynamic/json types\n * return `undefined` — callers keep the FULL operator set, since a free-typed\n * column name must never be hard-restricted.\n */\nfunction operatorsForSuggestion(\n suggestion: StoreOption | undefined,\n): ConditionOperators[] | undefined {\n const type = suggestion?.data?.type;\n if (!type || !(type in OPERATORS_BY_TYPE)) return undefined;\n const operators = OPERATORS_BY_TYPE[type as RecordFieldType];\n return operators.length > 0 ? operators : undefined;\n}\n\ntype MetaField = {\n fieldName: string;\n fieldLabel: string;\n type: RecordFieldType;\n format: string | null;\n};\n\nfunction ConditionRow({\n condition,\n index,\n eligibleFields,\n fieldsByName,\n isFirst,\n isLast,\n logic,\n form,\n conditionsPath,\n fieldNameMode,\n fieldNamePlaceholder,\n fieldNameSuggestions,\n showStatusProperty,\n inputFields,\n searchSecrets,\n searchConstants,\n onUpdate,\n onRemove,\n onAddCondition,\n onLogicChange,\n}: {\n condition: Condition;\n index: number;\n eligibleFields: MetaField[];\n fieldsByName: ReadonlyMap<string, MetaField>;\n isFirst: boolean;\n isLast: boolean;\n logic: PipeRunIf[\"when\"][\"logic\"];\n form: FormHandle;\n conditionsPath: string;\n fieldNameMode: \"select\" | \"text\";\n fieldNamePlaceholder?: string;\n /** Fetched `field_name` suggestions (text mode) — upgrades the free-text input to a combobox. */\n fieldNameSuggestions?: StoreOption[];\n showStatusProperty: boolean;\n inputFields?: PipesFieldDefinitionWithName[];\n searchSecrets?: (query: string) => Promise<SecretSuggestion[]>;\n searchConstants?: (query: string) => Promise<ConstantSuggestion[]>;\n onUpdate: (index: number, condition: Condition) => void;\n onRemove: (index: number) => void;\n onAddCondition: () => void;\n onLogicChange: (logic: PipeRunIf[\"when\"][\"logic\"]) => void;\n}) {\n const conditionPath = `${conditionsPath}.${index}`;\n const valueError = useFieldError(form, `${conditionPath}.value`);\n const fieldNameError = useFieldError(form, `${conditionPath}.field_name`);\n const operatorError = useFieldError(form, `${conditionPath}.operator`);\n const propertyError = useFieldError(form, `${conditionPath}.property`);\n\n const showConnector = !(isFirst && isLast);\n const isTextMode = fieldNameMode === \"text\";\n const hasEligibleFields = eligibleFields.length > 0;\n const selectedField = condition.field_name ? fieldsByName.get(condition.field_name) : undefined;\n\n const matchedSuggestion = useMemo(\n () =>\n isTextMode && condition.field_name\n ? fieldNameSuggestions?.find((s) => s.value === condition.field_name)\n : undefined,\n [isTextMode, condition.field_name, fieldNameSuggestions],\n );\n\n const availableOperators = useMemo(() => {\n if (condition.property === \"status\") {\n return RUN_IF_STATUS_OPERATORS.map((op) => ({\n value: op,\n label: RUN_IF_OPERATOR_LABELS[op],\n }));\n }\n const valueOperators = RUN_IF_VALUE_OPERATORS.map((op) => ({\n value: op,\n label: RUN_IF_OPERATOR_LABELS[op],\n }));\n if (isTextMode) {\n // Free-text field names target a sheet whose column types are unknown —\n // offer the full operator set, narrowed only when the typed name matches\n // a fetched suggestion with a known type.\n const suggested = operatorsForSuggestion(matchedSuggestion);\n return suggested\n ? valueOperators.filter((op) => suggested.includes(op.value))\n : valueOperators;\n }\n if (!selectedField?.type) return [];\n return valueOperators.filter((op) => OPERATORS_BY_TYPE[selectedField.type].includes(op.value));\n }, [condition.property, selectedField, isTextMode, matchedSuggestion]);\n\n const renderValueInput = () => {\n if (!isTextMode && (!condition.field_name || !selectedField)) {\n return <Input className=\"pz:w-32\" placeholder=\"\" disabled aria-invalid={!!valueError} />;\n }\n\n if (isTextMode && condition.property !== \"status\") {\n if (inputFields) {\n return (\n <div\n className={cn(\n \"pz:w-64 pz:rounded-md pz:border pz:border-input pz:bg-transparent\",\n valueError && \"pz:border-destructive\",\n )}\n >\n <LiquidEditor\n value={String(condition.value ?? \"\")}\n onChange={(v) => onUpdate(index, { ...condition, value: v })}\n inputFields={inputFields}\n searchSecrets={searchSecrets}\n searchConstants={searchConstants}\n placeholder=\"\"\n hideLegend\n />\n </div>\n );\n }\n return (\n <Input\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(condition.value ?? \"\")}\n onChange={(e) => onUpdate(index, { ...condition, value: e.target.value })}\n placeholder=\"\"\n />\n );\n }\n\n if (condition.property === \"status\") {\n return (\n <Select\n value={String(condition.value) || null}\n onValueChange={(v) => onUpdate(index, { ...condition, value: v })}\n >\n <SelectTrigger className=\"pz:w-32\" aria-invalid={!!valueError}>\n <SelectValue placeholder=\"--status--\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"completed\">completed</SelectItem>\n <SelectItem value=\"skipped\">skipped</SelectItem>\n <SelectItem value=\"failed\">failed</SelectItem>\n <SelectItem value=\"no_result\">no_result</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n if (selectedField?.type === \"boolean\") {\n return (\n <Select\n value={String(condition.value)}\n onValueChange={(v) => onUpdate(index, { ...condition, value: v })}\n >\n <SelectTrigger className=\"pz:w-24\" aria-invalid={!!valueError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n );\n }\n\n if (selectedField?.type === \"number\") {\n return (\n <Input\n type=\"number\"\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(Number(condition.value ?? 0))}\n onChange={(e) =>\n onUpdate(index, {\n ...condition,\n value: Number(e.target.value) || 0,\n })\n }\n placeholder=\"\"\n />\n );\n }\n\n return (\n <Input\n className=\"pz:w-32\"\n aria-invalid={!!valueError}\n value={String(condition.value ?? \"\")}\n onChange={(e) => onUpdate(index, { ...condition, value: e.target.value })}\n placeholder=\"\"\n />\n );\n };\n\n const errorMessage = valueError || fieldNameError || operatorError || propertyError;\n\n return (\n <div>\n <div className={cn(\"pz:relative\", showConnector && \"pz:pl-17\")}>\n {showConnector && (\n <>\n {isFirst ? (\n <div\n className=\"pz:absolute pz:left-7 pz:w-10 pz:border-l-2 pz:border-t-2 pz:border-input pz:rounded-tl-lg pz:pointer-events-none\"\n style={{ top: \"50%\", bottom: -CONNECTOR_GAP }}\n />\n ) : (\n <div\n className=\"pz:absolute pz:left-7 pz:w-10 pz:border-l-2 pz:border-b-2 pz:border-input pz:rounded-bl-lg pz:pointer-events-none\"\n style={{ top: -CONNECTOR_GAP, bottom: \"50%\" }}\n />\n )}\n {!isFirst && !isLast && (\n <div\n className=\"pz:absolute pz:left-7 pz:border-l-2 pz:border-input pz:pointer-events-none\"\n style={{ top: \"50%\", bottom: -CONNECTOR_GAP }}\n />\n )}\n {!isFirst && (\n <div\n className=\"pz:absolute pz:left-7 pz:z-10\"\n style={{\n top: -CONNECTOR_GAP / 2,\n transform: \"translate(-50%, -50%)\",\n }}\n >\n <Select value={logic} onValueChange={(v) => onLogicChange(v as \"and\" | \"or\")}>\n <SelectTrigger className=\"pz:w-17 pz:h-6 pz:text-xs pz:bg-background pz:hover:bg-accent\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectGroup>\n <SelectItem value=\"and\">AND</SelectItem>\n <SelectItem value=\"or\">OR</SelectItem>\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n )}\n </>\n )}\n <div className=\"pz:flex pz:flex-wrap pz:items-center pz:gap-2\">\n <FieldSectionEnumeration index={index} onRemove={onRemove} />\n {isTextMode ? (\n fieldNameSuggestions && fieldNameSuggestions.length > 0 ? (\n // Fetched target-sheet columns available → suggest combobox.\n // `allowCreate` keeps any literal column name typeable.\n <div className=\"pz:min-w-40\">\n <SuggestCombobox\n single\n value={condition.field_name ? [condition.field_name] : []}\n onChange={(next) => {\n const fieldName = next[next.length - 1] ?? \"\";\n const suggested = operatorsForSuggestion(\n fieldNameSuggestions.find((s) => s.value === fieldName),\n );\n const operatorStillValid =\n !suggested || suggested.includes(condition.operator as ConditionOperators);\n onUpdate(index, {\n ...condition,\n field_name: fieldName,\n ...(operatorStillValid ? {} : { operator: \"eq\", value: \"\" }),\n });\n }}\n options={fieldNameSuggestions}\n allowCreate\n ariaInvalid={!!fieldNameError}\n placeholder={fieldNamePlaceholder ?? \"column\"}\n emptyLabel=\"No columns found\"\n />\n </div>\n ) : (\n <Input\n className=\"pz:w-40\"\n aria-invalid={!!fieldNameError}\n value={condition.field_name}\n onChange={(e) => onUpdate(index, { ...condition, field_name: e.target.value })}\n placeholder={fieldNamePlaceholder ?? \"column\"}\n />\n )\n ) : (\n <>\n <Select\n value={condition.field_name || null}\n disabled={!hasEligibleFields}\n onValueChange={(v) => {\n if (v === null) return;\n // A json field supports only status conditions — lock the\n // property on selection so the row stays authorable.\n const statusOnly = isStatusOnlyField(fieldsByName.get(v)?.type);\n onUpdate(index, {\n ...condition,\n field_name: v,\n ...(statusOnly ? { property: \"status\" } : {}),\n operator: \"eq\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"pz:w-40\" aria-invalid={!!fieldNameError}>\n <SelectValue placeholder=\"Select field\" />\n </SelectTrigger>\n <SelectContent>\n {eligibleFields.map((f) => (\n <SelectItem key={f.fieldName} value={f.fieldName}>\n {f.fieldLabel || f.fieldName}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {!hasEligibleFields && (\n <span className=\"pz:text-xs pz:text-muted-foreground\">\n No fields available{\" \"}\n <HoverInfo>\n No condition-capable fields exist yet. JSON fields support status conditions\n only; their values cannot be compared directly.\n </HoverInfo>\n </span>\n )}\n </>\n )}\n\n {(isTextMode || selectedField?.type) && (\n <>\n {showStatusProperty && (\n <>\n <Badge\n variant=\"secondary\"\n className=\"pz:bg-accent pz:border pz:border-input pz:font-normal pz:text-muted-foreground pz:h-8\"\n >\n &apos;s\n </Badge>\n <Select\n defaultValue=\"value\"\n value={condition.property}\n onValueChange={(v) => {\n if (v === null) return;\n onUpdate(index, {\n ...condition,\n property: v,\n operator: \"eq\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"pz:w-28\" aria-invalid={!!propertyError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {/* A json field's value cannot be compared — only its\n status is a condition target, so `value` is not\n offered at all. */}\n {!isStatusOnlyField(selectedField?.type) && (\n <SelectItem value=\"value\">value</SelectItem>\n )}\n <SelectItem value=\"status\">status</SelectItem>\n </SelectContent>\n </Select>\n </>\n )}\n\n <Select\n value={condition.operator}\n onValueChange={(v) =>\n onUpdate(index, {\n ...condition,\n operator: v as ConditionOperators,\n })\n }\n >\n <SelectTrigger className=\"pz:w-28\" aria-invalid={!!operatorError}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {availableOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {renderValueInput()}\n </>\n )}\n </div>\n {errorMessage && (\n <span\n className=\"pz:text-destructive pz:text-xs pz:font-medium pz:mt-1 pz:block\"\n role=\"alert\"\n >\n {errorMessage}\n </span>\n )}\n </div>\n {isLast && (\n <div className=\"pz:flex pz:items-center pz:gap-2\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" onClick={onAddCondition}>\n <IconPlus />\n New rule\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Presentational condition-block editor shared by the pipe run-if gate and by\n * effects that filter rows by a condition (e.g. `rows:remove@1`'s `where`).\n * Operates on a bare `{logic, conditions}` block via `value`/`onChange`; the\n * wrapping adapters own where that block lives in their payload.\n */\nexport function ConditionBlockEditor({\n value,\n onChange,\n fields,\n form,\n conditionsPath,\n fieldNameMode = \"select\",\n fieldNamePlaceholder,\n fieldNameSuggestions,\n properties,\n inputFields,\n searchSecrets,\n searchConstants,\n}: {\n value: ConditionBlockValue | null;\n onChange: (value: ConditionBlockValue | null) => void;\n fields: MetaField[];\n form: FormHandle;\n // Field-error path of the conditions array (e.g. `run_if.when.conditions` or\n // `config.where.conditions`).\n conditionsPath: string;\n // \"text\" renders field_name as a free-form column name (the condition\n // targets a sheet whose columns are unknown at config time).\n fieldNameMode?: \"select\" | \"text\";\n fieldNamePlaceholder?: string;\n // Fetched target-sheet column suggestions (text mode only) — when non-empty\n // the free-text field name upgrades to a suggest combobox.\n fieldNameSuggestions?: StoreOption[];\n // Which condition properties are offered; defaults to value + status.\n properties?: (\"value\" | \"status\")[];\n // When present, string values render a LiquidEditor with the `/` picker.\n inputFields?: PipesFieldDefinitionWithName[];\n searchSecrets?: (query: string) => Promise<SecretSuggestion[]>;\n searchConstants?: (query: string) => Promise<ConstantSuggestion[]>;\n}) {\n // Built once and reused across every condition row, instead of each row\n // scanning `fields` linearly. With N rows and M fields this turns O(N·M)\n // lookups into O(N+M). A field is eligible when it supports at least one\n // offered property: value operators exist for its type, or the status\n // property is offered and the field is status-capable (json fields).\n const statusOffered = (properties ?? [\"value\", \"status\"]).includes(\"status\");\n const eligibleFields = useMemo(\n () =>\n fields.filter(\n (f) => OPERATORS_BY_TYPE[f.type].length > 0 || (statusOffered && isStatusOnlyField(f.type)),\n ),\n [fields, statusOffered],\n );\n const fieldsByName = useMemo(() => new Map(fields.map((f) => [f.fieldName, f])), [fields]);\n\n const addBlock = useCallback(() => {\n onChange({ logic: \"and\", conditions: [{ ...EMPTY_CONDITION }] });\n }, [onChange]);\n\n const updateCondition = (index: number, condition: Condition) => {\n if (!value) return;\n const newConditions = [...value.conditions];\n newConditions[index] = condition;\n onChange({ ...value, conditions: newConditions });\n };\n\n const removeCondition = (index: number) => {\n if (!value) return;\n if (value.conditions.length <= 1) {\n onChange(null);\n return;\n }\n onChange({ ...value, conditions: value.conditions.filter((_, i) => i !== index) });\n };\n\n const addCondition = () => {\n if (!value) return;\n onChange({ ...value, conditions: [...value.conditions, { ...EMPTY_CONDITION }] });\n };\n\n const changeLogic = (logic: \"and\" | \"or\") => {\n if (!value) return;\n onChange({ ...value, logic });\n };\n\n return (\n <div data-p0=\"input\">\n {!value ? (\n <div className=\"pz:flex pz:items-center\">\n <Button type=\"button\" variant=\"link\" size=\"xs\" className=\"pz:px-0\" onClick={addBlock}>\n <IconPlus />\n New rule\n </Button>\n </div>\n ) : (\n <div className=\"pz:flex pz:flex-col pz:gap-8\">\n {value.conditions.map((condition, idx) => (\n <ConditionRow\n key={idx}\n condition={condition}\n index={idx}\n eligibleFields={eligibleFields}\n fieldsByName={fieldsByName}\n isFirst={idx === 0}\n isLast={idx === value.conditions.length - 1}\n logic={value.logic}\n form={form}\n conditionsPath={conditionsPath}\n fieldNameMode={fieldNameMode}\n fieldNamePlaceholder={fieldNamePlaceholder}\n fieldNameSuggestions={fieldNameSuggestions}\n showStatusProperty={(properties ?? [\"value\", \"status\"]).includes(\"status\")}\n inputFields={inputFields}\n searchSecrets={searchSecrets}\n searchConstants={searchConstants}\n onUpdate={updateCondition}\n onRemove={removeCondition}\n onAddCondition={addCondition}\n onLogicChange={changeLogic}\n />\n ))}\n {fieldNameMode === \"text\" && inputFields && (\n <FieldLegend entries={[{ key: \"/\", label: \"to insert a reference\" }]} />\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport function PipesRunIfInputAdapter(field: FieldHandle<\"pipes_run_if_input\">) {\n const pipeRunIf = field.value as PipeRunIf | null;\n const meta = field.meta as PipesRunIfMeta;\n\n return (\n <ConditionBlockEditor\n value={(pipeRunIf?.when as ConditionBlockValue | undefined) ?? null}\n onChange={(block) => field.setValue(block ? { action: \"run\", when: block } : null)}\n fields={meta.fields}\n form={field.form}\n conditionsPath={`${field.path}.when.conditions`}\n />\n );\n}\n\nexport function ConditionBlockInputAdapter(field: FieldHandle<\"condition_block_input\">) {\n const block = field.value as ConditionBlockValue | null;\n const meta = field.meta as ConditionBlockMeta;\n\n return (\n <ConditionBlockEditor\n value={block}\n onChange={(next) => field.setValue(next)}\n fields={meta.fields}\n form={field.form}\n conditionsPath={`${field.path}.conditions`}\n fieldNameMode={meta.fieldNameMode}\n fieldNamePlaceholder={meta.fieldNamePlaceholder}\n fieldNameSuggestions={meta.options}\n properties={meta.properties}\n inputFields={meta.inputFields}\n searchSecrets={field.searchSecrets}\n searchConstants={field.searchConstants}\n />\n );\n}\n"],"mappings":"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"}
@@ -49,12 +49,12 @@ declare function useSearchCatalogTable(config?: {
49
49
  removeColumnFilter: (id: "inputFields" | "outputFields" | "tags" | "providers") => void;
50
50
  resetFilters: () => void;
51
51
  getColumnFilterValue: (id: "inputFields" | "outputFields" | "tags" | "providers") => string;
52
- sortedOutputFieldEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:content:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]][];
53
- sortedTagEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:content:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]][];
54
- sortedProviderEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:content:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]][];
55
- searchIdsByOutputField: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:content:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]>;
56
- searchIdsByProvider: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:content:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]>;
57
- searchIdsByTag: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:content:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]>;
52
+ sortedOutputFieldEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]][];
53
+ sortedTagEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]][];
54
+ sortedProviderEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]][];
55
+ searchIdsByOutputField: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]>;
56
+ searchIdsByProvider: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]>;
57
+ searchIdsByTag: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:crustdata@2" | "companies:profiles:crustdata@3" | "companies:profiles:amplemarket@2" | "jobs:crustdata@1" | "people:profiles:crustdata@1" | "people:profiles:crustdata@2" | "people:profiles:crustdata@3" | "people:profiles:amplemarket@1" | "people:profiles:amplemarket@2" | "companies:entitysearch:parallel@1" | "people:entitysearch:parallel@1" | "research:agent@1" | "people:eventguests:luma@1" | "people:channelmembers:slack@1" | "events:googlecalendar@1" | "sheet:rows@1" | "bucket:entries@1" | "query:postgres@1" | "query:databricks@1" | "posts:crustdata@1" | "posts:x@1" | "people:followers:x@1" | "people:followers:self:x@1" | "contacts:hubspot@1" | "companies:hubspot@1" | "deals:hubspot@1" | "owners:hubspot@1" | "contacts:salesforce@1" | "leads:salesforce@1" | "accounts:salesforce@1" | "opportunities:salesforce@1" | "users:salesforce@1" | "query:salesforce@1" | "people:attio@1" | "companies:attio@1" | "deals:attio@1" | "records:attio@1" | "entries:attio@1" | "query:attio@1" | "users:attio@1")[]>;
58
58
  };
59
59
  type UseSearchCatalogTableReturn = ReturnType<typeof useSearchCatalogTable>;
60
60
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipe0/react",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "description": "React component library for building forms and catalogs powered by pipe0 pipes and searches.",
5
5
  "license": "MIT",
6
6
  "author": "pipe0",
@@ -85,7 +85,7 @@
85
85
  "react-hook-form": "^7.62.0",
86
86
  "swr": "^2.4.1",
87
87
  "tailwind-merge": "^3.3.1",
88
- "@pipe0/base": "1.0.34"
88
+ "@pipe0/base": "1.0.36"
89
89
  },
90
90
  "devDependencies": {
91
91
  "@base-ui/react": "^1.6.0",