cx 26.0.5 → 26.0.6

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 (127) hide show
  1. package/build/data/ArrayElementView.spec.js +1 -1
  2. package/build/hooks/store.spec.js +1 -1
  3. package/build/hooks/useTrigger.spec.js +1 -1
  4. package/build/ui/Controller.spec.js +6 -2
  5. package/build/ui/app/startAppLoop.d.ts +3 -2
  6. package/build/ui/app/startHotAppLoop.d.ts +3 -2
  7. package/build/ui/layout/ContentPlaceholder.spec.js +12 -12
  8. package/build.js +129 -129
  9. package/dist/manifest.js +844 -844
  10. package/package.json +2 -2
  11. package/src/charts/Chart.ts +108 -108
  12. package/src/data/ArrayElementView.ts +90 -90
  13. package/src/data/AugmentedViewBase.ts +88 -88
  14. package/src/data/Binding.ts +104 -104
  15. package/src/data/ExposedRecordView.ts +95 -95
  16. package/src/data/ExposedValueView.ts +89 -89
  17. package/src/data/Expression.spec.ts +229 -229
  18. package/src/data/Expression.ts +233 -233
  19. package/src/data/Grouper.spec.ts +57 -57
  20. package/src/data/Grouper.ts +158 -158
  21. package/src/data/NestedDataView.ts +43 -43
  22. package/src/data/ReadOnlyDataView.ts +39 -39
  23. package/src/data/Ref.ts +104 -104
  24. package/src/data/Selector.ts +10 -10
  25. package/src/data/Store.ts +52 -52
  26. package/src/data/StoreProxy.ts +19 -19
  27. package/src/data/StoreRef.ts +66 -66
  28. package/src/data/StringTemplate.spec.ts +132 -132
  29. package/src/data/StringTemplate.ts +93 -93
  30. package/src/data/StructuredSelector.spec.ts +113 -113
  31. package/src/data/StructuredSelector.ts +146 -146
  32. package/src/data/SubscribableView.ts +63 -63
  33. package/src/data/ZoomIntoPropertyView.spec.ts +64 -64
  34. package/src/data/ZoomIntoPropertyView.ts +45 -45
  35. package/src/data/computable.spec.ts +62 -62
  36. package/src/data/createAccessorModelProxy.ts +60 -60
  37. package/src/data/createStructuredSelector.ts +62 -62
  38. package/src/data/getAccessor.spec.ts +11 -11
  39. package/src/data/getAccessor.ts +74 -74
  40. package/src/data/getSelector.spec.ts +43 -43
  41. package/src/data/getSelector.ts +66 -66
  42. package/src/data/ops/filter.spec.ts +35 -35
  43. package/src/data/ops/filter.ts +9 -9
  44. package/src/data/ops/merge.ts +13 -13
  45. package/src/data/ops/removeTreeNodes.spec.ts +37 -37
  46. package/src/data/ops/removeTreeNodes.ts +15 -15
  47. package/src/data/ops/updateArray.spec.ts +69 -69
  48. package/src/data/ops/updateArray.ts +31 -31
  49. package/src/data/ops/updateTree.ts +23 -23
  50. package/src/data/test-types.ts +7 -7
  51. package/src/hooks/useTrigger.ts +26 -26
  52. package/src/index.scss +6 -6
  53. package/src/jsx-runtime.ts +72 -72
  54. package/src/svg/BoundedObject.ts +101 -101
  55. package/src/ui/CSSHelper.ts +17 -17
  56. package/src/ui/ContentResolver.ts +124 -124
  57. package/src/ui/Controller.ts +189 -189
  58. package/src/ui/Culture.ts +159 -159
  59. package/src/ui/DataProxy.ts +55 -55
  60. package/src/ui/FocusManager.ts +171 -171
  61. package/src/ui/Instance.ts +868 -868
  62. package/src/ui/RenderingContext.ts +99 -99
  63. package/src/ui/Rescope.ts +49 -49
  64. package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
  65. package/src/ui/VDOM.ts +34 -34
  66. package/src/ui/adapter/ArrayAdapter.spec.ts +55 -55
  67. package/src/ui/adapter/ArrayAdapter.ts +226 -226
  68. package/src/ui/adapter/TreeAdapter.spec.ts +76 -76
  69. package/src/ui/adapter/TreeAdapter.ts +185 -185
  70. package/src/ui/app/History.ts +133 -133
  71. package/src/ui/app/Url.spec.ts +50 -50
  72. package/src/ui/app/startAppLoop.tsx +2 -1
  73. package/src/ui/app/startHotAppLoop.ts +2 -1
  74. package/src/ui/createFunctionalComponent.ts +65 -65
  75. package/src/ui/index.ts +45 -45
  76. package/src/ui/layout/Content.ts +30 -30
  77. package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
  78. package/src/ui/selection/KeySelection.ts +165 -165
  79. package/src/ui/selection/PropertySelection.ts +87 -87
  80. package/src/ui/selection/Selection.ts +118 -118
  81. package/src/util/Format.ts +267 -267
  82. package/src/util/browserSupportsPassiveEventHandlers.ts +20 -20
  83. package/src/util/color/rgbToHsl.ts +35 -35
  84. package/src/util/getActiveElement.ts +4 -4
  85. package/src/util/hasKey.ts +18 -18
  86. package/src/util/index.ts +55 -55
  87. package/src/util/innerTextTrim.ts +10 -10
  88. package/src/util/isArray.ts +3 -3
  89. package/src/util/isDataRecord.ts +5 -5
  90. package/src/util/isDefined.ts +3 -3
  91. package/src/util/isString.ts +3 -3
  92. package/src/widgets/Sandbox.ts +103 -103
  93. package/src/widgets/autoFocus.ts +9 -9
  94. package/src/widgets/cx.ts +63 -63
  95. package/src/widgets/drag-drop/ops.tsx +1 -1
  96. package/src/widgets/grid/GridCell.ts +143 -143
  97. package/src/widgets/icons/calendar.tsx +17 -17
  98. package/src/widgets/icons/check.tsx +13 -13
  99. package/src/widgets/icons/clear.tsx +15 -15
  100. package/src/widgets/icons/close.tsx +20 -20
  101. package/src/widgets/icons/cx.tsx +38 -38
  102. package/src/widgets/icons/drop-down.tsx +15 -15
  103. package/src/widgets/icons/file.tsx +13 -13
  104. package/src/widgets/icons/folder-open.tsx +15 -15
  105. package/src/widgets/icons/folder.tsx +13 -13
  106. package/src/widgets/icons/forward.tsx +22 -22
  107. package/src/widgets/icons/loading.tsx +24 -24
  108. package/src/widgets/icons/menu.tsx +17 -17
  109. package/src/widgets/icons/pixel-picker.tsx +18 -18
  110. package/src/widgets/icons/search.tsx +13 -13
  111. package/src/widgets/icons/sort-asc.tsx +14 -14
  112. package/src/widgets/icons/square.tsx +18 -18
  113. package/src/widgets/nav/Route.ts +142 -142
  114. package/src/widgets/overlay/ContextMenu.ts +42 -42
  115. package/src/widgets/overlay/Dropdown.tsx +762 -762
  116. package/src/widgets/overlay/MsgBox.tsx +141 -141
  117. package/src/widgets/overlay/Toast.ts +111 -111
  118. package/src/widgets/overlay/Window.tsx +299 -299
  119. package/src/widgets/overlay/alerts.ts +46 -46
  120. package/src/widgets/overlay/captureMouse.ts +195 -195
  121. package/src/widgets/overlay/createHotPromiseWindowFactory.ts +72 -72
  122. package/src/widgets/overlay/index.d.ts +11 -11
  123. package/src/widgets/overlay/index.ts +11 -11
  124. package/src/widgets/overlay/tooltip-ops.ts +173 -173
  125. package/build/ui/PureContainer.spec.d.ts +0 -1
  126. package/build/ui/PureContainer.spec.js +0 -149
  127. package/dist/manifest.d.ts +0 -1443
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cx",
3
- "version": "26.0.5",
3
+ "version": "26.0.6",
4
4
  "description": "Advanced JavaScript UI framework for admin and dashboard applications with ready to use grid, form and chart components.",
