uikit 3.16.4-dev.fd2458e3b → 3.16.5-dev.dda1f1b31

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 (120) hide show
  1. package/.eslintrc.json +1 -0
  2. package/CHANGELOG.md +9 -1
  3. package/build/build.js +5 -4
  4. package/build/icons.js +2 -1
  5. package/build/less.js +2 -11
  6. package/build/prefix.js +2 -1
  7. package/build/release.js +4 -3
  8. package/build/scope.js +2 -1
  9. package/build/scss.js +2 -1
  10. package/build/util.js +3 -3
  11. package/dist/css/uikit-core-rtl.css +1 -1
  12. package/dist/css/uikit-core-rtl.min.css +1 -1
  13. package/dist/css/uikit-core.css +1 -1
  14. package/dist/css/uikit-core.min.css +1 -1
  15. package/dist/css/uikit-rtl.css +1 -1
  16. package/dist/css/uikit-rtl.min.css +1 -1
  17. package/dist/css/uikit.css +1 -1
  18. package/dist/css/uikit.min.css +1 -1
  19. package/dist/js/components/countdown.js +12 -14
  20. package/dist/js/components/countdown.min.js +1 -1
  21. package/dist/js/components/filter.js +506 -22
  22. package/dist/js/components/filter.min.js +1 -1
  23. package/dist/js/components/lightbox-panel.js +2601 -310
  24. package/dist/js/components/lightbox-panel.min.js +1 -1
  25. package/dist/js/components/lightbox.js +2612 -323
  26. package/dist/js/components/lightbox.min.js +1 -1
  27. package/dist/js/components/notification.js +1 -1
  28. package/dist/js/components/notification.min.js +1 -1
  29. package/dist/js/components/parallax.js +466 -43
  30. package/dist/js/components/parallax.min.js +1 -1
  31. package/dist/js/components/slider-parallax.js +184 -2
  32. package/dist/js/components/slider-parallax.min.js +1 -1
  33. package/dist/js/components/slider.js +2345 -49
  34. package/dist/js/components/slider.min.js +1 -1
  35. package/dist/js/components/slideshow-parallax.js +184 -2
  36. package/dist/js/components/slideshow-parallax.min.js +1 -1
  37. package/dist/js/components/slideshow.js +2339 -49
  38. package/dist/js/components/slideshow.min.js +1 -1
  39. package/dist/js/components/sortable.js +472 -1
  40. package/dist/js/components/sortable.min.js +1 -1
  41. package/dist/js/components/tooltip.js +2298 -11
  42. package/dist/js/components/tooltip.min.js +1 -1
  43. package/dist/js/components/upload.js +1 -1
  44. package/dist/js/components/upload.min.js +1 -1
  45. package/dist/js/uikit-core.js +951 -931
  46. package/dist/js/uikit-core.min.js +1 -1
  47. package/dist/js/uikit-icons.js +153 -152
  48. package/dist/js/uikit-icons.min.js +1 -1
  49. package/dist/js/uikit.js +979 -954
  50. package/dist/js/uikit.min.js +1 -1
  51. package/package.json +2 -2
  52. package/src/images/icons/mastodon.svg +3 -0
  53. package/src/js/api/app.js +12 -0
  54. package/src/js/api/boot.js +64 -43
  55. package/src/js/api/component.js +60 -61
  56. package/src/js/api/computed.js +39 -0
  57. package/src/js/api/events.js +45 -0
  58. package/src/js/api/global.js +58 -56
  59. package/src/js/api/hooks.js +35 -114
  60. package/src/js/api/index.js +8 -24
  61. package/src/js/api/instance.js +55 -55
  62. package/src/js/api/log.js +10 -0
  63. package/src/js/api/observables.js +125 -0
  64. package/src/js/api/observer.js +76 -0
  65. package/src/js/{util → api}/options.js +38 -1
  66. package/src/js/api/props.js +102 -0
  67. package/src/js/api/state.js +26 -280
  68. package/src/js/api/update.js +77 -0
  69. package/src/js/api/watch.js +34 -0
  70. package/src/js/components/countdown.js +14 -16
  71. package/src/js/components/filter.js +18 -24
  72. package/src/js/components/internal/slider-preload.js +5 -6
  73. package/src/js/components/lightbox-panel.js +1 -1
  74. package/src/js/components/lightbox.js +11 -23
  75. package/src/js/components/parallax.js +8 -6
  76. package/src/js/components/slider.js +10 -0
  77. package/src/js/components/tooltip.js +2 -1
  78. package/src/js/core/accordion.js +5 -6
  79. package/src/js/core/cover.js +9 -9
  80. package/src/js/core/drop.js +13 -6
  81. package/src/js/core/dropnav.js +1 -1
  82. package/src/js/core/grid.js +2 -5
  83. package/src/js/core/height-match.js +9 -16
  84. package/src/js/core/height-viewport.js +5 -7
  85. package/src/js/core/img.js +12 -19
  86. package/src/js/core/leader.js +4 -2
  87. package/src/js/core/margin.js +11 -21
  88. package/src/js/core/modal.js +1 -1
  89. package/src/js/core/offcanvas.js +6 -2
  90. package/src/js/core/overflow-auto.js +5 -5
  91. package/src/js/core/responsive.js +5 -7
  92. package/src/js/core/scroll.js +19 -10
  93. package/src/js/core/scrollspy-nav.js +6 -5
  94. package/src/js/core/scrollspy.js +27 -36
  95. package/src/js/core/sticky.js +12 -10
  96. package/src/js/core/svg.js +4 -2
  97. package/src/js/core/switcher.js +11 -9
  98. package/src/js/core/toggle.js +4 -4
  99. package/src/js/core/video.js +6 -14
  100. package/src/js/mixin/modal.js +2 -1
  101. package/src/js/mixin/parallax.js +1 -1
  102. package/src/js/mixin/slider-nav.js +2 -1
  103. package/src/js/mixin/slider.js +9 -3
  104. package/src/js/util/filter.js +13 -0
  105. package/src/js/util/index.js +0 -1
  106. package/src/js/util/keys.js +11 -0
  107. package/src/js/util/lang.js +7 -7
  108. package/src/js/util/observer.js +4 -2
  109. package/src/js/util/scroll.js +42 -0
  110. package/src/js/util/svg.js +16 -0
  111. package/src/js/util/viewport.js +1 -1
  112. package/src/scss/mixins-theme.scss +1640 -1596
  113. package/src/scss/mixins.scss +1370 -1370
  114. package/src/scss/variables-theme.scss +1255 -1255
  115. package/src/scss/variables.scss +1113 -1113
  116. package/src/js/mixin/lazyload.js +0 -27
  117. package/src/js/mixin/resize.js +0 -11
  118. package/src/js/mixin/scroll.js +0 -32
  119. package/src/js/mixin/swipe.js +0 -72
  120. package/src/js/mixin/utils.js +0 -91
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.16.4-dev.fd2458e3b",
5
+ "version": "3.16.5-dev.dda1f1b31",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -30,7 +30,7 @@
30
30
  "eslint": "^8.35.0",
