@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
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgGridColumnManager.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlElementList,\n PlIcon24,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\nimport { useGridColumns } from \"./useGridColumns\";\n\nconst props = defineProps<{\n /**\n * The GridApi is an API interface provided by the table/grid component\n * for interacting programmatically with the grid's features and functionality.\n * It allows you to control and manipulate grid behavior, access data, and\n * trigger specific actions.\n */\n api: GridApi;\n /**\n * Css Column Manager (Panel) modal width (default value is `368px`)\n */\n width?: string;\n}>();\n\nconst query = ref(\"\");\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst columns = useGridColumns(props);\n\nconst items = computed(() => {\n return columns.value.map((col, i) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName ?? `Unnamed Column (${i + 1})`,\n }));\n});\n\nconst { filteredItems, segments } = useFilteredItems({\n items,\n query,\n getStrings: (item) => [item.label],\n});\n\nconst toggleableFilteredItems = computed(() =>\n filteredItems.value.filter((item) => item.id !== PlAgDataTableRowNumberColId),\n);\n\nconst allFilteredHidden = computed(\n () =>\n toggleableFilteredItems.value.length > 0 &&\n toggleableFilteredItems.value.every((item) => !item.column.isVisible()),\n);\n\nconst toggleAllFiltered = () => {\n if (props.api.isDestroyed()) return;\n const nextVisible = allFilteredHidden.value;\n const cols = toggleableFilteredItems.value.map((item) => item.column);\n if (cols.length === 0) return;\n props.api.setColumnsVisible(cols, nextVisible);\n};\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost icon=\"columns\" @click.stop=\"slideModal = !slideModal\"> Columns </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"slideModal\" :width=\"width\" close-on-outside-click>\n <template #title>Manage Columns</template>\n <div :class=\"$style.searchRow\">\n <PlSearchField v-model=\"query\" clearable />\n <PlBtnSecondary\n :class=\"$style.toggleAllBtn\"\n :disabled=\"toggleableFilteredItems.length === 0\"\n @click.stop=\"toggleAllFiltered\"\n >\n <PlIcon24 v-if=\"allFilteredHidden\" name=\"view-show\" />\n <PlIcon24 v-else name=\"view-hide\" />\n </PlBtnSecondary>\n </div>\n <PlElementList\n :items=\"filteredItems\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"\n (fromIndex, toIndex) => {\n if (!props.api.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n props.api.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!props.api.isDestroyed()) {\n props.api.setColumnsVisible([item.column], !item.column.isVisible());\n }\n }\n \"\n :is-toggled=\"(item) => !item.column.isVisible()\"\n :is-toggable=\"(item) => item.id !== PlAgDataTableRowNumberColId\"\n :is-pinned=\"(item) => !!item.column.getColDef().lockPosition\"\n :is-pinnable=\"() => false\"\n :disable-dragging=\"query.length > 0\"\n disable-removing\n >\n <template #item-title=\"{ item }\">\n <span>\n <span\n v-for=\"(segment, i) of segments.get(item.label)\"\n :key=\"i\"\n :class=\"{ [$style.match]: segment.match }\"\n >{{ segment.value }}</span\n >\n </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n\n.searchRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.searchRow > :first-child {\n flex: 1;\n}\n\n.toggleAllBtn {\n min-width: unset;\n opacity: 0.2;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlAgGridColumnManager.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlElementList,\n PlIcon24,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\nimport { useGridColumns } from \"./useGridColumns\";\n\nconst props = defineProps<{\n /**\n * The GridApi is an API interface provided by the table/grid component\n * for interacting programmatically with the grid's features and functionality.\n * It allows you to control and manipulate grid behavior, access data, and\n * trigger specific actions.\n */\n api: GridApi;\n /**\n * Css Column Manager (Panel) modal width (default value is `368px`)\n */\n width?: string;\n}>();\n\nconst query = ref(\"\");\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst columns = useGridColumns(props);\n\nconst items = computed(() => {\n return columns.value.map((col, i) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName ?? `Unnamed Column (${i + 1})`,\n }));\n});\n\nconst { filteredItems, segments } = useFilteredItems({\n items,\n query,\n getStrings: (item) => [item.label],\n});\n\nconst toggleableFilteredItems = computed(() =>\n filteredItems.value.filter((item) => item.id !== PlAgDataTableRowNumberColId),\n);\n\nconst allFilteredHidden = computed(\n () =>\n toggleableFilteredItems.value.length > 0 &&\n toggleableFilteredItems.value.every((item) => !item.column.isVisible()),\n);\n\nconst toggleAllFiltered = () => {\n if (props.api.isDestroyed()) return;\n const nextVisible = allFilteredHidden.value;\n const cols = toggleableFilteredItems.value.map((item) => item.column);\n if (cols.length === 0) return;\n props.api.setColumnsVisible(cols, nextVisible);\n};\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost\n data-testid=\"pl-ag-grid-column-manager\"\n icon=\"columns\"\n @click.stop=\"slideModal = !slideModal\"\n >\n Columns\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal\n v-model=\"slideModal\"\n data-testid=\"pl-ag-grid-column-manager-panel\"\n :width=\"width\"\n close-on-outside-click\n >\n <template #title>Manage Columns</template>\n <div data-testid=\"pl-ag-grid-column-manager-search-row\" :class=\"$style.searchRow\">\n <PlSearchField v-model=\"query\" data-testid=\"pl-ag-grid-column-manager-search\" clearable />\n <PlBtnSecondary\n data-testid=\"pl-ag-grid-column-manager-toggle-all\"\n :class=\"$style.toggleAllBtn\"\n :disabled=\"toggleableFilteredItems.length === 0\"\n @click.stop=\"toggleAllFiltered\"\n >\n <PlIcon24 v-if=\"allFilteredHidden\" name=\"view-show\" />\n <PlIcon24 v-else name=\"view-hide\" />\n </PlBtnSecondary>\n </div>\n <PlElementList\n data-testid=\"pl-ag-grid-column-manager-list\"\n :items=\"filteredItems\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"\n (fromIndex, toIndex) => {\n if (!props.api.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n props.api.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!props.api.isDestroyed()) {\n props.api.setColumnsVisible([item.column], !item.column.isVisible());\n }\n }\n \"\n :is-toggled=\"(item) => !item.column.isVisible()\"\n :is-toggable=\"(item) => item.id !== PlAgDataTableRowNumberColId\"\n :is-pinned=\"(item) => !!item.column.getColDef().lockPosition\"\n :is-pinnable=\"() => false\"\n :disable-dragging=\"query.length > 0\"\n disable-removing\n >\n <template #item-title=\"{ item }\">\n <span data-testid=\"pl-ag-grid-column-manager-item\">\n <span\n v-for=\"(segment, i) of segments.get(item.label)\"\n :key=\"i\"\n :class=\"{ [$style.match]: segment.match }\"\n >{{ segment.value }}</span\n >\n </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n\n.searchRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.searchRow > :first-child {\n flex: 1;\n}\n\n.toggleAllBtn {\n min-width: unset;\n opacity: 0.2;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgGridColumnManager.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"names":[],"mappings":"AAsKA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMlD,KAAK,WAAW,GAAG;IACjB;;;;;OAKG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAmSF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"PlAgGridColumnManager.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"names":[],"mappings":"AAmLA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMlD,KAAK,WAAW,GAAG;IACjB;;;;;OAKG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA+SF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -4,52 +4,59 @@ import { useGridColumns as n } from "./useGridColumns.js";
4
4
  import { Fragment as r, Teleport as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createTextVNode as u, createVNode as d, defineComponent as f, normalizeClass as p, openBlock as m, ref as h, renderList as g, toDisplayString as _, unref as v, withCtx as y, withModifiers as b } from "vue";
5
5
  import { PlBtnGhost as x, PlBtnSecondary as S, PlElementList as C, PlIcon24 as w, PlSearchField as T, PlSlideModal as E, usePlBlockPageTitleTeleportTarget as D } from "@milaboratories/uikit";
6
6
  //#region src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue?vue&type=script&setup=true&lang.ts