5
5
  "exports": {
6
6
  "./data/": "./build/data/",
@@ -19,7 +19,7 @@
19
19
  "./charts": "./build/charts/index.js",
20
20
  "./jsx-runtime": "./build/jsx-runtime.js",
21
21
  "./jsx-runtime.js": "./build/jsx-runtime.js",
22
- "./src/": "./build/",
22
+ "./src/": "./src/",
23
23
  "./sass/": "./src/",
24
24
  "./build/": "./build/",
25
25
  "./locale/": "./build/locale/",
@@ -1,108 +1,108 @@
1
- import { Widget, VDOM, getContent } from "../ui/Widget";
2
- import { BoundedObject, BoundedObjectConfig, BoundedObjectInstance, SvgRenderingContext } from "../svg/BoundedObject";
3
- import { Axis } from "./axis/Axis";
4
- import type { NumericAxis } from "./axis/NumericAxis";
5
- import type { CategoryAxis } from "./axis/CategoryAxis";
6
- import type { TimeAxis } from "./axis/TimeAxis";
7
- import { RenderingContext } from "../ui/RenderingContext";
8
- import { Create } from "../util/Component";
9
-
10
- /** Typed context interface for chart-related context properties */
11
- export interface ChartRenderingContext extends SvgRenderingContext {
12
- axes?: Record<string, any>;
13
- }
14
-
15
- export interface ChartConfig extends BoundedObjectConfig {
16
- /** Axis definition. Each key represent an axis, and each value hold axis configuration. */
17
- axes?: Record<
18
- string,
19
- Create<typeof Axis> | Create<typeof NumericAxis> | Create<typeof CategoryAxis> | Create<typeof TimeAxis>
20
- >;
21
-
22
- /** Put axes over data series. */
23
- axesOnTop?: boolean;
24
- }
25
-
26
- export interface ChartInstance extends BoundedObjectInstance {
27
- calculators: Record<string, any>;
28
- axes: Record<string, any>;
29
- }
30
-
31
- export class Chart extends BoundedObject<ChartConfig, ChartInstance> {
32
- declare axes: Record<string, any>;
33
- declare axesOnTop: boolean;
34
-
35
- constructor(config?: ChartConfig) {
36
- super(config);
37
- }
38
-
39
- init(): void {
40
- super.init();
41
-
42
- if (!this.axes) this.axes = {};
43
-
44
- for (let axis in this.axes) {
45
- this.axes[axis] = Axis.create(this.axes[axis]);
46
- }
47
- }
48
-
49
- explore(context: ChartRenderingContext, instance: ChartInstance): void {
50
- instance.calculators = { ...context.axes };
51
-
52
- context.push("axes", instance.calculators);
53
- instance.axes = {};
54
-
55
- //axes need to be registered before children to be processed first
56
- for (let axis in this.axes) {
57
- let axisInstance = instance.getChild(context, this.axes[axis]);
58
- if (axisInstance.scheduleExploreIfVisible(context)) {
59
- instance.axes[axis] = axisInstance;
60
- instance.calculators[axis] = this.axes[axis].report(context, axisInstance);
61
- }
62
- }
63
-
64
- super.explore(context, instance);
65
- }
66
-
67
- exploreCleanup(context: ChartRenderingContext, instance: ChartInstance): void {
68
- context.pop("axes");
69
-
70
- for (let axis in instance.axes) {
71
- instance.axes[axis].widget.reportData(context, instance.axes[axis]);
72
- }
73
- }
74
-
75
- prepare(context: ChartRenderingContext, instance: ChartInstance): void {
76
- context.push("axes", instance.calculators);
77
- super.prepare(context, instance);
78
- }
79
-
80
- prepareCleanup(context: ChartRenderingContext, instance: ChartInstance): void {
81
- context.pop("axes");
82
- super.prepareCleanup(context, instance);
83
- }
84
-
85
- render(context: ChartRenderingContext, instance: ChartInstance, key: string): any[] {
86
- let axes = [];
87
- for (let k in instance.axes) {
88
- axes.push(getContent(instance.axes[k].render(context, key + "-axis-" + k)));
89
- }
90
-
91
- let result = [];
92
-
93
- if (!this.axesOnTop) result.push(axes);
94
-
95
- result.push(this.renderChildren(context, instance));
96
-
97
- if (this.axesOnTop) result.push(axes);
98
-
99
- return result;
100
- }
101
- }
102
-
103
- Chart.prototype.anchors = "0 1 1 0";
104
- Chart.prototype.styled = true;
105
- Chart.prototype.isPureContainer = true;
106
- Chart.prototype.axesOnTop = false;
107
-
108
- Widget.alias("chart", Chart);
1
+ import { Widget, VDOM, getContent } from "../ui/Widget";
2
+ import { BoundedObject, BoundedObjectConfig, BoundedObjectInstance, SvgRenderingContext } from "../svg/BoundedObject";
3
+ import { Axis } from "./axis/Axis";
4
+ import type { NumericAxis } from "./axis/NumericAxis";
5
+ import type { CategoryAxis } from "./axis/CategoryAxis";
6
+ import type { TimeAxis } from "./axis/TimeAxis";
7
+ import { RenderingContext } from "../ui/RenderingContext";
8
+ import { Create } from "../util/Component";
9
+
10
+ /** Typed context interface for chart-related context properties */
11
+ export interface ChartRenderingContext extends SvgRenderingContext {
12
+ axes?: Record<string, any>;
13
+ }
14
+
15
+ export interface ChartConfig extends BoundedObjectConfig {
16
+ /** Axis definition. Each key represent an axis, and each value hold axis configuration. */
17
+ axes?: Record<
18
+ string,
19
+ Create<typeof Axis> | Create<typeof NumericAxis> | Create<typeof CategoryAxis> | Create<typeof TimeAxis>
20
+ >;
21
+
22
+ /** Put axes over data series. */
23
+ axesOnTop?: boolean;
24
+ }
25
+
26
+ export interface ChartInstance extends BoundedObjectInstance {
27
+ calculators: Record<string, any>;
28
+ axes: Record<string, any>;
29
+ }
30
+
31
+ export class Chart extends BoundedObject<ChartConfig, ChartInstance> {
32
+ declare axes: Record<string, any>;
33
+ declare axesOnTop: boolean;
34
+
35
+ constructor(config?: ChartConfig) {
36
+ super(config);
37
+ }
38
+
39
+ init(): void {
40
+ super.init();
41
+
42
+ if (!this.axes) this.axes = {};
43
+
44
+ for (let axis in this.axes) {
45
+ this.axes[axis] = Axis.create(this.axes[axis]);
46
+ }
47
+ }
48
+
49
+ explore(context: ChartRenderingContext, instance: ChartInstance): void {
50
+ instance.calculators = { ...context.axes };
51
+
52
+ context.push("axes", instance.calculators);
53
+ instance.axes = {};
54
+
55
+ //axes need to be registered before children to be processed first
56
+ for (let axis in this.axes) {
57
+ let axisInstance = instance.getChild(context, this.axes[axis]);
58
+ if (axisInstance.scheduleExploreIfVisible(context)) {
59
+ instance.axes[axis] = axisInstance;
60
+ instance.calculators[axis] = this.axes[axis].report(context, axisInstance);
61
+ }
62
+ }
63
+
64
+ super.explore(context, instance);
65
+ }
66
+
67
+ exploreCleanup(context: ChartRenderingContext, instance: ChartInstance): void {
68
+ context.pop("axes");
69
+
70
+ for (let axis in instance.axes) {
71
+ instance.axes[axis].widget.reportData(context, instance.axes[axis]);
72
+ }
73
+ }
74
+
75
+ prepare(context: ChartRenderingContext, instance: ChartInstance): void {
76
+ context.push("axes", instance.calculators);
77
+ super.prepare(context, instance);
78
+ }
79
+
80
+ prepareCleanup(context: ChartRenderingContext, instance: ChartInstance): void {
81
+ context.pop("axes");
82
+ super.prepareCleanup(context, instance);
83
+ }
84
+
85
+ render(context: ChartRenderingContext, instance: ChartInstance, key: string): any[] {
86
+ let axes = [];
87
+ for (let k in instance.axes) {
88
+ axes.push(getContent(instance.axes[k].render(context, key + "-axis-" + k)));
89
+ }
90
+
91
+ let result = [];
92
+
93
+ if (!this.axesOnTop) result.push(axes);
94
+
95
+ result.push(this.renderChildren(context, instance));
96
+
97
+ if (this.axesOnTop) result.push(axes);
98
+
99
+ return result;
100
+ }
101
+ }
102
+
103
+ Chart.prototype.anchors = "0 1 1 0";
104
+ Chart.prototype.styled = true;
105
+ Chart.prototype.isPureContainer = true;
106
+ Chart.prototype.axesOnTop = false;
107
+
108
+ Widget.alias("chart", Chart);
@@ -1,90 +1,90 @@
1
- import { AugmentedViewBase } from "./AugmentedViewBase";
2
- import { isArray } from "../util/isArray";
3
- import { Binding } from "./Binding";
4
- import { View } from "./View";
5
-
6
- export interface ArrayElementViewConfig {
7
- store: View;
8
- arrayAccessor: any;
9
- immutable?: boolean;
10
- recordAlias?: string;
11
- indexAlias?: string;
12
- lengthAlias?: string;
13
- hasNestedAliases?: boolean;
14
- recordBinding?: any;
15
- indexBinding?: any;
16
- lengthBinding?: any;
17
- itemIndex: number;
18
- sealed?: boolean;
19
- }
20
-
21
- export class ArrayElementView extends AugmentedViewBase {
22
- declare arrayAccessor: any;
23
- declare recordAlias: string;
24
- declare indexAlias: string;
25
- declare lengthAlias: string;
26
- declare hasNestedAliases?: boolean;
27
- declare recordBinding?: any;
28
- declare indexBinding?: any;
29
- declare lengthBinding?: any;
30
- declare itemIndex: number;
31
-
32
- constructor(config: ArrayElementViewConfig) {
33
- super(config);
34
- this.hasNestedAliases =
35
- this.recordAlias.indexOf(".") >= 0 || this.indexAlias.indexOf(".") >= 0 || this.lengthAlias.indexOf(".") >= 0;
36
- this.recordBinding = Binding.get(this.recordAlias);
37
- if (this.hasNestedAliases) {
38
- this.indexBinding = Binding.get(this.indexAlias);
39
- this.lengthBinding = Binding.get(this.lengthAlias);
40
- }
41
- }
42
-
43
- getExtraKeyBinding(key: string): any {
44
- if (!key.startsWith(this.recordAlias)) return null;
45
- if (key.length == this.recordAlias.length || key[this.recordAlias.length] == ".") return this.recordBinding;
46
- return null;
47
- }
48
-
49
- deleteExtraKeyValue(key: string): boolean {
50
- if (key != this.recordAlias) throw new Error(`Field ${key} cannot be deleted.`);
51
- const array = this.arrayAccessor.get(this.store.getData());
52
- if (!array) return false;
53
- const newArray = [...array.slice(0, this.itemIndex), ...array.slice(this.itemIndex + 1)];
54
- return this.arrayAccessor.set(newArray, this.store);
55
- }
56
-
57
- setExtraKeyValue(key: string, value: any): boolean {
58
- if (key != this.recordAlias) throw new Error(`Field ${key} is read-only.`);
59
- const array = this.arrayAccessor.get(this.store.getData());
60
- if (!array || value === array[this.itemIndex]) return false;
61
- const newArray = [...array.slice(0, this.itemIndex), value, ...array.slice(this.itemIndex + 1)];
62
- return this.arrayAccessor.set(newArray, this.store);
63
- }
64
-
65
- embedAugmentData(result: any, parentStoreData: any): void {
66
- let array = this.arrayAccessor.get(parentStoreData);
67
- if (!isArray(array)) return;
68
- if (!this.hasNestedAliases) {
69
- result[this.recordAlias] = array[this.itemIndex];
70
- result[this.indexAlias] = this.itemIndex;
71
- result[this.lengthAlias] = array.length;
72
- } else {
73
- let copy = result;
74
- copy = this.recordBinding.set(copy, array[this.itemIndex]);
75
- copy = this.indexBinding.set(copy, this.itemIndex);
76
- copy = this.lengthBinding.set(copy, array.length);
77
- result[this.recordBinding.parts[0]] = copy[this.recordBinding.parts[0]];
78
- result[this.indexBinding.parts[0]] = copy[this.indexBinding.parts[0]];
79
- result[this.lengthBinding.parts[0]] = copy[this.lengthBinding.parts[0]];
80
- }
81
- }
82
-
83
- setIndex(itemIndex: number): void {
84
- this.itemIndex = itemIndex;
85
- }
86
- }
87
-
88
- ArrayElementView.prototype.recordAlias = "$record";
89
- ArrayElementView.prototype.indexAlias = "$index";
90
- ArrayElementView.prototype.lengthAlias = "$length";
1
+ import { AugmentedViewBase } from "./AugmentedViewBase";
2
+ import { isArray } from "../util/isArray";
3
+ import { Binding } from "./Binding";
4
+ import { View } from "./View";
5
+
6
+ export interface ArrayElementViewConfig {
7
+ store: View;
8
+ arrayAccessor: any;
9
+ immutable?: boolean;
10
+ recordAlias?: string;
11
+ indexAlias?: string;
12
+ lengthAlias?: string;
13
+ hasNestedAliases?: boolean;
14
+ recordBinding?: any;
15
+ indexBinding?: any;
16
+ lengthBinding?: any;
17
+ itemIndex: number;
18
+ sealed?: boolean;
19
+ }
20
+
21
+ export class ArrayElementView extends AugmentedViewBase {
22
+ declare arrayAccessor: any;
23
+ declare recordAlias: string;
24
+ declare indexAlias: string;
25
+ declare lengthAlias: string;
26
+ declare hasNestedAliases?: boolean;
27
+ declare recordBinding?: any;
28
+ declare indexBinding?: any;
29
+ declare lengthBinding?: any;
30
+ declare itemIndex: number;
31
+
32
+ constructor(config: ArrayElementViewConfig) {
33
+ super(config);
34
+ this.hasNestedAliases =
35
+ this.recordAlias.indexOf(".") >= 0 || this.indexAlias.indexOf(".") >= 0 || this.lengthAlias.indexOf(".") >= 0;
36
+ this.recordBinding = Binding.get(this.recordAlias);
37
+ if (this.hasNestedAliases) {
38
+ this.indexBinding = Binding.get(this.indexAlias);
39
+ this.lengthBinding = Binding.get(this.lengthAlias);
40
+ }
41
+ }
42
+
43
+ getExtraKeyBinding(key: string): any {
44
+ if (!key.startsWith(this.recordAlias)) return null;
45
+ if (key.length == this.recordAlias.length || key[this.recordAlias.length] == ".") return this.recordBinding;
46
+ return null;
47
+ }
48
+
49
+ deleteExtraKeyValue(key: string): boolean {
50
+ if (key != this.recordAlias) throw new Error(`Field ${key} cannot be deleted.`);
51
+ const array = this.arrayAccessor.get(this.store.getData());
52
+ if (!array) return false;
53
+ const newArray = [...array.slice(0, this.itemIndex), ...array.slice(this.itemIndex + 1)];
54
+ return this.arrayAccessor.set(newArray, this.store);
55
+ }
56
+
57
+ setExtraKeyValue(key: string, value: any): boolean {
58
+ if (key != this.recordAlias) throw new Error(`Field ${key} is read-only.`);
59
+ const array = this.arrayAccessor.get(this.store.getData());
60
+ if (!array || value === array[this.itemIndex]) return false;
61
+ const newArray = [...array.slice(0, this.itemIndex), value, ...array.slice(this.itemIndex + 1)];
62
+ return this.arrayAccessor.set(newArray, this.store);
63
+ }
64
+
65
+ embedAugmentData(result: any, parentStoreData: any): void {
66
+ let array = this.arrayAccessor.get(parentStoreData);
67
+ if (!isArray(array)) return;
68
+ if (!this.hasNestedAliases) {
69
+ result[this.recordAlias] = array[this.itemIndex];
70
+ result[this.indexAlias] = this.itemIndex;
71
+ result[this.lengthAlias] = array.length;
72
+ } else {
73
+ let copy = result;
74
+ copy = this.recordBinding.set(copy, array[this.itemIndex]);
75
+ copy = this.indexBinding.set(copy, this.itemIndex);
76
+ copy = this.lengthBinding.set(copy, array.length);
77
+ result[this.recordBinding.parts[0]] = copy[this.recordBinding.parts[0]];
78
+ result[this.indexBinding.parts[0]] = copy[this.indexBinding.parts[0]];
79
+ result[this.lengthBinding.parts[0]] = copy[this.lengthBinding.parts[0]];
80
+ }
81
+ }
82
+
83
+ setIndex(itemIndex: number): void {
84
+ this.itemIndex = itemIndex;
85
+ }
86
+ }
87
+
88
+ ArrayElementView.prototype.recordAlias = "$record";
89
+ ArrayElementView.prototype.indexAlias = "$index";
90
+ ArrayElementView.prototype.lengthAlias = "$length";
@@ -1,88 +1,88 @@
1
- import { View, ViewConfig } from "./View";
2
- import { Binding } from "./Binding";
3
-
4
- export interface AugmentedViewBaseConfig extends ViewConfig {
5
- store: View<any>;
6
- }
7
-
8
- export class AugmentedViewBase<D = any> extends View<D> {
9
- declare immutable: boolean;
10
- declare store: View;
11
-
12
- constructor(config: AugmentedViewBaseConfig) {
13
- super(config);
14
- }
15
-
16
- getData() {
17
- if (this.sealed && this.meta.version === this.cache.version && this.meta === this.store.meta)
18
- return this.cache.result;
19
- let parentStoreData = this.store.getData();
20
- let result = this.getBaseData(parentStoreData);
21
- this.embedAugmentData(result, parentStoreData);
22
- this.cache.result = result;
23
- this.cache.parentStoreData = parentStoreData;
24
- this.cache.version = this.meta.version;
25
- this.meta = this.store.meta;
26
- return this.cache.result;
27
- }
28
-
29
- protected getBaseData(parentStoreData: any): any {
30
- if (this.sealed || this.immutable || this.store.sealed) return { ...parentStoreData };
31
- return parentStoreData;
32
- }
33
-
34
- protected embedAugmentData(result: any, parentStoreData: any): void {
35
- throw new Error("abstract");
36
- }
37
-
38
- protected isExtraKey(key: string): boolean {
39
- throw new Error("abstract");
40
- }
41
-
42
- // Stores which need to support nested aliases should override this method
43
- protected getExtraKeyBinding(key: string): any {
44
- let binding = Binding.get(key);
45
- return this.isExtraKey(binding.parts[0]) ? Binding.get(binding.parts[0]) : null;
46
- }
47
-
48
- protected setExtraKeyValue(key: string, value: any): boolean {
49
- throw new Error("abstract");
50
- }
51
-
52
- protected deleteExtraKeyValue(key: string): boolean {
53
- throw new Error("abstract");
54
- }
55
-
56
- setItem(path: string, value: any): boolean {
57
- let extraKeyBinding = this.getExtraKeyBinding(path);
58
- if (extraKeyBinding) {
59
- let binding = Binding.get(path);
60
- let newValue = value;
61
- if (binding.parts.length > extraKeyBinding.parts.length) {
62
- let data = {};
63
- this.embedAugmentData(data, this.store.getData());
64
- let binding = Binding.get(path);
65
- data = binding.set(data, value);
66
- newValue = extraKeyBinding.value(data);
67
- }
68
- return this.setExtraKeyValue(extraKeyBinding.path, newValue);
69
- }
70
- return super.setItem(path, value);
71
- }
72
-
73
- deleteItem(path: string): boolean {
74
- let extraKeyBinding = this.getExtraKeyBinding(path);
75
- if (extraKeyBinding) {
76
- if (path == extraKeyBinding.path) return this.deleteExtraKeyValue(extraKeyBinding.path);
77
- let data = {};
78
- this.embedAugmentData(data, this.store.getData());
79
- let binding = Binding.get(path);
80
- data = binding.delete(data);
81
- let newValue = extraKeyBinding.value(data);
82
- return this.setExtraKeyValue(extraKeyBinding.path, newValue);
83
- }
84
- return super.deleteItem(path);
85
- }
86
- }
87
-
88
- AugmentedViewBase.prototype.immutable = false;
1
+ import { View, ViewConfig } from "./View";
2
+ import { Binding } from "./Binding";
3
+
4
+ export interface AugmentedViewBaseConfig extends ViewConfig {
5
+ store: View<any>;
6
+ }
7
+
8
+ export class AugmentedViewBase<D = any> extends View<D> {
9
+ declare immutable: boolean;
10
+ declare store: View;
11
+
12
+ constructor(config: AugmentedViewBaseConfig) {
13
+ super(config);
14
+ }
15
+
16
+ getData() {
17
+ if (this.sealed && this.meta.version === this.cache.version && this.meta === this.store.meta)
18
+ return this.cache.result;
19
+ let parentStoreData = this.store.getData();
20
+ let result = this.getBaseData(parentStoreData);
21
+ this.embedAugmentData(result, parentStoreData);
22
+ this.cache.result = result;
23
+ this.cache.parentStoreData = parentStoreData;
24
+ this.cache.version = this.meta.version;
25
+ this.meta = this.store.meta;
26
+ return this.cache.result;
27
+ }
28
+
29
+ protected getBaseData(parentStoreData: any): any {
30
+ if (this.sealed || this.immutable || this.store.sealed) return { ...parentStoreData };
31
+ return parentStoreData;
32
+ }
33
+
34
+ protected embedAugmentData(result: any, parentStoreData: any): void {
35
+ throw new Error("abstract");
36
+ }
37
+
38
+ protected isExtraKey(key: string): boolean {
39
+ throw new Error("abstract");
40
+ }
41
+
42
+ // Stores which need to support nested aliases should override this method
43
+ protected getExtraKeyBinding(key: string): any {
44
+ let binding = Binding.get(key);
45
+ return this.isExtraKey(binding.parts[0]) ? Binding.get(binding.parts[0]) : null;
46
+ }
47
+
48
+ protected setExtraKeyValue(key: string, value: any): boolean {
49
+ throw new Error("abstract");
50
+ }
51
+
52
+ protected deleteExtraKeyValue(key: string): boolean {
53
+ throw new Error("abstract");
54
+ }
55
+
56
+ setItem(path: string, value: any): boolean {
57
+ let extraKeyBinding = this.getExtraKeyBinding(path);
58
+ if (extraKeyBinding) {
59
+ let binding = Binding.get(path);
60
+ let newValue = value;
61
+ if (binding.parts.length > extraKeyBinding.parts.length) {
62
+ let data = {};
63
+ this.embedAugmentData(data, this.store.getData());
64
+ let binding = Binding.get(path);
65
+ data = binding.set(data, value);
66
+ newValue = extraKeyBinding.value(data);
67
+ }
68
+ return this.setExtraKeyValue(extraKeyBinding.path, newValue);
69
+ }
70
+ return super.setItem(path, value);
71
+ }
72
+
73
+ deleteItem(path: string): boolean {
74
+ let extraKeyBinding = this.getExtraKeyBinding(path);
75
+ if (extraKeyBinding) {
76
+ if (path == extraKeyBinding.path) return this.deleteExtraKeyValue(extraKeyBinding.path);
77
+ let data = {};
78
+ this.embedAugmentData(data, this.store.getData());
79
+ let binding = Binding.get(path);
80
+ data = binding.delete(data);
81
+ let newValue = extraKeyBinding.value(data);
82
+ return this.setExtraKeyValue(extraKeyBinding.path, newValue);
83
+ }
84
+ return super.deleteItem(path);
85
+ }
86
+ }
87
+
88
+ AugmentedViewBase.prototype.immutable = false;