cx 26.0.12 → 26.0.14
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.
- package/build/charts/ScatterGraph.d.ts +4 -4
- package/build/charts/ScatterGraph.js +2 -2
- package/build/data/ArrayElementView.spec.d.ts +1 -0
- package/build/data/ArrayElementView.spec.js +81 -0
- package/build/data/Binding.spec.d.ts +1 -0
- package/build/data/Binding.spec.js +61 -0
- package/build/data/Expression.spec.d.ts +1 -0
- package/build/data/Expression.spec.js +196 -0
- package/build/data/Grouper.spec.d.ts +1 -0
- package/build/data/Grouper.spec.js +48 -0
- package/build/data/Ref.spec.d.ts +1 -0
- package/build/data/Ref.spec.js +72 -0
- package/build/data/Selector.d.ts +1 -1
- package/build/data/Store.spec.d.ts +1 -0
- package/build/data/Store.spec.js +19 -0
- package/build/data/StoreRef.spec.d.ts +1 -0
- package/build/data/StoreRef.spec.js +22 -0
- package/build/data/StringTemplate.spec.d.ts +1 -0
- package/build/data/StringTemplate.spec.js +112 -0
- package/build/data/StructuredSelector.spec.d.ts +1 -0
- package/build/data/StructuredSelector.spec.js +102 -0
- package/build/data/View.spec.d.ts +1 -0
- package/build/data/View.spec.js +44 -0
- package/build/data/ZoomIntoPropertyView.spec.d.ts +1 -0
- package/build/data/ZoomIntoPropertyView.spec.js +54 -0
- package/build/data/comparer.spec.d.ts +1 -0
- package/build/data/comparer.spec.js +50 -0
- package/build/data/computable.d.ts +3 -6
- package/build/data/computable.spec.d.ts +1 -0
- package/build/data/computable.spec.js +56 -0
- package/build/data/createAccessorModelProxy.d.ts +5 -3
- package/build/data/createAccessorModelProxy.spec.d.ts +1 -0
- package/build/data/createAccessorModelProxy.spec.js +30 -0
- package/build/data/createStructuredSelector.spec.d.ts +1 -0
- package/build/data/createStructuredSelector.spec.js +42 -0
- package/build/data/diff/diffs.spec.d.ts +1 -0
- package/build/data/diff/diffs.spec.js +45 -0
- package/build/data/getAccessor.spec.d.ts +1 -0
- package/build/data/getAccessor.spec.js +10 -0
- package/build/data/getSelector.spec.d.ts +1 -0
- package/build/data/getSelector.spec.js +36 -0
- package/build/data/ops/append.spec.d.ts +1 -0
- package/build/data/ops/append.spec.js +24 -0
- package/build/data/ops/filter.spec.d.ts +1 -0
- package/build/data/ops/filter.spec.js +25 -0
- package/build/data/ops/findTreeNode.d.ts +1 -1
- package/build/data/ops/findTreeNode.js +1 -1
- package/build/data/ops/findTreeNode.spec.d.ts +1 -0
- package/build/data/ops/findTreeNode.spec.js +20 -0
- package/build/data/ops/findTreePath.d.ts +1 -1
- package/build/data/ops/merge.spec.d.ts +1 -0
- package/build/data/ops/merge.spec.js +23 -0
- package/build/data/ops/removeTreeNodes.d.ts +1 -1
- package/build/data/ops/removeTreeNodes.js +1 -1
- package/build/data/ops/removeTreeNodes.spec.d.ts +1 -0
- package/build/data/ops/removeTreeNodes.spec.js +35 -0
- package/build/data/ops/updateArray.spec.d.ts +1 -0
- package/build/data/ops/updateArray.spec.js +33 -0
- package/build/data/ops/updateTree.d.ts +1 -1
- package/build/data/ops/updateTree.spec.d.ts +1 -0
- package/build/data/ops/updateTree.spec.js +44 -0
- package/build/hooks/invokeCallback.spec.d.ts +1 -0
- package/build/hooks/invokeCallback.spec.js +44 -0
- package/build/hooks/resolveCallback.spec.d.ts +1 -0
- package/build/hooks/resolveCallback.spec.js +35 -0
- package/build/hooks/store.spec.d.ts +1 -0
- package/build/hooks/store.spec.js +48 -0
- package/build/hooks/useTrigger.spec.d.ts +1 -0
- package/build/hooks/useTrigger.spec.js +59 -0
- package/build/jsx-runtime.d.ts +10 -10
- package/build/jsx-runtime.js +6 -0
- package/build/svg/util/Rect.d.ts +1 -1
- package/build/ui/ContentResolver.d.ts +16 -6
- package/build/ui/Controller.d.ts +7 -0
- package/build/ui/Controller.js +2 -1
- package/build/ui/Controller.spec.d.ts +1 -0
- package/build/ui/Controller.spec.js +247 -0
- package/build/ui/Cx.spec.d.ts +1 -0
- package/build/ui/Cx.spec.js +153 -0
- package/build/ui/DataProxy.spec.d.ts +1 -0
- package/build/ui/DataProxy.spec.js +208 -0
- package/build/ui/Instance.d.ts +1 -1
- package/build/ui/Instance.js +10 -10
- package/build/ui/IsolatedScope.spec.d.ts +1 -0
- package/build/ui/IsolatedScope.spec.js +42 -0
- package/build/ui/Prop.d.ts +12 -1
- package/build/ui/PureContainer.spec.d.ts +1 -0
- package/build/ui/PureContainer.spec.js +149 -0
- package/build/ui/Repeater.d.ts +3 -3
- package/build/ui/Repeater.spec.d.ts +1 -0
- package/build/ui/Repeater.spec.js +109 -0
- package/build/ui/Rescope.spec.d.ts +1 -0
- package/build/ui/Rescope.spec.js +134 -0
- package/build/ui/Restate.spec.d.ts +1 -0
- package/build/ui/Restate.spec.js +257 -0
- package/build/ui/Text.d.ts +14 -2
- package/build/ui/Text.js +3 -0
- package/build/ui/adapter/ArrayAdapter.js +4 -1
- package/build/ui/adapter/ArrayAdapter.spec.d.ts +1 -0
- package/build/ui/adapter/ArrayAdapter.spec.js +44 -0
- package/build/ui/adapter/TreeAdapter.spec.d.ts +1 -0
- package/build/ui/adapter/TreeAdapter.spec.js +71 -0
- package/build/ui/app/Url.spec.d.ts +1 -0
- package/build/ui/app/Url.spec.js +43 -0
- package/build/ui/app/startHotAppLoop.js +1 -1
- package/build/ui/createFunctionalComponent.d.ts +14 -1
- package/build/ui/createFunctionalComponent.js +7 -4
- package/build/ui/createFunctionalComponent.spec.d.ts +1 -0
- package/build/ui/createFunctionalComponent.spec.js +272 -0
- package/build/ui/expr.d.ts +3 -1
- package/build/ui/exprHelpers.d.ts +32 -0
- package/build/ui/exprHelpers.js +61 -0
- package/build/ui/index.d.ts +1 -0
- package/build/ui/index.js +1 -0
- package/build/ui/layout/ContentPlaceholder.spec.d.ts +1 -0
- package/build/ui/layout/ContentPlaceholder.spec.js +333 -0
- package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +1 -0
- package/build/ui/layout/FirstVisibleChildLayout.spec.js +101 -0
- package/build/util/Console.d.ts +1 -0
- package/build/util/Console.js +7 -3
- package/build/util/Format.spec.d.ts +1 -0
- package/build/util/Format.spec.js +58 -0
- package/build/util/TraversalStack.spec.d.ts +1 -0
- package/build/util/TraversalStack.spec.js +43 -0
- package/build/util/date/upperBoundCheck.spec.d.ts +1 -0
- package/build/util/date/upperBoundCheck.spec.js +22 -0
- package/build/util/getSearchQueryPredicate.spec.d.ts +1 -0
- package/build/util/getSearchQueryPredicate.spec.js +33 -0
- package/build/util/isValidIdentifierName.spec.d.ts +1 -0
- package/build/util/isValidIdentifierName.spec.js +28 -0
- package/build/util/routeAppend.spec.d.ts +1 -0
- package/build/util/routeAppend.spec.js +14 -0
- package/build/widgets/AccessorBindings.spec.d.ts +1 -0
- package/build/widgets/AccessorBindings.spec.js +40 -0
- package/build/widgets/Button.d.ts +3 -6
- package/build/widgets/Button.js +1 -1
- package/build/widgets/DocumentTitle.d.ts +2 -0
- package/build/widgets/Heading.d.ts +2 -2
- package/build/widgets/HtmlElement.d.ts +31 -8
- package/build/widgets/HtmlElement.js +7 -9
- package/build/widgets/HtmlElement.spec.d.ts +1 -0
- package/build/widgets/HtmlElement.spec.js +38 -0
- package/build/widgets/Icon.d.ts +3 -13
- package/build/widgets/List.d.ts +4 -0
- package/build/widgets/ReactElementWrapper.d.ts +29 -0
- package/build/widgets/ReactElementWrapper.js +59 -0
- package/build/widgets/drag-drop/DragSource.d.ts +3 -3
- package/build/widgets/drag-drop/DragSource.js +2 -3
- package/build/widgets/drag-drop/DropZone.d.ts +3 -3
- package/build/widgets/drag-drop/DropZone.js +2 -3
- package/build/widgets/form/Checkbox.d.ts +2 -0
- package/build/widgets/form/ColorField.d.ts +2 -0
- package/build/widgets/form/DateTimeField.d.ts +2 -0
- package/build/widgets/form/Field.d.ts +0 -2
- package/build/widgets/form/LabeledContainer.d.ts +9 -8
- package/build/widgets/form/LabeledContainer.js +9 -9
- package/build/widgets/form/LookupField.d.ts +57 -9
- package/build/widgets/form/MonthField.d.ts +2 -0
- package/build/widgets/form/NumberField.d.ts +2 -0
- package/build/widgets/form/Radio.d.ts +2 -0
- package/build/widgets/form/Select.d.ts +2 -0
- package/build/widgets/form/Slider.d.ts +3 -0
- package/build/widgets/form/Switch.d.ts +2 -0
- package/build/widgets/form/TextField.d.ts +34 -0
- package/build/widgets/form/TimeList.d.ts +16 -1
- package/build/widgets/form/TimeList.js +34 -62
- package/build/widgets/form/UploadButton.d.ts +34 -2
- package/build/widgets/form/UploadButton.js +3 -1
- package/build/widgets/form/ValidationGroup.spec.d.ts +1 -0
- package/build/widgets/form/ValidationGroup.spec.js +62 -0
- package/build/widgets/form/Validator.d.ts +33 -2
- package/build/widgets/form/Validator.js +3 -0
- package/build/widgets/grid/Grid.d.ts +9 -9
- package/build/widgets/grid/TreeNode.d.ts +6 -0
- package/build/widgets/index.d.ts +1 -0
- package/build/widgets/index.js +1 -0
- package/build/widgets/nav/MenuItem.d.ts +3 -2
- package/build/widgets/nav/Route.spec.d.ts +1 -0
- package/build/widgets/nav/Route.spec.js +15 -0
- package/build/widgets/nav/Scroller.d.ts +4 -6
- package/build/widgets/nav/Scroller.js +6 -3
- package/build/widgets/nav/Tab.d.ts +2 -2
- package/build/widgets/overlay/ContextMenu.d.ts +3 -3
- package/build/widgets/overlay/Overlay.d.ts +2 -1
- package/build/widgets/overlay/Overlay.js +1 -1
- package/build/widgets/overlay/createHotPromiseWindowFactory.js +0 -1
- package/build.js +133 -133
- package/dist/data.js +2 -2
- package/dist/jsx-runtime.js +6 -1
- package/dist/manifest.d.ts +1443 -0
- package/dist/manifest.js +761 -713
- package/dist/ui.js +91 -5
- package/dist/util.js +3 -0
- package/dist/widgets.js +520 -162
- package/package.json +46 -20
- package/src/charts/Chart.ts +108 -108
- package/src/charts/ScatterGraph.tsx +6 -6
- package/src/data/ArrayElementView.ts +90 -90
- package/src/data/AugmentedViewBase.ts +88 -88
- package/src/data/Binding.ts +104 -104
- package/src/data/ExposedRecordView.ts +95 -95
- package/src/data/ExposedValueView.ts +89 -89
- package/src/data/Expression.spec.ts +229 -229
- package/src/data/Expression.ts +233 -233
- package/src/data/Grouper.spec.ts +57 -57
- package/src/data/Grouper.ts +158 -158
- package/src/data/NestedDataView.ts +43 -43
- package/src/data/ReadOnlyDataView.ts +39 -39
- package/src/data/Ref.ts +104 -104
- package/src/data/Selector.ts +10 -10
- package/src/data/Store.ts +52 -52
- package/src/data/StoreProxy.ts +19 -19
- package/src/data/StoreRef.ts +66 -66
- package/src/data/StringTemplate.spec.ts +132 -132
- package/src/data/StringTemplate.ts +93 -93
- package/src/data/StructuredSelector.spec.ts +113 -113
- package/src/data/StructuredSelector.ts +146 -146
- package/src/data/SubscribableView.ts +63 -63
- package/src/data/ZoomIntoPropertyView.spec.ts +64 -64
- package/src/data/ZoomIntoPropertyView.ts +45 -45
- package/src/data/computable.spec.ts +87 -62
- package/src/data/computable.ts +3 -6
- package/src/data/createAccessorModelProxy.spec.tsx +102 -1
- package/src/data/createAccessorModelProxy.ts +9 -3
- package/src/data/createStructuredSelector.ts +62 -62
- package/src/data/getAccessor.spec.ts +11 -11
- package/src/data/getAccessor.ts +74 -74
- package/src/data/getSelector.spec.ts +43 -43
- package/src/data/getSelector.ts +66 -66
- package/src/data/ops/filter.spec.ts +35 -35
- package/src/data/ops/filter.ts +9 -9
- package/src/data/ops/findTreeNode.ts +1 -5
- package/src/data/ops/findTreePath.ts +1 -1
- package/src/data/ops/merge.ts +13 -13
- package/src/data/ops/removeTreeNodes.spec.ts +37 -37
- package/src/data/ops/removeTreeNodes.ts +2 -2
- package/src/data/ops/updateArray.spec.ts +69 -69
- package/src/data/ops/updateArray.ts +31 -31
- package/src/data/ops/updateTree.ts +1 -1
- package/src/data/test-types.ts +7 -7
- package/src/hooks/resolveCallback.spec.tsx +30 -7
- package/src/hooks/useTrigger.ts +26 -26
- package/src/index.scss +6 -6
- package/src/jsx-dev-runtime.ts +4 -4
- package/src/jsx-runtime.spec.tsx +431 -0
- package/src/jsx-runtime.ts +26 -22
- package/src/svg/BoundedObject.ts +101 -101
- package/src/svg/util/Rect.ts +105 -105
- package/src/ui/CSSHelper.ts +17 -17
- package/src/ui/ContentResolver.spec.tsx +172 -19
- package/src/ui/ContentResolver.ts +16 -8
- package/src/ui/Controller.ts +15 -2
- package/src/ui/Culture.ts +159 -159
- package/src/ui/DataProxy.ts +55 -55
- package/src/ui/FocusManager.ts +171 -171
- package/src/ui/Instance.ts +866 -868
- package/src/ui/Prop.ts +140 -112
- package/src/ui/RenderingContext.ts +99 -99
- package/src/ui/Repeater.ts +3 -12
- package/src/ui/Rescope.ts +49 -49
- package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
- package/src/ui/Text.ts +21 -2
- package/src/ui/VDOM.ts +34 -34
- package/src/ui/adapter/ArrayAdapter.spec.ts +55 -55
- package/src/ui/adapter/ArrayAdapter.ts +4 -1
- package/src/ui/adapter/TreeAdapter.spec.ts +76 -76
- package/src/ui/adapter/TreeAdapter.ts +185 -185
- package/src/ui/app/History.ts +133 -133
- package/src/ui/app/Url.spec.ts +50 -50
- package/src/ui/app/startHotAppLoop.ts +41 -41
- package/src/ui/createFunctionalComponent.spec.tsx +53 -0
- package/src/ui/createFunctionalComponent.ts +86 -65
- package/src/ui/expr.ts +4 -1
- package/src/ui/exprHelpers.spec.ts +379 -0
- package/src/ui/exprHelpers.ts +78 -0
- package/src/ui/index.ts +47 -46
- package/src/ui/layout/Content.ts +30 -30
- package/src/ui/layout/FirstVisibleChildLayout.spec.tsx +1 -1
- package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
- package/src/ui/selection/KeySelection.ts +153 -153
- package/src/ui/selection/Selection.ts +128 -128
- package/src/util/Console.ts +13 -11
- package/src/util/Format.spec.ts +41 -41
- package/src/util/Format.ts +267 -267
- package/src/util/addEventListenerWithOptions.ts +41 -41
- package/src/util/browserSupportsPassiveEventHandlers.ts +20 -20
- package/src/util/color/rgbToHsl.ts +35 -35
- package/src/util/getActiveElement.ts +4 -4
- package/src/util/hasKey.ts +18 -18
- package/src/util/index.ts +55 -55
- package/src/util/innerTextTrim.ts +10 -10
- package/src/util/isArray.ts +3 -3
- package/src/util/isDataRecord.ts +5 -5
- package/src/util/isDefined.ts +3 -3
- package/src/util/isString.ts +3 -3
- package/src/widgets/AccessorBindings.spec.tsx +26 -0
- package/src/widgets/Button.tsx +5 -17
- package/src/widgets/DocumentTitle.ts +95 -92
- package/src/widgets/Heading.ts +2 -2
- package/src/widgets/HtmlElement.spec.helpers.tsx +108 -0
- package/src/widgets/HtmlElement.spec.tsx +20 -12
- package/src/widgets/HtmlElement.tsx +77 -23
- package/src/widgets/Icon.ts +3 -17
- package/src/widgets/List.tsx +6 -0
- package/src/widgets/ReactElementWrapper.spec.tsx +452 -0
- package/src/widgets/ReactElementWrapper.tsx +108 -0
- package/src/widgets/Sandbox.ts +103 -103
- package/src/widgets/autoFocus.ts +9 -9
- package/src/widgets/cx.ts +63 -63
- package/src/widgets/drag-drop/DragSource.tsx +3 -4
- package/src/widgets/drag-drop/DropZone.tsx +3 -4
- package/src/widgets/form/Checkbox.tsx +3 -0
- package/src/widgets/form/ColorField.tsx +3 -0
- package/src/widgets/form/DateTimeField.tsx +5 -0
- package/src/widgets/form/Field.tsx +0 -3
- package/src/widgets/form/Label.tsx +1 -0
- package/src/widgets/form/LabeledContainer.ts +22 -26
- package/src/widgets/form/LookupField.spec.tsx +93 -0
- package/src/widgets/form/LookupField.tsx +104 -9
- package/src/widgets/form/MonthField.tsx +5 -0
- package/src/widgets/form/NumberField.tsx +3 -0
- package/src/widgets/form/Radio.tsx +5 -0
- package/src/widgets/form/Select.tsx +5 -0
- package/src/widgets/form/Slider.tsx +4 -0
- package/src/widgets/form/Switch.tsx +3 -0
- package/src/widgets/form/TextField.tsx +62 -0
- package/src/widgets/form/TimeList.tsx +84 -73
- package/src/widgets/form/UploadButton.tsx +53 -2
- package/src/widgets/form/Validator.ts +40 -3
- package/src/widgets/grid/Grid.tsx +9 -12
- package/src/widgets/grid/GridCell.ts +143 -143
- package/src/widgets/grid/TreeNode.tsx +9 -0
- package/src/widgets/icons/calendar.tsx +17 -17
- package/src/widgets/icons/check.tsx +13 -13
- package/src/widgets/icons/clear.tsx +15 -15
- package/src/widgets/icons/close.tsx +20 -20
- package/src/widgets/icons/cx.tsx +38 -38
- package/src/widgets/icons/drop-down.tsx +15 -15
- package/src/widgets/icons/file.tsx +13 -13
- package/src/widgets/icons/folder-open.tsx +15 -15
- package/src/widgets/icons/folder.tsx +13 -13
- package/src/widgets/icons/forward.tsx +22 -22
- package/src/widgets/icons/loading.tsx +24 -24
- package/src/widgets/icons/menu.tsx +17 -17
- package/src/widgets/icons/pixel-picker.tsx +18 -18
- package/src/widgets/icons/search.tsx +13 -13
- package/src/widgets/icons/sort-asc.tsx +14 -14
- package/src/widgets/icons/square.tsx +18 -18
- package/src/widgets/index.ts +1 -0
- package/src/widgets/nav/MenuItem.tsx +3 -2
- package/src/widgets/nav/Route.ts +142 -142
- package/src/widgets/nav/Scroller.tsx +8 -9
- package/src/widgets/nav/Tab.ts +2 -2
- package/src/widgets/overlay/ContextMenu.ts +42 -42
- package/src/widgets/overlay/Dropdown.tsx +762 -762
- package/src/widgets/overlay/MsgBox.tsx +141 -141
- package/src/widgets/overlay/Overlay.tsx +5 -4
- package/src/widgets/overlay/Toast.ts +111 -111
- package/src/widgets/overlay/Window.tsx +299 -299
- package/src/widgets/overlay/alerts.ts +46 -46
- package/src/widgets/overlay/captureMouse.ts +195 -195
- package/src/widgets/overlay/createHotPromiseWindowFactory.ts +0 -1
- package/src/widgets/overlay/index.d.ts +11 -11
- package/src/widgets/overlay/index.ts +11 -11
- package/src/widgets/overlay/tooltip-ops.ts +173 -173
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "cx/jsx-runtime";
|
|
2
|
+
import { Store } from "../data/Store";
|
|
3
|
+
import { createFunctionalComponent } from "./createFunctionalComponent";
|
|
4
|
+
import { bind } from "./bind";
|
|
5
|
+
import { expr } from "./expr";
|
|
6
|
+
import { createTestRenderer } from "../util/test/createTestRenderer";
|
|
7
|
+
import assert from "assert";
|
|
8
|
+
import { Rescope } from "./Rescope";
|
|
9
|
+
import { LabelsLeftLayout } from "./layout/LabelsLeftLayout";
|
|
10
|
+
import { LabeledContainer } from "../widgets/form/LabeledContainer";
|
|
11
|
+
import { Repeater } from "./Repeater";
|
|
12
|
+
import { FirstVisibleChildLayout } from "./layout/FirstVisibleChildLayout";
|
|
13
|
+
import { useStoreMethods } from "../hooks";
|
|
14
|
+
describe("createFunctionalComponent", () => {
|
|
15
|
+
it("allows spread", () => {
|
|
16
|
+
const SuperDiv = createFunctionalComponent(({ ...props }) => {
|
|
17
|
+
return (_jsx("cx", { children: _jsx("div", { ...props }) }));
|
|
18
|
+
});
|
|
19
|
+
let props = {
|
|
20
|
+
text: "Spread",
|
|
21
|
+
style: "background: red;",
|
|
22
|
+
};
|
|
23
|
+
const widget = (_jsx("cx", { children: _jsx(SuperDiv, { ...props, class: "test" }) }));
|
|
24
|
+
let store = new Store();
|
|
25
|
+
const component = createTestRenderer(store, widget);
|
|
26
|
+
let tree = component.toJSON();
|
|
27
|
+
assert.deepEqual(tree, {
|
|
28
|
+
type: "div",
|
|
29
|
+
children: ["Spread"],
|
|
30
|
+
props: {
|
|
31
|
+
className: "test",
|
|
32
|
+
style: {
|
|
33
|
+
background: "red",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
it("visible and Rescope behave as expected", () => {
|
|
39
|
+
const RootRescope = createFunctionalComponent(({}) => {
|
|
40
|
+
return (_jsx("cx", { children: _jsx(Rescope, { bind: "x", children: _jsx("div", { text: bind("y") }) }) }));
|
|
41
|
+
});
|
|
42
|
+
const widget = (_jsx("cx", { children: _jsx(RootRescope, { visible: expr("!!{x}") }) }));
|
|
43
|
+
let store = new Store({
|
|
44
|
+
data: {
|
|
45
|
+
x: {
|
|
46
|
+
y: "OK",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
const component = createTestRenderer(store, widget);
|
|
51
|
+
let tree = component.toJSON();
|
|
52
|
+
assert.deepEqual(tree, {
|
|
53
|
+
type: "div",
|
|
54
|
+
children: ["OK"],
|
|
55
|
+
props: {},
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it("visible and multiple items behave as expected", () => {
|
|
59
|
+
const FComponent = createFunctionalComponent(({}) => {
|
|
60
|
+
return (_jsxs("cx", { children: [_jsx("div", { children: "1" }), _jsx("div", { visible: false, children: "2" }), _jsx("div", { children: "3" })] }));
|
|
61
|
+
});
|
|
62
|
+
const widget = (_jsx("cx", { children: _jsx(FComponent, {}) }));
|
|
63
|
+
let store = new Store();
|
|
64
|
+
const component = createTestRenderer(store, widget);
|
|
65
|
+
let tree = component.toJSON();
|
|
66
|
+
assert.deepEqual(tree, [
|
|
67
|
+
{
|
|
68
|
+
type: "div",
|
|
69
|
+
children: ["1"],
|
|
70
|
+
props: {},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: "div",
|
|
74
|
+
children: ["3"],
|
|
75
|
+
props: {},
|
|
76
|
+
},
|
|
77
|
+
]);
|
|
78
|
+
});
|
|
79
|
+
it("respects inner layouts", () => {
|
|
80
|
+
const FComponent = createFunctionalComponent(({}) => {
|
|
81
|
+
return (_jsxs("cx", { children: [_jsx(LabeledContainer, { label: "Test" }), _jsx(LabeledContainer, { label: "Test" })] }));
|
|
82
|
+
});
|
|
83
|
+
const widget = (_jsx("cx", { children: _jsx("div", { layout: LabelsLeftLayout, children: _jsx(FComponent, {}) }) }));
|
|
84
|
+
let store = new Store();
|
|
85
|
+
const component = createTestRenderer(store, widget);
|
|
86
|
+
let tree = component.toJSON();
|
|
87
|
+
assert.deepEqual(tree, {
|
|
88
|
+
type: "div",
|
|
89
|
+
props: {},
|
|
90
|
+
children: [
|
|
91
|
+
{
|
|
92
|
+
type: "table",
|
|
93
|
+
props: {
|
|
94
|
+
className: "cxb-labelsleftlayout",
|
|
95
|
+
style: undefined,
|
|
96
|
+
},
|
|
97
|
+
children: [
|
|
98
|
+
{
|
|
99
|
+
type: "tbody",
|
|
100
|
+
props: {},
|
|
101
|
+
children: [
|
|
102
|
+
{
|
|
103
|
+
type: "tr",
|
|
104
|
+
props: {},
|
|
105
|
+
children: [
|
|
106
|
+
{
|
|
107
|
+
type: "td",
|
|
108
|
+
props: {
|
|
109
|
+
className: "cxe-labelsleftlayout-label",
|
|
110
|
+
style: undefined,
|
|
111
|
+
},
|
|
112
|
+
children: [
|
|
113
|
+
{
|
|
114
|
+
type: "label",
|
|
115
|
+
props: {
|
|
116
|
+
className: "cxb-label",
|
|
117
|
+
},
|
|
118
|
+
children: ["Test"],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: "td",
|
|
124
|
+
props: {
|
|
125
|
+
className: "cxe-labelsleftlayout-field",
|
|
126
|
+
},
|
|
127
|
+
children: null,
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: "tr",
|
|
133
|
+
props: {},
|
|
134
|
+
children: [
|
|
135
|
+
{
|
|
136
|
+
type: "td",
|
|
137
|
+
props: {
|
|
138
|
+
className: "cxe-labelsleftlayout-label",
|
|
139
|
+
style: undefined,
|
|
140
|
+
},
|
|
141
|
+
children: [
|
|
142
|
+
{
|
|
143
|
+
type: "label",
|
|
144
|
+
props: {
|
|
145
|
+
className: "cxb-label",
|
|
146
|
+
},
|
|
147
|
+
children: ["Test"],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: "td",
|
|
153
|
+
props: {
|
|
154
|
+
className: "cxe-labelsleftlayout-field",
|
|
155
|
+
},
|
|
156
|
+
children: null,
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
it("can use refs for data bindings", () => {
|
|
168
|
+
const X = createFunctionalComponent(({}) => {
|
|
169
|
+
let { ref } = useStoreMethods();
|
|
170
|
+
let x = ref("x", "OK");
|
|
171
|
+
return (_jsx("cx", { children: _jsx("div", { text: x }) }));
|
|
172
|
+
});
|
|
173
|
+
const widget = (_jsx("cx", { children: _jsx(X, { visible: true }) }));
|
|
174
|
+
let store = new Store();
|
|
175
|
+
const component = createTestRenderer(store, widget);
|
|
176
|
+
let tree = component.toJSON();
|
|
177
|
+
assert.deepEqual(tree, {
|
|
178
|
+
type: "div",
|
|
179
|
+
children: ["OK"],
|
|
180
|
+
props: {},
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
it("adds children at the right place", () => {
|
|
184
|
+
const X = createFunctionalComponent(({ children }) => (_jsxs("cx", { children: [_jsx("header", {}), _jsx("main", { children: children }), _jsx("footer", {})] })));
|
|
185
|
+
const widget = (_jsx("cx", { children: _jsx(X, { children: _jsx("div", {}) }) }));
|
|
186
|
+
let store = new Store();
|
|
187
|
+
const component = createTestRenderer(store, widget);
|
|
188
|
+
let tree = component.toJSON();
|
|
189
|
+
assert.deepEqual(tree, [
|
|
190
|
+
{
|
|
191
|
+
type: "header",
|
|
192
|
+
children: null,
|
|
193
|
+
props: {},
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
type: "main",
|
|
197
|
+
children: [
|
|
198
|
+
{
|
|
199
|
+
type: "div",
|
|
200
|
+
children: null,
|
|
201
|
+
props: {},
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
props: {},
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
type: "footer",
|
|
208
|
+
children: null,
|
|
209
|
+
props: {},
|
|
210
|
+
},
|
|
211
|
+
]);
|
|
212
|
+
});
|
|
213
|
+
it("works well with repeaters", () => {
|
|
214
|
+
const X = createFunctionalComponent(({}) => {
|
|
215
|
+
let { ref } = useStoreMethods();
|
|
216
|
+
let text = ref("$record.text");
|
|
217
|
+
return (_jsx("cx", { children: _jsx("div", { text: text }) }));
|
|
218
|
+
});
|
|
219
|
+
const widget = (_jsx("cx", { children: _jsx(Repeater, { records: bind("array"), children: _jsx(X, {}) }) }));
|
|
220
|
+
let store = new Store({ data: { array: [{ text: "0" }, { text: "1" }, { text: "2" }] } });
|
|
221
|
+
const component = createTestRenderer(store, widget);
|
|
222
|
+
let tree = component.toJSON();
|
|
223
|
+
assert.deepEqual(tree, [
|
|
224
|
+
{
|
|
225
|
+
type: "div",
|
|
226
|
+
children: ["0"],
|
|
227
|
+
props: {},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
type: "div",
|
|
231
|
+
children: ["1"],
|
|
232
|
+
props: {},
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
type: "div",
|
|
236
|
+
children: ["2"],
|
|
237
|
+
props: {},
|
|
238
|
+
},
|
|
239
|
+
]);
|
|
240
|
+
store.update("array", (array) => [array[0], { text: "10" }, array[2]]);
|
|
241
|
+
tree = component.toJSON();
|
|
242
|
+
assert.deepEqual(tree, [
|
|
243
|
+
{
|
|
244
|
+
type: "div",
|
|
245
|
+
children: ["0"],
|
|
246
|
+
props: {},
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
type: "div",
|
|
250
|
+
children: ["10"],
|
|
251
|
+
props: {},
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
type: "div",
|
|
255
|
+
children: ["2"],
|
|
256
|
+
props: {},
|
|
257
|
+
},
|
|
258
|
+
]);
|
|
259
|
+
});
|
|
260
|
+
it("can have its own layout", () => {
|
|
261
|
+
const X = createFunctionalComponent(() => (_jsxs("cx", { children: [_jsx("div", { children: "1" }), _jsx("div", { children: "2" }), _jsx("div", { children: "3" })] })));
|
|
262
|
+
const widget = (_jsx("cx", { children: _jsx(X, { layout: FirstVisibleChildLayout }) }));
|
|
263
|
+
let store = new Store();
|
|
264
|
+
const component = createTestRenderer(store, widget);
|
|
265
|
+
let tree = component.toJSON();
|
|
266
|
+
assert.deepEqual(tree, {
|
|
267
|
+
type: "div",
|
|
268
|
+
children: ["1"],
|
|
269
|
+
props: {},
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
package/build/ui/expr.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { AccessorChain } from "../data/createAccessorModelProxy";
|
|
2
2
|
import { Selector } from "../data/Selector";
|
|
3
3
|
import { Expr } from "./Prop";
|
|
4
|
+
type InferAccessorValue<T> = 0 extends 1 & T ? any : T extends AccessorChain<infer V> ? V : never;
|
|
4
5
|
export declare function expr(code: string): Expr;
|
|
5
6
|
export declare function expr<V1, R>(arg1: AccessorChain<V1>, compute: (v1: V1) => R): Selector<R>;
|
|
6
7
|
export declare function expr<V1, V2, R>(arg1: AccessorChain<V1>, arg2: AccessorChain<V2>, compute: (v1: V1, v2: V2) => R): Selector<R>;
|
|
7
8
|
export declare function expr<V1, V2, V3, R>(arg1: AccessorChain<V1>, arg2: AccessorChain<V2>, arg3: AccessorChain<V3>, compute: (v1: V1, v2: V2, v3: V3) => R): Selector<R>;
|
|
8
9
|
export declare function expr<V1, V2, V3, V4, R>(arg1: AccessorChain<V1>, arg2: AccessorChain<V2>, arg3: AccessorChain<V3>, arg4: AccessorChain<V4>, compute: (v1: V1, v2: V2, v3: V3, v4: V4) => R): Selector<R>;
|
|
9
10
|
export declare function expr<T extends AccessorChain<any>[], R>(...args: [...accessors: T, compute: (...values: {
|
|
10
|
-
[K in keyof T]: T[K]
|
|
11
|
+
[K in keyof T]: InferAccessorValue<T[K]>;
|
|
11
12
|
}) => R]): Selector<R>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AccessorChain } from "../data/createAccessorModelProxy";
|
|
2
|
+
import { Selector } from "../data/Selector";
|
|
3
|
+
/** Returns a selector that converts the value to boolean using !! */
|
|
4
|
+
export declare function truthy<V>(arg: AccessorChain<V>): Selector<boolean>;
|
|
5
|
+
/** Returns a selector that checks if the value is falsy using ! */
|
|
6
|
+
export declare function falsy<V>(arg: AccessorChain<V>): Selector<boolean>;
|
|
7
|
+
/** Returns a selector that checks if the value is strictly true (=== true) */
|
|
8
|
+
export declare function isTrue(arg: AccessorChain<any>): Selector<boolean>;
|
|
9
|
+
/** Returns a selector that checks if the value is strictly false (=== false) */
|
|
10
|
+
export declare function isFalse(arg: AccessorChain<any>): Selector<boolean>;
|
|
11
|
+
/** Returns a selector that checks if the value is not null or undefined (x != null) */
|
|
12
|
+
export declare function hasValue<V>(arg: AccessorChain<V>): Selector<boolean>;
|
|
13
|
+
/** Returns a selector that checks if a string or array is empty (null, undefined, or length === 0) */
|
|
14
|
+
export declare function isEmpty(arg: AccessorChain<string | any[] | null | undefined>): Selector<boolean>;
|
|
15
|
+
/** Returns a selector that checks if a string or array is non-empty (not null/undefined and length > 0) */
|
|
16
|
+
export declare function isNonEmpty(arg: AccessorChain<string | any[] | null | undefined>): Selector<boolean>;
|
|
17
|
+
/** Returns a selector that checks if the value is less than the given value */
|
|
18
|
+
export declare function lessThan<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
19
|
+
/** Returns a selector that checks if the value is less than or equal to the given value */
|
|
20
|
+
export declare function lessThanOrEqual<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
21
|
+
/** Returns a selector that checks if the value is greater than the given value */
|
|
22
|
+
export declare function greaterThan<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
23
|
+
/** Returns a selector that checks if the value is greater than or equal to the given value */
|
|
24
|
+
export declare function greaterThanOrEqual<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
25
|
+
/** Returns a selector that checks if the value equals the given value using == */
|
|
26
|
+
export declare function equal<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
27
|
+
/** Returns a selector that checks if the value does not equal the given value using != */
|
|
28
|
+
export declare function notEqual<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
29
|
+
/** Returns a selector that checks if the value strictly equals the given value using === */
|
|
30
|
+
export declare function strictEqual<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
31
|
+
/** Returns a selector that checks if the value strictly does not equal the given value using !== */
|
|
32
|
+
export declare function strictNotEqual<V>(arg: AccessorChain<V>, value: V): Selector<boolean>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { expr } from "./expr";
|
|
2
|
+
/** Returns a selector that converts the value to boolean using !! */
|
|
3
|
+
export function truthy(arg) {
|
|
4
|
+
return expr(arg, (x) => !!x);
|
|
5
|
+
}
|
|
6
|
+
/** Returns a selector that checks if the value is falsy using ! */
|
|
7
|
+
export function falsy(arg) {
|
|
8
|
+
return expr(arg, (x) => !x);
|
|
9
|
+
}
|
|
10
|
+
/** Returns a selector that checks if the value is strictly true (=== true) */
|
|
11
|
+
export function isTrue(arg) {
|
|
12
|
+
return expr(arg, (x) => x === true);
|
|
13
|
+
}
|
|
14
|
+
/** Returns a selector that checks if the value is strictly false (=== false) */
|
|
15
|
+
export function isFalse(arg) {
|
|
16
|
+
return expr(arg, (x) => x === false);
|
|
17
|
+
}
|
|
18
|
+
/** Returns a selector that checks if the value is not null or undefined (x != null) */
|
|
19
|
+
export function hasValue(arg) {
|
|
20
|
+
return expr(arg, (x) => x != null);
|
|
21
|
+
}
|
|
22
|
+
/** Returns a selector that checks if a string or array is empty (null, undefined, or length === 0) */
|
|
23
|
+
export function isEmpty(arg) {
|
|
24
|
+
return expr(arg, (x) => x == null || x.length === 0);
|
|
25
|
+
}
|
|
26
|
+
/** Returns a selector that checks if a string or array is non-empty (not null/undefined and length > 0) */
|
|
27
|
+
export function isNonEmpty(arg) {
|
|
28
|
+
return expr(arg, (x) => x != null && x.length > 0);
|
|
29
|
+
}
|
|
30
|
+
/** Returns a selector that checks if the value is less than the given value */
|
|
31
|
+
export function lessThan(arg, value) {
|
|
32
|
+
return expr(arg, (x) => x < value);
|
|
33
|
+
}
|
|
34
|
+
/** Returns a selector that checks if the value is less than or equal to the given value */
|
|
35
|
+
export function lessThanOrEqual(arg, value) {
|
|
36
|
+
return expr(arg, (x) => x <= value);
|
|
37
|
+
}
|
|
38
|
+
/** Returns a selector that checks if the value is greater than the given value */
|
|
39
|
+
export function greaterThan(arg, value) {
|
|
40
|
+
return expr(arg, (x) => x > value);
|
|
41
|
+
}
|
|
42
|
+
/** Returns a selector that checks if the value is greater than or equal to the given value */
|
|
43
|
+
export function greaterThanOrEqual(arg, value) {
|
|
44
|
+
return expr(arg, (x) => x >= value);
|
|
45
|
+
}
|
|
46
|
+
/** Returns a selector that checks if the value equals the given value using == */
|
|
47
|
+
export function equal(arg, value) {
|
|
48
|
+
return expr(arg, (x) => x == value);
|
|
49
|
+
}
|
|
50
|
+
/** Returns a selector that checks if the value does not equal the given value using != */
|
|
51
|
+
export function notEqual(arg, value) {
|
|
52
|
+
return expr(arg, (x) => x != value);
|
|
53
|
+
}
|
|
54
|
+
/** Returns a selector that checks if the value strictly equals the given value using === */
|
|
55
|
+
export function strictEqual(arg, value) {
|
|
56
|
+
return expr(arg, (x) => x === value);
|
|
57
|
+
}
|
|
58
|
+
/** Returns a selector that checks if the value strictly does not equal the given value using !== */
|
|
59
|
+
export function strictNotEqual(arg, value) {
|
|
60
|
+
return expr(arg, (x) => x !== value);
|
|
61
|
+
}
|
package/build/ui/index.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ export * from "./adapter/index";
|
|
|
36
36
|
export * from "./bind";
|
|
37
37
|
export * from "./tpl";
|
|
38
38
|
export * from "./expr";
|
|
39
|
+
export * from "./exprHelpers";
|
|
39
40
|
import { computable } from "../data/computable";
|
|
40
41
|
import { createAccessorModelProxy, AccessorChain } from "../data/createAccessorModelProxy";
|
|
41
42
|
export { computable, createAccessorModelProxy, AccessorChain };
|
package/build/ui/index.js
CHANGED
|
@@ -36,6 +36,7 @@ export * from "./adapter/index";
|
|
|
36
36
|
export * from "./bind";
|
|
37
37
|
export * from "./tpl";
|
|
38
38
|
export * from "./expr";
|
|
39
|
+
export * from "./exprHelpers";
|
|
39
40
|
//re-export computable here
|
|
40
41
|
import { computable } from "../data/computable";
|
|
41
42
|
import { createAccessorModelProxy } from "../data/createAccessorModelProxy";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|