@platforma-sdk/ui-vue 1.58.5 → 1.58.9

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 (495) hide show
  1. package/.turbo/turbo-build.log +195 -181
  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 +14 -0
  6. package/dist/AgGridVue/createAgGridColDef.js +73 -43
  7. package/dist/AgGridVue/createAgGridColDef.js.map +1 -1
  8. package/dist/AgGridVue/selection.js +55 -47
  9. package/dist/AgGridVue/selection.js.map +1 -1
  10. package/dist/AgGridVue/useAgGridOptions.js +212 -229
  11. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  12. package/dist/_virtual/_plugin-vue_export-helper.js +5 -9
  13. package/dist/_virtual/_rolldown/runtime.js +15 -0
  14. package/dist/aggrid.js +48 -46
  15. package/dist/aggrid.js.map +1 -1
  16. package/dist/assets/block.css +1 -1
  17. package/dist/assets/ui.css +1 -0
  18. package/dist/components/BlockLayout.js +7 -0
  19. package/dist/components/BlockLayout.js.map +1 -0
  20. package/dist/components/BlockLayout.style.js +4 -0
  21. package/dist/components/BlockLayout.style.js.map +1 -0
  22. package/dist/components/BlockLayout.vue.css +1 -0
  23. package/dist/components/BlockLayout.vue2.js +42 -54
  24. package/dist/components/BlockLayout.vue2.js.map +1 -1
  25. package/dist/components/BlockLoader.js +5 -0
  26. package/dist/components/BlockLoader.js.map +1 -0
  27. package/dist/components/BlockLoader.vue2.js +22 -5
  28. package/dist/components/BlockLoader.vue2.js.map +1 -1
  29. package/dist/components/LoaderPage.js +10 -0
  30. package/dist/components/LoaderPage.js.map +1 -0
  31. package/dist/components/NotFound.js +5 -0
  32. package/dist/components/NotFound.js.map +1 -0
  33. package/dist/components/NotFound.vue2.js +18 -5
  34. package/dist/components/NotFound.vue2.js.map +1 -1
  35. package/dist/components/PlAdvancedFilter/FilterEditor.js +7 -0
  36. package/dist/components/PlAdvancedFilter/FilterEditor.js.map +1 -0
  37. package/dist/components/PlAdvancedFilter/FilterEditor.style.js +18 -0
  38. package/dist/components/PlAdvancedFilter/FilterEditor.style.js.map +1 -0
  39. package/dist/components/PlAdvancedFilter/FilterEditor.vue.css +1 -0
  40. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +291 -322
  41. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
  42. package/dist/components/PlAdvancedFilter/OperandButton.js +7 -0
  43. package/dist/components/PlAdvancedFilter/OperandButton.js.map +1 -0
  44. package/dist/components/PlAdvancedFilter/OperandButton.style.js +8 -0
  45. package/dist/components/PlAdvancedFilter/OperandButton.style.js.map +1 -0
  46. package/dist/components/PlAdvancedFilter/OperandButton.vue.css +1 -0
  47. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js +19 -24
  48. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  49. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js +7 -0
  50. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js.map +1 -0
  51. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js +12 -0
  52. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js.map +1 -0
  53. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.css +1 -0
  54. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts +1 -3
  55. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts.map +1 -1
  56. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +239 -238
  57. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  58. package/dist/components/PlAdvancedFilter/constants.js +115 -58
  59. package/dist/components/PlAdvancedFilter/constants.js.map +1 -1
  60. package/dist/components/PlAdvancedFilter/index.d.ts +1 -1
  61. package/dist/components/PlAdvancedFilter/index.d.ts.map +1 -1
  62. package/dist/components/PlAdvancedFilter/index.js +6 -6
  63. package/dist/components/PlAdvancedFilter/index.js.map +1 -1
  64. package/dist/components/PlAdvancedFilter/utils.js +49 -64
  65. package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
  66. package/dist/components/PlAgCellFile/PlAgCellFile.js +5 -0
  67. package/dist/components/PlAgCellFile/PlAgCellFile.js.map +1 -0
  68. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js +36 -5
  69. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js.map +1 -1
  70. package/dist/components/PlAgCellProgress/PlAgCellProgress.js +5 -0
  71. package/dist/components/PlAgCellProgress/PlAgCellProgress.js.map +1 -0
  72. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js +13 -5
  73. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js.map +1 -1
  74. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.js +6 -0
  75. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.js.map +1 -0
  76. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js +12 -0
  77. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js.map +1 -0
  78. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.js +6 -0
  79. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.js.map +1 -0
  80. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.style.css +1 -0
  81. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js +31 -0
  82. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js.map +1 -0
  83. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.js +6 -0
  84. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.js.map +1 -0
  85. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.style.css +1 -0
  86. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js +19 -0
  87. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js.map +1 -0
  88. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js +5 -0
  89. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js.map +1 -0
  90. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js +68 -5
  91. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js.map +1 -1
  92. package/dist/components/PlAgColumnHeader/pl-ag-column-header.css +1 -1
  93. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.js +5 -0
  94. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.js.map +1 -0
  95. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js +26 -5
  96. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js.map +1 -1
  97. package/dist/components/PlAgCsvExporter/export-csv.js +36 -43
  98. package/dist/components/PlAgCsvExporter/export-csv.js.map +1 -1
  99. package/dist/components/PlAgDataTable/PlAgDataTableSheets.js +7 -0
  100. package/dist/components/PlAgDataTable/PlAgDataTableSheets.js.map +1 -0
  101. package/dist/components/PlAgDataTable/PlAgDataTableSheets.style.js +4 -0
  102. package/dist/components/PlAgDataTable/PlAgDataTableSheets.style.js.map +1 -0
  103. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue.css +1 -0
  104. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +68 -72
  105. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  106. package/dist/components/PlAgDataTable/PlAgDataTableV2.js +7 -0
  107. package/dist/components/PlAgDataTable/PlAgDataTableV2.js.map +1 -0
  108. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js +7 -0
  109. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js.map +1 -0
  110. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.css +1 -0
  111. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +307 -336
  112. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  113. package/dist/components/PlAgDataTable/PlAgOverlayLoading.js +5 -0
  114. package/dist/components/PlAgDataTable/PlAgOverlayLoading.js.map +1 -0
  115. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js +26 -5
  116. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js.map +1 -1
  117. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.js +6 -0
  118. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.js.map +1 -0
  119. package/dist/components/PlAgDataTable/{PlAgOverlayNoRows.css → PlAgOverlayNoRows.style.css} +1 -1
  120. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js +14 -0
  121. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js.map +1 -0
  122. package/dist/components/PlAgDataTable/PlAgRowCount.js +5 -0
  123. package/dist/components/PlAgDataTable/PlAgRowCount.js.map +1 -0
  124. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js +23 -5
  125. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js.map +1 -1
  126. package/dist/components/PlAgDataTable/ag-override.js +4 -0
  127. package/dist/components/PlAgDataTable/ag-override.js.map +1 -0
  128. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js +25 -30
  129. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js.map +1 -1
  130. package/dist/components/PlAgDataTable/compositions/useGrid.js +102 -112
  131. package/dist/components/PlAgDataTable/compositions/useGrid.js.map +1 -1
  132. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.css +1 -1
  133. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.js +9 -0
  134. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.js.map +1 -0
  135. package/dist/components/PlAgDataTable/sources/common.js +6 -8
  136. package/dist/components/PlAgDataTable/sources/common.js.map +1 -1
  137. package/dist/components/PlAgDataTable/sources/focus-row.js +36 -51
  138. package/dist/components/PlAgDataTable/sources/focus-row.js.map +1 -1
  139. package/dist/components/PlAgDataTable/sources/menu-items.js +10 -6
  140. package/dist/components/PlAgDataTable/sources/menu-items.js.map +1 -1
  141. package/dist/components/PlAgDataTable/sources/row-number.js +82 -94
  142. package/dist/components/PlAgDataTable/sources/row-number.js.map +1 -1
  143. package/dist/components/PlAgDataTable/sources/table-source-v2.js +178 -199
  144. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  145. package/dist/components/PlAgDataTable/sources/table-state-v2.js +155 -132
  146. package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
  147. package/dist/components/PlAgDataTable/sources/value-rendering.js +33 -38
  148. package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
  149. package/dist/components/PlAgDataTable/types.js +54 -43
  150. package/dist/components/PlAgDataTable/types.js.map +1 -1
  151. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js +7 -0
  152. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js.map +1 -0
  153. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js +4 -0
  154. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js.map +1 -0
  155. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +89 -100
  156. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
  157. package/dist/components/PlAgGridColumnManager/useFilteredItems.js +46 -33
  158. package/dist/components/PlAgGridColumnManager/useFilteredItems.js.map +1 -1
  159. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.js +5 -0
  160. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.js.map +1 -0
  161. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.d.ts.map +1 -1
  162. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js +37 -5
  163. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js.map +1 -1
  164. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.css +1 -1
  165. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.js +10 -0
  166. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.js.map +1 -0
  167. package/dist/components/PlAgRowNumHeader.js +5 -0
  168. package/dist/components/PlAgRowNumHeader.js.map +1 -0
  169. package/dist/components/PlAgRowNumHeader.vue2.js +38 -5
  170. package/dist/components/PlAgRowNumHeader.vue2.js.map +1 -1
  171. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.js +5 -0
  172. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.js.map +1 -0
  173. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js +32 -5
  174. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js.map +1 -1
  175. package/dist/components/PlAgTextAndButtonCell/pl-ag-text-and-button-cell.css +1 -1
  176. package/dist/components/PlAnnotations/components/AnnotationsSidebar.js +7 -0
  177. package/dist/components/PlAnnotations/components/AnnotationsSidebar.js.map +1 -0
  178. package/dist/components/PlAnnotations/components/AnnotationsSidebar.style.js +11 -0
  179. package/dist/components/PlAnnotations/components/AnnotationsSidebar.style.js.map +1 -0
  180. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue.css +1 -0
  181. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +102 -113
  182. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  183. package/dist/components/PlAnnotations/components/FilterSidebar.js +7 -0
  184. package/dist/components/PlAnnotations/components/FilterSidebar.js.map +1 -0
  185. package/dist/components/PlAnnotations/components/FilterSidebar.style.js +7 -0
  186. package/dist/components/PlAnnotations/components/FilterSidebar.style.js.map +1 -0
  187. package/dist/components/PlAnnotations/components/FilterSidebar.vue.css +1 -0
  188. package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts +1 -2
  189. package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts.map +1 -1
  190. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +121 -131
  191. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  192. package/dist/components/PlAnnotations/components/PlAnnotations.js +7 -0
  193. package/dist/components/PlAnnotations/components/PlAnnotations.js.map +1 -0
  194. package/dist/components/PlAnnotations/components/PlAnnotations.style.js +4 -0
  195. package/dist/components/PlAnnotations/components/PlAnnotations.style.js.map +1 -0
  196. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js +73 -65
  197. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  198. package/dist/components/PlAnnotations/components/PlAnnotationsModal.js +7 -0
  199. package/dist/components/PlAnnotations/components/PlAnnotationsModal.js.map +1 -0
  200. package/dist/components/PlAnnotations/components/PlAnnotationsModal.style.js +7 -0
  201. package/dist/components/PlAnnotations/components/PlAnnotationsModal.style.js.map +1 -0
  202. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +58 -52
  203. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  204. package/dist/components/PlAnnotations/components/style.css +1 -1
  205. package/dist/components/PlAnnotations/components/style.module.js +8 -0
  206. package/dist/components/PlAnnotations/components/style.module.js.map +1 -0
  207. package/dist/components/PlAnnotations/utils.js +6 -8
  208. package/dist/components/PlAnnotations/utils.js.map +1 -1
  209. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.js +5 -0
  210. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.js.map +1 -0
  211. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js +57 -5
  212. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js.map +1 -1
  213. package/dist/components/PlAppErrorNotificationAlert/pl-app-error-notification-alert.css +1 -1
  214. package/dist/components/PlBtnExportArchive/Item.js +7 -0
  215. package/dist/components/PlBtnExportArchive/Item.js.map +1 -0
  216. package/dist/components/PlBtnExportArchive/Item.style.js +9 -0
  217. package/dist/components/PlBtnExportArchive/Item.style.js.map +1 -0
  218. package/dist/components/PlBtnExportArchive/Item.vue.css +1 -0
  219. package/dist/components/PlBtnExportArchive/Item.vue2.js +28 -42
  220. package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
  221. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.js +7 -0
  222. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.js.map +1 -0
  223. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.style.js +8 -0
  224. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.style.js.map +1 -0
  225. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.css +1 -0
  226. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js +161 -159
  227. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
  228. package/dist/components/PlBtnExportArchive/Summary.js +7 -0
  229. package/dist/components/PlBtnExportArchive/Summary.js.map +1 -0
  230. package/dist/components/PlBtnExportArchive/Summary.style.js +8 -0
  231. package/dist/components/PlBtnExportArchive/Summary.style.js.map +1 -0
  232. package/dist/components/PlBtnExportArchive/Summary.vue.css +1 -0
  233. package/dist/components/PlBtnExportArchive/Summary.vue2.js +26 -41
  234. package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
  235. package/dist/components/PlTableFastSearch/PlTableFastSearch.js +5 -0
  236. package/dist/components/PlTableFastSearch/PlTableFastSearch.js.map +1 -0
  237. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js +41 -5
  238. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js.map +1 -1
  239. package/dist/components/PlTableFilters/PlTableFiltersV2.js +7 -0
  240. package/dist/components/PlTableFilters/PlTableFiltersV2.js.map +1 -0
  241. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js +4 -0
  242. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js.map +1 -0
  243. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.css +1 -0
  244. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts.map +1 -1
  245. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +97 -106
  246. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  247. package/dist/composition/fileContent.js +169 -200
  248. package/dist/composition/fileContent.js.map +1 -1
  249. package/dist/computedResult.js +47 -18
  250. package/dist/computedResult.js.map +1 -1
  251. package/dist/createModel.js +44 -60
  252. package/dist/createModel.js.map +1 -1
  253. package/dist/defineApp.js +87 -113
  254. package/dist/defineApp.js.map +1 -1
  255. package/dist/defineStore.js +15 -16
  256. package/dist/defineStore.js.map +1 -1
  257. package/dist/index.js +39 -98
  258. package/dist/index.js.map +1 -1
  259. package/dist/internal/UpdateSerializer.js +50 -66
  260. package/dist/internal/UpdateSerializer.js.map +1 -1
  261. package/dist/internal/createAppModel.js +54 -68
  262. package/dist/internal/createAppModel.js.map +1 -1
  263. package/dist/internal/createAppV1.js +140 -193
  264. package/dist/internal/createAppV1.js.map +1 -1
  265. package/dist/internal/createAppV2.d.ts.map +1 -1
  266. package/dist/internal/createAppV2.js +149 -193
  267. package/dist/internal/createAppV2.js.map +1 -1
  268. package/dist/internal/createAppV3.d.ts.map +1 -1
  269. package/dist/internal/createAppV3.js +157 -202
  270. package/dist/internal/createAppV3.js.map +1 -1
  271. package/dist/internal/test-helpers/utils.d.ts.map +1 -1
  272. package/dist/lib/util/helpers/dist/error.js +1 -0
  273. package/dist/lib/util/helpers/dist/functions.js +8 -9
  274. package/dist/lib/util/helpers/dist/functions.js.map +1 -1
  275. package/dist/lib/util/helpers/dist/hash.js +5 -0
  276. package/dist/lib/util/helpers/dist/hash.js.map +1 -0
  277. package/dist/lib/util/helpers/dist/index.js +9 -0
  278. package/dist/lib/util/helpers/dist/objects.js +75 -42
  279. package/dist/lib/util/helpers/dist/objects.js.map +1 -1
  280. package/dist/lib/util/helpers/dist/prettyBytes.js +60 -26
  281. package/dist/lib/util/helpers/dist/prettyBytes.js.map +1 -1
  282. package/dist/lib/util/helpers/dist/random.js +6 -8
  283. package/dist/lib/util/helpers/dist/random.js.map +1 -1
  284. package/dist/lib/util/helpers/dist/strings.js +11 -14
  285. package/dist/lib/util/helpers/dist/strings.js.map +1 -1
  286. package/dist/lib/util/helpers/dist/uniqId.js +7 -0
  287. package/dist/lib/util/helpers/dist/uniqId.js.map +1 -0
  288. package/dist/lib/util/helpers/dist/utils.js +34 -50
  289. package/dist/lib/util/helpers/dist/utils.js.map +1 -1
  290. package/dist/lib.js +38 -0
  291. package/dist/objectHash.js +13 -10
  292. package/dist/objectHash.js.map +1 -1
  293. package/dist/plugins/Monetization/EndOfPeriod.js +7 -0
  294. package/dist/plugins/Monetization/EndOfPeriod.js.map +1 -0
  295. package/dist/plugins/Monetization/EndOfPeriod.style.js +4 -0
  296. package/dist/plugins/Monetization/EndOfPeriod.style.js.map +1 -0
  297. package/dist/plugins/Monetization/EndOfPeriod.vue.css +1 -0
  298. package/dist/plugins/Monetization/EndOfPeriod.vue2.js +15 -23
  299. package/dist/plugins/Monetization/EndOfPeriod.vue2.js.map +1 -1
  300. package/dist/plugins/Monetization/LimitCard.js +7 -0
  301. package/dist/plugins/Monetization/LimitCard.js.map +1 -0
  302. package/dist/plugins/Monetization/LimitCard.style.js +18 -0
  303. package/dist/plugins/Monetization/LimitCard.style.js.map +1 -0
  304. package/dist/plugins/Monetization/LimitCard.vue.css +1 -0
  305. package/dist/plugins/Monetization/LimitCard.vue2.js +47 -84
  306. package/dist/plugins/Monetization/LimitCard.vue2.js.map +1 -1
  307. package/dist/plugins/Monetization/MonetizationSidebar.js +5 -0
  308. package/dist/plugins/Monetization/MonetizationSidebar.js.map +1 -0
  309. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js +106 -5
  310. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js.map +1 -1
  311. package/dist/plugins/Monetization/RunStatus.js +7 -0
  312. package/dist/plugins/Monetization/RunStatus.js.map +1 -0
  313. package/dist/plugins/Monetization/RunStatus.style.js +13 -0
  314. package/dist/plugins/Monetization/RunStatus.style.js.map +1 -0
  315. package/dist/plugins/Monetization/RunStatus.vue.css +1 -0
  316. package/dist/plugins/Monetization/RunStatus.vue2.js +21 -40
  317. package/dist/plugins/Monetization/RunStatus.vue2.js.map +1 -1
  318. package/dist/plugins/Monetization/UserCabinetCard.js +7 -0
  319. package/dist/plugins/Monetization/UserCabinetCard.js.map +1 -0
  320. package/dist/plugins/Monetization/UserCabinetCard.style.js +12 -0
  321. package/dist/plugins/Monetization/UserCabinetCard.style.js.map +1 -0
  322. package/dist/plugins/Monetization/UserCabinetCard.vue.css +1 -0
  323. package/dist/plugins/Monetization/UserCabinetCard.vue2.js +50 -70
  324. package/dist/plugins/Monetization/UserCabinetCard.vue2.js.map +1 -1
  325. package/dist/plugins/Monetization/useButtonTarget.js +15 -16
  326. package/dist/plugins/Monetization/useButtonTarget.js.map +1 -1
  327. package/dist/plugins/Monetization/useInfo.js +36 -71
  328. package/dist/plugins/Monetization/useInfo.js.map +1 -1
  329. package/dist/plugins/Monetization/validation.js +34 -42
  330. package/dist/plugins/Monetization/validation.js.map +1 -1
  331. package/dist/urls.d.ts.map +1 -1
  332. package/dist/urls.js +4 -5
  333. package/dist/urls.js.map +1 -1
  334. package/dist/usePlugin.js +32 -12
  335. package/dist/usePlugin.js.map +1 -1
  336. package/dist/utils.d.ts.map +1 -1
  337. package/dist/utils.js +29 -54
  338. package/dist/utils.js.map +1 -1
  339. package/package.json +8 -8
  340. package/src/components/PlAdvancedFilter/index.ts +1 -1
  341. package/src/components/PlAnnotations/components/FilterSidebar.vue +11 -6
  342. package/src/components/PlTableFilters/PlTableFiltersV2.vue +2 -1
  343. package/dist/_virtual/_plugin-vue_export-helper.js.map +0 -1
  344. package/dist/components/BlockLayout.css +0 -1
  345. package/dist/components/BlockLayout.vue.js +0 -10
  346. package/dist/components/BlockLayout.vue.js.map +0 -1
  347. package/dist/components/BlockLayout.vue3.js +0 -8
  348. package/dist/components/BlockLayout.vue3.js.map +0 -1
  349. package/dist/components/BlockLoader.vue.js +0 -26
  350. package/dist/components/BlockLoader.vue.js.map +0 -1
  351. package/dist/components/LoaderPage.vue.js +0 -15
  352. package/dist/components/LoaderPage.vue.js.map +0 -1
  353. package/dist/components/NotFound.vue.js +0 -26
  354. package/dist/components/NotFound.vue.js.map +0 -1
  355. package/dist/components/PlAdvancedFilter/FilterEditor.css +0 -1
  356. package/dist/components/PlAdvancedFilter/FilterEditor.vue.js +0 -10
  357. package/dist/components/PlAdvancedFilter/FilterEditor.vue.js.map +0 -1
  358. package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js +0 -32
  359. package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js.map +0 -1
  360. package/dist/components/PlAdvancedFilter/OperandButton.css +0 -1
  361. package/dist/components/PlAdvancedFilter/OperandButton.vue.js +0 -10
  362. package/dist/components/PlAdvancedFilter/OperandButton.vue.js.map +0 -1
  363. package/dist/components/PlAdvancedFilter/OperandButton.vue3.js +0 -12
  364. package/dist/components/PlAdvancedFilter/OperandButton.vue3.js.map +0 -1
  365. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.css +0 -1
  366. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js +0 -10
  367. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js.map +0 -1
  368. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js +0 -20
  369. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js.map +0 -1
  370. package/dist/components/PlAgCellFile/PlAgCellFile.vue.js +0 -32
  371. package/dist/components/PlAgCellFile/PlAgCellFile.vue.js.map +0 -1
  372. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.js +0 -16
  373. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.js.map +0 -1
  374. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js +0 -22
  375. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js.map +0 -1
  376. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue3.js +0 -6
  377. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue3.js.map +0 -1
  378. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.css +0 -1
  379. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js +0 -32
  380. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js.map +0 -1
  381. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue3.js +0 -6
  382. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue3.js.map +0 -1
  383. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.css +0 -1
  384. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js +0 -24
  385. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js.map +0 -1
  386. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue3.js +0 -6
  387. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue3.js.map +0 -1
  388. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js +0 -97
  389. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js.map +0 -1
  390. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js +0 -33
  391. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js.map +0 -1
  392. package/dist/components/PlAgDataTable/PlAgDataTableSheets.css +0 -1
  393. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js +0 -10
  394. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js.map +0 -1
  395. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue3.js +0 -8
  396. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue3.js.map +0 -1
  397. package/dist/components/PlAgDataTable/PlAgDataTableV2.css +0 -1
  398. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.js +0 -10
  399. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.js.map +0 -1
  400. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue3.js +0 -10
  401. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue3.js.map +0 -1
  402. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js +0 -48
  403. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js.map +0 -1
  404. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js +0 -22
  405. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js.map +0 -1
  406. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue3.js +0 -6
  407. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue3.js.map +0 -1
  408. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +0 -26
  409. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +0 -1
  410. package/dist/components/PlAgDataTable/ag-override.css.js +0 -31
  411. package/dist/components/PlAgDataTable/ag-override.css.js.map +0 -1
  412. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.scss.js +0 -14
  413. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.scss.js.map +0 -1
  414. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js +0 -10
  415. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js.map +0 -1
  416. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue3.js +0 -8
  417. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue3.js.map +0 -1
  418. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +0 -48
  419. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +0 -1
  420. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.scss.js +0 -15
  421. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.scss.js.map +0 -1
  422. package/dist/components/PlAgRowNumHeader.vue.js +0 -39
  423. package/dist/components/PlAgRowNumHeader.vue.js.map +0 -1
  424. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js +0 -45
  425. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js.map +0 -1
  426. package/dist/components/PlAnnotations/components/AnnotationsSidebar.css +0 -1
  427. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue.js +0 -10
  428. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue.js.map +0 -1
  429. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue3.js +0 -18
  430. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue3.js.map +0 -1
  431. package/dist/components/PlAnnotations/components/FilterSidebar.css +0 -1
  432. package/dist/components/PlAnnotations/components/FilterSidebar.vue.js +0 -10
  433. package/dist/components/PlAnnotations/components/FilterSidebar.vue.js.map +0 -1
  434. package/dist/components/PlAnnotations/components/FilterSidebar.vue3.js +0 -10
  435. package/dist/components/PlAnnotations/components/FilterSidebar.vue3.js.map +0 -1
  436. package/dist/components/PlAnnotations/components/PlAnnotations.vue.js +0 -10
  437. package/dist/components/PlAnnotations/components/PlAnnotations.vue.js.map +0 -1
  438. package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js +0 -8
  439. package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js.map +0 -1
  440. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue.js +0 -10
  441. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue.js.map +0 -1
  442. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js +0 -10
  443. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js.map +0 -1
  444. package/dist/components/PlAnnotations/components/style.module.css.js +0 -12
  445. package/dist/components/PlAnnotations/components/style.module.css.js.map +0 -1
  446. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js +0 -79
  447. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js.map +0 -1
  448. package/dist/components/PlBtnExportArchive/Item.css +0 -1
  449. package/dist/components/PlBtnExportArchive/Item.vue.js +0 -10
  450. package/dist/components/PlBtnExportArchive/Item.vue.js.map +0 -1
  451. package/dist/components/PlBtnExportArchive/Item.vue3.js +0 -14
  452. package/dist/components/PlBtnExportArchive/Item.vue3.js.map +0 -1
  453. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.css +0 -1
  454. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.js +0 -10
  455. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.js.map +0 -1
  456. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue3.js +0 -12
  457. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue3.js.map +0 -1
  458. package/dist/components/PlBtnExportArchive/Summary.css +0 -1
  459. package/dist/components/PlBtnExportArchive/Summary.vue.js +0 -10
  460. package/dist/components/PlBtnExportArchive/Summary.vue.js.map +0 -1
  461. package/dist/components/PlBtnExportArchive/Summary.vue3.js +0 -12
  462. package/dist/components/PlBtnExportArchive/Summary.vue3.js.map +0 -1
  463. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue.js +0 -54
  464. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue.js.map +0 -1
  465. package/dist/components/PlTableFilters/PlTableFiltersV2.css +0 -1
  466. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.js +0 -10
  467. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.js.map +0 -1
  468. package/dist/components/PlTableFilters/PlTableFiltersV2.vue3.js +0 -8
  469. package/dist/components/PlTableFilters/PlTableFiltersV2.vue3.js.map +0 -1
  470. package/dist/plugins/Monetization/EndOfPeriod.css +0 -1
  471. package/dist/plugins/Monetization/EndOfPeriod.vue.js +0 -10
  472. package/dist/plugins/Monetization/EndOfPeriod.vue.js.map +0 -1
  473. package/dist/plugins/Monetization/EndOfPeriod.vue3.js +0 -8
  474. package/dist/plugins/Monetization/EndOfPeriod.vue3.js.map +0 -1
  475. package/dist/plugins/Monetization/LimitCard.css +0 -1
  476. package/dist/plugins/Monetization/LimitCard.vue.js +0 -10
  477. package/dist/plugins/Monetization/LimitCard.vue.js.map +0 -1
  478. package/dist/plugins/Monetization/LimitCard.vue3.js +0 -32
  479. package/dist/plugins/Monetization/LimitCard.vue3.js.map +0 -1
  480. package/dist/plugins/Monetization/MonetizationSidebar.vue.js +0 -138
  481. package/dist/plugins/Monetization/MonetizationSidebar.vue.js.map +0 -1
  482. package/dist/plugins/Monetization/RunStatus.css +0 -1
  483. package/dist/plugins/Monetization/RunStatus.vue.js +0 -10
  484. package/dist/plugins/Monetization/RunStatus.vue.js.map +0 -1
  485. package/dist/plugins/Monetization/RunStatus.vue3.js +0 -20
  486. package/dist/plugins/Monetization/RunStatus.vue3.js.map +0 -1
  487. package/dist/plugins/Monetization/UserCabinetCard.css +0 -1
  488. package/dist/plugins/Monetization/UserCabinetCard.vue.js +0 -10
  489. package/dist/plugins/Monetization/UserCabinetCard.vue.js.map +0 -1
  490. package/dist/plugins/Monetization/UserCabinetCard.vue3.js +0 -20
  491. package/dist/plugins/Monetization/UserCabinetCard.vue3.js.map +0 -1
  492. /package/dist/components/PlAgCellStatusTag/{PlAgCellStatusTag.css → PlAgCellStatusTag.style.css} +0 -0
  493. /package/dist/components/PlAgGridColumnManager/{PlAgGridColumnManager.css → PlAgGridColumnManager.vue.css} +0 -0
  494. /package/dist/components/PlAnnotations/components/{PlAnnotations.css → PlAnnotations.vue.css} +0 -0
  495. /package/dist/components/PlAnnotations/components/{PlAnnotationsModal.css → PlAnnotationsModal.vue.css} +0 -0
