@platforma-sdk/ui-vue 1.63.1 → 1.63.8

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 (247) hide show
  1. package/.turbo/turbo-build.log +160 -162
  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 +18 -0
  6. package/dist/AgGridVue/AgGridTheme.js +3 -1
  7. package/dist/AgGridVue/AgGridTheme.js.map +1 -1
  8. package/dist/AgGridVue/ag-override.js +2 -0
  9. package/dist/AgGridVue/ag-override.js.map +1 -1
  10. package/dist/AgGridVue/createAgGridColDef.js +2 -35
  11. package/dist/AgGridVue/createAgGridColDef.js.map +1 -1
  12. package/dist/AgGridVue/selection.js +2 -23
  13. package/dist/AgGridVue/selection.js.map +1 -1
  14. package/dist/AgGridVue/useAgGridOptions.js +2 -83
  15. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  16. package/dist/_virtual/_plugin-vue_export-helper.js +2 -0
  17. package/dist/_virtual/_rolldown/runtime.js +2 -0
  18. package/dist/components/BlockLayout.js +1 -0
  19. package/dist/components/BlockLayout.style.js +1 -0
  20. package/dist/components/BlockLayout.vue2.js +2 -0
  21. package/dist/components/BlockLayout.vue2.js.map +1 -1
  22. package/dist/components/BlockLoader.js +2 -0
  23. package/dist/components/BlockLoader.vue2.js +2 -0
  24. package/dist/components/BlockLoader.vue2.js.map +1 -1
  25. package/dist/components/LoaderPage.js +2 -0
  26. package/dist/components/LoaderPage.js.map +1 -1
  27. package/dist/components/NotFound.js +2 -0
  28. package/dist/components/NotFound.vue2.js +2 -0
  29. package/dist/components/NotFound.vue2.js.map +1 -1
  30. package/dist/components/PlAdvancedFilter/FilterEditor.js +1 -0
  31. package/dist/components/PlAdvancedFilter/FilterEditor.style.js +1 -0
  32. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +2 -0
  33. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
  34. package/dist/components/PlAdvancedFilter/OperandButton.js +1 -0
  35. package/dist/components/PlAdvancedFilter/OperandButton.style.js +1 -0
  36. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js +2 -0
  37. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  38. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js +1 -0
  39. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js +1 -0
  40. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +2 -0
  41. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  42. package/dist/components/PlAdvancedFilter/constants.js +4 -4
  43. package/dist/components/PlAdvancedFilter/constants.js.map +1 -1
  44. package/dist/components/PlAdvancedFilter/index.js +3 -1
  45. package/dist/components/PlAdvancedFilter/index.js.map +1 -1
  46. package/dist/components/PlAdvancedFilter/utils.js +2 -0
  47. package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
  48. package/dist/components/PlAgCellFile/PlAgCellFile.js +2 -0
  49. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js +2 -4
  50. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js.map +1 -1
  51. package/dist/components/PlAgCellProgress/PlAgCellProgress.js +2 -0
  52. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js +2 -0
  53. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js.map +1 -1
  54. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.js +2 -0
  55. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js +2 -0
  56. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js.map +1 -1
  57. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.js +2 -0
  58. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js +2 -0
  59. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js.map +1 -1
  60. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.js +2 -0
  61. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js +2 -0
  62. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js.map +1 -1
  63. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js +2 -0
  64. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js +2 -0
  65. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js.map +1 -1
  66. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.js +2 -0
  67. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js +2 -0
  68. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js.map +1 -1
  69. package/dist/components/PlAgCsvExporter/export-csv.js +2 -0
  70. package/dist/components/PlAgCsvExporter/export-csv.js.map +1 -1
  71. package/dist/components/PlAgDataTable/PlAgDataTableSheets.js +1 -0
  72. package/dist/components/PlAgDataTable/PlAgDataTableSheets.style.js +1 -0
  73. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +2 -0
  74. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  75. package/dist/components/PlAgDataTable/PlAgDataTableV2.js +1 -0
  76. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js +1 -0
  77. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +2 -0
  78. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  79. package/dist/components/PlAgDataTable/PlAgOverlayLoading.js +2 -0
  80. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js +2 -0
  81. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js.map +1 -1
  82. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.js +2 -0
  83. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js +2 -0
  84. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js.map +1 -1
  85. package/dist/components/PlAgDataTable/PlAgRowCount.js +2 -0
  86. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js +2 -0
  87. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js.map +1 -1
  88. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js +2 -0
  89. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js.map +1 -1
  90. package/dist/components/PlAgDataTable/compositions/useGrid.js +2 -0
  91. package/dist/components/PlAgDataTable/compositions/useGrid.js.map +1 -1
  92. package/dist/components/PlAgDataTable/index.js +2 -0
  93. package/dist/components/PlAgDataTable/index.js.map +1 -1
  94. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.js +1 -0
  95. package/dist/components/PlAgDataTable/sources/common.js +3 -1
  96. package/dist/components/PlAgDataTable/sources/common.js.map +1 -1
  97. package/dist/components/PlAgDataTable/sources/focus-row.js +2 -0
  98. package/dist/components/PlAgDataTable/sources/focus-row.js.map +1 -1
  99. package/dist/components/PlAgDataTable/sources/menu-items.js +2 -0
  100. package/dist/components/PlAgDataTable/sources/menu-items.js.map +1 -1
  101. package/dist/components/PlAgDataTable/sources/row-number.js +3 -2
  102. package/dist/components/PlAgDataTable/sources/row-number.js.map +1 -1
  103. package/dist/components/PlAgDataTable/sources/table-source-v2.js +2 -5
  104. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  105. package/dist/components/PlAgDataTable/sources/table-state-v2.js +2 -0
  106. package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
  107. package/dist/components/PlAgDataTable/sources/value-rendering.js +2 -0
  108. package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
  109. package/dist/components/PlAgDataTable/types.js +2 -0
  110. package/dist/components/PlAgDataTable/types.js.map +1 -1
  111. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js +1 -0
  112. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js +1 -0
  113. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +2 -0
  114. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
  115. package/dist/components/PlAgGridColumnManager/useFilteredItems.js +2 -0
  116. package/dist/components/PlAgGridColumnManager/useFilteredItems.js.map +1 -1
  117. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.js +2 -0
  118. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js +2 -0
  119. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js.map +1 -1
  120. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.js +1 -0
  121. package/dist/components/PlAgRowNumHeader.js +2 -0
  122. package/dist/components/PlAgRowNumHeader.vue2.js +2 -0
  123. package/dist/components/PlAgRowNumHeader.vue2.js.map +1 -1
  124. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.js +2 -0
  125. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js +2 -0
  126. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js.map +1 -1
  127. package/dist/components/PlAnnotations/components/AnnotationsSidebar.js +1 -0
  128. package/dist/components/PlAnnotations/components/AnnotationsSidebar.style.js +1 -0
  129. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +2 -0
  130. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  131. package/dist/components/PlAnnotations/components/FilterSidebar.js +1 -0
  132. package/dist/components/PlAnnotations/components/FilterSidebar.style.js +1 -0
  133. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +2 -0
  134. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  135. package/dist/components/PlAnnotations/components/PlAnnotations.js +1 -0
  136. package/dist/components/PlAnnotations/components/PlAnnotations.style.js +1 -0
  137. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js +2 -0
  138. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  139. package/dist/components/PlAnnotations/components/PlAnnotationsModal.js +1 -0
  140. package/dist/components/PlAnnotations/components/PlAnnotationsModal.style.js +1 -0
  141. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +2 -0
  142. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  143. package/dist/components/PlAnnotations/components/style.module.js +1 -0
  144. package/dist/components/PlAnnotations/utils.js +2 -0
  145. package/dist/components/PlAnnotations/utils.js.map +1 -1
  146. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.js +2 -0
  147. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js +2 -0
  148. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js.map +1 -1
  149. package/dist/components/PlBtnExportArchive/Item.js +1 -0
  150. package/dist/components/PlBtnExportArchive/Item.style.js +1 -0
  151. package/dist/components/PlBtnExportArchive/Item.vue2.js +2 -0
  152. package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
  153. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.js +1 -0
  154. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.style.js +1 -0
  155. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js +2 -0
  156. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
  157. package/dist/components/PlBtnExportArchive/Summary.js +1 -0
  158. package/dist/components/PlBtnExportArchive/Summary.style.js +1 -0
  159. package/dist/components/PlBtnExportArchive/Summary.vue2.js +2 -0
  160. package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
  161. package/dist/components/PlTableFastSearch/PlTableFastSearch.js +2 -0
  162. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js +2 -0
  163. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js.map +1 -1
  164. package/dist/components/PlTableFilters/PlTableFiltersV2.js +1 -0
  165. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js +1 -0
  166. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +2 -0
  167. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  168. package/dist/composition/AgGrid/index.js +2 -0
  169. package/dist/composition/AgGrid/index.js.map +1 -1
  170. package/dist/composition/fileContent.js +2 -38
  171. package/dist/composition/fileContent.js.map +1 -1
  172. package/dist/computedResult.js +2 -30
  173. package/dist/computedResult.js.map +1 -1
  174. package/dist/createModel.js +2 -0
  175. package/dist/createModel.js.map +1 -1
  176. package/dist/defineApp.js +3 -2
  177. package/dist/defineApp.js.map +1 -1
  178. package/dist/defineStore.js +2 -0
  179. package/dist/defineStore.js.map +1 -1
  180. package/dist/index.js +1 -0
  181. package/dist/internal/UpdateSerializer.js +2 -6
  182. package/dist/internal/UpdateSerializer.js.map +1 -1
  183. package/dist/internal/createAppModel.js +2 -0
  184. package/dist/internal/createAppModel.js.map +1 -1
  185. package/dist/internal/createAppV1.js +2 -14
  186. package/dist/internal/createAppV1.js.map +1 -1
  187. package/dist/internal/createAppV2.js +3 -17
  188. package/dist/internal/createAppV2.js.map +1 -1
  189. package/dist/internal/createAppV3.js +3 -17
  190. package/dist/internal/createAppV3.js.map +1 -1
  191. package/dist/internal/service_factories.js +2 -8
  192. package/dist/internal/service_factories.js.map +1 -1
  193. package/dist/lib/util/helpers/dist/functions.js +2 -3
  194. package/dist/lib/util/helpers/dist/functions.js.map +1 -1
  195. package/dist/lib/util/helpers/dist/hash.js +1 -1
  196. package/dist/lib/util/helpers/dist/hash.js.map +1 -1
  197. package/dist/lib/util/helpers/dist/index.js +0 -2
  198. package/dist/lib/util/helpers/dist/objects.js +2 -45
  199. package/dist/lib/util/helpers/dist/objects.js.map +1 -1
  200. package/dist/lib/util/helpers/dist/prettyBytes.js +2 -0
  201. package/dist/lib/util/helpers/dist/prettyBytes.js.map +1 -1
  202. package/dist/lib/util/helpers/dist/random.js +2 -0
  203. package/dist/lib/util/helpers/dist/random.js.map +1 -1
  204. package/dist/lib/util/helpers/dist/strings.js +2 -0
  205. package/dist/lib/util/helpers/dist/strings.js.map +1 -1
  206. package/dist/lib/util/helpers/dist/uniqId.js +2 -0
  207. package/dist/lib/util/helpers/dist/uniqId.js.map +1 -1
  208. package/dist/lib/util/helpers/dist/utils.js +2 -1
  209. package/dist/lib/util/helpers/dist/utils.js.map +1 -1
  210. package/dist/objectHash.js +2 -5
  211. package/dist/objectHash.js.map +1 -1
  212. package/dist/plugins/Monetization/EndOfPeriod.js +1 -0
  213. package/dist/plugins/Monetization/EndOfPeriod.style.js +1 -0
  214. package/dist/plugins/Monetization/EndOfPeriod.vue2.js +2 -0
  215. package/dist/plugins/Monetization/EndOfPeriod.vue2.js.map +1 -1
  216. package/dist/plugins/Monetization/LimitCard.js +1 -0
  217. package/dist/plugins/Monetization/LimitCard.style.js +1 -0
  218. package/dist/plugins/Monetization/LimitCard.vue2.js +2 -0
  219. package/dist/plugins/Monetization/LimitCard.vue2.js.map +1 -1
  220. package/dist/plugins/Monetization/MonetizationSidebar.js +2 -0
  221. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js +2 -0
  222. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js.map +1 -1
  223. package/dist/plugins/Monetization/RunStatus.js +1 -0
  224. package/dist/plugins/Monetization/RunStatus.style.js +1 -0
  225. package/dist/plugins/Monetization/RunStatus.vue2.js +2 -0
  226. package/dist/plugins/Monetization/RunStatus.vue2.js.map +1 -1
  227. package/dist/plugins/Monetization/UserCabinetCard.js +1 -0
  228. package/dist/plugins/Monetization/UserCabinetCard.style.js +1 -0
  229. package/dist/plugins/Monetization/UserCabinetCard.vue2.js +2 -0
  230. package/dist/plugins/Monetization/UserCabinetCard.vue2.js.map +1 -1
  231. package/dist/plugins/Monetization/useButtonTarget.js +2 -0
  232. package/dist/plugins/Monetization/useButtonTarget.js.map +1 -1
  233. package/dist/plugins/Monetization/useInfo.js +2 -0
  234. package/dist/plugins/Monetization/useInfo.js.map +1 -1
  235. package/dist/plugins/Monetization/validation.js +4 -4
  236. package/dist/plugins/Monetization/validation.js.map +1 -1
  237. package/dist/urls.js +3 -1
  238. package/dist/urls.js.map +1 -1
  239. package/dist/usePlugin.js +2 -24
  240. package/dist/usePlugin.js.map +1 -1
  241. package/dist/utils.js +3 -1
  242. package/dist/utils.js.map +1 -1
  243. package/package.json +11 -11
  244. package/dist/lib/util/helpers/dist/disposable.js +0 -9
  245. package/dist/lib/util/helpers/dist/disposable.js.map +0 -1
  246. package/dist/lib/util/helpers/dist/ref_count_pool.js +0 -4
  247. package/dist/lib/util/helpers/dist/ref_count_pool.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/common.ts"],"sourcesContent":["import type { PTableValue } from \"@platforma-sdk/model\";\n\nexport const PTableHidden = { type: \"hidden\" } as const;\nexport type PTableHidden = typeof PTableHidden;\n\nexport function isPTableHidden(value: PTableValue | PTableHidden): value is PTableHidden {\n return typeof value === \"object\" && value !== null && value.type === \"hidden\";\n}\n"],"mappings":"AAEA,MAAa,IAAe,EAAE,MAAM,UAAU;AAG9C,SAAgB,EAAe,GAA0D;AACvF,QAAO,OAAO,KAAU,cAAY,KAAkB,EAAM,SAAS"}
