@platforma-sdk/model 1.42.16 → 1.42.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/dist/bconfig/index.d.ts +0 -1
  2. package/dist/bconfig/lambdas.d.ts +0 -1
  3. package/dist/bconfig/normalization.cjs +19 -0
  4. package/dist/bconfig/normalization.cjs.map +1 -0
  5. package/dist/bconfig/normalization.d.ts +0 -1
  6. package/dist/bconfig/normalization.js +16 -0
  7. package/dist/bconfig/normalization.js.map +1 -0
  8. package/dist/bconfig/types.cjs +8 -0
  9. package/dist/bconfig/types.cjs.map +1 -0
  10. package/dist/bconfig/types.d.ts +0 -1
  11. package/dist/bconfig/types.js +6 -0
  12. package/dist/bconfig/types.js.map +1 -0
  13. package/dist/bconfig/util.d.ts +0 -1
  14. package/dist/bconfig/v3.d.ts +0 -1
  15. package/dist/block_api_v1.d.ts +0 -1
  16. package/dist/block_api_v2.d.ts +0 -1
  17. package/dist/block_state_patch.d.ts +0 -1
  18. package/dist/block_state_util.cjs +28 -0
  19. package/dist/block_state_util.cjs.map +1 -0
  20. package/dist/block_state_util.d.ts +0 -1
  21. package/dist/block_state_util.js +24 -0
  22. package/dist/block_state_util.js.map +1 -0
  23. package/dist/branding.d.ts +0 -1
  24. package/dist/builder.cjs +166 -0
  25. package/dist/builder.cjs.map +1 -0
  26. package/dist/builder.d.ts +0 -1
  27. package/dist/builder.js +164 -0
  28. package/dist/builder.js.map +1 -0
  29. package/dist/components/PFrameForGraphs.cjs +261 -0
  30. package/dist/components/PFrameForGraphs.cjs.map +1 -0
  31. package/dist/components/PFrameForGraphs.d.ts +0 -1
  32. package/dist/components/PFrameForGraphs.js +254 -0
  33. package/dist/components/PFrameForGraphs.js.map +1 -0
  34. package/dist/components/PlAnnotations/filter.d.ts +0 -1
  35. package/dist/components/PlAnnotations/filters_ui.cjs +556 -0
  36. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -0
  37. package/dist/components/PlAnnotations/filters_ui.d.ts +0 -1
  38. package/dist/components/PlAnnotations/filters_ui.js +548 -0
  39. package/dist/components/PlAnnotations/filters_ui.js.map +1 -0
  40. package/dist/components/PlAnnotations/index.d.ts +0 -1
  41. package/dist/components/PlAnnotations/types.d.ts +0 -1
  42. package/dist/components/PlDataTable.cjs +337 -0
  43. package/dist/components/PlDataTable.cjs.map +1 -0
  44. package/dist/components/PlDataTable.d.ts +0 -1
  45. package/dist/components/PlDataTable.js +324 -0
  46. package/dist/components/PlDataTable.js.map +1 -0
  47. package/dist/components/PlMultiSequenceAlignment.cjs +33 -0
  48. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -0
  49. package/dist/components/PlMultiSequenceAlignment.d.ts +0 -1
  50. package/dist/components/PlMultiSequenceAlignment.js +31 -0
  51. package/dist/components/PlMultiSequenceAlignment.js.map +1 -0
  52. package/dist/components/PlSelectionModel.cjs +11 -0
  53. package/dist/components/PlSelectionModel.cjs.map +1 -0
  54. package/dist/components/PlSelectionModel.d.ts +0 -1
  55. package/dist/components/PlSelectionModel.js +9 -0
  56. package/dist/components/PlSelectionModel.js.map +1 -0
  57. package/dist/components/index.d.ts +0 -1
  58. package/dist/config/actions.cjs +266 -0
  59. package/dist/config/actions.cjs.map +1 -0
  60. package/dist/config/actions.d.ts +0 -1
  61. package/dist/config/actions.js +233 -0
  62. package/dist/config/actions.js.map +1 -0
  63. package/dist/config/actions_kinds.d.ts +0 -1
  64. package/dist/config/index.d.ts +0 -1
  65. package/dist/config/model.d.ts +0 -1
  66. package/dist/config/model_meta.d.ts +0 -1
  67. package/dist/config/type_engine.d.ts +0 -1
  68. package/dist/config/type_util.d.ts +0 -1
  69. package/dist/env_value.cjs +11 -0
  70. package/dist/env_value.cjs.map +1 -0
  71. package/dist/env_value.d.ts +0 -1
  72. package/dist/env_value.js +9 -0
  73. package/dist/env_value.js.map +1 -0
  74. package/dist/global.d.ts +14 -0
  75. package/dist/index.cjs +138 -0
  76. package/dist/index.cjs.map +1 -0
  77. package/dist/index.d.ts +0 -1
  78. package/dist/index.js +26 -1
  79. package/dist/index.js.map +1 -1
  80. package/dist/internal.cjs +56 -0
  81. package/dist/internal.cjs.map +1 -0
  82. package/dist/internal.d.ts +0 -1
  83. package/dist/internal.js +49 -0
  84. package/dist/internal.js.map +1 -0
  85. package/dist/package.json.cjs +6 -0
  86. package/dist/package.json.cjs.map +1 -0
  87. package/dist/package.json.js +4 -0
  88. package/dist/package.json.js.map +1 -0
  89. package/dist/pframe.cjs +34 -0
  90. package/dist/pframe.cjs.map +1 -0
  91. package/dist/pframe.d.ts +0 -1
  92. package/dist/pframe.js +32 -0
  93. package/dist/pframe.js.map +1 -0
  94. package/dist/platforma.d.ts +0 -1
  95. package/dist/raw_globals.cjs +28 -0
  96. package/dist/raw_globals.cjs.map +1 -0
  97. package/dist/raw_globals.d.ts +0 -1
  98. package/dist/raw_globals.js +25 -0
  99. package/dist/raw_globals.js.map +1 -0
  100. package/dist/ref_util.cjs +21 -0
  101. package/dist/ref_util.cjs.map +1 -0
  102. package/dist/ref_util.d.ts +11 -12
  103. package/dist/ref_util.js +18 -0
  104. package/dist/ref_util.js.map +1 -0
  105. package/dist/render/accessor.cjs +233 -0
  106. package/dist/render/accessor.cjs.map +1 -0
  107. package/dist/render/accessor.d.ts +0 -1
  108. package/dist/render/accessor.js +230 -0
  109. package/dist/render/accessor.js.map +1 -0
  110. package/dist/render/api.cjs +514 -0
  111. package/dist/render/api.cjs.map +1 -0
  112. package/dist/render/api.d.ts +0 -1
  113. package/dist/render/api.js +511 -0
  114. package/dist/render/api.js.map +1 -0
  115. package/dist/render/future.cjs +35 -0
  116. package/dist/render/future.cjs.map +1 -0
  117. package/dist/render/future.d.ts +0 -1
  118. package/dist/render/future.js +33 -0
  119. package/dist/render/future.js.map +1 -0
  120. package/dist/render/index.d.ts +0 -1
  121. package/dist/render/internal.cjs +43 -0
  122. package/dist/render/internal.cjs.map +1 -0
  123. package/dist/render/internal.d.ts +0 -1
  124. package/dist/render/internal.js +37 -0
  125. package/dist/render/internal.js.map +1 -0
  126. package/dist/render/traversal_ops.d.ts +0 -1
  127. package/dist/render/util/axis_filtering.cjs +87 -0
  128. package/dist/render/util/axis_filtering.cjs.map +1 -0
  129. package/dist/render/util/axis_filtering.d.ts +0 -1
  130. package/dist/render/util/axis_filtering.js +85 -0
  131. package/dist/render/util/axis_filtering.js.map +1 -0
  132. package/dist/render/util/column_collection.cjs +309 -0
  133. package/dist/render/util/column_collection.cjs.map +1 -0
  134. package/dist/render/util/column_collection.d.ts +0 -1
  135. package/dist/render/util/column_collection.js +307 -0
  136. package/dist/render/util/column_collection.js.map +1 -0
  137. package/dist/render/util/index.d.ts +0 -1
  138. package/dist/render/util/label.cjs +153 -0
  139. package/dist/render/util/label.cjs.map +1 -0
  140. package/dist/render/util/label.d.ts +0 -1
  141. package/dist/render/util/label.js +149 -0
  142. package/dist/render/util/label.js.map +1 -0
  143. package/dist/render/util/pcolumn_data.cjs +342 -0
  144. package/dist/render/util/pcolumn_data.cjs.map +1 -0
  145. package/dist/render/util/pcolumn_data.d.ts +0 -1
  146. package/dist/render/util/pcolumn_data.js +330 -0
  147. package/dist/render/util/pcolumn_data.js.map +1 -0
  148. package/dist/render/util/pframe_upgraders.cjs +47 -0
  149. package/dist/render/util/pframe_upgraders.cjs.map +1 -0
  150. package/dist/render/util/pframe_upgraders.d.ts +0 -1
  151. package/dist/render/util/pframe_upgraders.js +45 -0
  152. package/dist/render/util/pframe_upgraders.js.map +1 -0
  153. package/dist/render/util/split_selectors.d.ts +0 -1
  154. package/dist/sdk_info.cjs +10 -0
  155. package/dist/sdk_info.cjs.map +1 -0
  156. package/dist/sdk_info.d.ts +0 -1
  157. package/dist/sdk_info.js +8 -0
  158. package/dist/sdk_info.js.map +1 -0
  159. package/dist/unionize.d.ts +0 -1
  160. package/dist/version.cjs +8 -0
  161. package/dist/version.cjs.map +1 -0
  162. package/dist/version.d.ts +0 -1
  163. package/dist/version.js +6 -0
  164. package/dist/version.js.map +1 -0
  165. package/package.json +16 -18
  166. package/src/components/PFrameForGraphs.test.ts +2 -2
  167. package/src/components/PlAnnotations/filters_ui.test.ts +1 -1
  168. package/src/render/util/label.test.ts +2 -2
  169. package/src/typing.test.ts +2 -1
  170. package/dist/bconfig/index.d.ts.map +0 -1
  171. package/dist/bconfig/lambdas.d.ts.map +0 -1
  172. package/dist/bconfig/normalization.d.ts.map +0 -1
  173. package/dist/bconfig/types.d.ts.map +0 -1
  174. package/dist/bconfig/util.d.ts.map +0 -1
  175. package/dist/bconfig/v3.d.ts.map +0 -1
  176. package/dist/block_api_v1.d.ts.map +0 -1
  177. package/dist/block_api_v2.d.ts.map +0 -1
  178. package/dist/block_state_patch.d.ts.map +0 -1
  179. package/dist/block_state_util.d.ts.map +0 -1
  180. package/dist/branding.d.ts.map +0 -1
  181. package/dist/builder.d.ts.map +0 -1
  182. package/dist/components/PFrameForGraphs.d.ts.map +0 -1
  183. package/dist/components/PlAnnotations/filter.d.ts.map +0 -1
  184. package/dist/components/PlAnnotations/filters_ui.d.ts.map +0 -1
  185. package/dist/components/PlAnnotations/index.d.ts.map +0 -1
  186. package/dist/components/PlAnnotations/types.d.ts.map +0 -1
  187. package/dist/components/PlDataTable.d.ts.map +0 -1
  188. package/dist/components/PlMultiSequenceAlignment.d.ts.map +0 -1
  189. package/dist/components/PlSelectionModel.d.ts.map +0 -1
  190. package/dist/components/index.d.ts.map +0 -1
  191. package/dist/config/actions.d.ts.map +0 -1
  192. package/dist/config/actions_kinds.d.ts.map +0 -1
  193. package/dist/config/index.d.ts.map +0 -1
  194. package/dist/config/model.d.ts.map +0 -1
  195. package/dist/config/model_meta.d.ts.map +0 -1
  196. package/dist/config/type_engine.d.ts.map +0 -1
  197. package/dist/config/type_util.d.ts.map +0 -1
  198. package/dist/env_value.d.ts.map +0 -1
  199. package/dist/index.d.ts.map +0 -1
  200. package/dist/index.mjs +0 -2845
  201. package/dist/index.mjs.map +0 -1
  202. package/dist/internal.d.ts.map +0 -1
  203. package/dist/pframe.d.ts.map +0 -1
  204. package/dist/platforma.d.ts.map +0 -1
  205. package/dist/raw_globals.d.ts.map +0 -1
  206. package/dist/ref_util.d.ts.map +0 -1
  207. package/dist/render/accessor.d.ts.map +0 -1
  208. package/dist/render/api.d.ts.map +0 -1
  209. package/dist/render/future.d.ts.map +0 -1
  210. package/dist/render/index.d.ts.map +0 -1
  211. package/dist/render/internal.d.ts.map +0 -1
  212. package/dist/render/traversal_ops.d.ts.map +0 -1
  213. package/dist/render/util/axis_filtering.d.ts.map +0 -1
  214. package/dist/render/util/column_collection.d.ts.map +0 -1
  215. package/dist/render/util/index.d.ts.map +0 -1
  216. package/dist/render/util/label.d.ts.map +0 -1
  217. package/dist/render/util/pcolumn_data.d.ts.map +0 -1
  218. package/dist/render/util/pframe_upgraders.d.ts.map +0 -1
  219. package/dist/render/util/split_selectors.d.ts.map +0 -1
  220. package/dist/sdk_info.d.ts.map +0 -1
  221. package/dist/unionize.d.ts.map +0 -1
  222. package/dist/version.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters_ui.cjs","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"sourcesContent":["import type { SUniversalPColumnId } from '@milaboratories/pl-model-common';\nimport type { AnnotationFilter, AnnotationMode, AnnotationScript, IsNA, NotFilter, NumericalComparisonFilter, PatternFilter, PatternPredicate, ValueRank } from './filter';\nimport type { SimplifiedPColumnSpec } from './types';\n\nexport function unreachable(x: never): never {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n throw new Error('Unexpected object: ' + x);\n}\n\nfunction isNumericValueType(spec: SimplifiedPColumnSpec): boolean {\n return spec.valueType === 'Int' || spec.valueType === 'Long' || spec.valueType === 'Float' || spec.valueType === 'Double';\n}\n\nfunction isStringValueType(spec: SimplifiedPColumnSpec): boolean {\n return spec.valueType === 'String';\n}\n\n// Define recursive type explicitly\nexport type FilterUi = { id?: number; name?: string; isExpanded?: boolean }\n & ({ type: undefined }\n | { type: 'or'; filters: FilterUi[] }\n | { type: 'and'; filters: FilterUi[] }\n | { type: 'not'; filter: FilterUi }\n | { type: 'isNA'; column: SUniversalPColumnId }\n | { type: 'isNotNA'; column: SUniversalPColumnId }\n | { type: 'patternEquals'; column: SUniversalPColumnId; value: string }\n | { type: 'patternNotEquals'; column: SUniversalPColumnId; value: string }\n | { type: 'patternContainSubsequence'; column: SUniversalPColumnId; value: string }\n | { type: 'patternNotContainSubsequence'; column: SUniversalPColumnId; value: string }\n | { type: 'topN'; column: SUniversalPColumnId; n: number }\n | { type: 'bottomN'; column: SUniversalPColumnId; n: number }\n | { type: 'lessThan'; column: SUniversalPColumnId; x: number }\n | { type: 'greaterThan'; column: SUniversalPColumnId; x: number }\n | { type: 'lessThanOrEqual'; column: SUniversalPColumnId; x: number }\n | { type: 'greaterThanOrEqual'; column: SUniversalPColumnId; x: number }\n | { type: 'lessThanColumn'; column: SUniversalPColumnId; rhs: SUniversalPColumnId; minDiff?: number }\n | { type: 'lessThanColumnOrEqual'; column: SUniversalPColumnId; rhs: SUniversalPColumnId; minDiff?: number });\n\nexport type FilterUiType = Exclude<FilterUi, { type: undefined }>['type'];\n\nexport type FilterUiOfType<T extends FilterUiType> = Extract<FilterUi, { type: T }>;\n\nexport type TypeToLiteral<T> =\n[T] extends [FilterUiType] ? 'FilterUiType' :\n [T] extends [SUniversalPColumnId] ? 'SUniversalPColumnId' :\n [T] extends [PatternPredicate] ? 'PatternPredicate' :\n [T] extends [AnnotationFilter[]] ? 'AnnotationFilter[]' :\n [T] extends [AnnotationFilter] ? 'AnnotationFilter' :\n [T] extends [number] ? 'number' :\n [T] extends [number | undefined] ? 'number?' :\n [T] extends [string] ? 'string' :\n [T] extends [string | undefined] ? 'string?' :\n [T] extends [boolean] ? 'boolean' :\n [T] extends [boolean | undefined] ? 'boolean?' :\n [T] extends [unknown[]] ? 'unknown[]' :\n // this is special\n T extends number ? 'number' :\n T extends string ? 'string' :\n T extends boolean ? 'boolean' :\n T extends Record<string, unknown> ? 'form' :\n 'unknown';\n\n// @TODO: \"parse\" option\nexport type TypeField<V> = {\n fieldType: TypeToLiteral<V>;\n label: string;\n defaultValue: () => V | undefined;\n};\n\nexport type TypeFieldRecord<T> = { [K in keyof T]: TypeField<T[K]>; };\n\nexport type TypeForm<T> = {\n [P in keyof T]: T[P] extends Record<string, unknown> ? {\n fieldType: 'form';\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n } : TypeField<T[P]>;\n};\n\nexport type FormField =\n {\n fieldType: 'form';\n form?: Record<string, FormField>;\n defaultValue: () => Record<string, unknown>;\n }\n | TypeField<FilterUiType>\n | TypeField<string>\n | TypeField<number>\n | TypeField<number | undefined>\n | TypeField<boolean>\n | TypeField<boolean | undefined>\n | TypeField<SUniversalPColumnId>;\n\nexport type AnyForm = Record<string, FormField>;\n\ntype CreateFilterUiMetadataMap<T extends FilterUiType> = {\n [P in T]: {\n label: string;\n form: TypeForm<FilterUiOfType<T>>; // TODO: simplify this to `TypeField<T>`\n supportedFor: (spec1: SimplifiedPColumnSpec, spec2: SimplifiedPColumnSpec | undefined) => boolean;\n }\n};\n\nexport const filterUiMetadata = {\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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\n defaultValue: () => 'greaterThanOrEqual',\n },\n x: {\n label: 'X',\n fieldType: 'number',\n defaultValue: () => 0,\n },\n },\n supportedFor: isNumericValueType,\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: 'FilterUiType',\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 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: 'FilterUiType',\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 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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\n defaultValue: () => 'isNotNA',\n },\n },\n supportedFor: () => true,\n },\n or: {\n label: 'Or',\n form: {\n type: {\n fieldType: 'FilterUiType',\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: 'FilterUiType',\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: 'FilterUiType',\n label: 'Predicate',\n defaultValue: () => 'not',\n },\n filter: {\n fieldType: 'form',\n label: 'Filter',\n defaultValue: () => undefined as unknown as FilterUi, // TODO:\n },\n },\n supportedFor: () => false,\n },\n} satisfies CreateFilterUiMetadataMap<FilterUiType>;\n\nexport function getFilterUiTypeOptions(columnSpec?: SimplifiedPColumnSpec) {\n if (!columnSpec) {\n return [];\n }\n\n return Object.entries(filterUiMetadata).filter(([_, metadata]) => metadata.supportedFor(columnSpec)).map(([type, metadata]) => ({\n label: metadata.label,\n value: type,\n }));\n}\n\nexport function getFilterUiMetadata(type: FilterUiType) {\n return filterUiMetadata[type];\n}\n\nexport function compileFilter(ui: FilterUi): AnnotationFilter {\n if (ui.type === 'or') {\n return {\n type: 'or' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'and') {\n return {\n type: 'and' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'not') {\n return {\n type: 'not' as const,\n filter: compileFilter(ui.filter),\n };\n }\n\n if (ui.type === 'isNA') {\n return {\n type: 'isNA' as const,\n column: ui.column,\n };\n }\n\n if (ui.type === 'isNotNA') {\n const isNAFilter: IsNA = { type: 'isNA', column: ui.column };\n const notFilter: NotFilter = { type: 'not', filter: isNAFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternEquals') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'equals' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotEquals') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'equals', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternContainSubsequence') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'containSubsequence' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotContainSubsequence') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'containSubsequence', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'topN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n descending: true,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'bottomN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'lessThan') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThan') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanColumn') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: undefined,\n };\n }\n\n if (ui.type === 'lessThanColumnOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: true,\n };\n }\n\n if (ui.type === undefined) {\n throw new Error('Filter type is undefined, this should not happen');\n }\n\n unreachable(ui);\n}\n\nexport function compileFilters(uiFilters: FilterUi[]): AnnotationFilter[] {\n return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);\n}\n\nexport type AnnotationStepUi = {\n id?: number;\n label: string;\n filter: Extract<FilterUi, { type: 'and' | 'or' }>;\n};\n\nexport type AnnotationScriptUi = {\n isCreated?: boolean;\n title: string;\n mode: AnnotationMode;\n steps: AnnotationStepUi[];\n};\n\nexport function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript {\n return {\n title: uiScript.title,\n mode: uiScript.mode,\n steps: uiScript.steps\n .filter((step) => {\n // No need to compile empty steps\n if (step.filter.type == null) {\n return false;\n }\n\n if (step.filter.type === 'or') {\n return step.filter.filters.length > 0;\n }\n\n if (step.filter.type === 'and') {\n return step.filter.filters.length > 0;\n }\n\n return false;\n })\n .map((step) => ({\n label: step.label.trim(),\n filter: compileFilter(step.filter),\n })),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -820,4 +820,3 @@ export type AnnotationScriptUi = {
820
820
  };
