cx 26.0.13 → 26.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/ui/VDOM.d.ts +1 -20
- package/build/ui/VDOM.js +1 -3
- package/build/ui/Widget.d.ts +1 -1
- package/build/ui/app/startAppLoop.js +2 -10
- package/build/widgets/form/Checkbox.d.ts +0 -1
- package/build/widgets/form/Checkbox.js +1 -0
- package/build/widgets/form/ColorField.d.ts +0 -1
- package/build/widgets/form/ColorField.js +2 -2
- package/build/widgets/form/DateTimeField.d.ts +0 -2
- package/build/widgets/form/DateTimeField.js +1 -0
- package/build/widgets/form/DateTimePicker.d.ts +0 -2
- package/build/widgets/form/DateTimePicker.js +1 -0
- package/build/widgets/form/Radio.d.ts +0 -1
- package/build/widgets/form/Slider.js +9 -1
- package/build/widgets/form/Switch.d.ts +0 -1
- package/build/widgets/form/Switch.js +1 -1
- package/build/widgets/form/Wheel.d.ts +0 -1
- package/build/widgets/grid/Grid.d.ts +0 -2
- package/build/widgets/grid/GridCellEditor.js +3 -1
- package/build/widgets/overlay/Overlay.d.ts +3 -0
- package/build/widgets/overlay/Overlay.js +3 -2
- package/build/widgets/overlay/createHotPromiseWindowFactory.js +0 -1
- package/dist/manifest.js +810 -810
- package/dist/ui.js +3 -10
- package/dist/widgets.js +18 -7
- package/package.json +9 -8
- package/src/charts/Chart.ts +108 -108
- 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 -87
- 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/merge.ts +13 -13
- package/src/data/ops/removeTreeNodes.spec.ts +37 -37
- package/src/data/ops/updateArray.spec.ts +69 -69
- package/src/data/test-types.ts +7 -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 +38 -9
- 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/Culture.ts +159 -159
- package/src/ui/DataProxy.ts +55 -55
- package/src/ui/FocusManager.ts +171 -171
- package/src/ui/Instance.ts +866 -866
- package/src/ui/Prop.ts +140 -140
- package/src/ui/RenderingContext.ts +99 -99
- package/src/ui/Rescope.ts +49 -49
- package/src/ui/StructuredInstanceDataAccessor.ts +32 -32
- package/src/ui/VDOM.ts +1 -34
- package/src/ui/adapter/ArrayAdapter.spec.ts +55 -55
- 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/startAppLoop.tsx +5 -9
- package/src/ui/app/startHotAppLoop.ts +41 -41
- package/src/ui/layout/Content.ts +30 -30
- package/src/ui/layout/FirstVisibleChildLayout.ts +60 -60
- package/src/util/Console.ts +13 -13
- package/src/util/Format.spec.ts +69 -69
- 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/DocumentTitle.ts +95 -95
- package/src/widgets/Sandbox.ts +103 -103
- package/src/widgets/autoFocus.ts +9 -9
- package/src/widgets/cx.ts +63 -63
- package/src/widgets/form/Checkbox.tsx +0 -1
- package/src/widgets/form/ColorField.tsx +15 -12
- package/src/widgets/form/DateTimeField.tsx +0 -2
- package/src/widgets/form/DateTimePicker.tsx +0 -2
- package/src/widgets/form/Radio.tsx +0 -1
- package/src/widgets/form/Slider.tsx +12 -4
- package/src/widgets/form/Switch.tsx +2 -3
- package/src/widgets/form/Wheel.tsx +0 -1
- package/src/widgets/grid/Grid.tsx +0 -1
- package/src/widgets/grid/GridCell.ts +143 -143
- package/src/widgets/grid/GridCellEditor.tsx +7 -1
- 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/nav/Route.ts +142 -142
- package/src/widgets/overlay/Dropdown.tsx +762 -762
- package/src/widgets/overlay/MsgBox.tsx +141 -141
- package/src/widgets/overlay/Overlay.tsx +5 -1
- 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
- package/build/data/ArrayElementView.spec.d.ts +0 -1
- package/build/data/ArrayElementView.spec.js +0 -81
- package/build/data/Binding.spec.d.ts +0 -1
- package/build/data/Binding.spec.js +0 -61
- package/build/data/Expression.spec.d.ts +0 -1
- package/build/data/Expression.spec.js +0 -196
- package/build/data/Grouper.spec.d.ts +0 -1
- package/build/data/Grouper.spec.js +0 -48
- package/build/data/Ref.spec.d.ts +0 -1
- package/build/data/Ref.spec.js +0 -72
- package/build/data/Store.spec.d.ts +0 -1
- package/build/data/Store.spec.js +0 -19
- package/build/data/StoreRef.spec.d.ts +0 -1
- package/build/data/StoreRef.spec.js +0 -22
- package/build/data/StringTemplate.spec.d.ts +0 -1
- package/build/data/StringTemplate.spec.js +0 -112
- package/build/data/StructuredSelector.spec.d.ts +0 -1
- package/build/data/StructuredSelector.spec.js +0 -102
- package/build/data/View.spec.d.ts +0 -1
- package/build/data/View.spec.js +0 -44
- package/build/data/ZoomIntoPropertyView.spec.d.ts +0 -1
- package/build/data/ZoomIntoPropertyView.spec.js +0 -54
- package/build/data/comparer.spec.d.ts +0 -1
- package/build/data/comparer.spec.js +0 -50
- package/build/data/computable.spec.d.ts +0 -1
- package/build/data/computable.spec.js +0 -56
- package/build/data/createAccessorModelProxy.spec.d.ts +0 -1
- package/build/data/createAccessorModelProxy.spec.js +0 -30
- package/build/data/createStructuredSelector.spec.d.ts +0 -1
- package/build/data/createStructuredSelector.spec.js +0 -42
- package/build/data/diff/diffs.spec.d.ts +0 -1
- package/build/data/diff/diffs.spec.js +0 -45
- package/build/data/getAccessor.spec.d.ts +0 -1
- package/build/data/getAccessor.spec.js +0 -10
- package/build/data/getSelector.spec.d.ts +0 -1
- package/build/data/getSelector.spec.js +0 -36
- package/build/data/ops/append.spec.d.ts +0 -1
- package/build/data/ops/append.spec.js +0 -24
- package/build/data/ops/filter.spec.d.ts +0 -1
- package/build/data/ops/filter.spec.js +0 -25
- package/build/data/ops/findTreeNode.spec.d.ts +0 -1
- package/build/data/ops/findTreeNode.spec.js +0 -20
- package/build/data/ops/merge.spec.d.ts +0 -1
- package/build/data/ops/merge.spec.js +0 -23
- package/build/data/ops/removeTreeNodes.spec.d.ts +0 -1
- package/build/data/ops/removeTreeNodes.spec.js +0 -35
- package/build/data/ops/updateArray.spec.d.ts +0 -1
- package/build/data/ops/updateArray.spec.js +0 -33
- package/build/data/ops/updateTree.spec.d.ts +0 -1
- package/build/data/ops/updateTree.spec.js +0 -44
- package/build/hooks/invokeCallback.spec.d.ts +0 -1
- package/build/hooks/invokeCallback.spec.js +0 -44
- package/build/hooks/resolveCallback.spec.d.ts +0 -1
- package/build/hooks/resolveCallback.spec.js +0 -35
- package/build/hooks/store.spec.d.ts +0 -1
- package/build/hooks/store.spec.js +0 -48
- package/build/hooks/useTrigger.spec.d.ts +0 -1
- package/build/hooks/useTrigger.spec.js +0 -59
- package/build/ui/Controller.spec.d.ts +0 -1
- package/build/ui/Controller.spec.js +0 -247
- package/build/ui/Cx.spec.d.ts +0 -1
- package/build/ui/Cx.spec.js +0 -153
- package/build/ui/DataProxy.spec.d.ts +0 -1
- package/build/ui/DataProxy.spec.js +0 -208
- package/build/ui/IsolatedScope.spec.d.ts +0 -1
- package/build/ui/IsolatedScope.spec.js +0 -42
- package/build/ui/PureContainer.spec.d.ts +0 -1
- package/build/ui/PureContainer.spec.js +0 -149
- package/build/ui/Repeater.spec.d.ts +0 -1
- package/build/ui/Repeater.spec.js +0 -109
- package/build/ui/Rescope.spec.d.ts +0 -1
- package/build/ui/Rescope.spec.js +0 -134
- package/build/ui/Restate.spec.d.ts +0 -1
- package/build/ui/Restate.spec.js +0 -257
- package/build/ui/adapter/ArrayAdapter.spec.d.ts +0 -1
- package/build/ui/adapter/ArrayAdapter.spec.js +0 -44
- package/build/ui/adapter/TreeAdapter.spec.d.ts +0 -1
- package/build/ui/adapter/TreeAdapter.spec.js +0 -71
- package/build/ui/app/Url.spec.d.ts +0 -1
- package/build/ui/app/Url.spec.js +0 -43
- package/build/ui/createFunctionalComponent.spec.d.ts +0 -1
- package/build/ui/createFunctionalComponent.spec.js +0 -272
- package/build/ui/layout/ContentPlaceholder.spec.d.ts +0 -1
- package/build/ui/layout/ContentPlaceholder.spec.js +0 -333
- package/build/ui/layout/FirstVisibleChildLayout.spec.d.ts +0 -1
- package/build/ui/layout/FirstVisibleChildLayout.spec.js +0 -101
- package/build/util/Format.spec.d.ts +0 -1
- package/build/util/Format.spec.js +0 -58
- package/build/util/TraversalStack.spec.d.ts +0 -1
- package/build/util/TraversalStack.spec.js +0 -43
- package/build/util/date/upperBoundCheck.spec.d.ts +0 -1
- package/build/util/date/upperBoundCheck.spec.js +0 -22
- package/build/util/getSearchQueryPredicate.spec.d.ts +0 -1
- package/build/util/getSearchQueryPredicate.spec.js +0 -33
- package/build/util/isValidIdentifierName.spec.d.ts +0 -1
- package/build/util/isValidIdentifierName.spec.js +0 -28
- package/build/util/routeAppend.spec.d.ts +0 -1
- package/build/util/routeAppend.spec.js +0 -14
- package/build/widgets/AccessorBindings.spec.d.ts +0 -1
- package/build/widgets/AccessorBindings.spec.js +0 -40
- package/build/widgets/HtmlElement.spec.d.ts +0 -1
- package/build/widgets/HtmlElement.spec.js +0 -38
- package/build/widgets/form/ValidationGroup.spec.d.ts +0 -1
- package/build/widgets/form/ValidationGroup.spec.js +0 -62
- package/build/widgets/nav/Route.spec.d.ts +0 -1
- package/build/widgets/nav/Route.spec.js +0 -15
- package/dist/manifest.d.ts +0 -1443
package/src/widgets/Sandbox.ts
CHANGED
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
import { Widget } from "../ui/Widget";
|
|
2
|
-
import { PureContainerBase, PureContainerConfig } from "../ui/PureContainer";
|
|
3
|
-
import { Binding, BindingInput } from "../data/Binding";
|
|
4
|
-
import { ExposedValueView, ExposedValueViewConfig } from "../data/ExposedValueView";
|
|
5
|
-
import { RenderingContext } from "../ui/RenderingContext";
|
|
6
|
-
import { Instance } from "../ui/Instance";
|
|
7
|
-
import { StringProp, WritableProp } from "../ui/Prop";
|
|
8
|
-
|
|
9
|
-
export interface SandboxConfig extends PureContainerConfig {
|
|
10
|
-
/** Binding to the object that holds sandbox data. */
|
|
11
|
-
storage: WritableProp<Record<string, any>>;
|
|
12
|
-
|
|
13
|
-
/** Key used to identify the sandbox instance within the storage. */
|
|
14
|
-
key?: StringProp;
|
|
15
|
-
|
|
16
|
-
/** Alias for `key`. */
|
|
17
|
-
accessKey?: StringProp;
|
|
18
|
-
|
|
19
|
-
/** Alias used to expose sandbox data. Default is `$page`. */
|
|
20
|
-
recordName?: string;
|
|
21
|
-
|
|
22
|
-
/** Alias for `recordName`. */
|
|
23
|
-
recordAlias?: string;
|
|
24
|
-
|
|
25
|
-
/** Indicate that parent store data should not be mutated. */
|
|
26
|
-
immutable?: boolean;
|
|
27
|
-
|
|
28
|
-
/** Indicate that sandbox store data should not be mutated. */
|
|
29
|
-
sealed?: boolean;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface SandboxInstance extends Instance {
|
|
33
|
-
store: ExposedValueView;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export class Sandbox extends PureContainerBase<SandboxConfig, SandboxInstance> {
|
|
37
|
-
declare storage: WritableProp<Record<string, any>>;
|
|
38
|
-
declare key?: StringProp;
|
|
39
|
-
declare recordName?: string;
|
|
40
|
-
declare recordAlias?: string;
|
|
41
|
-
declare accessKey?: StringProp;
|
|
42
|
-
declare immutable?: boolean;
|
|
43
|
-
declare sealed?: boolean;
|
|
44
|
-
declare storageBinding: Binding;
|
|
45
|
-
init(): void {
|
|
46
|
-
if (this.recordAlias) this.recordName = this.recordAlias;
|
|
47
|
-
|
|
48
|
-
if (this.accessKey) this.key = this.accessKey;
|
|
49
|
-
|
|
50
|
-
this.storageBinding = Binding.get(this.storage);
|
|
51
|
-
|
|
52
|
-
super.init();
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
initInstance(context: RenderingContext, instance: SandboxInstance): void {
|
|
56
|
-
instance.store = new ExposedValueView({
|
|
57
|
-
store: instance.parentStore,
|
|
58
|
-
containerBinding: this.storageBinding,
|
|
59
|
-
key: null,
|
|
60
|
-
recordName: this.recordName,
|
|
61
|
-
immutable: this.immutable,
|
|
62
|
-
});
|
|
63
|
-
super.initInstance(context, instance);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
applyParentStore(instance: SandboxInstance): void {
|
|
67
|
-
instance.store.setStore(instance.parentStore);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
declareData(...args: Record<string, unknown>[]): void {
|
|
71
|
-
super.declareData(
|
|
72
|
-
{
|
|
73
|
-
storage: undefined,
|
|
74
|
-
key: undefined,
|
|
75
|
-
},
|
|
76
|
-
...args,
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
prepareData(context: RenderingContext, instance: SandboxInstance): void {
|
|
81
|
-
var { store, data } = instance;
|
|
82
|
-
if (store.getKey() !== data.key) {
|
|
83
|
-
//when navigating to a page using the same widget tree as the previous page
|
|
84
|
-
//everything needs to be reinstantiated, e.g. user/1 => user/2
|
|
85
|
-
instance.store = new ExposedValueView({
|
|
86
|
-
store: store,
|
|
87
|
-
containerBinding: this.storageBinding,
|
|
88
|
-
key: data.key,
|
|
89
|
-
recordName: this.recordName,
|
|
90
|
-
immutable: this.immutable,
|
|
91
|
-
sealed: this.sealed,
|
|
92
|
-
});
|
|
93
|
-
instance.clearChildrenCache();
|
|
94
|
-
}
|
|
95
|
-
super.prepareData(context, instance);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
Sandbox.prototype.recordName = "$page";
|
|
100
|
-
Sandbox.prototype.immutable = false;
|
|
101
|
-
Sandbox.prototype.sealed = false;
|
|
102
|
-
|
|
103
|
-
Widget.alias("sandbox", Sandbox);
|
|
1
|
+
import { Widget } from "../ui/Widget";
|
|
2
|
+
import { PureContainerBase, PureContainerConfig } from "../ui/PureContainer";
|
|
3
|
+
import { Binding, BindingInput } from "../data/Binding";
|
|
4
|
+
import { ExposedValueView, ExposedValueViewConfig } from "../data/ExposedValueView";
|
|
5
|
+
import { RenderingContext } from "../ui/RenderingContext";
|
|
6
|
+
import { Instance } from "../ui/Instance";
|
|
7
|
+
import { StringProp, WritableProp } from "../ui/Prop";
|
|
8
|
+
|
|
9
|
+
export interface SandboxConfig extends PureContainerConfig {
|
|
10
|
+
/** Binding to the object that holds sandbox data. */
|
|
11
|
+
storage: WritableProp<Record<string, any>>;
|
|
12
|
+
|
|
13
|
+
/** Key used to identify the sandbox instance within the storage. */
|
|
14
|
+
key?: StringProp;
|
|
15
|
+
|
|
16
|
+
/** Alias for `key`. */
|
|
17
|
+
accessKey?: StringProp;
|
|
18
|
+
|
|
19
|
+
/** Alias used to expose sandbox data. Default is `$page`. */
|
|
20
|
+
recordName?: string;
|
|
21
|
+
|
|
22
|
+
/** Alias for `recordName`. */
|
|
23
|
+
recordAlias?: string;
|
|
24
|
+
|
|
25
|
+
/** Indicate that parent store data should not be mutated. */
|
|
26
|
+
immutable?: boolean;
|
|
27
|
+
|
|
28
|
+
/** Indicate that sandbox store data should not be mutated. */
|
|
29
|
+
sealed?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface SandboxInstance extends Instance {
|
|
33
|
+
store: ExposedValueView;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export class Sandbox extends PureContainerBase<SandboxConfig, SandboxInstance> {
|
|
37
|
+
declare storage: WritableProp<Record<string, any>>;
|
|
38
|
+
declare key?: StringProp;
|
|
39
|
+
declare recordName?: string;
|
|
40
|
+
declare recordAlias?: string;
|
|
41
|
+
declare accessKey?: StringProp;
|
|
42
|
+
declare immutable?: boolean;
|
|
43
|
+
declare sealed?: boolean;
|
|
44
|
+
declare storageBinding: Binding;
|
|
45
|
+
init(): void {
|
|
46
|
+
if (this.recordAlias) this.recordName = this.recordAlias;
|
|
47
|
+
|
|
48
|
+
if (this.accessKey) this.key = this.accessKey;
|
|
49
|
+
|
|
50
|
+
this.storageBinding = Binding.get(this.storage);
|
|
51
|
+
|
|
52
|
+
super.init();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
initInstance(context: RenderingContext, instance: SandboxInstance): void {
|
|
56
|
+
instance.store = new ExposedValueView({
|
|
57
|
+
store: instance.parentStore,
|
|
58
|
+
containerBinding: this.storageBinding,
|
|
59
|
+
key: null,
|
|
60
|
+
recordName: this.recordName,
|
|
61
|
+
immutable: this.immutable,
|
|
62
|
+
});
|
|
63
|
+
super.initInstance(context, instance);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
applyParentStore(instance: SandboxInstance): void {
|
|
67
|
+
instance.store.setStore(instance.parentStore);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
declareData(...args: Record<string, unknown>[]): void {
|
|
71
|
+
super.declareData(
|
|
72
|
+
{
|
|
73
|
+
storage: undefined,
|
|
74
|
+
key: undefined,
|
|
75
|
+
},
|
|
76
|
+
...args,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
prepareData(context: RenderingContext, instance: SandboxInstance): void {
|
|
81
|
+
var { store, data } = instance;
|
|
82
|
+
if (store.getKey() !== data.key) {
|
|
83
|
+
//when navigating to a page using the same widget tree as the previous page
|
|
84
|
+
//everything needs to be reinstantiated, e.g. user/1 => user/2
|
|
85
|
+
instance.store = new ExposedValueView({
|
|
86
|
+
store: store,
|
|
87
|
+
containerBinding: this.storageBinding,
|
|
88
|
+
key: data.key,
|
|
89
|
+
recordName: this.recordName,
|
|
90
|
+
immutable: this.immutable,
|
|
91
|
+
sealed: this.sealed,
|
|
92
|
+
});
|
|
93
|
+
instance.clearChildrenCache();
|
|
94
|
+
}
|
|
95
|
+
super.prepareData(context, instance);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
Sandbox.prototype.recordName = "$page";
|
|
100
|
+
Sandbox.prototype.immutable = false;
|
|
101
|
+
Sandbox.prototype.sealed = false;
|
|
102
|
+
|
|
103
|
+
Widget.alias("sandbox", Sandbox);
|
package/src/widgets/autoFocus.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { FocusManager } from "../ui/FocusManager";
|
|
2
|
-
import { isTouchEvent } from "../util/isTouchEvent";
|
|
3
|
-
|
|
4
|
-
export function autoFocus(el: HTMLElement | undefined | null, component: any): void {
|
|
5
|
-
let data = component.props.data || component.props.instance.data;
|
|
6
|
-
let autoFocusValue = el && data.autoFocus;
|
|
7
|
-
if (autoFocusValue && autoFocusValue != component.autoFocusValue && !isTouchEvent()) FocusManager.focus(el!);
|
|
8
|
-
component.autoFocusValue = autoFocusValue;
|
|
9
|
-
}
|
|
1
|
+
import { FocusManager } from "../ui/FocusManager";
|
|
2
|
+
import { isTouchEvent } from "../util/isTouchEvent";
|
|
3
|
+
|
|
4
|
+
export function autoFocus(el: HTMLElement | undefined | null, component: any): void {
|
|
5
|
+
let data = component.props.data || component.props.instance.data;
|
|
6
|
+
let autoFocusValue = el && data.autoFocus;
|
|
7
|
+
if (autoFocusValue && autoFocusValue != component.autoFocusValue && !isTouchEvent()) FocusManager.focus(el!);
|
|
8
|
+
component.autoFocusValue = autoFocusValue;
|
|
9
|
+
}
|
package/src/widgets/cx.ts
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import { HtmlElement } from "./HtmlElement";
|
|
2
|
-
import { VDOM } from "../ui/Widget";
|
|
3
|
-
import { createComponentFactory, isComponentFactory } from "../util/Component";
|
|
4
|
-
import { createFunctionalComponent } from "../ui/createFunctionalComponent";
|
|
5
|
-
import { isString } from "../util/isString";
|
|
6
|
-
import { isNumber } from "../util/isNumber";
|
|
7
|
-
import { isFunction } from "../util/isFunction";
|
|
8
|
-
import { isUndefined } from "../util/isUndefined";
|
|
9
|
-
import { isArray } from "../util/isArray";
|
|
10
|
-
|
|
11
|
-
import { flattenProps } from "../ui/flattenProps";
|
|
12
|
-
|
|
13
|
-
let htmlFactoryCache: Record<string, any> = {};
|
|
14
|
-
|
|
15
|
-
function getHtmlElementFactory(tagName: string): any {
|
|
16
|
-
let factory = htmlFactoryCache[tagName];
|
|
17
|
-
if (factory) return factory;
|
|
18
|
-
return (htmlFactoryCache[tagName] = createComponentFactory(
|
|
19
|
-
() => {},
|
|
20
|
-
(config: any) => HtmlElement.create(HtmlElement, { tag: tagName }, flattenProps(config)),
|
|
21
|
-
{ tag: tagName },
|
|
22
|
-
));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export function cx(typeName: any, props?: any, ...children: any[]): any {
|
|
26
|
-
if (isArray(typeName)) return typeName;
|
|
27
|
-
|
|
28
|
-
if (isFunction(typeName) && isUndefined(props))
|
|
29
|
-
return createFunctionalComponent((config: any) => typeName(flattenProps(config)));
|
|
30
|
-
|
|
31
|
-
if (typeName.type || typeName.$type) return typeName;
|
|
32
|
-
|
|
33
|
-
if (children && children.length == 0) children = [];
|
|
34
|
-
|
|
35
|
-
if (children && children.length == 1) children = children[0];
|
|
36
|
-
|
|
37
|
-
if (typeName == "cx") return children;
|
|
38
|
-
|
|
39
|
-
if (typeName == "react") return react(children);
|
|
40
|
-
|
|
41
|
-
if (isString(typeName) && typeName[0] == typeName[0].toLowerCase()) typeName = getHtmlElementFactory(typeName);
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
$type: typeName,
|
|
45
|
-
$props: props,
|
|
46
|
-
jsxAttributes: props && Object.keys(props),
|
|
47
|
-
children,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function react(config: any): any {
|
|
52
|
-
if (!config || isString(config) || isNumber(config) || VDOM.isValidElement(config)) return config;
|
|
53
|
-
|
|
54
|
-
if (isArray(config)) return config.map(react);
|
|
55
|
-
|
|
56
|
-
let type = config.$type;
|
|
57
|
-
|
|
58
|
-
if (isComponentFactory(type) && type.$meta && type.$meta.tag) type = type.$meta.tag;
|
|
59
|
-
|
|
60
|
-
if (isArray(config.children)) return VDOM.createElement(type, config.$props, ...config.children.map(react));
|
|
61
|
-
|
|
62
|
-
return VDOM.createElement(type, config.$props, react(config.children));
|
|
63
|
-
}
|
|
1
|
+
import { HtmlElement } from "./HtmlElement";
|
|
2
|
+
import { VDOM } from "../ui/Widget";
|
|
3
|
+
import { createComponentFactory, isComponentFactory } from "../util/Component";
|
|
4
|
+
import { createFunctionalComponent } from "../ui/createFunctionalComponent";
|
|
5
|
+
import { isString } from "../util/isString";
|
|
6
|
+
import { isNumber } from "../util/isNumber";
|
|
7
|
+
import { isFunction } from "../util/isFunction";
|
|
8
|
+
import { isUndefined } from "../util/isUndefined";
|
|
9
|
+
import { isArray } from "../util/isArray";
|
|
10
|
+
|
|
11
|
+
import { flattenProps } from "../ui/flattenProps";
|
|
12
|
+
|
|
13
|
+
let htmlFactoryCache: Record<string, any> = {};
|
|
14
|
+
|
|
15
|
+
function getHtmlElementFactory(tagName: string): any {
|
|
16
|
+
let factory = htmlFactoryCache[tagName];
|
|
17
|
+
if (factory) return factory;
|
|
18
|
+
return (htmlFactoryCache[tagName] = createComponentFactory(
|
|
19
|
+
() => {},
|
|
20
|
+
(config: any) => HtmlElement.create(HtmlElement, { tag: tagName }, flattenProps(config)),
|
|
21
|
+
{ tag: tagName },
|
|
22
|
+
));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function cx(typeName: any, props?: any, ...children: any[]): any {
|
|
26
|
+
if (isArray(typeName)) return typeName;
|
|
27
|
+
|
|
28
|
+
if (isFunction(typeName) && isUndefined(props))
|
|
29
|
+
return createFunctionalComponent((config: any) => typeName(flattenProps(config)));
|
|
30
|
+
|
|
31
|
+
if (typeName.type || typeName.$type) return typeName;
|
|
32
|
+
|
|
33
|
+
if (children && children.length == 0) children = [];
|
|
34
|
+
|
|
35
|
+
if (children && children.length == 1) children = children[0];
|
|
36
|
+
|
|
37
|
+
if (typeName == "cx") return children;
|
|
38
|
+
|
|
39
|
+
if (typeName == "react") return react(children);
|
|
40
|
+
|
|
41
|
+
if (isString(typeName) && typeName[0] == typeName[0].toLowerCase()) typeName = getHtmlElementFactory(typeName);
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
$type: typeName,
|
|
45
|
+
$props: props,
|
|
46
|
+
jsxAttributes: props && Object.keys(props),
|
|
47
|
+
children,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function react(config: any): any {
|
|
52
|
+
if (!config || isString(config) || isNumber(config) || VDOM.isValidElement(config)) return config;
|
|
53
|
+
|
|
54
|
+
if (isArray(config)) return config.map(react);
|
|
55
|
+
|
|
56
|
+
let type = config.$type;
|
|
57
|
+
|
|
58
|
+
if (isComponentFactory(type) && type.$meta && type.$meta.tag) type = type.$meta.tag;
|
|
59
|
+
|
|
60
|
+
if (isArray(config.children)) return VDOM.createElement(type, config.$props, ...config.children.map(react));
|
|
61
|
+
|
|
62
|
+
return VDOM.createElement(type, config.$props, react(config.children));
|
|
63
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/** @jsxImportSource react */
|
|
2
2
|
|
|
3
|
-
import * as React from "react";
|
|
4
3
|
import { Cx } from "../../ui/Cx";
|
|
5
4
|
import { DropdownInstance, DropdownWidgetProps, Instance } from "../../ui/Instance";
|
|
6
5
|
import type { RenderingContext } from "../../ui/RenderingContext";
|
|
@@ -49,7 +48,10 @@ export interface ColorFieldConfig extends FieldConfig {
|
|
|
49
48
|
onValidate?: string | ((value: string, instance: Instance, validationParams: Record<string, unknown>) => unknown);
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
export class ColorFieldInstance<F extends ColorField = ColorField>
|
|
51
|
+
export class ColorFieldInstance<F extends ColorField = ColorField>
|
|
52
|
+
extends FieldInstance<F>
|
|
53
|
+
implements DropdownWidgetProps
|
|
54
|
+
{
|
|
53
55
|
lastDropdown?: Instance;
|
|
54
56
|
dropdownOpen?: boolean;
|
|
55
57
|
selectedIndex?: number;
|
|
@@ -231,10 +233,7 @@ class ColorInput extends VDOM.Component<ColorInputProps, ColorInputState> {
|
|
|
231
233
|
|
|
232
234
|
let insideButton;
|
|
233
235
|
if (!data.readOnly && !data.disabled) {
|
|
234
|
-
if (
|
|
235
|
-
showClear &&
|
|
236
|
-
(((!data.required || alwaysShowClear) && !data.empty) || instance.state?.inputError)
|
|
237
|
-
)
|
|
236
|
+
if (showClear && (((!data.required || alwaysShowClear) && !data.empty) || instance.state?.inputError))
|
|
238
237
|
insideButton = (
|
|
239
238
|
<div
|
|
240
239
|
className={CSS.element(baseClass, "clear")}
|
|
@@ -301,14 +300,18 @@ class ColorInput extends VDOM.Component<ColorInputProps, ColorInputState> {
|
|
|
301
300
|
type="text"
|
|
302
301
|
className={CSS.expand(CSS.element(baseClass, "input"), data.inputClass)}
|
|
303
302
|
style={data.inputStyle as React.CSSProperties}
|
|
304
|
-
defaultValue={this.trim(data.value as string || "")}
|
|
303
|
+
defaultValue={this.trim((data.value as string) || "")}
|
|
305
304
|
disabled={data.disabled as boolean}
|
|
306
305
|
readOnly={data.readOnly as boolean}
|
|
307
306
|
tabIndex={data.tabIndex as number}
|
|
308
307
|
placeholder={data.placeholder as string}
|
|
309
|
-
{...data.inputAttrs as Record<string, any>}
|
|
310
|
-
onInput={(e: React.ChangeEvent<HTMLInputElement>) =>
|
|
311
|
-
|
|
308
|
+
{...(data.inputAttrs as Record<string, any>)}
|
|
309
|
+
onInput={(e: React.ChangeEvent<HTMLInputElement>) =>
|
|
310
|
+
this.onChange((e.target as HTMLInputElement).value, "input")
|
|
311
|
+
}
|
|
312
|
+
onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
|
|
313
|
+
this.onChange((e.target as HTMLInputElement).value, "change")
|
|
314
|
+
}
|
|
312
315
|
onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => this.onKeyDown(e)}
|
|
313
316
|
onBlur={(e: React.FocusEvent<HTMLInputElement>) => {
|
|
314
317
|
this.onBlur(e);
|
|
@@ -355,7 +358,7 @@ class ColorInput extends VDOM.Component<ColorInputProps, ColorInputState> {
|
|
|
355
358
|
let { instance } = this.props;
|
|
356
359
|
let { widget } = instance;
|
|
357
360
|
const colorFieldWidget = widget as ColorField;
|
|
358
|
-
|
|
361
|
+
|
|
359
362
|
if (colorFieldWidget.trackFocus) {
|
|
360
363
|
this.setState({
|
|
361
364
|
focus: true,
|
|
@@ -430,7 +433,7 @@ class ColorInput extends VDOM.Component<ColorInputProps, ColorInputState> {
|
|
|
430
433
|
UNSAFE_componentWillReceiveProps(props: ColorInputProps): void {
|
|
431
434
|
let { data, instance } = props;
|
|
432
435
|
let { state } = instance;
|
|
433
|
-
let nv = this.trim(data.value as string || "");
|
|
436
|
+
let nv = this.trim((data.value as string) || "");
|
|
434
437
|
if (nv != this.input.value && (this.data.value != data.value || !state?.inputError)) {
|
|
435
438
|
this.input.value = nv;
|
|
436
439
|
instance.setState({
|
|
@@ -7,7 +7,6 @@ import { tooltipMouseMove, tooltipMouseLeave } from "../overlay/tooltip-ops";
|
|
|
7
7
|
import { stopPropagation } from "../../util/eventCallbacks";
|
|
8
8
|
import { KeyCode } from "../../util/KeyCode";
|
|
9
9
|
import { isUndefined } from "../../util/isUndefined";
|
|
10
|
-
import * as React from "react";
|
|
11
10
|
import { BooleanProp, Prop, StringProp } from "../../ui/Prop";
|
|
12
11
|
|
|
13
12
|
export interface RadioConfig extends FieldConfig {
|
|
@@ -247,7 +247,9 @@ class SliderComponent extends VDOM.Component<SliderComponentProps, SliderCompone
|
|
|
247
247
|
style={data.style}
|
|
248
248
|
id={data.id}
|
|
249
249
|
onClick={(e: React.MouseEvent) => this.onClick(e)}
|
|
250
|
-
ref={(el: HTMLDivElement | null) =>
|
|
250
|
+
ref={(el: HTMLDivElement | null) => {
|
|
251
|
+
this.dom.el = el || undefined;
|
|
252
|
+
}}
|
|
251
253
|
onMouseMove={(e: React.MouseEvent) => tooltipMouseMove(e, ...getFieldTooltip(instance))}
|
|
252
254
|
onMouseLeave={(e: React.MouseEvent) => tooltipMouseLeave(e, ...getFieldTooltip(instance))}
|
|
253
255
|
>
|
|
@@ -257,7 +259,9 @@ class SliderComponent extends VDOM.Component<SliderComponentProps, SliderCompone
|
|
|
257
259
|
<div
|
|
258
260
|
key="space"
|
|
259
261
|
className={CSS.element(baseClass, "space")}
|
|
260
|
-
ref={(c: HTMLDivElement | null) =>
|
|
262
|
+
ref={(c: HTMLDivElement | null) => {
|
|
263
|
+
this.dom.range = c || undefined;
|
|
264
|
+
}}
|
|
261
265
|
>
|
|
262
266
|
{widget.showFrom && (
|
|
263
267
|
<div
|
|
@@ -271,7 +275,9 @@ class SliderComponent extends VDOM.Component<SliderComponentProps, SliderCompone
|
|
|
271
275
|
}
|
|
272
276
|
onMouseLeave={(e: React.MouseEvent) => this.onHandleMouseLeave(e, "from")}
|
|
273
277
|
onTouchStart={(e: React.TouchEvent) => this.onHandleMouseDown(e, "from")}
|
|
274
|
-
ref={(c: HTMLDivElement | null) =>
|
|
278
|
+
ref={(c: HTMLDivElement | null) => {
|
|
279
|
+
this.dom.from = c || undefined;
|
|
280
|
+
}}
|
|
275
281
|
/>
|
|
276
282
|
)}
|
|
277
283
|
{widget.showTo && (
|
|
@@ -286,7 +292,9 @@ class SliderComponent extends VDOM.Component<SliderComponentProps, SliderCompone
|
|
|
286
292
|
}
|
|
287
293
|
onMouseLeave={(e: React.MouseEvent) => this.onHandleMouseLeave(e, "to")}
|
|
288
294
|
onTouchStart={(e: React.TouchEvent) => this.onHandleMouseDown(e, "to")}
|
|
289
|
-
ref={(c: HTMLDivElement | null) =>
|
|
295
|
+
ref={(c: HTMLDivElement | null) => {
|
|
296
|
+
this.dom.to = c || undefined;
|
|
297
|
+
}}
|
|
290
298
|
/>
|
|
291
299
|
)}
|
|
292
300
|
</div>
|
|
@@ -8,7 +8,6 @@ import { Field, FieldConfig, getFieldTooltip, FieldInstance } from "./Field";
|
|
|
8
8
|
import { tooltipMouseMove, tooltipMouseLeave } from "../overlay/tooltip-ops";
|
|
9
9
|
import { preventFocus } from "../../ui/FocusManager";
|
|
10
10
|
import { isDefined } from "../../util/isDefined";
|
|
11
|
-
import * as React from "react";
|
|
12
11
|
import { BooleanProp, StringProp, StyleProp } from "../../ui/Prop";
|
|
13
12
|
|
|
14
13
|
export interface SwitchConfig extends FieldConfig {
|
|
@@ -72,7 +71,7 @@ export class Switch extends Field<SwitchConfig> {
|
|
|
72
71
|
structured: true,
|
|
73
72
|
},
|
|
74
73
|
},
|
|
75
|
-
...args
|
|
74
|
+
...args,
|
|
76
75
|
);
|
|
77
76
|
}
|
|
78
77
|
|
|
@@ -116,7 +115,7 @@ export class Switch extends Field<SwitchConfig> {
|
|
|
116
115
|
className={data.classNames}
|
|
117
116
|
style={data.style}
|
|
118
117
|
id={data.id}
|
|
119
|
-
tabIndex={data.disabled ? undefined : (
|
|
118
|
+
tabIndex={data.disabled ? undefined : (data.tabIndex as number) || 0}
|
|
120
119
|
onMouseDown={(e: React.MouseEvent) => {
|
|
121
120
|
e.stopPropagation();
|
|
122
121
|
if (!this.focusOnMouseDown) preventFocus(e);
|
|
@@ -8,7 +8,6 @@ import { addEventListenerWithOptions } from "../../util";
|
|
|
8
8
|
import type { RenderingContext } from "../../ui/RenderingContext";
|
|
9
9
|
import type { Instance } from "../../ui/Instance";
|
|
10
10
|
import type { CSS } from "../../ui/CSS";
|
|
11
|
-
import * as React from "react";
|
|
12
11
|
import { Prop, StructuredProp } from "../../ui/Prop";
|
|
13
12
|
|
|
14
13
|
export interface WheelConfig extends PureContainerConfig {
|