1
+ {"version":3,"file":"common.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/common.ts"],"sourcesContent":["import type { PTableValue } from \"@platforma-sdk/model\";\n\nexport const PTableHidden = { type: \"hidden\" } as const;\nexport type PTableHidden = typeof PTableHidden;\n\nexport function isPTableHidden(value: PTableValue | PTableHidden): value is PTableHidden {\n return typeof value === \"object\" && value !== null && value.type === \"hidden\";\n}\n"],"mappings":";AAEA,IAAa,IAAe,EAAE,MAAM,UAAU;AAG9C,SAAgB,EAAe,GAA0D;AACvF,QAAO,OAAO,KAAU,cAAY,KAAkB,EAAM,SAAS"}
@@ -1,5 +1,6 @@
1
1
  import { Deferred as e } from "../../../lib/util/helpers/dist/utils.js";
2
2
  import "../../../lib/util/helpers/dist/index.js";
3
+ //#region src/components/PlAgDataTable/sources/focus-row.ts
3
4
  var t = class extends e {
4
5
  #e = !1;
5
6
  constructor() {
@@ -33,6 +34,7 @@ function r(e, t) {
33
34
  }
34
35
  return n !== null;
35
36
  }
37
+ //#endregion
36
38
  export { n as DeferredCircular, r as ensureNodeVisible };
37
39
 
38
40
  //# sourceMappingURL=focus-row.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"focus-row.js","names":["#resolved"],"sources":["../../../../src/components/PlAgDataTable/sources/focus-row.ts"],"sourcesContent":["import type { GridApi, IRowNode } from \"ag-grid-enterprise\";\nimport { Deferred } from \"@milaboratories/helpers\";\n\nclass DeferredTracked<T> extends Deferred<T> {\n #resolved = false;\n\n constructor() {\n super();\n this.promise.finally(() => {\n this.#resolved = true;\n });\n }\n\n public get resolved(): boolean {\n return this.#resolved;\n }\n}\n\nexport class DeferredCircular<T> {\n private deferred = new DeferredTracked<T>();\n\n public get promise(): Promise<T> {\n return this.deferred.promise;\n }\n\n public resolve(ctx: T): void {\n this.deferred.resolve(ctx);\n }\n\n public get resolved(): boolean {\n return this.deferred.resolved;\n }\n\n public reset(): void {\n if (this.resolved) {\n this.deferred = new DeferredTracked<T>();\n }\n }\n}\n\nexport function ensureNodeVisible<TData>(\n api: GridApi<TData>,\n selector: (row: IRowNode<TData>) => boolean,\n): boolean {\n let rowIndex: number | null = null;\n const nodeSelector = (row: IRowNode<TData>): boolean => {\n if (selector(row)) {\n rowIndex = row.rowIndex;\n return true;\n }\n return false;\n };\n api.ensureNodeVisible(nodeSelector, \"middle\");\n if (rowIndex) {\n const columns = api.getAllDisplayedColumns();\n if (columns.length > 0) {\n api.ensureColumnVisible(columns[0]);\n api.setFocusedCell(rowIndex, columns[0]);\n }\n }\n return rowIndex !== null;\n}\n"],"mappings":";;AAGA,IAAM,IAAN,cAAiC,EAAY;CAC3C,KAAY;CAEZ,cAAc;AAEZ,EADA,OAAO,EACP,KAAK,QAAQ,cAAc;AACzB,SAAA,IAAiB;IACjB;;CAGJ,IAAW,WAAoB;AAC7B,SAAO,MAAA;;GAIE,IAAb,MAAiC;CAC/B,WAAmB,IAAI,GAAoB;CAE3C,IAAW,UAAsB;AAC/B,SAAO,KAAK,SAAS;;CAGvB,QAAe,GAAc;AAC3B,OAAK,SAAS,QAAQ,EAAI;;CAG5B,IAAW,WAAoB;AAC7B,SAAO,KAAK,SAAS;;CAGvB,QAAqB;AACnB,EAAI,KAAK,aACP,KAAK,WAAW,IAAI,GAAoB;;;AAK9C,SAAgB,EACd,GACA,GACS;CACT,IAAI,IAA0B;AAS9B,KADA,EAAI,mBAPkB,MAChB,EAAS,EAAI,IACf,IAAW,EAAI,UACR,MAEF,IAE2B,SAAS,EACzC,GAAU;EACZ,IAAM,IAAU,EAAI,wBAAwB;AAC5C,EAAI,EAAQ,SAAS,MACnB,EAAI,oBAAoB,EAAQ,GAAG,EACnC,EAAI,eAAe,GAAU,EAAQ,GAAG;;AAG5C,QAAO,MAAa"}
1
+ {"version":3,"file":"focus-row.js","names":["#resolved"],"sources":["../../../../src/components/PlAgDataTable/sources/focus-row.ts"],"sourcesContent":["import type { GridApi, IRowNode } from \"ag-grid-enterprise\";\nimport { Deferred } from \"@milaboratories/helpers\";\n\nclass DeferredTracked<T> extends Deferred<T> {\n #resolved = false;\n\n constructor() {\n super();\n this.promise.finally(() => {\n this.#resolved = true;\n });\n }\n\n public get resolved(): boolean {\n return this.#resolved;\n }\n}\n\nexport class DeferredCircular<T> {\n private deferred = new DeferredTracked<T>();\n\n public get promise(): Promise<T> {\n return this.deferred.promise;\n }\n\n public resolve(ctx: T): void {\n this.deferred.resolve(ctx);\n }\n\n public get resolved(): boolean {\n return this.deferred.resolved;\n }\n\n public reset(): void {\n if (this.resolved) {\n this.deferred = new DeferredTracked<T>();\n }\n }\n}\n\nexport function ensureNodeVisible<TData>(\n api: GridApi<TData>,\n selector: (row: IRowNode<TData>) => boolean,\n): boolean {\n let rowIndex: number | null = null;\n const nodeSelector = (row: IRowNode<TData>): boolean => {\n if (selector(row)) {\n rowIndex = row.rowIndex;\n return true;\n }\n return false;\n };\n api.ensureNodeVisible(nodeSelector, \"middle\");\n if (rowIndex) {\n const columns = api.getAllDisplayedColumns();\n if (columns.length > 0) {\n api.ensureColumnVisible(columns[0]);\n api.setFocusedCell(rowIndex, columns[0]);\n }\n }\n return rowIndex !== null;\n}\n"],"mappings":";;;AAGA,IAAM,IAAN,cAAiC,EAAY;CAC3C,KAAY;CAEZ,cAAc;AAEZ,EADA,OAAO,EACP,KAAK,QAAQ,cAAc;AACzB,SAAA,IAAiB;IACjB;;CAGJ,IAAW,WAAoB;AAC7B,SAAO,MAAA;;GAIE,IAAb,MAAiC;CAC/B,WAAmB,IAAI,GAAoB;CAE3C,IAAW,UAAsB;AAC/B,SAAO,KAAK,SAAS;;CAGvB,QAAe,GAAc;AAC3B,OAAK,SAAS,QAAQ,EAAI;;CAG5B,IAAW,WAAoB;AAC7B,SAAO,KAAK,SAAS;;CAGvB,QAAqB;AACnB,EAAI,KAAK,aACP,KAAK,WAAW,IAAI,GAAoB;;;AAK9C,SAAgB,EACd,GACA,GACS;CACT,IAAI,IAA0B;AAS9B,KADA,EAAI,mBAPkB,MAChB,EAAS,EAAI,IACf,IAAW,EAAI,UACR,MAEF,IAE2B,SAAS,EACzC,GAAU;EACZ,IAAM,IAAU,EAAI,wBAAwB;AAC5C,EAAI,EAAQ,SAAS,MACnB,EAAI,oBAAoB,EAAQ,GAAG,EACnC,EAAI,eAAe,GAAU,EAAQ,GAAG;;AAG5C,QAAO,MAAa"}
@@ -1,3 +1,4 @@
1
+ //#region src/components/PlAgDataTable/sources/menu-items.ts
1
2
  function e() {
2
3
  return [
3
4
  "sortDescending",
@@ -6,6 +7,7 @@ function e() {
6
7
  "pinSubMenu"
7
8
  ];
8
9
  }
10
+ //#endregion
9
11
  export { e as defaultMainMenuItems };
10
12
 
11
13
  //# sourceMappingURL=menu-items.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu-items.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/menu-items.ts"],"sourcesContent":["import type { DefaultMenuItem, MenuItemDef } from \"ag-grid-enterprise\";\n\nexport function defaultMainMenuItems(): (MenuItemDef | DefaultMenuItem)[] {\n return [\"sortDescending\", \"sortAscending\", \"separator\", \"pinSubMenu\"];\n}\n"],"mappings":"AAEA,SAAgB,IAA0D;AACxE,QAAO;EAAC;EAAkB;EAAiB;EAAa;EAAa"}
1
+ {"version":3,"file":"menu-items.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/menu-items.ts"],"sourcesContent":["import type { DefaultMenuItem, MenuItemDef } from \"ag-grid-enterprise\";\n\nexport function defaultMainMenuItems(): (MenuItemDef | DefaultMenuItem)[] {\n return [\"sortDescending\", \"sortAscending\", \"separator\", \"pinSubMenu\"];\n}\n"],"mappings":";AAEA,SAAgB,IAA0D;AACxE,QAAO;EAAC;EAAkB;EAAiB;EAAa;EAAa"}
@@ -3,8 +3,8 @@ import "../../PlAgRowNumCheckbox/index.js";
3
3
  import t from "../../PlAgRowNumHeader.js";
4
4
  import { nextTick as n } from "vue";
5
5
  import { isColumnSelectionCol as r } from "ag-grid-enterprise";
6
- const i = "\"##RowNumberColumnId##\"";
7
- var a = 45;
6
+ //#region src/components/PlAgDataTable/sources/row-number.ts
7
+ var i = "\"##RowNumberColumnId##\"", a = 45;
8
8
  function o() {
9
9
  return {
10
10
  colId: i,
@@ -84,6 +84,7 @@ function d(e) {
84
84
  c(t);
85
85
  }), l(e, t), u(e);
86
86
  }
87
+ //#endregion
87
88
  export { i as PlAgDataTableRowNumberColId, d as autoSizeRowNumberColumn, o as makeRowNumberColDef };
88
89
 
89
90
  //# sourceMappingURL=row-number.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-number.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/row-number.ts"],"sourcesContent":["import type { AgGridEvent, AgPublicEventType } from \"ag-grid-enterprise\";\nimport {\n isColumnSelectionCol,\n type ColDef,\n type GridApi,\n type ValueGetterParams,\n} from \"ag-grid-enterprise\";\nimport { nextTick } from \"vue\";\nimport { PlAgRowNumCheckbox } from \"../../PlAgRowNumCheckbox\";\nimport PlAgRowNumHeader from \"../../PlAgRowNumHeader.vue\";\n\nexport const PlAgDataTableRowNumberColId = '\"##RowNumberColumnId##\"';\n\nconst HeaderSize = 45;\n\nexport function makeRowNumberColDef<TData = any>(): ColDef<TData> {\n return {\n colId: PlAgDataTableRowNumberColId,\n headerName: \"#\",\n headerComponent: PlAgRowNumHeader,\n valueGetter: (params: ValueGetterParams) => {\n if (params.node === null) return null;\n if (params.node.rowIndex === null) return null;\n return params.node.rowIndex + 1;\n },\n cellRenderer: PlAgRowNumCheckbox,\n headerClass: \"pl-ag-header-align-center\",\n suppressNavigable: true,\n suppressMovable: true,\n mainMenuItems: [],\n contextMenuItems: [],\n lockPosition: \"left\",\n pinned: \"left\",\n lockPinned: true,\n width: HeaderSize,\n suppressSizeToFit: true,\n suppressAutoSize: true,\n cellStyle: {\n color: \"var(--txt-03)\",\n \"background-color\": \"var(--bg-base-light)\",\n overflow: \"visible !important\",\n \"text-align\": \"center\",\n },\n sortable: false,\n resizable: false,\n };\n}\n\nfunction createCellFake(): HTMLDivElement {\n const div = document.createElement(\"div\");\n\n div.style.visibility = \"hidden\";\n div.style.position = \"absolute\";\n div.style.boxSizing = \"border-box\";\n\n div.style.padding = \"15.5px\";\n div.style.border = \"1px solid\";\n div.style.width = \"auto\";\n\n document.body.appendChild(div);\n return div;\n}\n\nfunction destroyCellFake(cellFake: HTMLDivElement) {\n document.body.removeChild(cellFake);\n}\n\nfunction adjustRowNumberColumnWidth(gridApi: GridApi, cellFake: HTMLDivElement, force?: boolean) {\n const rowNode = gridApi.getDisplayedRowAtIndex(gridApi.getLastDisplayedRowIndex());\n if (!rowNode) return;\n\n const lastDisplayedRowNumber = gridApi.getCellValue({\n rowNode,\n colKey: PlAgDataTableRowNumberColId,\n });\n\n if (typeof lastDisplayedRowNumber !== \"number\") return;\n\n const lastDisplayedRowNumberDigitCount = lastDisplayedRowNumber.toString().length;\n if (!force && cellFake.innerHTML.length === lastDisplayedRowNumberDigitCount) return;\n\n const WidestDigit = \"5\";\n cellFake.innerHTML = WidestDigit.repeat(lastDisplayedRowNumberDigitCount);\n\n nextTick(() => {\n gridApi.applyColumnState({\n state: [\n {\n colId: PlAgDataTableRowNumberColId,\n pinned: \"left\", // sometimes pinnig is strangely not applied\n width: Math.max(HeaderSize, cellFake.offsetWidth),\n },\n ],\n });\n });\n}\n\nfunction fixColumnOrder(gridApi: GridApi) {\n if (gridApi.isDestroyed()) return;\n const columns = gridApi.getAllGridColumns() ?? [];\n const selectionIndex = columns.findIndex(isColumnSelectionCol);\n const numRowsIndex = columns.findIndex(\n (column) => column.getId() === PlAgDataTableRowNumberColId,\n );\n if (numRowsIndex !== -1) {\n if (selectionIndex !== -1) {\n if (selectionIndex !== 0 || numRowsIndex !== 1) {\n gridApi.moveColumns([columns[numRowsIndex], columns[selectionIndex]], 0);\n }\n } else {\n if (numRowsIndex !== 0) {\n gridApi.moveColumns([columns[numRowsIndex]], 0);\n }\n }\n }\n}\n\nexport function autoSizeRowNumberColumn(gridApi: GridApi) {\n const cellFake = createCellFake();\n\n gridApi.addEventListener(\"firstDataRendered\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"viewportChanged\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"columnVisible\", (event) => {\n if (\n event.columns &&\n event.columns.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake);\n }\n });\n gridApi.addEventListener(\"columnResized\", (event) => {\n if (\n event.finished &&\n event.source === \"autosizeColumns\" &&\n event.columns?.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake, true);\n }\n });\n\n const refreshCells = (event: AgGridEvent) => event.api.refreshCells();\n const refreshCellsOn: AgPublicEventType[] = [\"sortChanged\", \"filterChanged\", \"modelUpdated\"];\n refreshCellsOn.forEach((eventType) => gridApi.addEventListener(eventType, refreshCells));\n\n gridApi.addEventListener(\"displayedColumnsChanged\", (event) => {\n fixColumnOrder(event.api);\n });\n gridApi.addEventListener(\"gridPreDestroyed\", () => {\n destroyCellFake(cellFake);\n });\n adjustRowNumberColumnWidth(gridApi, cellFake);\n fixColumnOrder(gridApi);\n}\n"],"mappings":";;;;;AAWA,MAAa,IAA8B;AAE3C,IAAM,IAAa;AAEnB,SAAgB,IAAkD;AAChE,QAAO;EACL,OAAO;EACP,YAAY;EACZ,iBAAiB;EACjB,cAAc,MACR,EAAO,SAAS,QAChB,EAAO,KAAK,aAAa,OAAa,OACnC,EAAO,KAAK,WAAW;EAEhC,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,eAAe,EAAE;EACjB,kBAAkB,EAAE;EACpB,cAAc;EACd,QAAQ;EACR,YAAY;EACZ,OAAO;EACP,mBAAmB;EACnB,kBAAkB;EAClB,WAAW;GACT,OAAO;GACP,oBAAoB;GACpB,UAAU;GACV,cAAc;GACf;EACD,UAAU;EACV,WAAW;EACZ;;AAGH,SAAS,IAAiC;CACxC,IAAM,IAAM,SAAS,cAAc,MAAM;AAWzC,QATA,EAAI,MAAM,aAAa,UACvB,EAAI,MAAM,WAAW,YACrB,EAAI,MAAM,YAAY,cAEtB,EAAI,MAAM,UAAU,UACpB,EAAI,MAAM,SAAS,aACnB,EAAI,MAAM,QAAQ,QAElB,SAAS,KAAK,YAAY,EAAI,EACvB;;AAGT,SAAS,EAAgB,GAA0B;AACjD,UAAS,KAAK,YAAY,EAAS;;AAGrC,SAAS,EAA2B,GAAkB,GAA0B,GAAiB;CAC/F,IAAM,IAAU,EAAQ,uBAAuB,EAAQ,0BAA0B,CAAC;AAClF,KAAI,CAAC,EAAS;CAEd,IAAM,IAAyB,EAAQ,aAAa;EAClD;EACA,QAAQ;EACT,CAAC;AAEF,KAAI,OAAO,KAA2B,SAAU;CAEhD,IAAM,IAAmC,EAAuB,UAAU,CAAC;AACvE,EAAC,KAAS,EAAS,UAAU,WAAW,MAG5C,EAAS,YADW,IACa,OAAO,EAAiC,EAEzE,QAAe;AACb,IAAQ,iBAAiB,EACvB,OAAO,CACL;GACE,OAAO;GACP,QAAQ;GACR,OAAO,KAAK,IAAI,GAAY,EAAS,YAAY;GAClD,CACF,EACF,CAAC;GACF;;AAGJ,SAAS,EAAe,GAAkB;AACxC,KAAI,EAAQ,aAAa,CAAE;CAC3B,IAAM,IAAU,EAAQ,mBAAmB,IAAI,EAAE,EAC3C,IAAiB,EAAQ,UAAU,EAAqB,EACxD,IAAe,EAAQ,WAC1B,MAAW,EAAO,OAAO,KAAK,EAChC;AACD,CAAI,MAAiB,OACf,MAAmB,KAKjB,MAAiB,KACnB,EAAQ,YAAY,CAAC,EAAQ,GAAc,EAAE,EAAE,IAL7C,MAAmB,KAAK,MAAiB,MAC3C,EAAQ,YAAY,CAAC,EAAQ,IAAe,EAAQ,GAAgB,EAAE,EAAE;;AAUhF,SAAgB,EAAwB,GAAkB;CACxD,IAAM,IAAW,GAAgB;AAkBjC,CAhBA,EAAQ,iBAAiB,sBAAsB,MAAU;AACvD,IAA2B,EAAM,KAAK,EAAS;GAC/C,EACF,EAAQ,iBAAiB,oBAAoB,MAAU;AACrD,IAA2B,EAAM,KAAK,EAAS;GAC/C,EACF,EAAQ,iBAAiB,kBAAkB,MAAU;AACnD,EACE,EAAM,WACN,EAAM,QAAQ,MACX,MAAW,EAAO,WAAW,IAAI,EAAO,UAAU,KAAA,4BACpD,IAED,EAA2B,EAAM,KAAK,EAAS;GAEjD,EACF,EAAQ,iBAAiB,kBAAkB,MAAU;AACnD,EACE,EAAM,YACN,EAAM,WAAW,qBACjB,EAAM,SAAS,MACZ,MAAW,EAAO,WAAW,IAAI,EAAO,UAAU,KAAA,4BACpD,IAED,EAA2B,EAAM,KAAK,GAAU,GAAK;GAEvD;CAEF,IAAM,KAAgB,MAAuB,EAAM,IAAI,cAAc;AAWrE,CAV4C;EAAC;EAAe;EAAiB;EAAe,CAC7E,SAAS,MAAc,EAAQ,iBAAiB,GAAW,EAAa,CAAC,EAExF,EAAQ,iBAAiB,4BAA4B,MAAU;AAC7D,IAAe,EAAM,IAAI;GACzB,EACF,EAAQ,iBAAiB,0BAA0B;AACjD,IAAgB,EAAS;GACzB,EACF,EAA2B,GAAS,EAAS,EAC7C,EAAe,EAAQ"}
1
+ {"version":3,"file":"row-number.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/row-number.ts"],"sourcesContent":["import type { AgGridEvent, AgPublicEventType } from \"ag-grid-enterprise\";\nimport {\n isColumnSelectionCol,\n type ColDef,\n type GridApi,\n type ValueGetterParams,\n} from \"ag-grid-enterprise\";\nimport { nextTick } from \"vue\";\nimport { PlAgRowNumCheckbox } from \"../../PlAgRowNumCheckbox\";\nimport PlAgRowNumHeader from \"../../PlAgRowNumHeader.vue\";\n\nexport const PlAgDataTableRowNumberColId = '\"##RowNumberColumnId##\"';\n\nconst HeaderSize = 45;\n\nexport function makeRowNumberColDef<TData = any>(): ColDef<TData> {\n return {\n colId: PlAgDataTableRowNumberColId,\n headerName: \"#\",\n headerComponent: PlAgRowNumHeader,\n valueGetter: (params: ValueGetterParams) => {\n if (params.node === null) return null;\n if (params.node.rowIndex === null) return null;\n return params.node.rowIndex + 1;\n },\n cellRenderer: PlAgRowNumCheckbox,\n headerClass: \"pl-ag-header-align-center\",\n suppressNavigable: true,\n suppressMovable: true,\n mainMenuItems: [],\n contextMenuItems: [],\n lockPosition: \"left\",\n pinned: \"left\",\n lockPinned: true,\n width: HeaderSize,\n suppressSizeToFit: true,\n suppressAutoSize: true,\n cellStyle: {\n color: \"var(--txt-03)\",\n \"background-color\": \"var(--bg-base-light)\",\n overflow: \"visible !important\",\n \"text-align\": \"center\",\n },\n sortable: false,\n resizable: false,\n };\n}\n\nfunction createCellFake(): HTMLDivElement {\n const div = document.createElement(\"div\");\n\n div.style.visibility = \"hidden\";\n div.style.position = \"absolute\";\n div.style.boxSizing = \"border-box\";\n\n div.style.padding = \"15.5px\";\n div.style.border = \"1px solid\";\n div.style.width = \"auto\";\n\n document.body.appendChild(div);\n return div;\n}\n\nfunction destroyCellFake(cellFake: HTMLDivElement) {\n document.body.removeChild(cellFake);\n}\n\nfunction adjustRowNumberColumnWidth(gridApi: GridApi, cellFake: HTMLDivElement, force?: boolean) {\n const rowNode = gridApi.getDisplayedRowAtIndex(gridApi.getLastDisplayedRowIndex());\n if (!rowNode) return;\n\n const lastDisplayedRowNumber = gridApi.getCellValue({\n rowNode,\n colKey: PlAgDataTableRowNumberColId,\n });\n\n if (typeof lastDisplayedRowNumber !== \"number\") return;\n\n const lastDisplayedRowNumberDigitCount = lastDisplayedRowNumber.toString().length;\n if (!force && cellFake.innerHTML.length === lastDisplayedRowNumberDigitCount) return;\n\n const WidestDigit = \"5\";\n cellFake.innerHTML = WidestDigit.repeat(lastDisplayedRowNumberDigitCount);\n\n nextTick(() => {\n gridApi.applyColumnState({\n state: [\n {\n colId: PlAgDataTableRowNumberColId,\n pinned: \"left\", // sometimes pinnig is strangely not applied\n width: Math.max(HeaderSize, cellFake.offsetWidth),\n },\n ],\n });\n });\n}\n\nfunction fixColumnOrder(gridApi: GridApi) {\n if (gridApi.isDestroyed()) return;\n const columns = gridApi.getAllGridColumns() ?? [];\n const selectionIndex = columns.findIndex(isColumnSelectionCol);\n const numRowsIndex = columns.findIndex(\n (column) => column.getId() === PlAgDataTableRowNumberColId,\n );\n if (numRowsIndex !== -1) {\n if (selectionIndex !== -1) {\n if (selectionIndex !== 0 || numRowsIndex !== 1) {\n gridApi.moveColumns([columns[numRowsIndex], columns[selectionIndex]], 0);\n }\n } else {\n if (numRowsIndex !== 0) {\n gridApi.moveColumns([columns[numRowsIndex]], 0);\n }\n }\n }\n}\n\nexport function autoSizeRowNumberColumn(gridApi: GridApi) {\n const cellFake = createCellFake();\n\n gridApi.addEventListener(\"firstDataRendered\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"viewportChanged\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"columnVisible\", (event) => {\n if (\n event.columns &&\n event.columns.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake);\n }\n });\n gridApi.addEventListener(\"columnResized\", (event) => {\n if (\n event.finished &&\n event.source === \"autosizeColumns\" &&\n event.columns?.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake, true);\n }\n });\n\n const refreshCells = (event: AgGridEvent) => event.api.refreshCells();\n const refreshCellsOn: AgPublicEventType[] = [\"sortChanged\", \"filterChanged\", \"modelUpdated\"];\n refreshCellsOn.forEach((eventType) => gridApi.addEventListener(eventType, refreshCells));\n\n gridApi.addEventListener(\"displayedColumnsChanged\", (event) => {\n fixColumnOrder(event.api);\n });\n gridApi.addEventListener(\"gridPreDestroyed\", () => {\n destroyCellFake(cellFake);\n });\n adjustRowNumberColumnWidth(gridApi, cellFake);\n fixColumnOrder(gridApi);\n}\n"],"mappings":"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"}
@@ -9,7 +9,7 @@ import { PTableHidden as a } from "./common.js";
9
9
  import { defaultMainMenuItems as o } from "./menu-items.js";
