uikit 3.25.23-dev.cf3d285 → 3.25.23

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 (60) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/scss.js +80 -49
  3. package/dist/css/uikit-core-rtl.css +5 -64
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +5 -64
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +5 -64
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +5 -64
  10. package/dist/css/uikit.min.css +1 -1
  11. package/dist/js/components/countdown.js +1 -1
  12. package/dist/js/components/countdown.min.js +1 -1
  13. package/dist/js/components/filter.js +4 -4
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +323 -31
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +323 -31
  18. package/dist/js/components/lightbox.min.js +1 -1
  19. package/dist/js/components/notification.js +1 -1
  20. package/dist/js/components/notification.min.js +1 -1
  21. package/dist/js/components/parallax.js +1 -1
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +1 -1
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +191 -191
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +1 -1
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +1 -1
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +1 -1
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +1 -1
  34. package/dist/js/components/tooltip.min.js +1 -1
  35. package/dist/js/components/upload.js +1 -1
  36. package/dist/js/components/upload.min.js +1 -1
  37. package/dist/js/uikit-core.js +92 -78
  38. package/dist/js/uikit-core.min.js +1 -1
  39. package/dist/js/uikit-icons.js +1 -1
  40. package/dist/js/uikit-icons.min.js +1 -1
  41. package/dist/js/uikit.js +85 -71
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +2 -2
  44. package/src/js/api/component.js +12 -8
  45. package/src/js/core/accordion.js +11 -7
  46. package/src/js/core/drop.js +10 -32
  47. package/src/js/mixin/event.js +31 -0
  48. package/src/js/mixin/modal.js +25 -33
  49. package/src/less/components/base.less +2 -35
  50. package/src/less/components/button.less +0 -8
  51. package/src/less/components/form.less +0 -6
  52. package/src/less/components/icon.less +0 -8
  53. package/src/less/components/search.less +0 -5
  54. package/src/less/components/utility.less +3 -7
  55. package/src/scss/components/base.scss +2 -35
  56. package/src/scss/components/button.scss +0 -8
  57. package/src/scss/components/form.scss +0 -6
  58. package/src/scss/components/icon.scss +0 -8
  59. package/src/scss/components/search.scss +0 -5
  60. package/src/scss/components/utility.scss +3 -7
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "uikit",
3
3
  "title": "UIkit",
4
4
  "description": "UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.",
5
- "version": "3.25.23-dev.cf3d285",
5
+ "version": "3.25.23",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -31,7 +31,7 @@
31
31
  "url": "https://github.com/uikit/uikit/issues"
32
32
  },
33
33
  "homepage": "https://getuikit.com",