7
- var O = /* @__PURE__ */ f({
7
+ var O = { "data-testid": "pl-ag-grid-column-manager-item" }, k = /* @__PURE__ */ f({
8
8
  __name: "PlAgGridColumnManager",
9
9
  props: {
10
10
  api: {},
11
11
  width: {}
12
12
  },
13
13
  setup(f) {
14
- let O = f, k = h(""), A = h(!1), j = D("PlAgGridColumnManager"), M = n(O), { filteredItems: N, segments: P } = t({
15
- items: a(() => M.value.map((e, t) => ({
14
+ let k = f, A = h(""), j = h(!1), M = D("PlAgGridColumnManager"), N = n(k), { filteredItems: P, segments: F } = t({
15
+ items: a(() => N.value.map((e, t) => ({
16
16
  column: e,
17
17
  id: e.getId(),
18
18
  label: e.getColDef().headerName ?? `Unnamed Column (${t + 1})`
19
19
  }))),
20
- query: k,
20
+ query: A,
21
21
  getStrings: (e) => [e.label]
22
- }), F = a(() => N.value.filter((t) => t.id !== e)), I = a(() => F.value.length > 0 && F.value.every((e) => !e.column.isVisible())), L = () => {
23
- if (O.api.isDestroyed()) return;
24
- let e = I.value, t = F.value.map((e) => e.column);
25
- t.length !== 0 && O.api.setColumnsVisible(t, e);
22
+ }), I = a(() => P.value.filter((t) => t.id !== e)), L = a(() => I.value.length > 0 && I.value.every((e) => !e.column.isVisible())), R = () => {
23
+ if (k.api.isDestroyed()) return;
24
+ let e = L.value, t = I.value.map((e) => e.column);
25
+ t.length !== 0 && k.api.setColumnsVisible(t, e);
26
26
  };
27
- return (t, n) => (m(), c(r, null, [v(j) ? (m(), o(i, {
27
+ return (t, n) => (m(), c(r, null, [v(M) ? (m(), o(i, {
28
28
  key: 0,
29
- to: v(j)
29
+ to: v(M)
30
30
  }, [d(v(x), {
31
+ "data-testid": "pl-ag-grid-column-manager",
31
32
  icon: "columns",
32
- onClick: n[0] ||= b((e) => A.value = !A.value, ["stop"])
33
+ onClick: n[0] ||= b((e) => j.value = !j.value, ["stop"])
33
34
  }, {
34
35
  default: y(() => [...n[3] ||= [u(" Columns ", -1)]]),
35
36
  _: 1
36
37
  })], 8, ["to"])) : s("", !0), d(v(E), {
37
- modelValue: A.value,
38
- "onUpdate:modelValue": n[2] ||= (e) => A.value = e,
38
+ modelValue: j.value,
39
+ "onUpdate:modelValue": n[2] ||= (e) => j.value = e,
40
+ "data-testid": "pl-ag-grid-column-manager-panel",
39
41
  width: f.width,
40
42
  "close-on-outside-click": ""
41
43
  }, {
42
44
  title: y(() => [...n[4] ||= [u("Manage Columns", -1)]]),
43
- default: y(() => [l("div", { class: p(t.$style.searchRow) }, [d(v(T), {
44
- modelValue: k.value,
45
- "onUpdate:modelValue": n[1] ||= (e) => k.value = e,
45
+ default: y(() => [l("div", {
46
+ "data-testid": "pl-ag-grid-column-manager-search-row",
47
+ class: p(t.$style.searchRow)
48
+ }, [d(v(T), {
49
+ modelValue: A.value,
50
+ "onUpdate:modelValue": n[1] ||= (e) => A.value = e,
51
+ "data-testid": "pl-ag-grid-column-manager-search",
46
52
  clearable: ""
47
53
  }, null, 8, ["modelValue"]), d(v(S), {
54
+ "data-testid": "pl-ag-grid-column-manager-toggle-all",
48
55
  class: p(t.$style.toggleAllBtn),
49
- disabled: F.value.length === 0,
50
- onClick: b(L, ["stop"])
56
+ disabled: I.value.length === 0,
57
+ onClick: b(R, ["stop"])
51
58
  }, {
52
- default: y(() => [I.value ? (m(), o(v(w), {
59
+ default: y(() => [L.value ? (m(), o(v(w), {
53
60
  key: 0,
54
61
  name: "view-show"
55
62
  })) : (m(), o(v(w), {
@@ -58,27 +65,28 @@ var O = /* @__PURE__ */ f({
58
65
  }))]),
59
66
  _: 1
60
67
  }, 8, ["class", "disabled"])], 2), d(v(C), {
61
- items: v(N),
68
+ "data-testid": "pl-ag-grid-column-manager-list",
69
+ items: v(P),
62
70
  "get-item-key": (e) => e.id,
63
71
  "is-draggable": (e) => !e.column.getColDef().lockPosition,
64
72
  "on-sort": (e, t) => {
65
- if (!O.api.isDestroyed()) {
66
- let n = v(M)[e];
67
- O.api.moveColumns([n], t);
73
+ if (!k.api.isDestroyed()) {
74
+ let n = v(N)[e];
75
+ k.api.moveColumns([n], t);
68
76
  }
69
77
  return !0;
70
78
  },
71
79
  "on-toggle": (e) => {
72
- O.api.isDestroyed() || O.api.setColumnsVisible([e.column], !e.column.isVisible());
80
+ k.api.isDestroyed() || k.api.setColumnsVisible([e.column], !e.column.isVisible());
73
81
  },
74
82
  "is-toggled": (e) => !e.column.isVisible(),
75
83
  "is-toggable": (t) => t.id !== v(e),
76
84
  "is-pinned": (e) => !!e.column.getColDef().lockPosition,
77
85
  "is-pinnable": () => !1,
78
- "disable-dragging": k.value.length > 0,
86
+ "disable-dragging": A.value.length > 0,
79
87
  "disable-removing": ""
80
88
  }, {
81
- "item-title": y(({ item: e }) => [l("span", null, [(m(!0), c(r, null, g(v(P).get(e.label), (e, n) => (m(), c("span", {
89
+ "item-title": y(({ item: e }) => [l("span", O, [(m(!0), c(r, null, g(v(F).get(e.label), (e, n) => (m(), c("span", {
82
90
  key: n,
83
91
  class: p({ [t.$style.match]: e.match })
84
92
  }, _(e.value), 3))), 128))])]),
@@ -99,6 +107,6 @@ var O = /* @__PURE__ */ f({
99
107
  }
100
108
  });
101
109
  //#endregion
102
- export { O as default };
110
+ export { k as default };
103
111
 
104
112
  //# sourceMappingURL=PlAgGridColumnManager.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgGridColumnManager.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlElementList,\n PlIcon24,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\nimport { useGridColumns } from \"./useGridColumns\";\n\nconst props = defineProps<{\n /**\n * The GridApi is an API interface provided by the table/grid component\n * for interacting programmatically with the grid's features and functionality.\n * It allows you to control and manipulate grid behavior, access data, and\n * trigger specific actions.\n */\n api: GridApi;\n /**\n * Css Column Manager (Panel) modal width (default value is `368px`)\n */\n width?: string;\n}>();\n\nconst query = ref(\"\");\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst columns = useGridColumns(props);\n\nconst items = computed(() => {\n return columns.value.map((col, i) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName ?? `Unnamed Column (${i + 1})`,\n }));\n});\n\nconst { filteredItems, segments } = useFilteredItems({\n items,\n query,\n getStrings: (item) => [item.label],\n});\n\nconst toggleableFilteredItems = computed(() =>\n filteredItems.value.filter((item) => item.id !== PlAgDataTableRowNumberColId),\n);\n\nconst allFilteredHidden = computed(\n () =>\n toggleableFilteredItems.value.length > 0 &&\n toggleableFilteredItems.value.every((item) => !item.column.isVisible()),\n);\n\nconst toggleAllFiltered = () => {\n if (props.api.isDestroyed()) return;\n const nextVisible = allFilteredHidden.value;\n const cols = toggleableFilteredItems.value.map((item) => item.column);\n if (cols.length === 0) return;\n props.api.setColumnsVisible(cols, nextVisible);\n};\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost icon=\"columns\" @click.stop=\"slideModal = !slideModal\"> Columns </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"slideModal\" :width=\"width\" close-on-outside-click>\n <template #title>Manage Columns</template>\n <div :class=\"$style.searchRow\">\n <PlSearchField v-model=\"query\" clearable />\n <PlBtnSecondary\n :class=\"$style.toggleAllBtn\"\n :disabled=\"toggleableFilteredItems.length === 0\"\n @click.stop=\"toggleAllFiltered\"\n >\n <PlIcon24 v-if=\"allFilteredHidden\" name=\"view-show\" />\n <PlIcon24 v-else name=\"view-hide\" />\n </PlBtnSecondary>\n </div>\n <PlElementList\n :items=\"filteredItems\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"\n (fromIndex, toIndex) => {\n if (!props.api.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n props.api.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!props.api.isDestroyed()) {\n props.api.setColumnsVisible([item.column], !item.column.isVisible());\n }\n }\n \"\n :is-toggled=\"(item) => !item.column.isVisible()\"\n :is-toggable=\"(item) => item.id !== PlAgDataTableRowNumberColId\"\n :is-pinned=\"(item) => !!item.column.getColDef().lockPosition\"\n :is-pinnable=\"() => false\"\n :disable-dragging=\"query.length > 0\"\n disable-removing\n >\n <template #item-title=\"{ item }\">\n <span>\n <span\n v-for=\"(segment, i) of segments.get(item.label)\"\n :key=\"i\"\n :class=\"{ [$style.match]: segment.match }\"\n >{{ segment.value }}</span\n >\n </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n\n.searchRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.searchRow > :first-child {\n flex: 1;\n}\n\n.toggleAllBtn {\n min-width: unset;\n opacity: 0.2;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;EAgBA,IAAM,IAAQ,GAcR,IAAQ,EAAI,GAAG,EACf,IAAa,EAAI,GAAM,EACvB,IAAiB,EAAkC,wBAAwB,EAE3E,IAAU,EAAe,EAAM,EAU/B,EAAE,kBAAe,gBAAa,EAAiB;GACnD,OATY,QACL,EAAQ,MAAM,KAAK,GAAK,OAAO;IACpC,QAAQ;IACR,IAAI,EAAI,OAAO;IACf,OAAO,EAAI,WAAW,CAAC,cAAc,mBAAmB,IAAI,EAAE;IAC/D,EAAE,CACH;GAIA;GACA,aAAa,MAAS,CAAC,EAAK,MAAM;GACnC,CAAC,EAEI,IAA0B,QAC9B,EAAc,MAAM,QAAQ,MAAS,EAAK,OAAO,EAA4B,CAC9E,EAEK,IAAoB,QAEtB,EAAwB,MAAM,SAAS,KACvC,EAAwB,MAAM,OAAO,MAAS,CAAC,EAAK,OAAO,WAAW,CAAC,CAC1E,EAEK,UAA0B;AAC9B,OAAI,EAAM,IAAI,aAAa,CAAE;GAC7B,IAAM,IAAc,EAAkB,OAChC,IAAO,EAAwB,MAAM,KAAK,MAAS,EAAK,OAAO;AACjE,KAAK,WAAW,KACpB,EAAM,IAAI,kBAAkB,GAAM,EAAY;;qCAK9B,EAAA,EAAc,IAAA,GAAA,EAA9B,EAEW,GAAA;;GAFsB,IAAI,EAAA,EAAc;MACjD,EAAwF,EAAA,EAAA,EAAA;GAA5E,MAAK;GAAW,SAAK,AAAA,EAAA,OAAA,GAAA,MAAO,EAAA,QAAU,CAAI,EAAA,OAAU,CAAA,OAAA,CAAA;;oBAAW,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAT,aAAS,GAAA,CAAA,CAAA,CAAA;;gCAG7E,EAmDe,EAAA,EAAA,EAAA;eAnDQ,EAAA;4CAAU,QAAA;GAAG,OAAO,EAAA;GAAO,0BAAA;;GACrC,OAAK,QAAe,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAd,kBAAc,GAAA,CAAA,CAAA,CAAA;oBAWzB,CAVN,EAUM,OAAA,EAVA,OAAK,EAAEA,EAAAA,OAAO,UAAS,EAAA,EAAA,CAC3B,EAA2C,EAAA,EAAA,EAAA;gBAAnB,EAAA;6CAAK,QAAA;IAAE,WAAA;gCAC/B,EAOiB,EAAA,EAAA,EAAA;IANd,OAAK,EAAEA,EAAAA,OAAO,aAAY;IAC1B,UAAU,EAAA,MAAwB,WAAM;IACxC,SAAK,EAAO,GAAiB,CAAA,OAAA,CAAA;;qBAEwB,CAAtC,EAAA,SAAA,GAAA,EAAhB,EAAsD,EAAA,EAAA,EAAA;;KAAnB,MAAK;gBACxC,EAAoC,EAAA,EAAA,EAAA;;KAAnB,MAAK;;;sCAG1B,EAqCgB,EAAA,EAAA,EAAA;IApCb,OAAO,EAAA,EAAa;IACpB,iBAAe,MAAS,EAAK;IAC7B,iBAAe,MAAI,CAAM,EAAK,OAAO,WAAS,CAAG;IACjD,YAAmB,GAAW,MAAO;UAAsB,EAAM,IAAI,aAAW,EAAA;UAAwB,IAAe,EAAA,EAAO,CAAC;AAAwB,QAAM,IAAI,YAAW,CAAE,EAAY,EAAG,EAAO;;;;IASpM,cAAqB,MAAI;KAAsB,EAAM,IAAI,aAAW,IAAkB,EAAM,IAAI,kBAAiB,CAAE,EAAK,OAAM,EAAA,CAAI,EAAK,OAAO,WAAS,CAAA;;IAOvJ,eAAa,MAAI,CAAM,EAAK,OAAO,WAAS;IAC5C,gBAAc,MAAS,EAAK,OAAO,EAAA,EAA2B;IAC9D,cAAY,MAAI,CAAA,CAAO,EAAK,OAAO,WAAS,CAAG;IAC/C,qBAAa;IACb,oBAAkB,EAAA,MAAM,SAAM;IAC/B,oBAAA;;IAEW,cAAU,GAQZ,EARgB,cAAI,CAC3B,EAOO,QAAA,MAAA,EAAA,EAAA,GAAA,EANL,EAKC,GAAA,MAAA,EAJwB,EAAA,EAAQ,CAAC,IAAI,EAAK,MAAK,GAAtC,GAAS,YADnB,EAKC,QAAA;KAHE,KAAK;KACL,OAAK,EAAA,GAAKA,EAAAA,OAAO,QAAQ,EAAQ,OAAK,CAAA;SACnC,EAAQ,MAAK,EAAA,EAAA"}
1
+ {"version":3,"file":"PlAgGridColumnManager.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlElementList,\n PlIcon24,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\nimport { useGridColumns } from \"./useGridColumns\";\n\nconst props = defineProps<{\n /**\n * The GridApi is an API interface provided by the table/grid component\n * for interacting programmatically with the grid's features and functionality.\n * It allows you to control and manipulate grid behavior, access data, and\n * trigger specific actions.\n */\n api: GridApi;\n /**\n * Css Column Manager (Panel) modal width (default value is `368px`)\n */\n width?: string;\n}>();\n\nconst query = ref(\"\");\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst columns = useGridColumns(props);\n\nconst items = computed(() => {\n return columns.value.map((col, i) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName ?? `Unnamed Column (${i + 1})`,\n }));\n});\n\nconst { filteredItems, segments } = useFilteredItems({\n items,\n query,\n getStrings: (item) => [item.label],\n});\n\nconst toggleableFilteredItems = computed(() =>\n filteredItems.value.filter((item) => item.id !== PlAgDataTableRowNumberColId),\n);\n\nconst allFilteredHidden = computed(\n () =>\n toggleableFilteredItems.value.length > 0 &&\n toggleableFilteredItems.value.every((item) => !item.column.isVisible()),\n);\n\nconst toggleAllFiltered = () => {\n if (props.api.isDestroyed()) return;\n const nextVisible = allFilteredHidden.value;\n const cols = toggleableFilteredItems.value.map((item) => item.column);\n if (cols.length === 0) return;\n props.api.setColumnsVisible(cols, nextVisible);\n};\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost\n data-testid=\"pl-ag-grid-column-manager\"\n icon=\"columns\"\n @click.stop=\"slideModal = !slideModal\"\n >\n Columns\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal\n v-model=\"slideModal\"\n data-testid=\"pl-ag-grid-column-manager-panel\"\n :width=\"width\"\n close-on-outside-click\n >\n <template #title>Manage Columns</template>\n <div data-testid=\"pl-ag-grid-column-manager-search-row\" :class=\"$style.searchRow\">\n <PlSearchField v-model=\"query\" data-testid=\"pl-ag-grid-column-manager-search\" clearable />\n <PlBtnSecondary\n data-testid=\"pl-ag-grid-column-manager-toggle-all\"\n :class=\"$style.toggleAllBtn\"\n :disabled=\"toggleableFilteredItems.length === 0\"\n @click.stop=\"toggleAllFiltered\"\n >\n <PlIcon24 v-if=\"allFilteredHidden\" name=\"view-show\" />\n <PlIcon24 v-else name=\"view-hide\" />\n </PlBtnSecondary>\n </div>\n <PlElementList\n data-testid=\"pl-ag-grid-column-manager-list\"\n :items=\"filteredItems\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"\n (fromIndex, toIndex) => {\n if (!props.api.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n props.api.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!props.api.isDestroyed()) {\n props.api.setColumnsVisible([item.column], !item.column.isVisible());\n }\n }\n \"\n :is-toggled=\"(item) => !item.column.isVisible()\"\n :is-toggable=\"(item) => item.id !== PlAgDataTableRowNumberColId\"\n :is-pinned=\"(item) => !!item.column.getColDef().lockPosition\"\n :is-pinnable=\"() => false\"\n :disable-dragging=\"query.length > 0\"\n disable-removing\n >\n <template #item-title=\"{ item }\">\n <span data-testid=\"pl-ag-grid-column-manager-item\">\n <span\n v-for=\"(segment, i) of segments.get(item.label)\"\n :key=\"i\"\n :class=\"{ [$style.match]: segment.match }\"\n >{{ segment.value }}</span\n >\n </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n\n.searchRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.searchRow > :first-child {\n flex: 1;\n}\n\n.toggleAllBtn {\n min-width: unset;\n opacity: 0.2;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;EAgBA,IAAM,IAAQ,GAcR,IAAQ,EAAI,GAAG,EACf,IAAa,EAAI,GAAM,EACvB,IAAiB,EAAkC,wBAAwB,EAE3E,IAAU,EAAe,EAAM,EAU/B,EAAE,kBAAe,gBAAa,EAAiB;GACnD,OATY,QACL,EAAQ,MAAM,KAAK,GAAK,OAAO;IACpC,QAAQ;IACR,IAAI,EAAI,OAAO;IACf,OAAO,EAAI,WAAW,CAAC,cAAc,mBAAmB,IAAI,EAAE;IAC/D,EAAE,CACH;GAIA;GACA,aAAa,MAAS,CAAC,EAAK,MAAM;GACnC,CAAC,EAEI,IAA0B,QAC9B,EAAc,MAAM,QAAQ,MAAS,EAAK,OAAO,EAA4B,CAC9E,EAEK,IAAoB,QAEtB,EAAwB,MAAM,SAAS,KACvC,EAAwB,MAAM,OAAO,MAAS,CAAC,EAAK,OAAO,WAAW,CAAC,CAC1E,EAEK,UAA0B;AAC9B,OAAI,EAAM,IAAI,aAAa,CAAE;GAC7B,IAAM,IAAc,EAAkB,OAChC,IAAO,EAAwB,MAAM,KAAK,MAAS,EAAK,OAAO;AACjE,KAAK,WAAW,KACpB,EAAM,IAAI,kBAAkB,GAAM,EAAY;;qCAK9B,EAAA,EAAc,IAAA,GAAA,EAA9B,EAQW,GAAA;;GARsB,IAAI,EAAA,EAAc;MACjD,EAMa,EAAA,EAAA,EAAA;GALX,eAAY;GACZ,MAAK;GACJ,SAAK,AAAA,EAAA,OAAA,GAAA,MAAO,EAAA,QAAU,CAAI,EAAA,OAAU,CAAA,OAAA,CAAA;;oBAGvC,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAFC,aAED,GAAA,CAAA,CAAA,CAAA;;gCAGF,EA0De,EAAA,EAAA,EAAA;eAzDJ,EAAA;4CAAU,QAAA;GACnB,eAAY;GACX,OAAO,EAAA;GACR,0BAAA;;GAEW,OAAK,QAAe,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAd,kBAAc,GAAA,CAAA,CAAA,CAAA;oBAYzB,CAXN,EAWM,OAAA;IAXD,eAAY;IAAwC,OAAK,EAAEA,EAAAA,OAAO,UAAS;OAC9E,EAA0F,EAAA,EAAA,EAAA;gBAAlE,EAAA;6CAAK,QAAA;IAAE,eAAY;IAAmC,WAAA;gCAC9E,EAQiB,EAAA,EAAA,EAAA;IAPf,eAAY;IACX,OAAK,EAAEA,EAAAA,OAAO,aAAY;IAC1B,UAAU,EAAA,MAAwB,WAAM;IACxC,SAAK,EAAO,GAAiB,CAAA,OAAA,CAAA;;qBAEwB,CAAtC,EAAA,SAAA,GAAA,EAAhB,EAAsD,EAAA,EAAA,EAAA;;KAAnB,MAAK;gBACxC,EAAoC,EAAA,EAAA,EAAA;;KAAnB,MAAK;;;sCAG1B,EAsCgB,EAAA,EAAA,EAAA;IArCd,eAAY;IACX,OAAO,EAAA,EAAa;IACpB,iBAAe,MAAS,EAAK;IAC7B,iBAAe,MAAI,CAAM,EAAK,OAAO,WAAS,CAAG;IACjD,YAAmB,GAAW,MAAO;UAAsB,EAAM,IAAI,aAAW,EAAA;UAAwB,IAAe,EAAA,EAAO,CAAC;AAAwB,QAAM,IAAI,YAAW,CAAE,EAAY,EAAG,EAAO;;;;IASpM,cAAqB,MAAI;KAAsB,EAAM,IAAI,aAAW,IAAkB,EAAM,IAAI,kBAAiB,CAAE,EAAK,OAAM,EAAA,CAAI,EAAK,OAAO,WAAS,CAAA;;IAOvJ,eAAa,MAAI,CAAM,EAAK,OAAO,WAAS;IAC5C,gBAAc,MAAS,EAAK,OAAO,EAAA,EAA2B;IAC9D,cAAY,MAAI,CAAA,CAAO,EAAK,OAAO,WAAS,CAAG;IAC/C,qBAAa;IACb,oBAAkB,EAAA,MAAM,SAAM;IAC/B,oBAAA;;IAEW,cAAU,GAQZ,EARgB,cAAI,CAC3B,EAOO,QAPP,GAOO,EAAA,EAAA,GAAA,EANL,EAKC,GAAA,MAAA,EAJwB,EAAA,EAAQ,CAAC,IAAI,EAAK,MAAK,GAAtC,GAAS,YADnB,EAKC,QAAA;KAHE,KAAK;KACL,OAAK,EAAA,GAAKA,EAAAA,OAAO,QAAQ,EAAQ,OAAK,CAAA;SACnC,EAAQ,MAAK,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgRowNumCheckbox.js","names":[],"sources":["../../../src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport { ref, computed, onBeforeMount, onBeforeUnmount } from \"vue\";\nimport $styles from \"./pl-ag-row-num-checkbox.module.scss\";\nimport { isSelectionEnabled } from \"../../lib\";\n\nconst props = defineProps<{ params: ICellRendererParams }>();\n\nconst api = props.params.api;\nconst isChecked = ref(!!props.params.node.isSelected());\nconst forceShowCheckbox = computed(() => isChecked.value || isSelectionEnabled(api));\nconst allowedSelection = ref(isSelectionEnabled(api));\n\nconst updateSelection = () => {\n isChecked.value = props.params.node.isSelected() !== false;\n};\n\nconst setSelection = (val: boolean) => {\n if (isSelectionEnabled(api)) {\n props.params.node.setSelected(val);\n updateSelection();\n }\n};\n\nonBeforeMount(() => {\n props.params.node.addEventListener(\"rowSelected\", updateSelection);\n});\n\nonBeforeUnmount(() => {\n props.params.node.removeEventListener(\"rowSelected\", updateSelection);\n});\n</script>\n\n<template>\n <div\n :class=\"[\n $styles.container,\n { [$styles['allowed-selection']]: allowedSelection },\n 'd-flex',\n 'justify-center',\n 'align-center',\n ]\"\n >\n <div v-if=\"!isChecked\" :class=\"[$styles.text]\">{{ params.value }}</div>\n <PlCheckbox\n v-if=\"forceShowCheckbox\"\n v-model=\"isChecked\"\n :class=\"[$styles.checkbox, isChecked && $styles.checked]\"\n @update:modelValue=\"setSelection\"\n />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"PlAgRowNumCheckbox.js","names":[],"sources":["../../../src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport { ref, computed, onBeforeMount, onBeforeUnmount } from \"vue\";\nimport $styles from \"./pl-ag-row-num-checkbox.module.scss\";\nimport { isSelectionEnabled } from \"../../lib\";\n\nconst props = defineProps<{ params: ICellRendererParams }>();\n\nconst api = props.params.api;\nconst isChecked = ref(!!props.params.node.isSelected());\nconst forceShowCheckbox = computed(() => isChecked.value || isSelectionEnabled(api));\nconst allowedSelection = ref(isSelectionEnabled(api));\n\nconst updateSelection = () => {\n isChecked.value = props.params.node.isSelected() !== false;\n};\n\nconst setSelection = (val: boolean) => {\n if (isSelectionEnabled(api)) {\n props.params.node.setSelected(val);\n updateSelection();\n }\n};\n\nonBeforeMount(() => {\n props.params.node.addEventListener(\"rowSelected\", updateSelection);\n});\n\nonBeforeUnmount(() => {\n props.params.node.removeEventListener(\"rowSelected\", updateSelection);\n});\n</script>\n\n<template>\n <div\n data-testid=\"pl-ag-row-num-checkbox\"\n :class=\"[\n $styles.container,\n { [$styles['allowed-selection']]: allowedSelection },\n 'd-flex',\n 'justify-center',\n 'align-center',\n ]\"\n >\n <div v-if=\"!isChecked\" data-testid=\"pl-ag-row-num-checkbox-value\" :class=\"[$styles.text]\">\n {{ params.value }}\n </div>\n <PlCheckbox\n v-if=\"forceShowCheckbox\"\n v-model=\"isChecked\"\n data-testid=\"pl-ag-row-num-checkbox-checkbox\"\n :class=\"[$styles.checkbox, isChecked && $styles.checked]\"\n @update:modelValue=\"setSelection\"\n />\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgRowNumCheckbox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAM9D,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AA8FnD,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"PlAgRowNumCheckbox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAM9D,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAkGnD,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -17,19 +17,24 @@ var h = /* @__PURE__ */ o({
17
17
  h.params.node.addEventListener("rowSelected", b);
18
18
  }), l(() => {
19
19
  h.params.node.removeEventListener("rowSelected", b);
20
- }), (t, n) => (u(), a("div", { class: s([
21
- p(e).container,
22
- { [p(e)["allowed-selection"]]: y.value },
23
- "d-flex",
24
- "justify-center",
25
- "align-center"
26
- ]) }, [_.value ? i("", !0) : (u(), a("div", {
20
+ }), (t, n) => (u(), a("div", {
21
+ "data-testid": "pl-ag-row-num-checkbox",
22
+ class: s([
23
+ p(e).container,
24
+ { [p(e)["allowed-selection"]]: y.value },
25
+ "d-flex",
26
+ "justify-center",
27
+ "align-center"
28
+ ])
29
+ }, [_.value ? i("", !0) : (u(), a("div", {
27
30
  key: 0,
31
+ "data-testid": "pl-ag-row-num-checkbox-value",
28
32
  class: s([p(e).text])
29
33
  }, f(o.params.value), 3)), v.value ? (u(), r(p(m), {
30
34
  key: 1,
31
35
  modelValue: _.value,
32
36
  "onUpdate:modelValue": [n[0] ||= (e) => _.value = e, x],
37
+ "data-testid": "pl-ag-row-num-checkbox-checkbox",
33
38
  class: s([p(e).checkbox, _.value && p(e).checked])
34
39
  }, null, 8, ["modelValue", "class"])) : i("", !0)], 2));
35
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgRowNumCheckbox.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport { ref, computed, onBeforeMount, onBeforeUnmount } from \"vue\";\nimport $styles from \"./pl-ag-row-num-checkbox.module.scss\";\nimport { isSelectionEnabled } from \"../../lib\";\n\nconst props = defineProps<{ params: ICellRendererParams }>();\n\nconst api = props.params.api;\nconst isChecked = ref(!!props.params.node.isSelected());\nconst forceShowCheckbox = computed(() => isChecked.value || isSelectionEnabled(api));\nconst allowedSelection = ref(isSelectionEnabled(api));\n\nconst updateSelection = () => {\n isChecked.value = props.params.node.isSelected() !== false;\n};\n\nconst setSelection = (val: boolean) => {\n if (isSelectionEnabled(api)) {\n props.params.node.setSelected(val);\n updateSelection();\n }\n};\n\nonBeforeMount(() => {\n props.params.node.addEventListener(\"rowSelected\", updateSelection);\n});\n\nonBeforeUnmount(() => {\n props.params.node.removeEventListener(\"rowSelected\", updateSelection);\n});\n</script>\n\n<template>\n <div\n :class=\"[\n $styles.container,\n { [$styles['allowed-selection']]: allowedSelection },\n 'd-flex',\n 'justify-center',\n 'align-center',\n ]\"\n >\n <div v-if=\"!isChecked\" :class=\"[$styles.text]\">{{ params.value }}</div>\n <PlCheckbox\n v-if=\"forceShowCheckbox\"\n v-model=\"isChecked\"\n :class=\"[$styles.checkbox, isChecked && $styles.checked]\"\n @update:modelValue=\"setSelection\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;EAOA,IAAM,IAAQ,GAER,IAAM,EAAM,OAAO,KACnB,IAAY,EAAI,CAAC,CAAC,EAAM,OAAO,KAAK,YAAY,CAAC,EACjD,IAAoB,QAAe,EAAU,SAAS,EAAmB,EAAI,CAAC,EAC9E,IAAmB,EAAI,EAAmB,EAAI,CAAC,EAE/C,UAAwB;AAC5B,KAAU,QAAQ,EAAM,OAAO,KAAK,YAAY,KAAK;KAGjD,KAAgB,MAAiB;AACrC,GAAI,EAAmB,EAAI,KACzB,EAAM,OAAO,KAAK,YAAY,EAAI,EAClC,GAAiB;;SAIrB,QAAoB;AAClB,KAAM,OAAO,KAAK,iBAAiB,eAAe,EAAgB;IAClE,EAEF,QAAsB;AACpB,KAAM,OAAO,KAAK,oBAAoB,eAAe,EAAgB;IACrE,kBAIA,EAgBM,OAAA,EAfH,OAAK,EAAA;GAAU,EAAA,EAAO,CAAC;MAAoB,EAAA,EAAO,CAAA,uBAAwB,EAAA,OAAgB;;;;SAQ/E,EAAA,QAAkD,EAAA,IAAA,GAAA,IAAlD,GAAA,EAAZ,EAAuE,OAAA;;GAA/C,OAAK,EAAA,CAAG,EAAA,EAAO,CAAC,KAAI,CAAA;OAAM,EAAA,OAAO,MAAK,EAAA,EAAA,GAEtD,EAAA,SAAA,GAAA,EADR,EAKE,EAAA,EAAA,EAAA;;eAHS,EAAA;6CAAS,QAAA,GAEE,EAAA;GADnB,OAAK,EAAA,CAAG,EAAA,EAAO,CAAC,UAAU,EAAA,SAAa,EAAA,EAAO,CAAC,QAAO,CAAA"}
1
+ {"version":3,"file":"PlAgRowNumCheckbox.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams } from \"ag-grid-enterprise\";\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport { ref, computed, onBeforeMount, onBeforeUnmount } from \"vue\";\nimport $styles from \"./pl-ag-row-num-checkbox.module.scss\";\nimport { isSelectionEnabled } from \"../../lib\";\n\nconst props = defineProps<{ params: ICellRendererParams }>();\n\nconst api = props.params.api;\nconst isChecked = ref(!!props.params.node.isSelected());\nconst forceShowCheckbox = computed(() => isChecked.value || isSelectionEnabled(api));\nconst allowedSelection = ref(isSelectionEnabled(api));\n\nconst updateSelection = () => {\n isChecked.value = props.params.node.isSelected() !== false;\n};\n\nconst setSelection = (val: boolean) => {\n if (isSelectionEnabled(api)) {\n props.params.node.setSelected(val);\n updateSelection();\n }\n};\n\nonBeforeMount(() => {\n props.params.node.addEventListener(\"rowSelected\", updateSelection);\n});\n\nonBeforeUnmount(() => {\n props.params.node.removeEventListener(\"rowSelected\", updateSelection);\n});\n</script>\n\n<template>\n <div\n data-testid=\"pl-ag-row-num-checkbox\"\n :class=\"[\n $styles.container,\n { [$styles['allowed-selection']]: allowedSelection },\n 'd-flex',\n 'justify-center',\n 'align-center',\n ]\"\n >\n <div v-if=\"!isChecked\" data-testid=\"pl-ag-row-num-checkbox-value\" :class=\"[$styles.text]\">\n {{ params.value }}\n </div>\n <PlCheckbox\n v-if=\"forceShowCheckbox\"\n v-model=\"isChecked\"\n data-testid=\"pl-ag-row-num-checkbox-checkbox\"\n :class=\"[$styles.checkbox, isChecked && $styles.checked]\"\n @update:modelValue=\"setSelection\"\n />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;EAOA,IAAM,IAAQ,GAER,IAAM,EAAM,OAAO,KACnB,IAAY,EAAI,CAAC,CAAC,EAAM,OAAO,KAAK,YAAY,CAAC,EACjD,IAAoB,QAAe,EAAU,SAAS,EAAmB,EAAI,CAAC,EAC9E,IAAmB,EAAI,EAAmB,EAAI,CAAC,EAE/C,UAAwB;AAC5B,KAAU,QAAQ,EAAM,OAAO,KAAK,YAAY,KAAK;KAGjD,KAAgB,MAAiB;AACrC,GAAI,EAAmB,EAAI,KACzB,EAAM,OAAO,KAAK,YAAY,EAAI,EAClC,GAAiB;;SAIrB,QAAoB;AAClB,KAAM,OAAO,KAAK,iBAAiB,eAAe,EAAgB;IAClE,EAEF,QAAsB;AACpB,KAAM,OAAO,KAAK,oBAAoB,eAAe,EAAgB;IACrE,kBAIA,EAoBM,OAAA;GAnBJ,eAAY;GACX,OAAK,EAAA;IAAU,EAAA,EAAO,CAAC;OAAoB,EAAA,EAAO,CAAA,uBAAwB,EAAA,OAAgB;;;;;MAQ/E,EAAA,QACK,EAAA,IAAA,GAAA,IADL,GAAA,EAAZ,EAEM,OAAA;;GAFiB,eAAY;GAAgC,OAAK,EAAA,CAAG,EAAA,EAAO,CAAC,KAAI,CAAA;OAClF,EAAA,OAAO,MAAK,EAAA,EAAA,GAGT,EAAA,SAAA,GAAA,EADR,EAME,EAAA,EAAA,EAAA;;eAJS,EAAA;6CAAS,QAAA,GAGE,EAAA;GAFpB,eAAY;GACX,OAAK,EAAA,CAAG,EAAA,EAAO,CAAC,UAAU,EAAA,SAAa,EAAA,EAAO,CAAC,QAAO,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgRowNumHeader.js","names":[],"sources":["../../src/components/PlAgRowNumHeader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport type { IHeaderParams } from \"ag-grid-enterprise\";\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from \"vue\";\nimport {\n deselectAll,\n getSelectedRowsCount,\n getTotalRowsCount,\n isSelectionEnabled,\n selectAll,\n} from \"../lib\";\n\nconst { params } = defineProps<{\n params: IHeaderParams;\n}>();\n\nconst selectedRowCount = ref(getSelectedRowsCount(params.api));\nconst totalRowCount = ref(getTotalRowsCount(params.api));\nconst isSelectable = ref(isSelectionEnabled(params.api));\n\nconst someRowsSelected = computed(() => selectedRowCount.value > 0);\n\nconst allRowsSelected = computed(\n () => someRowsSelected.value && selectedRowCount.value === totalRowCount.value,\n);\n\nfunction toggleSelectAll() {\n if (someRowsSelected.value) {\n deselectAll(params.api);\n } else {\n selectAll(params.api);\n }\n}\n\nfunction updateRowCounts() {\n selectedRowCount.value = getSelectedRowsCount(params.api);\n totalRowCount.value = getTotalRowsCount(params.api);\n}\n\nfunction updateIsSelectable() {\n isSelectable.value = isSelectionEnabled(params.api);\n}\n\nonBeforeMount(() => {\n params.api.addEventListener(\"selectionChanged\", updateRowCounts);\n params.api.addEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.addEventListener(\"modelUpdated\", updateRowCounts);\n params.api.addEventListener(\"stateUpdated\", updateIsSelectable);\n});\n\nonBeforeUnmount(() => {\n params.api.removeEventListener(\"selectionChanged\", updateRowCounts);\n params.api.removeEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.removeEventListener(\"modelUpdated\", updateRowCounts);\n params.api.removeEventListener(\"stateUpdated\", updateIsSelectable);\n});\n</script>\n\n<template>\n <div\n style=\"\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n \"\n >\n <PlCheckbox\n v-if=\"isSelectable\"\n :model-value=\"someRowsSelected\"\n :indeterminate=\"someRowsSelected && !allRowsSelected\"\n @update:model-value=\"toggleSelectAll\"\n />\n <span v-else>\n {{ params.displayName }}\n </span>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"PlAgRowNumHeader.js","names":[],"sources":["../../src/components/PlAgRowNumHeader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport type { IHeaderParams } from \"ag-grid-enterprise\";\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from \"vue\";\nimport {\n deselectAll,\n getSelectedRowsCount,\n getTotalRowsCount,\n isSelectionEnabled,\n selectAll,\n} from \"../lib\";\n\nconst { params } = defineProps<{\n params: IHeaderParams;\n}>();\n\nconst selectedRowCount = ref(getSelectedRowsCount(params.api));\nconst totalRowCount = ref(getTotalRowsCount(params.api));\nconst isSelectable = ref(isSelectionEnabled(params.api));\n\nconst someRowsSelected = computed(() => selectedRowCount.value > 0);\n\nconst allRowsSelected = computed(\n () => someRowsSelected.value && selectedRowCount.value === totalRowCount.value,\n);\n\nfunction toggleSelectAll() {\n if (someRowsSelected.value) {\n deselectAll(params.api);\n } else {\n selectAll(params.api);\n }\n}\n\nfunction updateRowCounts() {\n selectedRowCount.value = getSelectedRowsCount(params.api);\n totalRowCount.value = getTotalRowsCount(params.api);\n}\n\nfunction updateIsSelectable() {\n isSelectable.value = isSelectionEnabled(params.api);\n}\n\nonBeforeMount(() => {\n params.api.addEventListener(\"selectionChanged\", updateRowCounts);\n params.api.addEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.addEventListener(\"modelUpdated\", updateRowCounts);\n params.api.addEventListener(\"stateUpdated\", updateIsSelectable);\n});\n\nonBeforeUnmount(() => {\n params.api.removeEventListener(\"selectionChanged\", updateRowCounts);\n params.api.removeEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.removeEventListener(\"modelUpdated\", updateRowCounts);\n params.api.removeEventListener(\"stateUpdated\", updateIsSelectable);\n});\n</script>\n\n<template>\n <div\n data-testid=\"pl-ag-row-num-header\"\n style=\"\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n \"\n >\n <PlCheckbox\n v-if=\"isSelectable\"\n data-testid=\"pl-ag-row-num-header-checkbox\"\n :model-value=\"someRowsSelected\"\n :indeterminate=\"someRowsSelected && !allRowsSelected\"\n @update:model-value=\"toggleSelectAll\"\n />\n <span v-else data-testid=\"pl-ag-row-num-header-label\">\n {{ params.displayName }}\n </span>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgRowNumHeader.vue.d.ts","sourceRoot":"","sources":["../../src/components/PlAgRowNumHeader.vue"],"names":[],"mappings":"AAmFA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUxD,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAqGF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"PlAgRowNumHeader.vue.d.ts","sourceRoot":"","sources":["../../src/components/PlAgRowNumHeader.vue"],"names":[],"mappings":"AAqFA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUxD,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAyGF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -3,13 +3,19 @@ import "../lib.js";
3
3
  import { computed as a, createBlock as o, createElementBlock as s, defineComponent as c, onBeforeMount as l, onBeforeUnmount as u, openBlock as d, ref as f, toDisplayString as p, unref as m } from "vue";
4
4
  import { PlCheckbox as h } from "@milaboratories/uikit";
5
5
  //#region src/components/PlAgRowNumHeader.vue?vue&type=script&setup=true&lang.ts
6
- var g = { style: {
7
- position: "absolute",
8
- inset: "0",
9
- display: "flex",
10
- "justify-content": "center",
11
- "align-items": "center"
12
- } }, _ = { key: 1 }, v = /* @__PURE__ */ c({
6
+ var g = {
7
+ "data-testid": "pl-ag-row-num-header",
8
+ style: {
9
+ position: "absolute",
10
+ inset: "0",
11
+ display: "flex",
12
+ "justify-content": "center",
13
+ "align-items": "center"
14
+ }
15
+ }, _ = {
16
+ key: 1,
17
+ "data-testid": "pl-ag-row-num-header-label"
18
+ }, v = /* @__PURE__ */ c({
13
19
  __name: "PlAgRowNumHeader",
14
20
  props: { params: {} },
15
21
  setup(c) {
@@ -29,6 +35,7 @@ var g = { style: {
29
35
  c.params.api.removeEventListener("selectionChanged", w), c.params.api.removeEventListener("rowDataUpdated", w), c.params.api.removeEventListener("modelUpdated", w), c.params.api.removeEventListener("stateUpdated", T);
30
36
  }), (e, t) => (d(), s("div", g, [b.value ? (d(), o(m(h), {
31
37
  key: 0,
38
+ "data-testid": "pl-ag-row-num-header-checkbox",
32
39
  "model-value": x.value,
33
40
  indeterminate: x.value && !S.value,
34
41
  "onUpdate:modelValue": C
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgRowNumHeader.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/PlAgRowNumHeader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport type { IHeaderParams } from \"ag-grid-enterprise\";\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from \"vue\";\nimport {\n deselectAll,\n getSelectedRowsCount,\n getTotalRowsCount,\n isSelectionEnabled,\n selectAll,\n} from \"../lib\";\n\nconst { params } = defineProps<{\n params: IHeaderParams;\n}>();\n\nconst selectedRowCount = ref(getSelectedRowsCount(params.api));\nconst totalRowCount = ref(getTotalRowsCount(params.api));\nconst isSelectable = ref(isSelectionEnabled(params.api));\n\nconst someRowsSelected = computed(() => selectedRowCount.value > 0);\n\nconst allRowsSelected = computed(\n () => someRowsSelected.value && selectedRowCount.value === totalRowCount.value,\n);\n\nfunction toggleSelectAll() {\n if (someRowsSelected.value) {\n deselectAll(params.api);\n } else {\n selectAll(params.api);\n }\n}\n\nfunction updateRowCounts() {\n selectedRowCount.value = getSelectedRowsCount(params.api);\n totalRowCount.value = getTotalRowsCount(params.api);\n}\n\nfunction updateIsSelectable() {\n isSelectable.value = isSelectionEnabled(params.api);\n}\n\nonBeforeMount(() => {\n params.api.addEventListener(\"selectionChanged\", updateRowCounts);\n params.api.addEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.addEventListener(\"modelUpdated\", updateRowCounts);\n params.api.addEventListener(\"stateUpdated\", updateIsSelectable);\n});\n\nonBeforeUnmount(() => {\n params.api.removeEventListener(\"selectionChanged\", updateRowCounts);\n params.api.removeEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.removeEventListener(\"modelUpdated\", updateRowCounts);\n params.api.removeEventListener(\"stateUpdated\", updateIsSelectable);\n});\n</script>\n\n<template>\n <div\n style=\"\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n \"\n >\n <PlCheckbox\n v-if=\"isSelectable\"\n :model-value=\"someRowsSelected\"\n :indeterminate=\"someRowsSelected && !allRowsSelected\"\n @update:model-value=\"toggleSelectAll\"\n />\n <span v-else>\n {{ params.displayName }}\n </span>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAgBA,IAAM,IAAmB,EAAI,EAAqB,EAAA,OAAO,IAAI,CAAC,EACxD,IAAgB,EAAI,EAAkB,EAAA,OAAO,IAAI,CAAC,EAClD,IAAe,EAAI,EAAmB,EAAA,OAAO,IAAI,CAAC,EAElD,IAAmB,QAAe,EAAiB,QAAQ,EAAE,EAE7D,IAAkB,QAChB,EAAiB,SAAS,EAAiB,UAAU,EAAc,MAC1E;EAED,SAAS,IAAkB;AACzB,GAAI,EAAiB,QACnB,EAAY,EAAA,OAAO,IAAI,GAEvB,EAAU,EAAA,OAAO,IAAI;;EAIzB,SAAS,IAAkB;AAEzB,GADA,EAAiB,QAAQ,EAAqB,EAAA,OAAO,IAAI,EACzD,EAAc,QAAQ,EAAkB,EAAA,OAAO,IAAI;;EAGrD,SAAS,IAAqB;AAC5B,KAAa,QAAQ,EAAmB,EAAA,OAAO,IAAI;;SAGrD,QAAoB;AAIlB,GAHA,EAAA,OAAO,IAAI,iBAAiB,oBAAoB,EAAgB,EAChE,EAAA,OAAO,IAAI,iBAAiB,kBAAkB,EAAgB,EAC9D,EAAA,OAAO,IAAI,iBAAiB,gBAAgB,EAAgB,EAC5D,EAAA,OAAO,IAAI,iBAAiB,gBAAgB,EAAmB;IAC/D,EAEF,QAAsB;AAIpB,GAHA,EAAA,OAAO,IAAI,oBAAoB,oBAAoB,EAAgB,EACnE,EAAA,OAAO,IAAI,oBAAoB,kBAAkB,EAAgB,EACjE,EAAA,OAAO,IAAI,oBAAoB,gBAAgB,EAAgB,EAC/D,EAAA,OAAO,IAAI,oBAAoB,gBAAgB,EAAmB;IAClE,kBAIA,EAkBM,OAlBN,GAkBM,CARI,EAAA,SAAA,GAAA,EADR,EAKE,EAAA,EAAA,EAAA;;GAHC,eAAa,EAAA;GACb,eAAe,EAAA,SAAgB,CAAK,EAAA;GACpC,uBAAoB;yDAEvB,EAEO,QAAA,GAAA,EADF,EAAA,OAAO,YAAW,EAAA,EAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"PlAgRowNumHeader.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/PlAgRowNumHeader.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlCheckbox } from \"@milaboratories/uikit\";\nimport type { IHeaderParams } from \"ag-grid-enterprise\";\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from \"vue\";\nimport {\n deselectAll,\n getSelectedRowsCount,\n getTotalRowsCount,\n isSelectionEnabled,\n selectAll,\n} from \"../lib\";\n\nconst { params } = defineProps<{\n params: IHeaderParams;\n}>();\n\nconst selectedRowCount = ref(getSelectedRowsCount(params.api));\nconst totalRowCount = ref(getTotalRowsCount(params.api));\nconst isSelectable = ref(isSelectionEnabled(params.api));\n\nconst someRowsSelected = computed(() => selectedRowCount.value > 0);\n\nconst allRowsSelected = computed(\n () => someRowsSelected.value && selectedRowCount.value === totalRowCount.value,\n);\n\nfunction toggleSelectAll() {\n if (someRowsSelected.value) {\n deselectAll(params.api);\n } else {\n selectAll(params.api);\n }\n}\n\nfunction updateRowCounts() {\n selectedRowCount.value = getSelectedRowsCount(params.api);\n totalRowCount.value = getTotalRowsCount(params.api);\n}\n\nfunction updateIsSelectable() {\n isSelectable.value = isSelectionEnabled(params.api);\n}\n\nonBeforeMount(() => {\n params.api.addEventListener(\"selectionChanged\", updateRowCounts);\n params.api.addEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.addEventListener(\"modelUpdated\", updateRowCounts);\n params.api.addEventListener(\"stateUpdated\", updateIsSelectable);\n});\n\nonBeforeUnmount(() => {\n params.api.removeEventListener(\"selectionChanged\", updateRowCounts);\n params.api.removeEventListener(\"rowDataUpdated\", updateRowCounts);\n params.api.removeEventListener(\"modelUpdated\", updateRowCounts);\n params.api.removeEventListener(\"stateUpdated\", updateIsSelectable);\n});\n</script>\n\n<template>\n <div\n data-testid=\"pl-ag-row-num-header\"\n style=\"\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n \"\n >\n <PlCheckbox\n v-if=\"isSelectable\"\n data-testid=\"pl-ag-row-num-header-checkbox\"\n :model-value=\"someRowsSelected\"\n :indeterminate=\"someRowsSelected && !allRowsSelected\"\n @update:model-value=\"toggleSelectAll\"\n />\n <span v-else data-testid=\"pl-ag-row-num-header-label\">\n {{ params.displayName }}\n </span>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAgBA,IAAM,IAAmB,EAAI,EAAqB,EAAA,OAAO,IAAI,CAAC,EACxD,IAAgB,EAAI,EAAkB,EAAA,OAAO,IAAI,CAAC,EAClD,IAAe,EAAI,EAAmB,EAAA,OAAO,IAAI,CAAC,EAElD,IAAmB,QAAe,EAAiB,QAAQ,EAAE,EAE7D,IAAkB,QAChB,EAAiB,SAAS,EAAiB,UAAU,EAAc,MAC1E;EAED,SAAS,IAAkB;AACzB,GAAI,EAAiB,QACnB,EAAY,EAAA,OAAO,IAAI,GAEvB,EAAU,EAAA,OAAO,IAAI;;EAIzB,SAAS,IAAkB;AAEzB,GADA,EAAiB,QAAQ,EAAqB,EAAA,OAAO,IAAI,EACzD,EAAc,QAAQ,EAAkB,EAAA,OAAO,IAAI;;EAGrD,SAAS,IAAqB;AAC5B,KAAa,QAAQ,EAAmB,EAAA,OAAO,IAAI;;SAGrD,QAAoB;AAIlB,GAHA,EAAA,OAAO,IAAI,iBAAiB,oBAAoB,EAAgB,EAChE,EAAA,OAAO,IAAI,iBAAiB,kBAAkB,EAAgB,EAC9D,EAAA,OAAO,IAAI,iBAAiB,gBAAgB,EAAgB,EAC5D,EAAA,OAAO,IAAI,iBAAiB,gBAAgB,EAAmB;IAC/D,EAEF,QAAsB;AAIpB,GAHA,EAAA,OAAO,IAAI,oBAAoB,oBAAoB,EAAgB,EACnE,EAAA,OAAO,IAAI,oBAAoB,kBAAkB,EAAgB,EACjE,EAAA,OAAO,IAAI,oBAAoB,gBAAgB,EAAgB,EAC/D,EAAA,OAAO,IAAI,oBAAoB,gBAAgB,EAAmB;IAClE,kBAIA,EAoBM,OApBN,GAoBM,CATI,EAAA,SAAA,GAAA,EADR,EAME,EAAA,EAAA,EAAA;;GAJA,eAAY;GACX,eAAa,EAAA;GACb,eAAe,EAAA,SAAgB,CAAK,EAAA;GACpC,uBAAoB;yDAEvB,EAEO,QAFP,GAEO,EADF,EAAA,OAAO,YAAW,EAAA,EAAA,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgTextAndButtonCell.js","names":[],"sources":["../../../src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams, RowDoubleClickedEvent } from \"ag-grid-enterprise\";\nimport type { MaskIconName16 } from \"@milaboratories/uikit\";\nimport { PlMaskIcon16 } from \"@milaboratories/uikit\";\nimport \"./pl-ag-text-and-button-cell.scss\";\n\nconst props = defineProps<{\n params: ICellRendererParams & {\n /**\n * Button icon MaskIconName16\n */\n icon?: MaskIconName16;\n /**\n * Button label\n */\n btnLabel?: string;\n /**\n * If invokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row. In this case,\n * the handler passed to the component is not called, even if it is defined.\n *\n * If invokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but the provided handler will be called, receiving\n * the ICellRendererParams as an argument.\n */\n invokeRowsOnDoubleClick?: boolean;\n /**\n * plHandler parameter is a click handler that is invoked when\n * the invokeRowsOnDoubleClick property is set to false.\n */\n onClick?: (params: ICellRendererParams) => void;\n };\n}>();\n\nfunction triggerRowDoubleClick() {\n if (props.params.invokeRowsOnDoubleClick) {\n const gridApi = props.params.api;\n\n const event: RowDoubleClickedEvent = {\n rowPinned: props.params.node.rowPinned,\n api: gridApi,\n rowIndex: props.params.node.rowIndex,\n context: gridApi,\n type: \"rowDoubleClicked\",\n node: props.params.node,\n data: props.params.data,\n event: null,\n };\n\n gridApi.dispatchEvent(event);\n } else {\n props.params.onClick?.(props.params);\n }\n}\n</script>\n<template>\n <div class=\"pl-ag-grid-open-cell d-flex\">\n <div class=\"pl-ag-grid-open-cell__value\">\n {{ params.value }}\n </div>\n <div\n class=\"pl-ag-grid-open-cell__activator text-caps11 align-center\"\n @click.stop=\"triggerRowDoubleClick\"\n >\n <PlMaskIcon16 :name=\"params.icon ?? 'maximize'\" />\n {{ params.btnLabel ?? \"Open\" }}\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"PlAgTextAndButtonCell.js","names":[],"sources":["../../../src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams, RowDoubleClickedEvent } from \"ag-grid-enterprise\";\nimport type { MaskIconName16 } from \"@milaboratories/uikit\";\nimport { PlMaskIcon16 } from \"@milaboratories/uikit\";\nimport \"./pl-ag-text-and-button-cell.scss\";\n\nconst props = defineProps<{\n params: ICellRendererParams & {\n /**\n * Button icon MaskIconName16\n */\n icon?: MaskIconName16;\n /**\n * Button label\n */\n btnLabel?: string;\n /**\n * If invokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row. In this case,\n * the handler passed to the component is not called, even if it is defined.\n *\n * If invokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but the provided handler will be called, receiving\n * the ICellRendererParams as an argument.\n */\n invokeRowsOnDoubleClick?: boolean;\n /**\n * plHandler parameter is a click handler that is invoked when\n * the invokeRowsOnDoubleClick property is set to false.\n */\n onClick?: (params: ICellRendererParams) => void;\n };\n}>();\n\nfunction triggerRowDoubleClick() {\n if (props.params.invokeRowsOnDoubleClick) {\n const gridApi = props.params.api;\n\n const event: RowDoubleClickedEvent = {\n rowPinned: props.params.node.rowPinned,\n api: gridApi,\n rowIndex: props.params.node.rowIndex,\n context: gridApi,\n type: \"rowDoubleClicked\",\n node: props.params.node,\n data: props.params.data,\n event: null,\n };\n\n gridApi.dispatchEvent(event);\n } else {\n props.params.onClick?.(props.params);\n }\n}\n</script>\n<template>\n <div data-testid=\"pl-ag-text-and-button-cell\" class=\"pl-ag-grid-open-cell d-flex\">\n <div data-testid=\"pl-ag-text-and-button-cell-value\" class=\"pl-ag-grid-open-cell__value\">\n {{ params.value }}\n </div>\n <div\n data-testid=\"pl-ag-text-and-button-cell-button\"\n class=\"pl-ag-grid-open-cell__activator text-caps11 align-center\"\n @click.stop=\"triggerRowDoubleClick\"\n >\n <PlMaskIcon16 :name=\"params.icon ?? 'maximize'\" />\n {{ params.btnLabel ?? \"Open\" }}\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgTextAndButtonCell.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue"],"names":[],"mappings":"AAwEA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,mCAAmC,CAAC;AAE3C,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,mBAAmB,GAAG;QAC5B;;WAEG;QACH,IAAI,CAAC,EAAE,cAAc,CAAC;QACtB;;WAEG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;;;;;WAQG;QACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC;;;WAGG;QACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;KACjD,CAAC;CACH,CAAC;AA0EF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"PlAgTextAndButtonCell.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue"],"names":[],"mappings":"AAyEA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,mCAAmC,CAAC;AAE3C,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,mBAAmB,GAAG;QAC5B;;WAEG;QACH,IAAI,CAAC,EAAE,cAAc,CAAC;QACtB;;WAEG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;;;;;WAQG;QACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC;;;WAGG;QACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;KACjD,CAAC;CACH,CAAC;AA6EF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -2,7 +2,13 @@ import './pl-ag-text-and-button-cell.css';/* empty css
2
2
  import { createElementBlock as e, createElementVNode as t, createTextVNode as n, createVNode as r, defineComponent as i, openBlock as a, toDisplayString as o, unref as s, withModifiers as c } from "vue";
3
3
  import { PlMaskIcon16 as l } from "@milaboratories/uikit";
4
4
  //#region src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue?vue&type=script&setup=true&lang.ts
5
- var u = { class: "pl-ag-grid-open-cell d-flex" }, d = { class: "pl-ag-grid-open-cell__value" }, f = /* @__PURE__ */ i({
5
+ var u = {
6
+ "data-testid": "pl-ag-text-and-button-cell",
7
+ class: "pl-ag-grid-open-cell d-flex"
8
+ }, d = {
9
+ "data-testid": "pl-ag-text-and-button-cell-value",
10
+ class: "pl-ag-grid-open-cell__value"
11
+ }, f = /* @__PURE__ */ i({
6
12
  __name: "PlAgTextAndButtonCell",
7
13
  props: { params: {} },
8
14
  setup(i) {
@@ -23,6 +29,7 @@ var u = { class: "pl-ag-grid-open-cell d-flex" }, d = { class: "pl-ag-grid-open-
23
29
  } else f.params.onClick?.(f.params);
24
30
  }
25
31
  return (f, m) => (a(), e("div", u, [t("div", d, o(i.params.value), 1), t("div", {
32
+ "data-testid": "pl-ag-text-and-button-cell-button",
26
33
  class: "pl-ag-grid-open-cell__activator text-caps11 align-center",
27
34
  onClick: c(p, ["stop"])
28
35
  }, [r(s(l), { name: i.params.icon ?? "maximize" }, null, 8, ["name"]), n(" " + o(i.params.btnLabel ?? "Open"), 1)])]));
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgTextAndButtonCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams, RowDoubleClickedEvent } from \"ag-grid-enterprise\";\nimport type { MaskIconName16 } from \"@milaboratories/uikit\";\nimport { PlMaskIcon16 } from \"@milaboratories/uikit\";\nimport \"./pl-ag-text-and-button-cell.scss\";\n\nconst props = defineProps<{\n params: ICellRendererParams & {\n /**\n * Button icon MaskIconName16\n */\n icon?: MaskIconName16;\n /**\n * Button label\n */\n btnLabel?: string;\n /**\n * If invokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row. In this case,\n * the handler passed to the component is not called, even if it is defined.\n *\n * If invokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but the provided handler will be called, receiving\n * the ICellRendererParams as an argument.\n */\n invokeRowsOnDoubleClick?: boolean;\n /**\n * plHandler parameter is a click handler that is invoked when\n * the invokeRowsOnDoubleClick property is set to false.\n */\n onClick?: (params: ICellRendererParams) => void;\n };\n}>();\n\nfunction triggerRowDoubleClick() {\n if (props.params.invokeRowsOnDoubleClick) {\n const gridApi = props.params.api;\n\n const event: RowDoubleClickedEvent = {\n rowPinned: props.params.node.rowPinned,\n api: gridApi,\n rowIndex: props.params.node.rowIndex,\n context: gridApi,\n type: \"rowDoubleClicked\",\n node: props.params.node,\n data: props.params.data,\n event: null,\n };\n\n gridApi.dispatchEvent(event);\n } else {\n props.params.onClick?.(props.params);\n }\n}\n</script>\n<template>\n <div class=\"pl-ag-grid-open-cell d-flex\">\n <div class=\"pl-ag-grid-open-cell__value\">\n {{ params.value }}\n </div>\n <div\n class=\"pl-ag-grid-open-cell__activator text-caps11 align-center\"\n @click.stop=\"triggerRowDoubleClick\"\n >\n <PlMaskIcon16 :name=\"params.icon ?? 'maximize'\" />\n {{ params.btnLabel ?? \"Open\" }}\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;EAMA,IAAM,IAAQ;EA4Bd,SAAS,IAAwB;AAC/B,OAAI,EAAM,OAAO,yBAAyB;IACxC,IAAM,IAAU,EAAM,OAAO,KAEvB,IAA+B;KACnC,WAAW,EAAM,OAAO,KAAK;KAC7B,KAAK;KACL,UAAU,EAAM,OAAO,KAAK;KAC5B,SAAS;KACT,MAAM;KACN,MAAM,EAAM,OAAO;KACnB,MAAM,EAAM,OAAO;KACnB,OAAO;KACR;AAED,MAAQ,cAAc,EAAM;SAE5B,GAAM,OAAO,UAAU,EAAM,OAAO;;yBAKtC,EAWM,OAXN,GAWM,CAVJ,EAEM,OAFN,GAEM,EADD,EAAA,OAAO,MAAK,EAAA,EAAA,EAEjB,EAMM,OAAA;GALJ,OAAM;GACL,SAAK,EAAO,GAAqB,CAAA,OAAA,CAAA;MAElC,EAAkD,EAAA,EAAA,EAAA,EAAnC,MAAM,EAAA,OAAO,QAAI,YAAA,EAAA,MAAA,GAAA,CAAA,OAAA,CAAA,EAAA,EAAkB,MAClD,EAAG,EAAA,OAAO,YAAQ,OAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"PlAgTextAndButtonCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ICellRendererParams, RowDoubleClickedEvent } from \"ag-grid-enterprise\";\nimport type { MaskIconName16 } from \"@milaboratories/uikit\";\nimport { PlMaskIcon16 } from \"@milaboratories/uikit\";\nimport \"./pl-ag-text-and-button-cell.scss\";\n\nconst props = defineProps<{\n params: ICellRendererParams & {\n /**\n * Button icon MaskIconName16\n */\n icon?: MaskIconName16;\n /**\n * Button label\n */\n btnLabel?: string;\n /**\n * If invokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row. In this case,\n * the handler passed to the component is not called, even if it is defined.\n *\n * If invokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but the provided handler will be called, receiving\n * the ICellRendererParams as an argument.\n */\n invokeRowsOnDoubleClick?: boolean;\n /**\n * plHandler parameter is a click handler that is invoked when\n * the invokeRowsOnDoubleClick property is set to false.\n */\n onClick?: (params: ICellRendererParams) => void;\n };\n}>();\n\nfunction triggerRowDoubleClick() {\n if (props.params.invokeRowsOnDoubleClick) {\n const gridApi = props.params.api;\n\n const event: RowDoubleClickedEvent = {\n rowPinned: props.params.node.rowPinned,\n api: gridApi,\n rowIndex: props.params.node.rowIndex,\n context: gridApi,\n type: \"rowDoubleClicked\",\n node: props.params.node,\n data: props.params.data,\n event: null,\n };\n\n gridApi.dispatchEvent(event);\n } else {\n props.params.onClick?.(props.params);\n }\n}\n</script>\n<template>\n <div data-testid=\"pl-ag-text-and-button-cell\" class=\"pl-ag-grid-open-cell d-flex\">\n <div data-testid=\"pl-ag-text-and-button-cell-value\" class=\"pl-ag-grid-open-cell__value\">\n {{ params.value }}\n </div>\n <div\n data-testid=\"pl-ag-text-and-button-cell-button\"\n class=\"pl-ag-grid-open-cell__activator text-caps11 align-center\"\n @click.stop=\"triggerRowDoubleClick\"\n >\n <PlMaskIcon16 :name=\"params.icon ?? 'maximize'\" />\n {{ params.btnLabel ?? \"Open\" }}\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAMA,IAAM,IAAQ;EA4Bd,SAAS,IAAwB;AAC/B,OAAI,EAAM,OAAO,yBAAyB;IACxC,IAAM,IAAU,EAAM,OAAO,KAEvB,IAA+B;KACnC,WAAW,EAAM,OAAO,KAAK;KAC7B,KAAK;KACL,UAAU,EAAM,OAAO,KAAK;KAC5B,SAAS;KACT,MAAM;KACN,MAAM,EAAM,OAAO;KACnB,MAAM,EAAM,OAAO;KACnB,OAAO;KACR;AAED,MAAQ,cAAc,EAAM;SAE5B,GAAM,OAAO,UAAU,EAAM,OAAO;;yBAKtC,EAYM,OAZN,GAYM,CAXJ,EAEM,OAFN,GAEM,EADD,EAAA,OAAO,MAAK,EAAA,EAAA,EAEjB,EAOM,OAAA;GANJ,eAAY;GACZ,OAAM;GACL,SAAK,EAAO,GAAqB,CAAA,OAAA,CAAA;MAElC,EAAkD,EAAA,EAAA,EAAA,EAAnC,MAAM,EAAA,OAAO,QAAI,YAAA,EAAA,MAAA,GAAA,CAAA,OAAA,CAAA,EAAA,EAAkB,MAClD,EAAG,EAAA,OAAO,YAAQ,OAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationsSidebar.js","names":[],"sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport $commonStyle from \"./style.module.css\";\n\nimport { produce } from \"immer\";\nimport { randomInt } from \"@milaboratories/helpers\";\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n PlTextField,\n} from \"@milaboratories/uikit\";\nimport type { Annotation } from \"../types\";\nimport { validateTitle } from \"../utils\";\nimport { isEmpty } from \"es-toolkit/compat\";\n\nconst props = defineProps<{\n annotation: Annotation;\n selectedStepId: undefined | number;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onUpdateSelectedStepId: (id: undefined | number) => void;\n}>();\n\nconst emits = defineEmits<{\n (e: \"delete-schema\"): void;\n}>();\n\nfunction produceAnnotationUpdate(updater: (draft: Annotation) => void) {\n props.onUpdateAnnotation(produce(props.annotation, updater));\n}\n\nfunction updateTitle(title: string | undefined) {\n produceAnnotationUpdate((draft) => {\n draft.title = title ?? \"\";\n });\n}\n\nfunction updateSteps(steps: Annotation[\"steps\"]) {\n produceAnnotationUpdate((draft) => {\n draft.steps = steps;\n });\n}\n\nfunction updateDefaultValue(value: string) {\n produceAnnotationUpdate((draft) => {\n draft.defaultValue = value === \"\" ? undefined : value;\n });\n}\n\nfunction handleAddStep() {\n const id = randomInt();\n produceAnnotationUpdate((draft) => {\n draft.steps.push({\n id,\n label: \"\",\n filter: {\n id: randomInt(),\n type: \"and\",\n filters: [],\n },\n });\n });\n props.onUpdateSelectedStepId(id);\n}\n</script>\n\n<template>\n <PlSidebarItem>\n <template #header-content>\n <PlEditableTitle\n :model-value=\"props.annotation.title\"\n :class=\"{ [$commonStyle.flashing]: props.annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"props.annotation.title.length === 0\"\n :validate=\"validateTitle\"\n @update:model-value=\"updateTitle\"\n />\n </template>\n <template v-if=\"props.annotation\" #body-content>\n <div :class=\"[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]\">\n <span :class=\"$style.tip\">\n Above annotations override the ones below. Rearrange them by dragging.\n </span>\n <PlElementList\n :items=\"props.annotation.steps\"\n :get-item-key=\"(item) => item.id\"\n :is-active=\"(item) => item.id === props.selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @update:items=\"updateSteps\"\n @item-click=\"(item) => props.onUpdateSelectedStepId(item.id)\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n\n <PlBtnSecondary icon=\"add\" @click=\"handleAddStep\"> Add label </PlBtnSecondary>\n\n <PlTextField\n :class=\"[\n $style.defaultValue,\n { [$style.emptyDefaultValue]: isEmpty(props.annotation.defaultValue) },\n ]\"\n :model-value=\"props.annotation.defaultValue ?? ''\"\n label=\"Label remaining with\"\n placeholder=\"No label\"\n clearable\n helper=\"This label will be applied to the remaining rows, after all other filters are applied.\"\n @click.stop\n @update:model-value=\"updateDefaultValue\"\n />\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n icon=\"delete-bin\"\n reverse\n :disabled=\"props.annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use \"@milaboratories/uikit/styles/variables\" as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n\n.defaultValue {\n margin-top: 8px;\n}\n.emptyDefaultValue {\n opacity: 0.5;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"AnnotationsSidebar.js","names":[],"sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport $commonStyle from \"./style.module.css\";\n\nimport { produce } from \"immer\";\nimport { randomInt } from \"@milaboratories/helpers\";\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n PlTextField,\n} from \"@milaboratories/uikit\";\nimport type { Annotation } from \"../types\";\nimport { validateTitle } from \"../utils\";\nimport { isEmpty } from \"es-toolkit/compat\";\n\nconst props = defineProps<{\n annotation: Annotation;\n selectedStepId: undefined | number;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onUpdateSelectedStepId: (id: undefined | number) => void;\n}>();\n\nconst emits = defineEmits<{\n (e: \"delete-schema\"): void;\n}>();\n\nfunction produceAnnotationUpdate(updater: (draft: Annotation) => void) {\n props.onUpdateAnnotation(produce(props.annotation, updater));\n}\n\nfunction updateTitle(title: string | undefined) {\n produceAnnotationUpdate((draft) => {\n draft.title = title ?? \"\";\n });\n}\n\nfunction updateSteps(steps: Annotation[\"steps\"]) {\n produceAnnotationUpdate((draft) => {\n draft.steps = steps;\n });\n}\n\nfunction updateDefaultValue(value: string) {\n produceAnnotationUpdate((draft) => {\n draft.defaultValue = value === \"\" ? undefined : value;\n });\n}\n\nfunction handleAddStep() {\n const id = randomInt();\n produceAnnotationUpdate((draft) => {\n draft.steps.push({\n id,\n label: \"\",\n filter: {\n id: randomInt(),\n type: \"and\",\n filters: [],\n },\n });\n });\n props.onUpdateSelectedStepId(id);\n}\n</script>\n\n<template>\n <PlSidebarItem data-testid=\"pl-annotations-schema\">\n <template #header-content>\n <PlEditableTitle\n data-testid=\"pl-annotations-schema-title\"\n :model-value=\"props.annotation.title\"\n :class=\"{ [$commonStyle.flashing]: props.annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"props.annotation.title.length === 0\"\n :validate=\"validateTitle\"\n @update:model-value=\"updateTitle\"\n />\n </template>\n <template v-if=\"props.annotation\" #body-content>\n <div\n data-testid=\"pl-annotations-schema-body\"\n :class=\"[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]\"\n >\n <span data-testid=\"pl-annotations-schema-tip\" :class=\"$style.tip\">\n Above annotations override the ones below. Rearrange them by dragging.\n </span>\n <PlElementList\n data-testid=\"pl-annotations-steps\"\n :items=\"props.annotation.steps\"\n :get-item-key=\"(item) => item.id\"\n :is-active=\"(item) => item.id === props.selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @update:items=\"updateSteps\"\n @item-click=\"(item) => props.onUpdateSelectedStepId(item.id)\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n\n <PlBtnSecondary data-testid=\"pl-annotations-add-label\" icon=\"add\" @click=\"handleAddStep\">\n Add label\n </PlBtnSecondary>\n\n <PlTextField\n data-testid=\"pl-annotations-default-value\"\n :class=\"[\n $style.defaultValue,\n { [$style.emptyDefaultValue]: isEmpty(props.annotation.defaultValue) },\n ]\"\n :model-value=\"props.annotation.defaultValue ?? ''\"\n label=\"Label remaining with\"\n placeholder=\"No label\"\n clearable\n helper=\"This label will be applied to the remaining rows, after all other filters are applied.\"\n @click.stop\n @update:model-value=\"updateDefaultValue\"\n />\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n data-testid=\"pl-annotations-delete-schema\"\n icon=\"delete-bin\"\n reverse\n :disabled=\"props.annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use \"@milaboratories/uikit/styles/variables\" as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n\n.defaultValue {\n margin-top: 8px;\n}\n.emptyDefaultValue {\n opacity: 0.5;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationsSidebar.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport $commonStyle from \"./style.module.css\";\n\nimport { produce } from \"immer\";\nimport { randomInt } from \"@milaboratories/helpers\";\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n PlTextField,\n} from \"@milaboratories/uikit\";\nimport type { Annotation } from \"../types\";\nimport { validateTitle } from \"../utils\";\nimport { isEmpty } from \"es-toolkit/compat\";\n\nconst props = defineProps<{\n annotation: Annotation;\n selectedStepId: undefined | number;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onUpdateSelectedStepId: (id: undefined | number) => void;\n}>();\n\nconst emits = defineEmits<{\n (e: \"delete-schema\"): void;\n}>();\n\nfunction produceAnnotationUpdate(updater: (draft: Annotation) => void) {\n props.onUpdateAnnotation(produce(props.annotation, updater));\n}\n\nfunction updateTitle(title: string | undefined) {\n produceAnnotationUpdate((draft) => {\n draft.title = title ?? \"\";\n });\n}\n\nfunction updateSteps(steps: Annotation[\"steps\"]) {\n produceAnnotationUpdate((draft) => {\n draft.steps = steps;\n });\n}\n\nfunction updateDefaultValue(value: string) {\n produceAnnotationUpdate((draft) => {\n draft.defaultValue = value === \"\" ? undefined : value;\n });\n}\n\nfunction handleAddStep() {\n const id = randomInt();\n produceAnnotationUpdate((draft) => {\n draft.steps.push({\n id,\n label: \"\",\n filter: {\n id: randomInt(),\n type: \"and\",\n filters: [],\n },\n });\n });\n props.onUpdateSelectedStepId(id);\n}\n</script>\n\n<template>\n <PlSidebarItem>\n <template #header-content>\n <PlEditableTitle\n :model-value=\"props.annotation.title\"\n :class=\"{ [$commonStyle.flashing]: props.annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"props.annotation.title.length === 0\"\n :validate=\"validateTitle\"\n @update:model-value=\"updateTitle\"\n />\n </template>\n <template v-if=\"props.annotation\" #body-content>\n <div :class=\"[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]\">\n <span :class=\"$style.tip\">\n Above annotations override the ones below. Rearrange them by dragging.\n </span>\n <PlElementList\n :items=\"props.annotation.steps\"\n :get-item-key=\"(item) => item.id\"\n :is-active=\"(item) => item.id === props.selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @update:items=\"updateSteps\"\n @item-click=\"(item) => props.onUpdateSelectedStepId(item.id)\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n\n <PlBtnSecondary icon=\"add\" @click=\"handleAddStep\"> Add label </PlBtnSecondary>\n\n <PlTextField\n :class=\"[\n $style.defaultValue,\n { [$style.emptyDefaultValue]: isEmpty(props.annotation.defaultValue) },\n ]\"\n :model-value=\"props.annotation.defaultValue ?? ''\"\n label=\"Label remaining with\"\n placeholder=\"No label\"\n clearable\n helper=\"This label will be applied to the remaining rows, after all other filters are applied.\"\n @click.stop\n @update:model-value=\"updateDefaultValue\"\n />\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n icon=\"delete-bin\"\n reverse\n :disabled=\"props.annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use \"@milaboratories/uikit/styles/variables\" as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n\n.defaultValue {\n margin-top: 8px;\n}\n.emptyDefaultValue {\n opacity: 0.5;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"AnnotationsSidebar.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport $commonStyle from \"./style.module.css\";\n\nimport { produce } from \"immer\";\nimport { randomInt } from \"@milaboratories/helpers\";\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n PlTextField,\n} from \"@milaboratories/uikit\";\nimport type { Annotation } from \"../types\";\nimport { validateTitle } from \"../utils\";\nimport { isEmpty } from \"es-toolkit/compat\";\n\nconst props = defineProps<{\n annotation: Annotation;\n selectedStepId: undefined | number;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onUpdateSelectedStepId: (id: undefined | number) => void;\n}>();\n\nconst emits = defineEmits<{\n (e: \"delete-schema\"): void;\n}>();\n\nfunction produceAnnotationUpdate(updater: (draft: Annotation) => void) {\n props.onUpdateAnnotation(produce(props.annotation, updater));\n}\n\nfunction updateTitle(title: string | undefined) {\n produceAnnotationUpdate((draft) => {\n draft.title = title ?? \"\";\n });\n}\n\nfunction updateSteps(steps: Annotation[\"steps\"]) {\n produceAnnotationUpdate((draft) => {\n draft.steps = steps;\n });\n}\n\nfunction updateDefaultValue(value: string) {\n produceAnnotationUpdate((draft) => {\n draft.defaultValue = value === \"\" ? undefined : value;\n });\n}\n\nfunction handleAddStep() {\n const id = randomInt();\n produceAnnotationUpdate((draft) => {\n draft.steps.push({\n id,\n label: \"\",\n filter: {\n id: randomInt(),\n type: \"and\",\n filters: [],\n },\n });\n });\n props.onUpdateSelectedStepId(id);\n}\n</script>\n\n<template>\n <PlSidebarItem data-testid=\"pl-annotations-schema\">\n <template #header-content>\n <PlEditableTitle\n data-testid=\"pl-annotations-schema-title\"\n :model-value=\"props.annotation.title\"\n :class=\"{ [$commonStyle.flashing]: props.annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"props.annotation.title.length === 0\"\n :validate=\"validateTitle\"\n @update:model-value=\"updateTitle\"\n />\n </template>\n <template v-if=\"props.annotation\" #body-content>\n <div\n data-testid=\"pl-annotations-schema-body\"\n :class=\"[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]\"\n >\n <span data-testid=\"pl-annotations-schema-tip\" :class=\"$style.tip\">\n Above annotations override the ones below. Rearrange them by dragging.\n </span>\n <PlElementList\n data-testid=\"pl-annotations-steps\"\n :items=\"props.annotation.steps\"\n :get-item-key=\"(item) => item.id\"\n :is-active=\"(item) => item.id === props.selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @update:items=\"updateSteps\"\n @item-click=\"(item) => props.onUpdateSelectedStepId(item.id)\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n\n <PlBtnSecondary data-testid=\"pl-annotations-add-label\" icon=\"add\" @click=\"handleAddStep\">\n Add label\n </PlBtnSecondary>\n\n <PlTextField\n data-testid=\"pl-annotations-default-value\"\n :class=\"[\n $style.defaultValue,\n { [$style.emptyDefaultValue]: isEmpty(props.annotation.defaultValue) },\n ]\"\n :model-value=\"props.annotation.defaultValue ?? ''\"\n label=\"Label remaining with\"\n placeholder=\"No label\"\n clearable\n helper=\"This label will be applied to the remaining rows, after all other filters are applied.\"\n @click.stop\n @update:model-value=\"updateDefaultValue\"\n />\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n data-testid=\"pl-annotations-delete-schema\"\n icon=\"delete-bin\"\n reverse\n :disabled=\"props.annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use \"@milaboratories/uikit/styles/variables\" as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n\n.defaultValue {\n margin-top: 8px;\n}\n.emptyDefaultValue {\n opacity: 0.5;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationsSidebar.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"names":[],"mappings":"AAoLA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,SAAS,GAAG,MAAM,CAAC;IACnC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACrD,sBAAsB,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;CAC1D,CAAC;AAuSF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"AnnotationsSidebar.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"names":[],"mappings":"AA6LA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,SAAS,GAAG,MAAM,CAAC;IACnC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACrD,sBAAsB,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;CAC1D,CAAC;AAqTF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -50,8 +50,9 @@ var C = /* @__PURE__ */ l({
50
50
  });
51
51
  }), w.onUpdateSelectedStepId(t);
52
52
  }
53
- return (e, r) => (d(), i(p(b), null, o({
53
+ return (e, r) => (d(), i(p(b), { "data-testid": "pl-annotations-schema" }, o({
54
54
  "header-content": m(() => [c(p(v), {
55
+ "data-testid": "pl-annotations-schema-title",
55
56
  "model-value": w.annotation.title,
56
57
  class: u({ [p(t).flashing]: w.annotation.title.length === 0 }),
57
58
  "max-length": 40,
@@ -67,6 +68,7 @@ var C = /* @__PURE__ */ l({
67
68
  "validate"
68
69
  ])]),
69
70
  "footer-content": m(() => [c(p(g), {
71
+ "data-testid": "pl-annotations-delete-schema",
70
72
  icon: "delete-bin",
71
73
  reverse: "",
72
74
  disabled: w.annotation.steps.length === 0,
@@ -78,9 +80,16 @@ var C = /* @__PURE__ */ l({
78
80
  _: 2
79
81
  }, [w.annotation ? {
80
82
  name: "body-content",
81
- fn: m(() => [a("div", { class: u([e.$style.root, { [p(t).disabled]: w.annotation.title.length === 0 }]) }, [
82
- a("span", { class: u(e.$style.tip) }, " Above annotations override the ones below. Rearrange them by dragging. ", 2),
83
+ fn: m(() => [a("div", {
84
+ "data-testid": "pl-annotations-schema-body",
85
+ class: u([e.$style.root, { [p(t).disabled]: w.annotation.title.length === 0 }])
86
+ }, [
87
+ a("span", {
88
+ "data-testid": "pl-annotations-schema-tip",
89
+ class: u(e.$style.tip)
90
+ }, " Above annotations override the ones below. Rearrange them by dragging. ", 2),
83
91
  c(p(y), {
92
+ "data-testid": "pl-annotations-steps",
84
93
  items: w.annotation.steps,
85
94
  "get-item-key": (e) => e.id,
86
95
  "is-active": (e) => e.id === w.selectedStepId,
@@ -99,6 +108,7 @@ var C = /* @__PURE__ */ l({
99
108
  "class"
100
109
  ]),
101
110
  c(p(_), {
111
+ "data-testid": "pl-annotations-add-label",
102
112
  icon: "add",
103
113
  onClick: A
104
114
  }, {
@@ -106,6 +116,7 @@ var C = /* @__PURE__ */ l({
106
116
  _: 1
107
117
  }),
108
118
  c(p(x), {
119
+ "data-testid": "pl-annotations-default-value",
109
120
  class: u([e.$style.defaultValue, { [e.$style.emptyDefaultValue]: p(S)(w.annotation.defaultValue) }]),
110
121
  "model-value": w.annotation.defaultValue ?? "",
111
122
  label: "Label remaining with",
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotationsSidebar.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport $commonStyle from \"./style.module.css\";\n\nimport { produce } from \"immer\";\nimport { randomInt } from \"@milaboratories/helpers\";\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n PlTextField,\n} from \"@milaboratories/uikit\";\nimport type { Annotation } from \"../types\";\nimport { validateTitle } from \"../utils\";\nimport { isEmpty } from \"es-toolkit/compat\";\n\nconst props = defineProps<{\n annotation: Annotation;\n selectedStepId: undefined | number;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onUpdateSelectedStepId: (id: undefined | number) => void;\n}>();\n\nconst emits = defineEmits<{\n (e: \"delete-schema\"): void;\n}>();\n\nfunction produceAnnotationUpdate(updater: (draft: Annotation) => void) {\n props.onUpdateAnnotation(produce(props.annotation, updater));\n}\n\nfunction updateTitle(title: string | undefined) {\n produceAnnotationUpdate((draft) => {\n draft.title = title ?? \"\";\n });\n}\n\nfunction updateSteps(steps: Annotation[\"steps\"]) {\n produceAnnotationUpdate((draft) => {\n draft.steps = steps;\n });\n}\n\nfunction updateDefaultValue(value: string) {\n produceAnnotationUpdate((draft) => {\n draft.defaultValue = value === \"\" ? undefined : value;\n });\n}\n\nfunction handleAddStep() {\n const id = randomInt();\n produceAnnotationUpdate((draft) => {\n draft.steps.push({\n id,\n label: \"\",\n filter: {\n id: randomInt(),\n type: \"and\",\n filters: [],\n },\n });\n });\n props.onUpdateSelectedStepId(id);\n}\n</script>\n\n<template>\n <PlSidebarItem>\n <template #header-content>\n <PlEditableTitle\n :model-value=\"props.annotation.title\"\n :class=\"{ [$commonStyle.flashing]: props.annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"props.annotation.title.length === 0\"\n :validate=\"validateTitle\"\n @update:model-value=\"updateTitle\"\n />\n </template>\n <template v-if=\"props.annotation\" #body-content>\n <div :class=\"[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]\">\n <span :class=\"$style.tip\">\n Above annotations override the ones below. Rearrange them by dragging.\n </span>\n <PlElementList\n :items=\"props.annotation.steps\"\n :get-item-key=\"(item) => item.id\"\n :is-active=\"(item) => item.id === props.selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @update:items=\"updateSteps\"\n @item-click=\"(item) => props.onUpdateSelectedStepId(item.id)\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n\n <PlBtnSecondary icon=\"add\" @click=\"handleAddStep\"> Add label </PlBtnSecondary>\n\n <PlTextField\n :class=\"[\n $style.defaultValue,\n { [$style.emptyDefaultValue]: isEmpty(props.annotation.defaultValue) },\n ]\"\n :model-value=\"props.annotation.defaultValue ?? ''\"\n label=\"Label remaining with\"\n placeholder=\"No label\"\n clearable\n helper=\"This label will be applied to the remaining rows, after all other filters are applied.\"\n @click.stop\n @update:model-value=\"updateDefaultValue\"\n />\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n icon=\"delete-bin\"\n reverse\n :disabled=\"props.annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use \"@milaboratories/uikit/styles/variables\" as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n\n.defaultValue {\n margin-top: 8px;\n}\n.emptyDefaultValue {\n opacity: 0.5;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAiBA,IAAM,IAAQ,GAOR,IAAQ;EAId,SAAS,EAAwB,GAAsC;AACrE,KAAM,mBAAmB,EAAQ,EAAM,YAAY,EAAQ,CAAC;;EAG9D,SAAS,EAAY,GAA2B;AAC9C,MAAyB,MAAU;AACjC,MAAM,QAAQ,KAAS;KACvB;;EAGJ,SAAS,EAAY,GAA4B;AAC/C,MAAyB,MAAU;AACjC,MAAM,QAAQ;KACd;;EAGJ,SAAS,EAAmB,GAAe;AACzC,MAAyB,MAAU;AACjC,MAAM,eAAe,MAAU,KAAK,KAAA,IAAY;KAChD;;EAGJ,SAAS,IAAgB;GACvB,IAAM,IAAK,GAAW;AAYtB,GAXA,GAAyB,MAAU;AACjC,MAAM,MAAM,KAAK;KACf;KACA,OAAO;KACP,QAAQ;MACN,IAAI,GAAW;MACf,MAAM;MACN,SAAS,EAAE;MACZ;KACF,CAAC;KACF,EACF,EAAM,uBAAuB,EAAG;;yBAKhC,EA2DgB,EAAA,EAAA,EAAA,MAAA,EAAA;GA1DH,kBAAc,QAUrB,CATF,EASE,EAAA,EAAA,EAAA;IARC,eAAa,EAAM,WAAW;IAC9B,OAAK,EAAA,GAAK,EAAA,EAAY,CAAC,WAAW,EAAM,WAAW,MAAM,WAAM,GAAA,CAAA;IAC/D,cAAY;IACb,aAAU;IACV,aAAY;IACX,WAAW,EAAM,WAAW,MAAM,WAAM;IACxC,UAAU,EAAA,EAAa;IACvB,uBAAoB;;;;;;;GAuCd,kBAAc,QAQV,CAPb,EAOa,EAAA,EAAA,EAAA;IANX,MAAK;IACL,SAAA;IACC,UAAU,EAAM,WAAW,MAAM,WAAM;IACvC,SAAK,AAAA,EAAA,OAAA,GAAA,MAAO,EAAK,gBAAA,EAAA,CAAA,OAAA,CAAA;;qBAGpB,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAFC,mBAED,GAAA,CAAA,CAAA,CAAA;;;;MA5Cc,EAAM,aAAA;SAAa;eAkC3B,CAjCN,EAiCM,OAAA,EAjCA,OAAK,EAAA,CAAGA,EAAAA,OAAO,MAAI,GAAK,EAAA,EAAY,CAAC,WAAW,EAAM,WAAW,MAAM,WAAM,GAAA,CAAA,CAAA,EAAA,EAAA;IACjF,EAEO,QAAA,EAFA,OAAK,EAAEA,EAAAA,OAAO,IAAG,EAAA,EAAE,4EAE1B,EAAA;IACA,EAYgB,EAAA,EAAA,EAAA;KAXb,OAAO,EAAM,WAAW;KACxB,iBAAe,MAAS,EAAK;KAC7B,cAAY,MAAS,EAAK,OAAO,EAAM;KACvC,cAAYA,EAAAA,OAAO;KACnB,OAAK,EAAEA,EAAAA,OAAO,MAAK;KACnB,kBAAc;KACd,aAAU,AAAA,EAAA,QAAG,MAAS,EAAM,uBAAuB,EAAK,GAAE;;KAEhD,cAAU,GACH,EADO,cAAI,CAAA,EAAA,EACxB,EAAK,MAAK,EAAA,EAAA,CAAA,CAAA;;;;;;;;;IAIjB,EAA8E,EAAA,EAAA,EAAA;KAA9D,MAAK;KAAO,SAAO;;sBAA0B,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAX,eAAW,GAAA,CAAA,CAAA,CAAA;;;IAE7D,EAYE,EAAA,EAAA,EAAA;KAXC,OAAK,EAAA,CAAgBA,EAAAA,OAAO,cAAA,GAA6BA,EAAAA,OAAO,oBAAoB,EAAA,EAAO,CAAC,EAAM,WAAW,aAAY,EAAA,CAAA,CAAA;KAIzH,eAAa,EAAM,WAAW,gBAAY;KAC3C,OAAM;KACN,aAAY;KACZ,WAAA;KACA,QAAO;KACN,SAAK,AAAA,EAAA,OAAA,QAAN,IAAW,CAAA,OAAA,CAAA;KACV,uBAAoB"}
1
+ {"version":3,"file":"AnnotationsSidebar.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/AnnotationsSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport $commonStyle from \"./style.module.css\";\n\nimport { produce } from \"immer\";\nimport { randomInt } from \"@milaboratories/helpers\";\nimport {\n PlBtnGhost,\n PlBtnSecondary,\n PlEditableTitle,\n PlElementList,\n PlSidebarItem,\n PlTextField,\n} from \"@milaboratories/uikit\";\nimport type { Annotation } from \"../types\";\nimport { validateTitle } from \"../utils\";\nimport { isEmpty } from \"es-toolkit/compat\";\n\nconst props = defineProps<{\n annotation: Annotation;\n selectedStepId: undefined | number;\n onUpdateAnnotation: (annotation: Annotation) => void;\n onUpdateSelectedStepId: (id: undefined | number) => void;\n}>();\n\nconst emits = defineEmits<{\n (e: \"delete-schema\"): void;\n}>();\n\nfunction produceAnnotationUpdate(updater: (draft: Annotation) => void) {\n props.onUpdateAnnotation(produce(props.annotation, updater));\n}\n\nfunction updateTitle(title: string | undefined) {\n produceAnnotationUpdate((draft) => {\n draft.title = title ?? \"\";\n });\n}\n\nfunction updateSteps(steps: Annotation[\"steps\"]) {\n produceAnnotationUpdate((draft) => {\n draft.steps = steps;\n });\n}\n\nfunction updateDefaultValue(value: string) {\n produceAnnotationUpdate((draft) => {\n draft.defaultValue = value === \"\" ? undefined : value;\n });\n}\n\nfunction handleAddStep() {\n const id = randomInt();\n produceAnnotationUpdate((draft) => {\n draft.steps.push({\n id,\n label: \"\",\n filter: {\n id: randomInt(),\n type: \"and\",\n filters: [],\n },\n });\n });\n props.onUpdateSelectedStepId(id);\n}\n</script>\n\n<template>\n <PlSidebarItem data-testid=\"pl-annotations-schema\">\n <template #header-content>\n <PlEditableTitle\n data-testid=\"pl-annotations-schema-title\"\n :model-value=\"props.annotation.title\"\n :class=\"{ [$commonStyle.flashing]: props.annotation.title.length === 0 }\"\n :max-length=\"40\"\n max-width=\"600px\"\n placeholder=\"Annotation Title\"\n :autofocus=\"props.annotation.title.length === 0\"\n :validate=\"validateTitle\"\n @update:model-value=\"updateTitle\"\n />\n </template>\n <template v-if=\"props.annotation\" #body-content>\n <div\n data-testid=\"pl-annotations-schema-body\"\n :class=\"[$style.root, { [$commonStyle.disabled]: props.annotation.title.length === 0 }]\"\n >\n <span data-testid=\"pl-annotations-schema-tip\" :class=\"$style.tip\">\n Above annotations override the ones below. Rearrange them by dragging.\n </span>\n <PlElementList\n data-testid=\"pl-annotations-steps\"\n :items=\"props.annotation.steps\"\n :get-item-key=\"(item) => item.id\"\n :is-active=\"(item) => item.id === props.selectedStepId\"\n :item-class=\"$style.stepItem\"\n :class=\"$style.steps\"\n @update:items=\"updateSteps\"\n @item-click=\"(item) => props.onUpdateSelectedStepId(item.id)\"\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n\n <PlBtnSecondary data-testid=\"pl-annotations-add-label\" icon=\"add\" @click=\"handleAddStep\">\n Add label\n </PlBtnSecondary>\n\n <PlTextField\n data-testid=\"pl-annotations-default-value\"\n :class=\"[\n $style.defaultValue,\n { [$style.emptyDefaultValue]: isEmpty(props.annotation.defaultValue) },\n ]\"\n :model-value=\"props.annotation.defaultValue ?? ''\"\n label=\"Label remaining with\"\n placeholder=\"No label\"\n clearable\n helper=\"This label will be applied to the remaining rows, after all other filters are applied.\"\n @click.stop\n @update:model-value=\"updateDefaultValue\"\n />\n </div>\n </template>\n <template #footer-content>\n <PlBtnGhost\n data-testid=\"pl-annotations-delete-schema\"\n icon=\"delete-bin\"\n reverse\n :disabled=\"props.annotation.steps.length === 0\"\n @click.stop=\"emits('delete-schema')\"\n >\n Delete Schema\n </PlBtnGhost>\n </template>\n </PlSidebarItem>\n</template>\n\n<style lang=\"scss\" module>\n@use \"@milaboratories/uikit/styles/variables\" as *;\n\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.tip {\n color: var(--txt-03);\n}\n\n.steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.stepItem {\n cursor: pointer;\n}\n\n.defaultValue {\n margin-top: 8px;\n}\n.emptyDefaultValue {\n opacity: 0.5;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAiBA,IAAM,IAAQ,GAOR,IAAQ;EAId,SAAS,EAAwB,GAAsC;AACrE,KAAM,mBAAmB,EAAQ,EAAM,YAAY,EAAQ,CAAC;;EAG9D,SAAS,EAAY,GAA2B;AAC9C,MAAyB,MAAU;AACjC,MAAM,QAAQ,KAAS;KACvB;;EAGJ,SAAS,EAAY,GAA4B;AAC/C,MAAyB,MAAU;AACjC,MAAM,QAAQ;KACd;;EAGJ,SAAS,EAAmB,GAAe;AACzC,MAAyB,MAAU;AACjC,MAAM,eAAe,MAAU,KAAK,KAAA,IAAY;KAChD;;EAGJ,SAAS,IAAgB;GACvB,IAAM,IAAK,GAAW;AAYtB,GAXA,GAAyB,MAAU;AACjC,MAAM,MAAM,KAAK;KACf;KACA,OAAO;KACP,QAAQ;MACN,IAAI,GAAW;MACf,MAAM;MACN,SAAS,EAAE;MACZ;KACF,CAAC;KACF,EACF,EAAM,uBAAuB,EAAG;;yBAKhC,EAoEgB,EAAA,EAAA,EAAA,EApED,eAAY,yBAAuB,EAAA,EAAA;GACrC,kBAAc,QAWrB,CAVF,EAUE,EAAA,EAAA,EAAA;IATA,eAAY;IACX,eAAa,EAAM,WAAW;IAC9B,OAAK,EAAA,GAAK,EAAA,EAAY,CAAC,WAAW,EAAM,WAAW,MAAM,WAAM,GAAA,CAAA;IAC/D,cAAY;IACb,aAAU;IACV,aAAY;IACX,WAAW,EAAM,WAAW,MAAM,WAAM;IACxC,UAAU,EAAA,EAAa;IACvB,uBAAoB;;;;;;;GA8Cd,kBAAc,QASV,CARb,EAQa,EAAA,EAAA,EAAA;IAPX,eAAY;IACZ,MAAK;IACL,SAAA;IACC,UAAU,EAAM,WAAW,MAAM,WAAM;IACvC,SAAK,AAAA,EAAA,OAAA,GAAA,MAAO,EAAK,gBAAA,EAAA,CAAA,OAAA,CAAA;;qBAGpB,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAFC,mBAED,GAAA,CAAA,CAAA,CAAA;;;;MApDc,EAAM,aAAA;SAAa;eAyC3B,CAxCN,EAwCM,OAAA;IAvCJ,eAAY;IACX,OAAK,EAAA,CAAGA,EAAAA,OAAO,MAAI,GAAK,EAAA,EAAY,CAAC,WAAW,EAAM,WAAW,MAAM,WAAM,GAAA,CAAA,CAAA;;IAE9E,EAEO,QAAA;KAFD,eAAY;KAA6B,OAAK,EAAEA,EAAAA,OAAO,IAAG;OAAE,4EAElE,EAAA;IACA,EAagB,EAAA,EAAA,EAAA;KAZd,eAAY;KACX,OAAO,EAAM,WAAW;KACxB,iBAAe,MAAS,EAAK;KAC7B,cAAY,MAAS,EAAK,OAAO,EAAM;KACvC,cAAYA,EAAAA,OAAO;KACnB,OAAK,EAAEA,EAAAA,OAAO,MAAK;KACnB,kBAAc;KACd,aAAU,AAAA,EAAA,QAAG,MAAS,EAAM,uBAAuB,EAAK,GAAE;;KAEhD,cAAU,GACH,EADO,cAAI,CAAA,EAAA,EACxB,EAAK,MAAK,EAAA,EAAA,CAAA,CAAA;;;;;;;;;IAIjB,EAEiB,EAAA,EAAA,EAAA;KAFD,eAAY;KAA2B,MAAK;KAAO,SAAO;;sBAE1E,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAFyF,eAEzF,GAAA,CAAA,CAAA,CAAA;;;IAEA,EAaE,EAAA,EAAA,EAAA;KAZA,eAAY;KACX,OAAK,EAAA,CAAgBA,EAAAA,OAAO,cAAA,GAA6BA,EAAAA,OAAO,oBAAoB,EAAA,EAAO,CAAC,EAAM,WAAW,aAAY,EAAA,CAAA,CAAA;KAIzH,eAAa,EAAM,WAAW,gBAAY;KAC3C,OAAM;KACN,aAAY;KACZ,WAAA;KACA,QAAO;KACN,SAAK,AAAA,EAAA,OAAA,QAAN,IAAW,CAAA,OAAA,CAAA;KACV,uBAAoB"}