10
10
  import { getColumnRenderingSpec as s } from "./value-rendering.js";
11
11
  import { Annotation as c, ValueType as l, canonicalizeJson as u, getAxisId as d, getPTableColumnId as f, isColumnHidden as p, isColumnOptional as m, isLabelColumn as h, matchAxisId as g, pTableValue as _, readAnnotation as v, readAnnotationJson as y } from "@platforma-sdk/model";
12
- /** Convert columnar data from the driver to rows, used by ag-grid */
12
+ //#region src/components/PlAgDataTable/sources/table-source-v2.ts
13
13
  function b(e, t, n, r) {
14
14
  let i = [];
15
15
  for (let o = 0; o < t[0].data.length; ++o) {
@@ -23,7 +23,6 @@ function b(e, t, n, r) {
23
23
  }
24
24
  return i;
25
25
  }
26
- /** Calculate GridOptions for selected p-table data source */
27
26
  async function x({ generation: r, pfDriver: i, model: a, sheets: o, dataRenderedTracker: s, hiddenColIds: l, cellButtonAxisParams: m }) {
28
27
  let _ = r.value, v = /* @__PURE__ */ Error("table state generation changed"), x = await i.getSpec(a.fullTableHandle);
29
28
  if (_ !== r.value) throw v;
@@ -115,9 +114,6 @@ async function x({ generation: r, pfDriver: i, model: a, sheets: o, dataRendered
115
114
  } }
116
115
  };
117
116
  }
