cx 26.0.6 → 26.0.9

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 (134) hide show
  1. package/build/charts/Bar.scss +29 -0
  2. package/build/charts/BarGraph.scss +29 -0
  3. package/build/charts/BubbleGraph.scss +32 -0
  4. package/build/charts/Column.scss +29 -0
  5. package/build/charts/ColumnGraph.scss +30 -0
  6. package/build/charts/Gridlines.scss +25 -0
  7. package/build/charts/Legend.scss +50 -0
  8. package/build/charts/LegendEntry.scss +29 -0
  9. package/build/charts/LineGraph.d.ts +11 -0
  10. package/build/charts/LineGraph.js +1 -0
  11. package/build/charts/LineGraph.scss +25 -0
  12. package/build/charts/Marker.scss +44 -0
  13. package/build/charts/MarkerLine.scss +20 -0
  14. package/build/charts/PieChart.scss +29 -0
  15. package/build/charts/Range.scss +20 -0
  16. package/build/charts/RangeMarker.scss +17 -0
  17. package/build/charts/ScatterGraph.scss +24 -0
  18. package/build/charts/Swimlane.scss +16 -0
  19. package/build/charts/Swimlanes.scss +16 -0
  20. package/build/charts/axis/Axis.scss +23 -0
  21. package/build/charts/axis/CategoryAxis.scss +35 -0
  22. package/build/charts/axis/NumericAxis.scss +35 -0
  23. package/build/charts/axis/TimeAxis.scss +34 -0
  24. package/build/charts/axis/index.scss +5 -0
  25. package/build/charts/axis/variables.scss +3 -0
  26. package/build/charts/index.scss +22 -0
  27. package/build/charts/palette.scss +97 -0
  28. package/build/charts/variables.scss +22 -0
  29. package/build/global.scss +14 -0
  30. package/build/index.scss +6 -0
  31. package/build/jsx-runtime.d.ts +3 -2
  32. package/build/svg/Svg.scss +28 -0
  33. package/build/svg/index.scss +9 -0
  34. package/build/ui/index.scss +2 -0
  35. package/build/ui/layout/LabelsLeftLayout.scss +47 -0
  36. package/build/ui/layout/LabelsTopLayout.scss +65 -0
  37. package/build/ui/layout/index.scss +3 -0
  38. package/build/ui/layout/variables.scss +2 -0
  39. package/build/ui/variables.scss +2 -0
  40. package/build/util/addEventListenerWithOptions.d.ts +2 -2
  41. package/build/util/call-once.scss +7 -0
  42. package/build/util/index.scss +11 -0
  43. package/build/util/scss/add-rules.scss +40 -0
  44. package/build/util/scss/calc.scss +45 -0
  45. package/build/util/scss/call-once.scss +13 -0
  46. package/build/util/scss/clockwise.scss +49 -0
  47. package/build/util/scss/colors.scss +10 -0
  48. package/build/util/scss/deep-get.scss +12 -0
  49. package/build/util/scss/deep-merge.scss +21 -0
  50. package/build/util/scss/divide.scss +3 -0
  51. package/build/util/scss/include.scss +48 -0
  52. package/build/util/scss/index.scss +9 -0
  53. package/build/variables.scss +217 -0
  54. package/build/widgets/Button.scss +119 -0
  55. package/build/widgets/Button.variables.scss +117 -0
  56. package/build/widgets/CxCredit.scss +39 -0
  57. package/build/widgets/FlexBox.scss +148 -0
  58. package/build/widgets/Heading.scss +40 -0
  59. package/build/widgets/HighlightedSearchText.scss +20 -0
  60. package/build/widgets/Icon.scss +22 -0
  61. package/build/widgets/List.scss +93 -0
  62. package/build/widgets/ProgressBar.scss +51 -0
  63. package/build/widgets/Resizer.scss +44 -0
  64. package/build/widgets/Section.scss +56 -0
  65. package/build/widgets/animations.scss +11 -0
  66. package/build/widgets/drag-drop/DragClone.scss +36 -0
  67. package/build/widgets/drag-drop/DragHandle.scss +19 -0
  68. package/build/widgets/drag-drop/DragSource.scss +27 -0
  69. package/build/widgets/drag-drop/DropZone.scss +77 -0
  70. package/build/widgets/drag-drop/index.scss +4 -0
  71. package/build/widgets/drag-drop/variables.scss +15 -0
  72. package/build/widgets/form/Calendar.scss +199 -0
  73. package/build/widgets/form/Calendar.variables.scss +64 -0
  74. package/build/widgets/form/Checkbox.scss +129 -0
  75. package/build/widgets/form/Checkbox.variables.scss +40 -0
  76. package/build/widgets/form/ColorField.scss +98 -0
  77. package/build/widgets/form/ColorPicker.scss +285 -0
  78. package/build/widgets/form/ColorPicker.variables.scss +22 -0
  79. package/build/widgets/form/DateTimeField.scss +92 -0
  80. package/build/widgets/form/DateTimePicker.scss +47 -0
  81. package/build/widgets/form/Field.scss +164 -0
  82. package/build/widgets/form/HelpText.scss +24 -0
  83. package/build/widgets/form/Label.scss +38 -0
  84. package/build/widgets/form/LookupField.scss +221 -0
  85. package/build/widgets/form/MonthField.scss +100 -0
  86. package/build/widgets/form/MonthPicker.scss +125 -0
  87. package/build/widgets/form/NumberField.scss +63 -0
  88. package/build/widgets/form/Radio.scss +123 -0
  89. package/build/widgets/form/Radio.variables.scss +46 -0
  90. package/build/widgets/form/Select.scss +101 -0
  91. package/build/widgets/form/Slider.scss +121 -0
  92. package/build/widgets/form/Switch.scss +142 -0
  93. package/build/widgets/form/TextArea.scss +45 -0
  94. package/build/widgets/form/TextField.scss +57 -0
  95. package/build/widgets/form/UploadButton.scss +49 -0
  96. package/build/widgets/form/ValidationError.scss +23 -0
  97. package/build/widgets/form/Wheel.scss +152 -0
  98. package/build/widgets/form/index.scss +24 -0
  99. package/build/widgets/form/variables.scss +355 -0
  100. package/build/widgets/grid/Grid.scss +640 -0
  101. package/build/widgets/grid/Pagination.scss +115 -0
  102. package/build/widgets/grid/TreeNode.scss +90 -0
  103. package/build/widgets/grid/index.scss +4 -0
  104. package/build/widgets/grid/variables.scss +137 -0
  105. package/build/widgets/index.scss +16 -0
  106. package/build/widgets/nav/Link.scss +20 -0
  107. package/build/widgets/nav/Menu.scss +76 -0
  108. package/build/widgets/nav/Menu.variables.scss +25 -0
  109. package/build/widgets/nav/MenuItem.d.ts +1 -0
  110. package/build/widgets/nav/MenuItem.scss +130 -0
  111. package/build/widgets/nav/Scroller.scss +148 -0
  112. package/build/widgets/nav/Tab.scss +82 -0
  113. package/build/widgets/nav/Tab.variables.scss +84 -0
  114. package/build/widgets/nav/cover.scss +22 -0
  115. package/build/widgets/nav/index.scss +6 -0
  116. package/build/widgets/nav/variables.scss +27 -0
  117. package/build/widgets/overlay/Dropdown.scss +186 -0
  118. package/build/widgets/overlay/Overlay.scss +68 -0
  119. package/build/widgets/overlay/Toast.scss +164 -0
  120. package/build/widgets/overlay/Tooltip.scss +177 -0
  121. package/build/widgets/overlay/Window.scss +129 -0
  122. package/build/widgets/overlay/Window.variables.scss +62 -0
  123. package/build/widgets/overlay/captureMouse.scss +13 -0
  124. package/build/widgets/overlay/index.scss +15 -0
  125. package/build/widgets/overlay/variables.scss +85 -0
  126. package/build/widgets/variables.scss +146 -0
  127. package/build.js +4 -0
  128. package/dist/charts.js +1 -0
  129. package/dist/manifest.js +876 -770
  130. package/package.json +4 -2
  131. package/src/charts/LineGraph.tsx +14 -0
  132. package/src/jsx-runtime.ts +8 -5
  133. package/src/util/addEventListenerWithOptions.ts +41 -41
  134. package/src/widgets/nav/MenuItem.tsx +1 -0
