cx 26.3.7 → 26.3.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.
package/dist/widgets.css CHANGED
@@ -1383,6 +1383,10 @@ th.cxe-calendar-display {
1383
1383
  padding-right: 5px;
1384
1384
  }
1385
1385
 
1386
+ .cxb-lookupfield .cxs-icon > .cxe-lookupfield-input > .cxe-lookupfield-tags {
1387
+ margin-left: 0;
1388
+ }
1389
+
1386
1390
  .cxe-lookupfield-input {
1387
1391
  box-sizing: border-box;
1388
1392
  line-height: 16px;
@@ -3291,6 +3295,8 @@ th.cxe-calendar-display {
3291
3295
  .cxe-wheel-clip {
3292
3296
  position: relative;
3293
3297
  overflow: hidden;
3298
+ width: fit-content;
3299
+ box-sizing: content-box;
3294
3300
  background: inherit;
3295
3301
  user-select: none;
3296
3302
  background-color: #fff;
@@ -3310,11 +3316,11 @@ th.cxe-calendar-display {
3310
3316
  }
3311
3317
 
3312
3318
  .cxe-wheel-vscroll {
3313
- width: calc(100% + 20px);
3314
3319
  display: flex;
3315
3320
  overflow-y: auto;
3316
3321
  overflow-x: hidden;
3317
3322
  touch-action: pan-y;
3323
+ scrollbar-width: none;
3318
3324
  }
3319
3325
 
3320
3326
  .cxe-wheel-vscroll::-webkit-scrollbar {
@@ -3412,6 +3418,8 @@ th.cxe-calendar-display {
3412
3418
  .cxe-datetimepicker-wheel-clip {
3413
3419
  position: relative;
3414
3420
  overflow: hidden;
3421
+ width: fit-content;
3422
+ box-sizing: content-box;
3415
3423
  background: inherit;
3416
3424
  user-select: none;
3417
3425
  background-color: #fff;
@@ -3431,11 +3439,11 @@ th.cxe-calendar-display {
3431
3439
  }
3432
3440
 
3433
3441
  .cxe-datetimepicker-wheel-vscroll {
3434
- width: calc(100% + 20px);
3435
3442
  display: flex;
3436
3443
  overflow-y: auto;
3437
3444
  overflow-x: hidden;
3438
3445
  touch-action: pan-y;
3446
+ scrollbar-width: none;
3439
3447
  }
3440
3448
 
3441
3449
  .cxe-datetimepicker-wheel-vscroll::-webkit-scrollbar {
package/dist/widgets.js CHANGED
@@ -13089,9 +13089,6 @@ class WheelComponent extends VDOM.Component {
13089
13089
  children: [
13090
13090
  jsxs("div", {
13091
13091
  className: CSS.element(baseClass, "clip"),
13092
- style: {
13093
- width: this.state.wheelWidth,
13094
- },
13095
13092
  onMouseDown: onMouseDown,
13096
13093
  children: [
13097
13094
  jsx("div", {
@@ -13170,7 +13167,6 @@ class WheelComponent extends VDOM.Component {
13170
13167
  this.setState(
13171
13168
  {
13172
13169
  wheelHeight: this.wheelEl.offsetHeight,
13173
- wheelWidth: this.wheelEl.offsetWidth,
13174
13170
  },
13175
13171
  () => {
13176
13172
  if (this.state.wheelHeight !== undefined) {
@@ -15813,6 +15809,7 @@ class GridComponent extends VDOM.Component {
15813
15809
  this.end = end;
15814
15810
  this.loadingStartPage = 0;
15815
15811
  this.loadingEndPage = 0;
15812
+ this.lastSorters = props.data.sorters;
15816
15813
  }
15817
15814
  this.scrollerRef = (el) => {
15818
15815
  this.dom.scroller = el;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cx",
3
- "version": "26.3.7",
3
+ "version": "26.3.9",
4
4
  "description": "Advanced JavaScript UI framework for admin and dashboard applications with ready to use grid, form and chart components.",
5
5
  "exports": {
6
6
  "./data": {
@@ -1,228 +1,227 @@
1
- @use "sass:math";
2
- @use "sass:map";
3
- @use "../variables" as *;
4
- @use "../maps" as *;
5
- @use "../../util/scss/add-rules.scss" as *;
6
- @use "../../util/scss/clockwise.scss" as *;
7
- @use "../../util/scss/besm.scss" as *;
8
- @use "../../util/scss/calc.scss" as *;
9
- @use "../../util/scss/include.scss" as *;
10
- @use "./Field.scss" as *;
11
-
12
- @mixin cx-lookupfield(
13
- $name: "lookupfield",
14
- $state-style-map: $cx-std-field-state-style-map,
15
- $placeholder: $cx-input-placeholder,
16
- $empty-text: $cx-empty-text,
17
- $left-icon-state-style-map: $cx-input-left-icon-state-style-map,
18
- $clear-state-style-map: $cx-clear-state-style-map,
19
- $tool-state-style-map: $cx-input-right-icon-state-style-map,
20
- $icon-size: $cx-default-input-icon-size,
21
- $width: $cx-default-input-width,
22
- $tag-state-style-map: $cx-input-tag-state-style-map,
23
- $tag-clear-state-style-map: $cx-input-tag-clear-state-style-map,
24
- $besm: $cx-besm
25
- ) {
26
- $block: map.get($besm, block);
27
- $element: map.get($besm, element);
28
- $state: map.get($besm, state);
29
-
30
- $padding: cx-get-state-rule($state-style-map, default, padding);
31
- $border-radius-offset: cx-multiply(cx-get-state-rule($tag-state-style-map, default, border-radius), 0.25);
32
-
33
- .#{$block}#{$name} {
34
- cursor: pointer;
35
- width: $width;
36
- font: cx-get-state-rule($state-style-map, default, "font");
37
- font-size: cx-get-state-rule($state-style-map, default, "font-size");
38
-
39
- @include cxb-field($besm, $state-style-map, $input: false);
40
-
41
- &.#{$state}multiple {
42
- min-width: $cx-default-input-width;
43
- width: auto;
44
- }
45
-
46
- &.#{$state}readonly {
47
- pointer-events: none;
48
-
49
- & > .#{$element}#{$name}-input {
50
- padding-right: cx-right($padding);
51
- }
52
- }
53
-
54
- // &::before {
55
- // content: "\200B";
56
- // pointer-events: none;
57
- // }
58
- }
59
-
60
- .#{$element}#{$name}-input {
61
- @include cxe-field-input(
62
- $besm,
63
- $state-style-map,
64
- $placeholder: $placeholder,
65
- $input: false,
66
- $overrides: (
67
- default: (
68
- width: 100%,
69
- display: inline-flex,
70
- text-overflow: null,
71
- padding: cx-top($padding)
72
- cx-calc(cx-right($padding), $cx-default-clear-size, $cx-default-input-tag-spacing) cx-bottom($padding)
73
- cx-left($padding),
74
- )
75
- )
76
- );
77
-
78
- .#{$state}single > & {
79
- overflow: hidden;
80
- text-overflow: ellipsis;
81
- white-space: nowrap;
82
- flex-basis: 0%;
83
- flex-grow: 1;
84
- }
85
-
86
- .#{$state}icon > & {
87
- padding-left: cx-calc(cx-top($padding), $cx-default-input-left-tool-size, $cx-default-input-left-tool-spacing);
88
- }
89
- }
90
-
91
- .#{$element}#{$name}-tags {
92
- display: flex;
93
- margin: cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-top($padding), -1))
94
- cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-right($padding), -1))
95
- cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-bottom($padding), -1))
96
- cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-left($padding), -1));
97
- align-items: center;
98
- flex-wrap: wrap;
99
- gap: $cx-default-input-tag-spacing;
100
- }
101
-
102
- .#{$element}#{$name}-tag {
103
- display: inline-block;
104
- position: relative;
105
- box-sizing: border-box;
106
-
107
- @include cx-add-state-rules($tag-state-style-map, default);
108
-
109
- &:hover {
110
- @include cx-add-state-rules($tag-state-style-map, hover);
111
- }
112
-
113
- &.#{$state}readonly {
114
- padding-right: cx-right($padding);
115
- pointer-events: none;
116
- }
117
- }
118
-
119
- .#{$element}#{$name}-placeholder {
120
- color: $cx-default-input-placeholder-color;
121
- }
122
-
123
- .#{$element}#{$name}-tag-value {
124
- padding: 0 cx-calc($cx-default-input-tag-spacing, $border-radius-offset);
125
- display: inline-block;
126
- }
127
-
128
- .#{$element}#{$name}-tag-clear {
129
- @include cxe-field-button($besm, $tag-clear-state-style-map);
130
- }
131
-
132
- .#{$element}#{$name}-lookup-options {
133
- padding: 0;
134
- margin: 0;
135
- min-width: 100%;
136
- width: 100%;
137
- }
138
-
139
- .#{$element}#{$name}-query {
140
- @include cxe-field-input(
141
- $besm,
142
- $state-style-map,
143
- $placeholder: $placeholder,
144
- $width: calc(100% - 10px),
145
- $overrides: (
146
- default: (
147
- margin: 5px,
148
- flex: 0 0 auto,
149
- height: auto,
150
- )
151
- )
152
- );
153
- //put query field down when placed up
154
- .#{$state}place-up-right &,
155
- .#{$state}place-up &,
156
- .#{$state}place-up-left & {
157
- order: 1;
158
- }
159
- }
160
-
161
- .#{$element}#{$name}-dropdown {
162
- display: flex;
163
- flex-direction: column;
164
- height: 100%;
165
-
166
- &:focus {
167
- outline: none;
168
- }
169
- }
170
-
171
- .#{$element}#{$name}-message {
172
- font-size: smaller;
173
- padding: 10px;
174
- color: gray;
175
- font-style: italic;
176
-
177
- &.#{$state}error {
178
- color: #9e2f2d;
179
- }
180
- }
181
-
182
- .#{$element}#{$name}-scroll-container {
183
- overflow: auto;
184
- flex: 1 1 auto;
185
- }
186
-
187
- .#{$element}#{$name}-clear {
188
- @include cxe-field-button($besm, $clear-state-style-map);
189
-
190
- .#{$state}focus > & {
191
- @include cx-add-state-rules($clear-state-style-map, focus);
192
- }
193
- .#{$state}error > & {
194
- @include cx-add-state-rules($clear-state-style-map, error);
195
- }
196
- }
197
-
198
- .#{$element}#{$name}-tool {
199
- @include cxe-field-button($besm, $tool-state-style-map);
200
-
201
- .#{$state}disabled > & {
202
- border-width: 0;
203
- @include cx-add-state-rules($state-style-map, disabled);
204
- }
205
- .#{$state}focus > & {
206
- @include cx-add-state-rules($tool-state-style-map, focus);
207
- }
208
- .#{$state}error > & {
209
- @include cx-add-state-rules($tool-state-style-map, error);
210
- }
211
- }
212
-
213
- .#{$element}#{$name}-left-icon {
214
- @include cxe-field-button($besm, $left-icon-state-style-map);
215
- }
216
-
217
- .#{$element}#{$name}-icon {
218
- @include cxe-field-button-icon($besm, $icon-size);
219
- }
220
-
221
- .#{$element}#{$name}-empty-text {
222
- @include cxe-field-empty-text($empty-text);
223
- }
224
- }
225
-
226
- @if (cx-should-include("cx/widgets/LookupField")) {
227
- @include cx-lookupfield();
228
- }
1
+ @use "sass:math";
2
+ @use "sass:map";
3
+ @use "../variables" as *;
4
+ @use "../maps" as *;
5
+ @use "../../util/scss/add-rules.scss" as *;
6
+ @use "../../util/scss/clockwise.scss" as *;
7
+ @use "../../util/scss/besm.scss" as *;
8
+ @use "../../util/scss/calc.scss" as *;
9
+ @use "../../util/scss/include.scss" as *;
10
+ @use "./Field.scss" as *;
11
+
12
+ @mixin cx-lookupfield(
13
+ $name: "lookupfield",
14
+ $state-style-map: $cx-std-field-state-style-map,
15
+ $placeholder: $cx-input-placeholder,
16
+ $empty-text: $cx-empty-text,
17
+ $left-icon-state-style-map: $cx-input-left-icon-state-style-map,
18
+ $clear-state-style-map: $cx-clear-state-style-map,
19
+ $tool-state-style-map: $cx-input-right-icon-state-style-map,
20
+ $icon-size: $cx-default-input-icon-size,
21
+ $width: $cx-default-input-width,
22
+ $tag-state-style-map: $cx-input-tag-state-style-map,
23
+ $tag-clear-state-style-map: $cx-input-tag-clear-state-style-map,
24
+ $besm: $cx-besm
25
+ ) {
26
+ $block: map.get($besm, block);
27
+ $element: map.get($besm, element);
28
+ $state: map.get($besm, state);
29
+
30
+ $padding: cx-get-state-rule($state-style-map, default, padding);
31
+ $border-radius-offset: cx-multiply(cx-get-state-rule($tag-state-style-map, default, border-radius), 0.25);
32
+
33
+ .#{$block}#{$name} {
34
+ cursor: pointer;
35
+ width: $width;
36
+ font: cx-get-state-rule($state-style-map, default, "font");
37
+ font-size: cx-get-state-rule($state-style-map, default, "font-size");
38
+
39
+ @include cxb-field($besm, $state-style-map, $input: false);
40
+
41
+ &.#{$state}multiple {
42
+ min-width: $cx-default-input-width;
43
+ width: auto;
44
+ }
45
+
46
+ &.#{$state}readonly {
47
+ pointer-events: none;
48
+
49
+ & > .#{$element}#{$name}-input {
50
+ padding-right: cx-right($padding);
51
+ }
52
+ }
53
+
54
+ .#{$state}icon > .#{$element}#{$name}-input > .#{$element}#{$name}-tags {
55
+ margin-left: 0;
56
+ }
57
+ }
58
+
59
+ .#{$element}#{$name}-input {
60
+ @include cxe-field-input(
61
+ $besm,
62
+ $state-style-map,
63
+ $placeholder: $placeholder,
64
+ $input: false,
65
+ $overrides: (
66
+ default: (
67
+ width: 100%,
68
+ display: inline-flex,
69
+ text-overflow: null,
70
+ padding: cx-top($padding)
71
+ cx-calc(cx-right($padding), $cx-default-clear-size, $cx-default-input-tag-spacing) cx-bottom($padding)
72
+ cx-left($padding),
73
+ )
74
+ )
75
+ );
76
+
77
+ .#{$state}single > & {
78
+ overflow: hidden;
79
+ text-overflow: ellipsis;
80
+ white-space: nowrap;
81
+ flex-basis: 0%;
82
+ flex-grow: 1;
83
+ }
84
+
85
+ .#{$state}icon > & {
86
+ padding-left: cx-calc(cx-top($padding), $cx-default-input-left-tool-size, $cx-default-input-left-tool-spacing);
87
+ }
88
+ }
89
+
90
+ .#{$element}#{$name}-tags {
91
+ display: flex;
92
+ margin: cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-top($padding), -1))
93
+ cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-right($padding), -1))
94
+ cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-bottom($padding), -1))
95
+ cx-calc($cx-default-input-tag-spacing, cx-multiply(cx-left($padding), -1));
96
+ align-items: center;
97
+ flex-wrap: wrap;
98
+ gap: $cx-default-input-tag-spacing;
99
+ }
100
+
101
+ .#{$element}#{$name}-tag {
102
+ display: inline-block;
103
+ position: relative;
104
+ box-sizing: border-box;
105
+
106
+ @include cx-add-state-rules($tag-state-style-map, default);
107
+
108
+ &:hover {
109
+ @include cx-add-state-rules($tag-state-style-map, hover);
110
+ }
111
+
112
+ &.#{$state}readonly {
113
+ padding-right: cx-right($padding);
114
+ pointer-events: none;
115
+ }
116
+ }
117
+
118
+ .#{$element}#{$name}-placeholder {
119
+ color: $cx-default-input-placeholder-color;
120
+ }
121
+
122
+ .#{$element}#{$name}-tag-value {
123
+ padding: 0 cx-calc($cx-default-input-tag-spacing, $border-radius-offset);
124
+ display: inline-block;
125
+ }
126
+
127
+ .#{$element}#{$name}-tag-clear {
128
+ @include cxe-field-button($besm, $tag-clear-state-style-map);
129
+ }
130
+
131
+ .#{$element}#{$name}-lookup-options {
132
+ padding: 0;
133
+ margin: 0;
134
+ min-width: 100%;
135
+ width: 100%;
136
+ }
137
+
138
+ .#{$element}#{$name}-query {
139
+ @include cxe-field-input(
140
+ $besm,
141
+ $state-style-map,
142
+ $placeholder: $placeholder,
143
+ $width: calc(100% - 10px),
144
+ $overrides: (
145
+ default: (
146
+ margin: 5px,
147
+ flex: 0 0 auto,
148
+ height: auto,
149
+ )
150
+ )
151
+ );
152
+ //put query field down when placed up
153
+ .#{$state}place-up-right &,
154
+ .#{$state}place-up &,
155
+ .#{$state}place-up-left & {
156
+ order: 1;
157
+ }
158
+ }
159
+
160
+ .#{$element}#{$name}-dropdown {
161
+ display: flex;
162
+ flex-direction: column;
163
+ height: 100%;
164
+
165
+ &:focus {
166
+ outline: none;
167
+ }
168
+ }
169
+
170
+ .#{$element}#{$name}-message {
171
+ font-size: smaller;
172
+ padding: 10px;
173
+ color: gray;
174
+ font-style: italic;
175
+
176
+ &.#{$state}error {
177
+ color: #9e2f2d;
178
+ }
179
+ }
180
+
181
+ .#{$element}#{$name}-scroll-container {
182
+ overflow: auto;
183
+ flex: 1 1 auto;
184
+ }
185
+
186
+ .#{$element}#{$name}-clear {
187
+ @include cxe-field-button($besm, $clear-state-style-map);
188
+
189
+ .#{$state}focus > & {
190
+ @include cx-add-state-rules($clear-state-style-map, focus);
191
+ }
192
+ .#{$state}error > & {
193
+ @include cx-add-state-rules($clear-state-style-map, error);
194
+ }
195
+ }
196
+
197
+ .#{$element}#{$name}-tool {
198
+ @include cxe-field-button($besm, $tool-state-style-map);
199
+
200
+ .#{$state}disabled > & {
201
+ border-width: 0;
202
+ @include cx-add-state-rules($state-style-map, disabled);
203
+ }
204
+ .#{$state}focus > & {
205
+ @include cx-add-state-rules($tool-state-style-map, focus);
206
+ }
207
+ .#{$state}error > & {
208
+ @include cx-add-state-rules($tool-state-style-map, error);
209
+ }
210
+ }
211
+
212
+ .#{$element}#{$name}-left-icon {
213
+ @include cxe-field-button($besm, $left-icon-state-style-map);
214
+ }
215
+
216
+ .#{$element}#{$name}-icon {
217
+ @include cxe-field-button-icon($besm, $icon-size);
218
+ }
219
+
220
+ .#{$element}#{$name}-empty-text {
221
+ @include cxe-field-empty-text($empty-text);
222
+ }
223
+ }
224
+
225
+ @if (cx-should-include("cx/widgets/LookupField")) {
226
+ @include cx-lookupfield();
227
+ }
@@ -31,6 +31,8 @@
31
31
  .#{$element}#{$name}-clip {