118
- /**
119
- * Calculates column definition for a given p-table column
120
- */
121
117
  function S(t, n, a, d, f) {
122
118
  let p = u({
123
119
  source: n,
@@ -174,6 +170,7 @@ function S(t, n, a, d, f) {
174
170
  })()
175
171
  };
176
172
  }
173
+ //#endregion
177
174
  export { x as calculateGridOptions };
178
175
 
179
176
  //# sourceMappingURL=table-source-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from \"../../PlAgColumnHeader\";\nimport { PlAgColumnHeader } from \"../../PlAgColumnHeader\";\nimport { PlAgTextAndButtonCell } from \"../../PlAgTextAndButtonCell\";\nimport type { PlAgDataTableV2Row, PlTableRowId } from \"../types\";\nimport { PTableHidden } from \"./common\";\nimport { defaultMainMenuItems } from \"./menu-items\";\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from \"./row-number\";\nimport { getColumnRenderingSpec } from \"./value-rendering\";\nimport type { Ref } from \"vue\";\nimport { isJsonEqual } from \"@milaboratories/helpers\";\nimport type { DeferredCircular } from \"./focus-row\";\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === \"column\" && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableKey = axes.map((iAxis) =>\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] =\n resultMapping[iCol] === -1 ? PTableHidden : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error(\"table state generation changed\");\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(dataSpecs.entries().map(([i, spec]) => [specId(spec), i]));\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === \"axis\")\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs\n .entries()\n .filter(([i, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return !isPartitionedAxis(spec.id);\n case \"column\":\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n })\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === \"axis\" ? -1 : 1;\n\n const aPriority = readAnnotationJson(specs[a].spec, Annotation.Table.OrderPriority);\n const bPriority = readAnnotationJson(specs[b].spec, Annotation.Table.OrderPriority);\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return bPriority - aPriority;\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === \"axis\") {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) =>\n makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams),\n ),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs\n .values()\n .filter((spec) => spec.type === \"axis\")\n .map((spec) => spec.spec)\n .toArray();\n const axes = axesSpec\n .keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption(\"loading\", false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption(\"loading\", false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption(\"loading\", true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === \"monospace\") {\n cellStyle.fontFamily = \"Spline Sans Mono\";\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName:\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === \"axis\",\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== \"axis\") return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"Number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"Text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n tooltip: readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from \"../../PlAgColumnHeader\";\nimport { PlAgColumnHeader } from \"../../PlAgColumnHeader\";\nimport { PlAgTextAndButtonCell } from \"../../PlAgTextAndButtonCell\";\nimport type { PlAgDataTableV2Row, PlTableRowId } from \"../types\";\nimport { PTableHidden } from \"./common\";\nimport { defaultMainMenuItems } from \"./menu-items\";\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from \"./row-number\";\nimport { getColumnRenderingSpec } from \"./value-rendering\";\nimport type { Ref } from \"vue\";\nimport { isJsonEqual } from \"@milaboratories/helpers\";\nimport type { DeferredCircular } from \"./focus-row\";\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === \"column\" && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableKey = axes.map((iAxis) =>\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] =\n resultMapping[iCol] === -1 ? PTableHidden : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error(\"table state generation changed\");\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(dataSpecs.entries().map(([i, spec]) => [specId(spec), i]));\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === \"axis\")\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs\n .entries()\n .filter(([i, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return !isPartitionedAxis(spec.id);\n case \"column\":\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n })\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === \"axis\" ? -1 : 1;\n\n const aPriority = readAnnotationJson(specs[a].spec, Annotation.Table.OrderPriority);\n const bPriority = readAnnotationJson(specs[b].spec, Annotation.Table.OrderPriority);\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return bPriority - aPriority;\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === \"axis\") {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) =>\n makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams),\n ),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs\n .values()\n .filter((spec) => spec.type === \"axis\")\n .map((spec) => spec.spec)\n .toArray();\n const axes = axesSpec\n .keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption(\"loading\", false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption(\"loading\", false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption(\"loading\", true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === \"monospace\") {\n cellStyle.fontFamily = \"Spline Sans Mono\";\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName:\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === \"axis\",\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== \"axis\") return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"Number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"Text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n tooltip: readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"mappings":"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"}
@@ -6,6 +6,7 @@ import { computed as i, ref as a, watch as o } from "vue";
6
6
  import { canonicalizeJson as s, createDefaultPTableParams as c, distillFilterSpec as l, getPTableColumnId as u, parseJson as d, upgradePlDataTableStateV2 as f } from "@platforma-sdk/model";
7
7
  import { computedCached as p } from "@milaboratories/uikit";
8
8
  import { debounce as m, isNil as h } from "es-toolkit";
