@vobs/layout 1.2.1 → 1.3.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.
- package/dist/breadcrumb.cjs +62 -577
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +42 -562
- package/dist/breadcrumb.js.map +1 -1
- package/dist/context.cjs +30 -163
- package/dist/context.cjs.map +1 -1
- package/dist/context.js +8 -160
- package/dist/context.js.map +1 -1
- package/dist/header.cjs +69 -583
- package/dist/header.cjs.map +1 -1
- package/dist/header.js +40 -562
- package/dist/header.js.map +1 -1
- package/dist/index.cjs +281 -1018
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +282 -981
- package/dist/index.js.map +1 -1
- package/dist/layout.cjs +201 -937
- package/dist/layout.cjs.map +1 -1
- package/dist/layout.js +196 -910
- package/dist/layout.js.map +1 -1
- package/dist/menu.cjs +81 -645
- package/dist/menu.cjs.map +1 -1
- package/dist/menu.js +55 -624
- package/dist/menu.js.map +1 -1
- package/dist/sidebar.cjs +105 -759
- package/dist/sidebar.cjs.map +1 -1
- package/dist/sidebar.js +82 -733
- package/dist/sidebar.js.map +1 -1
- package/dist/tabs.cjs +70 -634
- package/dist/tabs.cjs.map +1 -1
- package/dist/tabs.js +48 -617
- package/dist/tabs.js.map +1 -1
- package/dist/types.cjs +18 -2
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/utils.cjs +61 -532
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +23 -508
- package/dist/utils.js.map +1 -1
- package/dist/viewport.cjs +34 -261
- package/dist/viewport.cjs.map +1 -1
- package/dist/viewport.js +7 -256
- package/dist/viewport.js.map +1 -1
- package/package.json +3 -3
package/dist/layout.js
CHANGED
|
@@ -1,786 +1,48 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
|
|
4
|
-
// packages/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
__name(invokeDebug, "invokeDebug");
|
|
20
|
-
|
|
21
|
-
// packages/reactivity/src/owner.ts
|
|
22
|
-
var currentOwner = null;
|
|
23
|
-
var nextOwnerId = 1;
|
|
24
|
-
var ownerNames = /* @__PURE__ */ new WeakMap();
|
|
25
|
-
function createOwner() {
|
|
26
|
-
const parent = currentOwner;
|
|
27
|
-
let disposed = parent?.disposed ?? false;
|
|
28
|
-
const children = [];
|
|
29
|
-
const cleanups = [];
|
|
30
|
-
const errorHandlers = /* @__PURE__ */ new Set();
|
|
31
|
-
const owner = {
|
|
32
|
-
id: `owner-${nextOwnerId++}`,
|
|
33
|
-
parent,
|
|
34
|
-
children,
|
|
35
|
-
depth: (parent?.depth ?? -1) + 1,
|
|
36
|
-
get disposed() {
|
|
37
|
-
return disposed;
|
|
38
|
-
},
|
|
39
|
-
run(fn) {
|
|
40
|
-
if (disposed) throw new Error("Vobs: \u5DF2\u9500\u6BC1\u7684 Owner \u4E0D\u80FD\u7EE7\u7EED\u8FD0\u884C");
|
|
41
|
-
const previous = currentOwner;
|
|
42
|
-
currentOwner = owner;
|
|
43
|
-
try {
|
|
44
|
-
return fn();
|
|
45
|
-
} finally {
|
|
46
|
-
currentOwner = previous;
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
addCleanup(cleanup) {
|
|
50
|
-
if (disposed) {
|
|
51
|
-
cleanup();
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
cleanups.push(cleanup);
|
|
55
|
-
},
|
|
56
|
-
onDispose(cleanup) {
|
|
57
|
-
owner.addCleanup(cleanup);
|
|
58
|
-
},
|
|
59
|
-
onError(handler) {
|
|
60
|
-
errorHandlers.add(handler);
|
|
61
|
-
const remove = /* @__PURE__ */ __name(() => errorHandlers.delete(handler), "remove");
|
|
62
|
-
owner.addCleanup(remove);
|
|
63
|
-
return remove;
|
|
64
|
-
},
|
|
65
|
-
handleError(error) {
|
|
66
|
-
for (const handler of [...errorHandlers].reverse()) {
|
|
67
|
-
try {
|
|
68
|
-
handler(error);
|
|
69
|
-
return true;
|
|
70
|
-
} catch (handlerError) {
|
|
71
|
-
return parent?.handleError(handlerError) ?? false;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return parent?.handleError(error) ?? false;
|
|
75
|
-
},
|
|
76
|
-
dispose() {
|
|
77
|
-
if (disposed) return;
|
|
78
|
-
disposed = true;
|
|
79
|
-
for (const child of [...children]) child.dispose();
|
|
80
|
-
children.length = 0;
|
|
81
|
-
let firstError;
|
|
82
|
-
for (let index = cleanups.length - 1; index >= 0; index--) {
|
|
83
|
-
try {
|
|
84
|
-
cleanups[index]();
|
|
85
|
-
} catch (error) {
|
|
86
|
-
firstError ?? (firstError = error);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
cleanups.length = 0;
|
|
90
|
-
if (parent) {
|
|
91
|
-
const index = parent.children.indexOf(owner);
|
|
92
|
-
if (index >= 0) parent.children.splice(index, 1);
|
|
93
|
-
}
|
|
94
|
-
if (firstError) throw firstError;
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
if (parent && !parent.disposed) parent.children.push(owner);
|
|
98
|
-
return owner;
|
|
99
|
-
}
|
|
100
|
-
__name(createOwner, "createOwner");
|
|
101
|
-
function setOwnerDebugName(owner, name) {
|
|
102
|
-
ownerNames.set(owner, name);
|
|
103
|
-
}
|
|
104
|
-
__name(setOwnerDebugName, "setOwnerDebugName");
|
|
105
|
-
function getCurrentOwner() {
|
|
106
|
-
return currentOwner;
|
|
107
|
-
}
|
|
108
|
-
__name(getCurrentOwner, "getCurrentOwner");
|
|
109
|
-
function onDispose(cleanup) {
|
|
110
|
-
const owner = getCurrentOwner();
|
|
111
|
-
if (!owner) throw new Error("Vobs: onDispose \u5FC5\u987B\u5728 Owner \u4F5C\u7528\u57DF\u5185\u8C03\u7528");
|
|
112
|
-
owner.onDispose(cleanup);
|
|
113
|
-
}
|
|
114
|
-
__name(onDispose, "onDispose");
|
|
115
|
-
|
|
116
|
-
// packages/reactivity/src/signal.ts
|
|
117
|
-
var currentSubscriber = null;
|
|
118
|
-
function getCurrentSubscriber() {
|
|
119
|
-
return currentSubscriber;
|
|
120
|
-
}
|
|
121
|
-
__name(getCurrentSubscriber, "getCurrentSubscriber");
|
|
122
|
-
function setCurrentSubscriber(subscriber) {
|
|
123
|
-
currentSubscriber = subscriber;
|
|
124
|
-
}
|
|
125
|
-
__name(setCurrentSubscriber, "setCurrentSubscriber");
|
|
126
|
-
function trackDependency(dependency) {
|
|
127
|
-
if (!currentSubscriber || currentSubscriber.disposed) return;
|
|
128
|
-
!currentSubscriber.dependencies.has(dependency);
|
|
129
|
-
currentSubscriber.dependencies.add(dependency);
|
|
130
|
-
}
|
|
131
|
-
__name(trackDependency, "trackDependency");
|
|
132
|
-
function state(initialValue, debugName) {
|
|
133
|
-
let value = initialValue;
|
|
134
|
-
let disposed = false;
|
|
135
|
-
const subscribers = /* @__PURE__ */ new Set();
|
|
136
|
-
const signalInstance = {
|
|
137
|
-
get value() {
|
|
138
|
-
const subscriber = getCurrentSubscriber();
|
|
139
|
-
if (subscriber && !subscriber.disposed) {
|
|
140
|
-
subscribers.add(subscriber);
|
|
141
|
-
trackDependency(signalInstance);
|
|
142
|
-
}
|
|
143
|
-
return value;
|
|
144
|
-
},
|
|
145
|
-
set value(nextValue) {
|
|
146
|
-
if (disposed || Object.is(value, nextValue)) return;
|
|
147
|
-
value = nextValue;
|
|
148
|
-
for (const subscriber of [...subscribers]) subscriber.notify();
|
|
149
|
-
},
|
|
150
|
-
unsubscribe(subscriber) {
|
|
151
|
-
subscribers.delete(subscriber);
|
|
152
|
-
},
|
|
153
|
-
// 与 `.value =` 赋值同一条路径:判等短路、debug hook、notify 全部一致。
|
|
154
|
-
// 以闭包实现,可安全地作为回调直接传递(无 this 绑定问题)。
|
|
155
|
-
set(next) {
|
|
156
|
-
signalInstance.value = next;
|
|
157
|
-
},
|
|
158
|
-
dispose() {
|
|
159
|
-
if (disposed) return;
|
|
160
|
-
disposed = true;
|
|
161
|
-
subscribers.clear();
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
const owner = getCurrentOwner();
|
|
165
|
-
owner?.addCleanup(signalInstance.dispose);
|
|
166
|
-
if (debugName?.trim()) setSignalDebugName(signalInstance, debugName.trim());
|
|
167
|
-
return signalInstance;
|
|
168
|
-
}
|
|
169
|
-
__name(state, "state");
|
|
170
|
-
|
|
171
|
-
// packages/reactivity/src/scheduler.ts
|
|
172
|
-
var _Scheduler = class _Scheduler {
|
|
173
|
-
constructor() {
|
|
174
|
-
this.dirtyEffects = /* @__PURE__ */ new Set();
|
|
175
|
-
this.lowPriorityEffects = /* @__PURE__ */ new Set();
|
|
176
|
-
// flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
|
|
177
|
-
this.normalBuffer = [];
|
|
178
|
-
this.lowBuffer = [];
|
|
179
|
-
this.flushing = false;
|
|
180
|
-
this.scheduled = false;
|
|
181
|
-
this.batchDepth = 0;
|
|
182
|
-
}
|
|
183
|
-
schedule(effect2) {
|
|
184
|
-
if (effect2.disposed) return;
|
|
185
|
-
this.dirtyEffects.add(effect2);
|
|
186
|
-
this.lowPriorityEffects.delete(effect2);
|
|
187
|
-
this.ensureScheduled();
|
|
188
|
-
}
|
|
189
|
-
/** Queue an effect behind normal updates while preserving deterministic order. */
|
|
190
|
-
scheduleLow(effect2) {
|
|
191
|
-
if (effect2.disposed) return;
|
|
192
|
-
if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
|
|
193
|
-
this.ensureScheduled();
|
|
194
|
-
}
|
|
195
|
-
ensureScheduled() {
|
|
196
|
-
if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
|
|
197
|
-
this.scheduled = true;
|
|
198
|
-
queueMicrotask(() => {
|
|
199
|
-
this.scheduled = false;
|
|
200
|
-
this.flush();
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
remove(effect2) {
|
|
205
|
-
this.dirtyEffects.delete(effect2);
|
|
206
|
-
this.lowPriorityEffects.delete(effect2);
|
|
207
|
-
}
|
|
208
|
-
batch(fn) {
|
|
209
|
-
this.batchDepth++;
|
|
210
|
-
try {
|
|
211
|
-
return fn();
|
|
212
|
-
} finally {
|
|
213
|
-
this.batchDepth--;
|
|
214
|
-
if (this.batchDepth === 0) this.flush();
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
flush() {
|
|
218
|
-
if (this.flushing || this.batchDepth > 0) return;
|
|
219
|
-
this.flushing = true;
|
|
220
|
-
let rounds = 0;
|
|
221
|
-
let firstError;
|
|
222
|
-
let hasError = false;
|
|
223
|
-
try {
|
|
224
|
-
while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
|
|
225
|
-
if (++rounds > 100) {
|
|
226
|
-
this.dirtyEffects.clear();
|
|
227
|
-
this.lowPriorityEffects.clear();
|
|
228
|
-
throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
|
|
229
|
-
}
|
|
230
|
-
this.collectRunnable(this.dirtyEffects, this.normalBuffer);
|
|
231
|
-
this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
|
|
232
|
-
sortEffects(this.normalBuffer);
|
|
233
|
-
sortEffects(this.lowBuffer);
|
|
234
|
-
for (const effect2 of this.normalBuffer) {
|
|
235
|
-
try {
|
|
236
|
-
effect2.run();
|
|
237
|
-
} catch (error) {
|
|
238
|
-
if (!hasError) {
|
|
239
|
-
firstError = error;
|
|
240
|
-
hasError = true;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
for (const effect2 of this.lowBuffer) {
|
|
245
|
-
try {
|
|
246
|
-
effect2.run();
|
|
247
|
-
} catch (error) {
|
|
248
|
-
if (!hasError) {
|
|
249
|
-
firstError = error;
|
|
250
|
-
hasError = true;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
this.normalBuffer.length = 0;
|
|
255
|
-
this.lowBuffer.length = 0;
|
|
256
|
-
}
|
|
257
|
-
} finally {
|
|
258
|
-
this.normalBuffer.length = 0;
|
|
259
|
-
this.lowBuffer.length = 0;
|
|
260
|
-
this.flushing = false;
|
|
261
|
-
}
|
|
262
|
-
if (hasError) throw firstError;
|
|
263
|
-
}
|
|
264
|
-
/** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
|
|
265
|
-
collectRunnable(source, target) {
|
|
266
|
-
for (const effect2 of source) {
|
|
267
|
-
if (!effect2.disposed) target.push(effect2);
|
|
268
|
-
}
|
|
269
|
-
source.clear();
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
__name(_Scheduler, "Scheduler");
|
|
273
|
-
var Scheduler = _Scheduler;
|
|
274
|
-
function sortEffects(effects) {
|
|
275
|
-
if (effects.length > 1) {
|
|
276
|
-
effects.sort((a, b) => b.depth - a.depth || a.order - b.order);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
__name(sortEffects, "sortEffects");
|
|
280
|
-
var scheduler = new Scheduler();
|
|
281
|
-
|
|
282
|
-
// packages/reactivity/src/effect.ts
|
|
283
|
-
var nextEffectOrder = 1;
|
|
284
|
-
function cleanupDependencies(subscriber) {
|
|
285
|
-
for (const dependency of subscriber.dependencies) {
|
|
286
|
-
dependency.unsubscribe(subscriber);
|
|
287
|
-
}
|
|
288
|
-
subscriber.dependencies.clear();
|
|
289
|
-
}
|
|
290
|
-
__name(cleanupDependencies, "cleanupDependencies");
|
|
291
|
-
function effect(callback) {
|
|
292
|
-
const owner = getCurrentOwner();
|
|
293
|
-
let cleanup;
|
|
294
|
-
let dirty = true;
|
|
295
|
-
let disposed = false;
|
|
296
|
-
const eff = {
|
|
297
|
-
order: nextEffectOrder++,
|
|
298
|
-
depth: owner?.depth ?? 0,
|
|
299
|
-
dependencies: /* @__PURE__ */ new Set(),
|
|
300
|
-
get disposed() {
|
|
301
|
-
return disposed;
|
|
302
|
-
},
|
|
303
|
-
notify() {
|
|
304
|
-
if (disposed || dirty) return;
|
|
305
|
-
dirty = true;
|
|
306
|
-
scheduler.schedule(eff);
|
|
307
|
-
},
|
|
308
|
-
run() {
|
|
309
|
-
if (disposed || !dirty) return;
|
|
310
|
-
dirty = false;
|
|
311
|
-
const previousCleanup = cleanup;
|
|
312
|
-
cleanup = void 0;
|
|
313
|
-
let cleanupError;
|
|
314
|
-
if (previousCleanup) {
|
|
315
|
-
try {
|
|
316
|
-
previousCleanup();
|
|
317
|
-
} catch (error) {
|
|
318
|
-
const handled2 = owner?.handleError(error) ?? false;
|
|
319
|
-
if (!handled2) cleanupError = error;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
cleanupDependencies(eff);
|
|
323
|
-
const previous = getCurrentSubscriber();
|
|
324
|
-
setCurrentSubscriber(eff);
|
|
325
|
-
let thrown;
|
|
326
|
-
let handled = false;
|
|
327
|
-
try {
|
|
328
|
-
const result = owner ? owner.run(callback) : callback();
|
|
329
|
-
cleanup = typeof result === "function" ? result : void 0;
|
|
330
|
-
} catch (error) {
|
|
331
|
-
thrown = error;
|
|
332
|
-
handled = owner?.handleError(error) ?? false;
|
|
333
|
-
if (!handled) throw error;
|
|
334
|
-
} finally {
|
|
335
|
-
setCurrentSubscriber(previous);
|
|
336
|
-
}
|
|
337
|
-
if (cleanupError && !thrown) throw cleanupError;
|
|
338
|
-
},
|
|
339
|
-
scheduleLow() {
|
|
340
|
-
if (disposed || dirty) return;
|
|
341
|
-
dirty = true;
|
|
342
|
-
scheduler.scheduleLow(eff);
|
|
343
|
-
},
|
|
344
|
-
dispose() {
|
|
345
|
-
if (disposed) return;
|
|
346
|
-
disposed = true;
|
|
347
|
-
dirty = false;
|
|
348
|
-
scheduler.remove(eff);
|
|
349
|
-
const previousCleanup = cleanup;
|
|
350
|
-
cleanup = void 0;
|
|
351
|
-
let cleanupError;
|
|
352
|
-
if (previousCleanup) {
|
|
353
|
-
try {
|
|
354
|
-
previousCleanup();
|
|
355
|
-
} catch (error) {
|
|
356
|
-
const handled = owner?.handleError(error) ?? false;
|
|
357
|
-
if (!handled) cleanupError = error;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
cleanupDependencies(eff);
|
|
361
|
-
if (cleanupError) throw cleanupError;
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
owner?.addCleanup(eff.dispose);
|
|
365
|
-
eff.run();
|
|
366
|
-
return eff;
|
|
367
|
-
}
|
|
368
|
-
__name(effect, "effect");
|
|
369
|
-
|
|
370
|
-
// packages/reactivity/src/memo.ts
|
|
371
|
-
function memo(compute) {
|
|
372
|
-
let cached;
|
|
373
|
-
let dirty = true;
|
|
374
|
-
let disposed = false;
|
|
375
|
-
const subscribers = /* @__PURE__ */ new Set();
|
|
376
|
-
const memoSubscriber = {
|
|
377
|
-
dependencies: /* @__PURE__ */ new Set(),
|
|
378
|
-
get disposed() {
|
|
379
|
-
return disposed;
|
|
380
|
-
},
|
|
381
|
-
notify() {
|
|
382
|
-
if (disposed || dirty) return;
|
|
383
|
-
dirty = true;
|
|
384
|
-
for (const subscriber of [...subscribers]) subscriber.notify();
|
|
385
|
-
}
|
|
386
|
-
};
|
|
387
|
-
const memoSignal = {
|
|
388
|
-
get value() {
|
|
389
|
-
const subscriber = getCurrentSubscriber();
|
|
390
|
-
if (subscriber && !subscriber.disposed) {
|
|
391
|
-
subscribers.add(subscriber);
|
|
392
|
-
trackDependency(memoSignal);
|
|
393
|
-
}
|
|
394
|
-
if (dirty) {
|
|
395
|
-
cleanupDependencies(memoSubscriber);
|
|
396
|
-
const previous = getCurrentSubscriber();
|
|
397
|
-
setCurrentSubscriber(memoSubscriber);
|
|
398
|
-
try {
|
|
399
|
-
cached = compute();
|
|
400
|
-
dirty = false;
|
|
401
|
-
} finally {
|
|
402
|
-
setCurrentSubscriber(previous);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
return cached;
|
|
406
|
-
},
|
|
407
|
-
set value(_) {
|
|
408
|
-
throw new Error("memo: \u6D3E\u751F\u503C\u4E0D\u80FD\u76F4\u63A5\u8D4B\u503C");
|
|
409
|
-
},
|
|
410
|
-
unsubscribe(subscriber) {
|
|
411
|
-
subscribers.delete(subscriber);
|
|
412
|
-
},
|
|
413
|
-
dispose() {
|
|
414
|
-
if (disposed) return;
|
|
415
|
-
disposed = true;
|
|
416
|
-
subscribers.clear();
|
|
417
|
-
cleanupDependencies(memoSubscriber);
|
|
418
|
-
}
|
|
419
|
-
};
|
|
420
|
-
const owner = getCurrentOwner();
|
|
421
|
-
owner?.addCleanup(memoSignal.dispose);
|
|
422
|
-
return memoSignal;
|
|
423
|
-
}
|
|
424
|
-
__name(memo, "memo");
|
|
425
|
-
|
|
426
|
-
// packages/runtime/src/debug.ts
|
|
427
|
-
var activeRuntimeDebugHooks = null;
|
|
428
|
-
function getRuntimeDebugHooks() {
|
|
429
|
-
return activeRuntimeDebugHooks;
|
|
430
|
-
}
|
|
431
|
-
__name(getRuntimeDebugHooks, "getRuntimeDebugHooks");
|
|
432
|
-
function invokeRuntimeDebug(name, ...args) {
|
|
433
|
-
return;
|
|
434
|
-
}
|
|
435
|
-
__name(invokeRuntimeDebug, "invokeRuntimeDebug");
|
|
436
|
-
function readDebugValue(read) {
|
|
437
|
-
try {
|
|
438
|
-
return read();
|
|
439
|
-
} catch {
|
|
440
|
-
return "[Uninspectable]";
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
__name(readDebugValue, "readDebugValue");
|
|
444
|
-
function describeDebugNode(node) {
|
|
445
|
-
if (!node || typeof node !== "object") return "node";
|
|
446
|
-
const value = node;
|
|
447
|
-
const name = typeof value.tagName === "string" ? value.tagName.toLowerCase() : typeof value.nodeName === "string" ? value.nodeName.toLowerCase() : "node";
|
|
448
|
-
const id = typeof value.id === "string" && value.id ? `#${value.id}` : "";
|
|
449
|
-
const className = typeof value.className === "string" && value.className ? `.${value.className.trim().split(/\s+/).filter(Boolean).join(".")}` : "";
|
|
450
|
-
return `${name}${id}${className}`;
|
|
451
|
-
}
|
|
452
|
-
__name(describeDebugNode, "describeDebugNode");
|
|
453
|
-
|
|
454
|
-
// packages/runtime/src/hmr.ts
|
|
455
|
-
var globalTarget = globalThis;
|
|
456
|
-
var hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: /* @__PURE__ */ new Map() };
|
|
457
|
-
globalTarget.__VOBS_HMR__ = hmrGlobal;
|
|
458
|
-
function registerHmrInstance(moduleId, instance) {
|
|
459
|
-
const instances = getModule(moduleId).instances;
|
|
460
|
-
instances.add(instance);
|
|
461
|
-
return () => instances.delete(instance);
|
|
462
|
-
}
|
|
463
|
-
__name(registerHmrInstance, "registerHmrInstance");
|
|
464
|
-
function markHmrInstanceMounted(node, parent) {
|
|
465
|
-
const instance = hmrInstances.get(node);
|
|
466
|
-
if (instance) instance.parent = parent;
|
|
467
|
-
}
|
|
468
|
-
__name(markHmrInstanceMounted, "markHmrInstanceMounted");
|
|
469
|
-
function getModule(moduleId) {
|
|
470
|
-
let module = hmrGlobal.modules.get(moduleId);
|
|
471
|
-
if (!module) {
|
|
472
|
-
module = { components: /* @__PURE__ */ new Map(), state: /* @__PURE__ */ new Map(), instances: /* @__PURE__ */ new Set() };
|
|
473
|
-
hmrGlobal.modules.set(moduleId, module);
|
|
474
|
-
}
|
|
475
|
-
return module;
|
|
476
|
-
}
|
|
477
|
-
__name(getModule, "getModule");
|
|
478
|
-
var hmrInstances = /* @__PURE__ */ new WeakMap();
|
|
479
|
-
function associateHmrInstance(node, instance) {
|
|
480
|
-
hmrInstances.set(node, instance);
|
|
481
|
-
}
|
|
482
|
-
__name(associateHmrInstance, "associateHmrInstance");
|
|
483
|
-
var nodeOwners = /* @__PURE__ */ new WeakMap();
|
|
484
|
-
var eventBindings = /* @__PURE__ */ new WeakMap();
|
|
485
|
-
function getRenderer() {
|
|
486
|
-
{
|
|
487
|
-
throw new Error("\u6E32\u67D3\u5668\u672A\u521D\u59CB\u5316");
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
__name(getRenderer, "getRenderer");
|
|
491
|
-
function createText(content) {
|
|
492
|
-
return getRenderer().createText(content);
|
|
493
|
-
}
|
|
494
|
-
__name(createText, "createText");
|
|
495
|
-
function createElement(tag) {
|
|
496
|
-
return getRenderer().createElement(tag);
|
|
497
|
-
}
|
|
498
|
-
__name(createElement, "createElement");
|
|
499
|
-
function createComment(content) {
|
|
500
|
-
return getRenderer().createComment(content);
|
|
501
|
-
}
|
|
502
|
-
__name(createComment, "createComment");
|
|
503
|
-
function insertBefore(parent, child, anchor) {
|
|
504
|
-
if (isVobsFragment(child)) {
|
|
505
|
-
child.mount(parent, isVobsFragment(anchor) ? anchor.start : anchor);
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor);
|
|
509
|
-
markHmrInstanceMounted(child, parent);
|
|
510
|
-
}
|
|
511
|
-
__name(insertBefore, "insertBefore");
|
|
512
|
-
function removeChild(parent, child) {
|
|
513
|
-
disposeNodeOwner(child);
|
|
514
|
-
if (isVobsFragment(child)) {
|
|
515
|
-
child.unmount(parent);
|
|
516
|
-
return;
|
|
517
|
-
}
|
|
518
|
-
getRenderer().removeChild(parent, child);
|
|
519
|
-
}
|
|
520
|
-
__name(removeChild, "removeChild");
|
|
521
|
-
function setTextContent(node, content) {
|
|
522
|
-
getRenderer().setTextContent(node, content);
|
|
523
|
-
}
|
|
524
|
-
__name(setTextContent, "setTextContent");
|
|
525
|
-
function setProperty(node, key, value) {
|
|
526
|
-
getRenderer().setProperty(node, key, value);
|
|
527
|
-
}
|
|
528
|
-
__name(setProperty, "setProperty");
|
|
529
|
-
function setAttribute(node, key, value) {
|
|
530
|
-
getRenderer().setAttribute(node, key, value);
|
|
531
|
-
}
|
|
532
|
-
__name(setAttribute, "setAttribute");
|
|
533
|
-
function addEventListener(node, event, handler) {
|
|
534
|
-
const renderer = getRenderer();
|
|
535
|
-
const owner = getCurrentOwner();
|
|
536
|
-
let bindings = eventBindings.get(node);
|
|
537
|
-
if (!bindings) {
|
|
538
|
-
bindings = /* @__PURE__ */ new Map();
|
|
539
|
-
eventBindings.set(node, bindings);
|
|
540
|
-
}
|
|
541
|
-
const previous = bindings.get(event);
|
|
542
|
-
if (previous && previous.original === handler && previous.owner === owner) return;
|
|
543
|
-
if (previous) renderer.removeEventListener(node, event, previous.handler);
|
|
544
|
-
const listener = owner ? (reason) => {
|
|
545
|
-
try {
|
|
546
|
-
owner.run(() => handler(reason));
|
|
547
|
-
} catch (error) {
|
|
548
|
-
const handled = owner.handleError(error);
|
|
549
|
-
invokeRuntimeDebug("error", {
|
|
550
|
-
error,
|
|
551
|
-
owner,
|
|
552
|
-
phase: "event",
|
|
553
|
-
handled,
|
|
554
|
-
recovery: handled ? "handled" : "propagated"
|
|
555
|
-
});
|
|
556
|
-
if (!handled) throw error;
|
|
557
|
-
}
|
|
558
|
-
} : handler;
|
|
559
|
-
const binding = { handler: listener, owner, original: handler };
|
|
560
|
-
bindings.set(event, binding);
|
|
561
|
-
renderer.addEventListener(node, event, listener);
|
|
562
|
-
owner?.onDispose(() => {
|
|
563
|
-
if (bindings?.get(event) !== binding) return;
|
|
564
|
-
bindings.delete(event);
|
|
565
|
-
renderer.removeEventListener(node, event, listener);
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
__name(addEventListener, "addEventListener");
|
|
569
|
-
function createComponent(component, props, source) {
|
|
570
|
-
const owner = createOwner();
|
|
571
|
-
const componentName = component.displayName || component.name || "anonymous";
|
|
572
|
-
setOwnerDebugName(owner, source ? `${componentName} (${source.file}:${source.line}:${source.column})` : componentName);
|
|
573
|
-
owner.onError((reason) => {
|
|
574
|
-
attachSourceLocation(reason, source);
|
|
575
|
-
attachComponentContext(reason, componentName, owner.id);
|
|
576
|
-
throw reason;
|
|
577
|
-
});
|
|
578
|
-
let node;
|
|
579
|
-
try {
|
|
580
|
-
node = owner.run(() => component(props));
|
|
581
|
-
} catch (error) {
|
|
582
|
-
owner.dispose();
|
|
583
|
-
attachSourceLocation(error, source);
|
|
584
|
-
attachComponentContext(error, componentName, owner.id);
|
|
585
|
-
throw error;
|
|
586
|
-
}
|
|
587
|
-
associateNodeOwner(node, owner);
|
|
588
|
-
const hmrKey = component.hmrKey;
|
|
589
|
-
if (hmrKey) {
|
|
590
|
-
const instance = {
|
|
591
|
-
node,
|
|
592
|
-
parent: null,
|
|
593
|
-
refresh() {
|
|
594
|
-
const previous = instance.node;
|
|
595
|
-
const next = owner.run(() => component(props));
|
|
596
|
-
if (instance.parent && !isVobsFragment(previous) && !isVobsFragment(next)) {
|
|
597
|
-
getRenderer().insertBefore(instance.parent, next, previous);
|
|
598
|
-
getRenderer().removeChild(instance.parent, previous);
|
|
599
|
-
}
|
|
600
|
-
nodeOwners.delete(previous);
|
|
601
|
-
nodeOwners.set(next, owner);
|
|
602
|
-
associateHmrInstance(next, instance);
|
|
603
|
-
instance.node = next;
|
|
604
|
-
}
|
|
605
|
-
};
|
|
606
|
-
associateHmrInstance(node, instance);
|
|
607
|
-
const separator = hmrKey.lastIndexOf(":");
|
|
608
|
-
const moduleId = separator < 0 ? hmrKey : hmrKey.slice(0, separator);
|
|
609
|
-
const cleanup = registerHmrInstance(moduleId, instance);
|
|
610
|
-
owner.onDispose(cleanup);
|
|
611
|
-
}
|
|
612
|
-
return node;
|
|
613
|
-
}
|
|
614
|
-
__name(createComponent, "createComponent");
|
|
615
|
-
function attachSourceLocation(reason, source) {
|
|
616
|
-
if (!source || (!reason || typeof reason !== "object" && typeof reason !== "function")) return;
|
|
617
|
-
const error = reason;
|
|
618
|
-
if (error.vobsSource) return;
|
|
619
|
-
try {
|
|
620
|
-
Object.defineProperty(error, "vobsSource", {
|
|
621
|
-
configurable: true,
|
|
622
|
-
enumerable: false,
|
|
623
|
-
value: source,
|
|
624
|
-
writable: false
|
|
625
|
-
});
|
|
626
|
-
} catch {
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
__name(attachSourceLocation, "attachSourceLocation");
|
|
630
|
-
function attachComponentContext(reason, component, ownerId) {
|
|
631
|
-
if (!reason || typeof reason !== "object" && typeof reason !== "function") return;
|
|
632
|
-
const error = reason;
|
|
633
|
-
try {
|
|
634
|
-
if (!error.vobsComponent) Object.defineProperty(error, "vobsComponent", { configurable: true, enumerable: false, value: component, writable: false });
|
|
635
|
-
if (!error.vobsOwnerId) Object.defineProperty(error, "vobsOwnerId", { configurable: true, enumerable: false, value: ownerId, writable: false });
|
|
636
|
-
} catch {
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
__name(attachComponentContext, "attachComponentContext");
|
|
640
|
-
function createBlock(factory) {
|
|
641
|
-
const owner = createOwner();
|
|
642
|
-
setOwnerDebugName(owner, "dynamic");
|
|
643
|
-
let node;
|
|
644
|
-
try {
|
|
645
|
-
node = owner.run(factory);
|
|
646
|
-
} catch (error) {
|
|
647
|
-
owner.dispose();
|
|
648
|
-
throw error;
|
|
649
|
-
}
|
|
650
|
-
if (!node) {
|
|
651
|
-
owner.dispose();
|
|
652
|
-
return null;
|
|
653
|
-
}
|
|
654
|
-
associateNodeOwner(node, owner);
|
|
655
|
-
return node;
|
|
656
|
-
}
|
|
657
|
-
__name(createBlock, "createBlock");
|
|
658
|
-
function associateNodeOwner(node, owner) {
|
|
659
|
-
nodeOwners.set(node, owner);
|
|
660
|
-
}
|
|
661
|
-
__name(associateNodeOwner, "associateNodeOwner");
|
|
662
|
-
function disposeNodeOwner(node) {
|
|
663
|
-
const owner = nodeOwners.get(node);
|
|
664
|
-
if (!owner) return;
|
|
665
|
-
nodeOwners.delete(node);
|
|
666
|
-
owner.dispose();
|
|
667
|
-
}
|
|
668
|
-
__name(disposeNodeOwner, "disposeNodeOwner");
|
|
669
|
-
|
|
670
|
-
// packages/runtime/src/fragment.ts
|
|
671
|
-
function createFragment(factory) {
|
|
672
|
-
const start = createComment("vobs:fragment:start");
|
|
673
|
-
const end = createComment("vobs:fragment:end");
|
|
674
|
-
let parent = null;
|
|
675
|
-
let initialized = false;
|
|
676
|
-
const owner = getCurrentOwner();
|
|
677
|
-
const fragment = {
|
|
678
|
-
kind: "vobs-fragment",
|
|
679
|
-
start,
|
|
680
|
-
end,
|
|
681
|
-
mount(nextParent, anchor) {
|
|
682
|
-
if (parent && parent !== nextParent) {
|
|
683
|
-
throw new Error("Vobs Fragment: \u4E0D\u80FD\u8DE8\u7236\u8282\u70B9\u79FB\u52A8 Fragment");
|
|
684
|
-
}
|
|
685
|
-
if (initialized) {
|
|
686
|
-
moveRange(nextParent, start, end, anchor);
|
|
687
|
-
return;
|
|
688
|
-
}
|
|
689
|
-
const renderer = getRenderer();
|
|
690
|
-
renderer.insertBefore(nextParent, start, anchor);
|
|
691
|
-
renderer.insertBefore(nextParent, end, anchor);
|
|
692
|
-
parent = nextParent;
|
|
693
|
-
initialized = true;
|
|
694
|
-
if (owner) owner.run(() => factory(nextParent, end));
|
|
695
|
-
else factory(nextParent, end);
|
|
696
|
-
},
|
|
697
|
-
unmount(nextParent) {
|
|
698
|
-
if (!initialized || parent !== nextParent) {
|
|
699
|
-
throw new Error("Vobs Fragment: Fragment \u4E0D\u5C5E\u4E8E\u6307\u5B9A\u7236\u8282\u70B9");
|
|
700
|
-
}
|
|
701
|
-
const renderer = getRenderer();
|
|
702
|
-
let current = renderer.nextSibling(start);
|
|
703
|
-
while (current && current !== end) {
|
|
704
|
-
const next = renderer.nextSibling(current);
|
|
705
|
-
renderer.removeChild(nextParent, current);
|
|
706
|
-
current = next;
|
|
707
|
-
}
|
|
708
|
-
renderer.removeChild(nextParent, start);
|
|
709
|
-
renderer.removeChild(nextParent, end);
|
|
710
|
-
parent = null;
|
|
711
|
-
initialized = false;
|
|
712
|
-
}
|
|
713
|
-
};
|
|
714
|
-
return fragment;
|
|
715
|
-
}
|
|
716
|
-
__name(createFragment, "createFragment");
|
|
717
|
-
function isVobsFragment(value) {
|
|
718
|
-
return Boolean(value) && typeof value === "object" && value.kind === "vobs-fragment";
|
|
719
|
-
}
|
|
720
|
-
__name(isVobsFragment, "isVobsFragment");
|
|
721
|
-
function moveRange(parent, start, end, anchor) {
|
|
722
|
-
const renderer = getRenderer();
|
|
723
|
-
const nodes = [start];
|
|
724
|
-
let current = renderer.nextSibling(start);
|
|
725
|
-
while (current) {
|
|
726
|
-
nodes.push(current);
|
|
727
|
-
if (current === end) break;
|
|
728
|
-
current = renderer.nextSibling(current);
|
|
729
|
-
}
|
|
730
|
-
if (nodes[nodes.length - 1] !== end) {
|
|
731
|
-
throw new Error("Vobs Fragment: \u627E\u4E0D\u5230\u7ED3\u675F\u951A\u70B9");
|
|
732
|
-
}
|
|
733
|
-
for (const node of nodes) renderer.insertBefore(parent, node, anchor);
|
|
734
|
-
}
|
|
735
|
-
__name(moveRange, "moveRange");
|
|
736
|
-
|
|
737
|
-
// packages/runtime/src/dynamic.ts
|
|
738
|
-
function insertDynamic(parent, anchor, factory) {
|
|
739
|
-
const marker = createComment("vobs:dynamic");
|
|
740
|
-
insertBefore(parent, marker, anchor);
|
|
741
|
-
let current = null;
|
|
742
|
-
effect(() => {
|
|
743
|
-
const next = createBlock(factory);
|
|
744
|
-
if (next === current) return;
|
|
745
|
-
if (current) removeChild(parent, current);
|
|
746
|
-
current = next;
|
|
747
|
-
if (current) insertBefore(parent, current, marker);
|
|
748
|
-
});
|
|
749
|
-
}
|
|
750
|
-
__name(insertDynamic, "insertDynamic");
|
|
751
|
-
|
|
752
|
-
// packages/vobs/src/context.ts
|
|
753
|
-
var ownerProviders = /* @__PURE__ */ new WeakMap();
|
|
754
|
-
function provide(key, value, options = {}) {
|
|
755
|
-
const owner = getCurrentOwner();
|
|
756
|
-
if (!owner) throw new Error("Vobs: provide \u5FC5\u987B\u5728\u7EC4\u4EF6\u6216 Owner \u4F5C\u7528\u57DF\u5185\u8C03\u7528");
|
|
757
|
-
provideToOwner(owner, key, value, options);
|
|
758
|
-
}
|
|
759
|
-
__name(provide, "provide");
|
|
760
|
-
function provideToOwner(owner, key, value, options = {}) {
|
|
761
|
-
let providers = ownerProviders.get(owner);
|
|
762
|
-
if (!providers) {
|
|
763
|
-
providers = /* @__PURE__ */ new Map();
|
|
764
|
-
ownerProviders.set(owner, providers);
|
|
765
|
-
owner.onDispose(() => ownerProviders.delete(owner));
|
|
766
|
-
}
|
|
767
|
-
if (providers.has(key) && !options.override) {
|
|
768
|
-
throw new Error(`Vobs: \u6CE8\u5165\u9879 ${String(key)} \u5DF2\u5B58\u5728\uFF1B\u5982\u9700\u8986\u76D6\u8BF7\u4F20\u5165 override: true`);
|
|
769
|
-
}
|
|
770
|
-
providers.set(key, value);
|
|
771
|
-
}
|
|
772
|
-
__name(provideToOwner, "provideToOwner");
|
|
773
|
-
|
|
774
|
-
// packages/vobs/src/app.ts
|
|
775
|
-
function createInjectionKey(description) {
|
|
776
|
-
return Symbol(description);
|
|
777
|
-
}
|
|
778
|
-
__name(createInjectionKey, "createInjectionKey");
|
|
4
|
+
// packages/layout/src/layout.ts
|
|
5
|
+
import { effect as effect4, memo as memo2, state as state3 } from "@vobs/reactivity";
|
|
6
|
+
import {
|
|
7
|
+
addEventListener as addEventListener4,
|
|
8
|
+
createComponent as createComponent2,
|
|
9
|
+
createElement as createElement4,
|
|
10
|
+
createText as createText5,
|
|
11
|
+
insertBefore as insertBefore5,
|
|
12
|
+
insertDynamic as insertDynamic4,
|
|
13
|
+
provide,
|
|
14
|
+
setAttribute as setAttribute5,
|
|
15
|
+
setProperty as setProperty3
|
|
16
|
+
} from "@vobs/vobs";
|
|
779
17
|
|
|
780
18
|
// packages/layout/src/context.ts
|
|
19
|
+
import {
|
|
20
|
+
createInjectionKey,
|
|
21
|
+
inject
|
|
22
|
+
} from "@vobs/vobs";
|
|
781
23
|
var KIT_LAYOUT_KEY = createInjectionKey("vobs.kit.layout");
|
|
782
24
|
|
|
25
|
+
// packages/layout/src/header.ts
|
|
26
|
+
import { effect as effect2 } from "@vobs/reactivity";
|
|
27
|
+
import {
|
|
28
|
+
addEventListener,
|
|
29
|
+
createElement,
|
|
30
|
+
createText as createText2,
|
|
31
|
+
insertBefore as insertBefore2,
|
|
32
|
+
setAttribute as setAttribute2
|
|
33
|
+
} from "@vobs/vobs";
|
|
34
|
+
|
|
783
35
|
// packages/layout/src/utils.ts
|
|
36
|
+
import { effect } from "@vobs/reactivity";
|
|
37
|
+
import {
|
|
38
|
+
createFragment,
|
|
39
|
+
createText,
|
|
40
|
+
insertBefore,
|
|
41
|
+
insertDynamic,
|
|
42
|
+
setAttribute,
|
|
43
|
+
setProperty,
|
|
44
|
+
setTextContent
|
|
45
|
+
} from "@vobs/vobs";
|
|
784
46
|
function readProp(props, name, fallback) {
|
|
785
47
|
const value = Reflect.get(props, name);
|
|
786
48
|
return value === void 0 ? fallback : value;
|
|
@@ -909,44 +171,44 @@ function KitHeader(props = {}) {
|
|
|
909
171
|
"onToggleSidebar"
|
|
910
172
|
]);
|
|
911
173
|
bindUserStyle(root, props);
|
|
912
|
-
|
|
174
|
+
setAttribute2(toggleRegion, "class", "vobs-kit-header__toggle");
|
|
913
175
|
if (hasProp(props, "sidebarToggle")) {
|
|
914
176
|
mountSlot(toggleRegion, props, "sidebarToggle");
|
|
915
177
|
} else {
|
|
916
|
-
|
|
178
|
+
insertBefore2(toggleRegion, createDefaultToggle(props), null);
|
|
917
179
|
}
|
|
918
|
-
|
|
180
|
+
setAttribute2(brand, "class", "vobs-kit-header__brand");
|
|
919
181
|
if (readProp(props, "logo", void 0) !== void 0) {
|
|
920
182
|
const logo = createElement("span");
|
|
921
|
-
|
|
183
|
+
setAttribute2(logo, "class", "vobs-kit-header__logo");
|
|
922
184
|
mountSlot(logo, props, "logo");
|
|
923
|
-
|
|
185
|
+
insertBefore2(brand, logo, null);
|
|
924
186
|
}
|
|
925
187
|
if (readProp(props, "title", void 0) !== void 0) {
|
|
926
188
|
const title = createElement("h1");
|
|
927
|
-
const text =
|
|
928
|
-
|
|
189
|
+
const text = createText2("");
|
|
190
|
+
setAttribute2(title, "class", "vobs-kit-header__title");
|
|
929
191
|
bindTextContent(text, () => readProp(props, "title", ""));
|
|
930
|
-
|
|
931
|
-
|
|
192
|
+
insertBefore2(title, text, null);
|
|
193
|
+
insertBefore2(brand, title, null);
|
|
932
194
|
}
|
|
933
|
-
|
|
195
|
+
setAttribute2(actions, "class", "vobs-kit-header__actions");
|
|
934
196
|
if (readProp(props, "headerActions", void 0) !== void 0) mountSlot(actions, props, "headerActions");
|
|
935
197
|
if (readProp(props, "userMenu", void 0) !== void 0) mountSlot(actions, props, "userMenu");
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
198
|
+
insertBefore2(root, toggleRegion, null);
|
|
199
|
+
insertBefore2(root, brand, null);
|
|
200
|
+
insertBefore2(root, actions, null);
|
|
939
201
|
if (hasProp(props, "children")) mountSlot(root, props, "children");
|
|
940
202
|
return root;
|
|
941
203
|
}
|
|
942
204
|
__name(KitHeader, "KitHeader");
|
|
943
205
|
function createDefaultToggle(props) {
|
|
944
206
|
const button = createElement("button");
|
|
945
|
-
const label =
|
|
946
|
-
|
|
947
|
-
|
|
207
|
+
const label = createText2("");
|
|
208
|
+
setAttribute2(button, "type", "button");
|
|
209
|
+
setAttribute2(button, "class", "vobs-kit-header__toggle-button");
|
|
948
210
|
bindTextContent(label, () => readProp(props, "toggleLabel", "Menu"));
|
|
949
|
-
|
|
211
|
+
insertBefore2(button, label, null);
|
|
950
212
|
addEventListener(button, "click", () => {
|
|
951
213
|
const handler = readProp(props, "onToggleSidebar", void 0);
|
|
952
214
|
if (typeof handler === "function") handler();
|
|
@@ -956,20 +218,43 @@ function createDefaultToggle(props) {
|
|
|
956
218
|
}
|
|
957
219
|
__name(createDefaultToggle, "createDefaultToggle");
|
|
958
220
|
function effectToggleLabel(button, props) {
|
|
959
|
-
|
|
221
|
+
effect2(() => {
|
|
960
222
|
setOptionalAttribute(button, "aria-label", readProp(props, "toggleLabel", "Menu"));
|
|
961
223
|
});
|
|
962
224
|
}
|
|
963
225
|
__name(effectToggleLabel, "effectToggleLabel");
|
|
964
226
|
|
|
227
|
+
// packages/layout/src/sidebar.ts
|
|
228
|
+
import { effect as effect3 } from "@vobs/reactivity";
|
|
229
|
+
import {
|
|
230
|
+
addEventListener as addEventListener3,
|
|
231
|
+
createComponent,
|
|
232
|
+
createElement as createElement3,
|
|
233
|
+
createText as createText4,
|
|
234
|
+
insertBefore as insertBefore4,
|
|
235
|
+
insertDynamic as insertDynamic3,
|
|
236
|
+
setAttribute as setAttribute4
|
|
237
|
+
} from "@vobs/vobs";
|
|
238
|
+
|
|
965
239
|
// packages/layout/src/menu.ts
|
|
240
|
+
import { state } from "@vobs/reactivity";
|
|
241
|
+
import {
|
|
242
|
+
addEventListener as addEventListener2,
|
|
243
|
+
createElement as createElement2,
|
|
244
|
+
createFragment as createFragment2,
|
|
245
|
+
createText as createText3,
|
|
246
|
+
insertBefore as insertBefore3,
|
|
247
|
+
insertDynamic as insertDynamic2,
|
|
248
|
+
setAttribute as setAttribute3,
|
|
249
|
+
setProperty as setProperty2
|
|
250
|
+
} from "@vobs/vobs";
|
|
966
251
|
function KitMenu(props) {
|
|
967
|
-
const root =
|
|
252
|
+
const root = createElement2("ul");
|
|
968
253
|
const expanded = state(/* @__PURE__ */ new Set());
|
|
969
254
|
bindClassList(root, props, () => ["vobs-kit-menu"]);
|
|
970
255
|
bindCommonAttributes(root, props, ["items", "collapsed", "activeKey", "onSelect"]);
|
|
971
|
-
if (!hasProp(props, "role"))
|
|
972
|
-
|
|
256
|
+
if (!hasProp(props, "role")) setAttribute3(root, "role", "menu");
|
|
257
|
+
insertDynamic2(root, null, () => createMenuTree(props, expanded));
|
|
973
258
|
if (hasProp(props, "children")) mountSlot(root, props, "children");
|
|
974
259
|
return root;
|
|
975
260
|
}
|
|
@@ -978,93 +263,93 @@ function createMenuTree(props, expanded) {
|
|
|
978
263
|
const items = readProp(props, "items", []);
|
|
979
264
|
const activeKey = readProp(props, "activeKey", void 0);
|
|
980
265
|
const collapsed = readProp(props, "collapsed", false);
|
|
981
|
-
return
|
|
266
|
+
return createFragment2((parent, anchor) => {
|
|
982
267
|
for (const item of items) {
|
|
983
|
-
|
|
268
|
+
insertBefore3(parent, createMenuItem(item, props, activeKey, collapsed, expanded), anchor);
|
|
984
269
|
}
|
|
985
270
|
});
|
|
986
271
|
}
|
|
987
272
|
__name(createMenuTree, "createMenuTree");
|
|
988
273
|
function createMenuItem(item, props, activeKey, collapsed, expanded) {
|
|
989
|
-
const li =
|
|
274
|
+
const li = createElement2("li");
|
|
990
275
|
const children = item.children ?? [];
|
|
991
276
|
const hasChildren = children.length > 0;
|
|
992
277
|
const active = item.key === activeKey;
|
|
993
278
|
const activeDescendant = children.some((child) => hasActiveDescendant(child, activeKey));
|
|
994
279
|
const isExpanded = expanded.value.has(item.key) || activeDescendant;
|
|
995
|
-
|
|
280
|
+
setAttribute3(li, "class", `vobs-kit-menu__item${active || activeDescendant ? " is-active" : ""}`);
|
|
996
281
|
setOptionalAttribute(li, "data-menu-key", item.key);
|
|
997
282
|
if (hasChildren) {
|
|
998
|
-
const groupButton =
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
283
|
+
const groupButton = createElement2("button");
|
|
284
|
+
setAttribute3(groupButton, "type", "button");
|
|
285
|
+
setAttribute3(groupButton, "class", "vobs-kit-menu__link vobs-kit-menu__group-toggle");
|
|
286
|
+
setAttribute3(groupButton, "aria-expanded", isExpanded ? "true" : "false");
|
|
1002
287
|
if (collapsed) setOptionalAttribute(groupButton, "title", item.label);
|
|
1003
288
|
appendMenuContent(groupButton, item, collapsed);
|
|
1004
|
-
|
|
289
|
+
addEventListener2(groupButton, "click", () => {
|
|
1005
290
|
toggleExpanded(expanded, item.key);
|
|
1006
291
|
if (item.href !== void 0) emitSelect(props, item);
|
|
1007
292
|
});
|
|
1008
|
-
|
|
293
|
+
insertBefore3(li, groupButton, null);
|
|
1009
294
|
if (isExpanded) {
|
|
1010
|
-
const nested =
|
|
1011
|
-
|
|
1012
|
-
|
|
295
|
+
const nested = createElement2("ul");
|
|
296
|
+
setAttribute3(nested, "class", "vobs-kit-menu__children");
|
|
297
|
+
setAttribute3(nested, "role", "menu");
|
|
1013
298
|
for (const child of children) {
|
|
1014
|
-
|
|
299
|
+
insertBefore3(nested, createMenuItem(child, props, activeKey, collapsed, expanded), null);
|
|
1015
300
|
}
|
|
1016
|
-
|
|
301
|
+
insertBefore3(li, nested, null);
|
|
1017
302
|
}
|
|
1018
303
|
} else {
|
|
1019
|
-
const link =
|
|
1020
|
-
|
|
1021
|
-
if (item.href === void 0)
|
|
304
|
+
const link = createElement2(item.href === void 0 ? "button" : "a");
|
|
305
|
+
setAttribute3(link, "class", "vobs-kit-menu__link");
|
|
306
|
+
if (item.href === void 0) setAttribute3(link, "type", "button");
|
|
1022
307
|
else {
|
|
1023
|
-
|
|
308
|
+
setAttribute3(link, "href", item.href);
|
|
1024
309
|
setOptionalAttribute(link, "target", item.target);
|
|
1025
310
|
setOptionalAttribute(link, "rel", item.rel);
|
|
1026
311
|
}
|
|
1027
|
-
if (active)
|
|
312
|
+
if (active) setAttribute3(link, "aria-current", "page");
|
|
1028
313
|
if (item.disabled === true) {
|
|
1029
|
-
|
|
1030
|
-
|
|
314
|
+
setAttribute3(link, "aria-disabled", "true");
|
|
315
|
+
setProperty2(link, "disabled", true);
|
|
1031
316
|
}
|
|
1032
317
|
if (collapsed) setOptionalAttribute(link, "title", item.label);
|
|
1033
318
|
appendMenuContent(link, item, collapsed);
|
|
1034
|
-
|
|
319
|
+
addEventListener2(link, "click", (event) => {
|
|
1035
320
|
if (item.disabled === true) {
|
|
1036
321
|
event.preventDefault?.();
|
|
1037
322
|
return;
|
|
1038
323
|
}
|
|
1039
324
|
emitSelect(props, item);
|
|
1040
325
|
});
|
|
1041
|
-
|
|
326
|
+
insertBefore3(li, link, null);
|
|
1042
327
|
}
|
|
1043
328
|
return li;
|
|
1044
329
|
}
|
|
1045
330
|
__name(createMenuItem, "createMenuItem");
|
|
1046
331
|
function appendMenuContent(parent, item, collapsed) {
|
|
1047
332
|
if (item.icon !== void 0) {
|
|
1048
|
-
const icon =
|
|
1049
|
-
|
|
333
|
+
const icon = createElement2("span");
|
|
334
|
+
setAttribute3(icon, "class", "vobs-kit-menu__icon");
|
|
1050
335
|
mountSlot(icon, item, "icon");
|
|
1051
|
-
|
|
336
|
+
insertBefore3(parent, icon, null);
|
|
1052
337
|
}
|
|
1053
|
-
const label =
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
338
|
+
const label = createElement2("span");
|
|
339
|
+
setAttribute3(label, "class", "vobs-kit-menu__label");
|
|
340
|
+
insertBefore3(label, createText3(item.label), null);
|
|
341
|
+
insertBefore3(parent, label, null);
|
|
1057
342
|
if (item.badge !== void 0 && !collapsed) {
|
|
1058
|
-
const badge =
|
|
1059
|
-
|
|
343
|
+
const badge = createElement2("span");
|
|
344
|
+
setAttribute3(badge, "class", "vobs-kit-menu__badge");
|
|
1060
345
|
mountSlot(badge, item, "badge");
|
|
1061
|
-
|
|
346
|
+
insertBefore3(parent, badge, null);
|
|
1062
347
|
}
|
|
1063
348
|
if (item.children && item.children.length > 0) {
|
|
1064
|
-
const expand =
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
349
|
+
const expand = createElement2("span");
|
|
350
|
+
setAttribute3(expand, "class", "vobs-kit-menu__expand");
|
|
351
|
+
setAttribute3(expand, "aria-hidden", "true");
|
|
352
|
+
insertBefore3(parent, expand, null);
|
|
1068
353
|
}
|
|
1069
354
|
}
|
|
1070
355
|
__name(appendMenuContent, "appendMenuContent");
|
|
@@ -1088,8 +373,8 @@ __name(hasActiveDescendant, "hasActiveDescendant");
|
|
|
1088
373
|
|
|
1089
374
|
// packages/layout/src/sidebar.ts
|
|
1090
375
|
function KitSidebar(props = {}) {
|
|
1091
|
-
const root =
|
|
1092
|
-
const close =
|
|
376
|
+
const root = createElement3("aside");
|
|
377
|
+
const close = createElement3("button");
|
|
1093
378
|
bindClassList(root, props, () => [
|
|
1094
379
|
"vobs-kit-sidebar",
|
|
1095
380
|
readProp(props, "collapsed", false) ? "is-collapsed" : void 0,
|
|
@@ -1109,23 +394,23 @@ function KitSidebar(props = {}) {
|
|
|
1109
394
|
"onClose"
|
|
1110
395
|
]);
|
|
1111
396
|
bindUserStyle(root, props);
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
397
|
+
setAttribute4(close, "type", "button");
|
|
398
|
+
setAttribute4(close, "class", "vobs-kit-sidebar__close");
|
|
399
|
+
effect3(() => {
|
|
1115
400
|
setOptionalAttribute(close, "aria-label", readProp(props, "closeLabel", "Close navigation"));
|
|
1116
401
|
});
|
|
1117
|
-
|
|
1118
|
-
|
|
402
|
+
insertBefore4(close, createCloseLabel(props), null);
|
|
403
|
+
addEventListener3(close, "click", () => {
|
|
1119
404
|
const handler = readProp(props, "onClose", void 0);
|
|
1120
405
|
if (typeof handler === "function") handler();
|
|
1121
406
|
});
|
|
1122
|
-
|
|
1123
|
-
|
|
407
|
+
insertBefore4(root, close, null);
|
|
408
|
+
insertDynamic3(root, null, () => createDefaultMenu(props));
|
|
1124
409
|
if (hasProp(props, "footer")) {
|
|
1125
|
-
const footer =
|
|
1126
|
-
|
|
410
|
+
const footer = createElement3("div");
|
|
411
|
+
setAttribute4(footer, "class", "vobs-kit-sidebar__footer");
|
|
1127
412
|
mountSlot(footer, props, "footer");
|
|
1128
|
-
|
|
413
|
+
insertBefore4(root, footer, null);
|
|
1129
414
|
}
|
|
1130
415
|
if (hasProp(props, "children")) mountSlot(root, props, "children");
|
|
1131
416
|
return root;
|
|
@@ -1151,21 +436,22 @@ function createDefaultMenu(props) {
|
|
|
1151
436
|
}
|
|
1152
437
|
__name(createDefaultMenu, "createDefaultMenu");
|
|
1153
438
|
function createCloseLabel(props) {
|
|
1154
|
-
const text =
|
|
1155
|
-
const content =
|
|
1156
|
-
|
|
439
|
+
const text = createElement3("span");
|
|
440
|
+
const content = createText4("");
|
|
441
|
+
setAttribute4(text, "class", "vobs-kit-sidebar__close-label");
|
|
1157
442
|
bindTextContent(content, () => readProp(props, "closeLabel", "Close navigation"));
|
|
1158
|
-
|
|
443
|
+
insertBefore4(text, content, null);
|
|
1159
444
|
return text;
|
|
1160
445
|
}
|
|
1161
446
|
__name(createCloseLabel, "createCloseLabel");
|
|
1162
447
|
|
|
1163
448
|
// packages/layout/src/viewport.ts
|
|
449
|
+
import { getCurrentOwner, memo, onDispose, state as state2 } from "@vobs/reactivity";
|
|
1164
450
|
var DEFAULT_MOBILE_BREAKPOINT = 768;
|
|
1165
451
|
function createKitViewport(breakpoint = DEFAULT_MOBILE_BREAKPOINT) {
|
|
1166
452
|
const normalizedBreakpoint = normalizeBreakpoint(breakpoint);
|
|
1167
|
-
const width =
|
|
1168
|
-
const height =
|
|
453
|
+
const width = state2(readWidth(), "layout.viewport.width");
|
|
454
|
+
const height = state2(readHeight(), "layout.viewport.height");
|
|
1169
455
|
const isMobile = memo(() => width.value < normalizedBreakpoint);
|
|
1170
456
|
let disposed = false;
|
|
1171
457
|
const onResize = /* @__PURE__ */ __name(() => {
|
|
@@ -1211,33 +497,33 @@ __name(readHeight, "readHeight");
|
|
|
1211
497
|
|
|
1212
498
|
// packages/layout/src/layout.ts
|
|
1213
499
|
function KitLayout(props = {}) {
|
|
1214
|
-
const root =
|
|
1215
|
-
const header =
|
|
1216
|
-
const body =
|
|
1217
|
-
const sidebar =
|
|
1218
|
-
const main =
|
|
1219
|
-
const breadcrumb =
|
|
1220
|
-
const tabs =
|
|
1221
|
-
const content =
|
|
1222
|
-
const backdrop =
|
|
1223
|
-
const footer =
|
|
500
|
+
const root = createElement4("div");
|
|
501
|
+
const header = createElement4("div");
|
|
502
|
+
const body = createElement4("div");
|
|
503
|
+
const sidebar = createElement4("div");
|
|
504
|
+
const main = createElement4("main");
|
|
505
|
+
const breadcrumb = createElement4("div");
|
|
506
|
+
const tabs = createElement4("div");
|
|
507
|
+
const content = createElement4("div");
|
|
508
|
+
const backdrop = createElement4("div");
|
|
509
|
+
const footer = createElement4("footer");
|
|
1224
510
|
const breakpoint = normalizeBreakpoint(
|
|
1225
511
|
readProp(props, "mobileBreakpoint", DEFAULT_MOBILE_BREAKPOINT)
|
|
1226
512
|
);
|
|
1227
513
|
const viewport = createKitViewport(breakpoint);
|
|
1228
514
|
const sidebarExpanded = readProp(props, "sidebarExpanded", false);
|
|
1229
|
-
const internalCollapsed =
|
|
515
|
+
const internalCollapsed = state3(
|
|
1230
516
|
readProp(props, "sidebarCollapsed", void 0) ?? !sidebarExpanded
|
|
1231
517
|
);
|
|
1232
|
-
const internalMobileOpen =
|
|
1233
|
-
const collapsed =
|
|
1234
|
-
const mobileOpen =
|
|
1235
|
-
const headerVisible =
|
|
1236
|
-
const sidebarVisible =
|
|
1237
|
-
const backdropVisible =
|
|
1238
|
-
const breadcrumbVisible =
|
|
1239
|
-
const tabsVisible =
|
|
1240
|
-
const footerVisible =
|
|
518
|
+
const internalMobileOpen = state3(readProp(props, "mobileOpen", void 0) ?? false);
|
|
519
|
+
const collapsed = memo2(() => readProp(props, "sidebarCollapsed", void 0) ?? internalCollapsed.value);
|
|
520
|
+
const mobileOpen = memo2(() => readProp(props, "mobileOpen", void 0) ?? internalMobileOpen.value);
|
|
521
|
+
const headerVisible = state3(!isProvided(props, "header"));
|
|
522
|
+
const sidebarVisible = state3(isProvided(props, "sidebar") || hasProp(props, "menu"));
|
|
523
|
+
const backdropVisible = state3(!isProvided(props, "mobileBackdrop"));
|
|
524
|
+
const breadcrumbVisible = state3(false);
|
|
525
|
+
const tabsVisible = state3(false);
|
|
526
|
+
const footerVisible = state3(false);
|
|
1241
527
|
const context = {
|
|
1242
528
|
sidebarCollapsed: collapsed,
|
|
1243
529
|
mobileOpen,
|
|
@@ -1301,41 +587,41 @@ function KitLayout(props = {}) {
|
|
|
1301
587
|
if (sidebarWidth === void 0) return "";
|
|
1302
588
|
return `--vobs-kit-sidebar-width: ${normalizeSidebarWidth(sidebarWidth)}px`;
|
|
1303
589
|
});
|
|
1304
|
-
|
|
1305
|
-
|
|
590
|
+
setAttribute5(header, "class", "vobs-kit-layout__header");
|
|
591
|
+
insertDynamic4(header, null, () => createHeaderSlot(props, context, headerVisible));
|
|
1306
592
|
bindVisibility(header, headerVisible);
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
593
|
+
setAttribute5(body, "class", "vobs-kit-layout__body");
|
|
594
|
+
setAttribute5(sidebar, "class", "vobs-kit-layout__sidebar");
|
|
595
|
+
setAttribute5(main, "class", "vobs-kit-layout__main");
|
|
596
|
+
setAttribute5(breadcrumb, "class", "vobs-kit-layout__breadcrumb");
|
|
597
|
+
setAttribute5(tabs, "class", "vobs-kit-layout__tabs");
|
|
598
|
+
setAttribute5(content, "class", "vobs-kit-layout__content");
|
|
599
|
+
insertDynamic4(sidebar, null, () => createSidebarSlot(props, context, sidebarVisible));
|
|
1314
600
|
bindVisibility(sidebar, sidebarVisible);
|
|
1315
|
-
|
|
601
|
+
insertDynamic4(breadcrumb, null, () => createNamedSlot(props, "breadcrumb", breadcrumbVisible));
|
|
1316
602
|
bindVisibility(breadcrumb, breadcrumbVisible);
|
|
1317
|
-
|
|
603
|
+
insertDynamic4(tabs, null, () => createNamedSlot(props, "tabs", tabsVisible));
|
|
1318
604
|
bindVisibility(tabs, tabsVisible);
|
|
1319
605
|
if (hasProp(props, "children")) mountSlot(content, props, "children");
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
bindVisibility(backdrop,
|
|
1328
|
-
|
|
1329
|
-
|
|
606
|
+
insertBefore5(main, breadcrumb, null);
|
|
607
|
+
insertBefore5(main, tabs, null);
|
|
608
|
+
insertBefore5(main, content, null);
|
|
609
|
+
insertBefore5(body, sidebar, null);
|
|
610
|
+
insertBefore5(body, main, null);
|
|
611
|
+
setAttribute5(backdrop, "class", "vobs-kit-layout__backdrop");
|
|
612
|
+
insertDynamic4(backdrop, null, () => createBackdropSlot(props, context, sidebarVisible, backdropVisible));
|
|
613
|
+
bindVisibility(backdrop, memo2(() => backdropVisible.value && sidebarVisible.value && mobileOpen.value));
|
|
614
|
+
setAttribute5(footer, "class", "vobs-kit-layout__footer");
|
|
615
|
+
insertDynamic4(footer, null, () => {
|
|
1330
616
|
const value = isProvided(props, "footer") ? resolveSlot(readProp(props, "footer", void 0)) : null;
|
|
1331
617
|
footerVisible.value = value !== null;
|
|
1332
618
|
return value;
|
|
1333
619
|
});
|
|
1334
620
|
bindVisibility(footer, footerVisible);
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
621
|
+
insertBefore5(root, header, null);
|
|
622
|
+
insertBefore5(root, body, null);
|
|
623
|
+
insertBefore5(root, backdrop, null);
|
|
624
|
+
insertBefore5(root, footer, null);
|
|
1339
625
|
return root;
|
|
1340
626
|
}
|
|
1341
627
|
__name(KitLayout, "KitLayout");
|
|
@@ -1346,7 +632,7 @@ function createHeaderSlot(props, context, visible) {
|
|
|
1346
632
|
return value;
|
|
1347
633
|
}
|
|
1348
634
|
visible.value = true;
|
|
1349
|
-
return
|
|
635
|
+
return createComponent2(KitHeader, {
|
|
1350
636
|
get logo() {
|
|
1351
637
|
return readProp(props, "logo", void 0);
|
|
1352
638
|
},
|
|
@@ -1378,7 +664,7 @@ function createSidebarSlot(props, context, visible) {
|
|
|
1378
664
|
return null;
|
|
1379
665
|
}
|
|
1380
666
|
visible.value = true;
|
|
1381
|
-
return
|
|
667
|
+
return createComponent2(KitSidebar, {
|
|
1382
668
|
get menu() {
|
|
1383
669
|
return readProp(props, "menu", []);
|
|
1384
670
|
},
|
|
@@ -1422,12 +708,12 @@ function createBackdropSlot(props, context, sidebarVisible, visible) {
|
|
|
1422
708
|
return null;
|
|
1423
709
|
}
|
|
1424
710
|
visible.value = true;
|
|
1425
|
-
const button =
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
711
|
+
const button = createElement4("button");
|
|
712
|
+
setAttribute5(button, "type", "button");
|
|
713
|
+
setAttribute5(button, "class", "vobs-kit-layout__backdrop-button");
|
|
714
|
+
setAttribute5(button, "aria-label", "Close navigation");
|
|
715
|
+
insertBefore5(button, createText5(""), null);
|
|
716
|
+
addEventListener4(button, "click", () => {
|
|
1431
717
|
context.setMobileOpen(false);
|
|
1432
718
|
const handler = readProp(props, "onCloseSidebar", void 0);
|
|
1433
719
|
if (typeof handler === "function") handler();
|
|
@@ -1436,8 +722,8 @@ function createBackdropSlot(props, context, sidebarVisible, visible) {
|
|
|
1436
722
|
}
|
|
1437
723
|
__name(createBackdropSlot, "createBackdropSlot");
|
|
1438
724
|
function bindVisibility(node, visible) {
|
|
1439
|
-
|
|
1440
|
-
|
|
725
|
+
effect4(() => {
|
|
726
|
+
setProperty3(node, "hidden", !visible.value);
|
|
1441
727
|
setOptionalAttribute(node, "aria-hidden", visible.value ? void 0 : "true");
|
|
1442
728
|
});
|
|
1443
729
|
}
|
|
@@ -1457,7 +743,7 @@ function isProvided(props, name) {
|
|
|
1457
743
|
return hasProp(props, name) && Reflect.get(props, name) !== void 0;
|
|
1458
744
|
}
|
|
1459
745
|
__name(isProvided, "isProvided");
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
746
|
+
export {
|
|
747
|
+
KitLayout
|
|
748
|
+
};
|
|
1463
749
|
//# sourceMappingURL=layout.js.map
|