From c60b2d5533cebac84943abf3cb29ec5b10cea4e2 Mon Sep 17 00:00:00 2001 From: Evie Finch Date: Sun, 2 Nov 2025 12:00:19 -0600 Subject: [PATCH 1/4] refined --- src/stories/Button.svelte | 44 ++++---- src/stories/SparklyText.stories.svelte | 19 ---- src/stories/SparklyText.svelte | 31 ------ src/stories/SparklyText/SparklyText.mdx | 13 +++ .../SparklyText/SparklyText.stories.svelte | 35 ++++++ src/stories/SparklyText/SparklyText.svelte | 56 ++++++++++ .../sparkly-text.ts | 102 +++++++++--------- 7 files changed, 179 insertions(+), 121 deletions(-) delete mode 100644 src/stories/SparklyText.stories.svelte delete mode 100644 src/stories/SparklyText.svelte create mode 100644 src/stories/SparklyText/SparklyText.mdx create mode 100644 src/stories/SparklyText/SparklyText.stories.svelte create mode 100644 src/stories/SparklyText/SparklyText.svelte rename src/stories/{sparkly-text => SparklyText}/sparkly-text.ts (76%) diff --git a/src/stories/Button.svelte b/src/stories/Button.svelte index c34befe..a4abdc6 100644 --- a/src/stories/Button.svelte +++ b/src/stories/Button.svelte @@ -1,30 +1,30 @@ diff --git a/src/stories/SparklyText.stories.svelte b/src/stories/SparklyText.stories.svelte deleted file mode 100644 index bdb94f9..0000000 --- a/src/stories/SparklyText.stories.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/src/stories/SparklyText.svelte b/src/stories/SparklyText.svelte deleted file mode 100644 index e6a95f8..0000000 --- a/src/stories/SparklyText.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - - {label} - diff --git a/src/stories/SparklyText/SparklyText.mdx b/src/stories/SparklyText/SparklyText.mdx new file mode 100644 index 0000000..9e1e303 --- /dev/null +++ b/src/stories/SparklyText/SparklyText.mdx @@ -0,0 +1,13 @@ +import { Canvas, Meta } from '@storybook/addon-docs/blocks'; + +import * as SparklyTextStories from './SparklyText.stories.svelte'; + + + +# Checkbox + +A checkbox is a square box that can be activated or deactivated when ticked. + +Use checkboxes to select one or more options from a list of choices. + + diff --git a/src/stories/SparklyText/SparklyText.stories.svelte b/src/stories/SparklyText/SparklyText.stories.svelte new file mode 100644 index 0000000..5120a87 --- /dev/null +++ b/src/stories/SparklyText/SparklyText.stories.svelte @@ -0,0 +1,35 @@ + + + ({ render: () => 'Sparkly Text' })) }} +> diff --git a/src/stories/SparklyText/SparklyText.svelte b/src/stories/SparklyText/SparklyText.svelte new file mode 100644 index 0000000..448404f --- /dev/null +++ b/src/stories/SparklyText/SparklyText.svelte @@ -0,0 +1,56 @@ + + +{#key allowPausing} + {#key sparkleAmount} + + {@render children?.()} + + {/key} +{/key} + + diff --git a/src/stories/sparkly-text/sparkly-text.ts b/src/stories/SparklyText/sparkly-text.ts similarity index 76% rename from src/stories/sparkly-text/sparkly-text.ts rename to src/stories/SparklyText/sparkly-text.ts index c6e107e..ed07c81 100644 --- a/src/stories/sparkly-text/sparkly-text.ts +++ b/src/stories/SparklyText/sparkly-text.ts @@ -1,12 +1,16 @@ +type Attributes = "sparkle-amount" | "sparkle-rate" | "sparkle-variance" | "disabled" | "allow-pausing"; const css = String.raw; const motionOK = window.matchMedia("(prefers-reduced-motion: no-preference)"); +// window.setTimeout returns a number for some reason class SparklyText extends HTMLElement { static tagName = "sparkly-text"; #disabled; // allowPausing is NOT reactive. #allowPausing; + #sparkleRate; + #sparkleVariance; static get observedAttributes() { return ["sparkle-amount", "sparkle-rate", "sparkle-variance", "disabled", "allow-pausing"]; @@ -23,17 +27,14 @@ class SparklyText extends HTMLElement { } get sparkleRate() { // default rate is an average of 1 sparkle every 250ms - const strVal = this.getAttribute("sparkle-rate") ?? String(250); - return parseInt(strVal); + return this.#sparkleRate; } set sparkleRate(value) { const newvalue = Number(value); this.setAttribute("sparkle-rate", newvalue.toString()); } get sparkleVariance() { - // default variance of +-200ms - const strVal = this.getAttribute("sparkle-variance") ?? String(200); - return parseInt(strVal); + return this.#sparkleVariance; } set sparkleVariance(value) { const newvalue = Number(value); @@ -46,8 +47,9 @@ class SparklyText extends HTMLElement { this.#disabled = value; const currentAttr = this.getAttribute("disabled") !== null; // Don't trigger if already equal + if (currentAttr !== this.#disabled) { - if (this.#disabled) { + if (value) { this.setAttribute("disabled", ""); } else { this.removeAttribute("disabled"); @@ -60,12 +62,11 @@ class SparklyText extends HTMLElement { --_sparkle-base-size: var(--sparkly-text-size, 15px); --_sparkle-base-animation-length: var(--sparkly-text-animation-length, 900ms); --_sparkle-base-color: var(--sparkly-text-color, #FFC700); - --_sparkle-base-text-shadow-color: var(--sparkly-text-shadow-color, none) + --_sparkle-base-text-shadow-color: var(--sparkly-text-shadow-color, none); display: inline-block; isolation: isolate; - text-shadow: var(--_sparkle-base-text-shadow-color, none); - text-shadow: 0 0 3px white,0px 0px 1px white; + text-shadow: 0 0 3px var(--_sparkle-base-text-shadow-color, none),0px 0px 1px var(--_sparkle-base-text-shadow-color, none); position: relative; z-index: 0; } @@ -90,10 +91,10 @@ class SparklyText extends HTMLElement { @media (prefers-reduced-motion: no-preference) { span[data-animation-active="true"] { - animation: comeInOut 900ms forwards; + animation: comeInOut var(--_sparkle-base-animation-length, 900ms) forwards; } span[data-animation-active="true"] svg { - animation: spin 1000ms linear; + animation: spin calc(var(--_sparkle-base-animation-length, 900ms) + 100ms) linear; } span[data-animation-active="false"] { opacity: 0; @@ -135,6 +136,8 @@ class SparklyText extends HTMLElement { super(); this.#disabled = false; this.#allowPausing = true; + this.#sparkleRate = 250; + this.#sparkleVariance = 200; let shadowroot = this.attachShadow({ mode: "open" }); let sheet = new CSSStyleSheet(); @@ -147,7 +150,7 @@ class SparklyText extends HTMLElement { connectedCallback() { this.#disabled = this.getAttribute("disabled") !== null; - this.#allowPausing = Boolean(this.getAttribute("allow-pausing") ?? true); + this.#allowPausing = this.getAttribute("allow-pausing") === null || !(this.getAttribute("allow-pausing") === "false"); // if we're allowing pausing, then move the slot into the button if (this.#allowPausing) { @@ -159,7 +162,6 @@ class SparklyText extends HTMLElement { } motionOK.addEventListener("change", this.motionOkChange); - // steps: create sparkles. add them to shadow root. begin animating if (!motionOK.matches) { this.generateSparkles(Math.floor(this.numberOfSparkles / 2)); this.shadowRoot!.querySelectorAll("span[data-animation-active]").forEach((sparkle) => this.#styleSparkle(sparkle as HTMLElement)); @@ -181,8 +183,17 @@ class SparklyText extends HTMLElement { pauseSparkles = () => { this.disabled = !this.disabled; } + attributeChangedCallback(name: Attributes, _: string, current: string) { + console.log("name: " + name + " current: " + current) + switch (name) { + case "sparkle-rate": this.#sparkleRate = parseInt(current); break; + case "sparkle-variance": this.#sparkleVariance = parseInt(current); break; + default: return; + } + } + cleanupSparkles() { - const sparkles = this.shadowRoot?.querySelectorAll("span > svg"); + const sparkles = this.shadowRoot!.querySelectorAll("span"); sparkles?.forEach((sparkle) => sparkle.remove()); } @@ -207,51 +218,44 @@ class SparklyText extends HTMLElement { } sparkleSparkles() { - setRandomInterval(() => { - if (this.disabled) { - return; - } - let availableSparkle = this.shadowRoot!.querySelector('span[data-animation-active="false"]') as HTMLElement; - if (availableSparkle === null) { - return; + let timeout; + const runInterval = () => { + const callback = () => { + if (this.disabled) { + return; + } + let availableSparkle = this.shadowRoot!.querySelector('span[data-animation-active="false"]') as HTMLElement | null; + if (availableSparkle === null) { + return; + } + this.#styleSparkle(availableSparkle); + availableSparkle.dataset.animationActive = "true"; + } - this.#styleSparkle(availableSparkle); - availableSparkle.dataset.animationActive = "true"; - }, - this.sparkleRate - this.sparkleVariance, - this.sparkleRate + this.sparkleVariance - ); + timeout = window.setTimeout(() => { + callback(); + runInterval(); + }, randomRange(Math.max(this.sparkleRate - this.sparkleVariance, 0), this.sparkleRate + this.sparkleVariance)); + } + runInterval(); } #styleSparkle(sparkle: HTMLElement) { - sparkle.style.top = randomRange(5, 105) + "%"; - sparkle.style.left = randomRange(0, 100) + "%"; - sparkle.style.zIndex = `${Math.random() > 0.5 ? 3 : -1}`; const sizeModifier = `calc(var(--_sparkle-base-size, 15px) / 3 * ${(Math.random() * 2) + 2})` + if (Math.random() > 0.5) { + sparkle.style.top = `${randomRange(0, 50)}%`; + sparkle.style.bottom = ''; + } else { + sparkle.style.bottom = `-${randomRange(0, 50)}%`; + sparkle.style.top = ''; + } + sparkle.style.left = `${randomRange(0, 100)}%`; + sparkle.style.zIndex = `${Math.random() > 0.5 ? 3 : -1}`; sparkle.style.width = sizeModifier; sparkle.style.height = sizeModifier; } } - -function setRandomInterval(intervalCallback: () => void, minDelay: number, maxDelay: number) { - let timeout: number; - const runInterval = () => { - timeout = window.setTimeout(() => { - intervalCallback(); - runInterval(); - }, randomRange(minDelay, maxDelay)); - }; - - runInterval(); - - return { - clear() { - clearTimeout(timeout); - } - }; -} - function randomRange(min: number, max: number) { const range = Math.floor(Math.random() * (max - min + 1)) + min; return range; From d0f497a0f80242cbd3f87271634e21a1e813b04a Mon Sep 17 00:00:00 2001 From: Evie Finch Date: Mon, 3 Nov 2025 16:37:33 -0600 Subject: [PATCH 2/4] new: sparkly-text component, as well as documentation explaining it --- .storybook/main.ts | 42 +- package-lock.json | 1349 +++++++++++++++-- package.json | 5 +- src/stories/SparklyText/SparklyText.mdx | 108 +- .../SparklyText/SparklyText.stories.svelte | 33 + src/stories/SparklyText/sparkly-text.ts | 12 +- src/stories/assets/SCR-20251103-nonj.png | Bin 0 -> 31407 bytes 7 files changed, 1371 insertions(+), 178 deletions(-) create mode 100644 src/stories/assets/SCR-20251103-nonj.png diff --git a/.storybook/main.ts b/.storybook/main.ts index a429e07..633bf73 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -1,20 +1,30 @@ import type { StorybookConfig } from '@storybook/sveltekit'; +import remarkGfm from 'remark-gfm'; const config: StorybookConfig = { - "stories": [ - "../src/**/*.mdx", - "../src/**/*.stories.@(js|ts|svelte)" - ], - "addons": [ - "@storybook/addon-svelte-csf", - "@chromatic-com/storybook", - "@storybook/addon-docs", - "@storybook/addon-a11y", - "@storybook/addon-vitest" - ], - "framework": { - "name": "@storybook/sveltekit", - "options": {} - } + "stories": [ + "../src/**/*.mdx", + "../src/**/*.stories.@(js|ts|svelte)" + ], + "addons": [ + "@storybook/addon-svelte-csf", + "@chromatic-com/storybook", + { + name: '@storybook/addon-docs', + options: { + mdxPluginOptions: { + mdxCompileOptions: { + remarkPlugins: [remarkGfm], + }, + }, + }, + }, + "@storybook/addon-a11y", + "@storybook/addon-vitest" + ], + "framework": { + "name": "@storybook/sveltekit", + "options": {} + } }; -export default config; \ No newline at end of file +export default config; diff --git a/package-lock.json b/package-lock.json index 4994fb7..e34134b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "nsg-common-components", "version": "0.0.1", + "dependencies": { + "remark-gfm": "^4.0.1" + }, "devDependencies": { "@chromatic-com/storybook": "^4.1.1", "@eslint/compat": "^1.2.5", @@ -48,12 +51,14 @@ "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", + "dev": true, "license": "MIT" }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -68,6 +73,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -77,6 +83,7 @@ "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -110,6 +117,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -126,6 +134,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -142,6 +151,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -158,6 +168,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -174,6 +185,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -190,6 +202,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -206,6 +219,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -222,6 +236,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -238,6 +253,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -254,6 +270,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -270,6 +287,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -286,6 +304,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -302,6 +321,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -318,6 +338,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -334,6 +355,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -350,6 +372,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -366,6 +389,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -382,6 +406,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -398,6 +423,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -414,6 +440,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -430,6 +457,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -446,6 +474,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -462,6 +491,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -478,6 +508,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -494,6 +525,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -510,6 +542,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -779,6 +812,7 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -792,21 +826,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.4.0.tgz", - "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==", - "license": "BSD-3-Clause" - }, - "node_modules/@lit/reactive-element": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.1.tgz", - "integrity": "sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.4.0" - } - }, "node_modules/@mdx-js/react": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", @@ -897,6 +916,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -910,6 +930,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -923,6 +944,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -936,6 +958,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -949,6 +972,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -962,6 +986,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -975,6 +1000,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -988,6 +1014,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1001,6 +1028,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1014,6 +1042,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1027,6 +1056,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1040,6 +1070,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1053,6 +1084,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1066,6 +1098,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1079,6 +1112,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1092,6 +1126,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1105,6 +1140,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1118,6 +1154,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1131,6 +1168,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1144,6 +1182,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1157,6 +1196,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1318,6 +1358,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", + "dev": true, "license": "MIT" }, "node_modules/@storybook/icons": { @@ -1424,82 +1465,6 @@ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/@storybook/web-components": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-9.1.13.tgz", - "integrity": "sha512-fVPpD0WfBiAI65a3azyC/8CeFSF4iiRGNHmwjVOHBVEJ7fb53dFvSxbCq/i8j8xJesvBI9RbqSNWQxp4rK26tw==", - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "lit": "^2.0.0 || ^3.0.0", - "storybook": "^9.1.13" - } - }, - "node_modules/@storybook/web-components-vite": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@storybook/web-components-vite/-/web-components-vite-9.1.13.tgz", - "integrity": "sha512-mjdNzLzPEo1HHyDJbfdErxMGY5ctYL5hCy/qrRlxNfHTE/4nSMTfjuFhsMmmVmGBNVDiCLjTaJ/bhSYPkesugg==", - "license": "MIT", - "dependencies": { - "@storybook/builder-vite": "9.1.13", - "@storybook/web-components": "9.1.13" - }, - "engines": { - "node": ">=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^9.1.13" - } - }, - "node_modules/@storybook/web-components-vite/node_modules/@storybook/builder-vite": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-9.1.13.tgz", - "integrity": "sha512-pmtIjU02ASJOZKdL8DoxWXJgZnpTDgD5WmMnjKJh9FaWmc2YiCW2Y6VRxPox96OM655jYHQe5+UIbk3Cwtwb4A==", - "license": "MIT", - "dependencies": { - "@storybook/csf-plugin": "9.1.13", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^9.1.13", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/@storybook/web-components-vite/node_modules/@storybook/csf-plugin": { - "version": "9.1.13", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-9.1.13.tgz", - "integrity": "sha512-EMpzYuyt9FDcxxfBChWzfId50y8QMpdenviEQ8m+pa6c+ANx3pC5J6t7y0khD8TQu815sTy+nc6cc8PC45dPUA==", - "license": "MIT", - "dependencies": { - "unplugin": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^9.1.13" - } - }, "node_modules/@sveltejs/acorn-typescript": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", @@ -1627,6 +1592,7 @@ "version": "10.4.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -1647,6 +1613,7 @@ "version": "6.8.0", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.8.0.tgz", "integrity": "sha512-WgXcWzVM6idy5JaftTVC8Vs83NKRmGJz4Hqs4oyOuO2J4r/y79vvKZsb+CaGyCSEbUPI6OsewfPd0G1A0/TUZQ==", + "dev": true, "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", @@ -1666,12 +1633,14 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, "license": "MIT" }, "node_modules/@testing-library/user-event": { "version": "14.6.1", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, "license": "MIT", "engines": { "node": ">=12", @@ -1685,12 +1654,14 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, "license": "MIT" }, "node_modules/@types/chai": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, "license": "MIT", "dependencies": { "@types/deep-eql": "*" @@ -1703,16 +1674,27 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -1722,6 +1704,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mdx": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", @@ -1729,11 +1720,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.18.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.3.tgz", "integrity": "sha512-gTVM8js2twdtqM+AE2PdGEe9zGQY4UvmFjan9rZcVb6FGdStfjWoWejdmy4CfWVO9rh5MiYQGZloKAGkJt8lMw==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -1751,10 +1748,10 @@ "csstype": "^3.0.2" } }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -2057,6 +2054,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", @@ -2073,6 +2071,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, "license": "MIT", "dependencies": { "@vitest/spy": "3.2.4", @@ -2099,6 +2098,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, "license": "MIT", "dependencies": { "tinyrainbow": "^2.0.0" @@ -2142,6 +2142,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, "license": "MIT", "dependencies": { "tinyspy": "^4.0.3" @@ -2154,6 +2155,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, "license": "MIT", "dependencies": { "@vitest/pretty-format": "3.2.4", @@ -2168,6 +2170,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "peer": true, "bin": { @@ -2208,6 +2211,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2240,6 +2244,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" @@ -2249,6 +2254,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2258,6 +2264,7 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.1" @@ -2286,6 +2293,16 @@ "node": ">= 0.4" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2297,6 +2314,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, "license": "MIT", "dependencies": { "open": "^8.0.4" @@ -2349,10 +2367,21 @@ "node": ">=6" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", @@ -2382,10 +2411,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 16" @@ -2497,6 +2537,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, "license": "MIT" }, "node_modules/cssesc": { @@ -2536,6 +2577,19 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dedent": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", @@ -2562,6 +2616,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2588,6 +2643,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2609,10 +2665,24 @@ "dev": true, "license": "MIT" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, "license": "MIT" }, "node_modules/es-module-lexer": { @@ -2637,6 +2707,7 @@ "version": "0.25.9", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "dev": true, "hasInstallScript": true, "license": "MIT", "peer": true, @@ -2679,6 +2750,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.4" @@ -2888,6 +2960,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -2947,6 +3020,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -2972,6 +3046,12 @@ "node": ">=12.0.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3111,6 +3191,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3213,6 +3294,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3222,6 +3304,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -3266,6 +3349,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-reference": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", @@ -3280,6 +3375,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "license": "MIT", "dependencies": { "is-docker": "^2.0.0" @@ -3299,6 +3395,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -3399,38 +3496,6 @@ "node": ">=10" } }, - "node_modules/lit": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.1.tgz", - "integrity": "sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@lit/reactive-element": "^2.1.0", - "lit-element": "^4.2.0", - "lit-html": "^3.3.0" - } - }, - "node_modules/lit-element": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.1.tgz", - "integrity": "sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.4.0", - "@lit/reactive-element": "^2.1.0", - "lit-html": "^3.3.0" - } - }, - "node_modules/lit-html": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.1.tgz", - "integrity": "sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==", - "license": "BSD-3-Clause", - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", @@ -3461,10 +3526,21 @@ "dev": true, "license": "MIT" }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loupe": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, "license": "MIT" }, "node_modules/lower-case": { @@ -3481,6 +3557,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, "license": "MIT", "bin": { "lz-string": "bin/bin.js" @@ -3490,39 +3567,815 @@ "version": "0.30.19", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "license": "MIT", - "engines": { - "node": ">= 8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": ">=8.6" - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -3571,6 +4424,7 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -3607,6 +4461,7 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", @@ -3732,6 +4587,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 14.16" @@ -3741,6 +4597,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -3793,6 +4650,7 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3940,7 +4798,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peer": true, "bin": { @@ -3968,6 +4826,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1", @@ -3982,6 +4841,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4096,6 +4956,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, "license": "MIT" }, "node_modules/readdirp": { @@ -4116,6 +4977,7 @@ "version": "0.23.11", "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", + "dev": true, "license": "MIT", "dependencies": { "ast-types": "^0.16.1", @@ -4132,6 +4994,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, "license": "MIT", "dependencies": { "indent-string": "^4.0.0", @@ -4141,6 +5004,55 @@ "node": ">=8" } }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4166,6 +5078,7 @@ "version": "4.50.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -4250,6 +5163,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4321,6 +5235,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -4330,6 +5245,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -4353,6 +5269,7 @@ "version": "9.1.13", "resolved": "https://registry.npmjs.org/storybook/-/storybook-9.1.13.tgz", "integrity": "sha512-G3KZ36EVzXyHds72B/qtWiJnhUpM0xOUeYlDcO9DSHL1bDTv15cW4+upBl+mcBZrDvU838cn7Bv4GpF+O5MCfw==", + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -4418,6 +5335,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, "license": "MIT", "dependencies": { "min-indent": "^1.0.0" @@ -4654,6 +5572,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true, "license": "MIT" }, "node_modules/tinybench": { @@ -4674,6 +5593,7 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -4690,6 +5610,7 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -4707,6 +5628,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -4730,6 +5652,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" @@ -4739,6 +5662,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" @@ -4767,6 +5691,16 @@ "node": ">=6" } }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", @@ -4784,6 +5718,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.10" @@ -4793,6 +5728,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, "license": "0BSD" }, "node_modules/type-check": { @@ -4864,9 +5800,83 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -4881,6 +5891,7 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.14.0", @@ -4907,10 +5918,39 @@ "dev": true, "license": "MIT" }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "7.1.5", "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.5.tgz", "integrity": "sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==", + "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -5009,6 +6049,7 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -5026,6 +6067,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -5040,6 +6082,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", "peer": true, "engines": { @@ -5178,6 +6221,7 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true, "license": "MIT" }, "node_modules/which": { @@ -5227,6 +6271,7 @@ "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -5263,6 +6308,16 @@ "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", "dev": true, "license": "MIT" + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index d3e2fa8..1da504d 100644 --- a/package.json +++ b/package.json @@ -71,5 +71,8 @@ }, "keywords": [ "svelte" - ] + ], + "dependencies": { + "remark-gfm": "^4.0.1" + } } diff --git a/src/stories/SparklyText/SparklyText.mdx b/src/stories/SparklyText/SparklyText.mdx index 9e1e303..e2ff528 100644 --- a/src/stories/SparklyText/SparklyText.mdx +++ b/src/stories/SparklyText/SparklyText.mdx @@ -1,13 +1,111 @@ -import { Canvas, Meta } from '@storybook/addon-docs/blocks'; +import { Canvas, Meta, Controls } from '@storybook/addon-docs/blocks'; + +import TextShadowExample from "../assets/SCR-20251103-nonj.png"; import * as SparklyTextStories from './SparklyText.stories.svelte'; -# Checkbox - -A checkbox is a square box that can be activated or deactivated when ticked. +# Sparkly Text -Use checkboxes to select one or more options from a list of choices. +Gives the child element a fun set of sparkles, for added effect. + + + +## Table of Contents + +- [Examples](#examples) + - [Text Shadow](#text-shadow) + - [Children](#children) + - [Incorrect Sparkle Variance](#incorrect-sparkle-variance) +- [Slots](#slots) +- [Attributes and Properties](#attributes-and-properties) +- [CSS Custom Properties](#css-custom-properties) +- [Usage](#usage) + - [Svelte](#svelte) + +--- + +## Examples + +### Text Shadow + + You can set the `text-shadow` property of the text inside the `sparkly-text` component using the `--sparkly-text-shadow-color` CSS custom property. If you set it to the background color of whatever element the text is inside, it should make it easier to read the text. + + + + You can see in both the example and the screenshot below that, since the `--sparkly-text-shadow-color` and the canvas background are both white, there is a faint glow that makes it easier to read the text when sparkles appear behind the text. In practice, you should make sure that you have a CSS variable for your background color that you could apply to this element. + +A screenshot of the canvas above, showing the sparkles behind the text. There is a soft glow coming from the text that makes the sparkle appear as if it is becoming transparent anywhere that would make it hard to read it behind the text. + +### Children + +Any element can go inside the `slot` of `sparkly-text`, although all the component defaults are optimized for plain text content. In the example below, roughly half of the sparkles will appear behind the image, which makes it appear more sparse than it actually is. + + + +### Incorrect Sparkle Variance + +Internally, `sparkly-text` uses a `setInterval` with a random duration that is determined using `randomRange(sparkleRate - sparkleVariance, sparkleRate + sparkleVariance)`. If `sparkleRate - sparkleVariance` ends up being less than 1ms, it is instead 1ms, which is the lowest duration that `setInterval` supports. + + + +## Slots + +| Name | Description | +|---|---| +| (default) | The Sparkly Text's content. | + +## Attributes and Properties + +These are the attributes and properties for the raw `sparkly-text` web component, which is the recommended way of using the component. You can see an example of how to import and use it in the `SparklyText.svelte` file. + +| Name | Description | Reflects | +|---|---|---| +| `sparkle-amount` | The number of sparkles generated when the element is mounted. Cannot be changed after the element is mounted.
**Type:** `number`
**Default:** `8` | | +| `sparkle-rate` | The average rate a sparkle animation will occur, in milliseconds.
**Type:** `number`.
**Default:** `250`. | ✓ | +| `sparkle-variance` | Sparkles will sparkle at a random rate, at `sparkle-variance` plus or minus `sparkle-rate` (in milliseconds). For example, a `sparkle-rate` of 250ms and a `sparkle-variance` of 200ms will result in sparkles showing up as early as 50ms and as late as 450ms.
**Type:** `number`
**Default:** `200` | ✓ | +| `disabled` | Stops new sparkles from showing up.
**Type:** `boolean`
**Default:** `false` | ✓ | +| `allow-pausing` | When set to `false`, prevents the ability to disable `sparkly-text` by clicking on it. You must set the attribute to `allow-pausing="false"` in full. It is intentionally obtuse as the sparkles might be distracting and users might want to disable them without turning on `prefers-reduced-motion`. Cannot be changed after the element is mounted.
**Type:** `boolean` | | + +## CSS Custom Properties + +| Name | Description | +|---|---| +| `--sparkly-text-size` | The width and height of the sparkles. Sparkles can range in size from 67% to 133% of their base size. | +| `--sparkly-text-animation-length` | The duration of the sparkle animation. | +| `--sparkly-text-color` | The color of the sparkles. | +| `--sparkly-text-shadow-color` | You can use this to set the `text-shadow` property of text inside of the `sparkly-text` element. | + +## Usage + +You can import and use `sparkly-text` in a Svelte project like so: + +```html + + +Contents +``` + +In regular HTML you can import and use `sparkly-text` like so: + +```html + + + +Contents +``` + +### Svelte + +By default, it is preferred to use `sparkly-text` as a regular web component. This should give you all the functionality while minimizing the bundle and performance load on the client. However, a Svelte wrapper component exists both for your convenience and because our Storybook deployment is configured to Svelte and we cannot configure it to support Svelte and web components. + +However, you can use the `SparklyText.svelte` file like normal and it will work like any other Svelte file. + +For documentation on the Svelte-specific properties, see the Storybook controls at the top of the document. diff --git a/src/stories/SparklyText/SparklyText.stories.svelte b/src/stories/SparklyText/SparklyText.stories.svelte index 5120a87..68b5190 100644 --- a/src/stories/SparklyText/SparklyText.stories.svelte +++ b/src/stories/SparklyText/SparklyText.stories.svelte @@ -33,3 +33,36 @@ name="Default" args={{ children: createRawSnippet(() => ({ render: () => 'Sparkly Text' })) }} >
+ + ({ + render: () => + `` + })), + sparkleAmount: 12, + sparkleRate: 150, + sparkleVariance: 100, + size: '1rem', + allowPausing: false, + color: '#eee' + }} +> + + ({ render: () => 'Sparkly Text' })), + textShadowColor: 'white' + }} +> + + ({ render: () => 'Sparkly Text' })), + sparkleRate: 250, + sparkleVariance: 300 + }} +> diff --git a/src/stories/SparklyText/sparkly-text.ts b/src/stories/SparklyText/sparkly-text.ts index ed07c81..c68e7b3 100644 --- a/src/stories/SparklyText/sparkly-text.ts +++ b/src/stories/SparklyText/sparkly-text.ts @@ -235,21 +235,15 @@ class SparklyText extends HTMLElement { timeout = window.setTimeout(() => { callback(); runInterval(); - }, randomRange(Math.max(this.sparkleRate - this.sparkleVariance, 0), this.sparkleRate + this.sparkleVariance)); + }, randomRange(Math.max(this.sparkleRate - this.sparkleVariance, 1), Math.max(this.sparkleRate + this.sparkleVariance, 1))); } runInterval(); } #styleSparkle(sparkle: HTMLElement) { const sizeModifier = `calc(var(--_sparkle-base-size, 15px) / 3 * ${(Math.random() * 2) + 2})` - if (Math.random() > 0.5) { - sparkle.style.top = `${randomRange(0, 50)}%`; - sparkle.style.bottom = ''; - } else { - sparkle.style.bottom = `-${randomRange(0, 50)}%`; - sparkle.style.top = ''; - } - sparkle.style.left = `${randomRange(0, 100)}%`; + sparkle.style.top = `${randomRange(5, 98)}%`; + sparkle.style.left = `${randomRange(5, 98)}%`; sparkle.style.zIndex = `${Math.random() > 0.5 ? 3 : -1}`; sparkle.style.width = sizeModifier; sparkle.style.height = sizeModifier; diff --git a/src/stories/assets/SCR-20251103-nonj.png b/src/stories/assets/SCR-20251103-nonj.png new file mode 100644 index 0000000000000000000000000000000000000000..53779469515e73db4ebba4c88d8eda32319af898 GIT binary patch literal 31407 zcmeFZ^;?u*`!!560>aP&Dln9ENC-%$gmiazC@m!oBHcrGcXx_(cXxL;@8$iC=i~j{ zf57|0<8h2L$aQV^wc|Y3TIbpmB>P$HB?=)53=GW6PvXMzFfi~nz~>tf67cs7|2G2Q z4c1OxOc17I==Cn}gQbz`Cu3=87#iR+2nGR`5C-wjCBTapmgs*!i^9Hxf&bUP!@tJ%T8;8FZ} z!G4k_KY@YahxsHdpy&*HpoN??F>%FPd9jp@Pfe4NmT^WmgNwS>sSPfFI=pMsE)Ra0 z>fKDjPABurzgZU_7gO=uvDUZw!DqMGL6*jW11ams1j8%t)@4iMD2<`V$ol&26uio4 zUtxqm7)%m4;qM?YEQJ5Re;~;KZHPqMR7n4)U$%*U_ogRC_}`2F&z*s+a5$D^?)N<( z|F0ImgJjD#-~Uhh|K}DGxCo#*t1KJh1gd}Q#Gi{$YTS_iQ~$<*=0YwG$&Of`q^z&WkVevdH|0F~_mIMf=C}{LlUT zS(s_MM7#51TS5QffxYQd|3jZK|KBA2Yxw@(B>ij2ko^B@C)Ek1=@ti8&uYDirTjY@ z04uqjo!@qr6|;vE;Y=mC=vgB`iFDh)8y54Qi(D8V*yE$kP8&%e!?#|Zyb1|5DdImB z#J1W^!v5N+z2KESRsxofz;5Gz4R@Maa8o}YbK4umZM;HK?p$IE` zkW}25l|z@?aQKYhRp9-zWqu@Znr7byM&uR zBRd%0_+#QgSrkzl^7nktihU=XKUjwU%8$_D^&O>pYK~aMSSQyj<4mNWY7~c0?43=y z?THw}-^qa=3n8yu8V*ec+v{sUTfs4T&B~HsdX3=A2=)8C8pq|Y$neNg|9l!S4{$@s z5)avL;Wkf%DYsnAa2*^qwr>{mA&m2P$;-^X#r8_8*(1<|F&9|`f zTWK`G`1`gtWT0D@u)^#D2#_HDCqBrtTfy910Lr6zvH>=v)L1J12^ZIxgzWxkLQj+NSItME^Nx{0NZmFl;rLb)O6)KsP_y8ct~@cxfx# z410}fC$RJFvdk?KV?GW)|J&g8UbSL5o>KVIW=`e zH?|p8ynPe$&&30zZ3I{-gsNVyP`NlV;k`-U#qPM#T$LG%&C*A;O5>0stwv?#Qf({G z6ZiG*5czBg+=2TzvS{LK>kr|HYMK_U6kN-=ej5hP3)4F-<#@>>~BdFc_+V?6AeT|2@@2f#Dax!+xU8NBWa!Z!N-#>rlb zahe9)s@a%1`bq{EeWTO0U!%J0zw5fx(TLQ^fuYL?;jfR((B*m<;y&)N8|H~q(qn&$ z@X9}5Y4H=9XrMvB&>uPr84NLPqn6~`{9eSi95m1(LGF22)1HxZif<}=A^Ib(E9w15 ztbgV`uvZUhc$7E2HzP31Z^rWE$Ou?XWjCxPK6ct|55=G|)U}0{eYD?^RjakudNA^k z@#WvdE2ut{+p*DTY&56!#8=~zGVJi6*+2)+vI_B?V@(bu+tKny%yf`KX!+<}rP^|* zV2$EdmHxROU?JeI2wy*!z2Wm{vfrPQwyxid4Hr5NjB~iTV%9XB!h_@ zal^d#19iz?70RasAlyyGTfO*s)x}U6ACj9v73rrWBDTlDH{OAL`kR4_=MAZo2ZX%U zQA*)5m}r?>DTKO(KB8e$(lA*6%&ah&flP3mq%$Sz)e@ncTd#JPb*dFNeMwf{dfcpj zeSW+SHp)*Wr{;tMg-`5R`iQm&~J~zAxRI_Jrm=?l$Tg)S5VbLUX_qsQQS~C zfqAsl)m`YC>89(h-Gc0SQul;#;=i##NGN~S`3$6NEIr^YO%zq(tPy9X!sdOh)@3c8X`d^U)=AJ zw06>XI9r*Uytm^|WDN!_W|4yw7X`99ZC^qrMGzM>l*SX<4qnMcpQYtvG%t|r;ikbA{sc|;Vjg3dA)cg9Uo#KAe*c)V}xq|SL_0owMEuQ~I(Ozxfy0bo7 zq14lr6xSnW!sp9r9UDbPg_yJ=5=^gmq-FahUziQX3}4#~0C9Po?#-Zn1de6ImGMA4 za|@&e$YQ+|aheby_D9rMIjkPTD;29xE)ldJ^=P{u8X?zum!U4TKAcJZ$u}E~$1UgS zxslQfZs&tznPM1?!;vaCI-d~Egb6QcCps7=SotkHXk6+qJVAX`XQ;R!qWs;`&uAfx z;QWeab5BgQI_=#t*r(F=4m`e0^||TET1T&YkF#m(eUpP0+$oa(!imI~pvIGcbaVoi zuIdx5LS_1TAoIEl|B(LI=D{KZbGAF~jHI6}*bP&>4QZcU59R*M&~l^Cxe+durT=SX z^?TWTv#Zm+k7i@w4%({YOqm{>jv61xn{y!YlNkvNY4s7Nx@>i+zF5VCY2udr`Fd*k+! zP-*ry>@SoC1WgwNMI+odP!^*f{2Ken0yjeBn@&qEVxb?_0)K+4gKkQ+8f#uVOvs(h zS(Nq`sZ}CScFina2u^Fe7AxlQKlfHK3(qC`yDP!FhM4O(%|egalaW?}3(dUs-NT3_d*GuOUgb${p=x~C53FZ@ddKT6|aJMA* zV4L>wazeqZ(sfcv<v?uw8C( z-wfkZB#ZZEXgcY@p>VFZL{RK0T2S<%O;&xEB$%do?K-Q3rR8w8X01l!jbS*Zv|M0O z2!$K2lbS!)%Ht`n*GX5i-P}^=_fwNZT$HwBD?a)fRQw>tRz-ICdLTh*eII#}hpTZk z>G2i({D1F{|C!e8KYc`%KHTVyk}OYoYCXw)d^jJ@mQG~fRY8&KWzcHq8RmPYt6ln5 zh(^fzj@krY%RYktJJs!Xn2a|Z^-Z#M$?s+T1YW+{1QlvSmsxYmt|C`yMhX}&1t+^z zrd*K}wrGk)ruMc({2H(-r*N;f#Zu8*nFRbrxiqMMyykT#|C`tGl7U|k&zq#WPdU$= zaK7RBW^d@HZnC0OpcvtL+&ukOG8m6OX`CWdyLyg-aGj54Vy{IeineR+6qikUY1C8L zQcq2(p2#F$`8riF9j}?cN5s&W&riL|BA=b`*6HtXEllzo3~JWpHW_+Nz$W32_VPu( z7nCC)!NeLYj~McXd+IYj4j&|oe(uX}7~j&H&wabss)I*+PWRu%A2TyTUQD@cHW~8Q$J}X1{MtlTNs1_dm^ThJVIx)imVP z{g?!?RT+l<&BWp%VDomzg}N^}>wTZF4Gox7NBI!+V_3r{h9Dusc=-2C5AN+ZU^UMa_ue>Td(YeL9hmu3~DzGrcQN7fWgDs!S#0PoC zXi_Ex14}fkGf`G!D*KSQ{|zDt{DHbwz`pY72tLH}Dh4S|zMHU8tSeroT`=w)nb~4A zS;;GQ3jLeCe?{|>MXdpHHjDTDijPvFCU@r5pFU5-DLcVX@W_Q34u`ZQ3mC zKOrN34H#6d+xT@;f=u(>3}Jh>gf=*D>Qhl{ZO{Y{#0{!pYI)8PWU01gAw1SU6Ot-k-o1&*^Vtb*Hg3WhJ0iu4@F-(uA znrByjh*v$a$#=5?uhz=@7|pCys2pPu$|tpkaesyMbh(Amx$b1*xKM&Ez#}3T)5P#Ffq-k5AV5oM&q~j4{tG*YO{@*YJm( zxgJ)Xe&A@_AJ(QG0ExC@{4;k@{x83AD4dar{s6*esf>#@H;!KU4|;x?jP2zhgR&DG=4KDn~%X1 zJ_P{%dwqj|H;!c-S3hY2im=$(PQOS3j696hW@*8SEtU!{1+(qji`GRM-dkah+fDr2 z)8E8AwL#T~y;P}mJl`(D;W0kSf>kIr49^%swyS}88%q}oxKT)dLJuyG%M>LzuLCgB zr~N67#fhmRH8NuNi-<3-l(^+7-Rku3ys!Uosusl9|1y~KJLgcJ zT9~KX-zJQ`^zmI&NON2GTBGX1eBD}Te~MV+wCE6*t-f59-e=f;KFqg#S?O?CJ>6h@ z3V`Fv&pelksLolzS{Yv{KePZmS=9Y=(udK@4?cNm>XwomQa`)FVWdaZFZ^EcEiN#1 z3virE`4jhX7QLlagFJVT!*;!>DHI69$v@p z-LD1^Tl1XtkWD3V+OeRYqB1tEnEj;5(uiNq;8#sd@wnSf>E^awX~Pmq24HCJl{^p8 zY{SzZ{PM~q=lO-z$-8FKZgmw?5%E=i-Em6k_fbd!g_nO+9P7qIN`R9U(H1Kc4%#Rn zP^JP{tY}A4fXiXe(890Xr!-ncEh|)1qC|Fi+L(vU_*a&WOvHF-;HOQA6m-q47QQ9|y!9(ov?(+Q_fUBNPL?jI->ce8XLx`vviD(%M1$YgT5Kv`EIC1qi)`A(?^UbHdL?W%9 z=8k;2Lk#oQIx+a@N}JApe6dlrSbK^_mT+1m#=%R+vpf~#AdMf0%%ciLTS ztkorrHG_V1sYtRP`vmtMGal_$Vsa9#;z$mVNQC&y<0)$;jV!m*k)})-3f?yvV7Uy%+vJi#4QW4uwe6gk9^|R51i#eZ4fBDoW6Fm{d~3HC+#Y9b{(jIN|-a zUtGJ!hbDcX|q?sVB>6){41<~r@d=2={SemwS! zz|f6{%Nfx^uhtFTDadK$59Hr#R5RPL)?p>M1H#p&&huRyzYw9a_Y{aQ5`g6@nY=FN zt`#U#W_zi&!lI$S8;vjB2%J-TtnSQYsh%XtmdivO=Yin@#&=qvP|o7m!}y5K)yWv^hprLXl8I%E0=* z&MvLXU;F9dQ2FJJF#*68%*qTRHhD6gQ}m#v zbVA5yYPvDubccxJAS7r~#y=!Lr#g6$smC)!ZK+uvL(CNC!ZB+3i>mp8i|*9dnJz$_ zrG^-wkB=AQaIIFQ%rGn=lu~|STzh$K@RFpl-E7mE1|L5TC;*hm@g4hW8SklnkY9*6 zs3vQG41n8swj`19)OrFlg({2!N7V9HnDGD>D$c(wNa(!~Ph&nIUnof>uP~C!nf=_@ z8fqo{cGsr&3v%A9J<@JQFhit{=OddB&)qogLwow*@Wh(&XvPUIw>DVhJ3Zrh){clz-hdNiH!~x+q@hZP_zAi<9IB*0hpgGIOC2ZeO++|FmE-%c8u&x&?fGz` z{+3De4-a-cVGXgjE?LRn=M-Og*V7IVfg^qn%?m7~U(5*$YnGzl>|WwXQU8984i#0! z%95VKV-rGu&d4^dM)`U^ds}mS2pWvNl<~jvegYQqd_Ha_?tV z=7y_(d!KN7A4jSPmNDEI$KacfWd$YQA;YFGU{$fJPC#a)aX>^|IXNNP^5KSPiJrV; zL09i1j8zInWG;U?^oK5x!dTE}nRy+zEc;5K-AH%-f+21~J`EK}jlafc(0qrAM|VPR zgwJlIXLbRUQ;=)kmZ+9zB;z3)yqBIuYQnTU1Mt@g(OLANUa0SYt^~AFZOQ#w3s3@m zp0siXwoIExP-~n&Sl6v0onoP(xU_()wg6SI%5#GA8>0|+(ZhqAms;H}d4LxwxJNJG zjWJ{2nhrvs+m974RfJWaPcNP(naoZTNfv6X7w5EQoIvgS&nV5diE(j^hw6a~Ur(>b z&ZFP|DriZZD4rf!`l4BF9%I$v`<@Ktb2A598*At_K$%?keI32zA8OJd%Iz`;Lg z)N$d9SY`u3VbvOZgpp05&7mBjYMESjgOS(~X4@RLoa-aWz~Rh*Uv?j$hSE+J=GLae z7Iuziip_s9C=0#Rr}u3b5k>B!26RZ~P-XA0D>7$&#}5 zYR+Oc)sqF$H1;lNcPPBJ=L3Q6>$$nD!9-Vd1~_F*HtbOfpyHMcJ7iagN>{P?IS;G~ z5M3i2I?ydY<|Ib%&|;1Ul+`RUSrX^*KKX9j6PrpzO8lRc`8f1rin3QPEy9!ZiyiRkCA4ETLzTy(Aeg*m| zmb=QdwteECX|D0J-0isedMy!U(@FY`J}d8Jpqe=;P9HNaON#?C) zznFjgbXQTmd+NGVFqa%z$g}PR8rL~aX#BO({;Qr5hx6ZKJp-{&CZh9v0Wkb3eT$s* zuIT_Vlj16OOMP2QVcK!fu!0QFWvBg;&H>L)V%y8F8sR{xo?%0g0|ps zMdZ&!Lzs;r;(3czW(wTi^FX0^je4(moFQx;0#jLU@8mRJV?}%1`rPs;P(alR+UlHf z@e8WZ7_@=BO%st_eK(qIHKdl96I2wU`kkCs$7M=UDmWEW?NPc$8Vfl*U>BW6*(qj zzUK-TxGJ?S&J{tyEXs)|1#@E`jowN-&2HBYLWIA|Eg;>#56xvkJA7s5TYf&oJv=jv zMRcKR^7`9OI)MPZg+crSw2S_`h7wqyd<{7?gz~1pvvnqV1qop~mjuMD-c-cReB74$ z>e>qj9RWf%16Kkt>-i57`ZRT?8Dc}!pn6qS62kLEr)4X~oC!ltB?s;6?=TNX-`yt* zlz6HlwUusS1%iL#d#T(3s7m3=dOP+PbW4oymbTe3rmDrLK5!(dDu#uD-7l(3_YGt{1eK&WmRN;;zELRD>5L2m$_ZbOAt zp=E@8f^Y)5pmV>AdQYW)DEq1-$53X7Cet4Y@pWa3G_-W`Uy6>D4P-^ug( z%7=YfJZ?BIPKc25Ak-KNP5`U3FZ9%vVU3p+w6v*hX7(iJ&8NO02HH zDFEafit&D&F^LeqH~v|i?hu1cgR^iyi~vbDfZuILCcc>X;Qfa5W**?a2l>gGML%~= zwv+5aM@Mw4E559YW;O^Y!^zC7u%ydwvuN|lEhCoVm|KX@ckC4=6e{VmNKL%}!)DES zIga>}Oz2CGmgxya?WOGVzyEPN)pam!|GxL-I4E+50_*)irwr#Njt)HyCh1c!V~g$k zpIAoBVS=J0eyCnew&hW8IhY8B?2iONmEyKxeh9vr2jT70`wjagm5-=;yofImsofFE z#{Cv6EHSIhwGpY~m)DHq!(*FEymNHacO)Qej!|+3gnbkkc;aDC)rOyAT(ied6|zP> zXwsY>#IrgBJ7nynw?|cVhH#0371=nRshM-6?S%1o@>6qJ-A4_zqA5701C$pg7Kotr zd6;-u;1=*~e3mFm18V3XO{s?*({AT6wlyTH3lzU)@r!bd`?x8pZj>$sQD(Q>Fwg{h zAJC$u@jhnBg)`UU4klKkPu$iEJb-U_5I`ga#h=KnRb%)~3zelgVk^aG6y5job2TkQ ziNEcT>L7L-g4?jhBhCLKigmd!LOgjQ}5_?l*X&CvifmKWT=Efep@Krv&0UPgT+HtW`<>U@0ZO8XVa2aLq+>Q&CwD zR&5)BiaSsXtmnRLB0r@8@AvZ_cu*l>{4W>M8v{KLkrfX4uLuo}hvtcVl#CG%eIw~Y zQ91)-xC$xZIb_iYQR@zT!E`R4d`^lP49g3wClp7wxpER?vPMW?oLJvUOYMYkEQJHe zCqePD8Qu55*CLYTTL%}CM@9k(g7xJZYU$|Zp>CSCvtPzu)%fT4)^K=cId(B$a*N{G z;eetqGZ&~f-nS{9Ju5^Wida65wu~0fL0#n zcj1%26DCQDk3atKKpwi1&sRLT%qcPuhP(G;Qo?WIs&itZF8HAF8I$l}b*W-7S%1zc z1xlu3p5cA;0?WcVwg>$c)MgM2sx=#>rGlZ4P`zr=D|d#O9?X<)j=2%cy^b&R4g90LJ@nIc#)jW;_C8})nV}_rWbaHb+L~KVO~vjHT2gZi|AmCQvax| z6MZ4hqockViYe$_^$|wM$!$|lUzieYv!R8~mu21FmDn;)RQlPo5jcbh$|aiAOuro@XMFboeQ4gCfckjK5dVlZa4YFWfp&Al%A;As z7F-zkGig=>sU@^CqeoKFxoN#_cMs`uATFdy7qw^Qoa@V)us~mY88+TgU{7!yvttn$ z1_670XEd{4grBDABfukmk1SGdu=?BlppIc`?(#O?d^et>n5eFjbtO;(Luirbo!2!m zPosssWrJ&u3#G4Z63Y5TUohxic%qtblpdtH%hmg&bLrPp^o)ZP+ow}0oqu<^KTml# zuPOcoPR_6MGm{R+x?R%C1)z*zlq+eQxLwOyI?~YYmkGG+vKddGS->ZecgXel(Sq}($fB`y*1M6YL@`;iq`G?mxg*dUOk5~85Sy-devc{K zSAS~zo;id!gqpX|&)1&MCWfI#Ljqgof`xz#9%oV_6vsmv9TyDoC1 zGf&Z@ALL=A`BV&ZmZl$+=5bitu}5<{rB0qN)>5&z%Ih~@a&G}Lds%gn^?rAp7||d7 zJo-AR^)$Zj)|&7Q0bI7q_!ka0O4@tCm_X5}xaD%Q?>9ycPE0(vR_c$Xrns%Gt{#*~ zS@%>EfoVUIf+JjAbi5c9Gl{uYOm3_;ZtK>ke6g>sfNgtn3uM-;WNon5u9SP;DE`BZ z^tRdrl@YpE5~k&w9&p0NW}HqLz?PHjxhBo(c;fniLVY1zCZ#gV3_*zewc!ul95mR53Me^8OPOrhVIJd$n~kXj zA(vSSHY!Q6z=wPf>wZb|ci@F?dU~Cb8^8D!A>ym;57;N9*QAhO*AT;(3hH!Rx+$V8 zLTO*tySsx+NQM049rg_9v90JEhD8hNqC1yZRp{01-!9j^E6GD?NaNZ=k5s8V;ePgq zgUxbf4)R5_vYJt7)br>TwQOK@IWtsius3V?JyIWhO?Z?)+K@^ z9wfTQ7hWjy1umuzGJ1+e8@+>tP4qgk=7rORj`}UJ8i4b+C~nqBY5*|%;3#`D8n7!U z`XR>Mo^Q|J-mmB!`F-ZSH53pYl{H^%LZd@g}f)lK?D5)YUiX_H#4 zX_uzo^~iL$tC3H1{6aW4r??CI?G<%dI&xP}Q5W&Xt;|~9H%XWBkbO#oeGAUABtg}Q z^MtJLY$9JF*;DfM^X)dVOuK-d87LSl>xNte-YW^$^3Bbv$qBGkdOG}2533l&kFhAc z@$luYSBg9U)mTK?2bJ#~XjhNQG(^e?BO*y_$}Mxtq}2jP>Sb9p`>yY-;dgUM#xX+D z`%jQ*eIIP4ofdw>?cpx-dtdQIGE~2Xv2`EY#x1IsG?&q;v`cb>mvG#w>bv^+PZ)Mk zI^lDF83UJ`*-DdnIn!q7Pcrq7MHY3sC);Kn`tui$#)Ngf7(>zqM7}Hm8|Kya0=5yM};{CgO4*7Jgy_}wqsPZdtY0FO0rnpZfrAo7mLw;o?UgNoiV#?AI zO%!WzxIEo%hctG-_E&_G2=j@4L{n%0B(YsbLlo`U{TRu1_P2KN?d`<)m@$7!3-i%H z{m-L}th!xsNVqM?hA;0pJ{%}YPKyi6E&-wq8NMa*=-op2*6TPzrOAxCwe4LMi-N7+ z^T|;jw`DQDrLWHRt#jvQ8L(M1&L*Kb;v7sQW%zQ{^sT+~K6LdtGE#^H+m^FpH(kCF z;QHDoC}}4$Rxo;LBKjY){l;tJI*s;3i+pyNYG6}(CqnEkb^0Nb8Cf$|EOf6V>fv&H zV>JLdSB0VkX8@P9E#L>JeYMAfu#@*smO-uUPN8RoA25`!miD|GO`QpM0kql-V>pljQ=w-e1-bIqy zEVKKAhy+qZ0Tla{3{KfsWabwH8#5XZ^j1e!Uk!(AD8%11%-$VM4ZNIU#D9~TV_YF` zfD2cu;#H=Tt{Y!0a5rm{f)r!!7}9eUX0Esi@p?n3dD&={-`RX2Ea|^YH&(2$_j#2O z+van0gQ&4Y-QqzHno9e%w=QHRsl)wLkO@@?p}))KKTN#&3 zfnVSDvXtC=*=wj{*3F9$9d`MK;#=kFYK$KwgkN9KOi0Y<(o};B)$g%XZe^}8`BzwK zec4nd^4wjWhTpEeGmHxN*bNs#XEt8-MrB~~&}m=9C@0>bG(hv5qE#N?LdMjE$*DTo z4Z;|JEyk*P75MHJs33zV#Y;U*a%6P_3V@>sLGq* zTz1#v-QG_{vh7D1Ahu6A6>FazjWvt`Hi)XeO?lEfGyc3wi5VQUk25k#T1{3-5!{I) z{%PF#o?x*KdeU%(9Cq8cu2NdB(B3K5lTUk4vACu|UzNUl{RvnXB{)Sfs#fQI-}KfW z_Nm}(h2GB=1xFH8_{7b(CC{GJIywKsBvK(0{aGfR*WA$3Rhu|;4HWTZ08dHWXSvuH z)Nq`26+>ua4to>jWIhm8WN%Ku1ScKtiB0Vf_9MuVr}VOus&75%K-~nic-G>#rp@oT zmX9m?8A_ODJ)PKutiwfP4u{5fe&buTzkc3TI!uGJrkWku(B_n&Crh0m>0J)N=FCX! ziOE&1urYC944rArY-&E>eSWah@tp%IQIyWlro)5hNYLqqNae>SE&TT8{gIk08Jo+A2wJWkDG{4_W-aAYwvl4YMtne_p zO4VBHU6S^bBE?*>Oz;9{5&u)B@_D~v{b{!rxEA9d=KICWRAMNNQzEvimF@nrE9?r1|E!@sa;~;8~jATpVYuN2G5(a4q z!OQ~4ouZ|uGD7fsP7mx-2?{RF3~UN`;|2S3AS*I)PVKVC{O2#a`bbefwCF_j8Zhzn zSbof@Bd-IV=0SEgrzaWvqO=N)VsmEBO(t;@#GoHL-Z}o}j7|#AF1tP)a75Uq1)TrE6nG(&q9c_NCDjs^eol|Jz?tx zXL}~G7kpY9Fn*gfFDbdqLKSG5egl*wAdZumQ;4@6Tjt}aU2qS^Y@?IS@L`>KTJ}-= zgUff(+&7H!?kXxucEwCZLAnx0vAXP`gKAB!-f6&!?FH%wM-9837)z2|)#JKI`)smr zwnqC3IE7NIB+2T!S?Zz%4A<*90*fA4o0&PFKEgYM?fTfjT(Yzv6dSy4*e#( zXU;Z_={MIkiQfdGMZkFg!0iR9(AdJ~j)~4Pq{)=j9N?anc@hqoa~6~jnVqC>Q`>!z z=P^TolPq22g><~&RRT^(C%@d(S5het8k!M@DZk(Q4cQeQpF|x(N7^Lf3NOnGs49iQ zyqIA9wXPs<{5!yka)2?^PB&svHE$nKZC2Sc;SxKb0XdsxgiyUDKU=|tgf&x~rQd&e zyX&|wS#O_$ti#o(Pu4@d_Z#ky9Ro)=c7SlOPT0_-T01BouQn+%>hAZU4G~dhARf`g zqfm)N?Z;I-?JuJ*pk!{@N5loXW>z>Bhj>8(dBr8XkGS^ZF9=8b=)IfgM_w zcdy}}=Nov&8HXbY1a#ZI5lim9C{TIpKhIv3(}x@bblv)Q)eAV+__yoL+ZK2AWAH1_ z1i&FME78@ZIRf7W9}M1^C;pM|X~E!453sjCiLB(Ss%$wtq_I`^(op8z(c+(Jat;_O z*c*1j=5IHC7fTnuM9>!WRWP+EYy9YVpekTE&op`mvFO0(!*V%Com?pJn_hJdcDrw+ zF%;A_iw6~+fhk7EPEH{(Fq|WQz6$^&9nS^KTx%3Um|EHqFqG{{oY`?mrDi}j|AveW z7YC;Fa5@6(h!!<#{0i|)hkNvu_dSAd_h(`isl@=s}KAqxar5-Kz^0MY1 zWqGpw345+PZu26g`6K(eX^o=WBMA+twMQz4RD8c)*&`39a|M`MpZ{VNaXbO_G8dU` zcEDi3S@;E=9Es2o85W+r7pGl-Pgg~mlV*}qjYZZ*NnYve6c_pkIOe!fGUOmIxNi23 zX-|*$_oF|z*};ai1<|3pt`7pSiZaGpXxJNg@NBjF0$xHe3SCQzVcNOc=;4VTOyGDWt@aB={4!xHp*D(H6I`>cY&F3 z^g7vA3okrg!ovyFdHd;UdYr(-WtCwTJp&NSU1wIXO{q3N+|B5F2%=#>NdV@C>yYlqc#Qd~7dQT`6ttaA1Fs#b5Y^ULE( zewkCgTN$QCXsg@F2u8p}09;bko&GQ1vz(s?5ZM$LY3KHZzg(KrJv<=!zKpV!JNG7egiCGVdrui$$5J`^V@Zgl&S;h4 zII4p1D#2{V+zNd`zBlEoXPbD+iZugVQ$_{p!%Z&E?DZ%$iM(IBtNT_IL9M!QNc%V5 zF#2NQzyS?qEB0u9TcZ=7@aBy__3}*W8cY`8ixd10{Wmsy0cVoscDFQzYPLQP+OFqU zB?FD(iku89%ieZZ>qgyMlPDxMvk4jfkUONUb>u_dD&~;^UclladV3?!!`Ji~VN3+Z zOm!>-l46~h(#O`KYjJ6oYx$^+-m16W@2ea7lV8RI(|b4pRKt|Z;1Sk_l5>|rSYFzQ z6l$IYN9Lrd)m}S1li?}8HxmD_;Xsa}S z8ANmPnOlgh`Of{v-I?Gz_pS3wkS+9X+*}<3YGS8o&s5dWP^5d3&5n7>eT)+H<9{VT z=Zg{^$Ygg={(J6=c~e=iFTaJ!$-P~KF_<|+>{&V$II!%!0Hsj zQ`Ol*+oN(l|oUPwfuQlUKC|jZiHO>t8DuzVr&DTqB&fNjWZH+(P*87p6 z$Uy#A;JW9h`w-vQHs{j(Sgc=JrS+en8U;yM4`WjD&m?WwQjw34rZA}izVcBGZ!kH^ zb?udxUk820=sckusOrvZx0HWm^8AVoR4=j|Of{v^czM%o z{!Of~+c861J1QR>?dpR03>jI#gD1>%i{)OyX|zg zF45ZkIKXWP*vzAu15||{fGyj7`Ir}o!z7no;e0$Jx)Ci@D;;pU!5u55kxz)o=M#$q z`@!SEncEqTwTc`9W=9y}dvmCa{J>E zyL|rR7n_t+?Ctu66pmU@R0p5u0Q>dSh#1#IX#xguHH(HN1@xs5_dlGAf^eBPk_`^$%zL3KOIE z1s=6<v!N>=$rSxg5i} z-8HW=Pu$Fa^HI+6q*TDS?ZMsPT}@xg1IRw!(1rYY2Y!r-jF?)y{x^HIw8` zlPIGa#Pd^tE1zkHa9&V6s zi&~>&aWV!6o&@8M0Zv(Oxqd&D@ z{9vbWd_jB1THl9AGm#ll+ZO0O4wQm%@^(8lEZA2SRLRASk6IO4GsUc+94aCFfdNZO z(n43dy82aF4n?HI;03C$^qXdfihr*}(LZJ?c; z;0GCkRWWcPT}{M=UhvNs*0c?p&sJn#>`xE(Q0ewXQ>(qvV_9V?l**oUfuuJnJ46Ug zjMXVc6^A?&Fn>ys#oj0vk&W9-Y^+xPw*3FK_ttM!Mcvvkv1t*Ik}l~^r9)Cc8i7qp zcXxMgK8duGgRTC2Q80bIm#C825dz7lNw@=wnMZ zhQO)F-o($yTJy=?CxDbSfM@nNG@FY2>r!$=d0qqti*|kT!wYzH8H13k|GK~n2*B2) z-L_RfDb^Qe6R_%0q07l}d%~J289qm;=RnJkZJgC%@5B|}-suo@?#MYTh|#q^UN0U& zn6Wcsv9TMcmnZyS;k&1Mk$IT3mWt<2a_D_CzmUy0xaw8erG=s4nptyhiO&jT2KKr< z8d(R4l}WwxuCV#q$!51E!rvQwGE~{gf#ny8c0PwFDy@X{1syafiJyVg+-nm*xhzF9qi*H48XJ%=$E@x|$6PW2&%lSv zxZZvz#dH8{+iIM)LXM1E3S-l9Cds=Q#d)~KF(-1SQg{Wi=ZR+rxy%_Lz2L|Z7C0(E z&vLiy3EL&dbusZ*L?7C-lq;GLVhY1gUFl1jS+n0b1;(isE{}Up`&o9tZ2}+^=Vdgx z=cgNC$U7@(8Z>1MNV>;NUz5JY> z!PD-HYOxa$rm8ML9MWv}Y3;}(AbQ8fNrUBYgbd*7wK3ftDq6YDOQk&4gYmZj_IVP7 z2pa{Blt`h#W0^Euw&xPRS-Q@nq+Qx;`LtB6pxIz}NR?Cm(U4FaHLZATq4_6cc|(^M zX|TCNpl_sA1!1xl!`4DqnPG@_Dz+3D{LZb3{Ugh=YW4G%XUrrPI!%hqQ7*Xt$KymG z3AqhL9rP5@e<4bw_I$)P{}NopSzDj?=S5VB@&;2V8ky8cY;3_KvL%(vB+~Yh-*%FB4%N;A z_qCN8qGyu@(P4&D|BvOv?LkZ$Z> zlC5;7Ed9yDdfaz<)ZO-rmh2ne+7HceXfG1(8>i8E>tUZUGDg|UB^33!9t#muxM zJucDVJ}Bi1+75HPl}=Gq=c2Zc0)m=Z_RkWVjA9*qmQ4p{uVSBZ%1)kD5xRY!z~m*f z`=nk)@@~mbck2aw03psWTi0WcdT**I&fZ&?kwvd?~!Jp{`y{}~9kVr>D@C4fJd z(D5_3HoSe-MP;U<&ei}6nU6=bUtR=(VaiHd)lOof8!Ak@NV|Z8+x72yX z=iYkOPRC{5xcneqlOjK#2Xgh-+B*idiN70{S@x}S1od3}vZP9yB)_Gv+JPT_-MBLA zs{$fY&S<~zUOdYHtBL}S*Q$7YEibMXr@x<0T!;P$TTYZHjD)fimfgzbIEg6l#u68@ zEO1cNM0^iN0jm?tjPyZ>z61oO18CJ+RLrnL%X*(d>=6Bs@%BHEo0W$ z!d!^)a`lN4`3**pcq}kAHi7&bw{2b_4IVlYiBl}On`SRER)nnh&mK!w-G=ECsJp{o zHxj-gU%AuJcAqArHz))?%lF6NTC8t2QhV`(B|m-YO$*J>VdT+pDvBcUKTS@}B>rJ- z^9e_zex_H1bzk4yUv;QBPAO$_hddi2_yZTow^sl{R7UqnvaCwk93*u2hf3ju@OGdJ zG89QPTxsyDJJKQNGWpim1dEQ$_I&6op@wb#Q!x;3Ly0PIBJBOjV{tjix{t3W&JV@g zTan1iF*$QPQu&52Jkh}^gG>mnFp9vJlR5#I8Wqd;TE4&$*9PtDtqz2lC|?3{0oQ$u zNNlY9Yku$?yMwASz8%qe*5>{*Ph{<;(|J9EO}a<~=XcVNhGKh&0ShheHLpmD^OsrZ z|NJRX-lZF!&Nu0tcBS95ZHD0CMHNiUz6V7MUTe&v14OO~XA*U32+TwTiR+Smul?J~su-t` z&)IT$j$%>Bte|>`Hrm^r-i&TEm-$knXO~eLvO|6ZxG)yWH#%>IO~8g|=<<^C7%KWH z`y5_ovB#jPoS(>`MfX8eqd#c~96~*O#F5SwMugd4lXT+8W4{F&_RmrBlVW}VI3S>J z(XDTo6!l&1ZdQFgt&4~5W;`CuHuant`YD%3dAcm+0(Zpv5vc12=vp#wZQ~zKfEPC} z?qpmX>c`Z0$Lm5ao7ZhoSoh%^krzG^KdUP)MCZOttut%35r=^2$ z6+4GI9X&5riij1kw%=dw0)IqW{QP#B!#Ty)Yqz0ho1NuQLhFY9krteA>_H zbkY}_iIoQ5*~Q8ik64tCj@YT2nWBTzJ6<&!$(%ehyGv5pm0XWHm`@zGnnD$WL~f3k zA(d?IZ4f>N+Jxh_dz&93j;{qUgl@A*nmhjrKe;WK7sxz6J#H#A-bK67zMv6k!={LN zIAoY*I(e*ItB5ZycG5J`8)-onDDV_VA5|Sv`4&PL62xDxg11B=N#_SfvOKo*M88P| zJ^m0jZoxGk5{6f#qCx>`qx_P7;)o=>nMPuEgi$>}1x)U+S}~ga;L|ZDF4n<0Iox~; zh5i*nLnC~k$q>|*3Y&h$eo!@(h)i0jE3uta<)h7gH}_QlFhU3hStd@jX{M6@Ff~P8 zsQHv{l8!aA4O;zfglcj7l{QVgbut5o+I^OHLO*a(K#dW=Q!ZjgvqkR!ioSCI8DEVA=u=t3{ zT>}1-VD8`eT{^P$Nz?>5+TEuY2B1z13M?sBYtj}vtcGjyEiZrTF~E^^846WJMG(Ix zWB=OClRxm8e~-ALX`cZFyv7z6ug3Os^h%&L2j6Nvbh^deQIs$aAfNucc-Yn^NPaL_ zHx=_dDP!o1jU^K`4IusG6%nDc7;*F^%_hs|=REuPU68eCMpo8|Y;2BGm1*N41 z@_&=%@2AgtOLlaR;xR1&q%R>y<+jv78KwYD&~7aW zN1D%0io=eMN9d#-$u*BrntYLnQ3_vy&fnaQ`Qh{&ty_DTF%EX7?{!1c@*$8rU=}%E z;)amau*swTYz#%Iyl9zL%X$c}5r0ZoYEs>JzFD*to(FVbu=SkW@x~vP-tY)@;q;RD z6X!zvT_br1Z6#pDn9uoLj-%46Rtil=Ggkss+Hfp*-EmK`3CXt$HlUpgO;|u zW=eIK|MqZ{KLD%MSQ~x!Cjjs#V88ChRwr8h`9CTykB0(9t|NnY8e%? zelVMrXW){}BNL|IT^13-%oSh_G2VgdM^^IXSbA}kA zQ7|f9d}!({Gy_PJLW9Mosb?Tq9mf86DyUxN@>r`zEQO*=ryDVk_?!C~Z@I5UduayrmiWOojl$KaG?d<})2h-@`}C zTo8>72GF6CDnzBkf}m6$Yl~(g{kT5H46pOw99DB|H^XxLQrs1Hn~=Q{^!&aL3nR6d zX7;b8Fh}^e%q-C^gM4Ncj#AY!BFm%mc?)%%HyjNB2!d_1!u0m zpK!ZK(Q>_wKi)`3sq57|{lSe=@Xi%BH|W`$(($UsJad(#vK54^4{-vLR6r%YE;M)qW5+f+(0|F2t&aP(O0JVgc-#=yWG98dThKr zSgQRoz*uT5%oK)(y!p7PZ3N*yFzj6X+ zHv7Hlc!x~NQw{KxLe5`h98?*W0ZHBXQyYK%gJ4X#0a<;uyyj*g$J$!CCaYtXEsvbm z8*aoH2kp{8vVBy1Q|keo=f27-`a5BT>2vd0f}SoD4oa;sD*iw!XDQh`&qq{0iERQ< z7J9=FXOvgY#@z?s#)ey=^b5iZo_FoxA}jmy{H?n2(+Pu@w>E--*ML-F#4-#=1)%yWr`hf?s?vBoE26ZV6dTT0Gk_5r{42^+)4l0z> z>6gi{E5jP18Dd7>{ka37PwM*>w;$tnRiC{9mMmo7q-FwuD7ptJ7hrTw5z0gJYG-Rs#6SDU_y)DP)o0>GcL|UgHFnc9 zj$>(9gEO4`Yjr-{_9y`(8Xo&*2cR=wFR|@h=k1ZJn`IYm+a}^zP%JHIEe-_3m2a9x ziijp~DJrT>2dS0nMO27k8-05a!{(fZIa#&dRW_cue=h{1-ZO zkA70m$oqE$xzpf&(&+$YS#L2!`C@@(L-6k?cFePB!73$ifG9{$>U;Trgz-`q~W#R#$MVH4OBpV)>u0$sBLEx)YH_?U|E*S=EYlOO~qG|aoPC$9^GFV9EqlC-fPg$H0^a|?%lUM5P=LzTV$>*rVxo$)8{5_ieyF=zY+0%H#XJ8FV zy#SFml_&}oq3;t_*kh!-P1Ef|NE&|Aqs``I&kku=irz}46RQNUt^AA}*%O)o#K7oT zTe43OKX&nv+z6%-faQL8eDpW@YHWzCW>QiF@AOA{7&raMaq|Z%QX)$=^E7IRjaT?v zWk(HJ*H@6f5(RmCoh!l5Q^C8A7KqAAQeM8gZ6%F$Ke2WME_R@>0{E$Oix+NyjMzH# zpmx9#hSYF{3*Su3`&Lu>y;0O(`O62hDRJR>#_>cOlecHZ{3Fy0C>O#O<;Gl+!;EkH zE1iB!gk?>P_5zwZme%vxHwJ$_6YDOWOZ3ms66;P;2DMHrjfb11Mq{c=nM;--2Aw|= zx$jNNeCweXdV^Y*wNSyXyMy~ah>3g z`^A8T(Dzv$YueWl7_$Gsi#&JBY^?wb)Y zf5Y*(L_m_$@?zuJ-J?8EH>#09ugMtD)WU>6 z$D!6SI6bw++4!`q``70}n(MHcEE8bNvLh^(y-o8%OY5BhcvT7K+wObLLliSj&L!z4kGx_k z{Liqs9Hfj>AXd*wzKi&ef@efqJ4wQUD^Ogsp14Pr#}6^Cy0Psi)>5jyDJiq>@GMAj zsx<=l&6KZhZ?G7m?yPV(&AeviYf+#6PE}vd*U)5HXl~x9Q+R}e1d0>?77Qd_fe*xv ztO-6|-Yb`*K|5r1$ON7dUsNj@HZvxNK+**MXrb>GuQg--FvrF zeLYZ#_~w)djOc5MA_7@TUAa-wxMH8TZ87j-nUZUlNAnZJR&5s=O`?Y|sT*M)$$9NS zj$vZ>?z|llVt+N^#2-zL-!?U8B4v0W;HKyE_h-TGf_vgxZ?@3q&oxiPIlSQ0uv98x z%QPxqPK#JmT?#r$b1ChMaSzfO$Cx)HWWL(NX1_$z@W38P>XniUABu9t0 zj{zB*qwbSS&M9A!D@6q~gkWb&Z&n!|SQ~DZ=+Q z+K9(;2KaL=@3(a(FaP$^&P?ehP>7c4eMeVTvGQo!eL-1P@4)jv1HO#g4$*-Gx|bRF zn};z@V&S~kZt&;I=~`IzG5+3gUFe6<3?s?_O^=uBHT;k6TX)0h<=U9Wo{IwN6i0;)Uws?BvH_?ZU1k86P#`PO_fretu^ znr<{rlASY)N2n#hqD(+6m%b`oxFSAATh+CmW6%H+a;7Qe{=#q<V7tXA+n_ zzFa!W8+0~bUqbE~YYYJ_Y>76^EW~CQQgKU&`x!L?v?jEWt0mAN!np-I^ZwrjOC! zVigTTG0Z5AOFo14$si=toa})7Ylg^tf%#e~ps1vEn$UZXYIz2Lc?Y3FJ=}EVr04Y!zWDQEp!OcdwJG(|)3p?R-6x0P<;bRP*H)K;!uiSDhKRic`*6)FQ>;jqbW>N!suFW%ftW#T?|HyUCJ@$+&Ri^qI~13324+xH#;BBnxAxwQFvFIVfHTEH1E`39Z8ubf2(e>CI_eh@Dxs zwnHarD@jJ{g1~HH%Nd3G;8XO?^As&=fMN%BUQ4xfV!?nqv?}eZ)lGdwEtvESfesDIUbfr#h>Tc?rt11kAq z3U^{S-g6Qv^Ff)ja%_bd<>W=syAzXK{?)s&TG`yE#J0Mmq7c6u;QGf3XqOMDCQ;x0 z9vs9*FQ#E2Py9f()!Qr^P2|aBF3^{2 zx7Y7uoJ*kcNVms5Q}P~`Sh}-9xtKvaQQIyZ`bB~;ov!+U`LTtj+Sq;GaA!K`UpVf2 zm0=%hbmJ$&DfuZ9vHjT!TQ2eCY@E8h#r*Qr^8)#b*6Y+ih{g-sflPA%shlUz( z*A$x97w{~ps&B`^{HlyiWi|~?0CZbK@&VC^+^3LSmz98EMR#iC5JE8>K)boJUsSP3 znc6dV36KG@nhqC$E}E*J2AGN(ie1fGW#i&1@G?wzoL^;u7P+Q$|->LDp zdk@PebPV_a7v1H{br^S4-bYIyCs{ zavkv0D(#fmk5sGQfR+dmVnhGOZcM)rveYMlZZwF!OIRs(4MZH2YCb3&;e4^NtL|0> zoZKfGcfh}nR50C;PDFhbYatr}VL$?#rdXVm!=r2dxxm&|(i@L6p&MH5&Lbr@_ zT>#M8w*ltdUgyHwo)fGY6~e0bs$MA^j`PMz;rTb`R*;a@dJ~NK5Xi4-HyAF{JnFF} zzJWX0Y;nivEMYwahUrTU6+Aj?}N}ohN+G%@(oVdcAK*w92eZLy_*8&*rp<;n3ej zARHA`IHc>i)YLp&q&KN;w6OHAD5_$$Gla9TMi)0gLklJEDkl-X0?zc5)wj`DsNWGBfSXvnh3 z@|^n3E!L(n{im_Fi`hjq9%&Vzj-GEP3IKwADD0I#!ugeYuI6%#H?DZTQr)Ii4<{KU zn1L)=DsJxfODb5#O=zA_ei0INc5}#oLncjlO$Vs;)m>PoBI}9D5&P5@dFoC9YO18S7?#5zl8i=n?PaxrmXEM*t%+xAWM> z=62wxKKr2xj4sMkNJspJTRl2?g{4#@4~Sckvw9Vp4H6C#E>`8~ABc-d3eC|M&^Isc z6k|-kt?rNd?U)rAQ09onwGzII++?$hFnPXzVJ=F36N#zHn3=?o(8G6h`W^02Q>yPU zUh`~wqdkU9c!kvk&KhZex}p;Z|4Y0d;*fI_lJ}`OyXhZv?PpKPf8i{y#X>>r^YVC; zx;B}5&S$?wJ(7U0Rq%a89cD-F#0&f-=z0E|R#1UZ_ZZgBS2s>JR82Mwh>W+t#K^*v zBJqirrkvSid(#|Ow(9!@pszhl`m`~v*d5wk(y=sGIVouWwA@Ez2r@{hN?l zlX;qoBHu23YgM>k(?8HI+MYCW6dM2x8!;`3sb(01+@}b?-;}&bfYs=>tZpopV=aW( zT36bAeOD9S*?dnC{Yl&E#W8ffP*OCTRV2D;Fa4&K`CKwW&iuqt(y<2_C*&4zwcscfQ zog={!#@;??hlq$$*A-{76DtxY$li70Z{Amc0>%*Z(4NT{z#QAj;>tH_T+9J{L?hQV z``ap>NwEYdDZ+Ktdv=5~rPw#_fY5AokD)|L!#MdgYv3y_V_>RthB2h5M$Pa58EO%r zeL7m8X+ZxeL%EXq-o}8W0M;wYhn1$i%E(!tFS1Tvb4JxT=H1_EK-bfAWlE)eX^SN2 zb^u7gt?#XT9WD}uR&#WPW7BHAC_2zS#R=Mmj~JFWY$t*_gl5w5tTxBH;fw&m+Zn1D zfv>xu9u~1&qHjfxZ0vzWBtxJHT+EHWILL`88gwK%JNN<6lC)kmk4rKu_6+0srh;$6 z<;LO=p8W_U!fG>?mTeF9IbH)7p6&e~I{^-&l?aJ$DN@052#Z#&b}H+rjOnWF2TtXN z@co>_&5mg_Y^I`i*NfcQK;(JxGGPxJNMCXA7~k&|#F`7gANitU*i%~z#iQwWv{kWg zNu`e)5bxM({f=HHpAy*LAyIljzV+4MWLlUrqY=HaqpA^7H#v~N2v4&9A_eIoR1UT* znNe414%P~fLlvm7_bzY#{C>7tn$u*cva$+hw%I9@x!(9CJ-i6#Fr0cgRABL7W1zqN zeWnad+Z1RJ%J&Q?_ec!;N(?g^0a}{@(k4EbVnwch#zX<308`)VB}avM>-uHT9ynJL zP?d6mL>|vY^2HEg;C|b}w8kLI;}y$OslSo*ZE?xdMY;zBQoykubh9$}i|0U`dXYYH z%4(t)z0V1y;RuM&y4=NQ3VMD5biO9b1{}o6>#;N*gY%Vm->tvpUI{cCV^EqD=Z|Ro z?G@|_%B=!4BXTrHGyVdY&llnP?{=le8B;wibF5$-4-vWR3nrwfMKW$3m3+ z-Xsj_zvXNwvb*xhaY-Fq4nks>G^@q&m^8@4hz~-X3`JuNarZ)FpD_Nmf1~K;dM-_C z)8x6q6nR<)lKm^XhK8+wcuvZ-P!|4fo-q}l|I)Rjx|iW8(nf#vi1X*Dd;4ZZ{BL1c+o{bF0{luBY@ELG9MX?t3C|5IZVtmYaGSC}jBT z8S7(^kup*JuY4^TlB0`0&CjYiQdw;4`^Ju9l37`OCH>{K?ZswV2Ve(%V)CZ#5K-3! z!_dq3CJUO6(cO2sH6RBb{%V!y66!vb9DnD^bVMr48k=`YrUfdlo?EXTp6gwGS=Gyo zi951*_p!JQ_&gB9WlCcmIhv|KJ&b1~%9M(gK`b0fib{8AO@B;U&P>C?+_1&mbKI$A z{^*E;!tuAYr*znJ0HTOvYO;A5`zZ0cc7xvP)v;@Z5D~QI#zgq!qI{J9^?mc~ie;lj zcC5%fqSJl-+V*N#lJH_X+R<}6@Itfd&X$4kkFK8A<^PIZE_g+VG;nuNghF0J% zW*s^IJ>QPB?W(On(`##60pOAwCp!hNIHy8Ei#g{p>K9r8M`lGS%&>5+ILW@GXES!I zDaQ*}BN_ZvwySOai?t^k^`6Bgo>)TOY#V!{NzejxsNRE&G9%H2uDn_M>tJ-(vTP@T~JhZ#mO7wY7e871Kgb z%{~Trl8TXhF8XjHZ}1|XcR#9mAaT9I1=Ci>ilH0iH^q17u zI$^WufR<7@J)M^(vJ3qLp%RVUR3a~hol%EINBgFxR42ARX9I`uhsWIc#Vq<)!+r zyaw<8^)Cyq&2VwlxlZlHIwEUz2*3e>0|cMEk9K{}!~3F1?zfgbY@T;nv7T?$x|4kH z&Qh$eh6d&S6~>13wBk45ru#PwZ%O@kbgF>3YTm*~q|mL7V`ZVYd|}3)mITC? zx)nqH^uc|6$q4^?NXNp)&rbwk+GY0_Nx3YnteA?R7rFC$JLz?+CoPcwl!yUJjA|vL z{HFwi-NnwZnQ(-_A7cP3XMeiZDLObH;QQp>U0lKAX}QWgseu17ib649U;0WQ7w|GZ zQ?U@Lw$@`2|W%*O8ih{5QM^WC6ERa#A6$ zd0--VtC!pil+99q^s3S+AWE zg~cXk%fqF{i)p0g|EyMAWMn8VQvm&oxnca3;ebz7MPBTV($-ljoNfN+Ww5}(w6fI3 zb)@`P83~GZvkSBNR(N>$9N^h0mr?%f$ylAA{$gF_*?-n0HJqcPBRe;D0#_O~?dNX5 z4~Vn)w->ayJeG`e#J_nLL4n<^V$NBLBL$S} zB7gt>?GH5pRw=yTYTQfx+5G;r3Yp!&H-V6BDgg~ffGY5-!x{BIMd|&kf_IdQQ-uCm z@n0)1e;}{-i=o`b<0kz#<^Qn@2pI<#(<;)zQu4nad->4_^l&M+_doXe|7!8ig$uA& zvKju@#=m*^Po4T{;3>EN)smvBNG0fqV{cdnW3?i@yADKtqN$ zN Date: Tue, 4 Nov 2025 13:36:41 -0600 Subject: [PATCH 3/4] resolved some reviews, others will wait for more discussion --- package.json | 6 ++-- .../SparklyText/SparklyText.svelte | 6 ---- .../SparklyText/sparkly-text.ts | 0 src/stories/SparklyText/SparklyText.mdx | 28 +++++++++++++++--- .../SparklyText/SparklyText.stories.svelte | 17 +++++++---- src/stories/assets/SCR-20251104-makw.png | Bin 0 -> 40469 bytes 6 files changed, 38 insertions(+), 19 deletions(-) rename src/{stories => lib}/SparklyText/SparklyText.svelte (90%) rename src/{stories => lib}/SparklyText/sparkly-text.ts (100%) create mode 100644 src/stories/assets/SCR-20251104-makw.png diff --git a/package.json b/package.json index 1da504d..506c38a 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "prettier": "^3.4.2", "prettier-plugin-svelte": "^3.3.3", "publint": "^0.3.2", + "remark-gfm": "^4.0.1", "storybook": "^9.1.5", "svelte": "^5.0.0", "svelte-check": "^4.0.0", @@ -71,8 +72,5 @@ }, "keywords": [ "svelte" - ], - "dependencies": { - "remark-gfm": "^4.0.1" - } + ] } diff --git a/src/stories/SparklyText/SparklyText.svelte b/src/lib/SparklyText/SparklyText.svelte similarity index 90% rename from src/stories/SparklyText/SparklyText.svelte rename to src/lib/SparklyText/SparklyText.svelte index 448404f..ff392c0 100644 --- a/src/stories/SparklyText/SparklyText.svelte +++ b/src/lib/SparklyText/SparklyText.svelte @@ -48,9 +48,3 @@ {/key} {/key} - - diff --git a/src/stories/SparklyText/sparkly-text.ts b/src/lib/SparklyText/sparkly-text.ts similarity index 100% rename from src/stories/SparklyText/sparkly-text.ts rename to src/lib/SparklyText/sparkly-text.ts diff --git a/src/stories/SparklyText/SparklyText.mdx b/src/stories/SparklyText/SparklyText.mdx index e2ff528..baf79aa 100644 --- a/src/stories/SparklyText/SparklyText.mdx +++ b/src/stories/SparklyText/SparklyText.mdx @@ -1,6 +1,7 @@ import { Canvas, Meta, Controls } from '@storybook/addon-docs/blocks'; import TextShadowExample from "../assets/SCR-20251103-nonj.png"; +import ReducedMotionExample from "../assets/SRC-20251104-makw.png"; import * as SparklyTextStories from './SparklyText.stories.svelte'; @@ -18,6 +19,8 @@ Gives the child element a fun set of sparkles, for added effect. - [Examples](#examples) - [Text Shadow](#text-shadow) + - [Allow Pausing](#allow-pausing) + - [Prefers Reduced Motion](#prefers-reduced-motion) - [Children](#children) - [Incorrect Sparkle Variance](#incorrect-sparkle-variance) - [Slots](#slots) @@ -34,11 +37,27 @@ Gives the child element a fun set of sparkles, for added effect. You can set the `text-shadow` property of the text inside the `sparkly-text` component using the `--sparkly-text-shadow-color` CSS custom property. If you set it to the background color of whatever element the text is inside, it should make it easier to read the text. - + You can see in both the example and the screenshot below that, since the `--sparkly-text-shadow-color` and the canvas background are both white, there is a faint glow that makes it easier to read the text when sparkles appear behind the text. In practice, you should make sure that you have a CSS variable for your background color that you could apply to this element. -A screenshot of the canvas above, showing the sparkles behind the text. There is a soft glow coming from the text that makes the sparkle appear as if it is becoming transparent anywhere that would make it hard to read it behind the text. +A screenshot of the canvas above, showing the sparkles behind the text. There is a soft glow coming from the text that makes the sparkle appear as if it is becoming transparent anywhere that would make it hard to read it behind the text. + +### Allow Pausing + +By default, the contents of `sparkly-text` will get wrapped in a `button` element that can pause and unpause the sparkles when clicked on. You can prevent this `button` from showing up by setting `allow-pausing="false"`. You do not need to set `allow-pausing="true"` to enable pausing, as allowing pausing is the intended default behavior. Since the `button` that the contents would be wrapped in is created on mount, it is not responsive to changes in the attribute after mount. In other words, whatever value you set `allow-pausing` to is what it's stuck with unless you destroy and regenerate the element. + +#### Note on disallowing pausing + +`allow-pausing` is enabled by default, and requires you to explicitly opt out. This is by design. Sparkles by their very nature are distracting and can cover up text, and people might want to turn them off. While people can turn off the animation by setting their device to `prefers-reduced-motion`, the button offers an alternative for those who would find `prefers-reduced-motion` excessive. + + + +### Prefers Reduced Motion + +The component is designed to degrade gracefully when `prefers-reduced-motion` is enabled. It will show `sparkle-amount / 2` sparkles. For some reason, those sparkles have a tendency to clump up and to generate below the bottom of the text. I have yet to figure out how to fix this. + +A screenshot of the element with prefers reduced motion enabled. There are 4 sparkles which are static. ### Children @@ -46,11 +65,12 @@ Any element can go inside the `slot` of `sparkly-text`, although all the compone + ### Incorrect Sparkle Variance Internally, `sparkly-text` uses a `setInterval` with a random duration that is determined using `randomRange(sparkleRate - sparkleVariance, sparkleRate + sparkleVariance)`. If `sparkleRate - sparkleVariance` ends up being less than 1ms, it is instead 1ms, which is the lowest duration that `setInterval` supports. - + ## Slots @@ -68,7 +88,7 @@ These are the attributes and properties for the raw `sparkly-text` web component | `sparkle-rate` | The average rate a sparkle animation will occur, in milliseconds.
**Type:** `number`.
**Default:** `250`. | ✓ | | `sparkle-variance` | Sparkles will sparkle at a random rate, at `sparkle-variance` plus or minus `sparkle-rate` (in milliseconds). For example, a `sparkle-rate` of 250ms and a `sparkle-variance` of 200ms will result in sparkles showing up as early as 50ms and as late as 450ms.
**Type:** `number`
**Default:** `200` | ✓ | | `disabled` | Stops new sparkles from showing up.
**Type:** `boolean`
**Default:** `false` | ✓ | -| `allow-pausing` | When set to `false`, prevents the ability to disable `sparkly-text` by clicking on it. You must set the attribute to `allow-pausing="false"` in full. It is intentionally obtuse as the sparkles might be distracting and users might want to disable them without turning on `prefers-reduced-motion`. Cannot be changed after the element is mounted.
**Type:** `boolean` | | +| `allow-pausing` | When set to `false`, prevents the ability to disable `sparkly-text` by clicking on it. You must set the attribute to `allow-pausing="false"` in full. Cannot be changed after the element is mounted.
**Type:** `boolean` | | ## CSS Custom Properties diff --git a/src/stories/SparklyText/SparklyText.stories.svelte b/src/stories/SparklyText/SparklyText.stories.svelte index 68b5190..1ba9f28 100644 --- a/src/stories/SparklyText/SparklyText.stories.svelte +++ b/src/stories/SparklyText/SparklyText.stories.svelte @@ -2,7 +2,7 @@ import { defineMeta } from '@storybook/addon-svelte-csf'; import { fn } from 'storybook/test'; import { createRawSnippet } from 'svelte'; - import SparklyText from './SparklyText.svelte'; + import SparklyText from '$lib/SparklyText/SparklyText.svelte'; const { Story } = defineMeta({ title: 'Sparkly Text', @@ -35,11 +35,11 @@ > ({ render: () => - `` + `` })), sparkleAmount: 12, sparkleRate: 150, @@ -51,7 +51,7 @@ > ({ render: () => 'Sparkly Text' })), textShadowColor: 'white' @@ -59,10 +59,17 @@ > ({ render: () => 'Sparkly Text' })), sparkleRate: 250, sparkleVariance: 300 }} > + + diff --git a/src/stories/assets/SCR-20251104-makw.png b/src/stories/assets/SCR-20251104-makw.png new file mode 100644 index 0000000000000000000000000000000000000000..e5e1ac56c9517d512f40abba0c716e7b2480bf67 GIT binary patch literal 40469 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 Date: Tue, 4 Nov 2025 16:14:32 -0600 Subject: [PATCH 4/4] fix: typo Co-authored-by: Miguel de los Reyes <8410924+migueldlr@users.noreply.github.com> --- src/stories/SparklyText/SparklyText.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stories/SparklyText/SparklyText.mdx b/src/stories/SparklyText/SparklyText.mdx index baf79aa..060df4a 100644 --- a/src/stories/SparklyText/SparklyText.mdx +++ b/src/stories/SparklyText/SparklyText.mdx @@ -1,7 +1,7 @@ import { Canvas, Meta, Controls } from '@storybook/addon-docs/blocks'; import TextShadowExample from "../assets/SCR-20251103-nonj.png"; -import ReducedMotionExample from "../assets/SRC-20251104-makw.png"; +import ReducedMotionExample from "../assets/SCR-20251104-makw.png"; import * as SparklyTextStories from './SparklyText.stories.svelte';