@@ -0,0 +1,115 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-pagination(
4
+ $name: "pagination",
5
+ $state-style-map: $cx-grid-pagination-state-style-map,
6
+ $icon-size: $cx-default-icon-size,
7
+ $besm: $cx-besm
8
+ ) {
9
+ $block: map.get($besm, block);
10
+ $element: map.get($besm, element);
11
+ $state: map.get($besm, state);
12
+
13
+ .#{$block}#{$name} {
14
+ display: inline-block;
15
+ white-space: nowrap;
16
+ margin: 0;
17
+ padding: 0;
18
+ line-height: $cx-default-box-line-height;
19
+ box-sizing: border-box;
20
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
21
+ user-select: none;
22
+
23
+ @include cx-add-state-rules($cx-list, default);
24
+
25
+ &:hover {
26
+ @include cx-add-state-rules($cx-list, hover);
27
+ }
28
+
29
+ &:focus {
30
+ @include cx-add-state-rules($cx-list, focus);
31
+ }
32
+ }
33
+
34
+ .#{$element}#{$name}-page {
35
+ display: inline-block;
36
+ box-sizing: border-box;
37
+ border-style: solid;
38
+ margin-left: -1px;
39
+ text-decoration: none;
40
+ cursor: pointer;
41
+ border-width: $cx-grid-pagination-default-border-width;
42
+ border-color: $cx-grid-pagination-default-border-color;
43
+ border-radius: $cx-grid-pagination-default-border-radius;
44
+ padding: $cx-grid-pagination-default-padding;
45
+
46
+ @include cx-add-state-rules($state-style-map, default);
47
+
48
+ position: relative;
49
+
50
+ &:first-child {
51
+ border-top-left-radius: $cx-grid-pagination-default-outer-border-radius;
52
+ border-bottom-left-radius: $cx-grid-pagination-default-outer-border-radius;
53
+
54
+ &:after {
55
+ content: "<";
56
+ visibility: hidden;
57
+ }
58
+ }
59
+
60
+ &:last-child {
61
+ border-top-right-radius: $cx-grid-pagination-default-outer-border-radius;
62
+ border-bottom-right-radius: $cx-grid-pagination-default-outer-border-radius;
63
+
64
+ &:after {
65
+ content: ">";
66
+ visibility: hidden;
67
+ }
68
+ }
69
+
70
+ &:hover {
71
+ @include cx-add-state-rules($state-style-map, hover);
72
+
73
+ &:focus {
74
+ @include cx-add-state-rules($state-style-map, cursor);
75
+ }
76
+ }
77
+
78
+ &:active {
79
+ @include cx-add-state-rules($state-style-map, active);
80
+ }
81
+
82
+ &.#{$state}active {
83
+ @include cx-add-state-rules($state-style-map, selected);
84
+
85
+ .#{$block}#{$name}:focus > & {
86
+ @include cx-add-state-rules($state-style-map, selected-cursor);
87
+ }
88
+ }
89
+
90
+ &.#{$state}disabled {
91
+ @include cx-add-state-rules($state-style-map, disabled);
92
+ }
93
+ }
94
+
95
+ .#{$element}#{$name}-icon-prev-page,
96
+ .#{$element}#{$name}-icon-next-page {
97
+ width: $icon-size;
98
+ height: $icon-size;
99
+ font-size: $icon-size;
100
+ line-height: $icon-size;
101
+ position: absolute;
102
+ top: 50%;
103
+ margin-top: -$icon-size * 0.5;
104
+ left: 50%;
105
+ margin-left: -$icon-size * 0.5;
106
+ }
107
+
108
+ .#{$element}#{$name}-icon-prev-page {
109
+ transform: rotate(180deg);
110
+ }
111
+ }
112
+
113
+ @if (cx-should-include("cx/widgets/Pagination")) {
114
+ @include cx-pagination();
115
+ }
@@ -0,0 +1,90 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-treenode(
4
+ $name: "treenode",
5
+ $icon-size: $cx-default-icon-size,
6
+ $handle-size: $cx-default-input-tool-size,
7
+ $handle-state-style-map: $cx-input-right-icon-state-style-map,
8
+ $besm: $cx-besm
9
+ ) {
10
+ $block: map.get($besm, block);
11
+ $element: map.get($besm, element);
12
+ $state: map.get($besm, state);
13
+ $mod: map.get($besm, mod);
14
+
15
+ .#{$block}#{$name} {
16
+ padding-left: $handle-size + $icon-size * 0.25;
17
+ position: relative;
18
+
19
+ &.#{$state}icon {
20
+ padding-left: $handle-size + $icon-size + $icon-size * 0.25;
21
+ }
22
+
23
+ @for $i from 1 through 20 {
24
+ &.#{$state}level-#{$i} {
25
+ margin-left: #{($i * 20)}px;
26
+ }
27
+ }
28
+ }
29
+
30
+ .#{$element}#{$name}-handle {
31
+ position: absolute;
32
+
33
+ @include cx-add-state-rules($handle-state-style-map, default);
34
+
35
+ left: 0;
36
+ top: 50%;
37
+ margin-top: -$handle-size * 0.5;
38
+ bottom: 0;
39
+ width: $handle-size + $icon-size;
40
+ height: $handle-size;
41
+
42
+ &:hover {
43
+ @include cx-add-state-rules($handle-state-style-map, hover);
44
+ }
45
+
46
+ &:active {
47
+ @include cx-add-state-rules($handle-state-style-map, active);
48
+ }
49
+ }
50
+
51
+ .#{$element}#{$name}-arrow {
52
+ display: block;
53
+ position: absolute;
54
+ left: 0;
55
+ top: 50%;
56
+ margin-top: -$icon-size * 0.5;
57
+ margin-left: ($handle-size - $icon-size) * 0.5;
58
+ height: $icon-size;
59
+ width: $icon-size;
60
+ line-height: $icon-size;
61
+ transform: rotate(-90deg);
62
+ transition: transform 0.2s;
63
+
64
+ .#{$state}expanded & {
65
+ transform: rotate(0);
66
+ }
67
+ }
68
+
69
+ .#{$element}#{$name}-icon {
70
+ display: block;
71
+ position: absolute;
72
+ left: 0;
73
+ top: 50%;
74
+ margin-top: -$icon-size * 0.5;
75
+ margin-left: ($handle-size + $icon-size) * 0.5;
76
+ height: $icon-size;
77
+ width: $icon-size;
78
+ line-height: $icon-size;
79
+ }
80
+
81
+ .#{$block}grid.#{$mod}tree {
82
+ td {
83
+ border-top: none;
84
+ }
85
+ }
86
+ }
87
+
88
+ @if (cx-should-include("cx/widgets/TreeNode")) {
89
+ @include cx-treenode();
90
+ }
@@ -0,0 +1,4 @@
1
+
2
+ @import 'Pagination';
3
+ @import 'TreeNode';
4
+ @import 'Grid';
@@ -0,0 +1,137 @@
1
+ // GRID
2
+ $cx-default-grid-font-size: $cx-default-box-font-size !default;
3
+ $cx-default-grid-border-color: $cx-default-border-color !default;
4
+ $cx-default-grid-border-radius: null !default;
5
+ $cx-default-grid-box-shadow: null !default;
6
+
7
+ // header
8
+ $cx-default-grid-header-font-size: $cx-default-box-font-size !default;
9
+ $cx-default-grid-header-font-weight: normal !default;
10
+ $cx-default-grid-header-line-height: null !default;
11
+ $cx-default-grid-header-color: $cx-default-color !default;
12
+ $cx-default-grid-header-background-color: #eee !default;
13
+ $cx-default-grid-header-border-color: $cx-default-border-color !default;
14
+ $cx-default-grid-header-box-shadow: null !default;
15
+ $cx-default-grid-header-padding: null !default;
16
+
17
+ @use "sass:color";
18
+
19
+ $cx-grid-header-state-style-map: (
20
+ default: (
21
+ font-size: $cx-default-grid-header-font-size,
22
+ font-weight: $cx-default-grid-header-font-weight,
23
+ line-height: $cx-default-grid-header-line-height,
24
+ color: $cx-default-grid-header-color,
25
+ background-color: $cx-default-grid-header-background-color,
26
+ border-color: $cx-default-grid-header-border-color,
27
+ background-clip: border-box,
28
+ padding: $cx-default-grid-header-padding,
29
+ ),
30
+ hover: (
31
+ background-color: color.adjust($cx-default-grid-header-background-color, $lightness: -2%),
32
+ ),
33
+ sorted: (
34
+ background-color: color.adjust($cx-default-grid-header-background-color, $lightness: -7%),
35
+ ),
36
+ sorted-hover: (
37
+ background-color: color.adjust($cx-default-grid-header-background-color, $lightness: -5%),
38
+ ),
39
+ ) !default;
40
+
41
+ // data
42
+ $cx-default-grid-data-font-size: null !default;
43
+ $cx-default-grid-data-font-weight: null !default;
44
+ $cx-default-grid-data-line-height: null !default;
45
+ $cx-default-grid-data-background-color: transparent !default;
46
+ $cx-default-grid-data-alternate-background-color: null !default;
47
+ $cx-default-grid-data-border-color: $cx-default-grid-border-color !default;
48
+ $cx-default-grid-data-padding: 5px !default;
49
+ $cx-default-grid-caption-gap: 15px !default;
50
+
51
+ $cx-grid-data-state-style-map: cx-deep-map-merge(
52
+ $cx-list-item,
53
+ (
54
+ default: (
55
+ font-size: $cx-default-grid-data-font-size,
56
+ line-height: $cx-default-grid-data-line-height,
57
+ font-weight: $cx-default-grid-data-font-weight,
58
+ background-color: $cx-default-grid-data-background-color,
59
+ border-color: $cx-default-grid-data-border-color,
60
+ padding: $cx-default-grid-data-padding,
61
+ ),
62
+ alternate: (
63
+ background-color: $cx-default-grid-data-alternate-background-color,
64
+ ),
65
+ )
66
+ ) !default;
67
+
68
+ $cx-grid-group-caption-level-style-map: (
69
+ level-1: (
70
+ font-weight: bold,
71
+ font-size: 115%,
72
+ ),
73
+ level-2: (
74
+ font-weight: bold,
75
+ font-size: 130%,
76
+ border-bottom: 1px solid grey,
77
+ ),
78
+ level-3: (
79
+ font-weight: bold,
80
+ font-size: 145%,
81
+ border-bottom: 1px solid grey,
82
+ ),
83
+ level-4: (
84
+ font-weight: bold,
85
+ font-size: 160%,
86
+ border-bottom: 1px solid grey,
87
+ ),
88
+ );
89
+
90
+ $cx-grid-group-footer-level-style-map: (
91
+ level-1: (
92
+ font-weight: bold,
93
+ border-top: 1px solid $cx-default-grid-border-color,
94
+ ),
95
+ level-2: (
96
+ font-weight: bold,
97
+ font-size: 110%,
98
+ border-top: 1px solid grey,
99
+ ),
100
+ level-3: (
101
+ font-weight: bold,
102
+ font-size: 120%,
103
+ border-top: 1px solid grey,
104
+ ),
105
+ level-4: (
106
+ font-weight: bold,
107
+ font-size: 130%,
108
+ border-top: 1px solid grey,
109
+ ),
110
+ );
111
+
112
+ // pagination
113
+ $cx-grid-pagination-default-border-width: $cx-default-border-width !default;
114
+ $cx-grid-pagination-default-border-color: $cx-default-border-color !default;
115
+ $cx-grid-pagination-default-border-radius: null !default;
116
+ $cx-grid-pagination-default-outer-border-radius: $cx-default-border-radius !default;
117
+ $cx-grid-pagination-default-padding: cx-top($cx-default-box-padding) 2 * cx-top($cx-default-box-padding) !default;
118
+
119
+ $cx-grid-pagination-state-style-map: cx-deep-map-merge($cx-list-item, ()) !default;
120
+
121
+ $cx-grid-cell-cursor-style: (
122
+ left: -1px,
123
+ top: -1px,
124
+ right: -1px,
125
+ bottom: -1px,
126
+ background: rgba(green, 0.1),
127
+ border: 2px solid rgba(green, 1),
128
+ );
129
+
130
+ @use "sass:map";
131
+
132
+ $cx-dependencies: map.merge(
133
+ $cx-dependencies,
134
+ (
135
+ "cx/widgets/Grid": "cx/widgets/DragClone",
136
+ )
137
+ );
@@ -0,0 +1,16 @@
1
+ @import "animations";
2
+ @import "Button";
3
+ @import "List";
4
+ @import "CxCredit";
5
+ @import "Section";
6
+ @import "Heading";
7
+ @import "FlexBox";
8
+ @import "Icon";
9
+ @import "form/index";
10
+ @import "nav/index";
11
+ @import "overlay/index";
12
+ @import "grid/index";
13
+ @import "drag-drop/index";
14
+ @import "ProgressBar";
15
+ @import "Resizer";
16
+ @import "HighlightedSearchText";
@@ -0,0 +1,20 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-link($name: "link", $besm: $cx-besm, $state-style-map: $cx-link-state-style-map) {
4
+ $block: map.get($besm, block);
5
+ $element: map.get($besm, element);
6
+ $state: map.get($besm, state);
7
+
8
+ .#{$block}#{$name} {
9
+ &:hover {
10
+ @include cx-add-state-rules($state-style-map, hover);
11
+ }
12
+ &.#{$state}active {
13
+ @include cx-add-state-rules($state-style-map, active);
14
+ }
15
+ }
16
+ }
17
+
18
+ @if (cx-should-include("cx/widgets/Link")) {
19
+ @include cx-link();
20
+ }
@@ -0,0 +1,76 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-menu($name: "menu", $state-style-map: $cx-menu-state-style-map, $besm: $cx-besm) {
4
+ $block: map.get($besm, block);
5
+ $element: map.get($besm, element);
6
+ $state: map.get($besm, state);
7
+ $mod: map.get($besm, mod);
8
+
9
+ .#{$block}#{$name} {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ padding: 0;
13
+ list-style: none;
14
+
15
+ @include cx-add-state-rules($state-style-map, default);
16
+
17
+ &.#{$state}horizontal {
18
+ white-space: nowrap;
19
+
20
+ & > .#{$element}#{$name}-item {
21
+ display: inline-block;
22
+ user-select: none;
23
+
24
+ @each $size, $value in $cx-menu-padding-options {
25
+ &.#{$state}size-#{$size} > .#{$mod}#{$name} {
26
+ margin: 0 cx-right($value) 0 cx-left($value);
27
+ }
28
+ }
29
+ }
30
+ }
31
+
32
+ @each $size, $value in $cx-menu-padding-options {
33
+ &.#{$state}vertical.#{$state}#{$size}-item-padding .#{$mod}#{$name} {
34
+ margin: $value;
35
+ display: block;
36
+ }
37
+ }
38
+
39
+ .#{$element}#{$name}-item {
40
+ & > hr {
41
+ border: none;
42
+ border-top: 1px solid $cx-default-menu-separator-color;
43
+ margin: map.get($cx-menu-padding-options, medium);
44
+ }
45
+
46
+ &.#{$state}hidden {
47
+ visibility: hidden;
48
+ position: absolute;
49
+ }
50
+ }
51
+
52
+ &.#{$state}overflow {
53
+ overflow: hidden;
54
+ display: flex;
55
+
56
+ & > .#{$element}#{$name}-item:last-child {
57
+ visibility: hidden;
58
+ position: absolute;
59
+ max-height: 100%;
60
+ }
61
+
62
+ &.#{$state}pack > .#{$element}#{$name}-item:last-child {
63
+ visibility: visible;
64
+ position: relative;
65
+ }
66
+ }
67
+ }
68
+
69
+ .#{$element}#{$name}-spacer {
70
+ flex: 1 1 0%;
71
+ }
72
+ }
73
+
74
+ @if (cx-should-include("cx/widgets/Menu")) {
75
+ @include cx-menu();
76
+ }
@@ -0,0 +1,25 @@
1
+ @use "sass:map";
2
+
3
+ // MENU
4
+ $cx-menu-state-style-map: $cx-list !default;
5
+ $cx-default-menu-separator-color: lightgray !default;
6
+
7
+ // MENU ITEM
8
+ $cx-menu-padding-options: (
9
+ xsmall: $cx-default-padding-extra-small 2 * $cx-default-padding-extra-small,
10
+ small: $cx-default-padding-small 2 * $cx-default-padding-small,
11
+ medium: $cx-default-padding-medium 2 * $cx-default-padding-medium,
12
+ large: $cx-default-padding-large 2 * $cx-default-padding-large,
13
+ xlarge: $cx-default-padding-extra-large 2 * $cx-default-padding-extra-large,
14
+ ) !default;
15
+
16
+ $cx-menu-list-item: () !default;
17
+
18
+ $cx-dependencies: map.merge(
19
+ $cx-dependencies,
20
+ (
21
+ "cx/widgets/Menu": "cx/widgets/MenuItem",
22
+ "cx/widgets/MenuItem": "cx/widgets/Dropdown",
23
+ "cx/widgets/SubMenu": "cx/widgets/MenuItem",
24
+ )
25
+ );
@@ -30,6 +30,7 @@ export interface MenuItemConfig extends HtmlElementConfig {
30
30
  padding?: string;
31
31
  hideCursor?: boolean;
32
32
  dropdown?: any;
33
+ onClick?: string | ((e: React.MouseEvent | null, instance: HtmlElementInstance<MenuItem>) => void);
33
34
  }