@@ -1,160 +1,162 @@
1
- import { defineComponent as W, reactive as O, computed as k, ref as V, createElementBlock as N, openBlock as f, Fragment as S, createVNode as x, createBlock as T, unref as z, withModifiers as $, normalizeClass as g, withCtx as R, renderSlot as A, Teleport as M, createCommentVNode as Z, createElementVNode as G, renderList as L } from "vue";
2
- import { useClickOutside as _, PlBtnGhost as j, PlIcon24 as J, PlIcon16 as K } from "@milaboratories/uikit";
3
- import { ZipWriter as Q } from "@zip.js/zip.js";
4
- import U from "./Item.vue.js";
5
- import { getFileNameFromHandle as X, ChunkedStreamReader as Y, getRawPlatformaInstance as ee } from "@platforma-sdk/model";
6
- import { uniqueId as te } from "../../lib/util/helpers/dist/strings.js";
7
- import se from "./Summary.vue.js";
8
- const ce = /* @__PURE__ */ W({
9
- __name: "PlBtnExportArchive",
10
- props: {
11
- fileExports: {},
12
- suggestedFileName: {},
13
- disabled: { type: Boolean },
14
- filePickerTypes: {},
15
- strategy: {},
16
- debugFn: { type: Function }
17
- },
18
- setup(B) {
19
- const r = B, t = O({
20
- loading: !1,
21
- name: "",
22
- exports: void 0,
23
- showExports: !1
24
- }), q = (e, s) => {
25
- var o, y;
26
- const a = (o = t.exports) == null ? void 0 : o.get(e);
27
- a && ((y = t.exports) == null || y.set(e, { ...a, ...s }));
28
- }, F = k(() => r.fileExports !== void 0 && !r.disabled), p = k(() => {
29
- var e;
30
- return Array.from(((e = t.exports) == null ? void 0 : e.values()) ?? []);
31
- }), D = k(() => ({
32
- fileName: t.name,
33
- current: p.value.reduce((e, s) => e + s.current, 0),
34
- size: p.value.reduce((e, s) => e + s.size, 0),
35
- status: p.value.some((e) => e.status === "in-progress") ? "in-progress" : p.value.every((e) => e.status === "completed") ? "completed" : "pending",
36
- hasErrors: p.value.some((e) => e.status === "error")
37
- })), H = async () => {
38
- var o;
39
- if (t.loading) {
40
- t.showExports = !0;
41
- return;
42
- }
43
- if (!F.value || !r.fileExports)
44
- return;
45
- const e = `${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}_Export.zip`, s = [
46
- {
47
- description: "ZIP files",
48
- accept: {
49
- "application/zip": [".zip"]
50
- }
51
- }
52
- ], a = await window.showSaveFilePicker({
53
- types: r.filePickerTypes || s,
54
- suggestedName: r.suggestedFileName || e
55
- });
56
- t.loading = !0, t.name = a.name, t.showExports = !0, t.exports = /* @__PURE__ */ new Map();
57
- try {
58
- const y = await a.createWritable(), P = new Q(y, {
59
- keepOrder: !0,
60
- zip64: !0,
61
- bufferedWrite: !1
62
- });
63
- try {
64
- const u = [];
65
- for (const c of r.fileExports) {
66
- const { importHandle: w, blobHandle: h, fileName: E } = c, d = E ?? X(w), { handle: m, size: n } = h, l = te();
67
- (o = t.exports) == null || o.set(l, { fileName: d, current: 0, size: n, status: "pending" });
68
- const v = Y.create({
69
- fetchChunk: async ({ from: i, to: b }) => (r.debugFn && await r.debugFn(d), await ee().blobDriver.getContent(m, { from: i, to: b })),
70
- totalSize: n,
71
- onError: async (i) => (q(l, { status: "error", error: i }), await new Promise((b) => setTimeout(b, 1e3)), "continue")
72
- });
73
- u.push({ id: l, fileName: d, size: n, stream: v });
74
- }
75
- const I = async (c) => {
76
- const { id: w, fileName: h, size: E, stream: d } = c, m = (n) => {
77
- var v, i;
78
- const l = (v = t.exports) == null ? void 0 : v.get(w);
79
- l && ((i = t.exports) == null || i.set(w, { ...l, ...n }));
80
- };
81
- await P.add(h, d, {
82
- bufferedWrite: !0,
83
- onstart: () => {
84
- m({ status: "in-progress" });
85
- },
86
- onprogress: (n) => {
87
- m({ current: n, status: "in-progress" });
88
- },
89
- onend() {
90
- m({ current: E, status: "completed" });
91
- }
92
- });
93
- };
94
- if (r.strategy === "parallel")
95
- await Promise.all(u.map(I));
96
- else
97
- for (const c of u)
98
- await I(c);
99
- } finally {
100
- await P.close().catch((u) => {
101
- console.error("Error closing zip", u);
102
- });
103
- }
104
- } finally {
105
- t.loading = !1;
106
- }
107
- }, C = V();
108
- return _([C], () => {
109
- t.showExports = !1;
110
- }), (e, s) => {
111
- var a;
112
- return f(), N(S, null, [
113
- x(z(j), {
114
- disabled: !F.value,
115
- loading: t.loading,
116
- class: g({ [e.$style["has-exports"]]: t.exports }),
117
- onClick: $(H, ["stop"])
118
- }, {
119
- append: R(() => [
120
- x(z(J), {
121
- class: g(e.$style.icon),
122
- name: "download"
123
- }, null, 8, ["class"])
124
- ]),
125
- default: R(() => [
126
- A(e.$slots, "default")
127
- ]),
128
- _: 3
129
- }, 8, ["disabled", "loading", "class"]),
130
- (f(), T(M, { to: "body" }, [
131
- t.exports && t.showExports ? (f(), N("div", {
132
- key: 0,
133
- ref_key: "progressesRef",
134
- ref: C,
135
- class: g(e.$style.progresses)
136
- }, [
137
- x(z(K), {
138
- class: g(e.$style.close),
139
- name: "close",
140
- onClick: s[0] || (s[0] = $((o) => t.showExports = !1, ["stop"]))
141
- }, null, 8, ["class"]),
142
- x(se, { item: D.value }, null, 8, ["item"]),
143
- G("div", {
144
- class: g([e.$style.itemsContainer, "pl-scrollable-y"])
145
- }, [
146
- (f(!0), N(S, null, L((a = t.exports) == null ? void 0 : a.values(), (o) => (f(), T(U, {
147
- key: o.fileName,
148
- item: o
149
- }, null, 8, ["item"]))), 128))
150
- ], 2)
151
- ], 2)) : Z("", !0)
152
- ]))
153
- ], 64);
154
- };
155
- }
1
+ import { uniqueId as e } from "../../lib/util/helpers/dist/strings.js";
2
+ import "../../lib/util/helpers/dist/index.js";
3
+ import t from "./Item.js";
4
+ import n from "./Summary.js";
5
+ import { Fragment as r, Teleport as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createVNode as u, defineComponent as d, normalizeClass as f, openBlock as p, reactive as m, ref as h, renderList as g, renderSlot as _, unref as v, withCtx as y, withModifiers as b } from "vue";
6
+ import { ChunkedStreamReader as x, getFileNameFromHandle as S, getRawPlatformaInstance as C } from "@platforma-sdk/model";
7
+ import { PlBtnGhost as w, PlIcon16 as T, PlIcon24 as E, useClickOutside as D } from "@milaboratories/uikit";
8
+ import { ZipWriter as O } from "@zip.js/zip.js";
9
+ var k = /* @__PURE__ */ d({
10
+ __name: "PlBtnExportArchive",
11
+ props: {
12
+ fileExports: {},
13
+ suggestedFileName: {},
14
+ disabled: { type: Boolean },
15
+ filePickerTypes: {},
16
+ strategy: {},
17
+ debugFn: { type: Function }
18
+ },
19
+ setup(d) {
20
+ let k = d, A = m({
21
+ loading: !1,
22
+ name: "",
23
+ exports: void 0,
24
+ showExports: !1
25
+ }), j = (e, t) => {
26
+ let n = A.exports?.get(e);
27
+ n && A.exports?.set(e, {
28
+ ...n,
29
+ ...t
30
+ });
31
+ }, M = a(() => k.fileExports !== void 0 && !k.disabled), N = a(() => Array.from(A.exports?.values() ?? [])), P = a(() => ({
32
+ fileName: A.name,
33
+ current: N.value.reduce((e, t) => e + t.current, 0),
34
+ size: N.value.reduce((e, t) => e + t.size, 0),
35
+ status: N.value.some((e) => e.status === "in-progress") ? "in-progress" : N.value.every((e) => e.status === "completed") ? "completed" : "pending",
36
+ hasErrors: N.value.some((e) => e.status === "error")
37
+ })), F = async () => {
38
+ if (A.loading) {
39
+ A.showExports = !0;
40
+ return;
41
+ }
42
+ if (!M.value || !k.fileExports) return;
43
+ let t = `${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}_Export.zip`, n = await window.showSaveFilePicker({
44
+ types: k.filePickerTypes || [{
45
+ description: "ZIP files",
46
+ accept: { "application/zip": [".zip"] }
47
+ }],
48
+ suggestedName: k.suggestedFileName || t
49
+ });
50
+ A.loading = !0, A.name = n.name, A.showExports = !0, A.exports = /* @__PURE__ */ new Map();
51
+ try {
52
+ let t = new O(await n.createWritable(), {
53
+ keepOrder: !0,
54
+ zip64: !0,
55
+ bufferedWrite: !1
56
+ });
57
+ try {
58
+ let n = [];
59
+ for (let t of k.fileExports) {
60
+ let { importHandle: r, blobHandle: i, fileName: a } = t, o = a ?? S(r), { handle: s, size: c } = i, l = e();
61
+ A.exports?.set(l, {
62
+ fileName: o,
63
+ current: 0,
64
+ size: c,
65
+ status: "pending"
66
+ });
67
+ let u = x.create({
68
+ fetchChunk: async ({ from: e, to: t }) => (k.debugFn && await k.debugFn(o), await C().blobDriver.getContent(s, {
69
+ from: e,
70
+ to: t
71
+ })),
72
+ totalSize: c,
73
+ onError: async (e) => (j(l, {
74
+ status: "error",
75
+ error: e
76
+ }), await new Promise((e) => setTimeout(e, 1e3)), "continue")
77
+ });
78
+ n.push({
79
+ id: l,
80
+ fileName: o,
81
+ size: c,
82
+ stream: u
83
+ });
84
+ }
85
+ let r = async (e) => {
86
+ let { id: n, fileName: r, size: i, stream: a } = e, o = (e) => {
87
+ let t = A.exports?.get(n);
88
+ t && A.exports?.set(n, {
89
+ ...t,
90
+ ...e
91
+ });
92
+ };
93
+ await t.add(r, a, {
94
+ bufferedWrite: !0,
95
+ onstart: () => {
96
+ o({ status: "in-progress" });
97
+ },
98
+ onprogress: (e) => {
99
+ o({
100
+ current: e,
101
+ status: "in-progress"
102
+ });
103
+ },
104
+ onend() {
105
+ o({
106
+ current: i,
107
+ status: "completed"
108
+ });
109
+ }
110
+ });
111
+ };
112
+ if (k.strategy === "parallel") await Promise.all(n.map(r));
113
+ else for (let e of n) await r(e);
114
+ } finally {
115
+ await t.close().catch((e) => {
116
+ console.error("Error closing zip", e);
117
+ });
118
+ }
119
+ } finally {
120
+ A.loading = !1;
121
+ }
122
+ }, I = h();
123
+ return D([I], () => {
124
+ A.showExports = !1;
125
+ }), (e, a) => (p(), c(r, null, [u(v(w), {
126
+ disabled: !M.value,
127
+ loading: A.loading,
128
+ class: f({ [e.$style["has-exports"]]: A.exports }),
129
+ onClick: b(F, ["stop"])
130
+ }, {
131
+ append: y(() => [u(v(E), {
132
+ class: f(e.$style.icon),
133
+ name: "download"
134
+ }, null, 8, ["class"])]),
135
+ default: y(() => [_(e.$slots, "default")]),
136
+ _: 3
137
+ }, 8, [
138
+ "disabled",
139
+ "loading",
140
+ "class"
141
+ ]), (p(), o(i, { to: "body" }, [A.exports && A.showExports ? (p(), c("div", {
142
+ key: 0,
143
+ ref_key: "progressesRef",
144
+ ref: I,
145
+ class: f(e.$style.progresses)
146
+ }, [
147
+ u(v(T), {
148
+ class: f(e.$style.close),
149
+ name: "close",
150
+ onClick: a[0] ||= b((e) => A.showExports = !1, ["stop"])
151
+ }, null, 8, ["class"]),
152
+ u(n, { item: P.value }, null, 8, ["item"]),
153
+ l("div", { class: f([e.$style.itemsContainer, "pl-scrollable-y"]) }, [(p(!0), c(r, null, g(A.exports?.values(), (e) => (p(), o(t, {
154
+ key: e.fileName,
155
+ item: e
156
+ }, null, 8, ["item"]))), 128))], 2)
157
+ ], 2)) : s("", !0)]))], 64));
158
+ }
156
159
  });
157
- export {
158
- ce as default
159
- };
160
- //# sourceMappingURL=PlBtnExportArchive.vue2.js.map
160
+ export { k as default };
161
+
162
+ //# sourceMappingURL=PlBtnExportArchive.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlBtnExportArchive.vue2.js","sources":["../../../src/components/PlBtnExportArchive/PlBtnExportArchive.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlBtnGhost, PlIcon16, PlIcon24, useClickOutside } from \"@milaboratories/uikit\";\nimport { ZipWriter } from \"@zip.js/zip.js\";\nimport { reactive, computed, ref } from \"vue\";\nimport type { ExportItem, ExportsMap, FileExportEntry } from \"./types\";\nimport Item from \"./Item.vue\";\nimport { getFileNameFromHandle, ChunkedStreamReader } from \"@platforma-sdk/model\";\nimport { getRawPlatformaInstance } from \"@platforma-sdk/model\";\nimport { uniqueId } from \"@milaboratories/helpers\";\nimport Summary from \"./Summary.vue\";\n\ntype FilePickerAcceptType = {\n description?: string;\n accept?: Record<string, string[]>;\n};\n\nconst props = defineProps<{\n fileExports?: FileExportEntry[];\n suggestedFileName?: string;\n disabled?: boolean;\n filePickerTypes?: FilePickerAcceptType[];\n strategy?: \"parallel\"; // default is sequential\n debugFn?: (fileName: string) => Promise<void>;\n}>();\n\nconst defaultData = () => ({\n loading: false,\n name: \"\",\n exports: undefined as ExportsMap | undefined,\n showExports: false,\n});\n\nconst data = reactive(defaultData());\n\nconst updateExportsItem = (id: string, partial: Partial<ExportItem>) => {\n const it = data.exports?.get(id);\n if (it) {\n data.exports?.set(id, { ...it, ...partial });\n }\n};\n\nconst isReadyToExport = computed(() => {\n return props.fileExports !== undefined && !props.disabled;\n});\n\nconst items = computed(() => {\n return Array.from(data.exports?.values() ?? []);\n});\n\nconst archive = computed<ExportItem>(() => {\n return {\n fileName: data.name,\n current: items.value.reduce((acc, item) => acc + item.current, 0),\n size: items.value.reduce((acc, item) => acc + item.size, 0),\n status: items.value.some((item) => item.status === \"in-progress\")\n ? \"in-progress\"\n : items.value.every((item) => item.status === \"completed\")\n ? \"completed\"\n : \"pending\",\n hasErrors: items.value.some((item) => item.status === \"error\"),\n };\n});\n\ntype ZipRequest = {\n id: string;\n fileName: string;\n size: number;\n stream: ReadableStream<Uint8Array>;\n};\n\nconst exportRawTsvs = async () => {\n if (data.loading) {\n data.showExports = true;\n return;\n }\n\n if (!isReadyToExport.value || !props.fileExports) {\n return;\n }\n\n const defaultFileName = `${new Date().toISOString().split(\"T\")[0]}_Export.zip`;\n const defaultTypes = [\n {\n description: \"ZIP files\",\n accept: {\n \"application/zip\": [\".zip\"],\n },\n },\n ];\n\n // @ts-expect-error - type definition issue TODO: fix this\n const newHandle = await window.showSaveFilePicker({\n types: props.filePickerTypes || defaultTypes,\n suggestedName: props.suggestedFileName || defaultFileName,\n });\n\n data.loading = true;\n data.name = newHandle.name;\n data.showExports = true;\n data.exports = new Map();\n\n try {\n const writableStream = await newHandle.createWritable();\n const zip = new ZipWriter(writableStream, {\n keepOrder: true,\n zip64: true,\n bufferedWrite: false,\n });\n try {\n const requests = [] as ZipRequest[];\n\n for (const entry of props.fileExports) {\n const { importHandle, blobHandle, fileName: customFileName } = entry;\n const fileName = customFileName ?? getFileNameFromHandle(importHandle);\n const { handle, size } = blobHandle;\n\n const id = uniqueId();\n\n data.exports?.set(id, { fileName, current: 0, size, status: \"pending\" });\n\n const stream = ChunkedStreamReader.create({\n fetchChunk: async ({ from, to }) => {\n if (props.debugFn) {\n await props.debugFn(fileName);\n }\n\n return await getRawPlatformaInstance().blobDriver.getContent(handle, { from, to });\n },\n totalSize: size,\n onError: async (error) => {\n updateExportsItem(id, { status: \"error\", error });\n await new Promise((resolve) => setTimeout(resolve, 1000)); // primitive for now\n return \"continue\";\n },\n });\n\n // Create a chunked stream reader for efficient streaming\n requests.push({ id, fileName, size, stream });\n }\n\n const processRequest = async (request: ZipRequest) => {\n const { id, fileName, size, stream } = request;\n const update = (partial: Partial<ExportItem>) => {\n const it = data.exports?.get(id);\n if (it) {\n data.exports?.set(id, { ...it, ...partial });\n }\n };\n await zip.add(fileName, stream, {\n bufferedWrite: true,\n onstart: () => {\n update({ status: \"in-progress\" });\n return undefined;\n },\n onprogress: (current: number) => {\n update({ current, status: \"in-progress\" });\n return undefined;\n },\n onend() {\n update({ current: size, status: \"completed\" });\n return undefined;\n },\n });\n };\n\n if (props.strategy === \"parallel\") {\n await Promise.all(requests.map(processRequest));\n } else {\n for (const request of requests) {\n await processRequest(request);\n }\n }\n } finally {\n await zip.close().catch((error) => {\n console.error(\"Error closing zip\", error);\n });\n }\n } finally {\n data.loading = false;\n }\n};\n\nconst progressesRef = ref();\n\nuseClickOutside([progressesRef], () => {\n data.showExports = false;\n});\n</script>\n\n<template>\n <PlBtnGhost\n :disabled=\"!isReadyToExport\"\n :loading=\"data.loading\"\n :class=\"{ [$style['has-exports']]: data.exports }\"\n @click.stop=\"exportRawTsvs\"\n >\n <slot />\n <template #append>\n <PlIcon24 :class=\"$style.icon\" name=\"download\" />\n </template>\n </PlBtnGhost>\n <Teleport to=\"body\">\n <div v-if=\"data.exports && data.showExports\" ref=\"progressesRef\" :class=\"$style.progresses\">\n <PlIcon16 :class=\"$style.close\" name=\"close\" @click.stop=\"data.showExports = false\" />\n <Summary :item=\"archive\" />\n <div :class=\"$style.itemsContainer\" class=\"pl-scrollable-y\">\n <Item v-for=\"item in data.exports?.values()\" :key=\"item.fileName\" :item=\"item\" />\n </div>\n </div>\n </Teleport>\n</template>\n\n<style module>\n.progresses {\n position: fixed;\n top: 8px;\n right: 8px;\n width: 350px;\n height: auto;\n max-height: 400px;\n overflow: auto;\n background: rgba(0, 0, 0, 0.85);\n border-radius: 8px;\n padding: 20px 8px 8px 20px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n z-index: 1000;\n\n .itemsContainer {\n max-height: 300px;\n }\n\n .close {\n position: absolute;\n top: 8px;\n right: 8px;\n cursor: pointer;\n --icon-color: white;\n }\n}\n</style>\n"],"names":["props","__props","data","reactive","updateExportsItem","id","partial","it","_a","_b","isReadyToExport","computed","items","archive","acc","item","exportRawTsvs","defaultFileName","defaultTypes","newHandle","writableStream","zip","ZipWriter","requests","entry","importHandle","blobHandle","customFileName","fileName","getFileNameFromHandle","handle","size","uniqueId","stream","ChunkedStreamReader","from","to","getRawPlatformaInstance","error","resolve","processRequest","request","update","current","progressesRef","ref","useClickOutside","_createVNode","_unref","PlBtnGhost","_normalizeClass","$style","PlIcon24","_renderSlot","_ctx","_createBlock","_Teleport","_createElementBlock","PlIcon16","_cache","_withModifiers","$event","Summary","_createElementVNode","_openBlock","_Fragment","Item"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,UAAMA,IAAQC,GAgBRC,IAAOC,EAPc;AAAA,MACzB,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,aAAa;AAAA,IAAA,CAGoB,GAE7BC,IAAoB,CAACC,GAAYC,MAAiC;;AACtE,YAAMC,KAAKC,IAAAN,EAAK,YAAL,gBAAAM,EAAc,IAAIH;AAC7B,MAAIE,OACFE,IAAAP,EAAK,YAAL,QAAAO,EAAc,IAAIJ,GAAI,EAAE,GAAGE,GAAI,GAAGD;IAEtC,GAEMI,IAAkBC,EAAS,MACxBX,EAAM,gBAAgB,UAAa,CAACA,EAAM,QAClD,GAEKY,IAAQD,EAAS,MAAM;;AAC3B,aAAO,MAAM,OAAKH,IAAAN,EAAK,YAAL,gBAAAM,EAAc,aAAY,EAAE;AAAA,IAChD,CAAC,GAEKK,IAAUF,EAAqB,OAC5B;AAAA,MACL,UAAUT,EAAK;AAAA,MACf,SAASU,EAAM,MAAM,OAAO,CAACE,GAAKC,MAASD,IAAMC,EAAK,SAAS,CAAC;AAAA,MAChE,MAAMH,EAAM,MAAM,OAAO,CAACE,GAAKC,MAASD,IAAMC,EAAK,MAAM,CAAC;AAAA,MAC1D,QAAQH,EAAM,MAAM,KAAK,CAACG,MAASA,EAAK,WAAW,aAAa,IAC5D,gBACAH,EAAM,MAAM,MAAM,CAACG,MAASA,EAAK,WAAW,WAAW,IACrD,cACA;AAAA,MACN,WAAWH,EAAM,MAAM,KAAK,CAACG,MAASA,EAAK,WAAW,OAAO;AAAA,IAAA,EAEhE,GASKC,IAAgB,YAAY;;AAChC,UAAId,EAAK,SAAS;AAChB,QAAAA,EAAK,cAAc;AACnB;AAAA,MACF;AAEA,UAAI,CAACQ,EAAgB,SAAS,CAACV,EAAM;AACnC;AAGF,YAAMiB,IAAkB,IAAG,oBAAI,KAAA,GAAO,cAAc,MAAM,GAAG,EAAE,CAAC,CAAC,eAC3DC,IAAe;AAAA,QACnB;AAAA,UACE,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,mBAAmB,CAAC,MAAM;AAAA,UAAA;AAAA,QAC5B;AAAA,MACF,GAIIC,IAAY,MAAM,OAAO,mBAAmB;AAAA,QAChD,OAAOnB,EAAM,mBAAmBkB;AAAA,QAChC,eAAelB,EAAM,qBAAqBiB;AAAA,MAAA,CAC3C;AAED,MAAAf,EAAK,UAAU,IACfA,EAAK,OAAOiB,EAAU,MACtBjB,EAAK,cAAc,IACnBA,EAAK,8BAAc,IAAA;AAEnB,UAAI;AACF,cAAMkB,IAAiB,MAAMD,EAAU,eAAA,GACjCE,IAAM,IAAIC,EAAUF,GAAgB;AAAA,UACxC,WAAW;AAAA,UACX,OAAO;AAAA,UACP,eAAe;AAAA,QAAA,CAChB;AACD,YAAI;AACF,gBAAMG,IAAW,CAAA;AAEjB,qBAAWC,KAASxB,EAAM,aAAa;AACrC,kBAAM,EAAE,cAAAyB,GAAc,YAAAC,GAAY,UAAUC,MAAmBH,GACzDI,IAAWD,KAAkBE,EAAsBJ,CAAY,GAC/D,EAAE,QAAAK,GAAQ,MAAAC,EAAA,IAASL,GAEnBrB,IAAK2B,GAAA;AAEX,aAAAxB,IAAAN,EAAK,YAAL,QAAAM,EAAc,IAAIH,GAAI,EAAE,UAAAuB,GAAU,SAAS,GAAG,MAAAG,GAAM,QAAQ,UAAA;AAE5D,kBAAME,IAASC,EAAoB,OAAO;AAAA,cACxC,YAAY,OAAO,EAAE,MAAAC,GAAM,IAAAC,SACrBpC,EAAM,WACR,MAAMA,EAAM,QAAQ4B,CAAQ,GAGvB,MAAMS,KAA0B,WAAW,WAAWP,GAAQ,EAAE,MAAAK,GAAM,IAAAC,GAAI;AAAA,cAEnF,WAAWL;AAAA,cACX,SAAS,OAAOO,OACdlC,EAAkBC,GAAI,EAAE,QAAQ,SAAS,OAAAiC,GAAO,GAChD,MAAM,IAAI,QAAQ,CAACC,MAAY,WAAWA,GAAS,GAAI,CAAC,GACjD;AAAA,YACT,CACD;AAGD,YAAAhB,EAAS,KAAK,EAAE,IAAAlB,GAAI,UAAAuB,GAAU,MAAAG,GAAM,QAAAE,GAAQ;AAAA,UAC9C;AAEA,gBAAMO,IAAiB,OAAOC,MAAwB;AACpD,kBAAM,EAAE,IAAApC,GAAI,UAAAuB,GAAU,MAAAG,GAAM,QAAAE,MAAWQ,GACjCC,IAAS,CAACpC,MAAiC;;AAC/C,oBAAMC,KAAKC,IAAAN,EAAK,YAAL,gBAAAM,EAAc,IAAIH;AAC7B,cAAIE,OACFE,IAAAP,EAAK,YAAL,QAAAO,EAAc,IAAIJ,GAAI,EAAE,GAAGE,GAAI,GAAGD;YAEtC;AACA,kBAAMe,EAAI,IAAIO,GAAUK,GAAQ;AAAA,cAC9B,eAAe;AAAA,cACf,SAAS,MAAM;AACb,gBAAAS,EAAO,EAAE,QAAQ,eAAe;AAAA,cAElC;AAAA,cACA,YAAY,CAACC,MAAoB;AAC/B,gBAAAD,EAAO,EAAE,SAAAC,GAAS,QAAQ,cAAA,CAAe;AAAA,cAE3C;AAAA,cACA,QAAQ;AACN,gBAAAD,EAAO,EAAE,SAASX,GAAM,QAAQ,aAAa;AAAA,cAE/C;AAAA,YAAA,CACD;AAAA,UACH;AAEA,cAAI/B,EAAM,aAAa;AACrB,kBAAM,QAAQ,IAAIuB,EAAS,IAAIiB,CAAc,CAAC;AAAA;AAE9C,uBAAWC,KAAWlB;AACpB,oBAAMiB,EAAeC,CAAO;AAAA,QAGlC,UAAA;AACE,gBAAMpB,EAAI,MAAA,EAAQ,MAAM,CAACiB,MAAU;AACjC,oBAAQ,MAAM,qBAAqBA,CAAK;AAAA,UAC1C,CAAC;AAAA,QACH;AAAA,MACF,UAAA;AACE,QAAApC,EAAK,UAAU;AAAA,MACjB;AAAA,IACF,GAEM0C,IAAgBC,EAAA;AAEtB,WAAAC,EAAgB,CAACF,CAAa,GAAG,MAAM;AACrC,MAAA1C,EAAK,cAAc;AAAA,IACrB,CAAC;;;QAIC6C,EAUaC,EAAAC,CAAA,GAAA;AAAA,UATV,WAAWvC,EAAA;AAAA,UACX,SAASR,EAAK;AAAA,UACd,OAAKgD,EAAA,EAAA,CAAKC,EAAAA,OAAM,aAAA,CAAA,GAAkBjD,EAAK,SAAO;AAAA,UAC9C,WAAYc,GAAa,CAAA,MAAA,CAAA;AAAA,QAAA;UAGf,UACT,MAAiD;AAAA,YAAjD+B,EAAiDC,EAAAI,CAAA,GAAA;AAAA,cAAtC,OAAKF,EAAEC,EAAAA,OAAO,IAAI;AAAA,cAAE,MAAK;AAAA,YAAA;;qBAFtC,MAAQ;AAAA,YAARE,EAAQC,EAAA,QAAA,SAAA;AAAA,UAAA;;;cAKVC,EAQWC,GAAA,EARD,IAAG,UAAM;AAAA,UACNtD,EAAK,WAAWA,EAAK,oBAAhCuD,EAMM,OAAA;AAAA;qBAN2C;AAAA,YAAJ,KAAIb;AAAA,YAAiB,OAAKM,EAAEC,EAAAA,OAAO,UAAU;AAAA,UAAA;YACxFJ,EAAsFC,EAAAU,CAAA,GAAA;AAAA,cAA3E,OAAKR,EAAEC,EAAAA,OAAO,KAAK;AAAA,cAAE,MAAK;AAAA,cAAS,SAAKQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAAA,CAAAC,MAAO3D,EAAK,cAAW,IAAA,CAAA,MAAA,CAAA;AAAA,YAAA;YAC1E6C,EAA2Be,IAAA,EAAjB,MAAMjD,EAAA,MAAA,GAAO,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,YACvBkD,EAEM,OAAA;AAAA,cAFA,OAAKb,EAAA,CAAEC,EAAAA,OAAO,gBAAsB,iBAAiB,CAAA;AAAA,YAAA;eACzDa,EAAA,EAAA,GAAAP,EAAiFQ,YAA5DzD,IAAAN,EAAK,YAAL,gBAAAM,EAAc,WAAtBO,YAAbwC,EAAiFW,GAAA;AAAA,gBAAnC,KAAKnD,EAAK;AAAA,gBAAW,MAAAA;AAAA,cAAA;;;;;;;;"}
1
+ {"version":3,"file":"PlBtnExportArchive.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlBtnExportArchive/PlBtnExportArchive.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlBtnGhost, PlIcon16, PlIcon24, useClickOutside } from \"@milaboratories/uikit\";\nimport { ZipWriter } from \"@zip.js/zip.js\";\nimport { reactive, computed, ref } from \"vue\";\nimport type { ExportItem, ExportsMap, FileExportEntry } from \"./types\";\nimport Item from \"./Item.vue\";\nimport { getFileNameFromHandle, ChunkedStreamReader } from \"@platforma-sdk/model\";\nimport { getRawPlatformaInstance } from \"@platforma-sdk/model\";\nimport { uniqueId } from \"@milaboratories/helpers\";\nimport Summary from \"./Summary.vue\";\n\ntype FilePickerAcceptType = {\n description?: string;\n accept?: Record<string, string[]>;\n};\n\nconst props = defineProps<{\n fileExports?: FileExportEntry[];\n suggestedFileName?: string;\n disabled?: boolean;\n filePickerTypes?: FilePickerAcceptType[];\n strategy?: \"parallel\"; // default is sequential\n debugFn?: (fileName: string) => Promise<void>;\n}>();\n\nconst defaultData = () => ({\n loading: false,\n name: \"\",\n exports: undefined as ExportsMap | undefined,\n showExports: false,\n});\n\nconst data = reactive(defaultData());\n\nconst updateExportsItem = (id: string, partial: Partial<ExportItem>) => {\n const it = data.exports?.get(id);\n if (it) {\n data.exports?.set(id, { ...it, ...partial });\n }\n};\n\nconst isReadyToExport = computed(() => {\n return props.fileExports !== undefined && !props.disabled;\n});\n\nconst items = computed(() => {\n return Array.from(data.exports?.values() ?? []);\n});\n\nconst archive = computed<ExportItem>(() => {\n return {\n fileName: data.name,\n current: items.value.reduce((acc, item) => acc + item.current, 0),\n size: items.value.reduce((acc, item) => acc + item.size, 0),\n status: items.value.some((item) => item.status === \"in-progress\")\n ? \"in-progress\"\n : items.value.every((item) => item.status === \"completed\")\n ? \"completed\"\n : \"pending\",\n hasErrors: items.value.some((item) => item.status === \"error\"),\n };\n});\n\ntype ZipRequest = {\n id: string;\n fileName: string;\n size: number;\n stream: ReadableStream<Uint8Array>;\n};\n\nconst exportRawTsvs = async () => {\n if (data.loading) {\n data.showExports = true;\n return;\n }\n\n if (!isReadyToExport.value || !props.fileExports) {\n return;\n }\n\n const defaultFileName = `${new Date().toISOString().split(\"T\")[0]}_Export.zip`;\n const defaultTypes = [\n {\n description: \"ZIP files\",\n accept: {\n \"application/zip\": [\".zip\"],\n },\n },\n ];\n\n // @ts-expect-error - type definition issue TODO: fix this\n const newHandle = await window.showSaveFilePicker({\n types: props.filePickerTypes || defaultTypes,\n suggestedName: props.suggestedFileName || defaultFileName,\n });\n\n data.loading = true;\n data.name = newHandle.name;\n data.showExports = true;\n data.exports = new Map();\n\n try {\n const writableStream = await newHandle.createWritable();\n const zip = new ZipWriter(writableStream, {\n keepOrder: true,\n zip64: true,\n bufferedWrite: false,\n });\n try {\n const requests = [] as ZipRequest[];\n\n for (const entry of props.fileExports) {\n const { importHandle, blobHandle, fileName: customFileName } = entry;\n const fileName = customFileName ?? getFileNameFromHandle(importHandle);\n const { handle, size } = blobHandle;\n\n const id = uniqueId();\n\n data.exports?.set(id, { fileName, current: 0, size, status: \"pending\" });\n\n const stream = ChunkedStreamReader.create({\n fetchChunk: async ({ from, to }) => {\n if (props.debugFn) {\n await props.debugFn(fileName);\n }\n\n return await getRawPlatformaInstance().blobDriver.getContent(handle, { from, to });\n },\n totalSize: size,\n onError: async (error) => {\n updateExportsItem(id, { status: \"error\", error });\n await new Promise((resolve) => setTimeout(resolve, 1000)); // primitive for now\n return \"continue\";\n },\n });\n\n // Create a chunked stream reader for efficient streaming\n requests.push({ id, fileName, size, stream });\n }\n\n const processRequest = async (request: ZipRequest) => {\n const { id, fileName, size, stream } = request;\n const update = (partial: Partial<ExportItem>) => {\n const it = data.exports?.get(id);\n if (it) {\n data.exports?.set(id, { ...it, ...partial });\n }\n };\n await zip.add(fileName, stream, {\n bufferedWrite: true,\n onstart: () => {\n update({ status: \"in-progress\" });\n return undefined;\n },\n onprogress: (current: number) => {\n update({ current, status: \"in-progress\" });\n return undefined;\n },\n onend() {\n update({ current: size, status: \"completed\" });\n return undefined;\n },\n });\n };\n\n if (props.strategy === \"parallel\") {\n await Promise.all(requests.map(processRequest));\n } else {\n for (const request of requests) {\n await processRequest(request);\n }\n }\n } finally {\n await zip.close().catch((error) => {\n console.error(\"Error closing zip\", error);\n });\n }\n } finally {\n data.loading = false;\n }\n};\n\nconst progressesRef = ref();\n\nuseClickOutside([progressesRef], () => {\n data.showExports = false;\n});\n</script>\n\n<template>\n <PlBtnGhost\n :disabled=\"!isReadyToExport\"\n :loading=\"data.loading\"\n :class=\"{ [$style['has-exports']]: data.exports }\"\n @click.stop=\"exportRawTsvs\"\n >\n <slot />\n <template #append>\n <PlIcon24 :class=\"$style.icon\" name=\"download\" />\n </template>\n </PlBtnGhost>\n <Teleport to=\"body\">\n <div v-if=\"data.exports && data.showExports\" ref=\"progressesRef\" :class=\"$style.progresses\">\n <PlIcon16 :class=\"$style.close\" name=\"close\" @click.stop=\"data.showExports = false\" />\n <Summary :item=\"archive\" />\n <div :class=\"$style.itemsContainer\" class=\"pl-scrollable-y\">\n <Item v-for=\"item in data.exports?.values()\" :key=\"item.fileName\" :item=\"item\" />\n </div>\n </div>\n </Teleport>\n</template>\n\n<style module>\n.progresses {\n position: fixed;\n top: 8px;\n right: 8px;\n width: 350px;\n height: auto;\n max-height: 400px;\n overflow: auto;\n background: rgba(0, 0, 0, 0.85);\n border-radius: 8px;\n padding: 20px 8px 8px 20px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n z-index: 1000;\n\n .itemsContainer {\n max-height: 300px;\n }\n\n .close {\n position: absolute;\n top: 8px;\n right: 8px;\n cursor: pointer;\n --icon-color: white;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import e from "../../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./Summary.vue2.js";
3
+ import n from "./Summary.style.js";
4
+ var r = /* @__PURE__ */ e(t, [["__cssModules", { $style: n }]]);
5
+ export { r as default };
6
+
7
+ //# sourceMappingURL=Summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Summary.js","names":[],"sources":["../../../src/components/PlBtnExportArchive/Summary.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ExportItem } from \"./types\";\nimport { prettyBytes } from \"@milaboratories/helpers\";\n\ndefineProps<{\n item: ExportItem;\n}>();\n\nconst emit = defineEmits<{\n (e: \"cancel\"): void;\n}>();\n</script>\n\n<template>\n <div :class=\"$style.summary\">\n <div :class=\"$style.name\">\n {{ item.fileName }}<span v-if=\"false\" @click.stop=\"emit('cancel')\">[TODO: Cancel]</span>\n </div>\n <div v-if=\"item.status === 'in-progress'\" :class=\"$style.details\">\n <span>{{ prettyBytes(item.current, {}) }}</span>\n <span>/</span>\n <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else-if=\"item.status === 'completed'\" :class=\"$style.details\">\n Done <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else :class=\"$style.details\">Pending</div>\n </div>\n</template>\n\n<style module>\n.summary {\n display: flex;\n flex-direction: column;\n margin-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n padding-bottom: 8px;\n --name-font-size: 14px;\n --details-font-size: 12px;\n}\n\n.name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--name-font-size);\n font-weight: 600;\n}\n.details {\n font-size: var(--details-font-size);\n font-weight: 400;\n color: rgba(255, 255, 255, 0.6);\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import './Summary.vue.css';var e = {
2
+ summary: "_summary_s5gm9_2",
3
+ name: "_name_s5gm9_12",
4
+ details: "_details_s5gm9_19"
5
+ };
6
+ export { e as default };
7
+
8
+ //# sourceMappingURL=Summary.style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Summary.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlBtnExportArchive/Summary.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ExportItem } from \"./types\";\nimport { prettyBytes } from \"@milaboratories/helpers\";\n\ndefineProps<{\n item: ExportItem;\n}>();\n\nconst emit = defineEmits<{\n (e: \"cancel\"): void;\n}>();\n</script>\n\n<template>\n <div :class=\"$style.summary\">\n <div :class=\"$style.name\">\n {{ item.fileName }}<span v-if=\"false\" @click.stop=\"emit('cancel')\">[TODO: Cancel]</span>\n </div>\n <div v-if=\"item.status === 'in-progress'\" :class=\"$style.details\">\n <span>{{ prettyBytes(item.current, {}) }}</span>\n <span>/</span>\n <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else-if=\"item.status === 'completed'\" :class=\"$style.details\">\n Done <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else :class=\"$style.details\">Pending</div>\n </div>\n</template>\n\n<style module>\n.summary {\n display: flex;\n flex-direction: column;\n margin-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n padding-bottom: 8px;\n --name-font-size: 14px;\n --details-font-size: 12px;\n}\n\n.name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--name-font-size);\n font-weight: 600;\n}\n.details {\n font-size: var(--details-font-size);\n font-weight: 400;\n color: rgba(255, 255, 255, 0.6);\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ ._summary_s5gm9_2{--name-font-size:14px;--details-font-size:12px;border-bottom:1px solid #ffffff1a;flex-direction:column;margin-bottom:8px;padding-bottom:8px;display:flex}._name_s5gm9_12{white-space:nowrap;text-overflow:ellipsis;font-size:var(--name-font-size);font-weight:600;overflow:hidden}._details_s5gm9_19{font-size:var(--details-font-size);color:#fff9;font-weight:400}
@@ -1,42 +1,27 @@
1
- import { defineComponent as u, createElementBlock as n, openBlock as m, normalizeClass as s, createElementVNode as l, createTextVNode as d, createCommentVNode as y, toDisplayString as a, unref as r } from "vue";
2
- import { prettyBytes as o } from "../../lib/util/helpers/dist/prettyBytes.js";
3
- const k = /* @__PURE__ */ u({
4
- __name: "Summary",
5
- props: {
6
- item: {}
7
- },
8
- emits: ["cancel"],
9
- setup(e, { emit: c }) {
10
- return (t, i) => (m(), n("div", {
11
- class: s(t.$style.summary)
12
- }, [
13
- l("div", {
14
- class: s(t.$style.name)
15
- }, [
16
- d(a(e.item.fileName), 1),
17
- y("", !0)
18
- ], 2),
19
- e.item.status === "in-progress" ? (m(), n("div", {
20
- key: 0,
21
- class: s(t.$style.details)
22
- }, [
23
- l("span", null, a(r(o)(e.item.current, {})), 1),
24
- i[1] || (i[1] = l("span", null, "/", -1)),
25
- l("span", null, a(r(o)(e.item.size, {})), 1)
26
- ], 2)) : e.item.status === "completed" ? (m(), n("div", {
27
- key: 1,
28
- class: s(t.$style.details)
29
- }, [
30
- i[2] || (i[2] = d(" Done ", -1)),
31
- l("span", null, a(r(o)(e.item.size, {})), 1)
32
- ], 2)) : (m(), n("div", {
33
- key: 2,
34
- class: s(t.$style.details)
35
- }, "Pending", 2))
36
- ], 2));
37
- }
1
+ import { prettyBytes as e } from "../../lib/util/helpers/dist/prettyBytes.js";
2
+ import "../../lib/util/helpers/dist/index.js";
3
+ import { createCommentVNode as t, createElementBlock as n, createElementVNode as r, createTextVNode as i, defineComponent as a, normalizeClass as o, openBlock as s, toDisplayString as c, unref as l } from "vue";
4
+ var u = /* @__PURE__ */ a({
5
+ __name: "Summary",
6
+ props: { item: {} },
7
+ emits: ["cancel"],
8
+ setup(a, { emit: u }) {
9
+ return (u, d) => (s(), n("div", { class: o(u.$style.summary) }, [r("div", { class: o(u.$style.name) }, [i(c(a.item.fileName), 1), t("", !0)], 2), a.item.status === "in-progress" ? (s(), n("div", {
10
+ key: 0,
11
+ class: o(u.$style.details)
12
+ }, [
13
+ r("span", null, c(l(e)(a.item.current, {})), 1),
14
+ d[1] ||= r("span", null, "/", -1),
15
+ r("span", null, c(l(e)(a.item.size, {})), 1)
16
+ ], 2)) : a.item.status === "completed" ? (s(), n("div", {
17
+ key: 1,
18
+ class: o(u.$style.details)
19
+ }, [d[2] ||= i(" Done ", -1), r("span", null, c(l(e)(a.item.size, {})), 1)], 2)) : (s(), n("div", {
20
+ key: 2,
21
+ class: o(u.$style.details)
22
+ }, "Pending", 2))], 2));
23
+ }
38
24
  });
39
- export {
40
- k as default
41
- };
42
- //# sourceMappingURL=Summary.vue2.js.map
25
+ export { u as default };
26
+
27
+ //# sourceMappingURL=Summary.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Summary.vue2.js","sources":["../../../src/components/PlBtnExportArchive/Summary.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ExportItem } from \"./types\";\nimport { prettyBytes } from \"@milaboratories/helpers\";\n\ndefineProps<{\n item: ExportItem;\n}>();\n\nconst emit = defineEmits<{\n (e: \"cancel\"): void;\n}>();\n</script>\n\n<template>\n <div :class=\"$style.summary\">\n <div :class=\"$style.name\">\n {{ item.fileName }}<span v-if=\"false\" @click.stop=\"emit('cancel')\">[TODO: Cancel]</span>\n </div>\n <div v-if=\"item.status === 'in-progress'\" :class=\"$style.details\">\n <span>{{ prettyBytes(item.current, {}) }}</span>\n <span>/</span>\n <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else-if=\"item.status === 'completed'\" :class=\"$style.details\">\n Done <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else :class=\"$style.details\">Pending</div>\n </div>\n</template>\n\n<style module>\n.summary {\n display: flex;\n flex-direction: column;\n margin-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n padding-bottom: 8px;\n --name-font-size: 14px;\n --details-font-size: 12px;\n}\n\n.name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--name-font-size);\n font-weight: 600;\n}\n.details {\n font-size: var(--details-font-size);\n font-weight: 400;\n color: rgba(255, 255, 255, 0.6);\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","$style","_createElementVNode","_createTextVNode","_toDisplayString","__props","_unref","prettyBytes","_cache"],"mappings":";;;;;;;;;2BAcEA,EAaM,OAAA;AAAA,MAbA,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,IAAA;MACzBC,EAEM,OAAA;AAAA,QAFA,OAAKF,EAAEC,EAAAA,OAAO,IAAI;AAAA,MAAA;QACnBE,EAAAC,EAAAC,EAAA,KAAK,QAAQ,GAAA,CAAA;AAAA;;MAEPA,EAAA,KAAK,WAAM,sBAAtBN,EAIM,OAAA;AAAA;QAJqC,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,MAAA;QAC9DC,EAAgD,QAAA,MAAAE,EAAvCE,EAAAC,CAAA,EAAYF,EAAA,KAAK,SAAO,EAAA,CAAA,GAAA,CAAA;AAAA,QACjCG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAN,EAAc,cAAR,KAAC,EAAA;AAAA,QACPA,EAA6C,QAAA,MAAAE,EAApCE,EAAAC,CAAA,EAAYF,EAAA,KAAK,MAAI,CAAA,CAAA,CAAA,GAAA,CAAA;AAAA,MAAA,SAEhBA,EAAA,KAAK,WAAM,oBAA3BN,EAEM,OAAA;AAAA;QAFwC,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,MAAA;0BAAE,UAC9D,EAAA;AAAA,QAAAC,EAA6C,QAAA,MAAAE,EAApCE,EAAAC,CAAA,EAAYF,EAAA,KAAK,MAAI,CAAA,CAAA,CAAA,GAAA,CAAA;AAAA,MAAA,eAErCN,EAAiD,OAAA;AAAA;QAApC,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,MAAA,GAAE,WAAO,CAAA;AAAA,IAAA;;;"}
1
+ {"version":3,"file":"Summary.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlBtnExportArchive/Summary.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ExportItem } from \"./types\";\nimport { prettyBytes } from \"@milaboratories/helpers\";\n\ndefineProps<{\n item: ExportItem;\n}>();\n\nconst emit = defineEmits<{\n (e: \"cancel\"): void;\n}>();\n</script>\n\n<template>\n <div :class=\"$style.summary\">\n <div :class=\"$style.name\">\n {{ item.fileName }}<span v-if=\"false\" @click.stop=\"emit('cancel')\">[TODO: Cancel]</span>\n </div>\n <div v-if=\"item.status === 'in-progress'\" :class=\"$style.details\">\n <span>{{ prettyBytes(item.current, {}) }}</span>\n <span>/</span>\n <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else-if=\"item.status === 'completed'\" :class=\"$style.details\">\n Done <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else :class=\"$style.details\">Pending</div>\n </div>\n</template>\n\n<style module>\n.summary {\n display: flex;\n flex-direction: column;\n margin-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n padding-bottom: 8px;\n --name-font-size: 14px;\n --details-font-size: 12px;\n}\n\n.name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--name-font-size);\n font-weight: 600;\n}\n.details {\n font-size: var(--details-font-size);\n font-weight: 400;\n color: rgba(255, 255, 255, 0.6);\n}\n</style>\n"],"mappings":";;;;;;;;yBAcE,EAaM,OAAA,EAbA,OAAK,EAAEA,EAAAA,OAAO,QAAO,EAAA,EAAA,CACzB,EAEM,OAAA,EAFA,OAAK,EAAEA,EAAAA,OAAO,KAAI,EAAA,EAAA,CAAA,EAAA,EACnB,EAAA,KAAK,SAAQ,EAAA,EAAA,EAAA,EAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAEP,EAAA,KAAK,WAAM,iBAAA,GAAA,EAAtB,EAIM,OAAA;;GAJqC,OAAK,EAAEA,EAAAA,OAAO,QAAO;;GAC9D,EAAgD,QAAA,MAAA,EAAvC,EAAA,EAAW,CAAC,EAAA,KAAK,SAAO,EAAA,CAAA,CAAA,EAAA,EAAA;YACjC,EAAc,QAAA,MAAR,KAAC,GAAA;GACP,EAA6C,QAAA,MAAA,EAApC,EAAA,EAAW,CAAC,EAAA,KAAK,MAAI,EAAA,CAAA,CAAA,EAAA,EAAA;WAEhB,EAAA,KAAK,WAAM,eAAA,GAAA,EAA3B,EAEM,OAAA;;GAFwC,OAAK,EAAEA,EAAAA,OAAO,QAAO;iBAAE,UAC9D,GAAA,EAAA,EAA6C,QAAA,MAAA,EAApC,EAAA,EAAW,CAAC,EAAA,KAAK,MAAI,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,KAAA,GAAA,EAErC,EAAiD,OAAA;;GAApC,OAAK,EAAEA,EAAAA,OAAO,QAAO;KAAE,WAAO,EAAA,EAAA,EAAA,EAAA"}
@@ -0,0 +1,5 @@
1
+ import e from "./PlTableFastSearch.vue2.js";
2
+ var t = e;
3
+ export { t as default };
4
+
5
+ //# sourceMappingURL=PlTableFastSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlTableFastSearch.js","names":[],"sources":["../../../src/components/PlTableFastSearch/PlTableFastSearch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlSearchField } from \"@milaboratories/uikit\";\n\nconst model = defineModel<string>({ required: true });\n</script>\n\n<template>\n <PlSearchField v-model=\"model\" clearable placeholder=\"Search...\">\n <template #helper>\n <b>How table search works:</b>\n <br />\n <ul>\n <li>\n <b>Exact match only.</b><br />\n No partials, wildcards, ranges, or regex.\n </li>\n <li>\n <b>Scope:</b> Searches all visible columns. To include a column, make it visible in\n Columns.\n </li>\n <li>\n <b>Text columns:</b> Exact string equality. Characters must match exactly (including case,\n spaces, and punctuation).\n </li>\n <li>\n <b>Number columns:</b> Exact numeric equality. 71 matches 71 and 71.0; it does not match\n 715 or 0.71/0.85.\n </li>\n </ul>\n <b>Examples:</b>\n <br />\n <ul>\n <li>CASSLDRGTEAFF → shows rows where any visible column equals that full string.</li>\n <li>85 → matches 85 / 85.0, not 0.85 or 850.</li>\n </ul>\n </template>\n </PlSearchField>\n</template>\n"],"mappings":""}
@@ -1,5 +1,41 @@
1
- import f from "./PlTableFastSearch.vue.js";
2
- export {
3
- f as default
4
- };
5
- //# sourceMappingURL=PlTableFastSearch.vue2.js.map
1
+ import { createBlock as e, createElementVNode as t, createTextVNode as n, defineComponent as r, openBlock as i, unref as a, useModel as o, withCtx as s } from "vue";
2
+ import { PlSearchField as c } from "@milaboratories/uikit";
3
+ var l = /* @__PURE__ */ r({
4
+ __name: "PlTableFastSearch",
5
+ props: {
6
+ modelValue: { required: !0 },
7
+ modelModifiers: {}
8
+ },
9
+ emits: ["update:modelValue"],
10
+ setup(r) {
11
+ let l = o(r, "modelValue");
12
+ return (r, o) => (i(), e(a(c), {
13
+ modelValue: l.value,
14
+ "onUpdate:modelValue": o[0] ||= (e) => l.value = e,
15
+ clearable: "",
16
+ placeholder: "Search..."
17
+ }, {
18
+ helper: s(() => [...o[1] ||= [
19
+ t("b", null, "How table search works:", -1),
20
+ t("br", null, null, -1),
21
+ t("ul", null, [
22
+ t("li", null, [
23
+ t("b", null, "Exact match only."),
24
+ t("br"),
25
+ n(" No partials, wildcards, ranges, or regex. ")
26
+ ]),
27
+ t("li", null, [t("b", null, "Scope:"), n(" Searches all visible columns. To include a column, make it visible in Columns. ")]),
28
+ t("li", null, [t("b", null, "Text columns:"), n(" Exact string equality. Characters must match exactly (including case, spaces, and punctuation). ")]),
29
+ t("li", null, [t("b", null, "Number columns:"), n(" Exact numeric equality. 71 matches 71 and 71.0; it does not match 715 or 0.71/0.85. ")])
30
+ ], -1),
31
+ t("b", null, "Examples:", -1),
32
+ t("br", null, null, -1),
33
+ t("ul", null, [t("li", null, "CASSLDRGTEAFF → shows rows where any visible column equals that full string."), t("li", null, "85 → matches 85 / 85.0, not 0.85 or 850.")], -1)
34
+ ]]),
35
+ _: 1
36
+ }, 8, ["modelValue"]));
37
+ }
38
+ });
39
+ export { l as default };
40
+
41
+ //# sourceMappingURL=PlTableFastSearch.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlTableFastSearch.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"PlTableFastSearch.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlTableFastSearch/PlTableFastSearch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { PlSearchField } from \"@milaboratories/uikit\";\n\nconst model = defineModel<string>({ required: true });\n</script>\n\n<template>\n <PlSearchField v-model=\"model\" clearable placeholder=\"Search...\">\n <template #helper>\n <b>How table search works:</b>\n <br />\n <ul>\n <li>\n <b>Exact match only.</b><br />\n No partials, wildcards, ranges, or regex.\n </li>\n <li>\n <b>Scope:</b> Searches all visible columns. To include a column, make it visible in\n Columns.\n </li>\n <li>\n <b>Text columns:</b> Exact string equality. Characters must match exactly (including case,\n spaces, and punctuation).\n </li>\n <li>\n <b>Number columns:</b> Exact numeric equality. 71 matches 71 and 71.0; it does not match\n 715 or 0.71/0.85.\n </li>\n </ul>\n <b>Examples:</b>\n <br />\n <ul>\n <li>CASSLDRGTEAFF → shows rows where any visible column equals that full string.</li>\n <li>85 → matches 85 / 85.0, not 0.85 or 850.</li>\n </ul>\n </template>\n </PlSearchField>\n</template>\n"],"mappings":";;;;;;;;;;EAGA,IAAM,IAAQ,EAAmB,GAAA,aAAoB;yBAInD,EA6BgB,EAAA,EAAA,EAAA;eA7BQ,EAAA;4CAAK,QAAA;GAAE,WAAA;GAAU,aAAY;;GACxC,QAAM,QACe,CAAA,GAAA,AAAA,EAAA,OAAA;IAA9B,EAA8B,KAAA,MAA3B,2BAAuB,GAAA;IAC1B,EAAM,MAAA,MAAA,MAAA,GAAA;IACN,EAiBK,MAAA,MAAA;KAhBH,EAGK,MAAA,MAAA;MAFH,EAAwB,KAAA,MAArB,oBAAiB;MAAI,EAAM,KAAA;QAAA,8CAEhC;;KACA,EAGK,MAAA,MAAA,CAFH,EAAa,KAAA,MAAV,SAAM,EAAA,EAAI,mFAEf,CAAA,CAAA;KACA,EAGK,MAAA,MAAA,CAFH,EAAoB,KAAA,MAAjB,gBAAa,EAAA,EAAI,oGAEtB,CAAA,CAAA;KACA,EAGK,MAAA,MAAA,CAFH,EAAsB,KAAA,MAAnB,kBAAe,EAAA,EAAI,wFAExB,CAAA,CAAA;;IAEF,EAAgB,KAAA,MAAb,aAAS,GAAA;IACZ,EAAM,MAAA,MAAA,MAAA,GAAA;IACN,EAGK,MAAA,MAAA,CAFH,EAAqF,MAAA,MAAjF,+EAA4E,EAChF,EAAiD,MAAA,MAA7C,2CAAwC,CAAA,EAAA,GAAA"}
@@ -0,0 +1,7 @@
1
+ import e from "../../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./PlTableFiltersV2.vue2.js";
3
+ import n from "./PlTableFiltersV2.style.js";
4
+ var r = /* @__PURE__ */ e(t, [["__cssModules", { $style: n }]]);
5
+ export { r as default };
6
+
7
+ //# sourceMappingURL=PlTableFiltersV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlTableFiltersV2.js","names":[],"sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n PTableColumnSpec,\n PTableColumnId,\n ListOptionBase,\n PlDataTableFiltersWithMeta,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n Annotation,\n Domain,\n readAnnotation,\n readDomain,\n parseJson,\n getAxisId,\n} from \"@platforma-sdk/model\";\nimport { computed, onMounted, ref } from \"vue\";\nimport { PlBtnGhost, PlSlideModal, usePlBlockPageTitleTeleportTarget } from \"@milaboratories/uikit\";\nimport {\n PlAdvancedFilter,\n PlAdvancedFilterComponent,\n PlAdvancedFilterSupportedFilters,\n type PlAdvancedFilterItem,\n} from \"../PlAdvancedFilter\";\nimport type { PlAdvancedFilterColumnId } from \"../PlAdvancedFilter/types\";\n\nconst model = defineModel<PlDataTableFiltersWithMeta>({ required: true });\nconst props = defineProps<{\n columns: PTableColumnSpec[];\n}>();\n\n// Teleport for \"Filters\" button\nconst mounted = ref(false);\nonMounted(() => {\n mounted.value = true;\n});\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlTableFiltersV2\");\nconst showManager = ref(false);\n\n// Check if any filters are active\nconst filtersOn = computed(() => {\n return model.value.filters.length > 0;\n});\n\n// Convert PTableColumnSpec to PlAdvancedFilterColumnId\nfunction makeFilterColumnId(spec: PTableColumnSpec): PlAdvancedFilterColumnId {\n const id: PTableColumnId =\n spec.type === \"axis\"\n ? { type: \"axis\", id: getAxisId(spec.spec) }\n : { type: \"column\", id: spec.id };\n return canonicalizeJson<PTableColumnId>(id) as unknown as PlAdvancedFilterColumnId;\n}\n\n// Convert PTableColumnSpec[] to PlAdvancedFilterItem[]\nconst items = computed<PlAdvancedFilterItem[]>(() => {\n return props.columns.map((col, idx) => {\n const id = makeFilterColumnId(col);\n const label =\n readAnnotation(col.spec, Annotation.Label)?.trim() ?? `Unlabeled ${col.type} ${idx}`;\n const alphabet =\n readDomain(col.spec, Domain.Alphabet) ?? readAnnotation(col.spec, Annotation.Alphabet);\n return {\n id,\n label,\n spec: col.spec,\n alphabet: alphabet ?? undefined,\n };\n });\n});\n\n// Supported filters (same set as FilterSidebar)\nconst supportedFilters = [\n \"isNA\",\n \"isNotNA\",\n \"greaterThan\",\n \"greaterThanOrEqual\",\n \"lessThan\",\n \"lessThanOrEqual\",\n \"patternEquals\",\n \"patternNotEquals\",\n \"patternContainSubsequence\",\n \"patternNotContainSubsequence\",\n \"patternMatchesRegularExpression\",\n \"patternFuzzyContainSubsequence\",\n \"equal\",\n \"notEqual\",\n] as (typeof PlAdvancedFilterSupportedFilters)[number][];\n\n// getSuggestOptions - provide discrete values from column annotations\nfunction getSuggestOptions(params: {\n columnId: PlAdvancedFilterColumnId;\n axisIdx?: number;\n searchStr: string;\n searchType: \"value\" | \"label\";\n}): ListOptionBase<string | number>[] {\n const item = items.value.find((i) => i.id === params.columnId);\n if (!item) return [];\n\n const discreteValuesStr = readAnnotation(item.spec, Annotation.DiscreteValues);\n if (!discreteValuesStr) return [];\n\n try {\n const values = parseJson<(string | number)[]>(discreteValuesStr);\n return values\n .filter((v) => {\n if (!params.searchStr) return true;\n const str = String(v).toLowerCase();\n return str.includes(params.searchStr.toLowerCase());\n })\n .map((v) => ({ value: v, label: String(v) }));\n } catch {\n return [];\n }\n}\n</script>\n\n<template>\n <Teleport v-if=\"mounted && teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost :icon=\"filtersOn ? 'filter-on' : 'filter'\" @click.stop=\"showManager = true\">\n Filters\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"showManager\" :close-on-outside-click=\"false\">\n <template #title>Manage Filters</template>\n\n <div v-if=\"items.length > 0\" :class=\"$style.root\">\n <PlAdvancedFilterComponent\n v-model:filters=\"model as PlAdvancedFilter\"\n :items=\"items\"\n :supported-filters=\"supportedFilters\"\n :get-suggest-options=\"getSuggestOptions\"\n :enable-dnd=\"false\"\n :enable-add-group-button=\"true\"\n />\n </div>\n <div v-else>No filters applicable</div>\n </PlSlideModal>\n</template>\n\n<style module>\n.root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import './PlTableFiltersV2.vue.css';var e = { root: "_root_pwh6f_2" };
2
+ export { e as default };
3
+
4
+ //# sourceMappingURL=PlTableFiltersV2.style.js.map