@onetype/framework 2.0.26 → 2.0.28

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 (66) hide show
  1. package/addons/core/assets/back/functions/utils/transform.js +1 -1
  2. package/addons/render/directives/front/js/functions/process/data.js +0 -1
  3. package/addons/render/transforms/addon.js +2 -0
  4. package/addons/render/transforms/functions/data.js +21 -0
  5. package/addons/render/transforms/functions/run.js +11 -0
  6. package/addons/render/transforms/item/functions/load.js +55 -0
  7. package/addons/render/transforms/item/functions/run.js +12 -0
  8. package/addons/render/transforms/items/directives/transform.js +15 -18
  9. package/lib/items/elements/global/heading/heading.css +1 -1
  10. package/lib/items/elements/global/markdown/markdown.js +207 -3
  11. package/lib/items/elements/{sections → navigation}/navbar/navbar.css +9 -9
  12. package/lib/items/elements/{sections → navigation}/navbar/navbar.js +2 -2
  13. package/lib/items/elements/navigation/sidebar/sidebar.css +101 -0
  14. package/lib/items/elements/navigation/sidebar/sidebar.js +56 -0
  15. package/lib/items/elements/{global → navigation}/tabs/tabs.css +6 -6
  16. package/lib/items/elements/{global → navigation}/tabs/tabs.js +2 -2
  17. package/lib/items/elements/sections/pricing/pricing.css +148 -0
  18. package/lib/items/elements/sections/pricing/pricing.js +76 -0
  19. package/lib/items/transforms/accordion/accordion.js +139 -141
  20. package/lib/items/transforms/chart/area.js +130 -133
  21. package/lib/items/transforms/chart/bar.js +116 -119
  22. package/lib/items/transforms/chart/bubble.js +142 -145
  23. package/lib/items/transforms/chart/doughnut.js +104 -107
  24. package/lib/items/transforms/chart/line.js +127 -130
  25. package/lib/items/transforms/chart/pie.js +102 -105
  26. package/lib/items/transforms/chart/radar.js +134 -137
  27. package/lib/items/transforms/chart/scatter.js +127 -130
  28. package/lib/items/transforms/codeflask/codeflask.js +10 -12
  29. package/lib/items/transforms/codemirror/codemirror.js +186 -189
  30. package/lib/items/transforms/comparison/comparison.js +130 -133
  31. package/lib/items/transforms/heatmap/heatmap.js +406 -407
  32. package/lib/items/transforms/interact/interact.js +240 -241
  33. package/lib/items/transforms/particles/particles.js +282 -283
  34. package/lib/items/transforms/sparkline/sparkline.js +207 -208
  35. package/lib/items/transforms/swiper/swiper.js +115 -118
  36. package/lib/items/transforms/tabs/tabs.js +383 -384
  37. package/lib/items/transforms/typed/typed.js +146 -147
  38. package/lib/load.js +8 -16
  39. package/lib/src/classes/addon/classes/render/mixins/process.js +16 -0
  40. package/lib/src/mixins/addons.js +10 -10
  41. package/lib/styles/variables.css +1 -1
  42. package/package.json +1 -1
  43. package/addons/render/transforms/functions/load/assets.js +0 -49
  44. /package/{addons/render/directives/front/js/items → lib/items/directives}/100-if.js +0 -0
  45. /package/{addons/render/directives/front/js/items → lib/items/directives}/1000-render.js +0 -0
  46. /package/{addons/render/directives/front/js/items → lib/items/directives}/110-show.js +0 -0
  47. /package/{addons/render/directives/front/js/items → lib/items/directives}/160-slot.js +0 -0
  48. /package/{addons/render/directives/front/js/items → lib/items/directives}/200-for.js +0 -0
  49. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-blur.js +0 -0
  50. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-change.js +0 -0
  51. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-click-outside.js +0 -0
  52. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-click.js +0 -0
  53. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-double-click.js +0 -0
  54. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-focus.js +0 -0
  55. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-input.js +0 -0
  56. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-keydown.js +0 -0
  57. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-keyup.js +0 -0
  58. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-mouse-enter.js +0 -0
  59. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-mouse-leave.js +0 -0
  60. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-mouse-move.js +0 -0
  61. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-scroll.js +0 -0
  62. /package/{addons/render/directives/front/js/items → lib/items/directives}/500-submit.js +0 -0
  63. /package/{addons/render/directives/front/js/items → lib/items/directives}/650-fetch.js +0 -0
  64. /package/{addons/render/directives/front/js/items → lib/items/directives}/660-form.js +0 -0
  65. /package/{addons/render/directives/front/js/items → lib/items/directives}/700-text.js +0 -0
  66. /package/{addons/render/directives/front/js/items → lib/items/directives}/750-html.js +0 -0
