cx 26.0.9 → 26.0.11

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 (238) hide show
  1. package/build/jsx-dev-runtime.d.ts +3 -0
  2. package/build/jsx-dev-runtime.js +3 -0
  3. package/build/ui/Controller.d.ts +2 -2
  4. package/build/ui/index.d.ts +2 -1
  5. package/build/ui/index.js +2 -1
  6. package/build.js +133 -133
  7. package/dist/manifest.js +887 -990
  8. package/dist/ui.js +1 -1
  9. package/package.json +4 -4
  10. package/src/jsx-dev-runtime.ts +4 -0
  11. package/src/ui/Controller.ts +2 -2
  12. package/src/ui/index.ts +2 -1
  13. package/src/widgets/HtmlElement.spec.tsx +8 -6
  14. package/build/charts/Bar.scss +0 -29
  15. package/build/charts/BarGraph.scss +0 -29
  16. package/build/charts/BubbleGraph.scss +0 -32
  17. package/build/charts/Column.scss +0 -29
  18. package/build/charts/ColumnGraph.scss +0 -30
  19. package/build/charts/Gridlines.scss +0 -25
  20. package/build/charts/Legend.scss +0 -50
  21. package/build/charts/LegendEntry.scss +0 -29
  22. package/build/charts/LineGraph.scss +0 -25
  23. package/build/charts/Marker.scss +0 -44
  24. package/build/charts/MarkerLine.scss +0 -20
  25. package/build/charts/PieChart.scss +0 -29
  26. package/build/charts/Range.scss +0 -20
  27. package/build/charts/RangeMarker.scss +0 -17
  28. package/build/charts/ScatterGraph.scss +0 -24
  29. package/build/charts/Swimlane.scss +0 -16
  30. package/build/charts/Swimlanes.scss +0 -16
  31. package/build/charts/axis/Axis.scss +0 -23
  32. package/build/charts/axis/CategoryAxis.scss +0 -35
  33. package/build/charts/axis/NumericAxis.scss +0 -35
  34. package/build/charts/axis/TimeAxis.scss +0 -34
  35. package/build/charts/axis/index.scss +0 -5
  36. package/build/charts/axis/variables.scss +0 -3
  37. package/build/charts/index.scss +0 -22
  38. package/build/charts/palette.scss +0 -97
  39. package/build/charts/variables.scss +0 -22
  40. package/build/data/ArrayElementView.spec.d.ts +0 -1
  41. package/build/data/ArrayElementView.spec.js +0 -81
  42. package/build/data/Binding.spec.d.ts +0 -1
  43. package/build/data/Binding.spec.js +0 -61
  44. package/build/data/Expression.spec.d.ts +0 -1
  45. package/build/data/Expression.spec.js +0 -196
  46. package/build/data/Grouper.spec.d.ts +0 -1
  47. package/build/data/Grouper.spec.js +0 -48
  48. package/build/data/Ref.spec.d.ts +0 -1
  49. package/build/data/Ref.spec.js +0 -72
  50. package/build/data/Store.spec.d.ts +0 -1
  51. package/build/data/Store.spec.js +0 -19
  52. package/build/data/StoreRef.spec.d.ts +0 -1
  53. package/build/data/StoreRef.spec.js +0 -22
  54. package/build/data/StringTemplate.spec.d.ts +0 -1
  55. package/build/data/StringTemplate.spec.js +0 -112
  56. package/build/data/StructuredSelector.spec.d.ts +0 -1
  57. package/build/data/StructuredSelector.spec.js +0 -102
  58. package/build/data/View.spec.d.ts +0 -1
  59. package/build/data/View.spec.js +0 -44
  60. package/build/data/ZoomIntoPropertyView.spec.d.ts +0 -1
  61. package/build/data/ZoomIntoPropertyView.spec.js +0 -54
  62. package/build/data/comparer.spec.d.ts +0 -1
  63. package/build/data/comparer.spec.js +0 -50
  64. package/build/data/computable.spec.d.ts +0 -1
  65. package/build/data/computable.spec.js +0 -56
  66. package/build/data/createAccessorModelProxy.spec.d.ts +0 -1
  67. package/build/data/createAccessorModelProxy.spec.js +0 -30
  68. package/build/data/createStructuredSelector.spec.d.ts +0 -1
  69. package/build/data/createStructuredSelector.spec.js +0 -42
  70. package/build/data/diff/diffs.spec.d.ts +0 -1
  71. package/build/data/diff/diffs.spec.js +0 -45
  72. package/build/data/getAccessor.spec.d.ts +0 -1
  73. package/build/data/getAccessor.spec.js +0 -10
  74. package/build/data/getSelector.spec.d.ts +0 -1
  75. package/build/data/getSelector.spec.js +0 -36
  76. package/build/data/ops/append.spec.d.ts +0 -1
  77. package/build/data/ops/append.spec.js +0 -24
  78. package/build/data/ops/filter.spec.d.ts +0 -1
  79. package/build/data/ops/filter.spec.js +0 -25
  80. package/build/data/ops/findTreeNode.spec.d.ts +0 -1
  81. package/build/data/ops/findTreeNode.spec.js +0 -20
  82. package/build/data/ops/merge.spec.d.ts +0 -1
  83. package/build/data/ops/merge.spec.js +0 -23
  84. package/build/data/ops/removeTreeNodes.spec.d.ts +0 -1
  85. package/build/data/ops/removeTreeNodes.spec.js +0 -35
  86. package/build/data/ops/updateArray.spec.d.ts +0 -1
  87. package/build/data/ops/updateArray.spec.js +0 -33
  88. package/build/data/ops/updateTree.spec.d.ts +0 -1
  89. package/build/data/ops/updateTree.spec.js +0 -44
  90. package/build/global.scss +0 -14
  91. package/build/hooks/invokeCallback.spec.d.ts +0 -1
  92. package/build/hooks/invokeCallback.spec.js +0 -44
  93. package/build/hooks/resolveCallback.spec.d.ts +0 -1
  94. package/build/hooks/resolveCallback.spec.js +0 -35
  95. package/build/hooks/store.spec.d.ts +0 -1
  96. package/build/hooks/store.spec.js +0 -48
  97. package/build/hooks/useTrigger.spec.d.ts +0 -1
  98. package/build/hooks/useTrigger.spec.js +0 -59
  99. package/build/index.scss +0 -6
  100. package/build/svg/Svg.scss +0 -28
  101. package/build/svg/index.scss +0 -9
  102. package/build/ui/Controller.spec.d.ts +0 -1
  103. package/build/ui/Controller.spec.js +0 -251
  104. package/build/ui/Cx.spec.d.ts +0 -1
  105. package/build/ui/Cx.spec.js +0 -153
  106. package/build/ui/DataProxy.spec.d.ts +0 -1
  107. package/build/ui/DataProxy.spec.js +0 -208
  108. package/build/ui/IsolatedScope.spec.d.ts +0 -1
  109. package/build/ui/IsolatedScope.spec.js +0 -42
  110. package/build/ui/Repeater.spec.d.ts +0 -1
  111. package/build/ui/Repeater.spec.js +0 -109
  112. package/build/ui/Rescope.spec.d.ts +0 -1
  113. package/build/ui/Rescope.spec.js +0 -134
  114. package/build/ui/Restate.spec.d.ts +0 -1
  115. package/build/ui/Restate.spec.js +0 -257
  116. package/build/ui/adapter/ArrayAdapter.spec.d.ts +0 -1
  117. package/build/ui/adapter/ArrayAdapter.spec.js +0 -44
  118. package/build/ui/adapter/TreeAdapter.spec.d.ts +0 -1
  119. package/build/ui/adapter/TreeAdapter.spec.js +0 -71
  120. package/build/ui/app/Url.spec.d.ts +0 -1
  121. package/build/ui/app/Url.spec.js +0 -43
  122. package/build/ui/createFunctionalComponent.spec.d.ts +0 -1
  123. package/build/ui/createFunctionalComponent.spec.js +0 -272
  124. package/build/ui/index.scss +0 -2
  125. package/build/ui/layout/ContentPlaceholder.spec.d.ts +0 -1
  126. package/build/ui/layout/ContentPlaceholder.spec.js +0 -333
  127. package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +0 -1
  128. package/build/ui/layout/FirstVisibleChildLayout.spec.js +0 -101
  129. package/build/ui/layout/LabelsLeftLayout.scss +0 -47
  130. package/build/ui/layout/LabelsTopLayout.scss +0 -65
  131. package/build/ui/layout/index.scss +0 -3
  132. package/build/ui/layout/variables.scss +0 -2
  133. package/build/ui/variables.scss +0 -2
  134. package/build/util/Format.spec.d.ts +0 -1
  135. package/build/util/Format.spec.js +0 -58
  136. package/build/util/TraversalStack.spec.d.ts +0 -1
  137. package/build/util/TraversalStack.spec.js +0 -43
  138. package/build/util/call-once.scss +0 -7
  139. package/build/util/date/upperBoundCheck.spec.d.ts +0 -1
  140. package/build/util/date/upperBoundCheck.spec.js +0 -22
  141. package/build/util/getSearchQueryPredicate.spec.d.ts +0 -1
  142. package/build/util/getSearchQueryPredicate.spec.js +0 -33
  143. package/build/util/index.scss +0 -11
  144. package/build/util/isValidIdentifierName.spec.d.ts +0 -1
  145. package/build/util/isValidIdentifierName.spec.js +0 -28
  146. package/build/util/routeAppend.spec.d.ts +0 -1
  147. package/build/util/routeAppend.spec.js +0 -14
  148. package/build/util/scss/add-rules.scss +0 -40
  149. package/build/util/scss/calc.scss +0 -45
  150. package/build/util/scss/call-once.scss +0 -13
  151. package/build/util/scss/clockwise.scss +0 -49
  152. package/build/util/scss/colors.scss +0 -10
  153. package/build/util/scss/deep-get.scss +0 -12
  154. package/build/util/scss/deep-merge.scss +0 -21
  155. package/build/util/scss/divide.scss +0 -3
  156. package/build/util/scss/include.scss +0 -48
  157. package/build/util/scss/index.scss +0 -9
  158. package/build/variables.scss +0 -217
  159. package/build/widgets/AccessorBindings.spec.d.ts +0 -1
  160. package/build/widgets/AccessorBindings.spec.js +0 -40
  161. package/build/widgets/Button.scss +0 -119
  162. package/build/widgets/Button.variables.scss +0 -117
  163. package/build/widgets/CxCredit.scss +0 -39
  164. package/build/widgets/FlexBox.scss +0 -148
  165. package/build/widgets/Heading.scss +0 -40
  166. package/build/widgets/HighlightedSearchText.scss +0 -20
  167. package/build/widgets/HtmlElement.spec.d.ts +0 -1
  168. package/build/widgets/HtmlElement.spec.js +0 -38
  169. package/build/widgets/Icon.scss +0 -22
  170. package/build/widgets/List.scss +0 -93
  171. package/build/widgets/ProgressBar.scss +0 -51
  172. package/build/widgets/Resizer.scss +0 -44
  173. package/build/widgets/Section.scss +0 -56
  174. package/build/widgets/animations.scss +0 -11
  175. package/build/widgets/drag-drop/DragClone.scss +0 -36
  176. package/build/widgets/drag-drop/DragHandle.scss +0 -19
  177. package/build/widgets/drag-drop/DragSource.scss +0 -27
  178. package/build/widgets/drag-drop/DropZone.scss +0 -77
  179. package/build/widgets/drag-drop/index.scss +0 -4
  180. package/build/widgets/drag-drop/variables.scss +0 -15
  181. package/build/widgets/form/Calendar.scss +0 -199
  182. package/build/widgets/form/Calendar.variables.scss +0 -64
  183. package/build/widgets/form/Checkbox.scss +0 -129
  184. package/build/widgets/form/Checkbox.variables.scss +0 -40
  185. package/build/widgets/form/ColorField.scss +0 -98
  186. package/build/widgets/form/ColorPicker.scss +0 -285
  187. package/build/widgets/form/ColorPicker.variables.scss +0 -22
  188. package/build/widgets/form/DateTimeField.scss +0 -92
  189. package/build/widgets/form/DateTimePicker.scss +0 -47
  190. package/build/widgets/form/Field.scss +0 -164
  191. package/build/widgets/form/HelpText.scss +0 -24
  192. package/build/widgets/form/Label.scss +0 -38
  193. package/build/widgets/form/LookupField.scss +0 -221
  194. package/build/widgets/form/MonthField.scss +0 -100
  195. package/build/widgets/form/MonthPicker.scss +0 -125
  196. package/build/widgets/form/NumberField.scss +0 -63
  197. package/build/widgets/form/Radio.scss +0 -123
  198. package/build/widgets/form/Radio.variables.scss +0 -46
  199. package/build/widgets/form/Select.scss +0 -101
  200. package/build/widgets/form/Slider.scss +0 -121
  201. package/build/widgets/form/Switch.scss +0 -142
  202. package/build/widgets/form/TextArea.scss +0 -45
  203. package/build/widgets/form/TextField.scss +0 -57
  204. package/build/widgets/form/UploadButton.scss +0 -49
  205. package/build/widgets/form/ValidationError.scss +0 -23
  206. package/build/widgets/form/ValidationGroup.spec.d.ts +0 -1
  207. package/build/widgets/form/ValidationGroup.spec.js +0 -62
  208. package/build/widgets/form/Wheel.scss +0 -152
  209. package/build/widgets/form/index.scss +0 -24
  210. package/build/widgets/form/variables.scss +0 -355
  211. package/build/widgets/grid/Grid.scss +0 -640
  212. package/build/widgets/grid/Pagination.scss +0 -115
  213. package/build/widgets/grid/TreeNode.scss +0 -90
  214. package/build/widgets/grid/index.scss +0 -4
  215. package/build/widgets/grid/variables.scss +0 -137
  216. package/build/widgets/index.scss +0 -16
  217. package/build/widgets/nav/Link.scss +0 -20
  218. package/build/widgets/nav/Menu.scss +0 -76
  219. package/build/widgets/nav/Menu.variables.scss +0 -25
  220. package/build/widgets/nav/MenuItem.scss +0 -130
  221. package/build/widgets/nav/Route.spec.d.ts +0 -1
  222. package/build/widgets/nav/Route.spec.js +0 -15
  223. package/build/widgets/nav/Scroller.scss +0 -148
  224. package/build/widgets/nav/Tab.scss +0 -82
  225. package/build/widgets/nav/Tab.variables.scss +0 -84
  226. package/build/widgets/nav/cover.scss +0 -22
  227. package/build/widgets/nav/index.scss +0 -6
  228. package/build/widgets/nav/variables.scss +0 -27
  229. package/build/widgets/overlay/Dropdown.scss +0 -186
  230. package/build/widgets/overlay/Overlay.scss +0 -68
  231. package/build/widgets/overlay/Toast.scss +0 -164
  232. package/build/widgets/overlay/Tooltip.scss +0 -177
  233. package/build/widgets/overlay/Window.scss +0 -129
  234. package/build/widgets/overlay/Window.variables.scss +0 -62
  235. package/build/widgets/overlay/captureMouse.scss +0 -13
  236. package/build/widgets/overlay/index.scss +0 -15
  237. package/build/widgets/overlay/variables.scss +0 -85
  238. 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 {};