34
- "packageManager": "pnpm@11.25.0",
34
+ "packageManager": "pnpm@12.4.1",
35
35
  "devDependencies": {
36
36
  "@eslint/js": "^10.0.1",
37
37
  "@rollup/plugin-alias": "^6.0.0",
@@ -2,7 +2,7 @@ import { $$, camelize, hyphenate, isEmpty, isPlainObject } from 'uikit-util';
2
2
  import App from './app';
3
3
 
4
4
  const PREFIX = 'uk-';
5
- const DATA = '__uikit__';
5
+ const elementComponents = new WeakMap();
6
6
 
7
7
  export const components = {};
8
8
 
@@ -60,7 +60,7 @@ export function createComponent(name, element, data, ...args) {
60
60
  }
61
61
 
62
62
  export function getComponents(element) {
63
- return element?.[DATA] || {};
63
+ return elementComponents.get(element) || {};
64
64
  }
65
65
 
66
66
  export function getComponent(element, name) {
@@ -68,17 +68,21 @@ export function getComponent(element, name) {
68
68
  }
69
69
 
70
70
  export function attachToElement(element, instance) {
71
- if (!element[DATA]) {
72
- element[DATA] = {};
71
+ let components = elementComponents.get(element);
72
+
73
+ if (!components) {
74
+ components = {};
75
+ elementComponents.set(element, components);
73
76
  }
74
77
 
75
- element[DATA][instance.$options.name] = instance;
78
+ components[instance.$options.name] = instance;
76
79
  }
77
80
 
78
81
  export function detachFromElement(element, instance) {
79
- delete element[DATA]?.[instance.$options.name];
82
+ const components = elementComponents.get(element);
83
+ delete components?.[instance.$options.name];
80
84
 
81
- if (isEmpty(element[DATA])) {
82
- delete element[DATA];
85
+ if (isEmpty(components)) {
86
+ elementComponents.delete(element);
83
87
  }
84
88
  }
@@ -26,6 +26,8 @@ import { maybeDefaultPreventClick } from '../mixin/event';
26
26
  import Togglable from '../mixin/togglable';
27
27
  import { keyMap } from '../util/keys';
28
28
 
29
+ const wrappers = new WeakMap();
30
+
29
31
  export default {
30
32
  mixins: [Class, Togglable],
31
33
 
@@ -60,7 +62,9 @@ export default {
60
62
  },
61
63
 
62
64
  contents({ content }) {
63
- return this.items.map((item) => item._wrapper?.firstElementChild || $(content, item));
65
+ return this.items.map(
66
+ (item) => wrappers.get(item)?.firstElementChild || $(content, item),
67
+ );
64
68
  },
65
69
  },
66
70
 
@@ -200,13 +204,13 @@ function hide(el, hide) {
200
204
  }
201
205
 
202
206
  async function transition(el, show, { content, duration, velocity, transition }) {
203
- content = el._wrapper?.firstElementChild || $(content, el);
207
+ let wrapper = wrappers.get(el);
208
+ content = wrapper?.firstElementChild || $(content, el);
204
209
 
205
- if (!el._wrapper) {
206
- el._wrapper = wrapAll(content, '<div>');
210
+ if (!wrapper) {
211
+ wrapper = wrapAll(content, '<div>');
212
+ wrappers.set(el, wrapper);
207
213
  }
208
-
209
- const wrapper = el._wrapper;
210
214
  css(wrapper, 'overflow', 'hidden');
211
215
  const currentHeight = toFloat(css(wrapper, 'height'));
212
216
 
@@ -224,7 +228,7 @@ async function transition(el, show, { content, duration, velocity, transition })
224
228
  await Transition.start(wrapper, { height: show ? endHeight : 0 }, duration, transition);
225
229
 
226
230
  unwrap(content);
227
- delete el._wrapper;
231
+ wrappers.delete(el);
228
232
 
229
233
  if (!show) {
230
234
  hide(content, true);
@@ -20,21 +20,17 @@ import {
20
20
  overflowParents,
21
21
  parent,
22
22
  pick,
23
- pointerCancel,
24
- pointerDown,
25
23
  pointerEnter,
26
24
  pointerLeave,
27
- pointerUp,
28
25
  query,
29
26
  removeClass,
30
27
  } from 'uikit-util';
31
28
  import { generateId } from '../api/instance';
32
29
  import Class from '../mixin/class';
33
30
  import Container from '../mixin/container';
34
- import { maybeDefaultPreventClick } from '../mixin/event';
31
+ import { maybeDefaultPreventClick, onEscape, onOutsidePointer } from '../mixin/event';
35
32
  import Position, { storeScrollPosition } from '../mixin/position';
36
33
  import Togglable from '../mixin/togglable';
37
- import { keyMap } from '../util/keys';
38
34
  import { preventBackgroundScroll } from '../util/scroll';
39
35
 
40
36
  export let active;
@@ -457,7 +453,6 @@ export default {
457
453
  },
458
454
  },
459
455
  };
460
-
461
456
  function getViewport(el, target) {
462
457
  return offsetViewport(overflowParents(target).find((parent) => parent.contains(el)));
463
458
  }
@@ -502,11 +497,7 @@ function listenForScroll(drop, fn = () => drop.$emit()) {
502
497
  }
503
498
 
504
499
  function listenForEscClose(drop) {
505
- return on(document, 'keydown', (e) => {
506
- if (e.keyCode === keyMap.ESC) {
507
- drop.hide(false);
508
- }
509
- });
500
+ return onEscape(() => drop.hide(false));
510
501
  }
511
502
 
512
503
  function listenForScrollClose(drop) {
@@ -514,25 +505,12 @@ function listenForScrollClose(drop) {
514
505
  }
515
506
 
516
507
  function listenForBackgroundClose(drop) {
517
- return on(document, pointerDown, ({ target }) => {
518
- if (drop.$el.contains(target)) {
519
- return;
520
- }
521
-
522
- once(
523
- document,
524
- `${pointerUp} ${pointerCancel} scroll`,
525
- ({ defaultPrevented, type, target: newTarget }) => {
526
- if (
527
- !defaultPrevented &&
528
- type === pointerUp &&
529
- target === newTarget &&
530
- !drop.targetEl?.contains(target)
531
- ) {
532
- drop.hide(false);
533
- }
534
- },
535
- true,
536
- );
537
- });
508
+ return onOutsidePointer(
509
+ (target) => {
510
+ if (!drop.targetEl?.contains(target)) {
511
+ drop.hide(false);
512
+ }
513
+ },
514
+ (target) => !drop.$el.contains(target),
515
+ );
538
516
  }
@@ -1,5 +1,36 @@
1
+ import { pointerCancel, pointerDown, pointerUp } from '../util/env';
2
+ import { on, once } from '../util/event';
3
+ import { keyMap } from '../util/keys';
4
+
1
5
  export function maybeDefaultPreventClick(e) {
2
6
  if (e.target.closest('a[href="#"],a[href=""]')) {
3
7
  e.preventDefault();
4
8
  }
5
9
  }
10
+
11
+ export function onEscape(handler, isEligible = () => true) {
12
+ return on(document, 'keydown', (e) => {
13
+ if (e.keyCode === keyMap.ESC && isEligible()) {
14
+ handler(e);
15
+ }
16
+ });
17
+ }
18
+
19
+ export function onOutsidePointer(handler, isOutside, isEligible) {
20
+ return on(document, pointerDown, ({ target }) => {
21
+ if (!isOutside(target) || (isEligible && !isEligible())) {
22
+ return;
23
+ }
24
+
25
+ once(
26
+ document,
27
+ `${pointerUp} ${pointerCancel} scroll`,
28
+ ({ defaultPrevented, type, target: newTarget }) => {
29
+ if (!defaultPrevented && type === pointerUp && target === newTarget) {
30
+ handler(target);
31
+ }
32
+ },
33
+ true,
34
+ );
35
+ });
36
+ }
@@ -13,9 +13,6 @@ import {
13
13
  on,
14
14
  once,
15
15
  parent,
16
- pointerCancel,
17
- pointerDown,
18
- pointerUp,
19
16
  removeClass,
20
17
  toFloat,
21
18
  } from 'uikit-util';
@@ -23,11 +20,13 @@ import { awaitFrame } from '../util/await';
23
20
  import { preventBackgroundScroll } from '../util/scroll';
24
21
  import Class from './class';
25
22
  import Container from './container';
26
- import { maybeDefaultPreventClick } from './event';
23
+ import { maybeDefaultPreventClick, onEscape, onOutsidePointer } from './event';
27
24
  import Togglable from './togglable';
28
25
 
29
26
  const active = [];
30
27
 
28
+ const pendingReject = new WeakMap();
29
+
31
30
  export default {
32
31
  mixins: [Class, Container, Togglable],
33
32
 
@@ -230,10 +229,13 @@ export default {
230
229
  };
231
230
 
232
231
  function animate(el, show, { transitionElement, _toggle }) {
232
+ let rejectAnimation;
233
+
233
234
  return new Promise((resolve, reject) =>
234
235
  once(el, 'show hide', () => {
235
- el._reject?.();
236
- el._reject = reject;
236
+ pendingReject.get(el)?.();
237
+ rejectAnimation = reject;
238
+ pendingReject.set(el, reject);
237
239
 
238
240
  _toggle(el, show);
239
241
 
@@ -257,7 +259,11 @@ function animate(el, show, { transitionElement, _toggle }) {
257
259
  toMs(css(transitionElement, 'transitionDuration')),
258
260
  );
259
261
  }),
260
- ).then(() => delete el._reject);
262
+ ).then(() => {
263
+ if (pendingReject.get(el) === rejectAnimation) {
264
+ pendingReject.delete(el);
265
+ }
266
+ });
261
267
  }
262
268
 
263
269
  function toMs(time) {
@@ -282,35 +288,21 @@ function preventBackgroundFocus(modal) {
282
288
  }
283
289
 
284
290
  function listenForBackgroundClose(modal) {
285
- return on(document, pointerDown, ({ target }) => {
286
- if (
287
- last(active) !== modal ||
288
- (modal.overlay && !modal.$el.contains(target)) ||
289
- !modal.panel ||
290
- modal.panel.contains(target)
291
- ) {
292
- return;
293
- }
294
-
295
- once(
296
- document,
297
- `${pointerUp} ${pointerCancel} scroll`,
298
- ({ defaultPrevented, type, target: newTarget }) => {
299
- if (!defaultPrevented && type === pointerUp && target === newTarget) {
300
- modal.hide();
301
- }
302
- },
303
- true,
304
- );
305
- });
291
+ return onOutsidePointer(
292
+ () => modal.hide(),
293
+ (target) =>
294
+ (!modal.overlay || modal.$el.contains(target)) &&
295
+ Boolean(modal.panel) &&
296
+ !modal.panel.contains(target),
297
+ () => last(active) === modal,
298
+ );
306
299
  }
307
300
 
308
301
  function listenForEscClose(modal) {
309
- return on(document, 'keydown', (e) => {
310
- if (e.keyCode === 27 && last(active) === modal) {
311
- modal.hide();
312
- }
313
- });
302
+ return onEscape(
303
+ () => modal.hide(),
304
+ () => last(active) === modal,
305
+ );
314
306
  }
315
307
 
316
308
  function setAriaExpanded(el, toggled) {
@@ -152,16 +152,10 @@ a:has(.uk-text-middle),
152
152
  ========================================================================== */
153
153
 
154
154
  /*
155
- * 1. Add the correct text decoration in Edge.
156
- * 2. The shorthand declaration `underline dotted` is not supported in Safari.
155
+ * Add the correct text decoration.
157
156
  */
158
157
 
159
- abbr[title] {
160
- /* 1 */
161
- text-decoration: underline dotted;
162
- /* 2 */
163
- -webkit-text-decoration-style: dotted;
164
- }
158
+ abbr[title] { text-decoration: underline dotted; }
165
159
 
166
160
  /*
167
161
  * Add the correct font weight in Chrome, Edge, and Safari.
@@ -508,7 +502,6 @@ blockquote footer {
508
502
  pre {
509
503
  font: @base-pre-font-size e("/") @base-pre-line-height @base-pre-font-family;
510
504
  color: @base-pre-color;
511
- -moz-tab-size: 4;
512
505
  tab-size: 4;
513
506
  /* 1 */
514
507
  overflow: auto;
@@ -536,32 +529,6 @@ pre code { font-family: @base-pre-font-family; }
536
529
  }
537
530
 
538
531
 
539
- /* HTML5 elements
540
- ========================================================================== */
541
-
542
- /*
543
- * 1. Add the correct display in Edge, IE 10+, and Firefox.
544
- * 2. Add the correct display in IE.
545
- */
546
-
547
- details, /* 1 */
548
- main { /* 2 */
549
- display: block;
550
- }
551
-
552
- /*
553
- * Add the correct display in all browsers.
554
- */
555
-
556
- summary { display: list-item; }
557
-
558
- /*
559
- * Add the correct display in IE.
560
- */
561
-
562
- template { display: none; }
563
-
564
-
565
532
  /* Pass media breakpoints to JS
566
533
  ========================================================================== */
567
534
 
@@ -127,14 +127,6 @@
127
127
 
128
128
  .uk-button:not(:disabled) { cursor: pointer; }
129
129
 
130
- /*
131
- * Remove the inner border and padding in Firefox.
132
- */
133
-
134
- .uk-button::-moz-focus-inner {
135
- border: 0;
136
- padding: 0;
137
- }
138
130
 
139
131
  /* Hover */
140
132
  .uk-button:hover {
@@ -208,12 +208,6 @@
208
208
  padding: 0;
209
209
  }
210
210
 
211
- /*
212
- * Removes placeholder transparency in Firefox.
213
- */
214
-
215
- .uk-input::-moz-placeholder,
216
- .uk-textarea::-moz-placeholder { opacity: 1; }
217
211
 
218
212
  /*
219
213
  * Improves consistency of cursor style for clickable elements
@@ -83,14 +83,6 @@
83
83
  /* Required for `button`. */
84
84
  button.uk-icon:not(:disabled) { cursor: pointer; }
85
85
 
86
- /*
87
- * Remove the inner border and padding in Firefox.
88
- */
89
-
90
- .uk-icon::-moz-focus-inner {
91
- border: 0;
92
- padding: 0;
93
- }
94
86
 
95
87
  /*
96
88
  * Set the fill and stroke color of all SVG elements to the current text color
@@ -99,11 +99,6 @@
99
99
  .uk-search-input::-webkit-search-cancel-button,
100
100
  .uk-search-input::-webkit-search-decoration { -webkit-appearance: none; }
101
101
 
102
- /*
103
- * Removes placeholder transparency in Firefox.
104
- */
105
-
106
- .uk-search-input::-moz-placeholder { opacity: 1; }
107
102
 
108
103
  /*
109
104
  * 1. Define consistent box sizing.
@@ -147,9 +147,8 @@
147
147
 
148
148
  /*
149
149
  * Overflow fade
150
- * 1. Overflow
151
- * 2. Mask
152
- * 3. Hide scrollbar
150
+ * 1. Mask
151
+ * 2. Hide scrollbar
153
152
  */
154
153
 
155
154
  @property --uk-overflow-fade-start-opacity {
@@ -177,9 +176,6 @@
177
176
  .uk-overflow-fade-horizontal,
178
177
  .uk-overflow-fade-vertical {
179
178
  /* 1 */
180
- -webkit-overflow-scrolling: touch;
181
- -ms-overflow-style: -ms-autohiding-scrollbar;
182
- /* 2 */
183
179
  mask-image: linear-gradient(
184
180
  to var(--uk-overflow-fade-direction),
185
181
  rgba(0,0,0,var(--uk-overflow-fade-start-opacity)),
@@ -187,7 +183,7 @@
187
183
  #000 ~'calc(100% - @{overflow-fade-size})',
188
184
  rgba(0,0,0,var(--uk-overflow-fade-end-opacity))
189
185
  );
190
- /* 3 */
186
+ /* 2 */
191
187
  scrollbar-width: none;
192
188
  }
193
189
 
@@ -93,16 +93,10 @@ a:has(.uk-text-middle),
93
93
  ========================================================================== */
94
94
 
95
95
  /*
96
- * 1. Add the correct text decoration in Edge.
97
- * 2. The shorthand declaration `underline dotted` is not supported in Safari.
96
+ * Add the correct text decoration.
98
97
  */
99
98
 
100
- abbr[title] {
101
- /* 1 */
102
- text-decoration: underline dotted;
103
- /* 2 */
104
- -webkit-text-decoration-style: dotted;
105
- }
99
+ abbr[title] { text-decoration: underline dotted; }
106
100
 
107
101
  /*
108
102
  * Add the correct font weight in Chrome, Edge, and Safari.
@@ -449,7 +443,6 @@ blockquote footer {
449
443
  pre {
450
444
  font: $base-pre-font-size string.unquote("/") $base-pre-line-height $base-pre-font-family;
451
445
  color: $base-pre-color;
452
- -moz-tab-size: 4;
453
446
  tab-size: 4;
454
447
  /* 1 */
455
448
  overflow: auto;
@@ -477,32 +470,6 @@ pre code { font-family: $base-pre-font-family; }
477
470
  }
478
471
 
479
472
 
480
- /* HTML5 elements
481
- ========================================================================== */
482
-
483
- /*
484
- * 1. Add the correct display in Edge, IE 10+, and Firefox.
485
- * 2. Add the correct display in IE.
486
- */
487
-
488
- details, /* 1 */
489
- main { /* 2 */
490
- display: block;
491
- }
492
-
493
- /*
494
- * Add the correct display in all browsers.
495
- */
496
-
497
- summary { display: list-item; }
498
-
499
- /*
500
- * Add the correct display in IE.
501
- */
502
-
503
- template { display: none; }
504
-
505
-
506
473
  /* Pass media breakpoints to JS
507
474
  ========================================================================== */
508
475
 
@@ -85,14 +85,6 @@
85
85
 
86
86
  .uk-button:not(:disabled) { cursor: pointer; }
87
87
 
88
- /*
89
- * Remove the inner border and padding in Firefox.
90
- */
91
-
92
- .uk-button::-moz-focus-inner {
93
- border: 0;
94
- padding: 0;
95
- }
96
88
 
97
89
  /* Hover */
98
90
  .uk-button:hover {
@@ -148,12 +148,6 @@
148
148
  padding: 0;
149
149
  }
150
150
 
151
- /*
152
- * Removes placeholder transparency in Firefox.
153
- */
154
-
155
- .uk-input::-moz-placeholder,
156
- .uk-textarea::-moz-placeholder { opacity: 1; }
157
151
 
158
152
  /*
159
153
  * Improves consistency of cursor style for clickable elements
@@ -71,14 +71,6 @@
71
71
  /* Required for `button`. */
72
72
  button.uk-icon:not(:disabled) { cursor: pointer; }
73
73
 
74
- /*
75
- * Remove the inner border and padding in Firefox.
76
- */
77
-
78
- .uk-icon::-moz-focus-inner {
79
- border: 0;
80
- padding: 0;
81
- }
82
74
 
83
75
  /*
84
76
  * Set the fill and stroke color of all SVG elements to the current text color
@@ -66,11 +66,6 @@
66
66
  .uk-search-input::-webkit-search-cancel-button,
67
67
  .uk-search-input::-webkit-search-decoration { -webkit-appearance: none; }
68
68
 
69
- /*
70
- * Removes placeholder transparency in Firefox.
71
- */
72
-
73
- .uk-search-input::-moz-placeholder { opacity: 1; }
74
69
 
75
70
  /*
76
71
  * 1. Define consistent box sizing.
@@ -130,9 +130,8 @@
130
130
 
131
131
  /*
132
132
  * Overflow fade
133
- * 1. Overflow
134
- * 2. Mask
135
- * 3. Hide scrollbar
133
+ * 1. Mask
134
+ * 2. Hide scrollbar
136
135
  */
137
136
 
138
137
  @property --uk-overflow-fade-start-opacity {
@@ -160,9 +159,6 @@
160
159
  .uk-overflow-fade-horizontal,
161
160
  .uk-overflow-fade-vertical {
162
161
  /* 1 */
163
- -webkit-overflow-scrolling: touch;
164
- -ms-overflow-style: -ms-autohiding-scrollbar;
165
- /* 2 */
166
162
  mask-image: linear-gradient(
167
163
  to var(--uk-overflow-fade-direction),
168
164
  rgba(0,0,0,var(--uk-overflow-fade-start-opacity)),
@@ -170,7 +166,7 @@
170
166
  #000 string.unquote('calc(100% - #{$overflow-fade-size})'),
171
167
  rgba(0,0,0,var(--uk-overflow-fade-end-opacity))
172
168
  );
173
- /* 3 */
169
+ /* 2 */
174
170
  scrollbar-width: none;
175
171
  }
176
172