cx 25.4.1 → 25.5.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 (140) hide show
  1. package/dist/charts.js +2 -2
  2. package/dist/data.js +17 -3
  3. package/dist/manifest.js +732 -732
  4. package/dist/ui.js +94 -61
  5. package/dist/widgets.js +25 -13
  6. package/package.json +1 -1
  7. package/src/charts/Legend.d.ts +45 -45
  8. package/src/charts/LegendEntry.js +128 -128
  9. package/src/charts/LegendEntry.scss +27 -27
  10. package/src/charts/PieChart.d.ts +92 -92
  11. package/src/charts/RangeMarker.js +6 -2
  12. package/src/charts/axis/Axis.d.ts +113 -113
  13. package/src/charts/axis/Axis.js +280 -280
  14. package/src/charts/axis/CategoryAxis.d.ts +30 -30
  15. package/src/charts/axis/CategoryAxis.js +241 -241
  16. package/src/charts/axis/NumericAxis.d.ts +46 -46
  17. package/src/charts/axis/NumericAxis.js +351 -351
  18. package/src/charts/axis/Stack.js +55 -55
  19. package/src/charts/axis/TimeAxis.d.ts +31 -28
  20. package/src/charts/axis/TimeAxis.js +611 -611
  21. package/src/charts/helpers/PointReducer.js +47 -47
  22. package/src/charts/helpers/SnapPointFinder.js +69 -69
  23. package/src/data/AugmentedViewBase.js +77 -75
  24. package/src/data/Binding.spec.js +69 -69
  25. package/src/data/ExposedRecordView.js +75 -70
  26. package/src/data/ExposedValueView.js +73 -72
  27. package/src/data/Expression.js +229 -229
  28. package/src/data/Expression.spec.js +229 -229
  29. package/src/data/Ref.d.ts +24 -24
  30. package/src/data/Ref.spec.js +79 -79
  31. package/src/data/StoreRef.spec.js +24 -24
  32. package/src/data/StringTemplate.js +92 -92
  33. package/src/data/StringTemplate.spec.js +132 -132
  34. package/src/data/StructuredDataAccessor.d.ts +7 -7
  35. package/src/data/StructuredSelector.js +132 -132
  36. package/src/data/SubscribableView.js +54 -54
  37. package/src/data/getAccessor.spec.js +11 -11
  38. package/src/data/getSelector.js +49 -49
  39. package/src/hooks/createLocalStorageRef.d.ts +3 -3
  40. package/src/hooks/createLocalStorageRef.js +20 -20
  41. package/src/index.scss +6 -6
  42. package/src/ui/Container.js +154 -183
  43. package/src/ui/Culture.d.ts +57 -57
  44. package/src/ui/Culture.js +139 -139
  45. package/src/ui/Cx.js +3 -3
  46. package/src/ui/DataProxy.js +45 -44
  47. package/src/ui/DetachedScope.js +98 -94
  48. package/src/ui/FocusManager.js +171 -171
  49. package/src/ui/Format.js +108 -108
  50. package/src/ui/HoverSync.js +147 -147
  51. package/src/ui/Instance.d.ts +1 -1
  52. package/src/ui/Instance.js +25 -16
  53. package/src/ui/IsolatedScope.js +30 -30
  54. package/src/ui/Repeater.d.ts +61 -61
  55. package/src/ui/Repeater.js +109 -102
  56. package/src/ui/Rescope.js +35 -31
  57. package/src/ui/Restate.js +167 -163
  58. package/src/ui/Widget.js +184 -200
  59. package/src/ui/adapter/ArrayAdapter.js +152 -142
  60. package/src/ui/adapter/TreeAdapter.js +101 -100
  61. package/src/ui/createFunctionalComponent.d.ts +1 -1
  62. package/src/ui/createFunctionalComponent.js +31 -36
  63. package/src/ui/layout/ContentPlaceholder.d.ts +19 -19
  64. package/src/ui/layout/ContentPlaceholder.js +105 -105
  65. package/src/ui/layout/ContentPlaceholder.spec.js +579 -579
  66. package/src/ui/layout/LabelsTopLayout.js +134 -134
  67. package/src/ui/layout/exploreChildren.d.ts +12 -15
  68. package/src/ui/layout/exploreChildren.js +27 -40
  69. package/src/util/Format.js +270 -270
  70. package/src/util/date/encodeDate.d.ts +1 -1
  71. package/src/util/date/encodeDate.js +8 -8
  72. package/src/util/date/encodeDateWithTimezoneOffset.d.ts +1 -1
  73. package/src/util/date/index.d.ts +11 -11
  74. package/src/util/date/index.js +11 -11
  75. package/src/util/date/parseDateInvariant.d.ts +3 -3
  76. package/src/util/date/parseDateInvariant.js +20 -20
  77. package/src/util/debounce.js +18 -18
  78. package/src/util/getSearchQueryPredicate.js +59 -59
  79. package/src/util/index.d.ts +51 -51
  80. package/src/util/index.js +54 -54
  81. package/src/util/isValidIdentifierName.d.ts +1 -1
  82. package/src/util/isValidIdentifierName.js +5 -5
  83. package/src/util/isValidIdentifierName.spec.js +33 -33
  84. package/src/util/scss/add-rules.scss +38 -38
  85. package/src/util/validatedDebounce.js +19 -19
  86. package/src/widgets/Button.js +118 -118
  87. package/src/widgets/CxCredit.scss +37 -37
  88. package/src/widgets/HighlightedSearchText.js +36 -36
  89. package/src/widgets/HighlightedSearchText.scss +18 -18
  90. package/src/widgets/List.js +594 -587
  91. package/src/widgets/List.scss +91 -91
  92. package/src/widgets/Sandbox.js +9 -8
  93. package/src/widgets/drag-drop/DropZone.js +214 -214
  94. package/src/widgets/form/Calendar.d.ts +86 -86
  95. package/src/widgets/form/Calendar.js +618 -618
  96. package/src/widgets/form/Calendar.scss +196 -196
  97. package/src/widgets/form/Checkbox.scss +127 -127
  98. package/src/widgets/form/ColorField.js +397 -397
  99. package/src/widgets/form/ColorField.scss +96 -96
  100. package/src/widgets/form/ColorPicker.scss +283 -283
  101. package/src/widgets/form/DateTimeField.js +576 -576
  102. package/src/widgets/form/DateTimePicker.js +392 -392
  103. package/src/widgets/form/LookupField.d.ts +179 -179
  104. package/src/widgets/form/LookupField.scss +219 -219
  105. package/src/widgets/form/MonthField.d.ts +99 -99
  106. package/src/widgets/form/MonthField.js +523 -523
  107. package/src/widgets/form/MonthPicker.d.ts +76 -76
  108. package/src/widgets/form/MonthPicker.js +641 -641
  109. package/src/widgets/form/MonthPicker.scss +118 -118
  110. package/src/widgets/form/NumberField.js +459 -459
  111. package/src/widgets/form/NumberField.scss +61 -61
  112. package/src/widgets/form/Radio.scss +121 -121
  113. package/src/widgets/form/Select.scss +99 -99
  114. package/src/widgets/form/Slider.scss +118 -118
  115. package/src/widgets/form/Switch.scss +140 -140
  116. package/src/widgets/form/TextArea.scss +43 -43
  117. package/src/widgets/form/TextField.js +290 -290
  118. package/src/widgets/form/TextField.scss +55 -55
  119. package/src/widgets/form/UploadButton.d.ts +34 -34
  120. package/src/widgets/form/variables.scss +353 -353
  121. package/src/widgets/grid/Grid.d.ts +442 -442
  122. package/src/widgets/grid/Grid.js +7 -0
  123. package/src/widgets/grid/GridRow.js +228 -228
  124. package/src/widgets/grid/TreeNode.d.ts +23 -23
  125. package/src/widgets/grid/TreeNode.scss +88 -88
  126. package/src/widgets/grid/variables.scss +133 -133
  127. package/src/widgets/nav/LinkButton.js +128 -128
  128. package/src/widgets/nav/Menu.scss +74 -74
  129. package/src/widgets/nav/Route.js +102 -106
  130. package/src/widgets/overlay/Dropdown.js +612 -612
  131. package/src/widgets/overlay/FlyweightTooltipTracker.js +39 -39
  132. package/src/widgets/overlay/Overlay.d.ts +73 -73
  133. package/src/widgets/overlay/Tooltip.js +1 -1
  134. package/src/widgets/overlay/Window.js +202 -202
  135. package/src/widgets/overlay/captureMouse.js +124 -124
  136. package/src/widgets/overlay/createHotPromiseWindowFactory.d.ts +18 -18
  137. package/src/widgets/overlay/createHotPromiseWindowFactory.js +56 -56
  138. package/src/widgets/overlay/index.d.ts +11 -11
  139. package/src/widgets/overlay/index.js +11 -11
  140. package/src/widgets/variables.scss +144 -144
