funda-ui 4.7.517 → 4.7.533

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 (37) hide show
  1. package/CascadingSelect/index.css +105 -88
  2. package/CascadingSelect/index.js +25 -24
  3. package/CascadingSelectE2E/index.css +105 -88
  4. package/CascadingSelectE2E/index.js +26 -25
  5. package/Date/index.js +3 -1
  6. package/DropdownMenu/index.js +3 -1
  7. package/LiveSearch/index.js +2 -1
  8. package/Select/index.d.ts +1 -0
  9. package/Select/index.js +70 -14
  10. package/Tooltip/index.css +69 -68
  11. package/Tooltip/index.d.ts +15 -1
  12. package/Tooltip/index.js +153 -57
  13. package/lib/cjs/CascadingSelect/index.js +25 -24
  14. package/lib/cjs/CascadingSelectE2E/index.js +26 -25
  15. package/lib/cjs/Date/index.js +3 -1
  16. package/lib/cjs/DropdownMenu/index.js +3 -1
  17. package/lib/cjs/LiveSearch/index.js +2 -1
  18. package/lib/cjs/Select/index.d.ts +1 -0
  19. package/lib/cjs/Select/index.js +70 -14
  20. package/lib/cjs/Tooltip/index.d.ts +15 -1
  21. package/lib/cjs/Tooltip/index.js +153 -57
  22. package/lib/css/CascadingSelect/index.css +105 -88
  23. package/lib/css/CascadingSelectE2E/index.css +105 -88
  24. package/lib/css/Tooltip/index.css +69 -68
  25. package/lib/esm/CascadingSelect/Group.tsx +3 -5
  26. package/lib/esm/CascadingSelect/index.scss +89 -68
  27. package/lib/esm/CascadingSelect/index.tsx +23 -21
  28. package/lib/esm/CascadingSelectE2E/Group.tsx +4 -3
  29. package/lib/esm/CascadingSelectE2E/index.scss +83 -63
  30. package/lib/esm/CascadingSelectE2E/index.tsx +24 -22
  31. package/lib/esm/Date/index.tsx +4 -1
  32. package/lib/esm/DropdownMenu/index.tsx +2 -1
  33. package/lib/esm/LiveSearch/index.tsx +2 -1
  34. package/lib/esm/Select/index.tsx +75 -17
  35. package/lib/esm/Tooltip/index.scss +63 -60
  36. package/lib/esm/Tooltip/index.tsx +143 -44
  37. package/package.json +1 -1
@@ -2,23 +2,23 @@
2
2
  <!-- Cascading Select End-to-end -->
3
3
  /* ====================================================== */
4
4
 
