cx 25.6.0 → 25.6.1

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 (96) hide show
  1. package/dist/manifest.js +708 -708
  2. package/package.json +2 -2
  3. package/src/charts/Legend.d.ts +45 -45
  4. package/src/charts/LegendEntry.js +128 -128
  5. package/src/charts/LegendEntry.scss +27 -27
  6. package/src/charts/PieChart.d.ts +92 -92
  7. package/src/charts/RangeMarker.js +159 -159
  8. package/src/charts/axis/Axis.d.ts +113 -113
  9. package/src/charts/axis/Axis.js +280 -280
  10. package/src/charts/axis/CategoryAxis.d.ts +30 -30
  11. package/src/charts/axis/CategoryAxis.js +241 -241
  12. package/src/charts/axis/NumericAxis.js +351 -351
  13. package/src/charts/axis/Stack.js +55 -55
  14. package/src/charts/axis/TimeAxis.js +611 -611
  15. package/src/charts/helpers/SnapPointFinder.js +69 -69
  16. package/src/data/Binding.spec.js +69 -69
  17. package/src/data/Expression.js +229 -229
  18. package/src/data/Expression.spec.js +229 -229
  19. package/src/data/StringTemplate.js +92 -92
  20. package/src/data/StringTemplate.spec.js +132 -132
  21. package/src/data/StructuredSelector.js +132 -132
  22. package/src/data/getAccessor.spec.js +11 -11
  23. package/src/data/getSelector.js +49 -49
  24. package/src/hooks/createLocalStorageRef.d.ts +3 -3
  25. package/src/hooks/createLocalStorageRef.js +20 -20
  26. package/src/index.scss +6 -6
  27. package/src/ui/Culture.d.ts +57 -57
  28. package/src/ui/Culture.js +139 -139
  29. package/src/ui/FocusManager.js +171 -171
  30. package/src/ui/Format.js +108 -108
  31. package/src/ui/HoverSync.js +147 -147
  32. package/src/ui/Repeater.d.ts +61 -61
  33. package/src/ui/index.d.ts +42 -42
  34. package/src/ui/layout/ContentPlaceholder.d.ts +19 -19
  35. package/src/ui/layout/ContentPlaceholder.js +105 -105
  36. package/src/ui/layout/ContentPlaceholder.spec.js +579 -579
  37. package/src/ui/layout/LabelsTopLayout.js +134 -134
  38. package/src/util/Format.js +270 -270
  39. package/src/util/date/encodeDate.d.ts +1 -1
  40. package/src/util/date/encodeDate.js +8 -8
  41. package/src/util/date/encodeDateWithTimezoneOffset.d.ts +1 -1
  42. package/src/util/date/index.d.ts +11 -11
  43. package/src/util/date/index.js +11 -11
  44. package/src/util/date/parseDateInvariant.d.ts +3 -3
  45. package/src/util/date/parseDateInvariant.js +20 -20
  46. package/src/util/getSearchQueryPredicate.js +59 -59
  47. package/src/util/index.d.ts +51 -51
  48. package/src/util/index.js +54 -54
  49. package/src/util/isValidIdentifierName.d.ts +1 -1
  50. package/src/util/isValidIdentifierName.js +5 -5
  51. package/src/util/isValidIdentifierName.spec.js +33 -33
  52. package/src/util/scss/add-rules.scss +38 -38
  53. package/src/widgets/CxCredit.scss +37 -37
  54. package/src/widgets/HighlightedSearchText.js +36 -36
  55. package/src/widgets/HighlightedSearchText.scss +18 -18
  56. package/src/widgets/List.scss +91 -91
  57. package/src/widgets/drag-drop/DropZone.js +214 -214
  58. package/src/widgets/form/Calendar.js +618 -618
  59. package/src/widgets/form/Calendar.scss +196 -196
  60. package/src/widgets/form/Checkbox.scss +127 -127
  61. package/src/widgets/form/ColorField.js +397 -397
  62. package/src/widgets/form/ColorField.scss +96 -96
  63. package/src/widgets/form/ColorPicker.scss +283 -283
  64. package/src/widgets/form/DateTimeField.js +576 -576
  65. package/src/widgets/form/DateTimePicker.js +392 -392
  66. package/src/widgets/form/LookupField.d.ts +179 -179
  67. package/src/widgets/form/LookupField.scss +219 -219
  68. package/src/widgets/form/MonthPicker.scss +118 -118
  69. package/src/widgets/form/NumberField.js +459 -459
  70. package/src/widgets/form/NumberField.scss +61 -61
  71. package/src/widgets/form/Radio.scss +121 -121
  72. package/src/widgets/form/Select.scss +99 -99
  73. package/src/widgets/form/Slider.scss +118 -118
  74. package/src/widgets/form/Switch.scss +140 -140
  75. package/src/widgets/form/TextArea.scss +43 -43
  76. package/src/widgets/form/TextField.js +290 -290
  77. package/src/widgets/form/TextField.scss +55 -55
  78. package/src/widgets/form/UploadButton.d.ts +34 -34
  79. package/src/widgets/form/variables.scss +353 -353
  80. package/src/widgets/grid/Grid.d.ts +442 -442
  81. package/src/widgets/grid/GridRow.js +228 -228
  82. package/src/widgets/grid/TreeNode.d.ts +23 -23
  83. package/src/widgets/grid/TreeNode.scss +88 -88
  84. package/src/widgets/grid/variables.scss +133 -133
  85. package/src/widgets/nav/LinkButton.js +128 -128
  86. package/src/widgets/nav/Menu.scss +74 -74
  87. package/src/widgets/overlay/Dropdown.js +612 -612
  88. package/src/widgets/overlay/FlyweightTooltipTracker.js +39 -39
  89. package/src/widgets/overlay/Overlay.d.ts +73 -73
  90. package/src/widgets/overlay/Window.js +202 -202
  91. package/src/widgets/overlay/captureMouse.js +124 -124
  92. package/src/widgets/overlay/createHotPromiseWindowFactory.d.ts +18 -18
  93. package/src/widgets/overlay/createHotPromiseWindowFactory.js +56 -56
  94. package/src/widgets/overlay/index.d.ts +11 -11
  95. package/src/widgets/overlay/index.js +11 -11
  96. package/src/widgets/variables.scss +144 -144