9
+ //#region src/components/PlAgDataTable/sources/table-state-v2.ts
9
10
  function g(n, r, s) {
10
11
  let l = p({
11
12
  get: () => f(n.value),
@@ -159,6 +160,7 @@ function S(e, t) {
159
160
  sorting: b(e.gridState.sort)
160
161
  };
161
162
  }
163
+ //#endregion
162
164
  export { g as useTableState };
163
165
 
164
166
  //# sourceMappingURL=table-state-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-state-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n createDefaultPTableParams,\n parseJson,\n canonicalizeJson,\n upgradePlDataTableStateV2,\n type FilterSpec,\n type FilterSpecLeaf,\n type PTableColumnId,\n type PTableColumnSpec,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PObjectId,\n type PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport { computed, ref, watch, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { isJsonEqual, randomInt } from \"@milaboratories/helpers\";\nimport { computedCached } from \"@milaboratories/uikit\";\nimport { isStringValueType, isNumericValueType } from \"../../PlAdvancedFilter/utils\";\nimport { debounce, isNil } from \"es-toolkit\";\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n columns: Ref<PTableColumnSpec[]>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n filtersState: Ref<PlDataTableFiltersWithMeta>;\n searchString: WritableComputedRef<string>;\n} {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: debounce((newState) => (tableStateDenormalized.value = newState), 300),\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n const undefinedSourceId = \"error\" in settings.value && settings.value.error == null;\n if (!sourceId && undefinedSourceId) return defaultState;\n\n const suitableSourceId = sourceId ?? tableStateNormalized.value.stateCache.at(-1)?.sourceId;\n if (!suitableSourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === suitableSourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId: suitableSourceId };\n\n return cachedState;\n },\n set: (state) => {\n const newState: PlDataTableStateV2Normalized = {\n ...tableStateNormalized.value,\n pTableParams: createDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = createPTableParams(state, columns.value);\n\n const stateIdx = newState.stateCache.findIndex(\n (entry) => entry.sourceId === state.sourceId,\n );\n if (stateIdx !== -1) {\n newState.stateCache.splice(stateIdx, 1);\n }\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n\n if (!isJsonEqual(tableStateNormalized.value, newState)) {\n tableStateNormalized.value = newState;\n }\n },\n });\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n const isCorrect =\n raw &&\n (raw.type === \"and\" || raw.type === \"or\") &&\n \"filters\" in raw &&\n Array.isArray(raw.filters);\n\n return isCorrect\n ? (raw satisfies PlDataTableFiltersWithMeta)\n : { id: randomInt(), type: \"and\" as const, isExpanded: true, filters: [] };\n },\n set: (filtersState: PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n const filtersStateDeepReactive = ref(filtersState);\n watch(\n () => filtersStateDeepReactive.value,\n (newValue) => (filtersState.value = newValue),\n { deep: true },\n );\n\n const searchString = computed<string>({\n get: () => tableState.value.searchString ?? \"\",\n set: (searchString: string) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n searchString,\n };\n }\n },\n });\n\n return { gridState, sheetsState, filtersState: filtersStateDeepReactive, searchString };\n}\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n searchString?: string;\n };\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n };\n}\n\nfunction getHiddenColIds(state: PlDataTableGridStateCore[\"columnVisibility\"]): PObjectId[] | null {\n return (\n state?.hiddenColIds?.map(parseJson).reduce((acc, c) => {\n if (c.source.type === \"column\") {\n acc.push(c.source.id);\n }\n return acc;\n }, [] as PObjectId[]) ?? null\n );\n}\n\nfunction convertPartitionFiltersToFilterSpec(\n sheetsState: PlDataTableSheetState[],\n): FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] {\n return sheetsState.map((s) => {\n const column = canonicalizeJson<PTableColumnId>({ type: \"axis\", id: s.axisId });\n return typeof s.value === \"number\"\n ? { type: \"equal\" as const, column, x: s.value }\n : { type: \"patternEquals\" as const, column, value: s.value };\n });\n}\n\nfunction convertAgSortingToPTableSorting(state: PlDataTableGridStateCore[\"sort\"]): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(item.colId).labeled;\n return {\n column,\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n };\n }) ?? []\n );\n}\n\nfunction createSearchFilterNode(\n columns: PTableColumnSpec[],\n search: null | undefined | string,\n): null | FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>> {\n const trimmed = search?.trim();\n if (isNil(trimmed) || trimmed.length === 0) return null;\n\n const parts: FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] = [];\n const numericValue = Number(trimmed);\n const isValidNumber = trimmed.length > 0 && !isNaN(numericValue) && isFinite(numericValue);\n\n for (const col of columns) {\n const column = canonicalizeJson<PTableColumnId>(getPTableColumnId(col));\n const spec = col.spec;\n\n if (isStringValueType(spec)) {\n parts.push({ type: \"patternEquals\", column, value: trimmed });\n }\n\n if (isNumericValueType(spec) && isValidNumber) {\n parts.push({ type: \"equal\", column, x: numericValue });\n }\n }\n\n if (parts.length === 0) return null;\n\n return { type: \"or\", filters: parts };\n}\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const parts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(state.filtersState ? [state.filtersState] : []),\n ...(searchNode ? [searchNode] : []),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n parts.length === 0 ? null : parts.length === 1 ? parts[0] : { type: \"and\", filters: parts },\n );\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n filters,\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table-state-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n createDefaultPTableParams,\n parseJson,\n canonicalizeJson,\n upgradePlDataTableStateV2,\n type FilterSpec,\n type FilterSpecLeaf,\n type PTableColumnId,\n type PTableColumnSpec,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PObjectId,\n type PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport { computed, ref, watch, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { isJsonEqual, randomInt } from \"@milaboratories/helpers\";\nimport { computedCached } from \"@milaboratories/uikit\";\nimport { isStringValueType, isNumericValueType } from \"../../PlAdvancedFilter/utils\";\nimport { debounce, isNil } from \"es-toolkit\";\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n columns: Ref<PTableColumnSpec[]>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n filtersState: Ref<PlDataTableFiltersWithMeta>;\n searchString: WritableComputedRef<string>;\n} {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: debounce((newState) => (tableStateDenormalized.value = newState), 300),\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n const undefinedSourceId = \"error\" in settings.value && settings.value.error == null;\n if (!sourceId && undefinedSourceId) return defaultState;\n\n const suitableSourceId = sourceId ?? tableStateNormalized.value.stateCache.at(-1)?.sourceId;\n if (!suitableSourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === suitableSourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId: suitableSourceId };\n\n return cachedState;\n },\n set: (state) => {\n const newState: PlDataTableStateV2Normalized = {\n ...tableStateNormalized.value,\n pTableParams: createDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = createPTableParams(state, columns.value);\n\n const stateIdx = newState.stateCache.findIndex(\n (entry) => entry.sourceId === state.sourceId,\n );\n if (stateIdx !== -1) {\n newState.stateCache.splice(stateIdx, 1);\n }\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n\n if (!isJsonEqual(tableStateNormalized.value, newState)) {\n tableStateNormalized.value = newState;\n }\n },\n });\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n const isCorrect =\n raw &&\n (raw.type === \"and\" || raw.type === \"or\") &&\n \"filters\" in raw &&\n Array.isArray(raw.filters);\n\n return isCorrect\n ? (raw satisfies PlDataTableFiltersWithMeta)\n : { id: randomInt(), type: \"and\" as const, isExpanded: true, filters: [] };\n },\n set: (filtersState: PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n const filtersStateDeepReactive = ref(filtersState);\n watch(\n () => filtersStateDeepReactive.value,\n (newValue) => (filtersState.value = newValue),\n { deep: true },\n );\n\n const searchString = computed<string>({\n get: () => tableState.value.searchString ?? \"\",\n set: (searchString: string) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n searchString,\n };\n }\n },\n });\n\n return { gridState, sheetsState, filtersState: filtersStateDeepReactive, searchString };\n}\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n searchString?: string;\n };\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n };\n}\n\nfunction getHiddenColIds(state: PlDataTableGridStateCore[\"columnVisibility\"]): PObjectId[] | null {\n return (\n state?.hiddenColIds?.map(parseJson).reduce((acc, c) => {\n if (c.source.type === \"column\") {\n acc.push(c.source.id);\n }\n return acc;\n }, [] as PObjectId[]) ?? null\n );\n}\n\nfunction convertPartitionFiltersToFilterSpec(\n sheetsState: PlDataTableSheetState[],\n): FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] {\n return sheetsState.map((s) => {\n const column = canonicalizeJson<PTableColumnId>({ type: \"axis\", id: s.axisId });\n return typeof s.value === \"number\"\n ? { type: \"equal\" as const, column, x: s.value }\n : { type: \"patternEquals\" as const, column, value: s.value };\n });\n}\n\nfunction convertAgSortingToPTableSorting(state: PlDataTableGridStateCore[\"sort\"]): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(item.colId).labeled;\n return {\n column,\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n };\n }) ?? []\n );\n}\n\nfunction createSearchFilterNode(\n columns: PTableColumnSpec[],\n search: null | undefined | string,\n): null | FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>> {\n const trimmed = search?.trim();\n if (isNil(trimmed) || trimmed.length === 0) return null;\n\n const parts: FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] = [];\n const numericValue = Number(trimmed);\n const isValidNumber = trimmed.length > 0 && !isNaN(numericValue) && isFinite(numericValue);\n\n for (const col of columns) {\n const column = canonicalizeJson<PTableColumnId>(getPTableColumnId(col));\n const spec = col.spec;\n\n if (isStringValueType(spec)) {\n parts.push({ type: \"patternEquals\", column, value: trimmed });\n }\n\n if (isNumericValueType(spec) && isValidNumber) {\n parts.push({ type: \"equal\", column, x: numericValue });\n }\n }\n\n if (parts.length === 0) return null;\n\n return { type: \"or\", filters: parts };\n}\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const parts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(state.filtersState ? [state.filtersState] : []),\n ...(searchNode ? [searchNode] : []),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n parts.length === 0 ? null : parts.length === 1 ? parts[0] : { type: \"and\", filters: parts },\n );\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n filters,\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n };\n}\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { isPTableHidden as e } from "./common.js";
2
2
  import { Annotation as t, PTableNA as n, ValueType as r, readAnnotation as i } from "@platforma-sdk/model";
3
3
  import * as a from "d3-format";
4
+ //#region src/components/PlAgDataTable/sources/value-rendering.ts
4
5
  function o(t) {
5
6
  if (t === void 0) return "undefined";
6
7
  if (e(t)) return "loading...";
@@ -30,6 +31,7 @@ function s(e) {
30
31
  let c = i(e.spec, t.Table.FontFamily);
31
32
  return c && (s.fontFamily = c), s;
32
33
  }
34
+ //#endregion
33
35
  export { s as getColumnRenderingSpec };
34
36
 
35
37
  //# sourceMappingURL=value-rendering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-rendering.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import {\n Annotation,\n PTableNA,\n readAnnotation,\n ValueType,\n type PTableColumnSpec,\n type PTableValue,\n} from \"@platforma-sdk/model\";\nimport type { ValueFormatterFunc } from \"ag-grid-enterprise\";\nimport type { PTableHidden } from \"./common\";\nimport { isPTableHidden } from \"./common\";\nimport * as d3 from \"d3-format\";\nimport type { PlAgDataTableV2Row } from \"../types\";\n\nexport function formatSpecialValues(\n value: PTableValue | PTableHidden | undefined,\n): string | undefined {\n if (value === undefined) {\n return \"undefined\";\n } else if (isPTableHidden(value)) {\n return \"loading...\";\n } else if (value === PTableNA) {\n return \"\";\n } else {\n return undefined;\n }\n}\n\nexport type ColumnRenderingSpec = {\n valueFormatter: ValueFormatterFunc<PlAgDataTableV2Row, PTableValue | PTableHidden>;\n fontFamily?: string;\n};\n\nexport function getColumnRenderingSpec(spec: PTableColumnSpec): ColumnRenderingSpec {\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n let renderSpec: ColumnRenderingSpec;\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double: {\n const format = readAnnotation(spec.spec, Annotation.Format);\n const formatFn = format ? d3.format(format) : undefined;\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\n if (formatted !== undefined) return formatted;\n return formatFn ? formatFn(Number(params.value)) : params.value!.toString();\n },\n };\n break;\n }\n default:\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\n if (formatted !== undefined) return formatted;\n return params.value!.toString();\n },\n };\n break;\n }\n const fontFamily = readAnnotation(spec.spec, Annotation.Table.FontFamily);\n if (fontFamily) renderSpec.fontFamily = fontFamily;\n return renderSpec;\n}\n"],"mappings":";;;AAcA,SAAgB,EACd,GACoB;AACpB,KAAI,MAAU,KAAA,EACZ,QAAO;KACE,EAAe,EAAM,CAC9B,QAAO;KACE,MAAU,EACnB,QAAO;;AAWX,SAAgB,EAAuB,GAA6C;CAClF,IAAM,IAAY,EAAK,SAAS,SAAS,EAAK,KAAK,OAAO,EAAK,KAAK,WAChE;AACJ,SAAQ,GAAR;EACE,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU,QAAQ;GACrB,IAAM,IAAS,EAAe,EAAK,MAAM,EAAW,OAAO,EACrD,IAAW,IAAS,EAAG,OAAO,EAAO,GAAG,KAAA;AAC9C,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,MAAM;AAEnD,WADI,MAAc,KAAA,IACX,IAAW,EAAS,OAAO,EAAO,MAAM,CAAC,GAAG,EAAO,MAAO,UAAU,GADvC;MAGvC;AACD;;EAEF;AACE,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,MAAM;AAEnD,WADI,MAAc,KAAA,IACX,EAAO,MAAO,UAAU,GADK;MAGvC;AACD;;CAEJ,IAAM,IAAa,EAAe,EAAK,MAAM,EAAW,MAAM,WAAW;AAEzE,QADI,MAAY,EAAW,aAAa,IACjC"}
1
+ {"version":3,"file":"value-rendering.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import {\n Annotation,\n PTableNA,\n readAnnotation,\n ValueType,\n type PTableColumnSpec,\n type PTableValue,\n} from \"@platforma-sdk/model\";\nimport type { ValueFormatterFunc } from \"ag-grid-enterprise\";\nimport type { PTableHidden } from \"./common\";\nimport { isPTableHidden } from \"./common\";\nimport * as d3 from \"d3-format\";\nimport type { PlAgDataTableV2Row } from \"../types\";\n\nexport function formatSpecialValues(\n value: PTableValue | PTableHidden | undefined,\n): string | undefined {\n if (value === undefined) {\n return \"undefined\";\n } else if (isPTableHidden(value)) {\n return \"loading...\";\n } else if (value === PTableNA) {\n return \"\";\n } else {\n return undefined;\n }\n}\n\nexport type ColumnRenderingSpec = {\n valueFormatter: ValueFormatterFunc<PlAgDataTableV2Row, PTableValue | PTableHidden>;\n fontFamily?: string;\n};\n\nexport function getColumnRenderingSpec(spec: PTableColumnSpec): ColumnRenderingSpec {\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n let renderSpec: ColumnRenderingSpec;\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double: {\n const format = readAnnotation(spec.spec, Annotation.Format);\n const formatFn = format ? d3.format(format) : undefined;\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\n if (formatted !== undefined) return formatted;\n return formatFn ? formatFn(Number(params.value)) : params.value!.toString();\n },\n };\n break;\n }\n default:\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\n if (formatted !== undefined) return formatted;\n return params.value!.toString();\n },\n };\n break;\n }\n const fontFamily = readAnnotation(spec.spec, Annotation.Table.FontFamily);\n if (fontFamily) renderSpec.fontFamily = fontFamily;\n return renderSpec;\n}\n"],"mappings":";;;;AAcA,SAAgB,EACd,GACoB;AACpB,KAAI,MAAU,KAAA,EACZ,QAAO;KACE,EAAe,EAAM,CAC9B,QAAO;KACE,MAAU,EACnB,QAAO;;AAWX,SAAgB,EAAuB,GAA6C;CAClF,IAAM,IAAY,EAAK,SAAS,SAAS,EAAK,KAAK,OAAO,EAAK,KAAK,WAChE;AACJ,SAAQ,GAAR;EACE,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU,QAAQ;GACrB,IAAM,IAAS,EAAe,EAAK,MAAM,EAAW,OAAO,EACrD,IAAW,IAAS,EAAG,OAAO,EAAO,GAAG,KAAA;AAC9C,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,MAAM;AAEnD,WADI,MAAc,KAAA,IACX,IAAW,EAAS,OAAO,EAAO,MAAM,CAAC,GAAG,EAAO,MAAO,UAAU,GADvC;MAGvC;AACD;;EAEF;AACE,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,MAAM;AAEnD,WADI,MAAc,KAAA,IACX,EAAO,MAAO,UAAU,GADK;MAGvC;AACD;;CAEJ,IAAM,IAAa,EAAe,EAAK,MAAM,EAAW,MAAM,WAAW;AAEzE,QADI,MAAY,EAAW,aAAa,IACjC"}
@@ -2,6 +2,7 @@ import { deepClone as e } from "../../lib/util/helpers/dist/objects.js";
2
2
  import "../../lib/util/helpers/dist/index.js";
3
3
  import { computed as t, toValue as n } from "vue";
4
4
  import r from "canonicalize";
5
+ //#region src/components/PlAgDataTable/types.ts
5
6
  function i(i) {
6
7
  return t(() => {
7
8
  let t = e(n(i.model)), a;
@@ -55,6 +56,7 @@ function i(i) {
55
56
  return a;
56
57
  });
57
58
  }
59
+ //#endregion
58
60
  export { i as usePlDataTableSettingsV2 };
59
61
 
60
62
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/components/PlAgDataTable/types.ts"],"sourcesContent":["import {\n type AxisId,\n type CanonicalizedJson,\n type ListOptionBase,\n type PlDataTableModel,\n type PlDataTableSheet,\n type PlDataTableSheetState,\n type PTableKey,\n type PTableValue,\n type OutputWithStatus,\n type ErrorLike,\n} from \"@platforma-sdk/model\";\nimport type { PTableHidden } from \"./sources/common\";\nimport type { ComputedRef, MaybeRefOrGetter } from \"vue\";\nimport { computed, toValue } from \"vue\";\nimport canonicalize from \"canonicalize\";\nimport { deepClone } from \"@milaboratories/helpers\";\n\nexport type PlDataTableSettingsV2Base =\n | { sourceId: null; pending: boolean; error: null | ErrorLike[] }\n | {\n /** Unique source id for state caching */\n sourceId: string;\n /** Sheets that we want to show in our table */\n sheets: PlDataTableSheet[];\n /** Result of `createPlDataTableV2` */\n model: PlDataTableModel | undefined;\n };\n\n/** Data table V2 settings */\nexport type PlDataTableSettingsV2 = PlDataTableSettingsV2Base;\n\ntype OptionsBasic = {\n /** Block output created by `createPlDataTableV2` */\n model: MaybeRefOrGetter<OutputWithStatus<PlDataTableModel | undefined>>;\n /**\n * Sheets for partitioned data sources.\n * Do not set if data source is never partitioned.\n */\n sheets?: MaybeRefOrGetter<PlDataTableSheet[] | undefined>;\n};\n\ntype OptionsSimple = OptionsBasic;\n\ntype OptionsAdvanced<T> = OptionsBasic & {\n /**\n * Block property (such as inputAnchor) used to produce the data source.\n * Mandatory for cases when the table can change without block run.\n * Skip when the table is changed only after block run.\n * Ask developers for help if you don't know what to set here.\n */\n sourceId: MaybeRefOrGetter<T | undefined>;\n};\n\nexport function usePlDataTableSettingsV2<T>(\n options: OptionsAdvanced<T>,\n): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2(\n options: OptionsSimple,\n): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2<T>(\n options: OptionsAdvanced<T> | OptionsSimple,\n): ComputedRef<PlDataTableSettingsV2> {\n return computed(() => {\n const model = deepClone(toValue(options.model));\n let settingsBase: PlDataTableSettingsV2Base;\n\n if (!model.ok) {\n model.errors.forEach((e) => console.error(\"Error in PlDataTableModel:\", e));\n settingsBase = { sourceId: null, pending: false, error: model.errors };\n } else if (\"sourceId\" in options) {\n const sourceIdValue = deepClone(toValue(options.sourceId));\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase =\n sourceIdValue && sheetsValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: sheetsValue,\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n } else {\n settingsBase = sourceIdValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: [],\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n }\n } else {\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase = sheetsValue\n ? {\n sourceId: canonicalize(\"static\")!,\n sheets: sheetsValue,\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n } else {\n settingsBase = model.value\n ? {\n sourceId: canonicalize(\"static\")!,\n sheets: [],\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n }\n }\n return settingsBase;\n });\n}\n\n/** PlAgDataTable controller contains all exported methods */\nexport type PlAgDataTableV2Controller = {\n /**\n * Scroll table to make row with provided key visible\n * Warning: works reliably only in client side mode.\n * @returns `true` if row was found and focused, `false` otherwise\n */\n focusRow: (rowKey: PTableKey) => Promise<boolean>;\n /**\n * Update selection in the table.\n * @param axesIds - axes ids identifying axes key values in `selectedKeys`\n * @param selectedKeys - axes keys of the rows to select\n * Warning: update will be ignored if axes ids cannot be correctly resolved\n * @returns `true` if selection was updated, `false` otherwise\n */\n updateSelection: ({\n axesSpec,\n selectedKeys,\n }: {\n axesSpec: AxisId[];\n selectedKeys: PTableKey[];\n }) => Promise<boolean>;\n};\n\nexport type PlTableRowId = PTableKey;\n\nexport type PlTableRowIdJson = CanonicalizedJson<PTableKey>;\n\n/** PlAgDataTableV2 row */\nexport type PlAgDataTableV2Row = {\n /** Axes key */\n axesKey: PTableKey;\n /** Unique row identifier */\n id: PlTableRowIdJson;\n /** Row values by column; sheet axes and labeled axes are excluded */\n [field: `${number}`]: PTableValue | PTableHidden;\n};\n\nexport type PlAgOverlayLoadingParams = {\n /**\n * Required flag, that shows catInBag icon with message if `true`, shows PlSplash component if `false`.\n */\n variant: \"not-ready\" | \"running\" | \"loading\";\n /**\n * Prop to override default \"Loading data...\" text and the subtitles\n */\n loadingText?:\n | string\n | {\n title: string;\n subtitle: string | string[];\n };\n /**\n * Prop to override default \"Running analysis...\" text and the subtitles\n */\n runningText?:\n | string\n | {\n title: string;\n subtitle: string | string[];\n };\n /**\n * Prop to override default \"Data is not computed\" text (So why props name is notReady? Good question)\n */\n notReadyText?: string;\n};\n\nexport type PlAgOverlayNoRowsParams = {\n /**\n * Prop to override default \"Empty\" text\n */\n text?: string;\n};\n\nexport type PlDataTableSheetsSettings = {\n /** User-provided sheets for the sourceId */\n sheets: PlDataTableSheet[];\n /** Persisted selection for the sourceId */\n cachedState: PlDataTableSheetState[];\n};\n\nexport type PlDataTableSheetNormalized = {\n /** id of the axis */\n axisId: AxisId;\n /** sheet prefix */\n prefix: string;\n /** options to show in the filter dropdown */\n options: ListOptionBase<string | number>[];\n /** default (selected) value */\n defaultValue: string | number;\n};\n"],"mappings":";;;;AA4DA,SAAgB,EACd,GACoC;AACpC,QAAO,QAAe;EACpB,IAAM,IAAQ,EAAU,EAAQ,EAAQ,MAAM,CAAC,EAC3C;AAEJ,MAAI,CAAC,EAAM,GAET,CADA,EAAM,OAAO,SAAS,MAAM,QAAQ,MAAM,8BAA8B,EAAE,CAAC,EAC3E,IAAe;GAAE,UAAU;GAAM,SAAS;GAAO,OAAO,EAAM;GAAQ;WAC7D,cAAc,GAAS;GAChC,IAAM,IAAgB,EAAU,EAAQ,EAAQ,SAAS,CAAC;AAC1D,OAAI,EAAQ,QAAQ;IAClB,IAAM,IAAc,EAAU,EAAQ,EAAQ,OAAO,CAAC;AACtD,QACE,KAAiB,IACb;KACE,UAAU,EAAa,EAAc;KACrC,QAAQ;KACR,OAAO,EAAM;KACd,GACD;KAAE,UAAU;KAAM,SAAS,CAAC,EAAM;KAAQ,OAAO;KAAM;SAE7D,KAAe,IACX;IACE,UAAU,EAAa,EAAc;IACrC,QAAQ,EAAE;IACV,OAAO,EAAM;IACd,GACD;IAAE,UAAU;IAAM,SAAS,CAAC,EAAM;IAAQ,OAAO;IAAM;aAGzD,EAAQ,QAAQ;GAClB,IAAM,IAAc,EAAU,EAAQ,EAAQ,OAAO,CAAC;AACtD,OAAe,IACX;IACE,UAAU,EAAa,SAAS;IAChC,QAAQ;IACR,OAAO,EAAM;IACd,GACD;IAAE,UAAU;IAAM,SAAS,CAAC,EAAM;IAAQ,OAAO;IAAM;QAE3D,KAAe,EAAM,QACjB;GACE,UAAU,EAAa,SAAS;GAChC,QAAQ,EAAE;GACV,OAAO,EAAM;GACd,GACD;GAAE,UAAU;GAAM,SAAS,CAAC,EAAM;GAAQ,OAAO;GAAM;AAG/D,SAAO;GACP"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/components/PlAgDataTable/types.ts"],"sourcesContent":["import {\n type AxisId,\n type CanonicalizedJson,\n type ListOptionBase,\n type PlDataTableModel,\n type PlDataTableSheet,\n type PlDataTableSheetState,\n type PTableKey,\n type PTableValue,\n type OutputWithStatus,\n type ErrorLike,\n} from \"@platforma-sdk/model\";\nimport type { PTableHidden } from \"./sources/common\";\nimport type { ComputedRef, MaybeRefOrGetter } from \"vue\";\nimport { computed, toValue } from \"vue\";\nimport canonicalize from \"canonicalize\";\nimport { deepClone } from \"@milaboratories/helpers\";\n\nexport type PlDataTableSettingsV2Base =\n | { sourceId: null; pending: boolean; error: null | ErrorLike[] }\n | {\n /** Unique source id for state caching */\n sourceId: string;\n /** Sheets that we want to show in our table */\n sheets: PlDataTableSheet[];\n /** Result of `createPlDataTableV2` */\n model: PlDataTableModel | undefined;\n };\n\n/** Data table V2 settings */\nexport type PlDataTableSettingsV2 = PlDataTableSettingsV2Base;\n\ntype OptionsBasic = {\n /** Block output created by `createPlDataTableV2` */\n model: MaybeRefOrGetter<OutputWithStatus<PlDataTableModel | undefined>>;\n /**\n * Sheets for partitioned data sources.\n * Do not set if data source is never partitioned.\n */\n sheets?: MaybeRefOrGetter<PlDataTableSheet[] | undefined>;\n};\n\ntype OptionsSimple = OptionsBasic;\n\ntype OptionsAdvanced<T> = OptionsBasic & {\n /**\n * Block property (such as inputAnchor) used to produce the data source.\n * Mandatory for cases when the table can change without block run.\n * Skip when the table is changed only after block run.\n * Ask developers for help if you don't know what to set here.\n */\n sourceId: MaybeRefOrGetter<T | undefined>;\n};\n\nexport function usePlDataTableSettingsV2<T>(\n options: OptionsAdvanced<T>,\n): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2(\n options: OptionsSimple,\n): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2<T>(\n options: OptionsAdvanced<T> | OptionsSimple,\n): ComputedRef<PlDataTableSettingsV2> {\n return computed(() => {\n const model = deepClone(toValue(options.model));\n let settingsBase: PlDataTableSettingsV2Base;\n\n if (!model.ok) {\n model.errors.forEach((e) => console.error(\"Error in PlDataTableModel:\", e));\n settingsBase = { sourceId: null, pending: false, error: model.errors };\n } else if (\"sourceId\" in options) {\n const sourceIdValue = deepClone(toValue(options.sourceId));\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase =\n sourceIdValue && sheetsValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: sheetsValue,\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n } else {\n settingsBase = sourceIdValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: [],\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n }\n } else {\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase = sheetsValue\n ? {\n sourceId: canonicalize(\"static\")!,\n sheets: sheetsValue,\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n } else {\n settingsBase = model.value\n ? {\n sourceId: canonicalize(\"static\")!,\n sheets: [],\n model: model.value,\n }\n : { sourceId: null, pending: !model.stable, error: null };\n }\n }\n return settingsBase;\n });\n}\n\n/** PlAgDataTable controller contains all exported methods */\nexport type PlAgDataTableV2Controller = {\n /**\n * Scroll table to make row with provided key visible\n * Warning: works reliably only in client side mode.\n * @returns `true` if row was found and focused, `false` otherwise\n */\n focusRow: (rowKey: PTableKey) => Promise<boolean>;\n /**\n * Update selection in the table.\n * @param axesIds - axes ids identifying axes key values in `selectedKeys`\n * @param selectedKeys - axes keys of the rows to select\n * Warning: update will be ignored if axes ids cannot be correctly resolved\n * @returns `true` if selection was updated, `false` otherwise\n */\n updateSelection: ({\n axesSpec,\n selectedKeys,\n }: {\n axesSpec: AxisId[];\n selectedKeys: PTableKey[];\n }) => Promise<boolean>;\n};\n\nexport type PlTableRowId = PTableKey;\n\nexport type PlTableRowIdJson = CanonicalizedJson<PTableKey>;\n\n/** PlAgDataTableV2 row */\nexport type PlAgDataTableV2Row = {\n /** Axes key */\n axesKey: PTableKey;\n /** Unique row identifier */\n id: PlTableRowIdJson;\n /** Row values by column; sheet axes and labeled axes are excluded */\n [field: `${number}`]: PTableValue | PTableHidden;\n};\n\nexport type PlAgOverlayLoadingParams = {\n /**\n * Required flag, that shows catInBag icon with message if `true`, shows PlSplash component if `false`.\n */\n variant: \"not-ready\" | \"running\" | \"loading\";\n /**\n * Prop to override default \"Loading data...\" text and the subtitles\n */\n loadingText?:\n | string\n | {\n title: string;\n subtitle: string | string[];\n };\n /**\n * Prop to override default \"Running analysis...\" text and the subtitles\n */\n runningText?:\n | string\n | {\n title: string;\n subtitle: string | string[];\n };\n /**\n * Prop to override default \"Data is not computed\" text (So why props name is notReady? Good question)\n */\n notReadyText?: string;\n};\n\nexport type PlAgOverlayNoRowsParams = {\n /**\n * Prop to override default \"Empty\" text\n */\n text?: string;\n};\n\nexport type PlDataTableSheetsSettings = {\n /** User-provided sheets for the sourceId */\n sheets: PlDataTableSheet[];\n /** Persisted selection for the sourceId */\n cachedState: PlDataTableSheetState[];\n};\n\nexport type PlDataTableSheetNormalized = {\n /** id of the axis */\n axisId: AxisId;\n /** sheet prefix */\n prefix: string;\n /** options to show in the filter dropdown */\n options: ListOptionBase<string | number>[];\n /** default (selected) value */\n defaultValue: string | number;\n};\n"],"mappings":";;;;;AA4DA,SAAgB,EACd,GACoC;AACpC,QAAO,QAAe;EACpB,IAAM,IAAQ,EAAU,EAAQ,EAAQ,MAAM,CAAC,EAC3C;AAEJ,MAAI,CAAC,EAAM,GAET,CADA,EAAM,OAAO,SAAS,MAAM,QAAQ,MAAM,8BAA8B,EAAE,CAAC,EAC3E,IAAe;GAAE,UAAU;GAAM,SAAS;GAAO,OAAO,EAAM;GAAQ;WAC7D,cAAc,GAAS;GAChC,IAAM,IAAgB,EAAU,EAAQ,EAAQ,SAAS,CAAC;AAC1D,OAAI,EAAQ,QAAQ;IAClB,IAAM,IAAc,EAAU,EAAQ,EAAQ,OAAO,CAAC;AACtD,QACE,KAAiB,IACb;KACE,UAAU,EAAa,EAAc;KACrC,QAAQ;KACR,OAAO,EAAM;KACd,GACD;KAAE,UAAU;KAAM,SAAS,CAAC,EAAM;KAAQ,OAAO;KAAM;SAE7D,KAAe,IACX;IACE,UAAU,EAAa,EAAc;IACrC,QAAQ,EAAE;IACV,OAAO,EAAM;IACd,GACD;IAAE,UAAU;IAAM,SAAS,CAAC,EAAM;IAAQ,OAAO;IAAM;aAGzD,EAAQ,QAAQ;GAClB,IAAM,IAAc,EAAU,EAAQ,EAAQ,OAAO,CAAC;AACtD,OAAe,IACX;IACE,UAAU,EAAa,SAAS;IAChC,QAAQ;IACR,OAAO,EAAM;IACd,GACD;IAAE,UAAU;IAAM,SAAS,CAAC,EAAM;IAAQ,OAAO;IAAM;QAE3D,KAAe,EAAM,QACjB;GACE,UAAU,EAAa,SAAS;GAChC,QAAQ,EAAE;GACV,OAAO,EAAM;GACd,GACD;GAAE,UAAU;GAAM,SAAS,CAAC,EAAM;GAAQ,OAAO;GAAM;AAG/D,SAAO;GACP"}
@@ -2,6 +2,7 @@ import e from "../../_virtual/_plugin-vue_export-helper.js";
2
2
  import t from "./PlAgGridColumnManager.vue2.js";
