sibujs 1.5.0 → 2.1.0

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 (208) hide show
  1. package/dist/browser.cjs +332 -121
  2. package/dist/browser.d.cts +5 -0
  3. package/dist/browser.d.ts +5 -0
  4. package/dist/browser.js +6 -6
  5. package/dist/build.cjs +1049 -344
  6. package/dist/build.js +15 -13
  7. package/dist/cdn.global.js +17 -16
  8. package/dist/chunk-2RA7SHDA.js +65 -0
  9. package/dist/chunk-2UPRY23K.js +80 -0
  10. package/dist/{chunk-BMPL52BF.js → chunk-3DZP6OIT.js} +118 -66
  11. package/dist/chunk-3JHCYHWN.js +125 -0
  12. package/dist/{chunk-CZUGLNJS.js → chunk-45YP72ZQ.js} +3 -3
  13. package/dist/{chunk-JCDUJN2F.js → chunk-AMK2TYNW.js} +490 -153
  14. package/dist/{chunk-NHUC2QWH.js → chunk-CWBVQML6.js} +1 -1
  15. package/dist/{chunk-XHK6BDAJ.js → chunk-DRUZZAK4.js} +25 -8
  16. package/dist/{chunk-RJ46C3CS.js → chunk-GWWURC5M.js} +71 -20
  17. package/dist/{chunk-3X2YG6YM.js → chunk-JYD2PWXH.js} +59 -28
  18. package/dist/{chunk-2BYQDGN3.js → chunk-KGYT6UO6.js} +234 -63
  19. package/dist/{chunk-5X6PP2UK.js → chunk-LMLD24FC.js} +2 -2
  20. package/dist/{chunk-M4NLBH4I.js → chunk-LYTCUZ7H.js} +3 -2
  21. package/dist/{chunk-XUEEGU5O.js → chunk-NASX6ST2.js} +16 -4
  22. package/dist/{chunk-VQDZK23A.js → chunk-O6EFQ3KT.js} +181 -66
  23. package/dist/{chunk-BGN5ZMP4.js → chunk-OJ3P4ECI.js} +14 -2
  24. package/dist/chunk-ON5MMR2J.js +1327 -0
  25. package/dist/{chunk-SFKNRVCU.js → chunk-P2HSJDDN.js} +135 -79
  26. package/dist/chunk-QO3WC6FS.js +384 -0
  27. package/dist/{chunk-WZSPOOER.js → chunk-RDTDJCAB.js} +8 -5
  28. package/dist/{chunk-7GRNSCFT.js → chunk-TH2ILCYW.js} +312 -185
  29. package/dist/chunk-UCS6AMJ7.js +79 -0
  30. package/dist/{chunk-VAPYJN4X.js → chunk-V6C4FADE.js} +93 -23
  31. package/dist/{chunk-OUZZEE4S.js → chunk-WANSMF2L.js} +17 -11
  32. package/dist/{chunk-23VV7YD3.js → chunk-WIPZPFBQ.js} +25 -30
  33. package/dist/chunk-WZA53FXU.js +149 -0
  34. package/dist/{chunk-BGTHZHJ5.js → chunk-ZAQSMOED.js} +188 -44
  35. package/dist/{customElement-BL3Uo8dL.d.cts → customElement-CPfIrbvg.d.cts} +14 -10
  36. package/dist/{customElement-BL3Uo8dL.d.ts → customElement-CPfIrbvg.d.ts} +14 -10
  37. package/dist/data.cjs +536 -151
  38. package/dist/data.d.cts +20 -2
  39. package/dist/data.d.ts +20 -2
  40. package/dist/data.js +11 -9
  41. package/dist/devtools.cjs +613 -266
  42. package/dist/devtools.d.cts +1 -1
  43. package/dist/devtools.d.ts +1 -1
  44. package/dist/devtools.js +12 -6
  45. package/dist/ecosystem.cjs +602 -197
  46. package/dist/ecosystem.d.cts +9 -7
  47. package/dist/ecosystem.d.ts +9 -7
  48. package/dist/ecosystem.js +12 -11
  49. package/dist/extras.cjs +3500 -1608
  50. package/dist/extras.d.cts +9 -9
  51. package/dist/extras.d.ts +9 -9
  52. package/dist/extras.js +58 -45
  53. package/dist/index.cjs +1055 -344
  54. package/dist/index.d.cts +85 -8
  55. package/dist/index.d.ts +85 -8
  56. package/dist/index.js +32 -16
  57. package/dist/{introspect-BumjnBKr.d.cts → introspect-2TOlQ7oa.d.cts} +25 -3
  58. package/dist/{introspect-CZrlcaYy.d.ts → introspect-DnIpHQQz.d.ts} +25 -3
  59. package/dist/motion.cjs +122 -63
  60. package/dist/motion.js +4 -4
  61. package/dist/patterns.cjs +450 -110
  62. package/dist/patterns.d.cts +11 -12
  63. package/dist/patterns.d.ts +11 -12
  64. package/dist/patterns.js +7 -7
  65. package/dist/performance.cjs +373 -149
  66. package/dist/performance.d.cts +23 -16
  67. package/dist/performance.d.ts +23 -16
  68. package/dist/performance.js +13 -8
  69. package/dist/plugin-D30wlGW5.d.cts +71 -0
  70. package/dist/plugin-D30wlGW5.d.ts +71 -0
  71. package/dist/plugins.cjs +729 -301
  72. package/dist/plugins.d.cts +10 -3
  73. package/dist/plugins.d.ts +10 -3
  74. package/dist/plugins.js +106 -38
  75. package/dist/{ssr-Do_SiVoL.d.cts → ssr-CrVNy6Pa.d.cts} +9 -15
  76. package/dist/{ssr-Do_SiVoL.d.ts → ssr-CrVNy6Pa.d.ts} +9 -15
  77. package/dist/{ssr-4PBXAOO3.js → ssr-FXD2PPMC.js} +4 -3
  78. package/dist/ssr.cjs +736 -274
  79. package/dist/ssr.d.cts +26 -6
  80. package/dist/ssr.d.ts +26 -6
  81. package/dist/ssr.js +12 -11
  82. package/dist/{tagFactory-DaJ0YWX6.d.cts → tagFactory-S17H2qxu.d.cts} +9 -1
  83. package/dist/{tagFactory-DaJ0YWX6.d.ts → tagFactory-S17H2qxu.d.ts} +9 -1
  84. package/dist/testing.cjs +303 -76
  85. package/dist/testing.d.cts +17 -4
  86. package/dist/testing.d.ts +17 -4
  87. package/dist/testing.js +100 -44
  88. package/dist/ui.cjs +589 -178
  89. package/dist/ui.d.cts +1 -1
  90. package/dist/ui.d.ts +1 -1
  91. package/dist/ui.js +20 -17
  92. package/dist/widgets.cjs +1103 -146
  93. package/dist/widgets.d.cts +104 -2
  94. package/dist/widgets.d.ts +104 -2
  95. package/dist/widgets.js +9 -7
  96. package/package.json +8 -2
  97. package/dist/chunk-32DY64NT.js +0 -282
  98. package/dist/chunk-3AIRKM3B.js +0 -1263
  99. package/dist/chunk-3ARAQO7B.js +0 -398
  100. package/dist/chunk-3CRQALYP.js +0 -877
  101. package/dist/chunk-4EI4AG32.js +0 -482
  102. package/dist/chunk-4MYMUBRS.js +0 -21
  103. package/dist/chunk-5ZYQ6KDD.js +0 -154
  104. package/dist/chunk-6BMPXPUW.js +0 -26
  105. package/dist/chunk-6HLLIF3K.js +0 -398
  106. package/dist/chunk-6LSNVCS2.js +0 -937
  107. package/dist/chunk-6SA3QQES.js +0 -61
  108. package/dist/chunk-77L6NL3X.js +0 -1097
  109. package/dist/chunk-7BF6TK55.js +0 -1097
  110. package/dist/chunk-7TQKR4PP.js +0 -294
  111. package/dist/chunk-7V26P53V.js +0 -712
  112. package/dist/chunk-AZ3ISID5.js +0 -298
  113. package/dist/chunk-B7SWRFUT.js +0 -332
  114. package/dist/chunk-BTU3TJDS.js +0 -365
  115. package/dist/chunk-BW3WT46K.js +0 -937
  116. package/dist/chunk-C6KFWOFV.js +0 -616
  117. package/dist/chunk-CHF5OHIA.js +0 -61
  118. package/dist/chunk-CHJ27IGK.js +0 -26
  119. package/dist/chunk-CMBFNA7L.js +0 -27
  120. package/dist/chunk-DAHRH4ON.js +0 -331
  121. package/dist/chunk-DKOHBI74.js +0 -924
  122. package/dist/chunk-DTCOOBMX.js +0 -725
  123. package/dist/chunk-EBGIRKQY.js +0 -616
  124. package/dist/chunk-EUZND3CB.js +0 -27
  125. package/dist/chunk-EVCZO745.js +0 -365
  126. package/dist/chunk-EWFVA3TJ.js +0 -282
  127. package/dist/chunk-F3FA4F32.js +0 -292
  128. package/dist/chunk-FGOEVHY3.js +0 -60
  129. package/dist/chunk-G3BOQPVO.js +0 -365
  130. package/dist/chunk-GCOK2LC3.js +0 -282
  131. package/dist/chunk-GJPXRJ45.js +0 -37
  132. package/dist/chunk-HGMJFBC7.js +0 -654
  133. package/dist/chunk-JAKHTMQU.js +0 -1000
  134. package/dist/chunk-JCI5M6U6.js +0 -956
  135. package/dist/chunk-K4G4ZQNR.js +0 -286
  136. package/dist/chunk-K5ZUMYVS.js +0 -89
  137. package/dist/chunk-KQPDEVVS.js +0 -398
  138. package/dist/chunk-L6JRBDNS.js +0 -60
  139. package/dist/chunk-LA6KQEDU.js +0 -712
  140. package/dist/chunk-MB6QFH3I.js +0 -2776
  141. package/dist/chunk-MDVXJWFN.js +0 -304
  142. package/dist/chunk-MEZVEBPN.js +0 -2008
  143. package/dist/chunk-MK4ERFYL.js +0 -2249
  144. package/dist/chunk-MLKGABMK.js +0 -9
  145. package/dist/chunk-MQ5GOYPH.js +0 -2249
  146. package/dist/chunk-MYRV7VDM.js +0 -742
  147. package/dist/chunk-N6IZB6KJ.js +0 -567
  148. package/dist/chunk-NEKUBFPT.js +0 -60
  149. package/dist/chunk-NMRUZALC.js +0 -1097
  150. package/dist/chunk-NYVAC6P5.js +0 -37
  151. package/dist/chunk-NZIIMDWI.js +0 -84
  152. package/dist/chunk-OF7UZIVB.js +0 -725
  153. package/dist/chunk-P3XWXJZU.js +0 -282
  154. package/dist/chunk-P6W3STU4.js +0 -2249
  155. package/dist/chunk-PBHF5WKN.js +0 -616
  156. package/dist/chunk-PDZQY43A.js +0 -616
  157. package/dist/chunk-PTQJDMRT.js +0 -146
  158. package/dist/chunk-PZEGYCF5.js +0 -61
  159. package/dist/chunk-QBMDLBU2.js +0 -975
  160. package/dist/chunk-QWZG56ET.js +0 -2744
  161. package/dist/chunk-RQGQSLQK.js +0 -725
  162. package/dist/chunk-SDLZDHKP.js +0 -107
  163. package/dist/chunk-TDGZL5CU.js +0 -365
  164. package/dist/chunk-TNQWPPE6.js +0 -37
  165. package/dist/chunk-TSOKIX5Z.js +0 -654
  166. package/dist/chunk-UHNL42EF.js +0 -2730
  167. package/dist/chunk-UNXCEF6S.js +0 -21
  168. package/dist/chunk-V2XTI523.js +0 -347
  169. package/dist/chunk-VAU366PN.js +0 -2241
  170. package/dist/chunk-VMVDTCXB.js +0 -712
  171. package/dist/chunk-VQNQZCWJ.js +0 -61
  172. package/dist/chunk-VRW3FULF.js +0 -725
  173. package/dist/chunk-WADYRCO2.js +0 -304
  174. package/dist/chunk-WILQZRO4.js +0 -282
  175. package/dist/chunk-WR5D4EGH.js +0 -26
  176. package/dist/chunk-WUHJISPP.js +0 -298
  177. package/dist/chunk-XYU6TZOW.js +0 -182
  178. package/dist/chunk-Y6GP4QGG.js +0 -276
  179. package/dist/chunk-YECR7UIA.js +0 -347
  180. package/dist/chunk-YUTWTI4B.js +0 -654
  181. package/dist/chunk-Z65KYU7I.js +0 -26
  182. package/dist/chunk-Z6POF5YC.js +0 -975
  183. package/dist/chunk-ZBJP6WFL.js +0 -482
  184. package/dist/chunk-ZD6OAMTH.js +0 -277
  185. package/dist/chunk-ZWKZCBO6.js +0 -317
  186. package/dist/contracts-DDrwxvJ-.d.cts +0 -245
  187. package/dist/contracts-DDrwxvJ-.d.ts +0 -245
  188. package/dist/contracts-DOrhwbke.d.cts +0 -245
  189. package/dist/contracts-DOrhwbke.d.ts +0 -245
  190. package/dist/contracts-xo5ckdRP.d.cts +0 -240
  191. package/dist/contracts-xo5ckdRP.d.ts +0 -240
  192. package/dist/customElement-BKQfbSZQ.d.cts +0 -262
  193. package/dist/customElement-BKQfbSZQ.d.ts +0 -262
  194. package/dist/customElement-D2DJp_xn.d.cts +0 -313
  195. package/dist/customElement-D2DJp_xn.d.ts +0 -313
  196. package/dist/customElement-yz8uyk-0.d.cts +0 -308
  197. package/dist/customElement-yz8uyk-0.d.ts +0 -308
  198. package/dist/introspect-Cb0zgpi2.d.cts +0 -477
  199. package/dist/introspect-Y2xNXGSf.d.ts +0 -477
  200. package/dist/plugin-Bek4RhJY.d.cts +0 -43
  201. package/dist/plugin-Bek4RhJY.d.ts +0 -43
  202. package/dist/ssr-3RXHP5ES.js +0 -38
  203. package/dist/ssr-6GIMY5MX.js +0 -38
  204. package/dist/ssr-BA6sxxUd.d.cts +0 -135
  205. package/dist/ssr-BA6sxxUd.d.ts +0 -135
  206. package/dist/ssr-WKUPVSSK.js +0 -36
  207. package/dist/tagFactory-Dl8QCLga.d.cts +0 -23
  208. package/dist/tagFactory-Dl8QCLga.d.ts +0 -23