@@ -1,173 +1,172 @@
1
- onetype.AddonReady('transforms', (transforms) =>
2
- {
3
- transforms.ItemAdd({
4
- id: 'typed',
5
- icon: 'keyboard',
6
- name: 'Typed',
7
- description: 'Typewriter text animation effect. Automatically types and deletes text with customizable speed.',
8
- js: [
9
- 'https://cdn.jsdelivr.net/npm/typed.js@2.1.0/dist/typed.umd.js'
10
- ],
11
- config: {
12
- 'strings': ['array', []],
13
- 'type-speed': ['number', 50],
14
- 'back-speed': ['number', 30],
15
- 'start-delay': ['number', 0],
16
- 'back-delay': ['number', 700],
17
- 'loop': ['boolean', false],
18
- 'loop-count': ['number', 0],
19
- 'show-cursor': ['boolean', true],
20
- 'cursor-char': ['string', '|'],
21
- 'auto-insert-css': ['boolean', true],
22
- 'shuffle': ['boolean', false],
23
- 'smart-backspace': ['boolean', true],
24
- 'fade-out': ['boolean', false],
25
- 'fade-out-delay': ['number', 500],
26
- 'content-type': ['string', 'html']
27
- },
28
- code: function(data, item, compile, node, identifier)
1
+ transforms.ItemAdd({
2
+ id: 'typed',
3
+ icon: 'keyboard',
4
+ name: 'Typed',
5
+ description: 'Typewriter text animation effect. Automatically types and deletes text with customizable speed.',
6
+ js: [
7
+ 'https://cdn.jsdelivr.net/npm/typed.js@2.1.0/dist/typed.umd.js'
8
+ ],
9
+ config: {
10
+ 'strings': ['array', []],
11
+ 'type-speed': ['number', 50],
12
+ 'back-speed': ['number', 30],
13
+ 'start-delay': ['number', 0],
14
+ 'back-delay': ['number', 700],
15
+ 'loop': ['boolean', false],
16
+ 'loop-count': ['number', 0],
17
+ 'show-cursor': ['boolean', true],
18
+ 'cursor-char': ['string', '|'],
19
+ 'auto-insert-css': ['boolean', true],
20
+ 'shuffle': ['boolean', false],
21
+ 'smart-backspace': ['boolean', true],
22
+ 'fade-out': ['boolean', false],
23
+ 'fade-out-delay': ['number', 500],
24
+ 'content-type': ['string', 'html']
25
+ },
26
+ code: function(data, node, transformer)
27
+ {
28
+ const id = 'typed-' + onetype.Generate(8);
29
+
30
+ this.setup = () =>
29
31
  {
30
- this.setup = () =>
31
- {
32
- node.classList.add('typed');
33
- node.classList.add('typed-' + identifier);
32
+ node.classList.add('typed');
33
+ node.classList.add(id);
34
34
 
35
- const strings = data['strings'].value;
36
- const children = Array.from(node.children);
35
+ const strings = data['strings'];
36
+ const children = Array.from(node.children);
37
37
 
38
- const stringsArray = [];
38
+ const stringsArray = [];
39
39
 
40
- if(strings && strings.length > 0)
41
- {
42
- stringsArray.push(...strings);
43
- }
44
- else if(children.length > 0)
40
+ if(strings && strings.length > 0)
41
+ {
42
+ stringsArray.push(...strings);
43
+ }
44
+ else if(children.length > 0)
45
+ {
46
+ children.forEach(child =>
45
47
  {
46
- children.forEach(child =>
47
- {
48
- stringsArray.push(child.innerHTML);
49
- });
48
+ stringsArray.push(child.innerHTML);
49
+ });
50
50
 
51
- node.innerHTML = '';
52
- }
53
- else
51
+ node.innerHTML = '';
52
+ }
53
+ else
54
+ {
55
+ const existingText = node.textContent || node.innerHTML;
56
+ if(existingText.trim())
54
57
  {
55
- const existingText = node.textContent || node.innerHTML;
56
- if(existingText.trim())
57
- {
58
- stringsArray.push(existingText);
59
- node.innerHTML = '';
60
- }
58
+ stringsArray.push(existingText);
59
+ node.innerHTML = '';
61
60
  }
61
+ }
62
62
 
63
- if(stringsArray.length === 0)
64
- {
65
- stringsArray.push('Type your text here...');
66
- }
63
+ if(stringsArray.length === 0)
64
+ {
65
+ stringsArray.push('Type your text here...');
66
+ }
67
67
 
68
- this.strings = stringsArray;
68
+ this.strings = stringsArray;
69
69
 
70
- const element = document.createElement('span');
71
- element.className = 'typed-element';
72
- node.appendChild(element);
73
- };
70
+ const element = document.createElement('span');
71
+ element.className = 'typed-element';
72
+ node.appendChild(element);
73
+ };
74
74
 
75
- this.styles = () =>
75
+ this.styles = () =>
76
+ {
77
+ if(!data['auto-insert-css'])
76
78
  {
77
- if(!data['auto-insert-css'].value)
78
- {
79
- return;
80
- }
79
+ return;
80
+ }
81
81
 
82
- const style = document.createElement('style');
83
-
84
- style.textContent = `
85
- .typed-${identifier} {
86
- display: inline-block;
87
- }
88
- .typed-${identifier} .typed-cursor {
89
- opacity: 1;
90
- animation: typedjsBlink 0.7s infinite;
91
- -webkit-animation: typedjsBlink 0.7s infinite;
92
- animation: typedjsBlink 0.7s infinite;
93
- }
94
- @keyframes typedjsBlink {
95
- 50% { opacity: 0.0; }
96
- }
97
- @-webkit-keyframes typedjsBlink {
98
- 0% { opacity: 1; }
99
- 50% { opacity: 0.0; }
100
- 100% { opacity: 1; }
101
- }
102
- .typed-${identifier} .typed-fade-out {
103
- opacity: 0;
104
- transition: opacity 0.25s;
105
- }
106
- `;
107
-
108
- document.head.appendChild(style);
109
- };
110
-
111
- this.config = () =>
112
- {
113
- const config = {
114
- strings: this.strings,
115
- typeSpeed: data['type-speed'].value,
116
- backSpeed: data['back-speed'].value,
117
- startDelay: data['start-delay'].value,
118
- backDelay: data['back-delay'].value,
119
- loop: data['loop'].value,
120
- showCursor: data['show-cursor'].value,
121
- cursorChar: data['cursor-char'].value,
122
- autoInsertCss: false,
123
- shuffle: data['shuffle'].value,
124
- smartBackspace: data['smart-backspace'].value,
125
- contentType: data['content-type'].value
126
- };
82
+ const style = document.createElement('style');
127
83
 
128
- if(data['loop-count'].value > 0)
129
- {
130
- config.loopCount = data['loop-count'].value;
84
+ style.textContent = `
85
+ .typed-${id} {
86
+ display: inline-block;
131
87
  }
132
-
133
- if(data['fade-out'].value)
134
- {
135
- config.fadeOut = true;
136
- config.fadeOutClass = 'typed-fade-out';
137
- config.fadeOutDelay = data['fade-out-delay'].value;
88
+ .typed-${id} .typed-cursor {
89
+ opacity: 1;
90
+ animation: typedjsBlink 0.7s infinite;
91
+ -webkit-animation: typedjsBlink 0.7s infinite;
92
+ animation: typedjsBlink 0.7s infinite;
93
+ }
94
+ @keyframes typedjsBlink {
95
+ 50% { opacity: 0.0; }
138
96
  }
97
+ @-webkit-keyframes typedjsBlink {
98
+ 0% { opacity: 1; }
99
+ 50% { opacity: 0.0; }
100
+ 100% { opacity: 1; }
101
+ }
102
+ .typed-${id} .typed-fade-out {
103
+ opacity: 0;
104
+ transition: opacity 0.25s;
105
+ }
106
+ `;
107
+
108
+ document.head.appendChild(style);
109
+ };
139
110
 
140
- return config;
111
+ this.config = () =>
112
+ {
113
+ const config = {
114
+ strings: this.strings,
115
+ typeSpeed: data['type-speed'],
116
+ backSpeed: data['back-speed'],
117
+ startDelay: data['start-delay'],
118
+ backDelay: data['back-delay'],
119
+ loop: data['loop'],
120
+ showCursor: data['show-cursor'],
121
+ cursorChar: data['cursor-char'],
122
+ autoInsertCss: false,
123
+ shuffle: data['shuffle'],
124
+ smartBackspace: data['smart-backspace'],
125
+ contentType: data['content-type']
141
126
  };
142
127
 
143
- this.initialize = () =>
128
+ if(data['loop-count'] > 0)
144
129
  {
145
- setTimeout(() =>
146
- {
147
- const element = node.querySelector('.typed-element');
130
+ config.loopCount = data['loop-count'];
131
+ }
148
132
 
149
- if(!element)
150
- {
151
- return;
152
- }
133
+ if(data['fade-out'])
134
+ {
135
+ config.fadeOut = true;
136
+ config.fadeOutClass = 'typed-fade-out';
137
+ config.fadeOutDelay = data['fade-out-delay'];
138
+ }
153
139
 
154
- const typedInstance = new Typed(element, this.config());
140
+ return config;
141
+ };
155
142
 
156
- node._typedInstance = typedInstance;
143
+ this.initialize = () =>
144
+ {
145
+ setTimeout(() =>
146
+ {
147
+ const element = node.querySelector('.typed-element');
157
148
 
158
- node._typedControl = {
159
- start: () => typedInstance.start(),
160
- stop: () => typedInstance.stop(),
161
- toggle: () => typedInstance.toggle(),
162
- destroy: () => typedInstance.destroy(),
163
- reset: () => typedInstance.reset()
164
- };
165
- }, 0);
166
- };
149
+ if(!element)
150
+ {
151
+ return;
152
+ }
153
+
154
+ const typedInstance = new Typed(element, this.config());
167
155
 
168
- this.setup();
169
- this.styles();
170
- this.initialize();
171
- }
172
- });
173
- });
156
+ node._typedInstance = typedInstance;
157
+
158
+ node._typedControl = {
159
+ start: () => typedInstance.start(),
160
+ stop: () => typedInstance.stop(),
161
+ toggle: () => typedInstance.toggle(),
162
+ destroy: () => typedInstance.destroy(),
163
+ reset: () => typedInstance.reset()
164
+ };
165
+ }, 0);
166
+ };
167
+
168
+ this.setup();
169
+ this.styles();
170
+ this.initialize();
171
+ }
172
+ });
package/lib/load.js CHANGED
@@ -21,7 +21,9 @@ onetype.Assets('sources', import.meta.url, { js: '../addons/modules/sources/fron
21
21
 
22
22
  /* Render */
23
23
  onetype.Assets('directives', import.meta.url, { js: '../addons/render/directives/front' });
24
+ onetype.Assets('directives/items', import.meta.url, { js: 'items/directives' });
24
25
  onetype.Assets('transforms', import.meta.url, { js: '../addons/render/transforms' });
26
+ onetype.Assets('transforms/items', import.meta.url, { js: 'items/transforms' });
25
27
  onetype.Assets('pages', import.meta.url, { js: '../addons/render/pages', css: '../addons/render/pages/front' });
26
28
  onetype.Assets('elements', import.meta.url, { js: '../addons/render/elements/front', css: '../addons/render/elements/front' });
27
29
 
@@ -47,14 +49,18 @@ onetype.Assets('elements/global/heading', import.meta.url, { js: 'items/elements
47
49
  onetype.Assets('elements/global/markdown', import.meta.url, { js: 'items/elements/global/markdown', css: 'items/elements/global/markdown' });
48
50
  onetype.Assets('elements/global/notice', import.meta.url, { js: 'items/elements/global/notice', css: 'items/elements/global/notice' });
49
51
  onetype.Assets('elements/global/parameters', import.meta.url, { js: 'items/elements/global/parameters', css: 'items/elements/global/parameters' });
50
- onetype.Assets('elements/global/tabs', import.meta.url, { js: 'items/elements/global/tabs', css: 'items/elements/global/tabs' });
51
52
  onetype.Assets('elements/global/tags', import.meta.url, { js: 'items/elements/global/tags', css: 'items/elements/global/tags' });
52
53
 
53
54
  /* Elements — Sections */
54
55
  onetype.Assets('elements/sections/footer', import.meta.url, { js: 'items/elements/sections/footer', css: 'items/elements/sections/footer' });
55
56
  onetype.Assets('elements/sections/hero', import.meta.url, { js: 'items/elements/sections/hero', css: 'items/elements/sections/hero' });
56
- onetype.Assets('elements/sections/navbar', import.meta.url, { js: 'items/elements/sections/navbar', css: 'items/elements/sections/navbar' });
57
57
  onetype.Assets('elements/sections/stats', import.meta.url, { js: 'items/elements/sections/stats', css: 'items/elements/sections/stats' });
58
+ onetype.Assets('elements/sections/pricing', import.meta.url, { js: 'items/elements/sections/pricing', css: 'items/elements/sections/pricing' });
59
+
60
+ /* Elements — Navigation */
61
+ onetype.Assets('elements/navigation/navbar', import.meta.url, { js: 'items/elements/navigation/navbar', css: 'items/elements/navigation/navbar' });
62
+ onetype.Assets('elements/navigation/sidebar', import.meta.url, { js: 'items/elements/navigation/sidebar', css: 'items/elements/navigation/sidebar' });
63
+ onetype.Assets('elements/navigation/tabs', import.meta.url, { js: 'items/elements/navigation/tabs', css: 'items/elements/navigation/tabs' });
58
64
 
59
65
  /* Elements — Status */
60
66
  onetype.Assets('elements/status/loading', import.meta.url, { js: 'items/elements/status/loading', css: 'items/elements/status/loading' });
@@ -62,20 +68,6 @@ onetype.Assets('elements/status/empty', import.meta.url, { js: 'items/elements/s
62
68
  onetype.Assets('elements/status/error', import.meta.url, { js: 'items/elements/status/error', css: 'items/elements/status/error' });
63
69
  onetype.Assets('elements/status/code', import.meta.url, { js: 'items/elements/status/code', css: 'items/elements/status/code' });
64
70
 
65
- /* Transforms */
66
- onetype.Assets('transforms/accordion', import.meta.url, { js: 'items/transforms/accordion' });
67
- onetype.Assets('transforms/chart', import.meta.url, { js: 'items/transforms/chart' });
68
- onetype.Assets('transforms/codeflask', import.meta.url, { js: 'items/transforms/codeflask' });
69
- onetype.Assets('transforms/codemirror', import.meta.url, { js: 'items/transforms/codemirror' });
70
- onetype.Assets('transforms/comparison', import.meta.url, { js: 'items/transforms/comparison' });
71
- onetype.Assets('transforms/heatmap', import.meta.url, { js: 'items/transforms/heatmap' });
72
- onetype.Assets('transforms/interact', import.meta.url, { js: 'items/transforms/interact' });
73
- onetype.Assets('transforms/particles', import.meta.url, { js: 'items/transforms/particles' });
74
- onetype.Assets('transforms/sparkline', import.meta.url, { js: 'items/transforms/sparkline' });
75
- onetype.Assets('transforms/swiper', import.meta.url, { js: 'items/transforms/swiper' });
76
- onetype.Assets('transforms/tabs', import.meta.url, { js: 'items/transforms/tabs' });
77
- onetype.Assets('transforms/typed', import.meta.url, { js: 'items/transforms/typed' });
78
-
79
71
  global.$ot = onetype.$ot;
80
72
 
81
73
  process.on('SIGINT', async () =>
@@ -62,6 +62,22 @@ const RenderProcess =
62
62
  const html = this.GetCallback().call(this, this.GetData());
63
63
  this.State.rendering = false;
64
64
 
65
+ if(html && typeof html.then === 'function')
66
+ {
67
+ html.then(resolved =>
68
+ {
69
+ if(typeof resolved !== 'string')
70
+ {
71
+ throw new Error('Render function must return a string');
72
+ }
73
+
74
+ this.Html = resolved;
75
+ this.Update();
76
+ });
77
+
78
+ return '';
79
+ }
80
+
65
81
  if(typeof html !== 'string')
66
82
  {
67
83
  throw new Error('Render function must return a string');
@@ -117,22 +117,22 @@ const OneTypeAddons =
117
117
  return setTimeout(() => callback(addon));
118
118
  }
119
119
 
120
- let loaded = false;
120
+ // let loaded = false;
121
121
 
122
- const timeout = setTimeout(() =>
123
- {
124
- if(!loaded)
125
- {
126
- this.LogWarn(`Addon "${name}" might not be loaded.`);
127
- }
128
- }, 2000);
122
+ // const timeout = setTimeout(() =>
123
+ // {
124
+ // if(!loaded)
125
+ // {
126
+ // this.LogWarn(`Addon "${name}" might not be loaded.`);
127
+ // }
128
+ // }, 2000);
129
129
 
130
130
  this.AddonOn('add', (addon) =>
131
131
  {
132
132
  if(addon.GetName() === name)
133
133
  {
134
- loaded = true;
135
- clearTimeout(timeout);
134
+ // loaded = true;
135
+ // clearTimeout(timeout);
136
136
 
137
137
  if(instant)
138
138
  {
@@ -42,7 +42,7 @@
42
42
  --ot-bg-4-hover: rgba(48, 48, 50, 1);
43
43
 
44
44
  --ot-text-1: rgba(225, 228, 232, 1);
45
- --ot-text-2: rgb(159, 165, 177, 1);
45
+ --ot-text-2: rgba(156, 156, 156, 1);
46
46
 
47
47
  --ot-brand: rgba(226, 112, 85, 1);
48
48
  --ot-brand-border: rgba(236, 142, 120, 1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onetype/framework",
3
- "version": "2.0.26",
3
+ "version": "2.0.28",
4
4
  "description": "OneType Framework — Full-stack isomorphic JavaScript framework built from scratch. One addon abstraction powers databases, servers, commands, pages, directives, queues, and more.",
5
5
  "type": "module",
6
6
  "main": "lib/load.js",
@@ -1,49 +0,0 @@
1
- transforms.Fn('load.assets', async function(item)
2
- {
3
- const loaded = transforms.loaded = transforms.loaded || {js: new Set(), css: new Set()};
4
-
5
- const js = item.Get('js') || [];
6
- const css = item.Get('css') || [];
7
-
8
- const jsPromises = js.map(url =>
9
- {
10
- if (loaded.js.has(url))
11
- {
12
- return Promise.resolve();
13
- }
14
-
15
- loaded.js.add(url);
16
-
17
- return new Promise((resolve, reject) =>
18
- {
19
- const script = document.createElement('script');
20
- script.src = url;
21
- script.async = true;
22
- script.onload = resolve;
23
- script.onerror = () => reject(new Error(`Failed to load script: ${url}`));
24
- document.head.appendChild(script);
25
- });
26
- });
27
-
28
- const cssPromises = css.map(url =>
29
- {
30
- if (loaded.css.has(url))
31
- {
32
- return Promise.resolve();
33
- }
34
-
35
- loaded.css.add(url);
36
-
37
- return new Promise((resolve, reject) =>
38
- {
39
- const link = document.createElement('link');
40
- link.rel = 'stylesheet';
41
- link.href = url;
42
- link.onload = resolve;
43
- link.onerror = () => reject(new Error(`Failed to load stylesheet: ${url}`));
44
- document.head.appendChild(link);
45
- });
46
- });
47
-
48
- await Promise.all([...jsPromises, ...cssPromises]);
49
- });