@platforma-sdk/ui-vue 1.45.35 → 1.45.37

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 (180) hide show
  1. package/.turbo/turbo-build.log +204 -235
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +13 -0
  4. package/dist/AgGridVue/useAgGridOptions.js +2 -3
  5. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  6. package/dist/components/BlockLayout.vue2.js +3 -3
  7. package/dist/components/BlockLayout.vue2.js.map +1 -1
  8. package/dist/components/BlockLoader.vue.js.map +1 -1
  9. package/dist/components/LoaderPage.vue.js +2 -2
  10. package/dist/components/LoaderPage.vue.js.map +1 -1
  11. package/dist/components/NotFound.vue.js +3 -3
  12. package/dist/components/NotFound.vue.js.map +1 -1
  13. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  14. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +73 -73
  15. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  16. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js +100 -100
  17. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js.map +1 -1
  18. package/dist/components/PlAgCellFile/PlAgCellFile.vue.js.map +1 -1
  19. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.js.map +1 -1
  20. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js +6 -6
  21. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js.map +1 -1
  22. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js.map +1 -1
  23. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js.map +1 -1
  24. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js +22 -22
  25. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js.map +1 -1
  26. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js +3 -3
  27. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js.map +1 -1
  28. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  29. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +50 -50
  30. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  31. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js.map +1 -1
  32. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js.map +1 -1
  33. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +7 -8
  34. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  35. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +35 -35
  36. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
  37. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +16 -17
  38. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  39. package/dist/components/PlAgRowNumHeader.vue.js +14 -15
  40. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  41. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js +16 -16
  42. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js.map +1 -1
  43. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +6 -6
  44. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  45. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +57 -57
  46. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js.map +1 -1
  47. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +6 -6
  48. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  49. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  50. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  51. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js +7 -7
  52. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js.map +1 -1
  53. package/dist/components/PlBtnExportArchive/Item.vue2.js +23 -23
  54. package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
  55. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
  56. package/dist/components/PlBtnExportArchive/Summary.vue2.js +22 -22
  57. package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
  58. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js +9 -9
  59. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js.map +1 -1
  60. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js +3 -3
  61. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js.map +1 -1
  62. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +9 -9
  63. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  64. package/dist/components/ValueOrErrorsComponent.vue.js.map +1 -1
  65. package/dist/index.js +48 -50
  66. package/dist/index.js.map +1 -1
  67. package/dist/lib.d.ts +0 -1
  68. package/dist/plugins/Monetization/EndOfPeriod.vue2.js +9 -9
  69. package/dist/plugins/Monetization/EndOfPeriod.vue2.js.map +1 -1
  70. package/dist/plugins/Monetization/LimitCard.vue2.js +40 -40
  71. package/dist/plugins/Monetization/LimitCard.vue2.js.map +1 -1
  72. package/dist/plugins/Monetization/MonetizationSidebar.vue.js +3 -3
  73. package/dist/plugins/Monetization/MonetizationSidebar.vue.js.map +1 -1
  74. package/dist/plugins/Monetization/RunStatus.vue2.js +12 -12
  75. package/dist/plugins/Monetization/RunStatus.vue2.js.map +1 -1
  76. package/dist/plugins/Monetization/UserCabinetCard.vue2.js +22 -22
  77. package/dist/plugins/Monetization/UserCabinetCard.vue2.js.map +1 -1
  78. package/package.json +7 -8
  79. package/src/lib.ts +0 -2
  80. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js +0 -6
  81. package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js.map +0 -1
  82. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js +0 -5
  83. package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js.map +0 -1
  84. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.d.ts +0 -9
  85. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.js +0 -10
  86. package/dist/components/PlMultiSequenceAlignment/Consensus.vue.js.map +0 -1
  87. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js +0 -122
  88. package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js.map +0 -1
  89. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js +0 -9
  90. package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js.map +0 -1
  91. package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts +0 -6
  92. package/dist/components/PlMultiSequenceAlignment/Legend.vue.js +0 -10
  93. package/dist/components/PlMultiSequenceAlignment/Legend.vue.js.map +0 -1
  94. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +0 -28
  95. package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js.map +0 -1
  96. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +0 -13
  97. package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js.map +0 -1
  98. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +0 -25
  99. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.js +0 -10
  100. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.js.map +0 -1
  101. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +0 -138
  102. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +0 -1
  103. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +0 -31
  104. package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +0 -1
  105. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.d.ts +0 -8
  106. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js +0 -10
  107. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js.map +0 -1
  108. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js +0 -77
  109. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js.map +0 -1
  110. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js +0 -9
  111. package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js.map +0 -1
  112. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +0 -71
  113. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.js +0 -10
  114. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.js.map +0 -1
  115. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +0 -224
  116. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +0 -1
  117. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue3.js +0 -9
  118. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue3.js.map +0 -1
  119. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.d.ts +0 -8
  120. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js +0 -10
  121. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js.map +0 -1
  122. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js +0 -127
  123. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js.map +0 -1
  124. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js +0 -9
  125. package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js.map +0 -1
  126. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts +0 -16
  127. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.js +0 -10
  128. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.js.map +0 -1
  129. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +0 -228
  130. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +0 -1
  131. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js +0 -19
  132. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js.map +0 -1
  133. package/dist/components/PlMultiSequenceAlignment/cell-size.d.ts +0 -4
  134. package/dist/components/PlMultiSequenceAlignment/cell-size.js +0 -8
  135. package/dist/components/PlMultiSequenceAlignment/cell-size.js.map +0 -1
  136. package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts +0 -44
  137. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js +0 -132
  138. package/dist/components/PlMultiSequenceAlignment/chemical-properties.js.map +0 -1
  139. package/dist/components/PlMultiSequenceAlignment/data.d.ts +0 -61
  140. package/dist/components/PlMultiSequenceAlignment/data.js +0 -370
  141. package/dist/components/PlMultiSequenceAlignment/data.js.map +0 -1
  142. package/dist/components/PlMultiSequenceAlignment/index.d.ts +0 -1
  143. package/dist/components/PlMultiSequenceAlignment/markup.d.ts +0 -16
  144. package/dist/components/PlMultiSequenceAlignment/markup.js +0 -84
  145. package/dist/components/PlMultiSequenceAlignment/markup.js.map +0 -1
  146. package/dist/components/PlMultiSequenceAlignment/migrations.d.ts +0 -3
  147. package/dist/components/PlMultiSequenceAlignment/migrations.js +0 -24
  148. package/dist/components/PlMultiSequenceAlignment/migrations.js.map +0 -1
  149. package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.d.ts +0 -6
  150. package/dist/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.d.ts +0 -7
  151. package/dist/components/PlMultiSequenceAlignment/residue-counts.d.ts +0 -2
  152. package/dist/components/PlMultiSequenceAlignment/residue-counts.js +0 -13
  153. package/dist/components/PlMultiSequenceAlignment/residue-counts.js.map +0 -1
  154. package/dist/components/PlMultiSequenceAlignment/settings.d.ts +0 -2
  155. package/dist/components/PlMultiSequenceAlignment/settings.js +0 -9
  156. package/dist/components/PlMultiSequenceAlignment/settings.js.map +0 -1
  157. package/dist/components/PlMultiSequenceAlignment/types.d.ts +0 -5
  158. package/dist/components/PlMultiSequenceAlignment/useMiPlots.d.ts +0 -4
  159. package/dist/components/PlMultiSequenceAlignment/useMiPlots.js +0 -19
  160. package/dist/components/PlMultiSequenceAlignment/useMiPlots.js.map +0 -1
  161. package/src/components/PlMultiSequenceAlignment/Consensus.vue +0 -165
  162. package/src/components/PlMultiSequenceAlignment/Legend.vue +0 -44
  163. package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +0 -299
  164. package/src/components/PlMultiSequenceAlignment/PhylogeneticTree.vue +0 -110
  165. package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +0 -314
  166. package/src/components/PlMultiSequenceAlignment/README.md +0 -216
  167. package/src/components/PlMultiSequenceAlignment/SeqLogo.vue +0 -166
  168. package/src/components/PlMultiSequenceAlignment/Toolbar.vue +0 -228
  169. package/src/components/PlMultiSequenceAlignment/cell-size.ts +0 -4
  170. package/src/components/PlMultiSequenceAlignment/chemical-properties.ts +0 -199
  171. package/src/components/PlMultiSequenceAlignment/data.ts +0 -661
  172. package/src/components/PlMultiSequenceAlignment/index.ts +0 -1
  173. package/src/components/PlMultiSequenceAlignment/markup.ts +0 -141
  174. package/src/components/PlMultiSequenceAlignment/migrations.ts +0 -46
  175. package/src/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.ts +0 -54
  176. package/src/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.ts +0 -89
  177. package/src/components/PlMultiSequenceAlignment/residue-counts.ts +0 -124
  178. package/src/components/PlMultiSequenceAlignment/settings.ts +0 -7
  179. package/src/components/PlMultiSequenceAlignment/types.ts +0 -3
  180. package/src/components/PlMultiSequenceAlignment/useMiPlots.ts +0 -23
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.45.35 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.45.37 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > ts-builder types --target browser-lib
5
5
 
6
6
  ↳ vue-tsc.js --noEmit --project ./tsconfig.json
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @platforma-sdk/ui-vue
2
2
 
3
+ ## 1.45.37
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [3d915f9]
8
+ - @milaboratories/uikit@2.6.3
9
+
10
+ ## 1.45.36
11
+
12
+ ### Patch Changes
13
+
14
+ - d5e72cf: remove PlMultiSequenceAlignment
15
+
3
16
  ## 1.45.35
4
17
 
5
18
  ### Patch Changes
@@ -39,7 +39,6 @@ import N from "../components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js";
39
39
 
40
40
 
41
41
 
42
- import "../components/PlMultiSequenceAlignment/data.js";
43
42
  import "@zip.js/zip.js";
44
43
  import "canonicalize";
45
44
  import "../composition/fileContent.js";
@@ -196,7 +195,7 @@ class R {
196
195
  }
197
196
  }
198
197
  o = new WeakMap();