3
3
  import n from "./PlAgGridColumnManager.style.js";
4
4
  var r = /* @__PURE__ */ e(t, [["__cssModules", { $style: n }]]);
5
+ //#endregion
5
6
  export { r as default };
6
7
 
7
8
  //# sourceMappingURL=PlAgGridColumnManager.js.map
@@ -1,4 +1,5 @@
1
1
  import './PlAgGridColumnManager.vue.css';var e = { match: "_match_pckgk_2" };
2
+ //#endregion
2
3
  export { e as default };
3
4
 
4
5
  //# sourceMappingURL=PlAgGridColumnManager.style.js.map
@@ -2,6 +2,7 @@ import { PlAgDataTableRowNumberColId as e } from "../PlAgDataTable/sources/row-n
2
2
  import { useFilteredItems as t } from "./useFilteredItems.js";
3
3
  import { Fragment as n, Teleport as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createTextVNode as l, createVNode as u, defineComponent as d, normalizeClass as f, openBlock as p, ref as m, renderList as h, toDisplayString as g, toRefs as _, unref as v, watch as y, withCtx as b, withModifiers as x } from "vue";
4
4
  import { PlBtnGhost as S, PlElementList as C, PlSearchField as w, PlSlideModal as T, usePlBlockPageTitleTeleportTarget as E } from "@milaboratories/uikit";