31
31
  "eslint-config-prettier": "^8.6.0",
32
32
  "fs-extra": "^11.1.0",
33
- "glob": "^8.1.0",
33
+ "glob": "^9.2.1",
34
34
  "inquirer": "^9.1.4",
35
35
  "less": "^4.1.3",
36
36
  "minimist": "^1.2.8",
@@ -0,0 +1,3 @@
1
+ <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="m18.5,6.87c0-3.95-2.59-5.11-2.59-5.11-1.31-.6-3.55-.85-5.88-.87h-.06c-2.33.02-4.57.27-5.88.87,0,0-2.59,1.16-2.59,5.11,0,.91-.02,1.99.01,3.14.09,3.87.71,7.68,4.28,8.62,1.65.44,3.06.53,4.2.47,2.07-.11,3.23-.74,3.23-.74l-.07-1.5s-1.48.47-3.14.41c-1.64-.06-3.38-.18-3.64-2.2-.02-.18-.04-.37-.04-.57,0,0,1.61.39,3.66.49,1.25.06,2.42-.07,3.61-.22,2.28-.27,4.27-1.68,4.52-2.97.39-2.02.36-4.94.36-4.94Zm-3.05,5.09h-1.9v-4.65c0-.98-.41-1.48-1.24-1.48-.91,0-1.37.59-1.37,1.76v2.54h-1.89v-2.54c0-1.17-.46-1.76-1.37-1.76-.82,0-1.24.5-1.24,1.48v4.65h-1.9v-4.79c0-.98.25-1.76.75-2.33.52-.58,1.19-.87,2.03-.87.97,0,1.71.37,2.19,1.12l.47.79.47-.79c.49-.75,1.22-1.12,2.19-1.12.84,0,1.51.29,2.03.87.5.58.75,1.35.75,2.33v4.79Z"/>
3
+ </svg>
@@ -0,0 +1,12 @@
1
+ import { init } from './state';
2
+ import * as util from '../util';
3
+
4
+ const App = function (options) {
5
+ init(this, options);
6
+ };
7
+
8
+ App.util = util;
9
+ App.options = {};
10
+ App.version = VERSION;
11
+
12
+ export default App;
@@ -1,59 +1,80 @@
1
- import { getComponentName } from './component';
2
- import { apply, hasAttr, inBrowser, trigger } from 'uikit-util';
1
+ import { callConnected, callDisconnected } from './hooks';
2
+ import { components, createComponent, getComponent, getComponents } from './component';
3
+ import { apply, hasAttr, inBrowser, isPlainObject, startsWith, trigger } from '../util';
3
4
 
