diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7d2eddd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +* text=auto eol=lf +*.gif -text +*.jpg -text +*.mp4 -text +*.pdf -text +*.png -text +*.gz -text +*.meta linguist-language=text +yarn.lock -diff \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4354a5e..9d5df5d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,22 @@ -/build -/doc -/examples/*/dist -/examples/*/public -/node_modules -/public +/.yarn +css/framework.json +dev +doc +dist +node_modules +public .zig-cache zig-out +examples/layer-test +packages/adapter-layer + +wasm-api-build.zig + +*.css *.js +*.d.ts +*.map +*.wasm +*.wast \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..11d1113 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "useTabs": true, + "tabWidth": 4, + "semi": true, + "singleQuote": false, + "arrowParens": "always", + "endOfLine": "lf" +} diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..80447a1 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,15 @@ +compressionLevel: mixed + +enableGlobalCache: false + +logFilters: + - code: YN0076 + level: discard + +nmMode: hardlinks-global + +nodeLinker: node-modules + +npmRegistryServer: "https://registry.npmjs.org" + +yarnPath: .yarn/releases/yarn-4.5.3.cjs diff --git a/README.md b/README.md index 179f25c..0713241 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Platform independent API for generative art -[![npm version](https://img.shields.io/npm/v/@thi.ng/genart-api.svg)](https://www.npmjs.com/package/@thi.ng/genart-api) -![npm downloads](https://img.shields.io/npm/dm/@thi.ng/genart-api.svg) +[![npm version](https://img.shields.io/npm/v/@genart-api/core.svg)](https://www.npmjs.com/package/@genart-api/core) +![npm downloads](https://img.shields.io/npm/dm/@genart-api/core.svg) [![Mastodon Follow](https://img.shields.io/mastodon/follow/109331703950160316?domain=https%3A%2F%2Fmastodon.thi.ng&style=social)](https://mastodon.thi.ng/@toxi) - [Status](#status) @@ -339,22 +339,22 @@ simplicity values are always strings, but optionally can also define labels ```ts // options $genart.params.choice({ - name: "Test param", - desc: "Shape size preset", - options: ["s", "m", "l"], - default: "m", + name: "Test param", + desc: "Shape size preset", + options: ["s", "m", "l"], + default: "m", }); // ...or using options with labels $genart.params.choice({ - name: "Test param", - desc: "Shape size preset", - options: [ - ["s", "Small"], - ["m", "Medium"], - ["l", "Large"], - ], - options: "m", + name: "Test param", + desc: "Shape size preset", + options: [ + ["s", "Small"], + ["m", "Medium"], + ["l", "Large"], + ], + options: "m", }); ``` @@ -374,9 +374,9 @@ widgets for editing these colors... ```ts $genart.params.color({ - name: "Test param", - desc: "Background color", - default: "#aabbcc", + name: "Test param", + desc: "Background color", + default: "#aabbcc", }); ``` @@ -393,9 +393,9 @@ JS `Date` value in precision of full days only (UTC midnight). ```ts $genart.params.date({ - name: "Test param", - desc: "Best before date", - default: new Date("2024-09-05"), + name: "Test param", + desc: "Best before date", + default: new Date("2024-09-05"), }); ``` @@ -413,9 +413,9 @@ JS `Date` value (in UTC). ```ts $genart.params.datetime({ - name: "Test param", - desc: "Date and time (in UTC)", - default: new Date("2024-09-05T12:34:56+02:00"), + name: "Test param", + desc: "Date and time (in UTC)", + default: new Date("2024-09-05T12:34:56+02:00"), }); ``` @@ -475,9 +475,9 @@ For simplicity, only lists of numeric or string values are supported by default: ```ts $genart.params.numlist({ - name: "test", - desc: "List of numbers", - default: [1, 2, 3], + name: "test", + desc: "List of numbers", + default: [1, 2, 3], }); ``` @@ -488,9 +488,9 @@ $genart.params.numlist({ ```ts $genart.params.strlist({ - name: "test", - desc: "List of strings", - default: ["a", "b", "c"], + name: "test", + desc: "List of strings", + default: ["a", "b", "c"], }); ``` @@ -505,11 +505,11 @@ to [0, 100]). If `step` is given, the value will be rounded to multiples of ```ts $genart.params.range({ - name: "Test param", - desc: "Pick a number between 0-100", - min: 0, - max: 100, - step: 5, + name: "Test param", + desc: "Pick a number between 0-100", + min: 0, + max: 100, + step: 5, }); ``` @@ -528,11 +528,11 @@ pattern validation. ```ts $genart.params.text({ - name: "Test param", - desc: "Seed phrase", - max: 256, - match: "^[a-z ]+$", - multiline: true, + name: "Test param", + desc: "Seed phrase", + max: 256, + match: "^[a-z ]+$", + multiline: true, }); ``` @@ -580,14 +580,14 @@ If `step` is given, each vector component value will be rounded to multiples of ```ts $genart.params.vector({ - name: "Test param", - desc: "3D vector", - dim: 3, // dimensions, mandatory - min: 0, - max: 1, - step: 0.01, - labels: ["X", "Y", "Z"], - default: [0.1, 0.2, 0.3], + name: "Test param", + desc: "3D vector", + dim: 3, // dimensions, mandatory + min: 0, + max: 1, + step: 0.01, + labels: ["X", "Y", "Z"], + default: [0.1, 0.2, 0.3], }); ``` @@ -620,28 +620,28 @@ described above). // - magenta: 2/15th (13%) // - yellow: 1/15th (7%) $genart.params.weighted({ - name: "Test param", - desc: "Controlled randomness", - options: [ - // format: [weight, value] - [8, "black"], - [4, "cyan"], - [2, "magenta"], - [1, "yellow"], - ], + name: "Test param", + desc: "Controlled randomness", + options: [ + // format: [weight, value] + [8, "black"], + [4, "cyan"], + [2, "magenta"], + [1, "yellow"], + ], }); // optionally, labels can be provided for each option $genart.params.weighted({ - name: "Test param", - desc: "With labels", - options: [ - // format: [weight, value, label] - [8, "#000", "black"], - [4, "#0ff", "cyan"], - [2, "#f0f", "magenta"], - [1, "#ff0", "yellow"], - ], + name: "Test param", + desc: "With labels", + options: [ + // format: [weight, value, label] + [8, "#000", "black"], + [4, "#0ff", "cyan"], + [2, "#f0f", "magenta"], + [1, "#ff0", "yellow"], + ], }); ``` @@ -660,9 +660,9 @@ two co-dependent parameters using an XY controller/touchpad... ```ts $genart.params.xy({ - name: "Test param", - desc: "Bottom-left: [dark,dry] / Top-right: [bright,wet]", - default: [0.5, 0.5], + name: "Test param", + desc: "Bottom-left: [dark,dry] / Top-right: [bright,wet]", + default: [0.5, 0.5], }); ``` @@ -704,14 +704,14 @@ and by default the API supports the following interpolation modes: ```ts $genart.params.ramp({ - name: "Test param", - desc: "Brightness over time", - stops: [ - [0, 0.1], - [0.9, 1], - [1, 0], - ], - mode: "smooth", + name: "Test param", + desc: "Brightness over time", + stops: [ + [0, 0.1], + [0.9, 1], + [1, 0], + ], + mode: "smooth", }); ``` @@ -742,43 +742,43 @@ example](https://github.com/thi-ng/genart-api/blob/main/examples/param-custom). ```ts // define a new param type with given name and implementation. interface OscParam extends Param { - type: "user:sinosc"; - freq: number; - amp: number; - offset: number; + type: "user:sinosc"; + freq: number; + amp: number; + offset: number; } // this implementation does not allow any customizations or value randomization // (the latter is common to all dynamic params, since the value is ALWAYS computed) $genart.registerParamType("user:sinosc", { - // for brevity we decide this param cannot be customized (once defined) - valid: (spec, key, value) => false, - // the read function is called each time this param is evaluated, - // here to provide a time-based value - read: (spec, t) => { - const { freq, amp, offset } = spec; - return Math.sin(t * freq * Math.PI * 2) * amp + offset; - }, + // for brevity we decide this param cannot be customized (once defined) + valid: (spec, key, value) => false, + // the read function is called each time this param is evaluated, + // here to provide a time-based value + read: (spec, t) => { + const { freq, amp, offset } = spec; + return Math.sin(t * freq * Math.PI * 2) * amp + offset; + }, }); // register parameter const param = $genart.setParams({ - sine: { - type: "user:sinosc", // param type (should be unique) - freq: 0.25, // frequency in Hz - amp: 5, // amplitude - offset: 5, // center offset - default: 0, // ignored - }, + sine: { + type: "user:sinosc", // param type (should be unique) + freq: 0.25, // frequency in Hz + amp: 5, // amplitude + offset: 5, // center offset + default: 0, // ignored + }, }); $genart.setUpdate((t) => { - // current time in seconds - t *= 0.001; - // evaluate param - console.log(t, param("sine", t)); - // keep on animating - return true; + // current time in seconds + t *= 0.001; + // evaluate param + console.log(t, param("sine", t)); + // keep on animating + return true; }); ``` @@ -819,12 +819,12 @@ The value of a single trait can be a number, string or boolean. ```ts // declare a single param const param = await $genart.setParams({ - bright: $genart.params.range({ - name: "brightness", - desc: "overall brightness", - min: 0, - max: 100, - }), + bright: $genart.params.range({ + name: "brightness", + desc: "overall brightness", + min: 0, + max: 100, + }), }); // internal random param @@ -832,8 +832,8 @@ const density = $genart.random.rnd(); // declare traits to outside world $genart.setTraits({ - brightness: param("bright") < 50 ? "dark" : "light", - density: Math.floor(density * 100) + "%", + brightness: param("bright") < 50 ? "dark" : "light", + density: Math.floor(density * 100) + "%", }); ``` @@ -849,8 +849,7 @@ providing (deployment) platform-specific functionality and interop features. **Please refer or contribute to issue [#2: List of art platforms we should provide adapters for](https://github.com/thi-ng/genart-api/issues/2)** -- [/src/adapters/urlparams.ts](https://github.com/thi-ng/genart-api/blob/main/src/adapters/urlparams.ts) : Reference implementation -- [/src/adapters/dummy.ts](https://github.com/thi-ng/genart-api/blob/main/src/adapters/dummy.ts) : Absolute barebones, scaffolding only +- [/src/adapters/urlparams.ts](https://github.com/thi-ng/genart-api/blob/main/packages/adapter-urlparams/src/index.ts) : Reference implementation ### Parameter sourcing @@ -873,13 +872,13 @@ Usually, the adapter just has to return the PRNG provided by the respective platform. - [PRNG interface definition](https://docs.thi.ng/umbrella/genart-api/interfaces/PRNG.html) -- [Example implementation in a platform adapter](https://github.com/thi-ng/genart-api/blob/17cbe7df708601d40ee353e77605525822f27ab1/src/adapters/urlparams.ts#L56-L73) +- [Example implementation in a platform adapter](https://github.com/thi-ng/genart-api/blob/main/packages/adapter-urlparams/index.ts) For cases where a platform does not provide its own PRNG, this repo contains two implementations which can be used by an adapter: -- [SFC32](https://github.com/thi-ng/genart-api/blob/main/src/prng/sfc32.ts) -- [XorShift128](https://github.com/thi-ng/genart-api/blob/main/src/prng/xorshift128.ts) +- [SFC32](https://github.com/thi-ng/genart-api/blob/main/packages/adapter-urlparams/src/prng/sfc32.ts) +- [XorShift128](https://github.com/thi-ng/genart-api/blob/main/packages/adapter-urlparams/src/prng/xorshift128.ts) ### Screen configuration @@ -903,7 +902,7 @@ a listener for `genart:resize` messages, like so: ```ts // resize events contain the new screen config $genart.on("genart:resize", ({ screen }) => { - console.log("new screen info:", screen.width, screen.height, screen.dpr); + console.log("new screen info:", screen.width, screen.height, screen.dpr); }); ``` @@ -944,7 +943,7 @@ this one can be replaced by loading an alternative implementation via another IMPORTANT: MUST be loaded AFTER the main genart script! --> ``` @@ -989,7 +988,7 @@ This repo contains several examples used for testing and evaluating the reference API implementation. These are all separate projects/packages located in the [/examples](https://github.com/thi-ng/genart-api/tree/main/examples) directory. Please ensure you read their README instructions, since a certain -build order must be used: +build order must be used in some situations: | **Project** | **Live demo w/ editor** | **Description** | | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------ | @@ -1002,10 +1001,10 @@ build order must be used: ### Project template -This repo contains an empty project template which can be used as starting point -for new projects. The template uses TypeScript & Vite, but can be _very_ easily -adapted to other tooling (eg. there's hardly any code, so switching to -JavaScript requires just renaming the source file). +This repo contains an empty project template as starting point for new projects. +The template uses TypeScript & Vite, but can be _very_ easily adapted to other +tooling (eg. there's hardly any code, so switching to JavaScript requires just +renaming the source file). - TODO move template to own repo for easier use @@ -1022,42 +1021,46 @@ yarn install ### Installion as package -The [@thi.ng/genart-api package](https://www.npmjs.com/@thi.ng/genart-api) -contains the pre-built release files & type declarations, but is **not** an ESM -module which can (or even should) be imported via `import` syntax. The API is -always provided as singleton via the global `$genart` variable. +The [@genart-api/core package](https://www.npmjs.com/@genart-api/core) contains +the pre-built release files & type declarations, but it's **not** an ESM module +which can (or even should) be imported via `import` syntax. The API is always +provided as singleton via the global `$genart` variable. Instead, the JS file(s) should be copied to your project's `/lib` dir (or -similar) to be referenced by ` ``` -- [TypeScript source code](https://github.com/thi-ng/genart-api/blob/main/src/index.ts) +- [TypeScript source code](https://github.com/thi-ng/genart-api/blob/main/packages/core/src/index.ts) #### Reference platform adapter @@ -1102,7 +1105,7 @@ use cases: ``` -- [TypeScript source code](https://github.com/thi-ng/genart-api/blob/main/src/adapters/urlparams.ts) +- [TypeScript source code](https://github.com/thi-ng/genart-api/blob/main/packages/adapter-urlparams/src/index.ts) #### Example files @@ -1111,31 +1114,31 @@ use cases: ```html - - - Hello GenArtAPI - - - - - - - - + + + + + + + - - - - + + + + ``` @@ -1146,67 +1149,67 @@ use cases: ```js // index.js (async () => { - // ensure platform adapter is ready - await $genart.waitForAdapter(); - - // declare parameters - const param = await $genart.setParams({ - bgColor: $genart.params.color({ - name: "Bg color", // mandatory human readable name - desc: "Canvas background color", // mandatory brief description - doc: "Optional extended documentation or usage hints", - default: "#0000ff", // default value (if omitted, will be initialized to random...) - update: "reload", // trigger reload on value change - }), - - // this param has no default, so will be initialized to random value - // (unless the platform provides a customized value) - maxR: $genart.params.range({ - name: "Max radius", - desc: "Maximum brush size", - min: 10, - max: 100, - step: 5, - }), - }); - - // obtain screen config - const { width, height, dpr } = $genart.screen; - - // alias PRNG function (for convenience) - const random = $genart.random.rnd; - - // create canvas - const canvas = document.createElement("canvas"); - canvas.width = width; - canvas.height = height; - document.body.appendChild(canvas); - - const ctx = canvas.getContext("2d"); - - // use param (in TS param value types will be inferred automatically) - ctx.fillStyle = param("bgColor"); - // clear canvas - ctx.fillRect(0, 0, width, height); - - // main update/draw function - // time (in milliseconds) and frame number supplied by GenArtAPI & time provider - const update = (time, frame) => { - const radius = random() * param("maxR"); - ctx.strokeStyle = "#000"; - ctx.beginPath(); - ctx.arc(random() * width, random() * height, radius, 0, Math.PI * 2); - ctx.stroke(); - console.log(time, frame); - - // function must return true for animation to continue - return true; - }; - - // register update function - // depending on platform adapter/specifics, in most cases - // this will also auto-start animation... - $genart.setUpdate(update); + // ensure platform adapter is ready + await $genart.waitForAdapter(); + + // declare parameters + const param = await $genart.setParams({ + bgColor: $genart.params.color({ + name: "Bg color", // mandatory human readable name + desc: "Canvas background color", // mandatory brief description + doc: "Optional extended documentation or usage hints", + default: "#0000ff", // default value (if omitted, will be initialized to random...) + update: "reload", // trigger reload on value change + }), + + // this param has no default, so will be initialized to random value + // (unless the platform provides a customized value) + maxR: $genart.params.range({ + name: "Max radius", + desc: "Maximum brush size", + min: 10, + max: 100, + step: 5, + }), + }); + + // obtain screen config + const { width, height, dpr } = $genart.screen; + + // alias PRNG function (for convenience) + const random = $genart.random.rnd; + + // create canvas + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + document.body.appendChild(canvas); + + const ctx = canvas.getContext("2d"); + + // use param (in TS param value types will be inferred automatically) + ctx.fillStyle = param("bgColor"); + // clear canvas + ctx.fillRect(0, 0, width, height); + + // main update/draw function + // time (in milliseconds) and frame number supplied by GenArtAPI & time provider + const update = (time, frame) => { + const radius = random() * param("maxR"); + ctx.strokeStyle = "#000"; + ctx.beginPath(); + ctx.arc(random() * width, random() * height, radius, 0, Math.PI * 2); + ctx.stroke(); + console.log(time, frame); + + // function must return true for animation to continue + return true; + }; + + // register update function + // depending on platform adapter/specifics, in most cases + // this will also auto-start animation... + $genart.setUpdate(update); })(); ``` diff --git a/build-examples.js b/build-examples.js deleted file mode 100644 index ec80439..0000000 --- a/build-examples.js +++ /dev/null @@ -1,17 +0,0 @@ -import { execFileSync } from "node:child_process"; - -for (let ex of [ - "p5-basic", - "param-custom", - "param-editors", - "param-image", - "param-test", - "zig-test", -]) { - console.log("building example:", ex); - try { - execFileSync("yarn", ["build"], { cwd: `examples/${ex}` }); - } catch (e) { - console.log(e); - } -} diff --git a/build.js b/build.js deleted file mode 100644 index 0d44991..0000000 --- a/build.js +++ /dev/null @@ -1,60 +0,0 @@ -import * as esbuild from "esbuild"; -import { copyFileSync, readFileSync, writeFileSync } from "node:fs"; - -const BUILD_DIR = "dist"; - -const buildAll = async (minify) => { - const ext = minify ? ".min.js" : ".js"; - for (let [entry, out] of [ - ["src/index.ts", "genart"], - ["src/adapters/urlparams.ts", "adapter-urlparams"], - ]) { - const outFile = `${BUILD_DIR}/${out}${ext}`; - console.log("building", outFile); - await esbuild.build({ - entryPoints: [entry], - outfile: outFile, - platform: "browser", - target: "es2022", - bundle: true, - minify, - }); - if (out === "genart") { - const pkg = JSON.parse(readFileSync("package.json")); - console.log("injecting version:", pkg.version, outFile); - writeFileSync( - outFile, - readFileSync(outFile, "utf-8").replace( - "__VERSION__", - pkg.version - ) - ); - } - } -}; - -await buildAll(false); -await buildAll(true); - -const PKG = JSON.parse(readFileSync("package.json")); - -writeFileSync( - `${BUILD_DIR}/package.json`, - JSON.stringify( - { - name: PKG.name, - version: PKG.version, - description: PKG.description, - repository: PKG.repository, - author: PKG.author, - license: PKG.license, - typings: "./genart.d.ts", - sideEffects: false, - }, - null, - 4 - ) -); - -copyFileSync("README.md", `${BUILD_DIR}/README.md`); -copyFileSync("LICENSE", `${BUILD_DIR}/LICENSE`); diff --git a/dist/adapter-urlparams.js b/dist/adapter-urlparams.js index d3cf2df..273b69a 100644 --- a/dist/adapter-urlparams.js +++ b/dist/adapter-urlparams.js @@ -1,27 +1,13 @@ "use strict"; (() => { - // src/prng/sfc32.ts - var sfc32 = (seed) => { - const buf = new Uint32Array(4); - buf.set(seed); - return () => { - const t = (buf[0] + buf[1] >>> 0) + buf[3] >>> 0; - buf[3] = buf[3] + 1 >>> 0; - buf[0] = buf[1] ^ buf[1] >>> 9; - buf[1] = buf[2] + (buf[2] << 3) >>> 0; - buf[2] = (buf[2] << 21 | buf[2] >>> 11) + t >>> 0; - return t / 4294967296; - }; - }; - - // src/adapters/base64.ts + // src/base64.ts var base64Encode = (src) => { const buf = Array.isArray(src) ? src : new Uint8Array(src.buffer, src.byteOffset, src.byteLength); return btoa(String.fromCharCode(...buf)); }; var base64Decode = (src) => new Uint8Array([...atob(src)].map((x) => x.charCodeAt(0))); - // src/adapters/compress.ts + // src/compress.ts var pipe = async (buf, stream) => new Uint8Array( await new Response( new Blob([buf]).stream().pipeThrough(stream) @@ -30,7 +16,21 @@ var compressBytes = (buf, fmt = "gzip") => pipe(buf, new CompressionStream(fmt)); var decompressBytes = (buf, fmt = "gzip") => pipe(buf, new DecompressionStream(fmt)); - // src/adapters/urlparams.ts + // src/prng/sfc32.ts + var sfc32 = (seed) => { + const buf = new Uint32Array(4); + buf.set(seed); + return () => { + const t = (buf[0] + buf[1] >>> 0) + buf[3] >>> 0; + buf[3] = buf[3] + 1 >>> 0; + buf[0] = buf[1] ^ buf[1] >>> 9; + buf[1] = buf[2] + (buf[2] << 3) >>> 0; + buf[2] = (buf[2] << 21 | buf[2] >>> 11) + t >>> 0; + return t / 4294967296; + }; + }; + + // src/index.ts var { math: { clamp01, parseNum }, utils: { formatValuePrec } diff --git a/dist/adapter-urlparams.min.js b/dist/adapter-urlparams.min.js index 7eaf4f5..c3f7b22 100644 --- a/dist/adapter-urlparams.min.js +++ b/dist/adapter-urlparams.min.js @@ -1 +1 @@ -"use strict";(()=>{var u=t=>{let e=new Uint32Array(4);return e.set(t),()=>{let r=(e[0]+e[1]>>>0)+e[3]>>>0;return e[3]=e[3]+1>>>0,e[0]=e[1]^e[1]>>>9,e[1]=e[2]+(e[2]<<3)>>>0,e[2]=(e[2]<<21|e[2]>>>11)+r>>>0,r/4294967296}};var g=t=>{let e=Array.isArray(t)?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return btoa(String.fromCharCode(...e))},l=t=>new Uint8Array([...atob(t)].map(e=>e.charCodeAt(0)));var h=async(t,e)=>new Uint8Array(await new Response(new Blob([t]).stream().pipeThrough(e)).arrayBuffer()),f=(t,e="gzip")=>h(t,new CompressionStream(e)),y=(t,e="gzip")=>h(t,new DecompressionStream(e));var{math:{clamp01:w,parseNum:o},utils:{formatValuePrec:A}}=$genart,c="__autostart",P="__width",b="__height",v="__dpr",_="__seed",m="platform",d=class{params;cache={};_prng;_screen;constructor(){this.params=new URLSearchParams(location.search),this._screen=this.screen,this.initPRNG(),$genart.on("genart:param-change",async e=>{let r=await this.serializeParam(e.param);this.params.set(e.paramID,r),parent.postMessage({type:"paramadapter:update",params:this.params.toString()},"*"),e.param.update==="reload"&&(console.log("reloading w/",this.params.toString()),location.search=this.params.toString())}),$genart.on("genart:state-change",({state:e})=>{e==="ready"&&this.params.get(c)!=="0"&&$genart.start()}),window.addEventListener("resize",()=>{let{width:e,height:r,dpr:a}=this._screen,s=this.screen;(e!==s.width||r!==s.height||a!==s.dpr)&&(this._screen=s,$genart.emit({type:"genart:resize",screen:s}))}),parent.postMessage({type:"paramadapter:update",params:this.params.toString()},"*")}get mode(){return this.params.get("__mode")||"play"}get screen(){return{width:o(this.params.get(P),window.innerWidth),height:o(this.params.get(b),window.innerHeight),dpr:o(this.params.get(v),window.devicePixelRatio||1)}}get prng(){return this._prng}augmentParams(e){return Object.assign(e,{[_]:$genart.params.range({group:m,order:0,name:"PRNG seed",desc:"Manually defined seed value",min:0,max:1e13,default:Number(BigInt(this._prng.seed)),update:"reload",widget:"precise"}),[P]:$genart.params.range({group:m,order:1,name:"Width",desc:"Canvas width",min:100,max:16384,default:this._screen.width,randomize:!1,update:"reload",widget:"precise"}),[b]:$genart.params.range({group:m,order:2,name:"Height",desc:"Canvas height",min:100,max:16384,default:this._screen.height,randomize:!1,update:"reload",widget:"precise"}),[v]:$genart.params.range({group:m,order:3,name:"DPR",desc:"Device pixel ratio",min:1,max:4,default:this._screen.dpr,randomize:!1,update:"reload",widget:"precise"}),[c]:$genart.params.toggle({group:m,order:4,name:"Autostart",desc:"If enabled, artwork will start playing automatically",default:this.params.get(c)!=="0",randomize:!1,update:"reload"})})}async updateParam(e,r){let a=this.params.get(e);if(!(a==null||this.cache[e]===a))switch(this.cache[e]=a,r.type){case"color":case"choice":case"text":case"time":case"weighted":return{value:a};case"date":case"datetime":return{value:new Date(Date.parse(a))};case"img":return{value:await y(l(a))};case"numlist":return{value:a.split(",").map(s=>o(s))};case"range":return{value:+a};case"ramp":{let[s,...n]=a.split(",");if(!s||n.length<4||n.length&1){$genart.paramError(e);return}let R={l:"linear",s:"smooth",e:"exp"}[s]||"linear",p=[];for(let i=0;ii[0]-S[0]),{update:{mode:R,stops:p.flat()}}}case"strlist":return{value:a.split(",")};case"toggle":return{value:a==="1"};case"xy":return{value:a.split(",").map(s=>+s)}}}async serializeParam(e){switch(e.type){case"color":return e.value.substring(1);case"date":return e.value.toISOString().substring(0,10);case"datetime":return e.value.toISOString();case"img":return g(await f(e.value));case"numlist":case"strlist":return e.value.join(",");case"ramp":{let r=e;return r.mode[0]+","+r.stops.flatMap(a=>a).join(",")}case"range":return A(e.step)(e.value);case"time":return e.value.join(":");case"toggle":return e.value?1:0;case"xy":return e.value.map(r=>r.toFixed(3)).join(",");default:return e.value}}capture(e){console.log("TODO handle capture...",e)}initPRNG(){let e=this.params.get(_),r=BigInt(e??Math.floor(Math.random()*1e13)),a=0xffffffffn,s=()=>n.rnd=u([Number(r>>96n&a)>>>0,Number(r>>64n&a)>>>0,Number(r>>32n&a)>>>0,Number(r&a)>>>0]),n={seed:"0x"+r.toString(16),reset:s};s(),this._prng=n}};$genart.setAdapter(new d);})(); +"use strict";(()=>{var u=t=>{let e=Array.isArray(t)?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return btoa(String.fromCharCode(...e))},g=t=>new Uint8Array([...atob(t)].map(e=>e.charCodeAt(0)));var l=async(t,e)=>new Uint8Array(await new Response(new Blob([t]).stream().pipeThrough(e)).arrayBuffer()),h=(t,e="gzip")=>l(t,new CompressionStream(e)),f=(t,e="gzip")=>l(t,new DecompressionStream(e));var y=t=>{let e=new Uint32Array(4);return e.set(t),()=>{let r=(e[0]+e[1]>>>0)+e[3]>>>0;return e[3]=e[3]+1>>>0,e[0]=e[1]^e[1]>>>9,e[1]=e[2]+(e[2]<<3)>>>0,e[2]=(e[2]<<21|e[2]>>>11)+r>>>0,r/4294967296}};var{math:{clamp01:w,parseNum:o},utils:{formatValuePrec:A}}=$genart,c="__autostart",P="__width",b="__height",v="__dpr",_="__seed",m="platform",d=class{params;cache={};_prng;_screen;constructor(){this.params=new URLSearchParams(location.search),this._screen=this.screen,this.initPRNG(),$genart.on("genart:param-change",async e=>{let r=await this.serializeParam(e.param);this.params.set(e.paramID,r),parent.postMessage({type:"paramadapter:update",params:this.params.toString()},"*"),e.param.update==="reload"&&(console.log("reloading w/",this.params.toString()),location.search=this.params.toString())}),$genart.on("genart:state-change",({state:e})=>{e==="ready"&&this.params.get(c)!=="0"&&$genart.start()}),window.addEventListener("resize",()=>{let{width:e,height:r,dpr:a}=this._screen,s=this.screen;(e!==s.width||r!==s.height||a!==s.dpr)&&(this._screen=s,$genart.emit({type:"genart:resize",screen:s}))}),parent.postMessage({type:"paramadapter:update",params:this.params.toString()},"*")}get mode(){return this.params.get("__mode")||"play"}get screen(){return{width:o(this.params.get(P),window.innerWidth),height:o(this.params.get(b),window.innerHeight),dpr:o(this.params.get(v),window.devicePixelRatio||1)}}get prng(){return this._prng}augmentParams(e){return Object.assign(e,{[_]:$genart.params.range({group:m,order:0,name:"PRNG seed",desc:"Manually defined seed value",min:0,max:1e13,default:Number(BigInt(this._prng.seed)),update:"reload",widget:"precise"}),[P]:$genart.params.range({group:m,order:1,name:"Width",desc:"Canvas width",min:100,max:16384,default:this._screen.width,randomize:!1,update:"reload",widget:"precise"}),[b]:$genart.params.range({group:m,order:2,name:"Height",desc:"Canvas height",min:100,max:16384,default:this._screen.height,randomize:!1,update:"reload",widget:"precise"}),[v]:$genart.params.range({group:m,order:3,name:"DPR",desc:"Device pixel ratio",min:1,max:4,default:this._screen.dpr,randomize:!1,update:"reload",widget:"precise"}),[c]:$genart.params.toggle({group:m,order:4,name:"Autostart",desc:"If enabled, artwork will start playing automatically",default:this.params.get(c)!=="0",randomize:!1,update:"reload"})})}async updateParam(e,r){let a=this.params.get(e);if(!(a==null||this.cache[e]===a))switch(this.cache[e]=a,r.type){case"color":case"choice":case"text":case"time":case"weighted":return{value:a};case"date":case"datetime":return{value:new Date(Date.parse(a))};case"img":return{value:await f(g(a))};case"numlist":return{value:a.split(",").map(s=>o(s))};case"range":return{value:+a};case"ramp":{let[s,...n]=a.split(",");if(!s||n.length<4||n.length&1){$genart.paramError(e);return}let R={l:"linear",s:"smooth",e:"exp"}[s]||"linear",p=[];for(let i=0;ii[0]-S[0]),{update:{mode:R,stops:p.flat()}}}case"strlist":return{value:a.split(",")};case"toggle":return{value:a==="1"};case"xy":return{value:a.split(",").map(s=>+s)}}}async serializeParam(e){switch(e.type){case"color":return e.value.substring(1);case"date":return e.value.toISOString().substring(0,10);case"datetime":return e.value.toISOString();case"img":return u(await h(e.value));case"numlist":case"strlist":return e.value.join(",");case"ramp":{let r=e;return r.mode[0]+","+r.stops.flatMap(a=>a).join(",")}case"range":return A(e.step)(e.value);case"time":return e.value.join(":");case"toggle":return e.value?1:0;case"xy":return e.value.map(r=>r.toFixed(3)).join(",");default:return e.value}}capture(e){console.log("TODO handle capture...",e)}initPRNG(){let e=this.params.get(_),r=BigInt(e??Math.floor(Math.random()*1e13)),a=0xffffffffn,s=()=>n.rnd=y([Number(r>>96n&a)>>>0,Number(r>>64n&a)>>>0,Number(r>>32n&a)>>>0,Number(r&a)>>>0]),n={seed:"0x"+r.toString(16),reset:s};s(),this._prng=n}};$genart.setAdapter(new d);})(); diff --git a/dist/api/messages.d.ts b/dist/api/messages.d.ts index 278d9b8..e98d608 100644 --- a/dist/api/messages.d.ts +++ b/dist/api/messages.d.ts @@ -129,7 +129,11 @@ export interface ResizeMessage extends APIMessage { * Message type emitted by the {@link GenArtAPI.start} update/animation loop for * each single frame update. The message contains the time & frame information * of the currently rendered frame and is intended for 3rd party tooling (i.e. - * editors, players, sequencers). + * editors, players, sequencers). Messages are only sent if the + * {@link GenArtAPIOpts.notifyFrameUpdate} option is enabled. + * + * @remarks + * Also see: {@link GenArtAPI.configure} and {@link ConfigureMessage}. */ export interface AnimFrameMessage extends APIMessage { type: "genart:frame"; diff --git a/dist/genart.d.ts b/dist/genart.d.ts index 6c0ae21..a833c7c 100644 --- a/dist/genart.d.ts +++ b/dist/genart.d.ts @@ -1,10 +1,8 @@ import type { GenArtAPI } from "./api.js"; - export * from "./api.js"; - declare global { - /** - * Globally exposed singleton instance of {@link GenArtAPI} - */ - var $genart: GenArtAPI; + /** + * Globally exposed singleton instance of {@link GenArtAPI} + */ + var $genart: GenArtAPI; } diff --git a/dist/genart.js b/dist/genart.js index 24f6f99..7080ddf 100644 --- a/dist/genart.js +++ b/dist/genart.js @@ -372,7 +372,7 @@ }; }; - // src/index.ts + // src/genart.ts var { ensure: ensure2, isNumber: isNumber2, isString: isString2, isNumericArray: isNumericArray2 } = utils_exports; var { clamp: clamp2, clamp01: clamp012, mix: mix2, norm: norm2, round: round2, parseNum: parseNum2 } = math_exports; var PARAM_DEFAULTS = { diff --git a/dist/genart.min.js b/dist/genart.min.js index f6f7f3f..7668d1f 100644 --- a/dist/genart.min.js +++ b/dist/genart.min.js @@ -1 +1 @@ -"use strict";(()=>{var ge=Object.defineProperty;var G=(a,t)=>{for(var e in t)ge(a,e,{get:t[e],enumerable:!0})};var V={};G(V,{clamp:()=>be,clamp01:()=>ne,div:()=>D,easeInOut5:()=>W,fit:()=>j,mix:()=>_e,norm:()=>ie,parseNum:()=>ye,round:()=>Te,smoothstep:()=>xe,smoothstep01:()=>z});var ye=(a,t=0)=>{let e=a?parseFloat(a):Number.NaN;return isNaN(e)?t:e},_e=(a,t,e)=>a+(t-a)*e,j=(a,t,e,r,s)=>r+(s-r)*ie(a,t,e),be=(a,t,e)=>ae?e:a,ne=a=>a<0?0:a>1?1:a,Te=(a,t)=>Math.round(D(a,t))*t,ie=(a,t,e)=>D(a-t,e-t),D=(a,t)=>t!=0?a/t:0,xe=(a,t,e)=>z(ne(D(e-a,t-a))),z=a=>a*a*(3-2*a),we=a=>{let t=2**(a-1);return e=>e<.5?t*e**a:1-(-2*e+2)**a/2},W=we(5);var Y={};G(Y,{choice:()=>q,color:()=>Re,date:()=>Ce,datetime:()=>Ne,image:()=>ve,numlist:()=>X,ramp:()=>De,range:()=>ze,strlist:()=>Ve,text:()=>$e,time:()=>Ee,toggle:()=>Fe,vector:()=>ke,weighted:()=>Be,xy:()=>Le});var k={};G(k,{ensure:()=>T,formatValuePrec:()=>Se,isNumber:()=>F,isNumericArray:()=>Ie,isString:()=>Ae,isTypedArray:()=>oe,u16:()=>E,u24:()=>K,u32:()=>Me,u8:()=>$,valuePrec:()=>me});var T=(a,t)=>{if(!a)throw new Error(t);return a},F=a=>typeof a=="number"&&!isNaN(a),Ae=a=>typeof a=="string",Ie=a=>oe(a)||Array.isArray(a)&&a.every(F),oe=a=>!!a&&(a instanceof Float32Array||a instanceof Float64Array||a instanceof Uint32Array||a instanceof Int32Array||a instanceof Uint8Array||a instanceof Int8Array||a instanceof Uint16Array||a instanceof Int16Array||a instanceof Uint8ClampedArray),$=a=>(a&=255,(a<16?"0":"")+a.toString(16)),E=a=>$(a>>>8)+$(a),K=a=>E(a>>>8)+$(a&255),Me=a=>E(a>>>16)+E(a),me=a=>{let t=a.toString(),e=t.indexOf(".");return e>0?t.length-e-1:0},Se=a=>{let t=me(a);return e=>e.toFixed(t)};var l=(a,t,e=!0)=>({type:a,state:"void",randomize:e,...t}),q=a=>l("choice",a),Re=a=>l("color",a),Ne=a=>l("datetime",a,!1),Ce=a=>l("date",a,!1),ve=a=>l("img",{default:a.default||new Uint8Array(a.width*a.height),...a},!1),X=a=>l("numlist",{default:[],...a},!1),De=a=>l("ramp",{name:a.name,desc:a.desc,doc:a.doc,stops:a.stops?a.stops.flat():[0,0,1,1],mode:a.mode||"linear",default:0},!1),ze=a=>l("range",{min:0,max:100,step:1,...a}),Ve=a=>l("strlist",{default:[],...a},!1),$e=a=>l("text",a,!1),Ee=a=>l("time",a),Fe=a=>l("toggle",a),ke=a=>{let t=(e,r,s=0)=>Array.isArray(r)?(T(r.length===e,"wrong vector size"),r):new Array(e).fill(F(r)?r:s);return a.default&&T(a.default.length==a.dim,`wrong vector size, expected ${a.dim} values`),a.labels?T(a.labels.length>=a.dim,`expected ${a.dim} labels`):T(a.dim<=4,"missing vector labels"),l("vector",{...a,min:t(a.dim,a.min,0),max:t(a.dim,a.max,1),step:t(a.dim,a.step,.01),labels:a.labels||["X","Y","Z","W"].slice(0,a.dim)})},Be=a=>l("weighted",{...a,options:a.options.sort((t,e)=>e[0]-t[0]),total:a.options.reduce((t,e)=>t+e[0],0)}),Le=a=>l("xy",a);var pe=(a,t,e=[])=>({head:()=>a[e[0]],push(r){for(;e.length&&t(a[e[e.length-1]],r);)e.pop();e.push(a.length-1)},shift(){e[0]===0&&e.shift();for(let r=e.length;r-- >0;)e[r]--}}),de=({targetFPS:a=60,period:t=200,width:e=t,height:r=100,style:s="position:fixed;z-index:9999;top:0;right:0;",bg:n="#222",text:i="#fff",fps:m=["#0f0","#ff0","#f00","#306"],fill:p=!0}={})=>{let d,o,ee=e/t,fe=e>=120,te=performance.now(),A=0,g=0,ae=0,y=[],N,I,c=a,C=0,re=!0,he=()=>{let P=[g,A],h=g-ae;if(ae=g,h<=0)return P;let v=1e3/h,M=y.push(v);N.push(v),I.push(v),M>t&&(M--,C-=y.shift(),N.shift(),I.shift()),C+=v;let{clamp01:U,round:Pe}=$genart.math;c+=(I.head()*1.1-c)*.1;let S=o.createLinearGradient(0,0,0,d.height);S.addColorStop(U(1-a/c),m[0]),S.addColorStop(U(1-(a-1)/c),m[1]),S.addColorStop(U(1-a/2/c),m[2]),S.addColorStop(1,m[3]),o.fillStyle=n,o.fillRect(0,0,e,r),o[p?"fillStyle":"strokeStyle"]=S,o.setLineDash([]),o.beginPath(),o.moveTo(-1,r);for(let f=0;f90?30:c>30?15:5,_=Pe(Math.min(a,c+f/2),f);_>0;_-=f){let b=(1-_/c)*r;o.moveTo(e-80,b),fe?(o.lineTo(e-22,b),o.fillText(String(_),e-20,b+1)):o.lineTo(e,b)}return o.stroke(),M>=t&&[[`sma(${t}):`,C/t],["max:",I.head()],["min:",N.head()]].forEach(([f,_],b)=>{let se=r-8-b*12;o.fillText(f,4,se),o.fillText(_.toFixed(1)+" fps",64,se)}),P};return{start(){y=[],N=pe(y,(P,h)=>P>=h),I=pe(y,(P,h)=>P<=h),c=a*1.2,C=0,d||(d=document.createElement("canvas"),d.width=e,d.height=r,d.id="#FPS",d.setAttribute("style",s),document.body.appendChild(d),o=d.getContext("2d"),o.font="12px sans-serif",o.textBaseline="middle",o.strokeStyle=i,o.setLineDash([1,1]))},next(P){requestAnimationFrame(h=>{re?(te=h,A=0,re=!1):A++,g=h-te,P(g,A),he()})},now(){return[g,A]}}};var le=(a=250,t=60,e=0)=>{let r=e,s=1e3/t;return{start(){r=e-1},next(n){setTimeout(()=>{r++,n(r*s,r)},a)},now:()=>[r*s,r]}};var H=(a=0,t=0)=>{let e=performance.now(),r=t,s=a,n=!0;return{start(){n=!0},next(i){requestAnimationFrame(m=>{n?(e=m,r=t,n=!1):r++,s=a+m-e,i(s,r)})},now:()=>[s,r]}};var{ensure:w,isNumber:x,isString:u,isNumericArray:R}=k,{clamp:B,clamp01:ce,mix:L,norm:ue,round:O,parseNum:Oe}=V,Ue={edit:"protected",group:"main",order:0,randomize:!0,update:"event",widget:"default"},J=class{_opts={id:Math.floor(Math.random()*1e12).toString(36),allowExternalConfig:!1,notifyFrameUpdate:!1};_adapter;_time=H();_prng;_update;_state="init";_traits;_params;_paramTypes={choice:{validate:(t,e)=>!!t.options.find(r=>(Array.isArray(r)?r[0]:r)===e),randomize:(t,e)=>{let r=t.options,s=r[e()*r.length|0];return Array.isArray(s)?s[0]:s}},color:{validate:(t,e)=>u(e)&&/^#?[0-9a-f]{6}$/.test(e),coerce:(t,e)=>e[0]!=="#"?"#"+e:e,randomize:(t,e)=>"#"+K(e()*16777216|0)},date:{validate:(t,e)=>e instanceof Date||x(e)||u(e)&&/^\d{4}-\d{2}-\d{2}$/.test(e),coerce:(t,e)=>x(e)?new Date(e):u(e)?new Date(Date.parse(e)):e},datetime:{validate:(t,e)=>e instanceof Date||x(e)||u(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[-+]\d{2}:\d{2})$/.test(e),coerce:(t,e)=>x(e)?new Date(e):u(e)?new Date(Date.parse(e)):e},img:{validate:(t,e)=>{let{width:r,height:s}=t;return R(e)&&e.length==r*s}},numlist:{validate:(t,e)=>R(e)},ramp:{validate:()=>!1,read:(t,e)=>{let{stops:r,mode:s}=t,n=r.length,i=n;for(;(i-=2)>=0&&!(e>=r[i]););n-=2;let m=r[i],p=r[i+1],d=r[i+2],o=r[i+3];return i<0?r[1]:i>=n?r[n+1]:{exp:()=>L(p,o,W(ue(e,m,d))),linear:()=>j(e,m,d,p,o),smooth:()=>L(p,o,z(ue(e,m,d)))}[s||"linear"]()},params:{stops:X({name:"Ramp stops",desc:"Control points",default:[]}),mode:q({name:"Ramp mode",desc:"Interpolation method",options:["linear","smooth","exp"]})}},range:{validate:(t,e)=>{let{min:r,max:s}=t;return x(e)&&e>=r&&e<=s},coerce:(t,e)=>{let r=t;return B(O(e??r.default,r.step||1),r.min,r.max)},randomize:(t,e)=>{let{min:r,max:s,step:n}=t;return B(O(L(r,s,e()),n||1),r,s)}},strlist:{validate:(t,e)=>Array.isArray(e)&&e.every(u)},text:{validate:(t,e)=>{if(!u(e))return!1;let{min:r,max:s,match:n}=t;return n&&!(u(n)?new RegExp(n):n).test(e)?!1:(!r||e.length>=r)&&(!s||e.length<=s)}},time:{validate:(t,e)=>R(e)||u(e)&&/^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(e),coerce:(t,e)=>u(e)?e.split(":").map(Oe):e,randomize:(t,e)=>[e()*24|0,e()*60|0,e()*60|0]},toggle:{validate:(t,e)=>u(e)?/^(true|false|0|1)$/.test(e):x(e)||typeof e=="boolean",coerce:(t,e)=>e==="true"||e==="1"?!0:e==="false"||e==="0"?!1:!!e,randomize:(t,e)=>e()<.5},vector:{validate:(t,e)=>{let{dim:r,min:s,max:n}=t;return R(e)&&e.length===r&&e.every((i,m)=>i>=s[m]&&i<=n[m])},coerce:(t,e)=>{let{min:r,max:s,step:n}=t;return e.map((i,m)=>B(O(i,n[m]),r[m],s[m]))},randomize:(t,e)=>{let{dim:r,min:s,max:n,step:i}=t;return new Array(r).fill(0).map((m,p)=>B(O(L(s[p],n[p],e()),i[p]),s[p],n[p]))}},weighted:{validate:(t,e)=>!!t.options.find(r=>r[1]===e),randomize:(t,e)=>{let{options:r,total:s,default:n}=t,i=e()*s;for(let m=0,p=r.length;mR(e)&&e.length==2,coerce:(t,e)=>[ce(e[0]),ce(e[1])],randomize:(t,e)=>[e(),e()]}};math=V;params=Y;utils=k;time={debug:de,offline:le,raf:H};constructor(){window.addEventListener("message",t=>{let e=t.data;if(!(!this.isRecipient(t)||e?.__self))switch(e.type){case"genart:get-info":this.notifyInfo();break;case"genart:randomize-param":this.randomizeParamValue(e.paramID,e.key);break;case"genart:resume":this.start(!0);break;case"genart:configure":{let r=e.opts;delete r.id,delete r.allowExternalConfig,this.configure(r);break}case"genart:set-param-value":this.setParamValue(e.paramID,e.value,e.key);break;case"genart:start":this.start();break;case"genart:stop":this.stop();break}})}get version(){return"0.15.0"}get id(){return this._opts.id}get mode(){return this._adapter?.mode||"play"}get screen(){return this._adapter?.screen||{width:window.innerWidth,height:window.innerHeight,dpr:window.devicePixelRatio}}get random(){return this._prng?this._prng:this._prng=w(this._adapter,"missing platform adapter").prng}get state(){return this._state}get paramSpecs(){return this._params}get adapter(){return this._adapter}get timeProvider(){return this._time}registerParamType(t,e){Z(t),this._paramTypes[t]&&console.warn("overriding impl for param type:",t),this._paramTypes[t]=e}paramType(t){return Z(t),this._paramTypes[t]}async setParams(t){try{this._adapter?.augmentParams&&(t=this._adapter.augmentParams(t)),this._params={};for(let e in t){Q(e);let r={...Ue,...t[e]};if(r.default==null){let s=this.ensureParamImpl(r.type);if(s.randomize)r.default=s.randomize(r,this.random.rnd),r.state="random";else if(s.read)r.state="dynamic";else throw new Error(`missing default value for param: ${e}`)}else r.state="default";this._params[e]=r}return this._adapter&&(this._adapter.initParams&&await this._adapter.initParams(this._params),await this.updateParams()),this.notifySetParams(),(e,r,s)=>this.getParamValue(e,r,s)}catch(e){throw this.setState("error",e.message),e}}setTraits(t){this._traits=t,this.emit({type:"genart:traits",traits:t})}async setAdapter(t){this._adapter=t,this.notifyReady()}waitForAdapter(){return this.waitFor("_adapter")}setTimeProvider(t){this._time=t,this.notifyReady()}waitForTimeProvider(){return this.waitFor("_time")}setUpdate(t){this._update=t,this.notifyReady()}async updateParams(t="none"){if(this._adapter)for(let e in this._params){let r=this._params[e],s=await this._adapter.updateParam(e,r);if(!s)continue;let{value:n,update:i}=s;if(i)for(let m in i)this.setParamValue(e,i[m],m,"none");this.setParamValue(e,n,void 0,n!=null||i?t:"none")}}setParamValue(t,e,r,s="all"){let{spec:n,impl:i}=this.ensureParam(t);if(e!=null){let m=n;if(r){let{spec:p,impl:d}=this.ensureNestedParam(n,r);m=p,i=d}if(!i.validate(m,e)){this.paramError(t);return}n[r||"value"]=i.coerce?i.coerce(m,e):e,r||(n.state="custom")}this.emit({type:"genart:param-change",__self:!0,param:this.asNestedParam(n),paramID:t,key:r},s)}randomizeParamValue(t,e,r=Math.random,s="all"){let{spec:n,impl:{randomize:i}}=this.ensureParam(t),m=i&&n.randomize!==!1;if(e){let{spec:p,impl:d}=this.ensureNestedParam(n,e),o=d.randomize&&p.randomize!==!1;o&&this.setParamValue(t,d.randomize(p,r),e,o||!m?s:"none")}m&&this.setParamValue(t,i(n,r),void 0,s)}getParamValue(t,e=0,r){let{spec:s,impl:{randomize:n,read:i}}=this.ensureParam(t);return r&&n?n(s,r):i?i(s,e):s.value??s.default}paramError(t){this.emit({type:"genart:param-error",paramID:t})}configure(t){Object.assign(this._opts,t),this.notifyInfo()}on(t,e){window.addEventListener("message",r=>{this.isRecipient(r)&&r.data?.type===t&&e(r.data)})}emit(t,e="all"){if(e==="none")return;t.apiID=this.id;let r=e==="all";(r||e==="self")&&window.postMessage(t,"*"),(r&&parent!==window||e==="parent")&&parent.postMessage(t,"*")}start(t=!1){let e=this._state;if(e=="play")return;if(e!=="ready"&&e!=="stop")throw new Error(`can't start in state: ${e}`);this.setState("play");let r={type:"genart:frame",__self:!0,apiID:this.id,time:0,frame:0},s=(n,i)=>{this._state=="play"&&(this._update.call(null,n,i)?this._time.next(s):this.stop(),this._opts.notifyFrameUpdate&&(r.time=n,r.frame=i,this.emit(r)))};t||this._time.start(),this._time.next(s),this.emit({type:`genart:${t?"resume":"start"}`,__self:!0})}stop(){this._state==="play"&&(this.setState("stop"),this.emit({type:"genart:stop",__self:!0}))}capture(t){this._adapter?.capture(t),this.emit({type:"genart:capture",__self:!0},"parent")}setState(t,e){this._state=t,this.emit({type:"genart:state-change",__self:!0,state:t,info:e})}ensureParam(t){Q(t);let e=w(w(this._params,"no params defined")[t],`unknown param: ${t}`);return{spec:e,impl:this.ensureParamImpl(e.type)}}ensureParamImpl(t){return Z(t),w(this._paramTypes[t],`unknown param type: ${t}`)}ensureNestedParam(t,e){let r=w(this.ensureParamImpl(t.type).params?.[e],`param type '${t.type}' has no nested: ${e}`);return{spec:r,impl:this.ensureParamImpl(r.type)}}waitFor(t){return this[t]?Promise.resolve():new Promise(e=>{let r=()=>{this[t]?e():setTimeout(r,0)};r()})}notifySetParams(){this._params&&Object.keys(this._params).length&&this.emit({type:"genart:params",__self:!0,params:this.asNestedParams({},this._params)})}notifyReady(){this._state==="init"&&this._adapter&&this._time&&this._update&&this.setState("ready")}notifyInfo(){let[t,e]=this._time.now();this.emit({type:"genart:info",opts:this._opts,state:this._state,version:this.version,seed:this.random.seed,time:t,frame:e})}isRecipient({data:t}){return t!=null&&typeof t=="object"&&(t.apiID===this.id||t.apiID==="*")}asNestedParams(t,e){for(let r in e)t[r]=this.asNestedParam(e[r]);return t}asNestedParam(t){let e={...t},r=this._paramTypes[t.type];return r.params&&(e.__params=this.asNestedParams({},r.params)),e}},Q=(a,t="ID")=>w(!(a==="__proto__"||a==="prototype"||a==="constructor"),`illegal param ${t}: ${a}`),Z=a=>Q(a,"type");globalThis.$genart=new J;})(); +"use strict";(()=>{var he=Object.defineProperty;var U=(a,t)=>{for(var e in t)he(a,e,{get:t[e],enumerable:!0})};var F={};U(F,{clamp:()=>be,clamp01:()=>ie,div:()=>D,easeInOut5:()=>K,fit:()=>B,mix:()=>Te,norm:()=>ne,parseNum:()=>ye,round:()=>_e,smoothstep:()=>xe,smoothstep01:()=>V});var ye=(a,t=0)=>{let e=a?parseFloat(a):Number.NaN;return isNaN(e)?t:e},Te=(a,t,e)=>a+(t-a)*e,B=(a,t,e,r,s)=>r+(s-r)*ne(a,t,e),be=(a,t,e)=>ae?e:a,ie=a=>a<0?0:a>1?1:a,_e=(a,t)=>Math.round(D(a,t))*t,ne=(a,t,e)=>D(a-t,e-t),D=(a,t)=>t!=0?a/t:0,xe=(a,t,e)=>V(ie(D(e-a,t-a))),V=a=>a*a*(3-2*a),Ae=a=>{let t=2**(a-1);return e=>e<.5?t*e**a:1-(-2*e+2)**a/2},K=Ae(5);var H={};U(H,{choice:()=>q,color:()=>Se,date:()=>Ne,datetime:()=>Re,image:()=>Ce,numlist:()=>X,ramp:()=>De,range:()=>Ve,strlist:()=>Fe,text:()=>ze,time:()=>Ee,toggle:()=>$e,vector:()=>ke,weighted:()=>Ge,xy:()=>je});var k={};U(k,{ensure:()=>_,formatValuePrec:()=>Ie,isNumber:()=>$,isNumericArray:()=>Me,isString:()=>ve,isTypedArray:()=>oe,u16:()=>E,u24:()=>W,u32:()=>we,u8:()=>z,valuePrec:()=>me});var _=(a,t)=>{if(!a)throw new Error(t);return a},$=a=>typeof a=="number"&&!isNaN(a),ve=a=>typeof a=="string",Me=a=>oe(a)||Array.isArray(a)&&a.every($),oe=a=>!!a&&(a instanceof Float32Array||a instanceof Float64Array||a instanceof Uint32Array||a instanceof Int32Array||a instanceof Uint8Array||a instanceof Int8Array||a instanceof Uint16Array||a instanceof Int16Array||a instanceof Uint8ClampedArray),z=a=>(a&=255,(a<16?"0":"")+a.toString(16)),E=a=>z(a>>>8)+z(a),W=a=>E(a>>>8)+z(a&255),we=a=>E(a>>>16)+E(a),me=a=>{let t=a.toString(),e=t.indexOf(".");return e>0?t.length-e-1:0},Ie=a=>{let t=me(a);return e=>e.toFixed(t)};var l=(a,t,e=!0)=>({type:a,state:"void",randomize:e,...t}),q=a=>l("choice",a),Se=a=>l("color",a),Re=a=>l("datetime",a,!1),Ne=a=>l("date",a,!1),Ce=a=>l("img",{default:a.default||new Uint8Array(a.width*a.height),...a},!1),X=a=>l("numlist",{default:[],...a},!1),De=a=>l("ramp",{name:a.name,desc:a.desc,doc:a.doc,stops:a.stops?a.stops.flat():[0,0,1,1],mode:a.mode||"linear",default:0},!1),Ve=a=>l("range",{min:0,max:100,step:1,...a}),Fe=a=>l("strlist",{default:[],...a},!1),ze=a=>l("text",a,!1),Ee=a=>l("time",a),$e=a=>l("toggle",a),ke=a=>{let t=(e,r,s=0)=>Array.isArray(r)?(_(r.length===e,"wrong vector size"),r):new Array(e).fill($(r)?r:s);return a.default&&_(a.default.length==a.dim,`wrong vector size, expected ${a.dim} values`),a.labels?_(a.labels.length>=a.dim,`expected ${a.dim} labels`):_(a.dim<=4,"missing vector labels"),l("vector",{...a,min:t(a.dim,a.min,0),max:t(a.dim,a.max,1),step:t(a.dim,a.step,.01),labels:a.labels||["X","Y","Z","W"].slice(0,a.dim)})},Ge=a=>l("weighted",{...a,options:a.options.sort((t,e)=>e[0]-t[0]),total:a.options.reduce((t,e)=>t+e[0],0)}),je=a=>l("xy",a);var pe=(a,t,e=[])=>({head:()=>a[e[0]],push(r){for(;e.length&&t(a[e[e.length-1]],r);)e.pop();e.push(a.length-1)},shift(){e[0]===0&&e.shift();for(let r=e.length;r-- >0;)e[r]--}}),de=({targetFPS:a=60,period:t=200,width:e=t,height:r=100,style:s="position:fixed;z-index:9999;top:0;right:0;",bg:i="#222",text:n="#fff",fps:m=["#0f0","#ff0","#f00","#306"],fill:p=!0}={})=>{let d,o,ee=e/t,ue=e>=120,te=performance.now(),v=0,h=0,ae=0,y=[],R,M,c=a,N=0,re=!0,Pe=()=>{let g=[h,v],P=h-ae;if(ae=h,P<=0)return g;let C=1e3/P,w=y.push(C);R.push(C),M.push(C),w>t&&(w--,N-=y.shift(),R.shift(),M.shift()),N+=C;let{clamp01:O,round:ge}=$genart.math;c+=(M.head()*1.1-c)*.1;let I=o.createLinearGradient(0,0,0,d.height);I.addColorStop(O(1-a/c),m[0]),I.addColorStop(O(1-(a-1)/c),m[1]),I.addColorStop(O(1-a/2/c),m[2]),I.addColorStop(1,m[3]),o.fillStyle=i,o.fillRect(0,0,e,r),o[p?"fillStyle":"strokeStyle"]=I,o.setLineDash([]),o.beginPath(),o.moveTo(-1,r);for(let u=0;u90?30:c>30?15:5,T=ge(Math.min(a,c+u/2),u);T>0;T-=u){let b=(1-T/c)*r;o.moveTo(e-80,b),ue?(o.lineTo(e-22,b),o.fillText(String(T),e-20,b+1)):o.lineTo(e,b)}return o.stroke(),w>=t&&[[`sma(${t}):`,N/t],["max:",M.head()],["min:",R.head()]].forEach(([u,T],b)=>{let se=r-8-b*12;o.fillText(u,4,se),o.fillText(T.toFixed(1)+" fps",64,se)}),g};return{start(){y=[],R=pe(y,(g,P)=>g>=P),M=pe(y,(g,P)=>g<=P),c=a*1.2,N=0,d||(d=document.createElement("canvas"),d.width=e,d.height=r,d.id="#FPS",d.setAttribute("style",s),document.body.appendChild(d),o=d.getContext("2d"),o.font="12px sans-serif",o.textBaseline="middle",o.strokeStyle=n,o.setLineDash([1,1]))},next(g){requestAnimationFrame(P=>{re?(te=P,v=0,re=!1):v++,h=P-te,g(h,v),Pe()})},now(){return[h,v]}}};var le=(a=250,t=60,e=0)=>{let r=e,s=1e3/t;return{start(){r=e-1},next(i){setTimeout(()=>{r++,i(r*s,r)},a)},now:()=>[r*s,r]}};var Y=(a=0,t=0)=>{let e=performance.now(),r=t,s=a,i=!0;return{start(){i=!0},next(n){requestAnimationFrame(m=>{i?(e=m,r=t,i=!1):r++,s=a+m-e,n(s,r)})},now:()=>[s,r]}};var{ensure:A,isNumber:x,isString:f,isNumericArray:S}=k,{clamp:G,clamp01:ce,mix:j,norm:fe,round:L,parseNum:Le}=F,Oe={edit:"protected",group:"main",order:0,randomize:!0,update:"event",widget:"default"},J=class{_opts={id:Math.floor(Math.random()*1e12).toString(36),allowExternalConfig:!1,notifyFrameUpdate:!1};_adapter;_time=Y();_prng;_update;_state="init";_traits;_params;_paramTypes={choice:{validate:(t,e)=>!!t.options.find(r=>(Array.isArray(r)?r[0]:r)===e),randomize:(t,e)=>{let r=t.options,s=r[e()*r.length|0];return Array.isArray(s)?s[0]:s}},color:{validate:(t,e)=>f(e)&&/^#?[0-9a-f]{6}$/.test(e),coerce:(t,e)=>e[0]!=="#"?"#"+e:e,randomize:(t,e)=>"#"+W(e()*16777216|0)},date:{validate:(t,e)=>e instanceof Date||x(e)||f(e)&&/^\d{4}-\d{2}-\d{2}$/.test(e),coerce:(t,e)=>x(e)?new Date(e):f(e)?new Date(Date.parse(e)):e},datetime:{validate:(t,e)=>e instanceof Date||x(e)||f(e)&&/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[-+]\d{2}:\d{2})$/.test(e),coerce:(t,e)=>x(e)?new Date(e):f(e)?new Date(Date.parse(e)):e},img:{validate:(t,e)=>{let{width:r,height:s}=t;return S(e)&&e.length==r*s}},numlist:{validate:(t,e)=>S(e)},ramp:{validate:()=>!1,read:(t,e)=>{let{stops:r,mode:s}=t,i=r.length,n=i;for(;(n-=2)>=0&&!(e>=r[n]););i-=2;let m=r[n],p=r[n+1],d=r[n+2],o=r[n+3];return n<0?r[1]:n>=i?r[i+1]:{exp:()=>j(p,o,K(fe(e,m,d))),linear:()=>B(e,m,d,p,o),smooth:()=>j(p,o,V(fe(e,m,d)))}[s||"linear"]()},params:{stops:X({name:"Ramp stops",desc:"Control points",default:[]}),mode:q({name:"Ramp mode",desc:"Interpolation method",options:["linear","smooth","exp"]})}},range:{validate:(t,e)=>{let{min:r,max:s}=t;return x(e)&&e>=r&&e<=s},coerce:(t,e)=>{let r=t;return G(L(e??r.default,r.step||1),r.min,r.max)},randomize:(t,e)=>{let{min:r,max:s,step:i}=t;return G(L(j(r,s,e()),i||1),r,s)}},strlist:{validate:(t,e)=>Array.isArray(e)&&e.every(f)},text:{validate:(t,e)=>{if(!f(e))return!1;let{min:r,max:s,match:i}=t;return i&&!(f(i)?new RegExp(i):i).test(e)?!1:(!r||e.length>=r)&&(!s||e.length<=s)}},time:{validate:(t,e)=>S(e)||f(e)&&/^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(e),coerce:(t,e)=>f(e)?e.split(":").map(Le):e,randomize:(t,e)=>[e()*24|0,e()*60|0,e()*60|0]},toggle:{validate:(t,e)=>f(e)?/^(true|false|0|1)$/.test(e):x(e)||typeof e=="boolean",coerce:(t,e)=>e==="true"||e==="1"?!0:e==="false"||e==="0"?!1:!!e,randomize:(t,e)=>e()<.5},vector:{validate:(t,e)=>{let{dim:r,min:s,max:i}=t;return S(e)&&e.length===r&&e.every((n,m)=>n>=s[m]&&n<=i[m])},coerce:(t,e)=>{let{min:r,max:s,step:i}=t;return e.map((n,m)=>G(L(n,i[m]),r[m],s[m]))},randomize:(t,e)=>{let{dim:r,min:s,max:i,step:n}=t;return new Array(r).fill(0).map((m,p)=>G(L(j(s[p],i[p],e()),n[p]),s[p],i[p]))}},weighted:{validate:(t,e)=>!!t.options.find(r=>r[1]===e),randomize:(t,e)=>{let{options:r,total:s,default:i}=t,n=e()*s;for(let m=0,p=r.length;mS(e)&&e.length==2,coerce:(t,e)=>[ce(e[0]),ce(e[1])],randomize:(t,e)=>[e(),e()]}};math=F;params=H;utils=k;time={debug:de,offline:le,raf:Y};constructor(){window.addEventListener("message",t=>{let e=t.data;if(!(!this.isRecipient(t)||e?.__self))switch(e.type){case"genart:get-info":this.notifyInfo();break;case"genart:randomize-param":this.randomizeParamValue(e.paramID,e.key);break;case"genart:resume":this.start(!0);break;case"genart:configure":{let r=e.opts;delete r.id,delete r.allowExternalConfig,this.configure(r);break}case"genart:set-param-value":this.setParamValue(e.paramID,e.value,e.key);break;case"genart:start":this.start();break;case"genart:stop":this.stop();break}})}get version(){return"0.15.0"}get id(){return this._opts.id}get mode(){return this._adapter?.mode||"play"}get screen(){return this._adapter?.screen||{width:window.innerWidth,height:window.innerHeight,dpr:window.devicePixelRatio}}get random(){return this._prng?this._prng:this._prng=A(this._adapter,"missing platform adapter").prng}get state(){return this._state}get paramSpecs(){return this._params}get adapter(){return this._adapter}get timeProvider(){return this._time}registerParamType(t,e){Z(t),this._paramTypes[t]&&console.warn("overriding impl for param type:",t),this._paramTypes[t]=e}paramType(t){return Z(t),this._paramTypes[t]}async setParams(t){try{this._adapter?.augmentParams&&(t=this._adapter.augmentParams(t)),this._params={};for(let e in t){Q(e);let r={...Oe,...t[e]};if(r.default==null){let s=this.ensureParamImpl(r.type);if(s.randomize)r.default=s.randomize(r,this.random.rnd),r.state="random";else if(s.read)r.state="dynamic";else throw new Error(`missing default value for param: ${e}`)}else r.state="default";this._params[e]=r}return this._adapter&&(this._adapter.initParams&&await this._adapter.initParams(this._params),await this.updateParams()),this.notifySetParams(),(e,r,s)=>this.getParamValue(e,r,s)}catch(e){throw this.setState("error",e.message),e}}setTraits(t){this._traits=t,this.emit({type:"genart:traits",traits:t})}async setAdapter(t){this._adapter=t,this.notifyReady()}waitForAdapter(){return this.waitFor("_adapter")}setTimeProvider(t){this._time=t,this.notifyReady()}waitForTimeProvider(){return this.waitFor("_time")}setUpdate(t){this._update=t,this.notifyReady()}async updateParams(t="none"){if(this._adapter)for(let e in this._params){let r=this._params[e],s=await this._adapter.updateParam(e,r);if(!s)continue;let{value:i,update:n}=s;if(n)for(let m in n)this.setParamValue(e,n[m],m,"none");this.setParamValue(e,i,void 0,i!=null||n?t:"none")}}setParamValue(t,e,r,s="all"){let{spec:i,impl:n}=this.ensureParam(t);if(e!=null){let m=i;if(r){let{spec:p,impl:d}=this.ensureNestedParam(i,r);m=p,n=d}if(!n.validate(m,e)){this.paramError(t);return}i[r||"value"]=n.coerce?n.coerce(m,e):e,r||(i.state="custom")}this.emit({type:"genart:param-change",__self:!0,param:this.asNestedParam(i),paramID:t,key:r},s)}randomizeParamValue(t,e,r=Math.random,s="all"){let{spec:i,impl:{randomize:n}}=this.ensureParam(t),m=n&&i.randomize!==!1;if(e){let{spec:p,impl:d}=this.ensureNestedParam(i,e),o=d.randomize&&p.randomize!==!1;o&&this.setParamValue(t,d.randomize(p,r),e,o||!m?s:"none")}m&&this.setParamValue(t,n(i,r),void 0,s)}getParamValue(t,e=0,r){let{spec:s,impl:{randomize:i,read:n}}=this.ensureParam(t);return r&&i?i(s,r):n?n(s,e):s.value??s.default}paramError(t){this.emit({type:"genart:param-error",paramID:t})}configure(t){Object.assign(this._opts,t),this.notifyInfo()}on(t,e){window.addEventListener("message",r=>{this.isRecipient(r)&&r.data?.type===t&&e(r.data)})}emit(t,e="all"){if(e==="none")return;t.apiID=this.id;let r=e==="all";(r||e==="self")&&window.postMessage(t,"*"),(r&&parent!==window||e==="parent")&&parent.postMessage(t,"*")}start(t=!1){let e=this._state;if(e=="play")return;if(e!=="ready"&&e!=="stop")throw new Error(`can't start in state: ${e}`);this.setState("play");let r={type:"genart:frame",__self:!0,apiID:this.id,time:0,frame:0},s=(i,n)=>{this._state=="play"&&(this._update.call(null,i,n)?this._time.next(s):this.stop(),this._opts.notifyFrameUpdate&&(r.time=i,r.frame=n,this.emit(r)))};t||this._time.start(),this._time.next(s),this.emit({type:`genart:${t?"resume":"start"}`,__self:!0})}stop(){this._state==="play"&&(this.setState("stop"),this.emit({type:"genart:stop",__self:!0}))}capture(t){this._adapter?.capture(t),this.emit({type:"genart:capture",__self:!0},"parent")}setState(t,e){this._state=t,this.emit({type:"genart:state-change",__self:!0,state:t,info:e})}ensureParam(t){Q(t);let e=A(A(this._params,"no params defined")[t],`unknown param: ${t}`);return{spec:e,impl:this.ensureParamImpl(e.type)}}ensureParamImpl(t){return Z(t),A(this._paramTypes[t],`unknown param type: ${t}`)}ensureNestedParam(t,e){let r=A(this.ensureParamImpl(t.type).params?.[e],`param type '${t.type}' has no nested: ${e}`);return{spec:r,impl:this.ensureParamImpl(r.type)}}waitFor(t){return this[t]?Promise.resolve():new Promise(e=>{let r=()=>{this[t]?e():setTimeout(r,0)};r()})}notifySetParams(){this._params&&Object.keys(this._params).length&&this.emit({type:"genart:params",__self:!0,params:this.asNestedParams({},this._params)})}notifyReady(){this._state==="init"&&this._adapter&&this._time&&this._update&&this.setState("ready")}notifyInfo(){let[t,e]=this._time.now();this.emit({type:"genart:info",opts:this._opts,state:this._state,version:this.version,seed:this.random.seed,time:t,frame:e})}isRecipient({data:t}){return t!=null&&typeof t=="object"&&(t.apiID===this.id||t.apiID==="*")}asNestedParams(t,e){for(let r in e)t[r]=this.asNestedParam(e[r]);return t}asNestedParam(t){let e={...t},r=this._paramTypes[t.type];return r.params&&(e.__params=this.asNestedParams({},r.params)),e}},Q=(a,t="ID")=>A(!(a==="__proto__"||a==="prototype"||a==="constructor"),`illegal param ${t}: ${a}`),Z=a=>Q(a,"type");globalThis.$genart=new J;})(); diff --git a/examples/p5-basic/public/lib/p5.min.js b/examples/p5-basic/lib/p5.min.js similarity index 100% rename from examples/p5-basic/public/lib/p5.min.js rename to examples/p5-basic/lib/p5.min.js diff --git a/examples/p5-basic/package.json b/examples/p5-basic/package.json index 14795bc..8913597 100644 --- a/examples/p5-basic/package.json +++ b/examples/p5-basic/package.json @@ -7,15 +7,16 @@ "license": "MIT", "type": "module", "scripts": { - "build:prepare": "cp ../../dist/*.js public/lib", + "build:prepare": "node ../../tools/copy-lib.js", "start": "yarn build:prepare && vite --host --open", - "build": "yarn build:prepare && vite build --base='./'", + "build": "yarn build:prepare && vite build --base='./' && cp -R lib dist", "preview": "vite preview --host --open" }, + "dependencies": { + "@genart-api/core": "workspace:^" + }, "devDependencies": { - "vite": "^5.4.10", + "vite": "^5.4.11", "vite-plugin-html": "^3.2.2" - }, - "dependencies": {}, - "sideEffects": false + } } diff --git a/examples/p5-basic/yarn.lock b/examples/p5-basic/yarn.lock deleted file mode 100644 index 3b2c5aa..0000000 --- a/examples/p5-basic/yarn.lock +++ /dev/null @@ -1,848 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/source-map@^0.3.3": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" - integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@rollup/pluginutils@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" - integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - -"@rollup/rollup-android-arm-eabi@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz#1661ff5ea9beb362795304cb916049aba7ac9c54" - integrity sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA== - -"@rollup/rollup-android-arm64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz#2ffaa91f1b55a0082b8a722525741aadcbd3971e" - integrity sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA== - -"@rollup/rollup-darwin-arm64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz#627007221b24b8cc3063703eee0b9177edf49c1f" - integrity sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA== - -"@rollup/rollup-darwin-x64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz#0605506142b9e796c370d59c5984ae95b9758724" - integrity sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz#62dfd196d4b10c0c2db833897164d2d319ee0cbb" - integrity sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA== - -"@rollup/rollup-linux-arm-musleabihf@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz#53ce72aeb982f1f34b58b380baafaf6a240fddb3" - integrity sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw== - -"@rollup/rollup-linux-arm64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz#1632990f62a75c74f43e4b14ab3597d7ed416496" - integrity sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA== - -"@rollup/rollup-linux-arm64-musl@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz#8c03a996efb41e257b414b2e0560b7a21f2d9065" - integrity sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz#5b98729628d5bcc8f7f37b58b04d6845f85c7b5d" - integrity sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw== - -"@rollup/rollup-linux-riscv64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz#48e42e41f4cabf3573cfefcb448599c512e22983" - integrity sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg== - -"@rollup/rollup-linux-s390x-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz#e0b4f9a966872cb7d3e21b9e412a4b7efd7f0b58" - integrity sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g== - -"@rollup/rollup-linux-x64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz#78144741993100f47bd3da72fce215e077ae036b" - integrity sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A== - -"@rollup/rollup-linux-x64-musl@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz#d9fe32971883cd1bd858336bd33a1c3ca6146127" - integrity sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ== - -"@rollup/rollup-win32-arm64-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz#71fa3ea369316db703a909c790743972e98afae5" - integrity sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ== - -"@rollup/rollup-win32-ia32-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz#653f5989a60658e17d7576a3996deb3902e342e2" - integrity sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ== - -"@rollup/rollup-win32-x64-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz#0574d7e87b44ee8511d08cc7f914bcb802b70818" - integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw== - -"@types/estree@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -acorn@^8.8.2: - version "8.13.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -async@^3.2.3: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -chalk@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -clean-css@^5.2.2: - version "5.3.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" - integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== - dependencies: - source-map "~0.6.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.16: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -consola@^2.15.3: - version "2.15.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== - -css-select@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-expand@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz#29016757455bcc748469c83a19b36aaf2b83dd6e" - integrity sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg== - -dotenv@^16.0.0: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== - -ejs@^3.1.6: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -fast-glob@^3.2.11: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -fs-extra@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -he@1.2.0, he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -html-minifier-terser@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -jake@^10.8.5: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-html-parser@^5.3.3: - version "5.4.2" - resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-5.4.2.tgz#93e004038c17af80226c942336990a0eaed8136a" - integrity sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw== - dependencies: - css-select "^4.2.1" - he "1.2.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pathe@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.2.0.tgz#30fd7bbe0a0d91f0e60bae621f5d19e9e225c339" - integrity sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw== - -picocolors@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -postcss@^8.4.43: - version "8.4.47" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.0" - source-map-js "^1.2.1" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rollup@^4.20.0: - version "4.24.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.24.0.tgz#c14a3576f20622ea6a5c9cad7caca5e6e9555d05" - integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.24.0" - "@rollup/rollup-android-arm64" "4.24.0" - "@rollup/rollup-darwin-arm64" "4.24.0" - "@rollup/rollup-darwin-x64" "4.24.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.24.0" - "@rollup/rollup-linux-arm-musleabihf" "4.24.0" - "@rollup/rollup-linux-arm64-gnu" "4.24.0" - "@rollup/rollup-linux-arm64-musl" "4.24.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0" - "@rollup/rollup-linux-riscv64-gnu" "4.24.0" - "@rollup/rollup-linux-s390x-gnu" "4.24.0" - "@rollup/rollup-linux-x64-gnu" "4.24.0" - "@rollup/rollup-linux-x64-musl" "4.24.0" - "@rollup/rollup-win32-arm64-msvc" "4.24.0" - "@rollup/rollup-win32-ia32-msvc" "4.24.0" - "@rollup/rollup-win32-x64-msvc" "4.24.0" - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -terser@^5.10.0: - version "5.36.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.36.0.tgz#8b0dbed459ac40ff7b4c9fd5a3a2029de105180e" - integrity sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tslib@^2.0.3: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" - integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -vite-plugin-html@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz#661834fa09015d3fda48ba694dbaa809396f5f7a" - integrity sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q== - dependencies: - "@rollup/pluginutils" "^4.2.0" - colorette "^2.0.16" - connect-history-api-fallback "^1.6.0" - consola "^2.15.3" - dotenv "^16.0.0" - dotenv-expand "^8.0.2" - ejs "^3.1.6" - fast-glob "^3.2.11" - fs-extra "^10.0.1" - html-minifier-terser "^6.1.0" - node-html-parser "^5.3.3" - pathe "^0.2.0" - -vite@^5.4.10: - version "5.4.10" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.10.tgz#d358a7bd8beda6cf0f3b7a450a8c7693a4f80c18" - integrity sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" - optionalDependencies: - fsevents "~2.3.3" diff --git a/examples/param-custom/index.html b/examples/param-custom/index.html index 3ce2c2c..79fafab 100644 --- a/examples/param-custom/index.html +++ b/examples/param-custom/index.html @@ -9,6 +9,9 @@ +