32
32
  position: relative;
33
33
  overflow: hidden;
34
+ width: fit-content;
35
+ box-sizing: content-box;
34
36
  background: inherit;
35
37
  user-select: none;
36
38
  background-color: $cx-default-wheel-clip-background-color;
@@ -50,11 +52,11 @@
50
52
  }
51
53
 
52
54
  .#{$element}#{$name}-vscroll {
53
- width: calc(100% + 20px);
54
55
  display: flex;
55
56
  overflow-y: auto;
56
57
  overflow-x: hidden;
57
58
  touch-action: pan-y;
59
+ scrollbar-width: none;
58
60
 
59
61
  &::-webkit-scrollbar {
60
62
  display: none;
@@ -65,7 +67,7 @@
65
67
  }
66
68
 
67
69
  .#{$element}#{$name}-option {
68
- padding: 5px 15px;
70
+ padding: $cx-default-wheel-option-padding;
69
71
  flex: 0 0 auto;
70
72
 
71
73
  &.cxs-dummy {
@@ -82,7 +82,6 @@ export interface WheelComponentProps {
82
82
 
83
83
  interface WheelComponentState {
84
84
  wheelHeight?: number;
85
- wheelWidth?: number;
86
85
  }
87
86
 
88
87
  export class WheelComponent extends VDOM.Component<WheelComponentProps, WheelComponentState> {
@@ -145,9 +144,6 @@ export class WheelComponent extends VDOM.Component<WheelComponentProps, WheelCom
145
144
  >
146
145
  <div
147
146
  className={CSS.element(baseClass, "clip")}
148
- style={{
149
- width: this.state.wheelWidth,
150
- }}
151
147
  onMouseDown={onMouseDown}
152
148
  >
153
149
  <div
@@ -220,7 +216,6 @@ export class WheelComponent extends VDOM.Component<WheelComponentProps, WheelCom
220
216
  this.setState(
221
217
  {
222
218
  wheelHeight: this.wheelEl.offsetHeight,
223
- wheelWidth: this.wheelEl.offsetWidth,
224
219
  },
225
220
  () => {
226
221
  if (this.state.wheelHeight !== undefined) {
@@ -28,6 +28,7 @@ $cx-default-wheel-clip-background-color: #fff !default;
28
28
  $cx-default-wheel-clip-border-width: 1px !default;
29
29
  $cx-default-wheel-clip-border-radius: 0 !default;
30
30
  $cx-default-wheel-clip-border-color: #d3d3d3 !default;
31
+ $cx-default-wheel-option-padding: 5px 15px !default;
31
32
 
32
33
  $cx-wheel-selection-state-style-map: (
33
34
  default: (