34
35
  export declare class MenuItemInstance extends HtmlElementInstance<MenuItem> {
35
36
  horizontal?: boolean;
@@ -0,0 +1,130 @@
1
+ @use "sass:map";
2
+
3
+ @mixin cx-menuitem(
4
+ $name: "menuitem",
5
+ $state-style-map: cx-deep-map-merge($cx-list-item, $cx-menu-list-item),
6
+ $icon-size: $cx-default-icon-size,
7
+ $besm: $cx-besm
8
+ ) {
9
+ $block: map.get($besm, block);
10
+ $element: map.get($besm, element);
11
+ $state: map.get($besm, state);
12
+ $mod: map.get($besm, mod);
13
+
14
+ .#{$block}#{$name} {
15
+ box-sizing: border-box;
16
+ cursor: pointer;
17
+ position: relative;
18
+ border-radius: $cx-default-border-radius;
19
+
20
+ &:focus {
21
+ outline: none;
22
+ }
23
+
24
+ & > a:hover {
25
+ text-decoration: none;
26
+ }
27
+
28
+ .#{$state}focusable > &.#{$state}cursor {
29
+ @include cx-add-state-rules($state-style-map, default);
30
+
31
+ &:hover {
32
+ @include cx-add-state-rules($state-style-map, hover);
33
+ }
34
+ }
35
+
36
+ .#{$state}focusable.#{$state}cursor > &.#{$state}cursor {
37
+ @include cx-add-state-rules($state-style-map, selected-cursor);
38
+ }
39
+
40
+ &.#{$state}disabled {
41
+ @include cx-add-state-rules($state-style-map, disabled);
42
+ }
43
+
44
+ & > a {
45
+ text-decoration: none;
46
+ color: inherit;
47
+
48
+ &:focus {
49
+ outline: none;
50
+ }
51
+ }
52
+
53
+ @each $size, $value in $cx-menu-padding-options {
54
+ &.#{$state}#{$size}-padding {
55
+ & > a,
56
+ & > span {
57
+ padding: $value;
58
+ line-height: $cx-default-box-line-height;
59
+ border: $cx-default-box-border-width solid transparent;
60
+ display: block;
61
+ }
62
+
63
+ &.#{$state}arrow {
64
+ padding-right: cx-calc($icon-size);
65
+ }
66
+
67
+ &.#{$state}icon {
68
+ padding-left: cx-calc($icon-size);
69
+ }
70
+
71
+ &.#{$state}empty {
72
+ padding-right: cx-calc($icon-size) * 0.5;
73
+ }
74
+
75
+ & > .#{$element}#{$name}-arrow {
76
+ right: cx-right($value) * 0.5;
77
+ }
78
+
79
+ & > .#{$element}#{$name}-button {
80
+ width: cx-calc(cx-left($value), $icon-size);
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ .#{$element}#{$name}-arrow {
87
+ position: absolute;
88
+ width: $icon-size;
89
+ height: $icon-size;
90
+ top: 50%;
91
+ margin-top: -$icon-size * 0.5;
92
+
93
+ .#{$state}vertical > & {
94
+ transform: rotate(-90deg);
95
+ }
96
+ }
97
+
98
+ .#{$element}#{$name}-button {
99
+ position: absolute;
100
+ left: 0;
101
+ top: 0;
102
+ bottom: 0;
103
+ }
104
+
105
+ .#{$element}#{$name}-baseline {
106
+ display: inline-block;
107
+ width: 1px;
108
+ margin-left: -1px;
109
+ visibility: hidden;
110
+ padding-left: 0 !important;
111
+ padding-right: 0 !important;
112
+ }
113
+
114
+ .#{$element}#{$name}-icon {
115
+ position: absolute;
116
+ width: $icon-size;
117
+ height: $icon-size;
118
+ top: 50%;
119
+ left: 50%;
120
+ margin-top: -$icon-size * 0.5;
121
+ margin-left: -$icon-size * 0.5;
122
+ text-align: center;
123
+ line-height: 1;
124
+ font-size: $icon-size;
125
+ }
126
+ }
127
+
128
+ @if (cx-should-include("cx/widgets/MenuItem")) {
129
+ @include cx-menuitem();
130
+ }