cx 24.10.2 → 24.10.4

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 (70) hide show
  1. package/dist/charts.js +24 -27
  2. package/dist/data.js +26 -29
  3. package/dist/manifest.js +434 -434
  4. package/dist/svg.js +59 -56
  5. package/dist/ui.js +51 -52
  6. package/dist/widgets.css +8 -8
  7. package/dist/widgets.js +40 -44
  8. package/package.json +32 -32
  9. package/src/charts/PieChart.js +2 -2
  10. package/src/charts/PieLabel.js +71 -71
  11. package/src/charts/axis/Axis.js +260 -260
  12. package/src/charts/axis/NumericAxis.js +347 -347
  13. package/src/charts/axis/Stack.js +55 -55
  14. package/src/charts/axis/TimeAxis.js +510 -510
  15. package/src/charts/helpers/PointReducer.js +43 -43
  16. package/src/charts/helpers/SnapPointFinder.js +69 -69
  17. package/src/data/Binding.spec.js +69 -69
  18. package/src/data/Expression.js +221 -221
  19. package/src/data/Expression.spec.js +184 -184
  20. package/src/data/StringTemplate.spec.js +105 -105
  21. package/src/data/getAccessor.spec.js +11 -11
  22. package/src/index.scss +6 -6
  23. package/src/svg/Text.d.ts +40 -40
  24. package/src/ui/Culture.d.ts +55 -55
  25. package/src/ui/Culture.js +139 -139
  26. package/src/ui/FocusManager.js +171 -171
  27. package/src/ui/Instance.d.ts +72 -72
  28. package/src/ui/VDOM.d.ts +12 -12
  29. package/src/ui/app/startAppLoop.js +58 -58
  30. package/src/ui/index.d.ts +42 -42
  31. package/src/ui/layout/LabelsTopLayout.js +134 -134
  32. package/src/util/Console.d.ts +4 -4
  33. package/src/util/index.d.ts +51 -51
  34. package/src/util/index.js +54 -54
  35. package/src/util/isValidIdentifierName.d.ts +1 -1
  36. package/src/util/isValidIdentifierName.js +5 -5
  37. package/src/util/isValidIdentifierName.spec.js +33 -33
  38. package/src/util/scss/add-rules.scss +38 -38
  39. package/src/widgets/CxCredit.scss +37 -37
  40. package/src/widgets/HighlightedSearchText.js +36 -36
  41. package/src/widgets/HighlightedSearchText.scss +18 -18
  42. package/src/widgets/List.scss +91 -91
  43. package/src/widgets/drag-drop/DropZone.js +214 -214
  44. package/src/widgets/form/Calendar.scss +196 -196
  45. package/src/widgets/form/ColorField.js +397 -397
  46. package/src/widgets/form/ColorPicker.scss +283 -283
  47. package/src/widgets/form/DateTimeField.js +573 -573
  48. package/src/widgets/form/LookupField.d.ts +179 -179
  49. package/src/widgets/form/MonthField.js +516 -516
  50. package/src/widgets/form/MonthPicker.scss +118 -118
  51. package/src/widgets/form/NumberField.js +459 -459
  52. package/src/widgets/form/NumberField.scss +61 -61
  53. package/src/widgets/form/Select.scss +99 -99
  54. package/src/widgets/form/Slider.scss +118 -118
  55. package/src/widgets/form/Switch.scss +140 -140
  56. package/src/widgets/form/TextArea.scss +43 -43
  57. package/src/widgets/form/TextField.js +290 -290
  58. package/src/widgets/form/TextField.scss +55 -55
  59. package/src/widgets/form/UploadButton.d.ts +34 -34
  60. package/src/widgets/form/variables.scss +353 -353
  61. package/src/widgets/grid/Grid.scss +2 -2
  62. package/src/widgets/grid/TreeNode.scss +88 -88
  63. package/src/widgets/nav/Menu.scss +74 -74
  64. package/src/widgets/overlay/Dropdown.js +612 -612
  65. package/src/widgets/overlay/FlyweightTooltipTracker.js +39 -39
  66. package/src/widgets/overlay/Tooltip.js +300 -300
  67. package/src/widgets/overlay/Window.js +196 -196
  68. package/src/widgets/overlay/captureMouse.js +124 -124
  69. package/src/widgets/overlay/variables.scss +83 -83
  70. package/src/widgets/variables.scss +144 -144
