fundus 0.12.2 → 0.14.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/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css +1 -0
- package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.br +0 -0
- package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.gz +0 -0
- package/build/client/_app/immutable/chunks/77p2oEJ1.js +1 -0
- package/build/client/_app/immutable/chunks/77p2oEJ1.js.br +0 -0
- package/build/client/_app/immutable/chunks/77p2oEJ1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_PWcB6g.js +108 -0
- package/build/client/_app/immutable/chunks/B_PWcB6g.js.br +0 -0
- package/build/client/_app/immutable/chunks/B_PWcB6g.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{D-dMdMUj.js → RgXSPQ_h.js} +1 -1
- package/build/client/_app/immutable/chunks/RgXSPQ_h.js.br +0 -0
- package/build/client/_app/immutable/chunks/RgXSPQ_h.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.CmTIRtCw.js → app.BsvwTApt.js} +2 -2
- package/build/client/_app/immutable/entry/app.BsvwTApt.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BsvwTApt.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BdjLMMsY.js +1 -0
- package/build/client/_app/immutable/entry/start.BdjLMMsY.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BdjLMMsY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.CNULKexJ.js → 0.CjQfQrD6.js} +1 -1
- package/build/client/_app/immutable/nodes/0.CjQfQrD6.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CjQfQrD6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.Cq-r1S-6.js → 1.DyPcUKIh.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DyPcUKIh.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.DyPcUKIh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.B4CjEZCb.js → 2.CworwA2R.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CworwA2R.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CworwA2R.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BKqbML1T.js +1 -0
- package/build/client/_app/immutable/nodes/3.BKqbML1T.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BKqbML1T.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.BkqPmamr.js → 4.Cmigd8CT.js} +1 -1
- package/build/client/_app/immutable/nodes/4.Cmigd8CT.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.Cmigd8CT.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/handler.js +7 -7
- package/build/index.js +7 -7
- package/build/server/chunks/chunks/{context.js-6YdbScn_.js → context.js-CVuTSPjH.js} +2 -2
- package/build/server/chunks/chunks/{context.js-6YdbScn_.js.map → context.js-CVuTSPjH.js.map} +1 -1
- package/build/server/chunks/chunks/{contract.js-BHQbpsFk.js → contract.js-itFN0Gon.js} +6 -2
- package/build/server/chunks/chunks/contract.js-itFN0Gon.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-ku1LJuiG.js → exports.js-B13PkE0J.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-ku1LJuiG.js.map → exports.js-B13PkE0J.js.map} +1 -1
- package/build/server/chunks/chunks/{http.js-dbT0ifQ9.js → http.js-ChQRRKfZ.js} +2 -2
- package/build/server/chunks/chunks/{http.js-dbT0ifQ9.js.map → http.js-ChQRRKfZ.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-BSRzKMSE.js → internal.js-DlKoWKM-.js} +3 -3
- package/build/server/chunks/chunks/{internal.js-BSRzKMSE.js.map → internal.js-DlKoWKM-.js.map} +1 -1
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{shared.js-DgL50WRD.js → shared.js-DKt4pwWi.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-DgL50WRD.js.map → shared.js-DKt4pwWi.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-D4p4YSNW.js → utils.js-BYMC-4Wt.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-D4p4YSNW.js.map → utils.js-BYMC-4Wt.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-BaMGnbi8.js → _server.ts.js-z988EDp2.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-BaMGnbi8.js.map → _server.ts.js-z988EDp2.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-B6YhmqYd.js → _server.ts.js-C68ru6gS.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-B6YhmqYd.js.map → _server.ts.js-C68ru6gS.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-qtGGwjZ4.js → _server.ts.js-C0tk6RFk.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-qtGGwjZ4.js.map → _server.ts.js-C0tk6RFk.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-98vjovDS.js → _server.ts.js-I03oZuo8.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-98vjovDS.js.map → _server.ts.js-I03oZuo8.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-CCzQEr--.js → _server.ts.js-BsQB8YDq.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-CCzQEr--.js.map → _server.ts.js-BsQB8YDq.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Ca7G_5IJ.js → _server.ts.js-CJuFE6Fb.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Ca7G_5IJ.js.map → _server.ts.js-CJuFE6Fb.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DRw4ICSn.js → _server.ts.js-DuOZRRiA.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DRw4ICSn.js.map → _server.ts.js-DuOZRRiA.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-Ai46jTgw.js → _server.ts.js-DGzYpQbv.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-Ai46jTgw.js.map → _server.ts.js-DGzYpQbv.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-NQKYbtiU.js → _server.ts.js-B045QoCA.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-NQKYbtiU.js.map → _server.ts.js-B045QoCA.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-_vJ2Npqd.js → _server.ts.js-HUkVdz19.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-_vJ2Npqd.js.map → _server.ts.js-HUkVdz19.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DIn5srjK.js → _server.ts.js-ry509mom.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DIn5srjK.js.map → _server.ts.js-ry509mom.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-CqFLRTP-.js → _server.ts.js-DU0J7U25.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-CqFLRTP-.js.map → _server.ts.js-DU0J7U25.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-BYn_v3VS.js → _server.ts.js-AZIV2PIn.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-BYn_v3VS.js.map → _server.ts.js-AZIV2PIn.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-sxVzkX1S.js → _server.ts.js-CDL0hCfM.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-sxVzkX1S.js.map → _server.ts.js-CDL0hCfM.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-E3B6VyAs.js → _server.ts.js-B13c17fq.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-E3B6VyAs.js.map → _server.ts.js-B13c17fq.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-ClgS9ghS.js → _server.ts.js-BCxjyAGC.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-ClgS9ghS.js.map → _server.ts.js-BCxjyAGC.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BPUzWMNL.js → _server.ts.js-BveeMZc2.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BPUzWMNL.js.map → _server.ts.js-BveeMZc2.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-_G6pURnx.js → _server.ts.js-BZjTd9a0.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-_G6pURnx.js.map → _server.ts.js-BZjTd9a0.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-as3GcjaI.js → _server.ts.js-BbTfPvC9.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-as3GcjaI.js.map → _server.ts.js-BbTfPvC9.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-CR58wymO.js → _server.ts.js-8VPJMLBk.js} +3 -3
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-CR58wymO.js.map → _server.ts.js-8VPJMLBk.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Do2LOf04.js → _server.ts.js-BqR2J2sB.js} +4 -4
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Do2LOf04.js.map → _server.ts.js-BqR2J2sB.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Ckp6_SaE.js → _server.ts.js-DbA28dCY.js} +4 -4
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Ckp6_SaE.js.map → _server.ts.js-DbA28dCY.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-CL1tg0CT.js → hooks.server.js-9PBc_3Jh.js} +3 -3
- package/build/server/chunks/entries/{hooks.server.js-CL1tg0CT.js.map → hooks.server.js-9PBc_3Jh.js.map} +1 -1
- package/build/server/chunks/{handler-BRtsY9uB.js → handler-XxBNCHhb.js} +5 -5
- package/build/server/chunks/{handler-BRtsY9uB.js.map → handler-XxBNCHhb.js.map} +1 -1
- package/build/server/chunks/{index.js-g3JzUW3v.js → index.js-B_76Gq5Y.js} +5 -5
- package/build/server/chunks/{index.js-g3JzUW3v.js.map → index.js-B_76Gq5Y.js.map} +1 -1
- package/build/server/chunks/{manifest.js-D51Bb0-d.js → manifest.js-C2MZZt3o.js} +29 -29
- package/build/server/chunks/{manifest.js-D51Bb0-d.js.map → manifest.js-C2MZZt3o.js.map} +1 -1
- package/build/server/chunks/nodes/{0.js-B1bRRxWY.js → 0.js-BLURyWmd.js} +2 -2
- package/build/server/chunks/nodes/{0.js-B1bRRxWY.js.map → 0.js-BLURyWmd.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-CITI7d3d.js +7 -0
- package/build/server/chunks/nodes/{1.js-BIjbx0GP.js.map → 1.js-CITI7d3d.js.map} +1 -1
- package/build/server/chunks/nodes/2.js-DAls5TjF.js +7 -0
- package/build/server/chunks/nodes/{2.js-B6X0GbFS.js.map → 2.js-DAls5TjF.js.map} +1 -1
- package/build/server/chunks/nodes/3.js-CesAmg_E.js +7 -0
- package/build/server/chunks/nodes/{3.js-CQVJ114p.js.map → 3.js-CesAmg_E.js.map} +1 -1
- package/build/server/chunks/nodes/{4.js-Bt9pLOHE.js → 4.js-BRlAiVnn.js} +2 -2
- package/build/server/chunks/nodes/{4.js-Bt9pLOHE.js.map → 4.js-BRlAiVnn.js.map} +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/manifest-entry.d.ts +14 -5
- package/dist/runtime/components/ChromaKeyVideo.svelte +3 -0
- package/dist/runtime/components/Image.svelte +3 -0
- package/dist/runtime/components/Slice.svelte +215 -18
- package/dist/runtime/components/Slice.svelte.d.ts +3 -4
- package/dist/runtime/components/Video.svelte +3 -0
- package/dist/runtime/geometry.d.ts +15 -9
- package/dist/runtime/geometry.js +21 -14
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/kind-handlers.d.ts +22 -10
- package/dist/runtime/kind-handlers.js +58 -21
- package/dist/runtime/logging.d.ts +34 -0
- package/dist/runtime/logging.js +27 -0
- package/dist/runtime/manifest.d.ts +16 -5
- package/dist/runtime/manifest.js +19 -8
- package/dist/runtime/observe-border-box-size.d.ts +1 -1
- package/dist/runtime/observe-border-box-size.js +2 -2
- package/dist/runtime/preload-registry.d.ts +20 -1
- package/dist/runtime/preload-registry.js +23 -2
- package/dist/runtime/slice-source-lifecycle.d.ts +11 -2
- package/dist/runtime/slice-source-lifecycle.js +21 -2
- package/dist/server/codegen.js +5 -1
- package/package.json +1 -1
- package/build/client/_app/immutable/assets/AssetSourceMenu.DOu9eU7n.css +0 -1
- package/build/client/_app/immutable/assets/AssetSourceMenu.DOu9eU7n.css.br +0 -0
- package/build/client/_app/immutable/assets/AssetSourceMenu.DOu9eU7n.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BR73V5PG.js +0 -1
- package/build/client/_app/immutable/chunks/BR73V5PG.js.br +0 -2
- package/build/client/_app/immutable/chunks/BR73V5PG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D-dMdMUj.js.br +0 -0
- package/build/client/_app/immutable/chunks/D-dMdMUj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PGG-LyPT.js +0 -108
- package/build/client/_app/immutable/chunks/PGG-LyPT.js.br +0 -0
- package/build/client/_app/immutable/chunks/PGG-LyPT.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CmTIRtCw.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CmTIRtCw.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.M4xqAoBc.js +0 -1
- package/build/client/_app/immutable/entry/start.M4xqAoBc.js.br +0 -1
- package/build/client/_app/immutable/entry/start.M4xqAoBc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CNULKexJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CNULKexJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Cq-r1S-6.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Cq-r1S-6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.B4CjEZCb.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.B4CjEZCb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DzWxKBWe.js +0 -1
- package/build/client/_app/immutable/nodes/3.DzWxKBWe.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DzWxKBWe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BkqPmamr.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BkqPmamr.js.gz +0 -0
- package/build/server/chunks/chunks/contract.js-BHQbpsFk.js.map +0 -1
- package/build/server/chunks/nodes/1.js-BIjbx0GP.js +0 -7
- package/build/server/chunks/nodes/2.js-B6X0GbFS.js +0 -7
- package/build/server/chunks/nodes/3.js-CQVJ114p.js +0 -7
- package/dist/runtime/components/SliceCanvas.svelte +0 -173
- package/dist/runtime/components/SliceCanvas.svelte.d.ts +0 -10
- package/dist/runtime/components/SliceDom.svelte +0 -161
- package/dist/runtime/components/SliceDom.svelte.d.ts +0 -10
|
@@ -11,14 +11,24 @@
|
|
|
11
11
|
import type { ManifestEntry, PreloadOptions } from '../core/index.js';
|
|
12
12
|
/** One deliverable file of an entry: identity, kind, and expected byte length. */
|
|
13
13
|
export interface EntrySource {
|
|
14
|
+
/** The asset id the source belongs to — inlined reference sources carry their own. */
|
|
15
|
+
id: string;
|
|
14
16
|
url: string;
|
|
15
17
|
kind: string;
|
|
16
18
|
byteSize: number;
|
|
19
|
+
/**
|
|
20
|
+
* The (possibly inlined) entry the source came from. Kind strategies read
|
|
21
|
+
* per-entry metadata from it — the slice handler picks its retention form
|
|
22
|
+
* by slicing mode. Orchestration itself never looks inside.
|
|
23
|
+
*/
|
|
24
|
+
entry: Record<string, unknown>;
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
|
-
* Collect every deliverable
|
|
20
|
-
* inlined in place of asset references: any nested object carrying
|
|
21
|
-
* a string `kind
|
|
27
|
+
* Collect every deliverable source of an entry, including the entries codegen
|
|
28
|
+
* inlined in place of asset references: a source is any nested object carrying
|
|
29
|
+
* a string `id`, `kind`, and `src` — i.e. an asset entry (every generated entry
|
|
30
|
+
* carries all three). Requiring `id` keeps `EntrySource.id` an honest `string`
|
|
31
|
+
* and never drops a real source, since codegen bakes an id into every entry.
|
|
22
32
|
* Generic by design: adding a kind does not change preload orchestration.
|
|
23
33
|
*/
|
|
24
34
|
export declare function collectEntrySources(entry: ManifestEntry): EntrySource[];
|
|
@@ -49,8 +59,9 @@ export declare class Manifest {
|
|
|
49
59
|
* Drop this manifest's holds on everything it preloaded. Assets shared
|
|
50
60
|
* with another preloaded manifest stay fully alive for that holder; assets
|
|
51
61
|
* nobody holds anymore are disposed via their kind's release strategy
|
|
52
|
-
* (retained media object URLs are revoked,
|
|
53
|
-
* of a fully released source fall back to its
|
|
62
|
+
* (retained media object URLs are revoked, slice bitmaps closed, freeing
|
|
63
|
+
* the memory). Consumers of a fully released source fall back to its
|
|
64
|
+
* network URL.
|
|
54
65
|
*
|
|
55
66
|
* Safe in every state: before or without `preload()` it is a no-op, and
|
|
56
67
|
* calling it while a `preload()` is still in flight drops the holds
|
package/dist/runtime/manifest.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { acquireSource, releaseSource } from './preload-registry.js';
|
|
2
2
|
/**
|
|
3
|
-
* Collect every deliverable
|
|
4
|
-
* inlined in place of asset references: any nested object carrying
|
|
5
|
-
* a string `kind
|
|
3
|
+
* Collect every deliverable source of an entry, including the entries codegen
|
|
4
|
+
* inlined in place of asset references: a source is any nested object carrying
|
|
5
|
+
* a string `id`, `kind`, and `src` — i.e. an asset entry (every generated entry
|
|
6
|
+
* carries all three). Requiring `id` keeps `EntrySource.id` an honest `string`
|
|
7
|
+
* and never drops a real source, since codegen bakes an id into every entry.
|
|
6
8
|
* Generic by design: adding a kind does not change preload orchestration.
|
|
7
9
|
*/
|
|
8
10
|
export function collectEntrySources(entry) {
|
|
@@ -18,11 +20,19 @@ export function collectEntrySources(entry) {
|
|
|
18
20
|
if (typeof value !== 'object' || value === null)
|
|
19
21
|
return;
|
|
20
22
|
const record = value;
|
|
21
|
-
if (typeof record.
|
|
23
|
+
if (typeof record.id === 'string' &&
|
|
24
|
+
typeof record.kind === 'string' &&
|
|
25
|
+
typeof record.src === 'string') {
|
|
22
26
|
if (!Number.isSafeInteger(record.byteSize) || record.byteSize < 0) {
|
|
23
27
|
throw new Error(`Manifest entry for "${record.src}" requires a non-negative safe integer "byteSize".`);
|
|
24
28
|
}
|
|
25
|
-
sources.push({
|
|
29
|
+
sources.push({
|
|
30
|
+
id: record.id,
|
|
31
|
+
url: record.src,
|
|
32
|
+
kind: record.kind,
|
|
33
|
+
byteSize: record.byteSize,
|
|
34
|
+
entry: record
|
|
35
|
+
});
|
|
26
36
|
}
|
|
27
37
|
for (const nested of Object.values(record))
|
|
28
38
|
visit(nested);
|
|
@@ -87,8 +97,9 @@ export class Manifest {
|
|
|
87
97
|
* Drop this manifest's holds on everything it preloaded. Assets shared
|
|
88
98
|
* with another preloaded manifest stay fully alive for that holder; assets
|
|
89
99
|
* nobody holds anymore are disposed via their kind's release strategy
|
|
90
|
-
* (retained media object URLs are revoked,
|
|
91
|
-
* of a fully released source fall back to its
|
|
100
|
+
* (retained media object URLs are revoked, slice bitmaps closed, freeing
|
|
101
|
+
* the memory). Consumers of a fully released source fall back to its
|
|
102
|
+
* network URL.
|
|
92
103
|
*
|
|
93
104
|
* Safe in every state: before or without `preload()` it is a no-op, and
|
|
94
105
|
* calling it while a `preload()` is still in flight drops the holds
|
|
@@ -121,7 +132,7 @@ export class Manifest {
|
|
|
121
132
|
const acquisitions = [];
|
|
122
133
|
for (const [url, source] of sourceByUrl) {
|
|
123
134
|
held.add(url);
|
|
124
|
-
acquisitions.push(acquireSource(url, source.kind, source.byteSize, options));
|
|
135
|
+
acquisitions.push(acquireSource(url, source.kind, source.byteSize, options, source.entry));
|
|
125
136
|
}
|
|
126
137
|
const outcomes = await Promise.allSettled(acquisitions);
|
|
127
138
|
const failure = outcomes.find((outcome) => outcome.status === 'rejected');
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/** Observe an element's layout border-box size
|
|
1
|
+
/** Observe an element's layout border-box size without discarding fractional CSS pixels. */
|
|
2
2
|
export declare function observeBorderBoxSize(element: HTMLElement, onSize: (width: number, height: number) => void): () => void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/** Observe an element's layout border-box size
|
|
1
|
+
/** Observe an element's layout border-box size without discarding fractional CSS pixels. */
|
|
2
2
|
export function observeBorderBoxSize(element, onSize) {
|
|
3
3
|
const observer = new ResizeObserver((entries) => {
|
|
4
4
|
// Measure layout, not getBoundingClientRect(): transforms must not freeze
|
|
5
5
|
// render geometry after an animation because they do not retrigger resize.
|
|
6
6
|
const size = entries[0]?.borderBoxSize?.[0];
|
|
7
|
-
onSize(
|
|
7
|
+
onSize(size?.inlineSize ?? element.offsetWidth, size?.blockSize ?? element.offsetHeight);
|
|
8
8
|
});
|
|
9
9
|
observer.observe(element);
|
|
10
10
|
return () => observer.disconnect();
|
|
@@ -24,7 +24,7 @@ import type { PreloadOptions } from '../core/index.js';
|
|
|
24
24
|
* load clears the in-flight state so the URL stays retryable; the caller
|
|
25
25
|
* rolls back its own hold via `releaseSource`.
|
|
26
26
|
*/
|
|
27
|
-
export declare function acquireSource(url: string, kind: string, byteSize: number, options: PreloadOptions): Promise<void>;
|
|
27
|
+
export declare function acquireSource(url: string, kind: string, byteSize: number, options: PreloadOptions, sourceEntry?: Record<string, unknown>): Promise<void>;
|
|
28
28
|
/**
|
|
29
29
|
* Drop one hold on `url`. At zero holds the kind handler's release strategy
|
|
30
30
|
* runs (object URL revoked) and the entry is cleared — unless the load is
|
|
@@ -38,3 +38,22 @@ export declare function releaseSource(url: string): void;
|
|
|
38
38
|
* consumer falls back to the network URL and simply streams.
|
|
39
39
|
*/
|
|
40
40
|
export declare function resolveRetainedSource(url: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* The retained decoded source of a slice URL while some manifest holds it —
|
|
43
|
+
* the pinned bitmap of a multi-cell slice, or the decoded element of a
|
|
44
|
+
* one-slice — or `null` when not (or no longer) preloaded; the consumer then
|
|
45
|
+
* falls back to an async image load. Never returns a closed bitmap: closing
|
|
46
|
+
* happens only when the entry is dropped from the registry.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveRetainedSliceSource(url: string): ImageBitmap | HTMLImageElement | null;
|
|
49
|
+
/**
|
|
50
|
+
* A source's preload state, for render-time diagnostics:
|
|
51
|
+
* - `loaded` — fully preloaded and held (every kind resolves non-null
|
|
52
|
+
* `resources`, so this holds for image/slice as well as retained media);
|
|
53
|
+
* - `pending` — a preload is in flight;
|
|
54
|
+
* - `absent` — never preloaded, released, or a prior preload failed. `absent`
|
|
55
|
+
* means "not currently loaded", not "not needed" — a component showing an
|
|
56
|
+
* `absent` source fetches it fresh on render.
|
|
57
|
+
*/
|
|
58
|
+
export type SourceStatus = 'loaded' | 'pending' | 'absent';
|
|
59
|
+
export declare function sourceStatus(url: string): SourceStatus;
|
|
@@ -7,7 +7,7 @@ const registryByUrl = new Map();
|
|
|
7
7
|
* load clears the in-flight state so the URL stays retryable; the caller
|
|
8
8
|
* rolls back its own hold via `releaseSource`.
|
|
9
9
|
*/
|
|
10
|
-
export function acquireSource(url, kind, byteSize, options) {
|
|
10
|
+
export function acquireSource(url, kind, byteSize, options, sourceEntry) {
|
|
11
11
|
let entry = registryByUrl.get(url);
|
|
12
12
|
if (!entry) {
|
|
13
13
|
entry = { kind, byteSize, referenceCount: 0, pending: null, resources: null };
|
|
@@ -23,7 +23,7 @@ export function acquireSource(url, kind, byteSize, options) {
|
|
|
23
23
|
if (!pending) {
|
|
24
24
|
const acquired = entry;
|
|
25
25
|
pending = runtimeHandlerFor(kind)
|
|
26
|
-
.preload(url, byteSize, options)
|
|
26
|
+
.preload(url, byteSize, options, sourceEntry)
|
|
27
27
|
.then((resources) => {
|
|
28
28
|
acquired.pending = null;
|
|
29
29
|
if (acquired.referenceCount === 0) {
|
|
@@ -72,3 +72,24 @@ export function releaseSource(url) {
|
|
|
72
72
|
export function resolveRetainedSource(url) {
|
|
73
73
|
return registryByUrl.get(url)?.resources?.objectUrl ?? url;
|
|
74
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* The retained decoded source of a slice URL while some manifest holds it —
|
|
77
|
+
* the pinned bitmap of a multi-cell slice, or the decoded element of a
|
|
78
|
+
* one-slice — or `null` when not (or no longer) preloaded; the consumer then
|
|
79
|
+
* falls back to an async image load. Never returns a closed bitmap: closing
|
|
80
|
+
* happens only when the entry is dropped from the registry.
|
|
81
|
+
*/
|
|
82
|
+
export function resolveRetainedSliceSource(url) {
|
|
83
|
+
const resources = registryByUrl.get(url)?.resources;
|
|
84
|
+
return resources?.imageBitmap ?? resources?.image ?? null;
|
|
85
|
+
}
|
|
86
|
+
export function sourceStatus(url) {
|
|
87
|
+
const entry = registryByUrl.get(url);
|
|
88
|
+
if (!entry)
|
|
89
|
+
return 'absent';
|
|
90
|
+
if (entry.resources !== null)
|
|
91
|
+
return 'loaded';
|
|
92
|
+
if (entry.pending !== null)
|
|
93
|
+
return 'pending';
|
|
94
|
+
return 'absent';
|
|
95
|
+
}
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import type { SliceManifestEntry } from '../core/index.js';
|
|
2
|
+
/** What a committed slice draws from: a decoded element or a retained bitmap. */
|
|
3
|
+
export type SliceRenderSource = HTMLImageElement | ImageBitmap;
|
|
2
4
|
export interface LoadedSliceSnapshot {
|
|
3
5
|
entry: SliceManifestEntry;
|
|
4
|
-
image:
|
|
6
|
+
image: SliceRenderSource;
|
|
5
7
|
}
|
|
6
8
|
export type SliceImageLoader = (url: string) => Promise<HTMLImageElement>;
|
|
9
|
+
export type RetainedSliceSourceResolver = (url: string) => SliceRenderSource | null;
|
|
10
|
+
/**
|
|
11
|
+
* Whether a committed source can no longer be drawn: a preload-retained
|
|
12
|
+
* bitmap is closed when its last hold is released, and drawing a closed
|
|
13
|
+
* bitmap throws. A detached source is dropped and reloaded asynchronously.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isDetachedSliceSource(image: SliceRenderSource): boolean;
|
|
7
16
|
export declare function loadSliceImage(url: string): Promise<HTMLImageElement>;
|
|
8
17
|
/** Coordinates requested slice entries with the last image-ready snapshot. */
|
|
9
18
|
export declare class SliceSourceLifecycle {
|
|
10
19
|
#private;
|
|
11
|
-
constructor(commit: (snapshot: LoadedSliceSnapshot) => void, loadImage?: SliceImageLoader);
|
|
20
|
+
constructor(commit: (snapshot: LoadedSliceSnapshot) => void, loadImage?: SliceImageLoader, resolveRetained?: RetainedSliceSourceResolver);
|
|
12
21
|
request(entry: SliceManifestEntry): void;
|
|
13
22
|
dispose(): void;
|
|
14
23
|
}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import { resolveRetainedSliceSource } from './preload-registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a committed source can no longer be drawn: a preload-retained
|
|
4
|
+
* bitmap is closed when its last hold is released, and drawing a closed
|
|
5
|
+
* bitmap throws. A detached source is dropped and reloaded asynchronously.
|
|
6
|
+
*/
|
|
7
|
+
export function isDetachedSliceSource(image) {
|
|
8
|
+
return typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap && image.width === 0;
|
|
9
|
+
}
|
|
1
10
|
export function loadSliceImage(url) {
|
|
2
11
|
const image = new Image();
|
|
3
12
|
image.decoding = 'async';
|
|
@@ -7,24 +16,34 @@ export function loadSliceImage(url) {
|
|
|
7
16
|
/** Coordinates requested slice entries with the last image-ready snapshot. */
|
|
8
17
|
export class SliceSourceLifecycle {
|
|
9
18
|
#loadImage;
|
|
19
|
+
#resolveRetained;
|
|
10
20
|
#commit;
|
|
11
21
|
#requestedEntry = null;
|
|
12
22
|
#displayedSnapshot = null;
|
|
13
23
|
#inFlight = new Map();
|
|
14
24
|
#disposed = false;
|
|
15
|
-
constructor(commit, loadImage = loadSliceImage) {
|
|
25
|
+
constructor(commit, loadImage = loadSliceImage, resolveRetained = resolveRetainedSliceSource) {
|
|
16
26
|
this.#commit = commit;
|
|
17
27
|
this.#loadImage = loadImage;
|
|
28
|
+
this.#resolveRetained = resolveRetained;
|
|
18
29
|
}
|
|
19
30
|
request(entry) {
|
|
20
31
|
if (this.#disposed)
|
|
21
32
|
return;
|
|
22
33
|
this.#requestedEntry = entry;
|
|
23
34
|
const displayed = this.#displayedSnapshot;
|
|
24
|
-
if (displayed?.entry.src === entry.src) {
|
|
35
|
+
if (displayed?.entry.src === entry.src && !isDetachedSliceSource(displayed.image)) {
|
|
25
36
|
this.#commitSnapshot({ entry, image: displayed.image });
|
|
26
37
|
return;
|
|
27
38
|
}
|
|
39
|
+
// A preload-retained source (the pinned bitmap of a multi-cell slice,
|
|
40
|
+
// the decoded element of a one-slice) commits synchronously — the slice
|
|
41
|
+
// paints in its mount frame instead of one decode roundtrip later.
|
|
42
|
+
const retained = this.#resolveRetained(entry.src);
|
|
43
|
+
if (retained) {
|
|
44
|
+
this.#commitSnapshot({ entry, image: retained });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
28
47
|
if (this.#inFlight.has(entry.src))
|
|
29
48
|
return;
|
|
30
49
|
let promise;
|
package/dist/server/codegen.js
CHANGED
|
@@ -43,7 +43,7 @@ export function manifestModuleFileName(manifestName) {
|
|
|
43
43
|
*/
|
|
44
44
|
export function manifestEntryForAsset(record, proxy, config, registry = serverPluginsByType) {
|
|
45
45
|
const plugin = serverPluginForType(record.type, registry);
|
|
46
|
-
|
|
46
|
+
const entry = plugin.buildManifestEntry({
|
|
47
47
|
assetId: proxy.assetId,
|
|
48
48
|
parameters: plugin.descriptor.validateParameters(record.parameters),
|
|
49
49
|
src: `${config.proxyBasePath}${proxy.relativePath
|
|
@@ -52,6 +52,10 @@ export function manifestEntryForAsset(record, proxy, config, registry = serverPl
|
|
|
52
52
|
.join('/')}`,
|
|
53
53
|
proxy
|
|
54
54
|
});
|
|
55
|
+
// The asset id is the SSOT key codegen already owns — bake it into the
|
|
56
|
+
// entry centrally so every kind carries it (and a new plugin can't forget
|
|
57
|
+
// it), rather than repeating it in each plugin's builder.
|
|
58
|
+
return { id: proxy.assetId, ...entry };
|
|
55
59
|
}
|
|
56
60
|
/**
|
|
57
61
|
* Replace every `{ $asset }` marker in a built entry with the referenced
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.playback.svelte-nchstv{align-items:center;gap:6px;width:100%;display:flex}.btn.svelte-nchstv{background:var(--panel-raised);border-radius:var(--radius);width:28px;height:28px;color:var(--text);border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn.svelte-nchstv:hover:not(:disabled){border-color:var(--border)}.btn.svelte-nchstv:focus-visible{border-color:var(--accent);outline:none}.btn.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.btn.active.svelte-nchstv{background:var(--accent-soft);color:var(--accent)}.btn.svelte-nchstv svg:where(.svelte-nchstv){width:16px;height:16px;display:block}.time.svelte-nchstv{color:var(--text-dim);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.volume-group.svelte-nchstv{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.range.svelte-nchstv{appearance:none;background:var(--panel-raised);cursor:pointer;border-radius:999px;height:4px}.range.scrub.svelte-nchstv{flex:1;min-width:0;margin:0 2px}.range.volume.svelte-nchstv{flex:none;width:72px}.range.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.range.svelte-nchstv::-webkit-slider-thumb{appearance:none;background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv::-moz-range-thumb{background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv:focus-visible{outline:none}.range.svelte-nchstv:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.range.svelte-nchstv:focus-visible::-moz-range-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.audio-waveform.svelte-1liihyn{flex-direction:column;gap:8px;width:100%;height:100%;min-height:0;display:flex}.wave.svelte-1liihyn{cursor:pointer;touch-action:none;flex:1;width:100%;min-height:0;display:block}.footer.svelte-1liihyn{flex:none;align-items:center;display:flex}.stage.svelte-1ww4cvx{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.audio-frame.svelte-1ww4cvx{width:min(90%,480px);height:128px}p.svelte-1ww4cvx{color:var(--text-dim)}.scrub-number.svelte-nhap92{flex:1;min-width:0;display:flex;position:relative}.input.svelte-nhap92{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;appearance:textfield;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}.scrub-number.with-suffix.svelte-nhap92 .input:where(.svelte-nhap92){flex:none}.suffix.svelte-nhap92{color:var(--text-dim);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;flex:none;margin-left:2px;font-size:11px}.scrub-number.right.svelte-nhap92 .input:where(.svelte-nhap92){text-align:right}.input.svelte-nhap92::-webkit-outer-spin-button{appearance:none;margin:0}.input.svelte-nhap92::-webkit-inner-spin-button{appearance:none;margin:0}.scrub-surface.svelte-nhap92{cursor:ew-resize;touch-action:none;position:absolute;inset:0}.number-field.svelte-368zap{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-368zap{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.number-input.svelte-368zap{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex;position:relative;overflow:hidden}.number-input.svelte-368zap:focus-within{border-color:var(--accent)}.fill.svelte-368zap{pointer-events:none;z-index:0;background:#4a4a4a;height:100%;position:absolute;top:0;left:0}.icon-slot.svelte-368zap{z-index:1;width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex;position:relative}.number-input.svelte-368zap .scrub-number{z-index:1}h3.svelte-1ol624f{letter-spacing:0;text-transform:none;color:#fff;margin:0 0 10px;font-size:11px;font-weight:400}.select-field.svelte-bczi6w{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-bczi6w{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.select-input.svelte-bczi6w{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.select-input.svelte-bczi6w:focus-within{border-color:var(--accent)}.icon-slot.svelte-bczi6w{width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex}select.svelte-bczi6w{width:100%;min-width:0;height:100%;color:var(--text);background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-m9vwwu{border-bottom:1px solid var(--border-soft);padding:12px}.hint.svelte-m9vwwu{color:var(--text-faint);margin:4px 0 0;font-size:11px}.info.svelte-m9vwwu{font-variant-numeric:tabular-nums;margin:0}.file.svelte-m9vwwu{color:var(--text-dim);word-break:break-all}section.svelte-1by8n8t{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-1by8n8t{margin-bottom:8px}.fundus-slice.svelte-1820t2z{width:100%;height:100%;position:relative;overflow:hidden}.fundus-slice--overdraw.svelte-1820t2z{overflow:visible}.fundus-slice__paint.svelte-1820t2z{box-sizing:border-box;border-style:solid;border-width:0;pointer-events:none;will-change:transform;border-image-repeat:stretch;position:absolute}.fundus-slice-canvas.svelte-xdsbrz{width:100%;height:100%;position:relative}canvas.svelte-xdsbrz{pointer-events:none;display:block;position:absolute}.fundus-chroma-key-video.svelte-r30mxh{width:100%;height:100%;position:relative}canvas.svelte-r30mxh,img.svelte-r30mxh{width:100%;height:100%;display:block}video.svelte-r30mxh{visibility:hidden;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.stage.svelte-10eps7e{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.stage.svelte-10eps7e img{object-fit:contain;max-width:90%;max-height:90%}img.svelte-gdduef{object-fit:contain;max-width:100%;max-height:100%}section.svelte-1yd7n22{border-bottom:1px solid var(--border-soft);padding:12px}.modes.svelte-1yd7n22{flex-direction:column;gap:4px;display:flex}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22){text-align:left;background:var(--panel-raised);color:var(--text);border-radius:var(--radius);border:1px solid #0000;padding:6px 10px}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22):hover{border-color:var(--border)}.modes.svelte-1yd7n22 button.on:where(.svelte-1yd7n22){background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}.insets.svelte-1yd7n22{grid-template-columns:1fr 1fr;gap:8px;min-width:0;display:grid}.insets.single.svelte-1yd7n22{grid-template-columns:1fr}.preview-panel.svelte-1mjaycs{flex-direction:column;height:100%;min-height:0;display:flex}.bar.svelte-1mjaycs{flex:none;align-items:center;gap:10px;padding:8px 0;display:flex}.size.svelte-1mjaycs{color:var(--text-dim);font-variant-numeric:tabular-nums}.backends.svelte-1mjaycs{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);gap:2px;margin-left:auto;padding:2px;display:inline-flex}.backends.svelte-1mjaycs button:where(.svelte-1mjaycs){color:var(--text-dim);background:0 0;border:none;border-radius:4px;padding:2px 8px}.backends.svelte-1mjaycs button.on:where(.svelte-1mjaycs){background:var(--accent-soft);color:var(--accent);font-weight:600}.reset.svelte-1mjaycs{background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);padding:4px 10px}.reset.svelte-1mjaycs:hover{border-color:var(--accent)}.stage.svelte-1mjaycs{border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;padding:24px;overflow:auto}.box.svelte-1mjaycs{position:relative;box-shadow:0 0 0 1px #ffffff1f}.box.svelte-1mjaycs .fill{position:absolute;inset:0}.handle.svelte-1mjaycs{touch-action:none;background:0 0;position:absolute}.handle.edge-right.svelte-1mjaycs{cursor:ew-resize;width:10px;height:100%;top:0;right:-4px}.handle.edge-bottom.svelte-1mjaycs{cursor:ns-resize;width:100%;height:10px;bottom:-4px;left:0}.handle.corner.svelte-1mjaycs{cursor:nwse-resize;background:var(--accent);width:16px;height:16px;box-shadow:0 0 0 2px var(--canvas);border-radius:3px;bottom:-6px;right:-6px}.canvas.svelte-1jfrg6d{flex-direction:column;height:100%;min-height:0;display:flex}.toolbar.svelte-1jfrg6d{flex:none;align-items:center;gap:8px;padding:8px 0;display:flex}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d){background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);padding:4px 10px}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d):hover{border-color:var(--accent)}.toolbar.svelte-1jfrg6d button.active:where(.svelte-1jfrg6d){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.zoom.svelte-1jfrg6d{text-align:center;min-width:44px;color:var(--text-dim);font-variant-numeric:tabular-nums}.dims.svelte-1jfrg6d{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-left:auto}.viewport.svelte-1jfrg6d{touch-action:none;cursor:grab;border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;position:relative;overflow:hidden}.viewport.panning.svelte-1jfrg6d{cursor:grabbing}.image-wrap.svelte-1jfrg6d{transform-origin:0 0;position:absolute;top:0;left:0;box-shadow:0 0 0 1px #ffffff14}.image-wrap.svelte-1jfrg6d img:where(.svelte-1jfrg6d){width:100%;height:100%;image-rendering:pixelated;pointer-events:none;-webkit-user-select:none;user-select:none;display:block}.center-rect.svelte-1jfrg6d{pointer-events:none;position:absolute}.center-rect.side-edges.svelte-1jfrg6d{border-left:1px dashed #0d99ff99;border-right:1px dashed #0d99ff99}.center-rect.cap-edges.svelte-1jfrg6d{border-top:1px dashed #0d99ff99;border-bottom:1px dashed #0d99ff99}.overdraw-band.svelte-1jfrg6d{pointer-events:none;background:#38bdf829;position:absolute}.line.svelte-1jfrg6d{background:var(--accent);touch-action:none;position:absolute}.line.overdraw-line.svelte-1jfrg6d{background:#38bdf8 padding-box content-box}.line.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){background:#38bdf8}.line.v.svelte-1jfrg6d{cursor:ew-resize;box-sizing:content-box;background-clip:content-box;width:1px;height:100%;margin-left:-.5px;padding:0 7px;top:0;transform:translate(-7px)}.line.h.svelte-1jfrg6d{cursor:ns-resize;box-sizing:content-box;background-clip:content-box;width:100%;height:1px;margin-top:-.5px;padding:7px 0;left:0;transform:translateY(-7px)}.line.active.svelte-1jfrg6d{background-color:var(--text);background-clip:content-box}.tag.svelte-1jfrg6d{background:var(--accent);color:var(--text);font-variant-numeric:tabular-nums;pointer-events:none;border-radius:4px;padding:1px 5px;font-size:11px;font-weight:600;position:absolute}.line.v.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:4px;left:50%;transform:translate(-50%)}.line.h.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:50%;left:4px;transform:translateY(-50%)}.line.v.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:auto;bottom:4px}.line.h.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){left:auto;right:4px}.editor.svelte-1ea2lvt{flex-direction:column;flex:1;min-height:0;display:flex}.tabs.svelte-1ea2lvt{flex:none;gap:4px;margin-bottom:4px;display:inline-flex}.tabs.svelte-1ea2lvt button:where(.svelte-1ea2lvt){border-radius:var(--radius);color:var(--text-dim);background:0 0;border:none;padding:4px 10px}.tabs.svelte-1ea2lvt button.on:where(.svelte-1ea2lvt){background:var(--accent-soft);color:var(--accent)}.pane.svelte-1ea2lvt{flex:1;min-height:0}.empty.svelte-1ea2lvt{color:var(--text-dim);flex:1;justify-content:center;align-items:center;display:flex}section.svelte-ij1927{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-ij1927{margin-bottom:8px}.stage.svelte-qls820{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.preview-column.svelte-qls820{flex-direction:column;align-items:center;gap:8px;display:flex}.video-frame.svelte-qls820{width:min(90%,480px)}.video-frame.svelte-qls820 video{width:100%;height:100%}p.svelte-qls820{color:var(--text-dim)}video.svelte-ejgo9x{object-fit:contain;max-width:100%;max-height:100%}.picker.svelte-56kutb{flex-direction:column;gap:4px;min-width:0;margin-bottom:8px;display:flex}.caption.svelte-56kutb{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.reference-input.svelte-56kutb{border-radius:4px;align-items:center;min-width:0;height:24px;padding:0;display:flex;position:relative}.reference-input.svelte-56kutb:focus-within{border-color:var(--accent)}.current.svelte-56kutb{min-width:0;height:100%;color:var(--text);text-align:left;background:0 0;border:none;outline:none;flex:1;align-items:center;gap:4px;padding:0 6px 0 0;display:flex}.current.empty.svelte-56kutb{color:var(--text-faint)}.preview-slot.svelte-56kutb{box-sizing:border-box;background:#4a4a4a;border-radius:3px 0 0 3px;flex:none;justify-content:center;align-items:center;width:24px;height:24px;margin-left:-1px;padding:2px;display:flex;overflow:hidden}.preview.svelte-56kutb{object-fit:contain;width:100%;height:100%}.missing-preview.svelte-56kutb{color:var(--warning);font-weight:700}.clear.svelte-56kutb{border:none;border-left:1px solid var(--border-soft);width:24px;height:24px;color:var(--text-dim);background:0 0;border-radius:0 3px 3px 0;outline:none;flex:none;padding:0}.clear.svelte-56kutb:hover{color:var(--danger)}.id.svelte-56kutb,.placeholder.svelte-56kutb{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dangling.svelte-56kutb{color:var(--warning)}.dropdown.svelte-56kutb{z-index:10;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);max-height:240px;padding:4px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 24px #00000080}.option.svelte-56kutb{border-radius:var(--radius);width:100%;color:var(--text);text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:4px 6px;display:flex}.option.svelte-56kutb .thumbnail:where(.svelte-56kutb){object-fit:contain;background:var(--canvas);border-radius:3px;flex:none;width:24px;height:24px}.option.svelte-56kutb:hover{background:var(--panel-raised)}.option.selected.svelte-56kutb{background:var(--accent-soft);color:var(--accent)}.hint.svelte-56kutb{color:var(--text-faint);margin:4px;font-size:11px}.color-field.svelte-gjs979{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-gjs979{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.color-input.svelte-gjs979{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.color-input.svelte-gjs979:focus-within{border-color:var(--accent)}.swatch-slot.svelte-gjs979{flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.swatch.svelte-gjs979{cursor:pointer;background:0 0;border:1px solid #ffffff3d;border-radius:3px;width:16px;height:16px;margin:0;padding:0;overflow:hidden}.swatch.svelte-gjs979::-webkit-color-swatch-wrapper{padding:0}.swatch.svelte-gjs979::-webkit-color-swatch{border:none}.hex-input.svelte-gjs979{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;text-transform:uppercase;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-rsjkek{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-rsjkek{margin-bottom:8px}.stage.svelte-1y3xro5{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.preview-column.svelte-1y3xro5{flex-direction:column;align-items:center;gap:8px;display:flex}.compare-row.svelte-1y3xro5{justify-content:center;align-items:flex-start;gap:16px;width:100%;max-width:760px;display:flex}figure.svelte-1y3xro5{flex-direction:column;flex:1 1 0;align-items:center;gap:6px;min-width:0;margin:0;display:flex}figcaption.svelte-1y3xro5{text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);font-size:10px}.video-frame.svelte-1y3xro5{width:100%}.video-frame.svelte-1y3xro5 video{width:100%;height:100%}p.svelte-1y3xro5{color:var(--text-dim)}section.svelte-3jblpy{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-3jblpy{margin-bottom:8px}.backdrop.svelte-1f5yh58{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog.svelte-1f5yh58{background:var(--panel);border:1px solid var(--border);border-radius:8px;width:360px;padding:16px;box-shadow:0 12px 32px #00000080}h2.svelte-1f5yh58{margin:0 0 4px;font-size:12px}.file-name.svelte-1f5yh58{color:var(--text-dim);font-variant-numeric:tabular-nums;margin:0}.destination.svelte-1f5yh58{color:var(--text-faint);margin:2px 0 16px}.row.svelte-1f5yh58{align-items:center;gap:8px;margin-bottom:8px;display:flex}.label.svelte-1f5yh58{width:64px;color:var(--text-dim);flex:none}.row.svelte-1f5yh58 input:where(.svelte-1f5yh58){flex:1}.row.manifests.svelte-1f5yh58{align-items:flex-start}.row.manifests.svelte-1f5yh58>.label:where(.svelte-1f5yh58){line-height:28px}.manifest-list.svelte-1f5yh58{flex:1;max-height:132px;overflow-y:auto}.empty-manifests.svelte-1f5yh58{color:var(--text-faint);margin:0;font-size:11px}.segmented.svelte-1f5yh58{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.segmented.svelte-1f5yh58 button:where(.svelte-1f5yh58){background:var(--panel-raised);color:var(--text-dim);border:none;padding:4px 12px}.segmented.svelte-1f5yh58 button.on:where(.svelte-1f5yh58){background:var(--accent);color:var(--text)}.hint.svelte-1f5yh58{color:var(--text-dim);margin:4px 0 0;font-size:11px}.hint.warn.svelte-1f5yh58,.error.svelte-1f5yh58{color:var(--warning)}.actions.svelte-1f5yh58{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.backdrop.svelte-n5o24b{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog.svelte-n5o24b{border:1px solid var(--border);background:var(--panel);border-radius:8px;width:420px;padding:16px;box-shadow:0 12px 32px #00000080}h2.svelte-n5o24b{margin:0 0 4px;font-size:12px}.destination.svelte-n5o24b{color:var(--text-faint);margin:0 0 16px}.row.svelte-n5o24b{gap:12px;display:flex}.field.svelte-n5o24b{color:var(--text-dim);flex-direction:column;flex:1;gap:4px;margin-bottom:10px;display:flex}.field.wide.svelte-n5o24b{width:100%}.warning.svelte-n5o24b{color:var(--warning);margin:6px 0 0;font-size:11px}.actions.svelte-n5o24b{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.directory.svelte-ftwms1{background:var(--panel);border-right:1px solid var(--border);flex-direction:column;width:220px;min-width:180px;max-width:320px;min-height:0;display:flex}header.svelte-ftwms1{border-bottom:1px solid var(--border-soft);align-items:center;height:40px;padding:0 8px 0 12px;display:flex}header.svelte-ftwms1 strong:where(.svelte-ftwms1){font-size:11px}.actions.svelte-ftwms1{margin-left:auto;display:flex}.icon-button.svelte-ftwms1{width:24px;height:24px;color:var(--text-dim);border-radius:var(--radius-small);background:0 0;border:0}.icon-button.svelte-ftwms1:hover:not(:disabled){background:var(--panel-raised);color:var(--text)}.icon-button.danger.svelte-ftwms1:hover:not(:disabled){color:var(--danger)}.icon-button.svelte-ftwms1:disabled{opacity:.3;cursor:default}.tree.svelte-ftwms1{padding:6px 4px;overflow:auto}.folder-row.svelte-ftwms1,.asset-row.svelte-ftwms1{padding-left:calc((var(--depth) + 2) * 14px);display:flex}.row.svelte-ftwms1{color:var(--text-dim);border-radius:var(--radius-small);text-align:left;background:0 0;border:0;align-items:center;gap:6px;min-width:0;height:28px;display:flex}.row.special.svelte-ftwms1{width:100%;padding:0 8px}.row.folder.svelte-ftwms1{flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1{cursor:grab;flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1:active{cursor:grabbing}.row.svelte-ftwms1:hover,.row.selected.svelte-ftwms1{background:var(--panel-raised);color:var(--text)}.row.asset.current.svelte-ftwms1,.row.selected.svelte-ftwms1{background:var(--accent-soft);color:var(--accent)}.row.drop-target.svelte-ftwms1{outline:1px solid var(--accent);background:var(--accent-soft)}.glyph.svelte-ftwms1{width:14px;color:var(--text-faint);flex:none;justify-content:center;align-items:center;display:flex}.asset-glyph.svelte-ftwms1{font-size:7px}.asset-warning.svelte-ftwms1{color:var(--warning);flex:none;margin-left:auto}.label.svelte-ftwms1{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.count.svelte-ftwms1{color:var(--text-faint);margin-left:auto;font-size:10px}.dialog-row.svelte-ftwms1{align-items:center;gap:8px;display:flex}.dialog-row.svelte-ftwms1 span:where(.svelte-ftwms1){width:44px;color:var(--text-dim)}.dialog-row.svelte-ftwms1 input:where(.svelte-ftwms1){flex:1}.dialog-path.svelte-ftwms1,.dialog-text.svelte-ftwms1,.dialog-warning.svelte-ftwms1{margin:8px 0 0}.dialog-path.svelte-ftwms1{color:var(--text-faint)}.dialog-warning.svelte-ftwms1{color:var(--warning)}.context-menu.svelte-10jgqdh{z-index:200;background:var(--panel-raised);border:1px solid var(--border);border-radius:6px;width:168px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000073}button.svelte-10jgqdh{width:100%;color:var(--text);font:inherit;text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-10jgqdh:hover,button.svelte-10jgqdh:focus-visible{background:var(--accent-soft);outline:none}button.danger.svelte-10jgqdh{color:var(--danger)}hr.svelte-10jgqdh{background:var(--border);border:0;height:1px;margin:4px 8px}.source-menu.svelte-1c64lfa{gap:2px;width:240px;max-width:100%;display:grid}button.svelte-1c64lfa{border-radius:var(--radius-small);width:100%;color:var(--text);text-align:left;background:0 0;border:0;flex-direction:column;gap:1px;padding:8px;display:flex}button.svelte-1c64lfa:hover,button.svelte-1c64lfa:focus-visible{background:var(--accent-soft);outline:none}span.svelte-1c64lfa{color:var(--text-dim);font-size:11px;font-weight:400}
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./YpiA5Xry.js";import{a as e,r as t}from"./D-dMdMUj.js";var n={get data(){return e.data},get error(){return e.error},get form(){return e.form},get params(){return e.params},get route(){return e.route},get state(){return e.state},get status(){return e.status},get url(){return e.url}};t.updated.check;var r=n;export{r as t};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|