199
- function ut(r) {
198
+ function mt(r) {
200
199
  const t = C(), e = y(() => {
201
200
  var u;
202
201
  const s = {
@@ -250,6 +249,6 @@ function ut(r) {
250
249
  }, { deep: !0, immediate: !0 }), { gridOptions: a, gridApi: t };
251
250
  }
252
251
  export {
253
- ut as useAgGridOptions
252
+ mt as useAgGridOptions
254
253
  };
255
254
  //# sourceMappingURL=useAgGridOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAgGridOptions.js","sources":["../../src/AgGridVue/useAgGridOptions.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ColGroupDef, GridApi, GridOptions, GridReadyEvent, ICellRendererParams, RowSelectionOptions, ValueSetterParams } from 'ag-grid-enterprise';\nimport type { Component } from 'vue';\nimport { computed, shallowRef, watch } from 'vue';\nimport { AgGridTheme } from '../aggrid';\nimport { autoSizeRowNumberColumn, makeRowNumberColDef, PlAgOverlayLoading, type PlAgOverlayLoadingParams } from '../components/PlAgDataTable';\nimport { PlAgOverlayNoRows } from '../components/PlAgDataTable';\nimport { createAgGridColDef, type ColDefExtended } from './createAgGridColDef';\nimport { whenever } from '@vueuse/core';\nimport { PlAgCellFile } from '../components/PlAgCellFile';\nimport { PlAgChartStackedBarCell } from '../components/PlAgChartStackedBarCell';\nimport { PlAgChartHistogramCell } from '../components/PlAgChartHistogramCell';\nimport type { ImportFileHandle } from '@platforma-sdk/model';\nimport type { ImportProgress } from '@platforma-sdk/model';\nimport { PlAgCellStatusTag } from '../components/PlAgCellStatusTag';\ninterface GridOptionsExtended<TData = any> extends Omit<GridOptions<TData>, 'columnDefs' | 'loadingOverlayComponentParams'> {\n /**\n * Array of Column / Column Group definitions.\n */\n columnDefs?: (ColDefExtended<TData> | ColGroupDef<TData>)[] | null;\n /**\n * Show row numbers column\n */\n rowNumbersColumn?: boolean;\n /**\n * Loading overlay text\n */\n loadingText?: string;\n /**\n * Not ready overlay (No datasource). Takes priority over \"loading\"\n */\n notReady?: boolean;\n /**\n * \"No datasource\" by default\n */\n notReadyText?: string;\n /**\n * Use \"transparent\" to make table headers visible below the loading layer (experimental)\n */\n loadingOverlayType?: 'transparent' | undefined;\n /**\n * Override standard 'Empty' text for the \"no rows\" overlay\n */\n noRowsText?: string;\n /**\n * @deprecated Use loading, notReady, loadingText, loadingOverlayType instead\n */\n loadingOverlayComponentParams?: never;\n}\n\n// @TODO (super simple builder for now)\nclass Builder<TData> {\n #options: GridOptionsExtended<TData> = {};\n\n public options(options: GridOptionsExtended<TData>) {\n this.#options = Object.assign({}, this.#options, options);\n return this;\n }\n\n private get columnDefs() {\n return this.#options.columnDefs ?? [];\n }\n\n /**\n * Set default column definition\n * @param def - column definition\n * @returns this\n */\n public setDefaultColDef(def: ColDefExtended<TData>) {\n this.#options.defaultColDef = def;\n return this;\n }\n\n /**\n * Show loading overlay\n * @param loading\n * @returns this\n */\n public setLoading(loading?: boolean) {\n this.#options.loading = loading;\n return this;\n }\n\n /**\n * Set loading overlay custom text (default is \"Loading\")\n * @param loadingText\n * @returns this\n */\n public setLoadingText(loadingText?: string) {\n this.#options.loadingText = loadingText;\n return this;\n }\n\n /**\n * Show \"not ready overlay\n * @param notReady\n * @returns this\n */\n public setNotReady(notReady?: boolean) {\n this.#options.notReady = notReady;\n return this;\n }\n\n /**\n * Set loading overlay type\n * @param type\n * @returns this\n */\n public setLoadingOverlayType(type?: 'transparent') {\n this.#options.loadingOverlayType = type;\n return this;\n }\n\n /**\n * Set \"not ready\" text\n * @param notReadyText\n * @returns this\n */\n public setNotReadyText(notReadyText?: string) {\n this.#options.notReadyText = notReadyText;\n return this;\n }\n\n /**\n * Set \"no rows\" text when there are no rows (default is \"Empty\")\n * @param noRowsText\n * @returns this\n */\n public setNoRowsText(noRowsText?: string) {\n this.#options.noRowsText = noRowsText;\n return this;\n }\n\n /**\n * Set row selection options\n * @param rowSelection\n * @returns this\n */\n public setRowSelection(rowSelection?: RowSelectionOptions) {\n this.#options.rowSelection = rowSelection;\n return this;\n }\n\n /**\n * Set row data\n * @param rowData\n * @returns this\n */\n public setRowData(rowData?: TData[]) {\n this.#options.rowData = rowData;\n return this;\n }\n\n /**\n * Set components\n * @param components\n * @returns this\n */\n public setComponents(components?: Record<string, Component>) {\n this.#options.components = components;\n return this;\n }\n\n /**\n * Set an option\n * @param key - option key\n * @param value - option value\n * @returns this\n */\n public setOption<K extends keyof GridOptionsExtended<TData>>(key: K, value: GridOptionsExtended<TData>[K]) {\n this.#options[key] = value;\n return this;\n }\n\n /**\n * Add an extended column definition\n * @param def - column definition\n * @returns this\n */\n public column<TValue = any>(def: ColDefExtended<TData, TValue>) {\n this.#options.columnDefs = [...this.columnDefs, def];\n return this;\n }\n\n /**\n * Show row numbers column\n * @param show - show or hide row numbers column\n * @returns this\n */\n public columnRowNumbers(show: boolean = true) {\n this.#options.rowNumbersColumn = show;\n return this;\n }\n\n /**\n * Add a file input column\n * @param def - column definition\n * @param cb - callback to set params for the file input cell renderer\n * @returns this\n */\n public columnFileInput<TValue = any>(\n def: ColDefExtended<TData, TValue> & {\n /**\n * Allowed file extensions (like ['fastq.gz'])\n */\n extensions?: string[];\n /**\n * The resolveProgress function is an optional input parameter for the component\n * that allows tracking the file upload progress in real-time.\n * By passing resolveProgress, you can ensure that the component\n * displays accurate progress values for each file as they upload.\n * How to use it in AgGrid\n * cellRendererParams: {\n * resolveProgress: (cellData) => {\n * const progresses = app.progresses;\n * if (!cellData.value.importFileHandle) return undefined;\n * else return progresses[cellData.value.importFileHandle];\n * }\n * }\n */\n resolveImportProgress?: (cellData: ICellRendererParams<TData, TValue>) => ImportProgress | undefined;\n\n /**\n * The resolveFileHandle function is an optional input parameter for the component\n * that allows tracking the file upload progress in real-time.\n * By passing resolveFileHandle, you can ensure that the component\n * displays accurate progress values for each file as they upload.\n * How to use it in AgGrid\n * cellRendererParams: {\n * resolveFileHandle: (cellData) => {\n * return cellData.value.importFileHandle;\n * }\n * }\n */\n resolveImportFileHandle?: (cellData: ICellRendererParams<TData, TValue>) => ImportFileHandle | undefined;\n\n setImportFileHandle?: (d: ValueSetterParams<TData, ImportFileHandle | undefined>) => void;\n }) {\n return this.column(Object.assign({\n cellRenderer: 'PlAgCellFile',\n headerComponentParams: { type: 'File' },\n cellStyle: { padding: 0 },\n valueSetter: (d: ValueSetterParams<TData, ImportFileHandle | undefined>) => {\n def.setImportFileHandle?.(d);\n return true;\n },\n cellRendererSelector: (cellData: ICellRendererParams<TData, TValue>) => {\n return {\n component: 'PlAgCellFile',\n params: {\n extensions: def.extensions,\n value: def.resolveImportFileHandle?.(cellData),\n resolveProgress: () => {\n return def.resolveImportProgress?.(cellData);\n },\n },\n };\n },\n }, def));\n }\n\n public build() {\n return this.#options;\n }\n}\n\n// Simple helper to use like column<string> in grid options literal\ntype ColumnFunc<TData> = <TValue>(def: ColDefExtended<TData, TValue>) => ColDefExtended<TData, TValue>;\n\n/**\n * Returns a set of Ag Grid options along with a reference to the Ag Grid API.\n * (This is a fast prototype)\n *\n * @example\n * ```ts\n * const { gridOptions, gridApi } = useAgGridOptions(() => ({\n * // custom grid options here\n * }));\n *\n * // Usage in a template (v-bind is required!)\n * <template>\n * <AgGridVue :style=\"{ height: '100%' }\" v-bind=\"gridOptions\" />\n * </template>\n * ```\n */\nexport function useAgGridOptions<TData>(\n factory: (context: { builder: Builder<TData>; column: ColumnFunc<TData> }) => Builder<TData> | GridOptionsExtended<TData>,\n) {\n const gridApi = shallowRef<GridApi>();\n\n const extOptions = computed<GridOptionsExtended>(() => {\n const def: GridOptionsExtended<TData> = {\n theme: AgGridTheme,\n loadingOverlayComponent: PlAgOverlayLoading,\n noRowsOverlayComponent: PlAgOverlayNoRows,\n onGridReady: (e: GridReadyEvent) => {\n gridApi.value = e.api;\n autoSizeRowNumberColumn(e.api); // @TODO\n },\n };\n\n const column = <TValue>(def: ColDefExtended<TData, TValue>) => {\n return def;\n };\n\n const result = factory({ builder: new Builder(), column });\n\n const options = Object.assign({}, def, result instanceof Builder ? result.build() : result);\n\n if (options.rowNumbersColumn) {\n options.columnDefs = [makeRowNumberColDef(), ...(options.columnDefs ?? [])];\n }\n\n if (options.noRowsText) {\n options.noRowsOverlayComponentParams = {\n text: options.noRowsText,\n };\n }\n\n if ('loadingOverlayComponentParams' in options) {\n console.warn('useAgGridOptions: remove loadingOverlayComponentParams from options, use loading, notReady, loadingText, loadingOverlayType instead');\n }\n\n options.loading = options.notReady || options.loading;\n\n options.columnDefs = options.columnDefs?.map((it) => createAgGridColDef(it));\n\n // Register all special components\n options.components = Object.assign({}, options.components ?? {}, {\n PlAgCellFile,\n PlAgChartStackedBarCell,\n PlAgChartHistogramCell,\n PlAgCellStatusTag,\n });\n\n return options;\n });\n\n const gridOptions = computed<GridOptions>(() => {\n const options = extOptions.value;\n\n return {\n ...options,\n loadingOverlayComponentParams: {\n notReady: options.notReady,\n notReadyText: options.notReadyText,\n overlayType: options.loadingOverlayType,\n } satisfies PlAgOverlayLoadingParams,\n };\n });\n\n whenever(() => extOptions.value.rowNumbersColumn, () => {\n if (gridApi.value) {\n autoSizeRowNumberColumn(gridApi.value);\n }\n });\n\n watch([\n () => extOptions.value.notReady,\n () => extOptions.value.loading,\n ], ([notReady, loading]) => {\n const loadingOverlayComponentParams = {\n notReady,\n // we probably don't need to update the parameters below\n notReadyText: extOptions.value.notReadyText,\n overlayType: extOptions.value.loadingOverlayType,\n loadingText: extOptions.value.loadingText,\n } satisfies PlAgOverlayLoadingParams;\n\n // Hack to apply loadingOverlayComponentParams\n gridApi.value?.updateGridOptions({\n loading: !loading,\n loadingOverlayComponentParams,\n });\n\n gridApi.value?.updateGridOptions({\n loading,\n loadingOverlayComponentParams,\n });\n }, { deep: true, immediate: true });\n\n return { gridOptions, gridApi };\n};\n"],"names":["Builder","__privateAdd","_options","options","__privateSet","__privateGet","def","loading","loadingText","notReady","type","notReadyText","noRowsText","rowSelection","rowData","components","key","value","show","d","_a","cellData","useAgGridOptions","factory","gridApi","shallowRef","extOptions","computed","AgGridTheme","PlAgOverlayLoading","PlAgOverlayNoRows","e","autoSizeRowNumberColumn","column","result","makeRowNumberColDef","it","createAgGridColDef","PlAgCellFile","PlAgChartStackedBarCell","PlAgChartHistogramCell","PlAgCellStatusTag","gridOptions","whenever","watch","loadingOverlayComponentParams","_b"],"mappings":"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"}
1
+ {"version":3,"file":"useAgGridOptions.js","sources":["../../src/AgGridVue/useAgGridOptions.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ColGroupDef, GridApi, GridOptions, GridReadyEvent, ICellRendererParams, RowSelectionOptions, ValueSetterParams } from 'ag-grid-enterprise';\nimport type { Component } from 'vue';\nimport { computed, shallowRef, watch } from 'vue';\nimport { AgGridTheme } from '../aggrid';\nimport { autoSizeRowNumberColumn, makeRowNumberColDef, PlAgOverlayLoading, type PlAgOverlayLoadingParams } from '../components/PlAgDataTable';\nimport { PlAgOverlayNoRows } from '../components/PlAgDataTable';\nimport { createAgGridColDef, type ColDefExtended } from './createAgGridColDef';\nimport { whenever } from '@vueuse/core';\nimport { PlAgCellFile } from '../components/PlAgCellFile';\nimport { PlAgChartStackedBarCell } from '../components/PlAgChartStackedBarCell';\nimport { PlAgChartHistogramCell } from '../components/PlAgChartHistogramCell';\nimport type { ImportFileHandle } from '@platforma-sdk/model';\nimport type { ImportProgress } from '@platforma-sdk/model';\nimport { PlAgCellStatusTag } from '../components/PlAgCellStatusTag';\ninterface GridOptionsExtended<TData = any> extends Omit<GridOptions<TData>, 'columnDefs' | 'loadingOverlayComponentParams'> {\n /**\n * Array of Column / Column Group definitions.\n */\n columnDefs?: (ColDefExtended<TData> | ColGroupDef<TData>)[] | null;\n /**\n * Show row numbers column\n */\n rowNumbersColumn?: boolean;\n /**\n * Loading overlay text\n */\n loadingText?: string;\n /**\n * Not ready overlay (No datasource). Takes priority over \"loading\"\n */\n notReady?: boolean;\n /**\n * \"No datasource\" by default\n */\n notReadyText?: string;\n /**\n * Use \"transparent\" to make table headers visible below the loading layer (experimental)\n */\n loadingOverlayType?: 'transparent' | undefined;\n /**\n * Override standard 'Empty' text for the \"no rows\" overlay\n */\n noRowsText?: string;\n /**\n * @deprecated Use loading, notReady, loadingText, loadingOverlayType instead\n */\n loadingOverlayComponentParams?: never;\n}\n\n// @TODO (super simple builder for now)\nclass Builder<TData> {\n #options: GridOptionsExtended<TData> = {};\n\n public options(options: GridOptionsExtended<TData>) {\n this.#options = Object.assign({}, this.#options, options);\n return this;\n }\n\n private get columnDefs() {\n return this.#options.columnDefs ?? [];\n }\n\n /**\n * Set default column definition\n * @param def - column definition\n * @returns this\n */\n public setDefaultColDef(def: ColDefExtended<TData>) {\n this.#options.defaultColDef = def;\n return this;\n }\n\n /**\n * Show loading overlay\n * @param loading\n * @returns this\n */\n public setLoading(loading?: boolean) {\n this.#options.loading = loading;\n return this;\n }\n\n /**\n * Set loading overlay custom text (default is \"Loading\")\n * @param loadingText\n * @returns this\n */\n public setLoadingText(loadingText?: string) {\n this.#options.loadingText = loadingText;\n return this;\n }\n\n /**\n * Show \"not ready overlay\n * @param notReady\n * @returns this\n */\n public setNotReady(notReady?: boolean) {\n this.#options.notReady = notReady;\n return this;\n }\n\n /**\n * Set loading overlay type\n * @param type\n * @returns this\n */\n public setLoadingOverlayType(type?: 'transparent') {\n this.#options.loadingOverlayType = type;\n return this;\n }\n\n /**\n * Set \"not ready\" text\n * @param notReadyText\n * @returns this\n */\n public setNotReadyText(notReadyText?: string) {\n this.#options.notReadyText = notReadyText;\n return this;\n }\n\n /**\n * Set \"no rows\" text when there are no rows (default is \"Empty\")\n * @param noRowsText\n * @returns this\n */\n public setNoRowsText(noRowsText?: string) {\n this.#options.noRowsText = noRowsText;\n return this;\n }\n\n /**\n * Set row selection options\n * @param rowSelection\n * @returns this\n */\n public setRowSelection(rowSelection?: RowSelectionOptions) {\n this.#options.rowSelection = rowSelection;\n return this;\n }\n\n /**\n * Set row data\n * @param rowData\n * @returns this\n */\n public setRowData(rowData?: TData[]) {\n this.#options.rowData = rowData;\n return this;\n }\n\n /**\n * Set components\n * @param components\n * @returns this\n */\n public setComponents(components?: Record<string, Component>) {\n this.#options.components = components;\n return this;\n }\n\n /**\n * Set an option\n * @param key - option key\n * @param value - option value\n * @returns this\n */\n public setOption<K extends keyof GridOptionsExtended<TData>>(key: K, value: GridOptionsExtended<TData>[K]) {\n this.#options[key] = value;\n return this;\n }\n\n /**\n * Add an extended column definition\n * @param def - column definition\n * @returns this\n */\n public column<TValue = any>(def: ColDefExtended<TData, TValue>) {\n this.#options.columnDefs = [...this.columnDefs, def];\n return this;\n }\n\n /**\n * Show row numbers column\n * @param show - show or hide row numbers column\n * @returns this\n */\n public columnRowNumbers(show: boolean = true) {\n this.#options.rowNumbersColumn = show;\n return this;\n }\n\n /**\n * Add a file input column\n * @param def - column definition\n * @param cb - callback to set params for the file input cell renderer\n * @returns this\n */\n public columnFileInput<TValue = any>(\n def: ColDefExtended<TData, TValue> & {\n /**\n * Allowed file extensions (like ['fastq.gz'])\n */\n extensions?: string[];\n /**\n * The resolveProgress function is an optional input parameter for the component\n * that allows tracking the file upload progress in real-time.\n * By passing resolveProgress, you can ensure that the component\n * displays accurate progress values for each file as they upload.\n * How to use it in AgGrid\n * cellRendererParams: {\n * resolveProgress: (cellData) => {\n * const progresses = app.progresses;\n * if (!cellData.value.importFileHandle) return undefined;\n * else return progresses[cellData.value.importFileHandle];\n * }\n * }\n */\n resolveImportProgress?: (cellData: ICellRendererParams<TData, TValue>) => ImportProgress | undefined;\n\n /**\n * The resolveFileHandle function is an optional input parameter for the component\n * that allows tracking the file upload progress in real-time.\n * By passing resolveFileHandle, you can ensure that the component\n * displays accurate progress values for each file as they upload.\n * How to use it in AgGrid\n * cellRendererParams: {\n * resolveFileHandle: (cellData) => {\n * return cellData.value.importFileHandle;\n * }\n * }\n */\n resolveImportFileHandle?: (cellData: ICellRendererParams<TData, TValue>) => ImportFileHandle | undefined;\n\n setImportFileHandle?: (d: ValueSetterParams<TData, ImportFileHandle | undefined>) => void;\n }) {\n return this.column(Object.assign({\n cellRenderer: 'PlAgCellFile',\n headerComponentParams: { type: 'File' },\n cellStyle: { padding: 0 },\n valueSetter: (d: ValueSetterParams<TData, ImportFileHandle | undefined>) => {\n def.setImportFileHandle?.(d);\n return true;\n },\n cellRendererSelector: (cellData: ICellRendererParams<TData, TValue>) => {\n return {\n component: 'PlAgCellFile',\n params: {\n extensions: def.extensions,\n value: def.resolveImportFileHandle?.(cellData),\n resolveProgress: () => {\n return def.resolveImportProgress?.(cellData);\n },\n },\n };\n },\n }, def));\n }\n\n public build() {\n return this.#options;\n }\n}\n\n// Simple helper to use like column<string> in grid options literal\ntype ColumnFunc<TData> = <TValue>(def: ColDefExtended<TData, TValue>) => ColDefExtended<TData, TValue>;\n\n/**\n * Returns a set of Ag Grid options along with a reference to the Ag Grid API.\n * (This is a fast prototype)\n *\n * @example\n * ```ts\n * const { gridOptions, gridApi } = useAgGridOptions(() => ({\n * // custom grid options here\n * }));\n *\n * // Usage in a template (v-bind is required!)\n * <template>\n * <AgGridVue :style=\"{ height: '100%' }\" v-bind=\"gridOptions\" />\n * </template>\n * ```\n */\nexport function useAgGridOptions<TData>(\n factory: (context: { builder: Builder<TData>; column: ColumnFunc<TData> }) => Builder<TData> | GridOptionsExtended<TData>,\n) {\n const gridApi = shallowRef<GridApi>();\n\n const extOptions = computed<GridOptionsExtended>(() => {\n const def: GridOptionsExtended<TData> = {\n theme: AgGridTheme,\n loadingOverlayComponent: PlAgOverlayLoading,\n noRowsOverlayComponent: PlAgOverlayNoRows,\n onGridReady: (e: GridReadyEvent) => {\n gridApi.value = e.api;\n autoSizeRowNumberColumn(e.api); // @TODO\n },\n };\n\n const column = <TValue>(def: ColDefExtended<TData, TValue>) => {\n return def;\n };\n\n const result = factory({ builder: new Builder(), column });\n\n const options = Object.assign({}, def, result instanceof Builder ? result.build() : result);\n\n if (options.rowNumbersColumn) {\n options.columnDefs = [makeRowNumberColDef(), ...(options.columnDefs ?? [])];\n }\n\n if (options.noRowsText) {\n options.noRowsOverlayComponentParams = {\n text: options.noRowsText,\n };\n }\n\n if ('loadingOverlayComponentParams' in options) {\n console.warn('useAgGridOptions: remove loadingOverlayComponentParams from options, use loading, notReady, loadingText, loadingOverlayType instead');\n }\n\n options.loading = options.notReady || options.loading;\n\n options.columnDefs = options.columnDefs?.map((it) => createAgGridColDef(it));\n\n // Register all special components\n options.components = Object.assign({}, options.components ?? {}, {\n PlAgCellFile,\n PlAgChartStackedBarCell,\n PlAgChartHistogramCell,\n PlAgCellStatusTag,\n });\n\n return options;\n });\n\n const gridOptions = computed<GridOptions>(() => {\n const options = extOptions.value;\n\n return {\n ...options,\n loadingOverlayComponentParams: {\n notReady: options.notReady,\n notReadyText: options.notReadyText,\n overlayType: options.loadingOverlayType,\n } satisfies PlAgOverlayLoadingParams,\n };\n });\n\n whenever(() => extOptions.value.rowNumbersColumn, () => {\n if (gridApi.value) {\n autoSizeRowNumberColumn(gridApi.value);\n }\n });\n\n watch([\n () => extOptions.value.notReady,\n () => extOptions.value.loading,\n ], ([notReady, loading]) => {\n const loadingOverlayComponentParams = {\n notReady,\n // we probably don't need to update the parameters below\n notReadyText: extOptions.value.notReadyText,\n overlayType: extOptions.value.loadingOverlayType,\n loadingText: extOptions.value.loadingText,\n } satisfies PlAgOverlayLoadingParams;\n\n // Hack to apply loadingOverlayComponentParams\n gridApi.value?.updateGridOptions({\n loading: !loading,\n loadingOverlayComponentParams,\n });\n\n gridApi.value?.updateGridOptions({\n loading,\n loadingOverlayComponentParams,\n });\n }, { deep: true, immediate: true });\n\n return { gridOptions, gridApi };\n};\n"],"names":["Builder","__privateAdd","_options","options","__privateSet","__privateGet","def","loading","loadingText","notReady","type","notReadyText","noRowsText","rowSelection","rowData","components","key","value","show","d","_a","cellData","useAgGridOptions","factory","gridApi","shallowRef","extOptions","computed","AgGridTheme","PlAgOverlayLoading","PlAgOverlayNoRows","e","autoSizeRowNumberColumn","column","result","makeRowNumberColDef","it","createAgGridColDef","PlAgCellFile","PlAgChartStackedBarCell","PlAgChartHistogramCell","PlAgCellStatusTag","gridOptions","whenever","watch","loadingOverlayComponentParams","_b"],"mappings":"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"}
@@ -36,9 +36,9 @@ const P = { class: "block block__layout" }, j = /* @__PURE__ */ _({
36
36
  key: 0,
37
37
  class: g(e.$style.error)
38
38
  }, C(n(o).error), 3)) : n(o).loaded ? u.value ? (t(), s(E(u.value), { key: p.value })) : (t(), s($, { key: 3 })) : (t(), s(B, { key: 1 }, {
39
- default: N(() => r[0] || (r[0] = [
40
- w("Loading...")
41
- ])),
39
+ default: N(() => [...r[0] || (r[0] = [
40
+ w("Loading...", -1)
41
+ ])]),
42
42
  _: 1
43
43
  })),
44
44
  n(o).loaded && v.value ? (t(), s(n(L), {
@@ -1 +1 @@
1
- {"version":3,"file":"BlockLayout.vue2.js","sources":["../../src/components/BlockLayout.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport '../assets/block.scss';\nimport { computed } from 'vue';\nimport { useSdkPlugin } from '../defineApp';\nimport NotFound from './NotFound.vue';\nimport LoaderPage from './LoaderPage.vue';\nimport { PlAppErrorNotificationAlert } from './PlAppErrorNotificationAlert';\nimport BlockLoader from './BlockLoader.vue';\nimport { MonetizationSidebar } from '../plugins/Monetization';\n\nconst sdk = useSdkPlugin();\n\nconst parsePathname = (href: `/${string}`) => {\n try {\n return new URL(href, 'http://dummy').pathname as `/${string}`;\n } catch (_cause) {\n console.error('Invalid href', href);\n return undefined;\n }\n};\n\nconst href = computed(() => (sdk.loaded ? sdk.useApp().href : undefined));\n\nconst CurrentView = computed(() => {\n if (sdk.loaded) {\n const app = sdk.useApp();\n const pathname = parsePathname(app.snapshot.navigationState.href);\n return pathname ? app.getRoute(pathname) : undefined;\n }\n\n return undefined;\n});\n\nconst app = computed(() => (sdk.loaded ? sdk.useApp() : undefined));\n\nconst errors = computed(() => (app.value ? app.value.model.outputErrors : {}));\n\nconst showErrorsNotification = computed(() => app.value?.showErrorsNotification ?? true);\n\nconst progress = computed(() => app.value?.progress?.());\n</script>\n\n<template>\n <div class=\"block block__layout\">\n <BlockLoader :value=\"progress\" />\n <div v-if=\"sdk.error\" :class=\"$style.error\">{{ sdk.error }}</div>\n <LoaderPage v-else-if=\"!sdk.loaded\">Loading...</LoaderPage>\n <component :is=\"CurrentView\" v-else-if=\"CurrentView\" :key=\"href\" />\n <NotFound v-else />\n <PlAppErrorNotificationAlert v-if=\"sdk.loaded && showErrorsNotification\" :errors=\"errors\" />\n </div>\n <!-- Plugins -->\n <MonetizationSidebar v-if=\"CurrentView\" />\n</template>\n\n<style module>\n.error {\n color: red;\n font-weight: bold;\n padding: 24px;\n}\n</style>\n"],"names":["sdk","useSdkPlugin","parsePathname","href","computed","CurrentView","app","pathname","errors","showErrorsNotification","_a","progress","_b"],"mappings":";;;;;;;;;;;AAUA,UAAMA,IAAMC,EAAA,GAENC,IAAgB,CAACC,MAAuB;AAC5C,UAAI;AACF,eAAO,IAAI,IAAIA,GAAM,cAAc,EAAE;AAAA,MACvC,QAAiB;AACf,gBAAQ,MAAM,gBAAgBA,CAAI;AAClC;AAAA,MACF;AAAA,IACF,GAEMA,IAAOC,EAAS,MAAOJ,EAAI,SAASA,EAAI,OAAA,EAAS,OAAO,MAAU,GAElEK,IAAcD,EAAS,MAAM;AACjC,UAAIJ,EAAI,QAAQ;AACd,cAAMM,IAAMN,EAAI,OAAA,GACVO,IAAWL,EAAcI,EAAI,SAAS,gBAAgB,IAAI;AAChE,eAAOC,IAAWD,EAAI,SAASC,CAAQ,IAAI;AAAA,MAC7C;AAAA,IAGF,CAAC,GAEKD,IAAMF,EAAS,MAAOJ,EAAI,SAASA,EAAI,OAAA,IAAW,MAAU,GAE5DQ,IAASJ,EAAS,MAAOE,EAAI,QAAQA,EAAI,MAAM,MAAM,eAAe,EAAG,GAEvEG,IAAyBL,EAAS,MAAA;;AAAM,eAAAM,IAAAJ,EAAI,UAAJ,gBAAAI,EAAW,2BAA0B;AAAA,KAAI,GAEjFC,IAAWP,EAAS,MAAA;;AAAM,cAAAQ,KAAAF,IAAAJ,EAAI,UAAJ,gBAAAI,EAAW,aAAX,gBAAAE,EAAA,KAAAF;AAAA,KAAuB;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"BlockLayout.vue2.js","sources":["../../src/components/BlockLayout.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport '../assets/block.scss';\nimport { computed } from 'vue';\nimport { useSdkPlugin } from '../defineApp';\nimport NotFound from './NotFound.vue';\nimport LoaderPage from './LoaderPage.vue';\nimport { PlAppErrorNotificationAlert } from './PlAppErrorNotificationAlert';\nimport BlockLoader from './BlockLoader.vue';\nimport { MonetizationSidebar } from '../plugins/Monetization';\n\nconst sdk = useSdkPlugin();\n\nconst parsePathname = (href: `/${string}`) => {\n try {\n return new URL(href, 'http://dummy').pathname as `/${string}`;\n } catch (_cause) {\n console.error('Invalid href', href);\n return undefined;\n }\n};\n\nconst href = computed(() => (sdk.loaded ? sdk.useApp().href : undefined));\n\nconst CurrentView = computed(() => {\n if (sdk.loaded) {\n const app = sdk.useApp();\n const pathname = parsePathname(app.snapshot.navigationState.href);\n return pathname ? app.getRoute(pathname) : undefined;\n }\n\n return undefined;\n});\n\nconst app = computed(() => (sdk.loaded ? sdk.useApp() : undefined));\n\nconst errors = computed(() => (app.value ? app.value.model.outputErrors : {}));\n\nconst showErrorsNotification = computed(() => app.value?.showErrorsNotification ?? true);\n\nconst progress = computed(() => app.value?.progress?.());\n</script>\n\n<template>\n <div class=\"block block__layout\">\n <BlockLoader :value=\"progress\" />\n <div v-if=\"sdk.error\" :class=\"$style.error\">{{ sdk.error }}</div>\n <LoaderPage v-else-if=\"!sdk.loaded\">Loading...</LoaderPage>\n <component :is=\"CurrentView\" v-else-if=\"CurrentView\" :key=\"href\" />\n <NotFound v-else />\n <PlAppErrorNotificationAlert v-if=\"sdk.loaded && showErrorsNotification\" :errors=\"errors\" />\n </div>\n <!-- Plugins -->\n <MonetizationSidebar v-if=\"CurrentView\" />\n</template>\n\n<style module>\n.error {\n color: red;\n font-weight: bold;\n padding: 24px;\n}\n</style>\n"],"names":["sdk","useSdkPlugin","parsePathname","href","computed","CurrentView","app","pathname","errors","showErrorsNotification","_a","progress","_b","_createElementVNode","_hoisted_1","_createVNode","BlockLoader","_unref","_createElementBlock","_normalizeClass","$style","_toDisplayString","_openBlock","_createBlock","_resolveDynamicComponent","NotFound","LoaderPage","_cache","PlAppErrorNotificationAlert","MonetizationSidebar"],"mappings":";;;;;;;;;;;AAUA,UAAMA,IAAMC,EAAA,GAENC,IAAgB,CAACC,MAAuB;AAC5C,UAAI;AACF,eAAO,IAAI,IAAIA,GAAM,cAAc,EAAE;AAAA,MACvC,QAAiB;AACf,gBAAQ,MAAM,gBAAgBA,CAAI;AAClC;AAAA,MACF;AAAA,IACF,GAEMA,IAAOC,EAAS,MAAOJ,EAAI,SAASA,EAAI,OAAA,EAAS,OAAO,MAAU,GAElEK,IAAcD,EAAS,MAAM;AACjC,UAAIJ,EAAI,QAAQ;AACd,cAAMM,IAAMN,EAAI,OAAA,GACVO,IAAWL,EAAcI,EAAI,SAAS,gBAAgB,IAAI;AAChE,eAAOC,IAAWD,EAAI,SAASC,CAAQ,IAAI;AAAA,MAC7C;AAAA,IAGF,CAAC,GAEKD,IAAMF,EAAS,MAAOJ,EAAI,SAASA,EAAI,OAAA,IAAW,MAAU,GAE5DQ,IAASJ,EAAS,MAAOE,EAAI,QAAQA,EAAI,MAAM,MAAM,eAAe,EAAG,GAEvEG,IAAyBL,EAAS,MAAA;;AAAM,eAAAM,IAAAJ,EAAI,UAAJ,gBAAAI,EAAW,2BAA0B;AAAA,KAAI,GAEjFC,IAAWP,EAAS,MAAA;;AAAM,cAAAQ,KAAAF,IAAAJ,EAAI,UAAJ,gBAAAI,EAAW,aAAX,gBAAAE,EAAA,KAAAF;AAAA,KAAuB;;MAIrDG,EAOM,OAPNC,GAOM;AAAA,QANJC,EAAiCC,GAAA,EAAnB,OAAOL,EAAA,MAAA,GAAQ,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,QAClBM,EAAAjB,CAAA,EAAI,cAAfkB,EAAiE,OAAA;AAAA;UAA1C,OAAKC,EAAEC,EAAAA,OAAO,KAAK;AAAA,QAAA,GAAKC,EAAAJ,EAAAjB,CAAA,EAAI,KAAK,GAAA,CAAA,KAChCiB,EAAAjB,CAAA,EAAI,SACYK,EAAA,SAAxCiB,EAAA,GAAAC,EAAmEC,EAAnDnB,EAAA,KAAW,GAAA,EAA2B,KAAKF,EAAA,MAAA,CAAI,WAC/DoB,EAAmBE,GAAA,EAAA,KAAA,EAAA,CAAA,WAFnBF,EAA2DG,GAAA,EAAA,KAAA,KAAA;AAAA,qBAAvB,MAAU,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,cAAV,cAAU,EAAA;AAAA,UAAA;;;QAGXV,EAAAjB,CAAA,EAAI,UAAUS,EAAA,cAAjDc,EAA4FN,EAAAW,CAAA,GAAA;AAAA;UAAlB,QAAQpB,EAAA;AAAA,QAAA;;MAGzDH,EAAA,cAA3BkB,EAA0CN,EAAAY,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"BlockLoader.vue.js","sources":["../../src/components/BlockLoader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n value: boolean | number | undefined;\n}>();\n\nconst isLoader = computed(() => typeof props.value === 'boolean' && props.value);\n\nconst progressWidth = computed(() => {\n const value = props.value;\n\n if (typeof value === 'number') {\n if (value >= 1) {\n return undefined;\n }\n\n return (value * 100).toFixed(2) + '%';\n }\n\n return undefined;\n});\n</script>\n\n<template>\n <div v-if=\"isLoader\" class=\"block__loader\" />\n <div v-else-if=\"progressWidth !== undefined\" class=\"block__progress\" :style=\"{ '--progress-width': progressWidth }\" />\n</template>\n"],"names":["props","__props","isLoader","computed","progressWidth","value"],"mappings":";;;;;;;;;;AAGA,UAAMA,IAAQC,GAIRC,IAAWC,EAAS,MAAM,OAAOH,EAAM,SAAU,aAAaA,EAAM,KAAK,GAEzEI,IAAgBD,EAAS,MAAM;AACnC,YAAME,IAAQL,EAAM;AAEpB,UAAI,OAAOK,KAAU;AACnB,eAAIA,KAAS,IACX,UAGMA,IAAQ,KAAK,QAAQ,CAAC,IAAI;AAAA,IAItC,CAAC;;;;;;;;"}
1
+ {"version":3,"file":"BlockLoader.vue.js","sources":["../../src/components/BlockLoader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n value: boolean | number | undefined;\n}>();\n\nconst isLoader = computed(() => typeof props.value === 'boolean' && props.value);\n\nconst progressWidth = computed(() => {\n const value = props.value;\n\n if (typeof value === 'number') {\n if (value >= 1) {\n return undefined;\n }\n\n return (value * 100).toFixed(2) + '%';\n }\n\n return undefined;\n});\n</script>\n\n<template>\n <div v-if=\"isLoader\" class=\"block__loader\" />\n <div v-else-if=\"progressWidth !== undefined\" class=\"block__progress\" :style=\"{ '--progress-width': progressWidth }\" />\n</template>\n"],"names":["props","__props","isLoader","computed","progressWidth","value","_openBlock","_createElementBlock","_hoisted_1"],"mappings":";;;;;;;;;;AAGA,UAAMA,IAAQC,GAIRC,IAAWC,EAAS,MAAM,OAAOH,EAAM,SAAU,aAAaA,EAAM,KAAK,GAEzEI,IAAgBD,EAAS,MAAM;AACnC,YAAME,IAAQL,EAAM;AAEpB,UAAI,OAAOK,KAAU;AACnB,eAAIA,KAAS,IACX,UAGMA,IAAQ,KAAK,QAAQ,CAAC,IAAI;AAAA,IAItC,CAAC;qBAIYH,EAAA,SAAXI,EAAA,GAAAC,EAA6C,OAA7CC,CAA6C,KAC7BJ,EAAA,UAAkB,eAAlCG,EAAsH,OAAA;AAAA;MAAzE,OAAM;AAAA,MAAmB,+BAA6BH,EAAA,OAAa;AAAA,IAAA;;;"}
@@ -2,11 +2,11 @@ import { createElementBlock as r, openBlock as a, createElementVNode as o } from
2
2
  import t from "../_virtual/_plugin-vue_export-helper.js";
3
3
  const c = {}, n = { class: "block__loader-page" };
4
4
  function s(l, e) {
5
- return a(), r("div", n, e[0] || (e[0] = [
5
+ return a(), r("div", n, [...e[0] || (e[0] = [
6
6
  o("div", { class: "loader-container" }, [
7
7
  o("i", { class: "mask-24 mask-loading loader-icon" })
8
8
  ], -1)
9
- ]));
9
+ ])]);
10
10
  }
11
11
  const _ = /* @__PURE__ */ t(c, [["render", s]]);
12
12
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"LoaderPage.vue.js","sources":["../../src/components/LoaderPage.vue"],"sourcesContent":["<template>\n <div class=\"block__loader-page\">\n <div class=\"loader-container\">\n <i class=\"mask-24 mask-loading loader-icon\" />\n </div>\n </div>\n</template>\n"],"names":["_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_hoisted_1"],"mappings":";;;AACE,SAAAA,EAAAC,GAAAC,GAAA;SACEC,EAAA,GAEMC,EAFK,OAAAC,GAAkBH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,MAC3B,OAA8C,EAA3C,OAAM,mBAAA,GAAA;AAAA;;;;;"}
1
+ {"version":3,"file":"LoaderPage.vue.js","sources":["../../src/components/LoaderPage.vue"],"sourcesContent":["<template>\n <div class=\"block__loader-page\">\n <div class=\"loader-container\">\n <i class=\"mask-24 mask-loading loader-icon\" />\n </div>\n </div>\n</template>\n"],"names":["_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_hoisted_1"],"mappings":";;;AACE,SAAAA,EAAAC,GAAAC,GAAA;SACEC,EAAA,GAEMC,EAFK,OAAAC,GAAkB,CAAA,GAAAH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,MAC3B,OAA8C,EAA3C,OAAM,mBAAA,GAAA;AAAA;;;;;"}
@@ -12,9 +12,9 @@ const _ = { class: "block__not-found" }, v = /* @__PURE__ */ r({
12
12
  p(e(f), {
13
13
  onClick: c(n, ["stop"])
14
14
  }, {
15
- default: u(() => o[0] || (o[0] = [
16
- l("Return to main page")
17
- ])),
15
+ default: u(() => [...o[0] || (o[0] = [
16
+ l("Return to main page", -1)
17
+ ])]),
18
18
  _: 1
19
19
  })
20
20
  ]));