4
- export default function (UIkit) {
5
- const { connect, disconnect } = UIkit;
6
-
7
- if (!inBrowser || !window.MutationObserver) {
8
- return;
5
+ export default function (App) {
6
+ if (inBrowser && window.MutationObserver) {
7
+ requestAnimationFrame(() => init(App));
9
8
  }
9
+ }
10
10
 
11
- requestAnimationFrame(function () {
12
- trigger(document, 'uikit:init', UIkit);
11
+ function init(App) {
12
+ trigger(document, 'uikit:init', App);
13
13
 
14
- if (document.body) {
15
- apply(document.body, connect);
16
- }
14
+ if (document.body) {
15
+ apply(document.body, connect);
16
+ }
17
17
 
18
- new MutationObserver((records) => records.forEach(applyChildListMutation)).observe(
19
- document,
20
- {
21
- childList: true,
22
- subtree: true,
23
- }
24
- );
25
-
26
- new MutationObserver((records) => records.forEach(applyAttributeMutation)).observe(
27
- document,
28
- {
29
- attributes: true,
30
- subtree: true,
31
- }
32
- );
33
-
34
- UIkit._initialized = true;
18
+ new MutationObserver((records) => records.forEach(applyChildListMutation)).observe(document, {
19
+ childList: true,
20
+ subtree: true,
35
21
  });
36
22
 
37
- function applyChildListMutation({ addedNodes, removedNodes }) {
38
- for (const node of addedNodes) {
39
- apply(node, connect);
40
- }
23
+ new MutationObserver((records) => records.forEach(applyAttributeMutation)).observe(document, {
24
+ attributes: true,
25
+ subtree: true,
26
+ });
27
+
28
+ App._initialized = true;
29
+ }
30
+
31
+ function applyChildListMutation({ addedNodes, removedNodes }) {
32
+ for (const node of addedNodes) {
33
+ apply(node, connect);
34
+ }
35
+
36
+ for (const node of removedNodes) {
37
+ apply(node, disconnect);
38
+ }
39
+ }
40
+
41
+ function applyAttributeMutation({ target, attributeName }) {
42
+ const name = getComponentName(attributeName);
41
43
 
42
- for (const node of removedNodes) {
43
- apply(node, disconnect);
44
+ if (name) {
45
+ if (hasAttr(target, attributeName)) {
46
+ createComponent(name, target);
47
+ return;
44
48
  }
49
+
50
+ getComponent(target, name)?.$destroy();
51
+ }
52
+ }
53
+
54
+ function connect(node) {
55
+ const components = getComponents(node);
56
+ for (const name in getComponents(node)) {
57
+ callConnected(components[name]);
45
58
  }
46
59
 
47
- function applyAttributeMutation({ target, attributeName }) {
60
+ for (const attributeName of node.getAttributeNames()) {
48
61
  const name = getComponentName(attributeName);
62
+ name && createComponent(name, node);
63
+ }
64
+ }
49
65
 
50
- if (name) {
51
- if (hasAttr(target, attributeName)) {
52
- UIkit[name](target);
53
- return;
54
- }
66
+ function disconnect(node) {
67
+ const components = getComponents(node);
68
+ for (const name in getComponents(node)) {
69
+ callDisconnected(components[name]);
70
+ }
71
+ }
55
72
 
56
- UIkit.getComponent(target, name)?.$destroy();
57
- }
73
+ function getComponentName(attribute) {
74
+ if (startsWith(attribute, 'data-')) {
75
+ attribute = attribute.slice(5);
58
76
  }
77
+
78
+ const cmp = components[attribute];
79
+ return cmp && (isPlainObject(cmp) ? cmp : cmp.options).name;
59
80
  }
@@ -1,85 +1,84 @@
1
- import { $$, camelize, hyphenate, isPlainObject } from 'uikit-util';
1
+ import App from './app';
2
+ import { $$, camelize, hyphenate, isEmpty, isPlainObject } from '../util';
2
3
 
3
- const components = {};
4
- export default function (UIkit) {
5
- const { data: DATA, prefix: PREFIX } = UIkit;
4
+ const PREFIX = 'uk-';
5
+ const DATA = '__uikit__';
6
6
 
7
- UIkit.component = function (name, options) {
8
- name = hyphenate(name);
9
- const id = PREFIX + name;
7
+ export const components = {};
10
8
 
11
- if (!options) {
12
- if (isPlainObject(components[id])) {
13
- components[id] = components[`data-${id}`] = UIkit.extend(components[id]);
14
- }
9
+ export function component(name, options) {
10
+ const id = PREFIX + hyphenate(name);
15
11
 
16
- return components[id];
12
+ if (!options) {
13
+ if (isPlainObject(components[id])) {
14
+ components[id] = App.extend(components[id]);
17
15
  }
18
16
 
19
- name = camelize(name);
17
+ return components[id];
18
+ }
20
19
 
21
- UIkit[name] = function (element, data) {
22
- const component = UIkit.component(name);
20
+ name = camelize(name);
23
21
 
24
- return component.options.functional
25
- ? new component({ data: isPlainObject(element) ? element : [...arguments] })
26
- : element
27
- ? $$(element).map(init)[0]
28
- : init();
22
+ App[name] = (element, data) => createComponent(name, element, data);
29
23
 
30
- function init(element) {
31
- const instance = UIkit.getComponent(element, name);
24
+ const opt = isPlainObject(options) ? { ...options } : options.options;
32
25
 
33
- if (instance) {
34
- if (data) {
35
- instance.$destroy();
36
- } else {
37
- return instance;
38
- }
39
- }
26
+ opt.id = id;
27
+ opt.name = name;
40
28
 
41
- return new component({ el: element, data });
42
- }
43
- };
29
+ opt.install?.(App, opt, name);
44
30
 
45
- const opt = isPlainObject(options) ? { ...options } : options.options;
31
+ if (App._initialized && !opt.functional) {
32
+ requestAnimationFrame(() => createComponent(name, `[${id}],[data-${id}]`));
33
+ }
46
34
 
47
- opt.id = id;
48
- opt.name = name;
35
+ return (components[id] = opt);
36
+ }
49
37
 
50
- opt.install?.(UIkit, opt, name);
38
+ export function createComponent(name, element, data) {
39
+ const Component = component(name);
51
40
 
52
- if (UIkit._initialized && !opt.functional) {
53
- requestAnimationFrame(() => UIkit[name](`[${id}],[data-${id}]`));
54
- }
41
+ return Component.options.functional
42
+ ? new Component({ data: isPlainObject(element) ? element : [...arguments] })
43
+ : element
44
+ ? $$(element).map(init)[0]
45
+ : init();
55
46
 
56
- return (components[id] = components[`data-${id}`] = isPlainObject(options) ? opt : options);
57
- };
47
+ function init(element) {
48
+ const instance = getComponent(element, name);
58
49
 
59
- UIkit.getComponents = (element) => element?.[DATA] || {};
60
- UIkit.getComponent = (element, name) => UIkit.getComponents(element)[name];
61
-
62
- UIkit.connect = (node) => {
63
- if (node[DATA]) {
64
- for (const name in node[DATA]) {
65
- node[DATA][name]._callConnected();
50
+ if (instance) {
51
+ if (data) {
52
+ instance.$destroy();
53
+ } else {
54
+ return instance;
66
55
  }
67
56
  }
68
57
 
69
- for (const attribute of node.getAttributeNames()) {
70
- const name = getComponentName(attribute);
71
- name && UIkit[name](node);
72
- }
73
- };
58
+ return new Component({ el: element, data });
59
+ }
60
+ }
74
61
 
75
- UIkit.disconnect = (node) => {
76
- for (const name in node[DATA]) {
77
- node[DATA][name]._callDisconnected();
78
- }
79
- };
62
+ export function getComponents(element) {
63
+ return element[DATA] || {};
64
+ }
65
+
66
+ export function getComponent(element, name) {
67
+ return getComponents(element)[name];
80
68
  }
81
69
 
82
- export function getComponentName(attribute) {
83
- const cmp = components[attribute];
84
- return cmp && (isPlainObject(cmp) ? cmp : cmp.options).name;
70
+ export function attachToElement(element, instance) {
71
+ if (!element[DATA]) {
72
+ element[DATA] = {};
73
+ }
74
+
75
+ element[DATA][instance.$options.name] = instance;
76
+ }
77
+
78
+ export function detachFromElement(element, instance) {
79
+ delete element[DATA]?.[instance.$options.name];
80
+
81
+ if (!isEmpty(element[DATA])) {
82
+ delete element[DATA];
83
+ }
85
84
  }
@@ -0,0 +1,39 @@
1
+ import { hasOwn, isUndefined } from '../util';
2
+
3
+ export function initComputed(instance) {
4
+ const { computed } = instance.$options;
5
+
6
+ instance._computed = {};
7
+
8
+ if (computed) {
9
+ for (const key in computed) {
10
+ registerComputed(instance, key, computed[key]);
11
+ }
12
+ }
13
+ }
14
+
15
+ function registerComputed(instance, key, cb) {
16
+ Object.defineProperty(instance, key, {
17
+ enumerable: true,
18
+
19
+ get() {
20
+ const { _computed, $props, $el } = instance;
21
+
22
+ if (!hasOwn(_computed, key)) {
23
+ _computed[key] = (cb.get || cb).call(instance, $props, $el);
24
+ }
25
+
26
+ return _computed[key];
27
+ },
28
+
29
+ set(value) {
30
+ const { _computed } = instance;
31
+
32
+ _computed[key] = cb.set ? cb.set.call(instance, value) : value;
33
+
34
+ if (isUndefined(_computed[key])) {
35
+ delete _computed[key];
36
+ }
37
+ },
38
+ });
39
+ }
@@ -0,0 +1,45 @@
1
+ import { hasOwn, isArray, isFunction, isPlainObject, isString, on } from '../util';
2
+
3
+ export function initEvents(instance) {
4
+ instance._events = [];
5
+ for (const event of instance.$options.events || []) {
6
+ if (hasOwn(event, 'handler')) {
7
+ registerEvent(instance, event);
8
+ } else {
9
+ for (const key in event) {
10
+ registerEvent(instance, event[key], key);
11
+ }
12
+ }
13
+ }
14
+ }
15
+
16
+ export function unbindEvents(instance) {
17
+ instance._events.forEach((unbind) => unbind());
18
+ delete instance._events;
19
+ }
20
+
21
+ export function registerEvent(instance, event, key) {
22
+ let { name, el, handler, capture, passive, delegate, filter, self } = isPlainObject(event)
23
+ ? event
24
+ : { name: key, handler: event };
25
+ el = isFunction(el) ? el.call(instance, instance) : el || instance.$el;
26
+
27
+ if (isArray(el)) {
28
+ el.forEach((el) => registerEvent(instance, { ...event, el }, key));
29
+ return;
30
+ }
31
+
32
+ if (!el || (filter && !filter.call(instance))) {
33
+ return;
34
+ }
35
+
36
+ instance._events.push(
37
+ on(
38
+ el,
39
+ name,
40
+ delegate ? (isString(delegate) ? delegate : delegate.call(instance, instance)) : null,
41
+ isString(handler) ? instance[handler] : handler.bind(instance),
42
+ { passive, capture, self }
43
+ )
44
+ );
45
+ }
@@ -1,72 +1,74 @@
1
- import { $, apply, isString, mergeOptions, parents, toNode } from 'uikit-util';
1
+ import App from './app';
2
+ import { init } from './state';
3
+ import { callUpdate } from './update';
4
+ import { mergeOptions } from './options';
5
+ import { component, getComponent, getComponents } from './component';
6
+ import { $, apply, isString, parents, toNode } from '../util';
7
+
8
+ App.component = component;
9
+ App.getComponents = getComponents;
10
+ App.getComponent = getComponent;
11
+
12
+ App.use = function (plugin) {
13
+ if (plugin.installed) {
14
+ return;
15
+ }
2
16
 
3
- export default function (UIkit) {
4
- const DATA = UIkit.data;
17
+ plugin.call(null, this);
18
+ plugin.installed = true;
5
19
 
6
- UIkit.use = function (plugin) {
7
- if (plugin.installed) {
8
- return;
9
- }
20
+ return this;
21
+ };
10
22
 
11
- plugin.call(null, this);
12
- plugin.installed = true;
23
+ App.mixin = function (mixin, component) {
24
+ component = (isString(component) ? this.component(component) : component) || this;
25
+ component.options = mergeOptions(component.options, mixin);
26
+ };
13
27
 
14
- return this;
15
- };
28
+ App.extend = function (options) {
29
+ options = options || {};
16
30
 
17
- UIkit.mixin = function (mixin, component) {
18
- component = (isString(component) ? UIkit.component(component) : component) || this;
19
- component.options = mergeOptions(component.options, mixin);
31
+ const Super = this;
32
+ const Sub = function UIkitComponent(options) {
33
+ init(this, options);
20
34
  };
21
35
 
22
- UIkit.extend = function (options) {
23
- options = options || {};
36
+ Sub.prototype = Object.create(Super.prototype);
37
+ Sub.prototype.constructor = Sub;
38
+ Sub.options = mergeOptions(Super.options, options);
24
39
 
25
- const Super = this;
26
- const Sub = function UIkitComponent(options) {
27
- this._init(options);
28
- };
40
+ Sub.super = Super;
41
+ Sub.extend = Super.extend;
29
42
 
30
- Sub.prototype = Object.create(Super.prototype);
31
- Sub.prototype.constructor = Sub;
32
- Sub.options = mergeOptions(Super.options, options);
43
+ return Sub;
44
+ };
33
45
 
34
- Sub.super = Super;
35
- Sub.extend = Super.extend;
46
+ export function update(element, e) {
47
+ element = element ? toNode(element) : document.body;
36
48
 
37
- return Sub;
38
- };
39
-
40
- UIkit.update = function (element, e) {
41
- element = element ? toNode(element) : document.body;
49
+ for (const parentEl of parents(element).reverse()) {
50
+ updateElement(parentEl, e);
51
+ }
42
52
 
43
- for (const parentEl of parents(element).reverse()) {
44
- update(parentEl[DATA], e);
45
- }
53
+ apply(element, (element) => updateElement(element, e));
54
+ }
46
55
 
47
- apply(element, (element) => update(element[DATA], e));
48
- };
56
+ App.update = update;
49
57
 
50
- let container;
51
- Object.defineProperty(UIkit, 'container', {
52
- get() {
53
- return container || document.body;
54
- },
55
-
56
- set(element) {
57
- container = $(element);
58
- },
59
- });
60
-
61
- function update(data, e) {
62
- if (!data) {
63
- return;
64
- }
65
-
66
- for (const name in data) {
67
- if (data[name]._connected) {
68
- data[name]._callUpdate(e);
69
- }
70
- }
58
+ function updateElement(element, e) {
59
+ const components = getComponents(element);
60
+ for (const name in components) {
61
+ callUpdate(components[name], e);
71
62
  }
72
63
  }
64
+
65
+ let container;
66
+ Object.defineProperty(App, 'container', {
67
+ get() {
68
+ return container || document.body;
69
+ },
70
+
71
+ set(element) {
72
+ container = $(element);
73
+ },
74
+ });