plug-code 2.3.0 → 2.4.0

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 (55) hide show
  1. package/README.md +412 -284
  2. package/dist/core/helpers/core.d.ts +2 -2
  3. package/dist/core/helpers/core.d.ts.map +1 -1
  4. package/dist/core/helpers/core.js +21 -17
  5. package/dist/core/helpers/core.js.map +1 -1
  6. package/dist/core/hooks/plcHooks.d.ts.map +1 -1
  7. package/dist/core/hooks/plcHooks.js +3 -9
  8. package/dist/core/hooks/plcHooks.js.map +1 -1
  9. package/dist/core/plcAPI.d.ts +47 -4
  10. package/dist/core/plcAPI.d.ts.map +1 -1
  11. package/dist/core/plcAPI.js +288 -30
  12. package/dist/core/plcAPI.js.map +1 -1
  13. package/dist/core/plcScheduler.d.ts.map +1 -1
  14. package/dist/core/plcScheduler.js +8 -2
  15. package/dist/core/plcScheduler.js.map +1 -1
  16. package/dist/core/plcStore.js +3 -3
  17. package/dist/core/plcStore.js.map +1 -1
  18. package/dist/core/ui/plcCore.d.ts +8 -5
  19. package/dist/core/ui/plcCore.d.ts.map +1 -1
  20. package/dist/core/ui/plcCore.js +151 -36
  21. package/dist/core/ui/plcCore.js.map +1 -1
  22. package/dist/core/ui/plcLayout.d.ts +11 -0
  23. package/dist/core/ui/plcLayout.d.ts.map +1 -1
  24. package/dist/core/ui/plcLayout.js +51 -16
  25. package/dist/core/ui/plcLayout.js.map +1 -1
  26. package/dist/core/ui/plcSlotRenderer.js +2 -2
  27. package/dist/core/ui/plcSlotRenderer.js.map +1 -1
  28. package/dist/core/workers/codes.d.ts +2 -0
  29. package/dist/core/workers/codes.d.ts.map +1 -0
  30. package/dist/core/workers/codes.js +16 -0
  31. package/dist/core/workers/codes.js.map +1 -0
  32. package/dist/core/workers/filterWorker.d.ts +16 -0
  33. package/dist/core/workers/filterWorker.d.ts.map +1 -0
  34. package/dist/core/workers/filterWorker.js +168 -0
  35. package/dist/core/workers/filterWorker.js.map +1 -0
  36. package/dist/core/workers/helpers/filter.worker.d.ts +2 -0
  37. package/dist/core/workers/helpers/filter.worker.d.ts.map +1 -0
  38. package/dist/core/workers/helpers/filter.worker.js +57 -0
  39. package/dist/core/workers/helpers/filter.worker.js.map +1 -0
  40. package/dist/core/workers/search.worker.d.ts +2 -0
  41. package/dist/core/workers/search.worker.d.ts.map +1 -0
  42. package/dist/core/workers/search.worker.js +82 -0
  43. package/dist/core/workers/search.worker.js.map +1 -0
  44. package/dist/core.d.ts +5 -0
  45. package/dist/core.d.ts.map +1 -1
  46. package/dist/core.js +6 -0
  47. package/dist/core.js.map +1 -1
  48. package/dist/simple.d.ts +5 -4
  49. package/dist/simple.d.ts.map +1 -1
  50. package/dist/simple.js +14 -7
  51. package/dist/simple.js.map +1 -1
  52. package/dist/types/core/ui.d.ts +7 -2
  53. package/dist/types/core/ui.d.ts.map +1 -1
  54. package/dist/types/core.d.ts.map +1 -1
  55. package/package.json +1 -1
