cx 25.1.0 → 25.1.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 (106) hide show
  1. package/dist/data.js +9 -1
  2. package/dist/manifest.js +719 -719
  3. package/dist/widgets.js +17 -4
  4. package/package.json +32 -32
  5. package/src/charts/Legend.js +167 -167
  6. package/src/charts/Legend.scss +40 -40
  7. package/src/charts/LegendEntry.js +128 -128
  8. package/src/charts/LegendEntry.scss +27 -27
  9. package/src/charts/PieChart.d.ts +92 -92
  10. package/src/charts/PieChart.js +529 -529
  11. package/src/charts/axis/Axis.d.ts +113 -113
  12. package/src/charts/axis/Axis.js +280 -280
  13. package/src/charts/axis/CategoryAxis.d.ts +30 -30
  14. package/src/charts/axis/CategoryAxis.js +241 -241
  15. package/src/charts/axis/NumericAxis.js +351 -351
  16. package/src/charts/axis/Stack.js +55 -55
  17. package/src/charts/axis/TimeAxis.d.ts +28 -28
  18. package/src/charts/axis/TimeAxis.js +611 -611
  19. package/src/charts/helpers/PointReducer.js +47 -47
  20. package/src/charts/helpers/SnapPointFinder.js +69 -69
  21. package/src/data/Binding.spec.js +69 -69
  22. package/src/data/Expression.js +229 -221
  23. package/src/data/Expression.spec.js +229 -217
  24. package/src/data/StringTemplate.js +92 -92
  25. package/src/data/StringTemplate.spec.js +127 -110
  26. package/src/data/getAccessor.spec.js +11 -11
  27. package/src/hooks/createLocalStorageRef.d.ts +3 -3
  28. package/src/hooks/createLocalStorageRef.js +20 -20
  29. package/src/index.scss +6 -6
  30. package/src/ui/Culture.d.ts +57 -57
  31. package/src/ui/Culture.js +139 -139
  32. package/src/ui/FocusManager.js +171 -171
  33. package/src/ui/Format.js +108 -108
  34. package/src/ui/HoverSync.js +147 -147
  35. package/src/ui/Instance.d.ts +72 -72
  36. package/src/ui/Instance.js +614 -614
  37. package/src/ui/Repeater.d.ts +61 -61
  38. package/src/ui/index.d.ts +42 -42
  39. package/src/ui/layout/ContentPlaceholder.d.ts +19 -19
  40. package/src/ui/layout/ContentPlaceholder.js +105 -105
  41. package/src/ui/layout/ContentPlaceholder.spec.js +579 -579
  42. package/src/ui/layout/LabelsTopLayout.js +134 -134
  43. package/src/util/date/encodeDate.d.ts +1 -1
  44. package/src/util/date/encodeDate.js +8 -8
  45. package/src/util/date/encodeDateWithTimezoneOffset.d.ts +1 -1
  46. package/src/util/date/index.d.ts +11 -11
  47. package/src/util/date/index.js +11 -11
  48. package/src/util/date/parseDateInvariant.d.ts +3 -3
  49. package/src/util/date/parseDateInvariant.js +20 -20
  50. package/src/util/getSearchQueryPredicate.js +59 -59
  51. package/src/util/index.d.ts +51 -51
  52. package/src/util/index.js +54 -54
  53. package/src/util/isValidIdentifierName.d.ts +1 -1
  54. package/src/util/isValidIdentifierName.js +5 -5
  55. package/src/util/isValidIdentifierName.spec.js +33 -33
  56. package/src/util/scss/add-rules.scss +38 -38
  57. package/src/widgets/CxCredit.scss +37 -37
  58. package/src/widgets/HighlightedSearchText.js +36 -36
  59. package/src/widgets/HighlightedSearchText.scss +18 -18
  60. package/src/widgets/List.scss +91 -91
  61. package/src/widgets/drag-drop/DropZone.js +214 -214
  62. package/src/widgets/form/Calendar.js +618 -618
  63. package/src/widgets/form/Calendar.scss +196 -196
  64. package/src/widgets/form/Checkbox.scss +127 -127
  65. package/src/widgets/form/ColorField.js +397 -397
  66. package/src/widgets/form/ColorField.scss +96 -96
  67. package/src/widgets/form/ColorPicker.scss +283 -283
  68. package/src/widgets/form/DateTimeField.js +576 -576
  69. package/src/widgets/form/DateTimePicker.js +392 -392
  70. package/src/widgets/form/LookupField.d.ts +179 -179
  71. package/src/widgets/form/LookupField.scss +219 -219
  72. package/src/widgets/form/MonthField.d.ts +99 -95
  73. package/src/widgets/form/MonthField.js +523 -517
  74. package/src/widgets/form/MonthPicker.d.ts +76 -74
  75. package/src/widgets/form/MonthPicker.js +640 -633
  76. package/src/widgets/form/MonthPicker.scss +118 -118
  77. package/src/widgets/form/NumberField.js +459 -459
  78. package/src/widgets/form/NumberField.scss +61 -61
  79. package/src/widgets/form/Radio.scss +121 -121
  80. package/src/widgets/form/Select.scss +99 -99
  81. package/src/widgets/form/Slider.scss +118 -118
  82. package/src/widgets/form/Switch.scss +140 -140
  83. package/src/widgets/form/TextArea.scss +43 -43
  84. package/src/widgets/form/TextField.js +290 -290
  85. package/src/widgets/form/TextField.scss +55 -55
  86. package/src/widgets/form/UploadButton.d.ts +34 -34
  87. package/src/widgets/form/variables.scss +353 -353
  88. package/src/widgets/grid/Grid.d.ts +442 -442
  89. package/src/widgets/grid/Grid.js +3414 -3414
  90. package/src/widgets/grid/Grid.scss +637 -637
  91. package/src/widgets/grid/GridRow.js +228 -228
  92. package/src/widgets/grid/TreeNode.d.ts +23 -23
  93. package/src/widgets/grid/TreeNode.scss +88 -88
  94. package/src/widgets/grid/variables.scss +133 -133
  95. package/src/widgets/nav/Menu.scss +74 -74
  96. package/src/widgets/overlay/Dropdown.js +612 -612
  97. package/src/widgets/overlay/FlyweightTooltipTracker.js +39 -39
  98. package/src/widgets/overlay/Overlay.d.ts +73 -73
  99. package/src/widgets/overlay/Tooltip.js +303 -303
  100. package/src/widgets/overlay/Window.js +202 -202
  101. package/src/widgets/overlay/captureMouse.js +124 -124
  102. package/src/widgets/overlay/createHotPromiseWindowFactory.d.ts +18 -18
  103. package/src/widgets/overlay/createHotPromiseWindowFactory.js +56 -56
  104. package/src/widgets/overlay/index.d.ts +11 -11
  105. package/src/widgets/overlay/index.js +11 -11
  106. package/src/widgets/variables.scss +144 -144
