cx 25.2.0 → 25.3.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 (113) hide show
  1. package/dist/manifest.js +606 -606
  2. package/dist/widgets.js +15 -4
  3. package/package.json +32 -32
  4. package/src/charts/Legend.js +167 -167
  5. package/src/charts/Legend.scss +40 -40
  6. package/src/charts/LegendEntry.js +128 -128
  7. package/src/charts/LegendEntry.scss +27 -27
  8. package/src/charts/PieChart.d.ts +92 -92
  9. package/src/charts/PieChart.js +529 -529
  10. package/src/charts/axis/Axis.d.ts +113 -113
  11. package/src/charts/axis/Axis.js +280 -280
  12. package/src/charts/axis/CategoryAxis.d.ts +30 -30
  13. package/src/charts/axis/CategoryAxis.js +241 -241
  14. package/src/charts/axis/NumericAxis.js +351 -351
  15. package/src/charts/axis/Stack.js +55 -55
  16. package/src/charts/axis/TimeAxis.d.ts +28 -28
  17. package/src/charts/axis/TimeAxis.js +611 -611
  18. package/src/charts/helpers/PointReducer.js +47 -47
  19. package/src/charts/helpers/SnapPointFinder.js +69 -69
  20. package/src/core.d.ts +40 -1
  21. package/src/data/Binding.spec.js +69 -69
  22. package/src/data/Expression.js +229 -229
  23. package/src/data/Expression.spec.js +229 -229
  24. package/src/data/StringTemplate.js +92 -92
  25. package/src/data/StringTemplate.spec.js +132 -132
  26. package/src/data/StructuredSelector.js +132 -132
  27. package/src/data/View.d.ts +36 -12
  28. package/src/data/getAccessor.spec.js +11 -11
  29. package/src/data/getSelector.js +49 -49
  30. package/src/hooks/createLocalStorageRef.d.ts +3 -3
  31. package/src/hooks/createLocalStorageRef.js +20 -20
  32. package/src/index.scss +6 -6
  33. package/src/ui/Culture.d.ts +57 -57
  34. package/src/ui/Culture.js +139 -139
  35. package/src/ui/FocusManager.js +171 -171
  36. package/src/ui/Format.js +108 -108
  37. package/src/ui/HoverSync.js +147 -147
  38. package/src/ui/Instance.d.ts +72 -72
  39. package/src/ui/Instance.js +614 -614
  40. package/src/ui/Repeater.d.ts +61 -61
  41. package/src/ui/ResizeManager.d.ts +4 -3
  42. package/src/ui/index.d.ts +42 -42
  43. package/src/ui/layout/ContentPlaceholder.d.ts +19 -19
  44. package/src/ui/layout/ContentPlaceholder.js +105 -105
  45. package/src/ui/layout/ContentPlaceholder.spec.js +579 -579
  46. package/src/ui/layout/LabelsTopLayout.js +134 -134
  47. package/src/util/date/encodeDate.d.ts +1 -1
  48. package/src/util/date/encodeDate.js +8 -8
  49. package/src/util/date/encodeDateWithTimezoneOffset.d.ts +1 -1
  50. package/src/util/date/index.d.ts +11 -11
  51. package/src/util/date/index.js +11 -11
  52. package/src/util/date/parseDateInvariant.d.ts +3 -3
  53. package/src/util/date/parseDateInvariant.js +20 -20
  54. package/src/util/debounce.d.ts +3 -4
  55. package/src/util/getSearchQueryPredicate.js +59 -59
  56. package/src/util/index.d.ts +51 -51
  57. package/src/util/index.js +54 -54
  58. package/src/util/isValidIdentifierName.d.ts +1 -1
  59. package/src/util/isValidIdentifierName.js +5 -5
  60. package/src/util/isValidIdentifierName.spec.js +33 -33
  61. package/src/util/scss/add-rules.scss +38 -38
  62. package/src/widgets/CxCredit.scss +37 -37
  63. package/src/widgets/HighlightedSearchText.js +36 -36
  64. package/src/widgets/HighlightedSearchText.scss +18 -18
  65. package/src/widgets/HtmlElement.d.ts +4 -0
  66. package/src/widgets/List.scss +91 -91
  67. package/src/widgets/drag-drop/DropZone.js +214 -214
  68. package/src/widgets/form/Calendar.js +618 -618
  69. package/src/widgets/form/Calendar.scss +196 -196
  70. package/src/widgets/form/Checkbox.scss +127 -127
  71. package/src/widgets/form/ColorField.js +397 -397
  72. package/src/widgets/form/ColorField.scss +96 -96
  73. package/src/widgets/form/ColorPicker.js +485 -480
  74. package/src/widgets/form/ColorPicker.scss +283 -283
  75. package/src/widgets/form/DateTimeField.js +576 -576
  76. package/src/widgets/form/DateTimePicker.js +392 -392
  77. package/src/widgets/form/LookupField.d.ts +179 -179
  78. package/src/widgets/form/LookupField.scss +219 -219
  79. package/src/widgets/form/MonthField.d.ts +99 -99
  80. package/src/widgets/form/MonthField.js +523 -523
  81. package/src/widgets/form/MonthPicker.d.ts +76 -76
  82. package/src/widgets/form/MonthPicker.js +641 -641
  83. package/src/widgets/form/MonthPicker.scss +118 -118
  84. package/src/widgets/form/NumberField.js +459 -459
  85. package/src/widgets/form/NumberField.scss +61 -61
  86. package/src/widgets/form/Radio.scss +121 -121
  87. package/src/widgets/form/Select.scss +99 -99
  88. package/src/widgets/form/Slider.scss +118 -118
  89. package/src/widgets/form/Switch.scss +140 -140
  90. package/src/widgets/form/TextArea.scss +43 -43
  91. package/src/widgets/form/TextField.js +290 -290
  92. package/src/widgets/form/TextField.scss +55 -55
  93. package/src/widgets/form/UploadButton.d.ts +34 -34
  94. package/src/widgets/form/variables.scss +353 -353
  95. package/src/widgets/grid/Grid.d.ts +442 -442
  96. package/src/widgets/grid/Grid.js +3414 -3414
  97. package/src/widgets/grid/GridRow.js +228 -228
  98. package/src/widgets/grid/TreeNode.d.ts +23 -23
  99. package/src/widgets/grid/TreeNode.scss +88 -88
  100. package/src/widgets/grid/variables.scss +133 -133
  101. package/src/widgets/nav/LinkButton.js +3 -3
  102. package/src/widgets/nav/Menu.scss +74 -74
  103. package/src/widgets/overlay/Dropdown.js +612 -612
  104. package/src/widgets/overlay/FlyweightTooltipTracker.js +39 -39
  105. package/src/widgets/overlay/Overlay.d.ts +73 -73
  106. package/src/widgets/overlay/Tooltip.js +308 -303
  107. package/src/widgets/overlay/Window.js +202 -202
  108. package/src/widgets/overlay/captureMouse.js +124 -124
  109. package/src/widgets/overlay/createHotPromiseWindowFactory.d.ts +18 -18
  110. package/src/widgets/overlay/createHotPromiseWindowFactory.js +56 -56
  111. package/src/widgets/overlay/index.d.ts +11 -11
  112. package/src/widgets/overlay/index.js +11 -11
  113. package/src/widgets/variables.scss +144 -144
