@platforma-sdk/ui-vue 1.42.18 → 1.42.19

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.
@@ -1,16 +1,18 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.42.18 build /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.42.19 build /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > vite build
5
5
 
6
6
  vite v6.3.5 building for production...
7
7
  transforming...
8
- ✓ 901 modules transformed.
8
+ ✓ 903 modules transformed.
9
+ Export "default" of module "src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue" was reexported through module "src/components/PlAgGridColumnManager/index.ts" while both modules are dependencies of each other and will end up in different chunks by current Rollup settings. This scenario is not well supported at the moment as it will produce a circular dependency between chunks and will likely lead to broken execution order.
10
+ Either change the import in "src/components/PlAgDataTable/PlAgDataTableV2.vue?vue&type=script&setup=true&lang.ts" to point directly to the exporting module or do not use "output.preserveModules" to ensure these modules end up in the same chunk.
9
11
  rendering chunks...
10
12
 
11
13
  [vite:dts] Start generate declaration files...
12
14
  computing gzip size...
13
- [vite:dts] Declaration files built in 6391ms.
15
+ [vite:dts] Declaration files built in 5734ms.
14
16
 
15
17
  dist/_virtual/re.js  0.08 kB │ gzip: 0.10 kB │ map: 0.09 kB
16
18
  dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js  0.09 kB │ gzip: 0.10 kB │ map: 0.32 kB
@@ -48,7 +50,6 @@ computing gzip size...
48
50
  dist/components/PlTableFilters/PlTableAddFilterV2.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
49
51
  dist/plugins/Monetization/MonetizationSidebar.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
50
52
  dist/components/PlTableFilters/PlTableFilterEntryV2.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
51
- dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
52
53
  dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js  0.13 kB │ gzip: 0.12 kB │ map: 0.11 kB
53
54
  dist/lib/ui/uikit/dist/components/PlRadio/keys.js  0.13 kB │ gzip: 0.13 kB │ map: 0.46 kB
54
55
  dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js  0.13 kB │ gzip: 0.13 kB │ map: 0.49 kB
@@ -238,13 +239,14 @@ computing gzip size...
238
239
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/16_arrow-right.svg.js  0.31 kB │ gzip: 0.25 kB │ map: 0.52 kB
239
240
  dist/_virtual/stringify.js  0.31 kB │ gzip: 0.22 kB │ map: 0.10 kB
240
241
  dist/components/PlAnnotations/components/PlAnnotationsModal.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
241
- dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
242
242
  dist/components/PlAnnotations/components/AnnotationsSidebar.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
243
+ dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js  0.31 kB │ gzip: 0.22 kB │ map: 0.11 kB
243
244
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js  0.31 kB │ gzip: 0.22 kB │ map: 0.76 kB
244
245
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_chevron-first.svg.js  0.31 kB │ gzip: 0.25 kB │ map: 0.53 kB
245
246
  dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js  0.31 kB │ gzip: 0.19 kB │ map: 0.65 kB
246
247
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/16_chevron-last.svg.js  0.32 kB │ gzip: 0.25 kB │ map: 0.53 kB
247
248
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_radio-button-checked.svg.js  0.32 kB │ gzip: 0.25 kB │ map: 0.57 kB
249
+ dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js  0.32 kB │ gzip: 0.23 kB │ map: 0.12 kB
248
250
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_chevron-last.svg.js  0.32 kB │ gzip: 0.26 kB │ map: 0.53 kB
249
251
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_sort.svg.js  0.32 kB │ gzip: 0.25 kB │ map: 0.51 kB
250
252
  dist/lib/ui/uikit/dist/components/PlChartHistogram/drawThreshold.js  0.32 kB │ gzip: 0.23 kB │ map: 1.03 kB
@@ -370,6 +372,7 @@ computing gzip size...
370
372
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/16_y-axis.svg.js  0.45 kB │ gzip: 0.30 kB │ map: 0.68 kB
371
373
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_delete-circle.svg.js  0.45 kB │ gzip: 0.31 kB │ map: 0.68 kB
372
374
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_zoom-in.svg.js  0.45 kB │ gzip: 0.30 kB │ map: 0.68 kB
375
+ dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue3.js  0.45 kB │ gzip: 0.33 kB │ map: 0.11 kB
373
376
  dist/computedResult.js  0.45 kB │ gzip: 0.27 kB │ map: 2.41 kB
374
377
  dist/lib/ui/uikit/dist/assets/images/24_checkbox-light-enabled-checked.svg.js  0.45 kB │ gzip: 0.33 kB │ map: 0.74 kB
375
378
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_frame-type-all.svg.js  0.46 kB │ gzip: 0.31 kB │ map: 0.68 kB
@@ -634,6 +637,7 @@ computing gzip size...
634
637
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_dna-import.svg.js  1.11 kB │ gzip: 0.67 kB │ map: 1.34 kB
635
638
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_progress.svg.js  1.11 kB │ gzip: 0.64 kB │ map: 1.32 kB
636
639
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_settings.svg.js  1.13 kB │ gzip: 0.60 kB │ map: 1.35 kB
640
+ dist/components/PlAgGridColumnManager/useFilteredItems.js  1.13 kB │ gzip: 0.58 kB │ map: 3.94 kB
637
641
  dist/lib/ui/uikit/dist/components/PlTabs/Tab.vue.js  1.13 kB │ gzip: 0.62 kB │ map: 1.58 kB
638
642
  dist/lib/ui/uikit/dist/components/PlSplash/PlSplash.vue.js  1.14 kB │ gzip: 0.56 kB │ map: 0.13 kB
639
643
  dist/lib/ui/uikit/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js  1.14 kB │ gzip: 0.58 kB │ map: 1.64 kB
@@ -784,7 +788,6 @@ computing gzip size...
784
788
  dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js  3.32 kB │ gzip: 1.34 kB │ map: 4.05 kB
785
789
  dist/components/PlAgDataTable/sources/table-state-v2.js  3.33 kB │ gzip: 1.16 kB │ map: 9.95 kB
786
790
  dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/duplex.js  3.33 kB │ gzip: 1.22 kB │ map: 10.70 kB
787
- dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js  3.34 kB │ gzip: 1.30 kB │ map: 4.05 kB
788
791
  dist/components/PlTableFilters/PlTableAddFilterV2.vue.js  3.42 kB │ gzip: 1.28 kB │ map: 3.95 kB
789
792
  dist/lib/ui/uikit/dist/generated/icons-24.js  3.43 kB │ gzip: 1.10 kB │ map: 5.86 kB