package/dist/widgets.js CHANGED
@@ -10804,7 +10804,10 @@ var MonthPicker = /*#__PURE__*/ (function (_Field) {
10804
10804
  if (!this.range && data.value) data.date = monthStart(parseDateInvariant(data.value));
10805
10805
  if (this.range) {
10806
10806
  if (data.from) data.from = monthStart(parseDateInvariant(data.from));
10807
- if (data.to) data.to = monthStart(parseDateInvariant(data.to));
10807
+ if (data.to) {
10808
+ data.to = monthStart(parseDateInvariant(data.to));
10809
+ if (this.inclusiveTo) data.to.setDate(data.to.getDate() + 1);
10810
+ }
10808
10811
  }
10809
10812
  if (data.refDate) data.refDate = monthStart(parseDateInvariant(data.refDate));
10810
10813
  if (data.maxValue) data.maxValue = monthStart(parseDateInvariant(data.maxValue));
@@ -10852,7 +10855,9 @@ var MonthPicker = /*#__PURE__*/ (function (_Field) {
10852
10855
  if (this.onBeforeSelect && instance.invoke("onBeforeSelect", e, instance, date1, date2) === false) return;
10853
10856
  if (this.range) {
10854
10857
  instance.set("from", encode(date1));
10855
- instance.set("to", encode(date2));
10858
+ var toDate = new Date(date2);
10859
+ if (this.inclusiveTo) toDate.setDate(toDate.getDate() - 1);
10860
+ instance.set("to", encode(toDate));
10856
10861
  } else instance.set("value", encode(date1));
10857
10862
  if (this.onSelect) instance.invoke("onSelect", instance, date1, date2);
10858
10863
  };
@@ -10869,6 +10874,7 @@ MonthPicker.prototype.maxValueErrorText = "Select {0:d} or before.";
10869
10874
  MonthPicker.prototype.maxExclusiveErrorText = "Select a date before {0:d}.";
10870
10875
  MonthPicker.prototype.minValueErrorText = "Select {0:d} or later.";
10871
10876
  MonthPicker.prototype.minExclusiveErrorText = "Select a date after {0:d}.";
10877
+ MonthPicker.prototype.inclusiveTo = false;
10872
10878
  Localization.registerPrototype("cx/widgets/MonthPicker", MonthPicker);
10873
10879
  Widget.alias("month-picker", MonthPicker);
10874
10880
  var validationCheck = function validationCheck(date, data) {
@@ -12090,7 +12096,7 @@ var MonthField = /*#__PURE__*/ (function (_Field) {
12090
12096
  } else if (this.range && data.from && data.to) {
12091
12097
  data.from = parseDateInvariant(data.from);
12092
12098
  data.to = parseDateInvariant(data.to);
12093
- data.to.setDate(data.to.getDate() - 1);
12099
+ if (!this.inclusiveTo) data.to.setDate(data.to.getDate() - 1);
12094
12100
  var fromStr = this.culture.format(data.from, formatOptions);
12095
12101
  var toStr = this.culture.format(data.to, formatOptions);
12096
12102
  if (fromStr != toStr) data.formatted = fromStr + " - " + toStr;
@@ -12173,7 +12179,12 @@ var MonthField = /*#__PURE__*/ (function (_Field) {
12173
12179
  });
12174
12180
  if (this.range) {
12175
12181
  var d1 = date1 ? encode(date1) : this.emptyValue;
12176
- var d2 = date2 ? encode(date2) : this.emptyValue;
12182
+ var toDate = date2;
12183
+ if (date2 && this.inclusiveTo) {
12184
+ toDate = new Date(date2);
12185
+ toDate.setDate(toDate.getDate() - 1);
12186
+ }
12187
+ var d2 = toDate ? encode(toDate) : this.emptyValue;
12177
12188
  instance.set("from", d1);
12178
12189
  instance.set("to", d2);
12179
12190
  } else {
@@ -12195,6 +12206,7 @@ MonthField.prototype.showClear = true;
12195
12206
  MonthField.prototype.alwaysShowClear = false;
12196
12207
  MonthField.prototype.range = false;
12197
12208
  MonthField.prototype.reactOn = "enter blur";
12209
+ MonthField.prototype.inclusiveTo = false;
12198
12210
  Localization.registerPrototype("cx/widgets/MonthField", MonthField);
12199
12211
  Widget.alias("monthfield", MonthField);
12200
12212
  var MonthInput = /*#__PURE__*/ (function (_VDOM$Component) {
@@ -12235,6 +12247,7 @@ var MonthInput = /*#__PURE__*/ (function (_VDOM$Component) {
12235
12247
  this.props.monthPicker,
12236
12248
  {
12237
12249
  encoding: widget.encoding,
12250
+ inclusiveTo: widget.inclusiveTo,
12238
12251
  autoFocus: true,
12239
12252
  onFocusOut: function onFocusOut(e) {
12240
12253
  _this2.closeDropdown(e);
package/package.json CHANGED
@@ -1,32 +1,32 @@
1
- {
2
- "name": "cx",
3
- "version": "25.1.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.1.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
+ }