@@ -1 +1 @@
1
- {"version":3,"file":"NotFound.vue.js","sources":["../../src/components/NotFound.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlBtnSecondary } from '@milaboratories/uikit';\nimport { useSdkPlugin } from '../defineApp';\n\nconst sdk = useSdkPlugin();\n\nconst app = sdk.useApp();\n\nconst goToMain = () => {\n app.navigateTo('/');\n};\n</script>\n\n<template>\n <div class=\"block__not-found\">\n <h1>Not found route: {{ app.snapshot.navigationState.href }}</h1>\n <PlBtnSecondary @click.stop=\"goToMain\">Return to main page</PlBtnSecondary>\n </div>\n</template>\n"],"names":["app","useSdkPlugin","goToMain"],"mappings":";;;;;;AAMA,UAAMA,IAFMC,EAAA,EAEI,OAAA,GAEVC,IAAW,MAAM;AACrB,MAAAF,EAAI,WAAW,GAAG;AAAA,IACpB;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"NotFound.vue.js","sources":["../../src/components/NotFound.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlBtnSecondary } from '@milaboratories/uikit';\nimport { useSdkPlugin } from '../defineApp';\n\nconst sdk = useSdkPlugin();\n\nconst app = sdk.useApp();\n\nconst goToMain = () => {\n app.navigateTo('/');\n};\n</script>\n\n<template>\n <div class=\"block__not-found\">\n <h1>Not found route: {{ app.snapshot.navigationState.href }}</h1>\n <PlBtnSecondary @click.stop=\"goToMain\">Return to main page</PlBtnSecondary>\n </div>\n</template>\n"],"names":["app","useSdkPlugin","goToMain","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_toDisplayString","_unref","_createVNode","PlBtnSecondary","_cache"],"mappings":";;;;;;AAMA,UAAMA,IAFMC,EAAA,EAEI,OAAA,GAEVC,IAAW,MAAM;AACrB,MAAAF,EAAI,WAAW,GAAG;AAAA,IACpB;sBAIEG,EAAA,GAAAC,EAGM,OAHNC,GAGM;AAAA,MAFJC,EAAiE,MAAA,MAA7D,sBAAiBC,EAAGC,EAAAR,CAAA,EAAI,SAAS,gBAAgB,IAAI,GAAA,CAAA;AAAA,MACzDS,EAA2ED,EAAAE,CAAA,GAAA;AAAA,QAA1D,WAAYR,GAAQ,CAAA,MAAA,CAAA;AAAA,MAAA;mBAAE,MAAmB,CAAA,GAAAS,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,YAAnB,uBAAmB,EAAA;AAAA,QAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"OperandButton.vue2.js","sources":["../../../src/components/PlAdvancedFilter/OperandButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Operand } from './types';\n\nconst props = defineProps<{\n active: Operand;\n disabled: boolean;\n onSelect: (op: Operand) => void;\n}>();\n\nconst OPTIONS: Operand[] = ['and', 'or'];\n</script>\n<template>\n <div v-bind=\"$attrs\" :class=\"$style.block\">\n <div\n v-for=\"op in OPTIONS\"\n :key=\"op\"\n :class=\"[$style.operand, {[$style.active]: op === props.active && !props.disabled}]\"\n @click=\"!props.disabled && props.onSelect(op)\"\n >\n {{ op }}\n </div>\n </div>\n</template>\n<style module>\n.block {\n width: 100%;\n display: flex;\n gap: 4px;\n justify-content: center;\n height: 72px;\n align-items: center;\n}\n.operand {\n border-radius: 16px;\n width: 64px;\n height: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n font-weight: 600;\n\n color: var(--txt-03);\n border: 1px solid var(--color-div-grey);\n background: transparent;\n cursor: pointer;\n}\n.operand.active {\n color: var(--txt-01);\n background: #fff;\n border: 1px solid var(--txt-01);\n}\n</style>\n"],"names":["props","__props","OPTIONS"],"mappings":";;;;;;;;;AAGA,UAAMA,IAAQC,GAMRC,IAAqB,CAAC,OAAO,IAAI;;;;;;;;;;;;"}
1
+ {"version":3,"file":"OperandButton.vue2.js","sources":["../../../src/components/PlAdvancedFilter/OperandButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { Operand } from './types';\n\nconst props = defineProps<{\n active: Operand;\n disabled: boolean;\n onSelect: (op: Operand) => void;\n}>();\n\nconst OPTIONS: Operand[] = ['and', 'or'];\n</script>\n<template>\n <div v-bind=\"$attrs\" :class=\"$style.block\">\n <div\n v-for=\"op in OPTIONS\"\n :key=\"op\"\n :class=\"[$style.operand, {[$style.active]: op === props.active && !props.disabled}]\"\n @click=\"!props.disabled && props.onSelect(op)\"\n >\n {{ op }}\n </div>\n </div>\n</template>\n<style module>\n.block {\n width: 100%;\n display: flex;\n gap: 4px;\n justify-content: center;\n height: 72px;\n align-items: center;\n}\n.operand {\n border-radius: 16px;\n width: 64px;\n height: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n font-weight: 600;\n\n color: var(--txt-03);\n border: 1px solid var(--color-div-grey);\n background: transparent;\n cursor: pointer;\n}\n.operand.active {\n color: var(--txt-01);\n background: #fff;\n border: 1px solid var(--txt-01);\n}\n</style>\n"],"names":["props","__props","OPTIONS","_createElementBlock","_mergeProps","_ctx","$style","_Fragment","_renderList","op","_createElementVNode","$event","_hoisted_1"],"mappings":";;;;;;;;;AAGA,UAAMA,IAAQC,GAMRC,IAAqB,CAAC,OAAO,IAAI;2BAGrCC,EASM,OATNC,EASMC,EAAA,QATa;AAAA,MAAG,OAAOC,EAAAA,OAAO;AAAA,IAAA;YAClCH,EAOMI,GAAA,MAAAC,EANSN,GAAO,CAAbO,MADTC,EAOM,OAAA;AAAA,QALH,KAAKD;AAAA,QACL,UAAQH,EAAAA,OAAO,SAAO,EAAA,CAAIA,SAAO,MAAM,GAAGG,MAAOT,EAAM,UAAM,CAAKA,EAAM,SAAA,CAAQ,CAAA;AAAA,QAChF,SAAK,CAAAW,MAAA,CAAGX,EAAM,YAAYA,EAAM,SAASS,CAAE;AAAA,MAAA,KAEzCA,CAAE,GAAA,IAAAG,CAAA;;;;"}
@@ -1,10 +1,10 @@
1
- import { defineComponent as B, mergeModels as L, useModel as z, computed as A, createElementBlock as m, openBlock as r, createVNode as d, unref as l, withCtx as i, normalizeClass as g, createElementVNode as v, createBlock as y, createTextVNode as a, Fragment as w, renderList as R } from "vue";
1
+ import { defineComponent as B, mergeModels as L, useModel as z, computed as A, createElementBlock as g, openBlock as r, createVNode as a, unref as l, withCtx as i, normalizeClass as f, createElementVNode as y, createBlock as D, createTextVNode as u, Fragment as w, renderList as R } from "vue";
2
2
  import q from "./SingleFilter.vue.js";