790
793
  dist/lib/ui/uikit/dist/node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/axis.js  3.49 kB │ gzip: 1.30 kB │ map: 10.47 kB
@@ -809,6 +812,7 @@ computing gzip size...
809
812
  dist/node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js  4.03 kB │ gzip: 1.23 kB │ map: 12.96 kB
810
813
  dist/lib/ui/uikit/dist/components/PlChip/PlChip.vue.js  4.05 kB │ gzip: 1.61 kB │ map: 1.36 kB
811
814
  dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js  4.10 kB │ gzip: 1.41 kB │ map: 5.48 kB
815
+ dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js  4.20 kB │ gzip: 1.57 kB │ map: 5.00 kB
812
816
  dist/lib/ui/uikit/dist/assets/icons/icon-assets-min/24_heatmap.svg.js  4.38 kB │ gzip: 0.99 kB │ map: 4.71 kB
813
817
  dist/lib/ui/uikit/dist/components/PlBtnGhost/PlBtnGhost.vue.js  4.39 kB │ gzip: 1.66 kB │ map: 2.39 kB
814
818
  dist/lib/ui/uikit/dist/composition/useSortable2.js  4.41 kB │ gzip: 1.51 kB │ map: 13.13 kB
@@ -880,4 +884,4 @@ computing gzip size...
880
884
  dist/lib/ui/uikit/dist/index.js 497.77 kB │ gzip: 191.75 kB │ map: 0.18 kB
881
885
  dist/lib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js 600.06 kB │ gzip: 204.69 kB │ map: 0.21 kB
882
886
  dist/lib/ui/uikit/dist/components/DataTable/TableComponent.vue.js 601.95 kB │ gzip: 205.54 kB │ map: 0.27 kB
883
- ✓ built in 10.68s
887
+ ✓ built in 9.81s
@@ -1,5 +1,5 @@
1
1
   WARN  Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-sdk/ui-vue@1.42.18 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.42.19 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
4
4
  > vue-tsc --noEmit --project ./tsconfig.json
5
5
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @platforma-sdk/ui-vue
2
2
 
3
+ ## 1.42.19
4
+
5
+ ### Patch Changes
6
+
7
+ - 77103d0: PlAgDataTable: search field in columns manager
8
+
3
9
  ## 1.42.18
4
10
 
5
11
  ### Patch Changes
@@ -1,7 +1,7 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var E=document.createElement("style");E.appendChild(document.createTextNode(".grid-overlay-container{height:calc(100% - 1px);margin-top:1px;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:var(--bg-base-light)}.grid-icon-sad-cat{background-image:url(data:image/png;base64,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);background-repeat:no-repeat}.grid-overlay-container>div{height:300px;width:300px;background-size:contain;background-position:center}.grid-overlay-container>span{color:var(--txt-mask)}")),document.head.appendChild(E)}}catch(h){console.error("vite-plugin-css-injected-by-js",h)}})();
2
- import { defineComponent as ue, mergeModels as U, useModel as q, toRefs as de, computed as F, ref as M, shallowRef as _, watch as R, effectScope as ce, createElementBlock as me, openBlock as I, normalizeClass as H, createBlock as T, createCommentVNode as $, createVNode as fe, unref as b, isRef as Q, withCtx as W, renderSlot as j } from "vue";
2
+ import { defineComponent as ue, mergeModels as U, useModel as q, toRefs as de, computed as M, ref as F, shallowRef as H, watch as R, effectScope as ce, createElementBlock as me, openBlock as I, normalizeClass as Q, createBlock as T, createCommentVNode as z, createVNode as fe, unref as b, isRef as W, withCtx as j, renderSlot as X } from "vue";
3
3
  import { isJsonEqual as i, promiseTimeout as ve } from "../../lib/util/helpers/dist/index.js";
4
- import { createPlSelectionModel as z, getRawPlatformaInstance as pe } from "../../sdk/model/dist/index.js";
4
+ import { createPlSelectionModel as $, getRawPlatformaInstance as pe } from "../../sdk/model/dist/index.js";
5
5
  import { AgGridVue as Se } from "ag-grid-vue3";
6
6
  import { AgGridTheme as ye } from "../../aggrid.js";
7
7
  import ge from "../PlAgCsvExporter/PlAgCsvExporter.vue.js";
@@ -13,13 +13,13 @@ import De from "./PlAgOverlayNoRows.vue.js";
13
13
 
14
14
  import Oe from "./PlAgRowCount.vue.js";
15
15
  import { DeferredCircular as xe, ensureNodeVisible as Ie } from "./sources/focus-row.js";
16
- import { PlAgDataTableRowNumberColId as X, autoSizeRowNumberColumn as be } from "./sources/row-number.js";
16
+ import { PlAgDataTableRowNumberColId as Y, autoSizeRowNumberColumn as be } from "./sources/row-number.js";
17
17
  import { calculateGridOptions as Pe } from "./sources/table-source-v2.js";
18
18
  import { useTableState as ke } from "./sources/table-state-v2.js";
19
19
  import "../../lib/ui/uikit/dist/index.js";
20
20
  import { watchCached as Te } from "../../lib/ui/uikit/dist/composition/watchCached.js";