821
821
  export declare function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript;
822
822
  export {};
823
- //# sourceMappingURL=filters_ui.d.ts.map
@@ -0,0 +1,548 @@
1
+ function unreachable(x) {
2
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
3
+ throw new Error('Unexpected object: ' + x);
4
+ }
5
+ function isNumericValueType(spec) {
6
+ return spec.valueType === 'Int' || spec.valueType === 'Long' || spec.valueType === 'Float' || spec.valueType === 'Double';
7
+ }
8
+ function isStringValueType(spec) {
9
+ return spec.valueType === 'String';
10
+ }
11
+ const filterUiMetadata = {
12
+ lessThan: {
13
+ label: 'Col < X (Less Than)',
14
+ form: {
15
+ column: {
16
+ label: 'Column',
17
+ fieldType: 'SUniversalPColumnId',
18
+ defaultValue: () => undefined,
19
+ },
20
+ type: {
21
+ label: 'Predicate',
22
+ fieldType: 'FilterUiType',
23
+ defaultValue: () => 'lessThan',
24
+ },
25
+ x: {
26
+ label: 'X',
27
+ fieldType: 'number',
28
+ defaultValue: () => 0,
29
+ },
30
+ },
31
+ supportedFor: isNumericValueType,
32
+ },
33
+ greaterThan: {
34
+ label: 'Col > X (Greater Than)',
35
+ form: {
36
+ column: {
37
+ label: 'Column',
38
+ fieldType: 'SUniversalPColumnId',
39
+ defaultValue: () => undefined,
40
+ },
41
+ type: {
42
+ label: 'Predicate',
43
+ fieldType: 'FilterUiType',
44
+ defaultValue: () => 'greaterThan',
45
+ },
46
+ x: {
47
+ label: 'X',
48
+ fieldType: 'number',
49
+ defaultValue: () => 0,
50
+ },
51
+ },
52
+ supportedFor: isNumericValueType,
53
+ },
54
+ lessThanOrEqual: {
55
+ label: 'Col ≤ X (Less Than or Equal)',
56
+ form: {
57
+ column: {
58
+ label: 'Column',
59
+ fieldType: 'SUniversalPColumnId',
60
+ defaultValue: () => undefined,
61
+ },
62
+ type: {
63
+ label: 'Predicate',
64
+ fieldType: 'FilterUiType',
65
+ defaultValue: () => 'lessThanOrEqual',
66
+ },
67
+ x: {
68
+ label: 'X',
69
+ fieldType: 'number',
70
+ defaultValue: () => 0,
71
+ },
72
+ },
73
+ supportedFor: isNumericValueType,
74
+ },
75
+ greaterThanOrEqual: {
76
+ label: 'Col ≥ X (Greater Than or Equal)',
77
+ form: {
78
+ column: {
79
+ label: 'Column',
80
+ fieldType: 'SUniversalPColumnId',
81
+ defaultValue: () => undefined,
82
+ },
83
+ type: {
84
+ label: 'Predicate',
85
+ fieldType: 'FilterUiType',
86
+ defaultValue: () => 'greaterThanOrEqual',
87
+ },
88
+ x: {
89
+ label: 'X',
90
+ fieldType: 'number',
91
+ defaultValue: () => 0,
92
+ },
93
+ },
94
+ supportedFor: isNumericValueType,
95
+ },
96
+ lessThanColumn: {
97
+ label: 'Col₁ < Col₂ (Compare Columns)',
98
+ form: {
99
+ column: {
100
+ label: 'Col₁',
101
+ fieldType: 'SUniversalPColumnId',
102
+ defaultValue: () => undefined,
103
+ },
104
+ type: {
105
+ label: 'Predicate',
106
+ fieldType: 'FilterUiType',
107
+ defaultValue: () => 'lessThanColumn',
108
+ },
109
+ rhs: {
110
+ label: 'Col₂',
111
+ fieldType: 'SUniversalPColumnId',
112
+ defaultValue: () => undefined,
113
+ },
114
+ minDiff: {
115
+ label: 'Margin (positive)',
116
+ fieldType: 'number?',
117
+ defaultValue: () => undefined,
118
+ },
119
+ },
120
+ supportedFor: (spec1, spec2) => {
121
+ return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));
122
+ },
123
+ },
124
+ lessThanColumnOrEqual: {
125
+ label: 'Col₁ ≤ Col₂ (Compare Columns)',
126
+ form: {
127
+ column: {
128
+ label: 'Col₁',
129
+ fieldType: 'SUniversalPColumnId',
130
+ defaultValue: () => undefined,
131
+ },
132
+ type: {
133
+ label: 'Predicate',
134
+ fieldType: 'FilterUiType',
135
+ defaultValue: () => 'lessThanColumnOrEqual',
136
+ },
137
+ rhs: {
138
+ label: 'Col₂',
139
+ fieldType: 'SUniversalPColumnId',
140
+ defaultValue: () => undefined,
141
+ },
142
+ minDiff: {
143
+ label: 'Margin (positive)',
144
+ fieldType: 'number?',
145
+ defaultValue: () => undefined,
146
+ },
147
+ },
148
+ supportedFor: (spec1, spec2) => {
149
+ return isNumericValueType(spec1) && (spec2 === undefined || isNumericValueType(spec2));
150
+ },
151
+ },
152
+ topN: {
153
+ label: 'Top N',
154
+ form: {
155
+ column: {
156
+ label: 'Rank By Column',
157
+ fieldType: 'SUniversalPColumnId',
158
+ defaultValue: () => undefined,
159
+ },
160
+ type: {
161
+ label: 'Predicate',
162
+ fieldType: 'FilterUiType',
163
+ defaultValue: () => 'topN',
164
+ },
165
+ n: {
166
+ label: 'N',
167
+ fieldType: 'number',
168
+ defaultValue: () => 10,
169
+ },
170
+ },
171
+ supportedFor: isNumericValueType,
172
+ },
173
+ bottomN: {
174
+ label: 'Bottom N',
175
+ form: {
176
+ column: {
177
+ label: 'Rank By Column',
178
+ fieldType: 'SUniversalPColumnId',
179
+ defaultValue: () => undefined,
180
+ },
181
+ type: {
182
+ label: 'Predicate',
183
+ fieldType: 'FilterUiType',
184
+ defaultValue: () => 'bottomN',
185
+ },
186
+ n: {
187
+ label: 'N',
188
+ fieldType: 'number',
189
+ defaultValue: () => 10,
190
+ },
191
+ },
192
+ supportedFor: isNumericValueType,
193
+ },
194
+ patternContainSubsequence: {
195
+ label: 'Col ~ Seq (Contain Subsequence)',
196
+ form: {
197
+ column: {
198
+ label: 'Column',
199
+ fieldType: 'SUniversalPColumnId',
200
+ defaultValue: () => undefined,
201
+ },
202
+ type: {
203
+ label: 'Predicate',
204
+ fieldType: 'FilterUiType',
205
+ defaultValue: () => 'patternContainSubsequence',
206
+ },
207
+ value: {
208
+ label: 'Seq',
209
+ fieldType: 'string',
210
+ defaultValue: () => '',
211
+ },
212
+ },
213
+ supportedFor: isStringValueType,
214
+ },
215
+ patternNotContainSubsequence: {
216
+ label: 'Col ≁ Seq (Not Contain Subsequence)',
217
+ form: {
218
+ column: {
219
+ label: 'Column',
220
+ fieldType: 'SUniversalPColumnId',
221
+ defaultValue: () => undefined,
222
+ },
223
+ type: {
224
+ label: 'Predicate',
225
+ fieldType: 'FilterUiType',
226
+ defaultValue: () => 'patternNotContainSubsequence',
227
+ },
228
+ value: {
229
+ label: 'Seq',
230
+ fieldType: 'string',
231
+ defaultValue: () => '',
232
+ },
233
+ },
234
+ supportedFor: isStringValueType,
235
+ },
236
+ patternEquals: {
237
+ label: 'Col = Seq (Equals)',
238
+ form: {
239
+ column: {
240
+ label: 'Column',
241
+ fieldType: 'SUniversalPColumnId',
242
+ defaultValue: () => undefined,
243
+ },
244
+ type: {
245
+ label: 'Predicate',
246
+ fieldType: 'FilterUiType',
247
+ defaultValue: () => 'patternEquals',
248
+ },
249
+ value: {
250
+ label: 'Seq',
251
+ fieldType: 'string',
252
+ defaultValue: () => '',
253
+ },
254
+ },
255
+ supportedFor: isStringValueType,
256
+ },
257
+ patternNotEquals: {
258
+ label: 'Col ≠ Seq (Not Equal)',
259
+ form: {
260
+ column: {
261
+ label: 'Column',
262
+ fieldType: 'SUniversalPColumnId',
263
+ defaultValue: () => undefined,
264
+ },
265
+ type: {
266
+ label: 'Predicate',
267
+ fieldType: 'FilterUiType',
268
+ defaultValue: () => 'patternNotEquals',
269
+ },
270
+ value: {
271
+ label: 'Seq',
272
+ fieldType: 'string',
273
+ defaultValue: () => '',
274
+ },
275
+ },
276
+ supportedFor: isStringValueType,
277
+ },
278
+ isNA: {
279
+ label: 'Is NA',
280
+ form: {
281
+ column: {
282
+ label: 'Column',
283
+ fieldType: 'SUniversalPColumnId',
284
+ defaultValue: () => undefined,
285
+ },
286
+ type: {
287
+ label: 'Predicate',
288
+ fieldType: 'FilterUiType',
289
+ defaultValue: () => 'isNA',
290
+ },
291
+ },
292
+ supportedFor: () => true,
293
+ },
294
+ isNotNA: {
295
+ label: 'Is Not NA',
296
+ form: {
297
+ column: {
298
+ label: 'Column',
299
+ fieldType: 'SUniversalPColumnId',
300
+ defaultValue: () => undefined,
301
+ },
302
+ type: {
303
+ label: 'Predicate',
304
+ fieldType: 'FilterUiType',
305
+ defaultValue: () => 'isNotNA',
306
+ },
307
+ },
308
+ supportedFor: () => true,
309
+ },
310
+ or: {
311
+ label: 'Or',
312
+ form: {
313
+ type: {
314
+ fieldType: 'FilterUiType',
315
+ label: 'Predicate',
316
+ defaultValue: () => 'or',
317
+ },
318
+ filters: {
319
+ fieldType: 'unknown[]',
320
+ label: 'Filters',
321
+ defaultValue: () => [],
322
+ },
323
+ },
324
+ supportedFor: () => false,
325
+ },
326
+ and: {
327
+ label: 'And',
328
+ form: {
329
+ type: {
330
+ fieldType: 'FilterUiType',
331
+ label: 'Predicate',
332
+ defaultValue: () => 'and',
333
+ },
334
+ filters: {
335
+ fieldType: 'unknown[]',
336
+ label: 'Filters',
337
+ defaultValue: () => [],
338
+ },
339
+ },
340
+ supportedFor: () => false,
341
+ },
342
+ not: {
343
+ label: 'Not',
344
+ form: {
345
+ type: {
346
+ fieldType: 'FilterUiType',
347
+ label: 'Predicate',
348
+ defaultValue: () => 'not',
349
+ },
350
+ filter: {
351
+ fieldType: 'form',
352
+ label: 'Filter',
353
+ defaultValue: () => undefined, // TODO:
354
+ },
355
+ },
356
+ supportedFor: () => false,
357
+ },
358
+ };
359
+ function getFilterUiTypeOptions(columnSpec) {
360
+ if (!columnSpec) {
361
+ return [];
362
+ }
363
+ return Object.entries(filterUiMetadata).filter(([_, metadata]) => metadata.supportedFor(columnSpec)).map(([type, metadata]) => ({
364
+ label: metadata.label,
365
+ value: type,
366
+ }));
367
+ }
368
+ function getFilterUiMetadata(type) {
369
+ return filterUiMetadata[type];
370
+ }
371
+ function compileFilter(ui) {
372
+ if (ui.type === 'or') {
373
+ return {
374
+ type: 'or',
375
+ filters: compileFilters(ui.filters),
376
+ };
377
+ }
378
+ if (ui.type === 'and') {
379
+ return {
380
+ type: 'and',
381
+ filters: compileFilters(ui.filters),
382
+ };
383
+ }
384
+ if (ui.type === 'not') {
385
+ return {
386
+ type: 'not',
387
+ filter: compileFilter(ui.filter),
388
+ };
389
+ }
390
+ if (ui.type === 'isNA') {
391
+ return {
392
+ type: 'isNA',
393
+ column: ui.column,
394
+ };
395
+ }
396
+ if (ui.type === 'isNotNA') {
397
+ const isNAFilter = { type: 'isNA', column: ui.column };
398
+ const notFilter = { type: 'not', filter: isNAFilter };
399
+ return notFilter;
400
+ }
401
+ if (ui.type === 'patternEquals') {
402
+ return {
403
+ type: 'pattern',
404
+ column: ui.column,
405
+ predicate: {
406
+ type: 'equals',
407
+ value: ui.value,
408
+ },
409
+ };
410
+ }
411
+ if (ui.type === 'patternNotEquals') {
412
+ const patternFilter = {
413
+ type: 'pattern',
414
+ column: ui.column,
415
+ predicate: { type: 'equals', value: ui.value },
416
+ };
417
+ const notFilter = { type: 'not', filter: patternFilter };
418
+ return notFilter;
419
+ }
420
+ if (ui.type === 'patternContainSubsequence') {
421
+ return {
422
+ type: 'pattern',
423
+ column: ui.column,
424
+ predicate: {
425
+ type: 'containSubsequence',
426
+ value: ui.value,
427
+ },
428
+ };
429
+ }
430
+ if (ui.type === 'patternNotContainSubsequence') {
431
+ const patternFilter = {
432
+ type: 'pattern',
433
+ column: ui.column,
434
+ predicate: { type: 'containSubsequence', value: ui.value },
435
+ };
436
+ const notFilter = { type: 'not', filter: patternFilter };
437
+ return notFilter;
438
+ }
439
+ if (ui.type === 'topN') {
440
+ const rankTransform = {
441
+ transformer: 'rank',
442
+ column: ui.column,
443
+ descending: true,
444
+ };
445
+ const comparisonFilter = {
446
+ type: 'numericalComparison',
447
+ lhs: rankTransform,
448
+ rhs: ui.n,
449
+ allowEqual: true,
450
+ };
451
+ return comparisonFilter;
452
+ }
453
+ if (ui.type === 'bottomN') {
454
+ const rankTransform = {
455
+ transformer: 'rank',
456
+ column: ui.column,
457
+ };
458
+ const comparisonFilter = {
459
+ type: 'numericalComparison',
460
+ lhs: rankTransform,
461
+ rhs: ui.n,
462
+ allowEqual: true,
463
+ };
464
+ return comparisonFilter;
465
+ }
466
+ if (ui.type === 'lessThan') {
467
+ return {
468
+ type: 'numericalComparison',
469
+ lhs: ui.column,
470
+ rhs: ui.x,
471
+ };
472
+ }
473
+ if (ui.type === 'greaterThan') {
474
+ return {
475
+ type: 'numericalComparison',
476
+ rhs: ui.column,
477
+ lhs: ui.x,
478
+ };
479
+ }
480
+ if (ui.type === 'greaterThanOrEqual') {
481
+ return {
482
+ type: 'numericalComparison',
483
+ rhs: ui.column,
484
+ lhs: ui.x,
485
+ allowEqual: true,
486
+ };
487
+ }
488
+ if (ui.type === 'lessThanOrEqual') {
489
+ return {
490
+ type: 'numericalComparison',
491
+ lhs: ui.column,
492
+ rhs: ui.x,
493
+ allowEqual: true,
494
+ };
495
+ }
496
+ if (ui.type === 'lessThanColumn') {
497
+ return {
498
+ type: 'numericalComparison',
499
+ lhs: ui.column,
500
+ rhs: ui.rhs,
501
+ minDiff: ui.minDiff,
502
+ allowEqual: undefined,
503
+ };
504
+ }
505
+ if (ui.type === 'lessThanColumnOrEqual') {
506
+ return {
507
+ type: 'numericalComparison',
508
+ lhs: ui.column,
509
+ rhs: ui.rhs,
510
+ minDiff: ui.minDiff,
511
+ allowEqual: true,
512
+ };
513
+ }
514
+ if (ui.type === undefined) {
515
+ throw new Error('Filter type is undefined, this should not happen');
516
+ }
517
+ unreachable(ui);
518
+ }
519
+ function compileFilters(uiFilters) {
520
+ return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);
521
+ }
522
+ function compileAnnotationScript(uiScript) {
523
+ return {
524
+ title: uiScript.title,
525
+ mode: uiScript.mode,
526
+ steps: uiScript.steps
527
+ .filter((step) => {
528
+ // No need to compile empty steps
529
+ if (step.filter.type == null) {
530
+ return false;
531
+ }
532
+ if (step.filter.type === 'or') {
533
+ return step.filter.filters.length > 0;
534
+ }
535
+ if (step.filter.type === 'and') {
536
+ return step.filter.filters.length > 0;
537
+ }
538
+ return false;
539
+ })
540
+ .map((step) => ({
541
+ label: step.label.trim(),
542
+ filter: compileFilter(step.filter),
543
+ })),
544
+ };
545
+ }
546
+
547
+ export { compileAnnotationScript, compileFilter, compileFilters, filterUiMetadata, getFilterUiMetadata, getFilterUiTypeOptions, unreachable };
548
+ //# sourceMappingURL=filters_ui.js.map