3
- import { PlElementList as c, PlCheckbox as C, PlBtnSecondary as $, PlIcon16 as F } from "@milaboratories/uikit";
4
- import I from "./OperandButton.vue.js";
5
- import { DEFAULT_FILTERS as W, DEFAULT_FILTER_TYPE as Y } from "./constants.js";
6
- import { useInnerModel as j, createNewGroup as H, isValidColumnId as U, toOuterModel as J, toInnerModel as K } from "./utils.js";
7
- const Q = ["onDrop"], te = /* @__PURE__ */ B({
3
+ import { PlElementList as T, PlCheckbox as C, PlBtnSecondary as $, PlIcon16 as F } from "@milaboratories/uikit";
4
+ import x from "./OperandButton.vue.js";
5
+ import { DEFAULT_FILTERS as I, DEFAULT_FILTER_TYPE as W } from "./constants.js";
6
+ import { useInnerModel as Y, createNewGroup as j, isValidColumnId as U, toOuterModel as H, toInnerModel as J } from "./utils.js";
7
+ const K = ["onDrop"], te = /* @__PURE__ */ B({
8
8
  __name: "PlAdvancedFilter",
9
9
  props: /* @__PURE__ */ L({
10
10
  items: {},
@@ -16,20 +16,20 @@ const Q = ["onDrop"], te = /* @__PURE__ */ B({
16
16
  modelModifiers: {}
17
17
  }),
18
18
  emits: ["update:modelValue"],
19
- setup(D) {
20
- const E = D, M = z(D, "modelValue"), s = j(K, J, M), b = A(() => {
19
+ setup(d) {
20
+ const E = d, M = z(d, "modelValue"), s = Y(J, H, M), c = A(() => {
21
21
  var o;
22
22
  return (o = E.items[0]) == null ? void 0 : o.id;
23
- }), V = [{
23
+ }), b = [{
24
24
  id: "empty",
25
25
  not: !1,
26
26
  operand: "and",
27
27
  filters: [],
28
28
  expanded: !0
29
29
  }];
30
- function k(o, e) {
30
+ function V(o, e) {
31
31
  s.value.groups[o].filters.push({
32
- ...W[Y],
32
+ ...I[W],
33
33
  column: e
34
34
  });
35
35
  }
@@ -39,29 +39,29 @@ const Q = ["onDrop"], te = /* @__PURE__ */ B({
39
39
  function N(o) {
40
40
  s.value.groups = s.value.groups.filter((e, t) => t !== o);
41
41
  }
42
- function G(o) {
43
- const e = H(o);
42
+ function k(o) {
43
+ const e = j(o);
44
44
  s.value.groups.push(e);
45
45
  }
46
46
  function O(o, e) {
47
47
  const t = e.dataTransfer;
48
48
  if (t != null && t.getData("text/plain")) {
49
49
  const n = t.getData("text/plain");
50
- U(n) && k(o, n);
50
+ U(n) && V(o, n);
51
51
  }
52
52
  }
53
53
  function S(o) {
54
54
  const e = o.dataTransfer;
55
55
  if (e != null && e.getData("text/plain")) {
56
56
  const t = e.getData("text/plain");
57
- U(t) && G(t);
57
+ U(t) && k(t);
58
58
  }
59
59
  }
60
- function T(o) {
60
+ function G(o) {
61
61
  o.preventDefault();
62
62
  }
63
- return (o, e) => (r(), m("div", null, [
64
- d(l(c), {
63
+ return (o, e) => (r(), g("div", null, [
64
+ a(l(T), {
65
65
  items: l(s).groups,
66
66
  "onUpdate:items": e[0] || (e[0] = (t) => l(s).groups = t),
67
67
  "get-item-key": (t) => t.id,
@@ -77,61 +77,61 @@ const Q = ["onDrop"], te = /* @__PURE__ */ B({
77
77
  t.expanded = !t.expanded;
78
78
  }
79
79
  }, {
80
- "item-title": i(() => e[3] || (e[3] = [
81
- a(" Filter group ")
82
- ])),
80
+ "item-title": i(() => [...e[3] || (e[3] = [
81
+ u(" Filter group ", -1)
82
+ ])]),
83
83
  "item-content": i(({ item: t, index: n }) => [
84
- v("div", {
85
- class: g(o.$style.groupContent),
84
+ y("div", {
85
+ class: f(o.$style.groupContent),
86
86
  dropzone: "true",
87
- onDrop: (u) => O(n, u),
88
- onDragover: T
87
+ onDrop: (m) => O(n, m),
88
+ onDragover: G
89
89
  }, [
90
- d(l(C), {
90
+ a(l(C), {
91
91
  modelValue: t.not,
92
- "onUpdate:modelValue": (u) => t.not = u
92
+ "onUpdate:modelValue": (m) => t.not = m
93
93
  }, {
94
- default: i(() => e[4] || (e[4] = [
95
- a("NOT")
96
- ])),
97
- _: 2
98
- }, 1032, ["modelValue", "onUpdate:modelValue"]),
99
- (r(!0), m(w, null, R(t.filters, (u, p) => (r(), y(q, {
94
+ default: i(() => [...e[4] || (e[4] = [
95
+ u("NOT", -1)
96
+ ])]),
97
+ _: 1
98
+ }, 8, ["modelValue", "onUpdate:modelValue"]),
99
+ (r(!0), g(w, null, R(t.filters, (m, p) => (r(), D(q, {
100
100
  key: p,
101
101
  modelValue: t.filters[p],
102
- "onUpdate:modelValue": (f) => t.filters[p] = f,
102
+ "onUpdate:modelValue": (v) => t.filters[p] = v,
103
103
  operand: t.operand,
104
- "column-options": o.items,
105
- "get-suggest-model": o.getSuggestModel,
106
- "get-suggest-options": o.getSuggestOptions,
107
- "enable-dnd": o.enableDnd,
104
+ "column-options": d.items,
105
+ "get-suggest-model": d.getSuggestModel,
106
+ "get-suggest-options": d.getSuggestOptions,
107
+ "enable-dnd": d.enableDnd,
108
108
  "is-last": p === t.filters.length - 1,
109
- "on-change-operand": (f) => t.operand = f,
109
+ "on-change-operand": (v) => t.operand = v,
110
110
  "on-delete": () => P(n, p)
111
111
  }, null, 8, ["modelValue", "onUpdate:modelValue", "operand", "column-options", "get-suggest-model", "get-suggest-options", "enable-dnd", "is-last", "on-change-operand", "on-delete"]))), 128)),
112
- o.enableDnd ? (r(), m("div", {
112
+ d.enableDnd ? (r(), g("div", {
113
113
  key: 0,
114
- class: g(o.$style.dropzone)
115
- }, e[5] || (e[5] = [
116
- v("div", null, "Drop dimensions here", -1)
117
- ]), 2)) : (r(), y(l($), {
114
+ class: f(o.$style.dropzone)
115
+ }, [...e[5] || (e[5] = [
116
+ y("div", null, "Drop dimensions here", -1)
117
+ ])], 2)) : (r(), D(l($), {
118
118
  key: 1,
119
- onClick: (u) => k(n, b.value)
119
+ onClick: (m) => V(n, c.value)
120
120
  }, {
121
121
  default: i(() => [
122
- d(l(F), {
122
+ a(l(F), {
123
123
  name: "add",
124
124
  style: { "margin-right": "8px" }
125
125
  }),
126
- e[6] || (e[6] = a("Add column "))
126
+ e[6] || (e[6] = u("Add column ", -1))
127
127
  ]),
128
- _: 2
129
- }, 1032, ["onClick"]))
130
- ], 42, Q)
128
+ _: 1
129
+ }, 8, ["onClick"]))
130
+ ], 42, K)
131
131
  ]),
132
132
  "item-after": i(({ index: t }) => [
133
- d(I, {
134
- class: g(o.$style.buttonWrapper),
133
+ a(x, {
134
+ class: f(o.$style.buttonWrapper),
135
135
  active: l(s).operand,
136
136
  disabled: t === l(s).groups.length - 1,
137
137
  "on-select": (n) => l(s).operand = n
@@ -139,9 +139,9 @@ const Q = ["onDrop"], te = /* @__PURE__ */ B({
139
139
  ]),
140
140
  _: 1
141
141
  }, 8, ["items", "get-item-key", "item-class", "item-class-content", "item-class-title", "is-expanded", "on-expand"]),
142
- d(l(c), {
143
- items: V,
144
- "onUpdate:items": e[2] || (e[2] = (t) => V = t),
142
+ a(l(T), {
143
+ items: b,
144
+ "onUpdate:items": e[2] || (e[2] = (t) => b = t),
145
145
  "get-item-key": (t) => t.id,
146
146
  "item-class": o.$style.filterGroup,
147
147
  "item-class-content": o.$style.filterGroupContent,
@@ -153,37 +153,37 @@ const Q = ["onDrop"], te = /* @__PURE__ */ B({
153
153
  disablePinning: !0,
154
154
  dropzone: "true",
155
155
  onDrop: S,
156
- onDragover: T
156
+ onDragover: G
157
157
  }, {
158
- "item-title": i(() => e[7] || (e[7] = [
159
- a("Filter group")
160
- ])),
158
+ "item-title": i(() => [...e[7] || (e[7] = [
159
+ u("Filter group", -1)
160
+ ])]),
161
161
  "item-content": i(({ item: t }) => [
162
- d(l(C), {
162
+ a(l(C), {
163
163
  modelValue: t.not,
164
164
  "onUpdate:modelValue": (n) => t.not = n,
165
165
  disabled: ""
166
166
  }, {
167
- default: i(() => e[8] || (e[8] = [
168
- a("NOT")
169
- ])),
170
- _: 2
171
- }, 1032, ["modelValue", "onUpdate:modelValue"]),
172
- o.enableDnd ? (r(), m("div", {
167
+ default: i(() => [...e[8] || (e[8] = [
168
+ u("NOT", -1)
169
+ ])]),
170
+ _: 1
171
+ }, 8, ["modelValue", "onUpdate:modelValue"]),
172
+ d.enableDnd ? (r(), g("div", {
173
173
  key: 0,
174
- class: g(o.$style.dropzone)
175
- }, e[9] || (e[9] = [
176
- v("div", null, "Drop dimensions here", -1)
177
- ]), 2)) : (r(), y(l($), {
174
+ class: f(o.$style.dropzone)
175
+ }, [...e[9] || (e[9] = [
176
+ y("div", null, "Drop dimensions here", -1)
177
+ ])], 2)) : (r(), D(l($), {
178
178
  key: 1,
179
- onClick: e[1] || (e[1] = (n) => G(b.value))
179
+ onClick: e[1] || (e[1] = (n) => k(c.value))
180
180
  }, {
181
181
  default: i(() => [
182
- d(l(F), {
182
+ a(l(F), {
183
183
  name: "add",
184
184
  style: { "margin-right": "8px" }
185
185
  }),
186
- e[10] || (e[10] = a("Add column "))
186
+ e[10] || (e[10] = u("Add column ", -1))
187
187
  ]),
188
188
  _: 1
189
189
  }))
@@ -1 +1 @@
1
- {"version":3,"file":"PlAdvancedFilter.vue2.js","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport SingleFilter from './SingleFilter.vue';\nimport { PlBtnSecondary, PlElementList, PlCheckbox, PlIcon16 } from '@milaboratories/uikit';\nimport type { PlAdvancedFilterColumnId, CommonFilterSpec, Group, PlAdvancedFilterUI, SourceOptionInfo } from './types';\nimport { computed } from 'vue';\nimport OperandButton from './OperandButton.vue';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from './constants';\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport { createNewGroup, isValidColumnId, toInnerModel, toOuterModel, useInnerModel } from './utils';\n\nconst props = withDefaults(defineProps<{\n /** List of ids of sources (columns, axes) that can be selected in filters */\n items: SourceOptionInfo[];\n /** If true - new filter can be added by droppind element into filter group; else new column is added by button click */\n enableDnd?: boolean;\n /** Loading function for unique values for Equal/InSet filters and fixed axes options. */\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>[]>) |\n ((params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>[]);\n /** Loading function for label of selected value for Equal/InSet filters and fixed axes options. */\n getSuggestModel: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>>) |\n ((params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>);\n}>(), { enableDnd: false });\n\nconst model = defineModel<CommonFilterSpec>({ required: true });\nconst innerModel = useInnerModel<CommonFilterSpec, PlAdvancedFilterUI>(toInnerModel, toOuterModel, model);\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: Group[] = [{\n id: 'empty',\n not: false,\n operand: 'and',\n filters: [],\n expanded: true,\n}];\n\nfunction addColumnToGroup(groupIdx: number, selectedSourceId: PlAdvancedFilterColumnId) {\n innerModel.value.groups[groupIdx].filters.push({\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId,\n });\n}\n\nfunction removeFilterFromGroup(groupIdx: number, filterIdx: number) {\n if (innerModel.value.groups[groupIdx].filters.length === 1 && filterIdx === 0) {\n removeGroup(groupIdx);\n } else {\n innerModel.value.groups[groupIdx].filters = innerModel.value.groups[groupIdx].filters.filter((_v, idx) => idx !== filterIdx);\n }\n}\n\nfunction removeGroup(groupIdx: number) {\n innerModel.value.groups = innerModel.value.groups.filter((v, idx) => idx !== groupIdx);\n}\nfunction addGroup(selectedSourceId: PlAdvancedFilterColumnId) {\n const newGroup = createNewGroup(selectedSourceId);\n innerModel.value.groups.push(newGroup);\n}\n\nfunction handleDropToExistingGroup(groupIdx: number, event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addColumnToGroup(groupIdx, draggedId);\n }\n }\n}\nfunction handleDropToNewGroup(event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addGroup(draggedId);\n }\n }\n}\nfunction dragOver(event: DragEvent) {\n event.preventDefault();\n}\n</script>\n<template>\n <div>\n <PlElementList\n v-model:items=\"innerModel.groups\"\n :get-item-key=\"(group) => group.id\"\n\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"(group) => group.expanded\"\n\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n\n :on-expand=\"(group) => { group.expanded = !group.expanded}\"\n >\n <template #item-title>\n Filter group\n </template>\n <template #item-content=\"{ item, index }\">\n <div\n :class=\"$style.groupContent\" dropzone=\"true\"\n @drop=\"(event) => handleDropToExistingGroup(index, event)\"\n @dragover=\"dragOver\"\n >\n <PlCheckbox v-model=\"item.not\">NOT</PlCheckbox>\n <SingleFilter\n v-for=\"(filter, filterIdx) in item.filters\"\n :key=\"filterIdx\"\n v-model=\"item.filters[filterIdx]\"\n :operand=\"item.operand\"\n :column-options=\"items\"\n :get-suggest-model=\"getSuggestModel\"\n :get-suggest-options=\"getSuggestOptions\"\n :enable-dnd=\"enableDnd\"\n :is-last=\"filterIdx === item.filters.length - 1\"\n :on-change-operand=\"(v) => item.operand = v\"\n :on-delete=\"() => removeFilterFromGroup(index, filterIdx)\"\n />\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else @click=\"addColumnToGroup(index, firstColumnId)\">\n <PlIcon16 name=\"add\" style=\"margin-right: 8px\"/>Add column\n </PlBtnSecondary>\n </div>\n </template>\n <template #item-after=\"{ index }\">\n <OperandButton\n :class=\"$style.buttonWrapper\"\n :active=\"innerModel.operand\"\n :disabled=\"index === innerModel.groups.length - 1\"\n :on-select=\"(v) => innerModel.operand = v\"\n />\n </template>\n </PlElementList>\n\n <!-- Last group - always exists, always empty, just for adding new groups -->\n <PlElementList\n v-model:items=\"emptyGroup\"\n :get-item-key=\"(group) => group.id\"\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"() => true\"\n\n :disableDragging=\"true\"\n :disableRemoving=\"true\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n dropzone=\"true\"\n @drop=\"handleDropToNewGroup\"\n @dragover=\"dragOver\"\n >\n <template #item-title>Filter group</template>\n <template #item-content=\"{item}\">\n <PlCheckbox v-model=\"item.not\" disabled >NOT</PlCheckbox>\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else @click=\"addGroup(firstColumnId)\">\n <PlIcon16 name=\"add\" style=\"margin-right: 8px\"/>Add column\n </PlBtnSecondary>\n </template>\n </PlElementList>\n </div>\n</template>\n<style module>\n .filterGroup {\n background: var(--bg-base-light);\n }\n .filterGroup:hover {\n background: rgba(99, 224, 36, 0.12);\n }\n .filterGroupTitle {\n background: none;\n }\n .groupContent {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .dropzone {\n border-radius: 6px;\n border: 1.5px dashed var(--color-div-grey);\n color: var(--txt-03);\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n height: 40px;\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .buttonWrapper {\n height: 72px;\n display: flex;\n align-items: center;\n }\n :global(.sortable-chosen) .buttonWrapper {\n visibility: hidden;\n }\n</style>\n"],"names":["props","__props","model","_useModel","innerModel","useInnerModel","toInnerModel","toOuterModel","firstColumnId","computed","_a","emptyGroup","addColumnToGroup","groupIdx","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","removeFilterFromGroup","filterIdx","removeGroup","_v","idx","v","addGroup","newGroup","createNewGroup","handleDropToExistingGroup","event","dataTransfer","draggedId","isValidColumnId","handleDropToNewGroup","dragOver"],"mappings":";;;;;;;;;;;;;;;;;;;AAUA,UAAMA,IAAQC,GAaRC,IAAQC,iBAAgD,GACxDC,IAAaC,EAAoDC,GAAcC,GAAcL,CAAK,GAElGM,IAAgBC,EAAS,MAAA;;AAAM,cAAAC,IAAAV,EAAM,MAAM,CAAC,MAAb,gBAAAU,EAAgB;AAAA,KAAE,GACjDC,IAAsB,CAAC;AAAA,MAC3B,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,SAAS;AAAA,MACT,SAAS,CAAA;AAAA,MACT,UAAU;AAAA,IAAA,CACX;AAED,aAASC,EAAiBC,GAAkBC,GAA4C;AACtF,MAAAV,EAAW,MAAM,OAAOS,CAAQ,EAAE,QAAQ,KAAK;AAAA,QAC7C,GAAGE,EAAgBC,CAAmB;AAAA,QACtC,QAAQF;AAAA,MAAA,CACT;AAAA,IACH;AAEA,aAASG,EAAsBJ,GAAkBK,GAAmB;AAClE,MAAId,EAAW,MAAM,OAAOS,CAAQ,EAAE,QAAQ,WAAW,KAAKK,MAAc,IAC1EC,EAAYN,CAAQ,IAEpBT,EAAW,MAAM,OAAOS,CAAQ,EAAE,UAAUT,EAAW,MAAM,OAAOS,CAAQ,EAAE,QAAQ,OAAO,CAACO,GAAIC,MAAQA,MAAQH,CAAS;AAAA,IAE/H;AAEA,aAASC,EAAYN,GAAkB;AACrC,MAAAT,EAAW,MAAM,SAASA,EAAW,MAAM,OAAO,OAAO,CAACkB,GAAGD,MAAQA,MAAQR,CAAQ;AAAA,IACvF;AACA,aAASU,EAAST,GAA4C;AAC5D,YAAMU,IAAWC,EAAeX,CAAgB;AAChD,MAAAV,EAAW,MAAM,OAAO,KAAKoB,CAAQ;AAAA,IACvC;AAEA,aAASE,EAA0Bb,GAAkBc,GAAkB;AACrE,YAAMC,IAAeD,EAAM;AAC3B,UAAIC,KAAA,QAAAA,EAAc,QAAQ,eAAe;AACvC,cAAMC,IAAYD,EAAa,QAAQ,YAAY;AACnD,QAAIE,EAAgBD,CAAS,KAC3BjB,EAAiBC,GAAUgB,CAAS;AAAA,MAExC;AAAA,IACF;AACA,aAASE,EAAqBJ,GAAkB;AAC9C,YAAMC,IAAeD,EAAM;AAC3B,UAAIC,KAAA,QAAAA,EAAc,QAAQ,eAAe;AACvC,cAAMC,IAAYD,EAAa,QAAQ,YAAY;AACnD,QAAIE,EAAgBD,CAAS,KAC3BN,EAASM,CAAS;AAAA,MAEtB;AAAA,IACF;AACA,aAASG,EAASL,GAAkB;AAClC,MAAAA,EAAM,eAAA;AAAA,IACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlAdvancedFilter.vue2.js","sources":["../../../src/components/PlAdvancedFilter/PlAdvancedFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport SingleFilter from './SingleFilter.vue';\nimport { PlBtnSecondary, PlElementList, PlCheckbox, PlIcon16 } from '@milaboratories/uikit';\nimport type { PlAdvancedFilterColumnId, CommonFilterSpec, Group, PlAdvancedFilterUI, SourceOptionInfo } from './types';\nimport { computed } from 'vue';\nimport OperandButton from './OperandButton.vue';\nimport { DEFAULT_FILTER_TYPE, DEFAULT_FILTERS } from './constants';\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport { createNewGroup, isValidColumnId, toInnerModel, toOuterModel, useInnerModel } from './utils';\n\nconst props = withDefaults(defineProps<{\n /** List of ids of sources (columns, axes) that can be selected in filters */\n items: SourceOptionInfo[];\n /** If true - new filter can be added by droppind element into filter group; else new column is added by button click */\n enableDnd?: boolean;\n /** Loading function for unique values for Equal/InSet filters and fixed axes options. */\n getSuggestOptions: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>[]>) |\n ((params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>[]);\n /** Loading function for label of selected value for Equal/InSet filters and fixed axes options. */\n getSuggestModel: (params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => (Promise<ListOptionBase<string | number>>) |\n ((params: { columnId: PlAdvancedFilterColumnId; searchStr: string; axisIdx?: number }) => ListOptionBase<string | number>);\n}>(), { enableDnd: false });\n\nconst model = defineModel<CommonFilterSpec>({ required: true });\nconst innerModel = useInnerModel<CommonFilterSpec, PlAdvancedFilterUI>(toInnerModel, toOuterModel, model);\n\nconst firstColumnId = computed(() => props.items[0]?.id);\nconst emptyGroup: Group[] = [{\n id: 'empty',\n not: false,\n operand: 'and',\n filters: [],\n expanded: true,\n}];\n\nfunction addColumnToGroup(groupIdx: number, selectedSourceId: PlAdvancedFilterColumnId) {\n innerModel.value.groups[groupIdx].filters.push({\n ...DEFAULT_FILTERS[DEFAULT_FILTER_TYPE],\n column: selectedSourceId,\n });\n}\n\nfunction removeFilterFromGroup(groupIdx: number, filterIdx: number) {\n if (innerModel.value.groups[groupIdx].filters.length === 1 && filterIdx === 0) {\n removeGroup(groupIdx);\n } else {\n innerModel.value.groups[groupIdx].filters = innerModel.value.groups[groupIdx].filters.filter((_v, idx) => idx !== filterIdx);\n }\n}\n\nfunction removeGroup(groupIdx: number) {\n innerModel.value.groups = innerModel.value.groups.filter((v, idx) => idx !== groupIdx);\n}\nfunction addGroup(selectedSourceId: PlAdvancedFilterColumnId) {\n const newGroup = createNewGroup(selectedSourceId);\n innerModel.value.groups.push(newGroup);\n}\n\nfunction handleDropToExistingGroup(groupIdx: number, event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addColumnToGroup(groupIdx, draggedId);\n }\n }\n}\nfunction handleDropToNewGroup(event: DragEvent) {\n const dataTransfer = event.dataTransfer;\n if (dataTransfer?.getData('text/plain')) {\n const draggedId = dataTransfer.getData('text/plain');\n if (isValidColumnId(draggedId)) {\n addGroup(draggedId);\n }\n }\n}\nfunction dragOver(event: DragEvent) {\n event.preventDefault();\n}\n</script>\n<template>\n <div>\n <PlElementList\n v-model:items=\"innerModel.groups\"\n :get-item-key=\"(group) => group.id\"\n\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"(group) => group.expanded\"\n\n :disableDragging=\"false\"\n :disableRemoving=\"false\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n\n :on-expand=\"(group) => { group.expanded = !group.expanded}\"\n >\n <template #item-title>\n Filter group\n </template>\n <template #item-content=\"{ item, index }\">\n <div\n :class=\"$style.groupContent\" dropzone=\"true\"\n @drop=\"(event) => handleDropToExistingGroup(index, event)\"\n @dragover=\"dragOver\"\n >\n <PlCheckbox v-model=\"item.not\">NOT</PlCheckbox>\n <SingleFilter\n v-for=\"(filter, filterIdx) in item.filters\"\n :key=\"filterIdx\"\n v-model=\"item.filters[filterIdx]\"\n :operand=\"item.operand\"\n :column-options=\"items\"\n :get-suggest-model=\"getSuggestModel\"\n :get-suggest-options=\"getSuggestOptions\"\n :enable-dnd=\"enableDnd\"\n :is-last=\"filterIdx === item.filters.length - 1\"\n :on-change-operand=\"(v) => item.operand = v\"\n :on-delete=\"() => removeFilterFromGroup(index, filterIdx)\"\n />\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else @click=\"addColumnToGroup(index, firstColumnId)\">\n <PlIcon16 name=\"add\" style=\"margin-right: 8px\"/>Add column\n </PlBtnSecondary>\n </div>\n </template>\n <template #item-after=\"{ index }\">\n <OperandButton\n :class=\"$style.buttonWrapper\"\n :active=\"innerModel.operand\"\n :disabled=\"index === innerModel.groups.length - 1\"\n :on-select=\"(v) => innerModel.operand = v\"\n />\n </template>\n </PlElementList>\n\n <!-- Last group - always exists, always empty, just for adding new groups -->\n <PlElementList\n v-model:items=\"emptyGroup\"\n :get-item-key=\"(group) => group.id\"\n :item-class=\"$style.filterGroup\"\n :item-class-content=\"$style.filterGroupContent\"\n :item-class-title=\"$style.filterGroupTitle\"\n\n :is-expanded=\"() => true\"\n\n :disableDragging=\"true\"\n :disableRemoving=\"true\"\n :disableToggling=\"true\"\n :disablePinning=\"true\"\n dropzone=\"true\"\n @drop=\"handleDropToNewGroup\"\n @dragover=\"dragOver\"\n >\n <template #item-title>Filter group</template>\n <template #item-content=\"{item}\">\n <PlCheckbox v-model=\"item.not\" disabled >NOT</PlCheckbox>\n <div v-if=\"enableDnd\" :class=\"$style.dropzone\">\n <div>Drop dimensions here</div>\n </div>\n <PlBtnSecondary v-else @click=\"addGroup(firstColumnId)\">\n <PlIcon16 name=\"add\" style=\"margin-right: 8px\"/>Add column\n </PlBtnSecondary>\n </template>\n </PlElementList>\n </div>\n</template>\n<style module>\n .filterGroup {\n background: var(--bg-base-light);\n }\n .filterGroup:hover {\n background: rgba(99, 224, 36, 0.12);\n }\n .filterGroupTitle {\n background: none;\n }\n .groupContent {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .dropzone {\n border-radius: 6px;\n border: 1.5px dashed var(--color-div-grey);\n color: var(--txt-03);\n font-family: Manrope;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n height: 40px;\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .buttonWrapper {\n height: 72px;\n display: flex;\n align-items: center;\n }\n :global(.sortable-chosen) .buttonWrapper {\n visibility: hidden;\n }\n</style>\n"],"names":["props","__props","model","_useModel","innerModel","useInnerModel","toInnerModel","toOuterModel","firstColumnId","computed","_a","emptyGroup","addColumnToGroup","groupIdx","selectedSourceId","DEFAULT_FILTERS","DEFAULT_FILTER_TYPE","removeFilterFromGroup","filterIdx","removeGroup","_v","idx","v","addGroup","newGroup","createNewGroup","handleDropToExistingGroup","event","dataTransfer","draggedId","isValidColumnId","handleDropToNewGroup","dragOver","_createElementBlock","_createVNode","_unref","PlElementList","_cache","$event","group","$style","_withCtx","item","index","_createElementVNode","_normalizeClass","PlCheckbox","_openBlock","_Fragment","filter","_createBlock","SingleFilter","PlBtnSecondary","PlIcon16","OperandButton"],"mappings":"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"}