21
- import { parseJson as Y, getAxisId as Z, matchAxisId as ee, canonicalizeJson as te } from "../../lib/model/common/dist/index.js";
22
- const Xe = /* @__PURE__ */ ue({
21
+ import { parseJson as Z, getAxisId as _, matchAxisId as ee, canonicalizeJson as te } from "../../lib/model/common/dist/index.js";
22
+ const Ye = /* @__PURE__ */ ue({
23
23
  __name: "PlAgDataTableV2",
24
24
  props: /* @__PURE__ */ U({
25
25
  settings: {},
@@ -41,8 +41,8 @@ const Xe = /* @__PURE__ */ ue({
41
41
  selectionModifiers: {}
42
42
  }),
43
43
  emits: /* @__PURE__ */ U(["rowDoubleClicked", "cellButtonClicked", "newDataRendered"], ["update:modelValue", "update:selection"]),
44
- setup(B, { expose: le, emit: oe }) {
45
- const ae = q(B, "modelValue"), o = q(B, "selection"), d = B, { settings: D } = de(d), G = oe, { gridState: O, sheetsState: P, filtersState: k } = ke(ae, D), se = F(() => {
44
+ setup(G, { expose: le, emit: oe }) {
45
+ const ae = q(G, "modelValue"), o = q(G, "selection"), d = G, { settings: D } = de(d), B = oe, { gridState: O, sheetsState: P, filtersState: k } = ke(ae, D), se = M(() => {
46
46
  const e = { ...D.value };
47
47
  return e.sourceId !== null ? {
48
48
  sheets: e.sheets ?? [],
@@ -51,7 +51,7 @@ const Xe = /* @__PURE__ */ ue({
51
51
  sheets: [],
52
52
  cachedState: []
53
53
  };
54
- }), V = M([]), ne = F(() => {
54
+ }), V = F([]), ne = M(() => {
55
55
  const e = { ...D.value }, t = V.value;
56
56
  return e.sourceId !== null && t.length > 0 ? {
57
57
  columns: t,
@@ -62,7 +62,7 @@ const Xe = /* @__PURE__ */ ue({
62
62
  config: () => ({}),
63
63
  cachedState: []
64
64
  };
65
- }), c = _(null), x = new xe(), r = _({
65
+ }), c = H(null), x = new xe(), r = H({
66
66
  animateRows: !1,
67
67
  suppressColumnMoveAnimation: !0,
68
68
  cellSelection: !o.value,
@@ -79,12 +79,12 @@ const Xe = /* @__PURE__ */ ue({
79
79
  onSelectionChanged: (e) => {
80
80
  var t;
81
81
  if (o.value) {
82
- const l = e.api.getServerSideSelectionState(), a = ((t = l == null ? void 0 : l.toggledNodes) == null ? void 0 : t.map((s) => Y(s))) ?? [];
82
+ const l = e.api.getServerSideSelectionState(), a = ((t = l == null ? void 0 : l.toggledNodes) == null ? void 0 : t.map((s) => Z(s))) ?? [];
83
83
  i(o.value.selectedKeys, a) || (o.value = { ...o.value, selectedKeys: a });
84
84
  }
85
85
  },
86
86
  onRowDoubleClicked: (e) => {
87
- e.data && e.data.axesKey && G("rowDoubleClicked", e.data.axesKey);
87
+ e.data && e.data.axesKey && B("rowDoubleClicked", e.data.axesKey);
88
88
  },
89
89
  defaultColDef: {
90
90
  suppressHeaderMenuButton: !0,
@@ -155,7 +155,7 @@ const Xe = /* @__PURE__ */ ue({
155
155
  e.state
156
156
  ), e.api.autoSizeColumns(
157
157
  e.api.getAllDisplayedColumns().filter(
158
- (t) => t.getColId() !== X
158
+ (t) => t.getColId() !== Y
159
159
  )
160
160
  );
161
161
  },
@@ -172,7 +172,7 @@ const Xe = /* @__PURE__ */ ue({
172
172
  columnVisibility: e.columnVisibility
173
173
  };
174
174
  }
175
- const E = M(0);
175
+ const E = F(0);
176
176
  R(
177
177
  () => [c.value, O.value],
178
178
  ([e, t]) => {
@@ -192,7 +192,7 @@ const Xe = /* @__PURE__ */ ue({
192
192
  },
193
193
  { immediate: !0 }
194
194
  );
195
- const re = F(() => d.cellRendererSelector ?? null);
195
+ const re = M(() => d.cellRendererSelector ?? null);
196
196
  R(
197
197
  () => [c.value, re.value],
198
198
  ([e, t]) => {
@@ -216,7 +216,7 @@ const Xe = /* @__PURE__ */ ue({
216
216
  const a = (h = o.value) == null ? void 0 : h.axesSpec;
217
217
  if (!a || a.length !== e.length) return !1;
218
218
  const s = e.map((p) => {
219
- const S = Z(p);
219
+ const S = _(p);
220
220
  return a.findIndex((w) => ee(w, S));
221
221
  }), u = new Set(s);
222
222
  if (u.has(-1) || u.size !== e.length) return !1;
@@ -241,7 +241,7 @@ const Xe = /* @__PURE__ */ ue({
241
241
  });
242
242
  function ie(e) {
243
243
  const t = (l) => !("children" in l);
244
- return e ? e.filter(t).filter((l) => l.colId && l.colId !== X) : [];
244
+ return e ? e.filter(t).filter((l) => l.colId && l.colId !== Y) : [];
245
245
  }
246
246
  Te(
247
247
  () => r.value.columnDefs,
@@ -250,14 +250,14 @@ const Xe = /* @__PURE__ */ ue({
250
250
  V.value = [];
251
251
  else {
252
252
  const l = ie(e);
253
- V.value = l.map((a) => Y(a.colId).labeled);
253
+ V.value = l.map((a) => Z(a.colId).labeled);
254
254
  }
255
255
  },
256
256
  { immediate: !0 }
257
257
  );
258
- const L = z();
258
+ const A = $();
259
259
  let v = null;
260
- const C = M(0);
260
+ const C = F(0);
261
261
  return R(
262
262
  () => [c.value, D.value],
263
263
  ([e, t]) => {
@@ -274,7 +274,7 @@ const Xe = /* @__PURE__ */ ue({
274
274
  },
275
275
  columnDefs: void 0,
276
276
  serverSideDatasource: void 0
277
- }), o.value && (o.value && !i(o.value, L) && (o.value = z()), e.setServerSideSelectionState({
277
+ }), o.value && (o.value && !i(o.value, A) && (o.value = $()), e.setServerSideSelectionState({
278
278
  selectAll: !1,
279
279
  toggledNodes: []
280
280
  }));
@@ -286,7 +286,7 @@ const Xe = /* @__PURE__ */ ue({
286
286
  ...r.value.loadingOverlayComponentParams,
287
287
  notReady: !1
288
288
  }
289
- }), o.value && (v != null && v.sourceId) && (o.value && !i(o.value, L) && (o.value = z()), e.setServerSideSelectionState({
289
+ }), o.value && (v != null && v.sourceId) && (o.value && !i(o.value, A) && (o.value = $()), e.setServerSideSelectionState({
290
290
  selectAll: !1,
291
291
  toggledNodes: []
292
292
  })));
@@ -312,7 +312,7 @@ const Xe = /* @__PURE__ */ ue({
312
312
  cellButtonAxisParams: {
313
313
  showCellButtonForAxisId: d.showCellButtonForAxisId,
314
314
  cellButtonInvokeRowsOnDoubleClick: d.cellButtonInvokeRowsOnDoubleClick,
315
- trigger: (n) => G("cellButtonClicked", n)
315
+ trigger: (n) => B("cellButtonClicked", n)
316
316
  }
317
317
  }).then((n) => {
318
318
  if (e.isDestroyed() || u !== C.value) return;
@@ -329,7 +329,7 @@ const Xe = /* @__PURE__ */ ue({
329
329
  toggledNodes: []
330
330
  });
331
331
  }
332
- const S = g.map(Z).map((f) => m.findIndex((K) => ee(K, f))), w = new Set(S);
332
+ const S = g.map(_).map((f) => m.findIndex((K) => ee(K, f))), w = new Set(S);
333
333
  if (w.has(-1) || w.size !== m.length) {
334
334
  const f = { axesSpec: m, selectedKeys: [] };
335
335
  return i(o.value, f) || (o.value = f), e.setServerSideSelectionState({
@@ -337,10 +337,10 @@ const Xe = /* @__PURE__ */ ue({
337
337
  toggledNodes: []
338
338
  });
339
339
  }
340
- const A = p.map((f) => S.map((K) => f[K])), J = { axesSpec: m, selectedKeys: A };
340
+ const L = p.map((f) => S.map((K) => f[K])), J = { axesSpec: m, selectedKeys: L };
341
341
  return i(o.value, J) || (o.value = J), e.setServerSideSelectionState({
342
342
  selectAll: !1,
343
- toggledNodes: A.map((f) => te(f))
343
+ toggledNodes: L.map((f) => te(f))
344
344
  });
345
345
  }
346
346
  }
@@ -350,7 +350,7 @@ const Xe = /* @__PURE__ */ ue({
350
350
  e.isDestroyed() || u !== C.value || e.updateGridOptions({
351
351
  loading: !1
352
352
  });
353
- }), x.promise.then(() => G("newDataRendered"));
353
+ }), x.promise.then(() => B("newDataRendered"));
354
354
  } catch (s) {
355
355
  console.trace(s);
356
356
  } finally {
@@ -379,45 +379,45 @@ const Xe = /* @__PURE__ */ ue({
379
379
  });
380
380
  }
381
381
  ), (e, t) => (I(), me("div", {
382
- class: H(e.$style.container)
382
+ class: Q(e.$style.container)
383
383
  }, [
384
384
  c.value && !e.disableColumnsPanel ? (I(), T(b(Ce), {
385
385
  key: 0,
386
386
  api: c.value
387
- }, null, 8, ["api"])) : $("", !0),
388
- e.disableFiltersPanel ? $("", !0) : (I(), T(he, {
387
+ }, null, 8, ["api"])) : z("", !0),
388
+ e.disableFiltersPanel ? z("", !0) : (I(), T(he, {
389
389
  key: 1,
390
390
  modelValue: b(k),
391
- "onUpdate:modelValue": t[0] || (t[0] = (l) => Q(k) ? k.value = l : null),
391
+ "onUpdate:modelValue": t[0] || (t[0] = (l) => W(k) ? k.value = l : null),
392
392
  settings: ne.value
393
393
  }, null, 8, ["modelValue", "settings"])),
394
394
  c.value && e.showExportButton ? (I(), T(ge, {
395
395
  key: 2,
396
396
  api: c.value
397
- }, null, 8, ["api"])) : $("", !0),
397
+ }, null, 8, ["api"])) : z("", !0),
398
398
  fe(we, {
399
399
  modelValue: b(P),
400
- "onUpdate:modelValue": t[1] || (t[1] = (l) => Q(P) ? P.value = l : null),
400
+ "onUpdate:modelValue": t[1] || (t[1] = (l) => W(P) ? P.value = l : null),
401
401
  settings: se.value
402
402
  }, {
403
- before: W(() => [
404
- j(e.$slots, "before-sheets")
403
+ before: j(() => [
404
+ X(e.$slots, "before-sheets")
405
405
  ]),
406
- after: W(() => [
407
- j(e.$slots, "after-sheets")
406
+ after: j(() => [
407
+ X(e.$slots, "after-sheets")
408
408
  ]),
409
409
  _: 3
410
410
  }, 8, ["modelValue", "settings"]),
411
411
  (I(), T(b(Se), {
412
412
  key: E.value,
413
413
  theme: b(ye),
414
- class: H(e.$style.grid),
414
+ class: Q(e.$style.grid),
415
415
  "grid-options": r.value
416
416
  }, null, 8, ["theme", "class", "grid-options"]))
417
417
  ], 2));
418
418
  }
419
419
  });
420
420
  export {
421
- Xe as default
421
+ Ye as default
422
422
  };
423
423
  //# sourceMappingURL=PlAgDataTableV2.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgGridColumnManager.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"names":[],"mappings":"AA6FA,OAAO,EAAkD,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAKlG,KAAK,WAAW,GAAG;IACjB;;;;;OAKG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;;AA0LF,wBAOG"}
1
+ {"version":3,"file":"PlAgGridColumnManager.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"names":[],"mappings":"AAsHA,OAAO,EAAkD,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAKlG,KAAK,WAAW,GAAG;IACjB;;;;;OAKG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;;AA+NF,wBAOG"}
@@ -1,89 +1,10 @@
1
- import { defineComponent as b, toRefs as k, ref as d, watch as V, computed as w, createElementBlock as y, openBlock as g, createBlock as D, createCommentVNode as T, createVNode as r, unref as l, Teleport as P, withModifiers as M, withCtx as a, createTextVNode as m, toDisplayString as N } from "vue";
2
- import "../../lib/ui/uikit/dist/index.js";
3
- import { PlAgDataTableRowNumberColId as B } from "../PlAgDataTable/sources/row-number.js";
4
- import { usePlBlockPageTitleTeleportTarget as G } from "../../lib/ui/uikit/dist/layout/PlBlockPage/usePlBlockPageTitleTeleportTarget.js";
5
- import h from "../../lib/ui/uikit/dist/components/PlBtnGhost/PlBtnGhost.vue.js";
6
- import x from "../../lib/ui/uikit/dist/components/PlSlideModal/PlSlideModal.vue.js";
7
- import A from "../../lib/ui/uikit/dist/components/PlElementList/PlElementList.vue.js";
8
- const j = /* @__PURE__ */ b({
9
- __name: "PlAgGridColumnManager",
10
- props: {
11
- api: {},
12
- width: {}
13
- },
14
- setup(p) {
15
- const f = p, { api: n } = k(f), i = d([]);
16
- V(
17
- () => n.value,
18
- (o) => {
19
- o.isDestroyed() || (o.addEventListener("displayedColumnsChanged", (t) => {
20
- i.value = t.api.getAllGridColumns();
21
- }), i.value = o.getAllGridColumns(), i.value.length > 0 && o.moveColumns(i.value, 0));
22
- },
23
- { immediate: !0 }
24
- );
25
- const c = w(() => i.value.map((o) => ({
26
- column: o,
27
- id: o.getId(),
28
- label: o.getColDef().headerName
29
- }))), s = d(!1), u = G("PlAgGridColumnManager");
30
- return (o, t) => (g(), y("div", null, [
31
- l(u) ? (g(), D(P, {
32
- key: 0,
33
- to: l(u)
34
- }, [
35
- r(l(h), {
36
- icon: "columns",
37
- onClick: t[0] || (t[0] = M((e) => s.value = !s.value, ["stop"]))
38
- }, {
39
- default: a(() => t[2] || (t[2] = [
40
- m(" Columns ")
41
- ])),
42
- _: 1
43
- })
44
- ], 8, ["to"])) : T("", !0),
45
- r(l(x), {
46
- modelValue: s.value,
47
- "onUpdate:modelValue": t[1] || (t[1] = (e) => s.value = e),
48
- width: o.width,
49
- "close-on-outside-click": ""
50
- }, {
51
- title: a(() => t[3] || (t[3] = [
52
- m("Manage Columns")
53
- ])),
54
- default: a(() => [
55
- r(l(A), {
56
- items: c.value,
57
- "get-item-key": (e) => e.id,
58
- "is-draggable": (e) => !e.column.getColDef().lockPosition,
59
- "on-sort": (e, v) => {
60
- if (!l(n).isDestroyed()) {
61
- const C = i.value[e];
62
- l(n).moveColumns([C], v);
63
- }
64
- return !0;
65
- },
66
- "on-toggle": (e) => {
67
- l(n).isDestroyed() || l(n).setColumnsVisible([e.column], !e.column.isVisible());
68
- },
69
- "is-toggled": (e) => !e.column.isVisible(),
70
- "is-toggable": (e) => e.id !== l(B),
71
- "is-pinned": (e) => !!e.column.getColDef().lockPosition,
72
- "is-pinnable": () => !1,
73
- "disable-removing": ""
74
- }, {
75
- "item-title": a(({ item: e }) => [
76
- m(N(e.label), 1)
77
- ]),
78
- _: 1
79
- }, 8, ["items", "get-item-key", "is-draggable", "on-sort", "on-toggle", "is-toggled", "is-toggable", "is-pinned"])
80
- ]),
81
- _: 1
82
- }, 8, ["modelValue", "width"])
83
- ]));
84
- }
85
- });
1
+ import o from "./PlAgGridColumnManager.vue2.js";
2
+ import s from "./PlAgGridColumnManager.vue3.js";
3
+ import r from "../../_virtual/_plugin-vue_export-helper.js";
4
+ const t = {
5
+ $style: s
6
+ }, c = /* @__PURE__ */ r(o, [["__cssModules", t]]);
86
7
  export {
87
- j as default
8
+ c as default
88
9
  };
89
10
  //# sourceMappingURL=PlAgGridColumnManager.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgGridColumnManager.vue.js","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { type Column, type DisplayedColumnsChangedEvent, type GridApi } from 'ag-grid-enterprise';\nimport { PlBtnGhost, PlSlideModal, PlElementList, usePlBlockPageTitleTeleportTarget } from '@milaboratories/uikit';\nimport { ref, toRefs, watch, computed } from 'vue';\nimport { PlAgDataTableRowNumberColId } from '../PlAgDataTable/sources/row-number';\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 slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget('PlAgGridColumnManager');\n</script>\n\n<template>\n <div>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost icon=\"columns\" @click.stop=\"slideModal = !slideModal\">\n Columns\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"slideModal\" :width=\"width\" close-on-outside-click>\n <template #title>Manage Columns</template>\n <PlElementList\n :items=\"items\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"(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 :on-toggle=\"(item) => {\n if (!gridApi.isDestroyed()) {\n gridApi.setColumnsVisible([item.column], !item.column.isVisible());\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-removing\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n </PlElementList>\n </PlSlideModal>\n </div>\n</template>\n"],"names":["props","__props","gridApi","toRefs","columns","ref","watch","event","items","computed","col","slideModal","teleportTarget","usePlBlockPageTitleTeleportTarget"],"mappings":";;;;;;;;;;;;;;AAMA,UAAMA,IAAQC,GAcR,EAAE,KAAKC,MAAYC,EAAOH,CAAK,GAE/BI,IAAUC,EAAc,EAAE;AAChC,IAAAC;AAAA,MACE,MAAMJ,EAAQ;AAAA,MACd,CAACA,MAAY;AACPA,QAAAA,EAAQ,kBAEZA,EAAQ,iBAAiB,2BAA2B,CAACK,MAAwC;AACnF,UAAAH,EAAA,QAAQG,EAAM,IAAI,kBAAkB;AAAA,QAAA,CAC7C,GAEOH,EAAA,QAAQF,EAAQ,kBAAkB,GACtCE,EAAQ,MAAM,SAAS,KACzBF,EAAQ,YAAYE,EAAQ,OAAO,CAAC;AAAA,MAExC;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IACpB;AAEM,UAAAI,IAAQC,EAAS,MACdL,EAAQ,MAAM,IAAI,CAACM,OAAS;AAAA,MACjC,QAAQA;AAAA,MACR,IAAIA,EAAI,MAAM;AAAA,MACd,OAAOA,EAAI,YAAY;AAAA,IAAA,EACvB,CACH,GAEKC,IAAaN,EAAI,EAAK,GACtBO,IAAiBC,EAAkC,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlAgGridColumnManager.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,5 +1,106 @@
1
- import f from "./PlAgGridColumnManager.vue.js";
1
+ import { defineComponent as w, toRefs as D, ref as p, watch as T, computed as P, createElementBlock as f, openBlock as m, createBlock as M, createCommentVNode as N, createVNode as u, unref as t, Teleport as h, withModifiers as B, withCtx as d, createTextVNode as v, createElementVNode as G, Fragment as I, renderList as A, normalizeClass as E, toDisplayString as R } from "vue";
2
+ import "../../lib/ui/uikit/dist/index.js";
3
+ import { PlAgDataTableRowNumberColId as $ } from "../PlAgDataTable/sources/row-number.js";
4
+ import { useFilteredItems as q } from "./useFilteredItems.js";
5
+ import { usePlBlockPageTitleTeleportTarget as x } from "../../lib/ui/uikit/dist/layout/PlBlockPage/usePlBlockPageTitleTeleportTarget.js";
6
+ import F from "../../lib/ui/uikit/dist/components/PlBtnGhost/PlBtnGhost.vue.js";
7
+ import L from "../../lib/ui/uikit/dist/components/PlSlideModal/PlSlideModal.vue.js";
8
+ import S from "../../lib/ui/uikit/dist/components/PlSearchField/PlSearchField.vue.js";
9
+ import U from "../../lib/ui/uikit/dist/components/PlElementList/PlElementList.vue.js";
10
+ const Y = /* @__PURE__ */ w({
11
+ __name: "PlAgGridColumnManager",
12
+ props: {
13
+ api: {},
14
+ width: {}
15
+ },
16
+ setup(C) {
17
+ const b = C, { api: n } = D(b), i = p([]);
18
+ T(
19
+ () => n.value,
20
+ (l) => {
21
+ l.isDestroyed() || (l.addEventListener("displayedColumnsChanged", (o) => {
22
+ i.value = o.api.getAllGridColumns();
23
+ }), i.value = l.getAllGridColumns(), i.value.length > 0 && l.moveColumns(i.value, 0));
24
+ },
25
+ { immediate: !0 }
26
+ );
27
+ const V = P(() => i.value.map((l) => ({
28
+ column: l,
29
+ id: l.getId(),
30
+ label: l.getColDef().headerName
31
+ }))), s = p(""), a = p(!1), c = x("PlAgGridColumnManager"), { filteredItems: k, segments: y } = q(() => ({
32
+ items: V.value,
33
+ query: s.value,
34
+ getStrings: (l) => [l.label]
35
+ }));
36
+ return (l, o) => (m(), f("div", null, [
37
+ t(c) ? (m(), M(h, {
38
+ key: 0,
39
+ to: t(c)
40
+ }, [
41
+ u(t(F), {
42
+ icon: "columns",
43
+ onClick: o[0] || (o[0] = B((e) => a.value = !a.value, ["stop"]))
44
+ }, {
45
+ default: d(() => o[3] || (o[3] = [
46
+ v(" Columns ")
47
+ ])),
48
+ _: 1
49
+ })
50
+ ], 8, ["to"])) : N("", !0),
51
+ u(t(L), {
52
+ modelValue: a.value,
53
+ "onUpdate:modelValue": o[2] || (o[2] = (e) => a.value = e),
54
+ width: l.width,
55
+ "close-on-outside-click": ""
56
+ }, {
57
+ title: d(() => o[4] || (o[4] = [
58
+ v("Manage Columns")
59
+ ])),
60
+ default: d(() => [
61
+ u(t(S), {
62
+ modelValue: s.value,
63
+ "onUpdate:modelValue": o[1] || (o[1] = (e) => s.value = e),
64
+ clearable: ""
65
+ }, null, 8, ["modelValue"]),
66
+ u(t(U), {
67
+ items: t(k),
68
+ "get-item-key": (e) => e.id,
69
+ "is-draggable": (e) => !e.column.getColDef().lockPosition,
70
+ "on-sort": (e, r) => {
71
+ if (!t(n).isDestroyed()) {
72
+ const g = i.value[e];
73
+ t(n).moveColumns([g], r);
74
+ }
75
+ return !0;
76
+ },
77
+ "on-toggle": (e) => {
78
+ t(n).isDestroyed() || t(n).setColumnsVisible([e.column], !e.column.isVisible());
79
+ },
80
+ "is-toggled": (e) => !e.column.isVisible(),
81
+ "is-toggable": (e) => e.id !== t($),
82
+ "is-pinned": (e) => !!e.column.getColDef().lockPosition,
83
+ "is-pinnable": () => !1,
84
+ "disable-dragging": s.value.length > 0,
85
+ "disable-removing": ""
86
+ }, {
87
+ "item-title": d(({ item: e }) => [
88
+ G("span", null, [
89
+ (m(!0), f(I, null, A(t(y).get(e.label), (r, g) => (m(), f("span", {
90
+ key: g,
91
+ class: E({ [l.$style.match]: r.match })
92
+ }, R(r.value), 3))), 128))
93
+ ])
94
+ ]),
95
+ _: 1
96
+ }, 8, ["items", "get-item-key", "is-draggable", "on-sort", "on-toggle", "is-toggled", "is-toggable", "is-pinned", "disable-dragging"])
97
+ ]),
98
+ _: 1
99
+ }, 8, ["modelValue", "width"])
100
+ ]));
101
+ }
102
+ });
2
103
  export {
3
- f as default
104
+ Y as default
4
105
  };
5
106
  //# sourceMappingURL=PlAgGridColumnManager.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgGridColumnManager.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"PlAgGridColumnManager.vue2.js","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlBtnGhost, PlElementList, PlSearchField, PlSlideModal, usePlBlockPageTitleTeleportTarget } 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 <div>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost icon=\"columns\" @click.stop=\"slideModal = !slideModal\">\n Columns\n </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=\"(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 :on-toggle=\"(item) => {\n if (!gridApi.isDestroyed()) {\n gridApi.setColumnsVisible([item.column], !item.column.isVisible());\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 </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n </div>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n</style>\n"],"names":["props","__props","gridApi","toRefs","columns","ref","watch","event","items","computed","col","query","slideModal","teleportTarget","usePlBlockPageTitleTeleportTarget","filteredItems","segments","useFilteredItems","item"],"mappings":";;;;;;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAcR,EAAE,KAAKC,MAAYC,EAAOH,CAAK,GAE/BI,IAAUC,EAAc,EAAE;AAChC,IAAAC;AAAA,MACE,MAAMJ,EAAQ;AAAA,MACd,CAACA,MAAY;AACPA,QAAAA,EAAQ,kBAEZA,EAAQ,iBAAiB,2BAA2B,CAACK,MAAwC;AACnF,UAAAH,EAAA,QAAQG,EAAM,IAAI,kBAAkB;AAAA,QAAA,CAC7C,GAEOH,EAAA,QAAQF,EAAQ,kBAAkB,GACtCE,EAAQ,MAAM,SAAS,KACzBF,EAAQ,YAAYE,EAAQ,OAAO,CAAC;AAAA,MAExC;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IACpB;AAEM,UAAAI,IAAQC,EAAS,MACdL,EAAQ,MAAM,IAAI,CAACM,OAAS;AAAA,MACjC,QAAQA;AAAA,MACR,IAAIA,EAAI,MAAM;AAAA,MACd,OAAOA,EAAI,YAAY;AAAA,IAAA,EACvB,CACH,GAEKC,IAAQN,EAAI,EAAE,GAEdO,IAAaP,EAAI,EAAK,GACtBQ,IAAiBC,EAAkC,uBAAuB,GAE1E,EAAE,eAAAC,GAAe,UAAAC,EAAS,IAAIC,EAAiB,OAAO;AAAA,MAC1D,OAAOT,EAAM;AAAA,MACb,OAAOG,EAAM;AAAA,MACb,YAAY,CAACO,MAAS,CAACA,EAAK,KAAK;AAAA,IAAA,EACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode("._match_pckgk_2{background-color:var(--color-active-select);border-radius:2px}")),document.head.appendChild(e)}}catch(c){console.error("vite-plugin-css-injected-by-js",c)}})();
2
+ const t = "_match_pckgk_2", c = {
3
+ match: t
4
+ };
5
+ export {
6
+ c as default,
7
+ t as match
8
+ };
9
+ //# sourceMappingURL=PlAgGridColumnManager.vue3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlAgGridColumnManager.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,15 @@
1
+ import { MaybeRefOrGetter } from 'vue';
2
+ export declare function useFilteredItems<T>(props: MaybeRefOrGetter<{
3
+ items: T[];
4
+ query: string;
5
+ getStrings: (item: T) => Iterable<string>;
6
+ }>): {
7
+ filteredItems: import('vue').ComputedRef<T[]>;
8
+ segments: import('vue').ComputedRef<Map<string, StringSegment[]>>;
9
+ };
10
+ type StringSegment = {
11
+ value: string;
12
+ match: boolean;
13
+ };
14
+ export {};
15
+ //# sourceMappingURL=useFilteredItems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFilteredItems.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgGridColumnManager/useFilteredItems.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,gBAAgB,EAAW,MAAM,KAAK,CAAC;AAE/D,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,KAAK,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC3C,CAAC;;;EA0BH;AA+BD,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { computed as m, toValue as g } from "vue";
2
+ function d(t) {
3
+ const o = m(() => {
4
+ const { items: f, query: u, getStrings: r } = g(t), s = [], e = /* @__PURE__ */ new Map();
5
+ for (const l of f) {
6
+ let n = !1;
7
+ for (const c of r(l)) {
8
+ let i = e.get(c);
9
+ i || (i = p(c, u), e.set(c, i)), !n && (!u || i.some(({ match: a }) => a)) && (s.push(l), n = !0);
10
+ }
11
+ }
12
+ return { filteredItems: s, segments: e };
13
+ });
14
+ return {
15
+ filteredItems: m(() => o.value.filteredItems),
16
+ segments: m(() => o.value.segments)
17
+ };
18
+ }
19
+ function p(t, o) {
20
+ if (!o) return [{ value: t, match: !1 }];
21
+ const f = t.toLowerCase(), u = o.toLowerCase(), r = [];
22
+ let s = 0;
23
+ for (; ; ) {
24
+ const e = f.indexOf(u, s), l = e + o.length;
25
+ if (e < 0) break;
26
+ s !== e && r.push({ value: t.slice(s, e), match: !1 });
27
+ const n = r.at(-1);
28
+ n != null && n.match ? n.value += t.slice(e, l) : r.push({ value: t.slice(e, l), match: !0 }), s = l;
29
+ }
30
+ return s < t.length && r.push({ value: t.slice(s), match: !1 }), r;
31
+ }
32
+ export {
33
+ d as useFilteredItems
34
+ };
35
+ //# sourceMappingURL=useFilteredItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFilteredItems.js","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"],"names":["useFilteredItems","props","result","computed","items","query","getStrings","toValue","filteredItems","segments","item","kept","string","stringSegments","matchSubstrings","match","haystack","needle","haystackLower","needleLower","prevEnd","start","end","prevSegment"],"mappings":";AAEO,SAASA,EACdC,GAKA;AACM,QAAAC,IAASC,EAAS,MAAM;AAC5B,UAAM,EAAE,OAAAC,GAAO,OAAAC,GAAO,YAAAC,EAAW,IAAIC,EAAQN,CAAK,GAC5CO,IAAqB,CAAC,GACtBC,wBAAe,IAA6B;AAClD,eAAWC,KAAQN,GAAO;AACxB,UAAIO,IAAO;AACA,iBAAAC,KAAUN,EAAWI,CAAI,GAAG;AACjC,YAAAG,IAAiBJ,EAAS,IAAIG,CAAM;AACxC,QAAKC,MACcA,IAAAC,EAAgBF,GAAQP,CAAK,GACrCI,EAAA,IAAIG,GAAQC,CAAc,IAEjC,CAACF,MAAS,CAACN,KAASQ,EAAe,KAAK,CAAC,EAAE,OAAAE,EAAA,MAAYA,CAAK,OAC9DP,EAAc,KAAKE,CAAI,GAChBC,IAAA;AAAA,MACT;AAAA,IACF;AAEK,WAAA,EAAE,eAAAH,GAAe,UAAAC,EAAS;AAAA,EAAA,CAClC;AACM,SAAA;AAAA,IACL,eAAeN,EAAS,MAAMD,EAAO,MAAM,aAAa;AAAA,IACxD,UAAUC,EAAS,MAAMD,EAAO,MAAM,QAAQ;AAAA,EAChD;AACF;AAIA,SAASY,EAAgBE,GAAkBC,GAAiC;AACtE,MAAA,CAACA,EAAe,QAAA,CAAC,EAAE,OAAOD,GAAU,OAAO,IAAO;AAChD,QAAAE,IAAgBF,EAAS,YAAY,GACrCG,IAAcF,EAAO,YAAY,GACjCf,IAA0B,CAAC;AACjC,MAAIkB,IAAU;AACd,aAAa;AACX,UAAMC,IAAQH,EAAc,QAAQC,GAAaC,CAAO,GAClDE,IAAMD,IAAQJ,EAAO;AAC3B,QAAII,IAAQ,EAAG;AACf,IAAID,MAAYC,KACPnB,EAAA,KAAK,EAAE,OAAOc,EAAS,MAAMI,GAASC,CAAK,GAAG,OAAO,IAAO;AAE/D,UAAAE,IAAcrB,EAAO,GAAG,EAAE;AAChC,IAAIqB,KAAA,QAAAA,EAAa,QACfA,EAAY,SAASP,EAAS,MAAMK,GAAOC,CAAG,IAEvCpB,EAAA,KAAK,EAAE,OAAOc,EAAS,MAAMK,GAAOC,CAAG,GAAG,OAAO,IAAM,GAEtDF,IAAAE;AAAA,EAAA;AAER,SAAAF,IAAUJ,EAAS,UACdd,EAAA,KAAK,EAAE,OAAOc,EAAS,MAAMI,CAAO,GAAG,OAAO,IAAO,GAEvDlB;AACT;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/ui-vue",
3
- "version": "1.42.18",
3
+ "version": "1.42.19",
4
4
  "type": "module",
5
5
  "main": "dist/lib.js",
6
6
  "styles": "dist/lib.js",
@@ -43,10 +43,10 @@
43
43
  "yarpm": "^1.2.0",
44
44
  "fast-json-patch": "^3.1.1",
45
45
  "@faker-js/faker": "^9.2.0",
46
- "@milaboratories/ts-configs": "1.0.5",
47
- "@milaboratories/eslint-config": "^1.0.4",
48
46
  "@milaboratories/build-configs": "1.0.5",
49
- "@milaboratories/helpers": "^1.6.19"
47
+ "@milaboratories/ts-configs": "1.0.5",
48
+ "@milaboratories/helpers": "^1.6.19",
49
+ "@milaboratories/eslint-config": "^1.0.4"
50
50
  },
51
51
  "scripts": {
52
52
  "test": "vitest run --passWithNoTests",
@@ -1,8 +1,9 @@
1
1
  <script setup lang="ts">
2
+ import { PlBtnGhost, PlElementList, PlSearchField, PlSlideModal, usePlBlockPageTitleTeleportTarget } from '@milaboratories/uikit';
2
3
  import { type Column, type DisplayedColumnsChangedEvent, type GridApi } from 'ag-grid-enterprise';
3
- import { PlBtnGhost, PlSlideModal, PlElementList, usePlBlockPageTitleTeleportTarget } from '@milaboratories/uikit';
4
- import { ref, toRefs, watch, computed } from 'vue';
4
+ import { computed, ref, toRefs, watch } from 'vue';
5
5
  import { PlAgDataTableRowNumberColId } from '../PlAgDataTable/sources/row-number';
6
+ import { useFilteredItems } from './useFilteredItems';
6
7
 
7
8
  const props = defineProps<{
8
9
  /**
@@ -46,8 +47,16 @@ const items = computed(() => {
46
47
  }));
47
48
  });
48
49
 
50
+ const query = ref('');
51
+
49
52
  const slideModal = ref(false);
50
53
  const teleportTarget = usePlBlockPageTitleTeleportTarget('PlAgGridColumnManager');
54
+
55
+ const { filteredItems, segments } = useFilteredItems(() => ({
56
+ items: items.value,
57
+ query: query.value,
58
+ getStrings: (item) => [item.label],
59
+ }));
51
60
  </script>
52
61
 
53
62
  <template>
@@ -60,8 +69,9 @@ const teleportTarget = usePlBlockPageTitleTeleportTarget('PlAgGridColumnManager'
60
69
 
61
70
  <PlSlideModal v-model="slideModal" :width="width" close-on-outside-click>
62
71
  <template #title>Manage Columns</template>
72
+ <PlSearchField v-model="query" clearable />
63
73
  <PlElementList
64
- :items="items"
74
+ :items="filteredItems"
65
75
  :get-item-key="(item) => item.id"
66
76
  :is-draggable="(item) => !item.column.getColDef().lockPosition"
67
77
  :on-sort="(fromIndex, toIndex) => {
@@ -80,12 +90,26 @@ const teleportTarget = usePlBlockPageTitleTeleportTarget('PlAgGridColumnManager'
80
90
  :is-toggable="(item) => item.id !== PlAgDataTableRowNumberColId"
81
91
  :is-pinned="(item) => !!item.column.getColDef().lockPosition"
82
92
  :is-pinnable="() => false"
93
+ :disable-dragging="query.length > 0"
83
94
  disable-removing
84
95
  >
85
96
  <template #item-title="{ item }">
86
- {{ item.label }}
97
+ <span>
98
+ <span
99
+ v-for="(segment, i) of segments.get(item.label)"
100
+ :key="i"
101
+ :class="{ [$style.match]: segment.match }"
102
+ >{{ segment.value }}</span>
103
+ </span>
87
104
  </template>
88
105
  </PlElementList>
89
106
  </PlSlideModal>
90
107
  </div>
91
108
  </template>
109
+
110
+ <style module>
111
+ .match {
112
+ background-color: var(--color-active-select);
113
+ border-radius: 2px;
114
+ }
115
+ </style>
@@ -0,0 +1,68 @@
1
+ import { computed, type MaybeRefOrGetter, toValue } from 'vue';
2
+
3
+ export function useFilteredItems<T>(
4
+ props: MaybeRefOrGetter<{
5
+ items: T[];
6
+ query: string;
7
+ getStrings: (item: T) => Iterable<string>;
8
+ }>,
9
+ ) {
10
+ const result = computed(() => {
11
+ const { items, query, getStrings } = toValue(props);
12
+ const filteredItems: T[] = [];
13
+ const segments = new Map<string, StringSegment[]>();
14
+ for (const item of items) {
15
+ let kept = false;
16
+ for (const string of getStrings(item)) {
17
+ let stringSegments = segments.get(string);
18
+ if (!stringSegments) {
19
+ stringSegments = matchSubstrings(string, query);
20
+ segments.set(string, stringSegments);
21
+ }
22
+ if (!kept && (!query || stringSegments.some(({ match }) => match))) {
23
+ filteredItems.push(item);
24
+ kept = true;
25
+ }
26
+ }
27
+ }
28
+ return { filteredItems, segments };
29
+ });
30
+ return {
31
+ filteredItems: computed(() => result.value.filteredItems),
32
+ segments: computed(() => result.value.segments),
33
+ };
34
+ }
35
+
36
+ // Very naïve implementation of substring matching, doesn't handle Unicode well
37
+ // Maybe one day we'll have nice things: https://github.com/tc39/ecma402/issues/506
38
+ function matchSubstrings(haystack: string, needle: string): StringSegment[] {
39
+ if (!needle) return [{ value: haystack, match: false }];
40
+ const haystackLower = haystack.toLowerCase();
41
+ const needleLower = needle.toLowerCase();
42
+ const result: StringSegment[] = [];
43
+ let prevEnd = 0;
44
+ while (true) {
45
+ const start = haystackLower.indexOf(needleLower, prevEnd);
46
+ const end = start + needle.length;
47
+ if (start < 0) break;
48
+ if (prevEnd !== start) {
49
+ result.push({ value: haystack.slice(prevEnd, start), match: false });
50
+ }
51
+ const prevSegment = result.at(-1);
52
+ if (prevSegment?.match) {
53
+ prevSegment.value += haystack.slice(start, end);
54
+ } else {
55
+ result.push({ value: haystack.slice(start, end), match: true });
56
+ }
57
+ prevEnd = end;
58
+ }
59
+ if (prevEnd < haystack.length) {
60
+ result.push({ value: haystack.slice(prevEnd), match: false });
61
+ }
62
+ return result;
63
+ }
64
+
65
+ type StringSegment = {
66
+ value: string;
67
+ match: boolean;
68
+ };