cx 26.0.9 → 26.0.10

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 (235) hide show
  1. package/build/ui/Controller.d.ts +2 -2
  2. package/build/ui/index.d.ts +2 -1
  3. package/build/ui/index.js +2 -1
  4. package/build.js +133 -133
  5. package/dist/manifest.js +818 -921
  6. package/dist/ui.js +1 -1
  7. package/package.json +2 -2
  8. package/src/ui/Controller.ts +2 -2
  9. package/src/ui/index.ts +2 -1
  10. package/src/widgets/HtmlElement.spec.tsx +8 -6
  11. package/build/charts/Bar.scss +0 -29
  12. package/build/charts/BarGraph.scss +0 -29
  13. package/build/charts/BubbleGraph.scss +0 -32
  14. package/build/charts/Column.scss +0 -29
  15. package/build/charts/ColumnGraph.scss +0 -30
  16. package/build/charts/Gridlines.scss +0 -25
  17. package/build/charts/Legend.scss +0 -50
  18. package/build/charts/LegendEntry.scss +0 -29
  19. package/build/charts/LineGraph.scss +0 -25
  20. package/build/charts/Marker.scss +0 -44
  21. package/build/charts/MarkerLine.scss +0 -20
  22. package/build/charts/PieChart.scss +0 -29
  23. package/build/charts/Range.scss +0 -20
  24. package/build/charts/RangeMarker.scss +0 -17
  25. package/build/charts/ScatterGraph.scss +0 -24
  26. package/build/charts/Swimlane.scss +0 -16
  27. package/build/charts/Swimlanes.scss +0 -16
  28. package/build/charts/axis/Axis.scss +0 -23
  29. package/build/charts/axis/CategoryAxis.scss +0 -35
  30. package/build/charts/axis/NumericAxis.scss +0 -35
  31. package/build/charts/axis/TimeAxis.scss +0 -34
  32. package/build/charts/axis/index.scss +0 -5
  33. package/build/charts/axis/variables.scss +0 -3
  34. package/build/charts/index.scss +0 -22
  35. package/build/charts/palette.scss +0 -97
  36. package/build/charts/variables.scss +0 -22
  37. package/build/data/ArrayElementView.spec.d.ts +0 -1
  38. package/build/data/ArrayElementView.spec.js +0 -81
  39. package/build/data/Binding.spec.d.ts +0 -1
  40. package/build/data/Binding.spec.js +0 -61
  41. package/build/data/Expression.spec.d.ts +0 -1
  42. package/build/data/Expression.spec.js +0 -196
  43. package/build/data/Grouper.spec.d.ts +0 -1
  44. package/build/data/Grouper.spec.js +0 -48
  45. package/build/data/Ref.spec.d.ts +0 -1
  46. package/build/data/Ref.spec.js +0 -72
  47. package/build/data/Store.spec.d.ts +0 -1
  48. package/build/data/Store.spec.js +0 -19
  49. package/build/data/StoreRef.spec.d.ts +0 -1
  50. package/build/data/StoreRef.spec.js +0 -22
  51. package/build/data/StringTemplate.spec.d.ts +0 -1
  52. package/build/data/StringTemplate.spec.js +0 -112
  53. package/build/data/StructuredSelector.spec.d.ts +0 -1
  54. package/build/data/StructuredSelector.spec.js +0 -102
  55. package/build/data/View.spec.d.ts +0 -1
  56. package/build/data/View.spec.js +0 -44
  57. package/build/data/ZoomIntoPropertyView.spec.d.ts +0 -1
  58. package/build/data/ZoomIntoPropertyView.spec.js +0 -54
  59. package/build/data/comparer.spec.d.ts +0 -1
  60. package/build/data/comparer.spec.js +0 -50
  61. package/build/data/computable.spec.d.ts +0 -1
  62. package/build/data/computable.spec.js +0 -56
  63. package/build/data/createAccessorModelProxy.spec.d.ts +0 -1
  64. package/build/data/createAccessorModelProxy.spec.js +0 -30
  65. package/build/data/createStructuredSelector.spec.d.ts +0 -1
  66. package/build/data/createStructuredSelector.spec.js +0 -42
  67. package/build/data/diff/diffs.spec.d.ts +0 -1
  68. package/build/data/diff/diffs.spec.js +0 -45
  69. package/build/data/getAccessor.spec.d.ts +0 -1
  70. package/build/data/getAccessor.spec.js +0 -10
  71. package/build/data/getSelector.spec.d.ts +0 -1
  72. package/build/data/getSelector.spec.js +0 -36
  73. package/build/data/ops/append.spec.d.ts +0 -1
  74. package/build/data/ops/append.spec.js +0 -24
  75. package/build/data/ops/filter.spec.d.ts +0 -1
  76. package/build/data/ops/filter.spec.js +0 -25
  77. package/build/data/ops/findTreeNode.spec.d.ts +0 -1
  78. package/build/data/ops/findTreeNode.spec.js +0 -20
  79. package/build/data/ops/merge.spec.d.ts +0 -1
  80. package/build/data/ops/merge.spec.js +0 -23
  81. package/build/data/ops/removeTreeNodes.spec.d.ts +0 -1
  82. package/build/data/ops/removeTreeNodes.spec.js +0 -35
  83. package/build/data/ops/updateArray.spec.d.ts +0 -1
  84. package/build/data/ops/updateArray.spec.js +0 -33
  85. package/build/data/ops/updateTree.spec.d.ts +0 -1
  86. package/build/data/ops/updateTree.spec.js +0 -44
  87. package/build/global.scss +0 -14
  88. package/build/hooks/invokeCallback.spec.d.ts +0 -1
  89. package/build/hooks/invokeCallback.spec.js +0 -44
  90. package/build/hooks/resolveCallback.spec.d.ts +0 -1
  91. package/build/hooks/resolveCallback.spec.js +0 -35
  92. package/build/hooks/store.spec.d.ts +0 -1
  93. package/build/hooks/store.spec.js +0 -48
  94. package/build/hooks/useTrigger.spec.d.ts +0 -1
  95. package/build/hooks/useTrigger.spec.js +0 -59
  96. package/build/index.scss +0 -6
  97. package/build/svg/Svg.scss +0 -28
  98. package/build/svg/index.scss +0 -9
  99. package/build/ui/Controller.spec.d.ts +0 -1
  100. package/build/ui/Controller.spec.js +0 -251
  101. package/build/ui/Cx.spec.d.ts +0 -1
  102. package/build/ui/Cx.spec.js +0 -153
  103. package/build/ui/DataProxy.spec.d.ts +0 -1
  104. package/build/ui/DataProxy.spec.js +0 -208
  105. package/build/ui/IsolatedScope.spec.d.ts +0 -1
  106. package/build/ui/IsolatedScope.spec.js +0 -42
  107. package/build/ui/Repeater.spec.d.ts +0 -1
  108. package/build/ui/Repeater.spec.js +0 -109
  109. package/build/ui/Rescope.spec.d.ts +0 -1
  110. package/build/ui/Rescope.spec.js +0 -134
  111. package/build/ui/Restate.spec.d.ts +0 -1
  112. package/build/ui/Restate.spec.js +0 -257
  113. package/build/ui/adapter/ArrayAdapter.spec.d.ts +0 -1
  114. package/build/ui/adapter/ArrayAdapter.spec.js +0 -44
  115. package/build/ui/adapter/TreeAdapter.spec.d.ts +0 -1
  116. package/build/ui/adapter/TreeAdapter.spec.js +0 -71
  117. package/build/ui/app/Url.spec.d.ts +0 -1
  118. package/build/ui/app/Url.spec.js +0 -43
  119. package/build/ui/createFunctionalComponent.spec.d.ts +0 -1
  120. package/build/ui/createFunctionalComponent.spec.js +0 -272
  121. package/build/ui/index.scss +0 -2
  122. package/build/ui/layout/ContentPlaceholder.spec.d.ts +0 -1
  123. package/build/ui/layout/ContentPlaceholder.spec.js +0 -333
  124. package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +0 -1
  125. package/build/ui/layout/FirstVisibleChildLayout.spec.js +0 -101
  126. package/build/ui/layout/LabelsLeftLayout.scss +0 -47
  127. package/build/ui/layout/LabelsTopLayout.scss +0 -65
  128. package/build/ui/layout/index.scss +0 -3
  129. package/build/ui/layout/variables.scss +0 -2
  130. package/build/ui/variables.scss +0 -2
  131. package/build/util/Format.spec.d.ts +0 -1
  132. package/build/util/Format.spec.js +0 -58
  133. package/build/util/TraversalStack.spec.d.ts +0 -1
  134. package/build/util/TraversalStack.spec.js +0 -43
  135. package/build/util/call-once.scss +0 -7
  136. package/build/util/date/upperBoundCheck.spec.d.ts +0 -1
  137. package/build/util/date/upperBoundCheck.spec.js +0 -22
  138. package/build/util/getSearchQueryPredicate.spec.d.ts +0 -1
  139. package/build/util/getSearchQueryPredicate.spec.js +0 -33
  140. package/build/util/index.scss +0 -11
  141. package/build/util/isValidIdentifierName.spec.d.ts +0 -1
  142. package/build/util/isValidIdentifierName.spec.js +0 -28
  143. package/build/util/routeAppend.spec.d.ts +0 -1
  144. package/build/util/routeAppend.spec.js +0 -14
  145. package/build/util/scss/add-rules.scss +0 -40
  146. package/build/util/scss/calc.scss +0 -45
  147. package/build/util/scss/call-once.scss +0 -13
  148. package/build/util/scss/clockwise.scss +0 -49
  149. package/build/util/scss/colors.scss +0 -10
  150. package/build/util/scss/deep-get.scss +0 -12
  151. package/build/util/scss/deep-merge.scss +0 -21
  152. package/build/util/scss/divide.scss +0 -3
  153. package/build/util/scss/include.scss +0 -48
  154. package/build/util/scss/index.scss +0 -9
  155. package/build/variables.scss +0 -217
  156. package/build/widgets/AccessorBindings.spec.d.ts +0 -1
  157. package/build/widgets/AccessorBindings.spec.js +0 -40
  158. package/build/widgets/Button.scss +0 -119
  159. package/build/widgets/Button.variables.scss +0 -117
  160. package/build/widgets/CxCredit.scss +0 -39
  161. package/build/widgets/FlexBox.scss +0 -148
  162. package/build/widgets/Heading.scss +0 -40
  163. package/build/widgets/HighlightedSearchText.scss +0 -20
  164. package/build/widgets/HtmlElement.spec.d.ts +0 -1
  165. package/build/widgets/HtmlElement.spec.js +0 -38
  166. package/build/widgets/Icon.scss +0 -22
  167. package/build/widgets/List.scss +0 -93
  168. package/build/widgets/ProgressBar.scss +0 -51
  169. package/build/widgets/Resizer.scss +0 -44
  170. package/build/widgets/Section.scss +0 -56
  171. package/build/widgets/animations.scss +0 -11
  172. package/build/widgets/drag-drop/DragClone.scss +0 -36
  173. package/build/widgets/drag-drop/DragHandle.scss +0 -19
  174. package/build/widgets/drag-drop/DragSource.scss +0 -27
  175. package/build/widgets/drag-drop/DropZone.scss +0 -77
  176. package/build/widgets/drag-drop/index.scss +0 -4
  177. package/build/widgets/drag-drop/variables.scss +0 -15
  178. package/build/widgets/form/Calendar.scss +0 -199
  179. package/build/widgets/form/Calendar.variables.scss +0 -64
  180. package/build/widgets/form/Checkbox.scss +0 -129
  181. package/build/widgets/form/Checkbox.variables.scss +0 -40
  182. package/build/widgets/form/ColorField.scss +0 -98
  183. package/build/widgets/form/ColorPicker.scss +0 -285
  184. package/build/widgets/form/ColorPicker.variables.scss +0 -22
  185. package/build/widgets/form/DateTimeField.scss +0 -92
  186. package/build/widgets/form/DateTimePicker.scss +0 -47
  187. package/build/widgets/form/Field.scss +0 -164
  188. package/build/widgets/form/HelpText.scss +0 -24
  189. package/build/widgets/form/Label.scss +0 -38
  190. package/build/widgets/form/LookupField.scss +0 -221
  191. package/build/widgets/form/MonthField.scss +0 -100
  192. package/build/widgets/form/MonthPicker.scss +0 -125
  193. package/build/widgets/form/NumberField.scss +0 -63
  194. package/build/widgets/form/Radio.scss +0 -123
  195. package/build/widgets/form/Radio.variables.scss +0 -46
  196. package/build/widgets/form/Select.scss +0 -101
  197. package/build/widgets/form/Slider.scss +0 -121
  198. package/build/widgets/form/Switch.scss +0 -142
  199. package/build/widgets/form/TextArea.scss +0 -45
  200. package/build/widgets/form/TextField.scss +0 -57
  201. package/build/widgets/form/UploadButton.scss +0 -49
  202. package/build/widgets/form/ValidationError.scss +0 -23
  203. package/build/widgets/form/ValidationGroup.spec.d.ts +0 -1
  204. package/build/widgets/form/ValidationGroup.spec.js +0 -62
  205. package/build/widgets/form/Wheel.scss +0 -152
  206. package/build/widgets/form/index.scss +0 -24
  207. package/build/widgets/form/variables.scss +0 -355
  208. package/build/widgets/grid/Grid.scss +0 -640
  209. package/build/widgets/grid/Pagination.scss +0 -115
  210. package/build/widgets/grid/TreeNode.scss +0 -90
  211. package/build/widgets/grid/index.scss +0 -4
  212. package/build/widgets/grid/variables.scss +0 -137
  213. package/build/widgets/index.scss +0 -16
  214. package/build/widgets/nav/Link.scss +0 -20
  215. package/build/widgets/nav/Menu.scss +0 -76
  216. package/build/widgets/nav/Menu.variables.scss +0 -25
  217. package/build/widgets/nav/MenuItem.scss +0 -130
  218. package/build/widgets/nav/Route.spec.d.ts +0 -1
  219. package/build/widgets/nav/Route.spec.js +0 -15
  220. package/build/widgets/nav/Scroller.scss +0 -148
  221. package/build/widgets/nav/Tab.scss +0 -82
  222. package/build/widgets/nav/Tab.variables.scss +0 -84
  223. package/build/widgets/nav/cover.scss +0 -22
  224. package/build/widgets/nav/index.scss +0 -6
  225. package/build/widgets/nav/variables.scss +0 -27
  226. package/build/widgets/overlay/Dropdown.scss +0 -186
  227. package/build/widgets/overlay/Overlay.scss +0 -68
  228. package/build/widgets/overlay/Toast.scss +0 -164
  229. package/build/widgets/overlay/Tooltip.scss +0 -177
  230. package/build/widgets/overlay/Window.scss +0 -129
  231. package/build/widgets/overlay/Window.variables.scss +0 -62
  232. package/build/widgets/overlay/captureMouse.scss +0 -13
  233. package/build/widgets/overlay/index.scss +0 -15
  234. package/build/widgets/overlay/variables.scss +0 -85
  235. package/build/widgets/variables.scss +0 -146