package/dist/widgets.js CHANGED
@@ -4277,6 +4277,7 @@ function tooltipMouseMove(e, parentInstance, tooltip, options) {
4277
4277
  dismiss();
4278
4278
  instance.dismissTooltip = null;
4279
4279
  };
4280
+ instance.lastClickTime = Date.now();
4280
4281
  setTimeout(function () {
4281
4282
  var relatedElement = instance.widget.relatedElement;
4282
4283
  if (!canceled && instance.mouseOverTarget && relatedElement.ownerDocument.body.contains(relatedElement)) {
@@ -4291,8 +4292,13 @@ function tooltipMouseMove(e, parentInstance, tooltip, options) {
4291
4292
  }, instance.widget.createDelay);
4292
4293
  } else {
4293
4294
  if (isTouchEvent() && instance.widget.touchBehavior == "toggle") {
4294
- instance.dismissTooltip();
4295
- instance.dismissTooltip = null;
4295
+ var _instance$lastClickTi;
4296
+ // ios fires mousemove events after touchend
4297
+ if (Date.now() - ((_instance$lastClickTi = instance.lastClickTime) != null ? _instance$lastClickTi : 0) > 50) {
4298
+ instance.lastClickTime = Date.now();
4299
+ instance.dismissTooltip();
4300
+ instance.dismissTooltip = null;
4301
+ }
4296
4302
  } else if (dirty && instance.update) instance.update();
4297
4303
  }
4298
4304
  if (instance.trackMouse && e && e.target) instance.trackMouse(e);
@@ -5187,7 +5193,7 @@ var LinkButton = /*#__PURE__*/ (function (_Button) {
5187
5193
  var _proto = LinkButton.prototype;
5188
5194
  _proto.init = function init() {
5189
5195
  this.activeStyle = parseStyle(this.activeStyle);
5190
- this.inacativeStyle = parseStyle(this.inactiveStyle);
5196
+ this.inactiveStyle = parseStyle(this.inactiveStyle);
5191
5197
  _Button.prototype.init.call(this);
5192
5198
  };
5193
5199
  _proto.declareData = function declareData() {
@@ -11562,7 +11568,12 @@ var ColorPickerComponent = /*#__PURE__*/ (function (_VDOM$Component) {
11562
11568
  var _proto2 = ColorPickerComponent.prototype;
11563
11569
  _proto2.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(props) {
11564
11570
  var data = props.instance.data;
11565
- var color = this.parse(data.value);
11571
+ var color;
11572
+ try {
11573
+ color = this.parse(data.value);
11574
+ } catch (_unused) {
11575
+ color = this.parse(null);
11576
+ }
11566
11577
  if (color.r != this.state.r || color.g != this.state.g || color.b != this.state.b || color.a != this.state.a)
11567
11578
  this.setState(color);
11568
11579
  };
package/package.json CHANGED
@@ -1,32 +1,32 @@
1
- {
2
- "name": "cx",
3
- "version": "25.2.0",
4
- "description": "Advanced JavaScript UI framework for admin and dashboard applications with ready to use grid, form and chart components.",
5
- "main": "index.js",
6
- "jsnext:main": "src/index.js",
7
- "scripts": {
8
- "build": "node build/index"
9
- },
10
- "author": "Codaxy",
11
- "license": "MIT",
12
- "bugs": {
13
- "url": "https://github.com/codaxy/cxjs"
14
- },
15
- "homepage": "https://cxjs.io",
16
- "dependencies": {
17
- "intl-io": "^0.4.3",
18
- "route-parser": "^0.0.5"
19
- },
20
- "peerDependencies": {
21
- "@types/react": "*",
22
- "react": "*",
23
- "react-dom": "*"
24
- },
25
- "repository": {
26
- "type": "git",
27
- "url": "git@github.com:codaxy/cxjs.git"
28
- },
29
- "devDependencies": {
30
- "react-test-renderer": "^18.3.1"
31
- }
32
- }
1
+ {
2
+ "name": "cx",
3
+ "version": "25.3.1",
4
+ "description": "Advanced JavaScript UI framework for admin and dashboard applications with ready to use grid, form and chart components.",
5
+ "main": "index.js",
6
+ "jsnext:main": "src/index.js",
7
+ "scripts": {
8
+ "build": "node build/index"
9
+ },
10
+ "author": "Codaxy",
11
+ "license": "MIT",
12
+ "bugs": {
13
+ "url": "https://github.com/codaxy/cxjs"
14
+ },
15
+ "homepage": "https://cxjs.io",
16
+ "dependencies": {
17
+ "intl-io": "^0.4.3",
18
+ "route-parser": "^0.0.5"
19
+ },
20
+ "peerDependencies": {
21
+ "@types/react": "*",
22
+ "react": "*",
23
+ "react-dom": "*"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git@github.com:codaxy/cxjs.git"
28
+ },
29
+ "devDependencies": {
30
+ "react-test-renderer": "^18.3.1"
31
+ }
32
+ }
@@ -1,167 +1,167 @@
1
- import { Widget, VDOM } from "../ui/Widget";
2
- import { HtmlElement } from "../widgets/HtmlElement";
3
- import { PureContainer } from "../ui/PureContainer";
4
- import { getShape } from "./shapes";
5
- import { isUndefined } from "../util/isUndefined";
6
- import { isNonEmptyArray } from "../util/isNonEmptyArray";
7
- import { parseStyle } from "../util/parseStyle";
8
- import { withHoverSync } from "../ui/HoverSync";
9
-
10
- export class Legend extends HtmlElement {
11
- declareData() {
12
- super.declareData(...arguments, {
13
- shape: undefined,
14
- entryStyle: { structured: true },
15
- entryClass: { structured: true },
16
- });
17
- }
18
-
19
- init() {
20
- this.entryStyle = parseStyle(this.entryStyle);
21
- super.init();
22
- }
23
-
24
- prepareData(context, instance) {
25
- let { data } = instance;
26
- data.stateMods = Object.assign(data.stateMods || {}, {
27
- vertical: this.vertical,
28
- });
29
- super.prepareData(context, instance);
30
- }
31
-
32
- isValidHtmlAttribute(attrName) {
33
- switch (attrName) {
34
- case "shapeSize":
35
- case "svgSize":
36
- case "shape":
37
- case "entryStyle":
38
- case "entryClass":
39
- return false;
40
-
41
- default:
42
- return super.isValidHtmlAttribute(attrName);
43
- }
44
- }
45
-
46
- explore(context, instance) {
47
- if (!context.legends) context.legends = {};
48
-
49
- instance.legends = context.legends;
50
-
51
- context.addLegendEntry = (legendName, entry) => {
52
- if (!legendName) return;
53
-
54
- //case when all legends are scoped and new entry is added outside the scope
55
- if (!context.legends) return;
56
-
57
- let legend = context.legends[legendName];
58
- if (!legend)
59
- legend = context.legends[legendName] = {
60
- entries: [],
61
- names: {},
62
- };
63
-
64
- if (!legend.names[entry.name]) {
65
- legend.entries.push(entry);
66
- legend.names[entry.name] = entry;
67
- }
68
- };
69
-
70
- super.explore(context, instance);
71
- }
72
-
73
- renderChildren(context, instance) {
74
- const CSS = this.CSS;
75
-
76
- let entries = instance.legends[this.name] && instance.legends[this.name].entries,
77
- list;
78
-
79
- let { entryClass, entryStyle, shape } = instance.data;
80
-
81
- if (isNonEmptyArray(entries)) {
82
- list = entries.map((e, i) =>
83
- withHoverSync(i, e.hoverSync, e.hoverChannel, e.hoverId, ({ onMouseMove, onMouseLeave, hover }) => (
84
- <div
85
- key={i}
86
- className={CSS.expand(
87
- CSS.element(this.baseClass, "entry", {
88
- "color-root": true,
89
- hover,
90
- disabled: e.disabled,
91
- selected: e.selected,
92
- }),
93
- entryClass,
94
- )}
95
- style={entryStyle}
96
- onClick={e.onClick}
97
- onMouseMove={onMouseMove}
98
- onMouseLeave={onMouseLeave}
99
- >
100
- {this.renderShape(e, shape)}
101
- <div>{e.displayText || e.name}</div>
102
- </div>
103
- )),
104
- );
105
- }
106
-
107
- return [list, super.renderChildren(context, instance)];
108
- }
109
-
110
- renderShape(entry, legendEntriesShape) {
111
- const className = this.CSS.element(this.baseClass, "shape", {
112
- [`color-${entry.colorIndex}`]: entry.colorIndex != null && (isUndefined(entry.active) || entry.active),
113
- });
114
- const shape = getShape(legendEntriesShape || entry.shape || "square");
115
-
116
- // if the entry has a custom fill or stroke set, use it for both values
117
- let style = { ...entry.style };
118
- style.fill = style.fill ?? style.stroke;
119
- style.stroke = style.stroke ?? style.fill;
120
-
121
- return (
122
- <svg
123
- className={this.CSS.element(this.baseClass, "svg")}
124
- style={{
125
- width: `${this.svgSize}px`,
126
- height: `${this.svgSize}px`,
127
- }}
128
- >
129
- {shape(this.svgSize / 2, this.svgSize / 2, entry.shapeSize || this.shapeSize, {
130
- style,
131
- className,
132
- })}
133
- </svg>
134
- );
135
- }
136
- }
137
-
138
- Legend.prototype.name = "legend";
139
- Legend.prototype.baseClass = "legend";
140
- Legend.prototype.vertical = false;
141
- Legend.prototype.memoize = false;
142
- Legend.prototype.shapeSize = 18;
143
- Legend.prototype.shape = null;
144
- Legend.prototype.svgSize = 20;
145
-
146
- Widget.alias("legend", Legend);
147
-
148
- Legend.Scope = class extends PureContainer {
149
- explore(context, instance) {
150
- context.push("legends", (instance.legends = {}));
151
- super.explore(context, instance);
152
- }
153
-
154
- exploreCleanup(context, instance) {
155
- context.pop("legends");
156
- }
157
-
158
- prepare(context, instance) {
159
- context.push("legends", instance.legends);
160
- }
161
-
162
- prepareCleanup(context, instance) {
163
- context.pop("legends");
164
- }
165
- };
166
-
167
- export const LegendScope = Legend.Scope;
1
+ import { Widget, VDOM } from "../ui/Widget";
2
+ import { HtmlElement } from "../widgets/HtmlElement";
3
+ import { PureContainer } from "../ui/PureContainer";
4
+ import { getShape } from "./shapes";
5
+ import { isUndefined } from "../util/isUndefined";
6
+ import { isNonEmptyArray } from "../util/isNonEmptyArray";
7
+ import { parseStyle } from "../util/parseStyle";
8
+ import { withHoverSync } from "../ui/HoverSync";
9
+
10
+ export class Legend extends HtmlElement {
11
+ declareData() {
12
+ super.declareData(...arguments, {
13
+ shape: undefined,
14
+ entryStyle: { structured: true },
15
+ entryClass: { structured: true },
16
+ });
17
+ }
18
+
19
+ init() {
20
+ this.entryStyle = parseStyle(this.entryStyle);
21
+ super.init();
22
+ }
23
+
24
+ prepareData(context, instance) {
25
+ let { data } = instance;
26
+ data.stateMods = Object.assign(data.stateMods || {}, {
27
+ vertical: this.vertical,
28
+ });
29
+ super.prepareData(context, instance);
30
+ }
31
+
32
+ isValidHtmlAttribute(attrName) {
33
+ switch (attrName) {
34
+ case "shapeSize":
35
+ case "svgSize":
36
+ case "shape":
37
+ case "entryStyle":
38
+ case "entryClass":
39
+ return false;
40
+
41
+ default:
42
+ return super.isValidHtmlAttribute(attrName);
43
+ }
44
+ }
45
+
46
+ explore(context, instance) {
47
+ if (!context.legends) context.legends = {};
48
+
49
+ instance.legends = context.legends;
50
+
51
+ context.addLegendEntry = (legendName, entry) => {
52
+ if (!legendName) return;
53
+
54
+ //case when all legends are scoped and new entry is added outside the scope
55
+ if (!context.legends) return;
56
+
57
+ let legend = context.legends[legendName];
58
+ if (!legend)
59
+ legend = context.legends[legendName] = {
60
+ entries: [],
61
+ names: {},
62
+ };
63
+
64
+ if (!legend.names[entry.name]) {
65
+ legend.entries.push(entry);
66
+ legend.names[entry.name] = entry;
67
+ }
68
+ };
69
+
70
+ super.explore(context, instance);
71
+ }
72
+
73
+ renderChildren(context, instance) {
74
+ const CSS = this.CSS;
75
+
76
+ let entries = instance.legends[this.name] && instance.legends[this.name].entries,
77
+ list;
78
+
79
+ let { entryClass, entryStyle, shape } = instance.data;
80
+
81
+ if (isNonEmptyArray(entries)) {
82
+ list = entries.map((e, i) =>
83
+ withHoverSync(i, e.hoverSync, e.hoverChannel, e.hoverId, ({ onMouseMove, onMouseLeave, hover }) => (
84
+ <div
85
+ key={i}
86
+ className={CSS.expand(
87
+ CSS.element(this.baseClass, "entry", {
88
+ "color-root": true,
89
+ hover,
90
+ disabled: e.disabled,
91
+ selected: e.selected,
92
+ }),
93
+ entryClass,
94
+ )}
95
+ style={entryStyle}
96
+ onClick={e.onClick}
97
+ onMouseMove={onMouseMove}
98
+ onMouseLeave={onMouseLeave}
99
+ >
100
+ {this.renderShape(e, shape)}
101
+ <div>{e.displayText || e.name}</div>
102
+ </div>
103
+ )),
104
+ );
105
+ }
106
+
107
+ return [list, super.renderChildren(context, instance)];
108
+ }
109
+
110
+ renderShape(entry, legendEntriesShape) {
111
+ const className = this.CSS.element(this.baseClass, "shape", {
112
+ [`color-${entry.colorIndex}`]: entry.colorIndex != null && (isUndefined(entry.active) || entry.active),
113
+ });
114
+ const shape = getShape(legendEntriesShape || entry.shape || "square");
115
+
116
+ // if the entry has a custom fill or stroke set, use it for both values
117
+ let style = { ...entry.style };
118
+ style.fill = style.fill ?? style.stroke;
119
+ style.stroke = style.stroke ?? style.fill;
120
+
121
+ return (
122
+ <svg
123
+ className={this.CSS.element(this.baseClass, "svg")}
124
+ style={{
125
+ width: `${this.svgSize}px`,
126
+ height: `${this.svgSize}px`,
127
+ }}
128
+ >
129
+ {shape(this.svgSize / 2, this.svgSize / 2, entry.shapeSize || this.shapeSize, {
130
+ style,
131
+ className,
132
+ })}
133
+ </svg>
134
+ );
135
+ }
136
+ }
137
+
138
+ Legend.prototype.name = "legend";
139
+ Legend.prototype.baseClass = "legend";
140
+ Legend.prototype.vertical = false;
141
+ Legend.prototype.memoize = false;
142
+ Legend.prototype.shapeSize = 18;
143
+ Legend.prototype.shape = null;
144
+ Legend.prototype.svgSize = 20;
145
+
146
+ Widget.alias("legend", Legend);
147
+
148
+ Legend.Scope = class extends PureContainer {
149
+ explore(context, instance) {
150
+ context.push("legends", (instance.legends = {}));
151
+ super.explore(context, instance);
152
+ }
153
+
154
+ exploreCleanup(context, instance) {
155
+ context.pop("legends");
156
+ }
157
+
158
+ prepare(context, instance) {
159
+ context.push("legends", instance.legends);
160
+ }
161
+
162
+ prepareCleanup(context, instance) {
163
+ context.pop("legends");
164
+ }
165
+ };
166
+
167
+ export const LegendScope = Legend.Scope;
@@ -1,40 +1,40 @@
1
- @mixin cx-legend($name: "legend", $besm: $cx-besm) {
2
- $block: map-get($besm, block);
3
- $element: map-get($besm, element);
4
- $state: map-get($besm, state);
5
-
6
- .#{$block}#{$name} {
7
- display: flex;
8
- justify-content: center;
9
- align-items: flex-start;
10
- flex-wrap: wrap;
11
- gap: 5px 10px;
12
- }
13
-
14
- .#{$block}#{$name}.#{$state}vertical {
15
- flex-direction: column;
16
- }
17
-
18
- .#{$element}#{$name}-entry {
19
- display: flex;
20
- align-items: center;
21
- padding: 5px;
22
- gap: 5px;
23
- font-size: smaller;
24
- position: relative;
25
- box-sizing: border-box;
26
- cursor: pointer;
27
- }
28
-
29
- .#{$element}#{$name}-svg {
30
- flex-shrink: 0;
31
- }
32
-
33
- .#{$element}#{$name}-shape {
34
- fill: rgba(128, 128, 128, 0.1);
35
- }
36
- }
37
-
38
- @if (cx-should-include("cx/charts/Legend")) {
39
- @include cx-legend();
40
- }
1
+ @mixin cx-legend($name: "legend", $besm: $cx-besm) {
2
+ $block: map-get($besm, block);
3
+ $element: map-get($besm, element);
4
+ $state: map-get($besm, state);
5
+
6
+ .#{$block}#{$name} {
7
+ display: flex;
8
+ justify-content: center;
9
+ align-items: flex-start;
10
+ flex-wrap: wrap;
11
+ gap: 5px 10px;
12
+ }
13
+
14
+ .#{$block}#{$name}.#{$state}vertical {
15
+ flex-direction: column;
16
+ }
17
+
18
+ .#{$element}#{$name}-entry {
19
+ display: flex;
20
+ align-items: center;
21
+ padding: 5px;
22
+ gap: 5px;
23
+ font-size: smaller;
24
+ position: relative;
25
+ box-sizing: border-box;
26
+ cursor: pointer;
27
+ }
28
+
29
+ .#{$element}#{$name}-svg {
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ .#{$element}#{$name}-shape {
34
+ fill: rgba(128, 128, 128, 0.1);
35
+ }
36
+ }
37
+
38
+ @if (cx-should-include("cx/charts/Legend")) {
39
+ @include cx-legend();
40
+ }