@@ -1,41 +1,156 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import React from "react";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import { ScopeContext } from "./plcLayout";
4
- export function VirtualContainer({ content, config, contextData }) {
5
- const ref = React.useRef(null);
6
- const rowRefs = React.useRef([]);
7
- const pipeline = React.useContext(ScopeContext)?.pipeline;
8
- React.useLayoutEffect(() => {
9
- if (!ref.current)
4
+ const RowWrapper = React.memo(({ item, index, render, style, Tag }) => {
5
+ return (_jsx(Tag, { style: style, children: render(item, index) }));
6
+ }, (prev, next) => {
7
+ return prev.item === next.item &&
8
+ prev.index === next.index &&
9
+ prev.style.height === next.style.height;
10
+ });
11
+ function computeInitialRange(itemHeight, estimatedHeight = 500, overscan = 5) {
12
+ const visible = Math.ceil(estimatedHeight / itemHeight);
13
+ return { start: 0, end: visible + overscan };
14
+ }
15
+ const VirtualContainerBase = ({ data, renderItem, indexMap, config, contextData }) => {
16
+ const containerRef = useRef(null);
17
+ const scrollParentRef = useRef(null);
18
+ const scrollInfo = useRef({ top: 0, height: 0 });
19
+ const anchorRef = useRef({ index: 0, offset: 0 });
20
+ const Tag = config.as || 'div';
21
+ const ItemTag = config.itemAs || 'div';
22
+ const itemHeight = config.itemHeight ?? config.estimatedHeight;
23
+ const overscan = config.overscan ?? 5;
24
+ const totalItems = indexMap ? indexMap.length : data.length;
25
+ const [error, setError] = useState(null);
26
+ const [hydrated, setHydrated] = useState(false);
27
+ const [ready, setReady] = useState(false);
28
+ const colWidthsRef = useRef(null);
29
+ const [columnsReady, setColumnsReady] = useState(false);
30
+ const [range, setRange] = useState(() => computeInitialRange(itemHeight, config.initialEstimatedHeight, overscan));
31
+ useLayoutEffect(() => {
32
+ requestAnimationFrame(() => setHydrated(true));
33
+ if (!containerRef.current)
34
+ return;
35
+ if (!scrollParentRef.current) {
36
+ scrollParentRef.current = containerRef.current.closest('[data-virtual-scroll]');
37
+ if (!scrollParentRef.current) {
38
+ console.warn("No scroll parent with [data-virtual-scroll] found.");
39
+ return;
40
+ }
41
+ }
42
+ const scrollParent = scrollParentRef.current;
43
+ const updateRange = (scrollTop, viewHeight) => {
44
+ const rawStart = Math.floor(scrollTop / itemHeight);
45
+ const rawEnd = Math.ceil((scrollTop + viewHeight) / itemHeight);
46
+ const start = Math.max(0, rawStart - overscan);
47
+ const end = Math.min(totalItems, rawEnd + overscan);
48
+ setRange(prev => {
49
+ if (Math.abs(prev.start - start) < 1 &&
50
+ Math.abs(prev.end - end) < 1)
51
+ return prev;
52
+ anchorRef.current = {
53
+ index: rawStart,
54
+ offset: scrollTop - rawStart * itemHeight
55
+ };
56
+ return { start, end };
57
+ });
58
+ };
59
+ const handleScroll = () => {
60
+ const scrollTop = scrollParent.scrollTop;
61
+ scrollInfo.current.top = scrollTop;
62
+ config.scrollTop = scrollTop;
63
+ updateRange(scrollTop, scrollInfo.current.height);
64
+ };
65
+ scrollInfo.current.height = scrollParent.clientHeight;
66
+ updateRange(scrollParent.scrollTop, scrollInfo.current.height);
67
+ setReady(true);
68
+ scrollParent.addEventListener('scroll', handleScroll, { passive: true });
69
+ return () => scrollParent.removeEventListener('scroll', handleScroll);
70
+ }, [data.length, itemHeight, overscan, totalItems]);
71
+ useLayoutEffect(() => {
72
+ if (colWidthsRef.current || !containerRef.current)
73
+ return;
74
+ const table = containerRef.current.closest('table');
75
+ const headerRow = table?.querySelector('thead tr');
76
+ if (!headerRow)
10
77
  return;
11
- config.viewport = ref.current.clientHeight;
78
+ const widths = Array.from(headerRow.children).map(cell => cell.getBoundingClientRect().width);
79
+ colWidthsRef.current = widths;
80
+ setColumnsReady(true);
12
81
  }, []);
13
- const rowHeight = config.itemHeight ?? config.estimatedHeight;
14
- const total = content.length;
15
- const start = Math.max(0, Math.floor(config.scrollTop / rowHeight) - config.overscan);
16
- const end = Math.min(total, Math.ceil((config.scrollTop + config.viewport) / rowHeight) + config.overscan);
17
- rowRefs.current = [];
18
- const visible = content.slice(start, end);
19
- React.useLayoutEffect(() => {
20
- if (!config.needsMeasure || rowRefs.current.length === 0)
82
+ const { paddingTop, paddingBottom, visibleData } = useMemo(() => {
83
+ const start = range.start;
84
+ const end = Math.min(range.end, totalItems);
85
+ const slice = [];
86
+ if (indexMap) {
87
+ for (let i = start; i < end; i++) {
88
+ const realIndex = indexMap[i];
89
+ slice.push(data[realIndex]);
90
+ }
91
+ }
92
+ else {
93
+ for (let i = start; i < end; i++) {
94
+ slice.push(data[i]);
95
+ }
96
+ }
97
+ return {
98
+ paddingTop: range.start * itemHeight,
99
+ paddingBottom: (totalItems - range.end) * itemHeight,
100
+ visibleData: slice
101
+ };
102
+ }, [range, data, indexMap, itemHeight, totalItems]);
103
+ useLayoutEffect(() => {
104
+ if (!ready)
21
105
  return;
22
- const avg = rowRefs.current.reduce((s, el) => s + el.offsetHeight, 0) /
23
- rowRefs.current.length;
24
- config.estimatedHeight = avg;
25
- config.measured = true;
26
- config.needsMeasure = false;
27
- pipeline?.scheduleJob(() => { }, 100);
28
- }, [visible]);
29
- return (_jsx("div", { ref: ref, onScroll: e => {
30
- const top = e.currentTarget.scrollTop;
31
- config.scrollTop = top;
32
- pipeline?.scheduleJob(() => { }, 100);
33
- }, style: { overflow: "auto", height: "100%" }, children: _jsx("div", { style: { height: total * rowHeight }, children: _jsx("div", { style: { transform: `translateY(${start * rowHeight}px)` }, children: contextData ? (_jsx(ScopeContext.Provider, { value: contextData, children: visible.map((node, i) => (_jsx("div", { ref: el => {
34
- if (el)
35
- rowRefs.current.push(el);
36
- }, children: node }, i))) })) : (visible.map((node, i) => (_jsx("div", { ref: el => {
37
- if (el)
38
- rowRefs.current.push(el);
39
- }, children: node }, i)))) }) }) }));
40
- }
106
+ const scrollParent = scrollParentRef.current;
107
+ if (!scrollParent)
108
+ return;
109
+ const { index, offset } = anchorRef.current;
110
+ const expectedScrollTop = index * itemHeight + offset;
111
+ const delta = expectedScrollTop - scrollParent.scrollTop;
112
+ if (Math.abs(delta) > 1) {
113
+ scrollParent.style.scrollBehavior = 'auto';
114
+ scrollParent.scrollTop = expectedScrollTop;
115
+ requestAnimationFrame(() => {
116
+ scrollParent.style.scrollBehavior = '';
117
+ });
118
+ }
119
+ }, [range, ready, itemHeight]);
120
+ const Spacer = useCallback(({ height }) => {
121
+ if (height <= 0)
122
+ return null;
123
+ if (Tag === 'tbody') {
124
+ return (_jsx("tr", { style: { height: `${height}px`, pointerEvents: 'none' }, children: _jsx("td", { colSpan: 100, style: { height: `${height}px`, padding: 0, border: 0 } }) }));
125
+ }
126
+ return _jsx(ItemTag, { style: { height: `${height}px`, padding: 0, border: 0 } });
127
+ }, [Tag, ItemTag]);
128
+ if (error) {
129
+ return _jsxs("div", { style: { color: 'red', fontSize: 12 }, children: ["Error: ", error] });
130
+ }
131
+ if (!ready && totalItems > 0) {
132
+ return (_jsx(Tag, { ref: containerRef, style: { height: totalItems * itemHeight, contain: 'strict' } }));
133
+ }
134
+ return (_jsxs(Tag, { ref: containerRef, style: {
135
+ display: Tag === 'tbody' ? undefined : 'block',
136
+ contain: 'strict',
137
+ position: 'relative'
138
+ }, children: [_jsx(Spacer, { height: paddingTop }), hydrated ? (_jsx(ScopeContext.Provider, { value: contextData, children: visibleData.map((item, index) => (_jsx(RowWrapper, { item: item, index: range.start + index, render: (itm, idx) => renderItem(itm, idx, colWidthsRef.current ?? []), Tag: ItemTag, style: {
139
+ height: `${itemHeight}px`,
140
+ contentVisibility: "auto",
141
+ willChange: "transform",
142
+ contain: 'strict'
143
+ } }, item.id ?? (indexMap ? indexMap[range.start + index] : range.start + index)))) })) : (visibleData.map((item, index) => (_jsx(RowWrapper, { item: item, index: range.start + index, render: (itm, idx) => renderItem(itm, idx, colWidthsRef.current ?? []), Tag: ItemTag, style: {
144
+ height: `${itemHeight}px`,
145
+ contentVisibility: "auto",
146
+ willChange: "transform",
147
+ contain: 'strict'
148
+ } }, item.id ?? (indexMap ? indexMap[range.start + index] : range.start + index))))), _jsx(Spacer, { height: paddingBottom })] }));
149
+ };
150
+ export const VirtualContainer = React.memo(VirtualContainerBase, (prev, next) => {
151
+ return prev.data === next.data &&
152
+ prev.indexMap === next.indexMap &&
153
+ prev.config === next.config &&
154
+ prev.contextData === next.contextData;
155
+ });
41
156
  //# sourceMappingURL=plcCore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plcCore.js","sourceRoot":"","sources":["../../../src/core/ui/plcCore.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plcCore.js","sourceRoot":"","sources":["../../../src/core/ui/plcCore.tsx"],"names":[],"mappings":"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"}
@@ -13,14 +13,25 @@ export declare class PlcLayout {
13
13
  private wrappers;
14
14
  private renderCache;
15
15
  private cacheVersion;
16
+ private globalVersion;
16
17
  markVirtual(slot: string, config?: {
17
18
  itemHeight?: number;
18
19
  overscan?: number;
20
+ initialEstimatedHeight?: number;
21
+ as?: any;
22
+ itemAs?: any;
19
23
  }): void;
20
24
  wrap(slot: string, wrapper: SlotWrapper, priority?: number): void;
21
25
  register(slot: string, id: string, fn: (props?: any) => React.ReactNode, priority?: number, keepAlive?: boolean): void;
26
+ registerMany(slot: string, items: {
27
+ id: string;
28
+ fn: (props?: any) => React.ReactNode;
29
+ priority?: number;
30
+ keepAlive?: boolean;
31
+ }[]): void;
22
32
  unregister(slot: string, id: string): void;
23
33
  invalidate(slot?: string): void;
34
+ getSlotVersion(slot: string): number;
24
35
  render(slot: string, props?: any): React.ReactNode;
25
36
  private renderBase;
26
37
  getSlotItems(slot: string): SlotItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"plcLayout.d.ts","sourceRoot":"","sources":["../../../src/core/ui/plcLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8C,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAIjE,eAAO,MAAM,YAAY,oBAAgC,CAAC;AA4B1D,MAAM,MAAM,QAAQ,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;CACxC,CAAC;AAEF,qBAAa,SAAS;IAClB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAoC;IAEpD,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAA6B;IAKjD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAY7E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,GAAE,MAAU;IAW7D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAE,MAAU,EAAE,SAAS,GAAE,OAAe;IAiBzH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAcnC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IAYxB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS;IAYlD,OAAO,CAAC,UAAU;IA2ClB,YAAY,CAAC,IAAI,EAAE,MAAM;IACzB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG5D"}
1
+ {"version":3,"file":"plcLayout.d.ts","sourceRoot":"","sources":["../../../src/core/ui/plcLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8C,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AAIjE,eAAO,MAAM,YAAY,oBAAgC,CAAC;AA4B1D,MAAM,MAAM,QAAQ,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;CACxC,CAAC;AAEF,qBAAa,SAAS;IAClB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAoC;IAEpD,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAAK;IAK1B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,EAAE,CAAC,EAAE,GAAG,CAAC;QACT,MAAM,CAAC,EAAE,GAAG,CAAC;KAChB;IAkBD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,GAAE,MAAU;IAW7D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAE,MAAU,EAAE,SAAS,GAAE,OAAe;IAoBzH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE;IAwBhI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAcnC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IAWxB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIpC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS;IAYlD,OAAO,CAAC,UAAU;IAyDlB,YAAY,CAAC,IAAI,EAAE,MAAM;IACzB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG5D"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, Component } from "react";
2
+ import React, { createContext, Component } from "react";
3
3
  import { VirtualContainer } from "./plcCore";
4
4
  import { SlotItemRenderer } from "./plcSlotRenderer";
5
5
  export const ScopeContext = createContext(undefined);
@@ -27,16 +27,23 @@ export class PlcLayout {
27
27
  wrappers = new Map();
28
28
  renderCache = new Map();
29
29
  cacheVersion = new Map();
30
+ globalVersion = 0;
30
31
  // ---------------------------------------------------------
31
32
  // Virtualization
32
33
  // ---------------------------------------------------------
33
34
  markVirtual(slot, config) {
35
+ const itemHeight = config?.itemHeight;
34
36
  this.virtualRegistry.set(slot, {
35
- itemHeight: config?.itemHeight ?? 32,
36
- overscan: config?.overscan ?? 6,
37
- measured: !!config?.itemHeight,
38
- estimatedHeight: config?.itemHeight ?? 32,
37
+ itemHeight,
38
+ overscan: config?.overscan ?? 5,
39
+ measured: !!itemHeight,
40
+ estimatedHeight: itemHeight ?? config?.initialEstimatedHeight ?? 48,
41
+ dynamicMeasurement: !itemHeight,
42
+ scrollTop: 0,
43
+ as: config?.as ?? 'div',
44
+ itemAs: config?.itemAs ?? 'div'
39
45
  });
46
+ this.invalidate(slot);
40
47
  }
41
48
  // ---------------------------------------------------------
42
49
  // Middleware (WRAP)
@@ -57,12 +64,35 @@ export class PlcLayout {
57
64
  this.cacheVersion.set(slot, 0);
58
65
  }
59
66
  const list = this.slots.get(slot);
67
+ if (list.length > 1) {
68
+ list.sort((a, b) => b.priority - a.priority);
69
+ }
60
70
  const existingIdx = list.findIndex(x => x.id === id);
61
71
  const item = { id, priority, fn, keepAlive };
62
72
  if (existingIdx >= 0)
63
73
  list[existingIdx] = item;
64
74
  else
65
75
  list.push(item);
76
+ this.invalidate(slot);
77
+ }
78
+ registerMany(slot, items) {
79
+ if (!this.slots.has(slot)) {
80
+ this.slots.set(slot, []);
81
+ this.cacheVersion.set(slot, 0);
82
+ }
83
+ const list = this.slots.get(slot);
84
+ items.forEach(item => {
85
+ const existingIdx = list.findIndex(x => x.id === item.id);
86
+ const newItem = {
87
+ priority: 0,
88
+ keepAlive: false,
89
+ ...item
90
+ };
91
+ if (existingIdx >= 0)
92
+ list[existingIdx] = newItem;
93
+ else
94
+ list.push(newItem);
95
+ });
66
96
  list.sort((a, b) => b.priority - a.priority);
67
97
  this.invalidate(slot);
68
98
  }
@@ -82,15 +112,17 @@ export class PlcLayout {
82
112
  invalidate(slot) {
83
113
  if (slot) {
84
114
  this.renderCache.delete(slot);
85
- this.cacheVersion.set(slot, (this.cacheVersion.get(slot) || 0) + 1);
115
+ const current = this.cacheVersion.get(slot) || 0;
116
+ this.cacheVersion.set(slot, current + 1);
86
117
  }
87
118
  else {
88
119
  this.renderCache.clear();
89
- for (const k of this.cacheVersion.keys()) {
90
- this.cacheVersion.set(k, (this.cacheVersion.get(k) || 0) + 1);
91
- }
120
+ this.globalVersion++;
92
121
  }
93
122
  }
123
+ getSlotVersion(slot) {
124
+ return (this.cacheVersion.get(slot) || 0) + this.globalVersion;
125
+ }
94
126
  render(slot, props) {
95
127
  let content = this.renderBase(slot, props);
96
128
  const slotWrappers = this.wrappers.get(slot);
@@ -104,19 +136,22 @@ export class PlcLayout {
104
136
  renderBase(slot, props) {
105
137
  const list = this.slots.get(slot) || [];
106
138
  const virtualConfig = this.virtualRegistry.get(slot);
139
+ const dataItems = props?.items;
140
+ if (virtualConfig && Array.isArray(dataItems)) {
141
+ const templateItem = list[0];
142
+ if (!templateItem)
143
+ return null;
144
+ return (_jsx(VirtualContainer, { data: dataItems, renderItem: (item, index) => (_jsx(SlotErrorBoundary, { id: `${templateItem.id}-idx-${index}`, children: templateItem.fn(item) })), config: virtualConfig, contextData: props }));
145
+ }
107
146
  if (virtualConfig && list.length > 0) {
108
- const protectedItems = list.map(item => ({
109
- ...item,
110
- fn: (p) => (_jsx(SlotErrorBoundary, { id: item.id, children: item.fn(p) }))
111
- }));
112
- const content = protectedItems.map((item, i) => (_jsx(ScopeContext.Provider, { value: props, children: item.fn(props) }, item.id)));
113
- return (_jsx(VirtualContainer, { content: content, config: virtualConfig, contextData: props }));
147
+ return (_jsx(VirtualContainer, { data: list, renderItem: (item) => (_jsx(SlotErrorBoundary, { id: item.id, children: item.fn(props) })), config: virtualConfig, contextData: props }));
114
148
  }
115
149
  return list.map(item => {
116
150
  const isActive = props?.activeId ? props.activeId === item.id : true;
117
151
  if (!isActive && !item.keepAlive)
118
152
  return null;
119
- return (_jsx("div", { style: { display: isActive ? undefined : 'none' }, children: _jsx(SlotItemRenderer, { item: item, props: props }) }, item.id));
153
+ const Container = item.as || React.Fragment;
154
+ return (_jsx(Container, { children: _jsx("div", { style: { display: isActive ? undefined : 'none' }, children: _jsx(SlotErrorBoundary, { id: item.id, children: _jsx(SlotItemRenderer, { item: item, props: props }) }) }) }, item.id));
120
155
  });
121
156
  }
122
157
  getSlotItems(slot) { return this.slots.get(slot) || []; }
@@ -1 +1 @@
1
- {"version":3,"file":"plcLayout.js","sourceRoot":"","sources":["../../../src/core/ui/plcLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plcLayout.js","sourceRoot":"","sources":["../../../src/core/ui/plcLayout.tsx"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
3
  import { ScopeContext } from "./plcLayout";
4
4
  import { SlotErrorBoundary } from "./plcErrorBoundary";
5
- import { shallowCompare } from "../helpers/core";
5
+ import { shallowEqual } from "../helpers/core";
6
6
  export const SlotItemRenderer = React.memo(({ item, props }) => {
7
7
  return (_jsx(SlotErrorBoundary, { id: item.id, children: _jsx(ScopeContext.Provider, { value: props, children: item.fn(props) }) }));
8
8
  }, (prev, next) => {
9
- return prev.item === next.item && shallowCompare(prev.props, next.props);
9
+ return prev.item === next.item && shallowEqual(prev.props, next.props);
10
10
  });
11
11
  //# sourceMappingURL=plcSlotRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plcSlotRenderer.js","sourceRoot":"","sources":["../../../src/core/ui/plcSlotRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EACxC,IAAI,EACJ,KAAK,EAIR,EAAE,EAAE;IACD,OAAO,CACH,KAAC,iBAAiB,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,YAC1B,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC9B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GACK,GACR,CACvB,CAAC;AACN,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACd,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"plcSlotRenderer.js","sourceRoot":"","sources":["../../../src/core/ui/plcSlotRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EACxC,IAAI,EACJ,KAAK,EAIR,EAAE,EAAE;IACD,OAAO,CACH,KAAC,iBAAiB,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,YAC1B,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC9B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GACK,GACR,CACvB,CAAC;AACN,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACd,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const WORKER_FILTER_CODE = "\n self.onmessage = (e) => {\n const { data, query, fields } = e.data;\n if (!query) { self.postMessage(data); return; }\n \n const q = query.toLowerCase();\n \n const result = data.filter(item => \n fields.some(field => \n String(item[field] || \"\").toLowerCase().includes(q)\n )\n );\n self.postMessage(result);\n };\n";
2
+ //# sourceMappingURL=codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../../src/core/workers/codes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,yXAc9B,CAAC"}
@@ -0,0 +1,16 @@
1
+ export const WORKER_FILTER_CODE = `
2
+ self.onmessage = (e) => {
3
+ const { data, query, fields } = e.data;
4
+ if (!query) { self.postMessage(data); return; }
5
+
6
+ const q = query.toLowerCase();
7
+
8
+ const result = data.filter(item =>
9
+ fields.some(field =>
10
+ String(item[field] || "").toLowerCase().includes(q)
11
+ )
12
+ );
13
+ self.postMessage(result);
14
+ };
15
+ `;
16
+ //# sourceMappingURL=codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.js","sourceRoot":"","sources":["../../../src/core/workers/codes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;CAcjC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare class FilterWorkerPool {
2
+ private poolSize;
3
+ private workers;
4
+ private availableWorkers;
5
+ private taskQueue;
6
+ constructor(poolSize?: number);
7
+ private initializePool;
8
+ private handleWorkerMessage;
9
+ private handleWorkerError;
10
+ private processNextTask;
11
+ executeTask(data: any[], props: string[], filter: string, matcher: string, caseSensitive: boolean, startIdx: number, endIdx: number): Promise<number[]>;
12
+ terminate(): void;
13
+ }
14
+ export declare function getWorkerPool(): FilterWorkerPool;
15
+ export declare function terminateWorkerPool(): void;
16
+ //# sourceMappingURL=filterWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterWorker.d.ts","sourceRoot":"","sources":["../../../src/core/workers/filterWorker.ts"],"names":[],"mappings":"AAgEA,qBAAa,gBAAgB;IAeb,OAAO,CAAC,QAAQ;IAd5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,SAAS,CAUT;gBAEY,QAAQ,GAAE,MAA2C;IAIzE,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IAkCjB,WAAW,CACb,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBpB,SAAS;CAMZ;AAQD,wBAAgB,aAAa,IAAI,gBAAgB,CAKhD;AAED,wBAAgB,mBAAmB,SAKlC"}