5
- .casc-select-e2e__wrapper {
5
+ .casc-menu-e2e__wrapper {
6
6
 
7
- --casc-select-e2e-arrow-fill: #a5a5a5;
8
- --casc-select-e2e-result-arrow-fill: #a5a5a5;
7
+ --casc-menu-e2e-arrow-fill: #a5a5a5;
8
+ --casc-menu-e2e-result-arrow-fill: #a5a5a5;
9
9
 
10
- --casc-select-e2e-result-font-size: 1rem;
11
- --casc-select-e2e-result-padding-x: 0.75rem;
12
- --casc-select-e2e-result-padding-y: 0.375rem;
10
+ --casc-menu-e2e-result-font-size: 1rem;
11
+ --casc-menu-e2e-result-padding-x: 0.75rem;
12
+ --casc-menu-e2e-result-padding-y: 0.375rem;
13
13
 
14
14
 
15
- .casc-select-e2e__result {
15
+ .casc-menu-e2e__result {
16
16
  position: absolute;
17
17
  left: auto;
18
18
  z-index: 1;
19
19
  top: 0;
20
- padding: var(--casc-select-e2e-result-padding-y) var(--casc-select-e2e-result-padding-x);
21
- font-size: var(--casc-select-e2e-result-font-size);
20
+ padding: var(--casc-menu-e2e-result-padding-y) var(--casc-menu-e2e-result-padding-x);
21
+ font-size: var(--casc-menu-e2e-result-font-size);
22
22
  font-weight: 400;
23
23
  line-height: 1.5;
24
24
  color: inherit;
@@ -45,7 +45,7 @@
45
45
  margin: 0 0.3rem;
46
46
 
47
47
  path {
48
- fill: var(--casc-select-e2e-result-arrow-fill);
48
+ fill: var(--casc-menu-e2e-result-arrow-fill);
49
49
  }
50
50
 
51
51
  }
@@ -53,7 +53,7 @@
53
53
  }
54
54
 
55
55
 
56
- .casc-select-e2e__closemask {
56
+ .casc-menu-e2e__closemask {
57
57
  position: absolute;
58
58
  z-index: 1;
59
59
  top: 0;
@@ -65,13 +65,13 @@
65
65
  }
66
66
 
67
67
 
68
- .casc-select-e2e__trigger {
68
+ .casc-menu-e2e__trigger {
69
69
  position: relative;
70
70
  z-index: 0;
71
71
  }
72
72
 
73
73
 
74
- .casc-select-e2e__val {
74
+ .casc-menu-e2e__val {
75
75
  position: relative;
76
76
 
77
77
 
@@ -95,7 +95,7 @@
95
95
 
96
96
  svg {
97
97
  .arrow-fill-g {
98
- fill: var(--casc-select-e2e-arrow-fill);
98
+ fill: var(--casc-menu-e2e-arrow-fill);
99
99
  }
100
100
  }
101
101
  }
@@ -106,45 +106,47 @@
106
106
  }
107
107
 
108
108
  /*------ List ------*/
109
- .casc-select-e2e__items-wrapper {
109
+ .casc-menu-e2e__items-wrapper {
110
110
 
111
111
 
112
+ --casc-menu-e2e-scrollbar-color: rgba(0, 0, 0, 0.2);
113
+ --casc-menu-e2e-scrollbar-track: rgba(0, 0, 0, 0);
114
+ --casc-menu-e2e-scrollbar-h: 3px;
115
+ --casc-menu-e2e-scrollbar-w: 3px;
116
+ --casc-menu-e2e-per-col-maxheight: 300px;
117
+ --casc-menu-e2e-opt-font-size: 0.875rem;
118
+ --casc-menu-e2e-opt-padding-x: .4rem;
119
+ --casc-menu-e2e-opt-padding-y: .3rem;
112
120
 
113
- --casc-select-e2e-opt-font-size: 0.875rem;
114
- --casc-select-e2e-opt-padding-x: .4rem;
115
- --casc-select-e2e-opt-padding-y: .3rem;
121
+ --casc-menu-e2e-opt-header-border-color: rgba(1, 1, 1, .2);
122
+ --casc-menu-e2e-opt-header-text-color: #999;
123
+ --casc-menu-e2e-opt-hover-bg: #f7f7f7;
124
+ --casc-menu-e2e-opt-active-bg: #eeeeee;
116
125
 
117
- --casc-select-e2e-opt-header-border-color: rgba(1, 1, 1, .2);
118
- --casc-select-e2e-opt-header-text-color: #999;
119
- --casc-select-e2e-opt-hover-bg: #f7f7f7;
120
- --casc-select-e2e-opt-active-bg: #eeeeee;
121
126
 
127
+ --casc-menu-e2e-items-box-shadow: 0 5px 15px 5px rgba(80, 102, 224, 0.08);
128
+ --casc-menu-e2e-items-bg: #fff;
129
+ --casc-menu-e2e-items-color: inherit;
130
+ --casc-menu-e2e-items-border-color: rgba(0, 0, 0, .1);
131
+ --casc-menu-e2e-items-li-border-color: #eee;
122
132
 
123
- --casc-select-e2e-items-box-shadow: 0 5px 15px 5px rgba(80, 102, 224, 0.08);
124
- --casc-select-e2e-items-bg: #fff;
125
- --casc-select-e2e-items-color: inherit;
126
- --casc-select-e2e-items-border-color: rgba(0, 0, 0, .1);
127
- --casc-select-e2e-items-li-border-color: #eee;
128
-
129
- --casc-select-e2e-loader-color: #000000;
130
- --casc-select-e2e-clean-btn-color: #b5b5b5;
133
+ --casc-menu-e2e-loader-color: #000000;
134
+ --casc-menu-e2e-clean-btn-color: #b5b5b5;
131
135
 
132
- --casc-select-e2e-searchbox-border-color: #ddd;
136
+ --casc-menu-e2e-searchbox-border-color: #ddd;
133
137
 
134
- box-shadow: var(--casc-select-e2e-items-box-shadow);
138
+ box-shadow: var(--casc-menu-e2e-items-box-shadow);
135
139
  position: absolute;
136
140
  left: auto;
137
- max-height: 300px;
138
- border: 1px solid var(--casc-select-e2e-items-border-color);
139
- background: var(--casc-select-e2e-items-bg);
141
+ border: 1px solid var(--casc-menu-e2e-items-border-color);
142
+ background: var(--casc-menu-e2e-items-bg);
140
143
  padding: 10px;
141
- overflow-y: auto;
142
144
  box-sizing: border-box;
143
145
  top: 2.3rem;
144
146
  border-radius: 5px;
145
147
  width: max-content;
146
148
  /* required -> the content will not wrap at all even if it causes overflows*/
147
- color: var(--casc-select-e2e-items-color);
149
+ color: var(--casc-menu-e2e-items-color);
148
150
 
149
151
 
150
152
  display: none;
@@ -164,7 +166,7 @@
164
166
  }
165
167
 
166
168
 
167
- .casc-select-e2e__items-loader {
169
+ .casc-menu-e2e__items-loader {
168
170
  position: absolute;
169
171
  pointer-events: none;
170
172
  left: 0;
@@ -176,30 +178,30 @@
176
178
  text-align: center;
177
179
  transform-origin: center;
178
180
  transform: translate(2px, 5px) rotate(0);
179
- animation: 1s linear infinite casc-select-e2e__spinner;
181
+ animation: 1s linear infinite casc-menu-e2e__spinner;
180
182
 
181
183
  svg {
182
184
  vertical-align: top;
183
185
 
184
186
  path {
185
- fill: var(--casc-select-e2e-loader-color);
187
+ fill: var(--casc-menu-e2e-loader-color);
186
188
  }
187
189
  }
188
190
  }
189
191
 
190
- @keyframes casc-select-e2e__spinner {
192
+ @keyframes casc-menu-e2e__spinner {
191
193
  to {
192
194
  transform: translate(2px, 5px) rotate(-360deg);
193
195
  }
194
196
  }
195
197
 
196
- .casc-select-e2e__close {
198
+ .casc-menu-e2e__close {
197
199
  svg {
198
200
  opacity: .4;
199
201
  }
200
202
  }
201
203
 
202
- .casc-select-e2e__close:hover {
204
+ .casc-menu-e2e__close:hover {
203
205
  svg {
204
206
  transition: .2s ease-out;
205
207
  opacity: .7;
@@ -218,7 +220,7 @@
218
220
  float: left;
219
221
  padding: 0 10px;
220
222
  margin-right: 15px;
221
- border-right: 1px dotted var(--casc-select-e2e-items-li-border-color);
223
+ border-right: 1px dotted var(--casc-menu-e2e-items-li-border-color);
222
224
  transition: .2s ease-out;
223
225
 
224
226
  &.hide-col {
@@ -233,12 +235,30 @@
233
235
  }
234
236
  }
235
237
 
238
+ /* Column */
239
+ .casc-menu-e2e__items-col {
240
+ max-height: var(--casc-menu-e2e-per-col-maxheight);
241
+ overflow-y: auto;
242
+
243
+ &::-webkit-scrollbar {
244
+ width: var(--casc-menu-e2e-scrollbar-w);
245
+ }
246
+
247
+ &::-webkit-scrollbar-thumb {
248
+ background: var(--casc-menu-e2e-scrollbar-color);
249
+ }
250
+
251
+ &::-webkit-scrollbar-track {
252
+ background: var(--casc-menu-e2e-scrollbar-track);
253
+ }
254
+
255
+ }
236
256
 
237
257
 
238
258
  /* Searchbox */
239
- .casc-select-e2e__items-col-searchbox {
259
+ .casc-menu-e2e__items-col-searchbox {
240
260
  input {
241
- border: 1px solid var(--casc-select-e2e-searchbox-border-color);
261
+ border: 1px solid var(--casc-menu-e2e-searchbox-border-color);
242
262
  border-radius: 0.15rem;
243
263
  width: 100%;
244
264
  background: transparent;
@@ -248,29 +268,29 @@
248
268
 
249
269
 
250
270
  /* Options */
251
- .casc-select-e2e__opt {
252
- padding: var(--casc-select-e2e-opt-padding-y) var(--casc-select-e2e-opt-padding-x);
253
- font-size: var(--casc-select-e2e-opt-font-size);
271
+ .casc-menu-e2e__opt {
272
+ padding: var(--casc-menu-e2e-opt-padding-y) var(--casc-menu-e2e-opt-padding-x);
273
+ font-size: var(--casc-menu-e2e-opt-font-size);
254
274
  border-radius: 2px;
255
275
 
256
276
  &:hover {
257
- background: var(--casc-select-e2e-opt-hover-bg);
277
+ background: var(--casc-menu-e2e-opt-hover-bg);
258
278
  }
259
279
 
260
280
  &.active {
261
- background: var(--casc-select-e2e-opt-active-bg);
281
+ background: var(--casc-menu-e2e-opt-active-bg);
262
282
  }
263
283
  }
264
284
 
265
- .casc-select-e2e__opt-header {
266
- padding: var(--casc-select-e2e-opt-padding-y) var(--casc-select-e2e-opt-padding-x);
267
- font-size: var(--casc-select-e2e-opt-font-size);
268
- border-bottom: 1px dotted var(--casc-select-e2e-opt-header-border-color);
285
+ .casc-menu-e2e__opt-header {
286
+ padding: var(--casc-menu-e2e-opt-padding-y) var(--casc-menu-e2e-opt-padding-x);
287
+ font-size: var(--casc-menu-e2e-opt-font-size);
288
+ border-bottom: 1px dotted var(--casc-menu-e2e-opt-header-border-color);
269
289
  border-radius: 2px;
270
290
  position: sticky;
271
- top: calc(var(--casc-select-e2e-opt-font-size) * -1);
272
- background: var(--casc-select-e2e-items-bg);
273
- color: var(--casc-select-e2e-opt-header-text-color);
291
+ top: 0;
292
+ background: var(--casc-menu-e2e-items-bg);
293
+ color: var(--casc-menu-e2e-opt-header-text-color);
274
294
  display: flex;
275
295
  align-items: center;
276
296
 
@@ -280,14 +300,14 @@
280
300
 
281
301
 
282
302
  &:hover {
283
- background: var(--casc-select-e2e-opt-hover-bg);
303
+ background: var(--casc-menu-e2e-opt-hover-bg);
284
304
  }
285
305
 
286
306
  &.active {
287
- background: var(--casc-select-e2e-opt-active-bg);
307
+ background: var(--casc-menu-e2e-opt-active-bg);
288
308
  }
289
309
 
290
- .casc-select-e2e__opt-header__clean {
310
+ .casc-menu-e2e__opt-header__clean {
291
311
  display: inline-block;
292
312
  margin-left: .2rem;
293
313
  padding: .1rem;
@@ -298,11 +318,11 @@
298
318
 
299
319
  svg {
300
320
 
301
- border: 1px var(--casc-select-e2e-clean-btn-color) solid;
321
+ border: 1px var(--casc-menu-e2e-clean-btn-color) solid;
302
322
  border-radius: 50%;
303
323
 
304
324
  path {
305
- fill: var(--casc-select-e2e-clean-btn-color);
325
+ fill: var(--casc-menu-e2e-clean-btn-color);
306
326
  }
307
327
  }
308
328
  }
@@ -28,6 +28,7 @@ import {
28
28
  import { clsWrite, combinedCls } from 'funda-utils/dist/cjs/cls';
29
29
 
30
30
 
31
+
31
32
  import Group from './Group';
32
33
 
33
34
 
@@ -183,6 +184,7 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
183
184
  const rootRef = useRef<any>(null);
184
185
  const inputRef = useRef<any>(null);
185
186
  const listRef = useRef<any>(null);
187
+ const MIN_SPACE_FOR_DROPDOWN = 200; // Minimum space needed to show dropdown below trigger
186
188
 
187
189
  // searchable
188
190
  const [columnSearchKeywords, setColumnSearchKeywords] = useState<string[]>([]);
@@ -295,7 +297,7 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
295
297
 
296
298
 
297
299
  // update modal position
298
- const _modalRef: any = document.querySelector(`#casc-select-e2e__items-wrapper-${idRes}`);
300
+ const _modalRef: any = document.querySelector(`#casc-menu-e2e__items-wrapper-${idRes}`);
299
301
  const _triggerRef: any = inputRef.current;
300
302
 
301
303
 
@@ -317,7 +319,7 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
317
319
  // STEP 2:
318
320
  //-----------
319
321
  // Detect position
320
- if (window.innerHeight - _triggerBox.top > 100) {
322
+ if (window.innerHeight - _triggerBox.top > MIN_SPACE_FOR_DROPDOWN) {
321
323
  targetPos = 'bottom';
322
324
  } else {
323
325
  targetPos = 'top';
@@ -380,7 +382,7 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
380
382
 
381
383
  function popwinPosHide() {
382
384
 
383
- const _modalRef: any = document.querySelector(`#casc-select-e2e__items-wrapper-${idRes}`);
385
+ const _modalRef: any = document.querySelector(`#casc-menu-e2e__items-wrapper-${idRes}`);
384
386
 
385
387
  if (_modalRef !== null) {
386
388
  // remove classnames and styles
@@ -396,9 +398,9 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
396
398
  if (listRef.current === null) return;
397
399
 
398
400
  let latestDisplayColIndex: number = 0;
399
- const currentItemsInner: any = listRef.current.querySelector('.casc-select-e2e__items-inner');
401
+ const currentItemsInner: any = listRef.current.querySelector('.casc-menu-e2e__items-inner');
400
402
  if (currentItemsInner !== null) {
401
- const colItemsWrapper = [].slice.call(currentItemsInner.querySelectorAll('.casc-select-e2e__items-col'));
403
+ const colItemsWrapper = [].slice.call(currentItemsInner.querySelectorAll('.casc-menu-e2e__items-col'));
402
404
  colItemsWrapper.forEach((perCol: any) => {
403
405
  perCol.classList.remove('hide-col');
404
406
  });
@@ -756,10 +758,10 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
756
758
 
757
759
  // active current option with DOM
758
760
  //////////////////////////////////////////
759
- const currentItemsInner: any = e.currentTarget.closest('.casc-select-e2e__items-inner');
761
+ const currentItemsInner: any = e.currentTarget.closest('.casc-menu-e2e__items-inner');
760
762
  if (currentItemsInner !== null) {
761
763
  curData.forEach((v: any, col: number) => {
762
- const colItemsWrapper = currentItemsInner.querySelectorAll('.casc-select-e2e__items-col');
764
+ const colItemsWrapper = currentItemsInner.querySelectorAll('.casc-menu-e2e__items-col');
763
765
  colItemsWrapper.forEach((perCol: HTMLUListElement) => {
764
766
  const _col = Number(perCol.dataset.col);
765
767
 
@@ -1423,14 +1425,14 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
1423
1425
  <>
1424
1426
 
1425
1427
  <div
1426
- className={clsWrite(wrapperClassName, 'casc-select-e2e__wrapper mb-3 position-relative', `casc-select-e2e__wrapper ${wrapperClassName}`)}
1428
+ className={clsWrite(wrapperClassName, 'casc-menu-e2e__wrapper mb-3 position-relative', `casc-menu-e2e__wrapper ${wrapperClassName}`)}
1427
1429
  ref={rootRef}
1428
- data-overlay-id={`casc-select-e2e__items-wrapper-${idRes}`}
1430
+ data-overlay-id={`casc-menu-e2e__items-wrapper-${idRes}`}
1429
1431
  >
1430
1432
  {label ? <>{typeof label === 'string' ? <label htmlFor={idRes} className="form-label" dangerouslySetInnerHTML={{ __html: `${label}` }}></label> : <label htmlFor={idRes} className="form-label" >{label}</label>}</> : null}
1431
1433
 
1432
1434
  {triggerContent ? <>
1433
- <div className={clsWrite(triggerClassName, 'casc-select-e2e__trigger d-inline w-auto', `casc-select-e2e__trigger ${triggerClassName}`)} onClick={handleDisplayOptions}>{triggerContent}</div>
1435
+ <div className={clsWrite(triggerClassName, 'casc-menu-e2e__trigger d-inline w-auto', `casc-menu-e2e__trigger ${triggerClassName}`)} onClick={handleDisplayOptions}>{triggerContent}</div>
1434
1436
  </> : null}
1435
1437
 
1436
1438
 
@@ -1438,16 +1440,16 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
1438
1440
  <RootPortal show={true} containerClassName="CascadingSelectE2E">
1439
1441
  <div
1440
1442
  ref={listRef}
1441
- id={`casc-select-e2e__items-wrapper-${idRes}`}
1442
- className="casc-select-e2e__items-wrapper position-absolute border shadow small"
1443
+ id={`casc-menu-e2e__items-wrapper-${idRes}`}
1444
+ className="casc-menu-e2e__items-wrapper position-absolute border shadow small"
1443
1445
  style={{ zIndex: DEPTH, display: 'none' }}
1444
1446
  >
1445
- <ul className="casc-select-e2e__items-inner">
1446
- {loading ? <><div className="casc-select-e2e__items-loader">{loader || <svg height="12px" width="12px" viewBox="0 0 512 512"><g><path fill="inherit" d="M256,0c-23.357,0-42.297,18.932-42.297,42.288c0,23.358,18.94,42.288,42.297,42.288c23.357,0,42.279-18.93,42.279-42.288C298.279,18.932,279.357,0,256,0z" /><path fill="inherit" d="M256,427.424c-23.357,0-42.297,18.931-42.297,42.288C213.703,493.07,232.643,512,256,512c23.357,0,42.279-18.93,42.279-42.288C298.279,446.355,279.357,427.424,256,427.424z" /><path fill="inherit" d="M74.974,74.983c-16.52,16.511-16.52,43.286,0,59.806c16.52,16.52,43.287,16.52,59.806,0c16.52-16.511,16.52-43.286,0-59.806C118.261,58.463,91.494,58.463,74.974,74.983z" /><path fill="inherit" d="M377.203,377.211c-16.503,16.52-16.503,43.296,0,59.815c16.519,16.52,43.304,16.52,59.806,0c16.52-16.51,16.52-43.295,0-59.815C420.489,360.692,393.722,360.7,377.203,377.211z" /><path fill="inherit" d="M84.567,256c0.018-23.348-18.922-42.279-42.279-42.279c-23.357-0.009-42.297,18.932-42.279,42.288c-0.018,23.348,18.904,42.279,42.279,42.279C65.645,298.288,84.567,279.358,84.567,256z" /><path fill="inherit" d="M469.712,213.712c-23.357,0-42.279,18.941-42.297,42.288c0,23.358,18.94,42.288,42.297,42.297c23.357,0,42.297-18.94,42.279-42.297C512.009,232.652,493.069,213.712,469.712,213.712z" /><path fill="inherit" d="M74.991,377.22c-16.519,16.511-16.519,43.296,0,59.806c16.503,16.52,43.27,16.52,59.789,0c16.52-16.519,16.52-43.295,0-59.815C118.278,360.692,91.511,360.692,74.991,377.22z" /><path fill="inherit" d="M437.026,134.798c16.52-16.52,16.52-43.304,0-59.824c-16.519-16.511-43.304-16.52-59.823,0c-16.52,16.52-16.503,43.295,0,59.815C393.722,151.309,420.507,151.309,437.026,134.798z" /></g></svg>}</div></> : null}
1447
+ <ul className="casc-menu-e2e__items-inner">
1448
+ {loading ? <><div className="casc-menu-e2e__items-loader">{loader || <svg height="12px" width="12px" viewBox="0 0 512 512"><g><path fill="inherit" d="M256,0c-23.357,0-42.297,18.932-42.297,42.288c0,23.358,18.94,42.288,42.297,42.288c23.357,0,42.279-18.93,42.279-42.288C298.279,18.932,279.357,0,256,0z" /><path fill="inherit" d="M256,427.424c-23.357,0-42.297,18.931-42.297,42.288C213.703,493.07,232.643,512,256,512c23.357,0,42.279-18.93,42.279-42.288C298.279,446.355,279.357,427.424,256,427.424z" /><path fill="inherit" d="M74.974,74.983c-16.52,16.511-16.52,43.286,0,59.806c16.52,16.52,43.287,16.52,59.806,0c16.52-16.511,16.52-43.286,0-59.806C118.261,58.463,91.494,58.463,74.974,74.983z" /><path fill="inherit" d="M377.203,377.211c-16.503,16.52-16.503,43.296,0,59.815c16.519,16.52,43.304,16.52,59.806,0c16.52-16.51,16.52-43.295,0-59.815C420.489,360.692,393.722,360.7,377.203,377.211z" /><path fill="inherit" d="M84.567,256c0.018-23.348-18.922-42.279-42.279-42.279c-23.357-0.009-42.297,18.932-42.279,42.288c-0.018,23.348,18.904,42.279,42.279,42.279C65.645,298.288,84.567,279.358,84.567,256z" /><path fill="inherit" d="M469.712,213.712c-23.357,0-42.279,18.941-42.297,42.288c0,23.358,18.94,42.288,42.297,42.297c23.357,0,42.297-18.94,42.279-42.297C512.009,232.652,493.069,213.712,469.712,213.712z" /><path fill="inherit" d="M74.991,377.22c-16.519,16.511-16.519,43.296,0,59.806c16.503,16.52,43.27,16.52,59.789,0c16.52-16.519,16.52-43.295,0-59.815C118.278,360.692,91.511,360.692,74.991,377.22z" /><path fill="inherit" d="M437.026,134.798c16.52-16.52,16.52-43.304,0-59.824c-16.519-16.511-43.304-16.52-59.823,0c-16.52,16.52-16.503,43.295,0,59.815C393.722,151.309,420.507,151.309,437.026,134.798z" /></g></svg>}</div></> : null}
1447
1449
  {showCloseBtn ? <a href="#" tabIndex={-1} onClick={(e) => {
1448
1450
  e.preventDefault();
1449
1451
  cancel();
1450
- }} className="casc-select-e2e__close position-absolute top-0 end-0 mt-0 mx-1"><svg width="10px" height="10px" viewBox="0 0 1024 1024"><path fill="#000" d="M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z" /></svg></a> : null}
1452
+ }} className="casc-menu-e2e__close position-absolute top-0 end-0 mt-0 mx-1"><svg width="10px" height="10px" viewBox="0 0 1024 1024"><path fill="#000" d="M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z" /></svg></a> : null}
1451
1453
 
1452
1454
 
1453
1455
 
@@ -1466,12 +1468,12 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
1466
1468
 
1467
1469
 
1468
1470
  return (
1469
- <li key={level} data-col={level} className="casc-select-e2e__items-col">
1471
+ <li key={level} data-col={level} className="casc-menu-e2e__items-col">
1470
1472
 
1471
1473
 
1472
1474
  {/* SEARCH BOX */}
1473
1475
  {searchable && (
1474
- <div className="casc-select-e2e__items-col-searchbox">
1476
+ <div className="casc-menu-e2e__items-col-searchbox">
1475
1477
  <input
1476
1478
  type="text"
1477
1479
  placeholder={searchPlaceholder}
@@ -1513,7 +1515,7 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
1513
1515
 
1514
1516
 
1515
1517
  <div className={combinedCls(
1516
- 'casc-select-e2e__val',
1518
+ 'casc-menu-e2e__val',
1517
1519
  {
1518
1520
  'inputable': inputable,
1519
1521
  }
@@ -1547,7 +1549,7 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
1547
1549
  }
1548
1550
  }}
1549
1551
  id={idRes}
1550
- data-overlay-id={`casc-select-e2e__items-wrapper-${idRes}`}
1552
+ data-overlay-id={`casc-menu-e2e__items-wrapper-${idRes}`}
1551
1553
  name={name}
1552
1554
  className={combinedCls(
1553
1555
  clsWrite(controlClassName, 'form-control'),
@@ -1626,9 +1628,9 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
1626
1628
 
1627
1629
  {/** REVIEW RESULT */}
1628
1630
  {destroyParentIdMatch ? <>
1629
- {!inputable ? <div className="casc-select-e2e__result">{displayInfo(true)}</div> : null}
1631
+ {!inputable ? <div className="casc-menu-e2e__result">{displayInfo(true)}</div> : null}
1630
1632
  </> : <>
1631
- {!inputable ? <div className="casc-select-e2e__result">{displayInfo(false)}</div> : null}
1633
+ {!inputable ? <div className="casc-menu-e2e__result">{displayInfo(false)}</div> : null}
1632
1634
  </>}
1633
1635
 
1634
1636
 
@@ -1646,7 +1648,7 @@ const CascadingSelectE2E = forwardRef((props: CascadingSelectE2EProps, externalR
1646
1648
 
1647
1649
 
1648
1650
  {isShow ? <div
1649
- className="casc-select-e2e__closemask"
1651
+ className="casc-menu-e2e__closemask"
1650
1652
  onClick={(e) => {
1651
1653
  e.preventDefault();
1652
1654
  cancel();
@@ -193,6 +193,9 @@ const Date = forwardRef((props: DateProps, externalRef: any) => {
193
193
 
194
194
 
195
195
  const DEPTH = depth || 1055; // the default value same as bootstrap
196
+ const MIN_SPACE_FOR_DROPDOWN = 200; // Minimum space needed to show dropdown below trigger
197
+
198
+
196
199
  const defaultValueIsEmpty = (s: any) => {
197
200
  return typeof s === 'undefined' || s === null || s === 'null' || s === '';
198
201
  };
@@ -521,7 +524,7 @@ const Date = forwardRef((props: DateProps, externalRef: any) => {
521
524
  // STEP 1:
522
525
  //-----------
523
526
  // Detect position
524
- if (window.innerHeight - _triggerBox.top > 100) {
527
+ if (window.innerHeight - _triggerBox.top > MIN_SPACE_FOR_DROPDOWN) {
525
528
  targetPos = 'bottom';
526
529
  } else {
527
530
  targetPos = 'top';
@@ -88,6 +88,7 @@ const DropdownMenu = (props: DropdownMenuProps) => {
88
88
  const [isOpen, setIsOpen] = useState<boolean>(false);
89
89
  const [selected, setSelected] = useState<any>(null);
90
90
  const _hoverDelay = !isNaN(hoverDelay as never) && typeof hoverDelay !== 'undefined' ? hoverDelay : 150;
91
+ const MIN_SPACE_FOR_DROPDOWN = 200; // Minimum space needed to show dropdown below trigger
91
92
 
92
93
 
93
94
  const defaultLabel = triggerContent === undefined ? '' : triggerContent;
@@ -207,7 +208,7 @@ const DropdownMenu = (props: DropdownMenuProps) => {
207
208
  // STEP 2:
208
209
  //-----------
209
210
  // Detect position
210
- if (window.innerHeight - _triggerBox.top > 100) {
211
+ if (window.innerHeight - _triggerBox.top > MIN_SPACE_FOR_DROPDOWN) {
211
212
  targetPos = 'bottom';
212
213
  } else {
213
214
  targetPos = 'top';
@@ -153,6 +153,7 @@ const LiveSearch = forwardRef((props: LiveSearchProps, externalRef: any) => {
153
153
  const EXCEEDED_SIDE_POS_OFFSET = Number(exceededSidePosOffset) || 15;
154
154
  const AUTO_SHOW_OPTIONS = typeof autoShowOptions !== 'undefined' && autoShowOptions === true ? true : false;
155
155
  const MANUAL_REQ = typeof fetchTrigger !== 'undefined' && fetchTrigger === true ? true : false; // Manual requests
156
+ const MIN_SPACE_FOR_DROPDOWN = 200; // Minimum space needed to show dropdown below trigger
156
157
 
157
158
  const NO_MATCH_POPUP = typeof noMatchPopup === 'undefined' ? true : noMatchPopup;
158
159
  const WIN_WIDTH = typeof winWidth === 'function' ? winWidth() : winWidth ? winWidth : 'auto';
@@ -300,7 +301,7 @@ const LiveSearch = forwardRef((props: LiveSearchProps, externalRef: any) => {
300
301
  // STEP 2:
301
302
  //-----------
302
303
  // Detect position
303
- if (window.innerHeight - _triggerBox.top > 100) {
304
+ if (window.innerHeight - _triggerBox.top > MIN_SPACE_FOR_DROPDOWN) {
304
305
  targetPos = 'bottom';
305
306
  } else {
306
307
  targetPos = 'top';