@milaboratories/uikit 2.11.9 → 2.12.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","names":[],"sources":["../../../src/composition/filters/metadata.ts"],"sourcesContent":["import type { FilterSpecType, SimplifiedPColumnSpec } from \"@platforma-sdk/model\";\nimport type { FilterSpecMetadataRecord } from \"./types\";\n\nexport const filterUiMetadata = {\n equal: {\n label: \"Col = X (Equal)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"equal\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n notEqual: {\n label: \"Col ≠ X (Not Equal)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"notEqual\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n lessThan: {\n label: \"Col < X (Less Than)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThan\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n greaterThan: {\n label: \"Col > X (Greater Than)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThan\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n lessThanOrEqual: {\n label: \"Col ≤ X (Less Than or Equal)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThanOrEqual\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n greaterThanOrEqual: {\n label: \"Col ≥ X (Greater Than or Equal)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThanOrEqual\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n // Columns comparison\n equalToColumn: {\n label: \"Col₁ = Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"equalToColumn\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n lessThanColumn: {\n label: \"Col₁ < Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThanColumn\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n greaterThanColumn: {\n label: \"Col₁ > Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThanColumn\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n lessThanColumnOrEqual: {\n label: \"Col₁ ≤ Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThanColumnOrEqual\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n greaterThanColumnOrEqual: {\n label: \"Col₁ ≥ Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThanColumnOrEqual\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n // Ordering filters\n topN: {\n label: \"Top N\",\n form: {\n column: {\n label: \"Rank By Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"topN\",\n },\n n: {\n label: \"N\",\n fieldType: \"number\",\n defaultValue: () => 10,\n },\n },\n supportedFor: isNumericValueType,\n },\n bottomN: {\n label: \"Bottom N\",\n form: {\n column: {\n label: \"Rank By Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"bottomN\",\n },\n n: {\n label: \"N\",\n fieldType: \"number\",\n defaultValue: () => 10,\n },\n },\n supportedFor: isNumericValueType,\n },\n patternContainSubsequence: {\n label: \"Col ~ Seq (Contain Subsequence)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternContainSubsequence\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternNotContainSubsequence: {\n label: \"Col ≁ Seq (Not Contain Subsequence)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternNotContainSubsequence\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternEquals: {\n label: \"Col = Seq (Equals)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternEquals\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternNotEquals: {\n label: \"Col ≠ Seq (Not Equal)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternNotEquals\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n isNA: {\n label: \"Is NA\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"isNA\",\n },\n },\n supportedFor: () => true,\n },\n isNotNA: {\n label: \"Is Not NA\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"isNotNA\",\n },\n },\n supportedFor: () => true,\n },\n or: {\n label: \"Or\",\n form: {\n type: {\n fieldType: \"FilterType\",\n label: \"Predicate\",\n defaultValue: () => \"or\",\n },\n filters: {\n fieldType: \"unknown[]\",\n label: \"Filters\",\n defaultValue: () => [],\n },\n },\n supportedFor: () => false,\n },\n and: {\n label: \"And\",\n form: {\n type: {\n fieldType: \"FilterType\",\n label: \"Predicate\",\n defaultValue: () => \"and\",\n },\n filters: {\n fieldType: \"unknown[]\",\n label: \"Filters\",\n defaultValue: () => [],\n },\n },\n supportedFor: () => false,\n },\n not: {\n label: \"Not\",\n form: {\n type: {\n fieldType: \"FilterType\",\n label: \"Predicate\",\n defaultValue: () => \"not\",\n },\n filter: {\n fieldType: \"form\",\n label: \"Filter\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: () => false,\n },\n patternMatchesRegularExpression: {\n label: \"Col ~ X (Matches Regular Expression)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternMatchesRegularExpression\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternFuzzyContainSubsequence: {\n label: \"Col ~ Seq (Fuzzy Contain Subsequence)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternFuzzyContainSubsequence\",\n },\n value: {\n label: \"Set\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n inSet: {\n label: \"Col ∈ Set (In Set)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"inSet\",\n },\n value: {\n fieldType: \"unknown[]\",\n label: \"Set\",\n defaultValue: () => [],\n },\n },\n supportedFor: isStringValueType,\n },\n notInSet: {\n label: \"Col ∉ Set (Not In Set)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"notInSet\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"unknown[]\",\n defaultValue: () => [],\n },\n },\n supportedFor: isStringValueType,\n },\n ifNa: {\n label: \"If NA Then (Replace NA)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"ifNa\",\n },\n replacement: {\n label: \"Replacement Value\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: () => true,\n },\n} satisfies FilterSpecMetadataRecord<FilterSpecType>;\n\nexport function getFilterUiTypeOptions(columnSpec?: SimplifiedPColumnSpec) {\n if (!columnSpec) {\n return [];\n }\n\n return Object.entries(filterUiMetadata)\n .filter(([_, metadata]) => metadata.supportedFor(columnSpec))\n .map(([type, metadata]) => ({\n label: metadata.label,\n value: type,\n }));\n}\n\nexport function getFilterUiMetadata(type: FilterSpecType) {\n return filterUiMetadata[type];\n}\n\nfunction isNumericValueType(spec: SimplifiedPColumnSpec): boolean {\n return (\n spec.valueType === \"Int\" ||\n spec.valueType === \"Long\" ||\n spec.valueType === \"Float\" ||\n spec.valueType === \"Double\"\n );\n}\n\nfunction isStringValueType(spec: SimplifiedPColumnSpec): boolean {\n return spec.valueType === \"String\";\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","names":[],"sources":["../../../src/composition/filters/metadata.ts"],"sourcesContent":["import type { FilterSpecType, SimplifiedPColumnSpec } from \"@platforma-sdk/model\";\nimport type { FilterSpecMetadataRecord } from \"./types\";\n\nexport const filterUiMetadata = {\n equal: {\n label: \"Equals (=)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"equal\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n notEqual: {\n label: \"Not Equal To (≠)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"notEqual\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n lessThan: {\n label: \"Below (<)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThan\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n greaterThan: {\n label: \"Above (>)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThan\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n lessThanOrEqual: {\n label: \"At Most (≤)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThanOrEqual\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n greaterThanOrEqual: {\n label: \"At Least (≥)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThanOrEqual\",\n },\n x: {\n label: \"X\",\n fieldType: \"number\",\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\n },\n // Columns comparison\n equalToColumn: {\n label: \"Col₁ = Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"equalToColumn\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n lessThanColumn: {\n label: \"Col₁ < Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThanColumn\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n greaterThanColumn: {\n label: \"Col₁ > Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThanColumn\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n lessThanColumnOrEqual: {\n label: \"Col₁ ≤ Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"lessThanColumnOrEqual\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n greaterThanColumnOrEqual: {\n label: \"Col₁ ≥ Col₂ (Compare Columns)\",\n form: {\n column: {\n label: \"Col₁\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"greaterThanColumnOrEqual\",\n },\n rhs: {\n label: \"Col₂\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n minDiff: {\n label: \"Margin (positive)\",\n fieldType: \"number?\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2?: SimplifiedPColumnSpec): boolean => {\n return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));\n },\n },\n // Ordering filters\n topN: {\n label: \"Top N\",\n form: {\n column: {\n label: \"Rank By Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"topN\",\n },\n n: {\n label: \"N\",\n fieldType: \"number\",\n defaultValue: () => 10,\n },\n },\n supportedFor: isNumericValueType,\n },\n bottomN: {\n label: \"Bottom N\",\n form: {\n column: {\n label: \"Rank By Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"bottomN\",\n },\n n: {\n label: \"N\",\n fieldType: \"number\",\n defaultValue: () => 10,\n },\n },\n supportedFor: isNumericValueType,\n },\n patternContainSubsequence: {\n label: \"Contains (~)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternContainSubsequence\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternNotContainSubsequence: {\n label: \"Does Not Contain (≁)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternNotContainSubsequence\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternEquals: {\n label: \"Equals (=)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternEquals\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternNotEquals: {\n label: \"Not Equal To (≠)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternNotEquals\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n isNA: {\n label: \"Is Empty (NA)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"isNA\",\n },\n },\n supportedFor: () => true,\n },\n isNotNA: {\n label: \"Is Not Empty (≠ NA)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"isNotNA\",\n },\n },\n supportedFor: () => true,\n },\n or: {\n label: \"Or\",\n form: {\n type: {\n fieldType: \"FilterType\",\n label: \"Predicate\",\n defaultValue: () => \"or\",\n },\n filters: {\n fieldType: \"unknown[]\",\n label: \"Filters\",\n defaultValue: () => [],\n },\n },\n supportedFor: () => false,\n },\n and: {\n label: \"And\",\n form: {\n type: {\n fieldType: \"FilterType\",\n label: \"Predicate\",\n defaultValue: () => \"and\",\n },\n filters: {\n fieldType: \"unknown[]\",\n label: \"Filters\",\n defaultValue: () => [],\n },\n },\n supportedFor: () => false,\n },\n not: {\n label: \"Not\",\n form: {\n type: {\n fieldType: \"FilterType\",\n label: \"Predicate\",\n defaultValue: () => \"not\",\n },\n filter: {\n fieldType: \"form\",\n label: \"Filter\",\n defaultValue: () => undefined,\n },\n },\n supportedFor: () => false,\n },\n patternMatchesRegularExpression: {\n label: \"Matches Regex (.*)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternMatchesRegularExpression\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n patternFuzzyContainSubsequence: {\n label: \"Contains Approximately (Fuzzy ~)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"patternFuzzyContainSubsequence\",\n },\n value: {\n label: \"Set\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: isStringValueType,\n },\n inSet: {\n label: \"In List (∈)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"inSet\",\n },\n value: {\n fieldType: \"unknown[]\",\n label: \"Set\",\n defaultValue: () => [],\n },\n },\n supportedFor: isStringValueType,\n },\n notInSet: {\n label: \"Not In List (∉)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"notInSet\",\n },\n value: {\n label: \"Seq\",\n fieldType: \"unknown[]\",\n defaultValue: () => [],\n },\n },\n supportedFor: isStringValueType,\n },\n ifNa: {\n label: \"If NA Then (Replace NA)\",\n form: {\n column: {\n label: \"Column\",\n fieldType: \"SUniversalPColumnId\",\n defaultValue: () => undefined,\n },\n type: {\n label: \"Predicate\",\n fieldType: \"FilterType\",\n defaultValue: () => \"ifNa\",\n },\n replacement: {\n label: \"Replacement Value\",\n fieldType: \"string\",\n defaultValue: () => \"\",\n },\n },\n supportedFor: () => true,\n },\n} satisfies FilterSpecMetadataRecord<FilterSpecType>;\n\nexport function getFilterUiTypeOptions(columnSpec?: SimplifiedPColumnSpec) {\n if (!columnSpec) {\n return [];\n }\n\n return Object.entries(filterUiMetadata)\n .filter(([_, metadata]) => metadata.supportedFor(columnSpec))\n .map(([type, metadata]) => ({\n label: metadata.label,\n value: type,\n }));\n}\n\nexport function getFilterUiMetadata(type: FilterSpecType) {\n return filterUiMetadata[type];\n}\n\nfunction isNumericValueType(spec: SimplifiedPColumnSpec): boolean {\n return (\n spec.valueType === \"Int\" ||\n spec.valueType === \"Long\" ||\n spec.valueType === \"Float\" ||\n spec.valueType === \"Double\"\n );\n}\n\nfunction isStringValueType(spec: SimplifiedPColumnSpec): boolean {\n return spec.valueType === \"String\";\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/uikit",
3
- "version": "2.11.9",
3
+ "version": "2.12.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -32,7 +32,7 @@
32
32
  "sortablejs": "^1.15.6",
33
33
  "vue": "^3.5.24",
34
34
  "@milaboratories/helpers": "1.14.1",
35
- "@platforma-sdk/model": "1.64.0"
35
+ "@platforma-sdk/model": "1.65.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@vitest/coverage-istanbul": "^4.1.3",
@@ -40,9 +40,9 @@
40
40
  "svgo": "^3.3.2",
41
41
  "typescript": "~5.9.3",
42
42
  "vitest": "^4.1.3",
43
- "@milaboratories/ts-builder": "1.3.1",
44
43
  "@milaboratories/build-configs": "2.0.0",
45
- "@milaboratories/ts-configs": "1.2.3"
44
+ "@milaboratories/ts-configs": "1.2.3",
45
+ "@milaboratories/ts-builder": "1.3.1"
46
46
  },
47
47
  "scripts": {
48
48
  "dev": "ts-builder serve --target browser-lib --build-config ./build.browser-lib.config.js",
@@ -43,28 +43,26 @@ function mouseoutHandler() {
43
43
 
44
44
  <style lang="scss">
45
45
  .ui-lt-container {
46
+ position: relative;
46
47
  min-width: 0;
47
- white-space: nowrap;
48
48
  overflow: hidden;
49
- position: relative;
49
+ white-space: nowrap;
50
50
  border-radius: 5px;
51
51
 
52
52
  span {
53
53
  display: inline-block;
54
+ width: 100%;
54
55
  overflow: hidden;
55
56
  text-overflow: ellipsis;
56
- width: 100%;
57
57
  vertical-align: bottom;
58
- pointer-events: all !important;
59
58
  }
60
59
 
61
60
  .ui-lt-animate {
62
61
  position: relative;
62
+ width: fit-content;
63
+ overflow: unset;
64
+ text-overflow: unset;
63
65
  animation: left-to-right v-bind(animationTime) infinite alternate linear;
64
-
65
- overflow: unset !important;
66
- text-overflow: unset !important;
67
- width: fit-content !important;
68
66
  }
69
67
  }
70
68
 
@@ -11,6 +11,8 @@ import { computed, shallowRef, watch } from "vue";
11
11
  import PlElementListItem from "./PlElementListItem.vue";
12
12
  import { moveElements } from "./utils.ts";
13
13
 
14
+ type ItemEntry = [idx: number, item: T];
15
+
14
16
  const itemsRef = defineModel<T[]>("items", { required: true });
15
17
 
16
18
  const props = withDefaults(
@@ -99,11 +101,17 @@ const dndSortingEnabled = computed((): boolean => {
99
101
  return props.disableDragging !== true;
100
102
  });
101
103
 
102
- const pinnedItemsRef = computed(() => itemsRef.value.filter(isPinnedItem));
104
+ const pinnedItemsRef = computed(() =>
105
+ itemsRef.value
106
+ .map((item, index) => [index, item] as ItemEntry)
107
+ .filter(([index, item]) => isPinnedItem(item, index)),
108
+ );
103
109
  const hasPinnedItems = computed(() => pinnedItemsRef.value.length > 0);
104
110
 
105
111
  const unpinnedItemsRef = computed(() =>
106
- itemsRef.value.filter((item, index) => !isPinnedItem(item, index)),
112
+ itemsRef.value
113
+ .map((item, index) => [index, item] as ItemEntry)
114
+ .filter(([index, item]) => !isPinnedItem(item, index)),
107
115
  );
108
116
  const hasUnpinnedItems = computed(() => unpinnedItemsRef.value.length > 0);
109
117
 
@@ -112,8 +120,8 @@ const pinnedContainerRef = shallowRef<HTMLElement>();
112
120
  const unpinnedContainerRef = shallowRef<HTMLElement>();
113
121
 
114
122
  // version fix problem with sync between data and rendered values
115
- const getKey = (item: T, index: number) => {
116
- return `${versionRef.value}-${props.getItemKey(item, index)}`;
123
+ const getKey = (entry: ItemEntry) => {
124
+ return `${versionRef.value}-${props.getItemKey(entry[1], entry[0])}`;
117
125
  };
118
126
  const pinnedKeysRef = computed(() => pinnedItemsRef.value.map(getKey));
119
127
  const unpinnedKeysRef = computed(() => unpinnedItemsRef.value.map(getKey));
@@ -151,7 +159,7 @@ createSortable(
151
159
  function createSortable(
152
160
  toggler: ShallowRef<boolean>,
153
161
  elRef: ShallowRef<undefined | HTMLElement>,
154
- itemsRef: ShallowRef<T[]>,
162
+ itemsRef: ShallowRef<ItemEntry[]>,
155
163
  getOffset: () => number,
156
164
  ) {
157
165
  const sortable = useSortable(elRef, itemsRef, {
@@ -195,7 +203,7 @@ function moveItems(oldIndex: number, newIndex: number, afterUpdateDom: boolean)
195
203
  const preventDefault = props.onSort?.(oldIndex, newIndex) === false;
196
204
 
197
205
  if (!preventDefault) {
198
- moveElements(itemsRef.value, oldIndex, newIndex);
206
+ itemsRef.value = moveElements(itemsRef.value, oldIndex, newIndex);
199
207
  }
200
208
  }
201
209
 
@@ -258,7 +266,8 @@ function handlePin(item: T, index: number) {
258
266
  throw new Error("Pinnable item not found");
259
267
  }
260
268
 
261
- const alreadyPinned = pinnedItemsRef.value.includes(item);
269
+ const alreadyPinned =
270
+ pinnedItemsRef.value.findIndex(([originalIndex]) => originalIndex === index) !== -1;
262
271
 
263
272
  if (props.onPin?.(item, index) === false) return;
264
273
 
@@ -267,7 +276,7 @@ function handlePin(item: T, index: number) {
267
276
 
268
277
  function handleRemove(item: T, index: number) {
269
278
  if (props.onRemove?.(item, index) === false) return;
270
- itemsRef.value.splice(index, 1);
279
+ itemsRef.value = [...itemsRef.value.slice(0, index), ...itemsRef.value.slice(index + 1)];
271
280
  }
272
281
 
273
282
  function getClassFunction(
@@ -291,26 +300,26 @@ const getItemClassAfter = getClassFunction(props.itemClassAfter);
291
300
  <div :class="$style.root">
292
301
  <div ref="pinnedContainerRef" :class="$style.list">
293
302
  <PlElementListItem
294
- v-for="(pinnedItem, pinnedIndex) in pinnedItemsRef"
303
+ v-for="([originalIndex, item], pinnedIndex) in pinnedItemsRef"
295
304
  :key="pinnedKeysRef[pinnedIndex]"
296
- :class="[$style.item, getItemClass(pinnedItem, pinnedIndex)]"
297
- :titleClass="getItemClassTitle(pinnedItem, pinnedIndex)"
298
- :contentClass="getItemClassContent(pinnedItem, pinnedIndex)"
299
- :beforeClass="getItemClassBefore(pinnedItem, pinnedIndex)"
300
- :afterClass="getItemClassAfter(pinnedItem, pinnedIndex)"
301
- :index="pinnedIndex"
302
- :item="pinnedItem"
305
+ :class="[$style.item, getItemClass(item, originalIndex)]"
306
+ :titleClass="getItemClassTitle(item, originalIndex)"
307
+ :contentClass="getItemClassContent(item, originalIndex)"
308
+ :beforeClass="getItemClassBefore(item, originalIndex)"
309
+ :afterClass="getItemClassAfter(item, originalIndex)"
310
+ :index="originalIndex"
311
+ :item="item"
303
312
  :showDragHandle="dndSortingEnabled"
304
- :isActive="isActiveItem(pinnedItem, pinnedIndex)"
305
- :isDraggable="isDraggableItem(pinnedItem, pinnedIndex)"
306
- :isRemovable="isRemovableItem(pinnedItem, pinnedIndex)"
307
- :isToggable="isToggableItem(pinnedItem, pinnedIndex)"
308
- :isToggled="isToggledItem(pinnedItem, pinnedIndex)"
309
- :isPinnable="isPinnableItem(pinnedItem, pinnedIndex)"
313
+ :isActive="isActiveItem(item, originalIndex)"
314
+ :isDraggable="isDraggableItem(item, originalIndex)"
315
+ :isRemovable="isRemovableItem(item, originalIndex)"
316
+ :isToggable="isToggableItem(item, originalIndex)"
317
+ :isToggled="isToggledItem(item, originalIndex)"
318
+ :isPinnable="isPinnableItem(item, originalIndex)"
310
319
  :isPinned="true"
311
- :isExpandable="isExpandableItem(pinnedItem, pinnedIndex)"
312
- :isExpanded="isExpandedItem(pinnedItem, pinnedIndex)"
313
- @click="emits('itemClick', pinnedItem)"
320
+ :isExpandable="isExpandableItem(item, originalIndex)"
321
+ :isExpanded="isExpandedItem(item, originalIndex)"
322
+ @click="emits('itemClick', item)"
314
323
  @remove="handleRemove"
315
324
  @toggle="handleToggle"
316
325
  @pin="handlePin"
@@ -332,26 +341,26 @@ const getItemClassAfter = getClassFunction(props.itemClassAfter);
332
341
  </div>
333
342
  <div v-if="hasUnpinnedItems" ref="unpinnedContainerRef" :class="$style.list">
334
343
  <PlElementListItem
335
- v-for="(unpinnedItem, unpinnedIndex) in unpinnedItemsRef"
344
+ v-for="([originalIndex, item], unpinnedIndex) in unpinnedItemsRef"
336
345
  :key="unpinnedKeysRef[unpinnedIndex]"
337
- :class="[$style.item, getItemClass(unpinnedItem, unpinnedIndex)]"
338
- :titleClass="getItemClassTitle(unpinnedItem, unpinnedIndex)"
339
- :contentClass="getItemClassContent(unpinnedItem, unpinnedIndex)"
340
- :beforeClass="getItemClassBefore(unpinnedItem, unpinnedIndex)"
341
- :afterClass="getItemClassAfter(unpinnedItem, unpinnedIndex)"
342
- :index="unpinnedIndex + (pinnedItemsRef?.length ?? 0)"
343
- :item="unpinnedItem"
346
+ :class="[$style.item, getItemClass(item, originalIndex)]"
347
+ :titleClass="getItemClassTitle(item, originalIndex)"
348
+ :contentClass="getItemClassContent(item, originalIndex)"
349
+ :beforeClass="getItemClassBefore(item, originalIndex)"
350
+ :afterClass="getItemClassAfter(item, originalIndex)"
351
+ :index="originalIndex"
352
+ :item="item"
344
353
  :showDragHandle="dndSortingEnabled"
345
- :isActive="isActiveItem(unpinnedItem, unpinnedIndex)"
346
- :isDraggable="isDraggableItem(unpinnedItem, unpinnedIndex)"
347
- :isRemovable="isRemovableItem(unpinnedItem, unpinnedIndex)"
348
- :isToggable="isToggableItem(unpinnedItem, unpinnedIndex)"
349
- :isToggled="isToggledItem(unpinnedItem, unpinnedIndex)"
350
- :isPinnable="isPinnableItem(unpinnedItem, unpinnedIndex)"
354
+ :isActive="isActiveItem(item, originalIndex)"
355
+ :isDraggable="isDraggableItem(item, originalIndex)"
356
+ :isRemovable="isRemovableItem(item, originalIndex)"
357
+ :isToggable="isToggableItem(item, originalIndex)"
358
+ :isToggled="isToggledItem(item, originalIndex)"
359
+ :isPinnable="isPinnableItem(item, originalIndex)"
351
360
  :isPinned="false"
352
- :isExpandable="isExpandableItem(unpinnedItem, unpinnedIndex)"
353
- :isExpanded="isExpandedItem(unpinnedItem, unpinnedIndex)"
354
- @click="emits('itemClick', unpinnedItem)"
361
+ :isExpandable="isExpandableItem(item, originalIndex)"
362
+ :isExpanded="isExpandedItem(item, originalIndex)"
363
+ @click="emits('itemClick', item)"
355
364
  @remove="handleRemove"
356
365
  @toggle="handleToggle"
357
366
  @pin="handlePin"
@@ -1,12 +1,13 @@
1
- export const moveElements = <T>(array: T[], from: number, to: number): T[] => {
2
- if (to >= 0 && to < array.length) {
3
- const element = array.splice(from, 1)[0];
4
- array.splice(to, 0, element);
1
+ export const moveElements = <T>(array: readonly T[], from: number, to: number): T[] => {
2
+ const result = [...array];
3
+ if (to >= 0 && to < result.length) {
4
+ const [element] = result.splice(from, 1);
5
+ result.splice(to, 0, element);
5
6
  } else {
6
7
  console.warn(
7
- `Invalid move operation: from ${from} to ${to} in array of length ${array.length}`,
8
+ `Invalid move operation: from ${from} to ${to} in array of length ${result.length}`,
8
9
  );
9
10
  }
10
11
 
11
- return array;
12
+ return result;
12
13
  };
@@ -3,7 +3,7 @@ import type { FilterSpecMetadataRecord } from "./types";
3
3
 
4
4
  export const filterUiMetadata = {
5
5
  equal: {
6
- label: "Col = X (Equal)",
6
+ label: "Equals (=)",
7
7
  form: {
8
8
  column: {
9
9
  label: "Column",
@@ -24,7 +24,7 @@ export const filterUiMetadata = {
24
24
  supportedFor: isNumericValueType,
25
25
  },
26
26
  notEqual: {
27
- label: "Col X (Not Equal)",
27
+ label: "Not Equal To ()",
28
28
  form: {
29
29
  column: {
30
30
  label: "Column",
@@ -45,7 +45,7 @@ export const filterUiMetadata = {
45
45
  supportedFor: isNumericValueType,
46
46
  },
47
47
  lessThan: {
48
- label: "Col < X (Less Than)",
48
+ label: "Below (<)",
49
49
  form: {
50
50
  column: {
51
51
  label: "Column",
@@ -66,7 +66,7 @@ export const filterUiMetadata = {
66
66
  supportedFor: isNumericValueType,
67
67
  },
68
68
  greaterThan: {
69
- label: "Col > X (Greater Than)",
69
+ label: "Above (>)",
70
70
  form: {
71
71
  column: {
72
72
  label: "Column",
@@ -87,7 +87,7 @@ export const filterUiMetadata = {
87
87
  supportedFor: isNumericValueType,
88
88
  },
89
89
  lessThanOrEqual: {
90
- label: "Col X (Less Than or Equal)",
90
+ label: "At Most ()",
91
91
  form: {
92
92
  column: {
93
93
  label: "Column",
@@ -108,7 +108,7 @@ export const filterUiMetadata = {
108
108
  supportedFor: isNumericValueType,
109
109
  },
110
110
  greaterThanOrEqual: {
111
- label: "Col X (Greater Than or Equal)",
111
+ label: "At Least ()",
112
112
  form: {
113
113
  column: {
114
114
  label: "Column",
@@ -308,7 +308,7 @@ export const filterUiMetadata = {
308
308
  supportedFor: isNumericValueType,
309
309
  },
310
310
  patternContainSubsequence: {
311
- label: "Col ~ Seq (Contain Subsequence)",
311
+ label: "Contains (~)",
312
312
  form: {
313
313
  column: {
314
314
  label: "Column",
@@ -329,7 +329,7 @@ export const filterUiMetadata = {
329
329
  supportedFor: isStringValueType,
330
330
  },
331
331
  patternNotContainSubsequence: {
332
- label: "Col ≁ Seq (Not Contain Subsequence)",
332
+ label: "Does Not Contain (≁)",
333
333
  form: {
334
334
  column: {
335
335
  label: "Column",
@@ -350,7 +350,7 @@ export const filterUiMetadata = {
350
350
  supportedFor: isStringValueType,
351
351
  },
352
352
  patternEquals: {
353
- label: "Col = Seq (Equals)",
353
+ label: "Equals (=)",
354
354
  form: {
355
355
  column: {
356
356
  label: "Column",
@@ -371,7 +371,7 @@ export const filterUiMetadata = {
371
371
  supportedFor: isStringValueType,
372
372
  },
373
373
  patternNotEquals: {
374
- label: "Col Seq (Not Equal)",
374
+ label: "Not Equal To ()",
375
375
  form: {
376
376
  column: {
377
377
  label: "Column",
@@ -392,7 +392,7 @@ export const filterUiMetadata = {
392
392
  supportedFor: isStringValueType,
393
393
  },
394
394
  isNA: {
395
- label: "Is NA",
395
+ label: "Is Empty (NA)",
396
396
  form: {
397
397
  column: {
398
398
  label: "Column",
@@ -408,7 +408,7 @@ export const filterUiMetadata = {
408
408
  supportedFor: () => true,
409
409
  },
410
410
  isNotNA: {
411
- label: "Is Not NA",
411
+ label: "Is Not Empty (≠ NA)",
412
412
  form: {
413
413
  column: {
414
414
  label: "Column",
@@ -472,7 +472,7 @@ export const filterUiMetadata = {
472
472
  supportedFor: () => false,
473
473
  },
474
474
  patternMatchesRegularExpression: {
475
- label: "Col ~ X (Matches Regular Expression)",
475
+ label: "Matches Regex (.*)",
476
476
  form: {
477
477
  column: {
478
478
  label: "Column",
@@ -493,7 +493,7 @@ export const filterUiMetadata = {
493
493
  supportedFor: isStringValueType,
494
494
  },
495
495
  patternFuzzyContainSubsequence: {
496
- label: "Col ~ Seq (Fuzzy Contain Subsequence)",
496
+ label: "Contains Approximately (Fuzzy ~)",
497
497
  form: {
498
498
  column: {
499
499
  label: "Column",
@@ -514,7 +514,7 @@ export const filterUiMetadata = {
514
514
  supportedFor: isStringValueType,
515
515
  },
516
516
  inSet: {
517
- label: "Col Set (In Set)",
517
+ label: "In List ()",
518
518
  form: {
519
519
  column: {
520
520
  label: "Column",
@@ -535,7 +535,7 @@ export const filterUiMetadata = {
535
535
  supportedFor: isStringValueType,
536
536
  },
537
537
  notInSet: {
538
- label: "Col Set (Not In Set)",
538
+ label: "Not In List ()",
539
539
  form: {
540
540
  column: {
541
541
  label: "Column",