5
+ //#region src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue?vue&type=script&setup=true&lang.ts
5
6
  var D = /* @__PURE__ */ d({
6
7
  __name: "PlAgGridColumnManager",
7
8
  props: {
@@ -85,6 +86,7 @@ var D = /* @__PURE__ */ d({
85
86
  }, 8, ["modelValue", "width"])], 64));
86
87
  }
87
88
  });
89
+ //#endregion
88
90
  export { D as default };
89
91
 
90
92
  //# 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 PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type Column, type DisplayedColumnsChangedEvent, type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref, toRefs, watch } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\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 { api: gridApi } = toRefs(props);\n\nconst columns = ref<Column[]>([]);\nwatch(\n () => gridApi.value,\n (gridApi) => {\n if (gridApi.isDestroyed()) return;\n\n gridApi.addEventListener(\"displayedColumnsChanged\", (event: DisplayedColumnsChangedEvent) => {\n columns.value = event.api.getAllGridColumns();\n });\n\n columns.value = gridApi.getAllGridColumns();\n if (columns.value.length > 0) {\n gridApi.moveColumns(columns.value, 0);\n }\n },\n { immediate: true },\n);\n\nconst items = computed(() => {\n return columns.value.map((col) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName!,\n }));\n});\n\nconst query = ref(\"\");\n\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst { filteredItems, segments } = useFilteredItems(() => ({\n items: items.value,\n query: query.value,\n getStrings: (item) => [item.label],\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 <PlSearchField v-model=\"query\" clearable />\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 (!gridApi.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n gridApi.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!gridApi.isDestroyed()) {\n gridApi.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</style>\n"],"mappings":";;;;;;;;;;;EA2BA,IAAM,EAAE,KAAK,MAAY,EAdX,EAcwB,EAEhC,IAAU,EAAc,EAAE,CAAC;AACjC,UACQ,EAAQ,QACb,MAAY;AACP,KAAQ,aAAa,KAEzB,EAAQ,iBAAiB,4BAA4B,MAAwC;AAC3F,MAAQ,QAAQ,EAAM,IAAI,mBAAmB;KAC7C,EAEF,EAAQ,QAAQ,EAAQ,mBAAmB,EACvC,EAAQ,MAAM,SAAS,KACzB,EAAQ,YAAY,EAAQ,OAAO,EAAE;KAGzC,EAAE,WAAW,IAAM,CACpB;EAED,IAAM,IAAQ,QACL,EAAQ,MAAM,KAAK,OAAS;GACjC,QAAQ;GACR,IAAI,EAAI,OAAO;GACf,OAAO,EAAI,WAAW,CAAC;GACxB,EAAE,CACH,EAEI,IAAQ,EAAI,GAAG,EAEf,IAAa,EAAI,GAAM,EACvB,IAAiB,EAAkC,wBAAwB,EAE3E,EAAE,kBAAe,gBAAa,SAAwB;GAC1D,OAAO,EAAM;GACb,OAAO,EAAM;GACb,aAAa,MAAS,CAAC,EAAK,MAAM;GACnC,EAAE;qCAIe,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,EAyCe,EAAA,EAAA,EAAA;eAzCQ,EAAA;4CAAU,QAAA;GAAG,OAAO,EAAA;GAAO,0BAAA;;GACrC,OAAK,QAAe,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAd,kBAAc,GAAA,CAAA,CAAA,CAAA;oBACY,CAA3C,EAA2C,EAAA,EAAA,EAAA;gBAAnB,EAAA;6CAAK,QAAA;IAAE,WAAA;gCAC/B,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,EAAA,EAAO,CAAC,aAAW,EAAA;UAAwB,IAAe,EAAA,MAAQ;AAAwB,QAAA,EAAO,CAAC,YAAW,CAAE,EAAY,EAAG,EAAO;;;;IAShM,cAAqB,MAAI;KAAsB,EAAA,EAAO,CAAC,aAAW,IAAkB,EAAA,EAAO,CAAC,kBAAiB,CAAE,EAAK,OAAM,EAAA,CAAI,EAAK,OAAO,WAAS,CAAA;;IAOnJ,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 PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type Column, type DisplayedColumnsChangedEvent, type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref, toRefs, watch } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\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 { api: gridApi } = toRefs(props);\n\nconst columns = ref<Column[]>([]);\nwatch(\n () => gridApi.value,\n (gridApi) => {\n if (gridApi.isDestroyed()) return;\n\n gridApi.addEventListener(\"displayedColumnsChanged\", (event: DisplayedColumnsChangedEvent) => {\n columns.value = event.api.getAllGridColumns();\n });\n\n columns.value = gridApi.getAllGridColumns();\n if (columns.value.length > 0) {\n gridApi.moveColumns(columns.value, 0);\n }\n },\n { immediate: true },\n);\n\nconst items = computed(() => {\n return columns.value.map((col) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName!,\n }));\n});\n\nconst query = ref(\"\");\n\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst { filteredItems, segments } = useFilteredItems(() => ({\n items: items.value,\n query: query.value,\n getStrings: (item) => [item.label],\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 <PlSearchField v-model=\"query\" clearable />\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 (!gridApi.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n gridApi.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!gridApi.isDestroyed()) {\n gridApi.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</style>\n"],"mappings":";;;;;;;;;;;;EA2BA,IAAM,EAAE,KAAK,MAAY,EAdX,EAcwB,EAEhC,IAAU,EAAc,EAAE,CAAC;AACjC,UACQ,EAAQ,QACb,MAAY;AACP,KAAQ,aAAa,KAEzB,EAAQ,iBAAiB,4BAA4B,MAAwC;AAC3F,MAAQ,QAAQ,EAAM,IAAI,mBAAmB;KAC7C,EAEF,EAAQ,QAAQ,EAAQ,mBAAmB,EACvC,EAAQ,MAAM,SAAS,KACzB,EAAQ,YAAY,EAAQ,OAAO,EAAE;KAGzC,EAAE,WAAW,IAAM,CACpB;EAED,IAAM,IAAQ,QACL,EAAQ,MAAM,KAAK,OAAS;GACjC,QAAQ;GACR,IAAI,EAAI,OAAO;GACf,OAAO,EAAI,WAAW,CAAC;GACxB,EAAE,CACH,EAEI,IAAQ,EAAI,GAAG,EAEf,IAAa,EAAI,GAAM,EACvB,IAAiB,EAAkC,wBAAwB,EAE3E,EAAE,kBAAe,gBAAa,SAAwB;GAC1D,OAAO,EAAM;GACb,OAAO,EAAM;GACb,aAAa,MAAS,CAAC,EAAK,MAAM;GACnC,EAAE;qCAIe,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,EAyCe,EAAA,EAAA,EAAA;eAzCQ,EAAA;4CAAU,QAAA;GAAG,OAAO,EAAA;GAAO,0BAAA;;GACrC,OAAK,QAAe,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAd,kBAAc,GAAA,CAAA,CAAA,CAAA;oBACY,CAA3C,EAA2C,EAAA,EAAA,EAAA;gBAAnB,EAAA;6CAAK,QAAA;IAAE,WAAA;gCAC/B,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,EAAA,EAAO,CAAC,aAAW,EAAA;UAAwB,IAAe,EAAA,MAAQ;AAAwB,QAAA,EAAO,CAAC,YAAW,CAAE,EAAY,EAAG,EAAO;;;;IAShM,cAAqB,MAAI;KAAsB,EAAA,EAAO,CAAC,aAAW,IAAkB,EAAA,EAAO,CAAC,kBAAiB,CAAE,EAAK,OAAM,EAAA,CAAI,EAAK,OAAO,WAAS,CAAA;;IAOnJ,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,4 +1,5 @@
1
1
  import { computed as e, toValue as t } from "vue";
