@platforma-sdk/ui-vue 1.84.9 → 1.84.14

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 (185) hide show
  1. package/.turbo/turbo-build.log +68 -68
  2. package/.turbo/turbo-formatter$colon$check.log +2 -2
  3. package/.turbo/turbo-linter$colon$check.log +2 -2
  4. package/.turbo/turbo-types$colon$check.log +1 -1
  5. package/CHANGELOG.md +19 -0
  6. package/dist/components/BlockLayout.js.map +1 -1
  7. package/dist/components/BlockLayout.style.js.map +1 -1
  8. package/dist/components/BlockLayout.vue.d.ts.map +1 -1
  9. package/dist/components/BlockLayout.vue2.js +5 -1
  10. package/dist/components/BlockLayout.vue2.js.map +1 -1
  11. package/dist/components/BlockLoader.js.map +1 -1
  12. package/dist/components/BlockLoader.vue.d.ts.map +1 -1
  13. package/dist/components/BlockLoader.vue2.js +2 -0
  14. package/dist/components/BlockLoader.vue2.js.map +1 -1
  15. package/dist/components/LoaderPage.js +4 -1
  16. package/dist/components/LoaderPage.js.map +1 -1
  17. package/dist/components/LoaderPage.vue.d.ts.map +1 -1
  18. package/dist/components/NotFound.js.map +1 -1
  19. package/dist/components/NotFound.vue.d.ts.map +1 -1
  20. package/dist/components/NotFound.vue2.js +11 -5
  21. package/dist/components/NotFound.vue2.js.map +1 -1
  22. package/dist/components/PlAdvancedFilter/FilterEditor.js.map +1 -1
  23. package/dist/components/PlAdvancedFilter/FilterEditor.style.js.map +1 -1
  24. package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts.map +1 -1
  25. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +26 -2
  26. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
  27. package/dist/components/PlAdvancedFilter/OperandButton.js.map +1 -1
  28. package/dist/components/PlAdvancedFilter/OperandButton.style.js.map +1 -1
  29. package/dist/components/PlAdvancedFilter/OperandButton.vue.d.ts.map +1 -1
  30. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js +2 -1
  31. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  32. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js.map +1 -1
  33. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js.map +1 -1
  34. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts.map +1 -1
  35. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +70 -61
  36. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  37. package/dist/components/PlAgCellFile/PlAgCellFile.js.map +1 -1
  38. package/dist/components/PlAgCellFile/PlAgCellFile.vue.d.ts.map +1 -1
  39. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js +5 -1
  40. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js.map +1 -1
  41. package/dist/components/PlAgCellProgress/PlAgCellProgress.js.map +1 -1
  42. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.d.ts.map +1 -1
  43. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js +6 -6
  44. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js.map +1 -1
  45. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.js.map +1 -1
  46. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.d.ts.map +1 -1
  47. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js +8 -2
  48. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js.map +1 -1
  49. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.js.map +1 -1
  50. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.d.ts.map +1 -1
  51. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js +4 -1
  52. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js.map +1 -1
  53. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.js.map +1 -1
  54. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.d.ts.map +1 -1
  55. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js +7 -2
  56. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js.map +1 -1
  57. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js.map +1 -1
  58. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.d.ts.map +1 -1
  59. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js +28 -20
  60. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js.map +1 -1
  61. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.js.map +1 -1
  62. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.d.ts.map +1 -1
  63. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js +1 -0
  64. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js.map +1 -1
  65. package/dist/components/PlAgDataTable/PlAgDataTableSheets.js.map +1 -1
  66. package/dist/components/PlAgDataTable/PlAgDataTableSheets.style.js.map +1 -1
  67. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue.d.ts.map +1 -1
  68. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +2 -0
  69. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  70. package/dist/components/PlAgDataTable/PlAgDataTableV2.js.map +1 -1
  71. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js.map +1 -1
  72. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
  73. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +5 -1
  74. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  75. package/dist/components/PlAgDataTable/PlAgOverlayLoading.js.map +1 -1
  76. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.d.ts.map +1 -1
  77. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js +12 -2
  78. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js.map +1 -1
  79. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.js.map +1 -1
  80. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.d.ts.map +1 -1
  81. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js +7 -1
  82. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js.map +1 -1
  83. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js.map +1 -1
  84. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js.map +1 -1
  85. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.d.ts.map +1 -1
  86. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +35 -27
  87. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
  88. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.js.map +1 -1
  89. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.d.ts.map +1 -1
  90. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js +12 -7
  91. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js.map +1 -1
  92. package/dist/components/PlAgRowNumHeader.js.map +1 -1
  93. package/dist/components/PlAgRowNumHeader.vue.d.ts.map +1 -1
  94. package/dist/components/PlAgRowNumHeader.vue2.js +14 -7
  95. package/dist/components/PlAgRowNumHeader.vue2.js.map +1 -1
  96. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.js.map +1 -1
  97. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.d.ts.map +1 -1
  98. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js +8 -1
  99. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js.map +1 -1
  100. package/dist/components/PlAnnotations/components/AnnotationsSidebar.js.map +1 -1
  101. package/dist/components/PlAnnotations/components/AnnotationsSidebar.style.js.map +1 -1
  102. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue.d.ts.map +1 -1
  103. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +14 -3
  104. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  105. package/dist/components/PlAnnotations/components/FilterSidebar.js.map +1 -1
  106. package/dist/components/PlAnnotations/components/FilterSidebar.style.js.map +1 -1
  107. package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts.map +1 -1
  108. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +11 -2
  109. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  110. package/dist/components/PlAnnotations/components/PlAnnotations.js.map +1 -1
  111. package/dist/components/PlAnnotations/components/PlAnnotations.style.js.map +1 -1
  112. package/dist/components/PlAnnotations/components/PlAnnotations.vue.d.ts.map +1 -1
  113. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js +1 -1
  114. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  115. package/dist/components/PlAnnotations/components/PlAnnotationsModal.js.map +1 -1
  116. package/dist/components/PlAnnotations/components/PlAnnotationsModal.style.js.map +1 -1
  117. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue.d.ts.map +1 -1
  118. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +1 -0
  119. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  120. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.js.map +1 -1
  121. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.d.ts.map +1 -1
  122. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js +16 -2
  123. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js.map +1 -1
  124. package/dist/components/PlBtnExportArchive/Item.js.map +1 -1
  125. package/dist/components/PlBtnExportArchive/Item.style.js.map +1 -1
  126. package/dist/components/PlBtnExportArchive/Item.vue.d.ts.map +1 -1
  127. package/dist/components/PlBtnExportArchive/Item.vue2.js +12 -2
  128. package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
  129. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.js.map +1 -1
  130. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.style.js.map +1 -1
  131. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.d.ts.map +1 -1
  132. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js +7 -1
  133. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
  134. package/dist/components/PlBtnExportArchive/Summary.js.map +1 -1
  135. package/dist/components/PlBtnExportArchive/Summary.style.js.map +1 -1
  136. package/dist/components/PlBtnExportArchive/Summary.vue.d.ts.map +1 -1
  137. package/dist/components/PlBtnExportArchive/Summary.vue2.js +11 -2
  138. package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
  139. package/dist/components/PlDatasetSelector/PlDatasetSelector.js.map +1 -1
  140. package/dist/components/PlDatasetSelector/PlDatasetSelector.vue.d.ts.map +1 -1
  141. package/dist/components/PlDatasetSelector/PlDatasetSelector.vue2.js +1 -0
  142. package/dist/components/PlDatasetSelector/PlDatasetSelector.vue2.js.map +1 -1
  143. package/dist/components/PlTableFastSearch/PlTableFastSearch.js.map +1 -1
  144. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue.d.ts.map +1 -1
  145. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js +1 -0
  146. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js.map +1 -1
  147. package/dist/components/PlTableFilters/PlTableFiltersV2.js.map +1 -1
  148. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js.map +1 -1
  149. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts.map +1 -1
  150. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +12 -2
  151. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  152. package/package.json +6 -6
  153. package/src/components/BlockLayout.vue +4 -2
  154. package/src/components/BlockLoader.vue +2 -1
  155. package/src/components/LoaderPage.vue +1 -1
  156. package/src/components/NotFound.vue +7 -3
  157. package/src/components/PlAdvancedFilter/FilterEditor.vue +36 -6
  158. package/src/components/PlAdvancedFilter/OperandButton.vue +2 -1
  159. package/src/components/PlAdvancedFilter/PlAdvancedFilter.vue +20 -4
  160. package/src/components/PlAgCellFile/PlAgCellFile.vue +2 -1
  161. package/src/components/PlAgCellProgress/PlAgCellProgress.vue +1 -1
  162. package/src/components/PlAgCellStatusTag/PlAgCellStatusTag.vue +2 -2
  163. package/src/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue +13 -3
  164. package/src/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue +13 -3
  165. package/src/components/PlAgColumnHeader/PlAgColumnHeader.vue +24 -6
  166. package/src/components/PlAgCsvExporter/PlAgCsvExporter.vue +6 -1
  167. package/src/components/PlAgDataTable/PlAgDataTableSheets.vue +6 -1
  168. package/src/components/PlAgDataTable/PlAgDataTableV2.vue +2 -1
  169. package/src/components/PlAgDataTable/PlAgOverlayLoading.vue +10 -3
  170. package/src/components/PlAgDataTable/PlAgOverlayNoRows.vue +4 -2
  171. package/src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue +18 -5
  172. package/src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue +5 -1
  173. package/src/components/PlAgRowNumHeader.vue +3 -1
  174. package/src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue +3 -2
  175. package/src/components/PlAnnotations/components/AnnotationsSidebar.vue +13 -4
  176. package/src/components/PlAnnotations/components/FilterSidebar.vue +11 -3
  177. package/src/components/PlAnnotations/components/PlAnnotations.vue +1 -1
  178. package/src/components/PlAnnotations/components/PlAnnotationsModal.vue +1 -0
  179. package/src/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue +34 -7
  180. package/src/components/PlBtnExportArchive/Item.vue +22 -6
  181. package/src/components/PlBtnExportArchive/PlBtnExportArchive.vue +18 -3
  182. package/src/components/PlBtnExportArchive/Summary.vue +15 -5
  183. package/src/components/PlDatasetSelector/PlDatasetSelector.vue +1 -0
  184. package/src/components/PlTableFastSearch/PlTableFastSearch.vue +6 -1
  185. package/src/components/PlTableFilters/PlTableFiltersV2.vue +14 -4