@@ -1,712 +0,0 @@
1
- import {
2
- div,
3
- span
4
- } from "./chunk-GCOK2LC3.js";
5
- import {
6
- sanitizeUrl
7
- } from "./chunk-23VV7YD3.js";
8
- import {
9
- effect
10
- } from "./chunk-6SA3QQES.js";
11
- import {
12
- batch,
13
- signal
14
- } from "./chunk-V2XTI523.js";
15
-
16
- // src/platform/head.ts
17
- var HEAD_URL_ATTRS = /* @__PURE__ */ new Set(["href", "src", "content"]);
18
- function sanitizeHeadAttr(key, value) {
19
- if (HEAD_URL_ATTRS.has(key)) return sanitizeUrl(value);
20
- return value;
21
- }
22
- function Head(props) {
23
- const anchor = document.createComment("sibu-head");
24
- const managedElements = [];
25
- const effectCleanups = [];
26
- const cleanup = () => {
27
- for (const el of managedElements) {
28
- if (el.parentNode) el.parentNode.removeChild(el);
29
- }
30
- managedElements.length = 0;
31
- for (const cleanupFn of effectCleanups) cleanupFn();
32
- effectCleanups.length = 0;
33
- };
34
- const apply = () => {
35
- cleanup();
36
- if (props.title) {
37
- if (typeof props.title === "function") {
38
- const cleanupFn = effect(() => {
39
- document.title = props.title();
40
- });
41
- effectCleanups.push(cleanupFn);
42
- } else {
43
- document.title = props.title;
44
- }
45
- }
46
- if (props.meta) {
47
- for (const metaProps of props.meta) {
48
- const el = document.createElement("meta");
49
- for (const [key, value] of Object.entries(metaProps)) {
50
- if (typeof value === "function") {
51
- const cleanupFn = effect(() => {
52
- el.setAttribute(key, value());
53
- });
54
- effectCleanups.push(cleanupFn);
55
- } else {
56
- el.setAttribute(key, value);
57
- }
58
- }
59
- document.head.appendChild(el);
60
- managedElements.push(el);
61
- }
62
- }
63
- if (props.link) {
64
- for (const linkProps of props.link) {
65
- const el = document.createElement("link");
66
- for (const [key, value] of Object.entries(linkProps)) {
67
- el.setAttribute(key, sanitizeHeadAttr(key, value));
68
- }
69
- document.head.appendChild(el);
70
- managedElements.push(el);
71
- }
72
- }
73
- if (props.script) {
74
- for (const scriptProps of props.script) {
75
- const el = document.createElement("script");
76
- for (const [key, value] of Object.entries(scriptProps)) {
77
- el.setAttribute(key, sanitizeHeadAttr(key, value));
78
- }
79
- document.head.appendChild(el);
80
- managedElements.push(el);
81
- }
82
- }
83
- if (props.base) {
84
- const existing = document.head.querySelector("base");
85
- if (existing) existing.remove();
86
- const el = document.createElement("base");
87
- if (props.base.href) el.href = props.base.href;
88
- if (props.base.target) el.target = props.base.target;
89
- document.head.appendChild(el);
90
- managedElements.push(el);
91
- }
92
- };
93
- apply();
94
- return anchor;
95
- }
96
- function setStructuredData(data) {
97
- const existing = document.head.querySelector('script[type="application/ld+json"][data-sibu]');
98
- if (existing) existing.remove();
99
- const script = document.createElement("script");
100
- script.type = "application/ld+json";
101
- script.setAttribute("data-sibu", "true");
102
- script.textContent = JSON.stringify(data);
103
- document.head.appendChild(script);
104
- }
105
- function setCanonical(url) {
106
- let link = document.head.querySelector('link[rel="canonical"]');
107
- if (!link) {
108
- link = document.createElement("link");
109
- link.rel = "canonical";
110
- document.head.appendChild(link);
111
- }
112
- link.href = sanitizeUrl(url);
113
- }
114
-
115
- // src/platform/worker.ts
116
- function worker(workerFn2) {
117
- const [result, setResult] = signal(null);
118
- const [error, setError] = signal(null);
119
- const [loading, setLoading] = signal(false);
120
- let worker2 = null;
121
- try {
122
- if (typeof Worker === "undefined") {
123
- throw new Error("Web Workers are not supported in this environment");
124
- }
125
- const fnBody = workerFn2.toString();
126
- const blob = new Blob([`self.onmessage = ${fnBody};`], { type: "application/javascript" });
127
- const url = URL.createObjectURL(blob);
128
- worker2 = new Worker(url);
129
- URL.revokeObjectURL(url);
130
- worker2.onmessage = (e) => {
131
- setResult(e.data);
132
- setLoading(false);
133
- };
134
- worker2.onerror = (e) => {
135
- setError(new Error(e.message || "Worker error"));
136
- setLoading(false);
137
- };
138
- } catch (err) {
139
- setError(err instanceof Error ? err : new Error(String(err)));
140
- }
141
- function post(data) {
142
- if (!worker2) return;
143
- setLoading(true);
144
- setError(null);
145
- setResult(null);
146
- worker2.postMessage(data);
147
- }
148
- function terminate() {
149
- if (!worker2) return;
150
- worker2.terminate();
151
- worker2 = null;
152
- setLoading(false);
153
- }
154
- return { post, result, error, loading, terminate };
155
- }
156
- function workerFn(fn) {
157
- const [loading, setLoading] = signal(false);
158
- let worker2 = null;
159
- try {
160
- if (typeof Worker === "undefined") {
161
- throw new Error("Web Workers are not supported in this environment");
162
- }
163
- const fnStr = fn.toString();
164
- const blob = new Blob(
165
- [
166
- `self.onmessage = function(e) {
167
- var fn = ${fnStr};
168
- var result = fn.apply(null, e.data);
169
- postMessage(result);
170
- };`
171
- ],
172
- { type: "application/javascript" }
173
- );
174
- const url = URL.createObjectURL(blob);
175
- worker2 = new Worker(url);
176
- URL.revokeObjectURL(url);
177
- } catch {
178
- }
179
- function run(...args) {
180
- return new Promise((resolve, reject) => {
181
- if (!worker2) {
182
- reject(new Error("Worker is not available"));
183
- return;
184
- }
185
- setLoading(true);
186
- worker2.onmessage = (e) => {
187
- setLoading(false);
188
- resolve(e.data);
189
- };
190
- worker2.onerror = (e) => {
191
- setLoading(false);
192
- reject(new Error(e.message || "Worker error"));
193
- };
194
- worker2.postMessage(args);
195
- });
196
- }
197
- function terminate() {
198
- if (!worker2) return;
199
- worker2.terminate();
200
- worker2 = null;
201
- setLoading(false);
202
- }
203
- return { run, loading, terminate };
204
- }
205
- function createWorkerPool(workerFn2, poolSize) {
206
- const size = poolSize || typeof navigator !== "undefined" && navigator.hardwareConcurrency || 4;
207
- const workers = [];
208
- let currentIndex = 0;
209
- let alive = true;
210
- try {
211
- if (typeof Worker === "undefined") {
212
- throw new Error("Web Workers are not supported in this environment");
213
- }
214
- const fnBody = workerFn2.toString();
215
- const blob = new Blob([`self.onmessage = ${fnBody};`], { type: "application/javascript" });
216
- const url = URL.createObjectURL(blob);
217
- for (let i = 0; i < size; i++) {
218
- workers.push(new Worker(url));
219
- }
220
- URL.revokeObjectURL(url);
221
- } catch {
222
- }
223
- function execute(data) {
224
- return new Promise((resolve, reject) => {
225
- if (!alive || workers.length === 0) {
226
- reject(new Error("Worker pool is not available"));
227
- return;
228
- }
229
- const worker2 = workers[currentIndex % workers.length];
230
- currentIndex++;
231
- worker2.onmessage = (e) => {
232
- resolve(e.data);
233
- };
234
- worker2.onerror = (e) => {
235
- reject(new Error(e.message || "Worker error"));
236
- };
237
- worker2.postMessage(data);
238
- });
239
- }
240
- function terminate() {
241
- alive = false;
242
- for (const w of workers) {
243
- w.terminate();
244
- }
245
- workers.length = 0;
246
- }
247
- return { execute, terminate };
248
- }
249
-
250
- // src/platform/wasm.ts
251
- var moduleCache = /* @__PURE__ */ new Map();
252
- var instanceCache = /* @__PURE__ */ new Map();
253
- function wasm(source, config = {}) {
254
- const [instance, setInstance] = signal(null);
255
- const [loading, setLoading] = signal(true);
256
- const [error, setError] = signal(null);
257
- const cacheKey = config.cacheKey || (typeof source === "string" ? source : void 0);
258
- async function load() {
259
- setLoading(true);
260
- setError(null);
261
- setInstance(null);
262
- try {
263
- const wasmInstance = await loadWasmModule(source, config.imports, cacheKey);
264
- setInstance(wasmInstance.exports);
265
- } catch (err) {
266
- setError(err instanceof Error ? err : new Error(String(err)));
267
- } finally {
268
- setLoading(false);
269
- }
270
- }
271
- load();
272
- return {
273
- instance,
274
- loading,
275
- error,
276
- ready: () => instance() !== null,
277
- reload: load
278
- };
279
- }
280
- async function loadWasmModule(source, imports, cacheKey) {
281
- const key = cacheKey || (typeof source === "string" ? source : void 0);
282
- if (key) {
283
- const cachedInstance = instanceCache.get(key);
284
- if (cachedInstance) {
285
- return cachedInstance;
286
- }
287
- }
288
- let module;
289
- const cachedModule = key ? moduleCache.get(key) : void 0;
290
- if (cachedModule) {
291
- module = cachedModule;
292
- } else {
293
- let bytes;
294
- if (typeof source === "string") {
295
- if (typeof WebAssembly.instantiateStreaming === "function") {
296
- const response2 = fetch(source);
297
- const result = await WebAssembly.instantiateStreaming(response2, imports || {});
298
- if (key) {
299
- moduleCache.set(key, result.module);
300
- instanceCache.set(key, result.instance);
301
- }
302
- return result.instance;
303
- }
304
- const response = await fetch(source);
305
- bytes = await response.arrayBuffer();
306
- } else if (source instanceof Uint8Array) {
307
- bytes = source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);
308
- } else {
309
- bytes = source;
310
- }
311
- module = await WebAssembly.compile(bytes);
312
- if (key) moduleCache.set(key, module);
313
- }
314
- const instance = await WebAssembly.instantiate(module, imports || {});
315
- if (key) instanceCache.set(key, instance);
316
- return instance;
317
- }
318
- async function preloadWasm(url) {
319
- if (moduleCache.has(url)) return;
320
- let module;
321
- if (typeof WebAssembly.compileStreaming === "function") {
322
- module = await WebAssembly.compileStreaming(fetch(url));
323
- } else {
324
- const response = await fetch(url);
325
- const bytes = await response.arrayBuffer();
326
- module = await WebAssembly.compile(bytes);
327
- }
328
- moduleCache.set(url, module);
329
- }
330
- function createWasmBridge(instance) {
331
- const exports = instance.exports;
332
- const memory = exports.memory || instance.exports.memory;
333
- return {
334
- exports: instance.exports,
335
- memory,
336
- alloc(size) {
337
- if (!exports.malloc) throw new Error("WASM module does not export malloc");
338
- return exports.malloc(size);
339
- },
340
- free(ptr) {
341
- if (!exports.free) throw new Error("WASM module does not export free");
342
- exports.free(ptr);
343
- },
344
- writeString(str) {
345
- const encoder = new TextEncoder();
346
- const bytes = encoder.encode(str);
347
- if (!exports.malloc) throw new Error("WASM module does not export malloc");
348
- const ptr = exports.malloc(bytes.length);
349
- new Uint8Array(memory.buffer, ptr, bytes.length).set(bytes);
350
- return { ptr, len: bytes.length };
351
- },
352
- readString(ptr, len) {
353
- const decoder = new TextDecoder();
354
- return decoder.decode(new Uint8Array(memory.buffer, ptr, len));
355
- },
356
- writeArray(arr) {
357
- if (!exports.malloc) throw new Error("WASM module does not export malloc");
358
- const ptr = exports.malloc(arr.length * 8);
359
- new Float64Array(memory.buffer, ptr, arr.length).set(Array.from(arr));
360
- return { ptr, len: arr.length };
361
- },
362
- readF64Array(ptr, len) {
363
- return new Float64Array(memory.buffer, ptr, len);
364
- }
365
- };
366
- }
367
- function clearWasmCache() {
368
- moduleCache.clear();
369
- instanceCache.clear();
370
- }
371
- function isWasmCached(key) {
372
- return moduleCache.has(key);
373
- }
374
-
375
- // src/platform/microfrontend.ts
376
- var moduleCache2 = /* @__PURE__ */ new Map();
377
- function createMicroApp(config) {
378
- const host = config.container ?? document.createElement("div");
379
- host.setAttribute("data-micro-app", config.name);
380
- let root;
381
- if (config.shadow) {
382
- root = host.attachShadow({ mode: "open" });
383
- } else {
384
- root = host;
385
- }
386
- let mounted = false;
387
- function mount(component) {
388
- if (root instanceof ShadowRoot) {
389
- root.innerHTML = "";
390
- } else {
391
- while (root.firstChild) {
392
- root.removeChild(root.firstChild);
393
- }
394
- }
395
- const el = component();
396
- root.appendChild(el);
397
- mounted = true;
398
- }
399
- function unmount() {
400
- if (!mounted) return;
401
- if (root instanceof ShadowRoot) {
402
- root.innerHTML = "";
403
- } else {
404
- while (root.firstChild) {
405
- root.removeChild(root.firstChild);
406
- }
407
- }
408
- mounted = false;
409
- }
410
- return { mount, unmount, element: host };
411
- }
412
- function loadRemoteModule(url) {
413
- const cached = moduleCache2.get(url);
414
- if (cached) return cached;
415
- const promise = import(
416
- /* @vite-ignore */
417
- url
418
- );
419
- moduleCache2.set(url, promise);
420
- promise.catch(() => {
421
- moduleCache2.delete(url);
422
- });
423
- return promise;
424
- }
425
- function defineRemoteComponent(name, loader) {
426
- let cached = null;
427
- return function RemoteComponent() {
428
- if (cached) {
429
- return cached();
430
- }
431
- const container = div({
432
- class: "sibu-remote",
433
- "data-remote-component": name
434
- });
435
- container.appendChild(span({ class: "sibu-remote-loading", nodes: "Loading..." }));
436
- loader().then((mod) => {
437
- cached = mod.default;
438
- const rendered = cached();
439
- container.replaceChildren(rendered);
440
- }).catch((err) => {
441
- const message = err instanceof Error ? err.message : String(err);
442
- container.replaceChildren(
443
- div({
444
- class: "sibu-remote-error",
445
- nodes: `Failed to load remote component "${name}": ${message}`
446
- })
447
- );
448
- });
449
- return container;
450
- };
451
- }
452
- function createSharedScope(initialState) {
453
- const signals = /* @__PURE__ */ new Map();
454
- const subscribers = /* @__PURE__ */ new Map();
455
- for (const key of Object.keys(initialState)) {
456
- const [get2, set2] = signal(initialState[key]);
457
- signals.set(key, { get: get2, set: set2 });
458
- subscribers.set(key, /* @__PURE__ */ new Set());
459
- }
460
- function ensureSignal(key) {
461
- if (!signals.has(key)) {
462
- const [get2, set2] = signal(void 0);
463
- signals.set(key, { get: get2, set: set2 });
464
- subscribers.set(key, /* @__PURE__ */ new Set());
465
- }
466
- }
467
- function get(key) {
468
- ensureSignal(key);
469
- return signals.get(key)?.get();
470
- }
471
- function set(key, value) {
472
- ensureSignal(key);
473
- signals.get(key)?.set(value);
474
- const subs = subscribers.get(key);
475
- if (subs) {
476
- for (const cb of subs) {
477
- cb(value);
478
- }
479
- }
480
- }
481
- function subscribe(key, callback) {
482
- ensureSignal(key);
483
- const subs = subscribers.get(key);
484
- if (!subs) {
485
- return () => {
486
- };
487
- }
488
- subs.add(callback);
489
- return () => {
490
- subs.delete(callback);
491
- };
492
- }
493
- return { get, set, subscribe };
494
- }
495
-
496
- // src/platform/serviceWorker.ts
497
- function serviceWorker(scriptUrl, options) {
498
- const [registration, setRegistration] = signal(null);
499
- const [isReady, setIsReady] = signal(false);
500
- const [isUpdateAvailable, setIsUpdateAvailable] = signal(false);
501
- const [error, setError] = signal(null);
502
- if ("serviceWorker" in navigator) {
503
- navigator.serviceWorker.register(scriptUrl, options).then((reg) => {
504
- setRegistration(reg);
505
- setIsReady(true);
506
- reg.addEventListener("updatefound", () => {
507
- const newWorker = reg.installing;
508
- if (newWorker) {
509
- newWorker.addEventListener("statechange", () => {
510
- if (newWorker.state === "installed" && navigator.serviceWorker.controller) {
511
- setIsUpdateAvailable(true);
512
- }
513
- });
514
- }
515
- });
516
- }).catch((err) => {
517
- setError(err instanceof Error ? err : new Error(String(err)));
518
- });
519
- }
520
- async function update() {
521
- const reg = registration();
522
- if (reg) {
523
- await reg.update();
524
- }
525
- }
526
- async function unregister() {
527
- const reg = registration();
528
- if (reg) {
529
- const result = await reg.unregister();
530
- if (result) {
531
- setRegistration(null);
532
- setIsReady(false);
533
- }
534
- return result;
535
- }
536
- return false;
537
- }
538
- return { registration, isReady, isUpdateAvailable, error, update, unregister };
539
- }
540
-
541
- // src/platform/staticSiteGenerator.ts
542
- async function generateStaticSite(options) {
543
- const { routes, renderFn } = options;
544
- const pages = [];
545
- const errors = [];
546
- for (const route of routes) {
547
- try {
548
- const html = await renderFn(route);
549
- pages.push({ path: route, html });
550
- } catch (err) {
551
- errors.push({
552
- path: route,
553
- error: err instanceof Error ? err : new Error(String(err))
554
- });
555
- }
556
- }
557
- return { pages, errors };
558
- }
559
-
560
- // src/platform/incrementalRegeneration.ts
561
- function createISR(options) {
562
- const { revalidateAfter, fetcher, initialData } = options;
563
- const [data, setData] = signal(initialData);
564
- const [timestamp, setTimestamp] = signal(initialData !== void 0 ? Date.now() : 0);
565
- const isStale = () => {
566
- const ts = timestamp();
567
- if (ts === 0) return true;
568
- return Date.now() - ts >= revalidateAfter;
569
- };
570
- const revalidate = async () => {
571
- const result = await fetcher();
572
- setData(result);
573
- setTimestamp(Date.now());
574
- };
575
- if (initialData === void 0) {
576
- revalidate();
577
- }
578
- const intervalId = setInterval(() => {
579
- revalidate();
580
- }, revalidateAfter);
581
- const dispose = () => {
582
- clearInterval(intervalId);
583
- };
584
- return { data, isStale, revalidate, dispose };
585
- }
586
-
587
- // src/platform/routeActions.ts
588
- function createAction(actionFn) {
589
- const [data, setData] = signal(void 0);
590
- const [error, setError] = signal(void 0);
591
- const [loading, setLoading] = signal(false);
592
- const submit = async (input) => {
593
- batch(() => {
594
- setLoading(true);
595
- setError(void 0);
596
- });
597
- try {
598
- const result = await actionFn(input);
599
- batch(() => {
600
- setData(result);
601
- setLoading(false);
602
- });
603
- return result;
604
- } catch (err) {
605
- const actionError = err instanceof Error ? err : new Error(String(err));
606
- batch(() => {
607
- setError(actionError);
608
- setLoading(false);
609
- });
610
- throw actionError;
611
- }
612
- };
613
- return { data, error, loading, submit };
614
- }
615
-
616
- // src/platform/scrollRestoration.ts
617
- function scrollRestoration(options) {
618
- const mode = options?.mode ?? "auto";
619
- const positions = /* @__PURE__ */ new Map();
620
- let popstateHandler = null;
621
- let currentKey = null;
622
- const save = (key) => {
623
- positions.set(key, {
624
- x: window.scrollX,
625
- y: window.scrollY
626
- });
627
- currentKey = key;
628
- };
629
- const restore = (key) => {
630
- const pos = positions.get(key);
631
- if (pos) {
632
- window.scrollTo(pos.x, pos.y);
633
- }
634
- currentKey = key;
635
- };
636
- const getPosition = (key) => {
637
- return positions.get(key);
638
- };
639
- if (mode === "auto") {
640
- popstateHandler = () => {
641
- if (currentKey) {
642
- save(currentKey);
643
- }
644
- };
645
- window.addEventListener("popstate", popstateHandler);
646
- }
647
- const dispose = () => {
648
- if (popstateHandler) {
649
- window.removeEventListener("popstate", popstateHandler);
650
- popstateHandler = null;
651
- }
652
- positions.clear();
653
- };
654
- return { save, restore, getPosition, dispose };
655
- }
656
-
657
- // src/platform/routeMiddleware.ts
658
- function composeMiddleware(...fns) {
659
- return async (context, next) => {
660
- let index = -1;
661
- const dispatch = async (i) => {
662
- if (i <= index) {
663
- throw new Error("next() called multiple times");
664
- }
665
- index = i;
666
- if (i < fns.length) {
667
- await fns[i](context, () => dispatch(i + 1));
668
- } else {
669
- await next();
670
- }
671
- };
672
- await dispatch(0);
673
- };
674
- }
675
- function createMiddlewareChain() {
676
- const middlewares = [];
677
- const use = (fn) => {
678
- middlewares.push(fn);
679
- };
680
- const run = async (context) => {
681
- const composed = composeMiddleware(...middlewares);
682
- await composed(context, () => {
683
- });
684
- };
685
- return { use, run };
686
- }
687
-
688
- export {
689
- Head,
690
- setStructuredData,
691
- setCanonical,
692
- worker,
693
- workerFn,
694
- createWorkerPool,
695
- wasm,
696
- loadWasmModule,
697
- preloadWasm,
698
- createWasmBridge,
699
- clearWasmCache,
700
- isWasmCached,
701
- createMicroApp,
702
- loadRemoteModule,
703
- defineRemoteComponent,
704
- createSharedScope,
705
- serviceWorker,
706
- generateStaticSite,
707
- createISR,
708
- createAction,
709
- scrollRestoration,
710
- composeMiddleware,
711
- createMiddlewareChain
712
- };