@@ -1,34 +0,0 @@
1
- @use "sass:map";
2
-
3
- @mixin cx-timeaxis(
4
- $name: 'timeaxis',
5
- $besm: $cx-besm
6
- ) {
7
- $block: map.get($besm, block);
8
- $element: map.get($besm, element);
9
- $state: map.get($besm, state);
10
-
11
- .#{$block}#{$name} {
12
- @include cxb-axis();
13
- }
14
-
15
- .#{$element}#{$name}-ticks {
16
- @include cxe-axis-ticks();
17
- }
18
-
19
- .#{$element}#{$name}-line {
20
- @include cxe-axis-line();
21
- }
22
-
23
- .#{$element}#{$name}-label {
24
- @include cxe-axis-label();
25
- }
26
-
27
- .#{$element}#{$name}-label-offset {
28
- @include cxe-axis-label-offset();
29
- }
30
- }
31
-
32
- @if (cx-should-include('cx/charts/TimeAxis')) {
33
- @include cx-timeaxis();
34
- }
@@ -1,5 +0,0 @@
1
-
2
- @import 'Axis';
3
- @import "NumericAxis";
4
- @import "CategoryAxis";
5
- @import "TimeAxis";
@@ -1,3 +0,0 @@
1
-
2
- $cx-axis-line-stroke: rgba(128, 128, 128, 0.2) !default;
3
- $cx-axis-ticks-stroke: rgba(128, 128, 128, 0.3) !default;
@@ -1,22 +0,0 @@
1
- @import "axis/index";
2
-
3
- @import "PieChart";
4
- @import "Legend";
5
- @import "LegendEntry";
6
- @import "Gridlines";
7
- @import "Swimlanes";
8
- @import "Column";
9
- @import "Bar";
10
- @import "LineGraph";
11
- @import "ColumnGraph";
12
- @import "BarGraph";
13
- @import "ScatterGraph";
14
- @import "BubbleGraph";
15
- @import "Marker";
16
- @import "MarkerLine";
17
- @import "Range";
18
- @import "RangeMarker";
19
- @import "Swimlane";
20
-
21
- //define last for higher priority
22
- @import "palette";
@@ -1,97 +0,0 @@
1
- //https://www.materialui.co/colors
2
- //normal:200 900
3
- //hover:100 700
4
- //selected: 300 900
5
- //disabled: 0 100
6
- @use "sass:map";
7
- @use "sass:list";
8
-
9
- $cx-default-palette-colors: rgba(244, 67, 54, 1) rgba(233, 30, 99, 1) rgba(156, 39, 176, 1) rgba(103, 58, 183, 1)
10
- rgba(63, 81, 181, 1) rgba(33, 150, 243, 1) rgba(3, 169, 244, 1) rgba(0, 188, 212, 1) rgba(0, 150, 136, 1)
11
- rgba(76, 175, 80, 1) rgba(139, 195, 74, 1) rgba(205, 220, 57, 1) rgba(255, 235, 59, 1) rgba(255, 193, 7, 1)
12
- rgba(255, 152, 0, 1) rgba(255, 87, 34, 1) !default;
13
-
14
- $cx-default-palette-fill-whiten: 60% !default;
15
- $cx-default-palette-fill-hover-whiten: 50% !default;
16
- $cx-default-palette-fill-selected-whiten: 20% !default;
17
- $cx-default-palette-fill-disabled-whiten: 90% !default;
18
-
19
- $cx-default-palette-fill-blacken: 0% !default;
20
- $cx-default-palette-fill-hover-blacken: 0% !default;
21
- $cx-default-palette-fill-selected-blacken: 0% !default;
22
- $cx-default-palette-fill-disabled-blacken: 0% !default;
23
-
24
- $cx-default-palette-stroke-whiten: 0% !default;
25
- $cx-default-palette-stroke-blacken: 10% !default;
26
-
27
- @mixin cx-palette(
28
- $palette-colors: $cx-default-palette-colors,
29
- $palette-fill-whiten: $cx-default-palette-fill-whiten,
30
- $palette-fill-hover-whiten: $cx-default-palette-fill-hover-whiten,
31
- $palette-fill-selected-whiten: $cx-default-palette-fill-selected-whiten,
32
- $palette-fill-disabled-whiten: $cx-default-palette-fill-disabled-whiten,
33
- $palette-fill-blacken: $cx-default-palette-fill-blacken,
34
- $palette-fill-hover-blacken: $cx-default-palette-fill-hover-blacken,
35
- $palette-fill-selected-blacken: $cx-default-palette-fill-selected-blacken,
36
- $palette-fill-disabled-blacken: $cx-default-palette-fill-disabled-blacken,
37
- $palette-stroke-whiten: $cx-default-palette-stroke-whiten,
38
- $palette-stroke-blacken: $cx-default-palette-stroke-blacken,
39
- $besm: $cx-besm
40
- ) {
41
- $block: map.get($besm, block);
42
- $element: map.get($besm, element);
43
- $state: map.get($besm, state);
44
-
45
- @for $i from 1 through list.length($palette-colors) {
46
- $c: list.nth($palette-colors, 1 + (($i - 1) * 1) % list.length($palette-colors));
47
-
48
- .#{$state}color-#{$i - 1} {
49
- $fill: cx-blacken(cx-whiten($c, $palette-fill-whiten), $palette-fill-blacken);
50
- $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
51
- fill: $fill;
52
- stroke: $stroke;
53
- background: $fill;
54
- border-color: $stroke;
55
-
56
- &.#{$state}selectable:hover,
57
- &.#{$state}selectable.#{$state}hover,
58
- .#{$state}color-root:hover &,
59
- .#{$state}color-root.#{$state}hover & {
60
- $fill: cx-blacken(cx-whiten($c, $palette-fill-hover-whiten), $palette-fill-hover-blacken);
61
- $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
62
- fill: $fill;
63
- stroke: $stroke;
64
- background: $fill;
65
- border-color: $stroke;
66
- }
67
-
68
- &.#{$state}selected,
69
- &.#{$state}selected:hover,
70
- &.#{$state}selected.#{$state}hover,
71
- .#{$state}color-root.#{$state}selected &,
72
- .#{$state}color-root.#{$state}selected:hover &,
73
- .#{$state}color-root.#{$state}selected.#{$state}hover & {
74
- $fill: cx-blacken(cx-whiten($c, $palette-fill-selected-whiten), $palette-fill-selected-blacken);
75
- $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
76
- fill: $fill;
77
- stroke: $stroke;
78
- background: $fill;
79
- border-color: $stroke;
80
- }
81
-
82
- &.#{$state}disabled,
83
- .#{$state}color-root.#{$state}disabled & {
84
- $fill: cx-blacken(cx-whiten($c, $palette-fill-disabled-whiten), $palette-fill-disabled-blacken);
85
- $stroke: cx-blacken(cx-whiten($fill, $palette-stroke-whiten), $palette-stroke-blacken);
86
- fill: $fill;
87
- stroke: $stroke;
88
- background: $fill;
89
- border-color: $stroke;
90
- }
91
- }
92
- }
93
- }
94
-
95
- @if (cx-should-include("cx/charts/palette")) {
96
- @include cx-palette();
97
- }
@@ -1,22 +0,0 @@
1
- @use "sass:map";
2
- @import "axis/variables";
3
-
4
- $cx-default-swimlanes-lane-background-color: #f1f1f1;
5
- $cx-default-range-marker-color: #696969;
6
-
7
- $cx-dependencies: map.merge(
8
- $cx-dependencies,
9
- (
10
- "cx/charts/Bar": "cx/charts/palette",
11
- "cx/charts/BarGraph": "cx/charts/palette",
12
- "cx/charts/Column": "cx/charts/palette",
13
- "cx/charts/ColumnGraph": "cx/charts/palette",
14
- "cx/charts/LineGraph": "cx/charts/palette",
15
- "cx/charts/ColorMap": "cx/charts/palette",
16
- "cx/charts/ScatterGraph": "cx/charts/palette",
17
- "cx/charts/BubbleGraph": "cx/charts/palette",
18
- "cx/charts/MarkerLine": "cx/charts/palette",
19
- "cx/charts/Marker": "cx/charts/palette",
20
- "cx/charts/PieChart": "cx/charts/palette",
21
- )
22
- );
@@ -1 +0,0 @@
1
- export {};
@@ -1,81 +0,0 @@
1
- //@ts-nocheck
2
- import assert from "assert";
3
- import { ArrayElementView } from "./ArrayElementView";
4
- import { getAccessor } from "./getAccessor";
5
- import { Store } from "./Store";
6
- describe("ArrayElementView", function () {
7
- it("exposes the element as under the $record alias", function () {
8
- let letters = [{ letter: "A" }, { letter: "B" }];
9
- let store = new Store({ data: { letters } });
10
- let elementView = new ArrayElementView({ store, itemIndex: 1, arrayAccessor: getAccessor({ bind: "letters" }) });
11
- let record = elementView.get("$record");
12
- assert.equal(record, letters[1]);
13
- });
14
- it("changes of the $record are propagated", function () {
15
- let letters = [{ letter: "A" }, { letter: "B" }];
16
- let store = new Store({ data: { letters } });
17
- let elementView = new ArrayElementView({ store, itemIndex: 1, arrayAccessor: getAccessor({ bind: "letters" }) });
18
- elementView.set("$record.letter", "C");
19
- assert.deepEqual(store.get("letters"), [letters[0], { letter: "C" }]);
20
- });
21
- it("removes the element if the $record is deleted", function () {
22
- let letters = [{ letter: "A" }, { letter: "B" }];
23
- let store = new Store({ data: { letters } });
24
- let elementView = new ArrayElementView({ store, itemIndex: 1, arrayAccessor: getAccessor({ bind: "letters" }) });
25
- elementView.delete("$record");
26
- assert.deepEqual(store.get("letters"), [...letters[0]]);
27
- });
28
- it("exposes the element as under the given alias", function () {
29
- let letters = [{ letter: "A" }, { letter: "B" }];
30
- let store = new Store({ data: { letters } });
31
- let elementView = new ArrayElementView({
32
- store,
33
- itemIndex: 1,
34
- arrayAccessor: getAccessor({ bind: "letters" }),
35
- recordAlias: "$letter",
36
- });
37
- let record = elementView.get("$letter");
38
- assert.equal(record, letters[1]);
39
- });
40
- it("aliases allow nesting", function () {
41
- let letters = [{ letter: "A" }, { letter: "B" }];
42
- let store = new Store({ data: { letters } });
43
- let elementView = new ArrayElementView({
44
- store,
45
- itemIndex: 1,
46
- arrayAccessor: getAccessor({ bind: "letters" }),
47
- recordAlias: "$iter.letter",
48
- indexAlias: "$iter.index.letter",
49
- });
50
- let record = elementView.get("$iter.letter");
51
- assert.equal(record, letters[1]);
52
- assert.equal(elementView.get("$iter.index.letter"), 1);
53
- elementView.set("$iter.letter.letter", "C");
54
- assert.equal(store.get("letters.1.letter"), "C");
55
- });
56
- it("when immutable preserves the parent data object", function () {
57
- let letters = [{ letter: "A" }, { letter: "B" }];
58
- let store = new Store({ data: { letters } });
59
- let elementView = new ArrayElementView({
60
- store,
61
- itemIndex: 1,
62
- arrayAccessor: getAccessor({ bind: "letters" }),
63
- immutable: true,
64
- });
65
- let record = elementView.get("$record");
66
- assert.equal(record, letters[1]);
67
- assert(!store.getData().hasOwnProperty("$record"));
68
- });
69
- it("respects the parent's store sealed flag", function () {
70
- let letters = [{ letter: "A" }, { letter: "B" }];
71
- let store = new Store({ data: { letters }, sealed: true });
72
- let elementView = new ArrayElementView({
73
- store,
74
- itemIndex: 1,
75
- arrayAccessor: getAccessor({ bind: "letters" }),
76
- });
77
- let record = elementView.get("$record");
78
- assert.equal(record, letters[1]);
79
- assert(!store.getData().hasOwnProperty("$record"));
80
- });
81
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,61 +0,0 @@
1
- import { Binding } from "./Binding";
2
- import assert from "assert";
3
- import { createAccessorModelProxy } from "./createAccessorModelProxy";
4
- describe("Binding", function () {
5
- describe("#get()", function () {
6
- it("should get value if value is defined", function () {
7
- var state = { person: { name: "Joe" } };
8
- var b = Binding.get("person.name");
9
- assert.equal(b.value(state), "Joe");
10
- });
11
- it("allows non-standard property identifiers", function () {
12
- var state = { person: { "@schema": "Person" } };
13
- var b = Binding.get("person.@schema");
14
- assert.equal(b.path, "person.@schema");
15
- assert.equal(b.value(state), "Person");
16
- });
17
- it("properly resolves accessor models", function () {
18
- var state = { person: { schema: "Person" } };
19
- var b = Binding.get(createAccessorModelProxy("person.schema"));
20
- assert.equal(b.value(state), "Person");
21
- });
22
- });
23
- describe("#set()", function () {
24
- it("produces new objects along the binding path", function () {
25
- var state = { person: { name: "Joe" } };
26
- var b = Binding.get("person.name");
27
- var ns = b.set(state, "Jack");
28
- assert.equal(ns.person.name, "Jack");
29
- assert.notEqual(state, ns);
30
- assert.notEqual(state.person, ns.person);
31
- assert.notEqual(state.person.name, ns.person.name);
32
- });
33
- it("returns same state object if value does not change", function () {
34
- var state = { person: { name: "Joe" } };
35
- var b = Binding.get("person.name");
36
- var ns = b.set(state, "Joe");
37
- assert.equal(state, ns);
38
- });
39
- it("allows non-standard property identifiers", function () {
40
- var state = { person: { "@schema": "Person" } };
41
- var b = Binding.get("person.@schema");
42
- var ns = b.set(state, "Test");
43
- assert.equal(ns.person["@schema"], "Test");
44
- });
45
- });
46
- describe(".delete()", function () {
47
- it("correctly removes pointed properties", function () {
48
- var state = { person: { name: "Joe" } };
49
- var b = Binding.get("person.name");
50
- var ns = b.delete(state);
51
- assert("person" in ns);
52
- assert(!("name" in ns.person));
53
- });
54
- it("does not change state if property is non-existent", function () {
55
- var state = { person: { name: "Joe" } };
56
- var b = Binding.get("person.name2");
57
- var ns = b.delete(state);
58
- assert(ns == state);
59
- });
60
- });
61
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,196 +0,0 @@
1
- import { Expression } from "./Expression";
2
- import assert from "assert";
3
- import { StringTemplate } from "./StringTemplate";
4
- describe("Expression", function () {
5
- describe("#compile()", function () {
6
- it("returns a selector", function () {
7
- let e = Expression.compile("{person.name}");
8
- let state = {
9
- person: {
10
- name: "Jim",
11
- },
12
- };
13
- assert.equal(e(state), "Jim");
14
- });
15
- it("ignores bindings in strings", function () {
16
- let e = Expression.compile('"{person.name}"');
17
- let state = {
18
- person: {
19
- name: "Jim",
20
- },
21
- };
22
- assert.equal(e(state), "{person.name}");
23
- });
24
- it("allows mixed curly braces in strings", () => {
25
- let e = Expression.compile('"Hello {" + "person.name}"');
26
- assert.equal(e({}), "Hello {person.name}");
27
- });
28
- it("properly encodes quotes #1", function () {
29
- let e = Expression.compile('"\'"');
30
- let state = {};
31
- assert.equal(e(state), "'");
32
- });
33
- it("properly encodes quotes #2", function () {
34
- let e = Expression.compile('"\\""');
35
- let state = {};
36
- assert.equal(e(state), '"');
37
- });
38
- it("properly encodes quotes #3", function () {
39
- let e = Expression.compile('"\\\\\\""');
40
- let state = {};
41
- assert.equal(e(state), '\\"');
42
- });
43
- it("properly encodes quotes #4", function () {
44
- let e = Expression.compile('"\\\\"');
45
- let state = {};
46
- assert.equal(e(state), "\\");
47
- });
48
- });
49
- describe("allow subexpressions", function () {
50
- it("in square brackets", function () {
51
- let e = Expression.compile("{[{person.name}]}");
52
- let state = {
53
- person: {
54
- name: "Jim",
55
- },
56
- };
57
- assert.equal(e(state), "Jim");
58
- });
59
- it("in square brackets", function () {
60
- let e = Expression.compile("{[{person.alias} || {person.name}]}");
61
- let state = {
62
- person: {
63
- name: "Jim",
64
- alias: "J",
65
- },
66
- };
67
- assert.equal(e(state), "J");
68
- });
69
- it("prefixed with % sign", function () {
70
- let e = Expression.compile("%{1+1}");
71
- assert.equal(e({}), "2");
72
- });
73
- it("can be formatted", function () {
74
- let e = Expression.compile("{[1+1]:f;2}");
75
- assert.equal(e({}), "2.00");
76
- });
77
- it("n level deep", function () {
78
- let e = Expression.compile("{[{[{[1+1]}]}]:f;2}");
79
- assert.equal(e({}), "2.00");
80
- });
81
- it("with complex math inside", function () {
82
- let e = Expression.compile("%{{data}.reduce((a,b)=>a+b, 0):f;2}");
83
- let state = {
84
- data: [1, 2, 3],
85
- };
86
- assert.equal(e(state), "6.00");
87
- });
88
- it("with a conditional operator inside", function () {
89
- let e = Expression.compile('{[true ? "T" : "F"]}');
90
- assert.equal(e({}), "T");
91
- });
92
- it("with string interpolation inside", function () {
93
- let e = Expression.compile("{[`${{test}}`]}");
94
- assert.equal(e({ test: "T" }), "T");
95
- });
96
- });
97
- describe("are working", function () {
98
- it("function expressions with get", function () {
99
- let e = Expression.get((get) => get("a") + get("b"));
100
- assert.equal(e({ a: 1, b: 2 }), 3);
101
- });
102
- it("are properly memoized", function () {
103
- let inv = 0;
104
- let e = Expression.get((get) => {
105
- inv++;
106
- return get("a") + get("b");
107
- }).memoize();
108
- assert.equal(e({ a: 1, b: 1 }), 2);
109
- assert.equal(inv, 1);
110
- assert.equal(e({ a: 1, b: 1 }), 2);
111
- assert.equal(inv, 1);
112
- assert.equal(e({ a: 1, b: 2 }), 3);
113
- assert.equal(inv, 2);
114
- assert.equal(e({ a: 1, b: 2 }), 3);
115
- assert.equal(inv, 2);
116
- assert.equal(e({ a: 2, b: 2 }), 4);
117
- assert.equal(inv, 3);
118
- });
119
- it("formatting can be used inside bindings", function () {
120
- let e = Expression.get((get) => get("name:prefix;Hello "));
121
- assert(e({ name: "CxJS" }), "Hello CxJS");
122
- });
123
- it("allows using the fmt function inside", function () {
124
- let e = Expression.compile('{[fmt({text}, "prefix;Hello ")]}');
125
- assert.equal(e({ text: "CxJS" }), "Hello CxJS");
126
- });
127
- it("allows using dashes inside names", function () {
128
- let e = Expression.compile("{framework-name}");
129
- assert.equal(e({ "framework-name": "CxJS" }), "CxJS");
130
- });
131
- it("allows using spaces and other characters inside names", function () {
132
- let e = Expression.compile("{1nv@lid js ident1fier}");
133
- assert.equal(e({ "1nv@lid js ident1fier": "CxJS" }), "CxJS");
134
- });
135
- it("allows strings in subexpressions", () => {
136
- let e = Expression.compile("{['1']}");
137
- assert.equal(e({}), "1");
138
- let e2 = Expression.compile('%{"1"}');
139
- assert.equal(e({}), "1");
140
- });
141
- it("allows string templates in nested expressions", () => {
142
- Expression.registerHelper("tpl", StringTemplate.format);
143
- let e = Expression.compile("tpl('{0:n;2} {1:p;2:wrap;(;)}', {value}, {percentage})");
144
- assert.equal(e({ value: 1, percentage: 0.02 }), "1.00 (2.00%)");
145
- let e2 = Expression.compile("{[tpl('{0:n;2} {1:p;2:wrap;(;)}', {value}, {percentage})]}");
146
- assert.equal(e2({ value: 1, percentage: 0.02 }), "1.00 (2.00%)");
147
- // we're going to need a better parser for this
148
- // let e3 = Expression.compile("%{tpl('{0:n;2} {1:p;2:wrap;(;)}', {value}, {percentage})}");
149
- // assert.equal(e3({ value: 1, percentage: 0.02 }), "1.00 (2.00%)");
150
- });
151
- it("string templates can be in the data", () => {
152
- Expression.registerHelper("tpl", StringTemplate.format);
153
- let e = Expression.compile("tpl({template}, {value}, {percentage})");
154
- assert.equal(e({ value: 1, percentage: 0.02, template: "{0:n;2} {1:p;2:wrap;(;)}" }), "1.00 (2.00%)");
155
- });
156
- // it('are properly memoized with proxies', function () {
157
- // let inv = 0;
158
- // let e = Expression.get(d => { inv++; return d.a + d.b}).memoize();
159
- //
160
- // assert.equal(e({ a: 1, b: 1 }), 2);
161
- // assert.equal(inv, 1);
162
- //
163
- // assert.equal(e({ a: 1, b: 1 }), 2);
164
- // assert.equal(inv, 1);
165
- //
166
- // assert.equal(e({ a: 1, b: 2 }), 3);
167
- // assert.equal(inv, 2);
168
- //
169
- // assert.equal(e({ a: 1, b: 2 }), 3);
170
- // assert.equal(inv, 2);
171
- //
172
- // assert.equal(e({ a: 2, b: 2 }), 4);
173
- // assert.equal(inv, 3);
174
- // });
175
- //
176
- // it('are properly memoized with proxies and deep data', function () {
177
- // let inv = 0;
178
- // let e = Expression.get(d => { inv++; return d.v.a + d.v.b}).memoize();
179
- //
180
- // assert.equal(e({ v: { a: 1, b: 1 }}), 2);
181
- // assert.equal(inv, 1);
182
- //
183
- // assert.equal(e({ v: { a: 1, b: 1 }}), 2);
184
- // assert.equal(inv, 1);
185
- //
186
- // assert.equal(e({ v: { a: 1, b: 2 }}), 3);
187
- // assert.equal(inv, 2);
188
- //
189
- // assert.equal(e({ v: { a: 1, b: 2 }}), 3);
190
- // assert.equal(inv, 2);
191
- //
192
- // assert.equal(e({ v: { a: 2, b: 2 }}), 4);
193
- // assert.equal(inv, 3);
194
- // });
195
- });
196
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,48 +0,0 @@
1
- import { Grouper } from "./Grouper";
2
- import assert from "assert";
3
- describe("Grouper", function () {
4
- describe("single grouping", function () {
5
- it("should work", function () {
6
- let data = [
7
- { name: "John", age: 12 },
8
- { name: "Jane", age: 12 },
9
- ];
10
- let grouper = new Grouper({ name: { bind: "name" } });
11
- grouper.processAll(data);
12
- let results = grouper.getResults();
13
- // console.log(results);
14
- assert.equal(results.length, 2);
15
- });
16
- it("keys can have nested properties", function () {
17
- let data = [
18
- { name: "John", age: 12 },
19
- { name: "Jane", age: 12 },
20
- ];
21
- let grouper = new Grouper({ "person.name": { bind: "name" } });
22
- grouper.processAll(data);
23
- let results = grouper.getResults();
24
- assert.equal(results.length, 2);
25
- assert.equal(results[0].key.person?.name, "John");
26
- assert.equal(results[1].key.person?.name, "Jane");
27
- });
28
- });
29
- describe("multi grouping", function () {
30
- it("should work", function () {
31
- let data = [
32
- { name: "John", age: 12 },
33
- { name: "John", age: 12 },
34
- { name: "John", age: 13 },
35
- { name: "John", age: 14 },
36
- { name: "Jane", age: 12 },
37
- { name: "Jane", age: 13 },
38
- { name: "Jane", age: 14 },
39
- ];
40
- let grouper = new Grouper({ name: { bind: "name" }, age: { bind: "age" } });
41
- grouper.processAll(data);
42
- let results = grouper.getResults();
43
- // console.log(results);
44
- assert.equal(results.length, 6);
45
- assert.equal(results[0].records.length, 2);
46
- });
47
- });
48
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,72 +0,0 @@
1
- //@ts-nocheck
2
- import assert from "assert";
3
- import { Store } from "./Store";
4
- import { Ref } from "./Ref";
5
- import { append } from "./ops/append";
6
- import { StoreRef } from "./StoreRef";
7
- const getStore = () => {
8
- return new Store({
9
- data: {
10
- a: 3,
11
- item: {
12
- firstName: "Jack",
13
- },
14
- array: [],
15
- },
16
- });
17
- };
18
- describe("Ref", () => {
19
- it("can init data", () => {
20
- let store = getStore();
21
- let b = store.ref("b", 1);
22
- assert.equal(store.get("b"), 1);
23
- });
24
- it("can set data", () => {
25
- let store = getStore();
26
- let b = store.ref("b", 1);
27
- b.set(2);
28
- assert.equal(store.get("b"), 2);
29
- });
30
- it("can delete data", () => {
31
- let store = getStore();
32
- let b = store.ref("item");
33
- b.delete();
34
- assert.equal(store.get("item"), undefined);
35
- });
36
- it("can cast itself to a ref of another type", () => {
37
- class ArrayRef extends StoreRef {
38
- append(...args) {
39
- this.update(append, ...args);
40
- }
41
- }
42
- let store = getStore();
43
- let array = store.ref("array").as(ArrayRef);
44
- array.append(1, 2, 3);
45
- assert.deepEqual(array.get(), [1, 2, 3]);
46
- });
47
- it("can extend itself in a functional way", () => {
48
- let store = getStore();
49
- let array = store.ref("array").as(({ update, set, path }) => ({
50
- append(...args) {
51
- update(path, append, ...args);
52
- },
53
- clear() {
54
- set(path, []);
55
- },
56
- }));
57
- array.append(1, 2, 3);
58
- assert.deepEqual(array.get(), [1, 2, 3]);
59
- array.clear();
60
- assert.deepEqual(array.get(), []);
61
- });
62
- it("can get subrefs", () => {
63
- let store = getStore();
64
- let person = new Ref({
65
- get: () => store.get("person"),
66
- set: (value) => store.set("person", value),
67
- });
68
- let name = person.ref("name");
69
- name.set("John");
70
- assert.equal(name.get(), "John");
71
- });
72
- });
@@ -1 +0,0 @@
1
- export {};