@@ -1,228 +1,228 @@
1
- import { preventFocusOnTouch, unfocusElement } from "../../ui/FocusManager";
2
- import { VDOM } from "../../ui/Widget";
3
- import { closest } from "../../util/DOM";
4
- import { isTouchEvent } from "../../util/isTouchEvent";
5
- import { KeyCode } from "../../util/KeyCode";
6
- import { ValidationGroup } from "../../widgets/form/ValidationGroup";
7
- import { ddDetect, ddMouseDown, ddMouseUp, isDragHandleEvent } from "../drag-drop/ops";
8
- import { GridRowLine } from "./GridRowLine";
9
-
10
- export class GridRow extends ValidationGroup {
11
- declareData(...args) {
12
- super.declareData(...args, {
13
- hoverId: undefined,
14
- });
15
- }
16
-
17
- init() {
18
- this.items = [];
19
- for (let i = 0; i < 10; i++) {
20
- if (this["line" + i])
21
- this.items.push(
22
- GridRowLine.create(this["line" + i], {
23
- recordName: this.recordName,
24
- }),
25
- );
26
- }
27
- super.init();
28
- }
29
-
30
- explore(context, instance) {
31
- context.push("dragHandles", (instance.dragHandles = []));
32
- super.explore(context, instance);
33
- }
34
-
35
- exploreCleanup(context, instance) {
36
- super.exploreCleanup(context, instance);
37
- context.pop("dragHandles");
38
- }
39
- }
40
-
41
- GridRow.prototype.styled = true; //styles used on the wrapper component
42
-
43
- export class GridRowComponent extends VDOM.Component {
44
- constructor(props) {
45
- super(props);
46
- this.onMouseMove = this.onMouseMove.bind(this);
47
- this.onMouseDown = this.onMouseDown.bind(this);
48
- this.onMouseLeave = this.onMouseLeave.bind(this);
49
- this.onClick = this.onClick.bind(this);
50
- this.onKeyDown = this.onKeyDown.bind(this);
51
-
52
- let { grid, instance } = props;
53
-
54
- if (grid.widget.onRowDoubleClick)
55
- this.onDoubleClick = (e) => {
56
- grid.invoke("onRowDoubleClick", e, instance);
57
- };
58
-
59
- if (grid.widget.cellEditable)
60
- this.onDoubleClick = (e) => {
61
- this.props.parent.moveCursor(this.props.cursorIndex, {
62
- cellEdit: true,
63
- });
64
- e.preventDefault(); //prevent text selection
65
- };
66
-
67
- if (grid.widget.onRowContextMenu)
68
- this.onRowContextMenu = (e) => {
69
- grid.invoke("onRowContextMenu", e, instance);
70
- };
71
- }
72
-
73
- render() {
74
- let { className, dragSource, instance, record, useTrTag, children } = this.props;
75
- let { data, widget } = instance;
76
- let { CSS } = widget;
77
- let move, up, keyDown, leave;
78
-
79
- if (dragSource || data.hoverId != null) {
80
- move = this.onMouseMove;
81
- up = ddMouseUp;
82
- }
83
-
84
- if (data.hoverId != null) {
85
- leave = this.onMouseLeave;
86
- }
87
-
88
- if (widget.onRowClick) keyDown = this.onKeyDown;
89
-
90
- return VDOM.createElement(
91
- useTrTag ? "tr" : "tbody",
92
- {
93
- className: CSS.expand(data.classNames, className, this.state && this.state.hover && CSS.state("hover")),
94
- style: data.style,
95
- onClick: this.onClick,
96
- onDoubleClick: this.onDoubleClick,
97
- onTouchStart: this.onMouseDown,
98
- onMouseDown: this.onMouseDown,
99
- onTouchMove: move,
100
- onMouseMove: move,
101
- onMouseLeave: leave,
102
- onTouchEnd: up,
103
- onMouseUp: up,
104
- onKeyDown: keyDown,
105
- onContextMenu: this.onRowContextMenu,
106
- "data-record-key": record.key,
107
- },
108
- children,
109
- );
110
- }
111
-
112
- onMouseDown(e) {
113
- let { grid, record, instance, parent, cursorIndex } = this.props;
114
-
115
- if (this.props.dragSource) {
116
- ddMouseDown(e);
117
- if (isDragHandleEvent(e) || instance.dragHandles.length == 0) {
118
- e.preventDefault();
119
- e.stopPropagation();
120
-
121
- //close context menu
122
- unfocusElement(e.target, false);
123
- }
124
- }
125
-
126
- let { store, widget } = grid;
127
-
128
- if (widget.selectable) preventFocusOnTouch(e);
129
-
130
- parent.moveCursor(cursorIndex, {
131
- select:
132
- !isTouchEvent() &&
133
- (e.shiftKey || e.ctrlKey || !widget.selection.isSelected(store, record.data, record.index)),
134
- selectRange: e.shiftKey,
135
- selectOptions: {
136
- toggle: e.ctrlKey && !e.shiftKey,
137
- add: e.ctrlKey && e.shiftKey,
138
- },
139
- cellIndex: this.getCellIndex(e),
140
- });
141
-
142
- if (e.shiftKey && !isTouchEvent()) e.preventDefault();
143
- }
144
-
145
- onMouseMove(e) {
146
- let { grid, instance, parent, record } = this.props;
147
- if (ddDetect(e) && (isDragHandleEvent(e) || instance.dragHandles.length == 0)) parent.beginDragDrop(e, record);
148
- if (grid.hoverSync && instance.data.hoverId != null)
149
- grid.hoverSync.report(grid.widget.hoverChannel, instance.data.hoverId, true);
150
- }
151
-
152
- onMouseLeave(e) {
153
- let { grid, instance } = this.props;
154
- if (grid.hoverSync && instance.data.hoverId != null)
155
- grid.hoverSync.report(grid.widget.hoverChannel, instance.data.hoverId, false);
156
- }
157
-
158
- getCellIndex(e) {
159
- let td = closest(e.target, (node) => node.tagName == "TD");
160
- if (td)
161
- return (
162
- (this.props.fixed ? 0 : this.props.grid.fixedColumnCount) +
163
- Array.from(td.parentElement.children).indexOf(td)
164
- );
165
- return -1;
166
- }
167
-
168
- onKeyDown(e) {
169
- let { grid, instance } = this.props;
170
-
171
- if (e.keyCode == KeyCode.enter && grid.invoke("onRowClick", e, instance) === false) {
172
- e.stopPropagation();
173
- }
174
- }
175
-
176
- onClick(e) {
177
- let { grid, record, instance, parent, cursorIndex } = this.props;
178
- let { store, widget } = grid;
179
-
180
- if (grid.widget.onRowClick) {
181
- if (grid.invoke("onRowClick", e, instance) === false) return;
182
- }
183
-
184
- e.stopPropagation();
185
-
186
- parent.moveCursor(cursorIndex, {
187
- select:
188
- isTouchEvent() ||
189
- (!e.shiftKey && !e.ctrlKey && widget.selection.isSelected(store, record.data, record.index)),
190
- selectRange: e.shiftKey,
191
- selectOptions: {
192
- toggle: e.ctrlKey && !e.shiftKey,
193
- add: e.ctrlKey && e.shiftKey,
194
- },
195
- cellIndex: this.getCellIndex(e),
196
- });
197
- }
198
-
199
- shouldComponentUpdate(props, state) {
200
- return (
201
- props.shouldUpdate !== false ||
202
- props.record != this.props.record ||
203
- props.cursor != this.props.cursor ||
204
- props.selected != this.props.selected ||
205
- props.isBeingDragged != this.props.isBeingDragged ||
206
- props.cursorIndex !== this.props.cursorIndex ||
207
- props.cursorCellIndex !== this.props.cursorCellIndex ||
208
- props.cellEdit !== this.props.cellEdit ||
209
- props.dimensionsVersion !== this.props.dimensionsVersion ||
210
- props.isDraggedOver !== this.props.isDraggedOver ||
211
- state !== this.state
212
- );
213
- }
214
-
215
- compontentWillUnmount() {
216
- this.unsubscribeHoverSync && this.unsubscribeHoverSync();
217
- }
218
-
219
- componentDidMount() {
220
- let { grid } = this.props;
221
- if (grid.hoverSync) {
222
- this.unsubscribeHoverSync = grid.hoverSync.subscribe(grid.widget.hoverChannel, (hoverId) => {
223
- let hover = hoverId === this.props.instance.data.hoverId;
224
- if (!this.state || hover !== this.state.hover) this.setState({ hover });
225
- });
226
- }
227
- }
228
- }
1
+ import { preventFocusOnTouch, unfocusElement } from "../../ui/FocusManager";
2
+ import { VDOM } from "../../ui/Widget";
3
+ import { closest } from "../../util/DOM";
4
+ import { isTouchEvent } from "../../util/isTouchEvent";
5
+ import { KeyCode } from "../../util/KeyCode";
6
+ import { ValidationGroup } from "../../widgets/form/ValidationGroup";
7
+ import { ddDetect, ddMouseDown, ddMouseUp, isDragHandleEvent } from "../drag-drop/ops";
8
+ import { GridRowLine } from "./GridRowLine";
9
+
10
+ export class GridRow extends ValidationGroup {
11
+ declareData(...args) {
12
+ super.declareData(...args, {
13
+ hoverId: undefined,
14
+ });
15
+ }
16
+
17
+ init() {
18
+ this.items = [];
19
+ for (let i = 0; i < 10; i++) {
20
+ if (this["line" + i])
21
+ this.items.push(
22
+ GridRowLine.create(this["line" + i], {
23
+ recordName: this.recordName,
24
+ }),
25
+ );
26
+ }
27
+ super.init();
28
+ }
29
+
30
+ explore(context, instance) {
31
+ context.push("dragHandles", (instance.dragHandles = []));
32
+ super.explore(context, instance);
33
+ }
34
+
35
+ exploreCleanup(context, instance) {
36
+ super.exploreCleanup(context, instance);
37
+ context.pop("dragHandles");
38
+ }
39
+ }
40
+
41
+ GridRow.prototype.styled = true; //styles used on the wrapper component
42
+
43
+ export class GridRowComponent extends VDOM.Component {
44
+ constructor(props) {
45
+ super(props);
46
+ this.onMouseMove = this.onMouseMove.bind(this);
47
+ this.onMouseDown = this.onMouseDown.bind(this);
48
+ this.onMouseLeave = this.onMouseLeave.bind(this);
49
+ this.onClick = this.onClick.bind(this);
50
+ this.onKeyDown = this.onKeyDown.bind(this);
51
+
52
+ let { grid, instance } = props;
53
+
54
+ if (grid.widget.onRowDoubleClick)
55
+ this.onDoubleClick = (e) => {
56
+ grid.invoke("onRowDoubleClick", e, instance);
57
+ };
58
+
59
+ if (grid.widget.cellEditable)
60
+ this.onDoubleClick = (e) => {
61
+ this.props.parent.moveCursor(this.props.cursorIndex, {
62
+ cellEdit: true,
63
+ });
64
+ e.preventDefault(); //prevent text selection
65
+ };
66
+
67
+ if (grid.widget.onRowContextMenu)
68
+ this.onRowContextMenu = (e) => {
69
+ grid.invoke("onRowContextMenu", e, instance);
70
+ };
71
+ }
72
+
73
+ render() {
74
+ let { className, dragSource, instance, record, useTrTag, children } = this.props;
75
+ let { data, widget } = instance;
76
+ let { CSS } = widget;
77
+ let move, up, keyDown, leave;
78
+
79
+ if (dragSource || data.hoverId != null) {
80
+ move = this.onMouseMove;
81
+ up = ddMouseUp;
82
+ }
83
+
84
+ if (data.hoverId != null) {
85
+ leave = this.onMouseLeave;
86
+ }
87
+
88
+ if (widget.onRowClick) keyDown = this.onKeyDown;
89
+
90
+ return VDOM.createElement(
91
+ useTrTag ? "tr" : "tbody",
92
+ {
93
+ className: CSS.expand(data.classNames, className, this.state && this.state.hover && CSS.state("hover")),
94
+ style: data.style,
95
+ onClick: this.onClick,
96
+ onDoubleClick: this.onDoubleClick,
97
+ onTouchStart: this.onMouseDown,
98
+ onMouseDown: this.onMouseDown,
99
+ onTouchMove: move,
100
+ onMouseMove: move,
101
+ onMouseLeave: leave,
102
+ onTouchEnd: up,
103
+ onMouseUp: up,
104
+ onKeyDown: keyDown,
105
+ onContextMenu: this.onRowContextMenu,
106
+ "data-record-key": record.key,
107
+ },
108
+ children,
109
+ );
110
+ }
111
+
112
+ onMouseDown(e) {
113
+ let { grid, record, instance, parent, cursorIndex } = this.props;
114
+
115
+ if (this.props.dragSource) {
116
+ ddMouseDown(e);
117
+ if (isDragHandleEvent(e) || instance.dragHandles.length == 0) {
118
+ e.preventDefault();
119
+ e.stopPropagation();
120
+
121
+ //close context menu
122
+ unfocusElement(e.target, false);
123
+ }
124
+ }
125
+
126
+ let { store, widget } = grid;
127
+
128
+ if (widget.selectable) preventFocusOnTouch(e);
129
+
130
+ parent.moveCursor(cursorIndex, {
131
+ select:
132
+ !isTouchEvent() &&
133
+ (e.shiftKey || e.ctrlKey || !widget.selection.isSelected(store, record.data, record.index)),
134
+ selectRange: e.shiftKey,
135
+ selectOptions: {
136
+ toggle: e.ctrlKey && !e.shiftKey,
137
+ add: e.ctrlKey && e.shiftKey,
138
+ },
139
+ cellIndex: this.getCellIndex(e),
140
+ });
141
+
142
+ if (e.shiftKey && !isTouchEvent()) e.preventDefault();
143
+ }
144
+
145
+ onMouseMove(e) {
146
+ let { grid, instance, parent, record } = this.props;
147
+ if (ddDetect(e) && (isDragHandleEvent(e) || instance.dragHandles.length == 0)) parent.beginDragDrop(e, record);
148
+ if (grid.hoverSync && instance.data.hoverId != null)
149
+ grid.hoverSync.report(grid.widget.hoverChannel, instance.data.hoverId, true);
150
+ }
151
+
152
+ onMouseLeave(e) {
153
+ let { grid, instance } = this.props;
154
+ if (grid.hoverSync && instance.data.hoverId != null)
155
+ grid.hoverSync.report(grid.widget.hoverChannel, instance.data.hoverId, false);
156
+ }
157
+
158
+ getCellIndex(e) {
159
+ let td = closest(e.target, (node) => node.tagName == "TD");
160
+ if (td)
161
+ return (
162
+ (this.props.fixed ? 0 : this.props.grid.fixedColumnCount) +
163
+ Array.from(td.parentElement.children).indexOf(td)
164
+ );
165
+ return -1;
166
+ }
167
+
168
+ onKeyDown(e) {
169
+ let { grid, instance } = this.props;
170
+
171
+ if (e.keyCode == KeyCode.enter && grid.invoke("onRowClick", e, instance) === false) {
172
+ e.stopPropagation();
173
+ }
174
+ }
175
+
176
+ onClick(e) {
177
+ let { grid, record, instance, parent, cursorIndex } = this.props;
178
+ let { store, widget } = grid;
179
+
180
+ if (grid.widget.onRowClick) {
181
+ if (grid.invoke("onRowClick", e, instance) === false) return;
182
+ }
183
+
184
+ e.stopPropagation();
185
+
186
+ parent.moveCursor(cursorIndex, {
187
+ select:
188
+ isTouchEvent() ||
189
+ (!e.shiftKey && !e.ctrlKey && widget.selection.isSelected(store, record.data, record.index)),
190
+ selectRange: e.shiftKey,
191
+ selectOptions: {
192
+ toggle: e.ctrlKey && !e.shiftKey,
193
+ add: e.ctrlKey && e.shiftKey,
194
+ },
195
+ cellIndex: this.getCellIndex(e),
196
+ });
197
+ }
198
+
199
+ shouldComponentUpdate(props, state) {
200
+ return (
201
+ props.shouldUpdate !== false ||
202
+ props.record != this.props.record ||
203
+ props.cursor != this.props.cursor ||
204
+ props.selected != this.props.selected ||
205
+ props.isBeingDragged != this.props.isBeingDragged ||
206
+ props.cursorIndex !== this.props.cursorIndex ||
207
+ props.cursorCellIndex !== this.props.cursorCellIndex ||
208
+ props.cellEdit !== this.props.cellEdit ||
209
+ props.dimensionsVersion !== this.props.dimensionsVersion ||
210
+ props.isDraggedOver !== this.props.isDraggedOver ||
211
+ state !== this.state
212
+ );
213
+ }
214
+
215
+ compontentWillUnmount() {
216
+ this.unsubscribeHoverSync && this.unsubscribeHoverSync();
217
+ }
218
+
219
+ componentDidMount() {
220
+ let { grid } = this.props;
221
+ if (grid.hoverSync) {
222
+ this.unsubscribeHoverSync = grid.hoverSync.subscribe(grid.widget.hoverChannel, (hoverId) => {
223
+ let hover = hoverId === this.props.instance.data.hoverId;
224
+ if (!this.state || hover !== this.state.hover) this.setState({ hover });
225
+ });
226
+ }
227
+ }
228
+ }
@@ -1,23 +1,23 @@
1
- import * as Cx from "../../core";
2
-
3
- interface TreeNodeProps extends Cx.WidgetProps {
4
- level?: Cx.NumberProp;
5
- expanded?: Cx.BooleanProp;
6
- leaf?: Cx.BooleanProp;
7
- text?: Cx.StringProp;
8
- loading?: Cx.BooleanProp;
9
- icon?: Cx.StringProp;
10
-
11
- itemIcon?: Cx.StringProp;
12
- leafIcon?: Cx.StringProp;
13
- loadingIcon?: string;
14
- folderIcon?: Cx.StringProp;
15
- openFolderIcon?: Cx.StringProp;
16
-
17
- /** Base CSS class to be applied to the element. Defaults to 'treenode'. */
18
- baseClass?: string;
19
- hideIcon?: boolean;
20
- hideArrow?: Cx.BooleanProp;
21
- }
22
-
23
- export class TreeNode extends Cx.Widget<TreeNodeProps> {}
1
+ import * as Cx from "../../core";
2
+
3
+ interface TreeNodeProps extends Cx.WidgetProps {
4
+ level?: Cx.NumberProp;
5
+ expanded?: Cx.BooleanProp;
6
+ leaf?: Cx.BooleanProp;
7
+ text?: Cx.StringProp;
8
+ loading?: Cx.BooleanProp;
9
+ icon?: Cx.StringProp;
10
+
11
+ itemIcon?: Cx.StringProp;
12
+ leafIcon?: Cx.StringProp;
13
+ loadingIcon?: string;
14
+ folderIcon?: Cx.StringProp;
15
+ openFolderIcon?: Cx.StringProp;
16
+
17
+ /** Base CSS class to be applied to the element. Defaults to 'treenode'. */
18
+ baseClass?: string;
19
+ hideIcon?: boolean;
20
+ hideArrow?: Cx.BooleanProp;
21
+ }
22
+
23
+ export class TreeNode extends Cx.Widget<TreeNodeProps> {}
@@ -1,88 +1,88 @@
1
- @mixin cx-treenode(
2
- $name: "treenode",
3
- $icon-size: $cx-default-icon-size,
4
- $handle-size: $cx-default-input-tool-size,
5
- $handle-state-style-map: $cx-input-right-icon-state-style-map,
6
- $besm: $cx-besm
7
- ) {
8
- $block: map-get($besm, block);
9
- $element: map-get($besm, element);
10
- $state: map-get($besm, state);
11
- $mod: map-get($besm, mod);
12
-
13
- .#{$block}#{$name} {
14
- padding-left: $handle-size + $icon-size * 0.25;
15
- position: relative;
16
-
17
- &.#{$state}icon {
18
- padding-left: $handle-size + $icon-size + $icon-size * 0.25;
19
- }
20
-
21
- @for $i from 1 through 20 {
22
- &.#{$state}level-#{$i} {
23
- margin-left: #{($i * 20)}px;
24
- }
25
- }
26
- }
27
-
28
- .#{$element}#{$name}-handle {
29
- position: absolute;
30
-
31
- @include cx-add-state-rules($handle-state-style-map, default);
32
-
33
- left: 0;
34
- top: 50%;
35
- margin-top: -$handle-size * 0.5;
36
- bottom: 0;
37
- width: $handle-size + $icon-size;
38
- height: $handle-size;
39
-
40
- &:hover {
41
- @include cx-add-state-rules($handle-state-style-map, hover);
42
- }
43
-
44
- &:active {
45
- @include cx-add-state-rules($handle-state-style-map, active);
46
- }
47
- }
48
-
49
- .#{$element}#{$name}-arrow {
50
- display: block;
51
- position: absolute;
52
- left: 0;
53
- top: 50%;
54
- margin-top: -$icon-size * 0.5;
55
- margin-left: ($handle-size - $icon-size) * 0.5;
56
- height: $icon-size;
57
- width: $icon-size;
58
- line-height: $icon-size;
59
- transform: rotate(-90deg);
60
- transition: transform 0.2s;
61
-
62
- .#{$state}expanded & {
63
- transform: rotate(0);
64
- }
65
- }
66
-
67
- .#{$element}#{$name}-icon {
68
- display: block;
69
- position: absolute;
70
- left: 0;
71
- top: 50%;
72
- margin-top: -$icon-size * 0.5;
73
- margin-left: ($handle-size + $icon-size) * 0.5;
74
- height: $icon-size;
75
- width: $icon-size;
76
- line-height: $icon-size;
77
- }
78
-
79
- .#{$block}grid.#{$mod}tree {
80
- td {
81
- border-top: none;
82
- }
83
- }
84
- }
85
-
86
- @if (cx-should-include("cx/widgets/TreeNode")) {
87
- @include cx-treenode();
88
- }
1
+ @mixin cx-treenode(
2
+ $name: "treenode",
3
+ $icon-size: $cx-default-icon-size,
4
+ $handle-size: $cx-default-input-tool-size,
5
+ $handle-state-style-map: $cx-input-right-icon-state-style-map,
6
+ $besm: $cx-besm
7
+ ) {
8
+ $block: map-get($besm, block);
9
+ $element: map-get($besm, element);
10
+ $state: map-get($besm, state);
11
+ $mod: map-get($besm, mod);
12
+
13
+ .#{$block}#{$name} {
14
+ padding-left: $handle-size + $icon-size * 0.25;
15
+ position: relative;
16
+
17
+ &.#{$state}icon {
18
+ padding-left: $handle-size + $icon-size + $icon-size * 0.25;
19
+ }
20
+
21
+ @for $i from 1 through 20 {
22
+ &.#{$state}level-#{$i} {
23
+ margin-left: #{($i * 20)}px;
24
+ }
25
+ }
26
+ }
27
+
28
+ .#{$element}#{$name}-handle {
29
+ position: absolute;
30
+
31
+ @include cx-add-state-rules($handle-state-style-map, default);
32
+
33
+ left: 0;
34
+ top: 50%;
35
+ margin-top: -$handle-size * 0.5;
36
+ bottom: 0;
37
+ width: $handle-size + $icon-size;
38
+ height: $handle-size;
39
+
40
+ &:hover {
41
+ @include cx-add-state-rules($handle-state-style-map, hover);
42
+ }
43
+
44
+ &:active {
45
+ @include cx-add-state-rules($handle-state-style-map, active);
46
+ }
47
+ }
48
+
49
+ .#{$element}#{$name}-arrow {
50
+ display: block;
51
+ position: absolute;
52
+ left: 0;
53
+ top: 50%;
54
+ margin-top: -$icon-size * 0.5;
55
+ margin-left: ($handle-size - $icon-size) * 0.5;
56
+ height: $icon-size;
57
+ width: $icon-size;
58
+ line-height: $icon-size;
59
+ transform: rotate(-90deg);
60
+ transition: transform 0.2s;
61
+
62
+ .#{$state}expanded & {
63
+ transform: rotate(0);
64
+ }
65
+ }
66
+
67
+ .#{$element}#{$name}-icon {
68
+ display: block;
69
+ position: absolute;
70
+ left: 0;
71
+ top: 50%;
72
+ margin-top: -$icon-size * 0.5;
73
+ margin-left: ($handle-size + $icon-size) * 0.5;
74
+ height: $icon-size;
75
+ width: $icon-size;
76
+ line-height: $icon-size;
77
+ }
78
+
79
+ .#{$block}grid.#{$mod}tree {
80
+ td {
81
+ border-top: none;
82
+ }
83
+ }
84
+ }
85
+
86
+ @if (cx-should-include("cx/widgets/TreeNode")) {
87
+ @include cx-treenode();
88
+ }