fundus 0.14.0 → 0.16.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/README.md +121 -0
- package/build/client/_app/immutable/assets/2.X44Wyac-.css +1 -0
- package/build/client/_app/immutable/assets/2.X44Wyac-.css.br +0 -0
- package/build/client/_app/immutable/assets/2.X44Wyac-.css.gz +0 -0
- package/build/client/_app/immutable/assets/{3.C6xo25uI.css → 3.66PJT3JC.css} +1 -1
- package/build/client/_app/immutable/assets/3.66PJT3JC.css.br +0 -0
- package/build/client/_app/immutable/assets/3.66PJT3JC.css.gz +0 -0
- package/build/client/_app/immutable/assets/{AssetSourceMenu.IjDdjx3o.css → AssetSourceMenu.B5fzYfym.css} +1 -1
- package/build/client/_app/immutable/assets/AssetSourceMenu.B5fzYfym.css.br +0 -0
- package/build/client/_app/immutable/assets/AssetSourceMenu.B5fzYfym.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B06eqbax.js +108 -0
- package/build/client/_app/immutable/chunks/B06eqbax.js.br +0 -0
- package/build/client/_app/immutable/chunks/B06eqbax.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{dNO-9VOT.js → B97y-eFA.js} +1 -1
- package/build/client/_app/immutable/chunks/B97y-eFA.js.br +0 -0
- package/build/client/_app/immutable/chunks/B97y-eFA.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BmOjTxFk.js +1 -0
- package/build/client/_app/immutable/chunks/BmOjTxFk.js.br +0 -0
- package/build/client/_app/immutable/chunks/BmOjTxFk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C9MzfQz6.js +2 -0
- package/build/client/_app/immutable/chunks/C9MzfQz6.js.br +0 -0
- package/build/client/_app/immutable/chunks/C9MzfQz6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CcuyGBqj.js +1 -0
- package/build/client/_app/immutable/chunks/CcuyGBqj.js.br +0 -0
- package/build/client/_app/immutable/chunks/CcuyGBqj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{77p2oEJ1.js → D6c2mfMB.js} +1 -1
- package/build/client/_app/immutable/chunks/D6c2mfMB.js.br +2 -0
- package/build/client/_app/immutable/chunks/D6c2mfMB.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DY9QjkXW.js +1 -0
- package/build/client/_app/immutable/chunks/DY9QjkXW.js.br +0 -0
- package/build/client/_app/immutable/chunks/DY9QjkXW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Z8rcWjXZ.js +3 -0
- package/build/client/_app/immutable/chunks/Z8rcWjXZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/Z8rcWjXZ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.V1MmmICK.js +2 -0
- package/build/client/_app/immutable/entry/app.V1MmmICK.js.br +0 -0
- package/build/client/_app/immutable/entry/app.V1MmmICK.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BbyflZUw.js +1 -0
- package/build/client/_app/immutable/entry/start.BbyflZUw.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BbyflZUw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BJOUVkow.js +1 -0
- package/build/client/_app/immutable/nodes/0.BJOUVkow.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BJOUVkow.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BqoPRvUU.js +1 -0
- package/build/client/_app/immutable/nodes/1.BqoPRvUU.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.BqoPRvUU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BSUVFDfW.js +3 -0
- package/build/client/_app/immutable/nodes/2.BSUVFDfW.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BSUVFDfW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.B6beFiTQ.js +1 -0
- package/build/client/_app/immutable/nodes/3.B6beFiTQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.B6beFiTQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.Dt96q8V4.js +2 -0
- package/build/client/_app/immutable/nodes/4.Dt96q8V4.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.Dt96q8V4.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 +8 -7
- package/build/handler.js.map +1 -1
- package/build/index.js +8 -7
- package/build/index.js.map +1 -1
- package/build/server/chunks/chunks/{context.js-CVuTSPjH.js → context.js-BXaBgcZT.js} +627 -134
- package/build/server/chunks/chunks/context.js-BXaBgcZT.js.map +1 -0
- package/build/server/chunks/chunks/{contract.js-itFN0Gon.js → contract.js-IY1F-HE_.js} +94 -58
- package/build/server/chunks/chunks/contract.js-IY1F-HE_.js.map +1 -0
- package/build/server/chunks/chunks/{core.js-CABVXpby.js → core.js-D1sYC_78.js} +144 -143
- package/build/server/chunks/chunks/core.js-D1sYC_78.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-B13PkE0J.js → exports.js-B5DLeNXr.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-B13PkE0J.js.map → exports.js-B5DLeNXr.js.map} +1 -1
- package/build/server/chunks/chunks/{http.js-ChQRRKfZ.js → http.js-CzB9Igb0.js} +2 -2
- package/build/server/chunks/chunks/{http.js-ChQRRKfZ.js.map → http.js-CzB9Igb0.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-DlKoWKM-.js → internal.js-HE35Pm1C.js} +5 -3
- package/build/server/chunks/chunks/internal.js-HE35Pm1C.js.map +1 -0
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{manifest-membership.js-BnSECWpJ.js → manifest-membership.js-Cm_2fU-Z.js} +2 -2
- package/build/server/chunks/chunks/{manifest-membership.js-BnSECWpJ.js.map → manifest-membership.js-Cm_2fU-Z.js.map} +1 -1
- package/build/server/chunks/chunks/{raw-reconciliation.js-ZEOCk_jA.js → raw-reconciliation.js-1_IwPhKb.js} +3 -3
- package/build/server/chunks/chunks/raw-reconciliation.js-1_IwPhKb.js.map +1 -0
- package/build/server/chunks/chunks/{raw-reconciliation2.js-CscuoBC2.js → raw-reconciliation2.js-CcO9li5n.js} +2 -2
- package/build/server/chunks/chunks/{raw-reconciliation2.js-CscuoBC2.js.map → raw-reconciliation2.js-CcO9li5n.js.map} +1 -1
- package/build/server/chunks/chunks/{shared.js-DKt4pwWi.js → shared.js-MR8sPPTu.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-DKt4pwWi.js.map → shared.js-MR8sPPTu.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-BYMC-4Wt.js → utils.js-C2UFBITa.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-BYMC-4Wt.js.map → utils.js-C2UFBITa.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-z988EDp2.js → _server.ts.js-BnRJ5Qnd.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-z988EDp2.js.map → _server.ts.js-BnRJ5Qnd.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C68ru6gS.js → _server.ts.js-BZPR6n5n.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C68ru6gS.js.map → _server.ts.js-BZPR6n5n.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-C0tk6RFk.js → _server.ts.js-DiBS3A0C.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-C0tk6RFk.js.map → _server.ts.js-DiBS3A0C.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-I03oZuo8.js → _server.ts.js-LOO6qm2-.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-I03oZuo8.js.map → _server.ts.js-LOO6qm2-.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-BsQB8YDq.js → _server.ts.js-CRtJJoSs.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-BsQB8YDq.js.map → _server.ts.js-CRtJJoSs.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CJuFE6Fb.js → _server.ts.js-Ds4zCZ9H.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CJuFE6Fb.js.map → _server.ts.js-Ds4zCZ9H.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DuOZRRiA.js → _server.ts.js-DD4N8pcj.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DuOZRRiA.js.map → _server.ts.js-DD4N8pcj.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DGzYpQbv.js → _server.ts.js-CZev9aYz.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DGzYpQbv.js.map → _server.ts.js-CZev9aYz.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-B045QoCA.js → _server.ts.js-MBDVW0q1.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-B045QoCA.js.map → _server.ts.js-MBDVW0q1.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-HUkVdz19.js → _server.ts.js-C7naXnsR.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-HUkVdz19.js.map → _server.ts.js-C7naXnsR.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-ry509mom.js → _server.ts.js-DuGyRdf3.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-ry509mom.js.map → _server.ts.js-DuGyRdf3.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DU0J7U25.js → _server.ts.js-0-ZCt0qH.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DU0J7U25.js.map → _server.ts.js-0-ZCt0qH.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-AZIV2PIn.js → _server.ts.js-DFYU_sZL.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-AZIV2PIn.js.map → _server.ts.js-DFYU_sZL.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CDL0hCfM.js → _server.ts.js-BqJpK0sJ.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CDL0hCfM.js.map → _server.ts.js-BqJpK0sJ.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-B13c17fq.js → _server.ts.js--LSqADJp.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-B13c17fq.js.map → _server.ts.js--LSqADJp.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-BCxjyAGC.js → _server.ts.js-DcL8nYDM.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-BCxjyAGC.js.map → _server.ts.js-DcL8nYDM.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BveeMZc2.js → _server.ts.js-72OcyLfP.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BveeMZc2.js.map → _server.ts.js-72OcyLfP.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BZjTd9a0.js → _server.ts.js-D0bOxmG0.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BZjTd9a0.js.map → _server.ts.js-D0bOxmG0.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BbTfPvC9.js → _server.ts.js-BjDVCRNV.js} +9 -7
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BbTfPvC9.js.map → _server.ts.js-BjDVCRNV.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-8VPJMLBk.js → _server.ts.js-CndfoXXd.js} +6 -6
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-8VPJMLBk.js.map → _server.ts.js-CndfoXXd.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BqR2J2sB.js → _server.ts.js-Ck1mgbk5.js} +9 -7
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BqR2J2sB.js.map → _server.ts.js-Ck1mgbk5.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DbA28dCY.js → _server.ts.js-lZ9oP8tz.js} +9 -7
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DbA28dCY.js.map → _server.ts.js-lZ9oP8tz.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-9PBc_3Jh.js → hooks.server.js-DQ6l2RSK.js} +8 -6
- package/build/server/chunks/entries/{hooks.server.js-9PBc_3Jh.js.map → hooks.server.js-DQ6l2RSK.js.map} +1 -1
- package/build/server/chunks/{handler-XxBNCHhb.js → handler-Dfk_4a-r.js} +5 -5
- package/build/server/chunks/{handler-XxBNCHhb.js.map → handler-Dfk_4a-r.js.map} +1 -1
- package/build/server/chunks/{index.js-B_76Gq5Y.js → index.js-O3Wl1zok.js} +5 -5
- package/build/server/chunks/{index.js-B_76Gq5Y.js.map → index.js-O3Wl1zok.js.map} +1 -1
- package/build/server/chunks/{manifest.js-C2MZZt3o.js → manifest.js-51nEZnKQ.js} +29 -29
- package/build/server/chunks/{manifest.js-C2MZZt3o.js.map → manifest.js-51nEZnKQ.js.map} +1 -1
- package/build/server/chunks/nodes/{0.js-BLURyWmd.js → 0.js-DjqMfDtB.js} +2 -2
- package/build/server/chunks/nodes/{0.js-BLURyWmd.js.map → 0.js-DjqMfDtB.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-BwfSLYJH.js +7 -0
- package/build/server/chunks/nodes/{1.js-CITI7d3d.js.map → 1.js-BwfSLYJH.js.map} +1 -1
- package/build/server/chunks/nodes/2.js-buHbEytf.js +7 -0
- package/build/server/chunks/nodes/2.js-buHbEytf.js.map +1 -0
- package/build/server/chunks/nodes/3.js-D7_hF0qp.js +7 -0
- package/build/server/chunks/nodes/3.js-D7_hF0qp.js.map +1 -0
- package/build/server/chunks/nodes/4.js-D58M2chZ.js +7 -0
- package/build/server/chunks/nodes/{4.js-BRlAiVnn.js.map → 4.js-D58M2chZ.js.map} +1 -1
- package/dist/config.d.ts +3 -3
- package/dist/config.js +2 -2
- package/dist/core/api-types.d.ts +22 -2
- package/dist/core/config.d.ts +82 -0
- package/dist/core/config.js +9 -0
- package/dist/core/index.d.ts +10 -5
- package/dist/core/index.js +5 -2
- package/dist/core/library-validation.d.ts +13 -0
- package/dist/core/library-validation.js +48 -0
- package/dist/core/library.d.ts +19 -0
- package/dist/core/library.js +4 -4
- package/dist/core/manifest-membership.d.ts +2 -2
- package/dist/core/package-declaration.d.ts +43 -0
- package/dist/core/package-declaration.js +80 -0
- package/dist/core/package-merge.d.ts +65 -0
- package/dist/core/package-merge.js +173 -0
- package/dist/core/reference-graph.d.ts +3 -3
- package/dist/runtime/components/Image.svelte +5 -6
- package/dist/runtime/components/Image.svelte.d.ts +2 -3
- package/dist/server/build.js +26 -11
- package/dist/server/check.d.ts +13 -3
- package/dist/server/check.js +112 -24
- package/dist/server/codegen.d.ts +3 -1
- package/dist/server/codegen.js +18 -0
- package/dist/server/config-loader.d.ts +35 -1
- package/dist/server/config-loader.js +185 -4
- package/dist/server/library-store.d.ts +11 -1
- package/dist/server/library-store.js +42 -60
- package/dist/server/operations.js +162 -47
- package/package.json +1 -1
- package/build/client/_app/immutable/assets/2.C-1MfvLQ.css +0 -1
- package/build/client/_app/immutable/assets/2.C-1MfvLQ.css.br +0 -0
- package/build/client/_app/immutable/assets/2.C-1MfvLQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.C6xo25uI.css.br +0 -0
- package/build/client/_app/immutable/assets/3.C6xo25uI.css.gz +0 -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.br +0 -0
- package/build/client/_app/immutable/chunks/77p2oEJ1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B9HdDE5n.js +0 -1
- package/build/client/_app/immutable/chunks/B9HdDE5n.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9HdDE5n.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_PWcB6g.js +0 -108
- 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/Q50krHyn.js +0 -2
- package/build/client/_app/immutable/chunks/Q50krHyn.js.br +0 -0
- package/build/client/_app/immutable/chunks/Q50krHyn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/RgXSPQ_h.js +0 -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/chunks/YpiA5Xry.js +0 -3
- package/build/client/_app/immutable/chunks/YpiA5Xry.js.br +0 -0
- package/build/client/_app/immutable/chunks/YpiA5Xry.js.gz +0 -0
- package/build/client/_app/immutable/chunks/dNO-9VOT.js.br +0 -0
- package/build/client/_app/immutable/chunks/dNO-9VOT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/hUfV2O0k.js +0 -1
- package/build/client/_app/immutable/chunks/hUfV2O0k.js.br +0 -0
- package/build/client/_app/immutable/chunks/hUfV2O0k.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BsvwTApt.js +0 -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 +0 -1
- 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.CjQfQrD6.js +0 -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.DyPcUKIh.js +0 -1
- package/build/client/_app/immutable/nodes/1.DyPcUKIh.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.DyPcUKIh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CworwA2R.js +0 -3
- 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 +0 -1
- 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.Cmigd8CT.js +0 -2
- 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/server/chunks/chunks/context.js-CVuTSPjH.js.map +0 -1
- package/build/server/chunks/chunks/contract.js-itFN0Gon.js.map +0 -1
- package/build/server/chunks/chunks/core.js-CABVXpby.js.map +0 -1
- package/build/server/chunks/chunks/internal.js-DlKoWKM-.js.map +0 -1
- package/build/server/chunks/chunks/raw-reconciliation.js-ZEOCk_jA.js.map +0 -1
- package/build/server/chunks/nodes/1.js-CITI7d3d.js +0 -7
- package/build/server/chunks/nodes/2.js-DAls5TjF.js +0 -7
- package/build/server/chunks/nodes/2.js-DAls5TjF.js.map +0 -1
- package/build/server/chunks/nodes/3.js-CesAmg_E.js +0 -7
- package/build/server/chunks/nodes/3.js-CesAmg_E.js.map +0 -1
- package/build/server/chunks/nodes/4.js-BRlAiVnn.js +0 -7
|
@@ -8,8 +8,8 @@ import { existsSync } from 'node:fs';
|
|
|
8
8
|
import { mkdir, readFile, rename, rm, unlink, writeFile } from 'node:fs/promises';
|
|
9
9
|
import { dirname, extname, join } from 'node:path';
|
|
10
10
|
import { createHash } from 'node:crypto';
|
|
11
|
-
import { assetIdError,
|
|
12
|
-
import { manifestModuleFileName } from './codegen.js';
|
|
11
|
+
import { assetIdError, canonicalizeParameters, createEmptyLibrary, flatLibraryIssues, folderNameError, folderNameOf, folderOfRawPath, folderPathError, isFolderOrDescendant, joinFolderPath, manifestColorError, manifestEmojiError, parseLibrary, normalizeFolderPath, parentFolderPath, portableFolderPathKey, rawFilePathError, rawFileNameOfPath, replaceFolderPrefix, manifestNameError, serializeLibrary } from '../core/index.js';
|
|
12
|
+
import { manifestModuleCollisionIssues, manifestModuleFileName } from './codegen.js';
|
|
13
13
|
import { descriptorsByType, serverPluginForType, serverPluginsByType } from './plugins.js';
|
|
14
14
|
import { isProxyFileNameFor } from './processing/processor.js';
|
|
15
15
|
import { ensureManagedFolder, listRelativeFiles, syncManagedFolders } from './folder-filesystem.js';
|
|
@@ -135,8 +135,9 @@ export class LibraryStore {
|
|
|
135
135
|
const folder = options.folder === undefined ? '' : normalizeFolderPath(options.folder);
|
|
136
136
|
this.#requireFolder(library, folder);
|
|
137
137
|
const manifests = [...new Set(options.manifests ?? [])].sort();
|
|
138
|
+
const validManifests = this.#validManifestNames(library);
|
|
138
139
|
for (const manifest of manifests) {
|
|
139
|
-
if (!
|
|
140
|
+
if (!validManifests.has(manifest)) {
|
|
140
141
|
throw new Error(`Unknown manifest "${manifest}".`);
|
|
141
142
|
}
|
|
142
143
|
}
|
|
@@ -149,9 +150,15 @@ export class LibraryStore {
|
|
|
149
150
|
let installed = false;
|
|
150
151
|
try {
|
|
151
152
|
await writeFile(temporaryPath, options.bytes);
|
|
152
|
-
let parameters
|
|
153
|
-
if (
|
|
154
|
-
parameters =
|
|
153
|
+
let parameters;
|
|
154
|
+
if (options.parametersOverride !== undefined) {
|
|
155
|
+
parameters = options.parametersOverride;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
parameters = plugin.descriptor.validateParameters(plugin.descriptor.defaultParameters(plugin.pluginConfig(this.#config)));
|
|
159
|
+
if (prepareParameters) {
|
|
160
|
+
parameters = plugin.descriptor.validateParameters(await prepareParameters({ rawPath: temporaryPath, rawFileName: storedName, parameters }));
|
|
161
|
+
}
|
|
155
162
|
}
|
|
156
163
|
const record = {
|
|
157
164
|
type: options.type,
|
|
@@ -360,8 +367,9 @@ export class LibraryStore {
|
|
|
360
367
|
const library = await this.read();
|
|
361
368
|
const record = this.#requireAsset(library, id);
|
|
362
369
|
const unique = [...new Set(manifests)];
|
|
370
|
+
const validManifests = this.#validManifestNames(library);
|
|
363
371
|
for (const name of unique) {
|
|
364
|
-
if (!
|
|
372
|
+
if (!validManifests.has(name)) {
|
|
365
373
|
throw new Error(`Unknown manifest "${name}".`);
|
|
366
374
|
}
|
|
367
375
|
}
|
|
@@ -815,7 +823,14 @@ export class LibraryStore {
|
|
|
815
823
|
* type, dangling raw pointer, invalid parameters, unknown manifest names,
|
|
816
824
|
* and reference errors (dangling target, type mismatch, cycles).
|
|
817
825
|
*/
|
|
818
|
-
async validate(library) {
|
|
826
|
+
async validate(library, options = {}) {
|
|
827
|
+
// The default preserves single-root behaviour (host === effective). When
|
|
828
|
+
// merging Packages, disk/host checks run on the host library with
|
|
829
|
+
// `flatSpace: false`, while the flat-space checks (id/type/parameters/
|
|
830
|
+
// membership/appearance/references) run separately over the *effective*
|
|
831
|
+
// library — host override records store partial parameters that only
|
|
832
|
+
// validate once merged, and references may cross the host/Package boundary.
|
|
833
|
+
const flatSpace = options.flatSpace ?? true;
|
|
819
834
|
const issues = [];
|
|
820
835
|
const folderKeys = new Map();
|
|
821
836
|
for (const folder of library.folders) {
|
|
@@ -845,53 +860,7 @@ export class LibraryStore {
|
|
|
845
860
|
}
|
|
846
861
|
}
|
|
847
862
|
}
|
|
848
|
-
for (const [name, record] of Object.entries(library.manifests)) {
|
|
849
|
-
const nameProblem = manifestNameError(name);
|
|
850
|
-
if (nameProblem)
|
|
851
|
-
issues.push({ message: nameProblem });
|
|
852
|
-
if (record.color !== undefined) {
|
|
853
|
-
const colorProblem = manifestColorError(record.color);
|
|
854
|
-
if (colorProblem)
|
|
855
|
-
issues.push({ message: `Manifest "${name}": ${colorProblem}` });
|
|
856
|
-
}
|
|
857
|
-
if (record.emoji !== undefined) {
|
|
858
|
-
const emojiProblem = manifestEmojiError(record.emoji);
|
|
859
|
-
if (emojiProblem)
|
|
860
|
-
issues.push({ message: `Manifest "${name}": ${emojiProblem}` });
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
const namesByModuleFile = new Map();
|
|
864
|
-
for (const name of Object.keys(library.manifests)) {
|
|
865
|
-
const fileName = manifestModuleFileName(name);
|
|
866
|
-
const existingName = namesByModuleFile.get(fileName);
|
|
867
|
-
if (existingName !== undefined) {
|
|
868
|
-
issues.push({
|
|
869
|
-
message: `Manifests "${existingName}" and "${name}" would both generate "${fileName}".`
|
|
870
|
-
});
|
|
871
|
-
}
|
|
872
|
-
else {
|
|
873
|
-
namesByModuleFile.set(fileName, name);
|
|
874
|
-
}
|
|
875
|
-
}
|
|
876
863
|
for (const [assetId, record] of Object.entries(library.assets)) {
|
|
877
|
-
const idProblem = assetIdError(assetId);
|
|
878
|
-
if (idProblem)
|
|
879
|
-
issues.push({ assetId, message: idProblem });
|
|
880
|
-
const plugin = this.#registry[record.type];
|
|
881
|
-
if (!plugin) {
|
|
882
|
-
issues.push({ assetId, message: `Unknown asset type "${record.type}".` });
|
|
883
|
-
}
|
|
884
|
-
else {
|
|
885
|
-
try {
|
|
886
|
-
plugin.descriptor.validateParameters(record.parameters);
|
|
887
|
-
}
|
|
888
|
-
catch (cause) {
|
|
889
|
-
issues.push({
|
|
890
|
-
assetId,
|
|
891
|
-
message: `Invalid parameters: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
892
|
-
});
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
864
|
try {
|
|
896
865
|
assertSafeRelativeFilePath(record.raw);
|
|
897
866
|
}
|
|
@@ -911,13 +880,11 @@ export class LibraryStore {
|
|
|
911
880
|
message: `Raw file "${record.raw}" is missing from the raw directory.`
|
|
912
881
|
});
|
|
913
882
|
}
|
|
914
|
-
for (const manifest of record.manifests) {
|
|
915
|
-
if (!library.manifests[manifest]) {
|
|
916
|
-
issues.push({ assetId, message: `Unknown manifest "${manifest}".` });
|
|
917
|
-
}
|
|
918
|
-
}
|
|
919
883
|
}
|
|
920
|
-
|
|
884
|
+
if (flatSpace) {
|
|
885
|
+
issues.push(...flatLibraryIssues(library, descriptorsByType(this.#registry)));
|
|
886
|
+
issues.push(...manifestModuleCollisionIssues(library.manifests));
|
|
887
|
+
}
|
|
921
888
|
return issues;
|
|
922
889
|
}
|
|
923
890
|
async #deleteProxiesOf(assetId) {
|
|
@@ -940,6 +907,21 @@ export class LibraryStore {
|
|
|
940
907
|
}
|
|
941
908
|
return library.assets[id];
|
|
942
909
|
}
|
|
910
|
+
/**
|
|
911
|
+
* Valid manifest names for asset membership: the host library's own manifests
|
|
912
|
+
* plus any a configured Package introduces. The effective (merged) library
|
|
913
|
+
* unions both, so a host asset (or slot fill) may be placed into a
|
|
914
|
+
* Package-introduced manifest — validating against the host manifests alone
|
|
915
|
+
* would wrongly reject that placement.
|
|
916
|
+
*/
|
|
917
|
+
#validManifestNames(library) {
|
|
918
|
+
const names = new Set(Object.keys(library.manifests));
|
|
919
|
+
for (const pkg of this.#config.packages ?? []) {
|
|
920
|
+
for (const name of Object.keys(pkg.declaration.manifests))
|
|
921
|
+
names.add(name);
|
|
922
|
+
}
|
|
923
|
+
return names;
|
|
924
|
+
}
|
|
943
925
|
/** Resolve a non-colliding raw file name, appending `-1`, `-2`, … before the extension. */
|
|
944
926
|
#uniqueRawName(fileName, folder) {
|
|
945
927
|
if (!existsSync(join(this.#config.rawDir, folder, fileName)))
|
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { readFile } from 'node:fs/promises';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
|
-
import { assetIdError, allDeliveredAssetIds, canonicalizeParameters, collectAllReferences, compareCodeUnits, computeLibraryMembership, folderOfRawPath, normalizeFolderPath, parentFolderPath, portableFolderPathKey, proposeAssetId, rawFileNameOfPath, serializeLibrary, typesForFileName } from '../core/index.js';
|
|
10
|
+
import { assetIdError, allDeliveredAssetIds, canonicalizeParameters, collectAllReferences, compareCodeUnits, computeLibraryMembership, flatLibraryIssues, folderOfRawPath, materializeLibrary, mergePackages, normalizeFolderPath, parentFolderPath, portableFolderPathKey, proposeAssetId, rawFileNameOfPath, serializeLibrary, typesForFileName } from '../core/index.js';
|
|
11
11
|
import { LibraryStore } from './library-store.js';
|
|
12
|
-
import { generateManifestModules, locateGeneratedAssetDeclaration, manifestModuleFileName } from './codegen.js';
|
|
12
|
+
import { generateManifestModules, locateGeneratedAssetDeclaration, manifestModuleCollisionIssues, manifestModuleFileName } from './codegen.js';
|
|
13
|
+
import { packageSlotFindings } from './check.js';
|
|
13
14
|
import { descriptorsByType, serverPluginForType, serverPluginsByType } from './plugins.js';
|
|
14
15
|
import { processAssets, readCurrentProxy } from './processing/processor.js';
|
|
15
16
|
import { encodeRelativePathForUrl } from './folder-filesystem.js';
|
|
@@ -489,36 +490,65 @@ export class FundusOperations {
|
|
|
489
490
|
this.#validateImportedRaw(raw);
|
|
490
491
|
const fileName = raw.suggestedFileName ?? `${options.id}.${raw.extension}`;
|
|
491
492
|
const plugin = serverPluginForType(options.type, this.#registry);
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
if (plugin.seedIngestParameters) {
|
|
503
|
-
const seeded = await plugin.seedIngestParameters({
|
|
504
|
-
rawPath,
|
|
505
|
-
rawFileName,
|
|
506
|
-
parameters: next,
|
|
507
|
-
config: this.#config
|
|
508
|
-
});
|
|
509
|
-
if (seeded !== undefined)
|
|
510
|
-
next = seeded;
|
|
511
|
-
}
|
|
512
|
-
// Source scale is a default: an explicit parametersPatch below still wins.
|
|
493
|
+
// Filling a Package slot writes a host override that inherits the Package's
|
|
494
|
+
// parameters via the deep merge, so the override is partial. Byte-derived
|
|
495
|
+
// fields the Package can't author — the slice pixelRatio from the import
|
|
496
|
+
// scale — must still be supplied here; an explicit patch then wins.
|
|
497
|
+
const packageBase = this.#packageBase(await this.#store.read(), options.id);
|
|
498
|
+
if (packageBase && packageBase.type !== options.type) {
|
|
499
|
+
throw new SourceImportError('invalid-input', `Filling slot "${options.id}" requires the package type "${packageBase.type}", not "${options.type}".`);
|
|
500
|
+
}
|
|
501
|
+
let slotOverride = {};
|
|
502
|
+
if (packageBase) {
|
|
513
503
|
const pixelRatio = figmaSlicePixelRatio(raw, options.type);
|
|
514
504
|
if (pixelRatio !== undefined) {
|
|
515
|
-
|
|
505
|
+
slotOverride = mergeParameterPatch(slotOverride, { pixelRatio });
|
|
516
506
|
}
|
|
517
507
|
if (options.parametersPatch !== undefined) {
|
|
518
|
-
|
|
508
|
+
slotOverride = mergeParameterPatch(slotOverride, options.parametersPatch);
|
|
519
509
|
}
|
|
520
|
-
|
|
521
|
-
|
|
510
|
+
}
|
|
511
|
+
const library = packageBase
|
|
512
|
+
? await this.#store.createAsset({
|
|
513
|
+
fileName,
|
|
514
|
+
bytes: raw.bytes,
|
|
515
|
+
type: options.type,
|
|
516
|
+
id: options.id,
|
|
517
|
+
folder: options.folder,
|
|
518
|
+
manifests: options.manifests,
|
|
519
|
+
importSource: raw.importSource,
|
|
520
|
+
parametersOverride: slotOverride
|
|
521
|
+
})
|
|
522
|
+
: await this.#store.createAsset({
|
|
523
|
+
fileName,
|
|
524
|
+
bytes: raw.bytes,
|
|
525
|
+
type: options.type,
|
|
526
|
+
id: options.id,
|
|
527
|
+
folder: options.folder,
|
|
528
|
+
manifests: options.manifests,
|
|
529
|
+
importSource: raw.importSource
|
|
530
|
+
}, async ({ rawPath, rawFileName, parameters }) => {
|
|
531
|
+
let next = parameters;
|
|
532
|
+
if (plugin.seedIngestParameters) {
|
|
533
|
+
const seeded = await plugin.seedIngestParameters({
|
|
534
|
+
rawPath,
|
|
535
|
+
rawFileName,
|
|
536
|
+
parameters: next,
|
|
537
|
+
config: this.#config
|
|
538
|
+
});
|
|
539
|
+
if (seeded !== undefined)
|
|
540
|
+
next = seeded;
|
|
541
|
+
}
|
|
542
|
+
// Source scale is a default: an explicit parametersPatch below still wins.
|
|
543
|
+
const pixelRatio = figmaSlicePixelRatio(raw, options.type);
|
|
544
|
+
if (pixelRatio !== undefined) {
|
|
545
|
+
next = mergeParameterPatch(next, { pixelRatio });
|
|
546
|
+
}
|
|
547
|
+
if (options.parametersPatch !== undefined) {
|
|
548
|
+
next = mergeParameterPatch(next, options.parametersPatch);
|
|
549
|
+
}
|
|
550
|
+
return plugin.descriptor.validateParameters(next);
|
|
551
|
+
});
|
|
522
552
|
return this.#afterMutation(library);
|
|
523
553
|
}
|
|
524
554
|
#validateImportTarget(options, library) {
|
|
@@ -543,8 +573,10 @@ export class FundusOperations {
|
|
|
543
573
|
options.manifests.some((value) => typeof value !== 'string'))) {
|
|
544
574
|
throw new SourceImportError('invalid-input', 'Import manifests must be an array of strings.');
|
|
545
575
|
}
|
|
576
|
+
// A placement may target a Package-introduced manifest (host + package union).
|
|
577
|
+
const validManifests = this.#effectiveOf(library).effective.manifests;
|
|
546
578
|
for (const manifest of new Set(options.manifests ?? [])) {
|
|
547
|
-
if (!Object.hasOwn(
|
|
579
|
+
if (!Object.hasOwn(validManifests, manifest)) {
|
|
548
580
|
throw new SourceImportError('invalid-input', `Unknown manifest "${manifest}".`);
|
|
549
581
|
}
|
|
550
582
|
}
|
|
@@ -568,7 +600,9 @@ export class FundusOperations {
|
|
|
568
600
|
}
|
|
569
601
|
async #patchAsset(id, body) {
|
|
570
602
|
let library = await this.#store.read();
|
|
571
|
-
|
|
603
|
+
// A pure Package asset is read-only; fill/override it by importing bytes
|
|
604
|
+
// with its id. Host assets and existing overrides patch normally.
|
|
605
|
+
this.#assertHostAsset(library, id, 'editing it');
|
|
572
606
|
if (body.parameters !== undefined) {
|
|
573
607
|
library = await this.#store.updateParameters(id, body.parameters);
|
|
574
608
|
}
|
|
@@ -787,12 +821,19 @@ export class FundusOperations {
|
|
|
787
821
|
async #runAfterMutation(library) {
|
|
788
822
|
const pipelineIssues = [];
|
|
789
823
|
const classification = await this.#classifyRawDirectory(library);
|
|
790
|
-
const
|
|
824
|
+
const { effective, provenance, mergeFindings } = this.#effectiveOf(library);
|
|
825
|
+
const materialized = materializeLibrary(effective);
|
|
826
|
+
const ordinaryIssues = [
|
|
827
|
+
...(await this.#store.validate(library, { flatSpace: false })),
|
|
828
|
+
...this.#flatIssues(effective, provenance, mergeFindings)
|
|
829
|
+
];
|
|
791
830
|
const safetyIssues = this.#rawSafetyIssues(library, classification);
|
|
792
831
|
if (ordinaryIssues.length === 0 && safetyIssues.length === 0) {
|
|
793
832
|
try {
|
|
794
|
-
|
|
795
|
-
|
|
833
|
+
// Codegen runs over the merged, materialized library so the dev server
|
|
834
|
+
// writes the same modules `fundus build`/`fundus check` expect.
|
|
835
|
+
const report = await processAssets(this.#config, materialized, this.#registry);
|
|
836
|
+
await generateManifestModules(this.#config, materialized, report.proxies, this.#registry);
|
|
796
837
|
}
|
|
797
838
|
catch (cause) {
|
|
798
839
|
pipelineIssues.push({
|
|
@@ -808,13 +849,15 @@ export class FundusOperations {
|
|
|
808
849
|
state: await this.#snapshotState(latestLibrary, latestClassification, pipelineIssues)
|
|
809
850
|
};
|
|
810
851
|
}
|
|
811
|
-
async #buildState(library, issues, classification) {
|
|
852
|
+
async #buildState(host, library, provenance, issues, classification) {
|
|
812
853
|
const [gitBranch, changedGitAssets] = await Promise.all([
|
|
813
854
|
currentGitBranch(this.#config.projectRoot),
|
|
814
|
-
|
|
855
|
+
// Git diff over the host library only — Package assets are not host-owned
|
|
856
|
+
// and would otherwise all read as "new".
|
|
857
|
+
gitAssetChanges(this.#config.projectRoot, this.#config.library, host)
|
|
815
858
|
]);
|
|
816
859
|
const referencesByAsset = collectAllReferences(library, descriptorsByType(this.#registry));
|
|
817
|
-
const duplicatesByAsset = await this.#duplicateDetector.find(
|
|
860
|
+
const duplicatesByAsset = await this.#duplicateDetector.find(host, this.#config.rawDir);
|
|
818
861
|
const membershipByManifest = computeLibraryMembership(library, referencesByAsset);
|
|
819
862
|
const delivered = allDeliveredAssetIds(membershipByManifest);
|
|
820
863
|
// Per asset: the manifests it is a passive member of, with attribution.
|
|
@@ -837,6 +880,14 @@ export class FundusOperations {
|
|
|
837
880
|
const assets = [];
|
|
838
881
|
for (const assetId of Object.keys(library.assets).sort(compareCodeUnits)) {
|
|
839
882
|
const record = library.assets[assetId];
|
|
883
|
+
const prov = provenance[assetId] ?? { source: 'host' };
|
|
884
|
+
const origin = prov.source === 'host'
|
|
885
|
+
? { kind: 'host' }
|
|
886
|
+
: prov.source === 'package'
|
|
887
|
+
? { kind: 'package', origin: prov.origin }
|
|
888
|
+
: { kind: 'override', origin: prov.origin };
|
|
889
|
+
// An unfilled Package slot carries no bytes.
|
|
890
|
+
const isSlot = record.raw === undefined;
|
|
840
891
|
const warnings = [];
|
|
841
892
|
for (const issue of issues) {
|
|
842
893
|
if (issue.assetId === assetId)
|
|
@@ -844,8 +895,9 @@ export class FundusOperations {
|
|
|
844
895
|
}
|
|
845
896
|
// Unreachable: no explicit membership AND no passive membership in any
|
|
846
897
|
// manifest — nothing delivers the asset. A passively delivered asset is
|
|
847
|
-
// fine (it ships inlined into its referrers) and must not warn.
|
|
848
|
-
|
|
898
|
+
// fine (it ships inlined into its referrers) and must not warn. An inert
|
|
899
|
+
// unfilled Package slot is not a host mistake and must not warn.
|
|
900
|
+
if (record.manifests.length === 0 && !delivered.has(assetId) && !isSlot) {
|
|
849
901
|
warnings.push('In no manifest and not referenced by any delivered asset — ' +
|
|
850
902
|
'nothing is processed or generated for it.');
|
|
851
903
|
}
|
|
@@ -853,7 +905,7 @@ export class FundusOperations {
|
|
|
853
905
|
warnings.push(`Importer "${record.importSource.importer}" is unavailable; the local raw file remains usable.`);
|
|
854
906
|
}
|
|
855
907
|
let proxy = null;
|
|
856
|
-
if (delivered.has(assetId)) {
|
|
908
|
+
if (delivered.has(assetId) && !isSlot) {
|
|
857
909
|
try {
|
|
858
910
|
const currentProxy = await readCurrentProxy(assetId, record, this.#config, this.#registry);
|
|
859
911
|
if (currentProxy) {
|
|
@@ -871,13 +923,17 @@ export class FundusOperations {
|
|
|
871
923
|
warnings.push(cause instanceof Error ? cause.message : String(cause));
|
|
872
924
|
}
|
|
873
925
|
}
|
|
926
|
+
const raw = record.raw ?? '';
|
|
927
|
+
const rawHash = record.rawHash ?? '';
|
|
874
928
|
assets.push({
|
|
875
929
|
id: assetId,
|
|
876
930
|
type: record.type,
|
|
877
|
-
raw
|
|
878
|
-
folder: folderOfRawPath(
|
|
879
|
-
rawUrl:
|
|
880
|
-
|
|
931
|
+
raw,
|
|
932
|
+
folder: folderOfRawPath(raw),
|
|
933
|
+
rawUrl: isSlot
|
|
934
|
+
? ''
|
|
935
|
+
: `/files/raw/${encodeRelativePathForUrl(raw)}?v=${rawHash.slice(0, 12)}`,
|
|
936
|
+
rawHash,
|
|
881
937
|
gitStatus: changedGitAssets.get(assetId) ?? null,
|
|
882
938
|
importSource: record.importSource,
|
|
883
939
|
parameters: record.parameters,
|
|
@@ -892,7 +948,9 @@ export class FundusOperations {
|
|
|
892
948
|
assetId: reference.assetId
|
|
893
949
|
})),
|
|
894
950
|
incoming: incomingByAsset.get(assetId) ?? []
|
|
895
|
-
}
|
|
951
|
+
},
|
|
952
|
+
origin,
|
|
953
|
+
overridden: origin.kind === 'override'
|
|
896
954
|
});
|
|
897
955
|
}
|
|
898
956
|
// Per manifest: the membership picture for the manifests view, and the
|
|
@@ -923,7 +981,7 @@ export class FundusOperations {
|
|
|
923
981
|
presetNames[type] = names;
|
|
924
982
|
presetCapabilities[type] = Object.fromEntries(names.map((name) => [name, plugin.presetCapabilities?.(presets[name]) ?? {}]));
|
|
925
983
|
}
|
|
926
|
-
const rawIngestionQueue = this.#buildRawIngestionQueue(
|
|
984
|
+
const rawIngestionQueue = this.#buildRawIngestionQueue(host, classification);
|
|
927
985
|
return {
|
|
928
986
|
gitBranch,
|
|
929
987
|
library,
|
|
@@ -934,7 +992,8 @@ export class FundusOperations {
|
|
|
934
992
|
presetCapabilities,
|
|
935
993
|
manifestMemberships,
|
|
936
994
|
manifestDeliveredBytes,
|
|
937
|
-
rawIngestionQueue
|
|
995
|
+
rawIngestionQueue,
|
|
996
|
+
packageOrigins: this.#config.packages.map((pkg) => pkg.origin).sort(compareCodeUnits)
|
|
938
997
|
};
|
|
939
998
|
}
|
|
940
999
|
#compatibleTypes(path) {
|
|
@@ -947,8 +1006,10 @@ export class FundusOperations {
|
|
|
947
1006
|
return rawSafetyIssues(library, classification, (path) => this.#compatibleTypes(path));
|
|
948
1007
|
}
|
|
949
1008
|
async #snapshotState(library, classification, extraIssues = []) {
|
|
1009
|
+
const { effective, provenance, mergeFindings } = this.#effectiveOf(library);
|
|
950
1010
|
const issues = [
|
|
951
|
-
...(await this.#store.validate(library)),
|
|
1011
|
+
...(await this.#store.validate(library, { flatSpace: false })),
|
|
1012
|
+
...this.#flatIssues(effective, provenance, mergeFindings),
|
|
952
1013
|
...this.#rawSafetyIssues(library, classification),
|
|
953
1014
|
...extraIssues
|
|
954
1015
|
];
|
|
@@ -960,7 +1021,7 @@ export class FundusOperations {
|
|
|
960
1021
|
seen.add(key);
|
|
961
1022
|
return true;
|
|
962
1023
|
});
|
|
963
|
-
return this.#buildState(library, uniqueIssues, classification);
|
|
1024
|
+
return this.#buildState(library, effective, provenance, uniqueIssues, classification);
|
|
964
1025
|
}
|
|
965
1026
|
#canAutoReconcile(classification, retry = false) {
|
|
966
1027
|
return (classification.complete &&
|
|
@@ -1066,6 +1127,60 @@ export class FundusOperations {
|
|
|
1066
1127
|
throw new Error(`Unknown asset "${id}".`);
|
|
1067
1128
|
}
|
|
1068
1129
|
}
|
|
1130
|
+
/** Merge the configured Packages under the host library (host wins). */
|
|
1131
|
+
#effectiveOf(host) {
|
|
1132
|
+
const { library, provenance, findings } = mergePackages(host, this.#config.packages ?? []);
|
|
1133
|
+
return { effective: library, provenance, mergeFindings: findings };
|
|
1134
|
+
}
|
|
1135
|
+
/**
|
|
1136
|
+
* The Package base record for `id` when `id` is a read-only Package asset the
|
|
1137
|
+
* host has not yet filled — i.e. this create is a *slot fill*. Returns null
|
|
1138
|
+
* for a plain new host asset.
|
|
1139
|
+
*/
|
|
1140
|
+
#packageBase(host, id) {
|
|
1141
|
+
if (Object.hasOwn(host.assets, id))
|
|
1142
|
+
return null;
|
|
1143
|
+
const { effective, provenance } = this.#effectiveOf(host);
|
|
1144
|
+
if (provenance[id]?.source === 'package')
|
|
1145
|
+
return { type: effective.assets[id].type };
|
|
1146
|
+
return null;
|
|
1147
|
+
}
|
|
1148
|
+
/**
|
|
1149
|
+
* Flat-space validation over the effective library: merge errors, id/type/
|
|
1150
|
+
* parameter/membership/appearance/reference checks, module collisions, and
|
|
1151
|
+
* delivered-slot findings. Disk/host checks stay in `store.validate(host,
|
|
1152
|
+
* { flatSpace: false })`.
|
|
1153
|
+
*/
|
|
1154
|
+
#flatIssues(effective, provenance, mergeFindings) {
|
|
1155
|
+
const referencesByAsset = collectAllReferences(effective, descriptorsByType(this.#registry));
|
|
1156
|
+
const membership = computeLibraryMembership(effective, referencesByAsset);
|
|
1157
|
+
return [
|
|
1158
|
+
...mergeFindings
|
|
1159
|
+
.filter((finding) => finding.kind !== 'package-overridden')
|
|
1160
|
+
.map((finding) => ({ assetId: finding.assetId, message: finding.message })),
|
|
1161
|
+
...flatLibraryIssues(effective, descriptorsByType(this.#registry)),
|
|
1162
|
+
...manifestModuleCollisionIssues(effective.manifests),
|
|
1163
|
+
...packageSlotFindings(effective, provenance, membership).map((finding) => ({
|
|
1164
|
+
assetId: finding.assetId,
|
|
1165
|
+
message: finding.message
|
|
1166
|
+
}))
|
|
1167
|
+
];
|
|
1168
|
+
}
|
|
1169
|
+
/**
|
|
1170
|
+
* Whether an id is a read-only Package asset the host has not overridden.
|
|
1171
|
+
* Such ids can be filled/overridden (write a host record) but not mutated,
|
|
1172
|
+
* renamed, moved, or deleted in place.
|
|
1173
|
+
*/
|
|
1174
|
+
#assertHostAsset(host, id, action) {
|
|
1175
|
+
if (Object.hasOwn(host.assets, id))
|
|
1176
|
+
return;
|
|
1177
|
+
const { provenance } = this.#effectiveOf(host);
|
|
1178
|
+
const prov = provenance[id];
|
|
1179
|
+
if (prov && prov.source !== 'host') {
|
|
1180
|
+
throw new Error(`Asset "${id}" is provided by package "${prov.origin}"; ${action} is not available. Override it by importing or uploading bytes with this id.`);
|
|
1181
|
+
}
|
|
1182
|
+
throw new Error(`Unknown asset "${id}".`);
|
|
1183
|
+
}
|
|
1069
1184
|
/**
|
|
1070
1185
|
* Apply a CLI asset change to the store, validating the resulting library
|
|
1071
1186
|
* on an in-memory candidate first — nothing is persisted when the change
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.submenu-anchor.svelte-13hq4tl{position:relative}button.svelte-13hq4tl{width:100%;color:var(--text);font:inherit;text-align:left;white-space:nowrap;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-13hq4tl:hover,button.svelte-13hq4tl:focus-visible{background:var(--accent-soft);outline:none}.submenu-anchor.svelte-13hq4tl:has(.submenu:where(.svelte-13hq4tl))>.submenu-trigger:where(.svelte-13hq4tl){background:var(--accent-soft);outline:none}button.svelte-13hq4tl:disabled{color:var(--text-faint);background:0 0}.submenu-trigger.svelte-13hq4tl{justify-content:space-between;align-items:center;gap:12px;display:flex}.arrow.svelte-13hq4tl{color:var(--text-faint);font-size:16px;line-height:12px}.submenu.svelte-13hq4tl{z-index:1;background:var(--panel-raised);border:1px solid var(--border);border-radius:6px;min-width:168px;max-width:320px;padding:4px;position:absolute;top:-5px;left:calc(100% - 4px);overflow-y:auto;box-shadow:0 8px 24px #00000073}.submenu.opens-left.svelte-13hq4tl{left:auto;right:calc(100% - 4px)}.submenu.svelte-13hq4tl button:where(.svelte-13hq4tl){text-overflow:ellipsis;overflow:hidden}hr.svelte-13hq4tl{background:var(--border);border:0;height:1px;margin:4px 8px}.context-menu.svelte-109nkvw{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-109nkvw{width:100%;color:var(--text);font:inherit;text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-109nkvw:hover,button.svelte-109nkvw:focus-visible{background:var(--accent-soft);outline:none}button.danger.svelte-109nkvw{color:var(--danger)}hr.svelte-109nkvw{background:var(--border);border:0;height:1px;margin:4px 8px}.manifest-label.svelte-1b4m5oj{align-items:center;gap:4px;min-width:0;display:inline-flex}.emoji.svelte-1b4m5oj{flex:none;line-height:1}.name.svelte-1b4m5oj{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chip.svelte-1b4m5oj{background:color-mix(in srgb, var(--manifest-color) 20%, transparent);color:var(--manifest-color);border-radius:4px;padding:0 5px;font-size:10px}.chip.passive.svelte-1b4m5oj{border:1px dashed var(--manifest-color);background:0 0}.browse-select.svelte-dr99ka{border-radius:4px;align-items:center;min-width:0;height:24px;padding:0 6px 0 0;display:inline-flex}.browse-select.svelte-dr99ka:focus-within{border-color:var(--accent)}.browse-select.filter-active.svelte-dr99ka{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.browse-select.filter-active.svelte-dr99ka .icon-slot:where(.svelte-dr99ka){color:var(--accent)}.icon-slot.svelte-dr99ka{width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;display:flex}select.svelte-dr99ka{background:0 0;border:0;outline:none;min-width:0;height:100%;margin:0;padding:0 6px 0 0}.filter-field .popover-anchor{width:100%}.multi-select-trigger.svelte-1yxb8yh{text-align:left;border-radius:4px;align-items:center;gap:5px;width:100%;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.multi-select-trigger.filter-active.svelte-1yxb8yh{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.icon-slot.svelte-1yxb8yh{width:24px;height:24px;color:var(--text-dim);flex:none;place-items:center;display:grid}.filter-active.svelte-1yxb8yh .icon-slot:where(.svelte-1yxb8yh){color:var(--accent)}.summary.svelte-1yxb8yh{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.filter-active.svelte-1yxb8yh .summary:where(.svelte-1yxb8yh){color:var(--accent)}.selected-count.svelte-1yxb8yh{background:var(--accent);min-width:15px;height:15px;color:var(--text);border-radius:999px;flex:none;place-items:center;padding:0 4px;font-size:9px;font-weight:700;display:grid}.multi-select-menu.svelte-1yxb8yh{width:max(160px, var(--multi-select-width,100%));min-width:160px}.menu-header.svelte-1yxb8yh{border-bottom:1px solid var(--border-soft);color:var(--text-dim);justify-content:space-between;align-items:center;gap:12px;padding:1px 4px 6px;font-size:10px;display:flex}.menu-header.svelte-1yxb8yh button:where(.svelte-1yxb8yh){color:var(--accent);font:inherit;background:0 0;border:0;padding:1px 2px}.menu-header.svelte-1yxb8yh button:where(.svelte-1yxb8yh):disabled{opacity:.4;cursor:default}.options.svelte-1yxb8yh{max-height:224px;padding-top:4px;overflow-y:auto}.options.svelte-1yxb8yh label:where(.svelte-1yxb8yh){border-radius:var(--radius-small);min-width:0;height:26px;color:var(--text);cursor:pointer;align-items:center;gap:7px;padding:0 5px;display:flex}.options.svelte-1yxb8yh label:where(.svelte-1yxb8yh):hover,.options.svelte-1yxb8yh label:where(.svelte-1yxb8yh):focus-within{background:var(--accent-soft)}.options.svelte-1yxb8yh label.selected:where(.svelte-1yxb8yh){color:var(--accent)}.options.svelte-1yxb8yh input:where(.svelte-1yxb8yh){width:12px;height:12px;accent-color:var(--accent);flex:none;margin:0}.options.svelte-1yxb8yh span:where(.svelte-1yxb8yh){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.browse-checkbox.svelte-sa6meb{cursor:pointer;align-items:center;min-width:0;height:24px;display:inline-flex}.browse-checkbox.svelte-sa6meb:focus-within .value:where(.svelte-sa6meb){color:var(--accent)}.icon-slot.svelte-sa6meb{-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.value.svelte-sa6meb{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:11px;line-height:14px;overflow:hidden}input.svelte-sa6meb{width:12px;height:12px;accent-color:var(--accent);margin:0}.library-view.svelte-1uha8ag{flex:1;min-height:0;display:flex}.page.svelte-1uha8ag{flex:1;min-height:0;padding:16px;position:relative;overflow-y:auto}.library-toolbar.svelte-1uha8ag{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:16px;display:flex}.library-toolbar.svelte-1uha8ag .control{border-radius:var(--radius-small);height:24px}.selection-controls.svelte-1uha8ag{align-items:center;gap:8px;display:inline-flex}.selection-action.svelte-1uha8ag:disabled{opacity:.45;cursor:default}.selection-action.svelte-1uha8ag{justify-content:center;align-items:center;display:inline-flex}.selection-summary.svelte-1uha8ag{color:var(--accent);white-space:nowrap;font-weight:600}.preview-size-control.svelte-1uha8ag{height:24px;color:var(--text-dim);cursor:default;align-items:center;gap:6px;margin-left:auto;padding:0 7px;display:inline-flex}.preview-size-icon.svelte-1uha8ag{fill:currentColor;flex:none;width:14px;height:14px}.preview-size-icon.dense.svelte-1uha8ag{color:var(--text-faint)}.preview-size-icon.dense.svelte-1uha8ag rect:where(.svelte-1uha8ag){rx:.75px;width:3px;height:3px}.preview-size-icon.roomy.svelte-1uha8ag rect:where(.svelte-1uha8ag){rx:1.25px}.preview-size-range.svelte-1uha8ag{appearance:none;cursor:pointer;background:0 0;flex:none;width:104px;height:14px;margin:0;padding:0}.preview-size-range.svelte-1uha8ag::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--accent) 0 var(--preview-size-progress), var(--border) var(--preview-size-progress) 100%);border-radius:999px;height:3px}.preview-size-range.svelte-1uha8ag::-moz-range-track{background:var(--border);border-radius:999px;height:3px}.preview-size-range.svelte-1uha8ag::-moz-range-progress{background:var(--accent);border-radius:999px;height:3px}.preview-size-range.svelte-1uha8ag::-webkit-slider-thumb{border:2px solid var(--panel-raised);appearance:none;background:var(--accent);width:12px;height:12px;box-shadow:0 0 0 1px var(--accent);border-radius:50%;margin-top:-4.5px}.preview-size-range.svelte-1uha8ag::-moz-range-thumb{border:2px solid var(--panel-raised);background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 1px var(--accent);border-radius:50%}.preview-size-range.svelte-1uha8ag:focus-visible{outline:none}.preview-size-range.svelte-1uha8ag:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--accent), 0 0 0 4px var(--accent-soft)}.preview-size-range.svelte-1uha8ag:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--accent), 0 0 0 4px var(--accent-soft)}.search.svelte-1uha8ag{flex:0 0 240px;align-items:center;gap:4px;width:240px;min-width:200px;height:24px;padding:0 6px 0 0;display:flex}.search.svelte-1uha8ag:focus-within{border-color:var(--accent)}.search.filter-active.svelte-1uha8ag{border-color:var(--accent);background:var(--accent-soft)}.search.filter-active.svelte-1uha8ag .search-icon-slot:where(.svelte-1uha8ag),.search.filter-active.svelte-1uha8ag kbd:where(.svelte-1uha8ag){color:var(--accent)}.search.filter-active.svelte-1uha8ag kbd:where(.svelte-1uha8ag){border-color:var(--accent)}.search-icon-slot.svelte-1uha8ag{width:24px;height:24px;color:var(--text-dim);flex:none;justify-content:center;align-items:center;display:flex}.search-icon.svelte-1uha8ag{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;flex:none;width:14px;height:14px}.search-input.svelte-1uha8ag{min-width:0;height:100%;color:var(--text);font:inherit;background:0 0;border:0;outline:none;flex:1;padding:0}.search-input.svelte-1uha8ag::-webkit-search-cancel-button{appearance:none;background:var(--text-dim);cursor:pointer;width:12px;height:12px;margin:0;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='m3 3 8 8m0-8-8 8' fill='none' stroke='black' stroke-linecap='round' stroke-width='2.25'/%3E%3C/svg%3E") 50%/12px 12px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='m3 3 8 8m0-8-8 8' fill='none' stroke='black' stroke-linecap='round' stroke-width='2.25'/%3E%3C/svg%3E") 50%/12px 12px no-repeat}.search.filter-active.svelte-1uha8ag .search-input:where(.svelte-1uha8ag)::-webkit-search-cancel-button{background:var(--accent)}.search.svelte-1uha8ag kbd:where(.svelte-1uha8ag){border:1px solid var(--border);color:var(--text-faint);border-radius:3px;flex:none;padding:1px 4px;font:9px/14px system-ui,sans-serif}.toolbar-button.svelte-1uha8ag,.import-trigger.svelte-1uha8ag{white-space:nowrap;justify-content:center;align-items:center;gap:6px;display:inline-flex}.toolbar-button.active.svelte-1uha8ag{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.filter-count.svelte-1uha8ag{background:var(--accent);min-width:16px;height:16px;color:var(--text);border-radius:999px;place-items:center;padding:0 4px;font-size:10px;font-weight:700;display:inline-grid}.filters-popover.svelte-1uha8ag{width:min(480px,100vw - 24px)}.popover-header.svelte-1uha8ag{border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:center;gap:16px;padding:2px 2px 10px;display:flex}.popover-header.svelte-1uha8ag strong:where(.svelte-1uha8ag){color:var(--text);font-size:11px;font-weight:400}.clear-filters.svelte-1uha8ag{color:var(--accent);font:inherit;background:0 0;border:0;padding:2px 4px;font-size:11px}.clear-filters.svelte-1uha8ag:disabled{opacity:.4;cursor:default}.filter-grid.svelte-1uha8ag{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:10px 2px;display:grid}.filter-field.svelte-1uha8ag{flex-direction:column;gap:4px;min-width:0;display:flex}.filter-field.svelte-1uha8ag>span:where(.svelte-1uha8ag){color:#ffffffb2;letter-spacing:.27px;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.filter-field.svelte-1uha8ag .browse-select,.filter-field.svelte-1uha8ag .browse-checkbox{width:100%}.filter-field.svelte-1uha8ag .browse-select select{flex:1;width:100%}.filter-options-grid.svelte-1uha8ag{padding-top:0;padding-bottom:2px}.filter-options-grid.svelte-1uha8ag .browse-checkbox,.filter-options-grid.svelte-1uha8ag .browse-checkbox .icon-slot{height:14px}.filter-options-grid.svelte-1uha8ag .browse-checkbox .icon-slot{justify-content:flex-start;align-items:flex-start;width:18px}@media (width<=560px){.filter-grid.svelte-1uha8ag{grid-template-columns:1fr}}@media (width<=1056px){.search.svelte-1uha8ag{flex-basis:100%;order:10;width:100%}}.section.svelte-1uha8ag{margin-bottom:24px}.section.svelte-1uha8ag:last-child{margin-bottom:0}.section-emoji.svelte-1uha8ag{margin-right:6px}.grid.svelte-1uha8ag,.folder-grid.svelte-1uha8ag{gap:8px;display:grid}.grid.svelte-1uha8ag{grid-template-columns:repeat(auto-fill, minmax(min(100%, var(--preview-card-width)), 1fr))}.folder-grid.svelte-1uha8ag{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}.folder-card.svelte-1uha8ag{background:var(--panel);border:1px solid var(--border-soft);min-width:0;height:60px;color:var(--text);text-align:left;border-radius:8px;align-items:center;gap:10px;padding:8px 10px;display:flex}.folder-card.svelte-1uha8ag:hover,.folder-card.svelte-1uha8ag:focus-visible{border-color:var(--accent);outline:none}.folder-card.drop-target.svelte-1uha8ag{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 1px var(--accent)}.folder-card.dragging-folder.svelte-1uha8ag{opacity:.55}.folder-card-icon.svelte-1uha8ag{color:var(--text-dim);flex:none;align-items:center;display:flex}.folder-card-details.svelte-1uha8ag{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.folder-card-details.svelte-1uha8ag strong:where(.svelte-1uha8ag){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.folder-card-details.svelte-1uha8ag span:where(.svelte-1uha8ag),.folder-card-arrow.svelte-1uha8ag{color:var(--text-faint)}.folder-card-arrow.svelte-1uha8ag{flex:none;font-size:18px}.card.svelte-1uha8ag{background:var(--panel);border:1px solid var(--border-soft);border-radius:8px;flex-direction:column;gap:clamp(4px,5cqi,8px);padding:clamp(4px,5cqi,8px);display:flex;position:relative;container-type:inline-size}.card.selected.svelte-1uha8ag{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.asset-select.svelte-1uha8ag{z-index:1;width:16px;height:16px;accent-color:var(--accent);position:absolute;top:clamp(6px,8cqi,12px);left:clamp(6px,8cqi,12px)}.card.svelte-1uha8ag:hover{border-color:var(--accent)}.thumbnail.svelte-1uha8ag{width:100%;height:min(var(--preview-card-height), 66.667cqi);border-radius:var(--radius);justify-content:center;align-items:center;display:flex;overflow:hidden}.meta.svelte-1uha8ag{align-items:center;gap:6px;min-width:0;display:flex}.id.svelte-1uha8ag{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.type-badge.svelte-1uha8ag{color:var(--text-dim);border:1px solid var(--border);border-radius:4px;flex:none;margin-left:auto;padding:0 5px;font-size:10px}.badges.svelte-1uha8ag{flex-wrap:wrap;gap:4px;min-height:16px;display:flex}.badge.svelte-1uha8ag{border-radius:4px;padding:0 5px;font-size:10px}.badge.warning.svelte-1uha8ag{background:var(--warning-soft);color:var(--warning)}@container (width<=109px){.type-badge.svelte-1uha8ag{display:none}.badges.svelte-1uha8ag{flex-wrap:nowrap;overflow:hidden}}@container (width<=79px){.card.svelte-1uha8ag>.overlay{background:var(--accent);border:0;width:6px;height:6px;padding:0;font-size:0;top:5px;left:auto;right:5px;transform:none}.card.svelte-1uha8ag>.overlay.edited{background:var(--warning)}.asset-select.svelte-1uha8ag{width:8px;height:8px;top:0;left:0;transform:translate(-8%,8%)}.meta.svelte-1uha8ag,.badges.svelte-1uha8ag{display:none}}.empty.svelte-1uha8ag{color:var(--text-dim);text-align:center;padding:48px}.dialog-row.svelte-1uha8ag{align-items:center;gap:8px;display:flex}.dialog-row.svelte-1uha8ag span:where(.svelte-1uha8ag){width:44px;color:var(--text-dim)}.dialog-row.svelte-1uha8ag input:where(.svelte-1uha8ag){flex:1}.dialog-text.svelte-1uha8ag,.dialog-warning.svelte-1uha8ag{margin:8px 0 0}.dialog-warning.svelte-1uha8ag{color:var(--warning)}.drop-hint.svelte-1uha8ag{border:2px dashed var(--accent);color:var(--accent);pointer-events:none;background:#0d99ff14;border-radius:12px;justify-content:center;align-items:center;font-size:14px;display:flex;position:fixed;inset:48px 8px 8px}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,J as t,M as n,U as r,a as i,ct as a,d as o,k as s,v as c}from"./YpiA5Xry.js";import"./xihTtKlq.js";var l=n(`<span> </span>`);function u(n,u){let d=i(u,`overlay`,3,!1);var f=l();let p;var m=t(f,!0);a(f),r(()=>{o(f,`title`,u.title),p=c(f,1,`svelte-d2mzbr`,null,p,{edited:u.kind===`edited`,overlay:d()}),s(m,u.kind===`new`?`New`:`Edited`)}),e(n,f)}export{u as t};
|
|
Binary file
|
|
Binary file
|