fundus 0.28.0 → 0.29.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 +41 -33
- package/build/client/_app/immutable/chunks/{CRFKGnag.js → BCmR1_e0.js} +1 -1
- package/build/client/_app/immutable/chunks/BCmR1_e0.js.br +0 -0
- package/build/client/_app/immutable/chunks/BCmR1_e0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{apKHI4vq.js → C0uU_Rhe.js} +2 -2
- package/build/client/_app/immutable/chunks/C0uU_Rhe.js.br +0 -0
- package/build/client/_app/immutable/chunks/C0uU_Rhe.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{g2rma9Ym.js → CMJ10zbJ.js} +1 -1
- package/build/client/_app/immutable/chunks/CMJ10zbJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CMJ10zbJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{rtFCvv3j.js → kkVEh3_1.js} +1 -1
- package/build/client/_app/immutable/chunks/kkVEh3_1.js.br +2 -0
- package/build/client/_app/immutable/chunks/kkVEh3_1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BSzEzOBI.js → wBLhaPea.js} +1 -1
- package/build/client/_app/immutable/chunks/wBLhaPea.js.br +0 -0
- package/build/client/_app/immutable/chunks/wBLhaPea.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.BiYJKHq5.js → app.DCXSqiQ1.js} +2 -2
- package/build/client/_app/immutable/entry/app.DCXSqiQ1.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DCXSqiQ1.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BOUpxuMU.js +1 -0
- package/build/client/_app/immutable/entry/start.BOUpxuMU.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BOUpxuMU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.kL9OGUbr.js → 0.CsqkK05g.js} +1 -1
- package/build/client/_app/immutable/nodes/0.CsqkK05g.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CsqkK05g.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.DQGC5ZQg.js → 1.BVSXvtU9.js} +1 -1
- package/build/client/_app/immutable/nodes/1.BVSXvtU9.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.BVSXvtU9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BJEXWmrT.js +4 -0
- package/build/client/_app/immutable/nodes/2.BJEXWmrT.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BJEXWmrT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.DkyIyoNd.js → 3.BDMmDyL1.js} +1 -1
- package/build/client/_app/immutable/nodes/3.BDMmDyL1.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BDMmDyL1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.D1JY4Ttk.js → 4.dd49_qQE.js} +1 -1
- package/build/client/_app/immutable/nodes/4.dd49_qQE.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.dd49_qQE.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-BZSZNuAd.js → context.js-DFZgDxCD.js} +157 -95
- package/build/server/chunks/chunks/context.js-DFZgDxCD.js.map +1 -0
- package/build/server/chunks/chunks/{contract.js-B4JdXFgm.js → contract.js-DGZXpcNX.js} +7 -7
- package/build/server/chunks/chunks/{contract.js-B4JdXFgm.js.map → contract.js-DGZXpcNX.js.map} +1 -1
- package/build/server/chunks/chunks/{core.js-BHxa3VBo.js → core.js-AGKlECJ0.js} +32 -32
- package/build/server/chunks/chunks/core.js-AGKlECJ0.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-Cncv1qoG.js → exports.js-BsVKSGJk.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-Cncv1qoG.js.map → exports.js-BsVKSGJk.js.map} +1 -1
- package/build/server/chunks/chunks/{http.js-DYYKvppy.js → http.js-BQhjMaW9.js} +2 -2
- package/build/server/chunks/chunks/{http.js-DYYKvppy.js.map → http.js-BQhjMaW9.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-C2FKw_9R.js → internal.js-DJGcNryj.js} +3 -3
- package/build/server/chunks/chunks/{internal.js-C2FKw_9R.js.map → internal.js-DJGcNryj.js.map} +1 -1
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{manifest-membership.js-BkrPsM_r.js → manifest-membership.js-DkHaPk2F.js} +2 -2
- package/build/server/chunks/chunks/{manifest-membership.js-BkrPsM_r.js.map → manifest-membership.js-DkHaPk2F.js.map} +1 -1
- package/build/server/chunks/chunks/{raw-reconciliation.js-DPnNXe0b.js → raw-reconciliation.js-D2sI2C-t.js} +3 -3
- package/build/server/chunks/chunks/raw-reconciliation.js-D2sI2C-t.js.map +1 -0
- package/build/server/chunks/chunks/{raw-reconciliation2.js-DKOpJ8if.js → raw-reconciliation2.js-CMpUvuMd.js} +2 -2
- package/build/server/chunks/chunks/{raw-reconciliation2.js-DKOpJ8if.js.map → raw-reconciliation2.js-CMpUvuMd.js.map} +1 -1
- package/build/server/chunks/chunks/{shared.js-BGsWd7z-.js → shared.js-BtmYg0tL.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-BGsWd7z-.js.map → shared.js-BtmYg0tL.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-C0ADATvf.js → utils.js-CqXk0Ug6.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-C0ADATvf.js.map → utils.js-CqXk0Ug6.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Dw2MW5Tm.js → _server.ts.js-DKGD9Jk2.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Dw2MW5Tm.js.map → _server.ts.js-DKGD9Jk2.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-GQDuJGug.js → _server.ts.js-C1UfF0EO.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-GQDuJGug.js.map → _server.ts.js-C1UfF0EO.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-JbLSv7Xx.js → _server.ts.js-DpASkk00.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-JbLSv7Xx.js.map → _server.ts.js-DpASkk00.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BPae-BYF.js → _server.ts.js-C3jU2vC8.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BPae-BYF.js.map → _server.ts.js-C3jU2vC8.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-BafrrUxu.js → _server.ts.js-B7OwufF3.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-BafrrUxu.js.map → _server.ts.js-B7OwufF3.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-UOlSNEi9.js → _server.ts.js-COhg1nYk.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-UOlSNEi9.js.map → _server.ts.js-COhg1nYk.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-QE1vUuAx.js → _server.ts.js-DAEE17eM.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-QE1vUuAx.js.map → _server.ts.js-DAEE17eM.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DIVfppGt.js → _server.ts.js-BrZSS4gm.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DIVfppGt.js.map → _server.ts.js-BrZSS4gm.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-B6R_kqP8.js → _server.ts.js-Cfst-Brd.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-B6R_kqP8.js.map → _server.ts.js-Cfst-Brd.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-CertbDsH.js → _server.ts.js-aN_h2Ifo.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-CertbDsH.js.map → _server.ts.js-aN_h2Ifo.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DEIF3Hu2.js → _server.ts.js-CX2A66ij.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DEIF3Hu2.js.map → _server.ts.js-CX2A66ij.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-DNFsNGr4.js → _server.ts.js-CwTiaheP.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-DNFsNGr4.js.map → _server.ts.js-CwTiaheP.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DDW8XRPe.js → _server.ts.js-fIbsr_2e.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DDW8XRPe.js.map → _server.ts.js-fIbsr_2e.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-C222-xli.js → _server.ts.js-Dvo1bsLi.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-C222-xli.js.map → _server.ts.js-Dvo1bsLi.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-CI1P1uyd.js → _server.ts.js-VLg1G3mN.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-CI1P1uyd.js.map → _server.ts.js-VLg1G3mN.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DpiUwaSh.js → _server.ts.js-DqctsOop.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DpiUwaSh.js.map → _server.ts.js-DqctsOop.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-DT0VPqPT.js → _server.ts.js-CoxSU5iO.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-DT0VPqPT.js.map → _server.ts.js-CoxSU5iO.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DBpHM42g.js → _server.ts.js-wUxsLZdr.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DBpHM42g.js.map → _server.ts.js-wUxsLZdr.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cxu5b6Au.js → _server.ts.js-BKsF0Oit.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cxu5b6Au.js.map → _server.ts.js-BKsF0Oit.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-W4dhMo8Y.js → _server.ts.js-Dk9oOZwM.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-W4dhMo8Y.js.map → _server.ts.js-Dk9oOZwM.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DJ_adxbT.js → _server.ts.js-DxjNmmtL.js} +7 -7
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DJ_adxbT.js.map → _server.ts.js-DxjNmmtL.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BisoHihD.js → _server.ts.js-DD0b38VV.js} +6 -6
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BisoHihD.js.map → _server.ts.js-DD0b38VV.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-D4jLLuko.js → _server.ts.js-DId6F2i_.js} +7 -7
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-D4jLLuko.js.map → _server.ts.js-DId6F2i_.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Dfv2ItjT.js → _server.ts.js-DKKkGoK2.js} +7 -7
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Dfv2ItjT.js.map → _server.ts.js-DKKkGoK2.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-oHJX5INm.js → hooks.server.js-B5Ctvorj.js} +6 -6
- package/build/server/chunks/entries/{hooks.server.js-oHJX5INm.js.map → hooks.server.js-B5Ctvorj.js.map} +1 -1
- package/build/server/chunks/{handler-uc4GLvWI.js → handler-DwVfBx6r.js} +5 -5
- package/build/server/chunks/{handler-uc4GLvWI.js.map → handler-DwVfBx6r.js.map} +1 -1
- package/build/server/chunks/{index.js-BTlSiK4q.js → index.js-DgPuPQJn.js} +5 -5
- package/build/server/chunks/{index.js-BTlSiK4q.js.map → index.js-DgPuPQJn.js.map} +1 -1
- package/build/server/chunks/{manifest.js-BB8iIVbZ.js → manifest.js-B054EcAf.js} +31 -31
- package/build/server/chunks/{manifest.js-BB8iIVbZ.js.map → manifest.js-B054EcAf.js.map} +1 -1
- package/build/server/chunks/nodes/{0.js-CccZDEdX.js → 0.js-DoHZTmnT.js} +2 -2
- package/build/server/chunks/nodes/{0.js-CccZDEdX.js.map → 0.js-DoHZTmnT.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-BcPlsloO.js +7 -0
- package/build/server/chunks/nodes/{1.js-_Ms77u64.js.map → 1.js-BcPlsloO.js.map} +1 -1
- package/build/server/chunks/nodes/{2.js-BpyFsilO.js → 2.js-5qCXkvzl.js} +2 -2
- package/build/server/chunks/nodes/{2.js-BpyFsilO.js.map → 2.js-5qCXkvzl.js.map} +1 -1
- package/build/server/chunks/nodes/3.js-D6fAMX1w.js +7 -0
- package/build/server/chunks/nodes/{3.js-D7RUEviu.js.map → 3.js-D6fAMX1w.js.map} +1 -1
- package/build/server/chunks/nodes/4.js-CGkeT0SQ.js +7 -0
- package/build/server/chunks/nodes/{4.js-Cfc3G2Gv.js.map → 4.js-CGkeT0SQ.js.map} +1 -1
- package/dist/cli.js +3 -4
- package/dist/core/figma-tag-links.d.ts +66 -0
- package/dist/core/figma-tag-links.js +97 -0
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +1 -1
- package/dist/server/cli-commands.d.ts +1 -1
- package/dist/server/cli-commands.js +1 -1
- package/dist/server/cli-figma-tags.d.ts +1 -1
- package/dist/server/cli-figma-tags.js +149 -88
- package/dist/server/figma-tags.d.ts +72 -24
- package/dist/server/figma-tags.js +130 -79
- package/dist/server/importers/figma.d.ts +20 -15
- package/dist/server/importers/figma.js +172 -92
- package/package.json +1 -1
- package/build/client/_app/immutable/chunks/BSzEzOBI.js.br +0 -0
- package/build/client/_app/immutable/chunks/BSzEzOBI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CRFKGnag.js.br +0 -0
- package/build/client/_app/immutable/chunks/CRFKGnag.js.gz +0 -0
- package/build/client/_app/immutable/chunks/apKHI4vq.js.br +0 -0
- package/build/client/_app/immutable/chunks/apKHI4vq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/g2rma9Ym.js.br +0 -0
- package/build/client/_app/immutable/chunks/g2rma9Ym.js.gz +0 -0
- package/build/client/_app/immutable/chunks/rtFCvv3j.js.br +0 -0
- package/build/client/_app/immutable/chunks/rtFCvv3j.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.BiYJKHq5.js.br +0 -0
- package/build/client/_app/immutable/entry/app.BiYJKHq5.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BGYYpgAJ.js +0 -1
- package/build/client/_app/immutable/entry/start.BGYYpgAJ.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BGYYpgAJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.kL9OGUbr.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.kL9OGUbr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DQGC5ZQg.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DQGC5ZQg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DXo6NZ8U.js +0 -4
- package/build/client/_app/immutable/nodes/2.DXo6NZ8U.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DXo6NZ8U.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DkyIyoNd.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DkyIyoNd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.D1JY4Ttk.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.D1JY4Ttk.js.gz +0 -0
- package/build/server/chunks/chunks/context.js-BZSZNuAd.js.map +0 -1
- package/build/server/chunks/chunks/core.js-BHxa3VBo.js.map +0 -1
- package/build/server/chunks/chunks/raw-reconciliation.js-DPnNXe0b.js.map +0 -1
- package/build/server/chunks/nodes/1.js-_Ms77u64.js +0 -7
- package/build/server/chunks/nodes/3.js-D7RUEviu.js +0 -7
- package/build/server/chunks/nodes/4.js-Cfc3G2Gv.js +0 -7
- package/dist/core/figma-tag-script.d.ts +0 -154
- package/dist/core/figma-tag-script.js +0 -248
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { lookup } from 'node:dns/promises';
|
|
2
2
|
import { isIP } from 'node:net';
|
|
3
3
|
import sharp from 'sharp';
|
|
4
|
-
import {
|
|
4
|
+
import { figmaLinksFromRest, figmaTagEntries, fundusTagLink, isValidAssetId } from '../../core/index.js';
|
|
5
5
|
import { SourceImportError, invalidInput } from './contract.js';
|
|
6
6
|
import { requestPinnedHttps } from './pinned-https.js';
|
|
7
7
|
const MAX_DOWNLOAD_BYTES = 50 * 1024 * 1024;
|
|
@@ -9,6 +9,9 @@ const MAX_PIXELS = 32_000_000;
|
|
|
9
9
|
const MAX_REDIRECTS = 3;
|
|
10
10
|
const REQUEST_TIMEOUT_MS = 30_000;
|
|
11
11
|
const PNG_SIGNATURE = Uint8Array.from([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
12
|
+
/** Worst case per API call: 3 attempts × 30 s timeout + 2 waits × 10 s = 110 s. */
|
|
13
|
+
const FIGMA_RATE_LIMIT_ATTEMPTS = 3;
|
|
14
|
+
const FIGMA_RATE_LIMIT_MAX_WAIT_SECONDS = 10;
|
|
12
15
|
function record(value) {
|
|
13
16
|
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
14
17
|
? value
|
|
@@ -130,17 +133,19 @@ function retryAfter(response) {
|
|
|
130
133
|
const seconds = Number(raw);
|
|
131
134
|
return Number.isSafeInteger(seconds) ? seconds : undefined;
|
|
132
135
|
}
|
|
133
|
-
function upstreamStatusError(response) {
|
|
136
|
+
function upstreamStatusError(response, scope) {
|
|
134
137
|
if (response.status === 401)
|
|
135
138
|
return new SourceImportError('unauthorized', 'Figma authentication failed.');
|
|
136
139
|
if (response.status === 403)
|
|
137
|
-
return new SourceImportError('forbidden',
|
|
140
|
+
return new SourceImportError('forbidden', scope
|
|
141
|
+
? `Figma authentication or access failed. The token may be invalid or expired, may lack the ${scope} scope, or may not have access to this file.`
|
|
142
|
+
: 'Figma authentication or access failed. The token may be invalid or expired, or it may not have access to this file.');
|
|
138
143
|
if (response.status === 404)
|
|
139
144
|
return new SourceImportError('not-found', 'The Figma file or node was not found.');
|
|
140
145
|
if (response.status === 429) {
|
|
141
146
|
return new SourceImportError('rate-limited', 'Figma rate-limited this request.', retryAfter(response));
|
|
142
147
|
}
|
|
143
|
-
return new SourceImportError('upstream-failed', `Figma
|
|
148
|
+
return new SourceImportError('upstream-failed', `Figma request failed with status ${response.status}.`);
|
|
144
149
|
}
|
|
145
150
|
function isForbiddenIpv4(address) {
|
|
146
151
|
const parts = address.split('.').map(Number);
|
|
@@ -248,22 +253,22 @@ export async function resolveSafeDownloadTarget(value) {
|
|
|
248
253
|
export async function assertSafeDownloadUrl(value) {
|
|
249
254
|
return (await resolveSafeDownloadTarget(value)).url;
|
|
250
255
|
}
|
|
251
|
-
async function fetchWithDeadline(fetcher, url, init,
|
|
256
|
+
async function fetchWithDeadline(fetcher, url, init, scope) {
|
|
252
257
|
const controller = new AbortController();
|
|
253
258
|
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
254
259
|
try {
|
|
255
260
|
const response = await fetcher(url, { ...init, signal: controller.signal });
|
|
256
261
|
if (!response.ok)
|
|
257
|
-
throw upstreamStatusError(response);
|
|
258
|
-
return await
|
|
262
|
+
throw upstreamStatusError(response, scope);
|
|
263
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
259
264
|
}
|
|
260
265
|
catch (cause) {
|
|
261
266
|
if (controller.signal.aborted || (cause instanceof Error && cause.name === 'AbortError')) {
|
|
262
|
-
throw new SourceImportError('download-timeout', 'Figma
|
|
267
|
+
throw new SourceImportError('download-timeout', 'Figma request timed out.');
|
|
263
268
|
}
|
|
264
269
|
if (cause instanceof SourceImportError)
|
|
265
270
|
throw cause;
|
|
266
|
-
throw new SourceImportError('upstream-failed', 'Figma
|
|
271
|
+
throw new SourceImportError('upstream-failed', 'Figma request failed.');
|
|
267
272
|
}
|
|
268
273
|
finally {
|
|
269
274
|
clearTimeout(timeout);
|
|
@@ -383,50 +388,40 @@ async function validatePng(bytes) {
|
|
|
383
388
|
throw new SourceImportError('image-too-large', 'Figma export exceeds the 32 megapixel limit.');
|
|
384
389
|
}
|
|
385
390
|
}
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
*/
|
|
391
|
-
export function figmaDocumentNodes(document) {
|
|
392
|
-
const nodes = [];
|
|
393
|
-
const visit = (value, page) => {
|
|
394
|
-
const current = record(value);
|
|
395
|
-
if (!current)
|
|
396
|
-
return;
|
|
397
|
-
const name = typeof current.name === 'string' ? current.name : '';
|
|
398
|
-
const pageName = current.type === 'CANVAS' ? name : page;
|
|
399
|
-
if (typeof current.id === 'string' &&
|
|
400
|
-
current.type !== 'DOCUMENT' &&
|
|
401
|
-
current.type !== 'CANVAS' &&
|
|
402
|
-
!isInstanceSublayerId(current.id)) {
|
|
403
|
-
const shared = record(current.sharedPluginData);
|
|
404
|
-
const fundus = shared ? record(shared.fundus) : null;
|
|
405
|
-
const tag = fundus && typeof fundus.assetId === 'string' ? fundus.assetId : '';
|
|
406
|
-
nodes.push({
|
|
407
|
-
nodeId: current.id,
|
|
408
|
-
nodeName: name,
|
|
409
|
-
page: pageName,
|
|
410
|
-
tag: tag === '' ? null : tag
|
|
411
|
-
});
|
|
391
|
+
async function fetchFigmaApiBytes(endpoint, init, scope, context) {
|
|
392
|
+
for (let attempt = 1;; attempt++) {
|
|
393
|
+
try {
|
|
394
|
+
return await fetchWithDeadline(context.fetch, endpoint, init, scope);
|
|
412
395
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
396
|
+
catch (cause) {
|
|
397
|
+
const wait = cause instanceof SourceImportError && cause.code === 'rate-limited'
|
|
398
|
+
? cause.retryAfterSeconds
|
|
399
|
+
: undefined;
|
|
400
|
+
if (wait === undefined ||
|
|
401
|
+
wait > FIGMA_RATE_LIMIT_MAX_WAIT_SECONDS ||
|
|
402
|
+
attempt >= FIGMA_RATE_LIMIT_ATTEMPTS) {
|
|
403
|
+
throw cause;
|
|
404
|
+
}
|
|
405
|
+
await new Promise((resolve) => setTimeout(resolve, wait * 1000));
|
|
416
406
|
}
|
|
417
|
-
}
|
|
418
|
-
visit(record(document), '');
|
|
419
|
-
return nodes;
|
|
407
|
+
}
|
|
420
408
|
}
|
|
421
|
-
|
|
422
|
-
export async function fetchFigmaDocument(fileKey, context) {
|
|
409
|
+
async function requestFigmaApi(endpoint, context, request) {
|
|
423
410
|
const token = context.config.import.figma.token;
|
|
424
411
|
if (!token) {
|
|
425
412
|
throw new SourceImportError('not-configured', 'Figma access is not configured.');
|
|
426
413
|
}
|
|
427
|
-
const
|
|
428
|
-
|
|
429
|
-
|
|
414
|
+
const jsonBytes = await fetchFigmaApiBytes(endpoint, {
|
|
415
|
+
method: request.method ?? 'GET',
|
|
416
|
+
redirect: 'error',
|
|
417
|
+
headers: {
|
|
418
|
+
'X-Figma-Token': token,
|
|
419
|
+
...(request.body !== undefined ? { 'Content-Type': 'application/json' } : {})
|
|
420
|
+
},
|
|
421
|
+
...(request.body !== undefined ? { body: JSON.stringify(request.body) } : {})
|
|
422
|
+
}, request.scope, context);
|
|
423
|
+
if (jsonBytes.byteLength === 0)
|
|
424
|
+
return {};
|
|
430
425
|
let payload;
|
|
431
426
|
try {
|
|
432
427
|
payload = JSON.parse(new TextDecoder().decode(jsonBytes));
|
|
@@ -435,56 +430,144 @@ export async function fetchFigmaDocument(fileKey, context) {
|
|
|
435
430
|
throw new SourceImportError('invalid-response', 'Figma returned an invalid response.');
|
|
436
431
|
}
|
|
437
432
|
const body = record(payload);
|
|
438
|
-
if (!body ||
|
|
433
|
+
if (!body ||
|
|
434
|
+
body.err ||
|
|
435
|
+
body.error === true ||
|
|
436
|
+
(typeof body.status === 'number' && body.status >= 400)) {
|
|
437
|
+
throw new SourceImportError('invalid-response', request.errorMessage);
|
|
438
|
+
}
|
|
439
|
+
// Figma reports rejected batch entries (e.g. "Url already exists") in `errors` with HTTP 200.
|
|
440
|
+
if (Array.isArray(body.errors) && body.errors.length > 0) {
|
|
441
|
+
const reasons = body.errors.map((entry) => {
|
|
442
|
+
const reason = record(entry)?.error;
|
|
443
|
+
return typeof reason === 'string' ? reason : 'unknown error';
|
|
444
|
+
});
|
|
445
|
+
throw new SourceImportError('upstream-failed', `Figma rejected the request: ${reasons.join('; ')}`);
|
|
446
|
+
}
|
|
447
|
+
return body;
|
|
448
|
+
}
|
|
449
|
+
function figmaFileEndpoint(fileKey, path) {
|
|
450
|
+
return new URL(`https://api.figma.com/v1/files/${encodeURIComponent(fileKey)}${path}`);
|
|
451
|
+
}
|
|
452
|
+
/** Every Fundus tag link in the file (orphaned ones included); each entry has its `linkId`. */
|
|
453
|
+
export async function listFigmaTagEntries(fileKey, context) {
|
|
454
|
+
const body = await requestFigmaApi(figmaFileEndpoint(fileKey, '/dev_resources'), context, {
|
|
455
|
+
scope: 'file_dev_resources:read',
|
|
456
|
+
errorMessage: 'Figma returned an invalid response.'
|
|
457
|
+
});
|
|
458
|
+
const links = figmaLinksFromRest(body);
|
|
459
|
+
if (!links) {
|
|
460
|
+
throw new SourceImportError('invalid-response', 'Figma returned an invalid Dev Resources list.');
|
|
461
|
+
}
|
|
462
|
+
return figmaTagEntries(links).filter((entry) => entry.linkId !== undefined);
|
|
463
|
+
}
|
|
464
|
+
/** The requested nodes that exist; Figma answers deleted or unknown ids with `null` (dropped). */
|
|
465
|
+
export async function fetchFigmaNodeSummaries(fileKey, nodeIds, context) {
|
|
466
|
+
if (nodeIds.length === 0)
|
|
467
|
+
return [];
|
|
468
|
+
const endpoint = figmaFileEndpoint(fileKey, '/nodes');
|
|
469
|
+
endpoint.searchParams.set('ids', nodeIds.join(','));
|
|
470
|
+
endpoint.searchParams.set('depth', '1');
|
|
471
|
+
const body = await requestFigmaApi(endpoint, context, {
|
|
472
|
+
scope: 'file_content:read',
|
|
473
|
+
errorMessage: 'Figma returned an invalid response.'
|
|
474
|
+
});
|
|
475
|
+
const nodes = record(body.nodes);
|
|
476
|
+
if (!nodes)
|
|
439
477
|
throw new SourceImportError('invalid-response', 'Figma returned an invalid response.');
|
|
478
|
+
const summaries = [];
|
|
479
|
+
for (const nodeId of nodeIds) {
|
|
480
|
+
if (nodes[nodeId] === null)
|
|
481
|
+
continue;
|
|
482
|
+
const document = record(record(nodes[nodeId])?.document);
|
|
483
|
+
if (!document || typeof document.name !== 'string' || typeof document.type !== 'string') {
|
|
484
|
+
throw new SourceImportError('invalid-response', 'Figma did not return the requested node.');
|
|
485
|
+
}
|
|
486
|
+
summaries.push({ nodeId, nodeName: document.name, nodeType: document.type });
|
|
440
487
|
}
|
|
441
|
-
return
|
|
488
|
+
return summaries;
|
|
442
489
|
}
|
|
443
|
-
export async function
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
throw new SourceImportError('ambiguous-tag', `More than one Figma node is tagged "${tag}" in this file.`);
|
|
451
|
-
}
|
|
452
|
-
return matches[0].nodeId;
|
|
490
|
+
export async function createFigmaTagLink(fileKey, nodeId, tag, context) {
|
|
491
|
+
await requestFigmaApi(new URL('https://api.figma.com/v1/dev_resources'), context, {
|
|
492
|
+
scope: 'file_dev_resources:write',
|
|
493
|
+
errorMessage: 'Figma could not create the tag link.',
|
|
494
|
+
method: 'POST',
|
|
495
|
+
body: { dev_resources: [{ ...fundusTagLink(tag), file_key: fileKey, node_id: nodeId }] }
|
|
496
|
+
});
|
|
453
497
|
}
|
|
454
|
-
async function
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
const
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
498
|
+
export async function deleteFigmaDevResource(fileKey, linkId, context) {
|
|
499
|
+
await requestFigmaApi(figmaFileEndpoint(fileKey, `/dev_resources/${encodeURIComponent(linkId)}`), context, {
|
|
500
|
+
scope: 'file_dev_resources:write',
|
|
501
|
+
errorMessage: 'Figma could not delete the tag link.',
|
|
502
|
+
method: 'DELETE'
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
/** Export URLs for the nodes in one `/images` call; `null` for a node Figma cannot render. */
|
|
506
|
+
async function exportImageUrls(fileKey, nodeIds, scale, context) {
|
|
507
|
+
const endpoint = new URL(`https://api.figma.com/v1/images/${encodeURIComponent(fileKey)}`);
|
|
508
|
+
endpoint.searchParams.set('ids', nodeIds.join(','));
|
|
509
|
+
endpoint.searchParams.set('format', 'png');
|
|
510
|
+
endpoint.searchParams.set('scale', String(scale));
|
|
511
|
+
const body = await requestFigmaApi(endpoint, context, {
|
|
512
|
+
scope: 'file_content:read',
|
|
513
|
+
errorMessage: 'Figma could not render this node.'
|
|
514
|
+
});
|
|
515
|
+
const images = record(body.images);
|
|
516
|
+
const urls = {};
|
|
517
|
+
for (const nodeId of nodeIds) {
|
|
518
|
+
if (!images || !Object.hasOwn(images, nodeId)) {
|
|
519
|
+
throw new SourceImportError('invalid-response', 'Figma did not return the requested node.');
|
|
520
|
+
}
|
|
521
|
+
const imageUrl = images[nodeId];
|
|
522
|
+
urls[nodeId] = typeof imageUrl === 'string' && imageUrl.length > 0 ? imageUrl : null;
|
|
470
523
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
524
|
+
return urls;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* The one renderable node carrying `tag`. All candidates go into a single
|
|
528
|
+
* `/images` call, which answers deleted nodes with `null`; a live but
|
|
529
|
+
* unrenderable second candidate therefore goes unnoticed.
|
|
530
|
+
*/
|
|
531
|
+
export async function resolveTaggedNode(fileKey, tag, scale, context) {
|
|
532
|
+
const candidates = [
|
|
533
|
+
...new Set((await listFigmaTagEntries(fileKey, context))
|
|
534
|
+
.filter((entry) => entry.tag === tag)
|
|
535
|
+
.map((entry) => entry.nodeId))
|
|
536
|
+
];
|
|
537
|
+
if (candidates.length === 0) {
|
|
538
|
+
throw new SourceImportError('not-found', `No Figma node is tagged "${tag}" in this file.`);
|
|
474
539
|
}
|
|
475
|
-
const
|
|
476
|
-
|
|
477
|
-
|
|
540
|
+
const urls = await exportImageUrls(fileKey, candidates, scale, context);
|
|
541
|
+
const live = candidates.flatMap((nodeId) => {
|
|
542
|
+
const imageUrl = urls[nodeId];
|
|
543
|
+
return imageUrl ? [{ nodeId, imageUrl }] : [];
|
|
544
|
+
});
|
|
545
|
+
if (live.length === 0) {
|
|
546
|
+
throw new SourceImportError('not-found', `Every Figma node tagged "${tag}" (${candidates.join(', ')}) is deleted or cannot be rendered.`);
|
|
478
547
|
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
throw new SourceImportError('invalid-response', 'Figma could not render the requested node.');
|
|
548
|
+
if (live.length > 1) {
|
|
549
|
+
throw new SourceImportError('ambiguous-tag', `More than one Figma node is tagged "${tag}" in this file (${live.map((node) => node.nodeId).join(', ')}).`);
|
|
482
550
|
}
|
|
551
|
+
return live[0];
|
|
552
|
+
}
|
|
553
|
+
async function downloadRaw(source, imageUrl, context) {
|
|
483
554
|
const bytes = await downloadExport(context.httpsTransport ?? requestPinnedHttps, imageUrl);
|
|
484
555
|
await validatePng(bytes);
|
|
485
556
|
const importSource = { importer: 'figma', parameters: source };
|
|
486
557
|
return { bytes, extension: 'png', importSource };
|
|
487
558
|
}
|
|
559
|
+
async function importNode(source, context) {
|
|
560
|
+
const urls = await exportImageUrls(source.fileKey, [source.nodeId], source.scale, context);
|
|
561
|
+
const imageUrl = urls[source.nodeId];
|
|
562
|
+
if (!imageUrl) {
|
|
563
|
+
throw new SourceImportError('invalid-response', 'Figma could not render the requested node.');
|
|
564
|
+
}
|
|
565
|
+
return downloadRaw(source, imageUrl, context);
|
|
566
|
+
}
|
|
567
|
+
async function importTag(source, context) {
|
|
568
|
+
const { nodeId, imageUrl } = await resolveTaggedNode(source.fileKey, source.fundusTag, source.scale, context);
|
|
569
|
+
return downloadRaw({ ...source, nodeId }, imageUrl, context);
|
|
570
|
+
}
|
|
488
571
|
export const figmaSourceImporter = {
|
|
489
572
|
kind: 'figma',
|
|
490
573
|
label: 'Figma',
|
|
@@ -495,18 +578,16 @@ export const figmaSourceImporter = {
|
|
|
495
578
|
if (!fileKey) {
|
|
496
579
|
throw new SourceImportError('not-configured', 'Figma tag import needs a fileKey or import.figma.defaultFileKey in fundus.config.');
|
|
497
580
|
}
|
|
498
|
-
|
|
499
|
-
return materialize({
|
|
581
|
+
return importTag({
|
|
500
582
|
mode: 'tag',
|
|
501
583
|
fileKey,
|
|
502
584
|
fundusTag: input.tag,
|
|
503
|
-
nodeId,
|
|
504
585
|
format: 'png',
|
|
505
586
|
scale: input.scale ?? context.config.import.figma.defaults.scale
|
|
506
587
|
}, context);
|
|
507
588
|
}
|
|
508
589
|
const parsed = parseFigmaSelectionUrl(input.url);
|
|
509
|
-
return
|
|
590
|
+
return importNode({
|
|
510
591
|
fileKey: parsed.fileKey,
|
|
511
592
|
nodeId: parsed.nodeId,
|
|
512
593
|
format: 'png',
|
|
@@ -515,10 +596,9 @@ export const figmaSourceImporter = {
|
|
|
515
596
|
},
|
|
516
597
|
validateSourceParameters: validateFigmaSourceParameters,
|
|
517
598
|
async reimportRaw(source, context) {
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
return
|
|
521
|
-
|
|
522
|
-
return materialize(source, context);
|
|
599
|
+
// The stored nodeId is not consulted: the tag link decides where the tag lives now.
|
|
600
|
+
if (source.mode === 'tag')
|
|
601
|
+
return importTag(source, context);
|
|
602
|
+
return importNode(source, context);
|
|
523
603
|
}
|
|
524
604
|
};
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e,r as t}from"../chunks/BSzEzOBI.js";export{e as load_css,t as start};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{$ as e,A as t,D as n,F as r,I as i,K as a,L as o,M as s,N as c,O as l,P as u,Q as d,R as f,S as p,T as m,U as h,V as g,W as _,X as v,Z as y,a as b,b as x,c as S,dt as C,et as w,f as T,ft as E,g as D,j as O,l as ee,m as te,nt as k,ot as A,p as j,q as M,r as N,rt as P,s as ne,st as F,tt as I,u as re,ut as ie,w as ae,y as oe,z as L}from"../chunks/DLEDBLL1.js";import{l as se,n as ce}from"../chunks/BSzEzOBI.js";import"../chunks/xihTtKlq.js";import{t as le}from"../chunks/rtFCvv3j.js";import{$ as ue,F as de,I as fe,J as pe,M as me,P as he,W as ge,X as _e,Z as ve,d as ye,k as be,l as xe,m as Se,o as Ce,ot as we,st as Te,t as R,tt as Ee,u as De}from"../chunks/apKHI4vq.js";import{a as Oe,b as ke,c as Ae,d as je,f as Me,g as Ne,h as Pe,i as Fe,m as Ie,n as Le,o as Re,p as ze,r as Be,s as Ve,t as He,u as Ue,v as We,x as Ge,y as Ke}from"../chunks/CRFKGnag.js";import{a as qe}from"../chunks/g2rma9Ym.js";import{t as Je}from"../chunks/BhqXGxdj.js";import{i as Ye,n as Xe,t as Ze}from"../chunks/CzxolZCO.js";function z(e){return Array.isArray?Array.isArray(e):U(e)===`[object Array]`}function Qe(e){if(typeof e==`string`)return e;if(typeof e==`bigint`)return e.toString();let t=e+``;return t==`0`&&1/e==-1/0?`-0`:t}function $e(e){return e==null?``:Qe(e)}function B(e){return typeof e==`string`}function et(e){return typeof e==`number`}function tt(e){return e===!0||e===!1||rt(e)&&U(e)==`[object Boolean]`}function nt(e){return typeof e==`object`}function rt(e){return nt(e)&&e!==null}function V(e){return e!=null}function H(e){return!e.trim().length}function U(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}var W=`Incorrect 'index' type`,G=`Invalid doc index: must be a non-negative integer within the bounds of the docs array`,it=e=>`Invalid value for key ${e}`,K=e=>`Pattern length exceeds max of ${e}.`,at=e=>`Missing ${e} property in key`,ot=e=>`Property 'weight' in key '${e}' must be a positive integer`,q=`Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead.`,J=Object.prototype.hasOwnProperty,st=class{constructor(e){this._keys=[],this._keyMap={};let t=0;e.forEach(e=>{let n=ct(e);this._keys.push(n),this._keyMap[n.id]=n,t+=n.weight}),this._keys.forEach(e=>{e.weight/=t})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}};function ct(e){let t=null,n=null,r=null,i=1,a=null;if(B(e)||z(e))r=e,t=lt(e),n=ut(e);else{if(!J.call(e,`name`))throw Error(at(`name`));let o=e.name;if(r=o,J.call(e,`weight`)&&e.weight!==void 0&&(i=e.weight,i<=0))throw Error(ot(ut(o)));t=lt(o),n=ut(o),a=e.getFn??null}return{path:t,id:n,weight:i,src:r,getFn:a}}function lt(e){return z(e)?e:e.split(`.`)}function ut(e){return z(e)?e.join(`.`):e}function dt(e,t){let n=[],r=!1,i=(e,t,a,o)=>{if(V(e))if(!t[a])n.push(o===void 0?e:{v:e,i:o});else{let s=e[t[a]];if(!V(s))return;if(a===t.length-1&&(B(s)||et(s)||tt(s)||typeof s==`bigint`))n.push(o===void 0?$e(s):{v:$e(s),i:o});else if(z(s)){r=!0;for(let e=0,n=s.length;e<n;e+=1)i(s[e],t,a+1,e)}else t.length&&i(s,t,a+1,o)}};return i(e,B(t)?t.split(`.`):t,0),r?n:n[0]}var ft={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},pt={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(e,t)=>e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1},Y={location:0,threshold:.6,distance:100},mt={useExtendedSearch:!1,useTokenSearch:!1,tokenize:void 0,tokenMatch:`any`,getFn:dt,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},X=Object.freeze({...pt,...ft,...Y,...mt});function ht(e=1,t=3){let n=new Map,r=10**t;return{get(t){let i=1,a=!1;for(let e=0;e<t.length;e++)t.charCodeAt(e)===32?a||=(i++,!0):a=!1;if(n.has(i))return n.get(i);let o=Math.round(r/i**(.5*e))/r;return n.set(i,o),o},clear(){n.clear()}}}var gt=class{constructor({getFn:e=X.getFn,fieldNormWeight:t=X.fieldNormWeight}={}){this.norm=ht(t,3),this.getFn=e,this.isCreated=!1,this.docs=[],this.keys=[],this._keysMap={},this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach((e,t)=>{this._keysMap[e.id]=t})}create(){if(this.isCreated||!this.docs.length)return;this.isCreated=!0;let e=this.docs.length;this.records=Array(e);let t=0;if(B(this.docs[0]))for(let n=0;n<e;n++){let e=this._createStringRecord(this.docs[n],n);e&&(this.records[t++]=e)}else for(let n=0;n<e;n++)this.records[t++]=this._createObjectRecord(this.docs[n],n);this.records.length=t,this.norm.clear()}add(e,t){if(!Number.isInteger(t)||t<0)throw Error(G);if(B(e)){let n=this._createStringRecord(e,t);return n&&this.records.push(n),n}let n=this._createObjectRecord(e,t);return this.records.push(n),n}removeAt(e){if(!Number.isInteger(e)||e<0)throw Error(G);for(let t=0,n=this.records.length;t<n;t+=1)if(this.records[t].i===e){this.records.splice(t,1);break}for(let t=0,n=this.records.length;t<n;t+=1)this.records[t].i>e&&--this.records[t].i}removeAll(e){let t=new Set;for(let n of e)Number.isInteger(n)&&n>=0&&t.add(n);if(t.size===0)return;this.records=this.records.filter(e=>!t.has(e.i));let n=Array.from(t).sort((e,t)=>e-t);for(let e of this.records){let t=0,r=n.length;for(;t<r;){let i=t+r>>>1;n[i]<e.i?t=i+1:r=i}e.i-=t}}getValueForItemAtKeyId(e,t){return e[this._keysMap[t]]}size(){return this.records.length}_createStringRecord(e,t){return!V(e)||H(e)?null:{v:e,i:t,n:this.norm.get(e)}}_createObjectRecord(e,t){let n={i:t,$:{}};for(let t=0,r=this.keys.length;t<r;t++){let r=this.keys[t],i=r.getFn?r.getFn(e):this.getFn(e,r.path);if(V(i)){if(z(i)){let e=[];for(let t=0,n=i.length;t<n;t+=1){let n=i[t];if(V(n)){if(B(n)){if(!H(n)){let r={v:n,i:t,n:this.norm.get(n)};e.push(r)}}else if(V(n.v)){let t=B(n.v)?n.v:$e(n.v);if(!H(t)){let r={v:t,i:n.i,n:this.norm.get(t)};e.push(r)}}}}n.$[t]=e}else if(B(i)&&!H(i)){let e={v:i,n:this.norm.get(i)};n.$[t]=e}}}return n}toJSON(){return{keys:this.keys.map(({getFn:e,...t})=>t),records:this.records}}};function _t(e,t,{getFn:n=X.getFn,fieldNormWeight:r=X.fieldNormWeight}={}){let i=new gt({getFn:n,fieldNormWeight:r});return i.setKeys(e.map(ct)),i.setSources(t),i.create(),i}function vt(e,{getFn:t=X.getFn,fieldNormWeight:n=X.fieldNormWeight}={}){let{keys:r,records:i}=e,a=new gt({getFn:t,fieldNormWeight:n});return a.setKeys(r),a.setIndexRecords(i),a}function Z(e=[],t=X.minMatchCharLength){let n=[],r=-1,i=-1,a=0;for(let o=e.length;a<o;a+=1){let o=e[a];o&&r===-1?r=a:!o&&r!==-1&&(i=a-1,i-r+1>=t&&n.push([r,i]),r=-1)}return e[a-1]&&a-r>=t&&n.push([r,a-1]),n}function yt(e,t,n,{location:r=X.location,distance:i=X.distance,threshold:a=X.threshold,findAllMatches:o=X.findAllMatches,minMatchCharLength:s=X.minMatchCharLength,includeMatches:c=X.includeMatches,ignoreLocation:l=X.ignoreLocation}={}){if(t.length>32)throw Error(K(32));let u=t.length,d=e.length,f=Math.max(0,Math.min(r,d)),p=a,m=f,h=(e,t)=>{let n=e/u;if(l)return n;let r=Math.abs(f-t);return i?n+r/i:r?1:n},g=s>1||c,_=g?Array(d):[],v;for(;(v=e.indexOf(t,m))>-1;){let e=h(0,v);if(p=Math.min(e,p),m=v+u,g){let e=0;for(;e<u;)_[v+e]=1,e+=1}}m=-1;let y=[],b=1,x=0,S=u+d,C=1<<u-1;for(let t=0;t<u;t+=1){let r=0,i=S;for(;r<i;)h(t,f+i)<=p?r=i:S=i,i=Math.floor((S-r)/2+r);S=i;let a=Math.max(1,f-i+1),s=o?d:Math.min(f+i,d)+u,c=Array(s+2);c[s+1]=(1<<t)-1;for(let r=s;r>=a;--r){let i=r-1,o=n[e[i]];if(c[r]=(c[r+1]<<1|1)&o,t&&(c[r]|=(y[r+1]|y[r])<<1|1|y[r+1]),c[r]&C&&(b=h(t,i),b<=p)){if(p=b,m=i,x=t,m<=f)break;a=Math.max(1,2*f-m)}}if(h(t+1,f)>p)break;y=c}if(g&&m>=0){let t=Math.min(d-1,m+u-1+x);for(let r=m;r<=t;r+=1)n[e[r]]&&(_[r]=1)}let w={isMatch:m>=0,score:Math.max(.001,b)};if(g){let e=Z(_,s);e.length?c&&(w.indices=e):w.isMatch=!1}return w}function bt(e){let t={};for(let n=0,r=e.length;n<r;n+=1){let i=e.charAt(n);t[i]=(t[i]||0)|1<<r-n-1}return t}function xt(e){if(e.length<=1)return e;e.sort((e,t)=>e[0]-t[0]||e[1]-t[1]);let t=[e[0]];for(let n=1,r=e.length;n<r;n+=1){let r=t[t.length-1],i=e[n];i[0]<=r[1]+1?r[1]=Math.max(r[1],i[1]):t.push(i)}return t}var St={ł:`l`,Ł:`L`,đ:`d`,Đ:`D`,ø:`o`,Ø:`O`,ħ:`h`,Ħ:`H`,ŧ:`t`,Ŧ:`T`,ı:`i`,ß:`ss`},Ct=RegExp(`[`+Object.keys(St).join(``)+`]`,`g`),wt=typeof String.prototype.normalize==`function`?e=>e.normalize(`NFD`).replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g,``).replace(Ct,e=>St[e]):e=>e,Tt=class{constructor(e,{location:t=X.location,threshold:n=X.threshold,distance:r=X.distance,includeMatches:i=X.includeMatches,findAllMatches:a=X.findAllMatches,minMatchCharLength:o=X.minMatchCharLength,isCaseSensitive:s=X.isCaseSensitive,ignoreDiacritics:c=X.ignoreDiacritics,ignoreLocation:l=X.ignoreLocation}={}){if(this.options={location:t,threshold:n,distance:r,includeMatches:i,findAllMatches:a,minMatchCharLength:o,isCaseSensitive:s,ignoreDiacritics:c,ignoreLocation:l},e=s?e:e.toLowerCase(),e=c?wt(e):e,this.pattern=e,this.chunks=[],!this.pattern.length)return;let u=(e,t)=>{this.chunks.push({pattern:e,alphabet:bt(e),startIndex:t})},d=this.pattern.length;if(d>32){let e=0,t=d%32,n=d-t;for(;e<n;)u(this.pattern.substr(e,32),e),e+=32;if(t){let e=d-32;u(this.pattern.substr(e),e)}}else u(this.pattern,0)}searchIn(e){let{isCaseSensitive:t,ignoreDiacritics:n,includeMatches:r}=this.options;if(e=t?e:e.toLowerCase(),e=n?wt(e):e,this.pattern===e){let t={isMatch:!0,score:0};return r&&(t.indices=[[0,e.length-1]]),t}let{location:i,distance:a,threshold:o,findAllMatches:s,minMatchCharLength:c,ignoreLocation:l}=this.options,u=[],d=0,f=!1;this.chunks.forEach(({pattern:t,alphabet:n,startIndex:p})=>{let{isMatch:m,score:h,indices:g}=yt(e,t,n,{location:i+p,distance:a,threshold:o,findAllMatches:s,minMatchCharLength:c,includeMatches:r,ignoreLocation:l});m&&(f=!0),d+=h,m&&g&&u.push(...g)});let p={isMatch:f,score:f?d/this.chunks.length:1};return f&&r&&(p.indices=xt(u)),p}},Et=new Set([`fuzzy`,`include`]);function Dt(e){return e.startsWith(`inverse`)}var Ot=[{type:`exact`,multiRegex:/^="(.*)"$/,singleRegex:/^=(.*)$/,create:e=>({type:`exact`,search(t){let n=t===e;return{isMatch:n,score:+!n,indices:[0,e.length-1]}}})},{type:`include`,multiRegex:/^'"(.*)"$/,singleRegex:/^'(.*)$/,create:e=>({type:`include`,search(t){let n=0,r,i=[],a=e.length;for(;(r=t.indexOf(e,n))>-1;)n=r+a,i.push([r,n-1]);let o=!!i.length;return{isMatch:o,score:+!o,indices:i}}})},{type:`prefix-exact`,multiRegex:/^\^"(.*)"$/,singleRegex:/^\^(.*)$/,create:e=>({type:`prefix-exact`,search(t){let n=t.startsWith(e);return{isMatch:n,score:+!n,indices:[0,e.length-1]}}})},{type:`inverse-prefix-exact`,multiRegex:/^!\^"(.*)"$/,singleRegex:/^!\^(.*)$/,create:e=>({type:`inverse-prefix-exact`,search(t){let n=!t.startsWith(e);return{isMatch:n,score:+!n,indices:[0,t.length-1]}}})},{type:`inverse-suffix-exact`,multiRegex:/^!"(.*)"\$$/,singleRegex:/^!(.*)\$$/,create:e=>({type:`inverse-suffix-exact`,search(t){let n=!t.endsWith(e);return{isMatch:n,score:+!n,indices:[0,t.length-1]}}})},{type:`suffix-exact`,multiRegex:/^"(.*)"\$$/,singleRegex:/^(.*)\$$/,create:e=>({type:`suffix-exact`,search(t){let n=t.endsWith(e);return{isMatch:n,score:+!n,indices:[t.length-e.length,t.length-1]}}})},{type:`inverse-exact`,multiRegex:/^!"(.*)"$/,singleRegex:/^!(.*)$/,create:e=>({type:`inverse-exact`,search(t){let n=t.indexOf(e)===-1;return{isMatch:n,score:+!n,indices:[0,t.length-1]}}})},{type:`fuzzy`,multiRegex:/^"(.*)"$/,singleRegex:/^(.*)$/,create:(e,t={})=>{let n=new Tt(e,{location:t.location??X.location,threshold:t.threshold??X.threshold,distance:t.distance??X.distance,includeMatches:t.includeMatches??X.includeMatches,findAllMatches:t.findAllMatches??X.findAllMatches,minMatchCharLength:t.minMatchCharLength??X.minMatchCharLength,isCaseSensitive:t.isCaseSensitive??X.isCaseSensitive,ignoreDiacritics:t.ignoreDiacritics??X.ignoreDiacritics,ignoreLocation:t.ignoreLocation??X.ignoreLocation});return{type:`fuzzy`,search(e){return n.searchIn(e)}}}}],kt=Ot.length,At=`\0`,jt=`|`;function Mt(e){let t=[],n=e.length,r=0;for(;r<n;){for(;r<n&&e[r]===` `;)r++;if(r>=n)break;let i=r;for(;i<n&&e[i]!==` `&&e[i]!==`"`;)i++;if(i<n&&e[i]===`"`){for(i++;i<n;){if(e[i]===`"`){let t=i+1;if(t>=n||e[t]===` `){i++;break}if(e[t]===`$`&&(t+1>=n||e[t+1]===` `)){i+=2;break}}i++}t.push(e.substring(r,i)),r=i}else{for(;i<n&&e[i]!==` `;)i++;t.push(e.substring(r,i)),r=i}}return t}function Q(e,t){let n=e.match(t);return n?n[1]:null}function Nt(e,t={}){return e.replace(/\\\|/g,At).split(jt).map(e=>{let n=Mt(e.replace(/\u0000/g,`|`).trim()).filter(e=>e&&!!e.trim()),r=[];for(let e=0,i=n.length;e<i;e+=1){let i=n[e],a=!1,o=-1;for(;!a&&++o<kt;){let e=Ot[o],n=Q(i,e.multiRegex);n&&(r.push(e.create(n,t)),a=!0)}if(!a)for(o=-1;++o<kt;){let e=Ot[o],n=Q(i,e.singleRegex);if(n){r.push(e.create(n,t));break}}}return r})}var Pt=class{constructor(e,{isCaseSensitive:t=X.isCaseSensitive,ignoreDiacritics:n=X.ignoreDiacritics,includeMatches:r=X.includeMatches,minMatchCharLength:i=X.minMatchCharLength,ignoreLocation:a=X.ignoreLocation,findAllMatches:o=X.findAllMatches,location:s=X.location,threshold:c=X.threshold,distance:l=X.distance}={}){this.query=null,this.options={isCaseSensitive:t,ignoreDiacritics:n,includeMatches:r,minMatchCharLength:i,findAllMatches:o,ignoreLocation:a,location:s,threshold:c,distance:l},e=t?e:e.toLowerCase(),e=n?wt(e):e,this.pattern=e,this.query=Nt(this.pattern,this.options)}static condition(e,t){return t.useExtendedSearch}searchIn(e){let t=this.query;if(!t)return{isMatch:!1,score:1};let{includeMatches:n,isCaseSensitive:r,ignoreDiacritics:i}=this.options;e=r?e:e.toLowerCase(),e=i?wt(e):e;let a=0,o=[],s=0,c=!1;for(let r=0,i=t.length;r<i;r+=1){let i=t[r];o.length=0,a=0,c=!1;for(let t=0,r=i.length;t<r;t+=1){let r=i[t],{isMatch:l,indices:u,score:d}=r.search(e);if(l)a+=1,s+=d,Dt(r.type)&&(c=!0),n&&(Et.has(r.type)?o.push(...u):o.push(u));else{s=0,a=0,o.length=0,c=!1;break}}if(a){let e={isMatch:!0,score:s/a};return c&&(e.hasInverse=!0),n&&(e.indices=xt(o)),e}}return{isMatch:!1,score:1}}},Ft=[];function It(...e){Ft.push(...e)}function Lt(e,t){for(let n=0,r=Ft.length;n<r;n+=1){let r=Ft[n];if(r.condition(e,t))return new r(e,t)}return new Tt(e,t)}var Rt={AND:`$and`,OR:`$or`},zt={PATH:`$path`,PATTERN:`$val`},Bt=e=>!!(e[Rt.AND]||e[Rt.OR]),Vt=e=>!!e[zt.PATH],Ht=e=>!z(e)&&nt(e)&&!Bt(e),Ut=e=>({[Rt.AND]:Object.keys(e).map(t=>({[t]:e[t]}))});function Wt(e,t,{auto:n=!0}={}){let r=e=>{if(B(e)){let r={keyId:null,pattern:e};return n&&(r.searcher=Lt(e,t)),r}let i=Object.keys(e),a=Vt(e);if(!a&&i.length>1&&!Bt(e))return r(Ut(e));if(Ht(e)){let r=a?e[zt.PATH]:i[0],o=a?e[zt.PATTERN]:e[r];if(!B(o))throw Error(it(r));let s={keyId:ut(r),pattern:o};return n&&(s.searcher=Lt(o,t)),s}let o={children:[],operator:i[0]};return i.forEach(t=>{let n=e[t];z(n)&&n.forEach(e=>{o.children.push(r(e))})}),o};return Bt(e)||(e=Ut(e)),r(e)}function Gt(e,{ignoreFieldNorm:t=X.ignoreFieldNorm}){let n=1;return e.forEach(({key:e,norm:r,score:i})=>{let a=e?e.weight:null;n*=(i===0&&a?2**-52:i)**+((a||1)*(t?1:r))}),n}function Kt(e,{ignoreFieldNorm:t=X.ignoreFieldNorm}){e.forEach(e=>{e.score=Gt(e.matches,{ignoreFieldNorm:t})})}var qt=class{constructor(e){this.limit=e,this.heap=[]}get size(){return this.heap.length}shouldInsert(e){return this.size<this.limit||e<this.heap[0].score}insert(e){this.size<this.limit?(this.heap.push(e),this._bubbleUp(this.size-1)):e.score<this.heap[0].score&&(this.heap[0]=e,this._sinkDown(0))}extractSorted(e){return this.heap.sort(e)}_bubbleUp(e){let t=this.heap;for(;e>0;){let n=e-1>>1;if(t[e].score<=t[n].score)break;let r=t[e];t[e]=t[n],t[n]=r,e=n}}_sinkDown(e){let t=this.heap,n=t.length,r=e;do{e=r;let i=2*e+1,a=2*e+2;if(i<n&&t[i].score>t[r].score&&(r=i),a<n&&t[a].score>t[r].score&&(r=a),r!==e){let n=t[e];t[e]=t[r],t[r]=n}}while(r!==e)}};function Jt(e){let t=[];return e.matches.forEach(e=>{if(!V(e.indices)||!e.indices.length)return;let n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.id),e.idx>-1&&(n.refIndex=e.idx),t.push(n)}),t}function Yt(e,t,{includeMatches:n=X.includeMatches,includeScore:r=X.includeScore}={}){return e.map(e=>{let{idx:i}=e,a={item:t[i],refIndex:i};return n&&(a.matches=Jt(e)),r&&(a.score=e.score),a})}var Xt=/[\p{L}\p{M}\p{N}_]+/gu,Zt=new WeakSet;function Qt(e){Zt.has(e)||(Zt.add(e),console.warn(`[Fuse] tokenize regex ${e} lacks the global flag; only the first match per text will be returned. Add the 'g' flag.`))}function $t(e){if(typeof e==`function`){let t=!1;return n=>{let r=e(n);if(!t&&(t=!0,!Array.isArray(r)||r.some(e=>typeof e!=`string`)))throw Error(`[Fuse] tokenize function must return string[]; received ${Array.isArray(r)?`array containing non-strings`:typeof r}.`);return r}}return e instanceof RegExp?(e.global||Qt(e),t=>t.match(e)||[]):e=>e.match(Xt)||[]}function en({isCaseSensitive:e=!1,ignoreDiacritics:t=!1,tokenize:n}={}){let r=$t(n);return{tokenize(n){return e||(n=n.toLowerCase()),t&&(n=wt(n)),r(n)}}}var tn=class{static condition(e,t){return t.useTokenSearch}constructor(e,t){this.options=t,this.analyzer=en({isCaseSensitive:t.isCaseSensitive,ignoreDiacritics:t.ignoreDiacritics,tokenize:t.tokenize});let n=this.analyzer.tokenize(e),{df:r,fieldCount:i}=t._invertedIndex;this.termSearchers=[],this.idfWeights=[];for(let e of n){this.termSearchers.push(new Tt(e,{location:t.location,threshold:t.threshold,distance:t.distance,includeMatches:t.includeMatches,findAllMatches:t.findAllMatches,minMatchCharLength:t.minMatchCharLength,isCaseSensitive:t.isCaseSensitive,ignoreDiacritics:t.ignoreDiacritics,ignoreLocation:!0}));let n=r.get(e)||0,a=Math.log(1+(i-n+.5)/(n+.5));this.idfWeights.push(a)}this.combineAll=t.tokenMatch===`all`,this.numTerms=this.termSearchers.length,this.useMask=this.numTerms<=31}searchIn(e){if(!this.termSearchers.length)return{isMatch:!1,score:1};let t=[],n=0,r=0,i=0,a=0,o=this.combineAll&&!this.useMask?new Set:null;for(let s=0;s<this.termSearchers.length;s++){let c=this.termSearchers[s].searchIn(e),l=this.idfWeights[s];r+=l,c.isMatch&&(i++,n+=l*(1-c.score),c.indices&&t.push(...c.indices),this.combineAll&&(this.useMask?a|=1<<s:o.add(s)))}if(i===0)return{isMatch:!1,score:1};let s=r>0?1-n/r:0,c={isMatch:!0,score:Math.max(.001,s)};return this.options.includeMatches&&t.length&&(c.indices=xt(t)),this.combineAll&&(this.useMask?c.matchedMask=a:c.matchedTerms=o,c.termCount=this.numTerms),c}};function nn(e,t,n,r){let i=r.tokenize(t);if(!i.length)return;e.fieldCount++,e.docFieldCount.set(n,(e.docFieldCount.get(n)||0)+1);let a=new Set(i),o=e.docTermFieldHits.get(n);o||(o=new Map,e.docTermFieldHits.set(n,o));for(let t of a)o.set(t,(o.get(t)||0)+1),e.df.set(t,(e.df.get(t)||0)+1)}function rn(e,t,n,r){let{i,v:a,$:o}=t;if(a!==void 0){nn(e,a,i,r);return}if(o)for(let t=0;t<n;t++){let n=o[t];if(n)if(Array.isArray(n))for(let t of n)nn(e,t.v,i,r);else nn(e,n.v,i,r)}}function an(e,t,n){let r={fieldCount:0,df:new Map,docFieldCount:new Map,docTermFieldHits:new Map};for(let i of e)rn(r,i,t,n);return r}function on(e,t,n,r){rn(e,t,n,r)}function sn(e,t){let n=e.docFieldCount.get(t);if(n===void 0)return;e.fieldCount-=n,e.docFieldCount.delete(t);let r=e.docTermFieldHits.get(t);if(r){for(let[t,n]of r){let r=(e.df.get(t)||0)-n;r<=0?e.df.delete(t):e.df.set(t,r)}e.docTermFieldHits.delete(t)}}function cn(e,t){if(t.length===0)return;let n=Array.from(new Set(t)).sort((e,t)=>e-t);for(let t of n)sn(e,t);let r=e=>{let t=0,r=n.length;for(;t<r;){let i=t+r>>>1;n[i]<e?t=i+1:r=i}return e-t},i=n[0],a=new Map;for(let[t,n]of e.docFieldCount)a.set(t>i?r(t):t,n);e.docFieldCount=a;let o=new Map;for(let[t,n]of e.docTermFieldHits)o.set(t>i?r(t):t,n);e.docTermFieldHits=o}var ln=class{constructor(e,t,n){this.options={...X,...t},this.options.useExtendedSearch,this.options.useTokenSearch,this._keyStore=new st(this.options.keys),this._docs=e,this._myIndex=null,this._invertedIndex=null,this.setCollection(e,n),this._lastQuery=null,this._lastSearcher=null}_getSearcher(e){if(this._lastQuery===e)return this._lastSearcher;let t=Lt(e,this._invertedIndex?{...this.options,_invertedIndex:this._invertedIndex}:this.options);return this._lastQuery=e,this._lastSearcher=t,t}setCollection(e,t){if(this._docs=e,t&&!(t instanceof gt))throw Error(W);if(this._myIndex=t||_t(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight}),this.options.useTokenSearch){let e=en({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});this._invertedIndex=an(this._myIndex.records,this._myIndex.keys.length,e)}this._invalidateSearcherCache()}add(e){if(!V(e))return;this._docs.push(e);let t=this._myIndex.add(e,this._docs.length-1);if(this._invertedIndex&&t){let e=en({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});on(this._invertedIndex,t,this._myIndex.keys.length,e)}this._invalidateSearcherCache()}remove(e=()=>!1){let t=[],n=[];for(let r=0,i=this._docs.length;r<i;r+=1)e(this._docs[r],r)&&(t.push(this._docs[r]),n.push(r));if(n.length){this._invertedIndex&&cn(this._invertedIndex,n);let e=new Set(n);this._docs=this._docs.filter((t,n)=>!e.has(n)),this._myIndex.removeAll(n),this._invalidateSearcherCache()}return t}removeAt(e){if(!Number.isInteger(e)||e<0||e>=this._docs.length)throw Error(G);this._invertedIndex&&cn(this._invertedIndex,[e]);let t=this._docs.splice(e,1)[0];return this._myIndex.removeAt(e),this._invalidateSearcherCache(),t}_invalidateSearcherCache(){this._lastQuery=null,this._lastSearcher=null}getIndex(){return this._myIndex}search(e,t){let{limit:n=-1}=t||{},{includeMatches:r,includeScore:i,shouldSort:a,sortFn:o,ignoreFieldNorm:s}=this.options;if(B(e)&&!e.trim()){let e=this._docs.map((e,t)=>({item:e,refIndex:t}));return et(n)&&n>-1&&(e=e.slice(0,n)),e}let c=et(n)&&n>0&&B(e),l;if(c){let t=new qt(n);B(this._docs[0])?this._searchStringList(e,{heap:t,ignoreFieldNorm:s}):this._searchObjectList(e,{heap:t,ignoreFieldNorm:s}),l=t.extractSorted(o)}else l=B(e)?B(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e),Kt(l,{ignoreFieldNorm:s}),a&&l.sort(o),et(n)&&n>-1&&(l=l.slice(0,n));return Yt(l,this._docs,{includeMatches:r,includeScore:i})}_searchStringList(e,{heap:t,ignoreFieldNorm:n}={}){let r=this._getSearcher(e),i=this.options.useTokenSearch&&this.options.tokenMatch===`all`,{records:a}=this._myIndex,o=t?null:[];return a.forEach(({v:e,i:a,n:s})=>{if(!V(e))return;let c=r.searchIn(e);if(c.isMatch){let r={score:c.score,value:e,norm:s,indices:c.indices};i&&(r.matchedMask=c.matchedMask,r.matchedTerms=c.matchedTerms,r.termCount=c.termCount);let l=[r];if(!i||this._coversAllTokens(l)){let r={item:e,idx:a,matches:l};t?(r.score=Gt(r.matches,{ignoreFieldNorm:n}),t.shouldInsert(r.score)&&t.insert(r)):o.push(r)}}}),o}_searchLogical(e){let t=Wt(e,this.options),n=(e,t,r)=>{if(!(`children`in e)){let{keyId:n,searcher:i}=e,a;return n===null?(a=[],this._myIndex.keys.forEach((e,n)=>{a.push(...this._findMatches({key:e,value:t[n],searcher:i}))})):a=this._findMatches({key:this._keyStore.get(n),value:this._myIndex.getValueForItemAtKeyId(t,n),searcher:i}),a&&a.length?[{idx:r,item:t,matches:a}]:[]}let{children:i,operator:a}=e,o=[];for(let e=0,s=i.length;e<s;e+=1){let s=i[e],c=n(s,t,r);if(c.length)o.push(...c);else if(a===Rt.AND)return[]}return o},r=this._myIndex.records,i=new Map,a=[];return r.forEach(({$:e,i:r})=>{if(V(e)){let o=n(t,e,r);o.length&&(i.has(r)||(i.set(r,{idx:r,item:e,matches:[]}),a.push(i.get(r))),o.forEach(({matches:e})=>{i.get(r).matches.push(...e)}))}}),a}_searchObjectList(e,{heap:t,ignoreFieldNorm:n}={}){let r=this._getSearcher(e),i=this.options.useTokenSearch&&this.options.tokenMatch===`all`,{keys:a,records:o}=this._myIndex,s=t?null:[];return o.forEach(({$:e,i:o})=>{if(!V(e))return;let c=[],l=!1,u=!1;if(a.forEach((t,n)=>{let i=this._findMatches({key:t,value:e[n],searcher:r});i.length?(c.push(...i),i[0].hasInverse&&(u=!0)):l=!0}),!(u&&l)&&c.length&&(!i||this._coversAllTokens(c))){let r={idx:o,item:e,matches:c};t?(r.score=Gt(r.matches,{ignoreFieldNorm:n}),t.shouldInsert(r.score)&&t.insert(r)):s.push(r)}}),s}_findMatches({key:e,value:t,searcher:n}){if(!V(t))return[];let r=[];if(z(t))t.forEach(({v:t,i,n:a})=>{if(!V(t))return;let o=n.searchIn(t);if(o.isMatch){let n={score:o.score,key:e,value:t,idx:i,norm:a,indices:o.indices,hasInverse:o.hasInverse};o.termCount!==void 0&&(n.matchedMask=o.matchedMask,n.matchedTerms=o.matchedTerms,n.termCount=o.termCount),r.push(n)}});else{let{v:i,n:a}=t,o=n.searchIn(i);if(o.isMatch){let t={score:o.score,key:e,value:i,norm:a,indices:o.indices,hasInverse:o.hasInverse};o.termCount!==void 0&&(t.matchedMask=o.matchedMask,t.matchedTerms=o.matchedTerms,t.termCount=o.termCount),r.push(t)}}return r}_coversAllTokens(e){let t=e.length?e[0].termCount:void 0;if(t===void 0)return!0;if(t<=31){let n=0;for(let t=0;t<e.length;t++)n|=e[t].matchedMask||0;return n===2**t-1}let n=new Set;for(let t=0;t<e.length;t++){let r=e[t].matchedTerms;if(r)for(let e of r)n.add(e)}return n.size===t}};ln.version=`7.4.2`,ln.createIndex=_t,ln.parseIndex=vt,ln.config=X,ln.match=function(e,t,n){if(n&&n.useTokenSearch)throw Error(q);return Lt(e,{...X,...n}).searchIn(t)},ln.parseQuery=Wt,It(Pt),It(tn),ln.use=function(...e){e.forEach(e=>It(e))};var un=ln;function dn(e,t){return t.length===0?!0:e===`edited`?t.includes(`changed`):e===`new`&&t.includes(`new`)}function fn(e){return JSON.stringify(e.map(e=>e.id).sort())}function pn(e){return e.requestStatus===`idle`||e.requestedAssetSetKey!==e.assetSetKey||e.requestedRefreshRevision!==e.refreshRevision}function mn(e,t){return t===`all`||e===`unused`}function hn(e){return Number(e.view===`duplicates`)+Number(e.type.length>0)+Number(e.manifest.length>0)+Number(e.changes.length>0)+Number(e.usageAvailable&&e.usage!==`all`)+Number(e.warningsOnly)}function gn(e,t=!1){return t||e.defaultPrevented||e.isComposing||e.altKey||!e.metaKey&&!e.ctrlKey||e.key.toLowerCase()!==`a`?null:e.shiftKey?`deselect-all`:`select-all`}function _n(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map;for(let r of e){if(r.proxy===null){n.set(r.id,null);continue}let e=0,i=new Set([r.id]),a=[r];for(let n of a){e+=n.proxy?.fileSize??0;for(let e of n.references.outgoing){if(i.has(e.assetId))continue;i.add(e.assetId);let n=t.get(e.assetId);n&&a.push(n)}}n.set(r.id,e)}return n}var vn=new Set([`id`,`folder`,`type`,`source`,`size`,`gitStatus`,`warnings`]),yn={column:`id`,direction:`asc`};function bn(e,t){return e.column===t?{column:t,direction:e.direction===`asc`?`desc`:`asc`}:{column:t,direction:`asc`}}function $(e){return e.warnings.length+ +(e.duplicateIds.length>0)}function xn(e){return e===`new`?0:e===`edited`?1:2}function Sn(e){let t=Ie(e);return t===`file`?0:t===`figma-link`?1:2}function Cn(e,t,n){switch(n){case`id`:return e.id.localeCompare(t.id);case`folder`:return e.folder.localeCompare(t.folder);case`type`:return e.type.localeCompare(t.type);case`source`:return Sn(e)-Sn(t);case`gitStatus`:return xn(e.gitStatus)-xn(t.gitStatus);case`warnings`:return $(e)-$(t)}}function wn(e,t,n){let r=t.direction===`asc`?1:-1,i=(e,t)=>e.id.localeCompare(t.id);return[...e].sort((e,a)=>{if(t.column===`size`){let t=n.get(e.id)??null,o=n.get(a.id)??null;if(t===null||o===null)return t===null?o===null?i(e,a):1:-1;let s=(t-o)*r;return s===0?i(e,a):s}let o=Cn(e,a,t.column)*r;return o===0?i(e,a):o})}var Tn=`fundus-library-view-mode`,En=`fundus-library-table-sort`,Dn=`fundus-library-table-preview-height`;function On(e){return e===`card`||e===`table`?e:`card`}function kn(e){let t=e?.split(`:`)??[];if(t.length!==2)return{...yn};let[n,r]=t;return!vn.has(n)||r!==`asc`&&r!==`desc`?{...yn}:{column:n,direction:r}}function An(e){return`${e.column}:${e.direction}`}function jn(e){let t=Number.parseInt(e??``,10);return Number.isFinite(t)?Math.min(96,Math.max(24,t)):24}function Mn(e,t,n,r){if(!e.dataTransfer||n<2||t.length<2)return;let i=document.createElement(`div`),a=44/(t.length-1),o=Math.min(180,Math.max(r,t[0].offsetWidth)),s=t[0].offsetHeight;Object.assign(i.style,{position:`fixed`,left:`-10000px`,top:`-10000px`,width:`${o+44}px`,height:`${s+44}px`,pointerEvents:`none`});for(let[e,n]of t.entries()){let t=n.cloneNode(!0);t.querySelector(`.asset-select`)?.remove(),t.removeAttribute(`href`),t.setAttribute(`aria-hidden`,`true`),Object.assign(t.style,{position:`absolute`,left:`${e*a}px`,top:`${e*a}px`,width:`${o}px`,height:`${s}px`,boxSizing:`border-box`,opacity:`1`}),i.append(t)}let c=document.createElement(`span`);c.textContent=String(n),Object.assign(c.style,{position:`absolute`,right:`0`,top:`0`,minWidth:`28px`,height:`28px`,padding:`0 7px`,boxSizing:`border-box`,borderRadius:`14px`,background:`var(--accent)`,color:`var(--text)`,font:`600 13px/28px system-ui, sans-serif`,textAlign:`center`,boxShadow:`0 2px 8px rgba(0, 0, 0, 0.35)`}),i.append(c),document.body.append(i),e.dataTransfer.setDragImage(i,24,24),requestAnimationFrame(()=>i.remove())}var Nn=(e,t)=>e.id.localeCompare(t.id);function Pn(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map(e.map(e=>[e.id,new Set(e.duplicateIds)])),r=new Set(t.keys()),i=[];for(let a of[...e].sort(Nn)){if(!r.delete(a.id))continue;let e=[],o=[a];for(;o.length>0;){let i=o.pop();if(i){e.push(i);for(let e of n.get(i.id)??[]){let a=t.get(e);!a||!n.get(e)?.has(i.id)||!r.delete(e)||o.push(a)}}}i.push(e.sort(Nn))}return i}function Fn(e,t){let n=t.trim();if(n===``)return e;let r=e.findIndex(e=>e.id===n);return r<=0?e:[e[r],...e.slice(0,r),...e.slice(r+1)]}function In(e,t){let n=t.trim();if(n===``)return e;let r=[],i=[];for(let t of e)t.assets.some(e=>e.id===n)?r.push({...t,assets:Fn(t.assets,n)}):i.push(t);return[...r,...i]}var Ln=u(`<button role="menuitem" class="svelte-109nkvw">Rename</button>`),Rn=u(`<button role="menuitem" class="svelte-109nkvw">Refresh</button>`),zn=u(`<div class="context-menu svelte-109nkvw" role="menu" aria-label="Asset actions" tabindex="-1"><!> <!> <!> <button class="danger svelte-109nkvw" role="menuitem"> </button> <hr class="svelte-109nkvw"/> <!></div>`);function Bn(n,r){F(r,!0);let i=P(()=>Math.max(8,Math.min(r.x,window.innerWidth-176))),o=P(()=>r.assetCount===1&&r.copyOptions.length>0),c=P(()=>2+ +!!g(o)+ +!!r.onRename+ +!!r.onRefresh),l=P(()=>Math.max(8,Math.min(r.y,window.innerHeight-(g(c)*32+17)))),u=/Mac|iPhone|iPad/.test(navigator.platform)?`Open in Finder`:/Win/.test(navigator.platform)?`Open in Explorer`:`Open in File Manager`;function d(e){e(),r.onClose()}var p=zn();L(`click`,v,function(...e){r.onClose?.apply(this,e)}),L(`blur`,v,function(...e){r.onClose?.apply(this,e)}),L(`keydown`,v,e=>e.key===`Escape`&&r.onClose()),L(`resize`,v,function(...e){r.onClose?.apply(this,e)}),L(`scroll`,v,function(...e){r.onClose?.apply(this,e)});let m;var h=y(p),_=e=>{{let t=P(()=>[r.copyOptions.slice(0,1).map(e=>({label:e,value:e})),r.copyOptions.slice(1).map(e=>({label:e,value:e}))]);Ve(e,{label:`Copy Asset ID`,get sections(){return g(t)},alwaysSubmenu:!0,onSelect:e=>d(()=>r.onCopy(e))})}};t(h,e=>{g(o)&&e(_)});var b=e(h,2),x=e=>{var t=Ln();f(`click`,t,()=>d(r.onRename)),s(e,t)};t(b,e=>{r.onRename&&e(x)});var S=e(b,2),w=e=>{var t=Rn();f(`click`,t,()=>d(r.onRefresh)),s(e,t)};t(S,e=>{r.onRefresh&&e(w)});var T=e(S,2),E=y(T,!0);C(T);var D=e(T,4);{let e=P(()=>[[{label:`Raw`,value:`raw`},{label:`Proxy`,value:`proxy`,disabled:!r.hasProxy,title:r.hasProxy?void 0:`No proxy is available for this asset.`}]]);Ve(D,{get label(){return u},get sections(){return g(e)},alwaysSubmenu:!0,onSelect:e=>d(()=>r.onReveal(e))})}C(p),a(()=>{m=oe(p,``,m,{left:`${g(i)}px`,top:`${g(l)}px`}),O(E,r.assetCount===1?`Delete Asset`:`Delete ${r.assetCount} Assets`)}),f(`contextmenu`,p,e=>e.preventDefault()),f(`click`,T,()=>d(r.onDelete)),s(n,p),A()}o([`contextmenu`,`click`]);var Vn=u(`<div class="backdrop svelte-10soaow" role="presentation"><div class="dialog svelte-10soaow" role="dialog" aria-modal="true" tabindex="-1"><h2 class="svelte-10soaow"> </h2> <p role="status" aria-live="polite" class="svelte-10soaow"> </p> <div class="progress svelte-10soaow" role="progressbar" aria-valuemin="0"><span class="svelte-10soaow"></span></div></div></div>`);function Hn(t,n){F(n,!0);let r,i=P(()=>Math.max(1,n.max)),o=P(()=>Math.min(g(i),Math.max(0,n.value))),c=P(()=>g(o)/g(i)*100);N(()=>r.focus());var l=Vn(),u=y(l),d=y(u),p=y(d,!0);C(d);var m=e(d,2),h=y(m,!0);C(m);var _=e(m,2),v=y(_);let b;C(_),C(u),ne(u,e=>r=e,()=>r),C(l),a(()=>{j(u,`aria-label`,n.title),O(p,n.title),O(h,n.message),j(_,`aria-valuemax`,g(i)),j(_,`aria-valuenow`,g(o)),b=oe(v,``,b,{width:`${g(c)}%`})}),f(`keydown`,u,e=>{e.preventDefault(),e.stopPropagation()}),s(t,l),A()}o([`keydown`]);var Un=u(`<span class="emoji svelte-1b4m5oj"> </span>`),Wn=u(`<span><!> <span class="name svelte-1b4m5oj"> </span></span>`);function Gn(n,r){F(r,!0);let i=b(r,`variant`,3,`chip`),o=b(r,`passive`,3,!1),c=b(r,`via`,19,()=>[]),l=P(()=>R.manifestAppearance(r.name)),u=P(()=>g(l).color??`var(--accent)`),d=P(()=>o()?`${r.name} — passive member${c().length>0?`, via ${c().join(`, `)}`:``}`:r.name);var f=Wn();let p;var m=y(f),h=e=>{var t=Un(),n=y(t,!0);C(t),a(()=>O(n,g(l).emoji)),s(e,t)};t(m,e=>{g(l).emoji&&e(h)});var _=e(m,2),v=y(_,!0);C(_),C(f),a(()=>{p=x(f,1,`manifest-label ${i()??``}`,`svelte-1b4m5oj`,p,{passive:o()}),oe(f,`--manifest-color: ${g(u)??``}`),j(f,`title`,g(d)),O(v,r.name)}),s(n,f),A()}function Kn(e){return[e.id,...e.manifests.map(t=>`${t}.${e.id}`)]}async function qn(e,t,n){let r=[...new Set(e)],i=[];for(let[e,a]of r.entries()){n(a,e+1,r.length);try{await t(a)}catch(e){i.push({assetId:a,message:e instanceof Error?e.message:String(e)})}}return{assetCount:r.length,failures:i}}var Jn=u(`<!>`,1),Yn=u(`<div><span class="icon-slot svelte-dr99ka"><!></span> <select class="svelte-dr99ka"><!></select></div>`);function Xn(t,n){F(n,!0);let r=b(n,`value`,15),i=b(n,`active`,3,!1);var o=Yn();let c;var l=y(o);qe(y(l),{get name(){return n.icon},size:14}),C(l);var u=e(l,2);re(u,()=>{var e=y(u),t=Jn();m(d(t),()=>n.children),s(e,t)}),C(o),a(()=>{c=x(o,1,`browse-select control svelte-dr99ka`,null,c,{"filter-active":i()}),j(l,`title`,n.label),j(u,`aria-label`,n.label)}),f(`change`,u,()=>n.onChange?.(r())),D(u,r),s(t,o),A()}o([`change`]);var Zn=u(`<span class="selected-count svelte-1yxb8yh"> </span>`),Qn=u(`<button type="button" aria-haspopup="dialog"><span class="icon-slot svelte-1yxb8yh"><!></span> <span class="summary svelte-1yxb8yh"> </span> <!> <!></button>`),$n=u(`<label><input type="checkbox" class="svelte-1yxb8yh"/> <span class="svelte-1yxb8yh"> </span></label>`),er=u(`<div class="multi-select-menu svelte-1yxb8yh"><div class="menu-header svelte-1yxb8yh"><span> </span> <button type="button" class="svelte-1yxb8yh">Clear</button></div> <div class="options svelte-1yxb8yh" role="group"></div></div>`);function tr(r,i){F(i,!0);let o=k(!1),c=null,l=!1,u=new Set,d=!1,m,h=P(()=>i.selected.length===0?i.allLabel:i.selected.length===1?i.options.find(e=>e.value===i.selected[0])?.label??i.selected[0]:`${i.selected.length} selected`);function _(e){let t=i.selected.includes(e)?i.selected.filter(t=>t!==e):[...i.selected,e];i.onChange?.(i.options.filter(e=>t.includes(e.value)).map(e=>e.value))}function b(e){u.has(e)!==l&&(l?u.add(e):u.delete(e),i.onChange?.(i.options.filter(e=>u.has(e.value)).map(e=>e.value)))}function S(e,t){!e.isPrimary||e.button!==0||(e.preventDefault(),m&&clearTimeout(m),c=e.pointerId,l=!i.selected.includes(t),u=new Set(i.selected),d=!0,b(t))}function w(e,t){e.pointerId===c&&b(t)}function E(e){e.pointerId===c&&(c=null,m=setTimeout(()=>{d=!1},0))}function D(e){d&&(e.preventDefault(),d=!1,m&&clearTimeout(m))}function ee(e,t){let n=t.target?.closest(`[data-option-value]`);return n&&e.contains(n)?n.dataset.optionValue:void 0}function M(e){function t(t){let n=ee(e,t);n!==void 0&&S(t,n)}function n(t){let n=ee(e,t);n!==void 0&&w(t,n)}return e.addEventListener(`pointerdown`,t),e.addEventListener(`pointerover`,n),e.addEventListener(`click`,D),{destroy(){e.removeEventListener(`pointerdown`,t),e.removeEventListener(`pointerover`,n),e.removeEventListener(`click`,D)}}}L(`pointerup`,v,E),L(`pointercancel`,v,E),Ze(r,{get label(){return i.label},get open(){return g(o)},set open(e){I(o,e,!0)},trigger:(n,r)=>{let o=()=>(r?.()).toggle,c=()=>(r?.()).open;var l=Qn();let u;var d=y(l);qe(y(d),{get name(){return i.icon},size:14}),C(d);var p=e(d,2),m=y(p,!0);C(p);var _=e(p,2),v=e=>{var t=Zn(),n=y(t,!0);C(t),a(()=>{j(t,`aria-label`,`${i.selected.length} selected`),O(n,i.selected.length)}),s(e,t)};t(_,e=>{i.selected.length>1&&e(v)}),qe(e(_,2),{name:`chevron-down`,size:12}),C(l),a(()=>{u=x(l,1,`multi-select-trigger control svelte-1yxb8yh`,null,u,{"filter-active":i.selected.length>0}),j(l,`aria-expanded`,c()),j(d,`title`,i.label),O(m,g(h))}),f(`click`,l,function(...e){o()?.apply(this,e)}),s(n,l)},children:(t,r)=>{var o=er(),c=y(o),l=y(c),u=y(l,!0);C(l);var d=e(l,2);C(c);var m=e(c,2);n(m,21,()=>i.options,e=>e.value,(t,n)=>{var r=$n();let o;var c=y(r);T(c);var l=e(c,2),u=y(l,!0);C(l),C(r),a((e,t)=>{j(r,`data-option-value`,g(n).value),o=x(r,1,`svelte-1yxb8yh`,null,o,e),te(c,t),O(u,g(n).label)},[()=>({selected:i.selected.includes(g(n).value)}),()=>i.selected.includes(g(n).value)]),f(`change`,c,()=>_(g(n).value)),s(t,r)}),C(m),p(m,e=>M?.(e)),C(o),a(()=>{O(u,i.label),d.disabled=i.selected.length===0,j(m,`aria-label`,i.label)}),f(`click`,d,()=>i.onChange?.([])),s(t,o)},$$slots:{trigger:!0,default:!0}}),A()}o([`click`,`change`]);var nr=u(`<label><span class="icon-slot svelte-sa6meb"><input type="checkbox" class="svelte-sa6meb"/></span> <span class="value svelte-sa6meb"> </span></label>`);function rr(t,n){F(n,!0);let r=b(n,`checked`,15,!1);var i=nr();let o;var c=y(i),l=y(c);T(l),C(c);var u=e(c,2),d=y(u,!0);C(u),C(i),a(()=>{o=x(i,1,`browse-checkbox svelte-sa6meb`,null,o,{"filter-active":r()}),j(l,`aria-label`,n.label),O(d,n.text)}),f(`change`,l,e=>n.onChange?.(e)),S(l,r),s(t,i),A()}o([`change`]);var ir=u(`<th class="svelte-xqfdxl"><button type="button" class="th-sort svelte-xqfdxl"><span> </span> <svg class="sort-arrows svelte-xqfdxl" viewBox="0 0 8 12" aria-hidden="true"><path d="M4 0.5 7.2 4.5H0.8Z"></path><path d="M4 11.5 0.8 7.5h6.4Z"></path></svg></button></th>`),ar=u(`<span class="badge warning svelte-xqfdxl"> </span>`),or=u(`<span class="badge duplicate svelte-xqfdxl"> </span>`),sr=u(`<tr draggable="true"><td class="col-select svelte-xqfdxl"><input type="checkbox" class="svelte-xqfdxl"/></td><td class="col-preview svelte-xqfdxl"><div class="row-thumb checkerboard svelte-xqfdxl"><!></div></td><td class="col-id svelte-xqfdxl"><a class="svelte-xqfdxl"> </a></td><td class="col-folder svelte-xqfdxl"> </td><td class="svelte-xqfdxl"><span class="type-badge svelte-xqfdxl"> </span></td><td class="col-source svelte-xqfdxl"> </td><td class="col-size svelte-xqfdxl"> </td><td class="col-manifests svelte-xqfdxl"><!> <!></td><td class="col-git svelte-xqfdxl"><!></td><td class="col-warnings svelte-xqfdxl"><!> <!></td></tr>`),cr=u(`<table class="library-table svelte-xqfdxl"><thead class="svelte-xqfdxl"><tr><th class="col-select svelte-xqfdxl"><input type="checkbox" aria-label="Select all displayed assets" class="svelte-xqfdxl"/></th><th class="svelte-xqfdxl">Preview</th><!><!><!><!><!><th class="svelte-xqfdxl">Manifests</th><!><!></tr></thead><tbody class="svelte-xqfdxl"></tbody></table>`);function lr(r,i){F(i,!0);let o=(t,n=E,r=E)=>{var o=ir(),c=y(o),l=y(c),u=y(l,!0);C(l);var d=e(l,2),p=y(d);let m;var h=e(p);let g;C(d),C(c),C(o),a(()=>{j(o,`aria-sort`,i.sort.column===n()?i.sort.direction===`asc`?`ascending`:`descending`:void 0),O(u,r()),m=x(p,0,`svelte-xqfdxl`,null,m,{active:i.sort.column===n()&&i.sort.direction===`asc`}),g=x(h,0,`svelte-xqfdxl`,null,g,{active:i.sort.column===n()&&i.sort.direction===`desc`})}),f(`click`,c,()=>i.onSort(n())),s(t,o)},l={file:`File`,"figma-link":`Figma Link`,"figma-tag":`Figma Tag`},u=P(()=>new Set(i.selectedAssetIds)),p=P(()=>i.assets.length>0&&i.assets.every(e=>g(u).has(e.id))),m=P(()=>i.assets.some(e=>g(u).has(e.id)));function h(e,t){let n=e.target;n instanceof Element&&n.closest(`a, input, button`)!==null||(i.selectedAssetIds.length>0||e.metaKey||e.ctrlKey||e.shiftKey?i.onToggleSelection(t,e.shiftKey):i.onOpen(t))}var _=cr(),v=y(_),b=y(v),S=y(b),w=y(S);T(w),C(S);var D=e(S,2);o(D,()=>`id`,()=>`Asset ID`);var ee=e(D);o(ee,()=>`folder`,()=>`Path`);var k=e(ee);o(k,()=>`type`,()=>`Type`);var M=e(k);o(M,()=>`source`,()=>`Source`);var N=e(M);o(N,()=>`size`,()=>`Size`);var ne=e(N,2);o(ne,()=>`gitStatus`,()=>`Git status`),o(e(ne),()=>`warnings`,()=>`Warnings`),C(b),C(v);var I=e(v);n(I,21,()=>i.assets,e=>e.id,(r,o)=>{let p=P(()=>je[g(o).type]?.thumbnail),m=P(()=>i.sizesByAssetId.get(g(o).id));var _=sr();let v;var b=y(_),S=y(b);T(S),C(b);var w=e(b),E=y(w),D=y(E),ee=e=>{var t=c();ae(d(t),()=>g(p),(e,t)=>{t(e,{get asset(){return g(o)}})}),s(e,t)};t(D,e=>{g(p)&&e(ee)}),C(E),C(w);var k=e(w),A=y(k),M=y(A,!0);C(A),C(k);var N=e(k),ne=y(N,!0);C(N);var F=e(N),I=y(F),re=y(I,!0);C(I),C(F);var ie=e(F),oe=y(ie,!0);C(ie);var se=e(ie),ce=y(se,!0);C(se);var le=e(se),ue=y(le);n(ue,16,()=>g(o).manifests,e=>e,(e,t)=>{Gn(e,{get name(){return t}})}),n(e(ue,2),17,()=>g(o).passiveManifests,e=>e.manifest,(e,t)=>{Gn(e,{get name(){return g(t).manifest},passive:!0,get via(){return g(t).via}})}),C(le);var de=e(le),fe=y(de),pe=e=>{{let t=P(()=>`${g(o).gitStatus===`new`?`New`:`Edited`} on ${i.gitBranch??`the current Git branch`}`);Je(e,{get kind(){return g(o).gitStatus},get title(){return g(t)}})}};t(fe,e=>{g(o).gitStatus&&e(pe)}),C(de);var me=e(de),he=y(me),ge=e=>{var t=ar(),n=y(t);C(t),a(e=>{j(t,`title`,e),O(n,`⚠ ${g(o).warnings.length??``}`)},[()=>g(o).warnings.join(`
|
|
2
|
-
`)]),s(e,t)};t(he,e=>{g(o).warnings.length>0&&e(ge)});var _e=e(he,2),ve=e=>{var t=or(),n=y(t);C(t),a(e=>{j(t,`title`,e),O(n,`${g(o).duplicateIds.length??``} duplicate${g(o).duplicateIds.length===1?``:`s`}`)},[()=>`Potential duplicates: ${g(o).duplicateIds.join(`, `)}`]),s(e,t)};t(_e,e=>{g(o).duplicateIds.length>0&&e(ve)}),C(me),C(_),a((e,t,n,r,i)=>{v=x(_,1,`asset-row svelte-xqfdxl`,null,v,e),j(_,`data-asset-id`,g(o).id),te(S,t),j(S,`aria-label`,`Select ${g(o).id}`),j(E,`data-drag-thumb`,g(o).id),j(A,`href`,n),O(M,g(o).id),O(ne,g(o).folder===``?`/`:g(o).folder),O(re,g(o).type),O(oe,r),O(ce,i)},[()=>({selected:g(u).has(g(o).id)}),()=>g(u).has(g(o).id),()=>i.assetHref(g(o).id),()=>l[Ie(g(o))],()=>g(m)==null?`—`:Ye(g(m))]),f(`click`,_,e=>h(e,g(o).id)),f(`contextmenu`,_,e=>i.onRowContextMenu(e,g(o).id)),L(`dragstart`,_,e=>i.onRowDragStart(e,g(o).id)),f(`click`,S,e=>{e.stopPropagation(),i.onToggleSelection(g(o).id,e.shiftKey)}),f(`click`,A,e=>{(i.selectedAssetIds.length>0||e.metaKey||e.ctrlKey||e.shiftKey)&&(e.preventDefault(),i.onToggleSelection(g(o).id,e.shiftKey))}),s(r,_)}),C(I),C(_),a(()=>{oe(_,`--table-thumb-height: ${i.thumbnailHeight}px`),te(w,g(p)),w.indeterminate=g(m)&&!g(p)}),f(`change`,w,()=>i.onToggleAll(!g(p))),s(r,_),A()}o([`click`,`change`,`contextmenu`]);var ur=u(`<span class="selection-summary svelte-1uha8ag"> </span>`),dr=u(`<button class="control selection-action svelte-1uha8ag">Clear</button>`),fr=u(`<option>Sort alphabetically</option> <option>Sort by type</option> <option>Sort by manifest</option>`,1),pr=u(`<span class="filter-count svelte-1uha8ag"> </span>`),mr=u(`<button type="button" aria-haspopup="dialog"><!> <span>Filters</span> <!></button>`),hr=u(`<div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Unused</span> <!></div>`),gr=u(`<div class="filters-popover svelte-1uha8ag"><div class="popover-header svelte-1uha8ag"><strong class="svelte-1uha8ag">Filters</strong> <button type="button" class="clear-filters svelte-1uha8ag">Clear all</button></div> <div class="filter-grid svelte-1uha8ag"><div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Type</span> <!></div> <div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Manifest</span> <!></div> <div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Git status</span> <!></div></div> <div class="filter-grid filter-options-grid svelte-1uha8ag"><div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Duplicates</span> <!></div> <!> <div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Warnings</span> <!></div></div></div>`),_r=r(`<rect class="svelte-1uha8ag"></rect>`),vr=u(`<button type="button" class="control primary import-trigger svelte-1uha8ag" aria-haspopup="dialog"><!> <span>Import</span> <!></button>`),yr=u(`<div class="empty svelte-1uha8ag">Loading library…</div>`),br=u(`<div class="empty svelte-1uha8ag" role="status">Analyzing asset usage…</div>`),xr=u(`<div class="empty usage-error svelte-1uha8ag" role="alert"><span> </span> <button class="control">Retry</button></div>`),Sr=u(`<div class="empty svelte-1uha8ag"> </div>`),Cr=u(`<button draggable="true"><span class="folder-card-icon svelte-1uha8ag"><!></span> <span class="folder-card-details svelte-1uha8ag"><strong class="svelte-1uha8ag"> </strong> <span class="svelte-1uha8ag"> </span></span> <span class="folder-card-arrow svelte-1uha8ag">›</span></button>`),wr=u(`<section class="section folder-section svelte-1uha8ag"><!> <div class="folder-grid svelte-1uha8ag"></div></section>`),Tr=u(`<span class="section-emoji svelte-1uha8ag"> </span>`),Er=u(`<!> `,1),Dr=u(`<span class="badge warning svelte-1uha8ag">⚠</span>`),Or=u(`<a draggable="true"><!> <input class="asset-select svelte-1uha8ag" type="checkbox"/> <div class="thumbnail checkerboard svelte-1uha8ag"><!></div> <div class="meta svelte-1uha8ag"><span class="id svelte-1uha8ag"> </span> <span class="type-badge svelte-1uha8ag"> </span></div> <div class="badges svelte-1uha8ag"><!> <!> <!></div></a>`),kr=u(`<section class="section svelte-1uha8ag"><!> <div class="grid svelte-1uha8ag"></div></section>`),Ar=u(`<!> <!>`,1),jr=u(`<div class="drop-hint svelte-1uha8ag"> </div>`),Mr=u(`<p class="dialog-warning svelte-1uha8ag"> </p>`),Nr=u(`<p class="dialog-warning svelte-1uha8ag">An asset with this ID already exists.</p>`),Pr=u(`<label class="dialog-row svelte-1uha8ag"><span class="svelte-1uha8ag">ID</span> <input class="control svelte-1uha8ag" spellcheck="false"/></label> <!> <!> <!> <!>`,1),Fr=u(`<p class="dialog-text svelte-1uha8ag"> </p> <!> <!>`,1),Ir=u(`<div class="library-view svelte-1uha8ag"><!> <div role="application" aria-label="Asset library — drop a file anywhere to import it"><div class="library-toolbar svelte-1uha8ag"><div class="selection-controls svelte-1uha8ag"><!> <button class="control selection-action svelte-1uha8ag">Select all</button> <!></div> <!> <!> <div><span class="search-icon-slot svelte-1uha8ag"><svg class="search-icon svelte-1uha8ag" viewBox="0 0 16 16" aria-hidden="true"><circle cx="7" cy="7" r="4.5"></circle><path d="m10.5 10.5 3 3"></path></svg></span> <input class="search-input svelte-1uha8ag" type="search" placeholder="Search assets and folders…" aria-label="Search assets and folders" spellcheck="false"/> <kbd class="svelte-1uha8ag"> </kbd></div> <div class="control view-toggle svelte-1uha8ag" role="group" aria-label="Library view"><button type="button" aria-label="Card view"><!></button> <button type="button" aria-label="Table view"><!></button></div> <label class="preview-size-control control svelte-1uha8ag"><svg class="preview-size-icon dense svelte-1uha8ag" viewBox="0 0 14 14" aria-hidden="true"></svg> <input class="preview-size-range svelte-1uha8ag" type="range" aria-label="Preview size"/> <svg class="preview-size-icon roomy svelte-1uha8ag" viewBox="0 0 14 14" aria-hidden="true"><rect x="0.75" y="0.75" width="5.25" height="5.25" class="svelte-1uha8ag"></rect><rect x="8" y="0.75" width="5.25" height="5.25" class="svelte-1uha8ag"></rect><rect x="0.75" y="8" width="5.25" height="5.25" class="svelte-1uha8ag"></rect><rect x="8" y="8" width="5.25" height="5.25" class="svelte-1uha8ag"></rect></svg></label> <!> <input type="file" hidden=""/></div> <!> <!></div></div> <!> <!> <!> <!> <!> <!> <!>`,1);function Lr(r,o){F(o,!0);let u=We(le.url),p=k(w(u.sort)),m=k(w(u.folder)),b=k(w(u.type)),S=k(w(u.manifest)),E=k(w(u.changes)),D=k(w(u.usage)),N=k(w({status:`idle`})),re=new Ge(e=>{I(N,e,!0)}),Ie=!1,Ve=null,Ye=-1,z=k(w(u.query)),Qe=k(w(u.warningsOnly)),$e=k(w(u.view)),B=k(!1),et=k(!1),tt=k(!1),nt=k(null),rt=k(null),V=k(``),H=k(null),U=k(null),W=k(null),G=k(``),it=k(void 0),K=k(w([])),at=k(null),ot=k(null),q=k(!1),J=k(null),st=0,ct=k(null),lt=0,ut=k(null),dt=0,ft=k(null),pt=0,Y=k(w([])),mt=k(null),X=k(null),ht=k(void 0),gt=k(void 0),_t=`fundus-library-preview-card-width`,vt=k(w(kt())),Z=k(w(At())),yt=k(w(jt())),bt=k(w(Mt())),xt=Se().join(`,`),St=/Mac|iPhone|iPad/.test(navigator.platform)?`⌘K`:`Ctrl K`,Ct=P(()=>g(Z)===`card`?64:24),wt=P(()=>g(Z)===`card`?368:96),Tt=P(()=>g(Z)===`card`?8:4),Et=P(()=>g(Z)===`card`?g(vt):g(bt)),Dt=P(()=>(g(Et)-g(Ct))/(g(wt)-g(Ct))*100),Ot=P(()=>hn({view:g($e),type:g(b),manifest:g(S),changes:g(E),usage:g(D),usageAvailable:R.usageAvailable===!0,warningsOnly:g(Qe)}));function kt(){try{let e=Number.parseInt(localStorage.getItem(_t)??``,10);return Number.isFinite(e)?Math.min(368,Math.max(64,e)):160}catch{return 160}}function At(){try{return On(localStorage.getItem(Tn))}catch{return On(null)}}function jt(){try{return kn(localStorage.getItem(En))}catch{return kn(null)}}function Mt(){try{return jn(localStorage.getItem(Dn))}catch{return jn(null)}}M(()=>{try{localStorage.setItem(_t,String(g(vt)))}catch{}}),M(()=>{try{localStorage.setItem(Tn,g(Z))}catch{}}),M(()=>{try{localStorage.setItem(En,An(g(yt)))}catch{}}),M(()=>{try{localStorage.setItem(Dn,String(g(bt)))}catch{}}),M(()=>{let e=We(le.url);_(()=>yn(e))});let Q=P(()=>R.state?.assets??[]),Nt=P(()=>g(W)!==null&&g(G)!==g(W)?be(g(G)):null),Pt=P(()=>g(W)!==null&&g(Q).some(e=>e.id!==g(W)&&e.id===g(G))),Ft=P(()=>g(W)!==null&&g(G)!==g(W)&&g(Nt)===null&&!g(Pt)&&!g(q)),It=P(()=>g(W)===null?[]:(g(Q).find(e=>e.id===g(W))?.references.incoming??[]).map(e=>`${e.assetId}.${e.field} → ${g(W)}`)),Lt=P(()=>new Set(g(K))),Rt=P(()=>g(K).flatMap(e=>(g(Q).find(t=>t.id===e)?.references.incoming??[]).filter(e=>!g(Lt).has(e.assetId)).map(t=>`${t.assetId}.${t.field} → ${e}`))),zt=P(()=>R.state?.library.folders??[]),Bt=P(()=>R.manifestNames),Vt=P(()=>[...new Set(g(Q).map(e=>e.type))].sort()),Ht=P(()=>g(Vt).map(e=>({value:e,label:e}))),Ut=P(()=>g(Bt).map(e=>{let t=R.manifestAppearance(e).emoji;return{value:e,label:t?`${t} ${e}`:e}})),Wt=[{value:`changed`,label:`Changed`},{value:`new`,label:`New`}],Gt=P(()=>g(z).trim()),Kt=P(()=>new un(g(Q),{keys:[{name:`id`,weight:.5},{name:`raw`,weight:.2},{name:`folder`,weight:.1},{name:`manifests`,weight:.08},{name:`passiveManifests.manifest`,weight:.07},{name:`type`,weight:.05}],threshold:.35,ignoreLocation:!0,ignoreDiacritics:!0})),qt=P(()=>g(Gt)===``?null:new Set(g(Kt).search(g(Gt)).map(({item:e})=>e.id))),Jt=P(()=>g(zt).map(e=>({path:e,name:me(e)}))),Yt=P(()=>new un(g(Jt),{keys:[{name:`name`,weight:.7},{name:`path`,weight:.3}],threshold:.35,ignoreLocation:!0,ignoreDiacritics:!0})),Xt=P(()=>g(Gt)===``?null:new Set(g(Yt).search(g(Gt)).map(({item:e})=>e.path))),Zt=P(()=>g(N).status===`resolved`||g(N).status===`refreshing`||g(N).status===`failed`&&g(N).value?new Map(g(N).value?.assets.map(e=>[e.assetId,e.status])):new Map),Qt=P(()=>fn(g(Q)));M(()=>{if(!(R.usageAvailable===!0&&g(D)===`unused`)){g(N).status!==`idle`&&re.cancel(),Ve=null,Ye=-1;return}let e=R.usageRefreshRevision;if(!R.saving&&pn({requestStatus:g(N).status,requestedAssetSetKey:Ve,assetSetKey:g(Qt),requestedRefreshRevision:Ye,refreshRevision:e})){let t=Ie;Ie=!0,Ve=g(Qt),Ye=e,re.run(()=>pe({forceFresh:t}),{retainResult:!0})}});let $t=P(()=>g(m)===null?[]:g(zt).filter(e=>fe(e)===g(m)).sort((e,t)=>e.localeCompare(t))),en=P(()=>g(Xt)===null?g($t):g($t).filter(e=>g(Xt).has(e)));M(()=>{R.state&&g(m)!==null&&g(m)!==``&&!g(zt).includes(g(m))&&vn(g(m))});let tn=P(()=>g(Q).filter(e=>!(g(m)!==null&&e.folder!==g(m)||g(qt)!==null&&!g(qt).has(e.id)||g(b).length>0&&!g(b).includes(e.type)||!dn(e.gitStatus,g(E))||R.usageAvailable===!0&&g(D)===`unused`&&!mn(g(Zt).get(e.id),g(D))||g(S).length>0&&!g(S).some(t=>e.manifests.includes(t)||e.passiveManifests.some(e=>e.manifest===t))||g(Qe)&&e.warnings.length===0||g($e)===`duplicates`&&e.duplicateIds.length===0))),nn=(e,t)=>e.id.localeCompare(t.id),rn=P(()=>{let e=[...g(tn)].sort(nn);if(g($e)===`duplicates`)return Pn(e).map(e=>{let t=e.map(e=>e.id);return{key:`duplicates:${t.join(`\0`)}`,heading:t.join(`, `),assets:e}});if(g(p)===`alphabetical`)return[{key:`all`,heading:null,assets:e}];if(g(p)===`type`)return[...new Set(e.map(e=>e.type))].sort().map(t=>({key:t,heading:t,assets:e.filter(e=>e.type===t)}));let t=[];for(let n of g(Bt)){let r=e.filter(e=>e.manifests.includes(n)||e.passiveManifests.some(e=>e.manifest===n));r.length>0&&t.push({key:n,heading:n,emoji:R.manifestAppearance(n).emoji,assets:r})}let n=e.filter(e=>e.manifests.length===0&&e.passiveManifests.length===0);return n.length>0&&t.push({key:`__no-manifest__`,heading:`No manifest`,assets:n}),t}),an=P(()=>In(g(rn),g(Gt))),on=P(()=>_n(g(Q))),sn=P(()=>g(Z)===`table`?Fn(wn(g(tn),g(yt),g(on)),g(Gt)):[]),cn=P(()=>g(Z)===`table`?g(sn).map(e=>e.id):[...new Set(g(an).flatMap(e=>e.assets.map(e=>e.id)))]);M(()=>{let e=new Set(g(Q).map(e=>e.id)),t=g(Y).filter(t=>e.has(t));t.length!==g(Y).length&&I(Y,t,!0)});function ln(){return{folder:g(m),sort:g(p),type:g(b),manifest:g(S),changes:g(E),usage:g(D),query:g(z),warningsOnly:g(Qe),view:g($e)}}async function vn(e){await h(),g(m)===e&&R.state&&!R.state.library.folders.includes(e)&&$({folder:null},!0)}function yn(e){let t=Ke(g(m),e.folder,{selectedAssetIds:g(Y),lastSelectedAssetId:g(X)});I(Y,t.selectedAssetIds,!0),I(X,t.lastSelectedAssetId,!0),I(m,e.folder,!0),I(p,e.sort,!0),I(b,e.type,!0),I(S,e.manifest,!0),I(E,e.changes,!0),I(D,e.usage,!0),I(z,e.query,!0),I(Qe,e.warningsOnly,!0),I($e,e.view,!0)}function $(e,t){let n={...ln(),...e};yn(n);let r=ke(le.url,n);r.href!==le.url.href&&ce(r,{replaceState:t,noScroll:!0,keepFocus:!0})}function xn(){$({view:`all`,type:[],manifest:[],changes:[],usage:`all`,warningsOnly:!1},!0)}function Sn(e,t=!1){ze.begin(),$({folder:e},t)}function Cn(e,t){if(t&&g(X)!==null){let t=g(cn).indexOf(g(X)),n=g(cn).indexOf(e);if(t!==-1&&n!==-1){let r=Math.min(t,n),i=Math.max(t,n);I(Y,[...new Set([...g(Y),...g(cn).slice(r,i+1)])],!0),I(X,e,!0);return}}I(Y,g(Y).includes(e)?g(Y).filter(t=>t!==e):[...g(Y),e],!0),I(X,e,!0)}function Nn(){I(Y,[...g(cn)],!0),I(X,g(cn).at(-1)??null,!0)}function Ln(){I(Y,[],!0),I(X,null)}function Rn(e,t){let n=[...document.querySelectorAll(`.card[data-asset-id]`)];Mn(e,t.map(e=>n.find(t=>t.dataset.assetId===e)).filter(e=>e!==void 0),t.length,0)}function zn(e,t){let n=g(Y).includes(t)?g(Y):[t];e.dataTransfer?.setData(`application/x-fundus-assets`,JSON.stringify(n)),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`),Mn(e,n.map(e=>document.querySelector(`[data-drag-thumb="${CSS.escape(e)}"]`)).filter(e=>e instanceof HTMLElement),n.length,120)}function Vn(e){e.preventDefault(),I(tt,!1);let t=e.dataTransfer?.files?.[0];t&&(I(V,g(m)??``,!0),I(nt,t,!0))}function Un(e){I(V,e,!0),g(ht)?.click()}function Wn(e){lt+=1,I(ct,{id:lt,parent:e},!0)}function Jn(e){dt+=1,I(ut,{id:dt,path:e},!0)}function Yn(e){pt+=1,I(ft,{id:pt,path:e},!0)}function Zn(e){e.preventDefault(),I(U,null),I(H,{x:e.clientX,y:e.clientY,parent:g(m)??``,renamePath:null},!0)}function Qn(e,t){e.preventDefault(),e.stopPropagation(),I(U,null),I(H,{x:e.clientX,y:e.clientY,parent:t,renamePath:t},!0)}function $n(e,t){e.preventDefault(),e.stopPropagation(),I(H,null);let n=g(Y).includes(t)?[...g(Y)]:[t];g(Y).includes(t)||(I(Y,[t],!0),I(X,t,!0)),I(U,{x:e.clientX,y:e.clientY,assetIds:n,targetAssetId:t},!0)}function er(e){let t=R.assetById(e);return t!==null&&Ne(t)}function nr(e){return Pe(e.map(e=>R.assetById(e)))}async function ir(e){if(!(g(mt)!==null||e.length===0))try{let t=await qn(e,e=>R.mutateFromServer(()=>Ee(e),{dependencies:[`asset:${e}`]}),(e,t,n)=>I(mt,{assetId:e,position:t,total:n},!0));if(t.failures.length===0)return;R.error=t.failures.length===1?`Could not refresh "${t.failures[0].assetId}": ${t.failures[0].message}`:`Could not refresh ${t.failures.length} of ${t.assetCount} assets: ${t.failures.map(({assetId:e,message:t})=>`${e}: ${t}`).join(`; `)}`}finally{I(mt,null)}}function ar(e){st+=1,I(W,e,!0),I(G,e,!0),I(J,null),h().then(()=>{g(it)?.focus(),g(it)?.select()})}function or(e){st+=1,I(K,[...new Set(e)],!0),I(J,null)}async function sr(e,t){try{await we(e,t),R.error=null}catch(e){R.error=e instanceof Error?e.message:String(e)}}function cr(e){let t=R.assetById(e);return t?Kn(t):[e]}async function Lr(e){try{await navigator.clipboard.writeText(e),R.error=null}catch(e){R.error=`Could not copy asset ID: ${e instanceof Error?e.message:String(e)}`}}async function Rr(e){try{await Te(e),R.error=null}catch(e){R.error=e instanceof Error?e.message:String(e)}}function zr(){g(q)||(st+=1,I(W,null),I(K,[],!0),I(J,null))}async function Br(){if(!g(Ft)||g(W)===null)return;let e=g(W),t=g(G);I(q,!0),I(J,null);let n=R.mutate(()=>ue(e,{renameTo:t}),ye(e,{renameTo:t}),{dependencies:[`asset:${e}`,`asset:${t}`],invalidatesOnFailure:[`asset:${e}`,`asset:${t}`]});I(Y,g(Y).map(n=>n===e?t:n),!0),I(X,g(X)===e?t:g(X),!0),I(W,null);let r=++st;I(q,!1);try{await n}catch(n){let i=R.assetById(e)!==null;i&&(I(Y,g(Y).map(n=>n===t?e:n),!0),I(X,g(X)===t?e:g(X),!0)),i&&st===r&&(I(W,e,!0),I(G,t,!0),I(J,n instanceof Error?n.message:String(n),!0))}finally{I(q,!1)}}async function Vr(){if(g(K).length===0)return;let e=[...g(K)],t=[...g(Y)],n=g(X);I(q,!0),I(J,null);let r=R.mutate(()=>ge(e),Ce(e),{dependencies:e.map(e=>`asset:${e}`),invalidatesOnFailure:e.map(e=>`asset:${e}`)}),i=new Set(e);I(Y,g(Y).filter(e=>!i.has(e)),!0),g(X)!==null&&i.has(g(X))&&I(X,null);let a=[...g(Y)],o=g(X);I(K,[],!0);let s=++st;I(q,!1);try{await r}catch(r){let i=new Set(e.filter(e=>R.assetById(e)));i.size>0&&g(Y).length===a.length&&g(Y).every((e,t)=>e===a[t])&&g(X)===o&&(I(Y,t.filter(e=>i.has(e)),!0),I(X,n!==null&&i.has(n)?n:null,!0)),i.size>0&&st===s&&(I(K,e.filter(e=>i.has(e)),!0),I(J,r instanceof Error?r.message:String(r),!0))}finally{I(q,!1)}}function Hr(e){return g(Q).filter(t=>t.folder===e).length}function Ur(e){let t=e.currentTarget,n=t.files?.[0];t.value=``,n&&I(nt,n,!0)}async function Wr(e){I(nt,null),I(rt,null),await ce(se(`/asset/[id]`,{id:e}))}async function Gr(e,t){let n=e.filter(e=>R.assetById(e)?.folder!==t);if(n.length===0)return;let r=[...new Set([t,...n.flatMap(e=>{let t=R.assetById(e)?.folder;return t===void 0?[]:[t]})])],i=[...g(Y)],a=g(X),o=R.mutate(()=>_e(n,t),xe(n,t),{dependencies:[...n.map(e=>`asset:${e}`),...r.map(e=>`folder:${e}`)]});I(Y,[],!0),I(X,null);try{await o}catch{n.some(e=>R.assetById(e)?.folder!==t)&&g(Y).length===0&&g(X)===null&&(I(Y,i,!0),I(X,a,!0))}}function Kr(e,t){let n=e.dataTransfer?.types.includes(`application/x-fundus-assets`)??!1,r=Oe(e.dataTransfer?.types.includes(`application/x-fundus-folder`)??!1,g(at),t,g(zt));!n&&!r||(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),I(ot,t,!0))}function qr(e,t){e.preventDefault(),I(ot,null);let n=e.dataTransfer?.getData(`application/x-fundus-assets`);if(n){try{let e=JSON.parse(n);Array.isArray(e)&&e.every(e=>typeof e==`string`)&&Gr(e,t)}catch{}return}let r=e.dataTransfer?.getData(`application/x-fundus-folder`);r&&Re(r,t,g(zt))&&Jr(r,t)}async function Jr(e,t){let n=de(t,me(e)),r=g(m),i=r,a=R.mutate(()=>ve(e,t),De(e,t),{dependencies:[`folder:${e}`,`folder:${t}`,`folder:${n}`],invalidatesOnFailure:[`folder:${e}`,`folder:${n}`]});g(m)!==null&&he(g(m),e)&&(i=`${n}${g(m).slice(e.length)}`,Sn(i,!0));try{await a}catch{g(m)===i&&g(zt).some(t=>he(t,e))&&Sn(r,!0)}finally{I(at,null),I(ot,null)}}function Yr(e){e&&e.play().catch(()=>{})}function Xr(e){e&&(e.pause(),e.currentTime=0)}function Zr(e){e.defaultPrevented||e.altKey||e.shiftKey||!e.metaKey&&!e.ctrlKey||e.key.toLowerCase()!==`k`||document.querySelector(`[role="dialog"]`)!==null||(e.preventDefault(),g(gt)?.focus(),g(gt)?.select())}function Qr(e){Zr(e);let t=e.target,n=gn(e,t instanceof Element&&t.closest(`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="menu"]`)!==null||document.querySelector(`[role="dialog"]`)!==null);n!==null&&(e.preventDefault(),n===`select-all`?Nn():Ln())}var $r=Ir();L(`keydown`,v,Qr),L(`dragenter`,v,e=>{e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),I(tt,!0))}),L(`dragover`,v,e=>{e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),I(tt,!0))}),L(`drop`,v,Vn);var ei=d($r),ti=y(ei);Be(ti,{get selectedFolder(){return g(m)},get createRequest(){return g(ct)},get renameRequest(){return g(ut)},get deleteRequest(){return g(ft)},onSelect:Sn,onMoveAssets:(e,t)=>void Gr(e,t),get sharedDraggedFolder(){return g(at)},onFolderDragStart:e=>I(at,e,!0),onFolderDragEnd:()=>I(at,null),onContextMenu:(e,t,n,r)=>{I(U,null),I(H,{x:e,y:t,parent:n,renamePath:r},!0)}});var ni=e(ti,2);let ri;var ii=y(ni),ai=y(ii),oi=y(ai),si=e=>{var t=ur(),n=y(t);C(t),a(()=>O(n,`${g(Y).length??``} selected`)),s(e,t)};t(oi,e=>{g(Y).length>0&&e(si)});var ci=e(oi,2),li=e(ci,2),ui=e=>{var t=dr();f(`click`,t,Ln),s(e,t)};t(li,e=>{g(Y).length>0&&e(ui)}),C(ai);var di=e(ai,2),fi=t=>{Xn(t,{label:`Sort`,icon:`sort`,onChange:e=>$({sort:e},!0),get value(){return g(p)},set value(e){I(p,e,!0)},children:(t,n)=>{var r=fr(),i=d(r);i.value=i.__value=`alphabetical`;var a=e(i,2);a.value=a.__value=`type`;var o=e(a,2);o.value=o.__value=`manifest`,s(t,r)},$$slots:{default:!0}})};t(di,e=>{g(Z)===`card`&&e(fi)});var pi=e(di,2);Ze(pi,{portal:!0,surface:`panel`,label:`Filter assets`,get open(){return g(B)},set open(e){I(B,e,!0)},trigger:(n,r)=>{let i=()=>(r?.()).toggle,o=()=>(r?.()).open;var c=mr();let l;var u=y(c);qe(u,{name:`list-filter`,size:14});var d=e(u,4),p=e=>{var t=pr(),n=y(t,!0);C(t),a(()=>O(n,g(Ot))),s(e,t)};t(d,e=>{g(Ot)>0&&e(p)}),C(c),a(()=>{l=x(c,1,`control toolbar-button svelte-1uha8ag`,null,l,{active:g(Ot)>0}),j(c,`aria-expanded`,o())}),f(`click`,c,function(...e){i()?.apply(this,e)}),s(n,c)},children:(n,r)=>{var i=gr(),o=y(i),c=e(y(o),2);C(o);var l=e(o,2),u=y(l);tr(e(y(u),2),{label:`Filter by type`,icon:`asset-type`,allLabel:`All types`,get options(){return g(Ht)},get selected(){return g(b)},onChange:e=>$({type:e},!0)}),C(u);var d=e(u,2);tr(e(y(d),2),{label:`Filter by manifest`,icon:`manifest`,allLabel:`All manifests`,get options(){return g(Ut)},get selected(){return g(S)},onChange:e=>$({manifest:e},!0)}),C(d);var p=e(d,2);tr(e(y(p),2),{label:`Filter by Git status`,icon:`git-branch`,allLabel:`Any status`,get options(){return Wt},get selected(){return g(E)},onChange:e=>$({changes:e},!0)}),C(p),C(l);var m=e(l,2),h=y(m),_=e(y(h),2);{let e=P(()=>g($e)===`duplicates`);rr(_,{label:`Show duplicates only`,text:`Potential matches`,get checked(){return g(e)},onChange:e=>$({view:e.currentTarget.checked?`duplicates`:`all`},!0)})}C(h);var v=e(h,2),x=t=>{var n=hr(),r=e(y(n),2);{let e=P(()=>g(D)===`unused`);rr(r,{label:`Show unused assets only`,text:`Not referenced`,get checked(){return g(e)},onChange:e=>$({usage:e.currentTarget.checked?`unused`:`all`},!0)})}C(n),s(t,n)};t(v,e=>{R.usageAvailable===!0&&e(x)});var w=e(v,2);rr(e(y(w),2),{label:`Show warnings only`,text:`Needs attention`,get checked(){return g(Qe)},onChange:e=>{I(Qe,e.currentTarget.checked,!0),$({warningsOnly:g(Qe)},!0)}}),C(w),C(m),C(i),a(()=>c.disabled=g(Ot)===0),f(`click`,c,xn),s(n,i)},$$slots:{trigger:!0,default:!0}});var mi=e(pi,2);let hi;var gi=e(y(mi),2);T(gi),ne(gi,e=>I(gt,e),()=>g(gt));var _i=e(gi,2),vi=y(_i,!0);C(_i),C(mi);var yi=e(mi,2),bi=y(yi);let xi;qe(y(bi),{name:`layout-grid`,size:14}),C(bi);var Si=e(bi,2);let Ci;qe(y(Si),{name:`table`,size:14}),C(Si),C(yi);var wi=e(yi,2),Ti=y(wi);n(Ti,20,()=>Array(9),l,(e,t,n)=>{var r=_r();j(r,`x`,n%3*4.5+.5),a(e=>j(r,`y`,e),[()=>Math.floor(n/3)*4.5+.5]),s(e,r)}),C(Ti);var Ei=e(Ti,2);T(Ei),ie(2),C(wi);var Di=e(wi,2);Ze(Di,{align:`right`,portal:!0,padding:`compact`,label:`Import assets`,get open(){return g(et)},set open(e){I(et,e,!0)},trigger:(t,n)=>{let r=()=>(n?.()).toggle,i=()=>(n?.()).open;var o=vr(),c=y(o);qe(c,{name:`plus`,size:14}),qe(e(c,4),{name:`chevron-down`,size:12}),C(o),a(()=>j(o,`aria-expanded`,i())),f(`click`,o,function(...e){r()?.apply(this,e)}),s(t,o)},children:(e,t)=>{He(e,{onFile:()=>{I(et,!1),Un(g(m)??``)},onFigma:()=>{I(et,!1),I(rt,g(m)??``,!0)}})},$$slots:{trigger:!0,default:!0}});var Oi=e(Di,2);ne(Oi,e=>I(ht,e),()=>g(ht)),C(ii);var ki=e(ii,2),Ai=e=>{s(e,yr())},ji=e=>{s(e,br())},Mi=t=>{var n=xr(),r=y(n),i=y(r,!0);C(r);var o=e(r,2);C(n),a(()=>O(i,g(N).error)),f(`click`,o,()=>void re.run(()=>pe({forceFresh:!0}),{retainResult:!0})),s(t,n)},Ni=e=>{var t=Sr(),n=y(t,!0);C(t),a(()=>O(n,g(Q).length===0?`No assets yet — drop an image anywhere to import it.`:`Nothing matches the current filters.`)),s(e,t)},Pi=r=>{var o=Ar(),l=d(o),u=t=>{var r=wr(),o=y(r);Me(o,{children:(e,t)=>{ie(),s(e,i(`Folders`))},$$slots:{default:!0}});var c=e(o,2);n(c,20,()=>g(en),e=>e,(t,n)=>{var r=Cr();let i;var o=y(r);Fe(y(o),{size:18}),C(o);var c=e(o,2),l=y(c),u=y(l,!0);C(l);var d=e(l,2),p=y(d);C(d),C(c),ie(2),C(r),a((e,t)=>{i=x(r,1,`folder-card svelte-1uha8ag`,null,i,{"drop-target":g(ot)===n,"dragging-folder":g(at)===n}),O(u,e),O(p,`${t??``} assets`)},[()=>me(n),()=>Hr(n)]),f(`click`,r,()=>Sn(n)),f(`contextmenu`,r,e=>Qn(e,n)),L(`dragstart`,r,e=>{I(at,n,!0),e.dataTransfer?.setData(`application/x-fundus-folder`,n),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}),L(`dragend`,r,()=>{I(at,null),I(ot,null)}),L(`dragover`,r,e=>Kr(e,n)),L(`dragleave`,r,()=>I(ot,null)),L(`drop`,r,e=>qr(e,n)),s(t,r)}),C(c),C(r),s(t,r)};t(l,e=>{g(en).length>0&&e(u)});var p=e(l,2),m=r=>{var i=c(),o=d(i),l=e=>{{let t=P(()=>R.state?.gitBranch??null);lr(e,{get assets(){return g(sn)},get sort(){return g(yt)},get sizesByAssetId(){return g(on)},get thumbnailHeight(){return g(bt)},get selectedAssetIds(){return g(Y)},get gitBranch(){return g(t)},assetHref:e=>se(`/asset/[id]`,{id:e}),onOpen:e=>void ce(se(`/asset/[id]`,{id:e})),onSort:e=>I(yt,bn(g(yt),e),!0),onToggleSelection:Cn,onToggleAll:e=>e?Nn():Ln(),onRowContextMenu:$n,onRowDragStart:zn})}},u=r=>{var i=c();n(d(i),17,()=>g(an),e=>e.key,(r,i)=>{var o=kr(),l=y(o),u=n=>{Me(n,{children:(n,r)=>{var o=Er(),c=d(o),l=e=>{var t=Tr(),n=y(t,!0);C(t),a(()=>O(n,g(i).emoji)),s(e,t)};t(c,e=>{g(i).emoji&&e(l)});var u=e(c,1,!0);a(()=>O(u,g(i).heading)),s(n,o)},$$slots:{default:!0}})};t(l,e=>{g(i).heading&&e(u)});var p=e(l,2);n(p,21,()=>g(i).assets,e=>e.id,(r,i)=>{let o=P(()=>je[g(i).type]?.thumbnail);var l=Or();let u;var p=y(l),m=e=>{{let t=P(()=>`${g(i).gitStatus===`new`?`New`:`Edited`} on ${R.state?.gitBranch??`the current Git branch`}`);Je(e,{get kind(){return g(i).gitStatus},overlay:!0,get title(){return g(t)}})}};t(p,e=>{g(i).gitStatus&&e(m)});var h=e(p,2);T(h);var _=e(h,2),v=y(_),b=e=>{var t=c();ae(d(t),()=>g(o),(e,t)=>{t(e,{get asset(){return g(i)}})}),s(e,t)};t(v,e=>{g(o)&&e(b)}),C(_);var S=e(_,2),w=y(S),E=y(w,!0);C(w);var D=e(w,2),ee=y(D,!0);C(D),C(S);var k=e(S,2),A=y(k);n(A,16,()=>g(i).manifests,e=>e,(e,t)=>{Gn(e,{get name(){return t}})});var M=e(A,2);n(M,17,()=>g(i).passiveManifests,e=>e.manifest,(e,t)=>{Gn(e,{get name(){return g(t).manifest},passive:!0,get via(){return g(t).via}})}),n(e(M,2),16,()=>g(i).warnings,e=>e,(e,t)=>{var n=Dr();a(()=>j(n,`title`,t)),s(e,n)}),C(k),C(l),a((e,t,n)=>{u=x(l,1,`card svelte-1uha8ag`,null,u,e),j(l,`data-asset-id`,g(i).id),j(l,`href`,t),te(h,n),j(h,`aria-label`,`Select ${g(i).id}`),O(E,g(i).id),O(ee,g(i).type)},[()=>({selected:g(Y).includes(g(i).id)}),()=>se(`/asset/[id]`,{id:g(i).id}),()=>g(Y).includes(g(i).id)]),f(`contextmenu`,l,e=>$n(e,g(i).id)),f(`click`,l,e=>{(g(Y).length>0||e.metaKey||e.ctrlKey||e.shiftKey)&&(e.preventDefault(),Cn(g(i).id,e.shiftKey))}),L(`dragstart`,l,e=>{let t=g(Y).includes(g(i).id)?g(Y):[g(i).id];e.dataTransfer?.setData(`application/x-fundus-assets`,JSON.stringify(t)),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`),Rn(e,t)}),L(`focus`,l,e=>Yr(e.currentTarget.querySelector(`video`))),L(`blur`,l,e=>Xr(e.currentTarget.querySelector(`video`))),f(`click`,h,e=>{e.stopPropagation(),Cn(g(i).id,e.shiftKey)}),s(r,l)}),C(p),C(o),s(r,o)}),s(r,i)};t(o,e=>{g(Z)===`table`?e(l):e(u,-1)}),s(r,i)};t(p,e=>{g(tn).length>0&&e(m)}),s(r,o)};t(ki,e=>{R.state?R.usageAvailable===!0&&g(D)===`unused`&&g(N).status===`loading`?e(ji,1):R.usageAvailable===!0&&g(D)===`unused`&&g(N).status===`failed`?e(Mi,2):g(tn).length===0&&g(en).length===0?e(Ni,3):e(Pi,-1):e(Ai)});var Fi=e(ki,2),Ii=e=>{var t=jr(),n=y(t);C(t),a(()=>O(n,`Drop to import into ${(g(m)||`Root`)??``}`)),s(e,t)};t(Fi,e=>{g(tt)&&e(Ii)}),C(ni),C(ei);var Li=e(ei,2),Ri=e=>{{let t=P(()=>g(H).renamePath===null?void 0:()=>Jn(g(H)?.renamePath??``)),n=P(()=>g(H).renamePath===null?void 0:()=>Yn(g(H)?.renamePath??``));Le(e,{get x(){return g(H).x},get y(){return g(H).y},onReveal:()=>void Rr(g(H)?.renamePath??g(H)?.parent??``),onNewDirectory:()=>Wn(g(H)?.parent??``),get onRenameDirectory(){return g(t)},onImportFile:()=>Un(g(H)?.parent??``),onImportFigma:()=>I(rt,g(H)?.parent??``,!0),get onDeleteDirectory(){return g(n)},onClose:()=>I(H,null)})}};t(Li,e=>{g(H)&&e(Ri)});var zi=e(Li,2),Bi=e=>{{let t=P(()=>cr(g(U).targetAssetId)),n=P(()=>!!R.assetById(g(U).targetAssetId)?.proxy),r=P(()=>g(U).assetIds.length===1&&!er(g(U).targetAssetId)?()=>ar(g(U)?.assetIds[0]??``):void 0),i=P(()=>nr(g(U).assetIds)?()=>void ir(g(U)?.assetIds??[]):void 0);Bn(e,{get x(){return g(U).x},get y(){return g(U).y},get assetCount(){return g(U).assetIds.length},get copyOptions(){return g(t)},onCopy:e=>void Lr(e),get hasProxy(){return g(n)},onReveal:e=>void sr(g(U)?.targetAssetId??``,e),get onRename(){return g(r)},get onRefresh(){return g(i)},onDelete:()=>or(g(U)?.assetIds??[]),onClose:()=>I(U,null)})}};t(zi,e=>{g(U)&&e(Bi)});var Vi=e(zi,2),Hi=e=>{{let t=P(()=>`Refreshing ${g(mt).assetId}…`);Hn(e,{title:`Refreshing`,get message(){return g(t)},get value(){return g(mt).position},get max(){return g(mt).total}})}};t(Vi,e=>{g(mt)!==null&&e(Hi)});var Ui=e(Vi,2),Wi=n=>{{let r=P(()=>g(q)?`Renaming…`:`Rename`),i=P(()=>!g(Ft));Xe(n,{title:`Rename asset`,get confirmLabel(){return g(r)},get confirmDisabled(){return g(i)},get busy(){return g(q)},onConfirm:()=>void Br(),onCancel:zr,children:(n,r)=>{var i=Pr(),o=d(i),c=e(y(o),2);T(c),ne(c,e=>I(it,e),()=>g(it)),C(o);var l=e(o,2),u=e=>{var t=Mr(),n=y(t,!0);C(t),a(()=>O(n,g(Nt))),s(e,t)};t(l,e=>{g(Nt)&&e(u)});var f=e(l,2),p=e=>{s(e,Nr())};t(f,e=>{g(Pt)&&e(p)});var m=e(f,2),h=e=>{var t=Mr(),n=y(t);C(t),a(e=>O(n,`Renaming leaves ${g(It).length??``} reference(s) pointing to the old ID:
|
|
3
|
-
${e??``}`),[()=>g(It).join(`, `)]),s(e,t)};t(m,e=>{g(It).length>0&&e(h)});var _=e(m,2),v=e=>{var t=Mr(),n=y(t,!0);C(t),a(()=>O(n,g(J))),s(e,t)};t(_,e=>{g(J)&&e(v)}),a(()=>c.disabled=g(q)),ee(c,()=>g(G),e=>I(G,e)),s(n,i)},$$slots:{default:!0}})}};t(Ui,e=>{g(W)!==null&&e(Wi)});var Gi=e(Ui,2),Ki=n=>{{let r=P(()=>g(K).length===1?`Delete asset`:`Delete ${g(K).length} assets`),i=P(()=>g(q)?`Deleting…`:g(K).length===1?`Delete asset`:`Delete ${g(K).length} assets`);Xe(n,{get title(){return g(r)},get confirmLabel(){return g(i)},danger:!0,get busy(){return g(q)},onConfirm:()=>void Vr(),onCancel:zr,children:(n,r)=>{var i=Fr(),o=d(i),c=y(o);C(o);var l=e(o,2),u=e=>{var t=Mr(),n=y(t);C(t),a(e=>O(n,`This leaves ${g(Rt).length??``} external reference(s) dangling:
|
|
4
|
-
${e??``}`),[()=>g(Rt).join(`, `)]),s(e,t)};t(l,e=>{g(Rt).length>0&&e(u)});var f=e(l,2),p=e=>{var t=Mr(),n=y(t,!0);C(t),a(()=>O(n,g(J))),s(e,t)};t(f,e=>{g(J)&&e(p)}),a(e=>O(c,`Delete ${e??``}? Their raw files and proxies are removed.`),[()=>g(K).join(`, `)]),s(n,i)},$$slots:{default:!0}})}};t(Gi,e=>{g(K).length>0&&e(Ki)});var qi=e(Gi,2),Ji=e=>{Ue(e,{get file(){return g(nt)},get folder(){return g(V)},onDone:e=>void Wr(e),onCancel:()=>I(nt,null)})};t(qi,e=>{g(nt)&&e(Ji)});var Yi=e(qi,2),Xi=e=>{Ae(e,{get folder(){return g(rt)},onDone:e=>void Wr(e),onCancel:()=>I(rt,null)})};t(Yi,e=>{g(rt)!==null&&e(Xi)}),a(()=>{ri=x(ni,1,`page svelte-1uha8ag`,null,ri,{dragging:g(tt)}),oe(ni,`--preview-card-width: ${g(vt)}px; --preview-card-height: ${g(vt)*.6}px`),ci.disabled=g(cn).length===0,hi=x(mi,1,`control search svelte-1uha8ag`,null,hi,{"filter-active":g(Gt)!==``}),O(vi,St),xi=x(bi,1,`view-toggle-button svelte-1uha8ag`,null,xi,{active:g(Z)===`card`}),j(bi,`aria-pressed`,g(Z)===`card`),Ci=x(Si,1,`view-toggle-button svelte-1uha8ag`,null,Ci,{active:g(Z)===`table`}),j(Si,`aria-pressed`,g(Z)===`table`),j(wi,`title`,`Preview size: ${g(Et)}px`),j(Ei,`min`,g(Ct)),j(Ei,`max`,g(wt)),j(Ei,`step`,g(Tt)),oe(Ei,`--preview-size-progress: ${g(Dt)}%`),j(Ei,`aria-valuetext`,g(Z)===`card`?`${g(vt)}px wide cards`:`${g(bt)}px tall rows`),j(Oi,`accept`,xt)}),f(`contextmenu`,ni,Zn),L(`dragleave`,ni,e=>{e.relatedTarget===null&&I(tt,!1)}),f(`click`,ci,Nn),f(`input`,gi,()=>$({query:g(z)},!0)),f(`keydown`,gi,e=>{e.key===`Escape`&&(e.stopPropagation(),g(z)===``?e.currentTarget.blur():$({query:``},!0))}),ee(gi,()=>g(z),e=>I(z,e)),f(`click`,bi,()=>I(Z,`card`)),f(`click`,Si,()=>I(Z,`table`)),ee(Ei,()=>g(Z)===`card`?g(vt):g(bt),e=>{g(Z)===`card`?I(vt,e,!0):I(bt,e,!0)}),f(`change`,Oi,Ur),s(r,$r),A()}o([`contextmenu`,`click`,`input`,`keydown`,`change`]);export{Lr as component};
|
|
Binary file
|