2
+ //#region src/components/PlAgGridColumnManager/useFilteredItems.ts
2
3
  function n(n) {
3
4
  let i = e(() => {
4
5
  let { items: e, query: i, getStrings: a } = t(n), o = [], s = /* @__PURE__ */ new Map();
@@ -43,6 +44,7 @@ function r(e, t) {
43
44
  match: !1
44
45
  }), i;
45
46
  }
47
+ //#endregion
46
48
  export { n as useFilteredItems };
47
49
 
48
50
  //# sourceMappingURL=useFilteredItems.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFilteredItems.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/useFilteredItems.ts"],"sourcesContent":["import { computed, type MaybeRefOrGetter, toValue } from \"vue\";\n\nexport function useFilteredItems<T>(\n props: MaybeRefOrGetter<{\n items: T[];\n query: string;\n getStrings: (item: T) => Iterable<string>;\n }>,\n) {\n const result = computed(() => {\n const { items, query, getStrings } = toValue(props);\n const filteredItems: T[] = [];\n const segments = new Map<string, StringSegment[]>();\n for (const item of items) {\n let kept = false;\n for (const string of getStrings(item)) {\n let stringSegments = segments.get(string);\n if (!stringSegments) {\n stringSegments = matchSubstrings(string, query);\n segments.set(string, stringSegments);\n }\n if (!kept && (!query || stringSegments.some(({ match }) => match))) {\n filteredItems.push(item);\n kept = true;\n }\n }\n }\n return { filteredItems, segments };\n });\n return {\n filteredItems: computed(() => result.value.filteredItems),\n segments: computed(() => result.value.segments),\n };\n}\n\n// Very naïve implementation of substring matching, doesn't handle Unicode well\n// Maybe one day we'll have nice things: https://github.com/tc39/ecma402/issues/506\nfunction matchSubstrings(haystack: string, needle: string): StringSegment[] {\n if (!needle) return [{ value: haystack, match: false }];\n const haystackLower = haystack.toLowerCase();\n const needleLower = needle.toLowerCase();\n const result: StringSegment[] = [];\n let prevEnd = 0;\n while (true) {\n const start = haystackLower.indexOf(needleLower, prevEnd);\n const end = start + needle.length;\n if (start < 0) break;\n if (prevEnd !== start) {\n result.push({ value: haystack.slice(prevEnd, start), match: false });\n }\n const prevSegment = result.at(-1);\n if (prevSegment?.match) {\n prevSegment.value += haystack.slice(start, end);\n } else {\n result.push({ value: haystack.slice(start, end), match: true });\n }\n prevEnd = end;\n }\n if (prevEnd < haystack.length) {\n result.push({ value: haystack.slice(prevEnd), match: false });\n }\n return result;\n}\n\ntype StringSegment = {\n value: string;\n match: boolean;\n};\n"],"mappings":";AAEA,SAAgB,EACd,GAKA;CACA,IAAM,IAAS,QAAe;EAC5B,IAAM,EAAE,UAAO,UAAO,kBAAe,EAAQ,EAAM,EAC7C,IAAqB,EAAE,EACvB,oBAAW,IAAI,KAA8B;AACnD,OAAK,IAAM,KAAQ,GAAO;GACxB,IAAI,IAAO;AACX,QAAK,IAAM,KAAU,EAAW,EAAK,EAAE;IACrC,IAAI,IAAiB,EAAS,IAAI,EAAO;AAKzC,IAJK,MACH,IAAiB,EAAgB,GAAQ,EAAM,EAC/C,EAAS,IAAI,GAAQ,EAAe,GAElC,CAAC,MAAS,CAAC,KAAS,EAAe,MAAM,EAAE,eAAY,EAAM,MAC/D,EAAc,KAAK,EAAK,EACxB,IAAO;;;AAIb,SAAO;GAAE;GAAe;GAAU;GAClC;AACF,QAAO;EACL,eAAe,QAAe,EAAO,MAAM,cAAc;EACzD,UAAU,QAAe,EAAO,MAAM,SAAS;EAChD;;AAKH,SAAS,EAAgB,GAAkB,GAAiC;AAC1E,KAAI,CAAC,EAAQ,QAAO,CAAC;EAAE,OAAO;EAAU,OAAO;EAAO,CAAC;CACvD,IAAM,IAAgB,EAAS,aAAa,EACtC,IAAc,EAAO,aAAa,EAClC,IAA0B,EAAE,EAC9B,IAAU;AACd,UAAa;EACX,IAAM,IAAQ,EAAc,QAAQ,GAAa,EAAQ,EACnD,IAAM,IAAQ,EAAO;AAC3B,MAAI,IAAQ,EAAG;AACf,EAAI,MAAY,KACd,EAAO,KAAK;GAAE,OAAO,EAAS,MAAM,GAAS,EAAM;GAAE,OAAO;GAAO,CAAC;EAEtE,IAAM,IAAc,EAAO,GAAG,GAAG;AAMjC,EALI,GAAa,QACf,EAAY,SAAS,EAAS,MAAM,GAAO,EAAI,GAE/C,EAAO,KAAK;GAAE,OAAO,EAAS,MAAM,GAAO,EAAI;GAAE,OAAO;GAAM,CAAC,EAEjE,IAAU;;AAKZ,QAHI,IAAU,EAAS,UACrB,EAAO,KAAK;EAAE,OAAO,EAAS,MAAM,EAAQ;EAAE,OAAO;EAAO,CAAC,EAExD"}
1
+ {"version":3,"file":"useFilteredItems.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/useFilteredItems.ts"],"sourcesContent":["import { computed, type MaybeRefOrGetter, toValue } from \"vue\";\n\nexport function useFilteredItems<T>(\n props: MaybeRefOrGetter<{\n items: T[];\n query: string;\n getStrings: (item: T) => Iterable<string>;\n }>,\n) {\n const result = computed(() => {\n const { items, query, getStrings } = toValue(props);\n const filteredItems: T[] = [];\n const segments = new Map<string, StringSegment[]>();\n for (const item of items) {\n let kept = false;\n for (const string of getStrings(item)) {\n let stringSegments = segments.get(string);\n if (!stringSegments) {\n stringSegments = matchSubstrings(string, query);\n segments.set(string, stringSegments);\n }\n if (!kept && (!query || stringSegments.some(({ match }) => match))) {\n filteredItems.push(item);\n kept = true;\n }\n }\n }\n return { filteredItems, segments };\n });\n return {\n filteredItems: computed(() => result.value.filteredItems),\n segments: computed(() => result.value.segments),\n };\n}\n\n// Very naïve implementation of substring matching, doesn't handle Unicode well\n// Maybe one day we'll have nice things: https://github.com/tc39/ecma402/issues/506\nfunction matchSubstrings(haystack: string, needle: string): StringSegment[] {\n if (!needle) return [{ value: haystack, match: false }];\n const haystackLower = haystack.toLowerCase();\n const needleLower = needle.toLowerCase();\n const result: StringSegment[] = [];\n let prevEnd = 0;\n while (true) {\n const start = haystackLower.indexOf(needleLower, prevEnd);\n const end = start + needle.length;\n if (start < 0) break;\n if (prevEnd !== start) {\n result.push({ value: haystack.slice(prevEnd, start), match: false });\n }\n const prevSegment = result.at(-1);\n if (prevSegment?.match) {\n prevSegment.value += haystack.slice(start, end);\n } else {\n result.push({ value: haystack.slice(start, end), match: true });\n }\n prevEnd = end;\n }\n if (prevEnd < haystack.length) {\n result.push({ value: haystack.slice(prevEnd), match: false });\n }\n return result;\n}\n\ntype StringSegment = {\n value: string;\n match: boolean;\n};\n"],"mappings":";;AAEA,SAAgB,EACd,GAKA;CACA,IAAM,IAAS,QAAe;EAC5B,IAAM,EAAE,UAAO,UAAO,kBAAe,EAAQ,EAAM,EAC7C,IAAqB,EAAE,EACvB,oBAAW,IAAI,KAA8B;AACnD,OAAK,IAAM,KAAQ,GAAO;GACxB,IAAI,IAAO;AACX,QAAK,IAAM,KAAU,EAAW,EAAK,EAAE;IACrC,IAAI,IAAiB,EAAS,IAAI,EAAO;AAKzC,IAJK,MACH,IAAiB,EAAgB,GAAQ,EAAM,EAC/C,EAAS,IAAI,GAAQ,EAAe,GAElC,CAAC,MAAS,CAAC,KAAS,EAAe,MAAM,EAAE,eAAY,EAAM,MAC/D,EAAc,KAAK,EAAK,EACxB,IAAO;;;AAIb,SAAO;GAAE;GAAe;GAAU;GAClC;AACF,QAAO;EACL,eAAe,QAAe,EAAO,MAAM,cAAc;EACzD,UAAU,QAAe,EAAO,MAAM,SAAS;EAChD;;AAKH,SAAS,EAAgB,GAAkB,GAAiC;AAC1E,KAAI,CAAC,EAAQ,QAAO,CAAC;EAAE,OAAO;EAAU,OAAO;EAAO,CAAC;CACvD,IAAM,IAAgB,EAAS,aAAa,EACtC,IAAc,EAAO,aAAa,EAClC,IAA0B,EAAE,EAC9B,IAAU;AACd,UAAa;EACX,IAAM,IAAQ,EAAc,QAAQ,GAAa,EAAQ,EACnD,IAAM,IAAQ,EAAO;AAC3B,MAAI,IAAQ,EAAG;AACf,EAAI,MAAY,KACd,EAAO,KAAK;GAAE,OAAO,EAAS,MAAM,GAAS,EAAM;GAAE,OAAO;GAAO,CAAC;EAEtE,IAAM,IAAc,EAAO,GAAG,GAAG;AAMjC,EALI,GAAa,QACf,EAAY,SAAS,EAAS,MAAM,GAAO,EAAI,GAE/C,EAAO,KAAK;GAAE,OAAO,EAAS,MAAM,GAAO,EAAI;GAAE,OAAO;GAAM,CAAC,EAEjE,IAAU;;AAKZ,QAHI,IAAU,EAAS,UACrB,EAAO,KAAK;EAAE,OAAO,EAAS,MAAM,EAAQ;EAAE,OAAO;EAAO,CAAC,EAExD"}
@@ -1,5 +1,7 @@
1
1
  import e from "./PlAgRowNumCheckbox.vue2.js";
2
+ //#region src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue
2
3
  var t = e;
4
+ //#endregion
3
5
  export { t as default };
4
6
 
5
7
  //# sourceMappingURL=PlAgRowNumCheckbox.js.map
@@ -3,6 +3,7 @@ import { isSelectionEnabled as t } from "../../AgGridVue/selection.js";
3
3
  import "../../lib.js";
4
4
  import { computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, defineComponent as o, normalizeClass as s, onBeforeMount as c, onBeforeUnmount as l, openBlock as u, ref as d, toDisplayString as f, unref as p } from "vue";
5
5
  import { PlCheckbox as m } from "@milaboratories/uikit";
6
+ //#region src/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue?vue&type=script&setup=true&lang.ts
6
7
  var h = /* @__PURE__ */ o({
7
8
  __name: "PlAgRowNumCheckbox",
8
9
  props: { params: {} },
@@ -33,6 +34,7 @@ var h = /* @__PURE__ */ o({
33
34
  }, null, 8, ["modelValue", "class"])) : i("", !0)], 2));
34
35
  }
35
36
  });
37
+ //#endregion
36
38
  export { h as default };
37
39
 
38
40
  //# sourceMappingURL=PlAgRowNumCheckbox.vue2.js.map
@@ -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 :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"}
@@ -5,6 +5,7 @@ import './pl-ag-row-num-checkbox.css';var e = {
5
5
  "allowed-selection": "_allowed-selection_1g3ar_15",
6
6
  checked: "_checked_1g3ar_23"
7
7
  };
8
+ //#endregion
8
9
  export { e as default };
9
10
 
10
11
  //# sourceMappingURL=pl-ag-row-num-checkbox.module.js.map
@@ -1,5 +1,7 @@
1
1
  import e from "./PlAgRowNumHeader.vue2.js";
2
+ //#region src/components/PlAgRowNumHeader.vue
2
3
  var t = e;
4
+ //#endregion
3
5
  export { t as default };
4
6
 
5
7
  //# sourceMappingURL=PlAgRowNumHeader.js.map
@@ -2,6 +2,7 @@ import { deselectAll as e, getSelectedRowsCount as t, getTotalRowsCount as n, is
2
2
  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
+ //#region src/components/PlAgRowNumHeader.vue?vue&type=script&setup=true&lang.ts
5
6
  var g = { style: {
6
7
  position: "absolute",
7
8
  inset: "0",
@@ -34,6 +35,7 @@ var g = { style: {
34
35
  }, null, 8, ["model-value", "indeterminate"])) : (d(), s("span", _, p(c.params.displayName), 1))]));
35
36
  }
36
37
  });
38
+ //#endregion
37
39
  export { v as default };
38
40
 
39
41
  //# sourceMappingURL=PlAgRowNumHeader.vue2.js.map