@@ -1,196 +1,196 @@
1
- import { Widget, VDOM, getContent } from "../../ui/Widget";
2
- import { Overlay, OverlayComponent } from "./Overlay";
3
- import { ContentPlaceholder } from "../../ui/layout/ContentPlaceholder";
4
- import { ZIndexManager } from "../../ui/ZIndexManager";
5
- import { Button } from "../Button";
6
- import { parseStyle } from "../../util/parseStyle";
7
- import { Localization } from "../../ui/Localization";
8
- import { stopPropagation } from "../../util/eventCallbacks";
9
- import { ddMouseDown, ddDetect, ddMouseUp } from "../drag-drop/ops";
10
- import { isDefined } from "../../util/isDefined";
11
- import { isString } from "../../util/isString";
12
-
13
- export class Window extends Overlay {
14
- init() {
15
- if (isDefined(this.closeable)) this.closable = this.closeable;
16
-
17
- if (isString(this.headerStyle)) this.headerStyle = parseStyle(this.headerStyle);
18
-
19
- if (isString(this.footerStyle)) this.footerStyle = parseStyle(this.footerStyle);
20
-
21
- if (isString(this.bodyStyle)) this.bodyStyle = parseStyle(this.bodyStyle);
22
-
23
- super.init();
24
- }
25
-
26
- declareData() {
27
- return super.declareData(...arguments, {
28
- title: undefined,
29
- closable: undefined,
30
- bodyStyle: { structured: true },
31
- bodyClass: { structured: true },
32
- headerStyle: { structured: true },
33
- footerStyle: { structured: true },
34
- });
35
- }
36
-
37
- initHelpers() {
38
- return super.initHelpers(...arguments, {
39
- header: Widget.create(this.header || { type: ContentPlaceholder, name: "header", scoped: true }),
40
- footer: Widget.create(this.footer || { type: ContentPlaceholder, name: "footer", scoped: true }),
41
- close:
42
- this.closable &&
43
- Button.create({
44
- mod: "hollow",
45
- dismiss: true,
46
- icon: "close",
47
- style: "margin-left: auto",
48
- onTouchStart: stopPropagation,
49
- onMouseDown: stopPropagation,
50
- }),
51
- });
52
- }
53
-
54
- exploreCleanup(context, instance) {
55
- super.exploreCleanup(context, instance);
56
-
57
- let { helpers } = instance;
58
- let unregisterHeader = helpers.header && helpers.header.unregisterContentPlaceholder;
59
- if (unregisterHeader) unregisterHeader();
60
-
61
- let unregisterFooter = helpers.footer && helpers.footer.unregisterContentPlaceholder;
62
- if (unregisterFooter) unregisterFooter();
63
- }
64
-
65
- renderHeader(context, instance, key) {
66
- let { data } = instance;
67
- let result = [];
68
- if (data.title) result.push(data.title);
69
- if (instance.helpers) {
70
- let header = getContent(instance.helpers.header && instance.helpers.header.render(context, key));
71
- if (header) result.push(header);
72
- if (data.closable && instance.helpers.close) result.push(getContent(instance.helpers.close.render(context)));
73
- }
74
- return result;
75
- }
76
-
77
- renderFooter(context, instance, key) {
78
- return getContent(instance.helpers && instance.helpers.footer && instance.helpers.footer.render(context, key));
79
- }
80
-
81
- render(context, instance, key) {
82
- var header = this.renderHeader(context, instance, "header");
83
- var footer = this.renderFooter(context, instance, "footer");
84
- return (
85
- <WindowComponent key={key} instance={instance} header={header} footer={footer}>
86
- {this.renderContents(context, instance)}
87
- </WindowComponent>
88
- );
89
- }
90
- }
91
-
92
- Window.prototype.baseClass = "window";
93
- Window.prototype.closable = true;
94
- Window.prototype.resizable = false;
95
- Window.prototype.fixed = false;
96
- Window.prototype.autoFocus = true;
97
- Window.prototype.focusable = true;
98
- Window.prototype.pad = true;
99
-
100
- Widget.alias("window", Window);
101
- Localization.registerPrototype("cx/widgets/Window", Window);
102
-
103
- class WindowComponent extends OverlayComponent {
104
- renderOverlayBody() {
105
- var { widget, data } = this.props.instance;
106
- var { CSS, baseClass } = widget;
107
-
108
- let header, footer;
109
-
110
- if (this.props.header.length > 0) {
111
- header = (
112
- <header
113
- key="header"
114
- ref={(c) => {
115
- this.headerEl = c;
116
- }}
117
- className={CSS.element(baseClass, "header")}
118
- style={data.headerStyle}
119
- onMouseDown={this.onHeaderMouseDown.bind(this)}
120
- onMouseUp={ddMouseUp}
121
- onMouseMove={this.onHeaderMouseMove.bind(this)}
122
- onTouchStart={this.onHeaderMouseDown.bind(this)}
123
- onTouchEnd={ddMouseUp}
124
- onTouchMove={this.onHeaderMouseMove.bind(this)}
125
- >
126
- {this.props.header}
127
- </header>
128
- );
129
- }
130
-
131
- if (this.props.footer) {
132
- footer = (
133
- <footer
134
- key="footer"
135
- ref={(c) => {
136
- this.footerEl = c;
137
- }}
138
- className={CSS.element(baseClass, "footer")}
139
- style={data.footerStyle}
140
- >
141
- {this.props.footer}
142
- </footer>
143
- );
144
- }
145
-
146
- var body = (
147
- <div
148
- key="body"
149
- ref={(c) => {
150
- this.bodyEl = c;
151
- }}
152
- className={CSS.expand(CSS.element(widget.baseClass, "body", { pad: widget.pad }), data.bodyClass)}
153
- style={data.bodyStyle}
154
- >
155
- {this.props.children}
156
- </div>
157
- );
158
-
159
- return [header, body, footer];
160
- }
161
-
162
- getOverlayCssClass() {
163
- var cls = super.getOverlayCssClass();
164
- if (this.state.active) cls += " cxs-active";
165
- return cls;
166
- }
167
-
168
- onFocusIn() {
169
- super.onFocusIn();
170
- if (!this.state.active) {
171
- if (this.containerEl.contains(document.activeElement)) this.setZIndex(ZIndexManager.next());
172
- this.setState({ active: true });
173
- }
174
- }
175
-
176
- onFocusOut() {
177
- super.onFocusOut();
178
- if (this.state.active) {
179
- this.setState({
180
- active: false,
181
- });
182
- }
183
- }
184
-
185
- onHeaderMouseDown(e) {
186
- e.stopPropagation();
187
- ddMouseDown(e);
188
- }
189
-
190
- onHeaderMouseMove(e) {
191
- e.stopPropagation();
192
- if (!this.props.instance.widget.fixed && ddDetect(e)) {
193
- this.startMoveOperation(e);
194
- }
195
- }
196
- }
1
+ import { Widget, VDOM, getContent } from "../../ui/Widget";
2
+ import { Overlay, OverlayComponent } from "./Overlay";
3
+ import { ContentPlaceholder } from "../../ui/layout/ContentPlaceholder";
4
+ import { ZIndexManager } from "../../ui/ZIndexManager";
5
+ import { Button } from "../Button";
6
+ import { parseStyle } from "../../util/parseStyle";
7
+ import { Localization } from "../../ui/Localization";
8
+ import { stopPropagation } from "../../util/eventCallbacks";
9
+ import { ddMouseDown, ddDetect, ddMouseUp } from "../drag-drop/ops";
10
+ import { isDefined } from "../../util/isDefined";
11
+ import { isString } from "../../util/isString";
12
+
13
+ export class Window extends Overlay {
14
+ init() {
15
+ if (isDefined(this.closeable)) this.closable = this.closeable;
16
+
17
+ if (isString(this.headerStyle)) this.headerStyle = parseStyle(this.headerStyle);
18
+
19
+ if (isString(this.footerStyle)) this.footerStyle = parseStyle(this.footerStyle);
20
+
21
+ if (isString(this.bodyStyle)) this.bodyStyle = parseStyle(this.bodyStyle);
22
+
23
+ super.init();
24
+ }
25
+
26
+ declareData() {
27
+ return super.declareData(...arguments, {
28
+ title: undefined,
29
+ closable: undefined,
30
+ bodyStyle: { structured: true },
31
+ bodyClass: { structured: true },
32
+ headerStyle: { structured: true },
33
+ footerStyle: { structured: true },
34
+ });
35
+ }
36
+
37
+ initHelpers() {
38
+ return super.initHelpers(...arguments, {
39
+ header: Widget.create(this.header || { type: ContentPlaceholder, name: "header", scoped: true }),
40
+ footer: Widget.create(this.footer || { type: ContentPlaceholder, name: "footer", scoped: true }),
41
+ close:
42
+ this.closable &&
43
+ Button.create({
44
+ mod: "hollow",
45
+ dismiss: true,
46
+ icon: "close",
47
+ style: "margin-left: auto",
48
+ onTouchStart: stopPropagation,
49
+ onMouseDown: stopPropagation,
50
+ }),
51
+ });
52
+ }
53
+
54
+ exploreCleanup(context, instance) {
55
+ super.exploreCleanup(context, instance);
56
+
57
+ let { helpers } = instance;
58
+ let unregisterHeader = helpers.header && helpers.header.unregisterContentPlaceholder;
59
+ if (unregisterHeader) unregisterHeader();
60
+
61
+ let unregisterFooter = helpers.footer && helpers.footer.unregisterContentPlaceholder;
62
+ if (unregisterFooter) unregisterFooter();
63
+ }
64
+
65
+ renderHeader(context, instance, key) {
66
+ let { data } = instance;
67
+ let result = [];
68
+ if (data.title) result.push(data.title);
69
+ if (instance.helpers) {
70
+ let header = getContent(instance.helpers.header && instance.helpers.header.render(context, key));
71
+ if (header) result.push(header);
72
+ if (data.closable && instance.helpers.close) result.push(getContent(instance.helpers.close.render(context)));
73
+ }
74
+ return result;
75
+ }
76
+
77
+ renderFooter(context, instance, key) {
78
+ return getContent(instance.helpers && instance.helpers.footer && instance.helpers.footer.render(context, key));
79
+ }
80
+
81
+ render(context, instance, key) {
82
+ var header = this.renderHeader(context, instance, "header");
83
+ var footer = this.renderFooter(context, instance, "footer");
84
+ return (
85
+ <WindowComponent key={key} instance={instance} header={header} footer={footer}>
86
+ {this.renderContents(context, instance)}
87
+ </WindowComponent>
88
+ );
89
+ }
90
+ }
91
+
92
+ Window.prototype.baseClass = "window";
93
+ Window.prototype.closable = true;
94
+ Window.prototype.resizable = false;
95
+ Window.prototype.fixed = false;
96
+ Window.prototype.autoFocus = true;
97
+ Window.prototype.focusable = true;
98
+ Window.prototype.pad = true;
99
+
100
+ Widget.alias("window", Window);
101
+ Localization.registerPrototype("cx/widgets/Window", Window);
102
+
103
+ class WindowComponent extends OverlayComponent {
104
+ renderOverlayBody() {
105
+ var { widget, data } = this.props.instance;
106
+ var { CSS, baseClass } = widget;
107
+
108
+ let header, footer;
109
+
110
+ if (this.props.header.length > 0) {
111
+ header = (
112
+ <header
113
+ key="header"
114
+ ref={(c) => {
115
+ this.headerEl = c;
116
+ }}
117
+ className={CSS.element(baseClass, "header")}
118
+ style={data.headerStyle}
119
+ onMouseDown={this.onHeaderMouseDown.bind(this)}
120
+ onMouseUp={ddMouseUp}
121
+ onMouseMove={this.onHeaderMouseMove.bind(this)}
122
+ onTouchStart={this.onHeaderMouseDown.bind(this)}
123
+ onTouchEnd={ddMouseUp}
124
+ onTouchMove={this.onHeaderMouseMove.bind(this)}
125
+ >
126
+ {this.props.header}
127
+ </header>
128
+ );
129
+ }
130
+
131
+ if (this.props.footer) {
132
+ footer = (
133
+ <footer
134
+ key="footer"
135
+ ref={(c) => {
136
+ this.footerEl = c;
137
+ }}
138
+ className={CSS.element(baseClass, "footer")}
139
+ style={data.footerStyle}
140
+ >
141
+ {this.props.footer}
142
+ </footer>
143
+ );
144
+ }
145
+
146
+ var body = (
147
+ <div
148
+ key="body"
149
+ ref={(c) => {
150
+ this.bodyEl = c;
151
+ }}
152
+ className={CSS.expand(CSS.element(widget.baseClass, "body", { pad: widget.pad }), data.bodyClass)}
153
+ style={data.bodyStyle}
154
+ >
155
+ {this.props.children}
156
+ </div>
157
+ );
158
+
159
+ return [header, body, footer];
160
+ }
161
+
162
+ getOverlayCssClass() {
163
+ var cls = super.getOverlayCssClass();
164
+ if (this.state.active) cls += " cxs-active";
165
+ return cls;
166
+ }
167
+
168
+ onFocusIn() {
169
+ super.onFocusIn();
170
+ if (!this.state.active) {
171
+ if (this.containerEl.contains(document.activeElement)) this.setZIndex(ZIndexManager.next());
172
+ this.setState({ active: true });
173
+ }
174
+ }
175
+
176
+ onFocusOut() {
177
+ super.onFocusOut();
178
+ if (this.state.active) {
179
+ this.setState({
180
+ active: false,
181
+ });
182
+ }
183
+ }
184
+
185
+ onHeaderMouseDown(e) {
186
+ e.stopPropagation();
187
+ ddMouseDown(e);
188
+ }
189
+
190
+ onHeaderMouseMove(e) {
191
+ e.stopPropagation();
192
+ if (!this.props.instance.widget.fixed && ddDetect(e)) {
193
+ this.startMoveOperation(e);
194
+ }
195
+ }
196
+ }
@@ -1,124 +1,124 @@
1
- import { batchUpdates } from "../../ui/batchUpdates";
2
- import { getParentFrameBoundingClientRect } from "../../util/getParentFrameBoundingClientRect";
3
-
4
- export function captureMouse2(e, { onMouseMove, onMouseUp, onDblClick, captureData, cursor }) {
5
- let surface = document.createElement("div");
6
- surface.className = "cxb-mousecapture";
7
- surface.style.cursor = cursor || getComputedStyle(e.currentTarget).cursor;
8
-
9
- document.body.appendChild(surface);
10
-
11
- // In case when the event originates from an iframe,
12
- // we use that document as events do not bubble up. //
13
- let parentDocument = e.target.ownerDocument;
14
- let options = { capture: true };
15
-
16
- let active = true;
17
- parentDocument.addEventListener("mousemove", move, options);
18
- parentDocument.addEventListener("mouseup", end, options);
19
- if (onDblClick) parentDocument.addEventListener("dblclick", doubleClick), options;
20
-
21
- function tear() {
22
- if (surface == null) return;
23
- parentDocument.removeEventListener("mousemove", move, options);
24
- parentDocument.removeEventListener("mouseup", end, options);
25
- if (onDblClick) parentDocument.removeEventListener("dblclick", onDblClick, options);
26
- document.body.removeChild(surface);
27
- surface = null;
28
- }
29
-
30
- function doubleClick(e) {
31
- try {
32
- onDblClick && onDblClick(e);
33
- } finally {
34
- tear();
35
- }
36
- }
37
-
38
- e.stopPropagation();
39
-
40
- function move(e) {
41
- if (!active) {
42
- tear();
43
- return;
44
- }
45
-
46
- //if mouse moves double clicking is off
47
- onDblClick = null;
48
-
49
- batchUpdates(() => {
50
- if (onMouseMove) onMouseMove(e, captureData);
51
- e.stopPropagation();
52
- e.preventDefault(); //disable text selection
53
- });
54
- }
55
-
56
- function end(e) {
57
- active = false;
58
- batchUpdates(() => {
59
- // if (surface.releaseCapture)
60
- // surface.releaseCapture();
61
-
62
- if (!onDblClick) surface.style.display = "none";
63
- try {
64
- if (onMouseUp) onMouseUp(e, captureData);
65
- } finally {
66
- if (onDblClick) {
67
- //keep the surface a little longer to detect double clicks
68
- setTimeout(tear, 1500);
69
- } else tear();
70
- }
71
- });
72
- }
73
- }
74
-
75
- export function captureMouseOrTouch2(e, { onMouseMove, onMouseUp, onDblClick, captureData, cursor }) {
76
- if (e.type.indexOf("touch") == 0) {
77
- let el = e.currentTarget;
78
-
79
- let move = (e) => {
80
- batchUpdates(() => {
81
- if (onMouseMove) onMouseMove(e, captureData);
82
- e.preventDefault();
83
- });
84
- };
85
-
86
- let end = (e) => {
87
- batchUpdates(() => {
88
- el.removeEventListener("touchmove", move);
89
- el.removeEventListener("touchend", end);
90
-
91
- if (onMouseUp) onMouseUp(e);
92
-
93
- e.preventDefault();
94
- });
95
- };
96
-
97
- el.addEventListener("touchmove", move);
98
- el.addEventListener("touchend", end);
99
-
100
- e.stopPropagation();
101
- } else captureMouse2(e, { onMouseMove, onMouseUp, captureData, onDblClick, cursor });
102
- }
103
-
104
- export function captureMouse(e, onMouseMove, onMouseUp, captureData, cursor) {
105
- captureMouse2(e, {
106
- onMouseMove,
107
- onMouseUp,
108
- captureData,
109
- cursor,
110
- });
111
- }
112
-
113
- export function captureMouseOrTouch(e, onMouseMove, onMouseUp, captureData, cursor) {
114
- captureMouseOrTouch2(e, { onMouseMove, onMouseUp, captureData, cursor });
115
- }
116
-
117
- export function getCursorPos(e) {
118
- let p = (e.touches && e.touches[0]) || e;
119
- let offset = getParentFrameBoundingClientRect(e.target);
120
- return {
121
- clientX: p.clientX + offset.left,
122
- clientY: p.clientY + offset.top,
123
- };
124
- }
1
+ import { batchUpdates } from "../../ui/batchUpdates";
2
+ import { getParentFrameBoundingClientRect } from "../../util/getParentFrameBoundingClientRect";
3
+
4
+ export function captureMouse2(e, { onMouseMove, onMouseUp, onDblClick, captureData, cursor }) {
5
+ let surface = document.createElement("div");
6
+ surface.className = "cxb-mousecapture";
7
+ surface.style.cursor = cursor || getComputedStyle(e.currentTarget).cursor;
8
+
9
+ document.body.appendChild(surface);
10
+
11
+ // In case when the event originates from an iframe,
12
+ // we use that document as events do not bubble up. //
13
+ let parentDocument = e.target.ownerDocument;
14
+ let options = { capture: true };
15
+
16
+ let active = true;
17
+ parentDocument.addEventListener("mousemove", move, options);
18
+ parentDocument.addEventListener("mouseup", end, options);
19
+ if (onDblClick) parentDocument.addEventListener("dblclick", doubleClick), options;
20
+
21
+ function tear() {
22
+ if (surface == null) return;
23
+ parentDocument.removeEventListener("mousemove", move, options);
24
+ parentDocument.removeEventListener("mouseup", end, options);
25
+ if (onDblClick) parentDocument.removeEventListener("dblclick", onDblClick, options);
26
+ document.body.removeChild(surface);
27
+ surface = null;
28
+ }
29
+
30
+ function doubleClick(e) {
31
+ try {
32
+ onDblClick && onDblClick(e);
33
+ } finally {
34
+ tear();
35
+ }
36
+ }
37
+
38
+ e.stopPropagation();
39
+
40
+ function move(e) {
41
+ if (!active) {
42
+ tear();
43
+ return;
44
+ }
45
+
46
+ //if mouse moves double clicking is off
47
+ onDblClick = null;
48
+
49
+ batchUpdates(() => {
50
+ if (onMouseMove) onMouseMove(e, captureData);
51
+ e.stopPropagation();
52
+ e.preventDefault(); //disable text selection
53
+ });
54
+ }
55
+
56
+ function end(e) {
57
+ active = false;
58
+ batchUpdates(() => {
59
+ // if (surface.releaseCapture)
60
+ // surface.releaseCapture();
61
+
62
+ if (!onDblClick) surface.style.display = "none";
63
+ try {
64
+ if (onMouseUp) onMouseUp(e, captureData);
65
+ } finally {
66
+ if (onDblClick) {
67
+ //keep the surface a little longer to detect double clicks
68
+ setTimeout(tear, 1500);
69
+ } else tear();
70
+ }
71
+ });
72
+ }
73
+ }
74
+
75
+ export function captureMouseOrTouch2(e, { onMouseMove, onMouseUp, onDblClick, captureData, cursor }) {
76
+ if (e.type.indexOf("touch") == 0) {
77
+ let el = e.currentTarget;
78
+
79
+ let move = (e) => {
80
+ batchUpdates(() => {
81
+ if (onMouseMove) onMouseMove(e, captureData);
82
+ e.preventDefault();
83
+ });
84
+ };
85
+
86
+ let end = (e) => {
87
+ batchUpdates(() => {
88
+ el.removeEventListener("touchmove", move);
89
+ el.removeEventListener("touchend", end);
90
+
91
+ if (onMouseUp) onMouseUp(e);
92
+
93
+ e.preventDefault();
94
+ });
95
+ };
96
+
97
+ el.addEventListener("touchmove", move);
98
+ el.addEventListener("touchend", end);
99
+
100
+ e.stopPropagation();
101
+ } else captureMouse2(e, { onMouseMove, onMouseUp, captureData, onDblClick, cursor });
102
+ }
103
+
104
+ export function captureMouse(e, onMouseMove, onMouseUp, captureData, cursor) {
105
+ captureMouse2(e, {
106
+ onMouseMove,
107
+ onMouseUp,
108
+ captureData,
109
+ cursor,
110
+ });
111
+ }
112
+
113
+ export function captureMouseOrTouch(e, onMouseMove, onMouseUp, captureData, cursor) {
114
+ captureMouseOrTouch2(e, { onMouseMove, onMouseUp, captureData, cursor });
115
+ }
116
+
117
+ export function getCursorPos(e) {
118
+ let p = (e.touches && e.touches[0]) || e;
119
+ let offset = getParentFrameBoundingClientRect(e.target);
120
+ return {
121
+ clientX: p.clientX + offset.left,
122
+ clientY: p.clientY + offset.top,
123
+ };
124
+ }