@@ -1,61 +1,61 @@
1
- @mixin cx-numberfield(
2
- $name: "numberfield",
3
- $state-style-map: $cx-std-field-state-style-map,
4
- $placeholder: $cx-input-placeholder,
5
- $empty-text: $cx-empty-text,
6
- $left-icon-state-style-map: $cx-input-left-icon-state-style-map,
7
- $clear-state-style-map: $cx-clear-state-style-map,
8
- $tool-state-style-map: $cx-input-right-icon-state-style-map,
9
- $icon-size: $cx-default-input-icon-size,
10
- $width: $cx-default-input-width,
11
- $besm: $cx-besm
12
- ) {
13
- $block: map-get($besm, block);
14
- $element: map-get($besm, element);
15
- $state: map-get($besm, state);
16
- $padding: cx-get-state-rule($state-style-map, default, "padding");
17
-
18
- .#{$block}#{$name} {
19
- @include cxb-field($besm, $state-style-map, $width: $width, $input: true);
20
- }
21
-
22
- .#{$element}#{$name}-input {
23
- @include cxe-field-input($besm, $state-style-map, $placeholder: $placeholder);
24
-
25
- &::-webkit-inner-spin-button,
26
- &::-webkit-outer-spin-button {
27
- -webkit-appearance: none;
28
- margin: 0;
29
- }
30
-
31
- .#{$state}icon > & {
32
- padding-left: cx-calc(2 * cx-left($padding), $icon-size);
33
- }
34
- }
35
-
36
- .#{$element}#{$name}-tool {
37
- pointer-events: none;
38
- @include cxe-field-button($besm, $tool-state-style-map);
39
- }
40
-
41
- .#{$element}#{$name}-icon {
42
- @include cxe-field-button-icon($besm, $icon-size);
43
- }
44
-
45
- .#{$element}#{$name}-left-icon {
46
- pointer-events: none;
47
- @include cxe-field-button($besm, $left-icon-state-style-map);
48
- }
49
-
50
- .#{$element}#{$name}-clear {
51
- @include cxe-field-button($besm, $clear-state-style-map);
52
- }
53
-
54
- .#{$element}#{$name}-empty-text {
55
- @include cxe-field-empty-text($empty-text);
56
- }
57
- }
58
-
59
- @if (cx-should-include("cx/widgets/NumberField")) {
60
- @include cx-numberfield();
61
- }
1
+ @mixin cx-numberfield(
2
+ $name: "numberfield",
3
+ $state-style-map: $cx-std-field-state-style-map,
4
+ $placeholder: $cx-input-placeholder,
5
+ $empty-text: $cx-empty-text,
6
+ $left-icon-state-style-map: $cx-input-left-icon-state-style-map,
7
+ $clear-state-style-map: $cx-clear-state-style-map,
8
+ $tool-state-style-map: $cx-input-right-icon-state-style-map,
9
+ $icon-size: $cx-default-input-icon-size,
10
+ $width: $cx-default-input-width,
11
+ $besm: $cx-besm
12
+ ) {
13
+ $block: map-get($besm, block);
14
+ $element: map-get($besm, element);
15
+ $state: map-get($besm, state);
16
+ $padding: cx-get-state-rule($state-style-map, default, "padding");
17
+
18
+ .#{$block}#{$name} {
19
+ @include cxb-field($besm, $state-style-map, $width: $width, $input: true);
20
+ }
21
+
22
+ .#{$element}#{$name}-input {
23
+ @include cxe-field-input($besm, $state-style-map, $placeholder: $placeholder);
24
+
25
+ &::-webkit-inner-spin-button,
26
+ &::-webkit-outer-spin-button {
27
+ -webkit-appearance: none;
28
+ margin: 0;
29
+ }
30
+
31
+ .#{$state}icon > & {
32
+ padding-left: cx-calc(2 * cx-left($padding), $icon-size);
33
+ }
34
+ }
35
+
36
+ .#{$element}#{$name}-tool {
37
+ pointer-events: none;
38
+ @include cxe-field-button($besm, $tool-state-style-map);
39
+ }
40
+
41
+ .#{$element}#{$name}-icon {
42
+ @include cxe-field-button-icon($besm, $icon-size);
43
+ }
44
+
45
+ .#{$element}#{$name}-left-icon {
46
+ pointer-events: none;
47
+ @include cxe-field-button($besm, $left-icon-state-style-map);
48
+ }
49
+
50
+ .#{$element}#{$name}-clear {
51
+ @include cxe-field-button($besm, $clear-state-style-map);
52
+ }
53
+
54
+ .#{$element}#{$name}-empty-text {
55
+ @include cxe-field-empty-text($empty-text);
56
+ }
57
+ }
58
+
59
+ @if (cx-should-include("cx/widgets/NumberField")) {
60
+ @include cx-numberfield();
61
+ }
@@ -1,121 +1,121 @@
1
- @mixin cx-radio(
2
- $name: "radio",
3
- $state-style-map: $cx-radio-state-style-map,
4
- $size: $cx-default-radio-size,
5
- $besm: $cx-besm
6
- ) {
7
- $block: map-get($besm, block);
8
- $element: map-get($besm, element);
9
- $state: map-get($besm, state);
10
-
11
- $padding: cx-get-state-rule($state-style-map, default, padding);
12
- $border-width: cx-get-state-rule($state-style-map, default, border-width);
13
-
14
- $outer-styles: cx-deep-map-merge(
15
- $state-style-map,
16
- (
17
- default: (
18
- border-width: cx-top($border-width) 0 cx-bottom($border-width) 0,
19
- ),
20
- )
21
- );
22
-
23
- .#{$block}#{$name} {
24
- min-width: $size;
25
- @include cxb-field($besm, $outer-styles, $input: false, $box: true);
26
- }
27
-
28
- .#{$element}#{$name}-radio {
29
- padding: 0;
30
- margin: 0 !important;
31
- width: $size;
32
- height: $size;
33
- top: calc(50% - #{$size * 0.5});
34
- left: 0;
35
- display: inline-block;
36
- position: absolute;
37
- -webkit-backface-visibility: hidden;
38
- outline: none;
39
-
40
- &::-moz-focus-outer {
41
- border: 0;
42
- }
43
-
44
- &:focus {
45
- box-shadow: 0 0 2px 2px rgba(77, 144, 254, 0.8);
46
- background: transparent;
47
- border-radius: 50%;
48
- outline: none;
49
- }
50
- }
51
-
52
- .#{$element}#{$name}-text {
53
- display: inline-block;
54
- margin-left: $size;
55
- user-select: none;
56
-
57
- .#{$state}disabled > & {
58
- opacity: 0.5;
59
- }
60
- }
61
-
62
- //non-native implementation
63
- .#{$element}#{$name}-input {
64
- width: $size;
65
- height: $size;
66
- top: calc(50% - #{$size * 0.5});
67
- left: 0;
68
- display: inline-block;
69
- position: absolute;
70
- //overflow: hidden;
71
- opacity: 1;
72
-
73
- @include cxe-field-input(
74
- $besm,
75
- $state-style-map,
76
- $input: false,
77
- $overrides: (
78
- default: (
79
- border-radius: 50%,
80
- padding: 0,
81
- margin: 0 !important,
82
- )
83
- )
84
- );
85
-
86
- &.#{$state}checked {
87
- @include cx-add-state-rules($state-style-map, checked);
88
-
89
- &:focus {
90
- @include cx-add-state-rules($state-style-map, checked-focus);
91
- }
92
- &:hover {
93
- @include cx-add-state-rules($state-style-map, checked-hover);
94
- }
95
-
96
- .#{$state}disabled > & {
97
- @include cx-add-state-rules($state-style-map, disabled-checked);
98
- }
99
- }
100
-
101
- &:before {
102
- content: " ";
103
- width: calc(100% - 6px);
104
- height: calc(100% - 6px);
105
- visibility: hidden;
106
- position: absolute;
107
- margin: 3px;
108
- box-sizing: border-box;
109
- background-color: currentColor;
110
- border-radius: 50%;
111
- }
112
-
113
- &.#{$state}checked:before {
114
- visibility: visible;
115
- }
116
- }
117
- }
118
-
119
- @if (cx-should-include("cx/widgets/Radio")) {
120
- @include cx-radio();
121
- }
1
+ @mixin cx-radio(
2
+ $name: "radio",
3
+ $state-style-map: $cx-radio-state-style-map,
4
+ $size: $cx-default-radio-size,
5
+ $besm: $cx-besm
6
+ ) {
7
+ $block: map-get($besm, block);
8
+ $element: map-get($besm, element);
9
+ $state: map-get($besm, state);
10
+
11
+ $padding: cx-get-state-rule($state-style-map, default, padding);
12
+ $border-width: cx-get-state-rule($state-style-map, default, border-width);
13
+
14
+ $outer-styles: cx-deep-map-merge(
15
+ $state-style-map,
16
+ (
17
+ default: (
18
+ border-width: cx-top($border-width) 0 cx-bottom($border-width) 0,
19
+ ),
20
+ )
21
+ );
22
+
23
+ .#{$block}#{$name} {
24
+ min-width: $size;
25
+ @include cxb-field($besm, $outer-styles, $input: false, $box: true);
26
+ }
27
+
28
+ .#{$element}#{$name}-radio {
29
+ padding: 0;
30
+ margin: 0 !important;
31
+ width: $size;
32
+ height: $size;
33
+ top: calc(50% - #{$size * 0.5});
34
+ left: 0;
35
+ display: inline-block;
36
+ position: absolute;
37
+ -webkit-backface-visibility: hidden;
38
+ outline: none;
39
+
40
+ &::-moz-focus-outer {
41
+ border: 0;
42
+ }
43
+
44
+ &:focus {
45
+ box-shadow: 0 0 2px 2px rgba(77, 144, 254, 0.8);
46
+ background: transparent;
47
+ border-radius: 50%;
48
+ outline: none;
49
+ }
50
+ }
51
+
52
+ .#{$element}#{$name}-text {
53
+ display: inline-block;
54
+ margin-left: $size;
55
+ user-select: none;
56
+
57
+ .#{$state}disabled > & {
58
+ opacity: 0.5;
59
+ }
60
+ }
61
+
62
+ //non-native implementation
63
+ .#{$element}#{$name}-input {
64
+ width: $size;
65
+ height: $size;
66
+ top: calc(50% - #{$size * 0.5});
67
+ left: 0;
68
+ display: inline-block;
69
+ position: absolute;
70
+ //overflow: hidden;
71
+ opacity: 1;
72
+
73
+ @include cxe-field-input(
74
+ $besm,
75
+ $state-style-map,
76
+ $input: false,
77
+ $overrides: (
78
+ default: (
79
+ border-radius: 50%,
80
+ padding: 0,
81
+ margin: 0 !important,
82
+ )
83
+ )
84
+ );
85
+
86
+ &.#{$state}checked {
87
+ @include cx-add-state-rules($state-style-map, checked);
88
+
89
+ &:focus {
90
+ @include cx-add-state-rules($state-style-map, checked-focus);
91
+ }
92
+ &:hover {
93
+ @include cx-add-state-rules($state-style-map, checked-hover);
94
+ }
95
+
96
+ .#{$state}disabled > & {
97
+ @include cx-add-state-rules($state-style-map, disabled-checked);
98
+ }
99
+ }
100
+
101
+ &:before {
102
+ content: " ";
103
+ width: calc(100% - 6px);
104
+ height: calc(100% - 6px);
105
+ visibility: hidden;
106
+ position: absolute;
107
+ margin: 3px;
108
+ box-sizing: border-box;
109
+ background-color: currentColor;
110
+ border-radius: 50%;
111
+ }
112
+
113
+ &.#{$state}checked:before {
114
+ visibility: visible;
115
+ }
116
+ }
117
+ }
118
+
119
+ @if (cx-should-include("cx/widgets/Radio")) {
120
+ @include cx-radio();
121
+ }
@@ -1,99 +1,99 @@
1
- @import "../overlay/Dropdown";
2
-
3
- @mixin cx-select(
4
- $name: "select",
5
- $state-style-map: $cx-std-field-state-style-map,
6
- $placeholder: $cx-input-placeholder,
7
- $empty-text: $cx-empty-text,
8
- $width: $cx-default-input-width,
9
- $left-icon-state-style-map: $cx-input-left-icon-state-style-map,
10
- $clear-state-style-map: $cx-clear-state-style-map,
11
- $tool-state-style-map: $cx-input-right-icon-state-style-map,
12
- $icon-size: $cx-default-input-icon-size,
13
- $besm: $cx-besm
14
- ) {
15
- $block: map-get($besm, block);
16
- $element: map-get($besm, element);
17
- $state: map-get($besm, state);
18
- $mod: map-get($besm, mod);
19
-
20
- .#{$block}#{$name} {
21
- @include cxb-field($besm, $state-style-map: $state-style-map, $width: $width, $input: true);
22
-
23
- .#{$element}#{$name}-left-icon {
24
- pointer-events: none;
25
- @include cxe-field-button($besm, $left-icon-state-style-map);
26
- }
27
- }
28
-
29
- $padding: cx-get-state-rule($state-style-map, default, "padding");
30
-
31
- .#{$element}#{$name}-select {
32
- @include cxe-field-input(
33
- $besm,
34
- $state-style-map,
35
- $placeholder: $placeholder,
36
- $overrides: (
37
- padding: cx-top($cx-default-input-padding)
38
- calc(
39
- #{cx-right($cx-default-input-padding)} + #{$cx-default-clear-size} - #{cx-right(
40
- $cx-default-input-padding
41
- )}
42
- )
43
- cx-bottom($cx-default-input-padding) cx-left($cx-default-input-padding),
44
- -webkit-appearance: none,
45
- -moz-appearance: none,
46
- -ms-appearance: none,
47
- appearance: none
48
- )
49
- );
50
-
51
- .#{$state}icon > & {
52
- padding-left: cx-calc(2 * cx-left($padding), $icon-size);
53
- }
54
-
55
- .#{$state}empty > & {
56
- @include cx-add-rules($placeholder);
57
- }
58
-
59
- &::-ms-expand {
60
- display: none;
61
- margin: 0;
62
- padding: 0;
63
- }
64
-
65
- option {
66
- background-color: $cx-default-dropdown-background-color;
67
- color: cx-get-state-rule($state-style-map, default, color);
68
- }
69
- }
70
-
71
- .#{$element}#{$name}-clear {
72
- @include cxe-field-button($besm, $clear-state-style-map);
73
- }
74
-
75
- .#{$element}#{$name}-placeholder {
76
- @include cx-add-rules($placeholder);
77
- }
78
-
79
- .#{$element}#{$name}-tool {
80
- pointer-events: none; //cannot call open-dropdown on native element
81
- @include cxe-field-button($besm, $tool-state-style-map);
82
-
83
- .#{$state}disabled > & {
84
- border-width: 0;
85
- @include cx-add-state-rules($state-style-map, disabled);
86
- }
87
- .#{$state}focus > & {
88
- @include cx-add-state-rules($tool-state-style-map, focus);
89
- }
90
- }
91
-
92
- .#{$element}#{$name}-icon {
93
- @include cxe-field-button-icon($besm, $icon-size);
94
- }
95
- }
96
-
97
- @if (cx-should-include("cx/widgets/Select")) {
98
- @include cx-select;
99
- }
1
+ @import "../overlay/Dropdown";
2
+
3
+ @mixin cx-select(
4
+ $name: "select",
5
+ $state-style-map: $cx-std-field-state-style-map,
6
+ $placeholder: $cx-input-placeholder,
7
+ $empty-text: $cx-empty-text,
8
+ $width: $cx-default-input-width,
9
+ $left-icon-state-style-map: $cx-input-left-icon-state-style-map,
10
+ $clear-state-style-map: $cx-clear-state-style-map,
11
+ $tool-state-style-map: $cx-input-right-icon-state-style-map,
12
+ $icon-size: $cx-default-input-icon-size,
13
+ $besm: $cx-besm
14
+ ) {
15
+ $block: map-get($besm, block);
16
+ $element: map-get($besm, element);
17
+ $state: map-get($besm, state);
18
+ $mod: map-get($besm, mod);
19
+
20
+ .#{$block}#{$name} {
21
+ @include cxb-field($besm, $state-style-map: $state-style-map, $width: $width, $input: true);
22
+
23
+ .#{$element}#{$name}-left-icon {
24
+ pointer-events: none;
25
+ @include cxe-field-button($besm, $left-icon-state-style-map);
26
+ }
27
+ }
28
+
29
+ $padding: cx-get-state-rule($state-style-map, default, "padding");
30
+
31
+ .#{$element}#{$name}-select {
32
+ @include cxe-field-input(
33
+ $besm,
34
+ $state-style-map,
35
+ $placeholder: $placeholder,
36
+ $overrides: (
37
+ padding: cx-top($cx-default-input-padding)
38
+ calc(
39
+ #{cx-right($cx-default-input-padding)} + #{$cx-default-clear-size} - #{cx-right(
40
+ $cx-default-input-padding
41
+ )}
42
+ )
43
+ cx-bottom($cx-default-input-padding) cx-left($cx-default-input-padding),
44
+ -webkit-appearance: none,
45
+ -moz-appearance: none,
46
+ -ms-appearance: none,
47
+ appearance: none
48
+ )
49
+ );
50
+
51
+ .#{$state}icon > & {
52
+ padding-left: cx-calc(2 * cx-left($padding), $icon-size);
53
+ }
54
+
55
+ .#{$state}empty > & {
56
+ @include cx-add-rules($placeholder);
57
+ }
58
+
59
+ &::-ms-expand {
60
+ display: none;
61
+ margin: 0;
62
+ padding: 0;
63
+ }
64
+
65
+ option {
66
+ background-color: $cx-default-dropdown-background-color;
67
+ color: cx-get-state-rule($state-style-map, default, color);
68
+ }
69
+ }
70
+
71
+ .#{$element}#{$name}-clear {
72
+ @include cxe-field-button($besm, $clear-state-style-map);
73
+ }
74
+
75
+ .#{$element}#{$name}-placeholder {
76
+ @include cx-add-rules($placeholder);
77
+ }
78
+
79
+ .#{$element}#{$name}-tool {
80
+ pointer-events: none; //cannot call open-dropdown on native element
81
+ @include cxe-field-button($besm, $tool-state-style-map);
82
+
83
+ .#{$state}disabled > & {
84
+ border-width: 0;
85
+ @include cx-add-state-rules($state-style-map, disabled);
86
+ }
87
+ .#{$state}focus > & {
88
+ @include cx-add-state-rules($tool-state-style-map, focus);
89
+ }
90
+ }
91
+
92
+ .#{$element}#{$name}-icon {
93
+ @include cxe-field-button-icon($besm, $icon-size);
94
+ }
95
+ }
96
+
97
+ @if (cx-should-include("cx/widgets/Select")) {
98
+ @include cx-select;
99
+ }