uikit 3.13.8-dev.f030a8b39 → 3.13.8-dev.fd15ccb29

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 (61) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/css/uikit-core-rtl.css +4 -7
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +4 -7
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +7 -10
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +7 -10
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +5 -2
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +5 -2
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +13 -10
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +13 -10
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +1 -1
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +13 -10
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +1 -1
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +69 -56
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +73 -57
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/hooks.js +1 -1
  44. package/src/js/components/lightbox-panel.js +4 -1
  45. package/src/js/core/accordion.js +1 -1
  46. package/src/js/core/height-match.js +7 -15
  47. package/src/js/core/scrollspy.js +45 -26
  48. package/src/js/core/sticky.js +2 -2
  49. package/src/js/core/toggle.js +1 -1
  50. package/src/js/mixin/media.js +12 -9
  51. package/src/less/components/icon.less +3 -0
  52. package/src/less/components/navbar.less +0 -7
  53. package/src/less/theme/dropdown.less +2 -0
  54. package/src/less/theme/nav.less +2 -0
  55. package/src/less/theme/navbar.less +2 -0
  56. package/src/scss/components/icon.scss +3 -0
  57. package/src/scss/components/navbar.scss +0 -7
  58. package/src/scss/theme/dropdown.scss +2 -0
  59. package/src/scss/theme/nav.scss +2 -0
  60. package/src/scss/theme/navbar.scss +2 -0
  61. package/src/scss/variables-theme.scss +3 -3
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.13.8-dev.f030a8b39",
5
+ "version": "3.13.8-dev.fd15ccb29",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -105,7 +105,7 @@ export default function (UIkit) {
105
105
  const {
106
106
  $options: { computed },
107
107
  } = this;
108
- const values = { ...this._computed };
108
+ const values = { ...(initial ? {} : this._computed) };
109
109
  this._computed = {};
110
110
 
111
111
  for (const key in computed) {
@@ -215,7 +215,10 @@ export default {
215
215
  };
216
216
 
217
217
  // Image
218
- if (type === 'image' || src.match(/\.(avif|jpe?g|a?png|gif|svg|webp)($|\?)/i)) {
218
+ if (
219
+ type === 'image' ||
220
+ src.match(/\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|\?)/i)
221
+ ) {
219
222
  try {
220
223
  const { width, height } = await getImage(src, attrs.srcset, attrs.size);
221
224
  this.setItem(item, createEl('img', { src, width, height, alt, ...attrs }));
@@ -48,7 +48,7 @@ export default {
48
48
  computed: {
49
49
  items: {
50
50
  get({ targets }, $el) {
51
- return $$(targets, $el);
51
+ return $$(targets, $el).filter((el) => $(this.content, el));
52
52
  },
53
53
 
54
54
  watch(items, prev) {
@@ -1,6 +1,6 @@
1
1
  import Resize from '../mixin/resize';
2
2
  import { getRows } from './margin';
3
- import { $$, boxModelAdjust, css, dimensions, isVisible, toFloat } from 'uikit-util';
3
+ import { $$, boxModelAdjust, css, dimensions, isVisible } from 'uikit-util';
4
4
 
5
5
  export default {
6
6
  mixins: [Resize],
@@ -56,22 +56,14 @@ function match(elements) {
56
56
  return { heights: [''], elements };
57
57
  }
58
58
 
59
+ css(elements, 'minHeight', '');
59
60
  let heights = elements.map(getHeight);
60
- let max = Math.max(...heights);
61
- const hasMinHeight = elements.some((el) => el.style.minHeight);
62
- const hasShrunk = elements.some((el, i) => !el.style.minHeight && heights[i] < max);
63
-
64
- if (hasMinHeight && hasShrunk) {
65
- css(elements, 'minHeight', '');
66
- heights = elements.map(getHeight);
67
- max = Math.max(...heights);
68
- }
69
-
70
- heights = elements.map((el, i) =>
71
- heights[i] === max && toFloat(el.style.minHeight).toFixed(2) !== max.toFixed(2) ? '' : max
72
- );
61
+ const max = Math.max(...heights);
73
62
 
74
- return { heights, elements };
63
+ return {
64
+ heights: elements.map((el, i) => (heights[i].toFixed(2) === max.toFixed(2) ? '' : max)),
65
+ elements,
66
+ };
75
67
  }
76
68
 
77
69
  function getHeight(element) {
@@ -4,15 +4,15 @@ import {
4
4
  css,
5
5
  filter,
6
6
  data as getData,
7
- isInView,
7
+ observeIntersection,
8
8
  once,
9
9
  removeClass,
10
10
  removeClasses,
11
11
  toggleClass,
12
+ toPx,
12
13
  trigger,
13
14
  } from 'uikit-util';
14
15
 
15
- const stateKey = '_ukScrollspy';
16
16
  export default {
17
17
  mixins: [Scroll],
18
18
 
@@ -45,43 +45,64 @@ export default {
45
45
  return target ? $$(target, $el) : [$el];
46
46
  },
47
47
 
48
- watch(elements) {
48
+ watch(elements, prev) {
49
49
  if (this.hidden) {
50
50
  css(filter(elements, `:not(.${this.inViewClass})`), 'visibility', 'hidden');
51
51
  }
52
+
53
+ if (prev) {
54
+ this.$reset();
55
+ }
52
56
  },
53
57
 
54
58
  immediate: true,
55
59
  },
56
60
  },
57
61
 
62
+ connected() {
63
+ this._data.elements = new Map();
64
+ this.registerObserver(
65
+ observeIntersection(
66
+ this.elements,
67
+ (records) => {
68
+ const elements = this._data.elements;
69
+ for (const { target: el, isIntersecting } of records) {
70
+ if (!elements.has(el)) {
71
+ elements.set(el, {
72
+ cls: getData(el, 'uk-scrollspy-class') || this.cls,
73
+ });
74
+ }
75
+
76
+ const state = elements.get(el);
77
+ if (!this.repeat && state.show) {
78
+ continue;
79
+ }
80
+
81
+ state.show = isIntersecting;
82
+ }
83
+
84
+ this.$emit();
85
+ },
86
+ {
87
+ rootMargin: `${toPx(this.offsetTop, 'height') - 1}px ${
88
+ toPx(this.offsetLeft, 'width') - 1
89
+ }px`,
90
+ },
91
+ false
92
+ )
93
+ );
94
+ },
95
+
58
96
  disconnected() {
59
- for (const el of this.elements) {
60
- removeClass(el, this.inViewClass, el[stateKey]?.cls || '');
61
- delete el[stateKey];
97
+ for (const [el, state] of this._data.elements.entries()) {
98
+ removeClass(el, this.inViewClass, state?.cls || '');
62
99
  }
63
100
  },
64
101
 
65
102
  update: [
66
103
  {
67
- read() {
68
- for (const el of this.elements) {
69
- if (!el[stateKey]) {
70
- el[stateKey] = { cls: getData(el, 'uk-scrollspy-class') || this.cls };
71
- }
72
-
73
- if (!this.repeat && el[stateKey].show) {
74
- continue;
75
- }
76
-
77
- el[stateKey].show = isInView(el, this.offsetTop, this.offsetLeft);
78
- }
79
- },
80
-
81
104
  write(data) {
82
- for (const el of this.elements) {
83
- const state = el[stateKey];
84
-
105
+ for (const [el, state] of data.elements.entries()) {
85
106
  if (state.show && !state.inview && !state.queued) {
86
107
  state.queued = true;
87
108
 
@@ -99,14 +120,12 @@ export default {
99
120
  }
100
121
  }
101
122
  },
102
-
103
- events: ['scroll', 'resize'],
104
123
  },
105
124
  ],
106
125
 
107
126
  methods: {
108
127
  toggle(el, inview) {
109
- const state = el[stateKey];
128
+ const state = this._data.elements.get(el);
110
129
 
111
130
  state.off?.();
112
131
 
@@ -137,13 +137,13 @@ export default {
137
137
  return false;
138
138
  }
139
139
 
140
- const hide = this.isActive && types.has('resize');
140
+ const hide = this.active && types.has('resize');
141
141
  if (hide) {
142
142
  css(this.selTarget, 'transition', '0s');
143
143
  this.hide();
144
144
  }
145
145
 
146
- if (!this.isActive) {
146
+ if (!this.active) {
147
147
  height = getOffset(this.$el).height;
148
148
  margin = css(this.$el, 'margin');
149
149
  }
@@ -124,7 +124,7 @@ export default {
124
124
  }
125
125
 
126
126
  // Skip if state does not change e.g. hover + focus received
127
- if (this._showState && show === (expanded !== this._showState)) {
127
+ if (this._showState && show && expanded !== this._showState) {
128
128
  // Ensure reset if state has changed through click
129
129
  if (!show) {
130
130
  this._showState = null;
@@ -20,16 +20,19 @@ export default {
20
20
 
21
21
  connected() {
22
22
  const media = toMedia(this.media);
23
- this.mediaObj = window.matchMedia(media);
24
- const handler = () => {
25
- this.matchMedia = this.mediaObj.matches;
26
- trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
27
- };
28
- this.offMediaObj = on(this.mediaObj, 'change', () => {
23
+ this.matchMedia = true;
24
+ if (media) {
25
+ this.mediaObj = window.matchMedia(media);
26
+ const handler = () => {
27
+ this.matchMedia = this.mediaObj.matches;
28
+ trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
29
+ };
30
+ this.offMediaObj = on(this.mediaObj, 'change', () => {
31
+ handler();
32
+ this.$emit('resize');
33
+ });
29
34
  handler();
30
- this.$emit('resize');
31
- });
32
- handler();
35
+ }
33
36
  },
34
37
 
35
38
  disconnected() {
@@ -130,10 +130,13 @@ button.uk-icon:not(:disabled) { cursor: pointer; }
130
130
 
131
131
  /*
132
132
  * Link
133
+ * 1. Allow text within link
133
134
  */
134
135
 
135
136
  .uk-icon-link {
136
137
  color: @icon-link-color;
138
+ /* 1 */
139
+ text-decoration: none !important;
137
140
  .hook-icon-link();
138
141
  }
139
142
 
@@ -394,7 +394,6 @@
394
394
  * 1. Set position
395
395
  * 2. Bottom padding for dropbar
396
396
  * 3. Horizontal padding
397
- * 4. Reset padding if aligned to boundary
398
397
  */
399
398
 
400
399
  .uk-navbar-dropdown-dropbar {
@@ -408,12 +407,6 @@
408
407
  .hook-navbar-dropdown-dropbar();
409
408
  }
410
409
 
411
- /* 4 */
412
- .uk-navbar-dropdown-dropbar.uk-navbar-dropdown-boundary {
413
- padding-left: 0;
414
- padding-right: 0;
415
- }
416
-
417
410
 
418
411
  /* Dropdown Nav
419
412
  * Adopts `uk-nav`
@@ -10,6 +10,8 @@
10
10
  @dropdown-padding: 25px;
11
11
  @dropdown-background: @global-background;
12
12
 
13
+ @dropdown-nav-subtitle-font-size: 12px;
14
+
13
15
  //
14
16
  // New
15
17
  //
@@ -7,6 +7,8 @@
7
7
  // Variables
8
8
  // ========================================================================
9
9
 
10
+ @nav-default-subtitle-font-size: 12px;
11
+
10
12
  //
11
13
  // New
12
14
  //
@@ -14,6 +14,8 @@
14
14
  @navbar-dropdown-background: @global-background;
15
15
  @navbar-dropdown-grid-gutter-horizontal: (@navbar-dropdown-padding * 2);
16
16
 
17
+ @navbar-dropdown-nav-subtitle-font-size: 12px;
18
+
17
19
  //
18
20
  // New
19
21
  //
@@ -130,10 +130,13 @@ button.uk-icon:not(:disabled) { cursor: pointer; }
130
130
 
131
131
  /*
132
132
  * Link
133
+ * 1. Allow text within link
133
134
  */
134
135
 
135
136
  .uk-icon-link {
136
137
  color: $icon-link-color;
138
+ /* 1 */
139
+ text-decoration: none !important;
137
140
  @if(mixin-exists(hook-icon-link)) {@include hook-icon-link();}
138
141
  }
139
142
 
@@ -394,7 +394,6 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
394
394
  * 1. Set position
395
395
  * 2. Bottom padding for dropbar
396
396
  * 3. Horizontal padding
397
- * 4. Reset padding if aligned to boundary
398
397
  */
399
398
 
400
399
  .uk-navbar-dropdown-dropbar {
@@ -408,12 +407,6 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
408
407
  @if(mixin-exists(hook-navbar-dropdown-dropbar)) {@include hook-navbar-dropdown-dropbar();}
409
408
  }
410
409
 
411
- /* 4 */
412
- .uk-navbar-dropdown-dropbar.uk-navbar-dropdown-boundary {
413
- padding-left: 0;
414
- padding-right: 0;
415
- }
416
-
417
410
 
418
411
  /* Dropdown Nav
419
412
  * Adopts `uk-nav`
@@ -10,6 +10,8 @@
10
10
  $dropdown-padding: 25px !default;
11
11
  $dropdown-background: $global-background !default;
12
12
 
13
+ $dropdown-nav-subtitle-font-size: 12px !default;
14
+
13
15
  //
14
16
  // New
15
17
  //
@@ -7,6 +7,8 @@
7
7
  // Variables
8
8
  // ========================================================================
9
9
 
10
+ $nav-default-subtitle-font-size: 12px !default;
11
+
10
12
  //
11
13
  // New
12
14
  //
@@ -14,6 +14,8 @@ $navbar-dropdown-padding: 25px !default;
14
14
  $navbar-dropdown-background: $global-background !default;
15
15
  $navbar-dropdown-grid-gutter-horizontal: ($navbar-dropdown-padding * 2) !default;
16
16
 
17
+ $navbar-dropdown-nav-subtitle-font-size: 12px !default;
18
+
17
19
  //
18
20
  // New
19
21
  //
@@ -376,7 +376,7 @@ $dropdown-background: $global-background !default;
376
376
  $dropdown-color: $global-color !default;
377
377
  $dropdown-nav-item-color: $global-muted-color !default;
378
378
  $dropdown-nav-item-hover-color: $global-color !default;
379
- $dropdown-nav-subtitle-font-size: $global-small-font-size !default;
379
+ $dropdown-nav-subtitle-font-size: 12px !default;
380
380
  $dropdown-nav-header-color: $global-emphasis-color !default;
381
381
  $dropdown-nav-divider-border-width: $global-border-width !default;
382
382
  $dropdown-nav-divider-border: $global-border !default;
@@ -685,7 +685,7 @@ $nav-divider-margin-horizontal: 0 !default;
685
685
  $nav-default-item-color: $global-muted-color !default;
686
686
  $nav-default-item-hover-color: $global-color !default;
687
687
  $nav-default-item-active-color: $global-emphasis-color !default;
688
- $nav-default-subtitle-font-size: $global-small-font-size !default;
688
+ $nav-default-subtitle-font-size: 12px !default;
689
689
  $nav-default-header-color: $global-emphasis-color !default;
690
690
  $nav-default-divider-border-width: $global-border-width !default;
691
691
  $nav-default-divider-border: $global-border !default;
@@ -755,7 +755,7 @@ $navbar-dropdown-dropbar-padding-horizontal: $navbar-nav-item-padding-horizontal
755
755
  $navbar-dropdown-nav-item-color: $global-muted-color !default;
756
756
  $navbar-dropdown-nav-item-hover-color: $global-color !default;
757
757
  $navbar-dropdown-nav-item-active-color: $global-emphasis-color !default;
758
- $navbar-dropdown-nav-subtitle-font-size: $global-small-font-size !default;
758
+ $navbar-dropdown-nav-subtitle-font-size: 12px !default;
759
759
  $navbar-dropdown-nav-header-color: $global-emphasis-color !default;
760
760
  $navbar-dropdown-nav-divider-border-width: $global-border-width !default;
761
761
  $navbar-dropdown-nav-divider-border: $global-border !default;