@@ -282,10 +282,11 @@ const stringMatchesError = computed(() => {
282
282
  });
283
283
  </script>
284
284
  <template>
285
- <div :class="$style.filterWrapper">
285
+ <div data-testid="pl-advanced-filter-filter" :class="$style.filterWrapper">
286
286
  <!-- top element - column selector / column label - for all filter types-->
287
287
  <div
288
288
  v-if="enableDnd"
289
+ data-testid="pl-advanced-filter-column-chip"
289
290
  :class="[$style.top, $style.columnChip, { [$style.error]: currentError }]"
290
291
  >
291
292
  <div :class="[$style.typeIcon, { [$style.error]: currentError }]">
@@ -299,7 +300,11 @@ const stringMatchesError = computed(() => {
299
300
  "
300
301
  />
301
302
  </div>
302
- <div :class="$style.titleWrapper" :title="currentOption?.label ?? ''">
303
+ <div
304
+ data-testid="pl-advanced-filter-column-title"
305
+ :class="$style.titleWrapper"
306
+ :title="currentOption?.label ?? ''"
307
+ >
303
308
  <div :class="$style.title">
304
309
  {{
305
310
  inconsistentSourceSelected
@@ -308,12 +313,17 @@ const stringMatchesError = computed(() => {
308
313
  }}
309
314
  </div>
310
315
  </div>
311
- <div :class="$style.closeIcon" @click="onDelete(props.filter.column)">
316
+ <div
317
+ data-testid="pl-advanced-filter-remove"
318
+ :class="$style.closeIcon"
319
+ @click="onDelete(props.filter.column)"
320
+ >
312
321
  <PlIcon16 name="close" />
313
322
  </div>
314
323
  </div>
315
324
  <div v-else :class="$style.top">
316
325
  <PlDropdown
326
+ data-testid="pl-advanced-filter-column"
317
327
  :model-value="columnAsSourceAndFixedAxes.source"
318
328
  :errorStatus="currentError"
319
329
  :options="sourceOptions"
@@ -321,14 +331,23 @@ const stringMatchesError = computed(() => {
321
331
  group-position="top-left"
322
332
  @update:model-value="changeSourceId"
323
333
  />
324
- <div :class="$style.closeButton" @click="onDelete(props.filter.column)">
334
+ <div
335
+ data-testid="pl-advanced-filter-remove"
336
+ :class="$style.closeButton"
337
+ @click="onDelete(props.filter.column)"
338
+ >
325
339
  <PlIcon16 name="close" />
326
340
  </div>
327
341
  </div>
328
342
 
329
- <div v-if="currentOption?.axesToBeFixed?.length" :class="$style.fixedAxesBlock">
343
+ <div
344
+ v-if="currentOption?.axesToBeFixed?.length"
345
+ data-testid="pl-advanced-filter-fixed-axes"
346
+ :class="$style.fixedAxesBlock"
347
+ >
330
348
  <template v-for="value in currentOption?.axesToBeFixed" :key="value.idx">
331
349
  <PlAutocomplete
350
+ data-testid="pl-advanced-filter-fixed-axis"
332
351
  :model-value="columnAsSourceAndFixedAxes.axisFiltersByIndex[value.idx]"
333
352
  :label="value.label"
334
353
  :options-search="
@@ -351,6 +370,7 @@ const stringMatchesError = computed(() => {
351
370
  "
352
371
  >
353
372
  <PlDropdown
373
+ data-testid="pl-advanced-filter-type"
354
374
  :model-value="props.filter.type"
355
375
  :options="filterTypesOptions"
356
376
  :group-position="
@@ -364,14 +384,16 @@ const stringMatchesError = computed(() => {
364
384
  <template v-if="props.filter.type === 'patternFuzzyContainSubsequence'">
365
385
  <div :class="$style.middle">
366
386
  <PlTextField
387
+ data-testid="pl-advanced-filter-value"
367
388
  :model-value="props.filter.value"
368
389
  placeholder="Substring"
369
390
  group-position="middle"
370
391
  @update:model-value="(v) => updateFilterProp('value', v)"
371
392
  />
372
393
  </div>
373
- <div :class="$style.innerSection">
394
+ <div data-testid="pl-advanced-filter-fuzzy-settings" :class="$style.innerSection">
374
395
  <Slider
396
+ data-testid="pl-advanced-filter-max-edits"
375
397
  :model-value="props.filter.maxEdits"
376
398
  :max="5"
377
399
  breakpoints
@@ -379,6 +401,7 @@ const stringMatchesError = computed(() => {
379
401
  @update:model-value="(v) => updateFilterProp('maxEdits', v)"
380
402
  />
381
403
  <PlToggleSwitch
404
+ data-testid="pl-advanced-filter-substitutions-only"
382
405
  :model-value="props.filter.substitutionsOnly"
383
406
  label="Substitutions only"
384
407
  @update:model-value="(v) => updateFilterProp('substitutionsOnly', v)"
@@ -390,6 +413,7 @@ const stringMatchesError = computed(() => {
390
413
  <div :class="$style.bottom">
391
414
  <PlAutocomplete
392
415
  v-if="props.filter.type === 'patternEquals' || props.filter.type === 'patternNotEquals'"
416
+ data-testid="pl-advanced-filter-value"
393
417
  :model-value="props.filter.value"
394
418
  :options-search="
395
419
  (str, type) => getSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str)
@@ -400,6 +424,7 @@ const stringMatchesError = computed(() => {
400
424
  />
401
425
  <PlAutocompleteMulti
402
426
  v-if="props.filter.type === 'inSet' || props.filter.type === 'notInSet'"
427
+ data-testid="pl-advanced-filter-value"
403
428
  :model-value="props.filter.value"
404
429
  :options-search="
405
430
  (str, type) => getMultiSuggestOptionsFn(columnAsSourceAndFixedAxes.source, type, str)
@@ -410,12 +435,14 @@ const stringMatchesError = computed(() => {
410
435
  />
411
436
  <PlNumberField
412
437
  v-if="isNumericFilter(props.filter)"
438
+ data-testid="pl-advanced-filter-value"
413
439
  :model-value="props.filter.x"
414
440
  group-position="bottom"
415
441
  @update:model-value="(v) => updateFilterProp('x', v)"
416
442
  />
417
443
  <PlNumberField
418
444
  v-if="isPositionFilter(props.filter)"
445
+ data-testid="pl-advanced-filter-value"
419
446
  :model-value="props.filter.n"
420
447
  group-position="bottom"
421
448
  @update:model-value="(v) => updateFilterProp('n', v)"
@@ -425,6 +452,7 @@ const stringMatchesError = computed(() => {
425
452
  props.filter.type === 'patternContainSubsequence' ||
426
453
  props.filter.type === 'patternNotContainSubsequence'
427
454
  "
455
+ data-testid="pl-advanced-filter-value"
428
456
  :model-value="props.filter.value"
429
457
  placeholder="Substring"
430
458
  group-position="bottom"
@@ -432,6 +460,7 @@ const stringMatchesError = computed(() => {
432
460
  />
433
461
  <PlTextField
434
462
  v-if="props.filter.type === 'patternMatchesRegularExpression'"
463
+ data-testid="pl-advanced-filter-value"
435
464
  :model-value="props.filter.value"
436
465
  :error="stringMatchesError ? 'Regular expression is not valid' : undefined"
437
466
  placeholder="Regular expression"
@@ -440,6 +469,7 @@ const stringMatchesError = computed(() => {
440
469
  />
441
470
  <PlDropdown
442
471
  v-if="props.filter.type === 'patternFuzzyContainSubsequence'"
472
+ data-testid="pl-advanced-filter-wildcard"
443
473
  :model-value="props.filter.wildcard"
444
474
  clearable
445
475
  placeholder="Wildcard value"
@@ -10,10 +10,11 @@ const props = defineProps<{
10
10
  const OPTIONS: Operand[] = ["and", "or"];
11
11
  </script>
12
12
  <template>
13
- <div v-bind="$attrs" :class="$style.block">
13
+ <div data-testid="pl-advanced-filter-operands" v-bind="$attrs" :class="$style.block">
14
14
  <div
15
15
  v-for="op in OPTIONS"
16
16
  :key="op"
17
+ data-testid="pl-advanced-filter-operand"
17
18
  :class="[$style.operand, { [$style.active]: op === props.active && !props.disabled }]"
18
19
  @click="!props.disabled && props.onSelect(op)"
19
20
  >
@@ -228,9 +228,10 @@ function validateFilter<T extends CommonFilter>(item: T): EditableFilter {
228
228
  }
229
229
  </script>
230
230
  <template>
231
- <div>
231
+ <div data-testid="pl-advanced-filter">
232
232
  <PlElementList
233
233
  v-model:items="rootFilters"
234
+ data-testid="pl-advanced-filter-groups"
234
235
  :get-item-key="(filter) => filter.id"
235
236
  :item-class="$style.filterGroup"
236
237
  :item-class-content="$style.filterGroupContent"
@@ -252,6 +253,7 @@ function validateFilter<T extends CommonFilter>(item: T): EditableFilter {
252
253
  </template>
253
254
  <template #item-content="{ item, index }">
254
255
  <div
256
+ data-testid="pl-advanced-filter-group"
255
257
  :class="[$style.groupContent, { [$style.suppressedLabel]: item.isSuppressed }]"
256
258
  dropzone="true"
257
259
  @drop="(event) => handleDropToExistingGroup(index, event)"
@@ -259,6 +261,7 @@ function validateFilter<T extends CommonFilter>(item: T): EditableFilter {
259
261
  >
260
262
  <PlCheckbox
261
263
  :model-value="item.type === 'not'"
264
+ data-testid="pl-advanced-filter-filter-out"
262
265
  :class="$style.notCheckbox"
263
266
  @update:model-value="inverseRootNode(index)"
264
267
  >
@@ -278,11 +281,16 @@ function validateFilter<T extends CommonFilter>(item: T): EditableFilter {
278
281
  @change-operand="(v) => changeGroupOperand(index, v)"
279
282
  />
280
283
  </template>
281
- <div v-if="props.enableDnd" :class="$style.dropzone">
284
+ <div
285
+ v-if="props.enableDnd"
286
+ data-testid="pl-advanced-filter-dropzone"
287
+ :class="$style.dropzone"
288
+ >
282
289
  <div>Drop dimensions here</div>
283
290
  </div>
284
291
  <PlBtnSecondary
285
292
  v-else-if="!props.isCompletedGroup(item, index)"
293
+ data-testid="pl-advanced-filter-add-filter"
286
294
  icon="add"
287
295
  @click="addColumnToGroup(index, firstColumnId)"
288
296
  >
@@ -293,6 +301,7 @@ function validateFilter<T extends CommonFilter>(item: T): EditableFilter {
293
301
  <template #item-after="{ index }">
294
302
  <OperandButton
295
303
  v-if="props.enableAddGroupButton || index < getRootGroups().length - 1"
304
+ data-testid="pl-advanced-filter-group-operands"
296
305
  :class="$style.buttonWrapper"
297
306
  :active="props.filters.type"
298
307
  :disabled="index === getRootGroups().length - 1"
@@ -304,6 +313,7 @@ function validateFilter<T extends CommonFilter>(item: T): EditableFilter {
304
313
  <!-- Last group - always empty, just for adding new groups -->
305
314
  <PlElementList
306
315
  v-if="props.enableAddGroupButton"
316
+ data-testid="pl-advanced-filter-new-group"
307
317
  :items="emptyGroup"
308
318
  :get-item-key="(group) => group.id"
309
319
  :item-class="$style.filterGroup"
@@ -324,11 +334,17 @@ function validateFilter<T extends CommonFilter>(item: T): EditableFilter {
324
334
  >
325
335
  </template>
326
336
  <template #item-content>
327
- <div v-if="enableDnd" :class="$style.dropzone">
337
+ <div v-if="enableDnd" data-testid="pl-advanced-filter-dropzone" :class="$style.dropzone">
328
338
  <div>Drop dimensions here</div>
329
339
  </div>
330
340
  <slot v-else name="add-group-buttons">
331
- <PlBtnSecondary icon="add" @click="addGroup(firstColumnId)"> Add filter </PlBtnSecondary>
341
+ <PlBtnSecondary
342
+ data-testid="pl-advanced-filter-add-group"
343
+ icon="add"
344
+ @click="addGroup(firstColumnId)"
345
+ >
346
+ Add filter
347
+ </PlBtnSecondary>
332
348
  </slot>
333
349
  </template>
334
350
  </PlElementList>
@@ -47,8 +47,9 @@ const currentProgress = computed(() => {
47
47
  </script>
48
48
 
49
49
  <template>
50
- <div style="height: 100%">
50
+ <div data-testid="pl-ag-cell-file" style="height: 100%">
51
51
  <PlFileInput
52
+ data-testid="pl-ag-cell-file-input"
52
53
  show-filename-only
53
54
  clearable
54
55
  cell-style
@@ -7,5 +7,5 @@ const props = defineProps<{ params: ICellRendererParams & PlProgressCellProps }>
7
7
  </script>
8
8
 
9
9
  <template>
10
- <PlProgressCell v-bind="props.params" />
10
+ <PlProgressCell data-testid="pl-ag-cell-progress" v-bind="props.params" />
11
11
  </template>
@@ -7,8 +7,8 @@ defineProps<{ params?: ICellRendererParams & { type: PlStatusTagType } }>();
7
7
  </script>
8
8
 
9
9
  <template>
10
- <div class="pl-ag-cell-status-tag d-flex align-center">
11
- <PlStatusTag :type="params?.type" />
10
+ <div data-testid="pl-ag-cell-status-tag" class="pl-ag-cell-status-tag d-flex align-center">
11
+ <PlStatusTag data-testid="pl-ag-cell-status-tag-tag" :type="params?.type" />
12
12
  </div>
13
13
  </template>
14
14
 
@@ -28,9 +28,19 @@ const settings = computed<PlChartHistogramSettings | undefined>(() => {
28
28
  </script>
29
29
 
30
30
  <template>
31
- <div ref="root" class="pl-ag-chart-histogram-cell">
32
- <PlChartHistogram v-if="settings" :settings="settings" />
33
- <div v-else class="pl-ag-chart-histogram-cell__not-ready">Not ready</div>
31
+ <div ref="root" data-testid="pl-ag-chart-histogram-cell" class="pl-ag-chart-histogram-cell">
32
+ <PlChartHistogram
33
+ v-if="settings"
34
+ data-testid="pl-ag-chart-histogram-cell-chart"
35
+ :settings="settings"
36
+ />
37
+ <div
38
+ v-else
39
+ data-testid="pl-ag-chart-histogram-cell-not-ready"
40
+ class="pl-ag-chart-histogram-cell__not-ready"
41
+ >
42
+ Not ready
43
+ </div>
34
44
  </div>
35
45
  </template>
36
46
 
@@ -12,9 +12,19 @@ const settings = computed(() => props.params.value || undefined);
12
12
  </script>
13
13
 
14
14
  <template>
15
- <div class="pl-ag-chart-stacked-bar-cell">
16
- <PlChartStackedBarCompact v-if="settings" :settings="settings" />
17
- <div v-else class="pl-ag-chart-stacked-bar-cell__not-ready">Not ready</div>
15
+ <div data-testid="pl-ag-chart-stacked-bar-cell" class="pl-ag-chart-stacked-bar-cell">
16
+ <PlChartStackedBarCompact
17
+ v-if="settings"
18
+ data-testid="pl-ag-chart-stacked-bar-cell-chart"
19
+ :settings="settings"
20
+ />
21
+ <div
22
+ v-else
23
+ data-testid="pl-ag-chart-stacked-bar-cell-not-ready"
24
+ class="pl-ag-chart-stacked-bar-cell__not-ready"
25
+ >
26
+ Not ready
27
+ </div>
18
28
  </div>
19
29
  </template>
20
30
 
@@ -63,24 +63,42 @@ function showMenu() {
63
63
  </script>
64
64
 
65
65
  <template>
66
- <div class="pl-ag-column-header d-flex align-center gap-6" @click="onSortRequested">
67
- <div class="pl-ag-column-header__title d-flex align-center gap-6 flex-grow-1">
68
- <PlMaskIcon16 :name="icon" class="pl-ag-column-header__type-icon" />
66
+ <div
67
+ data-testid="pl-ag-column-header"
68
+ class="pl-ag-column-header d-flex align-center gap-6"
69
+ @click="onSortRequested"
70
+ >
71
+ <div
72
+ data-testid="pl-ag-column-header-title"
73
+ class="pl-ag-column-header__title d-flex align-center gap-6 flex-grow-1"
74
+ >
75
+ <PlMaskIcon16
76
+ data-testid="pl-ag-column-header-type-icon"
77
+ :name="icon"
78
+ class="pl-ag-column-header__type-icon"
79
+ />
69
80
  <PlTooltip>
70
81
  <template v-if="params.tooltip" #tooltip>{{ params.tooltip }}</template>
71
- <span>{{ params.displayName }}</span>
82
+ <span data-testid="pl-ag-column-header-name">{{ params.displayName }}</span>
72
83
  </PlTooltip>
73
- <PlTooltip v-if="params.info" max-width="500px" position="bottom" :close-delay="10000000000">
84
+ <PlTooltip
85
+ v-if="params.info"
86
+ data-testid="pl-ag-column-header-info"
87
+ max-width="500px"
88
+ position="bottom"
89
+ :close-delay="10000000000"
90
+ >
74
91
  <template #tooltip>
75
92
  <span style="white-space: pre-wrap">{{ params.info }}</span>
76
93
  </template>
77
94
  <PlMaskIcon16 name="info" />
78
95
  </PlTooltip>
79
- <PlMaskIcon16 v-if="sortIcon" :name="sortIcon" />
96
+ <PlMaskIcon16 v-if="sortIcon" data-testid="pl-ag-column-header-sort" :name="sortIcon" />
80
97
  </div>
81
98
  <div
82
99
  v-if="params.enableMenu"
83
100
  ref="menuActivatorBtn"
101
+ data-testid="pl-ag-column-header-menu"
84
102
  class="pl-ag-column-header__menu-icon"
85
103
  @click.stop="showMenu"
86
104
  >
@@ -34,7 +34,12 @@ const teleportTarget = usePlBlockPageTitleTeleportTarget("PlAgCsvExporter");
34
34
 
35
35
  <template>
36
36
  <Teleport v-if="teleportTarget && csvExportAvailable" :to="teleportTarget">
37
- <PlBtnGhost :loading="exporting" icon="export" @click.stop="initiateExport">
37
+ <PlBtnGhost
38
+ data-testid="pl-ag-csv-exporter"
39
+ :loading="exporting"
40
+ icon="export"
41
+ @click.stop="initiateExport"
42
+ >
38
43
  Export
39
44
  </PlBtnGhost>
40
45
  </Teleport>
@@ -79,12 +79,17 @@ function onSheetChanged(i: number, newValue: string | number): void {
79
79
  </script>
80
80
 
81
81
  <template>
82
- <div v-if="$slots['before'] || sheets.length > 0 || $slots['after']" :class="$style.container">
82
+ <div
83
+ v-if="$slots['before'] || sheets.length > 0 || $slots['after']"
84
+ data-testid="pl-ag-data-table-sheets"
85
+ :class="$style.container"
86
+ >
83
87
  <slot name="before" />
84
88
  <template v-for="(sheet, i) in sheets" :key="i">
85
89
  <!-- For some reason state[i] is undefined when the sheet initially loads, so v-if to suppress the error -->
86
90
  <PlDropdownLine
87
91
  v-if="state[i]"
92
+ data-testid="pl-ag-data-table-sheets-dropdown"
88
93
  :model-value="state[i].value"
89
94
  :options="sheet.options"
90
95
  :prefix="sheet.prefix"
@@ -610,7 +610,7 @@ watchEffect(() => {
610
610
  </script>
611
611
 
612
612
  <template>
613
- <div :class="$style.container">
613
+ <div data-testid="pl-ag-data-table" :class="$style.container">
614
614
  <PlAgGridColumnManager v-if="gridApi && !disableColumnsPanel" :api="gridApi" />
615
615
  <PlTableFiltersV2
616
616
  v-if="!disableFiltersPanel"
@@ -640,6 +640,7 @@ watchEffect(() => {
640
640
  <PlTableFastSearch v-model="searchString" />
641
641
  <AgGridVue
642
642
  :key="reloadKey"
643
+ data-testid="pl-ag-data-table-grid"
643
644
  :theme="AgGridTheme"
644
645
  :class="$style.grid"
645
646
  :grid-options="gridOptions"
@@ -29,13 +29,20 @@ function normalizePlaceholderText(
29
29
  </script>
30
30
 
31
31
  <template>
32
- <div :class="style.container">
33
- <div v-if="params.variant === 'not-ready'" :class="style.notReadyWrapper">
32
+ <div data-testid="pl-ag-data-table-loading" :class="style.container">
33
+ <div
34
+ v-if="params.variant === 'not-ready'"
35
+ data-testid="pl-ag-data-table-not-ready"
36
+ :class="style.notReadyWrapper"
37
+ >
34
38
  <div :class="style.iconCatInBag" />
35
- <h3 :class="style.text">{{ params.notReadyText || "Data is not computed" }}</h3>
39
+ <h3 data-testid="pl-ag-data-table-not-ready-text" :class="style.text">
40
+ {{ params.notReadyText || "Data is not computed" }}
41
+ </h3>
36
42
  </div>
37
43
  <PlPlaceholder
38
44
  v-else
45
+ data-testid="pl-ag-data-table-loading-placeholder"
39
46
  v-bind="
40
47
  normalizePlaceholderText(
41
48
  {
@@ -16,9 +16,11 @@ defineExpose({
16
16
  </script>
17
17
 
18
18
  <template>
19
- <div class="grid-overlay-container">
19
+ <div data-testid="pl-ag-data-table-no-rows" class="grid-overlay-container">
20
20
  <div class="grid-icon-sad-cat" />
21
- <span class="text-subtitle-m">{{ params.text || "Empty" }}</span>
21
+ <span data-testid="pl-ag-data-table-no-rows-text" class="text-subtitle-m">{{
22
+ params.text || "Empty"
23
+ }}</span>
22
24
  </div>
23
25
  </template>
24
26
 
@@ -69,14 +69,26 @@ const toggleAllFiltered = () => {
69
69
 
70
70
  <template>
71
71
  <Teleport v-if="teleportTarget" :to="teleportTarget">
72
- <PlBtnGhost icon="columns" @click.stop="slideModal = !slideModal"> Columns </PlBtnGhost>
72
+ <PlBtnGhost
73
+ data-testid="pl-ag-grid-column-manager"
74
+ icon="columns"
75
+ @click.stop="slideModal = !slideModal"
76
+ >
77
+ Columns
78
+ </PlBtnGhost>
73
79
  </Teleport>
74
80
 
75
- <PlSlideModal v-model="slideModal" :width="width" close-on-outside-click>
81
+ <PlSlideModal
82
+ v-model="slideModal"
83
+ data-testid="pl-ag-grid-column-manager-panel"
84
+ :width="width"
85
+ close-on-outside-click
86
+ >
76
87
  <template #title>Manage Columns</template>
77
- <div :class="$style.searchRow">
78
- <PlSearchField v-model="query" clearable />
88
+ <div data-testid="pl-ag-grid-column-manager-search-row" :class="$style.searchRow">
89
+ <PlSearchField v-model="query" data-testid="pl-ag-grid-column-manager-search" clearable />
79
90
  <PlBtnSecondary
91
+ data-testid="pl-ag-grid-column-manager-toggle-all"
80
92
  :class="$style.toggleAllBtn"
81
93
  :disabled="toggleableFilteredItems.length === 0"
82
94
  @click.stop="toggleAllFiltered"
@@ -86,6 +98,7 @@ const toggleAllFiltered = () => {
86
98
  </PlBtnSecondary>
87
99
  </div>
88
100
  <PlElementList
101
+ data-testid="pl-ag-grid-column-manager-list"
89
102
  :items="filteredItems"
90
103
  :get-item-key="(item) => item.id"
91
104
  :is-draggable="(item) => !item.column.getColDef().lockPosition"
@@ -113,7 +126,7 @@ const toggleAllFiltered = () => {
113
126
  disable-removing
114
127
  >
115
128
  <template #item-title="{ item }">
116
- <span>
129
+ <span data-testid="pl-ag-grid-column-manager-item">
117
130
  <span
118
131
  v-for="(segment, i) of segments.get(item.label)"
119
132
  :key="i"
@@ -34,6 +34,7 @@ onBeforeUnmount(() => {
34
34
 
35
35
  <template>
36
36
  <div
37
+ data-testid="pl-ag-row-num-checkbox"
37
38
  :class="[
38
39
  $styles.container,
39
40
  { [$styles['allowed-selection']]: allowedSelection },
@@ -42,10 +43,13 @@ onBeforeUnmount(() => {
42
43
  'align-center',
43
44
  ]"
44
45
  >
45
- <div v-if="!isChecked" :class="[$styles.text]">{{ params.value }}</div>
46
+ <div v-if="!isChecked" data-testid="pl-ag-row-num-checkbox-value" :class="[$styles.text]">
47
+ {{ params.value }}
48
+ </div>
46
49
  <PlCheckbox
47
50
  v-if="forceShowCheckbox"
48
51
  v-model="isChecked"
52
+ data-testid="pl-ag-row-num-checkbox-checkbox"
49
53
  :class="[$styles.checkbox, isChecked && $styles.checked]"
50
54
  @update:modelValue="setSelection"
51
55
  />
@@ -58,6 +58,7 @@ onBeforeUnmount(() => {
58
58
 
59
59
  <template>
60
60
  <div
61
+ data-testid="pl-ag-row-num-header"
61
62
  style="
62
63
  position: absolute;
63
64
  inset: 0;
@@ -68,11 +69,12 @@ onBeforeUnmount(() => {
68
69
  >
69
70
  <PlCheckbox
70
71
  v-if="isSelectable"
72
+ data-testid="pl-ag-row-num-header-checkbox"
71
73
  :model-value="someRowsSelected"
72
74
  :indeterminate="someRowsSelected && !allRowsSelected"
73
75
  @update:model-value="toggleSelectAll"
74
76
  />
75
- <span v-else>
77
+ <span v-else data-testid="pl-ag-row-num-header-label">
76
78
  {{ params.displayName }}
77
79
  </span>
78
80
  </div>
@@ -54,11 +54,12 @@ function triggerRowDoubleClick() {
54
54
  }
55
55
  </script>
56
56
  <template>
57
- <div class="pl-ag-grid-open-cell d-flex">
58
- <div class="pl-ag-grid-open-cell__value">
57
+ <div data-testid="pl-ag-text-and-button-cell" class="pl-ag-grid-open-cell d-flex">
58
+ <div data-testid="pl-ag-text-and-button-cell-value" class="pl-ag-grid-open-cell__value">
59
59
  {{ params.value }}
60
60
  </div>
61
61
  <div
62
+ data-testid="pl-ag-text-and-button-cell-button"
62
63
  class="pl-ag-grid-open-cell__activator text-caps11 align-center"
63
64
  @click.stop="triggerRowDoubleClick"
64
65
  >
@@ -66,9 +66,10 @@ function handleAddStep() {
66
66
  </script>
67
67
 
68
68
  <template>
69
- <PlSidebarItem>
69
+ <PlSidebarItem data-testid="pl-annotations-schema">
70
70
  <template #header-content>
71
71
  <PlEditableTitle
72
+ data-testid="pl-annotations-schema-title"
72
73
  :model-value="props.annotation.title"
73
74
  :class="{ [$commonStyle.flashing]: props.annotation.title.length === 0 }"
74
75
  :max-length="40"
@@ -80,11 +81,15 @@ function handleAddStep() {
80
81
  />
81
82
  </template>
82
83
  <template v-if="props.annotation" #body-content>
83
- <div :class="[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]">
84
- <span :class="$style.tip">
84
+ <div
85
+ data-testid="pl-annotations-schema-body"
86
+ :class="[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]"
87
+ >
88
+ <span data-testid="pl-annotations-schema-tip" :class="$style.tip">
85
89
  Above annotations override the ones below. Rearrange them by dragging.
86
90
  </span>
87
91
  <PlElementList
92
+ data-testid="pl-annotations-steps"
88
93
  :items="props.annotation.steps"
89
94
  :get-item-key="(item) => item.id"
90
95
  :is-active="(item) => item.id === props.selectedStepId"
@@ -98,9 +103,12 @@ function handleAddStep() {
98
103
  </template>
99
104
  </PlElementList>
100
105
 
101
- <PlBtnSecondary icon="add" @click="handleAddStep"> Add label </PlBtnSecondary>
106
+ <PlBtnSecondary data-testid="pl-annotations-add-label" icon="add" @click="handleAddStep">
107
+ Add label
108
+ </PlBtnSecondary>
102
109
 
103
110
  <PlTextField
111
+ data-testid="pl-annotations-default-value"
104
112
  :class="[
105
113
  $style.defaultValue,
106
114
  { [$style.emptyDefaultValue]: isEmpty(props.annotation.defaultValue) },
@@ -117,6 +125,7 @@ function handleAddStep() {
117
125
  </template>
118
126
  <template #footer-content>
119
127
  <PlBtnGhost
128
+ data-testid="pl-annotations-delete-schema"
120
129
  icon="delete-bin"
121
130
  reverse
122
131
  :disabled="props.annotation.steps.length === 0"