diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..35fd5ff --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = tab +indent_size = 1 +tab_width = 4 +insert_final_newline = true +trim_trailing_whitespace = true +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 0000000..48cdb08 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,59 @@ +name: 🐞 Bug Report +description: File a bug/issue +title: '[fix] ' +labels: [bug, needs triage] +body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Current Behavior + description: A concise description of what you're experiencing. + validations: + required: true + - type: textarea + attributes: + label: Expected Behavior + description: A concise description of what you expected to happen. + validations: + required: true + - type: textarea + attributes: + label: Steps To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. In this environment... + 1. With this config... + 1. Run '...' + 1. See error... + validations: + required: false + - type: textarea + attributes: + label: Environment + description: | + examples: + - **OS**: Ubuntu 20.04 + - **Node**: 13.14.0 + - **npm**: 7.6.3 + value: | + - OS: + - Node: + - npm: + render: markdown + validations: + required: false + - type: textarea + attributes: + label: Anything else? + description: | + Links? References? Anything that will give us more context about the issue you are encountering! + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..7a8df57 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: 🏠 Alooma Development Homebase + url: https://rvx.one/alooma-homebase + about: Access our development homebase for additional information about the repository. diff --git a/.github/ISSUE_TEMPLATE/docs_change.yaml b/.github/ISSUE_TEMPLATE/docs_change.yaml new file mode 100644 index 0000000..f114dc7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/docs_change.yaml @@ -0,0 +1,27 @@ +name: 📖 Documentation Change +description: Propose changes to the documentation +title: '[docs] <title>' +labels: [documentation] +body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Describe the proposed changes + description: A concise description of what you're experiencing. + validations: + required: true + - type: textarea + attributes: + label: Anything else? + description: | + Links? References? Anything that will give us more context about the issue you are encountering! + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/request_feat.yaml b/.github/ISSUE_TEMPLATE/request_feat.yaml new file mode 100644 index 0000000..afe28ad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/request_feat.yaml @@ -0,0 +1,60 @@ +name: 🌟 Feature Request +description: Suggest a feature idea for this project +title: '[feat] <title>' +labels: [enhancement] +body: + - type: checkboxes + attributes: + label: Is there an existing request for this? + description: Please search to see if an feature request (issue) already exists for the bug you encountered. + options: + - label: I have searched the existing feature requests + required: true + - type: textarea + attributes: + label: Is the feature request related to a problem? + description: A concise description of the issue. E.g I'm always frustrated when [...] + validations: + required: false + - type: textarea + attributes: + label: Is the feature request related to a existing bug/RFC? + description: If so, please put the PR/Issue number below. + validations: + required: false + - type: textarea + attributes: + label: Describe the solution you'd like + description: What does the feature request look like? + validations: + required: true + - type: textarea + attributes: + label: What is the definition of done? + description: What are it's subtasks? How do we know the feature request is fulfilled? + validations: + required: true + - type: textarea + attributes: + label: Any solutions considered? + description: | + Did you consider alternative solutions or features? Do you have a proposed solution for the feature request? + validations: + required: false + - type: dropdown + attributes: + label: Are you able to assist to bring the feature to reality? + options: + - No + - Yes, I can + validations: + required: true + - type: textarea + attributes: + label: Anything else? + description: | + Links? References? Anything that will give us more context about the issue you are encountering! + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..f9a2f7a --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,24 @@ +## What is the purpose of this PR? + +## ClickUp/Jira/Github project ticket number(s)? + +## What did you do? + +## How do we test it? + +## Checklist before merging +- [ ] Added tests where necessary +- [ ] Performed a self-review of my code +- [ ] Ensure all acceptance criteria are met +- [ ] Implemented the UI as exactly as the design (applicable only for UI changes) +- [ ] Added comments for codes where hard-to-understand +- [ ] Haven't pushed unnecessary files (ex: `.env`, `.map`) +- [ ] Haven't ignored Typescript warnings in the code (if do so add a comment with the reason) + +## Provide screenshot details of the PR + +## [optional] Tests passed screenshot + +## [optional] Breaking changes after PR + +## Anything else? diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..efe0f9c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,48 @@ +name: 🧪 CI Tests +on: + pull_request: + branches: + - '**' + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: 🔖Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: 📦Setup PNPM + uses: pnpm/action-setup@v2 + with: + version: 8 + - name: 🌳Setup Node + uses: actions/setup-node@v3 + with: + node-version: 20 + cache: pnpm + + - name: 🛠️Install dependencies from lockfile + run: pnpm install --frozen-lockfile + + - name: 🧾Print versions + run: | + git --version + node --version + pnpm --version + pnpm commitlint --version + + - name: 📝Validate PR commits with commitlint + if: ${{ github.event_name !== 'push' }} + run: pnpm commitlint --from ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} --to ${{ github.event.pull_request.head.sha }} --verbose + + - name: 🤞Run CI command + run: pnpm run ci + + - name: ☂️Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml index 8d3426f..88ca883 100644 --- a/.github/workflows/firebase-hosting-merge.yml +++ b/.github/workflows/firebase-hosting-merge.yml @@ -2,17 +2,40 @@ # https://github.com/firebase/firebase-tools name: Deploy to Firebase Hosting on merge -'on': +on: push: branches: - - master + - main jobs: build_and_deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - run: npm i && npm run build - - uses: FirebaseExtended/action-hosting-deploy@v0 + - name: 🔖Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: 📦Setup PNPM + uses: pnpm/action-setup@v2 + with: + version: 8 + - name: 🌳Setup Node + uses: actions/setup-node@v3 + with: + node-version: 20 + cache: pnpm + + - name: 🛠️Install dependencies from lockfile + run: pnpm install --frozen-lockfile + + - name: 🧾Print versions + run: | + git --version + node --version + pnpm --version + pnpm commitlint --version + + - name: 🚀 Firebase deployment on merge! + uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: '${{ secrets.GITHUB_TOKEN }}' firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_AMBIENT_RVX }}' diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml index 9b36c1f..8e62cf7 100644 --- a/.github/workflows/firebase-hosting-pull-request.yml +++ b/.github/workflows/firebase-hosting-pull-request.yml @@ -2,15 +2,38 @@ # https://github.com/firebase/firebase-tools name: Deploy to Firebase Hosting on PR -'on': pull_request +on: pull_request jobs: build_and_preview: if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - run: npm i && npm run build - - uses: FirebaseExtended/action-hosting-deploy@v0 + - name: 🔖Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: 📦Setup PNPM + uses: pnpm/action-setup@v2 + with: + version: 8 + - name: 🌳Setup Node + uses: actions/setup-node@v3 + with: + node-version: 20 + cache: pnpm + + - name: 🛠️Install dependencies from lockfile + run: pnpm install --frozen-lockfile + + - name: 🧾Print versions + run: | + git --version + node --version + pnpm --version + pnpm commitlint --version + + - name: 🚀 Firebase deployment on merge! + uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: '${{ secrets.GITHUB_TOKEN }}' firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_AMBIENT_RVX }}' diff --git a/.github/workflows/prlint.yml b/.github/workflows/prlint.yml new file mode 100644 index 0000000..5784348 --- /dev/null +++ b/.github/workflows/prlint.yml @@ -0,0 +1,34 @@ +name: 📝 Lint PR title +on: + pull_request: + types: [opened, edited, reopened, synchronize] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: 🔖Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: 📦Setup PNPM + uses: pnpm/action-setup@v2 + with: + version: 8 + - name: 🌳Setup Node + uses: actions/setup-node@v3 + with: + node-version: 20 + cache: pnpm + - name: 🛠️Install dependencies for prlint + run: pnpm install @commitlint/config-conventional + + - name: 🧾Print versions + run: | + git --version + node --version + pnpm --version + pnpm commitlint --version + + - name: 📝Validate PR title with commitlint + uses: kevintyj/prlint@v1 diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..4974c35 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..d24fdfc --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4742f7f --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2023, Kevin Taeyoon Jin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 8e2d07e..8851629 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -![Ambient - generate contrast safe colors for UIUX](https://github.com/kevintyj/ambient/raw/master/public/ambient.png) +![Ambient - generate contrast safe colors for UIUX](https://github.com/kevintyj/ambient/raw/main/public/ambient.png) + +--- + + +[![🧪 CI Tests](https://github.com/kevintyj/ambient/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/kevintyj/ambient/actions/workflows/ci.yml) +[![License](https://img.shields.io/github/license/kevintyj/ambient)](https://github.com/kevintyj/ambient/blob/main/LICENSE) **[Live Demo](https://ambient-rvx.web.app/)** diff --git a/base-color.js b/base-color.js index 6da62e2..5eb4927 100644 --- a/base-color.js +++ b/base-color.js @@ -1,33 +1,34 @@ +// eslint-disable-next-line unused-imports/no-unused-vars const color = { - OCEAN: "#1893f6", + OCEAN: '#1893f6', - // PRIMARY BLUE - BLUE:"#2b50e2", + // PRIMARY BLUE + BLUE: '#2b50e2', - INDIGO: "#4c0cc7", + INDIGO: '#4c0cc7', - // SECONDARY VIOLET - VIOLET: "#6d2fc2", + // SECONDARY VIOLET + VIOLET: '#6d2fc2', - CRIMSON: "#d73677", - WINE: "#9d1635", + CRIMSON: '#d73677', + WINE: '#9d1635', - // PRIMARY RED - RED:"#C31F2E", + // PRIMARY RED + RED: '#C31F2E', - SUN:"#EA3E33", + SUN: '#EA3E33', - // SECONDARY ORANGE - ORANGE:"#FB7912", + // SECONDARY ORANGE + ORANGE: '#FB7912', - // PRIMARY YELLOW - YELLOW:"#f8c51a", + // PRIMARY YELLOW + YELLOW: '#f8c51a', - SAPLING:"#a2c940", + SAPLING: '#a2c940', - //SECONDARY GREEN - GREEN:"#0DA750", + // SECONDARY GREEN + GREEN: '#0DA750', - AURORA: "#26b0a2", - CYAN: "#09c8de", -} + AURORA: '#26b0a2', + CYAN: '#09c8de', +}; diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..79d6271 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,6 @@ +export default { + extends: '@commitlint/config-conventional', + rules: { + 'subject-case': [2, 'always', 'sentence-case'], + }, +}; diff --git a/dist/assets/buttonPlaygroundPage.b28485cc.js b/dist/assets/buttonPlaygroundPage.b28485cc.js index 5619c1d..59ce000 100644 --- a/dist/assets/buttonPlaygroundPage.b28485cc.js +++ b/dist/assets/buttonPlaygroundPage.b28485cc.js @@ -6,5 +6,5 @@ import{e as I,a as R,i as e,b as M,f as F,g as j,t as g,c as t,d as q,h as G,j a hover:shadow hover:border-neutral-300 dark:hover:border-neutral-700 active:border-neutral-300 dark:active:border-neutral-700 - flex flex-col transition-all"><button class="flex text-default sm:text-lg justify-between py-2.5 px-3 sm:px-5"><i></i></button><div><div class="px-3 sm:px-5"><div class="border-t border-neutral-200 dark:border-neutral-700 pb-4"></div></div></div></div>`),Q=r=>{const[a,b]=R(!1),x=()=>{b(!a())};return(()=>{const c=K.cloneNode(!0),d=c.firstChild,o=d.firstChild,s=d.nextSibling,f=s.firstChild;return f.firstChild,d.$$click=x,e(d,()=>r.title,o),e(f,()=>r.children,null),M(n=>{const h=r.title,$=`bi text-lg ${a()?"bi-chevron-down":"bi-chevron-up"}`,m=`h-auto overflow-hidden max-h-0 transition-all duration-[400ms] + flex flex-col transition-all"><button class="flex text-default sm:text-lg justify-between py-2.5 px-3 sm:px-5"><i></i></button><div><div class="px-3 sm:px-5"><div class="border-t border-neutral-200 dark:border-neutral-700 pb-4"></div></div></div></div>`),Q=r=>{const[a,b]=R(!1),x=()=>{b(!a())};return(()=>{const c=K.cloneNode(!0),d=c.firstChild,o=d.firstChild,s=d.nextSibling,f=s.firstChild;return f.firstChild,d.$$click=x,e(d,()=>r.title,o),e(f,()=>r.children,null),M(n=>{const h=r.title,$=`bi text-lg ${a()?"bi-chevron-down":"bi-chevron-up"}`,m=`h-auto overflow-hidden max-h-0 transition-all duration-[400ms] ${a()?"max-h-[2000px]":""}`;return h!==n._v$&&F(d,"aria-label",n._v$=h),$!==n._v$2&&j(o,n._v$2=$),m!==n._v$3&&j(s,n._v$3=m),n},{_v$:void 0,_v$2:void 0,_v$3:void 0}),c})()};I(["click"]);const V=g('<div class="flex flex-row flex-wrap gap-4 justify-center"></div>'),u=r=>{const a=()=>X(C()),b=()=>Object.keys(C()),x=r.direction?r.direction:-1,c=()=>"NEUTRAL"in C()?[C().NEUTRAL["00"],C().NEUTRAL["09"]]:["red","red"],d=o=>{const s=o[r.baseColorPos];return r.textColorful?L(s,o[o.length-1],o[0]):L(s,c()[0],c()[1])};return(()=>{const o=V.cloneNode(!0);return e(o,t(E,{get border(){return r.border?r.border:"full"},get textColor(){return a()[0][9]},get color(){return q(()=>!!G(),!0)()?a()[0][0]:w[0]},get hoverColor(){return G()?w[1]:w[0]},get borderColor(){return a()[0][2]},get hoverBorderColor(){return a()[0][1]},children:"Default"}),null),e(o,t(O,{get each(){return a()},children:(s,f)=>t(E,{get border(){return r.border?r.border:"full"},get textColor(){return d(s)},get color(){return s[r.baseColorPos]},get hoverColor(){return s[r.baseColorPos+x]},get borderColor(){return s[r.baseColorPos+1]},get hoverBorderColor(){return s[r.baseColorPos+x+1]},get children(){return b()[f()].toLocaleLowerCase()}})}),null),o})()},Y=g('<div class="flex flex-col gap-2 pb-6 pt-2"><h6 class="text-slate-800 dark:text-slate-200">Secondary Buttons - Increase text contrast on hover</h6><h6 class="text-slate-800 dark:text-slate-200 pt-3">Primary Buttons - Increase text contrast on hover</h6><h6 class="text-slate-800 dark:text-slate-200 pt-3">Primary Buttons - Colorful text</h6><h6 class="text-slate-800 dark:text-slate-200 pt-3">Secondary Buttons (Default) - Colorful text</h6><h6 class="text-slate-800 dark:text-slate-200 pt-3">Primary Buttons (Default) - Increase button contrast on hover</h6></div>'),T=g('<div class="flex w-full justify-center"></div>'),Z=g('<div class="flex flex-col"><div class="flex justify-center px-4 sm:px-6"><div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"><h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light">Components</h6><h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200">Buttons</h1><p class="text-slate-600 dark:text-neutral-400 pb-6">This area was created for users to see the effect of Color Scales on UIUX components. We have devised components to test your color scales to.</p><h1 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2">Color Swatch</h1><div class="flex gap-x-2"></div></div></div><div class="flex flex-auto flex-col justify-center w-full px-4 sm:px-6"><div class="flex flex-col gap-x-8 w-full max-w-screen-2xl"><div class="flex flex-col"><h4 class="text-slate-600 dark:text-neutral-400">Active Color Swatch</h4><h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"></h3></div><div class="flex flex-col gap-8"><div class="flex flex-col gap-3"><h6 class="text-lg text-slate-800 dark:text-slate-200 pb-2">Secondary Buttons</h6></div><div class="flex flex-col gap-3"><h6 class="text-lg text-slate-800 dark:text-slate-200 pb-2">Primary Buttons</h6></div><div class="flex flex-col gap-3"><h6 class="text-lg text-slate-800 dark:text-slate-200">Default Button</h6></div><div class="flex flex-col gap-3"><h6 class="text-lg text-slate-800 dark:text-slate-200">Default Secondary Button</h6></div><div class="flex flex-col gap-3"><h6 class="text-lg text-slate-800 dark:text-slate-200">Default Primary Button</h6></div></div></div></div></div>'),te=()=>(()=>{const r=Z.cloneNode(!0),a=r.firstChild,b=a.firstChild,x=b.firstChild,c=x.nextSibling,d=c.nextSibling,o=d.nextSibling,s=o.nextSibling,f=a.nextSibling,n=f.firstChild,h=n.firstChild,$=h.firstChild,m=$.nextSibling,P=h.nextSibling,v=P.firstChild;v.firstChild;const _=v.nextSibling;_.firstChild;const A=_.nextSibling;A.firstChild;const k=A.nextSibling;k.firstChild;const p=k.nextSibling;return p.firstChild,e(s,t(z,{})),e(m,H),e(n,t(J,{}),P),e(P,t(Q,{title:"Possible color combinations for button",get children(){const l=Y.cloneNode(!0),U=l.firstChild,y=U.nextSibling,S=y.nextSibling,B=S.nextSibling,W=B.nextSibling;return e(l,t(i,{APCA:!0,WCAG:!0}),y),e(l,t(u,{baseColorPos:2}),y),e(l,t(i,{APCA:!0,WCAG:!1}),S),e(l,t(u,{baseColorPos:5,border:"top"}),S),e(l,t(i,{APCA:!0,WCAG:!1}),B),e(l,t(u,{baseColorPos:5,border:"top",textColorful:!0}),B),e(l,t(i,{APCA:!0,WCAG:!0}),W),e(l,t(u,{baseColorPos:2,textColorful:!0}),W),e(l,t(i,{APCA:!0,WCAG:!1}),null),e(l,t(u,{baseColorPos:5,border:"top",direction:1}),null),l}}),v),e(v,t(i,{APCA:!0,WCAG:!0}),null),e(v,t(u,{baseColorPos:2,border:"full",textColorful:!0,direction:1}),null),e(_,t(i,{APCA:!0,WCAG:!1}),null),e(_,t(u,{baseColorPos:5,border:"top",direction:1}),null),e(A,t(i,{APCA:!0}),null),e(A,t(D,{get children(){const l=T.cloneNode(!0);return e(l,t(N,{type:"default",children:"Default Button"})),l}}),null),e(k,t(i,{APCA:!0}),null),e(k,t(D,{get children(){const l=T.cloneNode(!0);return e(l,t(N,{type:"secondary",children:"Secondary Button"})),l}}),null),e(p,t(i,{APCA:!0}),null),e(p,t(D,{get children(){const l=T.cloneNode(!0);return e(l,t(N,{type:"primary",children:"Primary Button"})),l}}),null),r})();export{te as default}; diff --git a/dist/assets/index.15e05be8.js b/dist/assets/index.15e05be8.js index 2c85a63..888ee32 100644 --- a/dist/assets/index.15e05be8.js +++ b/dist/assets/index.15e05be8.js @@ -1,4 +1,4 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))l(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const c of i.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerpolicy&&(i.referrerPolicy=o.referrerpolicy),o.crossorigin==="use-credentials"?i.credentials="include":o.crossorigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function l(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();const xe={};function $r(e){xe.context=e}const Vf=(e,t)=>e===t,Ze=Symbol("solid-proxy"),Al=Symbol("solid-track"),Nn={equals:Vf};let fs=gs;const tt=1,Tn=2,us={owned:null,cleanups:null,context:null,owner:null},ml={};var ue=null;let mt=null,fe=null,Ce=null,Qe=null,Ml=0;function zt(e,t){const n=fe,l=ue,o=e.length===0,i=o?us:{owned:null,cleanups:null,context:null,owner:t||l},c=o?e:()=>e(()=>Oe(()=>Rl(i)));ue=i,fe=null;try{return Xe(c,!0)}finally{fe=n,ue=l}}function de(e,t){t=t?Object.assign({},Nn,t):Nn;const n={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0},l=o=>(typeof o=="function"&&(o=o(n.value)),hs(n,o));return[bs.bind(n),l]}function zo(e,t,n){const l=zn(e,t,!0,tt);Xt(l)}function U(e,t,n){const l=zn(e,t,!1,tt);Xt(l)}function et(e,t,n){fs=ru;const l=zn(e,t,!1,tt);l.user=!0,Qe?Qe.push(l):Xt(l)}function G(e,t,n){n=n?Object.assign({},Nn,n):Nn;const l=zn(e,t,!0,0);return l.observers=null,l.observerSlots=null,l.comparator=n.equals||void 0,Xt(l),bs.bind(l)}function Zf(e,t,n){let l,o,i;arguments.length===2&&typeof t=="object"||arguments.length===1?(l=!0,o=e,i=t||{}):(l=e,o=t,i=n||{});let c=null,f=ml,h=null,p=!1,y="initialValue"in i,S=typeof l=="function"&&G(l);const T=new Set,[j,D]=(i.storage||de)(i.initialValue),[k,q]=de(void 0),[F,ee]=de(void 0,{equals:!1}),[oe,Q]=de(y?"ready":"unresolved");if(xe.context){h=`${xe.context.id}${xe.context.count++}`;let R;i.ssrLoadFrom==="initial"?f=i.initialValue:xe.load&&(R=xe.load(h))&&(f=R[0])}function se(R,B,H,$e){return c===R&&(c=null,y=!0,(R===f||B===f)&&i.onHydrated&&queueMicrotask(()=>i.onHydrated($e,{value:B})),f=ml,I(B,H)),B}function I(R,B){Xe(()=>{B||D(()=>R),Q(B?"errored":"ready"),q(B);for(const H of T.keys())H.decrement();T.clear()},!1)}function we(){const R=Qf,B=j(),H=k();if(H&&!c)throw H;return fe&&!fe.user&&R&&zo(()=>{F(),c&&(R.resolved||T.has(R)||(R.increment(),T.add(R)))}),B}function te(R=!0){if(R!==!1&&p)return;p=!1;const B=S?S():l;if(B==null||B===!1){se(c,Oe(j));return}const H=f!==ml?f:Oe(()=>o(B,{value:j(),refetching:R}));return typeof H!="object"||!(H&&"then"in H)?(se(c,H,void 0,B),H):(c=H,p=!0,queueMicrotask(()=>p=!1),Xe(()=>{Q(y?"refreshing":"pending"),ee()},!1),H.then($e=>se(H,$e,void 0,B),$e=>se(H,void 0,ps($e),B)))}return Object.defineProperties(we,{state:{get:()=>oe()},error:{get:()=>k()},loading:{get(){const R=oe();return R==="pending"||R==="refreshing"}},latest:{get(){if(!y)return we();const R=k();if(R&&!c)throw R;return j()}}}),S?zo(()=>te(!1)):te(!1),[we,{refetch:te,mutate:D}]}function Xf(e){return Xe(e,!1)}function Oe(e){const t=fe;fe=null;try{return e()}finally{fe=t}}function ds(e,t,n){const l=Array.isArray(e);let o,i=n&&n.defer;return c=>{let f;if(l){f=Array(e.length);for(let p=0;p<e.length;p++)f[p]=e[p]()}else f=e();if(i){i=!1;return}const h=Oe(()=>t(f,o,c));return o=f,h}}function Fl(e){et(()=>Oe(e))}function yt(e){return ue===null||(ue.cleanups===null?ue.cleanups=[e]:ue.cleanups.push(e)),e}function vs(){return fe}function Kf(){return ue}function Yf(e,t){const n=ue;ue=e;try{return Xe(t,!0)}finally{ue=n}}function Jf(e){const t=fe,n=ue;return Promise.resolve().then(()=>{fe=t,ue=n;let l;return Xe(e,!1),fe=ue=null,l?l.done:void 0})}function Dl(e,t){const n=Symbol("context");return{id:n,Provider:nu(n),defaultValue:e}}function jn(e){let t;return(t=_s(ue,e.id))!==void 0?t:e.defaultValue}function Bn(e){const t=G(e),n=G(()=>Sl(t()));return n.toArray=()=>{const l=n();return Array.isArray(l)?l:l!=null?[l]:[]},n}let Qf;function bs(){const e=mt;if(this.sources&&(this.state||e))if(this.state===tt||e)Xt(this);else{const t=Ce;Ce=null,Xe(()=>Pn(this),!1),Ce=t}if(fe){const t=this.observers?this.observers.length:0;fe.sources?(fe.sources.push(this),fe.sourceSlots.push(t)):(fe.sources=[this],fe.sourceSlots=[t]),this.observers?(this.observers.push(fe),this.observerSlots.push(fe.sources.length-1)):(this.observers=[fe],this.observerSlots=[fe.sources.length-1])}return this.value}function hs(e,t,n){let l=e.value;return(!e.comparator||!e.comparator(l,t))&&(e.value=t,e.observers&&e.observers.length&&Xe(()=>{for(let o=0;o<e.observers.length;o+=1){const i=e.observers[o],c=mt&&mt.running;c&&mt.disposed.has(i),(c&&!i.tState||!c&&!i.state)&&(i.pure?Ce.push(i):Qe.push(i),i.observers&&ms(i)),c||(i.state=tt)}if(Ce.length>1e6)throw Ce=[],new Error},!1)),t}function Xt(e){if(!e.fn)return;Rl(e);const t=ue,n=fe,l=Ml;fe=ue=e,eu(e,e.value,l),fe=n,ue=t}function eu(e,t,n){let l;try{l=e.fn(t)}catch(o){e.pure&&(e.state=tt),$s(o)}(!e.updatedAt||e.updatedAt<=n)&&(e.updatedAt!=null&&"observers"in e?hs(e,l):e.value=l,e.updatedAt=n)}function zn(e,t,n,l=tt,o){const i={fn:e,state:l,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:ue,context:null,pure:n};return ue===null||ue!==us&&(ue.owned?ue.owned.push(i):ue.owned=[i]),i}function Ln(e){const t=mt;if(e.state===0||t)return;if(e.state===Tn||t)return Pn(e);if(e.suspense&&Oe(e.suspense.inFallback))return e.suspense.effects.push(e);const n=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<Ml);)(e.state||t)&&n.push(e);for(let l=n.length-1;l>=0;l--)if(e=n[l],e.state===tt||t)Xt(e);else if(e.state===Tn||t){const o=Ce;Ce=null,Xe(()=>Pn(e,n[0]),!1),Ce=o}}function Xe(e,t){if(Ce)return e();let n=!1;t||(Ce=[]),Qe?n=!0:Qe=[],Ml++;try{const l=e();return tu(n),l}catch(l){Ce||(Qe=null),$s(l)}}function tu(e){if(Ce&&(gs(Ce),Ce=null),e)return;const t=Qe;Qe=null,t.length&&Xe(()=>fs(t),!1)}function gs(e){for(let t=0;t<e.length;t++)Ln(e[t])}function ru(e){let t,n=0;for(t=0;t<e.length;t++){const l=e[t];l.user?e[n++]=l:Ln(l)}for(xe.context&&$r(),t=0;t<n;t++)Ln(e[t])}function Pn(e,t){const n=mt;e.state=0;for(let l=0;l<e.sources.length;l+=1){const o=e.sources[l];o.sources&&(o.state===tt||n?o!==t&&Ln(o):(o.state===Tn||n)&&Pn(o,t))}}function ms(e){const t=mt;for(let n=0;n<e.observers.length;n+=1){const l=e.observers[n];(!l.state||t)&&(l.state=Tn,l.pure?Ce.push(l):Qe.push(l),l.observers&&ms(l))}}function Rl(e){let t;if(e.sources)for(;e.sources.length;){const n=e.sources.pop(),l=e.sourceSlots.pop(),o=n.observers;if(o&&o.length){const i=o.pop(),c=n.observerSlots.pop();l<o.length&&(i.sourceSlots[c]=l,o[l]=i,n.observerSlots[l]=c)}}if(e.owned){for(t=0;t<e.owned.length;t++)Rl(e.owned[t]);e.owned=null}if(e.cleanups){for(t=0;t<e.cleanups.length;t++)e.cleanups[t]();e.cleanups=null}e.state=0,e.context=null}function ps(e){return e instanceof Error||typeof e=="string"?e:new Error("Unknown error")}function $s(e){throw e=ps(e),e}function _s(e,t){return e?e.context&&e.context[t]!==void 0?e.context[t]:_s(e.owner,t):void 0}function Sl(e){if(typeof e=="function"&&!e.length)return Sl(e());if(Array.isArray(e)){const t=[];for(let n=0;n<e.length;n++){const l=Sl(e[n]);Array.isArray(l)?t.push.apply(t,l):t.push(l)}return t}return e}function nu(e,t){return function(l){let o;return U(()=>o=Oe(()=>(ue.context={[e]:l.value},Bn(()=>l.children))),void 0),o}}const au=Symbol("fallback");function Uo(e){for(let t=0;t<e.length;t++)e[t]()}function lu(e,t,n={}){let l=[],o=[],i=[],c=0,f=t.length>1?[]:null;return yt(()=>Uo(i)),()=>{let h=e()||[],p,y;return h[Al],Oe(()=>{let T=h.length,j,D,k,q,F,ee,oe,Q,se;if(T===0)c!==0&&(Uo(i),i=[],l=[],o=[],c=0,f&&(f=[])),n.fallback&&(l=[au],o[0]=zt(I=>(i[0]=I,n.fallback())),c=1);else if(c===0){for(o=new Array(T),y=0;y<T;y++)l[y]=h[y],o[y]=zt(S);c=T}else{for(k=new Array(T),q=new Array(T),f&&(F=new Array(T)),ee=0,oe=Math.min(c,T);ee<oe&&l[ee]===h[ee];ee++);for(oe=c-1,Q=T-1;oe>=ee&&Q>=ee&&l[oe]===h[Q];oe--,Q--)k[Q]=o[oe],q[Q]=i[oe],f&&(F[Q]=f[oe]);for(j=new Map,D=new Array(Q+1),y=Q;y>=ee;y--)se=h[y],p=j.get(se),D[y]=p===void 0?-1:p,j.set(se,y);for(p=ee;p<=oe;p++)se=l[p],y=j.get(se),y!==void 0&&y!==-1?(k[y]=o[p],q[y]=i[p],f&&(F[y]=f[p]),y=D[y],j.set(se,y)):i[p]();for(y=ee;y<T;y++)y in k?(o[y]=k[y],i[y]=q[y],f&&(f[y]=F[y],f[y](y))):o[y]=zt(S);o=o.slice(0,c=T),l=h.slice(0)}return o});function S(T){if(i[y]=T,f){const[j,D]=de(y);return f[y]=D,t(h[y],j)}return t(h[y])}}}function _(e,t){return Oe(()=>e(t||{}))}function pn(){return!0}const ys={get(e,t,n){return t===Ze?n:e.get(t)},has(e,t){return e.has(t)},set:pn,deleteProperty:pn,getOwnPropertyDescriptor(e,t){return{configurable:!0,enumerable:!0,get(){return e.get(t)},set:pn,deleteProperty:pn}},ownKeys(e){return e.keys()}};function pl(e){return(e=typeof e=="function"?e():e)?e:{}}function xr(...e){let t=!1;for(let l=0;l<e.length;l++){const o=e[l];t||=!!o&&Ze in o,e[l]=typeof o=="function"?(t=!0,G(o)):o}if(t)return new Proxy({get(l){for(let o=e.length-1;o>=0;o--){const i=pl(e[o])[l];if(i!==void 0)return i}},has(l){for(let o=e.length-1;o>=0;o--)if(l in pl(e[o]))return!0;return!1},keys(){const l=[];for(let o=0;o<e.length;o++)l.push(...Object.keys(pl(e[o])));return[...new Set(l)]}},ys);const n={};for(let l=e.length-1;l>=0;l--)if(e[l]){const o=Object.getOwnPropertyDescriptors(e[l]);for(const i in o)i in n||Object.defineProperty(n,i,{enumerable:!0,get(){for(let c=e.length-1;c>=0;c--){const f=(e[c]||{})[i];if(f!==void 0)return f}}})}return n}function Il(e,...t){const n=new Set(t.flat()),l=Object.getOwnPropertyDescriptors(e),o=Ze in e;o||t.push(Object.keys(l).filter(c=>!n.has(c)));const i=t.map(c=>{const f={};for(let h=0;h<c.length;h++){const p=c[h];!o&&!(p in e)||Object.defineProperty(f,p,l[p]?l[p]:{get(){return e[p]},set(){return!0},enumerable:!0})}return f});return o&&i.push(new Proxy({get(c){return n.has(c)?void 0:e[c]},has(c){return n.has(c)?!1:c in e},keys(){return Object.keys(e).filter(c=>!n.has(c))}},ys)),i}function Un(e){let t,n;const l=o=>{const i=xe.context;if(i){const[f,h]=de();(n||(n=e())).then(p=>{$r(i),h(()=>p.default),$r()}),t=f}else if(!t){const[f]=Zf(()=>(n||(n=e())).then(h=>h.default));t=f}let c;return G(()=>(c=t())&&Oe(()=>{if(!i)return c(o);const f=xe.context;$r(i);const h=c(o);return $r(f),h}))};return l.preload=()=>n||((n=e()).then(o=>t=()=>o.default),n),l}function Pe(e){const t="fallback"in e&&{fallback:()=>e.fallback};return G(lu(()=>e.each,e.children,t||void 0))}function qe(e){let t=!1;const n=e.keyed,l=G(()=>e.when,void 0,{equals:(o,i)=>t?o===i:!o==!i});return G(()=>{const o=l();if(o){const i=e.children,c=typeof i=="function"&&i.length>0;return t=n||c,c?Oe(()=>i(o)):i}return e.fallback},void 0,void 0)}function ou(e){let t=!1,n=!1;const l=(c,f)=>c[0]===f[0]&&(t?c[1]===f[1]:!c[1]==!f[1])&&c[2]===f[2],o=Bn(()=>e.children),i=G(()=>{let c=o();Array.isArray(c)||(c=[c]);for(let f=0;f<c.length;f++){const h=c[f].when;if(h)return n=!!c[f].keyed,[f,h,c[f]]}return[-1]},void 0,{equals:l});return G(()=>{const[c,f,h]=i();if(c<0)return e.fallback;const p=h.children,y=typeof p=="function"&&p.length>0;return t=n||y,y?Oe(()=>p(f)):p},void 0,void 0)}function $n(e){return e}const su=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected"],iu=new Set(["className","value","readOnly","formNoValidate","isMap","noModule","playsInline",...su]),cu=new Set(["innerHTML","textContent","innerText","children"]),fu=Object.assign(Object.create(null),{className:"class",htmlFor:"for"}),Go=Object.assign(Object.create(null),{class:"className",formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly"}),uu=new Set(["beforeinput","click","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"]),du={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};function vu(e,t,n){let l=n.length,o=t.length,i=l,c=0,f=0,h=t[o-1].nextSibling,p=null;for(;c<o||f<i;){if(t[c]===n[f]){c++,f++;continue}for(;t[o-1]===n[i-1];)o--,i--;if(o===c){const y=i<l?f?n[f-1].nextSibling:n[i-f]:h;for(;f<i;)e.insertBefore(n[f++],y)}else if(i===f)for(;c<o;)(!p||!p.has(t[c]))&&t[c].remove(),c++;else if(t[c]===n[i-1]&&n[f]===t[o-1]){const y=t[--o].nextSibling;e.insertBefore(n[f++],t[c++].nextSibling),e.insertBefore(n[--i],y),t[o]=n[i]}else{if(!p){p=new Map;let S=f;for(;S<i;)p.set(n[S],S++)}const y=p.get(t[c]);if(y!=null)if(f<y&&y<i){let S=c,T=1,j;for(;++S<o&&S<i&&!((j=p.get(t[S]))==null||j!==y+T);)T++;if(T>y-f){const D=t[c];for(;f<y;)e.insertBefore(n[f++],D)}else e.replaceChild(n[f++],t[c++])}else c++;else t[c++].remove()}}}const qo="_$DX_DELEGATE";function bu(e,t,n,l={}){let o;return zt(i=>{o=i,t===document?e():C(t,e(),t.firstChild?null:void 0,n)},l.owner),()=>{o(),t.textContent=""}}function P(e,t,n){const l=document.createElement("template");l.innerHTML=e;let o=l.content.firstChild;return n&&(o=o.firstChild),o}function rt(e,t=window.document){const n=t[qo]||(t[qo]=new Set);for(let l=0,o=e.length;l<o;l++){const i=e[l];n.has(i)||(n.add(i),t.addEventListener(i,pu))}}function ge(e,t,n){n==null?e.removeAttribute(t):e.setAttribute(t,n)}function hu(e,t,n,l){l==null?e.removeAttributeNS(t,n):e.setAttributeNS(t,n,l)}function Be(e,t){t==null?e.removeAttribute("class"):e.className=t}function xs(e,t,n,l){if(l)Array.isArray(n)?(e[`$$${t}`]=n[0],e[`$$${t}Data`]=n[1]):e[`$$${t}`]=n;else if(Array.isArray(n)){const o=n[0];e.addEventListener(t,n[0]=i=>o.call(e,n[1],i))}else e.addEventListener(t,n)}function Ut(e,t,n={}){const l=Object.keys(t||{}),o=Object.keys(n);let i,c;for(i=0,c=o.length;i<c;i++){const f=o[i];!f||f==="undefined"||t[f]||(Ho(e,f,!1),delete n[f])}for(i=0,c=l.length;i<c;i++){const f=l[i],h=!!t[f];!f||f==="undefined"||n[f]===h||!h||(Ho(e,f,!0),n[f]=h)}return n}function w(e,t,n){if(!t)return n?ge(e,"style"):t;const l=e.style;if(typeof t=="string")return l.cssText=t;typeof n=="string"&&(l.cssText=n=void 0),n||(n={}),t||(t={});let o,i;for(i in n)t[i]==null&&l.removeProperty(i),delete n[i];for(i in t)o=t[i],o!==n[i]&&(l.setProperty(i,o),n[i]=o);return n}function Me(e,t={},n,l){const o={};return l||U(()=>o.children=qt(e,t.children,o.children)),U(()=>t.ref&&t.ref(e)),U(()=>gu(e,t,n,!0,o,!0)),o}function C(e,t,n,l){if(n!==void 0&&!l&&(l=[]),typeof t!="function")return qt(e,t,l,n);U(o=>qt(e,t(),o,n),l)}function gu(e,t,n,l,o={},i=!1){t||(t={});for(const c in o)if(!(c in t)){if(c==="children")continue;o[c]=Wo(e,c,null,o[c],n,i)}for(const c in t){if(c==="children"){l||qt(e,t.children);continue}const f=t[c];o[c]=Wo(e,c,f,o[c],n,i)}}function mu(e){return e.toLowerCase().replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}function Ho(e,t,n){const l=t.trim().split(/\s+/);for(let o=0,i=l.length;o<i;o++)e.classList.toggle(l[o],n)}function Wo(e,t,n,l,o,i){let c,f,h;if(t==="style")return w(e,n,l);if(t==="classList")return Ut(e,n,l);if(n===l)return l;if(t==="ref")i||n(e);else if(t.slice(0,3)==="on:"){const p=t.slice(3);l&&e.removeEventListener(p,l),n&&e.addEventListener(p,n)}else if(t.slice(0,10)==="oncapture:"){const p=t.slice(10);l&&e.removeEventListener(p,l,!0),n&&e.addEventListener(p,n,!0)}else if(t.slice(0,2)==="on"){const p=t.slice(2).toLowerCase(),y=uu.has(p);if(!y&&l){const S=Array.isArray(l)?l[0]:l;e.removeEventListener(p,S)}(y||n)&&(xs(e,p,n,y),y&&rt([p]))}else if((h=cu.has(t))||!o&&(Go[t]||(f=iu.has(t)))||(c=e.nodeName.includes("-")))t==="class"||t==="className"?Be(e,n):c&&!f&&!h?e[mu(t)]=n:e[Go[t]||t]=n;else{const p=o&&t.indexOf(":")>-1&&du[t.split(":")[0]];p?hu(e,p,t,n):ge(e,fu[t]||t,n)}return n}function pu(e){const t=`$$${e.type}`;let n=e.composedPath&&e.composedPath()[0]||e.target;for(e.target!==n&&Object.defineProperty(e,"target",{configurable:!0,value:n}),Object.defineProperty(e,"currentTarget",{configurable:!0,get(){return n||document}}),xe.registry&&!xe.done&&(xe.done=!0,document.querySelectorAll("[id^=pl-]").forEach(l=>l.remove()));n;){const l=n[t];if(l&&!n.disabled){const o=n[`${t}Data`];if(o!==void 0?l.call(n,o,e):l.call(n,e),e.cancelBubble)return}n=n._$host||n.parentNode||n.host}}function qt(e,t,n,l,o){for(xe.context&&!n&&(n=[...e.childNodes]);typeof n=="function";)n=n();if(t===n)return n;const i=typeof t,c=l!==void 0;if(e=c&&n[0]&&n[0].parentNode||e,i==="string"||i==="number"){if(xe.context)return n;if(i==="number"&&(t=t.toString()),c){let f=n[0];f&&f.nodeType===3?f.data=t:f=document.createTextNode(t),n=Rt(e,n,l,f)}else n!==""&&typeof n=="string"?n=e.firstChild.data=t:n=e.textContent=t}else if(t==null||i==="boolean"){if(xe.context)return n;n=Rt(e,n,l)}else{if(i==="function")return U(()=>{let f=t();for(;typeof f=="function";)f=f();n=qt(e,f,n,l)}),()=>n;if(Array.isArray(t)){const f=[],h=n&&Array.isArray(n);if(El(f,t,n,o))return U(()=>n=qt(e,f,n,l,!0)),()=>n;if(xe.context){if(!f.length)return n;for(let p=0;p<f.length;p++)if(f[p].parentNode)return n=f}if(f.length===0){if(n=Rt(e,n,l),c)return n}else h?n.length===0?Vo(e,f,l):vu(e,n,f):(n&&Rt(e),Vo(e,f));n=f}else if(t instanceof Node){if(xe.context&&t.parentNode)return n=c?[t]:t;if(Array.isArray(n)){if(c)return n=Rt(e,n,l,t);Rt(e,n,null,t)}else n==null||n===""||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);n=t}}return n}function El(e,t,n,l){let o=!1;for(let i=0,c=t.length;i<c;i++){let f=t[i],h=n&&n[i];if(f instanceof Node)e.push(f);else if(!(f==null||f===!0||f===!1))if(Array.isArray(f))o=El(e,f,h)||o;else if(typeof f=="function")if(l){for(;typeof f=="function";)f=f();o=El(e,Array.isArray(f)?f:[f],Array.isArray(h)?h:[h])||o}else e.push(f),o=!0;else{const p=String(f);h&&h.nodeType===3&&h.data===p?e.push(h):e.push(document.createTextNode(p))}}return o}function Vo(e,t,n=null){for(let l=0,o=t.length;l<o;l++)e.insertBefore(t[l],n)}function Rt(e,t,n,l){if(n===void 0)return e.textContent="";const o=l||document.createTextNode("");if(t.length){let i=!1;for(let c=t.length-1;c>=0;c--){const f=t[c];if(o!==f){const h=f.parentNode===e;!i&&!c?h?e.replaceChild(o,f):e.insertBefore(o,n):h&&f.remove()}else i=!0}}else e.insertBefore(o,n);return[o]}const Gn=!1;function $u(e,t,n){return e.addEventListener(t,n),()=>e.removeEventListener(t,n)}function _u([e,t],n,l){return[n?()=>n(e()):e,l?o=>t(l(o)):t]}function yu(e){try{return document.querySelector(e)}catch{return null}}function xu(e,t){const n=yu(`#${e}`);n?n.scrollIntoView():t&&window.scrollTo(0,0)}function wu(e,t,n,l){let o=!1;const i=f=>typeof f=="string"?{value:f}:f,c=_u(de(i(e()),{equals:(f,h)=>f.value===h.value}),void 0,f=>(!o&&t(f),f));return n&&yt(n((f=e())=>{o=!0,c[1](i(f)),o=!1})),{signal:c,utils:l}}function ku(e){if(e){if(Array.isArray(e))return{signal:e}}else return{signal:de({value:""})};return e}function Cu(){return wu(()=>({value:window.location.pathname+window.location.search+window.location.hash,state:history.state}),({value:e,replace:t,scroll:n,state:l})=>{t?window.history.replaceState(l,"",e):window.history.pushState(l,"",e),xu(window.location.hash.slice(1),n)},e=>$u(window,"popstate",()=>e()),{go:e=>window.history.go(e)})}function Au(){let e=new Set;function t(o){return e.add(o),()=>e.delete(o)}let n=!1;function l(o,i){if(n)return!(n=!1);const c={to:o,options:i,defaultPrevented:!1,preventDefault:()=>c.defaultPrevented=!0};for(const f of e)f.listener({...c,from:f.location,retry:h=>{h&&(n=!0),f.navigate(o,i)}});return!c.defaultPrevented}return{subscribe:t,confirm:l}}const Su=/^(?:[a-z0-9]+:)?\/\//i,Eu=/^\/+|\/+$/g;function pt(e,t=!1){const n=e.replace(Eu,"");return n?t||/^[?#]/.test(n)?n:"/"+n:""}function Sn(e,t,n){if(Su.test(t))return;const l=pt(e),o=n&&pt(n);let i="";return!o||t.startsWith("/")?i=l:o.toLowerCase().indexOf(l.toLowerCase())!==0?i=l+o:i=o,(i||"/")+pt(t,!i)}function Nu(e,t){if(e==null)throw new Error(t);return e}function ws(e,t){return pt(e).replace(/\/*(\*.*)?$/g,"")+pt(t)}function Tu(e){const t={};return e.searchParams.forEach((n,l)=>{t[l]=n}),t}function En(e,t){return decodeURIComponent(t?e.replace(/\+/g," "):e)}function Lu(e,t){const[n,l]=e.split("/*",2),o=n.split("/").filter(Boolean),i=o.length;return c=>{const f=c.split("/").filter(Boolean),h=f.length-i;if(h<0||h>0&&l===void 0&&!t)return null;const p={path:i?"":"/",params:{}};for(let y=0;y<i;y++){const S=o[y],T=f[y];if(S[0]===":")p.params[S.slice(1)]=T;else if(S.localeCompare(T,void 0,{sensitivity:"base"})!==0)return null;p.path+=`/${T}`}return l&&(p.params[l]=h?f.slice(-h).join("/"):""),p}}function Pu(e){const[t,n]=e.pattern.split("/*",2),l=t.split("/").filter(Boolean);return l.reduce((o,i)=>o+(i.startsWith(":")?2:3),l.length-(n===void 0?0:1))}function ks(e){const t=new Map,n=Kf();return new Proxy({},{get(l,o){return t.has(o)||Yf(n,()=>t.set(o,G(()=>e()[o]))),t.get(o)()},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}},ownKeys(){return Reflect.ownKeys(e())}})}function Cs(e){let t=/(\/?\:[^\/]+)\?/.exec(e);if(!t)return[e];let n=e.slice(0,t.index),l=e.slice(t.index+t[0].length);const o=[n,n+=t[1]];for(;t=/^(\/\:[^\/]+)\?/.exec(l);)o.push(n+=t[1]),l=l.slice(t[0].length);return Cs(l).reduce((i,c)=>[...i,...o.map(f=>f+c)],[])}const Ou=100,As=Dl(),qn=Dl(),Hn=()=>Nu(jn(As),"Make sure your app is wrapped in a <Router />");let Ar;const jl=()=>Ar||jn(qn)||Hn().base,Mu=e=>{const t=jl();return G(()=>t.resolvePath(e()))},Fu=e=>{const t=Hn();return G(()=>{const n=e();return n!==void 0?t.renderPath(n):n})},Ss=()=>Hn().location;function Du(e,t="",n){const{component:l,data:o,children:i}=e,c=!i||Array.isArray(i)&&!i.length,f={key:e,element:l?()=>_(l,{}):()=>{const{element:h}=e;return h===void 0&&n?_(n,{}):h},preload:e.component?l.preload:e.preload,data:o};return Es(e.path).reduce((h,p)=>{for(const y of Cs(p)){const S=ws(t,y),T=c?S:S.split("/*",1)[0];h.push({...f,originalPath:y,pattern:T,matcher:Lu(T,!c)})}return h},[])}function Ru(e,t=0){return{routes:e,score:Pu(e[e.length-1])*1e4-t,matcher(n){const l=[];for(let o=e.length-1;o>=0;o--){const i=e[o],c=i.matcher(n);if(!c)return null;l.unshift({...c,route:i})}return l}}}function Es(e){return Array.isArray(e)?e:[e]}function Ns(e,t="",n,l=[],o=[]){const i=Es(e);for(let c=0,f=i.length;c<f;c++){const h=i[c];if(h&&typeof h=="object"&&h.hasOwnProperty("path")){const p=Du(h,t,n);for(const y of p){l.push(y);const S=Array.isArray(h.children)&&h.children.length===0;if(h.children&&!S)Ns(h.children,y.pattern,n,l,o);else{const T=Ru([...l],o.length);o.push(T)}l.pop()}}}return l.length?o:o.sort((c,f)=>f.score-c.score)}function Iu(e,t){for(let n=0,l=e.length;n<l;n++){const o=e[n].matcher(t);if(o)return o}return[]}function ju(e,t){const n=new URL("http://sar"),l=G(h=>{const p=e();try{return new URL(p,n)}catch{return console.error(`Invalid path ${p}`),h}},n,{equals:(h,p)=>h.href===p.href}),o=G(()=>En(l().pathname)),i=G(()=>En(l().search,!0)),c=G(()=>En(l().hash)),f=G(()=>"");return{get pathname(){return o()},get search(){return i()},get hash(){return c()},get state(){return t()},get key(){return f()},query:ks(ds(i,()=>Tu(l())))}}function Bu(e,t="",n,l){const{signal:[o,i],utils:c={}}=ku(e),f=c.parsePath||(R=>R),h=c.renderPath||(R=>R),p=c.beforeLeave||Au(),y=Sn("",t),S=void 0;if(y===void 0)throw new Error(`${y} is not a valid base path`);y&&!o().value&&i({value:y,replace:!0,scroll:!1});const[T,j]=de(!1),D=async R=>{j(!0);try{await Jf(R)}finally{j(!1)}},[k,q]=de(o().value),[F,ee]=de(o().state),oe=ju(k,F),Q=[],se={pattern:y,params:{},path:()=>y,outlet:()=>null,resolvePath(R){return Sn(y,R)}};if(n)try{Ar=se,se.data=n({data:void 0,params:{},location:oe,navigate:we(se)})}finally{Ar=void 0}function I(R,B,H){Oe(()=>{if(typeof B=="number"){B&&(c.go?p.confirm(B,H)&&c.go(B):console.warn("Router integration does not support relative routing"));return}const{replace:$e,resolve:Ie,scroll:Ae,state:Ee}={replace:!1,resolve:!0,scroll:!0,...H},Fe=Ie?R.resolvePath(B):Sn("",B);if(Fe===void 0)throw new Error(`Path '${B}' is not a routable path`);if(Q.length>=Ou)throw new Error("Too many redirects");const je=k();if((Fe!==je||Ee!==F())&&!Gn){if(p.confirm(Fe,H)){const De=Q.push({value:je,replace:$e,scroll:Ae,state:F()});D(()=>{q(Fe),ee(Ee)}).then(()=>{Q.length===De&&te({value:Fe,state:Ee})})}}})}function we(R){return R=R||jn(qn)||se,(B,H)=>I(R,B,H)}function te(R){const B=Q[0];B&&((R.value!==B.value||R.state!==B.state)&&i({...R,replace:B.replace,scroll:B.scroll}),Q.length=0)}U(()=>{const{value:R,state:B}=o();Oe(()=>{R!==k()&&D(()=>{q(R),ee(B)})})});{let R=function(B){if(B.defaultPrevented||B.button!==0||B.metaKey||B.altKey||B.ctrlKey||B.shiftKey)return;const H=B.composedPath().find(De=>De instanceof Node&&De.nodeName.toUpperCase()==="A");if(!H||!H.hasAttribute("link"))return;const $e=H.href;if(H.target||!$e&&!H.hasAttribute("state"))return;const Ie=(H.getAttribute("rel")||"").split(/\s+/);if(H.hasAttribute("download")||Ie&&Ie.includes("external"))return;const Ae=new URL($e),Ee=En(Ae.pathname);if(Ae.origin!==window.location.origin||y&&Ee&&!Ee.toLowerCase().startsWith(y.toLowerCase()))return;const Fe=f(Ae.pathname+Ae.search+Ae.hash),je=H.getAttribute("state");B.preventDefault(),I(se,Fe,{resolve:!1,replace:H.hasAttribute("replace"),scroll:!H.hasAttribute("noscroll"),state:je&&JSON.parse(je)})};rt(["click"]),document.addEventListener("click",R),yt(()=>document.removeEventListener("click",R))}return{base:se,out:S,location:oe,isRouting:T,renderPath:h,parsePath:f,navigatorFactory:we,beforeLeave:p}}function zu(e,t,n,l){const{base:o,location:i,navigatorFactory:c}=e,{pattern:f,element:h,preload:p,data:y}=l().route,S=G(()=>l().path),T=ks(()=>l().params);p&&p();const j={parent:t,pattern:f,get child(){return n()},path:S,params:T,data:t.data,outlet:h,resolvePath(D){return Sn(o.path(),D,S())}};if(y)try{Ar=j,j.data=y({data:t.data,params:T,location:i,navigate:c(j)})}finally{Ar=void 0}return j}const Uu=P("<a link></a>"),Gu=e=>{const{source:t,url:n,base:l,data:o,out:i}=e,c=t||Cu(),f=Bu(c,l,o);return _(As.Provider,{value:f,get children(){return e.children}})},qu=e=>{const t=Hn(),n=jl(),l=Bn(()=>e.children),o=G(()=>Ns(l(),ws(n.pattern,e.base||""),Hu)),i=G(()=>Iu(o(),t.location.pathname));t.out&&t.out.matches.push(i().map(({route:p,path:y,params:S})=>({originalPath:p.originalPath,pattern:p.pattern,path:y,params:S})));const c=[];let f;const h=G(ds(i,(p,y,S)=>{let T=y&&p.length===y.length;const j=[];for(let D=0,k=p.length;D<k;D++){const q=y&&y[D],F=p[D];S&&q&&F.route.key===q.route.key?j[D]=S[D]:(T=!1,c[D]&&c[D](),zt(ee=>{c[D]=ee,j[D]=zu(t,j[D-1]||n,()=>h()[D+1],()=>i()[D])}))}return c.splice(p.length).forEach(D=>D()),S&&T?S:(f=j[0],j)}));return _(qe,{get when(){return h()&&f},children:p=>_(qn.Provider,{value:p,get children(){return p.outlet()}})})},Ve=e=>{const t=Bn(()=>e.children);return xr(e,{get children(){return t()}})},Hu=()=>{const e=jl();return _(qe,{get when(){return e.child},children:t=>_(qn.Provider,{value:t,get children(){return t.outlet()}})})};function mr(e){e=xr({inactiveClass:"inactive",activeClass:"active"},e);const[,t]=Il(e,["href","state","class","activeClass","inactiveClass","end"]),n=Mu(()=>e.href),l=Fu(n),o=Ss(),i=G(()=>{const c=n();if(c===void 0)return!1;const f=pt(c.split(/[?#]/,1)[0]).toLowerCase(),h=pt(o.pathname).toLowerCase();return e.end?f===h:h.startsWith(f)});return(()=>{const c=Uu.cloneNode(!0);return Me(c,t,!1,!1),U(f=>{const h=l()||e.href,p=JSON.stringify(e.state),y={...e.class&&{[e.class]:!0},[e.inactiveClass]:!i(),[e.activeClass]:i(),...t.classList},S=i()?"page":void 0;return h!==f._v$&&ge(c,"href",f._v$=h),p!==f._v$2&&ge(c,"state",f._v$2=p),f._v$3=Ut(c,y,f._v$3),S!==f._v$4&&ge(c,"aria-current",f._v$4=S),f},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),c})()}var Wu=Dl(),Ts="s:id",Ls="s\\:id",On=new Set,wr=new Map;Gn||document.head.querySelectorAll(`style[${Ls}]`).forEach(e=>{On.add(e.getAttribute(Ts))});function Vu(e,t){var n;if(!On.has(e)&&(On.add(e),!Gn)){let l=document.createElement("style");l.setAttribute(Ts,e),l.innerHTML=t,document.head.appendChild(l)}wr.set(e,((n=wr.get(e))!=null?n:0)+1)}function Zu(e){var t;let n=(t=wr.get(e))!=null?t:0;if(n>1)wr.set(e,n-1);else{if(wr.set(e,0),!Gn){let l=document.head.querySelector(`style[${Ls}="${e}"]`);l&&document.head.removeChild(l)}On.delete(e)}}function ut(e,t,n){var l;let o=`${e}-${t}`,i=(l=jn(Wu))!=null?l:{insert:Vu,remove:Zu};i.insert(o,n),yt(()=>i.remove(o))}function Xu(e){let t,n;return yt(()=>{n&&n()}),()=>(t||(t=zt(l=>(n=l,G(e)))),t())}function dt(){let e=[],t=Xu(()=>{let n={};for(let l=0,o=e.length;l<o;l+=1)n=Object.assign(n,e[l]());return n});return n=>{if(n){e.push(n);return}return t()}}const Ps="/assets/ambient_logo_black_new.f89cb4cc.png",Os="/assets/ambient_logo_white_new.dd71c1fb.png",Ku=P(`<button class="font-medium text-sm rounded-md pb-1.5 +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))l(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const c of i.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerpolicy&&(i.referrerPolicy=o.referrerpolicy),o.crossorigin==="use-credentials"?i.credentials="include":o.crossorigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function l(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();const xe={};function $r(e){xe.context=e}const Vf=(e,t)=>e===t,Ze=Symbol("solid-proxy"),Al=Symbol("solid-track"),Nn={equals:Vf};let fs=gs;const tt=1,Tn=2,us={owned:null,cleanups:null,context:null,owner:null},ml={};var ue=null;let mt=null,fe=null,Ce=null,Qe=null,Ml=0;function zt(e,t){const n=fe,l=ue,o=e.length===0,i=o?us:{owned:null,cleanups:null,context:null,owner:t||l},c=o?e:()=>e(()=>Oe(()=>Rl(i)));ue=i,fe=null;try{return Xe(c,!0)}finally{fe=n,ue=l}}function de(e,t){t=t?Object.assign({},Nn,t):Nn;const n={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0},l=o=>(typeof o=="function"&&(o=o(n.value)),hs(n,o));return[bs.bind(n),l]}function zo(e,t,n){const l=zn(e,t,!0,tt);Xt(l)}function U(e,t,n){const l=zn(e,t,!1,tt);Xt(l)}function et(e,t,n){fs=ru;const l=zn(e,t,!1,tt);l.user=!0,Qe?Qe.push(l):Xt(l)}function G(e,t,n){n=n?Object.assign({},Nn,n):Nn;const l=zn(e,t,!0,0);return l.observers=null,l.observerSlots=null,l.comparator=n.equals||void 0,Xt(l),bs.bind(l)}function Zf(e,t,n){let l,o,i;arguments.length===2&&typeof t=="object"||arguments.length===1?(l=!0,o=e,i=t||{}):(l=e,o=t,i=n||{});let c=null,f=ml,h=null,p=!1,y="initialValue"in i,S=typeof l=="function"&&G(l);const T=new Set,[j,D]=(i.storage||de)(i.initialValue),[k,q]=de(void 0),[F,ee]=de(void 0,{equals:!1}),[oe,Q]=de(y?"ready":"unresolved");if(xe.context){h=`${xe.context.id}${xe.context.count++}`;let R;i.ssrLoadFrom==="initial"?f=i.initialValue:xe.load&&(R=xe.load(h))&&(f=R[0])}function se(R,B,H,$e){return c===R&&(c=null,y=!0,(R===f||B===f)&&i.onHydrated&&queueMicrotask(()=>i.onHydrated($e,{value:B})),f=ml,I(B,H)),B}function I(R,B){Xe(()=>{B||D(()=>R),Q(B?"errored":"ready"),q(B);for(const H of T.keys())H.decrement();T.clear()},!1)}function we(){const R=Qf,B=j(),H=k();if(H&&!c)throw H;return fe&&!fe.user&&R&&zo(()=>{F(),c&&(R.resolved||T.has(R)||(R.increment(),T.add(R)))}),B}function te(R=!0){if(R!==!1&&p)return;p=!1;const B=S?S():l;if(B==null||B===!1){se(c,Oe(j));return}const H=f!==ml?f:Oe(()=>o(B,{value:j(),refetching:R}));return typeof H!=="object"||!(H&&"then"in H)?(se(c,H,void 0,B),H):(c=H,p=!0,queueMicrotask(()=>p=!1),Xe(()=>{Q(y?"refreshing":"pending"),ee()},!1),H.then($e=>se(H,$e,void 0,B),$e=>se(H,void 0,ps($e),B)))}return Object.defineProperties(we,{state:{get:()=>oe()},error:{get:()=>k()},loading:{get(){const R=oe();return R==="pending"||R==="refreshing"}},latest:{get(){if(!y)return we();const R=k();if(R&&!c)throw R;return j()}}}),S?zo(()=>te(!1)):te(!1),[we,{refetch:te,mutate:D}]}function Xf(e){return Xe(e,!1)}function Oe(e){const t=fe;fe=null;try{return e()}finally{fe=t}}function ds(e,t,n){const l=Array.isArray(e);let o,i=n&&n.defer;return c=>{let f;if(l){f=Array(e.length);for(let p=0;p<e.length;p++)f[p]=e[p]()}else f=e();if(i){i=!1;return}const h=Oe(()=>t(f,o,c));return o=f,h}}function Fl(e){et(()=>Oe(e))}function yt(e){return ue===null||(ue.cleanups===null?ue.cleanups=[e]:ue.cleanups.push(e)),e}function vs(){return fe}function Kf(){return ue}function Yf(e,t){const n=ue;ue=e;try{return Xe(t,!0)}finally{ue=n}}function Jf(e){const t=fe,n=ue;return Promise.resolve().then(()=>{fe=t,ue=n;let l;return Xe(e,!1),fe=ue=null,l?l.done:void 0})}function Dl(e,t){const n=Symbol("context");return{id:n,Provider:nu(n),defaultValue:e}}function jn(e){let t;return(t=_s(ue,e.id))!==void 0?t:e.defaultValue}function Bn(e){const t=G(e),n=G(()=>Sl(t()));return n.toArray=()=>{const l=n();return Array.isArray(l)?l:l!==null?[l]:[]},n}let Qf;function bs(){const e=mt;if(this.sources&&(this.state||e))if(this.state===tt||e)Xt(this);else{const t=Ce;Ce=null,Xe(()=>Pn(this),!1),Ce=t}if(fe){const t=this.observers?this.observers.length:0;fe.sources?(fe.sources.push(this),fe.sourceSlots.push(t)):(fe.sources=[this],fe.sourceSlots=[t]),this.observers?(this.observers.push(fe),this.observerSlots.push(fe.sources.length-1)):(this.observers=[fe],this.observerSlots=[fe.sources.length-1])}return this.value}function hs(e,t,n){let l=e.value;return(!e.comparator||!e.comparator(l,t))&&(e.value=t,e.observers&&e.observers.length&&Xe(()=>{for(let o=0;o<e.observers.length;o+=1){const i=e.observers[o],c=mt&&mt.running;c&&mt.disposed.has(i),(c&&!i.tState||!c&&!i.state)&&(i.pure?Ce.push(i):Qe.push(i),i.observers&&ms(i)),c||(i.state=tt)}if(Ce.length>1e6)throw Ce=[],new Error},!1)),t}function Xt(e){if(!e.fn)return;Rl(e);const t=ue,n=fe,l=Ml;fe=ue=e,eu(e,e.value,l),fe=n,ue=t}function eu(e,t,n){let l;try{l=e.fn(t)}catch(o){e.pure&&(e.state=tt),$s(o)}(!e.updatedAt||e.updatedAt<=n)&&(e.updatedAt!==null&&"observers"in e?hs(e,l):e.value=l,e.updatedAt=n)}function zn(e,t,n,l=tt,o){const i={fn:e,state:l,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:ue,context:null,pure:n};return ue===null||ue!==us&&(ue.owned?ue.owned.push(i):ue.owned=[i]),i}function Ln(e){const t=mt;if(e.state===0||t)return;if(e.state===Tn||t)return Pn(e);if(e.suspense&&Oe(e.suspense.inFallback))return e.suspense.effects.push(e);const n=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<Ml);)(e.state||t)&&n.push(e);for(let l=n.length-1;l>=0;l--)if(e=n[l],e.state===tt||t)Xt(e);else if(e.state===Tn||t){const o=Ce;Ce=null,Xe(()=>Pn(e,n[0]),!1),Ce=o}}function Xe(e,t){if(Ce)return e();let n=!1;t||(Ce=[]),Qe?n=!0:Qe=[],Ml++;try{const l=e();return tu(n),l}catch(l){Ce||(Qe=null),$s(l)}}function tu(e){if(Ce&&(gs(Ce),Ce=null),e)return;const t=Qe;Qe=null,t.length&&Xe(()=>fs(t),!1)}function gs(e){for(let t=0;t<e.length;t++)Ln(e[t])}function ru(e){let t,n=0;for(t=0;t<e.length;t++){const l=e[t];l.user?e[n++]=l:Ln(l)}for(xe.context&&$r(),t=0;t<n;t++)Ln(e[t])}function Pn(e,t){const n=mt;e.state=0;for(let l=0;l<e.sources.length;l+=1){const o=e.sources[l];o.sources&&(o.state===tt||n?o!==t&&Ln(o):(o.state===Tn||n)&&Pn(o,t))}}function ms(e){const t=mt;for(let n=0;n<e.observers.length;n+=1){const l=e.observers[n];(!l.state||t)&&(l.state=Tn,l.pure?Ce.push(l):Qe.push(l),l.observers&&ms(l))}}function Rl(e){let t;if(e.sources)for(;e.sources.length;){const n=e.sources.pop(),l=e.sourceSlots.pop(),o=n.observers;if(o&&o.length){const i=o.pop(),c=n.observerSlots.pop();l<o.length&&(i.sourceSlots[c]=l,o[l]=i,n.observerSlots[l]=c)}}if(e.owned){for(t=0;t<e.owned.length;t++)Rl(e.owned[t]);e.owned=null}if(e.cleanups){for(t=0;t<e.cleanups.length;t++)e.cleanups[t]();e.cleanups=null}e.state=0,e.context=null}function ps(e){return e instanceof Error||typeof e=="string"?e:new Error("Unknown error")}function $s(e){throw e=ps(e),e}function _s(e,t){return e?e.context&&e.context[t]!==void 0?e.context[t]:_s(e.owner,t):void 0}function Sl(e){if(typeof e=="function"&&!e.length)return Sl(e());if(Array.isArray(e)){const t=[];for(let n=0;n<e.length;n++){const l=Sl(e[n]);Array.isArray(l)?t.push.apply(t,l):t.push(l)}return t}return e}function nu(e,t){return function(l){let o;return U(()=>o=Oe(()=>(ue.context={[e]:l.value},Bn(()=>l.children))),void 0),o}}const au=Symbol("fallback");function Uo(e){for(let t=0;t<e.length;t++)e[t]()}function lu(e,t,n={}){let l=[],o=[],i=[],c=0,f=t.length>1?[]:null;return yt(()=>Uo(i)),()=>{let h=e()||[],p,y;return h[Al],Oe(()=>{let T=h.length,j,D,k,q,F,ee,oe,Q,se;if(T===0)c!==0&&(Uo(i),i=[],l=[],o=[],c=0,f&&(f=[])),n.fallback&&(l=[au],o[0]=zt(I=>(i[0]=I,n.fallback())),c=1);else if(c===0){for(o=new Array(T),y=0;y<T;y++)l[y]=h[y],o[y]=zt(S);c=T}else{for(k=new Array(T),q=new Array(T),f&&(F=new Array(T)),ee=0,oe=Math.min(c,T);ee<oe&&l[ee]===h[ee];ee++);for(oe=c-1,Q=T-1;oe>=ee&&Q>=ee&&l[oe]===h[Q];oe--,Q--)k[Q]=o[oe],q[Q]=i[oe],f&&(F[Q]=f[oe]);for(j=new Map,D=new Array(Q+1),y=Q;y>=ee;y--)se=h[y],p=j.get(se),D[y]=p===void 0?-1:p,j.set(se,y);for(p=ee;p<=oe;p++)se=l[p],y=j.get(se),y!==void 0&&y!==-1?(k[y]=o[p],q[y]=i[p],f&&(F[y]=f[p]),y=D[y],j.set(se,y)):i[p]();for(y=ee;y<T;y++)y in k?(o[y]=k[y],i[y]=q[y],f&&(f[y]=F[y],f[y](y))):o[y]=zt(S);o=o.slice(0,c=T),l=h.slice(0)}return o});function S(T){if(i[y]=T,f){const[j,D]=de(y);return f[y]=D,t(h[y],j)}return t(h[y])}}}function _(e,t){return Oe(()=>e(t||{}))}function pn(){return!0}const ys={get(e,t,n){return t===Ze?n:e.get(t)},has(e,t){return e.has(t)},set:pn,deleteProperty:pn,getOwnPropertyDescriptor(e,t){return{configurable:!0,enumerable:!0,get(){return e.get(t)},set:pn,deleteProperty:pn}},ownKeys(e){return e.keys()}};function pl(e){return(e=typeof e=="function"?e():e)?e:{}}function xr(...e){let t=!1;for(let l=0;l<e.length;l++){const o=e[l];t||=!!o&&Ze in o,e[l]=typeof o=="function"?(t=!0,G(o)):o}if(t)return new Proxy({get(l){for(let o=e.length-1;o>=0;o--){const i=pl(e[o])[l];if(i!==void 0)return i}},has(l){for(let o=e.length-1;o>=0;o--)if(l in pl(e[o]))return!0;return!1},keys(){const l=[];for(let o=0;o<e.length;o++)l.push(...Object.keys(pl(e[o])));return[...new Set(l)]}},ys);const n={};for(let l=e.length-1;l>=0;l--)if(e[l]){const o=Object.getOwnPropertyDescriptors(e[l]);for(const i in o)i in n||Object.defineProperty(n,i,{enumerable:!0,get(){for(let c=e.length-1;c>=0;c--){const f=(e[c]||{})[i];if(f!==void 0)return f}}})}return n}function Il(e,...t){const n=new Set(t.flat()),l=Object.getOwnPropertyDescriptors(e),o=Ze in e;o||t.push(Object.keys(l).filter(c=>!n.has(c)));const i=t.map(c=>{const f={};for(let h=0;h<c.length;h++){const p=c[h];!o&&!(p in e)||Object.defineProperty(f,p,l[p]?l[p]:{get(){return e[p]},set(){return!0},enumerable:!0})}return f});return o&&i.push(new Proxy({get(c){return n.has(c)?void 0:e[c]},has(c){return n.has(c)?!1:c in e},keys(){return Object.keys(e).filter(c=>!n.has(c))}},ys)),i}function Un(e){let t,n;const l=o=>{const i=xe.context;if(i){const[f,h]=de();(n||(n=e())).then(p=>{$r(i),h(()=>p.default),$r()}),t=f}else if(!t){const[f]=Zf(()=>(n||(n=e())).then(h=>h.default));t=f}let c;return G(()=>(c=t())&&Oe(()=>{if(!i)return c(o);const f=xe.context;$r(i);const h=c(o);return $r(f),h}))};return l.preload=()=>n||((n=e()).then(o=>t=()=>o.default),n),l}function Pe(e){const t="fallback"in e&&{fallback:()=>e.fallback};return G(lu(()=>e.each,e.children,t||void 0))}function qe(e){let t=!1;const n=e.keyed,l=G(()=>e.when,void 0,{equals:(o,i)=>t?o===i:!o==!i});return G(()=>{const o=l();if(o){const i=e.children,c=typeof i=="function"&&i.length>0;return t=n||c,c?Oe(()=>i(o)):i}return e.fallback},void 0,void 0)}function ou(e){let t=!1,n=!1;const l=(c,f)=>c[0]===f[0]&&(t?c[1]===f[1]:!c[1]==!f[1])&&c[2]===f[2],o=Bn(()=>e.children),i=G(()=>{let c=o();Array.isArray(c)||(c=[c]);for(let f=0;f<c.length;f++){const h=c[f].when;if(h)return n=!!c[f].keyed,[f,h,c[f]]}return[-1]},void 0,{equals:l});return G(()=>{const[c,f,h]=i();if(c<0)return e.fallback;const p=h.children,y=typeof p=="function"&&p.length>0;return t=n||y,y?Oe(()=>p(f)):p},void 0,void 0)}function $n(e){return e}const su=["allowfullscreen","async","autofocus","autoplay","checked","controls","default","disabled","formnovalidate","hidden","indeterminate","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","seamless","selected"],iu=new Set(["className","value","readOnly","formNoValidate","isMap","noModule","playsInline",...su]),cu=new Set(["innerHTML","textContent","innerText","children"]),fu=Object.assign(Object.create(null),{className:"class",htmlFor:"for"}),Go=Object.assign(Object.create(null),{class:"className",formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly"}),uu=new Set(["beforeinput","click","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"]),du={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"};function vu(e,t,n){let l=n.length,o=t.length,i=l,c=0,f=0,h=t[o-1].nextSibling,p=null;for(;c<o||f<i;){if(t[c]===n[f]){c++,f++;continue}for(;t[o-1]===n[i-1];)o--,i--;if(o===c){const y=i<l?f?n[f-1].nextSibling:n[i-f]:h;for(;f<i;)e.insertBefore(n[f++],y)}else if(i===f)for(;c<o;)(!p||!p.has(t[c]))&&t[c].remove(),c++;else if(t[c]===n[i-1]&&n[f]===t[o-1]){const y=t[--o].nextSibling;e.insertBefore(n[f++],t[c++].nextSibling),e.insertBefore(n[--i],y),t[o]=n[i]}else{if(!p){p=new Map;let S=f;for(;S<i;)p.set(n[S],S++)}const y=p.get(t[c]);if(y!==null)if(f<y&&y<i){let S=c,T=1,j;for(;++S<o&&S<i&&!((j=p.get(t[S]))==null||j!==y+T);)T++;if(T>y-f){const D=t[c];for(;f<y;)e.insertBefore(n[f++],D)}else e.replaceChild(n[f++],t[c++])}else c++;else t[c++].remove()}}}const qo="_$DX_DELEGATE";function bu(e,t,n,l={}){let o;return zt(i=>{o=i,t===document?e():C(t,e(),t.firstChild?null:void 0,n)},l.owner),()=>{o(),t.textContent=""}}function P(e,t,n){const l=document.createElement("template");l.innerHTML=e;let o=l.content.firstChild;return n&&(o=o.firstChild),o}function rt(e,t=window.document){const n=t[qo]||(t[qo]=new Set);for(let l=0,o=e.length;l<o;l++){const i=e[l];n.has(i)||(n.add(i),t.addEventListener(i,pu))}}function ge(e,t,n){n==null?e.removeAttribute(t):e.setAttribute(t,n)}function hu(e,t,n,l){l==null?e.removeAttributeNS(t,n):e.setAttributeNS(t,n,l)}function Be(e,t){t==null?e.removeAttribute("class"):e.className=t}function xs(e,t,n,l){if(l)Array.isArray(n)?(e[`$$${t}`]=n[0],e[`$$${t}Data`]=n[1]):e[`$$${t}`]=n;else if(Array.isArray(n)){const o=n[0];e.addEventListener(t,n[0]=i=>o.call(e,n[1],i))}else e.addEventListener(t,n)}function Ut(e,t,n={}){const l=Object.keys(t||{}),o=Object.keys(n);let i,c;for(i=0,c=o.length;i<c;i++){const f=o[i];!f||f==="undefined"||t[f]||(Ho(e,f,!1),delete n[f])}for(i=0,c=l.length;i<c;i++){const f=l[i],h=!!t[f];!f||f==="undefined"||n[f]===h||!h||(Ho(e,f,!0),n[f]=h)}return n}function w(e,t,n){if(!t)return n?ge(e,"style"):t;const l=e.style;if(typeof t=="string")return l.cssText=t;typeof n=="string"&&(l.cssText=n=void 0),n||(n={}),t||(t={});let o,i;for(i in n)t[i]==null&&l.removeProperty(i),delete n[i];for(i in t)o=t[i],o!==n[i]&&(l.setProperty(i,o),n[i]=o);return n}function Me(e,t={},n,l){const o={};return l||U(()=>o.children=qt(e,t.children,o.children)),U(()=>t.ref&&t.ref(e)),U(()=>gu(e,t,n,!0,o,!0)),o}function C(e,t,n,l){if(n!==void 0&&!l&&(l=[]),typeof t!=="function")return qt(e,t,l,n);U(o=>qt(e,t(),o,n),l)}function gu(e,t,n,l,o={},i=!1){t||(t={});for(const c in o)if(!(c in t)){if(c==="children")continue;o[c]=Wo(e,c,null,o[c],n,i)}for(const c in t){if(c==="children"){l||qt(e,t.children);continue}const f=t[c];o[c]=Wo(e,c,f,o[c],n,i)}}function mu(e){return e.toLowerCase().replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}function Ho(e,t,n){const l=t.trim().split(/\s+/);for(let o=0,i=l.length;o<i;o++)e.classList.toggle(l[o],n)}function Wo(e,t,n,l,o,i){let c,f,h;if(t==="style")return w(e,n,l);if(t==="classList")return Ut(e,n,l);if(n===l)return l;if(t==="ref")i||n(e);else if(t.slice(0,3)==="on:"){const p=t.slice(3);l&&e.removeEventListener(p,l),n&&e.addEventListener(p,n)}else if(t.slice(0,10)==="oncapture:"){const p=t.slice(10);l&&e.removeEventListener(p,l,!0),n&&e.addEventListener(p,n,!0)}else if(t.slice(0,2)==="on"){const p=t.slice(2).toLowerCase(),y=uu.has(p);if(!y&&l){const S=Array.isArray(l)?l[0]:l;e.removeEventListener(p,S)}(y||n)&&(xs(e,p,n,y),y&&rt([p]))}else if((h=cu.has(t))||!o&&(Go[t]||(f=iu.has(t)))||(c=e.nodeName.includes("-")))t==="class"||t==="className"?Be(e,n):c&&!f&&!h?e[mu(t)]=n:e[Go[t]||t]=n;else{const p=o&&t.indexOf(":")>-1&&du[t.split(":")[0]];p?hu(e,p,t,n):ge(e,fu[t]||t,n)}return n}function pu(e){const t=`$$${e.type}`;let n=e.composedPath&&e.composedPath()[0]||e.target;for(e.target!==n&&Object.defineProperty(e,"target",{configurable:!0,value:n}),Object.defineProperty(e,"currentTarget",{configurable:!0,get(){return n||document}}),xe.registry&&!xe.done&&(xe.done=!0,document.querySelectorAll("[id^=pl-]").forEach(l=>l.remove()));n;){const l=n[t];if(l&&!n.disabled){const o=n[`${t}Data`];if(o!==void 0?l.call(n,o,e):l.call(n,e),e.cancelBubble)return}n=n._$host||n.parentNode||n.host}}function qt(e,t,n,l,o){for(xe.context&&!n&&(n=[...e.childNodes]);typeof n=="function";)n=n();if(t===n)return n;const i=typeof t,c=l!==void 0;if(e=c&&n[0]&&n[0].parentNode||e,i==="string"||i==="number"){if(xe.context)return n;if(i==="number"&&(t=t.toString()),c){let f=n[0];f&&f.nodeType===3?f.data=t:f=document.createTextNode(t),n=Rt(e,n,l,f)}else n!==""&&typeof n=="string"?n=e.firstChild.data=t:n=e.textContent=t}else if(t==null||i==="boolean"){if(xe.context)return n;n=Rt(e,n,l)}else{if(i==="function")return U(()=>{let f=t();for(;typeof f=="function";)f=f();n=qt(e,f,n,l)}),()=>n;if(Array.isArray(t)){const f=[],h=n&&Array.isArray(n);if(El(f,t,n,o))return U(()=>n=qt(e,f,n,l,!0)),()=>n;if(xe.context){if(!f.length)return n;for(let p=0;p<f.length;p++)if(f[p].parentNode)return n=f}if(f.length===0){if(n=Rt(e,n,l),c)return n}else h?n.length===0?Vo(e,f,l):vu(e,n,f):(n&&Rt(e),Vo(e,f));n=f}else if(t instanceof Node){if(xe.context&&t.parentNode)return n=c?[t]:t;if(Array.isArray(n)){if(c)return n=Rt(e,n,l,t);Rt(e,n,null,t)}else n==null||n===""||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);n=t}}return n}function El(e,t,n,l){let o=!1;for(let i=0,c=t.length;i<c;i++){let f=t[i],h=n&&n[i];if(f instanceof Node)e.push(f);else if(!(f==null||f===!0||f===!1))if(Array.isArray(f))o=El(e,f,h)||o;else if(typeof f=="function")if(l){for(;typeof f=="function";)f=f();o=El(e,Array.isArray(f)?f:[f],Array.isArray(h)?h:[h])||o}else e.push(f),o=!0;else{const p=String(f);h&&h.nodeType===3&&h.data===p?e.push(h):e.push(document.createTextNode(p))}}return o}function Vo(e,t,n=null){for(let l=0,o=t.length;l<o;l++)e.insertBefore(t[l],n)}function Rt(e,t,n,l){if(n===void 0)return e.textContent="";const o=l||document.createTextNode("");if(t.length){let i=!1;for(let c=t.length-1;c>=0;c--){const f=t[c];if(o!==f){const h=f.parentNode===e;!i&&!c?h?e.replaceChild(o,f):e.insertBefore(o,n):h&&f.remove()}else i=!0}}else e.insertBefore(o,n);return[o]}const Gn=!1;function $u(e,t,n){return e.addEventListener(t,n),()=>e.removeEventListener(t,n)}function _u([e,t],n,l){return[n?()=>n(e()):e,l?o=>t(l(o)):t]}function yu(e){try{return document.querySelector(e)}catch{return null}}function xu(e,t){const n=yu(`#${e}`);n?n.scrollIntoView():t&&window.scrollTo(0,0)}function wu(e,t,n,l){let o=!1;const i=f=>typeof f=="string"?{value:f}:f,c=_u(de(i(e()),{equals:(f,h)=>f.value===h.value}),void 0,f=>(!o&&t(f),f));return n&&yt(n((f=e())=>{o=!0,c[1](i(f)),o=!1})),{signal:c,utils:l}}function ku(e){if(e){if(Array.isArray(e))return{signal:e}}else return{signal:de({value:""})};return e}function Cu(){return wu(()=>({value:window.location.pathname+window.location.search+window.location.hash,state:history.state}),({value:e,replace:t,scroll:n,state:l})=>{t?window.history.replaceState(l,"",e):window.history.pushState(l,"",e),xu(window.location.hash.slice(1),n)},e=>$u(window,"popstate",()=>e()),{go:e=>window.history.go(e)})}function Au(){let e=new Set;function t(o){return e.add(o),()=>e.delete(o)}let n=!1;function l(o,i){if(n)return!(n=!1);const c={to:o,options:i,defaultPrevented:!1,preventDefault:()=>c.defaultPrevented=!0};for(const f of e)f.listener({...c,from:f.location,retry:h=>{h&&(n=!0),f.navigate(o,i)}});return!c.defaultPrevented}return{subscribe:t,confirm:l}}const Su=/^(?:[a-z0-9]+:)?\/\//i,Eu=/^\/+|\/+$/g;function pt(e,t=!1){const n=e.replace(Eu,"");return n?t||/^[?#]/.test(n)?n:"/"+n:""}function Sn(e,t,n){if(Su.test(t))return;const l=pt(e),o=n&&pt(n);let i="";return!o||t.startsWith("/")?i=l:o.toLowerCase().indexOf(l.toLowerCase())!==0?i=l+o:i=o,(i||"/")+pt(t,!i)}function Nu(e,t){if(e==null)throw new Error(t);return e}function ws(e,t){return pt(e).replace(/\/*(\*.*)?$/g,"")+pt(t)}function Tu(e){const t={};return e.searchParams.forEach((n,l)=>{t[l]=n}),t}function En(e,t){return decodeURIComponent(t?e.replace(/\+/g," "):e)}function Lu(e,t){const[n,l]=e.split("/*",2),o=n.split("/").filter(Boolean),i=o.length;return c=>{const f=c.split("/").filter(Boolean),h=f.length-i;if(h<0||h>0&&l===void 0&&!t)return null;const p={path:i?"":"/",params:{}};for(let y=0;y<i;y++){const S=o[y],T=f[y];if(S[0]===":")p.params[S.slice(1)]=T;else if(S.localeCompare(T,void 0,{sensitivity:"base"})!==0)return null;p.path+=`/${T}`}return l&&(p.params[l]=h?f.slice(-h).join("/"):""),p}}function Pu(e){const[t,n]=e.pattern.split("/*",2),l=t.split("/").filter(Boolean);return l.reduce((o,i)=>o+(i.startsWith(":")?2:3),l.length-(n===void 0?0:1))}function ks(e){const t=new Map,n=Kf();return new Proxy({},{get(l,o){return t.has(o)||Yf(n,()=>t.set(o,G(()=>e()[o]))),t.get(o)()},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}},ownKeys(){return Reflect.ownKeys(e())}})}function Cs(e){let t=/(\/?\:[^\/]+)\?/.exec(e);if(!t)return[e];let n=e.slice(0,t.index),l=e.slice(t.index+t[0].length);const o=[n,n+=t[1]];for(;t=/^(\/\:[^\/]+)\?/.exec(l);)o.push(n+=t[1]),l=l.slice(t[0].length);return Cs(l).reduce((i,c)=>[...i,...o.map(f=>f+c)],[])}const Ou=100,As=Dl(),qn=Dl(),Hn=()=>Nu(jn(As),"Make sure your app is wrapped in a <Router />");let Ar;const jl=()=>Ar||jn(qn)||Hn().base,Mu=e=>{const t=jl();return G(()=>t.resolvePath(e()))},Fu=e=>{const t=Hn();return G(()=>{const n=e();return n!==void 0?t.renderPath(n):n})},Ss=()=>Hn().location;function Du(e,t="",n){const{component:l,data:o,children:i}=e,c=!i||Array.isArray(i)&&!i.length,f={key:e,element:l?()=>_(l,{}):()=>{const{element:h}=e;return h===void 0&&n?_(n,{}):h},preload:e.component?l.preload:e.preload,data:o};return Es(e.path).reduce((h,p)=>{for(const y of Cs(p)){const S=ws(t,y),T=c?S:S.split("/*",1)[0];h.push({...f,originalPath:y,pattern:T,matcher:Lu(T,!c)})}return h},[])}function Ru(e,t=0){return{routes:e,score:Pu(e[e.length-1])*1e4-t,matcher(n){const l=[];for(let o=e.length-1;o>=0;o--){const i=e[o],c=i.matcher(n);if(!c)return null;l.unshift({...c,route:i})}return l}}}function Es(e){return Array.isArray(e)?e:[e]}function Ns(e,t="",n,l=[],o=[]){const i=Es(e);for(let c=0,f=i.length;c<f;c++){const h=i[c];if(h&&typeof h=="object"&&h.hasOwnProperty("path")){const p=Du(h,t,n);for(const y of p){l.push(y);const S=Array.isArray(h.children)&&h.children.length===0;if(h.children&&!S)Ns(h.children,y.pattern,n,l,o);else{const T=Ru([...l],o.length);o.push(T)}l.pop()}}}return l.length?o:o.sort((c,f)=>f.score-c.score)}function Iu(e,t){for(let n=0,l=e.length;n<l;n++){const o=e[n].matcher(t);if(o)return o}return[]}function ju(e,t){const n=new URL("http://sar"),l=G(h=>{const p=e();try{return new URL(p,n)}catch{return console.error(`Invalid path ${p}`),h}},n,{equals:(h,p)=>h.href===p.href}),o=G(()=>En(l().pathname)),i=G(()=>En(l().search,!0)),c=G(()=>En(l().hash)),f=G(()=>"");return{get pathname(){return o()},get search(){return i()},get hash(){return c()},get state(){return t()},get key(){return f()},query:ks(ds(i,()=>Tu(l())))}}function Bu(e,t="",n,l){const{signal:[o,i],utils:c={}}=ku(e),f=c.parsePath||(R=>R),h=c.renderPath||(R=>R),p=c.beforeLeave||Au(),y=Sn("",t),S=void 0;if(y===void 0)throw new Error(`${y} is not a valid base path`);y&&!o().value&&i({value:y,replace:!0,scroll:!1});const[T,j]=de(!1),D=async R=>{j(!0);try{await Jf(R)}finally{j(!1)}},[k,q]=de(o().value),[F,ee]=de(o().state),oe=ju(k,F),Q=[],se={pattern:y,params:{},path:()=>y,outlet:()=>null,resolvePath(R){return Sn(y,R)}};if(n)try{Ar=se,se.data=n({data:void 0,params:{},location:oe,navigate:we(se)})}finally{Ar=void 0}function I(R,B,H){Oe(()=>{if(typeof B=="number"){B&&(c.go?p.confirm(B,H)&&c.go(B):console.warn("Router integration does not support relative routing"));return}const{replace:$e,resolve:Ie,scroll:Ae,state:Ee}={replace:!1,resolve:!0,scroll:!0,...H},Fe=Ie?R.resolvePath(B):Sn("",B);if(Fe===void 0)throw new Error(`Path '${B}' is not a routable path`);if(Q.length>=Ou)throw new Error("Too many redirects");const je=k();if((Fe!==je||Ee!==F())&&!Gn){if(p.confirm(Fe,H)){const De=Q.push({value:je,replace:$e,scroll:Ae,state:F()});D(()=>{q(Fe),ee(Ee)}).then(()=>{Q.length===De&&te({value:Fe,state:Ee})})}}})}function we(R){return R=R||jn(qn)||se,(B,H)=>I(R,B,H)}function te(R){const B=Q[0];B&&((R.value!==B.value||R.state!==B.state)&&i({...R,replace:B.replace,scroll:B.scroll}),Q.length=0)}U(()=>{const{value:R,state:B}=o();Oe(()=>{R!==k()&&D(()=>{q(R),ee(B)})})});{let R=function(B){if(B.defaultPrevented||B.button!==0||B.metaKey||B.altKey||B.ctrlKey||B.shiftKey)return;const H=B.composedPath().find(De=>De instanceof Node&&De.nodeName.toUpperCase()==="A");if(!H||!H.hasAttribute("link"))return;const $e=H.href;if(H.target||!$e&&!H.hasAttribute("state"))return;const Ie=(H.getAttribute("rel")||"").split(/\s+/);if(H.hasAttribute("download")||Ie&&Ie.includes("external"))return;const Ae=new URL($e),Ee=En(Ae.pathname);if(Ae.origin!==window.location.origin||y&&Ee&&!Ee.toLowerCase().startsWith(y.toLowerCase()))return;const Fe=f(Ae.pathname+Ae.search+Ae.hash),je=H.getAttribute("state");B.preventDefault(),I(se,Fe,{resolve:!1,replace:H.hasAttribute("replace"),scroll:!H.hasAttribute("noscroll"),state:je&&JSON.parse(je)})};rt(["click"]),document.addEventListener("click",R),yt(()=>document.removeEventListener("click",R))}return{base:se,out:S,location:oe,isRouting:T,renderPath:h,parsePath:f,navigatorFactory:we,beforeLeave:p}}function zu(e,t,n,l){const{base:o,location:i,navigatorFactory:c}=e,{pattern:f,element:h,preload:p,data:y}=l().route,S=G(()=>l().path),T=ks(()=>l().params);p&&p();const j={parent:t,pattern:f,get child(){return n()},path:S,params:T,data:t.data,outlet:h,resolvePath(D){return Sn(o.path(),D,S())}};if(y)try{Ar=j,j.data=y({data:t.data,params:T,location:i,navigate:c(j)})}finally{Ar=void 0}return j}const Uu=P("<a link></a>"),Gu=e=>{const{source:t,url:n,base:l,data:o,out:i}=e,c=t||Cu(),f=Bu(c,l,o);return _(As.Provider,{value:f,get children(){return e.children}})},qu=e=>{const t=Hn(),n=jl(),l=Bn(()=>e.children),o=G(()=>Ns(l(),ws(n.pattern,e.base||""),Hu)),i=G(()=>Iu(o(),t.location.pathname));t.out&&t.out.matches.push(i().map(({route:p,path:y,params:S})=>({originalPath:p.originalPath,pattern:p.pattern,path:y,params:S})));const c=[];let f;const h=G(ds(i,(p,y,S)=>{let T=y&&p.length===y.length;const j=[];for(let D=0,k=p.length;D<k;D++){const q=y&&y[D],F=p[D];S&&q&&F.route.key===q.route.key?j[D]=S[D]:(T=!1,c[D]&&c[D](),zt(ee=>{c[D]=ee,j[D]=zu(t,j[D-1]||n,()=>h()[D+1],()=>i()[D])}))}return c.splice(p.length).forEach(D=>D()),S&&T?S:(f=j[0],j)}));return _(qe,{get when(){return h()&&f},children:p=>_(qn.Provider,{value:p,get children(){return p.outlet()}})})},Ve=e=>{const t=Bn(()=>e.children);return xr(e,{get children(){return t()}})},Hu=()=>{const e=jl();return _(qe,{get when(){return e.child},children:t=>_(qn.Provider,{value:t,get children(){return t.outlet()}})})};function mr(e){e=xr({inactiveClass:"inactive",activeClass:"active"},e);const[,t]=Il(e,["href","state","class","activeClass","inactiveClass","end"]),n=Mu(()=>e.href),l=Fu(n),o=Ss(),i=G(()=>{const c=n();if(c===void 0)return!1;const f=pt(c.split(/[?#]/,1)[0]).toLowerCase(),h=pt(o.pathname).toLowerCase();return e.end?f===h:h.startsWith(f)});return(()=>{const c=Uu.cloneNode(!0);return Me(c,t,!1,!1),U(f=>{const h=l()||e.href,p=JSON.stringify(e.state),y={...e.class&&{[e.class]:!0},[e.inactiveClass]:!i(),[e.activeClass]:i(),...t.classList},S=i()?"page":void 0;return h!==f._v$&&ge(c,"href",f._v$=h),p!==f._v$2&&ge(c,"state",f._v$2=p),f._v$3=Ut(c,y,f._v$3),S!==f._v$4&&ge(c,"aria-current",f._v$4=S),f},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),c})()}var Wu=Dl(),Ts="s:id",Ls="s\\:id",On=new Set,wr=new Map;Gn||document.head.querySelectorAll(`style[${Ls}]`).forEach(e=>{On.add(e.getAttribute(Ts))});function Vu(e,t){var n;if(!On.has(e)&&(On.add(e),!Gn)){let l=document.createElement("style");l.setAttribute(Ts,e),l.innerHTML=t,document.head.appendChild(l)}wr.set(e,((n=wr.get(e))!==null?n:0)+1)}function Zu(e){var t;let n=(t=wr.get(e))!==null?t:0;if(n>1)wr.set(e,n-1);else{if(wr.set(e,0),!Gn){let l=document.head.querySelector(`style[${Ls}="${e}"]`);l&&document.head.removeChild(l)}On.delete(e)}}function ut(e,t,n){var l;let o=`${e}-${t}`,i=(l=jn(Wu))!==null?l:{insert:Vu,remove:Zu};i.insert(o,n),yt(()=>i.remove(o))}function Xu(e){let t,n;return yt(()=>{n&&n()}),()=>(t||(t=zt(l=>(n=l,G(e)))),t())}function dt(){let e=[],t=Xu(()=>{let n={};for(let l=0,o=e.length;l<o;l+=1)n=Object.assign(n,e[l]());return n});return n=>{if(n){e.push(n);return}return t()}}const Ps="/assets/ambient_logo_black_new.f89cb4cc.png",Os="/assets/ambient_logo_white_new.dd71c1fb.png",Ku=P(`<button class="font-medium text-sm rounded-md pb-1.5 bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 border-7-neutral-300 dark:border-t-neutral-700/50 @@ -61,7 +61,7 @@ * http://www.w3.org/TR/css3-color/#svg-color * * @preserve - */(function(e,t){(function(n,l){e.exports=l()})(Yu,function(){for(var n=function(r,a,s){return a===void 0&&(a=0),s===void 0&&(s=1),r<a?a:r>s?s:r},l=n,o=function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var a=0;a<=3;a++)a<3?((r[a]<0||r[a]>255)&&(r._clipped=!0),r[a]=l(r[a],0,255)):a===3&&(r[a]=l(r[a],0,1));return r},i={},c=0,f=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];c<f.length;c+=1){var h=f[c];i["[object "+h+"]"]=h.toLowerCase()}var p=function(r){return i[Object.prototype.toString.call(r)]||"object"},y=p,S=function(r,a){return a===void 0&&(a=null),r.length>=3?Array.prototype.slice.call(r):y(r[0])=="object"&&a?a.split("").filter(function(s){return r[0][s]!==void 0}).map(function(s){return r[0][s]}):r[0]},T=p,j=function(r){if(r.length<2)return null;var a=r.length-1;return T(r[a])=="string"?r[a].toLowerCase():null},D=Math.PI,k={clip_rgb:o,limit:n,type:p,unpack:S,last:j,PI:D,TWOPI:D*2,PITHIRD:D/3,DEG2RAD:D/180,RAD2DEG:180/D},q={format:{},autodetect:[]},F=k.last,ee=k.clip_rgb,oe=k.type,Q=q,se=function(){for(var a=[],s=arguments.length;s--;)a[s]=arguments[s];var u=this;if(oe(a[0])==="object"&&a[0].constructor&&a[0].constructor===this.constructor)return a[0];var v=F(a),b=!1;if(!v){b=!0,Q.sorted||(Q.autodetect=Q.autodetect.sort(function(A,L){return L.p-A.p}),Q.sorted=!0);for(var d=0,g=Q.autodetect;d<g.length;d+=1){var m=g[d];if(v=m.test.apply(m,a),v)break}}if(Q.format[v]){var x=Q.format[v].apply(null,b?a:a.slice(0,-1));u._rgb=ee(x)}else throw new Error("unknown format: "+a);u._rgb.length===3&&u._rgb.push(1)};se.prototype.toString=function(){return oe(this.hex)=="function"?this.hex():"["+this._rgb.join(",")+"]"};var I=se,we=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(we.Color,[null].concat(r)))};we.Color=I,we.version="2.4.2";var te=we,R=k.unpack,B=Math.max,H=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=R(r,"rgb"),u=s[0],v=s[1],b=s[2];u=u/255,v=v/255,b=b/255;var d=1-B(u,B(v,b)),g=d<1?1/(1-d):0,m=(1-u-d)*g,x=(1-v-d)*g,A=(1-b-d)*g;return[m,x,A,d]},$e=H,Ie=k.unpack,Ae=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Ie(r,"cmyk");var s=r[0],u=r[1],v=r[2],b=r[3],d=r.length>4?r[4]:1;return b===1?[0,0,0,d]:[s>=1?0:255*(1-s)*(1-b),u>=1?0:255*(1-u)*(1-b),v>=1?0:255*(1-v)*(1-b),d]},Ee=Ae,Fe=te,je=I,De=q,Zn=k.unpack,Xn=k.type,xt=$e;je.prototype.cmyk=function(){return xt(this._rgb)},Fe.cmyk=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(je,[null].concat(r,["cmyk"])))},De.format.cmyk=Ee,De.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=Zn(r,"cmyk"),Xn(r)==="array"&&r.length===4)return"cmyk"}});var Nr=k.unpack,Kn=k.last,wt=function(r){return Math.round(r*100)/100},Tr=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Nr(r,"hsla"),u=Kn(r)||"lsa";return s[0]=wt(s[0]||0),s[1]=wt(s[1]*100)+"%",s[2]=wt(s[2]*100)+"%",u==="hsla"||s.length>3&&s[3]<1?(s[3]=s.length>3?s[3]:1,u="hsla"):s.length=3,u+"("+s.join(",")+")"},Lr=Tr,Pr=k.unpack,Or=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Pr(r,"rgba");var s=r[0],u=r[1],v=r[2];s/=255,u/=255,v/=255;var b=Math.min(s,u,v),d=Math.max(s,u,v),g=(d+b)/2,m,x;return d===b?(m=0,x=Number.NaN):m=g<.5?(d-b)/(d+b):(d-b)/(2-d-b),s==d?x=(u-v)/(d-b):u==d?x=2+(v-s)/(d-b):v==d&&(x=4+(s-u)/(d-b)),x*=60,x<0&&(x+=360),r.length>3&&r[3]!==void 0?[x,m,g,r[3]]:[x,m,g]},Yt=Or,Mr=k.unpack,Fr=k.last,Dr=Lr,Rr=Yt,Jt=Math.round,Qt=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Mr(r,"rgba"),u=Fr(r)||"rgb";return u.substr(0,3)=="hsl"?Dr(Rr(s),u):(s[0]=Jt(s[0]),s[1]=Jt(s[1]),s[2]=Jt(s[2]),(u==="rgba"||s.length>3&&s[3]<1)&&(s[3]=s.length>3?s[3]:1,u="rgba"),u+"("+s.slice(0,u==="rgb"?3:4).join(",")+")")},Ir=Qt,jr=k.unpack,vt=Math.round,Yn=function(){for(var r,a=[],s=arguments.length;s--;)a[s]=arguments[s];a=jr(a,"hsl");var u=a[0],v=a[1],b=a[2],d,g,m;if(v===0)d=g=m=b*255;else{var x=[0,0,0],A=[0,0,0],L=b<.5?b*(1+v):b+v-b*v,E=2*b-L,M=u/360;x[0]=M+1/3,x[1]=M,x[2]=M-1/3;for(var O=0;O<3;O++)x[O]<0&&(x[O]+=1),x[O]>1&&(x[O]-=1),6*x[O]<1?A[O]=E+(L-E)*6*x[O]:2*x[O]<1?A[O]=L:3*x[O]<2?A[O]=E+(L-E)*(2/3-x[O])*6:A[O]=E;r=[vt(A[0]*255),vt(A[1]*255),vt(A[2]*255)],d=r[0],g=r[1],m=r[2]}return a.length>3?[d,g,m,a[3]]:[d,g,m,1]},Br=Yn,er=Br,kt=q,tr=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,rr=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,nr=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,ar=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,zr=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Ur=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Ct=Math.round,lr=function(r){r=r.toLowerCase().trim();var a;if(kt.format.named)try{return kt.format.named(r)}catch{}if(a=r.match(tr)){for(var s=a.slice(1,4),u=0;u<3;u++)s[u]=+s[u];return s[3]=1,s}if(a=r.match(rr)){for(var v=a.slice(1,5),b=0;b<4;b++)v[b]=+v[b];return v}if(a=r.match(nr)){for(var d=a.slice(1,4),g=0;g<3;g++)d[g]=Ct(d[g]*2.55);return d[3]=1,d}if(a=r.match(ar)){for(var m=a.slice(1,5),x=0;x<3;x++)m[x]=Ct(m[x]*2.55);return m[3]=+m[3],m}if(a=r.match(zr)){var A=a.slice(1,4);A[1]*=.01,A[2]*=.01;var L=er(A);return L[3]=1,L}if(a=r.match(Ur)){var E=a.slice(1,4);E[1]*=.01,E[2]*=.01;var M=er(E);return M[3]=+a[4],M}};lr.test=function(r){return tr.test(r)||rr.test(r)||nr.test(r)||ar.test(r)||zr.test(r)||Ur.test(r)};var Gr=lr,qr=te,or=I,Hr=q,Jn=k.type,Wr=Ir,sr=Gr;or.prototype.css=function(r){return Wr(this._rgb,r)},qr.css=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(or,[null].concat(r,["css"])))},Hr.format.css=sr,Hr.autodetect.push({p:5,test:function(r){for(var a=[],s=arguments.length-1;s-- >0;)a[s]=arguments[s+1];if(!a.length&&Jn(r)==="string"&&sr.test(r))return"css"}});var ir=I,Vr=te,Zr=q,Qn=k.unpack;Zr.format.gl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Qn(r,"rgba");return s[0]*=255,s[1]*=255,s[2]*=255,s},Vr.gl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(ir,[null].concat(r,["gl"])))},ir.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ea=k.unpack,cr=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ea(r,"rgb"),u=s[0],v=s[1],b=s[2],d=Math.min(u,v,b),g=Math.max(u,v,b),m=g-d,x=m*100/255,A=d/(255-m)*100,L;return m===0?L=Number.NaN:(u===g&&(L=(v-b)/m),v===g&&(L=2+(b-u)/m),b===g&&(L=4+(u-v)/m),L*=60,L<0&&(L+=360)),[L,x,A]},At=cr,Xr=k.unpack,Kr=Math.floor,ta=function(){for(var r,a,s,u,v,b,d=[],g=arguments.length;g--;)d[g]=arguments[g];d=Xr(d,"hcg");var m=d[0],x=d[1],A=d[2],L,E,M;A=A*255;var O=x*255;if(x===0)L=E=M=A;else{m===360&&(m=0),m>360&&(m-=360),m<0&&(m+=360),m/=60;var W=Kr(m),X=m-W,Y=A*(1-x),re=Y+O*(1-X),_e=Y+O*X,pe=Y+O;switch(W){case 0:r=[pe,_e,Y],L=r[0],E=r[1],M=r[2];break;case 1:a=[re,pe,Y],L=a[0],E=a[1],M=a[2];break;case 2:s=[Y,pe,_e],L=s[0],E=s[1],M=s[2];break;case 3:u=[Y,re,pe],L=u[0],E=u[1],M=u[2];break;case 4:v=[_e,Y,pe],L=v[0],E=v[1],M=v[2];break;case 5:b=[pe,Y,re],L=b[0],E=b[1],M=b[2];break}}return[L,E,M,d.length>3?d[3]:1]},ra=ta,na=k.unpack,aa=k.type,$=te,St=I,Yr=q,la=At;St.prototype.hcg=function(){return la(this._rgb)},$.hcg=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(St,[null].concat(r,["hcg"])))},Yr.format.hcg=ra,Yr.autodetect.push({p:1,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=na(r,"hcg"),aa(r)==="array"&&r.length===3)return"hcg"}});var oa=k.unpack,sa=k.last,Et=Math.round,ia=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=oa(r,"rgba"),u=s[0],v=s[1],b=s[2],d=s[3],g=sa(r)||"auto";d===void 0&&(d=1),g==="auto"&&(g=d<1?"rgba":"rgb"),u=Et(u),v=Et(v),b=Et(b);var m=u<<16|v<<8|b,x="000000"+m.toString(16);x=x.substr(x.length-6);var A="0"+Et(d*255).toString(16);switch(A=A.substr(A.length-2),g.toLowerCase()){case"rgba":return"#"+x+A;case"argb":return"#"+A+x;default:return"#"+x}},Jr=ia,ca=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,fa=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,ua=function(r){if(r.match(ca)){(r.length===4||r.length===7)&&(r=r.substr(1)),r.length===3&&(r=r.split(""),r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var a=parseInt(r,16),s=a>>16,u=a>>8&255,v=a&255;return[s,u,v,1]}if(r.match(fa)){(r.length===5||r.length===9)&&(r=r.substr(1)),r.length===4&&(r=r.split(""),r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var b=parseInt(r,16),d=b>>24&255,g=b>>16&255,m=b>>8&255,x=Math.round((b&255)/255*100)/100;return[d,g,m,x]}throw new Error("unknown hex color: "+r)},Qr=ua,da=te,en=I,va=k.type,tn=q,ba=Jr;en.prototype.hex=function(r){return ba(this._rgb,r)},da.hex=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(en,[null].concat(r,["hex"])))},tn.format.hex=Qr,tn.autodetect.push({p:4,test:function(r){for(var a=[],s=arguments.length-1;s-- >0;)a[s]=arguments[s+1];if(!a.length&&va(r)==="string"&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var ha=k.unpack,rn=k.TWOPI,ga=Math.min,ma=Math.sqrt,pa=Math.acos,$a=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ha(r,"rgb"),u=s[0],v=s[1],b=s[2];u/=255,v/=255,b/=255;var d,g=ga(u,v,b),m=(u+v+b)/3,x=m>0?1-g/m:0;return x===0?d=NaN:(d=(u-v+(u-b))/2,d/=ma((u-v)*(u-v)+(u-b)*(v-b)),d=pa(d),b>v&&(d=rn-d),d/=rn),[d*360,x,m]},_a=$a,ya=k.unpack,fr=k.limit,nt=k.TWOPI,ur=k.PITHIRD,at=Math.cos,xa=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=ya(r,"hsi");var s=r[0],u=r[1],v=r[2],b,d,g;return isNaN(s)&&(s=0),isNaN(u)&&(u=0),s>360&&(s-=360),s<0&&(s+=360),s/=360,s<1/3?(g=(1-u)/3,b=(1+u*at(nt*s)/at(ur-nt*s))/3,d=1-(g+b)):s<2/3?(s-=1/3,b=(1-u)/3,d=(1+u*at(nt*s)/at(ur-nt*s))/3,g=1-(b+d)):(s-=2/3,d=(1-u)/3,g=(1+u*at(nt*s)/at(ur-nt*s))/3,b=1-(d+g)),b=fr(v*b*3),d=fr(v*d*3),g=fr(v*g*3),[b*255,d*255,g*255,r.length>3?r[3]:1]},wa=xa,ka=k.unpack,Ca=k.type,Aa=te,nn=I,an=q,Sa=_a;nn.prototype.hsi=function(){return Sa(this._rgb)},Aa.hsi=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(nn,[null].concat(r,["hsi"])))},an.format.hsi=wa,an.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=ka(r,"hsi"),Ca(r)==="array"&&r.length===3)return"hsi"}});var Ea=k.unpack,Na=k.type,Ta=te,ln=I,on=q,La=Yt;ln.prototype.hsl=function(){return La(this._rgb)},Ta.hsl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(ln,[null].concat(r,["hsl"])))},on.format.hsl=Br,on.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=Ea(r,"hsl"),Na(r)==="array"&&r.length===3)return"hsl"}});var Pa=k.unpack,Oa=Math.min,Ma=Math.max,Fa=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Pa(r,"rgb");var s=r[0],u=r[1],v=r[2],b=Oa(s,u,v),d=Ma(s,u,v),g=d-b,m,x,A;return A=d/255,d===0?(m=Number.NaN,x=0):(x=g/d,s===d&&(m=(u-v)/g),u===d&&(m=2+(v-s)/g),v===d&&(m=4+(s-u)/g),m*=60,m<0&&(m+=360)),[m,x,A]},Da=Fa,Ra=k.unpack,Ia=Math.floor,ja=function(){for(var r,a,s,u,v,b,d=[],g=arguments.length;g--;)d[g]=arguments[g];d=Ra(d,"hsv");var m=d[0],x=d[1],A=d[2],L,E,M;if(A*=255,x===0)L=E=M=A;else{m===360&&(m=0),m>360&&(m-=360),m<0&&(m+=360),m/=60;var O=Ia(m),W=m-O,X=A*(1-x),Y=A*(1-x*W),re=A*(1-x*(1-W));switch(O){case 0:r=[A,re,X],L=r[0],E=r[1],M=r[2];break;case 1:a=[Y,A,X],L=a[0],E=a[1],M=a[2];break;case 2:s=[X,A,re],L=s[0],E=s[1],M=s[2];break;case 3:u=[X,Y,A],L=u[0],E=u[1],M=u[2];break;case 4:v=[re,X,A],L=v[0],E=v[1],M=v[2];break;case 5:b=[A,X,Y],L=b[0],E=b[1],M=b[2];break}}return[L,E,M,d.length>3?d[3]:1]},Ba=ja,za=k.unpack,Ua=k.type,Ga=te,sn=I,cn=q,qa=Da;sn.prototype.hsv=function(){return qa(this._rgb)},Ga.hsv=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(sn,[null].concat(r,["hsv"])))},cn.format.hsv=Ba,cn.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=za(r,"hsv"),Ua(r)==="array"&&r.length===3)return"hsv"}});var Nt={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},lt=Nt,Ha=k.unpack,fn=Math.pow,Wa=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Ha(r,"rgb"),u=s[0],v=s[1],b=s[2],d=Va(u,v,b),g=d[0],m=d[1],x=d[2],A=116*m-16;return[A<0?0:A,500*(g-m),200*(m-x)]},dr=function(r){return(r/=255)<=.04045?r/12.92:fn((r+.055)/1.055,2.4)},vr=function(r){return r>lt.t3?fn(r,1/3):r/lt.t2+lt.t0},Va=function(r,a,s){r=dr(r),a=dr(a),s=dr(s);var u=vr((.4124564*r+.3575761*a+.1804375*s)/lt.Xn),v=vr((.2126729*r+.7151522*a+.072175*s)/lt.Yn),b=vr((.0193339*r+.119192*a+.9503041*s)/lt.Zn);return[u,v,b]},Ul=Wa,Tt=Nt,Js=k.unpack,Qs=Math.pow,ei=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Js(r,"lab");var s=r[0],u=r[1],v=r[2],b,d,g,m,x,A;return d=(s+16)/116,b=isNaN(u)?d:d+u/500,g=isNaN(v)?d:d-v/200,d=Tt.Yn*Xa(d),b=Tt.Xn*Xa(b),g=Tt.Zn*Xa(g),m=Za(3.2404542*b-1.5371385*d-.4985314*g),x=Za(-.969266*b+1.8760108*d+.041556*g),A=Za(.0556434*b-.2040259*d+1.0572252*g),[m,x,A,r.length>3?r[3]:1]},Za=function(r){return 255*(r<=.00304?12.92*r:1.055*Qs(r,1/2.4)-.055)},Xa=function(r){return r>Tt.t1?r*r*r:Tt.t2*(r-Tt.t0)},Gl=ei,ti=k.unpack,ri=k.type,ni=te,ql=I,Hl=q,ai=Ul;ql.prototype.lab=function(){return ai(this._rgb)},ni.lab=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(ql,[null].concat(r,["lab"])))},Hl.format.lab=Gl,Hl.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=ti(r,"lab"),ri(r)==="array"&&r.length===3)return"lab"}});var li=k.unpack,oi=k.RAD2DEG,si=Math.sqrt,ii=Math.atan2,ci=Math.round,fi=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=li(r,"lab"),u=s[0],v=s[1],b=s[2],d=si(v*v+b*b),g=(ii(b,v)*oi+360)%360;return ci(d*1e4)===0&&(g=Number.NaN),[u,d,g]},Wl=fi,ui=k.unpack,di=Ul,vi=Wl,bi=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ui(r,"rgb"),u=s[0],v=s[1],b=s[2],d=di(u,v,b),g=d[0],m=d[1],x=d[2];return vi(g,m,x)},hi=bi,gi=k.unpack,mi=k.DEG2RAD,pi=Math.sin,$i=Math.cos,_i=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=gi(r,"lch"),u=s[0],v=s[1],b=s[2];return isNaN(b)&&(b=0),b=b*mi,[u,$i(b)*v,pi(b)*v]},Vl=_i,yi=k.unpack,xi=Vl,wi=Gl,ki=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=yi(r,"lch");var s=r[0],u=r[1],v=r[2],b=xi(s,u,v),d=b[0],g=b[1],m=b[2],x=wi(d,g,m),A=x[0],L=x[1],E=x[2];return[A,L,E,r.length>3?r[3]:1]},Zl=ki,Ci=k.unpack,Ai=Zl,Si=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Ci(r,"hcl").reverse();return Ai.apply(void 0,s)},Ei=Si,Ni=k.unpack,Ti=k.type,Xl=te,un=I,Ka=q,Kl=hi;un.prototype.lch=function(){return Kl(this._rgb)},un.prototype.hcl=function(){return Kl(this._rgb).reverse()},Xl.lch=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(un,[null].concat(r,["lch"])))},Xl.hcl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(un,[null].concat(r,["hcl"])))},Ka.format.lch=Zl,Ka.format.hcl=Ei,["lch","hcl"].forEach(function(r){return Ka.autodetect.push({p:2,test:function(){for(var a=[],s=arguments.length;s--;)a[s]=arguments[s];if(a=Ni(a,r),Ti(a)==="array"&&a.length===3)return r}})});var Li={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},Yl=Li,Pi=I,Jl=q,Oi=k.type,br=Yl,Mi=Qr,Fi=Jr;Pi.prototype.name=function(){for(var r=Fi(this._rgb,"rgb"),a=0,s=Object.keys(br);a<s.length;a+=1){var u=s[a];if(br[u]===r)return u.toLowerCase()}return r},Jl.format.named=function(r){if(r=r.toLowerCase(),br[r])return Mi(br[r]);throw new Error("unknown color name: "+r)},Jl.autodetect.push({p:5,test:function(r){for(var a=[],s=arguments.length-1;s-- >0;)a[s]=arguments[s+1];if(!a.length&&Oi(r)==="string"&&br[r.toLowerCase()])return"named"}});var Di=k.unpack,Ri=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Di(r,"rgb"),u=s[0],v=s[1],b=s[2];return(u<<16)+(v<<8)+b},Ii=Ri,ji=k.type,Bi=function(r){if(ji(r)=="number"&&r>=0&&r<=16777215){var a=r>>16,s=r>>8&255,u=r&255;return[a,s,u,1]}throw new Error("unknown num color: "+r)},zi=Bi,Ui=te,Ql=I,eo=q,Gi=k.type,qi=Ii;Ql.prototype.num=function(){return qi(this._rgb)},Ui.num=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(Ql,[null].concat(r,["num"])))},eo.format.num=zi,eo.autodetect.push({p:5,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r.length===1&&Gi(r[0])==="number"&&r[0]>=0&&r[0]<=16777215)return"num"}});var Hi=te,Ya=I,to=q,ro=k.unpack,no=k.type,ao=Math.round;Ya.prototype.rgb=function(r){return r===void 0&&(r=!0),r===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(ao)},Ya.prototype.rgba=function(r){return r===void 0&&(r=!0),this._rgb.slice(0,4).map(function(a,s){return s<3?r===!1?a:ao(a):a})},Hi.rgb=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(Ya,[null].concat(r,["rgb"])))},to.format.rgb=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ro(r,"rgba");return s[3]===void 0&&(s[3]=1),s},to.autodetect.push({p:3,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=ro(r,"rgba"),no(r)==="array"&&(r.length===3||r.length===4&&no(r[3])=="number"&&r[3]>=0&&r[3]<=1))return"rgb"}});var dn=Math.log,Wi=function(r){var a=r/100,s,u,v;return a<66?(s=255,u=a<6?0:-155.25485562709179-.44596950469579133*(u=a-2)+104.49216199393888*dn(u),v=a<20?0:-254.76935184120902+.8274096064007395*(v=a-10)+115.67994401066147*dn(v)):(s=351.97690566805693+.114206453784165*(s=a-55)-40.25366309332127*dn(s),u=325.4494125711974+.07943456536662342*(u=a-50)-28.0852963507957*dn(u),v=255),[s,u,v,1]},lo=Wi,Vi=lo,Zi=k.unpack,Xi=Math.round,Ki=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];for(var s=Zi(r,"rgb"),u=s[0],v=s[2],b=1e3,d=4e4,g=.4,m;d-b>g;){m=(d+b)*.5;var x=Vi(m);x[2]/x[0]>=v/u?d=m:b=m}return Xi(m)},Yi=Ki,Ja=te,vn=I,Qa=q,Ji=Yi;vn.prototype.temp=vn.prototype.kelvin=vn.prototype.temperature=function(){return Ji(this._rgb)},Ja.temp=Ja.kelvin=Ja.temperature=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(vn,[null].concat(r,["temp"])))},Qa.format.temp=Qa.format.kelvin=Qa.format.temperature=lo;var Qi=k.unpack,el=Math.cbrt,ec=Math.pow,tc=Math.sign,rc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Qi(r,"rgb"),u=s[0],v=s[1],b=s[2],d=[tl(u/255),tl(v/255),tl(b/255)],g=d[0],m=d[1],x=d[2],A=el(.4122214708*g+.5363325363*m+.0514459929*x),L=el(.2119034982*g+.6806995451*m+.1073969566*x),E=el(.0883024619*g+.2817188376*m+.6299787005*x);return[.2104542553*A+.793617785*L-.0040720468*E,1.9779984951*A-2.428592205*L+.4505937099*E,.0259040371*A+.7827717662*L-.808675766*E]},oo=rc;function tl(r){var a=Math.abs(r);return a<.04045?r/12.92:(tc(r)||1)*ec((a+.055)/1.055,2.4)}var nc=k.unpack,bn=Math.pow,ac=Math.sign,lc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=nc(r,"lab");var s=r[0],u=r[1],v=r[2],b=bn(s+.3963377774*u+.2158037573*v,3),d=bn(s-.1055613458*u-.0638541728*v,3),g=bn(s-.0894841775*u-1.291485548*v,3);return[255*rl(4.0767416621*b-3.3077115913*d+.2309699292*g),255*rl(-1.2684380046*b+2.6097574011*d-.3413193965*g),255*rl(-.0041960863*b-.7034186147*d+1.707614701*g),r.length>3?r[3]:1]},so=lc;function rl(r){var a=Math.abs(r);return a>.0031308?(ac(r)||1)*(1.055*bn(a,1/2.4)-.055):r*12.92}var oc=k.unpack,sc=k.type,ic=te,io=I,co=q,cc=oo;io.prototype.oklab=function(){return cc(this._rgb)},ic.oklab=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(io,[null].concat(r,["oklab"])))},co.format.oklab=so,co.autodetect.push({p:3,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=oc(r,"oklab"),sc(r)==="array"&&r.length===3)return"oklab"}});var fc=k.unpack,uc=oo,dc=Wl,vc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=fc(r,"rgb"),u=s[0],v=s[1],b=s[2],d=uc(u,v,b),g=d[0],m=d[1],x=d[2];return dc(g,m,x)},bc=vc,hc=k.unpack,gc=Vl,mc=so,pc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=hc(r,"lch");var s=r[0],u=r[1],v=r[2],b=gc(s,u,v),d=b[0],g=b[1],m=b[2],x=mc(d,g,m),A=x[0],L=x[1],E=x[2];return[A,L,E,r.length>3?r[3]:1]},$c=pc,_c=k.unpack,yc=k.type,xc=te,fo=I,uo=q,wc=bc;fo.prototype.oklch=function(){return wc(this._rgb)},xc.oklch=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(fo,[null].concat(r,["oklch"])))},uo.format.oklch=$c,uo.autodetect.push({p:3,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=_c(r,"oklch"),yc(r)==="array"&&r.length===3)return"oklch"}});var vo=I,kc=k.type;vo.prototype.alpha=function(r,a){return a===void 0&&(a=!1),r!==void 0&&kc(r)==="number"?a?(this._rgb[3]=r,this):new vo([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]};var Cc=I;Cc.prototype.clipped=function(){return this._rgb._clipped||!1};var bt=I,Ac=Nt;bt.prototype.darken=function(r){r===void 0&&(r=1);var a=this,s=a.lab();return s[0]-=Ac.Kn*r,new bt(s,"lab").alpha(a.alpha(),!0)},bt.prototype.brighten=function(r){return r===void 0&&(r=1),this.darken(-r)},bt.prototype.darker=bt.prototype.darken,bt.prototype.brighter=bt.prototype.brighten;var Sc=I;Sc.prototype.get=function(r){var a=r.split("."),s=a[0],u=a[1],v=this[s]();if(u){var b=s.indexOf(u)-(s.substr(0,2)==="ok"?2:0);if(b>-1)return v[b];throw new Error("unknown channel "+u+" in mode "+s)}else return v};var Lt=I,Ec=k.type,Nc=Math.pow,Tc=1e-7,Lc=20;Lt.prototype.luminance=function(r){if(r!==void 0&&Ec(r)==="number"){if(r===0)return new Lt([0,0,0,this._rgb[3]],"rgb");if(r===1)return new Lt([255,255,255,this._rgb[3]],"rgb");var a=this.luminance(),s="rgb",u=Lc,v=function(d,g){var m=d.interpolate(g,.5,s),x=m.luminance();return Math.abs(r-x)<Tc||!u--?m:x>r?v(d,m):v(m,g)},b=(a>r?v(new Lt([0,0,0]),this):v(this,new Lt([255,255,255]))).rgb();return new Lt(b.concat([this._rgb[3]]))}return Pc.apply(void 0,this._rgb.slice(0,3))};var Pc=function(r,a,s){return r=nl(r),a=nl(a),s=nl(s),.2126*r+.7152*a+.0722*s},nl=function(r){return r/=255,r<=.03928?r/12.92:Nc((r+.055)/1.055,2.4)},Re={},bo=I,ho=k.type,hn=Re,go=function(r,a,s){s===void 0&&(s=.5);for(var u=[],v=arguments.length-3;v-- >0;)u[v]=arguments[v+3];var b=u[0]||"lrgb";if(!hn[b]&&!u.length&&(b=Object.keys(hn)[0]),!hn[b])throw new Error("interpolation mode "+b+" is not defined");return ho(r)!=="object"&&(r=new bo(r)),ho(a)!=="object"&&(a=new bo(a)),hn[b](r,a,s).alpha(r.alpha()+s*(a.alpha()-r.alpha()))},mo=I,Oc=go;mo.prototype.mix=mo.prototype.interpolate=function(r,a){a===void 0&&(a=.5);for(var s=[],u=arguments.length-2;u-- >0;)s[u]=arguments[u+2];return Oc.apply(void 0,[this,r,a].concat(s))};var po=I;po.prototype.premultiply=function(r){r===void 0&&(r=!1);var a=this._rgb,s=a[3];return r?(this._rgb=[a[0]*s,a[1]*s,a[2]*s,s],this):new po([a[0]*s,a[1]*s,a[2]*s,s],"rgb")};var al=I,Mc=Nt;al.prototype.saturate=function(r){r===void 0&&(r=1);var a=this,s=a.lch();return s[1]+=Mc.Kn*r,s[1]<0&&(s[1]=0),new al(s,"lch").alpha(a.alpha(),!0)},al.prototype.desaturate=function(r){return r===void 0&&(r=1),this.saturate(-r)};var $o=I,_o=k.type;$o.prototype.set=function(r,a,s){s===void 0&&(s=!1);var u=r.split("."),v=u[0],b=u[1],d=this[v]();if(b){var g=v.indexOf(b)-(v.substr(0,2)==="ok"?2:0);if(g>-1){if(_o(a)=="string")switch(a.charAt(0)){case"+":d[g]+=+a;break;case"-":d[g]+=+a;break;case"*":d[g]*=+a.substr(1);break;case"/":d[g]/=+a.substr(1);break;default:d[g]=+a}else if(_o(a)==="number")d[g]=a;else throw new Error("unsupported value for Color.set");var m=new $o(d,v);return s?(this._rgb=m._rgb,this):m}throw new Error("unknown channel "+b+" in mode "+v)}else return d};var Fc=I,Dc=function(r,a,s){var u=r._rgb,v=a._rgb;return new Fc(u[0]+s*(v[0]-u[0]),u[1]+s*(v[1]-u[1]),u[2]+s*(v[2]-u[2]),"rgb")};Re.rgb=Dc;var Rc=I,ll=Math.sqrt,Pt=Math.pow,Ic=function(r,a,s){var u=r._rgb,v=u[0],b=u[1],d=u[2],g=a._rgb,m=g[0],x=g[1],A=g[2];return new Rc(ll(Pt(v,2)*(1-s)+Pt(m,2)*s),ll(Pt(b,2)*(1-s)+Pt(x,2)*s),ll(Pt(d,2)*(1-s)+Pt(A,2)*s),"rgb")};Re.lrgb=Ic;var jc=I,Bc=function(r,a,s){var u=r.lab(),v=a.lab();return new jc(u[0]+s*(v[0]-u[0]),u[1]+s*(v[1]-u[1]),u[2]+s*(v[2]-u[2]),"lab")};Re.lab=Bc;var yo=I,Ot=function(r,a,s,u){var v,b,d,g;u==="hsl"?(d=r.hsl(),g=a.hsl()):u==="hsv"?(d=r.hsv(),g=a.hsv()):u==="hcg"?(d=r.hcg(),g=a.hcg()):u==="hsi"?(d=r.hsi(),g=a.hsi()):u==="lch"||u==="hcl"?(u="hcl",d=r.hcl(),g=a.hcl()):u==="oklch"&&(d=r.oklch().reverse(),g=a.oklch().reverse());var m,x,A,L,E,M;(u.substr(0,1)==="h"||u==="oklch")&&(v=d,m=v[0],A=v[1],E=v[2],b=g,x=b[0],L=b[1],M=b[2]);var O,W,X,Y;return!isNaN(m)&&!isNaN(x)?(x>m&&x-m>180?Y=x-(m+360):x<m&&m-x>180?Y=x+360-m:Y=x-m,W=m+s*Y):isNaN(m)?isNaN(x)?W=Number.NaN:(W=x,(E==1||E==0)&&u!="hsv"&&(O=L)):(W=m,(M==1||M==0)&&u!="hsv"&&(O=A)),O===void 0&&(O=A+s*(L-A)),X=E+s*(M-E),u==="oklch"?new yo([X,O,W],u):new yo([W,O,X],u)},zc=Ot,xo=function(r,a,s){return zc(r,a,s,"lch")};Re.lch=xo,Re.hcl=xo;var Uc=I,Gc=function(r,a,s){var u=r.num(),v=a.num();return new Uc(u+s*(v-u),"num")};Re.num=Gc;var qc=Ot,Hc=function(r,a,s){return qc(r,a,s,"hcg")};Re.hcg=Hc;var Wc=Ot,Vc=function(r,a,s){return Wc(r,a,s,"hsi")};Re.hsi=Vc;var Zc=Ot,Xc=function(r,a,s){return Zc(r,a,s,"hsl")};Re.hsl=Xc;var Kc=Ot,Yc=function(r,a,s){return Kc(r,a,s,"hsv")};Re.hsv=Yc;var Jc=I,Qc=function(r,a,s){var u=r.oklab(),v=a.oklab();return new Jc(u[0]+s*(v[0]-u[0]),u[1]+s*(v[1]-u[1]),u[2]+s*(v[2]-u[2]),"oklab")};Re.oklab=Qc;var ef=Ot,tf=function(r,a,s){return ef(r,a,s,"oklch")};Re.oklch=tf;var ol=I,rf=k.clip_rgb,sl=Math.pow,il=Math.sqrt,cl=Math.PI,wo=Math.cos,ko=Math.sin,nf=Math.atan2,af=function(r,a,s){a===void 0&&(a="lrgb"),s===void 0&&(s=null);var u=r.length;s||(s=Array.from(new Array(u)).map(function(){return 1}));var v=u/s.reduce(function(W,X){return W+X});if(s.forEach(function(W,X){s[X]*=v}),r=r.map(function(W){return new ol(W)}),a==="lrgb")return lf(r,s);for(var b=r.shift(),d=b.get(a),g=[],m=0,x=0,A=0;A<d.length;A++)if(d[A]=(d[A]||0)*s[0],g.push(isNaN(d[A])?0:s[0]),a.charAt(A)==="h"&&!isNaN(d[A])){var L=d[A]/180*cl;m+=wo(L)*s[0],x+=ko(L)*s[0]}var E=b.alpha()*s[0];r.forEach(function(W,X){var Y=W.get(a);E+=W.alpha()*s[X+1];for(var re=0;re<d.length;re++)if(!isNaN(Y[re]))if(g[re]+=s[X+1],a.charAt(re)==="h"){var _e=Y[re]/180*cl;m+=wo(_e)*s[X+1],x+=ko(_e)*s[X+1]}else d[re]+=Y[re]*s[X+1]});for(var M=0;M<d.length;M++)if(a.charAt(M)==="h"){for(var O=nf(x/g[M],m/g[M])/cl*180;O<0;)O+=360;for(;O>=360;)O-=360;d[M]=O}else d[M]=d[M]/g[M];return E/=u,new ol(d,a).alpha(E>.99999?1:E,!0)},lf=function(r,a){for(var s=r.length,u=[0,0,0,0],v=0;v<r.length;v++){var b=r[v],d=a[v]/s,g=b._rgb;u[0]+=sl(g[0],2)*d,u[1]+=sl(g[1],2)*d,u[2]+=sl(g[2],2)*d,u[3]+=g[3]*d}return u[0]=il(u[0]),u[1]=il(u[1]),u[2]=il(u[2]),u[3]>.9999999&&(u[3]=1),new ol(rf(u))},ze=te,Mt=k.type,of=Math.pow,fl=function(r){var a="rgb",s=ze("#ccc"),u=0,v=[0,1],b=[],d=[0,0],g=!1,m=[],x=!1,A=0,L=1,E=!1,M={},O=!0,W=1,X=function(N){if(N=N||["#fff","#000"],N&&Mt(N)==="string"&&ze.brewer&&ze.brewer[N.toLowerCase()]&&(N=ze.brewer[N.toLowerCase()]),Mt(N)==="array"){N.length===1&&(N=[N[0],N[0]]),N=N.slice(0);for(var z=0;z<N.length;z++)N[z]=ze(N[z]);b.length=0;for(var Z=0;Z<N.length;Z++)b.push(Z/(N.length-1))}return Ne(),m=N},Y=function(N){if(g!=null){for(var z=g.length-1,Z=0;Z<z&&N>=g[Z];)Z++;return Z-1}return 0},re=function(N){return N},_e=function(N){return N},pe=function(N,z){var Z,V;if(z==null&&(z=!1),isNaN(N)||N===null)return s;if(z)V=N;else if(g&&g.length>2){var ye=Y(N);V=ye/(g.length-2)}else L!==A?V=(N-A)/(L-A):V=1;V=_e(V),z||(V=re(V)),W!==1&&(V=of(V,W)),V=d[0]+V*(1-d[0]-d[1]),V=Math.min(1,Math.max(0,V));var ie=Math.floor(V*1e4);if(O&&M[ie])Z=M[ie];else{if(Mt(m)==="array")for(var J=0;J<b.length;J++){var ne=b[J];if(V<=ne){Z=m[J];break}if(V>=ne&&J===b.length-1){Z=m[J];break}if(V>ne&&V<b[J+1]){V=(V-ne)/(b[J+1]-ne),Z=ze.interpolate(m[J],m[J+1],V,a);break}}else Mt(m)==="function"&&(Z=m(V));O&&(M[ie]=Z)}return Z},Ne=function(){return M={}};X(r);var K=function(N){var z=ze(pe(N));return x&&z[x]?z[x]():z};return K.classes=function(N){if(N!=null){if(Mt(N)==="array")g=N,v=[N[0],N[N.length-1]];else{var z=ze.analyze(v);N===0?g=[z.min,z.max]:g=ze.limits(z,"e",N)}return K}return g},K.domain=function(N){if(!arguments.length)return v;A=N[0],L=N[N.length-1],b=[];var z=m.length;if(N.length===z&&A!==L)for(var Z=0,V=Array.from(N);Z<V.length;Z+=1){var ye=V[Z];b.push((ye-A)/(L-A))}else{for(var ie=0;ie<z;ie++)b.push(ie/(z-1));if(N.length>2){var J=N.map(function(ae,le){return le/(N.length-1)}),ne=N.map(function(ae){return(ae-A)/(L-A)});ne.every(function(ae,le){return J[le]===ae})||(_e=function(ae){if(ae<=0||ae>=1)return ae;for(var le=0;ae>=ne[le+1];)le++;var Ge=(ae-ne[le])/(ne[le+1]-ne[le]),it=J[le]+Ge*(J[le+1]-J[le]);return it})}}return v=[A,L],K},K.mode=function(N){return arguments.length?(a=N,Ne(),K):a},K.range=function(N,z){return X(N),K},K.out=function(N){return x=N,K},K.spread=function(N){return arguments.length?(u=N,K):u},K.correctLightness=function(N){return N==null&&(N=!0),E=N,Ne(),E?re=function(z){for(var Z=pe(0,!0).lab()[0],V=pe(1,!0).lab()[0],ye=Z>V,ie=pe(z,!0).lab()[0],J=Z+(V-Z)*z,ne=ie-J,ae=0,le=1,Ge=20;Math.abs(ne)>.01&&Ge-- >0;)(function(){return ye&&(ne*=-1),ne<0?(ae=z,z+=(le-z)*.5):(le=z,z+=(ae-z)*.5),ie=pe(z,!0).lab()[0],ne=ie-J})();return z}:re=function(z){return z},K},K.padding=function(N){return N!=null?(Mt(N)==="number"&&(N=[N,N]),d=N,K):d},K.colors=function(N,z){arguments.length<2&&(z="hex");var Z=[];if(arguments.length===0)Z=m.slice(0);else if(N===1)Z=[K(.5)];else if(N>1){var V=v[0],ye=v[1]-V;Z=sf(0,N,!1).map(function(le){return K(V+le/(N-1)*ye)})}else{r=[];var ie=[];if(g&&g.length>2)for(var J=1,ne=g.length,ae=1<=ne;ae?J<ne:J>ne;ae?J++:J--)ie.push((g[J-1]+g[J])*.5);else ie=v;Z=ie.map(function(le){return K(le)})}return ze[z]&&(Z=Z.map(function(le){return le[z]()})),Z},K.cache=function(N){return N!=null?(O=N,K):O},K.gamma=function(N){return N!=null?(W=N,K):W},K.nodata=function(N){return N!=null?(s=ze(N),K):s},K};function sf(r,a,s){for(var u=[],v=r<a,b=s?v?a+1:a-1:a,d=r;v?d<b:d>b;v?d++:d--)u.push(d);return u}var hr=I,cf=fl,ff=function(r){for(var a=[1,1],s=1;s<r;s++){for(var u=[1],v=1;v<=a.length;v++)u[v]=(a[v]||0)+a[v-1];a=u}return a},uf=function(r){var a,s,u,v,b,d,g;if(r=r.map(function(E){return new hr(E)}),r.length===2)a=r.map(function(E){return E.lab()}),b=a[0],d=a[1],v=function(E){var M=[0,1,2].map(function(O){return b[O]+E*(d[O]-b[O])});return new hr(M,"lab")};else if(r.length===3)s=r.map(function(E){return E.lab()}),b=s[0],d=s[1],g=s[2],v=function(E){var M=[0,1,2].map(function(O){return(1-E)*(1-E)*b[O]+2*(1-E)*E*d[O]+E*E*g[O]});return new hr(M,"lab")};else if(r.length===4){var m;u=r.map(function(E){return E.lab()}),b=u[0],d=u[1],g=u[2],m=u[3],v=function(E){var M=[0,1,2].map(function(O){return(1-E)*(1-E)*(1-E)*b[O]+3*(1-E)*(1-E)*E*d[O]+3*(1-E)*E*E*g[O]+E*E*E*m[O]});return new hr(M,"lab")}}else if(r.length>=5){var x,A,L;x=r.map(function(E){return E.lab()}),L=r.length-1,A=ff(L),v=function(E){var M=1-E,O=[0,1,2].map(function(W){return x.reduce(function(X,Y,re){return X+A[re]*Math.pow(M,L-re)*Math.pow(E,re)*Y[W]},0)});return new hr(O,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return v},df=function(r){var a=uf(r);return a.scale=function(){return cf(a)},a},ul=te,Ue=function(r,a,s){if(!Ue[s])throw new Error("unknown blend mode "+s);return Ue[s](r,a)},ot=function(r){return function(a,s){var u=ul(s).rgb(),v=ul(a).rgb();return ul.rgb(r(u,v))}},st=function(r){return function(a,s){var u=[];return u[0]=r(a[0],s[0]),u[1]=r(a[1],s[1]),u[2]=r(a[2],s[2]),u}},vf=function(r){return r},bf=function(r,a){return r*a/255},hf=function(r,a){return r>a?a:r},gf=function(r,a){return r>a?r:a},mf=function(r,a){return 255*(1-(1-r/255)*(1-a/255))},pf=function(r,a){return a<128?2*r*a/255:255*(1-2*(1-r/255)*(1-a/255))},$f=function(r,a){return 255*(1-(1-a/255)/(r/255))},_f=function(r,a){return r===255?255:(r=255*(a/255)/(1-r/255),r>255?255:r)};Ue.normal=ot(st(vf)),Ue.multiply=ot(st(bf)),Ue.screen=ot(st(mf)),Ue.overlay=ot(st(pf)),Ue.darken=ot(st(hf)),Ue.lighten=ot(st(gf)),Ue.dodge=ot(st(_f)),Ue.burn=ot(st($f));for(var yf=Ue,dl=k.type,xf=k.clip_rgb,wf=k.TWOPI,kf=Math.pow,Cf=Math.sin,Af=Math.cos,Co=te,Sf=function(r,a,s,u,v){r===void 0&&(r=300),a===void 0&&(a=-1.5),s===void 0&&(s=1),u===void 0&&(u=1),v===void 0&&(v=[0,1]);var b=0,d;dl(v)==="array"?d=v[1]-v[0]:(d=0,v=[v,v]);var g=function(m){var x=wf*((r+120)/360+a*m),A=kf(v[0]+d*m,u),L=b!==0?s[0]+m*b:s,E=L*A*(1-A)/2,M=Af(x),O=Cf(x),W=A+E*(-.14861*M+1.78277*O),X=A+E*(-.29227*M-.90649*O),Y=A+E*(1.97294*M);return Co(xf([W*255,X*255,Y*255,1]))};return g.start=function(m){return m==null?r:(r=m,g)},g.rotations=function(m){return m==null?a:(a=m,g)},g.gamma=function(m){return m==null?u:(u=m,g)},g.hue=function(m){return m==null?s:(s=m,dl(s)==="array"?(b=s[1]-s[0],b===0&&(s=s[1])):b=0,g)},g.lightness=function(m){return m==null?v:(dl(m)==="array"?(v=m,d=m[1]-m[0]):(v=[m,m],d=0),g)},g.scale=function(){return Co.scale(g)},g.hue(s),g},Ef=I,Nf="0123456789abcdef",Tf=Math.floor,Lf=Math.random,Pf=function(){for(var r="#",a=0;a<6;a++)r+=Nf.charAt(Tf(Lf()*16));return new Ef(r,"hex")},vl=p,Ao=Math.log,Of=Math.pow,Mf=Math.floor,Ff=Math.abs,So=function(r,a){a===void 0&&(a=null);var s={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return vl(r)==="object"&&(r=Object.values(r)),r.forEach(function(u){a&&vl(u)==="object"&&(u=u[a]),u!=null&&!isNaN(u)&&(s.values.push(u),s.sum+=u,u<s.min&&(s.min=u),u>s.max&&(s.max=u),s.count+=1)}),s.domain=[s.min,s.max],s.limits=function(u,v){return Eo(s,u,v)},s},Eo=function(r,a,s){a===void 0&&(a="equal"),s===void 0&&(s=7),vl(r)=="array"&&(r=So(r));var u=r.min,v=r.max,b=r.values.sort(function(hl,gl){return hl-gl});if(s===1)return[u,v];var d=[];if(a.substr(0,1)==="c"&&(d.push(u),d.push(v)),a.substr(0,1)==="e"){d.push(u);for(var g=1;g<s;g++)d.push(u+g/s*(v-u));d.push(v)}else if(a.substr(0,1)==="l"){if(u<=0)throw new Error("Logarithmic scales are only possible for values > 0");var m=Math.LOG10E*Ao(u),x=Math.LOG10E*Ao(v);d.push(u);for(var A=1;A<s;A++)d.push(Of(10,m+A/s*(x-m)));d.push(v)}else if(a.substr(0,1)==="q"){d.push(u);for(var L=1;L<s;L++){var E=(b.length-1)*L/s,M=Mf(E);if(M===E)d.push(b[M]);else{var O=E-M;d.push(b[M]*(1-O)+b[M+1]*O)}}d.push(v)}else if(a.substr(0,1)==="k"){var W,X=b.length,Y=new Array(X),re=new Array(s),_e=!0,pe=0,Ne=null;Ne=[],Ne.push(u);for(var K=1;K<s;K++)Ne.push(u+K/s*(v-u));for(Ne.push(v);_e;){for(var N=0;N<s;N++)re[N]=0;for(var z=0;z<X;z++)for(var Z=b[z],V=Number.MAX_VALUE,ye=void 0,ie=0;ie<s;ie++){var J=Ff(Ne[ie]-Z);J<V&&(V=J,ye=ie),re[ye]++,Y[z]=ye}for(var ne=new Array(s),ae=0;ae<s;ae++)ne[ae]=null;for(var le=0;le<X;le++)W=Y[le],ne[W]===null?ne[W]=b[le]:ne[W]+=b[le];for(var Ge=0;Ge<s;Ge++)ne[Ge]*=1/re[Ge];_e=!1;for(var it=0;it<s;it++)if(ne[it]!==Ne[it]){_e=!0;break}Ne=ne,pe++,pe>200&&(_e=!1)}for(var ct={},Ft=0;Ft<s;Ft++)ct[Ft]=[];for(var Dt=0;Dt<X;Dt++)W=Y[Dt],ct[W].push(b[Dt]);for(var Ye=[],ht=0;ht<s;ht++)Ye.push(ct[ht][0]),Ye.push(ct[ht][ct[ht].length-1]);Ye=Ye.sort(function(hl,gl){return hl-gl}),d.push(Ye[0]);for(var gr=1;gr<Ye.length;gr+=2){var gt=Ye[gr];!isNaN(gt)&&d.indexOf(gt)===-1&&d.push(gt)}}return d},No={analyze:So,limits:Eo},To=I,Df=function(r,a){r=new To(r),a=new To(a);var s=r.luminance(),u=a.luminance();return s>u?(s+.05)/(u+.05):(u+.05)/(s+.05)},Lo=I,Ke=Math.sqrt,ve=Math.pow,Rf=Math.min,If=Math.max,Po=Math.atan2,Oo=Math.abs,gn=Math.cos,Mo=Math.sin,jf=Math.exp,Fo=Math.PI,Bf=function(r,a,s,u,v){s===void 0&&(s=1),u===void 0&&(u=1),v===void 0&&(v=1);var b=function(gt){return 360*gt/(2*Fo)},d=function(gt){return 2*Fo*gt/360};r=new Lo(r),a=new Lo(a);var g=Array.from(r.lab()),m=g[0],x=g[1],A=g[2],L=Array.from(a.lab()),E=L[0],M=L[1],O=L[2],W=(m+E)/2,X=Ke(ve(x,2)+ve(A,2)),Y=Ke(ve(M,2)+ve(O,2)),re=(X+Y)/2,_e=.5*(1-Ke(ve(re,7)/(ve(re,7)+ve(25,7)))),pe=x*(1+_e),Ne=M*(1+_e),K=Ke(ve(pe,2)+ve(A,2)),N=Ke(ve(Ne,2)+ve(O,2)),z=(K+N)/2,Z=b(Po(A,pe)),V=b(Po(O,Ne)),ye=Z>=0?Z:Z+360,ie=V>=0?V:V+360,J=Oo(ye-ie)>180?(ye+ie+360)/2:(ye+ie)/2,ne=1-.17*gn(d(J-30))+.24*gn(d(2*J))+.32*gn(d(3*J+6))-.2*gn(d(4*J-63)),ae=ie-ye;ae=Oo(ae)<=180?ae:ie<=ye?ae+360:ae-360,ae=2*Ke(K*N)*Mo(d(ae)/2);var le=E-m,Ge=N-K,it=1+.015*ve(W-50,2)/Ke(20+ve(W-50,2)),ct=1+.045*z,Ft=1+.015*z*ne,Dt=30*jf(-ve((J-275)/25,2)),Ye=2*Ke(ve(z,7)/(ve(z,7)+ve(25,7))),ht=-Ye*Mo(2*d(Dt)),gr=Ke(ve(le/(s*it),2)+ve(Ge/(u*ct),2)+ve(ae/(v*Ft),2)+ht*(Ge/(u*ct))*(ae/(v*Ft)));return If(0,Rf(100,gr))},Do=I,zf=function(r,a,s){s===void 0&&(s="lab"),r=new Do(r),a=new Do(a);var u=r.get(s),v=a.get(s),b=0;for(var d in u){var g=(u[d]||0)-(v[d]||0);b+=g*g}return Math.sqrt(b)},Uf=I,Gf=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];try{return new(Function.prototype.bind.apply(Uf,[null].concat(r))),!0}catch{return!1}},Ro=te,Io=fl,qf={cool:function(){return Io([Ro.hsl(180,1,.9),Ro.hsl(250,.7,.4)])},hot:function(){return Io(["#000","#f00","#ff0","#fff"]).mode("rgb")}},mn={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]},bl=0,jo=Object.keys(mn);bl<jo.length;bl+=1){var Bo=jo[bl];mn[Bo.toLowerCase()]=mn[Bo]}var Hf=mn,me=te;me.average=af,me.bezier=df,me.blend=yf,me.cubehelix=Sf,me.mix=me.interpolate=go,me.random=Pf,me.scale=fl,me.analyze=No.analyze,me.contrast=Df,me.deltaE=Bf,me.distance=zf,me.limits=No.limits,me.valid=Gf,me.scales=qf,me.colors=Yl,me.brewer=Hf;var Wf=me;return Wf})})(Ms);const ke=Ms.exports,$t=["#FFFFFF","#181819"],Ju=ke.mix($t[1],"#000",.2,"rgb"),Fs={NEUTRAL:["#F8F8F6","#626262","#181816"],OCEAN:["#E6F5FA","#359AFA","#081F46"],BLUE:["#E9EEFE","#264FE3","#061148"],INDIGO:["#EBEDFB","#4624D3","#0B003D"],VIOLET:["#F0E9F8","#6C1CDB","#1c063d"],CRIMSON:["#FAEAF2","#E03780","#420518"],WINE:["#FDE9ED","#9d1635","#32000A"],RED:["#FEEEEC","#CA2331","#380004"],SUN:["#FEF2EE","#ea3e33","#460405"],ORANGE:["#FDF6ED","#fb7912","#52160B"],YELLOW:["#FDFCF2","#f8c51a","#58280F"],SAPLING:["#FAFEEC","#a2c940","#2b3a06"],GREEN:["#EEFDF3","#0da750","#002f0f"],AURORA:["#EBFDF9","#02B192","#003228"],CYAN:["#EFFDFD","#20C4D9","#01313F"]},Qu=(e,t)=>{const n={};for(const l in e){const o=ke.mix(e[l][0],e[l][1],l=="NEUTRAL"?.8:.95,"lab"),i=ke.mix(ke(e[l][1]),Ju,.8,"rgb"),c=ke.mix(o,e[l][0],.7,"lch");n[l]=[l=="NEUTRAL"?ke(e[l][2]).brighten(.3).hex():ke.mix(ke(e[l][2]).darken(.44),i,.15,"lab").saturate(.7).hex(),ke.mix(o.hex(),c.hex(),.03).hex(),l=="NEUTRAL"?ke(c).brighten(.75).hex():ke.mix(c,e[l][0],.86,"lab").hex()]}return n},e0=[0,2,5,9,16,19],Zo=e=>[...ke.scale([e[0],e[1]]).mode("lab").colors(24).filter((t,n)=>e0.includes(n)),...ke.scale([e[1],e[2]]).mode("lab").colors(7).filter((t,n)=>n%2==0)],Xo=e=>e.reduce((t,n,l)=>({...t,[`0${l}`]:n}),{}),Ds=(e,t)=>{const n={};for(const l in e)t?n[l]=Xo(r0(Zo(e[l]))):n[l]=Xo(Zo(e[l]));return n},t0=[.87,.7,.5,.4,.1,0],r0=e=>{const t=e,n=ke($t[1]).brighten(.05);for(var l=0;l<6;l++)t[l]=ke.mix(e[l],n,t0[l],"rgb").hex();return t};let n0=Ds(Fs,!1),a0=Ds(Qu(Fs),!0);const Rs=()=>Se()?a0:n0,Kt=e=>Object.values(e).map(t=>Object.values(t)),Is={NEUTRAL:{"00":"#1b1d1c","01":"#262727","02":"#414342","03":"#585a59","04":"#747776","05":"#a0a2a1","06":"#abadac","07":"#b2b4b3","08":"#c9cbca","09":"#eff1f0"},OCEAN:{100:"#171c24",200:"#172336",300:"#152a46",400:"#143355",500:"#0a64ae",600:"#0679d2",700:"#1893f6",800:"#4caafa",900:"#72bcfb",1e3:"#c2e2fd"},BLUE:{100:"#181923",200:"#171a33",300:"#171b42",400:"#16204f",500:"#1235a1",600:"#1b41c1",700:"#2b50e2",800:"#5670e5",900:"#788bea",1e3:"#c5cdf6"},INDIGO:{100:"#171721",200:"#15152e",300:"#14133b",400:"#1a1147",500:"#2d088e",600:"#3b05aa",700:"#4c0cc7",800:"#6e3cd0",900:"#8960d7",1e3:"#ccbaee"},VIOLET:{100:"#1a1721",200:"#1d162f",300:"#21143b",400:"#291747",500:"#4a1d8b",600:"#5a24a6",700:"#6d2fc2",800:"#8756cb",900:"#9d75d4",1e3:"#d5c3ec"},CRIMSON:{100:"#21171d",200:"#2f1521",300:"#3d1327",400:"#4c172f",500:"#9e285a",600:"#bf346d",700:"#e14785",800:"#ea6c9e",900:"#f189b2",1e3:"#f9ccde"},WINE:{100:"#1d1719",200:"#251517",300:"#2e1316",400:"#371118",500:"#6d0721",600:"#840928",700:"#9d1635",800:"#af4259",900:"#bf6577",1e3:"#e3bcc4"},RED:{100:"#1f1719",200:"#2a1517",300:"#351315",400:"#411116",500:"#870819",600:"#a30f21",700:"#c31f2e",800:"#d04b56",900:"#db6f75",1e3:"#efc1c3"},SUN:{100:"#211719",200:"#2f1517",300:"#3e1316",400:"#4c1517",500:"#a3201b",600:"#c62c23",700:"#ea3e33",800:"#f1655c",900:"#f6837b",1e3:"#fbcac6"},ORANGE:{100:"#221a19",200:"#341c16",300:"#442114",400:"#532813",500:"#b04e08",600:"#d56004",700:"#fb7912",800:"#fd9644",900:"#fead6a",1e3:"#fedbbf"},YELLOW:{100:"#211f19",200:"#322916",300:"#413414",400:"#504013",500:"#ab8508",600:"#cfa306",700:"#f8c51a",800:"#fcd756",900:"#fde484",1e3:"#fef3ca"},SAPLING:{100:"#1d1f19",200:"#242b16",300:"#2c3614",400:"#364218",500:"#6d8925",600:"#84a82e",700:"#a2c940",800:"#bad76f",900:"#cde492",1e3:"#e9f3d0"},GREEN:{100:"#171d1b",200:"#15261a",300:"#132f1b",400:"#113920",500:"#077233",600:"#048b3f",700:"#0da750",800:"#45ba75",900:"#6fca92",1e3:"#c1e8d0"},AURORA:{100:"#171f1f",200:"#152b28",300:"#133730",400:"#12433a",500:"#1c8b74",600:"#28a98d",700:"#3bcbab",800:"#6cd9c0",900:"#90e4d1",1e3:"#cff3eb"},CYAN:{100:"#171f22",200:"#152a30",300:"#13363d",400:"#11414a",500:"#078899",600:"#04a6b9",700:"#09c8de",800:"#4ed7e9",900:"#7ce4f1",1e3:"#c6f3f9"}},l0={NEUTRAL:{"00":"#f3f5f3","01":"#eff1f0","02":"#d0d2d1","03":"#c2c5c4","04":"#9b9d9c","05":"#747776","06":"#585a59","07":"#414342","08":"#262727","09":"#1b1d1c"},OCEAN:{"00":"#f3fcff","01":"#e4f6fe","02":"#cfeafd","03":"#badefd","04":"#68b7fa","05":"#4eabfa","06":"#1893f6","07":"#036abe","08":"#06488d","09":"#03284e"},BLUE:{"00":"#f2f3fc","01":"#e3e6f9","02":"#d0d5f6","03":"#bdc6f5","04":"#7085ea","05":"#5872e6","06":"#2b50e2","07":"#0c35af","08":"#0b1f82","09":"#061148"},INDIGO:{"00":"#f4eefa","01":"#e7dcf6","02":"#d6c5f2","03":"#c5b1ec","04":"#8357d7","05":"#6f3ed0","06":"#4c0cc7","07":"#2b0199","08":"#130070","09":"#0a003d"},VIOLET:{"00":"#f6f1fb","01":"#ece1f6","02":"#ddcdf2","03":"#cfbbeb","04":"#996dd4","05":"#8958cc","06":"#6d2fc2","07":"#4d1996","08":"#320b6f","09":"#1c063d"},CRIMSON:{"00":"#fdf5fa","01":"#fce8f2","02":"#fad7e6","03":"#f9c5d9","04":"#f082ad","05":"#ea6e9f","06":"#e14785","07":"#ac265e","08":"#7d0d3c","09":"#450721"},WINE:{"00":"#faeff1","01":"#f4dde1","02":"#ebc7ce","03":"#e0b3bc","04":"#bc5d71","05":"#b0445b","06":"#9d1635","07":"#75001d","08":"#52000c","09":"#2d0007"},RED:{"00":"#fcf1f1","01":"#f8e0e0","02":"#f5cbcd","03":"#eeb8bb","04":"#d9666d","05":"#d04d58","06":"#c31f2e","07":"#920114","08":"#660007","09":"#380004"},SUN:{"00":"#fef4f2","01":"#fde7e3","02":"#fbd4d0","03":"#fbc2be","04":"#f67c73","05":"#f1675e","06":"#ea3e33","07":"#b21c16","08":"#7f0808","09":"#460405"},ORANGE:{"00":"#fffaf2","01":"#fff2e1","02":"#fee5cb","03":"#fed7b6","04":"#fda660","05":"#fd9746","06":"#fb7912","07":"#c15100","08":"#8e3100","09":"#4e1b00"},YELLOW:{"00":"#fffef8","01":"#fffcec","02":"#fefad9","03":"#fef2c3","04":"#fde177","05":"#fcd758","06":"#f8c51a","07":"#bb9000","08":"#866400","09":"#4a3700"},SAPLING:{"00":"#fdfef8","01":"#f9fced","02":"#f2f9dd","03":"#e7f2ca","04":"#c8e188","05":"#bbd870","06":"#a2c940","07":"#749521","08":"#4e690b","09":"#2b3a06"},GREEN:{"00":"#f3fbf6","01":"#e3f7ea","02":"#cef0da","03":"#b8e5ca","04":"#64c68b","05":"#47bb77","06":"#0da750","07":"#007a32","08":"#00561c","09":"#002f0f"},AURORA:{"00":"#f8fefd","01":"#edfbfa","02":"#dcf9f3","03":"#c9f3e9","04":"#86e3cd","05":"#6edac1","06":"#3bcbab","07":"#18967c","08":"#026a55","09":"#013a2f"},CYAN:{"00":"#f6fefe","01":"#e9fcfd","02":"#d6f9fb","03":"#bff2f9","04":"#70e1f0","05":"#50d8e9","06":"#09c8de","07":"#0093a6","08":"#006776","09":"#003941"}},Ht=()=>Se()?Is:l0,Mn=()=>Kt(Ht()),o0=P('<select class="relative font-medium text-sm rounded-md pb-1.5 bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 border-7-neutral-300 dark:border-t-neutral-700/50 shadow-sm py-1 px-3 dark:shadow-black/40 hover:shadow active:border-neutral-300 dark:active:border-neutral-700 active:translate-y-px"></select>'),s0=e=>(()=>{const t=o0.cloneNode(!0);return Me(t,e,!1,!0),C(t,()=>e.children),t})(),i0=P('<option value="fc">Flex Design Colors</option>'),c0=P('<option value="fu" selected>Flex Design Colors Uniform</option>'),[Nl,Ko]=de("Flex Design Colors Uniform"),[he,kr]=de(Is),js=()=>{const[e,t]=de("fu");return et(()=>{e()=="fc"&&kr(Ht()),e()=="fu"?kr(Rs()):kr(Ht())}),_(s0,{"aria-label":"Change Color Pallet",value:"fu",onChange:l=>{l.target.value=="fc"?(t("fc"),Ko("Flex Design Colors (Legacy)")):l.target.value=="fu"&&(t("fu"),Ko("Flex Design Colors Uniform"))},get children(){return[i0.cloneNode(!0),c0.cloneNode(!0)]}})},f0=P("<a></a>"),u0=P('<i class="bi bi-lightbulb-fill"></i>'),d0=P('<i class="bi bi-moon-stars-fill"></i>'),[Se,Tl]=de(window.matchMedia("(prefers-color-scheme: dark)").matches),v0=()=>{Fl(()=>{localStorage.getItem("theme")&&Tl(localStorage.getItem("theme")=="dark")}),et(()=>{Se()?(document.documentElement.classList.add("dark"),localStorage.setItem("theme","dark")):(document.documentElement.classList.remove("dark"),localStorage.setItem("theme","light")),Nl()=="Flex Design Colors Uniform"?kr(Rs()):kr(Ht())});const e=()=>{Tl(!Se())};return _(Le,{aria:"Dark-mode Toggle",get children(){const t=f0.cloneNode(!0);return t.$$click=()=>e(),C(t,(()=>{const n=G(()=>!!Se(),!0);return()=>n()?u0.cloneNode(!0):d0.cloneNode(!0)})()),t}})};rt(["click"]);const Yo=P('<i class="bi bi-list" s:amb--e498344a-0></i>'),Jo=P('<i class="bi bi-github" s:amb--e498344a-0></i>'),b0=P(`<nav role="navigation" class="h-screen w-screen hidden justify-end fixed + */(function(e,t){(function(n,l){e.exports=l()})(Yu,function(){for(var n=function(r,a,s){return a===void 0&&(a=0),s===void 0&&(s=1),r<a?a:r>s?s:r},l=n,o=function(r){r._clipped=!1,r._unclipped=r.slice(0);for(var a=0;a<=3;a++)a<3?((r[a]<0||r[a]>255)&&(r._clipped=!0),r[a]=l(r[a],0,255)):a===3&&(r[a]=l(r[a],0,1));return r},i={},c=0,f=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];c<f.length;c+=1){var h=f[c];i["[object "+h+"]"]=h.toLowerCase()}var p=function(r){return i[Object.prototype.toString.call(r)]||"object"},y=p,S=function(r,a){return a===void 0&&(a=null),r.length>=3?Array.prototype.slice.call(r):y(r[0])=="object"&&a?a.split("").filter(function(s){return r[0][s]!==void 0}).map(function(s){return r[0][s]}):r[0]},T=p,j=function(r){if(r.length<2)return null;var a=r.length-1;return T(r[a])=="string"?r[a].toLowerCase():null},D=Math.PI,k={clip_rgb:o,limit:n,type:p,unpack:S,last:j,PI:D,TWOPI:D*2,PITHIRD:D/3,DEG2RAD:D/180,RAD2DEG:180/D},q={format:{},autodetect:[]},F=k.last,ee=k.clip_rgb,oe=k.type,Q=q,se=function(){for(var a=[],s=arguments.length;s--;)a[s]=arguments[s];var u=this;if(oe(a[0])==="object"&&a[0].constructor&&a[0].constructor===this.constructor)return a[0];var v=F(a),b=!1;if(!v){b=!0,Q.sorted||(Q.autodetect=Q.autodetect.sort(function(A,L){return L.p-A.p}),Q.sorted=!0);for(var d=0,g=Q.autodetect;d<g.length;d+=1){var m=g[d];if(v=m.test.apply(m,a),v)break}}if(Q.format[v]){var x=Q.format[v].apply(null,b?a:a.slice(0,-1));u._rgb=ee(x)}else throw new Error("unknown format: "+a);u._rgb.length===3&&u._rgb.push(1)};se.prototype.toString=function(){return oe(this.hex)=="function"?this.hex():"["+this._rgb.join(",")+"]"};var I=se,we=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(we.Color,[null].concat(r)))};we.Color=I,we.version="2.4.2";var te=we,R=k.unpack,B=Math.max,H=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=R(r,"rgb"),u=s[0],v=s[1],b=s[2];u=u/255,v=v/255,b=b/255;var d=1-B(u,B(v,b)),g=d<1?1/(1-d):0,m=(1-u-d)*g,x=(1-v-d)*g,A=(1-b-d)*g;return[m,x,A,d]},$e=H,Ie=k.unpack,Ae=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Ie(r,"cmyk");var s=r[0],u=r[1],v=r[2],b=r[3],d=r.length>4?r[4]:1;return b===1?[0,0,0,d]:[s>=1?0:255*(1-s)*(1-b),u>=1?0:255*(1-u)*(1-b),v>=1?0:255*(1-v)*(1-b),d]},Ee=Ae,Fe=te,je=I,De=q,Zn=k.unpack,Xn=k.type,xt=$e;je.prototype.cmyk=function(){return xt(this._rgb)},Fe.cmyk=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(je,[null].concat(r,["cmyk"])))},De.format.cmyk=Ee,De.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=Zn(r,"cmyk"),Xn(r)==="array"&&r.length===4)return"cmyk"}});var Nr=k.unpack,Kn=k.last,wt=function(r){return Math.round(r*100)/100},Tr=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Nr(r,"hsla"),u=Kn(r)||"lsa";return s[0]=wt(s[0]||0),s[1]=wt(s[1]*100)+"%",s[2]=wt(s[2]*100)+"%",u==="hsla"||s.length>3&&s[3]<1?(s[3]=s.length>3?s[3]:1,u="hsla"):s.length=3,u+"("+s.join(",")+")"},Lr=Tr,Pr=k.unpack,Or=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Pr(r,"rgba");var s=r[0],u=r[1],v=r[2];s/=255,u/=255,v/=255;var b=Math.min(s,u,v),d=Math.max(s,u,v),g=(d+b)/2,m,x;return d===b?(m=0,x=Number.NaN):m=g<.5?(d-b)/(d+b):(d-b)/(2-d-b),s==d?x=(u-v)/(d-b):u==d?x=2+(v-s)/(d-b):v==d&&(x=4+(s-u)/(d-b)),x*=60,x<0&&(x+=360),r.length>3&&r[3]!==void 0?[x,m,g,r[3]]:[x,m,g]},Yt=Or,Mr=k.unpack,Fr=k.last,Dr=Lr,Rr=Yt,Jt=Math.round,Qt=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Mr(r,"rgba"),u=Fr(r)||"rgb";return u.substr(0,3)=="hsl"?Dr(Rr(s),u):(s[0]=Jt(s[0]),s[1]=Jt(s[1]),s[2]=Jt(s[2]),(u==="rgba"||s.length>3&&s[3]<1)&&(s[3]=s.length>3?s[3]:1,u="rgba"),u+"("+s.slice(0,u==="rgb"?3:4).join(",")+")")},Ir=Qt,jr=k.unpack,vt=Math.round,Yn=function(){for(var r,a=[],s=arguments.length;s--;)a[s]=arguments[s];a=jr(a,"hsl");var u=a[0],v=a[1],b=a[2],d,g,m;if(v===0)d=g=m=b*255;else{var x=[0,0,0],A=[0,0,0],L=b<.5?b*(1+v):b+v-b*v,E=2*b-L,M=u/360;x[0]=M+1/3,x[1]=M,x[2]=M-1/3;for(var O=0;O<3;O++)x[O]<0&&(x[O]+=1),x[O]>1&&(x[O]-=1),6*x[O]<1?A[O]=E+(L-E)*6*x[O]:2*x[O]<1?A[O]=L:3*x[O]<2?A[O]=E+(L-E)*(2/3-x[O])*6:A[O]=E;r=[vt(A[0]*255),vt(A[1]*255),vt(A[2]*255)],d=r[0],g=r[1],m=r[2]}return a.length>3?[d,g,m,a[3]]:[d,g,m,1]},Br=Yn,er=Br,kt=q,tr=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,rr=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,nr=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,ar=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,zr=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Ur=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Ct=Math.round,lr=function(r){r=r.toLowerCase().trim();var a;if(kt.format.named)try{return kt.format.named(r)}catch{}if(a=r.match(tr)){for(var s=a.slice(1,4),u=0;u<3;u++)s[u]=+s[u];return s[3]=1,s}if(a=r.match(rr)){for(var v=a.slice(1,5),b=0;b<4;b++)v[b]=+v[b];return v}if(a=r.match(nr)){for(var d=a.slice(1,4),g=0;g<3;g++)d[g]=Ct(d[g]*2.55);return d[3]=1,d}if(a=r.match(ar)){for(var m=a.slice(1,5),x=0;x<3;x++)m[x]=Ct(m[x]*2.55);return m[3]=+m[3],m}if(a=r.match(zr)){var A=a.slice(1,4);A[1]*=.01,A[2]*=.01;var L=er(A);return L[3]=1,L}if(a=r.match(Ur)){var E=a.slice(1,4);E[1]*=.01,E[2]*=.01;var M=er(E);return M[3]=+a[4],M}};lr.test=function(r){return tr.test(r)||rr.test(r)||nr.test(r)||ar.test(r)||zr.test(r)||Ur.test(r)};var Gr=lr,qr=te,or=I,Hr=q,Jn=k.type,Wr=Ir,sr=Gr;or.prototype.css=function(r){return Wr(this._rgb,r)},qr.css=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(or,[null].concat(r,["css"])))},Hr.format.css=sr,Hr.autodetect.push({p:5,test:function(r){for(var a=[],s=arguments.length-1;s-- >0;)a[s]=arguments[s+1];if(!a.length&&Jn(r)==="string"&&sr.test(r))return"css"}});var ir=I,Vr=te,Zr=q,Qn=k.unpack;Zr.format.gl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Qn(r,"rgba");return s[0]*=255,s[1]*=255,s[2]*=255,s},Vr.gl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(ir,[null].concat(r,["gl"])))},ir.prototype.gl=function(){var r=this._rgb;return[r[0]/255,r[1]/255,r[2]/255,r[3]]};var ea=k.unpack,cr=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ea(r,"rgb"),u=s[0],v=s[1],b=s[2],d=Math.min(u,v,b),g=Math.max(u,v,b),m=g-d,x=m*100/255,A=d/(255-m)*100,L;return m===0?L=Number.NaN:(u===g&&(L=(v-b)/m),v===g&&(L=2+(b-u)/m),b===g&&(L=4+(u-v)/m),L*=60,L<0&&(L+=360)),[L,x,A]},At=cr,Xr=k.unpack,Kr=Math.floor,ta=function(){for(var r,a,s,u,v,b,d=[],g=arguments.length;g--;)d[g]=arguments[g];d=Xr(d,"hcg");var m=d[0],x=d[1],A=d[2],L,E,M;A=A*255;var O=x*255;if(x===0)L=E=M=A;else{m===360&&(m=0),m>360&&(m-=360),m<0&&(m+=360),m/=60;var W=Kr(m),X=m-W,Y=A*(1-x),re=Y+O*(1-X),_e=Y+O*X,pe=Y+O;switch(W){case 0:r=[pe,_e,Y],L=r[0],E=r[1],M=r[2];break;case 1:a=[re,pe,Y],L=a[0],E=a[1],M=a[2];break;case 2:s=[Y,pe,_e],L=s[0],E=s[1],M=s[2];break;case 3:u=[Y,re,pe],L=u[0],E=u[1],M=u[2];break;case 4:v=[_e,Y,pe],L=v[0],E=v[1],M=v[2];break;case 5:b=[pe,Y,re],L=b[0],E=b[1],M=b[2];break}}return[L,E,M,d.length>3?d[3]:1]},ra=ta,na=k.unpack,aa=k.type,$=te,St=I,Yr=q,la=At;St.prototype.hcg=function(){return la(this._rgb)},$.hcg=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(St,[null].concat(r,["hcg"])))},Yr.format.hcg=ra,Yr.autodetect.push({p:1,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=na(r,"hcg"),aa(r)==="array"&&r.length===3)return"hcg"}});var oa=k.unpack,sa=k.last,Et=Math.round,ia=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=oa(r,"rgba"),u=s[0],v=s[1],b=s[2],d=s[3],g=sa(r)||"auto";d===void 0&&(d=1),g==="auto"&&(g=d<1?"rgba":"rgb"),u=Et(u),v=Et(v),b=Et(b);var m=u<<16|v<<8|b,x="000000"+m.toString(16);x=x.substr(x.length-6);var A="0"+Et(d*255).toString(16);switch(A=A.substr(A.length-2),g.toLowerCase()){case"rgba":return"#"+x+A;case"argb":return"#"+A+x;default:return"#"+x}},Jr=ia,ca=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,fa=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,ua=function(r){if(r.match(ca)){(r.length===4||r.length===7)&&(r=r.substr(1)),r.length===3&&(r=r.split(""),r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]);var a=parseInt(r,16),s=a>>16,u=a>>8&255,v=a&255;return[s,u,v,1]}if(r.match(fa)){(r.length===5||r.length===9)&&(r=r.substr(1)),r.length===4&&(r=r.split(""),r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);var b=parseInt(r,16),d=b>>24&255,g=b>>16&255,m=b>>8&255,x=Math.round((b&255)/255*100)/100;return[d,g,m,x]}throw new Error("unknown hex color: "+r)},Qr=ua,da=te,en=I,va=k.type,tn=q,ba=Jr;en.prototype.hex=function(r){return ba(this._rgb,r)},da.hex=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(en,[null].concat(r,["hex"])))},tn.format.hex=Qr,tn.autodetect.push({p:4,test:function(r){for(var a=[],s=arguments.length-1;s-- >0;)a[s]=arguments[s+1];if(!a.length&&va(r)==="string"&&[3,4,5,6,7,8,9].indexOf(r.length)>=0)return"hex"}});var ha=k.unpack,rn=k.TWOPI,ga=Math.min,ma=Math.sqrt,pa=Math.acos,$a=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ha(r,"rgb"),u=s[0],v=s[1],b=s[2];u/=255,v/=255,b/=255;var d,g=ga(u,v,b),m=(u+v+b)/3,x=m>0?1-g/m:0;return x===0?d=NaN:(d=(u-v+(u-b))/2,d/=ma((u-v)*(u-v)+(u-b)*(v-b)),d=pa(d),b>v&&(d=rn-d),d/=rn),[d*360,x,m]},_a=$a,ya=k.unpack,fr=k.limit,nt=k.TWOPI,ur=k.PITHIRD,at=Math.cos,xa=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=ya(r,"hsi");var s=r[0],u=r[1],v=r[2],b,d,g;return isNaN(s)&&(s=0),isNaN(u)&&(u=0),s>360&&(s-=360),s<0&&(s+=360),s/=360,s<1/3?(g=(1-u)/3,b=(1+u*at(nt*s)/at(ur-nt*s))/3,d=1-(g+b)):s<2/3?(s-=1/3,b=(1-u)/3,d=(1+u*at(nt*s)/at(ur-nt*s))/3,g=1-(b+d)):(s-=2/3,d=(1-u)/3,g=(1+u*at(nt*s)/at(ur-nt*s))/3,b=1-(d+g)),b=fr(v*b*3),d=fr(v*d*3),g=fr(v*g*3),[b*255,d*255,g*255,r.length>3?r[3]:1]},wa=xa,ka=k.unpack,Ca=k.type,Aa=te,nn=I,an=q,Sa=_a;nn.prototype.hsi=function(){return Sa(this._rgb)},Aa.hsi=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(nn,[null].concat(r,["hsi"])))},an.format.hsi=wa,an.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=ka(r,"hsi"),Ca(r)==="array"&&r.length===3)return"hsi"}});var Ea=k.unpack,Na=k.type,Ta=te,ln=I,on=q,La=Yt;ln.prototype.hsl=function(){return La(this._rgb)},Ta.hsl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(ln,[null].concat(r,["hsl"])))},on.format.hsl=Br,on.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=Ea(r,"hsl"),Na(r)==="array"&&r.length===3)return"hsl"}});var Pa=k.unpack,Oa=Math.min,Ma=Math.max,Fa=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Pa(r,"rgb");var s=r[0],u=r[1],v=r[2],b=Oa(s,u,v),d=Ma(s,u,v),g=d-b,m,x,A;return A=d/255,d===0?(m=Number.NaN,x=0):(x=g/d,s===d&&(m=(u-v)/g),u===d&&(m=2+(v-s)/g),v===d&&(m=4+(s-u)/g),m*=60,m<0&&(m+=360)),[m,x,A]},Da=Fa,Ra=k.unpack,Ia=Math.floor,ja=function(){for(var r,a,s,u,v,b,d=[],g=arguments.length;g--;)d[g]=arguments[g];d=Ra(d,"hsv");var m=d[0],x=d[1],A=d[2],L,E,M;if(A*=255,x===0)L=E=M=A;else{m===360&&(m=0),m>360&&(m-=360),m<0&&(m+=360),m/=60;var O=Ia(m),W=m-O,X=A*(1-x),Y=A*(1-x*W),re=A*(1-x*(1-W));switch(O){case 0:r=[A,re,X],L=r[0],E=r[1],M=r[2];break;case 1:a=[Y,A,X],L=a[0],E=a[1],M=a[2];break;case 2:s=[X,A,re],L=s[0],E=s[1],M=s[2];break;case 3:u=[X,Y,A],L=u[0],E=u[1],M=u[2];break;case 4:v=[re,X,A],L=v[0],E=v[1],M=v[2];break;case 5:b=[A,X,Y],L=b[0],E=b[1],M=b[2];break}}return[L,E,M,d.length>3?d[3]:1]},Ba=ja,za=k.unpack,Ua=k.type,Ga=te,sn=I,cn=q,qa=Da;sn.prototype.hsv=function(){return qa(this._rgb)},Ga.hsv=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(sn,[null].concat(r,["hsv"])))},cn.format.hsv=Ba,cn.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=za(r,"hsv"),Ua(r)==="array"&&r.length===3)return"hsv"}});var Nt={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},lt=Nt,Ha=k.unpack,fn=Math.pow,Wa=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Ha(r,"rgb"),u=s[0],v=s[1],b=s[2],d=Va(u,v,b),g=d[0],m=d[1],x=d[2],A=116*m-16;return[A<0?0:A,500*(g-m),200*(m-x)]},dr=function(r){return(r/=255)<=.04045?r/12.92:fn((r+.055)/1.055,2.4)},vr=function(r){return r>lt.t3?fn(r,1/3):r/lt.t2+lt.t0},Va=function(r,a,s){r=dr(r),a=dr(a),s=dr(s);var u=vr((.4124564*r+.3575761*a+.1804375*s)/lt.Xn),v=vr((.2126729*r+.7151522*a+.072175*s)/lt.Yn),b=vr((.0193339*r+.119192*a+.9503041*s)/lt.Zn);return[u,v,b]},Ul=Wa,Tt=Nt,Js=k.unpack,Qs=Math.pow,ei=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=Js(r,"lab");var s=r[0],u=r[1],v=r[2],b,d,g,m,x,A;return d=(s+16)/116,b=isNaN(u)?d:d+u/500,g=isNaN(v)?d:d-v/200,d=Tt.Yn*Xa(d),b=Tt.Xn*Xa(b),g=Tt.Zn*Xa(g),m=Za(3.2404542*b-1.5371385*d-.4985314*g),x=Za(-.969266*b+1.8760108*d+.041556*g),A=Za(.0556434*b-.2040259*d+1.0572252*g),[m,x,A,r.length>3?r[3]:1]},Za=function(r){return 255*(r<=.00304?12.92*r:1.055*Qs(r,1/2.4)-.055)},Xa=function(r){return r>Tt.t1?r*r*r:Tt.t2*(r-Tt.t0)},Gl=ei,ti=k.unpack,ri=k.type,ni=te,ql=I,Hl=q,ai=Ul;ql.prototype.lab=function(){return ai(this._rgb)},ni.lab=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(ql,[null].concat(r,["lab"])))},Hl.format.lab=Gl,Hl.autodetect.push({p:2,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=ti(r,"lab"),ri(r)==="array"&&r.length===3)return"lab"}});var li=k.unpack,oi=k.RAD2DEG,si=Math.sqrt,ii=Math.atan2,ci=Math.round,fi=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=li(r,"lab"),u=s[0],v=s[1],b=s[2],d=si(v*v+b*b),g=(ii(b,v)*oi+360)%360;return ci(d*1e4)===0&&(g=Number.NaN),[u,d,g]},Wl=fi,ui=k.unpack,di=Ul,vi=Wl,bi=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ui(r,"rgb"),u=s[0],v=s[1],b=s[2],d=di(u,v,b),g=d[0],m=d[1],x=d[2];return vi(g,m,x)},hi=bi,gi=k.unpack,mi=k.DEG2RAD,pi=Math.sin,$i=Math.cos,_i=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=gi(r,"lch"),u=s[0],v=s[1],b=s[2];return isNaN(b)&&(b=0),b=b*mi,[u,$i(b)*v,pi(b)*v]},Vl=_i,yi=k.unpack,xi=Vl,wi=Gl,ki=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=yi(r,"lch");var s=r[0],u=r[1],v=r[2],b=xi(s,u,v),d=b[0],g=b[1],m=b[2],x=wi(d,g,m),A=x[0],L=x[1],E=x[2];return[A,L,E,r.length>3?r[3]:1]},Zl=ki,Ci=k.unpack,Ai=Zl,Si=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Ci(r,"hcl").reverse();return Ai.apply(void 0,s)},Ei=Si,Ni=k.unpack,Ti=k.type,Xl=te,un=I,Ka=q,Kl=hi;un.prototype.lch=function(){return Kl(this._rgb)},un.prototype.hcl=function(){return Kl(this._rgb).reverse()},Xl.lch=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(un,[null].concat(r,["lch"])))},Xl.hcl=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(un,[null].concat(r,["hcl"])))},Ka.format.lch=Zl,Ka.format.hcl=Ei,["lch","hcl"].forEach(function(r){return Ka.autodetect.push({p:2,test:function(){for(var a=[],s=arguments.length;s--;)a[s]=arguments[s];if(a=Ni(a,r),Ti(a)==="array"&&a.length===3)return r}})});var Li={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},Yl=Li,Pi=I,Jl=q,Oi=k.type,br=Yl,Mi=Qr,Fi=Jr;Pi.prototype.name=function(){for(var r=Fi(this._rgb,"rgb"),a=0,s=Object.keys(br);a<s.length;a+=1){var u=s[a];if(br[u]===r)return u.toLowerCase()}return r},Jl.format.named=function(r){if(r=r.toLowerCase(),br[r])return Mi(br[r]);throw new Error("unknown color name: "+r)},Jl.autodetect.push({p:5,test:function(r){for(var a=[],s=arguments.length-1;s-- >0;)a[s]=arguments[s+1];if(!a.length&&Oi(r)==="string"&&br[r.toLowerCase()])return"named"}});var Di=k.unpack,Ri=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Di(r,"rgb"),u=s[0],v=s[1],b=s[2];return(u<<16)+(v<<8)+b},Ii=Ri,ji=k.type,Bi=function(r){if(ji(r)=="number"&&r>=0&&r<=16777215){var a=r>>16,s=r>>8&255,u=r&255;return[a,s,u,1]}throw new Error("unknown num color: "+r)},zi=Bi,Ui=te,Ql=I,eo=q,Gi=k.type,qi=Ii;Ql.prototype.num=function(){return qi(this._rgb)},Ui.num=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(Ql,[null].concat(r,["num"])))},eo.format.num=zi,eo.autodetect.push({p:5,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r.length===1&&Gi(r[0])==="number"&&r[0]>=0&&r[0]<=16777215)return"num"}});var Hi=te,Ya=I,to=q,ro=k.unpack,no=k.type,ao=Math.round;Ya.prototype.rgb=function(r){return r===void 0&&(r=!0),r===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(ao)},Ya.prototype.rgba=function(r){return r===void 0&&(r=!0),this._rgb.slice(0,4).map(function(a,s){return s<3?r===!1?a:ao(a):a})},Hi.rgb=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(Ya,[null].concat(r,["rgb"])))},to.format.rgb=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=ro(r,"rgba");return s[3]===void 0&&(s[3]=1),s},to.autodetect.push({p:3,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=ro(r,"rgba"),no(r)==="array"&&(r.length===3||r.length===4&&no(r[3])=="number"&&r[3]>=0&&r[3]<=1))return"rgb"}});var dn=Math.log,Wi=function(r){var a=r/100,s,u,v;return a<66?(s=255,u=a<6?0:-155.25485562709179-.44596950469579133*(u=a-2)+104.49216199393888*dn(u),v=a<20?0:-254.76935184120902+.8274096064007395*(v=a-10)+115.67994401066147*dn(v)):(s=351.97690566805693+.114206453784165*(s=a-55)-40.25366309332127*dn(s),u=325.4494125711974+.07943456536662342*(u=a-50)-28.0852963507957*dn(u),v=255),[s,u,v,1]},lo=Wi,Vi=lo,Zi=k.unpack,Xi=Math.round,Ki=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];for(var s=Zi(r,"rgb"),u=s[0],v=s[2],b=1e3,d=4e4,g=.4,m;d-b>g;){m=(d+b)*.5;var x=Vi(m);x[2]/x[0]>=v/u?d=m:b=m}return Xi(m)},Yi=Ki,Ja=te,vn=I,Qa=q,Ji=Yi;vn.prototype.temp=vn.prototype.kelvin=vn.prototype.temperature=function(){return Ji(this._rgb)},Ja.temp=Ja.kelvin=Ja.temperature=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(vn,[null].concat(r,["temp"])))},Qa.format.temp=Qa.format.kelvin=Qa.format.temperature=lo;var Qi=k.unpack,el=Math.cbrt,ec=Math.pow,tc=Math.sign,rc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=Qi(r,"rgb"),u=s[0],v=s[1],b=s[2],d=[tl(u/255),tl(v/255),tl(b/255)],g=d[0],m=d[1],x=d[2],A=el(.4122214708*g+.5363325363*m+.0514459929*x),L=el(.2119034982*g+.6806995451*m+.1073969566*x),E=el(.0883024619*g+.2817188376*m+.6299787005*x);return[.2104542553*A+.793617785*L-.0040720468*E,1.9779984951*A-2.428592205*L+.4505937099*E,.0259040371*A+.7827717662*L-.808675766*E]},oo=rc;function tl(r){var a=Math.abs(r);return a<.04045?r/12.92:(tc(r)||1)*ec((a+.055)/1.055,2.4)}var nc=k.unpack,bn=Math.pow,ac=Math.sign,lc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=nc(r,"lab");var s=r[0],u=r[1],v=r[2],b=bn(s+.3963377774*u+.2158037573*v,3),d=bn(s-.1055613458*u-.0638541728*v,3),g=bn(s-.0894841775*u-1.291485548*v,3);return[255*rl(4.0767416621*b-3.3077115913*d+.2309699292*g),255*rl(-1.2684380046*b+2.6097574011*d-.3413193965*g),255*rl(-.0041960863*b-.7034186147*d+1.707614701*g),r.length>3?r[3]:1]},so=lc;function rl(r){var a=Math.abs(r);return a>.0031308?(ac(r)||1)*(1.055*bn(a,1/2.4)-.055):r*12.92}var oc=k.unpack,sc=k.type,ic=te,io=I,co=q,cc=oo;io.prototype.oklab=function(){return cc(this._rgb)},ic.oklab=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(io,[null].concat(r,["oklab"])))},co.format.oklab=so,co.autodetect.push({p:3,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=oc(r,"oklab"),sc(r)==="array"&&r.length===3)return"oklab"}});var fc=k.unpack,uc=oo,dc=Wl,vc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];var s=fc(r,"rgb"),u=s[0],v=s[1],b=s[2],d=uc(u,v,b),g=d[0],m=d[1],x=d[2];return dc(g,m,x)},bc=vc,hc=k.unpack,gc=Vl,mc=so,pc=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];r=hc(r,"lch");var s=r[0],u=r[1],v=r[2],b=gc(s,u,v),d=b[0],g=b[1],m=b[2],x=mc(d,g,m),A=x[0],L=x[1],E=x[2];return[A,L,E,r.length>3?r[3]:1]},$c=pc,_c=k.unpack,yc=k.type,xc=te,fo=I,uo=q,wc=bc;fo.prototype.oklch=function(){return wc(this._rgb)},xc.oklch=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];return new(Function.prototype.bind.apply(fo,[null].concat(r,["oklch"])))},uo.format.oklch=$c,uo.autodetect.push({p:3,test:function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];if(r=_c(r,"oklch"),yc(r)==="array"&&r.length===3)return"oklch"}});var vo=I,kc=k.type;vo.prototype.alpha=function(r,a){return a===void 0&&(a=!1),r!==void 0&&kc(r)==="number"?a?(this._rgb[3]=r,this):new vo([this._rgb[0],this._rgb[1],this._rgb[2],r],"rgb"):this._rgb[3]};var Cc=I;Cc.prototype.clipped=function(){return this._rgb._clipped||!1};var bt=I,Ac=Nt;bt.prototype.darken=function(r){r===void 0&&(r=1);var a=this,s=a.lab();return s[0]-=Ac.Kn*r,new bt(s,"lab").alpha(a.alpha(),!0)},bt.prototype.brighten=function(r){return r===void 0&&(r=1),this.darken(-r)},bt.prototype.darker=bt.prototype.darken,bt.prototype.brighter=bt.prototype.brighten;var Sc=I;Sc.prototype.get=function(r){var a=r.split("."),s=a[0],u=a[1],v=this[s]();if(u){var b=s.indexOf(u)-(s.substr(0,2)==="ok"?2:0);if(b>-1)return v[b];throw new Error("unknown channel "+u+" in mode "+s)}else return v};var Lt=I,Ec=k.type,Nc=Math.pow,Tc=1e-7,Lc=20;Lt.prototype.luminance=function(r){if(r!==void 0&&Ec(r)==="number"){if(r===0)return new Lt([0,0,0,this._rgb[3]],"rgb");if(r===1)return new Lt([255,255,255,this._rgb[3]],"rgb");var a=this.luminance(),s="rgb",u=Lc,v=function(d,g){var m=d.interpolate(g,.5,s),x=m.luminance();return Math.abs(r-x)<Tc||!u--?m:x>r?v(d,m):v(m,g)},b=(a>r?v(new Lt([0,0,0]),this):v(this,new Lt([255,255,255]))).rgb();return new Lt(b.concat([this._rgb[3]]))}return Pc.apply(void 0,this._rgb.slice(0,3))};var Pc=function(r,a,s){return r=nl(r),a=nl(a),s=nl(s),.2126*r+.7152*a+.0722*s},nl=function(r){return r/=255,r<=.03928?r/12.92:Nc((r+.055)/1.055,2.4)},Re={},bo=I,ho=k.type,hn=Re,go=function(r,a,s){s===void 0&&(s=.5);for(var u=[],v=arguments.length-3;v-- >0;)u[v]=arguments[v+3];var b=u[0]||"lrgb";if(!hn[b]&&!u.length&&(b=Object.keys(hn)[0]),!hn[b])throw new Error("interpolation mode "+b+" is not defined");return ho(r)!=="object"&&(r=new bo(r)),ho(a)!=="object"&&(a=new bo(a)),hn[b](r,a,s).alpha(r.alpha()+s*(a.alpha()-r.alpha()))},mo=I,Oc=go;mo.prototype.mix=mo.prototype.interpolate=function(r,a){a===void 0&&(a=.5);for(var s=[],u=arguments.length-2;u-- >0;)s[u]=arguments[u+2];return Oc.apply(void 0,[this,r,a].concat(s))};var po=I;po.prototype.premultiply=function(r){r===void 0&&(r=!1);var a=this._rgb,s=a[3];return r?(this._rgb=[a[0]*s,a[1]*s,a[2]*s,s],this):new po([a[0]*s,a[1]*s,a[2]*s,s],"rgb")};var al=I,Mc=Nt;al.prototype.saturate=function(r){r===void 0&&(r=1);var a=this,s=a.lch();return s[1]+=Mc.Kn*r,s[1]<0&&(s[1]=0),new al(s,"lch").alpha(a.alpha(),!0)},al.prototype.desaturate=function(r){return r===void 0&&(r=1),this.saturate(-r)};var $o=I,_o=k.type;$o.prototype.set=function(r,a,s){s===void 0&&(s=!1);var u=r.split("."),v=u[0],b=u[1],d=this[v]();if(b){var g=v.indexOf(b)-(v.substr(0,2)==="ok"?2:0);if(g>-1){if(_o(a)=="string")switch(a.charAt(0)){case"+":d[g]+=+a;break;case"-":d[g]+=+a;break;case"*":d[g]*=+a.substr(1);break;case"/":d[g]/=+a.substr(1);break;default:d[g]=+a}else if(_o(a)==="number")d[g]=a;else throw new Error("unsupported value for Color.set");var m=new $o(d,v);return s?(this._rgb=m._rgb,this):m}throw new Error("unknown channel "+b+" in mode "+v)}else return d};var Fc=I,Dc=function(r,a,s){var u=r._rgb,v=a._rgb;return new Fc(u[0]+s*(v[0]-u[0]),u[1]+s*(v[1]-u[1]),u[2]+s*(v[2]-u[2]),"rgb")};Re.rgb=Dc;var Rc=I,ll=Math.sqrt,Pt=Math.pow,Ic=function(r,a,s){var u=r._rgb,v=u[0],b=u[1],d=u[2],g=a._rgb,m=g[0],x=g[1],A=g[2];return new Rc(ll(Pt(v,2)*(1-s)+Pt(m,2)*s),ll(Pt(b,2)*(1-s)+Pt(x,2)*s),ll(Pt(d,2)*(1-s)+Pt(A,2)*s),"rgb")};Re.lrgb=Ic;var jc=I,Bc=function(r,a,s){var u=r.lab(),v=a.lab();return new jc(u[0]+s*(v[0]-u[0]),u[1]+s*(v[1]-u[1]),u[2]+s*(v[2]-u[2]),"lab")};Re.lab=Bc;var yo=I,Ot=function(r,a,s,u){var v,b,d,g;u==="hsl"?(d=r.hsl(),g=a.hsl()):u==="hsv"?(d=r.hsv(),g=a.hsv()):u==="hcg"?(d=r.hcg(),g=a.hcg()):u==="hsi"?(d=r.hsi(),g=a.hsi()):u==="lch"||u==="hcl"?(u="hcl",d=r.hcl(),g=a.hcl()):u==="oklch"&&(d=r.oklch().reverse(),g=a.oklch().reverse());var m,x,A,L,E,M;(u.substr(0,1)==="h"||u==="oklch")&&(v=d,m=v[0],A=v[1],E=v[2],b=g,x=b[0],L=b[1],M=b[2]);var O,W,X,Y;return!isNaN(m)&&!isNaN(x)?(x>m&&x-m>180?Y=x-(m+360):x<m&&m-x>180?Y=x+360-m:Y=x-m,W=m+s*Y):isNaN(m)?isNaN(x)?W=Number.NaN:(W=x,(E==1||E==0)&&u!=="hsv"&&(O=L)):(W=m,(M==1||M==0)&&u!=="hsv"&&(O=A)),O===void 0&&(O=A+s*(L-A)),X=E+s*(M-E),u==="oklch"?new yo([X,O,W],u):new yo([W,O,X],u)},zc=Ot,xo=function(r,a,s){return zc(r,a,s,"lch")};Re.lch=xo,Re.hcl=xo;var Uc=I,Gc=function(r,a,s){var u=r.num(),v=a.num();return new Uc(u+s*(v-u),"num")};Re.num=Gc;var qc=Ot,Hc=function(r,a,s){return qc(r,a,s,"hcg")};Re.hcg=Hc;var Wc=Ot,Vc=function(r,a,s){return Wc(r,a,s,"hsi")};Re.hsi=Vc;var Zc=Ot,Xc=function(r,a,s){return Zc(r,a,s,"hsl")};Re.hsl=Xc;var Kc=Ot,Yc=function(r,a,s){return Kc(r,a,s,"hsv")};Re.hsv=Yc;var Jc=I,Qc=function(r,a,s){var u=r.oklab(),v=a.oklab();return new Jc(u[0]+s*(v[0]-u[0]),u[1]+s*(v[1]-u[1]),u[2]+s*(v[2]-u[2]),"oklab")};Re.oklab=Qc;var ef=Ot,tf=function(r,a,s){return ef(r,a,s,"oklch")};Re.oklch=tf;var ol=I,rf=k.clip_rgb,sl=Math.pow,il=Math.sqrt,cl=Math.PI,wo=Math.cos,ko=Math.sin,nf=Math.atan2,af=function(r,a,s){a===void 0&&(a="lrgb"),s===void 0&&(s=null);var u=r.length;s||(s=Array.from(new Array(u)).map(function(){return 1}));var v=u/s.reduce(function(W,X){return W+X});if(s.forEach(function(W,X){s[X]*=v}),r=r.map(function(W){return new ol(W)}),a==="lrgb")return lf(r,s);for(var b=r.shift(),d=b.get(a),g=[],m=0,x=0,A=0;A<d.length;A++)if(d[A]=(d[A]||0)*s[0],g.push(isNaN(d[A])?0:s[0]),a.charAt(A)==="h"&&!isNaN(d[A])){var L=d[A]/180*cl;m+=wo(L)*s[0],x+=ko(L)*s[0]}var E=b.alpha()*s[0];r.forEach(function(W,X){var Y=W.get(a);E+=W.alpha()*s[X+1];for(var re=0;re<d.length;re++)if(!isNaN(Y[re]))if(g[re]+=s[X+1],a.charAt(re)==="h"){var _e=Y[re]/180*cl;m+=wo(_e)*s[X+1],x+=ko(_e)*s[X+1]}else d[re]+=Y[re]*s[X+1]});for(var M=0;M<d.length;M++)if(a.charAt(M)==="h"){for(var O=nf(x/g[M],m/g[M])/cl*180;O<0;)O+=360;for(;O>=360;)O-=360;d[M]=O}else d[M]=d[M]/g[M];return E/=u,new ol(d,a).alpha(E>.99999?1:E,!0)},lf=function(r,a){for(var s=r.length,u=[0,0,0,0],v=0;v<r.length;v++){var b=r[v],d=a[v]/s,g=b._rgb;u[0]+=sl(g[0],2)*d,u[1]+=sl(g[1],2)*d,u[2]+=sl(g[2],2)*d,u[3]+=g[3]*d}return u[0]=il(u[0]),u[1]=il(u[1]),u[2]=il(u[2]),u[3]>.9999999&&(u[3]=1),new ol(rf(u))},ze=te,Mt=k.type,of=Math.pow,fl=function(r){var a="rgb",s=ze("#ccc"),u=0,v=[0,1],b=[],d=[0,0],g=!1,m=[],x=!1,A=0,L=1,E=!1,M={},O=!0,W=1,X=function(N){if(N=N||["#fff","#000"],N&&Mt(N)==="string"&&ze.brewer&&ze.brewer[N.toLowerCase()]&&(N=ze.brewer[N.toLowerCase()]),Mt(N)==="array"){N.length===1&&(N=[N[0],N[0]]),N=N.slice(0);for(var z=0;z<N.length;z++)N[z]=ze(N[z]);b.length=0;for(var Z=0;Z<N.length;Z++)b.push(Z/(N.length-1))}return Ne(),m=N},Y=function(N){if(g!==null){for(var z=g.length-1,Z=0;Z<z&&N>=g[Z];)Z++;return Z-1}return 0},re=function(N){return N},_e=function(N){return N},pe=function(N,z){var Z,V;if(z==null&&(z=!1),isNaN(N)||N===null)return s;if(z)V=N;else if(g&&g.length>2){var ye=Y(N);V=ye/(g.length-2)}else L!==A?V=(N-A)/(L-A):V=1;V=_e(V),z||(V=re(V)),W!==1&&(V=of(V,W)),V=d[0]+V*(1-d[0]-d[1]),V=Math.min(1,Math.max(0,V));var ie=Math.floor(V*1e4);if(O&&M[ie])Z=M[ie];else{if(Mt(m)==="array")for(var J=0;J<b.length;J++){var ne=b[J];if(V<=ne){Z=m[J];break}if(V>=ne&&J===b.length-1){Z=m[J];break}if(V>ne&&V<b[J+1]){V=(V-ne)/(b[J+1]-ne),Z=ze.interpolate(m[J],m[J+1],V,a);break}}else Mt(m)==="function"&&(Z=m(V));O&&(M[ie]=Z)}return Z},Ne=function(){return M={}};X(r);var K=function(N){var z=ze(pe(N));return x&&z[x]?z[x]():z};return K.classes=function(N){if(N!==null){if(Mt(N)==="array")g=N,v=[N[0],N[N.length-1]];else{var z=ze.analyze(v);N===0?g=[z.min,z.max]:g=ze.limits(z,"e",N)}return K}return g},K.domain=function(N){if(!arguments.length)return v;A=N[0],L=N[N.length-1],b=[];var z=m.length;if(N.length===z&&A!==L)for(var Z=0,V=Array.from(N);Z<V.length;Z+=1){var ye=V[Z];b.push((ye-A)/(L-A))}else{for(var ie=0;ie<z;ie++)b.push(ie/(z-1));if(N.length>2){var J=N.map(function(ae,le){return le/(N.length-1)}),ne=N.map(function(ae){return(ae-A)/(L-A)});ne.every(function(ae,le){return J[le]===ae})||(_e=function(ae){if(ae<=0||ae>=1)return ae;for(var le=0;ae>=ne[le+1];)le++;var Ge=(ae-ne[le])/(ne[le+1]-ne[le]),it=J[le]+Ge*(J[le+1]-J[le]);return it})}}return v=[A,L],K},K.mode=function(N){return arguments.length?(a=N,Ne(),K):a},K.range=function(N,z){return X(N),K},K.out=function(N){return x=N,K},K.spread=function(N){return arguments.length?(u=N,K):u},K.correctLightness=function(N){return N==null&&(N=!0),E=N,Ne(),E?re=function(z){for(var Z=pe(0,!0).lab()[0],V=pe(1,!0).lab()[0],ye=Z>V,ie=pe(z,!0).lab()[0],J=Z+(V-Z)*z,ne=ie-J,ae=0,le=1,Ge=20;Math.abs(ne)>.01&&Ge-- >0;)(function(){return ye&&(ne*=-1),ne<0?(ae=z,z+=(le-z)*.5):(le=z,z+=(ae-z)*.5),ie=pe(z,!0).lab()[0],ne=ie-J})();return z}:re=function(z){return z},K},K.padding=function(N){return N!==null?(Mt(N)==="number"&&(N=[N,N]),d=N,K):d},K.colors=function(N,z){arguments.length<2&&(z="hex");var Z=[];if(arguments.length===0)Z=m.slice(0);else if(N===1)Z=[K(.5)];else if(N>1){var V=v[0],ye=v[1]-V;Z=sf(0,N,!1).map(function(le){return K(V+le/(N-1)*ye)})}else{r=[];var ie=[];if(g&&g.length>2)for(var J=1,ne=g.length,ae=1<=ne;ae?J<ne:J>ne;ae?J++:J--)ie.push((g[J-1]+g[J])*.5);else ie=v;Z=ie.map(function(le){return K(le)})}return ze[z]&&(Z=Z.map(function(le){return le[z]()})),Z},K.cache=function(N){return N!==null?(O=N,K):O},K.gamma=function(N){return N!==null?(W=N,K):W},K.nodata=function(N){return N!==null?(s=ze(N),K):s},K};function sf(r,a,s){for(var u=[],v=r<a,b=s?v?a+1:a-1:a,d=r;v?d<b:d>b;v?d++:d--)u.push(d);return u}var hr=I,cf=fl,ff=function(r){for(var a=[1,1],s=1;s<r;s++){for(var u=[1],v=1;v<=a.length;v++)u[v]=(a[v]||0)+a[v-1];a=u}return a},uf=function(r){var a,s,u,v,b,d,g;if(r=r.map(function(E){return new hr(E)}),r.length===2)a=r.map(function(E){return E.lab()}),b=a[0],d=a[1],v=function(E){var M=[0,1,2].map(function(O){return b[O]+E*(d[O]-b[O])});return new hr(M,"lab")};else if(r.length===3)s=r.map(function(E){return E.lab()}),b=s[0],d=s[1],g=s[2],v=function(E){var M=[0,1,2].map(function(O){return(1-E)*(1-E)*b[O]+2*(1-E)*E*d[O]+E*E*g[O]});return new hr(M,"lab")};else if(r.length===4){var m;u=r.map(function(E){return E.lab()}),b=u[0],d=u[1],g=u[2],m=u[3],v=function(E){var M=[0,1,2].map(function(O){return(1-E)*(1-E)*(1-E)*b[O]+3*(1-E)*(1-E)*E*d[O]+3*(1-E)*E*E*g[O]+E*E*E*m[O]});return new hr(M,"lab")}}else if(r.length>=5){var x,A,L;x=r.map(function(E){return E.lab()}),L=r.length-1,A=ff(L),v=function(E){var M=1-E,O=[0,1,2].map(function(W){return x.reduce(function(X,Y,re){return X+A[re]*Math.pow(M,L-re)*Math.pow(E,re)*Y[W]},0)});return new hr(O,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return v},df=function(r){var a=uf(r);return a.scale=function(){return cf(a)},a},ul=te,Ue=function(r,a,s){if(!Ue[s])throw new Error("unknown blend mode "+s);return Ue[s](r,a)},ot=function(r){return function(a,s){var u=ul(s).rgb(),v=ul(a).rgb();return ul.rgb(r(u,v))}},st=function(r){return function(a,s){var u=[];return u[0]=r(a[0],s[0]),u[1]=r(a[1],s[1]),u[2]=r(a[2],s[2]),u}},vf=function(r){return r},bf=function(r,a){return r*a/255},hf=function(r,a){return r>a?a:r},gf=function(r,a){return r>a?r:a},mf=function(r,a){return 255*(1-(1-r/255)*(1-a/255))},pf=function(r,a){return a<128?2*r*a/255:255*(1-2*(1-r/255)*(1-a/255))},$f=function(r,a){return 255*(1-(1-a/255)/(r/255))},_f=function(r,a){return r===255?255:(r=255*(a/255)/(1-r/255),r>255?255:r)};Ue.normal=ot(st(vf)),Ue.multiply=ot(st(bf)),Ue.screen=ot(st(mf)),Ue.overlay=ot(st(pf)),Ue.darken=ot(st(hf)),Ue.lighten=ot(st(gf)),Ue.dodge=ot(st(_f)),Ue.burn=ot(st($f));for(var yf=Ue,dl=k.type,xf=k.clip_rgb,wf=k.TWOPI,kf=Math.pow,Cf=Math.sin,Af=Math.cos,Co=te,Sf=function(r,a,s,u,v){r===void 0&&(r=300),a===void 0&&(a=-1.5),s===void 0&&(s=1),u===void 0&&(u=1),v===void 0&&(v=[0,1]);var b=0,d;dl(v)==="array"?d=v[1]-v[0]:(d=0,v=[v,v]);var g=function(m){var x=wf*((r+120)/360+a*m),A=kf(v[0]+d*m,u),L=b!==0?s[0]+m*b:s,E=L*A*(1-A)/2,M=Af(x),O=Cf(x),W=A+E*(-.14861*M+1.78277*O),X=A+E*(-.29227*M-.90649*O),Y=A+E*(1.97294*M);return Co(xf([W*255,X*255,Y*255,1]))};return g.start=function(m){return m==null?r:(r=m,g)},g.rotations=function(m){return m==null?a:(a=m,g)},g.gamma=function(m){return m==null?u:(u=m,g)},g.hue=function(m){return m==null?s:(s=m,dl(s)==="array"?(b=s[1]-s[0],b===0&&(s=s[1])):b=0,g)},g.lightness=function(m){return m==null?v:(dl(m)==="array"?(v=m,d=m[1]-m[0]):(v=[m,m],d=0),g)},g.scale=function(){return Co.scale(g)},g.hue(s),g},Ef=I,Nf="0123456789abcdef",Tf=Math.floor,Lf=Math.random,Pf=function(){for(var r="#",a=0;a<6;a++)r+=Nf.charAt(Tf(Lf()*16));return new Ef(r,"hex")},vl=p,Ao=Math.log,Of=Math.pow,Mf=Math.floor,Ff=Math.abs,So=function(r,a){a===void 0&&(a=null);var s={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return vl(r)==="object"&&(r=Object.values(r)),r.forEach(function(u){a&&vl(u)==="object"&&(u=u[a]),u!==null&&!isNaN(u)&&(s.values.push(u),s.sum+=u,u<s.min&&(s.min=u),u>s.max&&(s.max=u),s.count+=1)}),s.domain=[s.min,s.max],s.limits=function(u,v){return Eo(s,u,v)},s},Eo=function(r,a,s){a===void 0&&(a="equal"),s===void 0&&(s=7),vl(r)=="array"&&(r=So(r));var u=r.min,v=r.max,b=r.values.sort(function(hl,gl){return hl-gl});if(s===1)return[u,v];var d=[];if(a.substr(0,1)==="c"&&(d.push(u),d.push(v)),a.substr(0,1)==="e"){d.push(u);for(var g=1;g<s;g++)d.push(u+g/s*(v-u));d.push(v)}else if(a.substr(0,1)==="l"){if(u<=0)throw new Error("Logarithmic scales are only possible for values > 0");var m=Math.LOG10E*Ao(u),x=Math.LOG10E*Ao(v);d.push(u);for(var A=1;A<s;A++)d.push(Of(10,m+A/s*(x-m)));d.push(v)}else if(a.substr(0,1)==="q"){d.push(u);for(var L=1;L<s;L++){var E=(b.length-1)*L/s,M=Mf(E);if(M===E)d.push(b[M]);else{var O=E-M;d.push(b[M]*(1-O)+b[M+1]*O)}}d.push(v)}else if(a.substr(0,1)==="k"){var W,X=b.length,Y=new Array(X),re=new Array(s),_e=!0,pe=0,Ne=null;Ne=[],Ne.push(u);for(var K=1;K<s;K++)Ne.push(u+K/s*(v-u));for(Ne.push(v);_e;){for(var N=0;N<s;N++)re[N]=0;for(var z=0;z<X;z++)for(var Z=b[z],V=Number.MAX_VALUE,ye=void 0,ie=0;ie<s;ie++){var J=Ff(Ne[ie]-Z);J<V&&(V=J,ye=ie),re[ye]++,Y[z]=ye}for(var ne=new Array(s),ae=0;ae<s;ae++)ne[ae]=null;for(var le=0;le<X;le++)W=Y[le],ne[W]===null?ne[W]=b[le]:ne[W]+=b[le];for(var Ge=0;Ge<s;Ge++)ne[Ge]*=1/re[Ge];_e=!1;for(var it=0;it<s;it++)if(ne[it]!==Ne[it]){_e=!0;break}Ne=ne,pe++,pe>200&&(_e=!1)}for(var ct={},Ft=0;Ft<s;Ft++)ct[Ft]=[];for(var Dt=0;Dt<X;Dt++)W=Y[Dt],ct[W].push(b[Dt]);for(var Ye=[],ht=0;ht<s;ht++)Ye.push(ct[ht][0]),Ye.push(ct[ht][ct[ht].length-1]);Ye=Ye.sort(function(hl,gl){return hl-gl}),d.push(Ye[0]);for(var gr=1;gr<Ye.length;gr+=2){var gt=Ye[gr];!isNaN(gt)&&d.indexOf(gt)===-1&&d.push(gt)}}return d},No={analyze:So,limits:Eo},To=I,Df=function(r,a){r=new To(r),a=new To(a);var s=r.luminance(),u=a.luminance();return s>u?(s+.05)/(u+.05):(u+.05)/(s+.05)},Lo=I,Ke=Math.sqrt,ve=Math.pow,Rf=Math.min,If=Math.max,Po=Math.atan2,Oo=Math.abs,gn=Math.cos,Mo=Math.sin,jf=Math.exp,Fo=Math.PI,Bf=function(r,a,s,u,v){s===void 0&&(s=1),u===void 0&&(u=1),v===void 0&&(v=1);var b=function(gt){return 360*gt/(2*Fo)},d=function(gt){return 2*Fo*gt/360};r=new Lo(r),a=new Lo(a);var g=Array.from(r.lab()),m=g[0],x=g[1],A=g[2],L=Array.from(a.lab()),E=L[0],M=L[1],O=L[2],W=(m+E)/2,X=Ke(ve(x,2)+ve(A,2)),Y=Ke(ve(M,2)+ve(O,2)),re=(X+Y)/2,_e=.5*(1-Ke(ve(re,7)/(ve(re,7)+ve(25,7)))),pe=x*(1+_e),Ne=M*(1+_e),K=Ke(ve(pe,2)+ve(A,2)),N=Ke(ve(Ne,2)+ve(O,2)),z=(K+N)/2,Z=b(Po(A,pe)),V=b(Po(O,Ne)),ye=Z>=0?Z:Z+360,ie=V>=0?V:V+360,J=Oo(ye-ie)>180?(ye+ie+360)/2:(ye+ie)/2,ne=1-.17*gn(d(J-30))+.24*gn(d(2*J))+.32*gn(d(3*J+6))-.2*gn(d(4*J-63)),ae=ie-ye;ae=Oo(ae)<=180?ae:ie<=ye?ae+360:ae-360,ae=2*Ke(K*N)*Mo(d(ae)/2);var le=E-m,Ge=N-K,it=1+.015*ve(W-50,2)/Ke(20+ve(W-50,2)),ct=1+.045*z,Ft=1+.015*z*ne,Dt=30*jf(-ve((J-275)/25,2)),Ye=2*Ke(ve(z,7)/(ve(z,7)+ve(25,7))),ht=-Ye*Mo(2*d(Dt)),gr=Ke(ve(le/(s*it),2)+ve(Ge/(u*ct),2)+ve(ae/(v*Ft),2)+ht*(Ge/(u*ct))*(ae/(v*Ft)));return If(0,Rf(100,gr))},Do=I,zf=function(r,a,s){s===void 0&&(s="lab"),r=new Do(r),a=new Do(a);var u=r.get(s),v=a.get(s),b=0;for(var d in u){var g=(u[d]||0)-(v[d]||0);b+=g*g}return Math.sqrt(b)},Uf=I,Gf=function(){for(var r=[],a=arguments.length;a--;)r[a]=arguments[a];try{return new(Function.prototype.bind.apply(Uf,[null].concat(r))),!0}catch{return!1}},Ro=te,Io=fl,qf={cool:function(){return Io([Ro.hsl(180,1,.9),Ro.hsl(250,.7,.4)])},hot:function(){return Io(["#000","#f00","#ff0","#fff"]).mode("rgb")}},mn={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]},bl=0,jo=Object.keys(mn);bl<jo.length;bl+=1){var Bo=jo[bl];mn[Bo.toLowerCase()]=mn[Bo]}var Hf=mn,me=te;me.average=af,me.bezier=df,me.blend=yf,me.cubehelix=Sf,me.mix=me.interpolate=go,me.random=Pf,me.scale=fl,me.analyze=No.analyze,me.contrast=Df,me.deltaE=Bf,me.distance=zf,me.limits=No.limits,me.valid=Gf,me.scales=qf,me.colors=Yl,me.brewer=Hf;var Wf=me;return Wf})})(Ms);const ke=Ms.exports,$t=["#FFFFFF","#181819"],Ju=ke.mix($t[1],"#000",.2,"rgb"),Fs={NEUTRAL:["#F8F8F6","#626262","#181816"],OCEAN:["#E6F5FA","#359AFA","#081F46"],BLUE:["#E9EEFE","#264FE3","#061148"],INDIGO:["#EBEDFB","#4624D3","#0B003D"],VIOLET:["#F0E9F8","#6C1CDB","#1c063d"],CRIMSON:["#FAEAF2","#E03780","#420518"],WINE:["#FDE9ED","#9d1635","#32000A"],RED:["#FEEEEC","#CA2331","#380004"],SUN:["#FEF2EE","#ea3e33","#460405"],ORANGE:["#FDF6ED","#fb7912","#52160B"],YELLOW:["#FDFCF2","#f8c51a","#58280F"],SAPLING:["#FAFEEC","#a2c940","#2b3a06"],GREEN:["#EEFDF3","#0da750","#002f0f"],AURORA:["#EBFDF9","#02B192","#003228"],CYAN:["#EFFDFD","#20C4D9","#01313F"]},Qu=(e,t)=>{const n={};for(const l in e){const o=ke.mix(e[l][0],e[l][1],l=="NEUTRAL"?.8:.95,"lab"),i=ke.mix(ke(e[l][1]),Ju,.8,"rgb"),c=ke.mix(o,e[l][0],.7,"lch");n[l]=[l=="NEUTRAL"?ke(e[l][2]).brighten(.3).hex():ke.mix(ke(e[l][2]).darken(.44),i,.15,"lab").saturate(.7).hex(),ke.mix(o.hex(),c.hex(),.03).hex(),l=="NEUTRAL"?ke(c).brighten(.75).hex():ke.mix(c,e[l][0],.86,"lab").hex()]}return n},e0=[0,2,5,9,16,19],Zo=e=>[...ke.scale([e[0],e[1]]).mode("lab").colors(24).filter((t,n)=>e0.includes(n)),...ke.scale([e[1],e[2]]).mode("lab").colors(7).filter((t,n)=>n%2==0)],Xo=e=>e.reduce((t,n,l)=>({...t,[`0${l}`]:n}),{}),Ds=(e,t)=>{const n={};for(const l in e)t?n[l]=Xo(r0(Zo(e[l]))):n[l]=Xo(Zo(e[l]));return n},t0=[.87,.7,.5,.4,.1,0],r0=e=>{const t=e,n=ke($t[1]).brighten(.05);for(var l=0;l<6;l++)t[l]=ke.mix(e[l],n,t0[l],"rgb").hex();return t};let n0=Ds(Fs,!1),a0=Ds(Qu(Fs),!0);const Rs=()=>Se()?a0:n0,Kt=e=>Object.values(e).map(t=>Object.values(t)),Is={NEUTRAL:{"00":"#1b1d1c","01":"#262727","02":"#414342","03":"#585a59","04":"#747776","05":"#a0a2a1","06":"#abadac","07":"#b2b4b3","08":"#c9cbca","09":"#eff1f0"},OCEAN:{100:"#171c24",200:"#172336",300:"#152a46",400:"#143355",500:"#0a64ae",600:"#0679d2",700:"#1893f6",800:"#4caafa",900:"#72bcfb",1e3:"#c2e2fd"},BLUE:{100:"#181923",200:"#171a33",300:"#171b42",400:"#16204f",500:"#1235a1",600:"#1b41c1",700:"#2b50e2",800:"#5670e5",900:"#788bea",1e3:"#c5cdf6"},INDIGO:{100:"#171721",200:"#15152e",300:"#14133b",400:"#1a1147",500:"#2d088e",600:"#3b05aa",700:"#4c0cc7",800:"#6e3cd0",900:"#8960d7",1e3:"#ccbaee"},VIOLET:{100:"#1a1721",200:"#1d162f",300:"#21143b",400:"#291747",500:"#4a1d8b",600:"#5a24a6",700:"#6d2fc2",800:"#8756cb",900:"#9d75d4",1e3:"#d5c3ec"},CRIMSON:{100:"#21171d",200:"#2f1521",300:"#3d1327",400:"#4c172f",500:"#9e285a",600:"#bf346d",700:"#e14785",800:"#ea6c9e",900:"#f189b2",1e3:"#f9ccde"},WINE:{100:"#1d1719",200:"#251517",300:"#2e1316",400:"#371118",500:"#6d0721",600:"#840928",700:"#9d1635",800:"#af4259",900:"#bf6577",1e3:"#e3bcc4"},RED:{100:"#1f1719",200:"#2a1517",300:"#351315",400:"#411116",500:"#870819",600:"#a30f21",700:"#c31f2e",800:"#d04b56",900:"#db6f75",1e3:"#efc1c3"},SUN:{100:"#211719",200:"#2f1517",300:"#3e1316",400:"#4c1517",500:"#a3201b",600:"#c62c23",700:"#ea3e33",800:"#f1655c",900:"#f6837b",1e3:"#fbcac6"},ORANGE:{100:"#221a19",200:"#341c16",300:"#442114",400:"#532813",500:"#b04e08",600:"#d56004",700:"#fb7912",800:"#fd9644",900:"#fead6a",1e3:"#fedbbf"},YELLOW:{100:"#211f19",200:"#322916",300:"#413414",400:"#504013",500:"#ab8508",600:"#cfa306",700:"#f8c51a",800:"#fcd756",900:"#fde484",1e3:"#fef3ca"},SAPLING:{100:"#1d1f19",200:"#242b16",300:"#2c3614",400:"#364218",500:"#6d8925",600:"#84a82e",700:"#a2c940",800:"#bad76f",900:"#cde492",1e3:"#e9f3d0"},GREEN:{100:"#171d1b",200:"#15261a",300:"#132f1b",400:"#113920",500:"#077233",600:"#048b3f",700:"#0da750",800:"#45ba75",900:"#6fca92",1e3:"#c1e8d0"},AURORA:{100:"#171f1f",200:"#152b28",300:"#133730",400:"#12433a",500:"#1c8b74",600:"#28a98d",700:"#3bcbab",800:"#6cd9c0",900:"#90e4d1",1e3:"#cff3eb"},CYAN:{100:"#171f22",200:"#152a30",300:"#13363d",400:"#11414a",500:"#078899",600:"#04a6b9",700:"#09c8de",800:"#4ed7e9",900:"#7ce4f1",1e3:"#c6f3f9"}},l0={NEUTRAL:{"00":"#f3f5f3","01":"#eff1f0","02":"#d0d2d1","03":"#c2c5c4","04":"#9b9d9c","05":"#747776","06":"#585a59","07":"#414342","08":"#262727","09":"#1b1d1c"},OCEAN:{"00":"#f3fcff","01":"#e4f6fe","02":"#cfeafd","03":"#badefd","04":"#68b7fa","05":"#4eabfa","06":"#1893f6","07":"#036abe","08":"#06488d","09":"#03284e"},BLUE:{"00":"#f2f3fc","01":"#e3e6f9","02":"#d0d5f6","03":"#bdc6f5","04":"#7085ea","05":"#5872e6","06":"#2b50e2","07":"#0c35af","08":"#0b1f82","09":"#061148"},INDIGO:{"00":"#f4eefa","01":"#e7dcf6","02":"#d6c5f2","03":"#c5b1ec","04":"#8357d7","05":"#6f3ed0","06":"#4c0cc7","07":"#2b0199","08":"#130070","09":"#0a003d"},VIOLET:{"00":"#f6f1fb","01":"#ece1f6","02":"#ddcdf2","03":"#cfbbeb","04":"#996dd4","05":"#8958cc","06":"#6d2fc2","07":"#4d1996","08":"#320b6f","09":"#1c063d"},CRIMSON:{"00":"#fdf5fa","01":"#fce8f2","02":"#fad7e6","03":"#f9c5d9","04":"#f082ad","05":"#ea6e9f","06":"#e14785","07":"#ac265e","08":"#7d0d3c","09":"#450721"},WINE:{"00":"#faeff1","01":"#f4dde1","02":"#ebc7ce","03":"#e0b3bc","04":"#bc5d71","05":"#b0445b","06":"#9d1635","07":"#75001d","08":"#52000c","09":"#2d0007"},RED:{"00":"#fcf1f1","01":"#f8e0e0","02":"#f5cbcd","03":"#eeb8bb","04":"#d9666d","05":"#d04d58","06":"#c31f2e","07":"#920114","08":"#660007","09":"#380004"},SUN:{"00":"#fef4f2","01":"#fde7e3","02":"#fbd4d0","03":"#fbc2be","04":"#f67c73","05":"#f1675e","06":"#ea3e33","07":"#b21c16","08":"#7f0808","09":"#460405"},ORANGE:{"00":"#fffaf2","01":"#fff2e1","02":"#fee5cb","03":"#fed7b6","04":"#fda660","05":"#fd9746","06":"#fb7912","07":"#c15100","08":"#8e3100","09":"#4e1b00"},YELLOW:{"00":"#fffef8","01":"#fffcec","02":"#fefad9","03":"#fef2c3","04":"#fde177","05":"#fcd758","06":"#f8c51a","07":"#bb9000","08":"#866400","09":"#4a3700"},SAPLING:{"00":"#fdfef8","01":"#f9fced","02":"#f2f9dd","03":"#e7f2ca","04":"#c8e188","05":"#bbd870","06":"#a2c940","07":"#749521","08":"#4e690b","09":"#2b3a06"},GREEN:{"00":"#f3fbf6","01":"#e3f7ea","02":"#cef0da","03":"#b8e5ca","04":"#64c68b","05":"#47bb77","06":"#0da750","07":"#007a32","08":"#00561c","09":"#002f0f"},AURORA:{"00":"#f8fefd","01":"#edfbfa","02":"#dcf9f3","03":"#c9f3e9","04":"#86e3cd","05":"#6edac1","06":"#3bcbab","07":"#18967c","08":"#026a55","09":"#013a2f"},CYAN:{"00":"#f6fefe","01":"#e9fcfd","02":"#d6f9fb","03":"#bff2f9","04":"#70e1f0","05":"#50d8e9","06":"#09c8de","07":"#0093a6","08":"#006776","09":"#003941"}},Ht=()=>Se()?Is:l0,Mn=()=>Kt(Ht()),o0=P('<select class="relative font-medium text-sm rounded-md pb-1.5 bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 border-7-neutral-300 dark:border-t-neutral-700/50 shadow-sm py-1 px-3 dark:shadow-black/40 hover:shadow active:border-neutral-300 dark:active:border-neutral-700 active:translate-y-px"></select>'),s0=e=>(()=>{const t=o0.cloneNode(!0);return Me(t,e,!1,!0),C(t,()=>e.children),t})(),i0=P('<option value="fc">Flex Design Colors</option>'),c0=P('<option value="fu" selected>Flex Design Colors Uniform</option>'),[Nl,Ko]=de("Flex Design Colors Uniform"),[he,kr]=de(Is),js=()=>{const[e,t]=de("fu");return et(()=>{e()=="fc"&&kr(Ht()),e()=="fu"?kr(Rs()):kr(Ht())}),_(s0,{"aria-label":"Change Color Pallet",value:"fu",onChange:l=>{l.target.value=="fc"?(t("fc"),Ko("Flex Design Colors (Legacy)")):l.target.value=="fu"&&(t("fu"),Ko("Flex Design Colors Uniform"))},get children(){return[i0.cloneNode(!0),c0.cloneNode(!0)]}})},f0=P("<a></a>"),u0=P('<i class="bi bi-lightbulb-fill"></i>'),d0=P('<i class="bi bi-moon-stars-fill"></i>'),[Se,Tl]=de(window.matchMedia("(prefers-color-scheme: dark)").matches),v0=()=>{Fl(()=>{localStorage.getItem("theme")&&Tl(localStorage.getItem("theme")=="dark")}),et(()=>{Se()?(document.documentElement.classList.add("dark"),localStorage.setItem("theme","dark")):(document.documentElement.classList.remove("dark"),localStorage.setItem("theme","light")),Nl()=="Flex Design Colors Uniform"?kr(Rs()):kr(Ht())});const e=()=>{Tl(!Se())};return _(Le,{aria:"Dark-mode Toggle",get children(){const t=f0.cloneNode(!0);return t.$$click=()=>e(),C(t,(()=>{const n=G(()=>!!Se(),!0);return()=>n()?u0.cloneNode(!0):d0.cloneNode(!0)})()),t}})};rt(["click"]);const Yo=P('<i class="bi bi-list" s:amb--e498344a-0></i>'),Jo=P('<i class="bi bi-github" s:amb--e498344a-0></i>'),b0=P(`<nav role="navigation" class="h-screen w-screen hidden justify-end fixed backdrop-blur-sm z-[100] bg-neutral-50 dark:bg-[#181819] bg-opacity-60 dark:bg-opacity-70 cursor-pointer" s:amb--e498344a-0><div class="absolute h-screen border-l p-4 py-3 sm:px-6 lg:px-10 flex flex-col justify-between backdrop-blur-md bg-neutral-50 dark:bg-[#181819] @@ -79,10 +79,10 @@ `,i=` background-color: ${e.color?e.color:"white"}; color: ${e.textColor?e.textColor:"black"} - `;return l!==n._v$&&ge(t,"tabindex",n._v$=l),o!==n._v$2&&Be(t,n._v$2=o),n._v$3=w(t,i,n._v$3),n},{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})());rt(["click"]);const _0=2.4,y0=.2126729,x0=.7151522,w0=.072175,k0=.56,C0=.57,A0=.62,S0=.65,_n=.022,es=1.414,E0=1.14,N0=1.14,T0=.035991,L0=.035991,P0=27.7847239587675,O0=27.7847239587675,ts=.027,rs=.027,ns=.001,M0=5e-4;function as(e){let t=(e&16711680)>>16,n=(e&65280)>>8,l=e&255;function o(i){return Math.pow(i/255,_0)}return y0*o(t)+x0*o(n)+w0*o(l)}function F0(e,t){var n=0,l=0;return e=e>_n?e:e+Math.pow(_n-e,es),t=t>_n?t:t+Math.pow(_n-t,es),Math.abs(t-e)<M0?0:(t>e?(n=(Math.pow(t,k0)-Math.pow(e,C0))*E0,l=n<ns?0:n<T0?n-n*P0*ts:n-ts):(n=(Math.pow(t,S0)-Math.pow(e,A0))*N0,l=n>-ns?0:n>-L0?n-n*O0*rs:n+rs),l*100)}const Bt=(e,t)=>{const n=parseInt(`0x${e.substring(1)}`,16),l=parseInt(`0x${t.substring(1)}`,16);return F0(as(n),as(l))},$l=(e,t)=>{for(const n of e){if(Bt(n,t)>(Se()?30:40))return[Bt(Se()?e[2]:e[8],t),Se()?e[2]:e[8]];if(Bt(n,t)<(Se()?-60:-50))return[Bt(Se()?e[8]:e[2],t),Se()?e[8]:e[2]]}return[0,"#000"]},D0=(e,t,n)=>{const l=Math.abs(Bt(t,e)),o=Math.abs(Bt(n,e));return l>o?t:n},[ce,yn]=de([7,5]),R0=()=>(yt(()=>{document.removeEventListener("keydown",()=>!0)}),et(()=>{document.removeEventListener("keydown",()=>!0),document.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&e.key==="k"&&Tl(!Se()),["Space","ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].indexOf(e.code)>-1&&e.preventDefault(),e.code=="ArrowUp"&&ce()[1]>0&&yn([ce()[0],ce()[1]-1]),e.code=="ArrowDown"&&ce()[1]<Mn().length-1&&yn([ce()[0],ce()[1]+1]),e.code=="ArrowLeft"&&ce()[0]>0&&yn([ce()[0]-1,ce()[1]]),e.code=="ArrowRight"&&ce()[0]<Mn()[0].length-1&&yn([ce()[0]+1,ce()[1]])})}),[]),I0=e=>typeof e=="function",Fn=(e,t)=>I0(e)?e(t):e;var be;(function(e){e[e.ADD_TOAST=0]="ADD_TOAST",e[e.UPDATE_TOAST=1]="UPDATE_TOAST",e[e.UPSERT_TOAST=2]="UPSERT_TOAST",e[e.DISMISS_TOAST=3]="DISMISS_TOAST",e[e.REMOVE_TOAST=4]="REMOVE_TOAST",e[e.START_PAUSE=5]="START_PAUSE",e[e.END_PAUSE=6]="END_PAUSE"})(be||(be={}));const Dn=Symbol("store-raw"),Sr=Symbol("store-node"),j0=Symbol("store-name");function Bs(e,t){let n=e[Ze];if(!n&&(Object.defineProperty(e,Ze,{value:n=new Proxy(e,U0)}),!Array.isArray(e))){const l=Object.keys(e),o=Object.getOwnPropertyDescriptors(e);for(let i=0,c=l.length;i<c;i++){const f=l[i];if(o[f].get){const h=o[f].get.bind(n);Object.defineProperty(e,f,{enumerable:o[f].enumerable,get:h})}}}return n}function Wt(e){let t;return e!=null&&typeof e=="object"&&(e[Ze]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function Vt(e,t=new Set){let n,l,o,i;if(n=e!=null&&e[Dn])return n;if(!Wt(e)||t.has(e))return e;if(Array.isArray(e)){Object.isFrozen(e)?e=e.slice(0):t.add(e);for(let c=0,f=e.length;c<f;c++)o=e[c],(l=Vt(o,t))!==o&&(e[c]=l)}else{Object.isFrozen(e)?e=Object.assign({},e):t.add(e);const c=Object.keys(e),f=Object.getOwnPropertyDescriptors(e);for(let h=0,p=c.length;h<p;h++)i=c[h],!f[i].get&&(o=e[i],(l=Vt(o,t))!==o&&(e[i]=l))}return e}function Bl(e){let t=e[Sr];return t||Object.defineProperty(e,Sr,{value:t={}}),t}function Ll(e,t,n){return e[t]||(e[t]=Us(n))}function B0(e,t){const n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===Ze||t===Sr||t===j0||(delete n.value,delete n.writable,n.get=()=>e[Ze][t]),n}function zs(e){if(vs()){const t=Bl(e);(t._||(t._=Us()))()}}function z0(e){return zs(e),Reflect.ownKeys(e)}function Us(e){const[t,n]=de(e,{equals:!1,internal:!0});return t.$=n,t}const U0={get(e,t,n){if(t===Dn)return e;if(t===Ze)return n;if(t===Al)return zs(e),n;const l=Bl(e),o=l.hasOwnProperty(t);let i=o?l[t]():e[t];if(t===Sr||t==="__proto__")return i;if(!o){const c=Object.getOwnPropertyDescriptor(e,t);vs()&&(typeof i!="function"||e.hasOwnProperty(t))&&!(c&&c.get)&&(i=Ll(l,t,i)())}return Wt(i)?Bs(i):i},has(e,t){return t===Dn||t===Ze||t===Al||t===Sr||t==="__proto__"?!0:(this.get(e,t,e),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:z0,getOwnPropertyDescriptor:B0};function Zt(e,t,n,l=!1){if(!l&&e[t]===n)return;const o=e[t],i=e.length;n===void 0?delete e[t]:e[t]=n;let c=Bl(e),f;(f=Ll(c,t,o))&&f.$(()=>n),Array.isArray(e)&&e.length!==i&&(f=Ll(c,"length",i))&&f.$(e.length),(f=c._)&&f.$()}function Gs(e,t){const n=Object.keys(t);for(let l=0;l<n.length;l+=1){const o=n[l];Zt(e,o,t[o])}}function G0(e,t){if(typeof t=="function"&&(t=t(e)),t=Vt(t),Array.isArray(t)){if(e===t)return;let n=0,l=t.length;for(;n<l;n++){const o=t[n];e[n]!==o&&Zt(e,n,o)}Zt(e,"length",l)}else Gs(e,t)}function _r(e,t,n=[]){let l,o=e;if(t.length>1){l=t.shift();const c=typeof l,f=Array.isArray(e);if(Array.isArray(l)){for(let h=0;h<l.length;h++)_r(e,[l[h]].concat(t),n);return}else if(f&&c==="function"){for(let h=0;h<e.length;h++)l(e[h],h)&&_r(e,[h].concat(t),n);return}else if(f&&c==="object"){const{from:h=0,to:p=e.length-1,by:y=1}=l;for(let S=h;S<=p;S+=y)_r(e,[S].concat(t),n);return}else if(t.length>1){_r(e[l],t,[l].concat(n));return}o=e[l],n=[l].concat(n)}let i=t[0];typeof i=="function"&&(i=i(o,n),i===o)||l===void 0&&i==null||(i=Vt(i),l===void 0||Wt(o)&&Wt(i)&&!Array.isArray(i)?Gs(o,i):Zt(e,l,i))}function q0(...[e,t]){const n=Vt(e||{}),l=Array.isArray(n),o=Bs(n);function i(...c){Xf(()=>{l&&c.length===1?G0(n,c[0]):_r(n,c)})}return[o,i]}const Rn=new WeakMap,qs={get(e,t){if(t===Dn)return e;const n=e[t];let l;return Wt(n)?Rn.get(n)||(Rn.set(n,l=new Proxy(n,qs)),l):n},set(e,t,n){return Zt(e,t,Vt(n)),!0},deleteProperty(e,t){return Zt(e,t,void 0,!0),!0}};function xn(e){return t=>{if(Wt(t)){let n;(n=Rn.get(t))||Rn.set(t,n=new Proxy(t,qs)),e(n)}return t}}const[_t,ft]=q0({toasts:[],pausedAt:void 0}),H0=()=>{const{pausedAt:e,toasts:t}=_t;if(e)return;const n=Date.now();return t.map(o=>{if(o.duration===1/0)return;const i=(o.duration||0)+o.pauseDuration-(n-o.createdAt);if(i<=0){o.visible&&We({type:be.DISMISS_TOAST,toastId:o.id});return}return setTimeout(()=>{We({type:be.DISMISS_TOAST,toastId:o.id})},i)})},Cr=new Map,ls=(e,t)=>{if(Cr.has(e))return;const n=setTimeout(()=>{Cr.delete(e),We({type:be.REMOVE_TOAST,toastId:e})},t);Cr.set(e,n)},W0=e=>{const t=Cr.get(e);Cr.delete(e),t&&clearTimeout(t)},We=e=>{switch(e.type){case be.ADD_TOAST:ft("toasts",o=>{const i=o;return[e.toast,...i]});break;case be.DISMISS_TOAST:const{toastId:t}=e,n=_t.toasts;if(t){const o=n.find(i=>i.id===t);o&&ls(t,o.unmountDelay),ft("toasts",i=>i.id===t,xn(i=>i.visible=!1))}else n.forEach(o=>{ls(o.id,o.unmountDelay)}),ft("toasts",o=>o.id!==void 0,xn(o=>o.visible=!1));break;case be.REMOVE_TOAST:if(!e.toastId){ft("toasts",[]);break}ft("toasts",o=>o.filter(c=>c.id!==e.toastId));break;case be.UPDATE_TOAST:e.toast.id&&W0(e.toast.id),ft("toasts",o=>o.id===e.toast.id,o=>({...o,...e.toast}));break;case be.UPSERT_TOAST:_t.toasts.find(o=>o.id===e.toast.id)?We({type:be.UPDATE_TOAST,toast:e.toast}):We({type:be.ADD_TOAST,toast:e.toast});break;case be.START_PAUSE:ft(xn(o=>{o.pausedAt=Date.now(),o.toasts.forEach(i=>{i.paused=!0})}));break;case be.END_PAUSE:const l=e.time-(_t.pausedAt||0);ft(xn(o=>{o.pausedAt=void 0,o.toasts.forEach(i=>{i.pauseDuration+=l,i.paused=!1})}));break}},V0={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},Gt={id:"",icon:"",unmountDelay:500,duration:3e3,ariaProps:{role:"status","aria-live":"polite"},className:"",style:{},position:"top-right",iconTheme:{}},Hs={position:"top-right",toastOptions:Gt,gutter:8,containerStyle:{},containerClassName:""},wn="16px",Z0={position:"fixed","z-index":9999,top:wn,bottom:wn,left:wn,right:wn,"pointer-events":"none"},X0=(()=>{let e=0;return()=>String(++e)})(),K0=e=>{nd(t=>({containerClassName:e.containerClassName??t.containerClassName,containerStyle:e.containerStyle??t.containerStyle,gutter:e.gutter??t.gutter,position:e.position??t.position,toastOptions:{...e.toastOptions}}))},Y0=(e,t)=>{const l=e.includes("top")?{top:0,"margin-top":`${t}px`}:{bottom:0,"margin-bottom":`${t}px`},o=e.includes("center")?{"justify-content":"center"}:e.includes("right")?{"justify-content":"flex-end"}:{};return{left:0,right:0,display:"flex",position:"absolute",transition:"all 230ms cubic-bezier(.21,1.02,.73,1)",...l,...o}},J0=(e,t)=>{const n=e.getBoundingClientRect();n.height!==t.height&&We({type:be.UPDATE_TOAST,toast:{id:t.id,height:n.height}})},Q0=(e,t)=>{const{toasts:n}=_t,l=jt().gutter||Hs.gutter||8,o=n.filter(h=>(h.position||t)===t&&h.height),i=o.findIndex(h=>h.id===e.id),c=o.filter((h,p)=>p<i&&h.visible).length;return o.slice(0,c).reduce((h,p)=>h+l+(p.height||0),0)},ed=(e,t)=>(e.position||t).includes("top")?1:-1,td={display:"flex","align-items":"center",color:"#363636",background:"white","box-shadow":"0 3px 10px rgba(0, 0, 0, 0.1), 0 3px 3px rgba(0, 0, 0, 0.05)","max-width":"350px","pointer-events":"auto",padding:"8px 10px","border-radius":"4px","line-height":"1.3","will-change":"transform"},rd={display:"flex","align-items":"center",flex:"1 1 auto",margin:"4px 10px","white-space":"pre-line"},kn={"flex-shrink":0,"min-width":"20px","min-height":"20px",display:"flex","align-items":"center","justify-content":"center","text-align":"center"},In=e=>({calcMode:"spline",keyTimes:"0; 1",keySplines:e}),[jt,nd]=de(Hs),ad=(e,t="blank",n)=>({...Gt,...jt().toastOptions,...n,type:t,message:e,pauseDuration:0,createdAt:Date.now(),visible:!0,id:n.id||X0(),paused:!1,style:{...Gt.style,...jt().toastOptions?.style,...n.style},duration:n.duration||jt().toastOptions?.duration||V0[t],position:n.position||jt().toastOptions?.position||jt().position||Gt.position}),Er=e=>(t,n={})=>{const l=_t.toasts.find(i=>i.id===n.id),o=ad(t,e,{...l,duration:void 0,...n});return We({type:be.UPSERT_TOAST,toast:o}),o.id},He=(e,t)=>Er("blank")(e,t);He.error=Er("error");He.success=Er("success");He.loading=Er("loading");He.custom=Er("custom");He.dismiss=e=>{We({type:be.DISMISS_TOAST,toastId:e})};He.promise=(e,t,n)=>{const l=He.loading(t.loading,{...n});return e.then(o=>(He.success(Fn(t.success,o),{id:l,...n}),o)).catch(o=>{He.error(Fn(t.error,o),{id:l,...n})}),e};He.remove=e=>{We({type:be.REMOVE_TOAST,toastId:e})};const ld=P("<div><style>.sldt-active{z-index:9999;}.sldt-active>*{pointer-events:auto;}</style></div>"),od=e=>(et(()=>{K0(e)}),et(()=>{const t=H0();yt(()=>{!t||t.forEach(n=>n&&clearTimeout(n))})}),(()=>{const t=ld.cloneNode(!0);return t.firstChild,C(t,_(Pe,{get each(){return _t.toasts},children:n=>_(fd,{toast:n})}),null),U(n=>{const l={...Z0,...e.containerStyle},o=e.containerClassName;return n._v$=w(t,l,n._v$),o!==n._v$2&&Be(t,n._v$2=o),n},{_v$:void 0,_v$2:void 0}),t})()),Cn=P("<div></div>"),sd=P("<div><div></div></div>"),id=e=>{let t;return et(()=>{if(!t)return;const n=ed(e.toast,e.position);e.toast.visible?t.animate([{transform:`translate3d(0,${n*-200}%,0) scale(.6)`,opacity:.5},{transform:"translate3d(0,0,0) scale(1)",opacity:1}],{duration:350,fill:"forwards",easing:"cubic-bezier(.21,1.02,.73,1)"}):t.animate([{transform:"translate3d(0,0,-1px) scale(1)",opacity:1},{transform:`translate3d(0,${n*-150}%,-1px) scale(.4)`,opacity:0}],{duration:400,fill:"forwards",easing:"cubic-bezier(.06,.71,.55,1)"})}),(()=>{const n=sd.cloneNode(!0),l=n.firstChild,o=t;return typeof o=="function"?o(n):t=n,C(n,_(ou,{get children(){return[_($n,{get when(){return e.toast.icon},get children(){const i=Cn.cloneNode(!0);return C(i,()=>e.toast.icon),U(c=>w(i,kn,c)),i}}),_($n,{get when(){return e.toast.type==="loading"},get children(){const i=Cn.cloneNode(!0);return C(i,_(pd,xr(()=>e.toast.iconTheme))),U(c=>w(i,kn,c)),i}}),_($n,{get when(){return e.toast.type==="success"},get children(){const i=Cn.cloneNode(!0);return C(i,_(bd,xr(()=>e.toast.iconTheme))),U(c=>w(i,kn,c)),i}}),_($n,{get when(){return e.toast.type==="error"},get children(){const i=Cn.cloneNode(!0);return C(i,_(gd,xr(()=>e.toast.iconTheme))),U(c=>w(i,kn,c)),i}})]}}),l),Me(l,()=>e.toast.ariaProps,!1,!0),C(l,()=>Fn(e.toast.message,e.toast)),U(i=>{const c=e.toast.className,f={...td,...e.toast.style},h=rd;return c!==i._v$&&Be(n,i._v$=c),i._v$2=w(n,f,i._v$2),i._v$3=w(l,h,i._v$3),i},{_v$:void 0,_v$2:void 0,_v$3:void 0}),n})()},cd=P("<div></div>"),fd=e=>{const t=()=>{const o=e.toast.position||Gt.position,i=Q0(e.toast,o);return Y0(o,i)},n=G(()=>t());let l;return Fl(()=>{l&&J0(l,e.toast)}),(()=>{const o=cd.cloneNode(!0);o.addEventListener("mouseleave",()=>We({type:be.END_PAUSE,time:Date.now()})),o.addEventListener("mouseenter",()=>We({type:be.START_PAUSE,time:Date.now()}));const i=l;return typeof i=="function"?i(o):l=o,C(o,(()=>{const c=G(()=>e.toast.type==="custom",!0);return()=>c()?Fn(e.toast.message,e.toast):_(id,{get toast(){return e.toast},get position(){return e.toast.position||Gt.position}})})()),U(c=>{const f=n(),h=e.toast.visible?"sldt-active":"";return c._v$=w(o,f,c._v$),h!==c._v$2&&Be(o,c._v$2=h),c},{_v$:void 0,_v$2:void 0}),o})()},ud=P('<svg><circle cx="16" cy="16" r="0"><animate attributeName="opacity" values="0; 1; 1"></animate><animate attributeName="r" values="0; 17.5; 16"></animate></circle></svg>',8,!0),dd=P('<svg><circle cx="16" cy="16" r="12" opacity="0"><animate attributeName="opacity" values="1; 0"></animate><animate attributeName="r" values="12; 26"></animate></circle></svg>',8,!0),Ws=e=>{const t={dur:"0.35s",begin:"100ms",fill:"freeze",calcMode:"spline",keyTimes:"0; 0.6; 1",keySplines:"0.25 0.71 0.4 0.88; .59 .22 .87 .63"};return(()=>{const n=ud.cloneNode(!0),l=n.firstChild,o=l.nextSibling;return Me(l,t,!0,!1),Me(o,t,!0,!1),U(()=>ge(n,"fill",e.fill)),n})()},Vs=e=>{const t={dur:"1s",begin:e.begin||"320ms",fill:"freeze",...In("0.0 0.0 0.2 1")};return(()=>{const n=dd.cloneNode(!0),l=n.firstChild,o=l.nextSibling;return Me(l,t,!0,!1),Me(o,t,!0,!1),U(()=>ge(n,"fill",e.fill)),n})()},vd=P('<svg viewBox="0 0 32 32" width="1.25rem" height="1.25rem"><path fill="none" stroke-width="4" stroke-dasharray="22" stroke-dashoffset="22" stroke-linecap="round" stroke-miterlimit="10" d="M9.8,17.2l3.8,3.6c0.1,0.1,0.3,0.1,0.4,0l9.6-9.7"><animate attributeName="stroke-dashoffset" values="22;0" dur="0.25s" begin="250ms" fill="freeze"></animate></path></svg>'),bd=e=>{const t=e.primary||"#34C759";return(()=>{const n=vd.cloneNode(!0),l=n.firstChild,o=l.firstChild;return n.style.setProperty("overflow","visible"),C(n,_(Ws,{fill:t}),l),C(n,_(Vs,{fill:t,begin:"350ms"}),l),Me(o,()=>In("0.0, 0.0, 0.58, 1.0"),!0,!1),U(()=>ge(l,"stroke",e.secondary||"#FCFCFC")),n})()},hd=P('<svg viewBox="0 0 32 32" width="1.25rem" height="1.25rem"><path fill="none" stroke-width="4" stroke-dasharray="9" stroke-dashoffset="9" stroke-linecap="round" d="M16,7l0,9"><animate attributeName="stroke-dashoffset" values="9;0" dur="0.2s" begin="250ms" fill="freeze"></animate></path><circle cx="16" cy="23" r="2.5" opacity="0"><animate attributeName="opacity" values="0;1" dur="0.25s" begin="350ms" fill="freeze"></animate></circle></svg>'),gd=e=>{const t=e.primary||"#FF3B30";return(()=>{const n=hd.cloneNode(!0),l=n.firstChild,o=l.firstChild,i=l.nextSibling,c=i.firstChild;return n.style.setProperty("overflow","visible"),C(n,_(Ws,{fill:t}),l),C(n,_(Vs,{fill:t}),l),Me(o,()=>In("0.0, 0.0, 0.58, 1.0"),!0,!1),Me(c,()=>In("0.0, 0.0, 0.58, 1.0"),!0,!1),U(f=>{const h=e.secondary||"#FFFFFF",p=e.secondary||"#FFFFFF";return h!==f._v$&&ge(l,"stroke",f._v$=h),p!==f._v$2&&ge(i,"fill",f._v$2=p),f},{_v$:void 0,_v$2:void 0}),n})()},md=P('<svg viewBox="0 0 32 32" width="1.25rem" height="1.25rem"><path fill="none" stroke-width="4" stroke-miterlimit="10" d="M16,6c3,0,5.7,1.3,7.5,3.4c1.5,1.8,2.5,4,2.5,6.6c0,5.5-4.5,10-10,10S6,21.6,6,16S10.5,6,16,6z"></path><path fill="none" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" d="M16,6c3,0,5.7,1.3,7.5,3.4c0.6,0.7,1.1,1.4,1.5,2.2"><animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.75s" repeatCount="indefinite"></animateTransform></path></svg>'),pd=e=>(()=>{const t=md.cloneNode(!0),n=t.firstChild,l=n.nextSibling;return t.style.setProperty("overflow","visible"),U(o=>{const i=e.primary||"#E5E7EB",c=e.secondary||"#4b5563";return i!==o._v$&&ge(n,"stroke",o._v$=i),c!==o._v$2&&ge(l,"stroke",o._v$2=c),o},{_v$:void 0,_v$2:void 0}),t})(),Pl=He,$d=P(`<div class="flex p-2 pb-1.5 gap-2 - bg-neutral-50 border border-neutral-200 dark:bg-neutral-800 dark:border-neutral-700 dark:shadow-black/40 hover:shadow-lg rounded-md shadow-md"><div class="flex flex-row text-sm text-slate-700 dark:text-neutral-300"><p class="font-mono font-semibold pl-1"></p></div></div>`),_d=P('<a class="cursor-pointer -mt-0.5"><i class="bi bi-x text-slate-600 dark:text-neutral-400"></i></a>'),zl=e=>{navigator.clipboard.writeText(e).then(()=>{Pl.custom(t=>_(os,{box:e,showExit:!0,toast:t,children:"Pallette Copied! "}),{unmountDelay:0})},()=>{Pl.custom(t=>_(os,{color:"error",showExit:!0,toast:t,children:"Copying Failed!"}))})},os=e=>{const[t,n]=Il(e,["children","toast","color","showExit","box"]);return(()=>{const l=$d.cloneNode(!0),o=l.firstChild,i=o.firstChild;return Me(l,n,!1,!0),C(l,(()=>{const c=G(()=>!!t.box,!0);return()=>c()&&_(Wn,{class:"h-5 w-5 rounded-md",get color(){return e.box}})})(),o),C(o,()=>e.children,i),C(i,()=>e.box),C(l,(()=>{const c=G(()=>!!t.showExit,!0);return()=>c()&&(()=>{const f=_d.cloneNode(!0);return f.$$click=()=>Pl.dismiss(e.toast.id),f})()})(),null),l})()};rt(["click"]);const yd=P('<div class="flex h-9 items-center w-full"><div class="w-24 hidden sm:block"></div></div>'),xd=P('<div class="flex-grow text-sm sm:text-base font-mono text-slate-600 dark:text-neutral-400"></div>'),wd=P('<div class="flex items-center"><div class="w-24 pr-4 flex-none justify-end text-slate-600 dark:text-neutral-400 capitalize hidden sm:block"></div></div>'),kd=e=>{const t=()=>e.swatch?e.swatch:Ht(),n=()=>ce();return[(()=>{const l=yd.cloneNode(!0);return l.firstChild,C(l,_(Pe,{get each(){return Object.keys(Object.values(t())[0])},children:(o,i)=>(()=>{const c=xd.cloneNode(!0);return C(c,o),c})()}),null),l})(),_(Pe,{get each(){return Object.entries(t())},children:([l,o],i)=>(()=>{const c=wd.cloneNode(!0),f=c.firstChild;return C(f,()=>l.toLocaleLowerCase()),C(c,_(Pe,{get each(){return Object.values(o)},children:(h,p)=>_(Wn,{color:h,get textColor(){return $l(Object.values(o),h)[1].toString()},tabindex:0,get class(){return`grow text-[10px] sm:text-xs h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none - ${n()[0]==p()&&n()[1]==i()?"focused":""}`},onClick:()=>zl(h),get children(){return G(()=>Math.abs($l(Object.values(o),h)[0])>60,!0)()?$l(Object.values(o),h)[0].toFixed():""}})}),null),c})()})]},Cd=P('<h2 class="text-slate-600 dark:text-neutral-400"></h2>'),Ad=P('<h2 class="font-display text-xl capitalize font-semibold text-slate-800 dark:text-slate-200"></h2>'),Sd=P('<div class="flex flex-col w-full pb-6"><div class="flex h-9 items-center w-full overflow-hidden"></div><div class="flex"></div></div>'),Ed=P("<div></div>"),Ol=e=>{const t=()=>e.swatch?e.swatch:Ht(),n=()=>e.swatchArr?e.swatchArr:Mn();return(()=>{const l=Sd.cloneNode(!0),o=l.firstChild,i=o.nextSibling;return C(l,_(qe,{get when(){return!e.disableText},get children(){return[(()=>{const c=Cd.cloneNode(!0);return C(c,()=>e.trackIndex=="color"?"Color Name":"Color ID"),c})(),(()=>{const c=Ad.cloneNode(!0);return C(c,(()=>{const f=G(()=>e.trackIndex=="color",!0);return()=>f()?Object.keys(t())[ce()[1]].toLocaleLowerCase():`0${Object.keys(Object.values(t()))[ce()[0]]}`})()),c})()]}}),o),C(o,_(Pe,{get each(){return G(()=>e.trackIndex=="color",!0)()?Object.keys(Object.values(t())[0]):Object.keys(t())},children:(c,f)=>(()=>{const h=Ed.cloneNode(!0);return C(h,(()=>{const p=G(()=>e.trackIndex=="color",!0);return()=>p()?c:Object.keys(t())[f()].toLocaleLowerCase()})()),U(()=>Be(h,`${e.trackIndex=="color"?"font-mono":""} - w-full text-slate-600 dark:text-neutral-400 capitalize text-xs sm:text-sm`)),h})()})),C(i,_(Pe,{get each(){return G(()=>e.trackIndex=="color",!0)()?n()[ce()[1]]:n().map(c=>c[ce()[0]])},children:(c,f)=>_(Wn,{color:c,tabindex:0,get class(){return`h-12 flex flex-1 justify-center items-center font-mono font-medium outline-none + `;return l!==n._v$&&ge(t,"tabindex",n._v$=l),o!==n._v$2&&Be(t,n._v$2=o),n._v$3=w(t,i,n._v$3),n},{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})());rt(["click"]);const _0=2.4,y0=.2126729,x0=.7151522,w0=.072175,k0=.56,C0=.57,A0=.62,S0=.65,_n=.022,es=1.414,E0=1.14,N0=1.14,T0=.035991,L0=.035991,P0=27.7847239587675,O0=27.7847239587675,ts=.027,rs=.027,ns=.001,M0=5e-4;function as(e){let t=(e&16711680)>>16,n=(e&65280)>>8,l=e&255;function o(i){return Math.pow(i/255,_0)}return y0*o(t)+x0*o(n)+w0*o(l)}function F0(e,t){var n=0,l=0;return e=e>_n?e:e+Math.pow(_n-e,es),t=t>_n?t:t+Math.pow(_n-t,es),Math.abs(t-e)<M0?0:(t>e?(n=(Math.pow(t,k0)-Math.pow(e,C0))*E0,l=n<ns?0:n<T0?n-n*P0*ts:n-ts):(n=(Math.pow(t,S0)-Math.pow(e,A0))*N0,l=n>-ns?0:n>-L0?n-n*O0*rs:n+rs),l*100)}const Bt=(e,t)=>{const n=parseInt(`0x${e.substring(1)}`,16),l=parseInt(`0x${t.substring(1)}`,16);return F0(as(n),as(l))},$l=(e,t)=>{for(const n of e){if(Bt(n,t)>(Se()?30:40))return[Bt(Se()?e[2]:e[8],t),Se()?e[2]:e[8]];if(Bt(n,t)<(Se()?-60:-50))return[Bt(Se()?e[8]:e[2],t),Se()?e[8]:e[2]]}return[0,"#000"]},D0=(e,t,n)=>{const l=Math.abs(Bt(t,e)),o=Math.abs(Bt(n,e));return l>o?t:n},[ce,yn]=de([7,5]),R0=()=>(yt(()=>{document.removeEventListener("keydown",()=>!0)}),et(()=>{document.removeEventListener("keydown",()=>!0),document.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&e.key==="k"&&Tl(!Se()),["Space","ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].indexOf(e.code)>-1&&e.preventDefault(),e.code=="ArrowUp"&&ce()[1]>0&&yn([ce()[0],ce()[1]-1]),e.code=="ArrowDown"&&ce()[1]<Mn().length-1&&yn([ce()[0],ce()[1]+1]),e.code=="ArrowLeft"&&ce()[0]>0&&yn([ce()[0]-1,ce()[1]]),e.code=="ArrowRight"&&ce()[0]<Mn()[0].length-1&&yn([ce()[0]+1,ce()[1]])})}),[]),I0=e=>typeof e=="function",Fn=(e,t)=>I0(e)?e(t):e;var be;(function(e){e[e.ADD_TOAST=0]="ADD_TOAST",e[e.UPDATE_TOAST=1]="UPDATE_TOAST",e[e.UPSERT_TOAST=2]="UPSERT_TOAST",e[e.DISMISS_TOAST=3]="DISMISS_TOAST",e[e.REMOVE_TOAST=4]="REMOVE_TOAST",e[e.START_PAUSE=5]="START_PAUSE",e[e.END_PAUSE=6]="END_PAUSE"})(be||(be={}));const Dn=Symbol("store-raw"),Sr=Symbol("store-node"),j0=Symbol("store-name");function Bs(e,t){let n=e[Ze];if(!n&&(Object.defineProperty(e,Ze,{value:n=new Proxy(e,U0)}),!Array.isArray(e))){const l=Object.keys(e),o=Object.getOwnPropertyDescriptors(e);for(let i=0,c=l.length;i<c;i++){const f=l[i];if(o[f].get){const h=o[f].get.bind(n);Object.defineProperty(e,f,{enumerable:o[f].enumerable,get:h})}}}return n}function Wt(e){let t;return e!==null&&typeof e=="object"&&(e[Ze]||!(t=Object.getPrototypeOf(e))||t===Object.prototype||Array.isArray(e))}function Vt(e,t=new Set){let n,l,o,i;if(n=e!==null&&e[Dn])return n;if(!Wt(e)||t.has(e))return e;if(Array.isArray(e)){Object.isFrozen(e)?e=e.slice(0):t.add(e);for(let c=0,f=e.length;c<f;c++)o=e[c],(l=Vt(o,t))!==o&&(e[c]=l)}else{Object.isFrozen(e)?e=Object.assign({},e):t.add(e);const c=Object.keys(e),f=Object.getOwnPropertyDescriptors(e);for(let h=0,p=c.length;h<p;h++)i=c[h],!f[i].get&&(o=e[i],(l=Vt(o,t))!==o&&(e[i]=l))}return e}function Bl(e){let t=e[Sr];return t||Object.defineProperty(e,Sr,{value:t={}}),t}function Ll(e,t,n){return e[t]||(e[t]=Us(n))}function B0(e,t){const n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.get||!n.configurable||t===Ze||t===Sr||t===j0||(delete n.value,delete n.writable,n.get=()=>e[Ze][t]),n}function zs(e){if(vs()){const t=Bl(e);(t._||(t._=Us()))()}}function z0(e){return zs(e),Reflect.ownKeys(e)}function Us(e){const[t,n]=de(e,{equals:!1,internal:!0});return t.$=n,t}const U0={get(e,t,n){if(t===Dn)return e;if(t===Ze)return n;if(t===Al)return zs(e),n;const l=Bl(e),o=l.hasOwnProperty(t);let i=o?l[t]():e[t];if(t===Sr||t==="__proto__")return i;if(!o){const c=Object.getOwnPropertyDescriptor(e,t);vs()&&(typeof i!=="function"||e.hasOwnProperty(t))&&!(c&&c.get)&&(i=Ll(l,t,i)())}return Wt(i)?Bs(i):i},has(e,t){return t===Dn||t===Ze||t===Al||t===Sr||t==="__proto__"?!0:(this.get(e,t,e),t in e)},set(){return!0},deleteProperty(){return!0},ownKeys:z0,getOwnPropertyDescriptor:B0};function Zt(e,t,n,l=!1){if(!l&&e[t]===n)return;const o=e[t],i=e.length;n===void 0?delete e[t]:e[t]=n;let c=Bl(e),f;(f=Ll(c,t,o))&&f.$(()=>n),Array.isArray(e)&&e.length!==i&&(f=Ll(c,"length",i))&&f.$(e.length),(f=c._)&&f.$()}function Gs(e,t){const n=Object.keys(t);for(let l=0;l<n.length;l+=1){const o=n[l];Zt(e,o,t[o])}}function G0(e,t){if(typeof t=="function"&&(t=t(e)),t=Vt(t),Array.isArray(t)){if(e===t)return;let n=0,l=t.length;for(;n<l;n++){const o=t[n];e[n]!==o&&Zt(e,n,o)}Zt(e,"length",l)}else Gs(e,t)}function _r(e,t,n=[]){let l,o=e;if(t.length>1){l=t.shift();const c=typeof l,f=Array.isArray(e);if(Array.isArray(l)){for(let h=0;h<l.length;h++)_r(e,[l[h]].concat(t),n);return}else if(f&&c==="function"){for(let h=0;h<e.length;h++)l(e[h],h)&&_r(e,[h].concat(t),n);return}else if(f&&c==="object"){const{from:h=0,to:p=e.length-1,by:y=1}=l;for(let S=h;S<=p;S+=y)_r(e,[S].concat(t),n);return}else if(t.length>1){_r(e[l],t,[l].concat(n));return}o=e[l],n=[l].concat(n)}let i=t[0];typeof i=="function"&&(i=i(o,n),i===o)||l===void 0&&i==null||(i=Vt(i),l===void 0||Wt(o)&&Wt(i)&&!Array.isArray(i)?Gs(o,i):Zt(e,l,i))}function q0(...[e,t]){const n=Vt(e||{}),l=Array.isArray(n),o=Bs(n);function i(...c){Xf(()=>{l&&c.length===1?G0(n,c[0]):_r(n,c)})}return[o,i]}const Rn=new WeakMap,qs={get(e,t){if(t===Dn)return e;const n=e[t];let l;return Wt(n)?Rn.get(n)||(Rn.set(n,l=new Proxy(n,qs)),l):n},set(e,t,n){return Zt(e,t,Vt(n)),!0},deleteProperty(e,t){return Zt(e,t,void 0,!0),!0}};function xn(e){return t=>{if(Wt(t)){let n;(n=Rn.get(t))||Rn.set(t,n=new Proxy(t,qs)),e(n)}return t}}const[_t,ft]=q0({toasts:[],pausedAt:void 0}),H0=()=>{const{pausedAt:e,toasts:t}=_t;if(e)return;const n=Date.now();return t.map(o=>{if(o.duration===1/0)return;const i=(o.duration||0)+o.pauseDuration-(n-o.createdAt);if(i<=0){o.visible&&We({type:be.DISMISS_TOAST,toastId:o.id});return}return setTimeout(()=>{We({type:be.DISMISS_TOAST,toastId:o.id})},i)})},Cr=new Map,ls=(e,t)=>{if(Cr.has(e))return;const n=setTimeout(()=>{Cr.delete(e),We({type:be.REMOVE_TOAST,toastId:e})},t);Cr.set(e,n)},W0=e=>{const t=Cr.get(e);Cr.delete(e),t&&clearTimeout(t)},We=e=>{switch(e.type){case be.ADD_TOAST:ft("toasts",o=>{const i=o;return[e.toast,...i]});break;case be.DISMISS_TOAST:const{toastId:t}=e,n=_t.toasts;if(t){const o=n.find(i=>i.id===t);o&&ls(t,o.unmountDelay),ft("toasts",i=>i.id===t,xn(i=>i.visible=!1))}else n.forEach(o=>{ls(o.id,o.unmountDelay)}),ft("toasts",o=>o.id!==void 0,xn(o=>o.visible=!1));break;case be.REMOVE_TOAST:if(!e.toastId){ft("toasts",[]);break}ft("toasts",o=>o.filter(c=>c.id!==e.toastId));break;case be.UPDATE_TOAST:e.toast.id&&W0(e.toast.id),ft("toasts",o=>o.id===e.toast.id,o=>({...o,...e.toast}));break;case be.UPSERT_TOAST:_t.toasts.find(o=>o.id===e.toast.id)?We({type:be.UPDATE_TOAST,toast:e.toast}):We({type:be.ADD_TOAST,toast:e.toast});break;case be.START_PAUSE:ft(xn(o=>{o.pausedAt=Date.now(),o.toasts.forEach(i=>{i.paused=!0})}));break;case be.END_PAUSE:const l=e.time-(_t.pausedAt||0);ft(xn(o=>{o.pausedAt=void 0,o.toasts.forEach(i=>{i.pauseDuration+=l,i.paused=!1})}));break}},V0={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},Gt={id:"",icon:"",unmountDelay:500,duration:3e3,ariaProps:{role:"status","aria-live":"polite"},className:"",style:{},position:"top-right",iconTheme:{}},Hs={position:"top-right",toastOptions:Gt,gutter:8,containerStyle:{},containerClassName:""},wn="16px",Z0={position:"fixed","z-index":9999,top:wn,bottom:wn,left:wn,right:wn,"pointer-events":"none"},X0=(()=>{let e=0;return()=>String(++e)})(),K0=e=>{nd(t=>({containerClassName:e.containerClassName??t.containerClassName,containerStyle:e.containerStyle??t.containerStyle,gutter:e.gutter??t.gutter,position:e.position??t.position,toastOptions:{...e.toastOptions}}))},Y0=(e,t)=>{const l=e.includes("top")?{top:0,"margin-top":`${t}px`}:{bottom:0,"margin-bottom":`${t}px`},o=e.includes("center")?{"justify-content":"center"}:e.includes("right")?{"justify-content":"flex-end"}:{};return{left:0,right:0,display:"flex",position:"absolute",transition:"all 230ms cubic-bezier(.21,1.02,.73,1)",...l,...o}},J0=(e,t)=>{const n=e.getBoundingClientRect();n.height!==t.height&&We({type:be.UPDATE_TOAST,toast:{id:t.id,height:n.height}})},Q0=(e,t)=>{const{toasts:n}=_t,l=jt().gutter||Hs.gutter||8,o=n.filter(h=>(h.position||t)===t&&h.height),i=o.findIndex(h=>h.id===e.id),c=o.filter((h,p)=>p<i&&h.visible).length;return o.slice(0,c).reduce((h,p)=>h+l+(p.height||0),0)},ed=(e,t)=>(e.position||t).includes("top")?1:-1,td={display:"flex","align-items":"center",color:"#363636",background:"white","box-shadow":"0 3px 10px rgba(0, 0, 0, 0.1), 0 3px 3px rgba(0, 0, 0, 0.05)","max-width":"350px","pointer-events":"auto",padding:"8px 10px","border-radius":"4px","line-height":"1.3","will-change":"transform"},rd={display:"flex","align-items":"center",flex:"1 1 auto",margin:"4px 10px","white-space":"pre-line"},kn={"flex-shrink":0,"min-width":"20px","min-height":"20px",display:"flex","align-items":"center","justify-content":"center","text-align":"center"},In=e=>({calcMode:"spline",keyTimes:"0; 1",keySplines:e}),[jt,nd]=de(Hs),ad=(e,t="blank",n)=>({...Gt,...jt().toastOptions,...n,type:t,message:e,pauseDuration:0,createdAt:Date.now(),visible:!0,id:n.id||X0(),paused:!1,style:{...Gt.style,...jt().toastOptions?.style,...n.style},duration:n.duration||jt().toastOptions?.duration||V0[t],position:n.position||jt().toastOptions?.position||jt().position||Gt.position}),Er=e=>(t,n={})=>{const l=_t.toasts.find(i=>i.id===n.id),o=ad(t,e,{...l,duration:void 0,...n});return We({type:be.UPSERT_TOAST,toast:o}),o.id},He=(e,t)=>Er("blank")(e,t);He.error=Er("error");He.success=Er("success");He.loading=Er("loading");He.custom=Er("custom");He.dismiss=e=>{We({type:be.DISMISS_TOAST,toastId:e})};He.promise=(e,t,n)=>{const l=He.loading(t.loading,{...n});return e.then(o=>(He.success(Fn(t.success,o),{id:l,...n}),o)).catch(o=>{He.error(Fn(t.error,o),{id:l,...n})}),e};He.remove=e=>{We({type:be.REMOVE_TOAST,toastId:e})};const ld=P("<div><style>.sldt-active{z-index:9999;}.sldt-active>*{pointer-events:auto;}</style></div>"),od=e=>(et(()=>{K0(e)}),et(()=>{const t=H0();yt(()=>{!t||t.forEach(n=>n&&clearTimeout(n))})}),(()=>{const t=ld.cloneNode(!0);return t.firstChild,C(t,_(Pe,{get each(){return _t.toasts},children:n=>_(fd,{toast:n})}),null),U(n=>{const l={...Z0,...e.containerStyle},o=e.containerClassName;return n._v$=w(t,l,n._v$),o!==n._v$2&&Be(t,n._v$2=o),n},{_v$:void 0,_v$2:void 0}),t})()),Cn=P("<div></div>"),sd=P("<div><div></div></div>"),id=e=>{let t;return et(()=>{if(!t)return;const n=ed(e.toast,e.position);e.toast.visible?t.animate([{transform:`translate3d(0,${n*-200}%,0) scale(.6)`,opacity:.5},{transform:"translate3d(0,0,0) scale(1)",opacity:1}],{duration:350,fill:"forwards",easing:"cubic-bezier(.21,1.02,.73,1)"}):t.animate([{transform:"translate3d(0,0,-1px) scale(1)",opacity:1},{transform:`translate3d(0,${n*-150}%,-1px) scale(.4)`,opacity:0}],{duration:400,fill:"forwards",easing:"cubic-bezier(.06,.71,.55,1)"})}),(()=>{const n=sd.cloneNode(!0),l=n.firstChild,o=t;return typeof o=="function"?o(n):t=n,C(n,_(ou,{get children(){return[_($n,{get when(){return e.toast.icon},get children(){const i=Cn.cloneNode(!0);return C(i,()=>e.toast.icon),U(c=>w(i,kn,c)),i}}),_($n,{get when(){return e.toast.type==="loading"},get children(){const i=Cn.cloneNode(!0);return C(i,_(pd,xr(()=>e.toast.iconTheme))),U(c=>w(i,kn,c)),i}}),_($n,{get when(){return e.toast.type==="success"},get children(){const i=Cn.cloneNode(!0);return C(i,_(bd,xr(()=>e.toast.iconTheme))),U(c=>w(i,kn,c)),i}}),_($n,{get when(){return e.toast.type==="error"},get children(){const i=Cn.cloneNode(!0);return C(i,_(gd,xr(()=>e.toast.iconTheme))),U(c=>w(i,kn,c)),i}})]}}),l),Me(l,()=>e.toast.ariaProps,!1,!0),C(l,()=>Fn(e.toast.message,e.toast)),U(i=>{const c=e.toast.className,f={...td,...e.toast.style},h=rd;return c!==i._v$&&Be(n,i._v$=c),i._v$2=w(n,f,i._v$2),i._v$3=w(l,h,i._v$3),i},{_v$:void 0,_v$2:void 0,_v$3:void 0}),n})()},cd=P("<div></div>"),fd=e=>{const t=()=>{const o=e.toast.position||Gt.position,i=Q0(e.toast,o);return Y0(o,i)},n=G(()=>t());let l;return Fl(()=>{l&&J0(l,e.toast)}),(()=>{const o=cd.cloneNode(!0);o.addEventListener("mouseleave",()=>We({type:be.END_PAUSE,time:Date.now()})),o.addEventListener("mouseenter",()=>We({type:be.START_PAUSE,time:Date.now()}));const i=l;return typeof i=="function"?i(o):l=o,C(o,(()=>{const c=G(()=>e.toast.type==="custom",!0);return()=>c()?Fn(e.toast.message,e.toast):_(id,{get toast(){return e.toast},get position(){return e.toast.position||Gt.position}})})()),U(c=>{const f=n(),h=e.toast.visible?"sldt-active":"";return c._v$=w(o,f,c._v$),h!==c._v$2&&Be(o,c._v$2=h),c},{_v$:void 0,_v$2:void 0}),o})()},ud=P('<svg><circle cx="16" cy="16" r="0"><animate attributeName="opacity" values="0; 1; 1"></animate><animate attributeName="r" values="0; 17.5; 16"></animate></circle></svg>',8,!0),dd=P('<svg><circle cx="16" cy="16" r="12" opacity="0"><animate attributeName="opacity" values="1; 0"></animate><animate attributeName="r" values="12; 26"></animate></circle></svg>',8,!0),Ws=e=>{const t={dur:"0.35s",begin:"100ms",fill:"freeze",calcMode:"spline",keyTimes:"0; 0.6; 1",keySplines:"0.25 0.71 0.4 0.88; .59 .22 .87 .63"};return(()=>{const n=ud.cloneNode(!0),l=n.firstChild,o=l.nextSibling;return Me(l,t,!0,!1),Me(o,t,!0,!1),U(()=>ge(n,"fill",e.fill)),n})()},Vs=e=>{const t={dur:"1s",begin:e.begin||"320ms",fill:"freeze",...In("0.0 0.0 0.2 1")};return(()=>{const n=dd.cloneNode(!0),l=n.firstChild,o=l.nextSibling;return Me(l,t,!0,!1),Me(o,t,!0,!1),U(()=>ge(n,"fill",e.fill)),n})()},vd=P('<svg viewBox="0 0 32 32" width="1.25rem" height="1.25rem"><path fill="none" stroke-width="4" stroke-dasharray="22" stroke-dashoffset="22" stroke-linecap="round" stroke-miterlimit="10" d="M9.8,17.2l3.8,3.6c0.1,0.1,0.3,0.1,0.4,0l9.6-9.7"><animate attributeName="stroke-dashoffset" values="22;0" dur="0.25s" begin="250ms" fill="freeze"></animate></path></svg>'),bd=e=>{const t=e.primary||"#34C759";return(()=>{const n=vd.cloneNode(!0),l=n.firstChild,o=l.firstChild;return n.style.setProperty("overflow","visible"),C(n,_(Ws,{fill:t}),l),C(n,_(Vs,{fill:t,begin:"350ms"}),l),Me(o,()=>In("0.0, 0.0, 0.58, 1.0"),!0,!1),U(()=>ge(l,"stroke",e.secondary||"#FCFCFC")),n})()},hd=P('<svg viewBox="0 0 32 32" width="1.25rem" height="1.25rem"><path fill="none" stroke-width="4" stroke-dasharray="9" stroke-dashoffset="9" stroke-linecap="round" d="M16,7l0,9"><animate attributeName="stroke-dashoffset" values="9;0" dur="0.2s" begin="250ms" fill="freeze"></animate></path><circle cx="16" cy="23" r="2.5" opacity="0"><animate attributeName="opacity" values="0;1" dur="0.25s" begin="350ms" fill="freeze"></animate></circle></svg>'),gd=e=>{const t=e.primary||"#FF3B30";return(()=>{const n=hd.cloneNode(!0),l=n.firstChild,o=l.firstChild,i=l.nextSibling,c=i.firstChild;return n.style.setProperty("overflow","visible"),C(n,_(Ws,{fill:t}),l),C(n,_(Vs,{fill:t}),l),Me(o,()=>In("0.0, 0.0, 0.58, 1.0"),!0,!1),Me(c,()=>In("0.0, 0.0, 0.58, 1.0"),!0,!1),U(f=>{const h=e.secondary||"#FFFFFF",p=e.secondary||"#FFFFFF";return h!==f._v$&&ge(l,"stroke",f._v$=h),p!==f._v$2&&ge(i,"fill",f._v$2=p),f},{_v$:void 0,_v$2:void 0}),n})()},md=P('<svg viewBox="0 0 32 32" width="1.25rem" height="1.25rem"><path fill="none" stroke-width="4" stroke-miterlimit="10" d="M16,6c3,0,5.7,1.3,7.5,3.4c1.5,1.8,2.5,4,2.5,6.6c0,5.5-4.5,10-10,10S6,21.6,6,16S10.5,6,16,6z"></path><path fill="none" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" d="M16,6c3,0,5.7,1.3,7.5,3.4c0.6,0.7,1.1,1.4,1.5,2.2"><animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.75s" repeatCount="indefinite"></animateTransform></path></svg>'),pd=e=>(()=>{const t=md.cloneNode(!0),n=t.firstChild,l=n.nextSibling;return t.style.setProperty("overflow","visible"),U(o=>{const i=e.primary||"#E5E7EB",c=e.secondary||"#4b5563";return i!==o._v$&&ge(n,"stroke",o._v$=i),c!==o._v$2&&ge(l,"stroke",o._v$2=c),o},{_v$:void 0,_v$2:void 0}),t})(),Pl=He,$d=P(`<div class="flex p-2 pb-1.5 gap-2 + bg-neutral-50 border border-neutral-200 dark:bg-neutral-800 dark:border-neutral-700 dark:shadow-black/40 hover:shadow-lg rounded-md shadow-md"><div class="flex flex-row text-sm text-slate-700 dark:text-neutral-300"><p class="font-mono font-semibold pl-1"></p></div></div>`),_d=P('<a class="cursor-pointer -mt-0.5"><i class="bi bi-x text-slate-600 dark:text-neutral-400"></i></a>'),zl=e=>{navigator.clipboard.writeText(e).then(()=>{Pl.custom(t=>_(os,{box:e,showExit:!0,toast:t,children:"Pallette Copied! "}),{unmountDelay:0})},()=>{Pl.custom(t=>_(os,{color:"error",showExit:!0,toast:t,children:"Copying Failed!"}))})},os=e=>{const[t,n]=Il(e,["children","toast","color","showExit","box"]);return(()=>{const l=$d.cloneNode(!0),o=l.firstChild,i=o.firstChild;return Me(l,n,!1,!0),C(l,(()=>{const c=G(()=>!!t.box,!0);return()=>c()&&_(Wn,{class:"h-5 w-5 rounded-md",get color(){return e.box}})})(),o),C(o,()=>e.children,i),C(i,()=>e.box),C(l,(()=>{const c=G(()=>!!t.showExit,!0);return()=>c()&&(()=>{const f=_d.cloneNode(!0);return f.$$click=()=>Pl.dismiss(e.toast.id),f})()})(),null),l})()};rt(["click"]);const yd=P('<div class="flex h-9 items-center w-full"><div class="w-24 hidden sm:block"></div></div>'),xd=P('<div class="flex-grow text-sm sm:text-base font-mono text-slate-600 dark:text-neutral-400"></div>'),wd=P('<div class="flex items-center"><div class="w-24 pr-4 flex-none justify-end text-slate-600 dark:text-neutral-400 capitalize hidden sm:block"></div></div>'),kd=e=>{const t=()=>e.swatch?e.swatch:Ht(),n=()=>ce();return[(()=>{const l=yd.cloneNode(!0);return l.firstChild,C(l,_(Pe,{get each(){return Object.keys(Object.values(t())[0])},children:(o,i)=>(()=>{const c=xd.cloneNode(!0);return C(c,o),c})()}),null),l})(),_(Pe,{get each(){return Object.entries(t())},children:([l,o],i)=>(()=>{const c=wd.cloneNode(!0),f=c.firstChild;return C(f,()=>l.toLocaleLowerCase()),C(c,_(Pe,{get each(){return Object.values(o)},children:(h,p)=>_(Wn,{color:h,get textColor(){return $l(Object.values(o),h)[1].toString()},tabindex:0,get class(){return`grow text-[10px] sm:text-xs h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none + ${n()[0]==p()&&n()[1]==i()?"focused":""}`},onClick:()=>zl(h),get children(){return G(()=>Math.abs($l(Object.values(o),h)[0])>60,!0)()?$l(Object.values(o),h)[0].toFixed():""}})}),null),c})()})]},Cd=P('<h2 class="text-slate-600 dark:text-neutral-400"></h2>'),Ad=P('<h2 class="font-display text-xl capitalize font-semibold text-slate-800 dark:text-slate-200"></h2>'),Sd=P('<div class="flex flex-col w-full pb-6"><div class="flex h-9 items-center w-full overflow-hidden"></div><div class="flex"></div></div>'),Ed=P("<div></div>"),Ol=e=>{const t=()=>e.swatch?e.swatch:Ht(),n=()=>e.swatchArr?e.swatchArr:Mn();return(()=>{const l=Sd.cloneNode(!0),o=l.firstChild,i=o.nextSibling;return C(l,_(qe,{get when(){return!e.disableText},get children(){return[(()=>{const c=Cd.cloneNode(!0);return C(c,()=>e.trackIndex=="color"?"Color Name":"Color ID"),c})(),(()=>{const c=Ad.cloneNode(!0);return C(c,(()=>{const f=G(()=>e.trackIndex=="color",!0);return()=>f()?Object.keys(t())[ce()[1]].toLocaleLowerCase():`0${Object.keys(Object.values(t()))[ce()[0]]}`})()),c})()]}}),o),C(o,_(Pe,{get each(){return G(()=>e.trackIndex=="color",!0)()?Object.keys(Object.values(t())[0]):Object.keys(t())},children:(c,f)=>(()=>{const h=Ed.cloneNode(!0);return C(h,(()=>{const p=G(()=>e.trackIndex=="color",!0);return()=>p()?c:Object.keys(t())[f()].toLocaleLowerCase()})()),U(()=>Be(h,`${e.trackIndex=="color"?"font-mono":""} + w-full text-slate-600 dark:text-neutral-400 capitalize text-xs sm:text-sm`)),h})()})),C(i,_(Pe,{get each(){return G(()=>e.trackIndex=="color",!0)()?n()[ce()[1]]:n().map(c=>c[ce()[0]])},children:(c,f)=>_(Wn,{color:c,tabindex:0,get class(){return`h-12 flex flex-1 justify-center items-center font-mono font-medium outline-none ${ce()[0]==f()&&e.trackIndex=="color"||ce()[1]==f()&&e.trackIndex=="id"?"focused":""}`},onClick:()=>zl(c)})})),l})()},Nd=P(`<div class="flex flex-col grow"><h2 class="text-slate-800 dark:text-slate-200 pb-2"></h2><div class="flex flex-row border border-b-0 border-neutral-200 dark:border-neutral-700"></div><div class="flex grow justify-center h-[150px] bg-neutral-100 dark:bg-neutral-800 border border-neutral-200 dark:border-neutral-700 relative"><div class="w-full h-full relative mx-6 my-[35px]"></div></div></div>`),Td=P('<div class="h-2 w-full grow"></div>'),Ld=P(`<div class="h-[20px] w-[20px] rounded-md absolute border border-neutral-200 dark:border-neutral-700"></div>`),It=e=>{const t=()=>e.swatchArr?e.swatchArr:Mn(),n=()=>e.plotArea==1?t()[ce()[1]]:t().map(o=>o[ce()[0]]),l=()=>n().map(o=>{const i=ke(o).lch();return{l:i[0],c:i[1],h:i[2]/3.6}});return(()=>{const o=Nd.cloneNode(!0),i=o.firstChild,c=i.nextSibling,f=c.nextSibling,h=f.firstChild;return C(i,()=>e.plotType=="l"?"Lightness":e.plotType=="c"?"Chroma":"Hue"),C(c,_(Pe,{get each(){return n()},children:(p,y)=>(()=>{const S=Td.cloneNode(!0);return U(T=>w(S,` @@ -95,31 +95,31 @@ bg-white dark:bg-[#181819] border-neutral-200 dark:border-neutral-800 bg-opacity-80 dark:bg-opacity-90 w-full z-50"><div class="flex flex-col items-center justify-center w-full max-w-screen-2xl py-8 md:py-10"><div class="-mt-1"><a href="/" class="block dark:hidden w-28 saturate-0 opacity-60"><img alt="Ambient Logo"></a><a href="/" class="hidden dark:block w-28 saturate-0 opacity-60"><img alt="Ambient Logo"></a></div><p class="text-slate-600 dark:text-neutral-400 pt-2 text-sm">Built with <a class="font-semibold underline" href="http://solidjs.com/">Solidjs</a>, with the help of <a class="font-semibold underline" href="https://vis4.net/chromajs/">Chromajs</a>,<a class="font-semibold underline" href="https://felte.dev/">Felte</a>,<a class="font-semibold underline" href="https://icons.getbootstrap.com/">Bootstrap Icons</a>, and <a class="font-semibold underline" href="https://github.com/Myndex/SAPC-APCA">WCAG APCA</a></p><p class="text-slate-600 dark:text-neutral-400 text-sm">Check out the <a class="font-semibold underline" href="https://github.com/kevintyj/ambient"><i class="bi bi-github"></i> Source Code!</a></p></div></footer>`),Id=()=>(()=>{const e=Rd.cloneNode(!0),t=e.firstChild,n=t.firstChild,l=n.firstChild,o=l.firstChild,i=l.nextSibling,c=i.firstChild;return ge(o,"src",Ps),ge(c,"src",Os),e})(),jd="modulepreload",Bd=function(e){return"/"+e},is={},Vn=function(t,n,l){return!n||n.length===0?t():Promise.all(n.map(o=>{if(o=Bd(o),o in is)return;is[o]=!0;const i=o.endsWith(".css"),c=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${c}`))return;const f=document.createElement("link");if(f.rel=i?"stylesheet":jd,i||(f.as="script",f.crossOrigin=""),f.href=o,document.head.appendChild(f),i)return new Promise((h,p)=>{f.addEventListener("load",h),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())},zd=P('<div class="text-2xl text-style" s:amb--692c4c9c-0>Testing Reactivity</div>'),Ud="amb--692c4c9c-0",Gd=".text-style[s\\:amb--692c4c9c-0]{color:var(--s-amb--692c4c9c-1)}",qd=()=>{const e=dt(),t=()=>he(),n=()=>Kt(t());return et(()=>{console.log(n()[5][2])}),ut(Ud,1,Gd),e(()=>({"--s-amb--692c4c9c-1":n()[5][2]})),[_(js,{}),(()=>{const l=zd.cloneNode(!0);return U(o=>w(l,e(),o)),l})()]},Zs=()=>Kt(he()),Hd=()=>ce()[1],Xs=()=>Zs()[Hd()],Ks=()=>Zs()[0],cs=()=>"NEUTRAL"in he()?[he().NEUTRAL["00"],he().NEUTRAL["09"]]:["red","red"],Te=e=>Xs()[e],Je=e=>Ks()[e],Wd=()=>D0((()=>Te(5))(),cs()[0],cs()[1]),Vd=P('<i class="bi bi-arrow-left pr-1.5"></i>'),Zd=P(`<div class="rounded bg-helper-transparent inline-block text-sm font-normal font-sans text-center text-helper-primary px-2 py-0.5 capitalize"></div>`),[Xd,Uv]=de(!0),yr=e=>{if(Xd()||e.active)return(()=>{const t=Zd.cloneNode(!0);return C(t,_(qe,{get when(){return e.arrow},get children(){return Vd.cloneNode(!0)}}),null),C(t,()=>e.children,null),U(()=>t.classList.toggle("mx-4",!!e.margin)),t})()},Kd=P('<div class="flex flex-col w-full"><div class="flex"></div></div>'),Yd=P(`<div class="text-helper-primary bg-helper-dark bg-opacity-70 flex w-full h-full justify-center items-center - group">0<div class="bottom-12 absolute hidden group-hover:block"></div></div>`),_l=e=>{let t=e.activeHelper,n=0;const l=o=>{const i=t?t[n]:"Err";return n+=1,n>=o.length&&(n=0),i};return(()=>{const o=Kd.cloneNode(!0),i=o.firstChild;return C(i,_(qe,{get when(){return e.track=="neutralbg"}}),null),C(i,_(Pe,{get each(){return G(()=>e.track=="neutral",!0)()?Ks():Xs()},children:(c,f)=>_(Wn,{color:c,class:"h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none",onClick:()=>zl(c),get children(){return _(qe,{get when(){return G(()=>!!e.active,!0)()&&e.active.includes(f())},get children(){const h=Yd.cloneNode(!0),p=h.firstChild,y=p.nextSibling;return C(h,f,y),C(y,_(yr,{active:!0,get children(){return G(()=>!!e.activeHelper,!0)()?l(t||e.activeHelper):`0${f()}`}})),h}})}})}),null),o})()},Jd=P('<div class="w-full pb-6 border-b border-neutral-200 dark:border-neutral-800 mb-6"></div>'),yl=()=>Jd.cloneNode(!0),Qd=P("<p s:amb--b8a07c5a-0></p>"),ev="amb--b8a07c5a-0",tv=".heading[s\\:amb--b8a07c5a-0]{color:var(--s-amb--b8a07c5a-1)}",xl=e=>{const t=dt(),n=()=>Je(9),l=()=>e.size?e.size==1?"4xl":e.size==2?"3xl":e.size==3?"2xl":e.size==4?"xl":e.size==5?"lg":(e.size==6,"base"):"base";return ut(ev,1,tv),t(()=>({"--s-amb--b8a07c5a-1":n()})),(()=>{const o=Qd.cloneNode(!0);return Me(o,e,!1,!0),C(o,()=>e.children),U(i=>{const c=`text-${l()} heading font-bold ${e.class}`,f=t();return c!==i._v$&&Be(o,i._v$=c),i._v$2=w(o,f,i._v$2),i},{_v$:void 0,_v$2:void 0}),o})()},rv=P("<a s:amb--9605a64a-0></a>"),nv="amb--9605a64a-0",av=".link[s\\:amb--9605a64a-0]{color:var(--s-amb--9605a64a-1);cursor:pointer;font-weight:500}.link[s\\:amb--9605a64a-0]:hover{color:var(--s-amb--9605a64a-2)}.hint[s\\:amb--9605a64a-0]{color:var(--s-amb--9605a64a-3)}.hint[s\\:amb--9605a64a-0]:hover{color:var(--s-amb--9605a64a-4)}",wl=e=>{const t=dt(),n=()=>Te(7),l=()=>Te(6),o=()=>Te(4),i=()=>Te(3),c=()=>e.size?e.size=="base"?"base":e.size=="large"?"lg":e.size=="small"?"sm":"base":"base";return ut(nv,1,av),t(()=>({"--s-amb--9605a64a-1":n(),"--s-amb--9605a64a-2":l(),"--s-amb--9605a64a-3":o(),"--s-amb--9605a64a-4":i()})),(()=>{const f=rv.cloneNode(!0);return Me(f,e,!1,!0),C(f,()=>e.children),U(h=>{const p=`text-${c()} link inline-block ${e.class}`,y=t();return p!==h._v$&&Be(f,h._v$=p),h._v$2=w(f,y,h._v$2),h},{_v$:void 0,_v$2:void 0}),f})()},lv=P("<p s:amb--31e8fde6-0></p>"),ov="amb--31e8fde6-0",sv=".paragraph[s\\:amb--31e8fde6-0]{color:var(--s-amb--31e8fde6-1)}.bold[s\\:amb--31e8fde6-0]{color:var(--s-amb--31e8fde6-2);font-weight:500}.hint[s\\:amb--31e8fde6-0]{color:var(--s-amb--31e8fde6-3)}",pr=e=>{const t=dt(),n=()=>Je(7),l=()=>Je(8),o=()=>Je(4),i=()=>e.size?e.size=="base"?"base":e.size=="large"?"lg":e.size=="small"?"sm":"base":"base";return ut(ov,1,sv),t(()=>({"--s-amb--31e8fde6-1":n(),"--s-amb--31e8fde6-2":l(),"--s-amb--31e8fde6-3":o()})),(()=>{const c=lv.cloneNode(!0);return Me(c,e,!1,!0),C(c,()=>e.children),U(f=>{const h=`text-${i()} paragraph inline ${e.class}`,p=t();return h!==f._v$&&Be(c,f._v$=h),f._v$2=w(c,p,f._v$2),f},{_v$:void 0,_v$2:void 0}),c})()},iv=P('<i class="bi bi-fullscreen-exit -mx-[3.5px]"></i>'),cv=P('<div class="fixed w-screen max-h-screen overflow-x-scroll bg-black bg-opacity-90 dark:bg-opacity-70 top-0 left-0 z-[9998] backdrop-blur"><div class="flex w-full h-full justify-center items-center p-6 sm:p-8 z-[9999]"><div><div class="absolute right-4 top-3"></div></div></div></div>'),fv=P('<i class="bi bi-fullscreen -mx-[3.5px]"></i>'),uv=P('<div><div class="absolute right-4 top-3"></div></div>'),Ys=e=>{const[t,n]=de(!1);return[_(qe,{get when(){return t()},get children(){const l=cv.cloneNode(!0),o=l.firstChild,i=o.firstChild,c=i.firstChild;return c.$$click=()=>n(!1),C(c,_(Le,{aria:"Toggle Fullscreen View",square:!0,get children(){return iv.cloneNode(!0)}})),C(i,()=>e.children,null),U(()=>Be(i,`relative rounded border w-full max-w-screen-xl - border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${$t[1]}] shadow p-6 sm:p-8`)),l}}),(()=>{const l=uv.cloneNode(!0),o=l.firstChild;return o.$$click=()=>n(!0),C(o,_(Le,{aria:"Toggle Fullscreen View",square:!0,get children(){return fv.cloneNode(!0)}})),C(l,()=>e.children,null),U(()=>Be(l,`relative rounded border w-full border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${$t[1]}] shadow p-6 sm:p-8`)),l})()]};rt(["click"]);const dv=P(`<div class="mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 + group">0<div class="bottom-12 absolute hidden group-hover:block"></div></div>`),_l=e=>{let t=e.activeHelper,n=0;const l=o=>{const i=t?t[n]:"Err";return n+=1,n>=o.length&&(n=0),i};return(()=>{const o=Kd.cloneNode(!0),i=o.firstChild;return C(i,_(qe,{get when(){return e.track=="neutralbg"}}),null),C(i,_(Pe,{get each(){return G(()=>e.track=="neutral",!0)()?Ks():Xs()},children:(c,f)=>_(Wn,{color:c,class:"h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none",onClick:()=>zl(c),get children(){return _(qe,{get when(){return G(()=>!!e.active,!0)()&&e.active.includes(f())},get children(){const h=Yd.cloneNode(!0),p=h.firstChild,y=p.nextSibling;return C(h,f,y),C(y,_(yr,{active:!0,get children(){return G(()=>!!e.activeHelper,!0)()?l(t||e.activeHelper):`0${f()}`}})),h}})}})}),null),o})()},Jd=P('<div class="w-full pb-6 border-b border-neutral-200 dark:border-neutral-800 mb-6"></div>'),yl=()=>Jd.cloneNode(!0),Qd=P("<p s:amb--b8a07c5a-0></p>"),ev="amb--b8a07c5a-0",tv=".heading[s\\:amb--b8a07c5a-0]{color:var(--s-amb--b8a07c5a-1)}",xl=e=>{const t=dt(),n=()=>Je(9),l=()=>e.size?e.size==1?"4xl":e.size==2?"3xl":e.size==3?"2xl":e.size==4?"xl":e.size==5?"lg":(e.size==6,"base"):"base";return ut(ev,1,tv),t(()=>({"--s-amb--b8a07c5a-1":n()})),(()=>{const o=Qd.cloneNode(!0);return Me(o,e,!1,!0),C(o,()=>e.children),U(i=>{const c=`text-${l()} heading font-bold ${e.class}`,f=t();return c!==i._v$&&Be(o,i._v$=c),i._v$2=w(o,f,i._v$2),i},{_v$:void 0,_v$2:void 0}),o})()},rv=P("<a s:amb--9605a64a-0></a>"),nv="amb--9605a64a-0",av=".link[s\\:amb--9605a64a-0]{color:var(--s-amb--9605a64a-1);cursor:pointer;font-weight:500}.link[s\\:amb--9605a64a-0]:hover{color:var(--s-amb--9605a64a-2)}.hint[s\\:amb--9605a64a-0]{color:var(--s-amb--9605a64a-3)}.hint[s\\:amb--9605a64a-0]:hover{color:var(--s-amb--9605a64a-4)}",wl=e=>{const t=dt(),n=()=>Te(7),l=()=>Te(6),o=()=>Te(4),i=()=>Te(3),c=()=>e.size?e.size=="base"?"base":e.size=="large"?"lg":e.size=="small"?"sm":"base":"base";return ut(nv,1,av),t(()=>({"--s-amb--9605a64a-1":n(),"--s-amb--9605a64a-2":l(),"--s-amb--9605a64a-3":o(),"--s-amb--9605a64a-4":i()})),(()=>{const f=rv.cloneNode(!0);return Me(f,e,!1,!0),C(f,()=>e.children),U(h=>{const p=`text-${c()} link inline-block ${e.class}`,y=t();return p!==h._v$&&Be(f,h._v$=p),h._v$2=w(f,y,h._v$2),h},{_v$:void 0,_v$2:void 0}),f})()},lv=P("<p s:amb--31e8fde6-0></p>"),ov="amb--31e8fde6-0",sv=".paragraph[s\\:amb--31e8fde6-0]{color:var(--s-amb--31e8fde6-1)}.bold[s\\:amb--31e8fde6-0]{color:var(--s-amb--31e8fde6-2);font-weight:500}.hint[s\\:amb--31e8fde6-0]{color:var(--s-amb--31e8fde6-3)}",pr=e=>{const t=dt(),n=()=>Je(7),l=()=>Je(8),o=()=>Je(4),i=()=>e.size?e.size=="base"?"base":e.size=="large"?"lg":e.size=="small"?"sm":"base":"base";return ut(ov,1,sv),t(()=>({"--s-amb--31e8fde6-1":n(),"--s-amb--31e8fde6-2":l(),"--s-amb--31e8fde6-3":o()})),(()=>{const c=lv.cloneNode(!0);return Me(c,e,!1,!0),C(c,()=>e.children),U(f=>{const h=`text-${i()} paragraph inline ${e.class}`,p=t();return h!==f._v$&&Be(c,f._v$=h),f._v$2=w(c,p,f._v$2),f},{_v$:void 0,_v$2:void 0}),c})()},iv=P('<i class="bi bi-fullscreen-exit -mx-[3.5px]"></i>'),cv=P('<div class="fixed w-screen max-h-screen overflow-x-scroll bg-black bg-opacity-90 dark:bg-opacity-70 top-0 left-0 z-[9998] backdrop-blur"><div class="flex w-full h-full justify-center items-center p-6 sm:p-8 z-[9999]"><div><div class="absolute right-4 top-3"></div></div></div></div>'),fv=P('<i class="bi bi-fullscreen -mx-[3.5px]"></i>'),uv=P('<div><div class="absolute right-4 top-3"></div></div>'),Ys=e=>{const[t,n]=de(!1);return[_(qe,{get when(){return t()},get children(){const l=cv.cloneNode(!0),o=l.firstChild,i=o.firstChild,c=i.firstChild;return c.$$click=()=>n(!1),C(c,_(Le,{aria:"Toggle Fullscreen View",square:!0,get children(){return iv.cloneNode(!0)}})),C(i,()=>e.children,null),U(()=>Be(i,`relative rounded border w-full max-w-screen-xl + border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${$t[1]}] shadow p-6 sm:p-8`)),l}}),(()=>{const l=uv.cloneNode(!0),o=l.firstChild;return o.$$click=()=>n(!0),C(o,_(Le,{aria:"Toggle Fullscreen View",square:!0,get children(){return fv.cloneNode(!0)}})),C(l,()=>e.children,null),U(()=>Be(l,`relative rounded border w-full border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${$t[1]}] shadow p-6 sm:p-8`)),l})()]};rt(["click"]);const dv=P(`<div class="mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-[#6bc28066] via-[#a5dcb242] to-transparent - dark:from-[#01542366] dark:via-[#0f3f2042] dark:to-transparent + dark:from-[#01542366] dark:via-[#0f3f2042] dark:to-transparent font-semibold text-sm inline dark:text-white"><div class="rounded-full bg-green-700 inline mr-2"><i class="bi bi-check-all p-1 text-white"></i></div>APCA Contrast Passing</div>`),vv=P('<a><i class="bi bi-info-circle-fill ml-2"></i></a>'),bv=P(`<div role="tooltip" class="rounded-md border border-neutral-300 dark:border-neutral-600 shadow-md - bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 - px-3.5 py-2.5 text-sm w-80 absolute z-40 hidden group-hover:block">This component passes WCAG 2.0 contrast test, however may fail APCA (WCAG 3.0) tests depending on the use case.<b>It is recommended that special care is put to the font size and background separation for better readability. </b></div>`),hv=P(`<div class="mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 + bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 + px-3.5 py-2.5 text-sm w-80 absolute z-40 hidden group-hover:block">This component passes WCAG 2.0 contrast test, however may fail APCA (WCAG 3.0) tests depending on the use case.<b>It is recommended that special care is put to the font size and background separation for better readability. </b></div>`),hv=P(`<div class="mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-[#ffd56b36] via-[#fff7e142] to-transparent - dark:from-[#472b1366] dark:via-[#61401642] dark:to-transparent - font-semibold text-sm inline dark:text-neutral-400 text-neutral-600 group"><div class="rounded-full bg-[#ffd56b] inline mr-2"><i class="bi bi-check p-1 text-yellow-800"></i></div>WCAG AA Contrast Passing</div>`),gv=P(`<div class="mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 + dark:from-[#472b1366] dark:via-[#61401642] dark:to-transparent + font-semibold text-sm inline dark:text-neutral-400 text-neutral-600 group"><div class="rounded-full bg-[#ffd56b] inline mr-2"><i class="bi bi-check p-1 text-yellow-800"></i></div>WCAG AA Contrast Passing</div>`),gv=P(`<div class="mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-[#ca233136] via-[#fac6c042] to-transparent - dark:from-[#4e141a66] dark:via-[#91202828] dark:to-transparent + dark:from-[#4e141a66] dark:via-[#91202828] dark:to-transparent font-semibold text-sm inline dark:text-neutral-400 text-neutral-600 group cursor-help"><div class="rounded-full bg-[#961524] inline mr-2"><i class="bi bi-exclamation p-1 text-white"></i></div>Contains WCAG Failing Colors<a><i class="bi bi-info-circle-fill ml-2"></i></a><div role="tooltip" class="rounded-md border border-neutral-300 dark:border-neutral-600 shadow-md - bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 + bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 px-3.5 py-2.5 text-sm w-80 absolute z-40 hidden group-hover:block">Some of the components that contain the colors below have WCAG 2.0 failing contrast values.<b>These components have been tested against APCA (WCAG 3.0) contrast tests and have passed. </b>If you require WCAG 2.0 compliance, please consider using a different colorset.</div></div>`),mv=P('<div class="flex gap-x-2"></div>'),kl=e=>(()=>{const t=mv.cloneNode(!0);return C(t,_(qe,{get when(){return e.APCA},get children(){return dv.cloneNode(!0)}}),null),C(t,_(qe,{get when(){return e.WCAG},get children(){const n=hv.cloneNode(!0);return n.firstChild.nextSibling,C(n,_(qe,{get when(){return!e.APCA},get children(){return[vv.cloneNode(!0),bv.cloneNode(!0)]}}),null),n}}),null),C(t,_(qe,{get when(){return e.WCAG==!1},get children(){const n=gv.cloneNode(!0);return n.firstChild.nextSibling.nextSibling.nextSibling,n}}),null),t})(),pv=P("<div></div>"),$v=P('<i class="bi bi-arrow-right"></i>'),_v=P('<div class="flex flex-col gap-4"></div>'),yv=P('<div class="flex flex-col justify-center px-4 sm:px-6"><div class="flex flex-col w-full max-w-screen-2xl gap-y-1"><h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light">Components</h6><h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200">Typography</h1></div><div class="flex flex-col gap-y-4 pb-12"><h6 class="text-lg text-slate-800 dark:text-slate-200 pt-2">Headings</h6><h6 class="text-lg text-slate-800 dark:text-slate-200 pt-3 pb-1">Paragraphs (body)</h6><h6 class="text-lg text-slate-800 dark:text-slate-200 pt-3 pb-1">Links</h6></div><div class="flex flex-col w-full max-w-screen-2xl gap-y-1"><h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light">Sample</h6><h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200">Typography sample</h1></div><div class="flex flex-col gap-y-4"></div></div>'),xv=()=>{const e=[1,2,3,4,5,6],t=["default","hint","bold"],n=["small","base","large"];return(()=>{const l=yv.cloneNode(!0),o=l.firstChild,i=o.nextSibling,c=i.firstChild,f=c.nextSibling,h=f.nextSibling,p=i.nextSibling,y=p.nextSibling;return C(l,_(yl,{}),i),C(i,_(kl,{APCA:!0}),f),C(i,_(_l,{track:"neutral",active:[9],activeHelper:["Default"]}),f),C(i,_(Pe,{each:e,children:S=>_(xl,{size:S,get children(){return["This is a heading of size ",S,_(yr,{margin:!0,get children(){return[G(()=>Object.keys(he())[0].toLocaleLowerCase())," 09"]}})]}})}),f),C(i,_(kl,{APCA:!0}),h),C(i,_(_l,{track:"neutral",active:[4,7,8],activeHelper:["Hint","Default","Bold"]}),h),C(i,_(Pe,{each:t,children:S=>_(Pe,{each:n,children:T=>_(pr,{size:T,class:S,get children(){return["This is the ",S," paragraph text of size ",T,_(yr,{margin:!0,get children(){return[G(()=>Object.keys(he())[0].toLocaleLowerCase())," ",S=="bold"?" 08":S=="hint"?" 04":" 07"]}})]}})})}),h),C(i,_(kl,{APCA:!0,WCAG:!1}),null),C(i,_(_l,{track:"color",active:[3,4,6,7],activeHelper:["Hint Hover","Hint","Default Hover","Default"]}),null),C(i,_(Pe,{each:n,children:S=>_(wl,{size:S,get children(){return["This is the default link of size ",S,_(yr,{margin:!0,get children(){return[G(()=>Object.keys(he())[ce()[1]].toLocaleLowerCase())," 07"]}})]}})}),null),C(i,_(Pe,{each:n,children:S=>_(wl,{size:S,class:"hint",get children(){return["This is the hint link of size ",S,_(yr,{margin:!0,get children(){return[G(()=>Object.keys(he())[ce()[1]].toLocaleLowerCase())," 04"]}})]}})}),null),C(l,_(yl,{}),y),C(y,_(Ys,{get children(){return[(()=>{const S=pv.cloneNode(!0);return C(S,_(xl,{size:1,children:"We do things differently,"}),null),C(S,_(xl,{size:1,children:"Its what makes us unique."}),null),S})(),_(yl,{}),(()=>{const S=_v.cloneNode(!0);return C(S,_(pr,{get children(){return[_(pr,{class:"bold",children:"Technology can be complicated sometimes. It has its own ecosystem, its own language, and it\u2019s just difficult to understand how it works."}),"Some of us humans may not get it easily. This is why our core value is to build an intimate and intricate connection between technology and humans. After all tech is built to help humans."]}}),null),C(S,_(pr,{get children(){return["Our technology is for everyone. Our tech is humanly familiar. This is perhaps what we thrive the most, which makes us different from the other traditional agencies. We care deeply about helping you tackle your most significant challenges and turn your vision into reality, keeping the end-user in mind at all times. With us, it\u2019s never just about the project in hand.",_(pr,{class:"bold",children:"It\u2019s about building trust and enabling your long-term success."}),"We will meet you where you are on your journey, integrate our people with yours, and share our skills every step of the way to make the product you envisioned a reality."]}}),null),C(S,_(wl,{get children(){return["Check out what makes us different ",$v.cloneNode(!0)]}}),null),S})()]}})),l})()},wv=P("<button s:amb--2af6ebdb-0></button>"),kv="amb--2af6ebdb-0",Cv=".playground-btn[s\\:amb--2af6ebdb-0]{color:var(--s-amb--2af6ebdb-1);background-color:var(--s-amb--2af6ebdb-2);border-color:var(--s-amb--2af6ebdb-3);border-width:var(--s-amb--2af6ebdb-4)!important;border-top-color:var(--s-amb--2af6ebdb-5);transition:background-color 80ms ease-out,border-color 80ms ease-out}.playground-btn[s\\:amb--2af6ebdb-0]:hover{background-color:var(--s-amb--2af6ebdb-6);border-color:var(--s-amb--2af6ebdb-7);border-top-color:var(--s-amb--2af6ebdb-8)}",Cl=e=>{const t=dt();return ut(kv,1,Cv),t(()=>({"--s-amb--2af6ebdb-1":e.textColor?e.textColor:"","--s-amb--2af6ebdb-2":e.color?e.color:"","--s-amb--2af6ebdb-3":e.borderColor?e.borderColor:"","--s-amb--2af6ebdb-4":e.border=="top"?"1px 0 0 0":"1px","--s-amb--2af6ebdb-5":e.borderTopColor?e.borderTopColor:e.borderColor?e.borderColor:"","--s-amb--2af6ebdb-6":e.hoverColor?e.hoverColor:"","--s-amb--2af6ebdb-7":e.hoverBorderColor?e.hoverBorderColor:e.borderColor?e.borderColor:"","--s-amb--2af6ebdb-8":e.borderTopHoverColor?e.borderTopHoverColor:e.hoverBorderColor?e.hoverBorderColor:""})),(()=>{const n=wv.cloneNode(!0);return C(n,()=>e.children),U(l=>{const o=`playground-btn font-medium rounded-md bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 shadow-sm hover:shadow pt-1 py-1.5 px-4 dark:shadow-black/20 - active:translate-y-px capitalize ${e.selfFlex?"":"self-start"}`,i=t();return o!==l._v$&&Be(n,l._v$=o),l._v$2=w(n,i,l._v$2),l},{_v$:void 0,_v$2:void 0}),n})()},Av="amb--dd933722-0",Sv=".heading[s\\:amb--dd933722-0]{color:var(--s-amb--dd933722-1)}",An=e=>{const t=dt(),n=()=>Je(9);if(ut(Av,1,Sv),t(()=>({"--s-amb--dd933722-1":n()})),e.type=="default")return _(Cl,{border:"full",get textColor(){return Je(9)},get color(){return G(()=>!!Se(),!0)()?Je(0):$t[0]},get hoverColor(){return Se()?$t[1]:$t[0]},get borderColor(){return Je(2)},get hoverBorderColor(){return Je(1)},get children(){return e.children}});if(e.type=="secondary")return _(Cl,{border:"full",get textColor(){return Te(9)},get color(){return Te(2)},get hoverColor(){return Te(1)},get borderColor(){return Te(3)},get hoverBorderColor(){return Te(2)},get children(){return e.children}});if(e.type=="primary")return _(Cl,{border:"top",get textColor(){return Wd()},get color(){return Te(5)},get hoverColor(){return Te(6)},get borderColor(){return Te(6)},get hoverBorderColor(){return Te(7)},get children(){return e.children}})},Ev=P('<i class="bi bi-arrow-right pl-1" s:amb--5eaf9b4f-0></i>'),Nv=P(`<div class="flex flex-col pb-3 overflow-hidden rounded -m-6 sm:-m-8" s:amb--5eaf9b4f-0><div class="flex justify-between items-center px-16 h-16 border-b border-neutral-300 dark:border-neutral-700" s:amb--5eaf9b4f-0><div class="flex gap-2" s:amb--5eaf9b4f-0><div class="w-6" s:amb--5eaf9b4f-0><svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg" s:amb--5eaf9b4f-0><path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-06" s:amb--5eaf9b4f-0></path></svg></div><div class="font-[800] text-lg heading" s:amb--5eaf9b4f-0>Ambient</div></div><div s:amb--5eaf9b4f-0></div></div><section class="flex items-center p-16 " s:amb--5eaf9b4f-0><div class="flex flex-col gap-4 w-9/12 max-w-xl" s:amb--5eaf9b4f-0><h1 class="text-5xl heading font-bold" s:amb--5eaf9b4f-0>Let your imagination run <div class="heading-special inline" s:amb--5eaf9b4f-0>wild!</div></h1><h2 class="text-2xl paragraph" s:amb--5eaf9b4f-0>Contrast safe, tested, and beautiful colors! <br s:amb--5eaf9b4f-0>Use Flex Colors to design your next website's color palette.</h2><div class="flex flex-wrap py-2 gap-3" s:amb--5eaf9b4f-0></div><div class="hint" s:amb--5eaf9b4f-0><i class="bi bi-arrow-90deg-down pr-2" s:amb--5eaf9b4f-0></i>See what we are all about</div></div><div class="flex flex-col w-full items-end justify-center gap-2" s:amb--5eaf9b4f-0><div class="hidden sm:block w-40 sm:w-52 md:w-64 xl:w-72" s:amb--5eaf9b4f-0><svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg" s:amb--5eaf9b4f-0><path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="neutral-01" s:amb--5eaf9b4f-0></path><path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="neutral-02" s:amb--5eaf9b4f-0></path><path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-01" s:amb--5eaf9b4f-0></path><path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-05" s:amb--5eaf9b4f-0></path><path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="neutral-03" s:amb--5eaf9b4f-0></path><path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-02" s:amb--5eaf9b4f-0></path><path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-03" s:amb--5eaf9b4f-0></path></svg></div></div></section><section class="flex flex-col p-16 py-12 bg-neutral-00" s:amb--5eaf9b4f-0><p class="over" s:amb--5eaf9b4f-0>What sets us apart</p><h2 class="text-4xl heading font-bold pb-2" s:amb--5eaf9b4f-0>Features</h2><p class="paragraph pb-8" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut <b class="bold" s:amb--5eaf9b4f-0>aliquip ex ea commodo consequat.</b></p><div class="flex flex-row gap-8" s:amb--5eaf9b4f-0><div class="bg-neutral-01 p-8 rounded-md" s:amb--5eaf9b4f-0><i class="bi bi-cloud-sun-fill text-4xl icon" s:amb--5eaf9b4f-0></i><h3 class="text-xl heading font-bold pt-4" s:amb--5eaf9b4f-0>Lightweight</h3><p class="hint pb-3" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><a class="link font-semibold underline cursor-pointer" s:amb--5eaf9b4f-0>Read More <i class="bi bi-arrow-right" s:amb--5eaf9b4f-0></i> </a></div><div class="bg-neutral-01 p-8 rounded-md" s:amb--5eaf9b4f-0><i class="bi bi-bounding-box text-4xl icon" s:amb--5eaf9b4f-0></i><h3 class="text-xl heading font-bold pt-4" s:amb--5eaf9b4f-0>Composable</h3><p class="hint pb-3" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><a class="link font-semibold underline cursor-pointer" s:amb--5eaf9b4f-0>Read More <i class="bi bi-arrow-right" s:amb--5eaf9b4f-0></i> </a></div><div class="bg-neutral-01 p-8 rounded-md" s:amb--5eaf9b4f-0><i class="bi bi-lightning-fill text-4xl icon" s:amb--5eaf9b4f-0></i><h3 class="text-xl heading font-bold pt-4" s:amb--5eaf9b4f-0>Fast</h3><p class="hint pb-3" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><a class="link font-semibold underline cursor-pointer" s:amb--5eaf9b4f-0>Read More <i class="bi bi-arrow-right" s:amb--5eaf9b4f-0></i> </a></div></div></section><section class="flex flex-col md:flex-row p-16 py-12 gap-12 items-center" s:amb--5eaf9b4f-0><div class="flex flex-col" s:amb--5eaf9b4f-0><h2 class="text-4xl heading font-bold pb-2" s:amb--5eaf9b4f-0>About our team</h2><p class="paragraph pb-8" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut <b class="bold" s:amb--5eaf9b4f-0>aliquip ex ea commodo consequat.</b>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></div><img class="flex rounded-md w-full md:w-2/5 h-auto object-cover" src="https://images.unsplash.com/photo-1546407341-a6b1cff53f9e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=4170&q=80" s:amb--5eaf9b4f-0></section><section s:amb--5eaf9b4f-0></section></div>`),Tv="amb--5eaf9b4f-0",Lv=".link[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-1)}.link[s\\:amb--5eaf9b4f-0]:hover{color:var(--s-amb--5eaf9b4f-2)}.link-border[s\\:amb--5eaf9b4f-0]{border-color:var(--s-amb--5eaf9b4f-3)}.border-color[s\\:amb--5eaf9b4f-0]{border-color:var(--s-amb--5eaf9b4f-4)}.heading[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-5)}.heading-special[s\\:amb--5eaf9b4f-0]{background:-webkit-linear-gradient(var(--s-amb--5eaf9b4f-6),var(--s-amb--5eaf9b4f-7));-webkit-background-clip:text;-webkit-text-fill-color:transparent}.over[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-8)}.icon[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-9)}.neutral-01[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-10)}.neutral-02[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-11)}.neutral-03[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-12)}.color-01[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-13)}.color-02[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-14)}.color-03[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-15)}.color-04[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-16)}.color-05[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-17)}.color-06[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-18)}.bg-neutral-00[s\\:amb--5eaf9b4f-0]{background:var(--s-amb--5eaf9b4f-19)}.bg-neutral-01[s\\:amb--5eaf9b4f-0]{background:var(--s-amb--5eaf9b4f-20)}.paragraph[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-21)}.bold[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-22);font-weight:500}.hint[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-23)}.code[s\\:amb--5eaf9b4f-0]{background-color:var(--s-amb--5eaf9b4f-24);border:1px solid var(--s-amb--5eaf9b4f-25);border-top:1px solid var(--s-amb--5eaf9b4f-26);color:var(--s-amb--5eaf9b4f-27)}",Pv=()=>{const e=dt(),t=()=>Kt(he()),n=()=>ce()[1],l=()=>t()[n()],o=()=>t()[0],i=()=>o()[9],c=()=>o()[7],f=()=>o()[8],h=()=>o()[5],p=()=>l()[7],y=()=>o()[0],S=()=>o()[1],T=()=>o()[2],j=()=>o()[8];return et(()=>{}),ut(Tv,1,Lv),e(()=>({"--s-amb--5eaf9b4f-1":p(),"--s-amb--5eaf9b4f-2":l()[8],"--s-amb--5eaf9b4f-3":p(),"--s-amb--5eaf9b4f-4":S(),"--s-amb--5eaf9b4f-5":i(),"--s-amb--5eaf9b4f-6":l()[6],"--s-amb--5eaf9b4f-7":l()[5],"--s-amb--5eaf9b4f-8":l()[6],"--s-amb--5eaf9b4f-9":l()[5],"--s-amb--5eaf9b4f-10":o()[1],"--s-amb--5eaf9b4f-11":o()[2],"--s-amb--5eaf9b4f-12":o()[3],"--s-amb--5eaf9b4f-13":l()[1],"--s-amb--5eaf9b4f-14":l()[2],"--s-amb--5eaf9b4f-15":l()[3],"--s-amb--5eaf9b4f-16":l()[4],"--s-amb--5eaf9b4f-17":l()[5],"--s-amb--5eaf9b4f-18":l()[6],"--s-amb--5eaf9b4f-19":o()[0],"--s-amb--5eaf9b4f-20":o()[1],"--s-amb--5eaf9b4f-21":c(),"--s-amb--5eaf9b4f-22":f(),"--s-amb--5eaf9b4f-23":h(),"--s-amb--5eaf9b4f-24":y(),"--s-amb--5eaf9b4f-25":S(),"--s-amb--5eaf9b4f-26":T(),"--s-amb--5eaf9b4f-27":j()})),(()=>{const D=Nv.cloneNode(!0),k=D.firstChild,q=k.firstChild,F=q.firstChild,ee=F.firstChild,oe=ee.firstChild,Q=oe.nextSibling,se=Q.nextSibling,I=se.nextSibling,we=I.nextSibling,te=we.nextSibling,R=te.nextSibling,B=R.nextSibling,H=F.nextSibling,$e=q.nextSibling,Ie=k.nextSibling,Ae=Ie.firstChild,Ee=Ae.firstChild,Fe=Ee.firstChild,je=Fe.nextSibling,De=Ee.nextSibling,Zn=De.firstChild,Xn=Zn.nextSibling,xt=De.nextSibling,Nr=xt.nextSibling,Kn=Nr.firstChild,wt=Ae.nextSibling,Tr=wt.firstChild,Lr=Tr.firstChild,Pr=Lr.firstChild,Or=Pr.nextSibling,Yt=Or.nextSibling,Mr=Yt.nextSibling,Fr=Mr.nextSibling,Dr=Fr.nextSibling,Rr=Dr.nextSibling,Jt=Rr.nextSibling,Qt=Ie.nextSibling,Ir=Qt.firstChild,jr=Ir.nextSibling,vt=jr.nextSibling,Yn=vt.firstChild,Br=Yn.nextSibling,er=vt.nextSibling,kt=er.firstChild,tr=kt.firstChild,rr=tr.nextSibling,nr=rr.nextSibling,ar=nr.nextSibling,zr=ar.firstChild,Ur=zr.nextSibling,Ct=kt.nextSibling,lr=Ct.firstChild,Gr=lr.nextSibling,qr=Gr.nextSibling,or=qr.nextSibling,Hr=or.firstChild,Jn=Hr.nextSibling,Wr=Ct.nextSibling,sr=Wr.firstChild,ir=sr.nextSibling,Vr=ir.nextSibling,Zr=Vr.nextSibling,Qn=Zr.firstChild,ea=Qn.nextSibling,cr=Qt.nextSibling,At=cr.firstChild,Xr=At.firstChild,Kr=Xr.nextSibling,ta=Kr.firstChild,ra=ta.nextSibling,na=At.nextSibling,aa=cr.nextSibling;return C($e,_(An,{type:"default",children:"Sign in"})),C(xt,_(An,{type:"primary",children:"Get started"}),null),C(xt,_(An,{type:"secondary",children:"Why choose Flex?"}),null),C(At,_(An,{type:"default",get children(){return["Read our blog post ",(()=>{const $=Ev.cloneNode(!0);return U(St=>w($,e(),St)),$})()]}}),null),U($=>{const St=e(),Yr=e(),la=e(),oa=e(),sa=e(),Et=e(),ia=e(),Jr=e(),ca=e(),fa=e(),ua=e(),Qr=e(),da=e(),en=e(),va=e(),tn=e(),ba=e(),ha=e(),rn=e(),ga=e(),ma=e(),pa=e(),$a=e(),_a=e(),ya=e(),fr=e(),nt=e(),ur=e(),at=e(),xa=e(),wa=e(),ka=e(),Ca=e(),Aa=e(),nn=e(),an=e(),Sa=e(),Ea=e(),Na=e(),Ta=e(),ln=e(),on=e(),La=e(),Pa=e(),Oa=e(),Ma=e(),Fa=e(),Da=e(),Ra=e(),Ia=e(),ja=e(),Ba=e(),za=e(),Ua=e(),Ga=e(),sn=e(),cn=e(),qa=e(),Nt=e(),lt=e(),Ha=e(),fn=e(),Wa=e(),dr=e(),vr=e(),Va=e();return $._v$=w(D,St,$._v$),$._v$2=w(k,Yr,$._v$2),$._v$3=w(q,la,$._v$3),$._v$4=w(F,oa,$._v$4),$._v$5=w(ee,sa,$._v$5),$._v$6=w(oe,Et,$._v$6),$._v$7=w(Q,ia,$._v$7),$._v$8=w(se,Jr,$._v$8),$._v$9=w(I,ca,$._v$9),$._v$10=w(we,fa,$._v$10),$._v$11=w(te,ua,$._v$11),$._v$12=w(R,Qr,$._v$12),$._v$13=w(B,da,$._v$13),$._v$14=w(H,en,$._v$14),$._v$15=w($e,va,$._v$15),$._v$16=w(Ie,tn,$._v$16),$._v$17=w(Ae,ba,$._v$17),$._v$18=w(Ee,ha,$._v$18),$._v$19=w(je,rn,$._v$19),$._v$20=w(De,ga,$._v$20),$._v$21=w(Xn,ma,$._v$21),$._v$22=w(xt,pa,$._v$22),$._v$23=w(Nr,$a,$._v$23),$._v$24=w(Kn,_a,$._v$24),$._v$25=w(wt,ya,$._v$25),$._v$26=w(Tr,fr,$._v$26),$._v$27=w(Lr,nt,$._v$27),$._v$28=w(Pr,ur,$._v$28),$._v$29=w(Or,at,$._v$29),$._v$30=w(Yt,xa,$._v$30),$._v$31=w(Mr,wa,$._v$31),$._v$32=w(Fr,ka,$._v$32),$._v$33=w(Dr,Ca,$._v$33),$._v$34=w(Rr,Aa,$._v$34),$._v$35=w(Jt,nn,$._v$35),$._v$36=w(Qt,an,$._v$36),$._v$37=w(Ir,Sa,$._v$37),$._v$38=w(jr,Ea,$._v$38),$._v$39=w(vt,Na,$._v$39),$._v$40=w(Br,Ta,$._v$40),$._v$41=w(er,ln,$._v$41),$._v$42=w(kt,on,$._v$42),$._v$43=w(tr,La,$._v$43),$._v$44=w(rr,Pa,$._v$44),$._v$45=w(nr,Oa,$._v$45),$._v$46=w(ar,Ma,$._v$46),$._v$47=w(Ur,Fa,$._v$47),$._v$48=w(Ct,Da,$._v$48),$._v$49=w(lr,Ra,$._v$49),$._v$50=w(Gr,Ia,$._v$50),$._v$51=w(qr,ja,$._v$51),$._v$52=w(or,Ba,$._v$52),$._v$53=w(Jn,za,$._v$53),$._v$54=w(Wr,Ua,$._v$54),$._v$55=w(sr,Ga,$._v$55),$._v$56=w(ir,sn,$._v$56),$._v$57=w(Vr,cn,$._v$57),$._v$58=w(Zr,qa,$._v$58),$._v$59=w(ea,Nt,$._v$59),$._v$60=w(cr,lt,$._v$60),$._v$61=w(At,Ha,$._v$61),$._v$62=w(Xr,fn,$._v$62),$._v$63=w(Kr,Wa,$._v$63),$._v$64=w(ra,dr,$._v$64),$._v$65=w(na,vr,$._v$65),$._v$66=w(aa,Va,$._v$66),$},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0,_v$11:void 0,_v$12:void 0,_v$13:void 0,_v$14:void 0,_v$15:void 0,_v$16:void 0,_v$17:void 0,_v$18:void 0,_v$19:void 0,_v$20:void 0,_v$21:void 0,_v$22:void 0,_v$23:void 0,_v$24:void 0,_v$25:void 0,_v$26:void 0,_v$27:void 0,_v$28:void 0,_v$29:void 0,_v$30:void 0,_v$31:void 0,_v$32:void 0,_v$33:void 0,_v$34:void 0,_v$35:void 0,_v$36:void 0,_v$37:void 0,_v$38:void 0,_v$39:void 0,_v$40:void 0,_v$41:void 0,_v$42:void 0,_v$43:void 0,_v$44:void 0,_v$45:void 0,_v$46:void 0,_v$47:void 0,_v$48:void 0,_v$49:void 0,_v$50:void 0,_v$51:void 0,_v$52:void 0,_v$53:void 0,_v$54:void 0,_v$55:void 0,_v$56:void 0,_v$57:void 0,_v$58:void 0,_v$59:void 0,_v$60:void 0,_v$61:void 0,_v$62:void 0,_v$63:void 0,_v$64:void 0,_v$65:void 0,_v$66:void 0}),D})()},Ov=P('<div class="flex flex-col justify-center px-4 sm:px-6"><div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"><h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light">Pages</h6><h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200">Landing Page</h1></div></div>'),Mv=()=>(()=>{const e=Ov.cloneNode(!0);return e.firstChild,C(e,_(Ol,{get swatch(){return he()},get swatchArr(){return Kt(he())},trackIndex:"id",disableText:!0}),null),C(e,_(Ys,{get children(){return _(Pv,{})}}),null),e})(),Fv=Un(()=>Vn(()=>import("./playgroundPage.65440987.js"),[])),Dv=Un(()=>Vn(()=>import("./buttonPlaygroundPage.b28485cc.js"),[])),Rv=Un(()=>Vn(()=>import("./introPlaygroundPage.da64518d.js"),[])),Iv=Un(()=>Vn(()=>import("./documentationSamplePage.e78368eb.js"),[])),jv=()=>_(Ve,{path:"/playground",component:Fv,get children(){return[_(Ve,{path:"/intro",component:Rv}),_(Ve,{path:"/buttons",component:Dv}),_(Ve,{path:"/texts",component:xv}),_(Ve,{path:"/documentation",component:Iv}),_(Ve,{path:"/landing",component:Mv}),_(Ve,{path:"/test",component:qd})]}}),Bv=P('<div class="flex flex-col z-50 min-h-screen justify-between bg-white dark:bg-[#181819]"><main role="main" class="my-auto lg:px-4"><div class="h-14"></div><div class="h-20"></div></main></div>'),zv=()=>(Fl(()=>{let e=` - \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 - \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 - \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 - \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 - \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 + active:translate-y-px capitalize ${e.selfFlex?"":"self-start"}`,i=t();return o!==l._v$&&Be(n,l._v$=o),l._v$2=w(n,i,l._v$2),l},{_v$:void 0,_v$2:void 0}),n})()},Av="amb--dd933722-0",Sv=".heading[s\\:amb--dd933722-0]{color:var(--s-amb--dd933722-1)}",An=e=>{const t=dt(),n=()=>Je(9);if(ut(Av,1,Sv),t(()=>({"--s-amb--dd933722-1":n()})),e.type=="default")return _(Cl,{border:"full",get textColor(){return Je(9)},get color(){return G(()=>!!Se(),!0)()?Je(0):$t[0]},get hoverColor(){return Se()?$t[1]:$t[0]},get borderColor(){return Je(2)},get hoverBorderColor(){return Je(1)},get children(){return e.children}});if(e.type=="secondary")return _(Cl,{border:"full",get textColor(){return Te(9)},get color(){return Te(2)},get hoverColor(){return Te(1)},get borderColor(){return Te(3)},get hoverBorderColor(){return Te(2)},get children(){return e.children}});if(e.type=="primary")return _(Cl,{border:"top",get textColor(){return Wd()},get color(){return Te(5)},get hoverColor(){return Te(6)},get borderColor(){return Te(6)},get hoverBorderColor(){return Te(7)},get children(){return e.children}})},Ev=P('<i class="bi bi-arrow-right pl-1" s:amb--5eaf9b4f-0></i>'),Nv=P(`<div class="flex flex-col pb-3 overflow-hidden rounded -m-6 sm:-m-8" s:amb--5eaf9b4f-0><div class="flex justify-between items-center px-16 h-16 border-b border-neutral-300 dark:border-neutral-700" s:amb--5eaf9b4f-0><div class="flex gap-2" s:amb--5eaf9b4f-0><div class="w-6" s:amb--5eaf9b4f-0><svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg" s:amb--5eaf9b4f-0><path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-06" s:amb--5eaf9b4f-0></path></svg></div><div class="font-[800] text-lg heading" s:amb--5eaf9b4f-0>Ambient</div></div><div s:amb--5eaf9b4f-0></div></div><section class="flex items-center p-16 " s:amb--5eaf9b4f-0><div class="flex flex-col gap-4 w-9/12 max-w-xl" s:amb--5eaf9b4f-0><h1 class="text-5xl heading font-bold" s:amb--5eaf9b4f-0>Let your imagination run <div class="heading-special inline" s:amb--5eaf9b4f-0>wild!</div></h1><h2 class="text-2xl paragraph" s:amb--5eaf9b4f-0>Contrast safe, tested, and beautiful colors! <br s:amb--5eaf9b4f-0>Use Flex Colors to design your next website's color palette.</h2><div class="flex flex-wrap py-2 gap-3" s:amb--5eaf9b4f-0></div><div class="hint" s:amb--5eaf9b4f-0><i class="bi bi-arrow-90deg-down pr-2" s:amb--5eaf9b4f-0></i>See what we are all about</div></div><div class="flex flex-col w-full items-end justify-center gap-2" s:amb--5eaf9b4f-0><div class="hidden sm:block w-40 sm:w-52 md:w-64 xl:w-72" s:amb--5eaf9b4f-0><svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg" s:amb--5eaf9b4f-0><path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="neutral-01" s:amb--5eaf9b4f-0></path><path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="neutral-02" s:amb--5eaf9b4f-0></path><path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06" s:amb--5eaf9b4f-0></path><path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-01" s:amb--5eaf9b4f-0></path><path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-05" s:amb--5eaf9b4f-0></path><path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="neutral-03" s:amb--5eaf9b4f-0></path><path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-02" s:amb--5eaf9b4f-0></path><path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-03" s:amb--5eaf9b4f-0></path></svg></div></div></section><section class="flex flex-col p-16 py-12 bg-neutral-00" s:amb--5eaf9b4f-0><p class="over" s:amb--5eaf9b4f-0>What sets us apart</p><h2 class="text-4xl heading font-bold pb-2" s:amb--5eaf9b4f-0>Features</h2><p class="paragraph pb-8" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut <b class="bold" s:amb--5eaf9b4f-0>aliquip ex ea commodo consequat.</b></p><div class="flex flex-row gap-8" s:amb--5eaf9b4f-0><div class="bg-neutral-01 p-8 rounded-md" s:amb--5eaf9b4f-0><i class="bi bi-cloud-sun-fill text-4xl icon" s:amb--5eaf9b4f-0></i><h3 class="text-xl heading font-bold pt-4" s:amb--5eaf9b4f-0>Lightweight</h3><p class="hint pb-3" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><a class="link font-semibold underline cursor-pointer" s:amb--5eaf9b4f-0>Read More <i class="bi bi-arrow-right" s:amb--5eaf9b4f-0></i> </a></div><div class="bg-neutral-01 p-8 rounded-md" s:amb--5eaf9b4f-0><i class="bi bi-bounding-box text-4xl icon" s:amb--5eaf9b4f-0></i><h3 class="text-xl heading font-bold pt-4" s:amb--5eaf9b4f-0>Composable</h3><p class="hint pb-3" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><a class="link font-semibold underline cursor-pointer" s:amb--5eaf9b4f-0>Read More <i class="bi bi-arrow-right" s:amb--5eaf9b4f-0></i> </a></div><div class="bg-neutral-01 p-8 rounded-md" s:amb--5eaf9b4f-0><i class="bi bi-lightning-fill text-4xl icon" s:amb--5eaf9b4f-0></i><h3 class="text-xl heading font-bold pt-4" s:amb--5eaf9b4f-0>Fast</h3><p class="hint pb-3" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><a class="link font-semibold underline cursor-pointer" s:amb--5eaf9b4f-0>Read More <i class="bi bi-arrow-right" s:amb--5eaf9b4f-0></i> </a></div></div></section><section class="flex flex-col md:flex-row p-16 py-12 gap-12 items-center" s:amb--5eaf9b4f-0><div class="flex flex-col" s:amb--5eaf9b4f-0><h2 class="text-4xl heading font-bold pb-2" s:amb--5eaf9b4f-0>About our team</h2><p class="paragraph pb-8" s:amb--5eaf9b4f-0>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut <b class="bold" s:amb--5eaf9b4f-0>aliquip ex ea commodo consequat.</b>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></div><img class="flex rounded-md w-full md:w-2/5 h-auto object-cover" src="https://images.unsplash.com/photo-1546407341-a6b1cff53f9e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=4170&q=80" s:amb--5eaf9b4f-0></section><section s:amb--5eaf9b4f-0></section></div>`),Tv="amb--5eaf9b4f-0",Lv=".link[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-1)}.link[s\\:amb--5eaf9b4f-0]:hover{color:var(--s-amb--5eaf9b4f-2)}.link-border[s\\:amb--5eaf9b4f-0]{border-color:var(--s-amb--5eaf9b4f-3)}.border-color[s\\:amb--5eaf9b4f-0]{border-color:var(--s-amb--5eaf9b4f-4)}.heading[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-5)}.heading-special[s\\:amb--5eaf9b4f-0]{background:-webkit-linear-gradient(var(--s-amb--5eaf9b4f-6),var(--s-amb--5eaf9b4f-7));-webkit-background-clip:text;-webkit-text-fill-color:transparent}.over[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-8)}.icon[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-9)}.neutral-01[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-10)}.neutral-02[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-11)}.neutral-03[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-12)}.color-01[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-13)}.color-02[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-14)}.color-03[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-15)}.color-04[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-16)}.color-05[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-17)}.color-06[s\\:amb--5eaf9b4f-0]{fill:var(--s-amb--5eaf9b4f-18)}.bg-neutral-00[s\\:amb--5eaf9b4f-0]{background:var(--s-amb--5eaf9b4f-19)}.bg-neutral-01[s\\:amb--5eaf9b4f-0]{background:var(--s-amb--5eaf9b4f-20)}.paragraph[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-21)}.bold[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-22);font-weight:500}.hint[s\\:amb--5eaf9b4f-0]{color:var(--s-amb--5eaf9b4f-23)}.code[s\\:amb--5eaf9b4f-0]{background-color:var(--s-amb--5eaf9b4f-24);border:1px solid var(--s-amb--5eaf9b4f-25);border-top:1px solid var(--s-amb--5eaf9b4f-26);color:var(--s-amb--5eaf9b4f-27)}",Pv=()=>{const e=dt(),t=()=>Kt(he()),n=()=>ce()[1],l=()=>t()[n()],o=()=>t()[0],i=()=>o()[9],c=()=>o()[7],f=()=>o()[8],h=()=>o()[5],p=()=>l()[7],y=()=>o()[0],S=()=>o()[1],T=()=>o()[2],j=()=>o()[8];return et(()=>{}),ut(Tv,1,Lv),e(()=>({"--s-amb--5eaf9b4f-1":p(),"--s-amb--5eaf9b4f-2":l()[8],"--s-amb--5eaf9b4f-3":p(),"--s-amb--5eaf9b4f-4":S(),"--s-amb--5eaf9b4f-5":i(),"--s-amb--5eaf9b4f-6":l()[6],"--s-amb--5eaf9b4f-7":l()[5],"--s-amb--5eaf9b4f-8":l()[6],"--s-amb--5eaf9b4f-9":l()[5],"--s-amb--5eaf9b4f-10":o()[1],"--s-amb--5eaf9b4f-11":o()[2],"--s-amb--5eaf9b4f-12":o()[3],"--s-amb--5eaf9b4f-13":l()[1],"--s-amb--5eaf9b4f-14":l()[2],"--s-amb--5eaf9b4f-15":l()[3],"--s-amb--5eaf9b4f-16":l()[4],"--s-amb--5eaf9b4f-17":l()[5],"--s-amb--5eaf9b4f-18":l()[6],"--s-amb--5eaf9b4f-19":o()[0],"--s-amb--5eaf9b4f-20":o()[1],"--s-amb--5eaf9b4f-21":c(),"--s-amb--5eaf9b4f-22":f(),"--s-amb--5eaf9b4f-23":h(),"--s-amb--5eaf9b4f-24":y(),"--s-amb--5eaf9b4f-25":S(),"--s-amb--5eaf9b4f-26":T(),"--s-amb--5eaf9b4f-27":j()})),(()=>{const D=Nv.cloneNode(!0),k=D.firstChild,q=k.firstChild,F=q.firstChild,ee=F.firstChild,oe=ee.firstChild,Q=oe.nextSibling,se=Q.nextSibling,I=se.nextSibling,we=I.nextSibling,te=we.nextSibling,R=te.nextSibling,B=R.nextSibling,H=F.nextSibling,$e=q.nextSibling,Ie=k.nextSibling,Ae=Ie.firstChild,Ee=Ae.firstChild,Fe=Ee.firstChild,je=Fe.nextSibling,De=Ee.nextSibling,Zn=De.firstChild,Xn=Zn.nextSibling,xt=De.nextSibling,Nr=xt.nextSibling,Kn=Nr.firstChild,wt=Ae.nextSibling,Tr=wt.firstChild,Lr=Tr.firstChild,Pr=Lr.firstChild,Or=Pr.nextSibling,Yt=Or.nextSibling,Mr=Yt.nextSibling,Fr=Mr.nextSibling,Dr=Fr.nextSibling,Rr=Dr.nextSibling,Jt=Rr.nextSibling,Qt=Ie.nextSibling,Ir=Qt.firstChild,jr=Ir.nextSibling,vt=jr.nextSibling,Yn=vt.firstChild,Br=Yn.nextSibling,er=vt.nextSibling,kt=er.firstChild,tr=kt.firstChild,rr=tr.nextSibling,nr=rr.nextSibling,ar=nr.nextSibling,zr=ar.firstChild,Ur=zr.nextSibling,Ct=kt.nextSibling,lr=Ct.firstChild,Gr=lr.nextSibling,qr=Gr.nextSibling,or=qr.nextSibling,Hr=or.firstChild,Jn=Hr.nextSibling,Wr=Ct.nextSibling,sr=Wr.firstChild,ir=sr.nextSibling,Vr=ir.nextSibling,Zr=Vr.nextSibling,Qn=Zr.firstChild,ea=Qn.nextSibling,cr=Qt.nextSibling,At=cr.firstChild,Xr=At.firstChild,Kr=Xr.nextSibling,ta=Kr.firstChild,ra=ta.nextSibling,na=At.nextSibling,aa=cr.nextSibling;return C($e,_(An,{type:"default",children:"Sign in"})),C(xt,_(An,{type:"primary",children:"Get started"}),null),C(xt,_(An,{type:"secondary",children:"Why choose Flex?"}),null),C(At,_(An,{type:"default",get children(){return["Read our blog post ",(()=>{const $=Ev.cloneNode(!0);return U(St=>w($,e(),St)),$})()]}}),null),U($=>{const St=e(),Yr=e(),la=e(),oa=e(),sa=e(),Et=e(),ia=e(),Jr=e(),ca=e(),fa=e(),ua=e(),Qr=e(),da=e(),en=e(),va=e(),tn=e(),ba=e(),ha=e(),rn=e(),ga=e(),ma=e(),pa=e(),$a=e(),_a=e(),ya=e(),fr=e(),nt=e(),ur=e(),at=e(),xa=e(),wa=e(),ka=e(),Ca=e(),Aa=e(),nn=e(),an=e(),Sa=e(),Ea=e(),Na=e(),Ta=e(),ln=e(),on=e(),La=e(),Pa=e(),Oa=e(),Ma=e(),Fa=e(),Da=e(),Ra=e(),Ia=e(),ja=e(),Ba=e(),za=e(),Ua=e(),Ga=e(),sn=e(),cn=e(),qa=e(),Nt=e(),lt=e(),Ha=e(),fn=e(),Wa=e(),dr=e(),vr=e(),Va=e();return $._v$=w(D,St,$._v$),$._v$2=w(k,Yr,$._v$2),$._v$3=w(q,la,$._v$3),$._v$4=w(F,oa,$._v$4),$._v$5=w(ee,sa,$._v$5),$._v$6=w(oe,Et,$._v$6),$._v$7=w(Q,ia,$._v$7),$._v$8=w(se,Jr,$._v$8),$._v$9=w(I,ca,$._v$9),$._v$10=w(we,fa,$._v$10),$._v$11=w(te,ua,$._v$11),$._v$12=w(R,Qr,$._v$12),$._v$13=w(B,da,$._v$13),$._v$14=w(H,en,$._v$14),$._v$15=w($e,va,$._v$15),$._v$16=w(Ie,tn,$._v$16),$._v$17=w(Ae,ba,$._v$17),$._v$18=w(Ee,ha,$._v$18),$._v$19=w(je,rn,$._v$19),$._v$20=w(De,ga,$._v$20),$._v$21=w(Xn,ma,$._v$21),$._v$22=w(xt,pa,$._v$22),$._v$23=w(Nr,$a,$._v$23),$._v$24=w(Kn,_a,$._v$24),$._v$25=w(wt,ya,$._v$25),$._v$26=w(Tr,fr,$._v$26),$._v$27=w(Lr,nt,$._v$27),$._v$28=w(Pr,ur,$._v$28),$._v$29=w(Or,at,$._v$29),$._v$30=w(Yt,xa,$._v$30),$._v$31=w(Mr,wa,$._v$31),$._v$32=w(Fr,ka,$._v$32),$._v$33=w(Dr,Ca,$._v$33),$._v$34=w(Rr,Aa,$._v$34),$._v$35=w(Jt,nn,$._v$35),$._v$36=w(Qt,an,$._v$36),$._v$37=w(Ir,Sa,$._v$37),$._v$38=w(jr,Ea,$._v$38),$._v$39=w(vt,Na,$._v$39),$._v$40=w(Br,Ta,$._v$40),$._v$41=w(er,ln,$._v$41),$._v$42=w(kt,on,$._v$42),$._v$43=w(tr,La,$._v$43),$._v$44=w(rr,Pa,$._v$44),$._v$45=w(nr,Oa,$._v$45),$._v$46=w(ar,Ma,$._v$46),$._v$47=w(Ur,Fa,$._v$47),$._v$48=w(Ct,Da,$._v$48),$._v$49=w(lr,Ra,$._v$49),$._v$50=w(Gr,Ia,$._v$50),$._v$51=w(qr,ja,$._v$51),$._v$52=w(or,Ba,$._v$52),$._v$53=w(Jn,za,$._v$53),$._v$54=w(Wr,Ua,$._v$54),$._v$55=w(sr,Ga,$._v$55),$._v$56=w(ir,sn,$._v$56),$._v$57=w(Vr,cn,$._v$57),$._v$58=w(Zr,qa,$._v$58),$._v$59=w(ea,Nt,$._v$59),$._v$60=w(cr,lt,$._v$60),$._v$61=w(At,Ha,$._v$61),$._v$62=w(Xr,fn,$._v$62),$._v$63=w(Kr,Wa,$._v$63),$._v$64=w(ra,dr,$._v$64),$._v$65=w(na,vr,$._v$65),$._v$66=w(aa,Va,$._v$66),$},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0,_v$11:void 0,_v$12:void 0,_v$13:void 0,_v$14:void 0,_v$15:void 0,_v$16:void 0,_v$17:void 0,_v$18:void 0,_v$19:void 0,_v$20:void 0,_v$21:void 0,_v$22:void 0,_v$23:void 0,_v$24:void 0,_v$25:void 0,_v$26:void 0,_v$27:void 0,_v$28:void 0,_v$29:void 0,_v$30:void 0,_v$31:void 0,_v$32:void 0,_v$33:void 0,_v$34:void 0,_v$35:void 0,_v$36:void 0,_v$37:void 0,_v$38:void 0,_v$39:void 0,_v$40:void 0,_v$41:void 0,_v$42:void 0,_v$43:void 0,_v$44:void 0,_v$45:void 0,_v$46:void 0,_v$47:void 0,_v$48:void 0,_v$49:void 0,_v$50:void 0,_v$51:void 0,_v$52:void 0,_v$53:void 0,_v$54:void 0,_v$55:void 0,_v$56:void 0,_v$57:void 0,_v$58:void 0,_v$59:void 0,_v$60:void 0,_v$61:void 0,_v$62:void 0,_v$63:void 0,_v$64:void 0,_v$65:void 0,_v$66:void 0}),D})()},Ov=P('<div class="flex flex-col justify-center px-4 sm:px-6"><div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"><h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light">Pages</h6><h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200">Landing Page</h1></div></div>'),Mv=()=>(()=>{const e=Ov.cloneNode(!0);return e.firstChild,C(e,_(Ol,{get swatch(){return he()},get swatchArr(){return Kt(he())},trackIndex:"id",disableText:!0}),null),C(e,_(Ys,{get children(){return _(Pv,{})}}),null),e})(),Fv=Un(()=>Vn(()=>import("./playgroundPage.65440987.js"),[])),Dv=Un(()=>Vn(()=>import("./buttonPlaygroundPage.b28485cc.js"),[])),Rv=Un(()=>Vn(()=>import("./introPlaygroundPage.da64518d.js"),[])),Iv=Un(()=>Vn(()=>import("./documentationSamplePage.e78368eb.js"),[])),jv=()=>_(Ve,{path:"/playground",component:Fv,get children(){return[_(Ve,{path:"/intro",component:Rv}),_(Ve,{path:"/buttons",component:Dv}),_(Ve,{path:"/texts",component:xv}),_(Ve,{path:"/documentation",component:Iv}),_(Ve,{path:"/landing",component:Mv}),_(Ve,{path:"/test",component:qd})]}}),Bv=P('<div class="flex flex-col z-50 min-h-screen justify-between bg-white dark:bg-[#181819]"><main role="main" class="my-auto lg:px-4"><div class="h-14"></div><div class="h-20"></div></main></div>'),zv=()=>(Fl(()=>{let e=` + \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 + \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 + \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 + \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 + \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 `;e+=` Using Ambient at work? Work with me on your next project! https://kevintyj.com diff --git a/dist/assets/playgroundPage.65440987.js b/dist/assets/playgroundPage.65440987.js index 1a9a81c..5bc3b7a 100644 --- a/dist/assets/playgroundPage.65440987.js +++ b/dist/assets/playgroundPage.65440987.js @@ -1,6 +1,6 @@ import{i as n,c as l,S as L,F as W,t as o,A as S,u as q,P as Y,a as P,M as Z,b as c,s as t,B as O,O as ee,D as ae,d as B,e as te}from"./index.15e05be8.js";const re=o('<div class="flex flex-col"></div>'),le=o(`<div class="h-7 border-l border-neutral-200 dark:border-neutral-800 text-slate-500 dark:text-neutral-400 hover:text-slate-600 hover:dark:text-neutral-400 - transition-all"></div>`),ne=o('<h3 class="font-semibold font-display text-slate-800 dark:text-slate-200 pb-3.5 pt-5"></h3>'),se=a=>l(S,{get href(){return a.link},class:"pl-3 py-1",get classList(){return{"-ml-px text-am-pink dark:text-am-pink-light font-semibold border-l-2 border-am-pink dark:border-am-pink-light":a.selected}},get children(){return a.children}}),D=a=>{const x=()=>q().pathname;return(()=>{const v=re.cloneNode(!0);return n(v,l(W,{get each(){return Object.entries(a.list)},children:([d,g])=>l(L,{when:g&&g!="",get fallback(){return(()=>{const b=ne.cloneNode(!0);return n(b,d),b})()},get children(){const b=le.cloneNode(!0);return n(b,l(se,{get selected(){return g==x()},link:g,children:d})),b}})})),v})()},de=o('<i class="bi bi-list" s:amb--a6aa559c-0></i>'),ie=o(`<div class="hidden h-screen w-screen fixed top-0 left-0 + transition-all"></div>`),ne=o('<h3 class="font-semibold font-display text-slate-800 dark:text-slate-200 pb-3.5 pt-5"></h3>'),se=a=>l(S,{get href(){return a.link},class:"pl-3 py-1",get classList(){return{"-ml-px text-am-pink dark:text-am-pink-light font-semibold border-l-2 border-am-pink dark:border-am-pink-light":a.selected}},get children(){return a.children}}),D=a=>{const x=()=>q().pathname;return(()=>{const v=re.cloneNode(!0);return n(v,l(W,{get each(){return Object.entries(a.list)},children:([d,g])=>l(L,{when:g&&g!=="",get fallback(){return(()=>{const b=ne.cloneNode(!0);return n(b,d),b})()},get children(){const b=le.cloneNode(!0);return n(b,l(se,{get selected(){return g==x()},link:g,children:d})),b}})})),v})()},de=o('<i class="bi bi-list" s:amb--a6aa559c-0></i>'),ie=o(`<div class="hidden h-screen w-screen fixed top-0 left-0 backdrop-blur-sm z-[100] bg-neutral-50 dark:bg-[#181819] bg-opacity-60 dark:bg-opacity-70 cursor-pointer" s:amb--a6aa559c-0><div class="left-0 h-screen border-r p-4 py-3 sm:px-6 flex flex-col backdrop-blur-md bg-neutral-50 dark:bg-[#181819] @@ -21,4 +21,4 @@ import{i as n,c as l,S as L,F as W,t as o,A as S,u as q,P as Y,a as P,M as Z,b a h-[calc(100vh-56px)] hover:lg:shadow-none hover:lg:dark:shadow-none" s:amb--a6aa559c-0><a class=" hidden md:block lg:hidden absolute left-60 top-8 bg-white dark:bg-neutral-900 z-50 md:z-[60] rounded-md - drop-shadow-[0_0_8px_rgba(0,0,0,0.14)]" s:amb--a6aa559c-0></a><div class="p-6 pl-4 sm:pl-6 lg:pl-4 pt-2" s:amb--a6aa559c-0></div><div class="h-28" s:amb--a6aa559c-0></div></div></div><div class="flex flex-col overflow-x-hidden pt-16 md:pt-8 lg:-mr-4 pb-12" s:amb--a6aa559c-0><div class="flex flex-col justify-center px-4 sm:px-6 pt-12" s:amb--a6aa559c-0><div class="flex flex-col w-full max-w-screen-2xl gap-y-1" s:amb--a6aa559c-0><div class="flex justify-between w-full text-slate-600 dark:text-neutral-400" s:amb--a6aa559c-0><div s:amb--a6aa559c-0></div></div></div></div></div></div></div>`),me="amb--a6aa559c-0",_e=".menuBG[s\\:amb--a6aa559c-0]{display:flex}.menuShown[s\\:amb--a6aa559c-0]{transform:translateX(0)!important}",$e=()=>{const a=Y(),[x,v]=P(!1),[d,g]=P({Components:"",Introduction:"/playground/intro",Buttons:"/playground/buttons",Texts:"/playground/texts",Pages:"",Documentation:"/playground/documentation",Landing:"/playground/landing"}),b=()=>q().pathname,$=()=>Object.entries(d()).findIndex(i=>i[1]==b()),w=()=>Object.values(d())[$()-1]?Object.values(d())[$()-1]:"",y=()=>Object.values(d())[$()+1]?Object.values(d())[$()+1]:"";return Z(me,1,_e),[(()=>{const i=ie.cloneNode(!0),m=i.firstChild,_=m.firstChild;return i.$$click=()=>v(!1),_.$$click=()=>v(!1),n(_,l(O,{aria:"Open Mobile Menu",get children(){const r=de.cloneNode(!0);return c(u=>t(r,a(),u)),r}})),n(m,l(D,{get list(){return d()}}),null),c(r=>{const u=!!x(),p=a(),f=!!x(),h=a(),j=a();return u!==r._v$&&i.classList.toggle("menuBG",r._v$=u),r._v$2=t(i,p,r._v$2),f!==r._v$3&&m.classList.toggle("menuShown",r._v$3=f),r._v$4=t(m,h,r._v$4),r._v$5=t(_,j,r._v$5),r},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0}),i})(),(()=>{const i=be.cloneNode(!0),m=i.firstChild,_=m.firstChild,r=_.firstChild,u=r.firstChild,p=r.nextSibling,f=p.firstChild,h=f.nextSibling,j=h.nextSibling,C=_.nextSibling,M=C.firstChild,N=M.firstChild,k=N.firstChild,z=k.firstChild;return u.$$click=()=>v(!0),n(u,l(O,{aria:"Open Mobile Menu",square:!0,get children(){const e=oe.cloneNode(!0);return c(s=>t(e,a(),s)),e}})),f.$$click=()=>v(!0),n(f,l(O,{aria:"Toggle Mobile Navigation List",square:!0,get children(){const e=ce.cloneNode(!0);return c(s=>t(e,a(),s)),e}})),n(h,l(D,{get list(){return d()}})),n(C,l(ee,{}),M),n(N,l(ae,{}),k),n(z,l(L,{get when(){return w()!=""},get children(){return l(S,{get href(){return B(()=>!!w(),!0)()?w():"#"},get children(){return[(()=>{const e=ue.cloneNode(!0);return c(s=>t(e,a(),s)),e})(),(()=>{const e=I.cloneNode(!0);return n(e,()=>Object.keys(d())[$()-1]),c(s=>t(e,a(),s)),e})()]}})}})),n(k,l(L,{get when(){return y()!=""},get children(){return l(S,{get href(){return B(()=>!!y(),!0)()?y():"#"},get children(){return[(()=>{const e=I.cloneNode(!0);return n(e,()=>Object.keys(d())[$()+1]),c(s=>t(e,a(),s)),e})(),(()=>{const e=ve.cloneNode(!0);return c(s=>t(e,a(),s)),e})()]}})}}),null),c(e=>{const s=a(),E=a(),F=a(),G=a(),T=a(),A=a(),R=a(),X=a(),H=a(),J=a(),K=a(),Q=a(),U=a(),V=a();return e._v$6=t(i,s,e._v$6),e._v$7=t(m,E,e._v$7),e._v$8=t(_,F,e._v$8),e._v$9=t(r,G,e._v$9),e._v$10=t(u,T,e._v$10),e._v$11=t(p,A,e._v$11),e._v$12=t(f,R,e._v$12),e._v$13=t(h,X,e._v$13),e._v$14=t(j,H,e._v$14),e._v$15=t(C,J,e._v$15),e._v$16=t(M,K,e._v$16),e._v$17=t(N,Q,e._v$17),e._v$18=t(k,U,e._v$18),e._v$19=t(z,V,e._v$19),e},{_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0,_v$11:void 0,_v$12:void 0,_v$13:void 0,_v$14:void 0,_v$15:void 0,_v$16:void 0,_v$17:void 0,_v$18:void 0,_v$19:void 0}),i})()]};te(["click"]);export{$e as default}; + drop-shadow-[0_0_8px_rgba(0,0,0,0.14)]" s:amb--a6aa559c-0></a><div class="p-6 pl-4 sm:pl-6 lg:pl-4 pt-2" s:amb--a6aa559c-0></div><div class="h-28" s:amb--a6aa559c-0></div></div></div><div class="flex flex-col overflow-x-hidden pt-16 md:pt-8 lg:-mr-4 pb-12" s:amb--a6aa559c-0><div class="flex flex-col justify-center px-4 sm:px-6 pt-12" s:amb--a6aa559c-0><div class="flex flex-col w-full max-w-screen-2xl gap-y-1" s:amb--a6aa559c-0><div class="flex justify-between w-full text-slate-600 dark:text-neutral-400" s:amb--a6aa559c-0><div s:amb--a6aa559c-0></div></div></div></div></div></div></div>`),me="amb--a6aa559c-0",_e=".menuBG[s\\:amb--a6aa559c-0]{display:flex}.menuShown[s\\:amb--a6aa559c-0]{transform:translateX(0)!important}",$e=()=>{const a=Y(),[x,v]=P(!1),[d,g]=P({Components:"",Introduction:"/playground/intro",Buttons:"/playground/buttons",Texts:"/playground/texts",Pages:"",Documentation:"/playground/documentation",Landing:"/playground/landing"}),b=()=>q().pathname,$=()=>Object.entries(d()).findIndex(i=>i[1]==b()),w=()=>Object.values(d())[$()-1]?Object.values(d())[$()-1]:"",y=()=>Object.values(d())[$()+1]?Object.values(d())[$()+1]:"";return Z(me,1,_e),[(()=>{const i=ie.cloneNode(!0),m=i.firstChild,_=m.firstChild;return i.$$click=()=>v(!1),_.$$click=()=>v(!1),n(_,l(O,{aria:"Open Mobile Menu",get children(){const r=de.cloneNode(!0);return c(u=>t(r,a(),u)),r}})),n(m,l(D,{get list(){return d()}}),null),c(r=>{const u=!!x(),p=a(),f=!!x(),h=a(),j=a();return u!==r._v$&&i.classList.toggle("menuBG",r._v$=u),r._v$2=t(i,p,r._v$2),f!==r._v$3&&m.classList.toggle("menuShown",r._v$3=f),r._v$4=t(m,h,r._v$4),r._v$5=t(_,j,r._v$5),r},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0}),i})(),(()=>{const i=be.cloneNode(!0),m=i.firstChild,_=m.firstChild,r=_.firstChild,u=r.firstChild,p=r.nextSibling,f=p.firstChild,h=f.nextSibling,j=h.nextSibling,C=_.nextSibling,M=C.firstChild,N=M.firstChild,k=N.firstChild,z=k.firstChild;return u.$$click=()=>v(!0),n(u,l(O,{aria:"Open Mobile Menu",square:!0,get children(){const e=oe.cloneNode(!0);return c(s=>t(e,a(),s)),e}})),f.$$click=()=>v(!0),n(f,l(O,{aria:"Toggle Mobile Navigation List",square:!0,get children(){const e=ce.cloneNode(!0);return c(s=>t(e,a(),s)),e}})),n(h,l(D,{get list(){return d()}})),n(C,l(ee,{}),M),n(N,l(ae,{}),k),n(z,l(L,{get when(){return w()!==""},get children(){return l(S,{get href(){return B(()=>!!w(),!0)()?w():"#"},get children(){return[(()=>{const e=ue.cloneNode(!0);return c(s=>t(e,a(),s)),e})(),(()=>{const e=I.cloneNode(!0);return n(e,()=>Object.keys(d())[$()-1]),c(s=>t(e,a(),s)),e})()]}})}})),n(k,l(L,{get when(){return y()!==""},get children(){return l(S,{get href(){return B(()=>!!y(),!0)()?y():"#"},get children(){return[(()=>{const e=I.cloneNode(!0);return n(e,()=>Object.keys(d())[$()+1]),c(s=>t(e,a(),s)),e})(),(()=>{const e=ve.cloneNode(!0);return c(s=>t(e,a(),s)),e})()]}})}}),null),c(e=>{const s=a(),E=a(),F=a(),G=a(),T=a(),A=a(),R=a(),X=a(),H=a(),J=a(),K=a(),Q=a(),U=a(),V=a();return e._v$6=t(i,s,e._v$6),e._v$7=t(m,E,e._v$7),e._v$8=t(_,F,e._v$8),e._v$9=t(r,G,e._v$9),e._v$10=t(u,T,e._v$10),e._v$11=t(p,A,e._v$11),e._v$12=t(f,R,e._v$12),e._v$13=t(h,X,e._v$13),e._v$14=t(j,H,e._v$14),e._v$15=t(C,J,e._v$15),e._v$16=t(M,K,e._v$16),e._v$17=t(N,Q,e._v$17),e._v$18=t(k,U,e._v$18),e._v$19=t(z,V,e._v$19),e},{_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0,_v$11:void 0,_v$12:void 0,_v$13:void 0,_v$14:void 0,_v$15:void 0,_v$16:void 0,_v$17:void 0,_v$18:void 0,_v$19:void 0}),i})()]};te(["click"]);export{$e as default}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..174114c --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,40 @@ +import antfu from '@antfu/eslint-config'; + +/* Using custom configuration of Antfu's code style: https://github.com/antfu/eslint-config */ +export default await antfu( + { + typescript: true, + stylistic: { + quotes: 'single', + indent: 'tab', + semi: 'always', + }, + ignores: [ + '**/dist', + '.idea', + // disable eslint for vendor utils + 'src/functions/apca.ts', + 'src/functions/parsley.js', + ], + overrides: { + typescript: { + 'ts/consistent-type-definitions': ['error', 'type'], + }, + }, + }, + { + rules: { + 'style/no-tabs': ['error', { allowIndentationTabs: true }], + 'style/no-mixed-spaces-and-tabs': ['error', 'smart-tabs'], + 'style/array-bracket-newline': ['error', { multiline: true }], + 'style/array-element-newline': ['error', 'consistent'], + 'antfu/top-level-function': 'off', + }, + }, + { + files: ['tsconfig.json', 'tsconfig.node.json', 'package.json'], + rules: { + 'jsonc/sort-keys': 'off', + }, + }, +); diff --git a/firebase.json b/firebase.json index 2c33c29..69da1ba 100644 --- a/firebase.json +++ b/firebase.json @@ -1,16 +1,16 @@ { - "hosting": { - "public": "dist", - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ], - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ] - } + "hosting": { + "public": "dist", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } } diff --git a/package.json b/package.json index 5ab8211..0fed968 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,57 @@ { - "name": "ambient", - "version": "1.0.0", - "description": "Color Checker Tool", - "scripts": { - "start": "vite", - "dev": "vite --debug", - "build": "vite build", - "serve": "vite preview" - }, - "license": "MIT", - "devDependencies": { - "@tailwindcss/typography": "^0.5.8", - "autoprefixer": "^10.4.13", - "postcss": "^8.4.19", - "sass": "^1.56.2", - "tailwindcss": "^3.2.4", - "typescript": "^4.8.2", - "vite": "^3.0.9", - "vite-plugin-solid": "^2.3.0", - "vite-plugin-solid-styled": "^0.7.4" - }, - "dependencies": { - "@felte/solid": "^1.2.7", - "@solidjs/router": "^0.5.1", - "@types/chroma-js": "^2.1.4", - "bootstrap-icons": "^1.10.2", - "chroma-js": "^2.4.2", - "lodash": "^4.17.21", - "solid-js": "^1.6.4", - "solid-styled": "^0.7.4", - "solid-toast": "^0.3.5" - } + "name": "ambient", + "version": "1.0.0", + "type": "module", + "description": "Color Checker Tool", + "author": "Kevin Taeyoon Jin <hello@kevintyj.com>", + "license": "BSD-3-Clause", + "homepage": "https://github.com/kevintyj/ambient#readme", + "repository": "github:kevintyj/ambient", + "bugs": { + "url": "https://github.com/kevintyj/ambient/issues" + }, + "keywords": [ + "ui", + "ambient", + "accessibility" + ], + "scripts": { + "prepare": "husky install", + "start": "vite", + "dev": "vite --debug", + "build": "vite build", + "serve": "vite preview", + "lint:es": "eslint .", + "ci": "pnpm run lint:es && pnpm run build" + }, + "devDependencies": { + "@antfu/eslint-config": "^2.1.2", + "@commitlint/cli": "^18.4.3", + "@commitlint/config-conventional": "^18.4.3", + "@tailwindcss/typography": "^0.5.10", + "autoprefixer": "^10.4.16", + "eslint": "^8.54.0", + "husky": "^8.0.3", + "postcss": "^8.4.31", + "sass": "^1.69.5", + "tailwindcss": "^3.3.5", + "typescript": "^5.3.2", + "vite": "^5.0.4", + "vite-plugin-solid": "^2.7.2", + "vite-plugin-solid-styled": "^0.10.0" + }, + "dependencies": { + "@felte/solid": "^1.2.11", + "@solidjs/router": "^0.9.1", + "@types/chroma-js": "^2.4.3", + "bootstrap-icons": "^1.11.2", + "chroma-js": "^2.4.2", + "lodash": "^4.17.21", + "solid-js": "^1.8.6", + "solid-styled": "^0.10.0", + "solid-toast": "^0.5.0" + }, + "lint-staged": { + "*": "eslint --fix" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 453d9b2..2356e73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,17 +6,17 @@ settings: dependencies: '@felte/solid': - specifier: ^1.2.7 - version: 1.2.7(solid-js@1.6.4) + specifier: ^1.2.11 + version: 1.2.11(solid-js@1.8.6) '@solidjs/router': - specifier: ^0.5.1 - version: 0.5.1(solid-js@1.6.4) + specifier: ^0.9.1 + version: 0.9.1(solid-js@1.8.6) '@types/chroma-js': - specifier: ^2.1.4 - version: 2.1.4 + specifier: ^2.4.3 + version: 2.4.3 bootstrap-icons: - specifier: ^1.10.2 - version: 1.10.2 + specifier: ^1.11.2 + version: 1.11.2 chroma-js: specifier: ^2.4.2 version: 2.4.2 @@ -24,908 +24,663 @@ dependencies: specifier: ^4.17.21 version: 4.17.21 solid-js: - specifier: ^1.6.4 - version: 1.6.4 + specifier: ^1.8.6 + version: 1.8.6 solid-styled: - specifier: ^0.7.4 - version: 0.7.4(@babel/core@7.20.5)(solid-js@1.6.4) + specifier: ^0.10.0 + version: 0.10.0(solid-js@1.8.6) solid-toast: - specifier: ^0.3.5 - version: 0.3.5(solid-js@1.6.4) + specifier: ^0.5.0 + version: 0.5.0(solid-js@1.8.6) devDependencies: + '@antfu/eslint-config': + specifier: ^2.1.2 + version: 2.1.2(eslint@8.54.0)(typescript@5.3.2) + '@commitlint/cli': + specifier: ^18.4.3 + version: 18.4.3(typescript@5.3.2) + '@commitlint/config-conventional': + specifier: ^18.4.3 + version: 18.4.3 '@tailwindcss/typography': - specifier: ^0.5.8 - version: 0.5.8(tailwindcss@3.2.4) + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.3.5) autoprefixer: - specifier: ^10.4.13 - version: 10.4.13(postcss@8.4.19) + specifier: ^10.4.16 + version: 10.4.16(postcss@8.4.31) + eslint: + specifier: ^8.54.0 + version: 8.54.0 + husky: + specifier: ^8.0.3 + version: 8.0.3 postcss: - specifier: ^8.4.19 - version: 8.4.19 + specifier: ^8.4.31 + version: 8.4.31 sass: - specifier: ^1.56.2 - version: 1.56.2 + specifier: ^1.69.5 + version: 1.69.5 tailwindcss: - specifier: ^3.2.4 - version: 3.2.4(postcss@8.4.19) + specifier: ^3.3.5 + version: 3.3.5 typescript: - specifier: ^4.8.2 - version: 4.8.2 + specifier: ^5.3.2 + version: 5.3.2 vite: - specifier: ^3.0.9 - version: 3.0.9(sass@1.56.2) + specifier: ^5.0.4 + version: 5.0.4(@types/node@18.19.0)(sass@1.69.5) vite-plugin-solid: - specifier: ^2.3.0 - version: 2.3.0(solid-js@1.6.4)(vite@3.0.9) + specifier: ^2.7.2 + version: 2.7.2(solid-js@1.8.6)(vite@5.0.4) vite-plugin-solid-styled: - specifier: ^0.7.4 - version: 0.7.4(solid-styled@0.7.4)(vite@3.0.9) + specifier: ^0.10.0 + version: 0.10.0(solid-styled@0.10.0)(vite@5.0.4) packages: - /@ampproject/remapping@2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.14 - - /@babel/code-frame@7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.18.6 - - /@babel/compat-data@7.18.8: - resolution: {integrity: sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==} - engines: {node: '>=6.9.0'} + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} dev: true - /@babel/compat-data@7.20.5: - resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} - engines: {node: '>=6.9.0'} + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true - /@babel/core@7.18.6: - resolution: {integrity: sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==} - engines: {node: '>=6.9.0'} + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.7 - '@babel/helper-compilation-targets': 7.18.6(@babel/core@7.18.6) - '@babel/helper-module-transforms': 7.18.8 - '@babel/helpers': 7.18.6 - '@babel/parser': 7.18.8 - '@babel/template': 7.18.6 - '@babel/traverse': 7.18.8 - '@babel/types': 7.18.8 - convert-source-map: 1.8.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.1 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 - /@babel/core@7.20.5: - resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==} - engines: {node: '>=6.9.0'} + /@antfu/eslint-config@2.1.2(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-eOkXtRcj3pAqkdbqNYEBUgFKTcDYYwAAAnGEs+DTTcJJJReIlrPx4WJIE02whOsi+5oKcJ7EK/swS6PcdcCIog==} + hasBin: true + peerDependencies: + '@unocss/eslint-plugin': '>=0.50.0' + eslint: '>=8.40.0' + eslint-plugin-react: ^7.33.2 + eslint-plugin-react-hooks: ^4.6.0 + eslint-plugin-react-refresh: ^0.4.4 + peerDependenciesMeta: + '@unocss/eslint-plugin': + optional: true + eslint-plugin-react: + optional: true + eslint-plugin-react-hooks: + optional: true + eslint-plugin-react-refresh: + optional: true dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.5 - '@babel/helper-compilation-targets': 7.20.0(@babel/core@7.20.5) - '@babel/helper-module-transforms': 7.20.2 - '@babel/helpers': 7.20.6 - '@babel/parser': 7.20.5 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.5 - '@babel/types': 7.20.5 - convert-source-map: 1.8.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.1 - semver: 6.3.0 + '@antfu/eslint-define-config': 1.23.0-2 + '@antfu/install-pkg': 0.3.0 + '@eslint-types/jsdoc': 46.8.2-1 + '@eslint-types/typescript-eslint': 6.12.0 + '@eslint-types/unicorn': 49.0.0 + '@stylistic/eslint-plugin': 1.4.1(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/eslint-plugin': 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 + eslint-config-flat-gitignore: 0.1.2 + eslint-plugin-antfu: 1.0.11(eslint@8.54.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.54.0) + eslint-plugin-i: 2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.54.0) + eslint-plugin-jsdoc: 46.9.0(eslint@8.54.0) + eslint-plugin-jsonc: 2.10.0(eslint@8.54.0) + eslint-plugin-markdown: 3.0.1(eslint@8.54.0) + eslint-plugin-n: 16.3.1(eslint@8.54.0) + eslint-plugin-no-only-tests: 3.1.0 + eslint-plugin-perfectionist: 2.5.0(eslint@8.54.0)(typescript@5.3.2)(vue-eslint-parser@9.3.2) + eslint-plugin-unicorn: 49.0.0(eslint@8.54.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.13.1)(eslint@8.54.0) + eslint-plugin-vitest: 0.3.10(@typescript-eslint/eslint-plugin@6.13.1)(eslint@8.54.0)(typescript@5.3.2) + eslint-plugin-vue: 9.19.2(eslint@8.54.0) + eslint-plugin-yml: 1.10.0(eslint@8.54.0) + globals: 13.23.0 + jsonc-eslint-parser: 2.4.0 + local-pkg: 0.5.0 + parse-gitignore: 2.0.0 + picocolors: 1.0.0 + prompts: 2.4.2 + vue-eslint-parser: 9.3.2(eslint@8.54.0) + yaml-eslint-parser: 1.2.2 + yargs: 17.7.2 transitivePeerDependencies: + - astro-eslint-parser + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack - supports-color - - /@babel/generator@7.18.7: - resolution: {integrity: sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.18.8 - '@jridgewell/gen-mapping': 0.3.2 - jsesc: 2.5.2 + - svelte + - svelte-eslint-parser + - typescript + - vitest dev: true - /@babel/generator@7.20.5: - resolution: {integrity: sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.5 - '@jridgewell/gen-mapping': 0.3.2 - jsesc: 2.5.2 + /@antfu/eslint-define-config@1.23.0-2: + resolution: {integrity: sha512-LvxY21+ZhpuBf/aHeBUtGQhSEfad4PkNKXKvDOSvukaM3XVTfBhwmHX2EKwAsdq5DlfjbT3qqYyMiueBIO5iDQ==} + engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'} + dev: true - /@babel/helper-annotate-as-pure@7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} - engines: {node: '>=6.9.0'} + /@antfu/install-pkg@0.3.0: + resolution: {integrity: sha512-hzTVgEFGBBMXUjsNhIRDdt9jvAkZzPbMLQW8q2wXz455+1zxGFtM0nxPl2pukFWHXcC/Bn/UCHV9rd0+pwYsmw==} dependencies: - '@babel/types': 7.18.8 + execa: 8.0.1 + find-up: 7.0.0 dev: true - /@babel/helper-compilation-targets@7.18.6(@babel/core@7.18.6): - resolution: {integrity: sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.18.8 - '@babel/core': 7.18.6 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.2 - semver: 6.3.0 - dev: true + '@babel/highlight': 7.23.4 + chalk: 2.4.2 - /@babel/helper-compilation-targets@7.20.0(@babel/core@7.20.5): - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.20.5 - '@babel/core': 7.20.5 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - /@babel/helper-create-class-features-plugin@7.18.6(@babel/core@7.18.6): - resolution: {integrity: sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==} + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.18.6 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.6 - '@babel/helper-function-name': 7.18.6 - '@babel/helper-member-expression-to-functions': 7.18.6 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-create-class-features-plugin@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==} + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.5 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.6 - '@babel/helper-function-name': 7.18.6 - '@babel/helper-member-expression-to-functions': 7.18.6 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/types': 7.23.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 - /@babel/helper-environment-visitor@7.18.6: - resolution: {integrity: sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==} + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.5 dev: true - /@babel/helper-environment-visitor@7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} - engines: {node: '>=6.9.0'} - - /@babel/helper-function-name@7.18.6: - resolution: {integrity: sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==} + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.6 - '@babel/types': 7.18.8 - dev: true - - /@babel/helper-function-name@7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.5 + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.8 + '@babel/template': 7.22.15 + '@babel/types': 7.23.5 - /@babel/helper-member-expression-to-functions@7.18.6: - resolution: {integrity: sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.8 - dev: true + '@babel/types': 7.23.5 - /@babel/helper-module-imports@7.16.0: - resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.8 + '@babel/types': 7.23.5 dev: true /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.8 + '@babel/types': 7.23.5 + dev: true - /@babel/helper-module-transforms@7.18.8: - resolution: {integrity: sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==} + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.6 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.18.6 - '@babel/template': 7.18.6 - '@babel/traverse': 7.18.8 - '@babel/types': 7.18.8 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/types': 7.23.5 - /@babel/helper-module-transforms@7.20.2: - resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.5 - '@babel/types': 7.20.5 - transitivePeerDependencies: - - supports-color - - /@babel/helper-optimise-call-expression@7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.8 + '@babel/types': 7.23.5 dev: true - /@babel/helper-plugin-utils@7.18.6: - resolution: {integrity: sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers@7.18.6: - resolution: {integrity: sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==} + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.18.6 - '@babel/helper-member-expression-to-functions': 7.18.6 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/traverse': 7.18.8 - '@babel/types': 7.18.8 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 dev: true - /@babel/helper-simple-access@7.18.6: - resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.8 - dev: true + '@babel/types': 7.23.5 - /@babel/helper-simple-access@7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.5 + '@babel/types': 7.23.5 + dev: true - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.8 - - /@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} - engines: {node: '>=6.9.0'} + '@babel/types': 7.23.5 - /@babel/helper-validator-identifier@7.18.6: - resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.18.6: - resolution: {integrity: sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.18.6 - '@babel/traverse': 7.18.8 - '@babel/types': 7.18.8 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helpers@7.20.6: - resolution: {integrity: sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==} + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.5 - '@babel/types': 7.20.5 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 transitivePeerDependencies: - supports-color - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.18.6 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.18.8: - resolution: {integrity: sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.18.8 - dev: true - - /@babel/parser@7.20.5: - resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.5 - - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.18.6): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.18.6 - '@babel/helper-plugin-utils': 7.18.6 - dev: true - - /@babel/plugin-syntax-typescript@7.18.6(@babel/core@7.18.6): - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.18.6 - '@babel/helper-plugin-utils': 7.18.6 - dev: true + '@babel/types': 7.23.5 - /@babel/plugin-syntax-typescript@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.5 - '@babel/helper-plugin-utils': 7.18.6 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.18.8(@babel/core@7.18.6): - resolution: {integrity: sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==} + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.18.6(@babel/core@7.18.6) - '@babel/helper-plugin-utils': 7.18.6 - '@babel/plugin-syntax-typescript': 7.18.6(@babel/core@7.18.6) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.18.8(@babel/core@7.20.5): - resolution: {integrity: sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==} + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.5 - '@babel/helper-create-class-features-plugin': 7.18.6(@babel/core@7.20.5) - '@babel/helper-plugin-utils': 7.18.6 - '@babel/plugin-syntax-typescript': 7.18.6(@babel/core@7.20.5) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/preset-typescript@7.18.6(@babel/core@7.18.6): - resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} + /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.6 - '@babel/helper-plugin-utils': 7.18.6 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.18.8(@babel/core@7.18.6) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) dev: true - /@babel/preset-typescript@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} + /@babel/preset-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.5 - '@babel/helper-plugin-utils': 7.18.6 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.18.8(@babel/core@7.20.5) - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/template@7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.5 - '@babel/types': 7.20.5 - - /@babel/template@7.18.6: - resolution: {integrity: sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.18.8 - '@babel/types': 7.18.8 + '@babel/core': 7.23.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) dev: true - /@babel/traverse@7.18.8: - resolution: {integrity: sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.7 - '@babel/helper-environment-visitor': 7.18.6 - '@babel/helper-function-name': 7.18.6 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.18.8 - '@babel/types': 7.18.8 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 - /@babel/traverse@7.20.5: - resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==} + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.5 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.5 - '@babel/types': 7.20.5 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.18.8: - resolution: {integrity: sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==} + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.18.6 + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@babel/types@7.20.5: - resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} - engines: {node: '>=6.9.0'} + /@commitlint/cli@18.4.3(typescript@5.3.2): + resolution: {integrity: sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==} + engines: {node: '>=v18'} + hasBin: true dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 - to-fast-properties: 2.0.0 - - /@esbuild/linux-loong64@0.14.54: - resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true + '@commitlint/format': 18.4.3 + '@commitlint/lint': 18.4.3 + '@commitlint/load': 18.4.3(typescript@5.3.2) + '@commitlint/read': 18.4.3 + '@commitlint/types': 18.4.3 + execa: 5.1.1 + lodash.isfunction: 3.0.9 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - typescript dev: true - optional: true - - /@felte/common@1.1.4: - resolution: {integrity: sha512-4jNB4EwRpaGZppwV/YqbGF7SVRwehWw+hyTGmw2N+pL86LuqVTTSrgVOGXwPaLTju1BxAptcoAXjxZbBf0XB4Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - - /@felte/core@1.3.7: - resolution: {integrity: sha512-/AkIEZu/Yg/K+YEdnup5c3Bb0xyr9ONdZnS0us6V/b9DgfiEqbcm1xgglD/mtwh+IH7KOhIuQecjBdPQfpNViQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - '@felte/common': 1.1.4 - dev: false - /@felte/solid@1.2.7(solid-js@1.6.4): - resolution: {integrity: sha512-kVCmIBxJiemAcklJ61yxW7WCo+r4sGDSfuUws3t9pFQyKHENT+7HEfUU3hpEqx+BA5xd4bczS8MrOhf9L429rw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - solid-js: ^1.2.0 - dependencies: - '@felte/core': 1.3.7 - solid-js: 1.6.4 - dev: false - - /@jridgewell/gen-mapping@0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - - /@jridgewell/gen-mapping@0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} - engines: {node: '>=6.0.0'} + /@commitlint/config-conventional@18.4.3: + resolution: {integrity: sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==} + engines: {node: '>=v18'} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.14 - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + conventional-changelog-conventionalcommits: 7.0.2 + dev: true - /@jridgewell/trace-mapping@0.3.14: - resolution: {integrity: sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==} + /@commitlint/config-validator@18.4.3: + resolution: {integrity: sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==} + engines: {node: '>=v18'} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@commitlint/types': 18.4.3 + ajv: 8.12.0 + dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + /@commitlint/ensure@18.4.3: + resolution: {integrity: sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==} + engines: {node: '>=v18'} dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@commitlint/types': 18.4.3 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + /@commitlint/execute-rule@18.4.3: + resolution: {integrity: sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==} + engines: {node: '>=v18'} dev: true - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + /@commitlint/format@18.4.3: + resolution: {integrity: sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==} + engines: {node: '>=v18'} dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.14.0 + '@commitlint/types': 18.4.3 + chalk: 4.1.2 dev: true - /@rollup/pluginutils@5.0.2: - resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true + /@commitlint/is-ignored@18.4.3: + resolution: {integrity: sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==} + engines: {node: '>=v18'} dependencies: - '@types/estree': 1.0.0 - estree-walker: 2.0.2 - picomatch: 2.3.1 + '@commitlint/types': 18.4.3 + semver: 7.5.4 dev: true - /@solidjs/router@0.5.1(solid-js@1.6.4): - resolution: {integrity: sha512-igyrwUqm/9T26Lb6l7oXwpc4lLUVqbhbN92wOL3NgLoLVmkQlUNTZciuAe+Su8XeJXlrWjl6oxDJDLt+6pws/g==} - peerDependencies: - solid-js: ^1.5.3 + /@commitlint/lint@18.4.3: + resolution: {integrity: sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==} + engines: {node: '>=v18'} dependencies: - solid-js: 1.6.4 - dev: false + '@commitlint/is-ignored': 18.4.3 + '@commitlint/parse': 18.4.3 + '@commitlint/rules': 18.4.3 + '@commitlint/types': 18.4.3 + dev: true - /@tailwindcss/typography@0.5.8(tailwindcss@3.2.4): - resolution: {integrity: sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + /@commitlint/load@18.4.3(typescript@5.3.2): + resolution: {integrity: sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==} + engines: {node: '>=v18'} dependencies: - lodash.castarray: 4.4.0 + '@commitlint/config-validator': 18.4.3 + '@commitlint/execute-rule': 18.4.3 + '@commitlint/resolve-extends': 18.4.3 + '@commitlint/types': 18.4.3 + '@types/node': 18.19.0 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.3.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.0)(cosmiconfig@8.3.6)(typescript@5.3.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.2.4(postcss@8.4.19) + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + transitivePeerDependencies: + - typescript dev: true - /@types/chroma-js@2.1.4: - resolution: {integrity: sha512-l9hWzP7cp7yleJUI7P2acmpllTJNYf5uU6wh50JzSIZt3fFHe+w2FM6w9oZGBTYzjjm2qHdnQvI+fF/JF/E5jQ==} - dev: false - - /@types/css-tree@2.0.0: - resolution: {integrity: sha512-mY2sXRLBnUPMYw6mkOT+6dABeaNxAEKZz6scE9kQPNJx8fKe1fOsm8Honl7+xFYe6TKX8WNk2+7oMp2vBArJ9Q==} - - /@types/estree@1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + /@commitlint/message@18.4.3: + resolution: {integrity: sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==} + engines: {node: '>=v18'} dev: true - /acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + /@commitlint/parse@18.4.3: + resolution: {integrity: sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==} + engines: {node: '>=v18'} dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} + '@commitlint/types': 18.4.3 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 dev: true - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true + /@commitlint/read@18.4.3: + resolution: {integrity: sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/top-level': 18.4.3 + '@commitlint/types': 18.4.3 + fs-extra: 11.2.0 + git-raw-commits: 2.0.11 + minimist: 1.2.8 dev: true - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + /@commitlint/resolve-extends@18.4.3: + resolution: {integrity: sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==} + engines: {node: '>=v18'} dependencies: - color-convert: 1.9.3 + '@commitlint/config-validator': 18.4.3 + '@commitlint/types': 18.4.3 + import-fresh: 3.3.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + dev: true - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + /@commitlint/rules@18.4.3: + resolution: {integrity: sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==} + engines: {node: '>=v18'} dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 + '@commitlint/ensure': 18.4.3 + '@commitlint/message': 18.4.3 + '@commitlint/to-lines': 18.4.3 + '@commitlint/types': 18.4.3 + execa: 5.1.1 dev: true - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + /@commitlint/to-lines@18.4.3: + resolution: {integrity: sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==} + engines: {node: '>=v18'} dev: true - /autoprefixer@10.4.13(postcss@8.4.19): - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + /@commitlint/top-level@18.4.3: + resolution: {integrity: sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==} + engines: {node: '>=v18'} dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001439 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 + find-up: 5.0.0 dev: true - /babel-plugin-jsx-dom-expressions@0.33.12(@babel/core@7.18.6): - resolution: {integrity: sha512-FQeNcBvC+PrPYGpeUztI7AiiAqJL2H8e7mL4L6qHZ7B4wZfbgyREsHZwKmmDqxAehlyAUolTdhDNk9xfyHdIZw==} - peerDependencies: - '@babel/core': ^7.0.0 + /@commitlint/types@18.4.3: + resolution: {integrity: sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==} + engines: {node: '>=v18'} dependencies: - '@babel/core': 7.18.6 - '@babel/helper-module-imports': 7.16.0 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.18.6) - '@babel/types': 7.18.8 - html-entities: 2.3.2 + chalk: 4.1.2 dev: true - /babel-preset-solid@1.4.6(@babel/core@7.18.6): - resolution: {integrity: sha512-5n+nm1zgj7BK9cv0kYu0p+kbsXgGbrxLmA5bv5WT0V5WnqRgshWILInPWLJNZbvP5gBj+huDKwk3J4RhhbFlhA==} - peerDependencies: - '@babel/core': ^7.0.0 + /@es-joy/jsdoccomment@0.41.0: + resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==} + engines: {node: '>=16'} dependencies: - '@babel/core': 7.18.6 - babel-plugin-jsx-dom-expressions: 0.33.12(@babel/core@7.18.6) + comment-parser: 1.4.1 + esquery: 1.5.0 + jsdoc-type-pratt-parser: 4.0.0 dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + /@esbuild/android-arm64@0.19.8: + resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true dev: true + optional: true - /bootstrap-icons@1.10.2: - resolution: {integrity: sha512-PTPYadRn1AMGr+QTSxe4ZCc+Wzv9DGZxbi3lNse/dajqV31n2/wl/7NX78ZpkvFgRNmH4ogdIQPQmxAfhEV6nA==} - dev: false - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 + /@esbuild/android-arm@0.19.8: + resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true dev: true + optional: true - /browserslist@4.21.2: - resolution: {integrity: sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001366 - electron-to-chromium: 1.4.189 - node-releases: 2.0.6 - update-browserslist-db: 1.0.4(browserslist@4.21.2) + /@esbuild/android-x64@0.19.8: + resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true dev: true + optional: true - /browserslist@4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001439 - electron-to-chromium: 1.4.284 - node-releases: 2.0.6 - update-browserslist-db: 1.0.10(browserslist@4.21.4) - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /caniuse-lite@1.0.30001366: - resolution: {integrity: sha512-yy7XLWCubDobokgzudpkKux8e0UOOnLHE6mlNJBzT3lZJz6s5atSEzjoL+fsCPkI0G8MP5uVdDx1ur/fXEWkZA==} - dev: true - - /caniuse-lite@1.0.30001439: - resolution: {integrity: sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==} - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /chroma-js@2.4.2: - resolution: {integrity: sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==} - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /convert-source-map@1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 - - /css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.0.2 - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /csstype@3.1.0: - resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - dev: true - - /detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - hasBin: true - dependencies: - acorn-node: 1.8.2 - defined: 1.0.1 - minimist: 1.2.7 - dev: true - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - - /electron-to-chromium@1.4.189: - resolution: {integrity: sha512-dQ6Zn4ll2NofGtxPXaDfY2laIa6NyCQdqXYHdwH90GJQW0LpJJib0ZU/ERtbb0XkBEmUD2eJtagbOie3pdMiPg==} - dev: true - - /electron-to-chromium@1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} - - /esbuild-android-64@0.14.54: - resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-android-arm64@0.14.54: - resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} + /@esbuild/darwin-arm64@0.19.8: + resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} engines: {node: '>=12'} cpu: [arm64] - os: [android] + os: [darwin] requiresBuild: true dev: true optional: true - /esbuild-darwin-64@0.14.54: - resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} + /@esbuild/darwin-x64@0.19.8: + resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -933,17 +688,17 @@ packages: dev: true optional: true - /esbuild-darwin-arm64@0.14.54: - resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} + /@esbuild/freebsd-arm64@0.19.8: + resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} engines: {node: '>=12'} cpu: [arm64] - os: [darwin] + os: [freebsd] requiresBuild: true dev: true optional: true - /esbuild-freebsd-64@0.14.54: - resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} + /@esbuild/freebsd-x64@0.19.8: + resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -951,89 +706,89 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64@0.14.54: - resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} + /@esbuild/linux-arm64@0.19.8: + resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} engines: {node: '>=12'} cpu: [arm64] - os: [freebsd] + os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-32@0.14.54: - resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} + /@esbuild/linux-arm@0.19.8: + resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} engines: {node: '>=12'} - cpu: [ia32] + cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-64@0.14.54: - resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} + /@esbuild/linux-ia32@0.19.8: + resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} engines: {node: '>=12'} - cpu: [x64] + cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-arm64@0.14.54: - resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} + /@esbuild/linux-loong64@0.19.8: + resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [loong64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-arm@0.14.54: - resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} + /@esbuild/linux-mips64el@0.19.8: + resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} engines: {node: '>=12'} - cpu: [arm] + cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-mips64le@0.14.54: - resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} + /@esbuild/linux-ppc64@0.19.8: + resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} engines: {node: '>=12'} - cpu: [mips64el] + cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-ppc64le@0.14.54: - resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} + /@esbuild/linux-riscv64@0.19.8: + resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} engines: {node: '>=12'} - cpu: [ppc64] + cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-riscv64@0.14.54: - resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} + /@esbuild/linux-s390x@0.19.8: + resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} engines: {node: '>=12'} - cpu: [riscv64] + cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-s390x@0.14.54: - resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} + /@esbuild/linux-x64@0.19.8: + resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} engines: {node: '>=12'} - cpu: [s390x] + cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-netbsd-64@0.14.54: - resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} + /@esbuild/netbsd-x64@0.19.8: + resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1041,8 +796,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64@0.14.54: - resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} + /@esbuild/openbsd-x64@0.19.8: + resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1050,8 +805,8 @@ packages: dev: true optional: true - /esbuild-sunos-64@0.14.54: - resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} + /@esbuild/sunos-x64@0.19.8: + resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1059,237 +814,2327 @@ packages: dev: true optional: true - /esbuild-windows-32@0.14.54: - resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} + /@esbuild/win32-arm64@0.19.8: + resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} engines: {node: '>=12'} - cpu: [ia32] + cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /esbuild-windows-64@0.14.54: - resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} + /@esbuild/win32-ia32@0.19.8: + resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} engines: {node: '>=12'} - cpu: [x64] + cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /esbuild-windows-arm64@0.14.54: - resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} + /@esbuild/win32-x64@0.19.8: + resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} engines: {node: '>=12'} - cpu: [arm64] + cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /esbuild@0.14.54: - resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/linux-loong64': 0.14.54 - esbuild-android-64: 0.14.54 - esbuild-android-arm64: 0.14.54 - esbuild-darwin-64: 0.14.54 - esbuild-darwin-arm64: 0.14.54 - esbuild-freebsd-64: 0.14.54 - esbuild-freebsd-arm64: 0.14.54 - esbuild-linux-32: 0.14.54 - esbuild-linux-64: 0.14.54 - esbuild-linux-arm: 0.14.54 - esbuild-linux-arm64: 0.14.54 - esbuild-linux-mips64le: 0.14.54 - esbuild-linux-ppc64le: 0.14.54 - esbuild-linux-riscv64: 0.14.54 - esbuild-linux-s390x: 0.14.54 - esbuild-netbsd-64: 0.14.54 - esbuild-openbsd-64: 0.14.54 - esbuild-sunos-64: 0.14.54 - esbuild-windows-32: 0.14.54 - esbuild-windows-64: 0.14.54 - esbuild-windows-arm64: 0.14.54 + /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.54.0 + eslint-visitor-keys: 3.4.3 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 + /@eslint-types/jsdoc@46.8.2-1: + resolution: {integrity: sha512-FwD7V0xX0jyaqj8Ul5ZY+TAAPohDfVqtbuXJNHb+OIv1aTIqZi5+Zn3F2UwQ5O3BnQd2mTduyK0+HjGx3/AMFg==} dev: true - /fastq@1.14.0: - resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} - dependencies: - reusify: 1.0.4 + /@eslint-types/typescript-eslint@6.12.0: + resolution: {integrity: sha512-N8cbOYjyFl2BFgDhDgHhTGpgiMkFg0CoITG5hdBm9ZGmcEgUvFBnHvHG7qJl3qVEmFnoKUdfSAcr7MRb2/Jxvw==} dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 + /@eslint-types/unicorn@49.0.0: + resolution: {integrity: sha512-NfXSZIsPFRD2fwTDZQj8SaXqS/rXjB5foxMraLovyrYGXiQK2y0780drDKYYSVbqvco29QIYoZNmnKTUkzZMvQ==} dev: true - /fraction.js@4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color dev: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true + /@eslint/js@8.54.0: + resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + /@felte/common@1.1.8: + resolution: {integrity: sha512-VbEOfNLWfDx0SpCfeE+fNWDpvcntND4MFs7Lxd18RIjrZYH82D0wWe9th2oVF9QT5XzgBEdMF5NGIttcwU4sjg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + /@felte/core@1.4.1: + resolution: {integrity: sha512-dUzfzug5cK93kBjG0u9F3zDM781qCJP4QwYPOpJsXbydwVseDM5BXpDqvZUFhqJsd0x1GKftkX69+iWafyASjw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@felte/common': 1.1.8 + dev: false - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + /@felte/solid@1.2.11(solid-js@1.8.6): + resolution: {integrity: sha512-0NlcDjr+AY6m2B48J4hvHMxbLvx1l7O9/j3izkb35qb+26wki4tk4HpIzmnRIweTT7PXsObq6mnuc20+MGlrMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + solid-js: ^1.2.0 dependencies: - is-glob: 4.0.3 - dev: true + '@felte/core': 1.4.1 + solid-js: 1.8.6 + dev: false - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} dependencies: - is-glob: 4.0.3 + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: - function-bind: 1.1.1 - dev: true + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 - /html-entities@2.3.2: - resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==} - dev: true + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} - /immutable@4.1.0: - resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} - dev: true + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - binary-extensions: 2.2.0 - dev: true + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 - /is-core-module@2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: - has: 1.0.3 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: - is-extglob: 2.1.1 + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + /@rollup/pluginutils@5.1.0: + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 dev: true - /is-what@4.1.7: - resolution: {integrity: sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==} - engines: {node: '>=12.13'} + /@rollup/rollup-android-arm-eabi@4.6.1: + resolution: {integrity: sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==} + cpu: [arm] + os: [android] + requiresBuild: true dev: true + optional: true - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - /js-xxhash@2.0.0: - resolution: {integrity: sha512-R7Gad0Y0grmuF/WRBUmxgQA1bGpbmRWM/OwNJZQPVdJBAteJIdBYOBYcHbuJeJwxdddqBVIdP3EfrDNFqahJ2A==} - engines: {node: '>=14.0.0'} + /@rollup/rollup-android-arm64@4.6.1: + resolution: {integrity: sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.6.1: + resolution: {integrity: sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.6.1: + resolution: {integrity: sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.6.1: + resolution: {integrity: sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.6.1: + resolution: {integrity: sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.6.1: + resolution: {integrity: sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.6.1: + resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.6.1: + resolution: {integrity: sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.6.1: + resolution: {integrity: sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.6.1: + resolution: {integrity: sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.6.1: + resolution: {integrity: sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@solidjs/router@0.9.1(solid-js@1.8.6): + resolution: {integrity: sha512-kRY75piOQsyoH75E/RP6lr7uVGFCjeeCCCJx7Z2D1Vc6+I1yFQjLCvE+6agXGwqDoWi6vbETP1g7gmp/L1mNLg==} + peerDependencies: + solid-js: ^1.8.4 + dependencies: + solid-js: 1.8.6 + dev: false + + /@stylistic/eslint-plugin-js@1.4.1(eslint@8.54.0): + resolution: {integrity: sha512-WXHPEVw5PB7OML7cLwHJDEcCyLiP7vzKeBbSwmpHLK0oh0JYkoJfTg2hEdFuQT5rQxFy3KzCy9R1mZ0wgLjKrA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + acorn: 8.11.2 + escape-string-regexp: 4.0.0 + eslint: 8.54.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + graphemer: 1.4.0 + dev: true + + /@stylistic/eslint-plugin-jsx@1.4.1(eslint@8.54.0): + resolution: {integrity: sha512-INBYpZmXrkeqnjCrUuTKMa7BeXiCR5VNvq71033hbPqXnG9oQDxX5mqE9Duj9qlISEOsxzhSr+UXGmq3mVYG9Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.4.1(eslint@8.54.0) + eslint: 8.54.0 + estraverse: 5.3.0 + dev: true + + /@stylistic/eslint-plugin-ts@1.4.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-zuqnxhWoqPhZcxOb7AiYZz1RF/fUCsbJ7xq60IdRWnEY6MPybqYVJAb+SYilJ3PYxqmz8zdZeYkSeVy6f1fNnA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.4.1(eslint@8.54.0) + '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 + graphemer: 1.4.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@stylistic/eslint-plugin@1.4.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-CDwQCxglLTkUjpIJT4ltlpC8sKkPvTA7DjFcWiuZtBr0Vc6owGuYgJso4X1TDiD2JkjD3idbXCoGK0AfzNrgww==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.4.1(eslint@8.54.0) + '@stylistic/eslint-plugin-jsx': 1.4.1(eslint@8.54.0) + '@stylistic/eslint-plugin-ts': 1.4.1(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@tailwindcss/typography@0.5.10(tailwindcss@3.3.5): + resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.3.5 + dev: true + + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + '@types/babel__generator': 7.6.7 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 + dev: true + + /@types/babel__generator@7.6.7: + resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} + dependencies: + '@babel/types': 7.23.5 + dev: true + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + dev: true + + /@types/babel__traverse@7.20.4: + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + dependencies: + '@babel/types': 7.23.5 + dev: true + + /@types/chroma-js@2.4.3: + resolution: {integrity: sha512-1ly5ly/7S/YF8aD7MxUQnFOZxdegimuOunJl0xDsLlguu5JrwuSTVGVH3UpIUlh6YauI0RMNT4cqjBonhgbdIQ==} + dev: false + + /@types/css-tree@2.3.4: + resolution: {integrity: sha512-wdxxe7zEpOXfy5C3FmwinAIc/6p6du/wOKMGZf07JHuHHRIvLtLq8h66zi3Yn7PCyswxbp3Ujx9h+vSuMvfN/w==} + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + dependencies: + '@types/unist': 2.0.10 + dev: true + + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true + + /@types/node@18.19.0: + resolution: {integrity: sha512-667KNhaD7U29mT5wf+TZUnrzPrlL2GNQ5N0BMjO2oNULhBxX0/FKCkm6JMu0Jh7Z+1LwUlR21ekd7KhIboNFNw==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: true + + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: true + + /@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/type-utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.1 + debug: 4.3.4 + eslint: 8.54.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.13.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.1 + debug: 4.3.4 + eslint: 8.54.0 + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.13.1: + resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/visitor-keys': 6.13.1 + dev: true + + /@typescript-eslint/type-utils@6.13.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + debug: 4.3.4 + eslint: 8.54.0 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.13.1: + resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.13.1(typescript@5.3.2): + resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/visitor-keys': 6.13.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.13.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + eslint: 8.54.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.13.1: + resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.13.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /autoprefixer@10.4.16(postcss@8.4.31): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.1 + caniuse-lite: 1.0.30001565 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /babel-plugin-jsx-dom-expressions@0.37.9(@babel/core@7.23.5): + resolution: {integrity: sha512-6w+zs2i14fVanj4e1hXCU5cp+x0U0LJ5jScknpMZZUteHhwFRGJflHMVJ+xAcW7ku41FYjr7DgtK9mnc2SXlJg==} + peerDependencies: + '@babel/core': ^7.20.12 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/types': 7.23.5 + html-entities: 2.3.3 + validate-html-nesting: 1.2.2 + dev: true + + /babel-preset-solid@1.8.6(@babel/core@7.23.5): + resolution: {integrity: sha512-Ened42CHjU4EFkvNeS042/3Pm21yvMWn8p4G4ddzQTlKaMwSGGD1VciA/e7EshBVHJCcBj9vHiUd/r3A4qLPZA==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + babel-plugin-jsx-dom-expressions: 0.37.9(@babel/core@7.23.5) + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + + /bootstrap-icons@1.11.2: + resolution: {integrity: sha512-TgdiPv+IM9tgDb+dsxrnGIyocsk85d2M7T0qIgkvPedZeoZfyeG/j+yiAE4uHCEayKef2RP05ahQ0/e9Sv75Wg==} + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001565 + electron-to-chromium: 1.4.600 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /builtins@5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + dependencies: + semver: 7.5.4 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /caniuse-lite@1.0.30001565: + resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + dev: true + + /character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + dev: true + + /character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /chroma-js@2.4.2: + resolution: {integrity: sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==} + dev: false + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + dev: true + + /compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + /cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.0)(cosmiconfig@8.3.6)(typescript@5.3.2): + resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} + engines: {node: '>=v16'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=8.2' + typescript: '>=4' + dependencies: + '@types/node': 18.19.0 + cosmiconfig: 8.3.6(typescript@5.3.2) + jiti: 1.21.0 + typescript: 5.3.2 + dev: true + + /cosmiconfig@8.3.6(typescript@5.3.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.3.2 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + /dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: true + + /electron-to-chromium@1.4.600: + resolution: {integrity: sha512-KD6CWjf1BnQG+NsXuyiTDDT1eV13sKuYsOUioXkQweYTQIbgHkXPry9K7M+7cKtYHnSUPitVaLrXYB1jTkkYrw==} + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /esbuild@0.19.8: + resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.8 + '@esbuild/android-arm64': 0.19.8 + '@esbuild/android-x64': 0.19.8 + '@esbuild/darwin-arm64': 0.19.8 + '@esbuild/darwin-x64': 0.19.8 + '@esbuild/freebsd-arm64': 0.19.8 + '@esbuild/freebsd-x64': 0.19.8 + '@esbuild/linux-arm': 0.19.8 + '@esbuild/linux-arm64': 0.19.8 + '@esbuild/linux-ia32': 0.19.8 + '@esbuild/linux-loong64': 0.19.8 + '@esbuild/linux-mips64el': 0.19.8 + '@esbuild/linux-ppc64': 0.19.8 + '@esbuild/linux-riscv64': 0.19.8 + '@esbuild/linux-s390x': 0.19.8 + '@esbuild/linux-x64': 0.19.8 + '@esbuild/netbsd-x64': 0.19.8 + '@esbuild/openbsd-x64': 0.19.8 + '@esbuild/sunos-x64': 0.19.8 + '@esbuild/win32-arm64': 0.19.8 + '@esbuild/win32-ia32': 0.19.8 + '@esbuild/win32-x64': 0.19.8 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-compat-utils@0.1.2(eslint@8.54.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.54.0 + dev: true + + /eslint-config-flat-gitignore@0.1.2: + resolution: {integrity: sha512-PcBsqtd5QHEZH4ROvpnRN4EP0qcHh9voCCHgtyHxnJZHGspJREcZn7oPqRG/GfWt9m3C0fkC2l5CuBtMig2wXQ==} + dependencies: + parse-gitignore: 2.0.0 + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + debug: 3.2.7 + eslint: 8.54.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-antfu@1.0.11(eslint@8.54.0): + resolution: {integrity: sha512-m+RWX/D+Ep9xU7VTDYKG4UmDUV9bOa5/SU/fUwWcRyYGbEy3lgxlnhuxv+Zw5Ca/RlcabCFt+vxh62wo1RI/6w==} + peerDependencies: + eslint: '*' + dependencies: + eslint: 8.54.0 + dev: true + + /eslint-plugin-es-x@7.5.0(eslint@8.54.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@eslint-community/regexpp': 4.10.0 + eslint: 8.54.0 + eslint-compat-utils: 0.1.2(eslint@8.54.0) + dev: true + + /eslint-plugin-eslint-comments@3.2.0(eslint@8.54.0): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.54.0 + ignore: 5.3.0 + dev: true + + /eslint-plugin-i@2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.54.0): + resolution: {integrity: sha512-slGeTS3GQzx9267wLJnNYNO8X9EHGsc75AKIAFvnvMYEcTJKotPKL1Ru5PIGVHIVet+2DsugePWp8Oxpx8G22w==} + engines: {node: '>=12'} + peerDependencies: + eslint: ^7.2.0 || ^8 + dependencies: + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.54.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) + get-tsconfig: 4.7.2 + is-glob: 4.0.3 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.5.4 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsdoc@46.9.0(eslint@8.54.0): + resolution: {integrity: sha512-UQuEtbqLNkPf5Nr/6PPRCtr9xypXY+g8y/Q7gPa0YK7eDhh0y2lWprXRnaYbW7ACgIUvpDKy9X2bZqxtGzBG9Q==} + engines: {node: '>=16'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@es-joy/jsdoccomment': 0.41.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.3.4 + escape-string-regexp: 4.0.0 + eslint: 8.54.0 + esquery: 1.5.0 + is-builtin-module: 3.2.1 + semver: 7.5.4 + spdx-expression-parse: 3.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-jsonc@2.10.0(eslint@8.54.0): + resolution: {integrity: sha512-9d//o6Jyh4s1RxC9fNSt1+MMaFN2ruFdXPG9XZcb/mR2KkfjADYiNL/hbU6W0Cyxfg3tS/XSFuhl5LgtMD8hmw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + eslint: 8.54.0 + eslint-compat-utils: 0.1.2(eslint@8.54.0) + jsonc-eslint-parser: 2.4.0 + natural-compare: 1.4.0 + dev: true + + /eslint-plugin-markdown@3.0.1(eslint@8.54.0): + resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.54.0 + mdast-util-from-markdown: 0.8.5 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-n@16.3.1(eslint@8.54.0): + resolution: {integrity: sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==} + engines: {node: '>=16.0.0'} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + builtins: 5.0.1 + eslint: 8.54.0 + eslint-plugin-es-x: 7.5.0(eslint@8.54.0) + get-tsconfig: 4.7.2 + ignore: 5.3.0 + is-builtin-module: 3.2.1 + is-core-module: 2.13.1 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.5.4 + dev: true + + /eslint-plugin-no-only-tests@3.1.0: + resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} + engines: {node: '>=5.0.0'} + dev: true + + /eslint-plugin-perfectionist@2.5.0(eslint@8.54.0)(typescript@5.3.2)(vue-eslint-parser@9.3.2): + resolution: {integrity: sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==} + peerDependencies: + astro-eslint-parser: ^0.16.0 + eslint: '>=8.0.0' + svelte: '>=3.0.0' + svelte-eslint-parser: ^0.33.0 + vue-eslint-parser: '>=9.0.0' + peerDependenciesMeta: + astro-eslint-parser: + optional: true + svelte: + optional: true + svelte-eslint-parser: + optional: true + vue-eslint-parser: + optional: true + dependencies: + '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 + minimatch: 9.0.3 + natural-compare-lite: 1.4.0 + vue-eslint-parser: 9.3.2(eslint@8.54.0) + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-unicorn@49.0.0(eslint@8.54.0): + resolution: {integrity: sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.52.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.54.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.13.1)(eslint@8.54.0): + resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^6.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 + eslint-rule-composer: 0.3.0 + dev: true + + /eslint-plugin-vitest@0.3.10(@typescript-eslint/eslint-plugin@6.13.1)(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-08lj4rdhZHYyHk+Py2nJ7SlE6arP8GNfGXl9jVqhe9s5JoZIGiBpIkLGX+VNBiB6vXTn56H6Ant7Koc6XzRjtQ==} + engines: {node: 14.x || >= 16} + peerDependencies: + '@typescript-eslint/eslint-plugin': '*' + eslint: '>=8.0.0' + vitest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + vitest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-vue@9.19.2(eslint@8.54.0): + resolution: {integrity: sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + eslint: 8.54.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.13 + semver: 7.5.4 + vue-eslint-parser: 9.3.2(eslint@8.54.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-yml@1.10.0(eslint@8.54.0): + resolution: {integrity: sha512-53SUwuNDna97lVk38hL/5++WXDuugPM9SUQ1T645R0EHMRCdBIIxGye/oOX2qO3FQ7aImxaUZJU/ju+NMUBrLQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 8.54.0 + eslint-compat-utils: 0.1.2(eslint@8.54.0) + lodash: 4.17.21 + natural-compare: 1.4.0 + yaml-eslint-parser: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.54.0: + resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.54.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /git-raw-commits@2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + dargs: 7.0.0 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + dependencies: + ini: 1.3.8 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + + /html-entities@2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + + /husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + + /immutable@4.3.4: + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + dev: true + + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + dependencies: + text-extensions: 2.4.0 + dev: true + + /is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsdoc-type-pratt-parser@4.0.0: + resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} + engines: {node: '>=12.0.0'} + dev: true + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - /json5@2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + /jsonc-eslint-parser@2.4.0: + resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.5.4 + dev: true + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lightningcss-darwin-arm64@1.22.1: + resolution: {integrity: sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /lightningcss-darwin-x64@1.22.1: + resolution: {integrity: sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /lightningcss-freebsd-x64@1.22.1: + resolution: {integrity: sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + optional: true + + /lightningcss-linux-arm-gnueabihf@1.22.1: + resolution: {integrity: sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-arm64-gnu@1.22.1: + resolution: {integrity: sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-arm64-musl@1.22.1: + resolution: {integrity: sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-x64-gnu@1.22.1: + resolution: {integrity: sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-linux-x64-musl@1.22.1: + resolution: {integrity: sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /lightningcss-win32-x64-msvc@1.22.1: + resolution: {integrity: sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /lightningcss@1.22.1: + resolution: {integrity: sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==} + engines: {node: '>= 12.0.0'} + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.22.1 + lightningcss-darwin-x64: 1.22.1 + lightningcss-freebsd-x64: 1.22.1 + lightningcss-linux-arm-gnueabihf: 1.22.1 + lightningcss-linux-arm64-gnu: 1.22.1 + lightningcss-linux-arm64-musl: 1.22.1 + lightningcss-linux-x64-gnu: 1.22.1 + lightningcss-linux-x64-musl: 1.22.1 + lightningcss-win32-x64-msvc: 1.22.1 + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.4.2 + pkg-types: 1.0.3 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true - /lilconfig@2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-locate: 6.0.0 + dev: true + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true /lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} dev: true + /lodash.isfunction@3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + dev: true + /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true + /lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + dev: true + + /lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: true + + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + + /lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + + /mdast-util-from-markdown@0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-string: 2.0.0 + micromark: 2.11.4 + parse-entities: 2.0.0 + unist-util-stringify-position: 2.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-to-string@2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + dev: true /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - /merge-anything@5.0.2: - resolution: {integrity: sha512-POPQBWkBC0vxdgzRJ2Mkj4+2NTKbvkHo93ih+jGDhNMLzIw+rYKjO7949hOQM2X7DxMHH1uoUkwWFLIzImw7gA==} + /meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + dev: true + + /meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.5 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + dev: true + + /merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} dependencies: - is-what: 4.1.7 - ts-toolbelt: 9.6.0 + is-what: 4.1.16 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true /merge2@1.4.1: @@ -1297,6 +3142,15 @@ packages: engines: {node: '>= 8'} dev: true + /micromark@2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + dependencies: + debug: 4.3.4 + parse-entities: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -1305,21 +3159,106 @@ packages: picomatch: 2.3.1 dev: true - /minimist@1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /nanoid@3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /node-releases@2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.13.1 + semver: 7.5.4 + validate-npm-package-license: 3.0.4 + dev: true /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -1331,15 +3270,186 @@ packages: engines: {node: '>=0.10.0'} dev: true + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} dev: true + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + dev: true + + /parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -1353,31 +3463,49 @@ packages: engines: {node: '>=0.10.0'} dev: true - /postcss-import@14.1.0(postcss@8.4.19): - resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} - engines: {node: '>=10.0.0'} + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 + dev: true + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /postcss-import@15.1.0(postcss@8.4.31): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.19 + postcss: 8.4.31 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.1 + resolve: 1.22.8 dev: true - /postcss-js@4.0.0(postcss@8.4.19): - resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + /postcss-js@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: ^8.3.3 + postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.19 + postcss: 8.4.31 dev: true - /postcss-load-config@3.1.4(postcss@8.4.19): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} + /postcss-load-config@4.0.2(postcss@8.4.31): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' ts-node: '>=9.0.0' @@ -1387,77 +3515,174 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.0.6 - postcss: 8.4.19 - yaml: 1.10.2 + lilconfig: 3.0.0 + postcss: 8.4.31 + yaml: 2.3.4 dev: true - /postcss-nested@6.0.0(postcss@8.4.19): - resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + /postcss-nested@6.0.1(postcss@8.4.31): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.11 + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 dev: true - /postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 + indent-string: 4.0.0 + strip-indent: 3.0.0 dev: true - /postcss-selector-parser@6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} - engines: {node: '>=4'} + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 + jsesc: 0.5.0 dev: true - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} dev: true - /postcss@8.4.19: - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.4 - picocolors: 1.0.0 - source-map-js: 1.0.2 + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} dev: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} dev: true - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + /resolve-global@1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} dependencies: - pify: 2.3.0 + global-dirs: 0.1.1 dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.10.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -1467,12 +3692,31 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rollup@2.77.3: - resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==} - engines: {node: '>=10.0.0'} + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup@4.6.1: + resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + '@rollup/rollup-android-arm-eabi': 4.6.1 + '@rollup/rollup-android-arm64': 4.6.1 + '@rollup/rollup-darwin-arm64': 4.6.1 + '@rollup/rollup-darwin-x64': 4.6.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.6.1 + '@rollup/rollup-linux-arm64-gnu': 4.6.1 + '@rollup/rollup-linux-arm64-musl': 4.6.1 + '@rollup/rollup-linux-x64-gnu': 4.6.1 + '@rollup/rollup-linux-x64-musl': 4.6.1 + '@rollup/rollup-win32-arm64-msvc': 4.6.1 + '@rollup/rollup-win32-ia32-msvc': 4.6.1 + '@rollup/rollup-win32-x64-msvc': 4.6.1 + fsevents: 2.3.3 dev: true /run-parallel@1.2.0: @@ -1481,114 +3725,290 @@ packages: queue-microtask: 1.2.3 dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true - /sass@1.56.2: - resolution: {integrity: sha512-ciEJhnyCRwzlBCB+h5cCPM6ie/6f8HrhZMQOf5vlU60Y1bI1rx5Zb0vlDZvaycHsg/MqFfF1Eq2eokAa32iw8w==} - engines: {node: '>=12.0.0'} + /sass@1.69.5: + resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} + engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.5.3 - immutable: 4.1.0 + immutable: 4.3.4 source-map-js: 1.0.2 dev: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /seroval@0.14.1: + resolution: {integrity: sha512-ZlC9y1KVDhZFdEHLYZup1RjKDutyX1tt3ffOauqRbRURa2vRr2NU/bHuVEuNEqR3zE2uCU3WM6LqH6Oinc3tWg==} + engines: {node: '>=10'} + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true - /solid-js@1.6.4: - resolution: {integrity: sha512-IfJJ1ejAcRTOEB0XXk/J8tzvVNZXAdEuHtWQwTXefUteZPGWOl4aVSOrkoj3y1bjwDayqok3+Vv3TV/j4IhKyw==} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /solid-js@1.8.6: + resolution: {integrity: sha512-yiH6ZfBBZ3xj/aU/PBpVKB+8r8WWp100NGF7k/Z0IrK9Y8Lv0jwvFiJY1cHdc6Tj7GqXArKnMBabM0m1k+LzkA==} dependencies: - csstype: 3.1.0 + csstype: 3.1.2 + seroval: 0.14.1 - /solid-refresh@0.4.1(solid-js@1.6.4): - resolution: {integrity: sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==} + /solid-refresh@0.5.3(solid-js@1.8.6): + resolution: {integrity: sha512-Otg5it5sjOdZbQZJnvo99TEBAr6J7PQ5AubZLNU6szZzg3RQQ5MX04oteBIIGDs0y2Qv8aXKm9e44V8z+UnFdw==} peerDependencies: solid-js: ^1.3 dependencies: - '@babel/generator': 7.18.7 - '@babel/helper-module-imports': 7.18.6 - '@babel/types': 7.18.8 - solid-js: 1.6.4 + '@babel/generator': 7.23.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/types': 7.23.5 + solid-js: 1.8.6 dev: true - /solid-styled@0.7.4(@babel/core@7.20.5)(solid-js@1.6.4): - resolution: {integrity: sha512-cxMgEiUl2+nTd6DFFiVeu+oLE5AYfxSqQAagvspiaWO+ZsNUTh0abcC3IoxorQkkOCPQmelk18EeJUAiNf6f7g==} + /solid-styled@0.10.0(solid-js@1.8.6): + resolution: {integrity: sha512-0oWaKuBCnpF72AkLeZ40jokmL3/P4hXrCqSNg5uEkut9nBRfZ+JeFGPu7+klCvKgEcBAFNESffdMh1+NwS/w2Q==} engines: {node: '>=12'} peerDependencies: - '@babel/core': ^7 solid-js: ^1 dependencies: - '@babel/core': 7.20.5 - '@babel/helper-module-imports': 7.18.6 - '@babel/traverse': 7.20.5 - '@babel/types': 7.20.5 - '@types/css-tree': 2.0.0 + '@babel/core': 7.23.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 + '@types/css-tree': 2.3.4 + browserslist: 4.22.1 css-tree: 2.3.1 - js-xxhash: 2.0.0 - solid-js: 1.6.4 + lightningcss: 1.22.1 + solid-js: 1.8.6 transitivePeerDependencies: - supports-color - /solid-toast@0.3.5(solid-js@1.6.4): - resolution: {integrity: sha512-m4PX2ESex9nSwt9d9XTr3r+Kp3vjSoViDWj3gj6Xxgz21IKYODMKhACXurlZCztz56NQBnfX2m4es4I8JgXGQQ==} + /solid-toast@0.5.0(solid-js@1.8.6): + resolution: {integrity: sha512-t770JakjyS2P9b8Qa1zMLOD51KYKWXbTAyJePVUoYex5c5FH5S/HtUBUbZAWFcqRCKmAE8KhyIiCvDZA8bOnxQ==} peerDependencies: solid-js: ^1.5.4 dependencies: - solid-js: 1.6.4 + solid-js: 1.8.6 dev: false /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + dependencies: + readable-stream: 3.6.2 + dev: true + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /tailwindcss@3.2.4(postcss@8.4.19): - resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} - engines: {node: '>=12.13.0'} + /tailwindcss@3.3.5: + resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} + engines: {node: '>=14.0.0'} hasBin: true - peerDependencies: - postcss: ^8.0.9 dependencies: + '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.5.3 - color-name: 1.1.4 - detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 + fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - lilconfig: 2.0.6 + jiti: 1.21.0 + lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.19 - postcss-import: 14.1.0(postcss@8.4.19) - postcss-js: 4.0.0(postcss@8.4.19) - postcss-load-config: 3.1.4(postcss@8.4.19) - postcss-nested: 6.0.0(postcss@8.4.19) - postcss-selector-parser: 6.0.11 - postcss-value-parser: 4.2.0 - quick-lru: 5.1.1 - resolve: 1.22.1 + postcss: 8.4.31 + postcss-import: 15.1.0(postcss@8.4.31) + postcss-js: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.2(postcss@8.4.31) + postcss-nested: 6.0.1(postcss@8.4.31) + postcss-selector-parser: 6.0.13 + resolve: 1.22.8 + sucrase: 3.34.0 transitivePeerDependencies: - ts-node dev: true + /text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.2 + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -1600,109 +4020,328 @@ packages: is-number: 7.0.0 dev: true - /ts-toolbelt@9.6.0: - resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} dev: true - /typescript@4.8.2: - resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==} - engines: {node: '>=4.2.0'} - hasBin: true + /ts-api-utils@1.0.3(typescript@5.3.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.3.2 + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.4): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + engines: {node: '>=14.17'} hasBin: true + dev: true + + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + dev: true + + /unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + dependencies: + '@types/unist': 2.0.10 + dev: true + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /unplugin-solid-styled@0.10.0(solid-styled@0.10.0)(vite@5.0.4): + resolution: {integrity: sha512-MlZhF24r8/+OlASy1fQ0APDtzNPBOe6S7/jve7lRzAm4IFBUNOhrM1SMHQqf1wZ4TO8+zkeENe3ybI7DREz+EQ==} + engines: {node: '>=10'} peerDependencies: - browserslist: '>= 4.21.0' + solid-styled: '>=0.9' + vite: ^3 || ^4 || ^5 + peerDependenciesMeta: + vite: + optional: true dependencies: - browserslist: 4.21.4 - escalade: 3.1.1 - picocolors: 1.0.0 + '@rollup/pluginutils': 5.1.0 + solid-styled: 0.10.0(solid-js@1.8.6) + unplugin: 1.5.1 + vite: 5.0.4(@types/node@18.19.0)(sass@1.69.5) + transitivePeerDependencies: + - rollup + dev: true + + /unplugin@1.5.1: + resolution: {integrity: sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==} + dependencies: + acorn: 8.11.2 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + dev: true - /update-browserslist-db@1.0.4(browserslist@4.21.2): - resolution: {integrity: sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==} + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.2 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /vite-plugin-solid-styled@0.7.4(solid-styled@0.7.4)(vite@3.0.9): - resolution: {integrity: sha512-A+m3CuBmYbDWS+ouDOxwaRD5UTv6ZIItoE5HeUzvOlDallrwD6dxFI3U7lEp4Vjz5Wcvo/sE5uqQKY3peOfkFQ==} + /validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /vite-plugin-solid-styled@0.10.0(solid-styled@0.10.0)(vite@5.0.4): + resolution: {integrity: sha512-NrTrLRZCcudvTuG/nrstnTPWZuP7I07tHPEx+O8w4Bh2lSAogGnYcBjBW62+RUOD11TckxGVzO8ReWMWFTb1Eg==} engines: {node: '>=10'} peerDependencies: - solid-styled: '>=0.7' - vite: ^3 - dependencies: - '@babel/core': 7.20.5 - '@babel/preset-typescript': 7.18.6(@babel/core@7.20.5) - '@rollup/pluginutils': 5.0.2 - solid-styled: 0.7.4(@babel/core@7.20.5)(solid-js@1.6.4) - vite: 3.0.9(sass@1.56.2) + solid-styled: '>=0.9' + vite: ^3 || ^4 || ^5 + dependencies: + solid-styled: 0.10.0(solid-js@1.8.6) + unplugin-solid-styled: 0.10.0(solid-styled@0.10.0)(vite@5.0.4) + vite: 5.0.4(@types/node@18.19.0)(sass@1.69.5) transitivePeerDependencies: - rollup - - supports-color dev: true - /vite-plugin-solid@2.3.0(solid-js@1.6.4)(vite@3.0.9): - resolution: {integrity: sha512-N2sa54C3UZC2nN5vpj5o6YP+XdIAZW6n6xv8OasxNAcAJPFeZT7EOVvumL0V4c8hBz1yuYniMWdESY8807fVSg==} + /vite-plugin-solid@2.7.2(solid-js@1.8.6)(vite@5.0.4): + resolution: {integrity: sha512-GV2SMLAibOoXe76i02AsjAg7sbm/0lngBlERvJKVN67HOrJsHcWgkt0R6sfGLDJuFkv2aBe14Zm4vJcNME+7zw==} peerDependencies: - solid-js: ^1.3.17 - vite: ^3.0.0 - dependencies: - '@babel/core': 7.18.6 - '@babel/preset-typescript': 7.18.6(@babel/core@7.18.6) - babel-preset-solid: 1.4.6(@babel/core@7.18.6) - merge-anything: 5.0.2 - solid-js: 1.6.4 - solid-refresh: 0.4.1(solid-js@1.6.4) - vite: 3.0.9(sass@1.56.2) + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.5) + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.8.6(@babel/core@7.23.5) + merge-anything: 5.1.7 + solid-js: 1.8.6 + solid-refresh: 0.5.3(solid-js@1.8.6) + vite: 5.0.4(@types/node@18.19.0)(sass@1.69.5) + vitefu: 0.2.5(vite@5.0.4) transitivePeerDependencies: - supports-color dev: true - /vite@3.0.9(sass@1.56.2): - resolution: {integrity: sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==} - engines: {node: ^14.18.0 || >=16.0.0} + /vite@5.0.4(@types/node@18.19.0)(sass@1.69.5): + resolution: {integrity: sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 less: '*' + lightningcss: ^1.21.0 sass: '*' stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: + '@types/node': + optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: optional: true + sugarss: + optional: true terser: optional: true dependencies: - esbuild: 0.14.54 - postcss: 8.4.19 - resolve: 1.22.1 - rollup: 2.77.3 - sass: 1.56.2 + '@types/node': 18.19.0 + esbuild: 0.19.8 + postcss: 8.4.31 + rollup: 4.6.1 + sass: 1.69.5 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} + /vitefu@0.2.5(vite@5.0.4): + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 5.0.4(@types/node@18.19.0)(sass@1.69.5) dev: true - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} + /vue-eslint-parser@9.3.2(eslint@8.54.0): + resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 8.54.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml-eslint-parser@1.2.2: + resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} + engines: {node: ^14.17.0 || >=16.0.0} + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.3.4 + dev: true + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} dev: true diff --git a/postcss.config.js b/postcss.config.js index 33ad091..7b75c83 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,6 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/commitlint.config.js b/public/commitlint.config.js new file mode 100644 index 0000000..79d6271 --- /dev/null +++ b/public/commitlint.config.js @@ -0,0 +1,6 @@ +export default { + extends: '@commitlint/config-conventional', + rules: { + 'subject-case': [2, 'always', 'sentence-case'], + }, +}; diff --git a/src/App.tsx b/src/App.tsx index 54d6ea0..82eb03b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,63 +1,64 @@ -import { Component, JSXElement, onMount } from 'solid-js'; -import { Routes, Route } from "@solidjs/router" -import NavBar from "./components/layouts/navBar"; +import type { Component } from 'solid-js'; +import { onMount } from 'solid-js'; +import { Route, Routes } from '@solidjs/router'; +import { Toaster } from 'solid-toast'; +import NavBar from './components/layouts/navBar'; import ColorTablePage from './pages/colorTablePage'; import ComingSoonPage from './pages/comingSoonPage'; import Footer from './components/layouts/footer'; -import { Toaster } from 'solid-toast'; import PlaygroundRoutes from './components/playground/playgroundRoutes'; import KeyHandler from './functions/keyHandler'; -import ColorGenerationPage from "./pages/colorGenerationPage"; +import ColorGenerationPage from './pages/colorGenerationPage'; const App: Component = () => { + onMount(() => { + let ASCII = ` + █████ ███ ███ ██████ ██ ███████ ███ ██ ████████ + ██ ██ ████ ████ ██ ██ ██ ██ ████ ██ ██ + ███████ ██ ████ ██ ██████ ██ █████ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██████ ██ ███████ ██ ████ ██ + `; - onMount(() => { - let ASCII = ` - █████ ███ ███ ██████ ██ ███████ ███ ██ ████████ - ██ ██ ████ ████ ██ ██ ██ ██ ████ ██ ██ - ███████ ██ ████ ██ ██████ ██ █████ ██ ██ ██ ██ - ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ - ██ ██ ██ ██ ██████ ██ ███████ ██ ████ ██ - ` - - ASCII += `\n Using Ambient at work? Work with me on your next project! + ASCII += `\n Using Ambient at work? Work with me on your next project! https://kevintyj.com - ` - console.log(`%c${ASCII}`, `font-family: monospace; color: #F13D52; `) - }) + `; + // eslint-disable-next-line no-console + console.log(`%c${ASCII}`, `font-family: monospace; color: #F13D52; `); + }); - return ( - <> - <KeyHandler/> - <Toaster - position='bottom-right' - gutter={8} - containerClassName="" - containerStyle={{}} - toastOptions={{ - className: '', - duration: 2000 - }} - /> - <div class='flex flex-col z-50 min-h-screen justify-between bg-white dark:bg-[#181819]'> - <NavBar/> - <main role={"main"} class='my-auto lg:px-4'> - <div class="h-14"> - </div> - <Routes> - <Route path={"/"} component={ColorTablePage}/> - <Route path={"/gen"} component={ColorGenerationPage}/> - <PlaygroundRoutes/> - <Route path={"/coming-soon"} component={ComingSoonPage}/> - <Route path={"/*"} component={ComingSoonPage}/> - </Routes> - <div class="h-20"> - </div> - </main> - <Footer/> - </div> - </> - ); + return ( + <> + <KeyHandler /> + <Toaster + position="bottom-right" + gutter={8} + containerClassName="" + containerStyle={{}} + toastOptions={{ + className: '', + duration: 2000, + }} + /> + <div class="flex flex-col z-50 min-h-screen justify-between bg-white dark:bg-[#181819]"> + <NavBar /> + <main role="main" class="my-auto lg:px-4"> + <div class="h-14"> + </div> + <Routes> + <Route path="/" component={ColorTablePage} /> + <Route path="/gen" component={ColorGenerationPage} /> + <PlaygroundRoutes /> + <Route path="/coming-soon" component={ComingSoonPage} /> + <Route path={'/*'} component={ComingSoonPage} /> + </Routes> + <div class="h-20"> + </div> + </main> + <Footer /> + </div> + </> + ); }; export default App; diff --git a/src/assets/color.tsx b/src/assets/color.tsx index 0a1aee8..9c024ea 100644 --- a/src/assets/color.tsx +++ b/src/assets/color.tsx @@ -1,372 +1,371 @@ -import { createMemo } from "solid-js"; -import { darkMode } from "../components/shared/darkModeToggle"; -import { colorsToArr } from "../functions/colorConfig"; +import { darkMode } from '../components/shared/darkModeToggle'; +import { colorsToArr } from '../functions/colorConfig'; export const BaseColorScaleDark: Record<string, Record<string, string>> = { - "NEUTRAL": { - "00": "#1b1d1c", - "01": "#262727", - "02": "#414342", - "03": "#585a59", - "04": "#747776", - "05": "#a0a2a1", - "06": "#abadac", - "07": "#b2b4b3", - "08": "#c9cbca", - "09": "#eff1f0", - }, - "OCEAN": { - "100": "#171c24", - "200": "#172336", - "300": "#152a46", - "400": "#143355", - "500": "#0a64ae", - "600": "#0679d2", - "700": "#1893f6", - "800": "#4caafa", - "900": "#72bcfb", - "1000": "#c2e2fd" - }, - "BLUE": { - "100": "#181923", - "200": "#171a33", - "300": "#171b42", - "400": "#16204f", - "500": "#1235a1", - "600": "#1b41c1", - "700": "#2b50e2", - "800": "#5670e5", - "900": "#788bea", - "1000": "#c5cdf6" - }, - "INDIGO": { - "100": "#171721", - "200": "#15152e", - "300": "#14133b", - "400": "#1a1147", - "500": "#2d088e", - "600": "#3b05aa", - "700": "#4c0cc7", - "800": "#6e3cd0", - "900": "#8960d7", - "1000": "#ccbaee" - }, - "VIOLET": { - "100": "#1a1721", - "200": "#1d162f", - "300": "#21143b", - "400": "#291747", - "500": "#4a1d8b", - "600": "#5a24a6", - "700": "#6d2fc2", - "800": "#8756cb", - "900": "#9d75d4", - "1000": "#d5c3ec" - }, - "CRIMSON": { - "100": "#21171d", - "200": "#2f1521", - "300": "#3d1327", - "400": "#4c172f", - "500": "#9e285a", - "600": "#bf346d", - "700": "#e14785", - "800": "#ea6c9e", - "900": "#f189b2", - "1000": "#f9ccde" - }, - "WINE": { - "100": "#1d1719", - "200": "#251517", - "300": "#2e1316", - "400": "#371118", - "500": "#6d0721", - "600": "#840928", - "700": "#9d1635", - "800": "#af4259", - "900": "#bf6577", - "1000": "#e3bcc4" - }, - "RED": { - "100": "#1f1719", - "200": "#2a1517", - "300": "#351315", - "400": "#411116", - "500": "#870819", - "600": "#a30f21", - "700": "#c31f2e", - "800": "#d04b56", - "900": "#db6f75", - "1000": "#efc1c3" - }, - "SUN": { - "100": "#211719", - "200": "#2f1517", - "300": "#3e1316", - "400": "#4c1517", - "500": "#a3201b", - "600": "#c62c23", - "700": "#ea3e33", - "800": "#f1655c", - "900": "#f6837b", - "1000": "#fbcac6" - }, - "ORANGE": { - "100": "#221a19", - "200": "#341c16", - "300": "#442114", - "400": "#532813", - "500": "#b04e08", - "600": "#d56004", - "700": "#fb7912", - "800": "#fd9644", - "900": "#fead6a", - "1000": "#fedbbf" - }, - "YELLOW": { - "100": "#211f19", - "200": "#322916", - "300": "#413414", - "400": "#504013", - "500": "#ab8508", - "600": "#cfa306", - "700": "#f8c51a", - "800": "#fcd756", - "900": "#fde484", - "1000": "#fef3ca" - }, - "SAPLING": { - "100": "#1d1f19", - "200": "#242b16", - "300": "#2c3614", - "400": "#364218", - "500": "#6d8925", - "600": "#84a82e", - "700": "#a2c940", - "800": "#bad76f", - "900": "#cde492", - "1000": "#e9f3d0" - }, - "GREEN": { - "100": "#171d1b", - "200": "#15261a", - "300": "#132f1b", - "400": "#113920", - "500": "#077233", - "600": "#048b3f", - "700": "#0da750", - "800": "#45ba75", - "900": "#6fca92", - "1000": "#c1e8d0" - }, - "AURORA": { - "100": "#171f1f", - "200": "#152b28", - "300": "#133730", - "400": "#12433a", - "500": "#1c8b74", - "600": "#28a98d", - "700": "#3bcbab", - "800": "#6cd9c0", - "900": "#90e4d1", - "1000": "#cff3eb" - }, - "CYAN": { - "100": "#171f22", - "200": "#152a30", - "300": "#13363d", - "400": "#11414a", - "500": "#078899", - "600": "#04a6b9", - "700": "#09c8de", - "800": "#4ed7e9", - "900": "#7ce4f1", - "1000": "#c6f3f9" - } -} + NEUTRAL: { + '00': '#1b1d1c', + '01': '#262727', + '02': '#414342', + '03': '#585a59', + '04': '#747776', + '05': '#a0a2a1', + '06': '#abadac', + '07': '#b2b4b3', + '08': '#c9cbca', + '09': '#eff1f0', + }, + OCEAN: { + 100: '#171c24', + 200: '#172336', + 300: '#152a46', + 400: '#143355', + 500: '#0a64ae', + 600: '#0679d2', + 700: '#1893f6', + 800: '#4caafa', + 900: '#72bcfb', + 1000: '#c2e2fd', + }, + BLUE: { + 100: '#181923', + 200: '#171a33', + 300: '#171b42', + 400: '#16204f', + 500: '#1235a1', + 600: '#1b41c1', + 700: '#2b50e2', + 800: '#5670e5', + 900: '#788bea', + 1000: '#c5cdf6', + }, + INDIGO: { + 100: '#171721', + 200: '#15152e', + 300: '#14133b', + 400: '#1a1147', + 500: '#2d088e', + 600: '#3b05aa', + 700: '#4c0cc7', + 800: '#6e3cd0', + 900: '#8960d7', + 1000: '#ccbaee', + }, + VIOLET: { + 100: '#1a1721', + 200: '#1d162f', + 300: '#21143b', + 400: '#291747', + 500: '#4a1d8b', + 600: '#5a24a6', + 700: '#6d2fc2', + 800: '#8756cb', + 900: '#9d75d4', + 1000: '#d5c3ec', + }, + CRIMSON: { + 100: '#21171d', + 200: '#2f1521', + 300: '#3d1327', + 400: '#4c172f', + 500: '#9e285a', + 600: '#bf346d', + 700: '#e14785', + 800: '#ea6c9e', + 900: '#f189b2', + 1000: '#f9ccde', + }, + WINE: { + 100: '#1d1719', + 200: '#251517', + 300: '#2e1316', + 400: '#371118', + 500: '#6d0721', + 600: '#840928', + 700: '#9d1635', + 800: '#af4259', + 900: '#bf6577', + 1000: '#e3bcc4', + }, + RED: { + 100: '#1f1719', + 200: '#2a1517', + 300: '#351315', + 400: '#411116', + 500: '#870819', + 600: '#a30f21', + 700: '#c31f2e', + 800: '#d04b56', + 900: '#db6f75', + 1000: '#efc1c3', + }, + SUN: { + 100: '#211719', + 200: '#2f1517', + 300: '#3e1316', + 400: '#4c1517', + 500: '#a3201b', + 600: '#c62c23', + 700: '#ea3e33', + 800: '#f1655c', + 900: '#f6837b', + 1000: '#fbcac6', + }, + ORANGE: { + 100: '#221a19', + 200: '#341c16', + 300: '#442114', + 400: '#532813', + 500: '#b04e08', + 600: '#d56004', + 700: '#fb7912', + 800: '#fd9644', + 900: '#fead6a', + 1000: '#fedbbf', + }, + YELLOW: { + 100: '#211f19', + 200: '#322916', + 300: '#413414', + 400: '#504013', + 500: '#ab8508', + 600: '#cfa306', + 700: '#f8c51a', + 800: '#fcd756', + 900: '#fde484', + 1000: '#fef3ca', + }, + SAPLING: { + 100: '#1d1f19', + 200: '#242b16', + 300: '#2c3614', + 400: '#364218', + 500: '#6d8925', + 600: '#84a82e', + 700: '#a2c940', + 800: '#bad76f', + 900: '#cde492', + 1000: '#e9f3d0', + }, + GREEN: { + 100: '#171d1b', + 200: '#15261a', + 300: '#132f1b', + 400: '#113920', + 500: '#077233', + 600: '#048b3f', + 700: '#0da750', + 800: '#45ba75', + 900: '#6fca92', + 1000: '#c1e8d0', + }, + AURORA: { + 100: '#171f1f', + 200: '#152b28', + 300: '#133730', + 400: '#12433a', + 500: '#1c8b74', + 600: '#28a98d', + 700: '#3bcbab', + 800: '#6cd9c0', + 900: '#90e4d1', + 1000: '#cff3eb', + }, + CYAN: { + 100: '#171f22', + 200: '#152a30', + 300: '#13363d', + 400: '#11414a', + 500: '#078899', + 600: '#04a6b9', + 700: '#09c8de', + 800: '#4ed7e9', + 900: '#7ce4f1', + 1000: '#c6f3f9', + }, +}; const BaseColorScaleLight: Record<string, Record<string, string>> = { - "NEUTRAL": { - "00": "#f3f5f3", - "01": "#eff1f0", - "02": "#d0d2d1", - "03": "#c2c5c4", - "04": "#9b9d9c", - "05": "#747776", - "06": "#585a59", - "07": "#414342", - "08": "#262727", - "09": "#1b1d1c", - }, - "OCEAN": { - "00": "#f3fcff", - "01": "#e4f6fe", - "02": "#cfeafd", - "03": "#badefd", - "04": "#68b7fa", - "05": "#4eabfa", - "06": "#1893f6", - "07": "#036abe", - "08": "#06488d", - "09": "#03284e", - }, - "BLUE": { - "00": "#f2f3fc", - "01": "#e3e6f9", - "02": "#d0d5f6", - "03": "#bdc6f5", - "04": "#7085ea", - "05": "#5872e6", - "06": "#2b50e2", - "07": "#0c35af", - "08": "#0b1f82", - "09": "#061148", - }, - "INDIGO": { - "00": "#f4eefa", - "01": "#e7dcf6", - "02": "#d6c5f2", - "03": "#c5b1ec", - "04": "#8357d7", - "05": "#6f3ed0", - "06": "#4c0cc7", - "07": "#2b0199", - "08": "#130070", - "09": "#0a003d", - }, - "VIOLET": { - "00": "#f6f1fb", - "01": "#ece1f6", - "02": "#ddcdf2", - "03": "#cfbbeb", - "04": "#996dd4", - "05": "#8958cc", - "06": "#6d2fc2", - "07": "#4d1996", - "08": "#320b6f", - "09": "#1c063d", - }, - "CRIMSON": { - "00": "#fdf5fa", - "01": "#fce8f2", - "02": "#fad7e6", - "03": "#f9c5d9", - "04": "#f082ad", - "05": "#ea6e9f", - "06": "#e14785", - "07": "#ac265e", - "08": "#7d0d3c", - "09": "#450721", - }, - "WINE": { - "00": "#faeff1", - "01": "#f4dde1", - "02": "#ebc7ce", - "03": "#e0b3bc", - "04": "#bc5d71", - "05": "#b0445b", - "06": "#9d1635", - "07": "#75001d", - "08": "#52000c", - "09": "#2d0007", - }, - "RED": { - "00": "#fcf1f1", - "01": "#f8e0e0", - "02": "#f5cbcd", - "03": "#eeb8bb", - "04": "#d9666d", - "05": "#d04d58", - "06": "#c31f2e", - "07": "#920114", - "08": "#660007", - "09": "#380004", - }, - "SUN": { - "00": "#fef4f2", - "01": "#fde7e3", - "02": "#fbd4d0", - "03": "#fbc2be", - "04": "#f67c73", - "05": "#f1675e", - "06": "#ea3e33", - "07": "#b21c16", - "08": "#7f0808", - "09": "#460405", - }, - "ORANGE": { - "00": "#fffaf2", - "01": "#fff2e1", - "02": "#fee5cb", - "03": "#fed7b6", - "04": "#fda660", - "05": "#fd9746", - "06": "#fb7912", - "07": "#c15100", - "08": "#8e3100", - "09": "#4e1b00", - }, - "YELLOW": { - "00": "#fffef8", - "01": "#fffcec", - "02": "#fefad9", - "03": "#fef2c3", - "04": "#fde177", - "05": "#fcd758", - "06": "#f8c51a", - "07": "#bb9000", - "08": "#866400", - "09": "#4a3700", - }, - "SAPLING": { - "00": "#fdfef8", - "01": "#f9fced", - "02": "#f2f9dd", - "03": "#e7f2ca", - "04": "#c8e188", - "05": "#bbd870", - "06": "#a2c940", - "07": "#749521", - "08": "#4e690b", - "09": "#2b3a06", - }, - "GREEN": { - "00": "#f3fbf6", - "01": "#e3f7ea", - "02": "#cef0da", - "03": "#b8e5ca", - "04": "#64c68b", - "05": "#47bb77", - "06": "#0da750", - "07": "#007a32", - "08": "#00561c", - "09": "#002f0f", - }, - "AURORA": { - "00": "#f8fefd", - "01": "#edfbfa", - "02": "#dcf9f3", - "03": "#c9f3e9", - "04": "#86e3cd", - "05": "#6edac1", - "06": "#3bcbab", - "07": "#18967c", - "08": "#026a55", - "09": "#013a2f", - }, - "CYAN": { - "00": "#f6fefe", - "01": "#e9fcfd", - "02": "#d6f9fb", - "03": "#bff2f9", - "04": "#70e1f0", - "05": "#50d8e9", - "06": "#09c8de", - "07": "#0093a6", - "08": "#006776", - "09": "#003941", - } -} + NEUTRAL: { + '00': '#f3f5f3', + '01': '#eff1f0', + '02': '#d0d2d1', + '03': '#c2c5c4', + '04': '#9b9d9c', + '05': '#747776', + '06': '#585a59', + '07': '#414342', + '08': '#262727', + '09': '#1b1d1c', + }, + OCEAN: { + '00': '#f3fcff', + '01': '#e4f6fe', + '02': '#cfeafd', + '03': '#badefd', + '04': '#68b7fa', + '05': '#4eabfa', + '06': '#1893f6', + '07': '#036abe', + '08': '#06488d', + '09': '#03284e', + }, + BLUE: { + '00': '#f2f3fc', + '01': '#e3e6f9', + '02': '#d0d5f6', + '03': '#bdc6f5', + '04': '#7085ea', + '05': '#5872e6', + '06': '#2b50e2', + '07': '#0c35af', + '08': '#0b1f82', + '09': '#061148', + }, + INDIGO: { + '00': '#f4eefa', + '01': '#e7dcf6', + '02': '#d6c5f2', + '03': '#c5b1ec', + '04': '#8357d7', + '05': '#6f3ed0', + '06': '#4c0cc7', + '07': '#2b0199', + '08': '#130070', + '09': '#0a003d', + }, + VIOLET: { + '00': '#f6f1fb', + '01': '#ece1f6', + '02': '#ddcdf2', + '03': '#cfbbeb', + '04': '#996dd4', + '05': '#8958cc', + '06': '#6d2fc2', + '07': '#4d1996', + '08': '#320b6f', + '09': '#1c063d', + }, + CRIMSON: { + '00': '#fdf5fa', + '01': '#fce8f2', + '02': '#fad7e6', + '03': '#f9c5d9', + '04': '#f082ad', + '05': '#ea6e9f', + '06': '#e14785', + '07': '#ac265e', + '08': '#7d0d3c', + '09': '#450721', + }, + WINE: { + '00': '#faeff1', + '01': '#f4dde1', + '02': '#ebc7ce', + '03': '#e0b3bc', + '04': '#bc5d71', + '05': '#b0445b', + '06': '#9d1635', + '07': '#75001d', + '08': '#52000c', + '09': '#2d0007', + }, + RED: { + '00': '#fcf1f1', + '01': '#f8e0e0', + '02': '#f5cbcd', + '03': '#eeb8bb', + '04': '#d9666d', + '05': '#d04d58', + '06': '#c31f2e', + '07': '#920114', + '08': '#660007', + '09': '#380004', + }, + SUN: { + '00': '#fef4f2', + '01': '#fde7e3', + '02': '#fbd4d0', + '03': '#fbc2be', + '04': '#f67c73', + '05': '#f1675e', + '06': '#ea3e33', + '07': '#b21c16', + '08': '#7f0808', + '09': '#460405', + }, + ORANGE: { + '00': '#fffaf2', + '01': '#fff2e1', + '02': '#fee5cb', + '03': '#fed7b6', + '04': '#fda660', + '05': '#fd9746', + '06': '#fb7912', + '07': '#c15100', + '08': '#8e3100', + '09': '#4e1b00', + }, + YELLOW: { + '00': '#fffef8', + '01': '#fffcec', + '02': '#fefad9', + '03': '#fef2c3', + '04': '#fde177', + '05': '#fcd758', + '06': '#f8c51a', + '07': '#bb9000', + '08': '#866400', + '09': '#4a3700', + }, + SAPLING: { + '00': '#fdfef8', + '01': '#f9fced', + '02': '#f2f9dd', + '03': '#e7f2ca', + '04': '#c8e188', + '05': '#bbd870', + '06': '#a2c940', + '07': '#749521', + '08': '#4e690b', + '09': '#2b3a06', + }, + GREEN: { + '00': '#f3fbf6', + '01': '#e3f7ea', + '02': '#cef0da', + '03': '#b8e5ca', + '04': '#64c68b', + '05': '#47bb77', + '06': '#0da750', + '07': '#007a32', + '08': '#00561c', + '09': '#002f0f', + }, + AURORA: { + '00': '#f8fefd', + '01': '#edfbfa', + '02': '#dcf9f3', + '03': '#c9f3e9', + '04': '#86e3cd', + '05': '#6edac1', + '06': '#3bcbab', + '07': '#18967c', + '08': '#026a55', + '09': '#013a2f', + }, + CYAN: { + '00': '#f6fefe', + '01': '#e9fcfd', + '02': '#d6f9fb', + '03': '#bff2f9', + '04': '#70e1f0', + '05': '#50d8e9', + '06': '#09c8de', + '07': '#0093a6', + '08': '#006776', + '09': '#003941', + }, +}; export const colors = () => darkMode() ? BaseColorScaleDark : BaseColorScaleLight; export const colorsArr = () => colorsToArr(colors()); diff --git a/src/assets/components/button.styled.tsx b/src/assets/components/button.styled.tsx index f53e514..2ead0ae 100644 --- a/src/assets/components/button.styled.tsx +++ b/src/assets/components/button.styled.tsx @@ -1,16 +1,16 @@ -import {ParentComponent} from "solid-js"; +import type { ParentComponent } from 'solid-js'; type IButtonProps = ParentComponent< & { - square?: boolean; - aria: string; - type?: "button" | "submit" | "reset" | undefined; + square?: boolean + aria: string + type?: 'button' | 'submit' | 'reset' | undefined }>; const Button: IButtonProps = (props) => { - return ( - <button - aria-label={props.aria} - class="font-medium text-sm rounded-md pb-1.5 + return ( + <button + aria-label={props.aria} + class="font-medium text-sm rounded-md pb-1.5 bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 border-7-neutral-300 dark:border-t-neutral-700/50 @@ -19,10 +19,12 @@ const Button: IButtonProps = (props) => { active:border-neutral-300 dark:active:border-neutral-700 active:translate-y-px" - classList={{'w-8 h-8 px-0': props.square}} type={props.type}> - {props.children} - </button> - ) -} + classList={{ 'w-8 h-8 px-0': props.square }} + type={props.type} + > + {props.children} + </button> + ); +}; export default Button; diff --git a/src/assets/components/collapsible.styled.tsx b/src/assets/components/collapsible.styled.tsx index c8c0ce8..7660b3a 100644 --- a/src/assets/components/collapsible.styled.tsx +++ b/src/assets/components/collapsible.styled.tsx @@ -1,19 +1,19 @@ -import {createSignal, ParentComponent} from "solid-js"; +import type { ParentComponent } from 'solid-js'; +import { createSignal } from 'solid-js'; type ICollapsibleProps = ParentComponent< & { - title: string; + title: string }>; const Collapsible: ICollapsibleProps = (props) => { + const [state, setState] = createSignal(false); - const [state, setState] = createSignal(false) + const handleState = () => { + setState(!state()); + }; - const handleState = () => { - setState(!state()) - } - - return ( - <div class="font-medium rounded-md + return ( + <div class="font-medium rounded-md bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 border-7-neutral-300 dark:border-t-neutral-700/50 @@ -21,20 +21,22 @@ const Collapsible: ICollapsibleProps = (props) => { hover:shadow hover:border-neutral-300 dark:hover:border-neutral-700 active:border-neutral-300 dark:active:border-neutral-700 - flex flex-col transition-all"> - <button aria-label={props.title} class="flex text-default sm:text-lg justify-between py-2.5 px-3 sm:px-5" onClick={handleState}> - {props.title} - <i class={`bi text-lg ${state() ? 'bi-chevron-down' : 'bi-chevron-up'}`}></i> - </button> - <div class={`h-auto overflow-hidden max-h-0 transition-all duration-[400ms] - ${state() ? 'max-h-[2000px]' : ''}`}> - <div class="px-3 sm:px-5"> - <div class="border-t border-neutral-200 dark:border-neutral-700 pb-4"></div> - {props.children} - </div> - </div> - </div> - ) -} + flex flex-col transition-all" + > + <button aria-label={props.title} class="flex text-default sm:text-lg justify-between py-2.5 px-3 sm:px-5" onClick={handleState}> + {props.title} + <i class={`bi text-lg ${state() ? 'bi-chevron-down' : 'bi-chevron-up'}`}></i> + </button> + <div class={`h-auto overflow-hidden max-h-0 transition-all duration-[400ms] + ${state() ? 'max-h-[2000px]' : ''}`} + > + <div class="px-3 sm:px-5"> + <div class="border-t border-neutral-200 dark:border-neutral-700 pb-4"></div> + {props.children} + </div> + </div> + </div> + ); +}; export default Collapsible; diff --git a/src/assets/components/colorIdentifier.scss b/src/assets/components/colorIdentifier.scss index ec4d32f..e741707 100644 --- a/src/assets/components/colorIdentifier.scss +++ b/src/assets/components/colorIdentifier.scss @@ -15,6 +15,6 @@ right: -1.5px; border-radius: 6px; border: 2.5px solid #fff; - box-shadow: 0px 0px 2px 0px #00000032, inset 0px 0px 2px 0px #00000032; + box-shadow: 0 0 2px 0 #00000032, inset 0 0 2px 0 #00000032; } -} \ No newline at end of file +} diff --git a/src/assets/components/colorIdentifier.styled.tsx b/src/assets/components/colorIdentifier.styled.tsx index 0994d57..27350d0 100644 --- a/src/assets/components/colorIdentifier.styled.tsx +++ b/src/assets/components/colorIdentifier.styled.tsx @@ -1,36 +1,32 @@ -import {JSX, ParentComponent, splitProps} from "solid-js"; +import type { ParentComponent } from 'solid-js'; -import './colorIdentifier.scss' +import './colorIdentifier.scss'; type IColorIdentifier = ParentComponent< & { - color?: string; - textColor?: string; - class?: string; - tabindex?: number; - onClick?: any; + color?: string + textColor?: string + class?: string + tabindex?: number + onClick?: any } >; - const ColorIdentifier: IColorIdentifier = (props) => { - - const [local, others] = splitProps(props, ['children', 'color', 'textColor', 'class', 'tabindex']); - - return ( - <div - tabindex={props.tabindex} - onClick={props.onClick} - class={` - color-identifier ${props.class ? props.class : '' } + return ( + <div + tabindex={props.tabindex} + onClick={props.onClick} + class={` + color-identifier ${props.class ? props.class : ''} `} - style={` + style={` background-color: ${props.color ? props.color : 'white'}; color: ${props.textColor ? props.textColor : 'black'} `} - > - {props.children} - </div> - ) -} + > + {props.children} + </div> + ); +}; export default ColorIdentifier; diff --git a/src/assets/components/documentationMenu.styled.tsx b/src/assets/components/documentationMenu.styled.tsx index c5d537c..26b8e59 100644 --- a/src/assets/components/documentationMenu.styled.tsx +++ b/src/assets/components/documentationMenu.styled.tsx @@ -1,51 +1,58 @@ -import { A, useLocation } from "@solidjs/router"; -import { Component, createMemo, For, ParentComponent, Show } from "solid-js"; +import { A, useLocation } from '@solidjs/router'; +import type { Component, ParentComponent } from 'solid-js'; +import { For, Show } from 'solid-js'; type IMenuItemProps = ParentComponent< & { - link: string; - selected?: boolean; + link: string + selected?: boolean }>; type IMenuListProps = Component< & { - list: Record<string, string>; - parentPath?: string; - default?: string; + list: Record<string, string> + parentPath?: string + default?: string }>; const MenuItem: IMenuItemProps = (props) => { - return ( - <A href={props.link} - class="pl-3 py-1" - classList={{'-ml-px text-am-pink dark:text-am-pink-light font-semibold border-l-2 border-am-pink dark:border-am-pink-light': props.selected}}> - {props.children} - </A> - ) -} + return ( + <A + href={props.link} + class="pl-3 py-1" + classList={{ '-ml-px text-am-pink dark:text-am-pink-light font-semibold border-l-2 border-am-pink dark:border-am-pink-light': props.selected }} + > + {props.children} + </A> + ); +}; const DocumentationMenuList: IMenuListProps = (props) => { + const pathname = () => useLocation().pathname; - const pathname = () => useLocation().pathname; - - return ( - <div class="flex flex-col"> - <For each={Object.entries(props.list)}>{([item, link]) => - <Show - when={link && link != ""} - fallback={<h3 class="font-semibold font-display text-slate-800 dark:text-slate-200 pb-3.5 pt-5"> - {item} - </h3>} - > - <div class="h-7 border-l border-neutral-200 dark:border-neutral-800 + return ( + <div class="flex flex-col"> + <For each={Object.entries(props.list)}> + {([item, link]) => ( + <Show + when={link && link !== ''} + fallback={( + <h3 class="font-semibold font-display text-slate-800 dark:text-slate-200 pb-3.5 pt-5"> + {item} + </h3> + )} + > + <div class="h-7 border-l border-neutral-200 dark:border-neutral-800 text-slate-500 dark:text-neutral-400 hover:text-slate-600 hover:dark:text-neutral-400 - transition-all"> - <MenuItem selected={link == pathname()} link={link}> - {item} - </MenuItem> - </div> - </Show> - }</For> - </div> - ) -} + transition-all" + > + <MenuItem selected={link === pathname()} link={link}> + {item} + </MenuItem> + </div> + </Show> + )} + </For> + </div> + ); +}; -export default DocumentationMenuList +export default DocumentationMenuList; diff --git a/src/assets/components/select.styled.tsx b/src/assets/components/select.styled.tsx index 09e38ad..70f47bc 100644 --- a/src/assets/components/select.styled.tsx +++ b/src/assets/components/select.styled.tsx @@ -1,13 +1,14 @@ -import { JSX } from "solid-js/jsx-runtime"; +import type { JSX } from 'solid-js/jsx-runtime'; -const Select = (props : JSX.SelectHTMLAttributes<HTMLSelectElement & {value?: string}>) => { - return ( - <select - class="relative font-medium text-sm rounded-md pb-1.5 bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 border-7-neutral-300 dark:border-t-neutral-700/50 shadow-sm py-1 px-3 dark:shadow-black/40 hover:shadow active:border-neutral-300 dark:active:border-neutral-700 active:translate-y-px" {...props}> - {props.children} - </select> - ) -} +const Select = (props: JSX.SelectHTMLAttributes<HTMLSelectElement & { value?: string }>) => { + return ( + <select + class="relative font-medium text-sm rounded-md pb-1.5 bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 border-7-neutral-300 dark:border-t-neutral-700/50 shadow-sm py-1 px-3 dark:shadow-black/40 hover:shadow active:border-neutral-300 dark:active:border-neutral-700 active:translate-y-px" + {...props} + > + {props.children} + </select> + ); +}; export default Select; - diff --git a/src/components/colorListComponent.tsx b/src/components/colorListComponent.tsx deleted file mode 100644 index 54c34a3..0000000 --- a/src/components/colorListComponent.tsx +++ /dev/null @@ -1,331 +0,0 @@ -import chroma from "chroma-js"; -import {Component, createEffect, createSignal, JSX} from "solid-js"; -import SwatchList from "../shared/components/swatchList"; -import { Button } from "../shared/styles/components/button.styled"; -import { Flex } from "../shared/styles/components/flex.styled"; -import { Select } from "../shared/styles/components/select.styled"; -import { - SetLegacy, SetLegacyLight, - SetRelative, - SetRelativeLight, - SetShades, - SetShadesLight -} from "../shared/styles/functions/functions.styled"; -import { - ColorLegacy, ColorLegacyLight, - ColorMix, ColorMixLight, - ColorRelative, ColorRelativeLight, - ColorShades, - ColorShadesLight -} from "../shared/styles/utils/variables.styled"; -import {create} from "lodash"; - -export type ISwatchItem = { - name: string; - swatch: Record<string, Record<string, string>>; - light: boolean; -} - -export const [showContrast, setShowContrast] = createSignal('0'); -export const [contrastCalcType, setContrastCalcType] = createSignal(0); - -const [colorType, setColorType] = createSignal('hex'); - -export const [shadeLength, setShadeLength] = createSignal(7); - -const updateColorType = (type: any) => { - setColorType(type.target.value); -} - -const updateShowContrast = (type: any) => { - setShowContrast(type.target.value); -} - -const updateContrastCalc = (type: any) => { - setContrastCalcType(type.target.value); -} - -const updateShadeLength = (type: any) => { - setShadeLength(type.target.value); - setShades(shadeLength()); -} - -export const setShades = (len: number) => { - if (len == 10) { - SetLegacy([0.03, 0.1, 0.2, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.2]); - SetRelative([0.7, 0.6, 0.65, 0.7, 0.85, 0.9, 1, 1.1, 1.2, 1.2]); - SetShades([1.95, 1.86, 1.78, 1.72, 1.3, 1.15, 1, 0.86, 0.74, 0.32]); - - SetLegacyLight([1.8, 1.7, 1.5, 1.25, 1.2, 1.1, 1, 0.8, 0.7, 0.7]); - SetRelativeLight([1.5, 1.4, 1.3, 1.2, 1.15, 1.1, 1, 0.85, 0.7, 0.7]); - SetShadesLight([0.1, 0.2, 0.3, 0.37, 0.77, 0.85, 1, 1.2, 1.4, 1.67]); - } - if (len == 9) { - SetLegacy([0.1, 0.2, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.2]); - SetRelative([0.6, 0.65, 0.7, 0.85, 0.9, 1, 1.1, 1.2, 1.2]); - SetShades([1.86, 1.78, 1.72, 1.3, 1.15, 1, 0.86, 0.74, 0.32]); - - SetLegacyLight([1.7, 1.5, 1.25, 1.2, 1.1, 1, 0.8, 0.7, 0.7]); - SetRelativeLight([1.4, 1.3, 1.2, 1.15, 1.1, 1, 0.85, 0.7, 0.7]); - SetShadesLight([0.2, 0.3, 0.37, 0.77, 0.85, 1, 1.2, 1.4, 1.67]); - - } if (len == 7) { - SetLegacy([0.1, 0.7, 0.9, 1, 1.1, 1.2, 1.5]); - SetRelative([0.6, 0.7, 0.9, 1, 1.1, 1.2, 1.3]); - SetShades([1.85, 1.65, 1.1, 1, 0.9, 0.35, 0.18]); - - SetLegacyLight([1.5, 1.2, 1.1, 1, 0.9, 0.7, 0.1]); - SetRelativeLight([1.3, 1.2, 1.1, 1, 0.9, 0.7, 0.6]); - SetShadesLight([0.18, 0.35, 0.9, 1, 1.1, 1.65, 1.85]); - } -} - -const ColorListPage: () => JSX.Element = () => { - - const listColorConversion = () => { - let output = []; - for (const scale of sListDeepCopy()) { - let calcType: Record<string, any> = {}; - calcType[`name`] = scale.name; - let colorSwatchObj: Record<string, Record<string, string>> = {}; - for (const [colorName, colorSwatch] of Object.entries(scale.swatch)){ - let colorScaleObj: Record<string, string> = {}; - for (const [scaleName, scaleValue] of Object.entries(colorSwatch)){ - if (typeof scaleValue === "string") { - colorScaleObj[scaleName] = scaleValue; - } - switch(colorType()){ - case 'hex': - // @ts-ignore - colorScaleObj[scaleName] = chroma(scaleValue).hex(); - break; - case 'rgb': - // @ts-ignore - colorScaleObj[scaleName] = `rgb(${chroma(scaleValue).rgb().toString()})`; - break; - case 'hsl': - // @ts-ignore - colorScaleObj[scaleName] = `hsl(${chroma(scaleValue).hsl().toString()})`; - break; - case 'hsv': - // @ts-ignore - colorScaleObj[scaleName] = `hsv(${chroma(scaleValue).hsv().toString()})`; - break; - case 'hsi': - // @ts-ignore - colorScaleObj[scaleName] = `hsi(${chroma(scaleValue).hsi().toString()})`; - break; - case 'lab': - // @ts-ignore - colorScaleObj[scaleName] = `lab(${chroma(scaleValue).lab().toString()})`; - break; - case 'oklab': - // @ts-ignore - colorScaleObj[scaleName] = `oklab(${chroma(scaleValue).oklab().toString()})`; - break; - case 'lch': - // @ts-ignore - colorScaleObj[scaleName] = `lch(${chroma(scaleValue).lch().toString()})`; - break; - case 'hcl': - // @ts-ignore - colorScaleObj[scaleName] = `hcl(${chroma(scaleValue).hcl().toString()})`; - break; - case 'okhcl': - // @ts-ignore - colorScaleObj[scaleName] = `okhcl(${chroma(scaleValue).okhcl().toString()})`; - break; - } - } - colorSwatchObj[colorName] = colorScaleObj; - } - calcType[`swatch`] = colorSwatchObj; - output.push(calcType); - } - - return output; - } - - const fileDownloadFull = () => { - console.log(listColorConversion()); - const fileData = JSON.stringify(sListDeepCopy()); - const blob = new Blob([fileData], {type: "text/plain"}); - const url = URL.createObjectURL(blob); - const link = document.createElement('a'); - link.download = 'ambientcolors-full.json'; - link.href = url; - link.click(); - } - - const fileDownloadTW = () => { - const fileData = JSON.stringify(listColorConversion()[0].swatch); - const blob = new Blob([fileData], {type: "text/plain"}); - const url = URL.createObjectURL(blob); - const link = document.createElement('a'); - link.download = 'ambientcolors-full.json'; - link.href = url; - link.click(); - } - - const sListDeepCopy = () => [ - { - name: 'Shades Corrected (RGB)', - swatch: ColorShades(), - light: false - }, { - name: 'Shades Corrected (RGB) Light Mode', - swatch: ColorShadesLight(), - light: true - } - // , { - // name: 'Blended (Lab Color Mix)', - // swatch: ColorMix(), - // light: false - // }, { - // name: 'Blended (Lab Color Mix) Light Mode', - // swatch: ColorMixLight(), - // light: true - // }, { - // name: 'Relative (HSV & Relative Luminance)', - // swatch: ColorRelative(), - // light: false - // }, { - // name: 'Relative (HSV & Relative Luminance) Light Mode', - // swatch: ColorRelativeLight(), - // light: true - // }, { - // name: 'Brighten and Darken (Legacy)', - // swatch: ColorLegacy(), - // light: false - // }, { - // name: 'Brighten and Darken (Legacy) Light Mode', - // swatch: ColorLegacyLight(), - // light: true - // } - ] - - const [sList, setSList]= createSignal([sListDeepCopy()[0], sListDeepCopy()[1]]); - - return( - <> - <h3> - Generated Colors - </h3> - <Flex flexDirection="row" gap={8} style={{ - margin: '0 0 8px -2px' - }}> - <Button type="submit" onclick={fileDownloadFull}> - Export colors - </Button> - <Button type="submit" onclick={fileDownloadTW}> - Export colors (Tailwind) - </Button> - <p style={{ - 'padding': '18px 0 0 12px' - }}> - Export color type: - </p> - <Select value={colorType()} onChange={updateColorType}> - <option value='hex' selected> - HEX (Default) - </option> - <option value='rgb'> - RGB - </option> - <option value='hsl'> - HSL - </option> - <option value='hsv'> - HSV - </option> - <option value='hsi'> - HSI - </option> - <option value='lab'> - LAB - </option> - <option value='oklab'> - OKLAB - </option> - <option value='lch'> - LCH - </option> - <option value='hcl'> - HCL - </option> - <option value='okhcl'> - OKHCL - </option> - </Select> - <p style={{ - 'padding': '18px 0 0 12px' - }}> - Color Shade Length: - </p> - <Select value={shadeLength()} onChange={updateShadeLength}> - <option value={7} selected> - 7 (Default) - </option> - <option value={9}> - 9 (Bootstrap) - </option> - <option value={10}> - 10 (Tailwind) - </option> - </Select> - </Flex> - {/*<Flex flexDirection="row" gap={8} style={{*/} - {/* margin: '0 0 8px -2px'*/} - {/*}}>*/} - {/* <p style={{*/} - {/* 'padding': '18px 0 0 0'*/} - {/* }}>*/} - {/* Display Colors:*/} - {/* </p>*/} - {/* <Select value={contrastCalcType()} onChange={updateContrastCalc}>*/} - {/* <option value={0} selected>*/} - {/* Most Contrasting Color (Default)*/} - {/* </option>*/} - {/* <option value={1}>*/} - {/* First Compliant Color*/} - {/* </option>*/} - {/* </Select>*/} - {/*</Flex>*/} - <Flex flexDirection="row" gap={8} style={{ - margin: '0 0 24px -2px' - }}> - <p style={{ - 'padding': '18px 0 0 0' - }}> - Contrast Color Method: - </p> - <Select value={contrastCalcType()} onChange={updateContrastCalc}> - <option value={0} selected> - Most Contrasting Color (Default) - </option> - <option value={1}> - First Compliant Color - </option> - </Select> - <p style={{ - 'padding': '18px 0 0 12px' - }}> - Always Show Contrast Info - </p> - <Select value={showContrast()} onChange={updateShowContrast}> - <option value={'0'} selected> - False (Default) - </option> - <option value={'1'}> - True - </option> - </Select> - </Flex> - <SwatchList swatchList={sListDeepCopy()}/> - <br/> - </> - ) - -} - -export default ColorListPage; diff --git a/src/components/colorSelectorComponent.tsx b/src/components/colorSelectorComponent.tsx index 3407433..4c39276 100644 --- a/src/components/colorSelectorComponent.tsx +++ b/src/components/colorSelectorComponent.tsx @@ -1,159 +1,195 @@ -import {Component, createContext, createEffect, createMemo, createSignal, For} from "solid-js"; -import {createForm} from "@felte/solid"; -import toast from "solid-toast"; -import Toast from "./shared/toast"; -import {BaseBackgroundArr, ScalePrimObj} from "../functions/colorConfig"; -import PlaygroundBtn from "./playground/button/playgroundButton"; -import {neutralSwatch} from "./playground/components/colorSwatch"; -import {darkMode} from "./shared/darkModeToggle"; -import {css} from "solid-styled"; -import {useColorArrContext} from "../pages/colorGenerationPage"; - -const ColorSelectorComponent:Component = () => { - - const [colorsArr, setColorsArr] = useColorArrContext(); - - const [colors, setColors] = createSignal(colorsArr()); - - createEffect(() => { - setColorsArr(colors()); - }) - - css` - .color-picker { - width: 28px; - height: 32px; - } - - .color-picker::-webkit-color-swatch { - border-radius: 4px; - border: none; - outline: 1px solid rgba(136, 136, 136, 0.32); - outline-offset: 2px; - } - ` - - const addColor = () => { - setColors([...colors(), ['NAME', ['#FFFFFF', '#666666', '#111111']]]); - } - - const removeColor = (index: number) => { - setColors([...colors().slice(0, index), ...colors().slice(index + 1)]); - } - - const handleColorChange = (row: number, index: number, val: string) => { - let newColorArr: string[] = [...colors()[row][1]]; - newColorArr[index] = val; - setColors([...colors().slice(0, row), [colors()[row][0], newColorArr], ...colors().slice(row + 1)]); - } - - - const arrToArr = (arr: []) => { - let c: [] = []; - for(let i = 0; i < arr.length; i += 2) { - c.push(arr[i]); - } - return c; - } - - const { form, data, errors, isSubmitting, isValid } = createForm({ - onSubmit: (val) => { - console.log(val) - setColorsArr(colors()); - }, validate: (val) => { - const errors = {}; - let values: string[] = arrToArr(Object.values(val) as []); - if (values.length !== new Set(values).size) { - // @ts-ignore - errors.duplicate = 'There are duplicates in the color names!'; - } - if (isSubmitting() && !isValid) { - console.log('wow'); - toast.custom((t) => ( - <Toast color={'error'} showExit={true} toast={t}> - Something Happened - </Toast> - )); - console.log('lmao'); - } - return errors; - } - }) - - return( - <div class="flex flex-row justify-between"> - <form ref={form} class="flex flex-col"> - <div class="flex flex-col gap-4"> - <For each={colors()}>{([key, val], i) => - <div class="flex flex-row text-slate-600 dark:text-neutral-400 items-center"> - <p class="w-12 font-mono">{i() + 1}</p> - <div class="flex flex-col md:flex-row gap-2"> - <input type="color" class="h-8 w-8 appearance-none border-none color-picker bg-transparent" - value={val[0]} onChange={(e) => handleColorChange(i(), 0, e.currentTarget.value)}/> - <input type="color" class="h-8 w-8 appearance-none border-none color-picker bg-transparent" - value={val[1]} onChange={(e) => handleColorChange(i(), 1, e.currentTarget.value)}/> - <input type="color" class="h-8 w-8 appearance-none border-none color-picker bg-transparent" - value={val[2]} onChange={(e) => handleColorChange(i(), 2, e.currentTarget.value)}/> - </div> - <div class="flex gap-3 pl-6 flex-wrap"> - <div class="flex items-center"> - <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> - Name - </label> - <input type="text" class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 +import type { Component } from 'solid-js'; +import { For, createEffect, createSignal } from 'solid-js'; +import { createForm } from '@felte/solid'; +import toast from 'solid-toast'; +import { css } from 'solid-styled'; +import { BaseBackgroundArr } from '../functions/colorConfig'; +import { useColorArrContext } from '../pages/colorGenerationPage'; +import Toast from './shared/toast'; +import PlaygroundBtn from './playground/button/playgroundButton'; +import { neutralSwatch } from './playground/components/colorSwatch'; +import { darkMode } from './shared/darkModeToggle'; + +const ColorSelectorComponent: Component = () => { + const [colorsArr, setColorsArr] = useColorArrContext(); + + const [colors, setColors] = createSignal(colorsArr()); + + createEffect(() => { + setColorsArr(colors()); + }); + + css` + .color-picker { + width: 28px; + height: 32px; + } + + .color-picker::-webkit-color-swatch { + border-radius: 4px; + border: none; + outline: 1px solid rgba(136, 136, 136, 0.32); + outline-offset: 2px; + } + `; + + const addColor = () => { + setColors([...colors(), ['NAME', ['#FFFFFF', '#666666', '#111111']]]); + }; + + const removeColor = (index: number) => { + setColors([...colors().slice(0, index), ...colors().slice(index + 1)]); + }; + + const handleColorChange = (row: number, index: number, val: string) => { + const newColorArr: string[] = [...colors()[row][1]]; + newColorArr[index] = val; + setColors([...colors().slice(0, row), [colors()[row][0], newColorArr], ...colors().slice(row + 1)]); + }; + + const arrToArr = (arr: []) => { + const c: [] = []; + for (let i = 0; i < arr.length; i += 2) + c.push(arr[i]); + + return c; + }; + + const { form, isSubmitting, isValid } = createForm({ + onSubmit: (val) => { + // eslint-disable-next-line no-console + console.log(val); + setColorsArr(colors()); + }, + validate: (val) => { + const errors = {}; + const values: string[] = arrToArr(Object.values(val) as []); + if (values.length !== new Set(values).size) { + // @ts-expect-error type-error + errors.duplicate = 'There are duplicates in the color names!'; + } + if (isSubmitting() && !isValid) { + toast.custom(t => ( + <Toast color="error" showExit={true} toast={t}> + Something Happened + </Toast> + )); + } + return errors; + }, + }); + + return ( + <div class="flex flex-row justify-between"> + <form ref={form} class="flex flex-col"> + <div class="flex flex-col gap-4"> + <For each={colors()}> + {([key, val], i) => ( + <div class="flex flex-row text-slate-600 dark:text-neutral-400 items-center"> + <p class="w-12 font-mono">{i() + 1}</p> + <div class="flex flex-col md:flex-row gap-2"> + <input + type="color" + class="h-8 w-8 appearance-none border-none color-picker bg-transparent" + value={val[0]} + onChange={e => handleColorChange(i(), 0, e.currentTarget.value)} + /> + <input + type="color" + class="h-8 w-8 appearance-none border-none color-picker bg-transparent" + value={val[1]} + onChange={e => handleColorChange(i(), 1, e.currentTarget.value)} + /> + <input + type="color" + class="h-8 w-8 appearance-none border-none color-picker bg-transparent" + value={val[2]} + onChange={e => handleColorChange(i(), 2, e.currentTarget.value)} + /> + </div> + <div class="flex gap-3 pl-6 flex-wrap"> + <div class="flex items-center"> + <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> + Name + </label> + <input + type="text" + class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 rounded-r text-slate-800 dark:text-neutral-100 font-semibold px-3 py-1 w-40" - value={key} name={`colorName${i()}`}/> - </div> - - <div class="flex items-center"> - <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> - 01 - </label> - <input type="text" class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 - rounded-r text-slate-800 dark:text-neutral-100 font-semibold font-mono px-3 py-1 w-32" - value={val[0]} name={`colorHex${i()}-01`} - onChange={(e) => handleColorChange(i(), 0, e.currentTarget.value)}/> - </div> - - <div class="flex items-center"> - <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> - 06 - </label> - <input type="text" class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 - rounded-r text-slate-800 dark:text-neutral-100 font-semibold font-mono px-3 py-1 w-32" - value={val[1]} name={`colorHex${i()}-06`} - onChange={(e) => handleColorChange(i(), 1, e.currentTarget.value)}/> - </div> - - <div class="flex items-center"> - <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> - 09 - </label> - <input type="text" class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 - rounded-r text-slate-800 dark:text-neutral-100 font-semibold font-mono px-3 py-1 w-32" - value={val[2]} name={`colorHex${i()}-09`} - onChange={(e) => handleColorChange(i(), 2, e.currentTarget.value)}/> - </div> - </div> - - <a class="cursor-pointer" onclick={() => removeColor(i())}><i class="bi bi-trash3-fill pl-4"></i></a> - </div> - }</For> - </div> - <div class="flex flex-col gap-4 py-4 text-slate-600 dark:text-neutral-400"> - <a class="cursor-pointer" onClick={() => addColor()}><i class="bi bi-plus-circle-fill"></i> Add Color</a> - <PlaygroundBtn border={'full'} - textColor={neutralSwatch(9)} - color={darkMode() ? neutralSwatch(0) : BaseBackgroundArr[0]} - hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} - borderColor={neutralSwatch(2)} - hoverBorderColor={neutralSwatch(1)} type="submit"> - Generate Colors - </PlaygroundBtn> - </div> - </form> - </div> - ) -} - -export default ColorSelectorComponent + value={key} + name={`colorName${i()}`} + /> + </div> + + <div class="flex items-center"> + <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> + 01 + </label> + <input + type="text" + class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 + rounded-r text-slate-800 dark:text-neutral-100 font-semibold font-mono px-3 py-1 w-32" + value={val[0]} + name={`colorHex${i()}-01`} + onChange={e => handleColorChange(i(), 0, e.currentTarget.value)} + /> + </div> + + <div class="flex items-center"> + <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> + 06 + </label> + <input + type="text" + class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 + rounded-r text-slate-800 dark:text-neutral-100 font-semibold font-mono px-3 py-1 w-32" + value={val[1]} + name={`colorHex${i()}-06`} + onChange={e => handleColorChange(i(), 1, e.currentTarget.value)} + /> + </div> + + <div class="flex items-center"> + <label class="bg-neutral-200 dark:bg-neutral-500 rounded-l px-3 text-sm h-full flex items-center" for="colorName"> + 09 + </label> + <input + type="text" + class="bg-gray-50 dark:bg-neutral-700 border border-neutral-200 dark:border-neutral-500 + rounded-r text-slate-800 dark:text-neutral-100 font-semibold font-mono px-3 py-1 w-32" + value={val[2]} + name={`colorHex${i()}-09`} + onChange={e => handleColorChange(i(), 2, e.currentTarget.value)} + /> + </div> + </div> + + <a class="cursor-pointer" onclick={() => removeColor(i())}><i class="bi bi-trash3-fill pl-4"></i></a> + </div> + )} + </For> + </div> + <div class="flex flex-col gap-4 py-4 text-slate-600 dark:text-neutral-400"> + <a class="cursor-pointer" onClick={() => addColor()}> + <i class="bi bi-plus-circle-fill"></i> + {' '} + Add Color + </a> + <PlaygroundBtn + border="full" + textColor={neutralSwatch(9)} + color={darkMode() ? neutralSwatch(0) : BaseBackgroundArr[0]} + hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} + borderColor={neutralSwatch(2)} + hoverBorderColor={neutralSwatch(1)} + type="submit" + > + Generate Colors + </PlaygroundBtn> + </div> + </form> + </div> + ); +}; + +export default ColorSelectorComponent; diff --git a/src/components/colorSwatch.tsx b/src/components/colorSwatch.tsx index ce28cf2..68a447f 100644 --- a/src/components/colorSwatch.tsx +++ b/src/components/colorSwatch.tsx @@ -1,50 +1,59 @@ -import { Component, createEffect, For, onMount } from "solid-js"; -import { colors, colorsArr } from "../assets/color"; -import ColorIdentifier from "../assets/components/colorIdentifier.styled"; -import { calcMinAPCA } from "../functions/contrastCalc"; -import { focused } from "../functions/keyHandler"; -import Toast, { copy } from "./shared/toast"; +import type { Component } from 'solid-js'; +import { For } from 'solid-js'; +import { colors } from '../assets/color'; +import ColorIdentifier from '../assets/components/colorIdentifier.styled'; +import { calcMinAPCA } from '../functions/contrastCalc'; +import { focused } from '../functions/keyHandler'; +import { copy } from './shared/toast'; -type IColorSwatchProps<T = {}> = Component<T &{ - swatch?: Record<string, Record<string, string>>; -}> +type IColorSwatchProps<T = object> = Component<T & { + swatch?: Record<string, Record<string, string>> +}>; const ColorSwatch: IColorSwatchProps = (props) => { + const watchingSwatch = () => props.swatch ? props.swatch : colors(); - const watchingSwatch = () => props.swatch ? props.swatch : colors(); + const focusedState = () => focused(); - const focusedState = () => focused(); + return ( + <> + <div class="flex h-9 items-center w-full"> + <div class="w-24 hidden sm:block" /> + <For each={Object.keys(Object.values(watchingSwatch())[0])}> + {(id, _i) => ( + <div class="flex-grow text-sm sm:text-base font-mono text-slate-600 dark:text-neutral-400"> + {id} + </div> + )} + </For> + </div> + <For each={Object.entries(watchingSwatch())}> + {([color, swatch], j) => ( + <div class="flex items-center"> + <div class="w-24 pr-4 flex-none justify-end text-slate-600 dark:text-neutral-400 capitalize hidden sm:block"> + {color.toLocaleLowerCase()} + </div> + <For each={Object.values(swatch)}> + {(color, k) => ( + <ColorIdentifier + color={color} + textColor={calcMinAPCA(Object.values(swatch), color)[1].toString()} + tabindex={0} + class={`grow text-[10px] sm:text-xs h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none + ${focusedState()[0] === k() && focusedState()[1] === j() ? 'focused' : ''}`} + onClick={() => copy(color)} + > + {Math.abs(calcMinAPCA(Object.values(swatch), color)[0]) > 60 + ? calcMinAPCA(Object.values(swatch), color)[0].toFixed() + : ''} + </ColorIdentifier> + )} + </For> + </div> + )} + </For> + </> + ); +}; - return ( - <> - <div class="flex h-9 items-center w-full"> - <div class="w-24 hidden sm:block" /> - <For each={Object.keys(Object.values(watchingSwatch())[0])}>{(id, i) => - <div class="flex-grow text-sm sm:text-base font-mono text-slate-600 dark:text-neutral-400"> - {id} - </div> - }</For> - </div> - <For each={Object.entries(watchingSwatch())}>{([color, swatch], j) => - <div class="flex items-center"> - <div class="w-24 pr-4 flex-none justify-end text-slate-600 dark:text-neutral-400 capitalize hidden sm:block"> - {color.toLocaleLowerCase()} - </div> - <For each={Object.values(swatch)}>{(color, k) => - <ColorIdentifier color={color} textColor={calcMinAPCA(Object.values(swatch), color)[1].toString()} - tabindex={0} - class={`grow text-[10px] sm:text-xs h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none - ${focusedState()[0] == k() && focusedState()[1] == j() ? 'focused' : ''}`} - onClick={() => copy(color)}> - {Math.abs(calcMinAPCA(Object.values(swatch), color)[0]) > 60 ? - calcMinAPCA(Object.values(swatch), color)[0].toFixed() : - ""} - </ColorIdentifier> - }</For> - </div> - }</For> - </> - ) -} - -export default ColorSwatch +export default ColorSwatch; diff --git a/src/components/colorSwatchHelper.tsx b/src/components/colorSwatchHelper.tsx index fd5e3ef..d99a435 100644 --- a/src/components/colorSwatchHelper.tsx +++ b/src/components/colorSwatchHelper.tsx @@ -1,59 +1,61 @@ -import { Component, createEffect, For, onMount, Show } from "solid-js"; -import ColorIdentifier from "../assets/components/colorIdentifier.styled"; -import { baseNeutral, baseSwatch } from "./playground/components/colorSwatch"; -import HelperBadge from "./playground/components/helperBadge"; -import { copy } from "./shared/toast"; - - -type IColorSwatchHelperProps<T = {}> = Component<T &{ - track?: 'color' | 'neutral' | 'neutralbg'; - active?: Array<number | string>; - activeHelper?: Array<string> -}> +import type { Component } from 'solid-js'; +import { For, Show } from 'solid-js'; +import ColorIdentifier from '../assets/components/colorIdentifier.styled'; +import { baseNeutral, baseSwatch } from './playground/components/colorSwatch'; +import HelperBadge from './playground/components/helperBadge'; +import { copy } from './shared/toast'; + +type IColorSwatchHelperProps<T = object> = Component<T & { + track?: 'color' | 'neutral' | 'neutralbg' + active?: Array<number | string> + activeHelper?: Array<string> +}>; const ColorSwatchHelper: IColorSwatchHelperProps = (props) => { - - let helperMod = props.activeHelper - - let counter = 0 - - const modifiedShift = (arr: Array<string>) => { - const out = helperMod ? helperMod[counter] : 'Err' - counter += 1 - if (counter >= arr.length) { - counter = 0 - } - return out - } - - return ( - <> - <div class="flex flex-col w-full"> - <div class="flex"> - <Show when={props.track == 'neutralbg'}> - - </Show> - <For each={props.track == 'neutral' ? baseNeutral() : baseSwatch()}>{(color, k) => - <ColorIdentifier color={color} - class={`h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none`} - onClick={() => copy(color)}> - <Show when={props.active && props.active.includes(k())}> - <div class="text-helper-primary bg-helper-dark bg-opacity-70 flex w-full h-full justify-center items-center - group"> - 0{k()} - <div class="bottom-12 absolute hidden group-hover:block"> - <HelperBadge active> - {props.activeHelper ? modifiedShift(helperMod ? helperMod : props.activeHelper) : `0${k()}`} - </HelperBadge> - </div> - </div> - </Show> - </ColorIdentifier> - }</For> - </div> - </div> - </> - ) -} - -export default ColorSwatchHelper + const helperMod = props.activeHelper; + + let counter = 0; + + const modifiedShift = (arr: Array<string>) => { + const out = helperMod ? helperMod[counter] : 'Err'; + counter += 1; + if (counter >= arr.length) + counter = 0; + + return out; + }; + + return ( + <> + <div class="flex flex-col w-full"> + <div class="flex"> + <For each={props.track === 'neutral' ? baseNeutral() : baseSwatch()}> + {(color, k) => ( + <ColorIdentifier + color={color} + class="h-10 flex flex-1 justify-center items-center font-mono font-medium outline-none" + onClick={() => copy(color)} + > + <Show when={props.active && props.active.includes(k())}> + <div class="text-helper-primary bg-helper-dark bg-opacity-70 flex w-full h-full justify-center items-center + group" + > + 0 + {k()} + <div class="bottom-12 absolute hidden group-hover:block"> + <HelperBadge active> + {props.activeHelper ? modifiedShift(helperMod || props.activeHelper) : `0${k()}`} + </HelperBadge> + </div> + </div> + </Show> + </ColorIdentifier> + )} + </For> + </div> + </div> + </> + ); +}; + +export default ColorSwatchHelper; diff --git a/src/components/colorSwatchLarge.tsx b/src/components/colorSwatchLarge.tsx index da0fce9..cb9a813 100644 --- a/src/components/colorSwatchLarge.tsx +++ b/src/components/colorSwatchLarge.tsx @@ -1,62 +1,70 @@ -import {Component, For, Show} from "solid-js"; -import { colors, colorsArr } from "../assets/color"; -import ColorIdentifier from "../assets/components/colorIdentifier.styled"; -import { colorsToArr } from "../functions/colorConfig"; -import { focused } from "../functions/keyHandler"; -import { copy } from "./shared/toast"; +import type { Component } from 'solid-js'; +import { For, Show } from 'solid-js'; +import { colors, colorsArr } from '../assets/color'; +import ColorIdentifier from '../assets/components/colorIdentifier.styled'; +import { focused } from '../functions/keyHandler'; +import { copy } from './shared/toast'; -type IColorSwatchLargeProps<T = {}> = Component<T &{ - swatch?: Record<string, Record<string, string>>; - swatchArr?: Array<Array<string>>; - trackIndex?: 'color' | 'id'; - disableText?: boolean; -}> +type IColorSwatchLargeProps<T = object> = Component<T & { + swatch?: Record<string, Record<string, string>> + swatchArr?: Array<Array<string>> + trackIndex?: 'color' | 'id' + disableText?: boolean +}>; const ColorSwatchLarge: IColorSwatchLargeProps = (props) => { + const watchingSwatch = () => props.swatch ? props.swatch : colors(); + const watchingSwatchArr = () => props.swatchArr ? props.swatchArr : colorsArr(); - const watchingSwatch = () => props.swatch ? props.swatch : colors(); - const watchingSwatchArr = () => props.swatchArr ? props.swatchArr : colorsArr(); + return ( + <> + <div class="flex flex-col w-full pb-6"> + <Show when={!props.disableText}> + <h2 class="text-slate-600 dark:text-neutral-400"> + {props.trackIndex === 'color' ? 'Color Name' : 'Color ID'} + </h2> + <h2 class="font-display text-xl capitalize font-semibold text-slate-800 dark:text-slate-200"> + {props.trackIndex === 'color' + ? Object.keys(watchingSwatch())[focused()[1]].toLocaleLowerCase() + : `0${Object.keys(Object.values(watchingSwatch()))[focused()[0]]}`} + </h2> + </Show> + <div class="flex h-9 items-center w-full overflow-hidden"> + <For each={props.trackIndex === 'color' + ? Object.keys(Object.values(watchingSwatch())[0]) + : Object.keys(watchingSwatch())} + > + {(id, i) => ( + <div class={`${props.trackIndex === 'color' ? 'font-mono' : ''} + w-full text-slate-600 dark:text-neutral-400 capitalize text-xs sm:text-sm`} + > + {props.trackIndex === 'color' ? id : Object.keys(watchingSwatch())[i()].toLocaleLowerCase()} + </div> + )} + </For> + </div> + <div class="flex"> + <For each={props.trackIndex === 'color' + ? watchingSwatchArr()[focused()[1]] + : watchingSwatchArr().map(val => val[focused()[0]])} + > + {(color, k) => ( + <ColorIdentifier + color={color} + tabindex={0} + class={`h-12 flex flex-1 justify-center items-center font-mono font-medium outline-none + ${(focused()[0] === k() && props.trackIndex === 'color') + || (focused()[1] === k() && props.trackIndex === 'id') + ? 'focused' +: ''}`} + onClick={() => copy(color)} + /> + )} + </For> + </div> + </div> + </> + ); +}; - return ( - <> - <div class="flex flex-col w-full pb-6"> - <Show when={!props.disableText}> - <h2 class="text-slate-600 dark:text-neutral-400"> - {props.trackIndex == 'color' ? 'Color Name' : 'Color ID'} - </h2> - <h2 class="font-display text-xl capitalize font-semibold text-slate-800 dark:text-slate-200"> - {props.trackIndex == 'color' ? - Object.keys(watchingSwatch())[focused()[1]].toLocaleLowerCase() : - `0${Object.keys(Object.values(watchingSwatch()))[focused()[0]]}`} - </h2> - </Show> - <div class="flex h-9 items-center w-full overflow-hidden"> - <For each={props.trackIndex == 'color' ? - Object.keys(Object.values(watchingSwatch())[0]) : - Object.keys(watchingSwatch()) - }>{(id, i) => - <div class={`${props.trackIndex == 'color' ? 'font-mono' : ''} - w-full text-slate-600 dark:text-neutral-400 capitalize text-xs sm:text-sm`}> - {props.trackIndex == 'color' ? id : Object.keys(watchingSwatch())[i()].toLocaleLowerCase()} - </div> - }</For> - </div> - <div class="flex"> - <For each={props.trackIndex == 'color' ? - watchingSwatchArr()[focused()[1]] : - watchingSwatchArr().map(val => val[focused()[0]])}>{(color, k) => - <ColorIdentifier color={color} - tabindex={0} - class={`h-12 flex flex-1 justify-center items-center font-mono font-medium outline-none - ${(focused()[0] == k() && props.trackIndex == 'color') || - (focused()[1] == k() && props.trackIndex == 'id') ? - 'focused' : ''}`} - onClick={() => copy(color)}/> - }</For> - </div> - </div> - </> - ) -} - -export default ColorSwatchLarge +export default ColorSwatchLarge; diff --git a/src/components/dataPlot.tsx b/src/components/dataPlot.tsx index a593f81..8961bfa 100644 --- a/src/components/dataPlot.tsx +++ b/src/components/dataPlot.tsx @@ -1,55 +1,65 @@ -import chroma from "chroma-js"; -import { Component, For } from "solid-js" -import { colorsArr } from "../assets/color"; -import { colorsToArr } from "../functions/colorConfig"; -import { focused } from "../functions/keyHandler"; +import chroma from 'chroma-js'; +import type { Component } from 'solid-js'; +import { For } from 'solid-js'; +import { colorsArr } from '../assets/color'; +import { focused } from '../functions/keyHandler'; -type IDataPlotProps<T = {}> = Component<T &{ - swatchArr: Array<Array<string>>; - plotArea: 1 | 0; - plotType: 'l' | 'c' | 'h'; -}> +type IDataPlotProps<T = object> = Component<T & { + swatchArr: Array<Array<string>> + plotArea: 1 | 0 + plotType: 'l' | 'c' | 'h' +}>; const DataPlot: IDataPlotProps = (props) => { + const watchingSwatch = () => props.swatchArr ? props.swatchArr : colorsArr(); - const watchingSwatch = () => props.swatchArr ? props.swatchArr : colorsArr(); + const colorsRemap = () => props.plotArea === 1 + ? watchingSwatch()[focused()[1]] + : watchingSwatch().map(val => val[focused()[0]]); - const colorsRemap = () => props.plotArea == 1 ? - watchingSwatch()[focused()[1]] : - watchingSwatch().map(val => val[focused()[0]]); + const lchCalc = () => colorsRemap().map((hex) => { + const lch = chroma(hex).lch(); + return { l: lch[0], c: lch[1], h: (lch[2] / 3.6) }; + }); - const lchCalc = () => colorsRemap().map(hex => { - const lch = chroma(hex).lch() - return {l: lch[0], c: lch[1], h: (lch[2] / 3.6)} - }) - - return ( - <div class="flex flex-col grow"> - <h2 class="text-slate-800 dark:text-slate-200 pb-2"> - {props.plotType == 'l' ? 'Lightness' : props.plotType == 'c' ? 'Chroma' : 'Hue'} - </h2> - <div class="flex flex-row border border-b-0 border-neutral-200 dark:border-neutral-700"> - <For each={colorsRemap()}>{(swatch, i) => - <div class="h-2 w-full grow" style={` + return ( + <div class="flex flex-col grow"> + <h2 class="text-slate-800 dark:text-slate-200 pb-2"> + {props.plotType === 'l' ? 'Lightness' : props.plotType === 'c' ? 'Chroma' : 'Hue'} + </h2> + <div class="flex flex-row border border-b-0 border-neutral-200 dark:border-neutral-700"> + <For each={colorsRemap()}> + {(swatch, _i) => ( + <div + class="h-2 w-full grow" + style={` background-color: ${swatch}; - `}/> - }</For> - </div> - <div class="flex grow justify-center h-[150px] bg-neutral-100 dark:bg-neutral-800 - border border-neutral-200 dark:border-neutral-700 relative"> - <div class="w-full h-full relative mx-6 my-[35px]"> - <For each={colorsRemap()}>{(swatch, i) => - <div class="h-[20px] w-[20px] rounded-md absolute border - border-neutral-200 dark:border-neutral-700" style={` + `} + /> + )} + </For> + </div> + <div class="flex grow justify-center h-[150px] bg-neutral-100 dark:bg-neutral-800 + border border-neutral-200 dark:border-neutral-700 relative" + > + <div class="w-full h-full relative mx-6 my-[35px]"> + <For each={colorsRemap()}> + {(swatch, i) => ( + <div + class="h-[20px] w-[20px] rounded-md absolute border + border-neutral-200 dark:border-neutral-700" + style={` background-color: ${swatch}; bottom: calc(${lchCalc()[i()][props.plotType] * 0.75}% + 40px); left: calc(${i() * (100 / (lchCalc().length - 1))}% - 10px); - `}/> - }</For> - </div> - </div> - </div> - ) -} + `} + /> + )} + </For> + </div> + </div> + </div> + ); +}; -export default DataPlot +export default DataPlot; diff --git a/src/components/layouts/footer.tsx b/src/components/layouts/footer.tsx index e5dd9a3..076aaee 100644 --- a/src/components/layouts/footer.tsx +++ b/src/components/layouts/footer.tsx @@ -1,33 +1,47 @@ -import {Component } from "solid-js"; -import lightLogoUrl from "../../assets/images/ambient_logo_black_new.png"; -import darkLogoUrl from "../../assets/images/ambient_logo_white_new.png"; -import Button from "../../assets/components/button.styled"; -import DarkModeToggle, { darkMode } from "../shared/darkModeToggle"; +import type { Component } from 'solid-js'; +import lightLogoUrl from '../../assets/images/ambient_logo_black_new.png'; +import darkLogoUrl from '../../assets/images/ambient_logo_white_new.png'; const Footer: Component = () => { - - return ( - <footer role={"contentinfo"} class="relative bottom-0 border-t h-auto px-4 sm:px-6 lg:px-10 flex justify-center backdrop-blur-md backdrop-brightness-125 + return ( + <footer + role="contentinfo" + class="relative bottom-0 border-t h-auto px-4 sm:px-6 lg:px-10 flex justify-center backdrop-blur-md backdrop-brightness-125 bg-white dark:bg-[#181819] border-neutral-200 dark:border-neutral-800 - bg-opacity-80 dark:bg-opacity-90 w-full z-50"> - <div class="flex flex-col items-center justify-center w-full max-w-screen-2xl py-8 md:py-10"> - <div class="-mt-1"> - <a href="/" class="block dark:hidden w-28 saturate-0 opacity-60"><img src={lightLogoUrl} alt={"Ambient Logo"}/></a> - <a href="/" class="hidden dark:block w-28 saturate-0 opacity-60"><img src={darkLogoUrl} alt={"Ambient Logo"}/></a> - </div> - <p class='text-slate-600 dark:text-neutral-400 pt-2 text-sm'> - Built with <a class="font-semibold underline" href="http://solidjs.com/">Solidjs</a>, - with the help of <a class="font-semibold underline" href="https://vis4.net/chromajs/">Chromajs</a>, - <a class="font-semibold underline" href="https://felte.dev/">Felte</a>, - <a class="font-semibold underline" href="https://icons.getbootstrap.com/">Bootstrap Icons</a>, - and <a class="font-semibold underline" href="https://github.com/Myndex/SAPC-APCA">WCAG APCA</a> - </p> - <p class='text-slate-600 dark:text-neutral-400 text-sm'> - Check out the <a class="font-semibold underline" href="https://github.com/kevintyj/ambient"><i class="bi bi-github"></i> Source Code!</a> - </p> - </div> - </footer> - ) -} + bg-opacity-80 dark:bg-opacity-90 w-full z-50" + > + <div class="flex flex-col items-center justify-center w-full max-w-screen-2xl py-8 md:py-10"> + <div class="-mt-1"> + <a href="/" class="block dark:hidden w-28 saturate-0 opacity-60"><img src={lightLogoUrl} alt="Ambient Logo" /></a> + <a href="/" class="hidden dark:block w-28 saturate-0 opacity-60"><img src={darkLogoUrl} alt="Ambient Logo" /></a> + </div> + <p class="text-slate-600 dark:text-neutral-400 pt-2 text-sm"> + Built with + {' '} + <a class="font-semibold underline" href="http://solidjs.com/">Solidjs</a> + , + with the help of + <a class="font-semibold underline" href="https://vis4.net/chromajs/">Chromajs</a> + , + <a class="font-semibold underline" href="https://felte.dev/">Felte</a> + , + <a class="font-semibold underline" href="https://icons.getbootstrap.com/">Bootstrap Icons</a> + , + and + <a class="font-semibold underline" href="https://github.com/Myndex/SAPC-APCA">WCAG APCA</a> + </p> + <p class="text-slate-600 dark:text-neutral-400 text-sm"> + Check out the + {' '} + <a class="font-semibold underline" href="https://github.com/kevintyj/ambient"> + <i class="bi bi-github"></i> + {' '} + Source Code! + </a> + </p> + </div> + </footer> + ); +}; export default Footer; diff --git a/src/components/layouts/navBar.tsx b/src/components/layouts/navBar.tsx index 4a0392f..4c4fd92 100644 --- a/src/components/layouts/navBar.tsx +++ b/src/components/layouts/navBar.tsx @@ -1,18 +1,17 @@ -import {Component, createMemo, createSignal } from "solid-js"; -import lightLogoUrl from "../../assets/images/ambient_logo_black_new.png"; -import darkLogoUrl from "../../assets/images/ambient_logo_white_new.png"; -import Button from "../../assets/components/button.styled"; -import DarkModeToggle, { darkMode } from "../shared/darkModeToggle"; -import { A, useLocation } from "@solidjs/router"; -import { css } from "solid-styled"; - +import type { Component } from 'solid-js'; +import { createMemo, createSignal } from 'solid-js'; +import { A, useLocation } from '@solidjs/router'; +import { css } from 'solid-styled'; +import lightLogoUrl from '../../assets/images/ambient_logo_black_new.png'; +import darkLogoUrl from '../../assets/images/ambient_logo_white_new.png'; +import Button from '../../assets/components/button.styled'; +import DarkModeToggle from '../shared/darkModeToggle'; const NavBar: Component = () => { + const location = useLocation(); + const pathname = createMemo(() => location.pathname); - const location = useLocation(); - const pathname = createMemo(() => location.pathname); - - css` + css` .menuBG { display: flex; transition: all 0.5s; @@ -23,104 +22,120 @@ const NavBar: Component = () => { .anim-menu { transition: all 0.5s; } - ` + `; - const [mobileMenu, setMobileMenu] = createSignal(false) + const [mobileMenu, setMobileMenu] = createSignal(false); - return ( - <> - <nav role={"navigation"} class="h-screen w-screen hidden justify-end fixed + return ( + <> + <nav + role="navigation" + class="h-screen w-screen hidden justify-end fixed backdrop-blur-sm z-[100] bg-neutral-50 dark:bg-[#181819] - bg-opacity-60 dark:bg-opacity-70 cursor-pointer" classList={{menuBG: mobileMenu()}} onClick={() => setMobileMenu(false)}> - <div class="absolute h-screen border-l p-4 py-3 sm:px-6 lg:px-10 flex flex-col justify-between + bg-opacity-60 dark:bg-opacity-70 cursor-pointer" + classList={{ menuBG: mobileMenu() }} + onClick={() => setMobileMenu(false)} + > + <div + class="absolute h-screen border-l p-4 py-3 sm:px-6 lg:px-10 flex flex-col justify-between backdrop-blur-md bg-neutral-50 dark:bg-[#181819] border-l-neutral-200 dark:border-l-neutral-800 bg-opacity-80 dark:bg-opacity-90 w-64 max-w-full translate-x-full shadow-xl anim-menu" - classList={{menuShown: mobileMenu()}}> - <div class="flex space-x-2 w-full justify-end"> - <a onClick={() => setMobileMenu(false)}> - <Button aria={"Open Menu"}> - <i class="bi bi-list"></i> - </Button> - </a> - </div> - <div class="flex flex-col space-y-2 w-full pt-[1px] justify-start text-end"> - <a href="/playground/intro" - class="font-medium text-lg font-display + classList={{ menuShown: mobileMenu() }} + > + <div class="flex space-x-2 w-full justify-end"> + <a onClick={() => setMobileMenu(false)}> + <Button aria="Open Menu"> + <i class="bi bi-list"></i> + </Button> + </a> + </div> + <div class="flex flex-col space-y-2 w-full pt-[1px] justify-start text-end"> + <a + href="/playground/intro" + class="font-medium text-lg font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 hover:-translate-x-1 transition-all" - classList={{['font-bold']: pathname().includes('/playground')}}> - Playground - </a> - <a href="https://github.com/kevintyj/ambient" - class="font-medium text-lg font-display + classList={{ 'font-bold': pathname().includes('/playground') }} + > + Playground + </a> + <a + href="https://github.com/kevintyj/ambient" + class="font-medium text-lg font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 hover:-translate-x-1 transition-all" - classList={{['font-bold']: pathname() == '/github'}}> - Github - </a> - <a href="/coming-soon" - class="font-medium text-lg font-display + classList={{ 'font-bold': pathname() === '/github' }} + > + Github + </a> + <a + href="/coming-soon" + class="font-medium text-lg font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 hover:-translate-x-1 transition-all" - classList={{['font-bold']: pathname() == '/coming-soon'}}> - Documentation - </a> - </div> - <div class="flex flex-col space-y-2 w-full items-end"> - <a href="https://github.com/kevintyj/ambient"> - <Button aria={"Open Github"}> - <i class="bi bi-github"></i> - </Button> - </a> - <a href="/coming-soon"> - <Button aria={"Open Documentation"}> - Documentation - </Button> - </a> - <a href="https://kevintyj.com" class="font-medium text-sm font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 underline pt-1">by Kevin (Taeyoon) Jin</a> - </div> - </div> - </nav> - <nav class="border-b h-14 px-4 sm:px-6 lg:px-10 flex justify-center fixed backdrop-blur-md backdrop-brightness-125 + classList={{ 'font-bold': pathname() === '/coming-soon' }} + > + Documentation + </a> + </div> + <div class="flex flex-col space-y-2 w-full items-end"> + <a href="https://github.com/kevintyj/ambient"> + <Button aria="Open Github"> + <i class="bi bi-github"></i> + </Button> + </a> + <a href="/coming-soon"> + <Button aria="Open Documentation"> + Documentation + </Button> + </a> + <a href="https://kevintyj.com" class="font-medium text-sm font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 underline pt-1">by Kevin (Taeyoon) Jin</a> + </div> + </div> + </nav> + <nav class="border-b h-14 px-4 sm:px-6 lg:px-10 flex justify-center fixed backdrop-blur-md backdrop-brightness-125 bg-neutral-50 dark:bg-[#181819] border-b-neutral-200 dark:border-b-neutral-800 - bg-opacity-80 dark:bg-opacity-90 w-full z-50"> - <div class="flex items-center w-full max-w-screen-2xl"> - <div class="flex items-center space-x-4 w-full pt-[1px]"> - <div class="-mt-1"> - <A href="/" class="block dark:hidden w-28"><img src={lightLogoUrl} alt={"Ambient Logo"}/></A> - <A href="/" class="hidden dark:block w-28"><img src={darkLogoUrl} alt={"Ambient Logo"}/></A> - </div> - <a href="https://kevintyj.com" class="font-medium text-sm font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 underline pr-4 hidden sm:block">by Kevin (Taeyoon) Jin</a> + bg-opacity-80 dark:bg-opacity-90 w-full z-50" + > + <div class="flex items-center w-full max-w-screen-2xl"> + <div class="flex items-center space-x-4 w-full pt-[1px]"> + <div class="-mt-1"> + <A href="/" class="block dark:hidden w-28"><img src={lightLogoUrl} alt="Ambient Logo" /></A> + <A href="/" class="hidden dark:block w-28"><img src={darkLogoUrl} alt="Ambient Logo" /></A> + </div> + <a href="https://kevintyj.com" class="font-medium text-sm font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 underline pr-4 hidden sm:block">by Kevin (Taeyoon) Jin</a> - <A href="/playground/intro" - class="font-medium text-sm font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 hidden md:block" - classList={{['font-bold']: pathname().includes('/playground')}}> - Playground - </A> - </div> - <div class="flex items-center space-x-2"> - <A href="/docs" class="hidden md:block"> - <Button aria={"Open Documentation"}> - Documentation - </Button> - </A> - <A href="https://github.com/kevintyj/ambient"> - <Button aria={"Open Github"}> - <i class="bi bi-github"></i> - </Button> - </A> - <DarkModeToggle/> - <a onClick={() => setMobileMenu(true)} class="block md:hidden"> - <Button aria={"Open Menu"}> - <i class="bi bi-list"></i> - </Button> - </a> - </div> - </div> - </nav> - </> - ) -} + <A + href="/playground/intro" + class="font-medium text-sm font-display text-slate-700 dark:text-slate-300 rounded-lg hover:text-slate-900 hidden md:block" + classList={{ 'font-bold': pathname().includes('/playground') }} + > + Playground + </A> + </div> + <div class="flex items-center space-x-2"> + <A href="/docs" class="hidden md:block"> + <Button aria="Open Documentation"> + Documentation + </Button> + </A> + <A href="https://github.com/kevintyj/ambient"> + <Button aria="Open Github"> + <i class="bi bi-github"></i> + </Button> + </A> + <DarkModeToggle /> + <a onClick={() => setMobileMenu(true)} class="block md:hidden"> + <Button aria="Open Menu"> + <i class="bi bi-list"></i> + </Button> + </a> + </div> + </div> + </nav> + </> + ); +}; export default NavBar; diff --git a/src/components/playground/button/playgroundButton.tsx b/src/components/playground/button/playgroundButton.tsx index 63cf5f2..a74cec8 100644 --- a/src/components/playground/button/playgroundButton.tsx +++ b/src/components/playground/button/playgroundButton.tsx @@ -1,50 +1,53 @@ -import {ParentComponent} from "solid-js"; +import type { ParentComponent } from 'solid-js'; import { css } from 'solid-styled'; type IButtonProps = ParentComponent< & { - textColor?: string; - color?: string; - hoverColor?: string; - border: 'top' | 'full' | 'full-top'; - borderColor?: string; - hoverBorderColor?: string; - borderTopColor?: string; - borderTopHoverColor?: string; - selfFlex?: boolean; - type?: "submit" | "reset" | "button" | undefined; + textColor?: string + color?: string + hoverColor?: string + border: 'top' | 'full' | 'full-top' + borderColor?: string + hoverBorderColor?: string + borderTopColor?: string + borderTopHoverColor?: string + selfFlex?: boolean + type?: 'submit' | 'reset' | 'button' | undefined }>; const PlaygroundBtn: IButtonProps = (props) => { - - css` + css` .playground-btn { color: ${props.textColor ? props.textColor : ''}; background-color: ${props.color ? props.color : ''}; border-color: ${props.borderColor ? props.borderColor : ''}; - border-width: ${props.border == 'top' ? '1px 0 0 0' : '1px'} !important; - border-top-color: ${props.borderTopColor ? props.borderTopColor : props.borderColor ? props.borderColor : '' }; + border-width: ${props.border === 'top' ? '1px 0 0 0' : '1px'} !important; + border-top-color: ${props.borderTopColor ? props.borderTopColor : props.borderColor ? props.borderColor : ''}; transition: background-color 80ms ease-out, border-color 80ms ease-out; } .playground-btn:hover { background-color: ${props.hoverColor ? props.hoverColor : ''}; - border-color: ${props.hoverBorderColor ? props.hoverBorderColor : - props.borderColor ? props.borderColor : ''}; - border-top-color: ${props.borderTopHoverColor ? props.borderTopHoverColor : props.hoverBorderColor ? props.hoverBorderColor : '' }; + border-color: ${props.hoverBorderColor +? props.hoverBorderColor + : props.borderColor ? props.borderColor : ''}; + border-top-color: ${props.borderTopHoverColor ? props.borderTopHoverColor : props.hoverBorderColor ? props.hoverBorderColor : ''}; } `; - return ( - <> - <button class={`playground-btn font-medium rounded-md + return ( + <> + <button + class={`playground-btn font-medium rounded-md bg-white dark:bg-neutral-800/50 dark:text-slate-100 border border-neutral-200 dark:border-neutral-800 shadow-sm hover:shadow pt-1 py-1.5 px-4 dark:shadow-black/20 - active:translate-y-px capitalize ${props.selfFlex ? '' : 'self-start'}`} type={props.type ? props.type : "button"}> - {props.children} - </button> - </> - ) -} + active:translate-y-px capitalize ${props.selfFlex ? '' : 'self-start'}`} + type={props.type ? props.type : 'button'} + > + {props.children} + </button> + </> + ); +}; export default PlaygroundBtn; diff --git a/src/components/playground/components/colorSwatch.tsx b/src/components/playground/components/colorSwatch.tsx index b2844da..a52ce75 100644 --- a/src/components/playground/components/colorSwatch.tsx +++ b/src/components/playground/components/colorSwatch.tsx @@ -1,26 +1,27 @@ -import { colorsToArr } from "../../../functions/colorConfig"; -import { calcMaxAPCAText } from "../../../functions/contrastCalc"; -import { focused } from "../../../functions/keyHandler"; -import { visibleColorScale } from "../../shared/toggleColorScale"; +import { colorsToArr } from '../../../functions/colorConfig'; +import { calcMaxAPCAText } from '../../../functions/contrastCalc'; +import { focused } from '../../../functions/keyHandler'; +import { visibleColorScale } from '../../shared/toggleColorScale'; const watchingSwatch = () => colorsToArr(visibleColorScale()); -const focusRow = () => focused()[1] +const focusRow = () => focused()[1]; -export const baseSwatch = () => watchingSwatch()[focusRow()] -export const baseNeutral = () => watchingSwatch()[0] +export const baseSwatch = () => watchingSwatch()[focusRow()]; +export const baseNeutral = () => watchingSwatch()[0]; -const textColor = () => "NEUTRAL" in visibleColorScale() ? -[visibleColorScale()["NEUTRAL"]["00"], visibleColorScale()["NEUTRAL"]["09"]] : ['red', 'red']; +const textColor = () => 'NEUTRAL' in visibleColorScale() + ? [visibleColorScale().NEUTRAL['00'], visibleColorScale().NEUTRAL['09']] + : ['red', 'red']; export const colorSwatch = (ind: number) => { - return baseSwatch()[ind]; -} + return baseSwatch()[ind]; +}; export const neutralSwatch = (ind: number) => { - return baseNeutral()[ind]; -} + return baseNeutral()[ind]; +}; export const calcTextColor = () => { - const buttonBG = () => colorSwatch(5) - return calcMaxAPCAText(buttonBG(), textColor()[0], textColor()[1]) -} \ No newline at end of file + const buttonBG = () => colorSwatch(5); + return calcMaxAPCAText(buttonBG(), textColor()[0], textColor()[1]); +}; diff --git a/src/components/playground/components/defaultButton.tsx b/src/components/playground/components/defaultButton.tsx index 7097e64..0eed9ff 100644 --- a/src/components/playground/components/defaultButton.tsx +++ b/src/components/playground/components/defaultButton.tsx @@ -1,59 +1,66 @@ -import { ParentComponent } from "solid-js"; -import { css } from "solid-styled"; -import { BaseBackgroundArr } from "../../../functions/colorConfig"; -import { darkMode } from "../../shared/darkModeToggle"; -import PlaygroundBtn from "../button/playgroundButton"; -import { calcTextColor, colorSwatch, neutralSwatch } from "./colorSwatch"; +import type { ParentComponent } from 'solid-js'; +import { css } from 'solid-styled'; +import { BaseBackgroundArr } from '../../../functions/colorConfig'; +import { darkMode } from '../../shared/darkModeToggle'; +import PlaygroundBtn from '../button/playgroundButton'; +import { calcTextColor, colorSwatch, neutralSwatch } from './colorSwatch'; -type IDefaultBtnProps = ParentComponent<& { - type: 'default' | 'secondary' | 'primary' +type IDefaultBtnProps = ParentComponent< & { + type: 'default' | 'secondary' | 'primary' } >; const DefaultButton: IDefaultBtnProps = (props) => { + const headerColor = () => neutralSwatch(9); - const headerColor = () => neutralSwatch(9) - - css` + css` .heading{ color: ${headerColor()}; } - ` + `; - if (props.type == 'default'){ - return ( - <PlaygroundBtn border={'full'} - textColor={neutralSwatch(9)} - color={darkMode() ? neutralSwatch(0) : BaseBackgroundArr[0]} - hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} - borderColor={neutralSwatch(2)} - hoverBorderColor={neutralSwatch(1)}> - {props.children} - </PlaygroundBtn> - ) - } if (props.type == 'secondary') { - return ( - <PlaygroundBtn border={'full'} - textColor={colorSwatch(9)} - color={colorSwatch(2)} - hoverColor={colorSwatch(1)} - borderColor={colorSwatch(3)} - hoverBorderColor={colorSwatch(2)}> - {props.children} - </PlaygroundBtn> - ) - } if (props.type == 'primary') { - return ( - <PlaygroundBtn border={'top'} - textColor={calcTextColor()} - color={colorSwatch(5)} - hoverColor={colorSwatch(6)} - borderColor={colorSwatch(6)} - hoverBorderColor={colorSwatch(7)}> - {props.children} - </PlaygroundBtn> - ) - } -} + if (props.type === 'default') { + return ( + <PlaygroundBtn + border="full" + textColor={neutralSwatch(9)} + color={darkMode() ? neutralSwatch(0) : BaseBackgroundArr[0]} + hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} + borderColor={neutralSwatch(2)} + hoverBorderColor={neutralSwatch(1)} + > + {props.children} + </PlaygroundBtn> + ); + } + if (props.type === 'secondary') { + return ( + <PlaygroundBtn + border="full" + textColor={colorSwatch(9)} + color={colorSwatch(2)} + hoverColor={colorSwatch(1)} + borderColor={colorSwatch(3)} + hoverBorderColor={colorSwatch(2)} + > + {props.children} + </PlaygroundBtn> + ); + } + if (props.type === 'primary') { + return ( + <PlaygroundBtn + border="top" + textColor={calcTextColor()} + color={colorSwatch(5)} + hoverColor={colorSwatch(6)} + borderColor={colorSwatch(6)} + hoverBorderColor={colorSwatch(7)} + > + {props.children} + </PlaygroundBtn> + ); + } +}; -export default DefaultButton; \ No newline at end of file +export default DefaultButton; diff --git a/src/components/playground/components/divider.tsx b/src/components/playground/components/divider.tsx index c0f75ff..3de73e0 100644 --- a/src/components/playground/components/divider.tsx +++ b/src/components/playground/components/divider.tsx @@ -1,9 +1,9 @@ -import { Component } from "solid-js"; +import type { Component } from 'solid-js'; const Divider: Component = () => { - return ( - <div class="w-full pb-6 border-b border-neutral-200 dark:border-neutral-800 mb-6"></div> - ) -} + return ( + <div class="w-full pb-6 border-b border-neutral-200 dark:border-neutral-800 mb-6"></div> + ); +}; -export default Divider \ No newline at end of file +export default Divider; diff --git a/src/components/playground/components/heading.tsx b/src/components/playground/components/heading.tsx index 36ff626..ce1078d 100644 --- a/src/components/playground/components/heading.tsx +++ b/src/components/playground/components/heading.tsx @@ -1,34 +1,39 @@ -import { JSX } from "solid-js/jsx-runtime"; -import { css } from "solid-styled"; -import { neutralSwatch } from "./colorSwatch"; +import type { JSX } from 'solid-js/jsx-runtime'; +import { css } from 'solid-styled'; +import { neutralSwatch } from './colorSwatch'; -const Heading = (props : JSX.SelectHTMLAttributes<HTMLHeadingElement & { - size?: 1 | 2 | 3 | 4 | 5 | 6 +const Heading = (props: JSX.SelectHTMLAttributes<HTMLHeadingElement & { + size?: 1 | 2 | 3 | 4 | 5 | 6 }>) => { + const headerColor = () => neutralSwatch(9); - const headerColor = () => neutralSwatch(9) + const textSize = () => { + return props.size + ? props.size === 1 + ? '4xl' + : props.size === 2 + ? '3xl' + : props.size === 3 + ? '2xl' + : props.size === 4 + ? 'xl' + : props.size === 5 + ? 'lg' + : props.size === 6 ? 'base' : 'base' + : 'base'; + }; - const textSize = () => { - return props.size ? - props.size == 1 ? '4xl' : - props.size == 2 ? '3xl' : - props.size == 3 ? '2xl' : - props.size == 4 ? 'xl' : - props.size == 5 ? 'lg' : - props.size == 6 ? 'base' : 'base' : 'base' - } - - css` + css` .heading{ color: ${headerColor()}; } - ` + `; - return ( - <p class={`text-${textSize()} heading font-bold ${props.class}`} {...props}> - {props.children} - </p> - ) -} + return ( + <p class={`text-${textSize()} heading font-bold ${props.class}`} {...props}> + {props.children} + </p> + ); +}; -export default Heading; \ No newline at end of file +export default Heading; diff --git a/src/components/playground/components/helperBadge.tsx b/src/components/playground/components/helperBadge.tsx index c540ba0..d3fc7a0 100644 --- a/src/components/playground/components/helperBadge.tsx +++ b/src/components/playground/components/helperBadge.tsx @@ -1,28 +1,33 @@ -import { createSignal, ParentComponent, Show } from "solid-js"; +import type { ParentComponent } from 'solid-js'; +import { Show, createSignal } from 'solid-js'; -export const [helper, setHelper] = createSignal(true) +export const [helper, setHelper] = createSignal(true); -type IHelperProps = ParentComponent<& { - type?: 'default' | 'secondary' | 'primary'; - arrow?: boolean; - margin?: boolean; - active?: boolean; +type IHelperProps = ParentComponent< & { + type?: 'default' | 'secondary' | 'primary' + arrow?: boolean + margin?: boolean + active?: boolean } >; const HelperBadge: IHelperProps = (props) => { + if (helper() || props.active) { + return ( + <> + <div + class="rounded bg-helper-transparent inline-block text-sm font-normal font-sans text-center + text-helper-primary px-2 py-0.5 capitalize" + classList={{ 'mx-4': props.margin }} + > + <Show when={props.arrow}> + <i class="bi bi-arrow-left pr-1.5"></i> + </Show> + {props.children} + </div> + </> + ); + } +}; - if (helper() || props.active) return( - <> - <div class="rounded bg-helper-transparent inline-block text-sm font-normal font-sans text-center - text-helper-primary px-2 py-0.5 capitalize" classList={{'mx-4': props.margin}}> - <Show when={props.arrow}> - <i class="bi bi-arrow-left pr-1.5"></i> - </Show> - {props.children} - </div> - </> - ) -} - -export default HelperBadge; \ No newline at end of file +export default HelperBadge; diff --git a/src/components/playground/components/link.tsx b/src/components/playground/components/link.tsx index 3b1c853..2a79250 100644 --- a/src/components/playground/components/link.tsx +++ b/src/components/playground/components/link.tsx @@ -1,24 +1,26 @@ -import { JSX } from "solid-js/jsx-runtime"; -import { css } from "solid-styled"; -import { colorSwatch } from "./colorSwatch"; +import type { JSX } from 'solid-js/jsx-runtime'; +import { css } from 'solid-styled'; +import { colorSwatch } from './colorSwatch'; -const LinkAnchor = (props : JSX.SelectHTMLAttributes<HTMLAnchorElement & { - size?: 'base' | 'large' | 'small' +const LinkAnchor = (props: JSX.SelectHTMLAttributes<HTMLAnchorElement & { + size?: 'base' | 'large' | 'small' }>) => { + const linkColor = () => colorSwatch(7); + const linkHoverColor = () => colorSwatch(6); + const hintColor = () => colorSwatch(4); + const hintHoverColor = () => colorSwatch(3); - const linkColor = () => colorSwatch(7) - const linkHoverColor = () => colorSwatch(6) - const hintColor = () => colorSwatch(4) - const hintHoverColor = () => colorSwatch(3) + const textSize = () => { + return props.size + ? props.size === 'base' + ? 'base' + : props.size === 'large' + ? 'lg' + : props.size === 'small' ? 'sm' : 'base' + : 'base'; + }; - const textSize = () => { - return props.size ? - props.size == 'base' ? 'base' : - props.size == 'large' ? 'lg' : - props.size == 'small' ? 'sm' : 'base' : 'base' - } - - css` + css` .link{ color: ${linkColor()}; cursor: pointer; @@ -33,13 +35,13 @@ const LinkAnchor = (props : JSX.SelectHTMLAttributes<HTMLAnchorElement & { .hint:hover{ color: ${hintHoverColor()} } - ` + `; - return ( - <a class={`text-${textSize()} link inline-block ${props.class}`} {...props}> - {props.children} - </a> - ) -} + return ( + <a class={`text-${textSize()} link inline-block ${props.class}`} {...props}> + {props.children} + </a> + ); +}; -export default LinkAnchor; \ No newline at end of file +export default LinkAnchor; diff --git a/src/components/playground/components/paragraph.tsx b/src/components/playground/components/paragraph.tsx index 1426918..b751cbb 100644 --- a/src/components/playground/components/paragraph.tsx +++ b/src/components/playground/components/paragraph.tsx @@ -1,23 +1,25 @@ -import { JSX } from "solid-js/jsx-runtime"; -import { css } from "solid-styled"; -import { neutralSwatch } from "./colorSwatch"; +import type { JSX } from 'solid-js/jsx-runtime'; +import { css } from 'solid-styled'; +import { neutralSwatch } from './colorSwatch'; -const Paragraph = (props : JSX.SelectHTMLAttributes<HTMLParagraphElement & { - size?: 'base' | 'large' | 'small' +const Paragraph = (props: JSX.SelectHTMLAttributes<HTMLParagraphElement & { + size?: 'base' | 'large' | 'small' }>) => { + const bodyColor = () => neutralSwatch(7); + const boldColor = () => neutralSwatch(8); + const hintColor = () => neutralSwatch(4); - const bodyColor = () => neutralSwatch(7) - const boldColor = () => neutralSwatch(8) - const hintColor = () => neutralSwatch(4) + const textSize = () => { + return props.size + ? props.size === 'base' + ? 'base' + : props.size === 'large' + ? 'lg' + : props.size === 'small' ? 'sm' : 'base' + : 'base'; + }; - const textSize = () => { - return props.size ? - props.size == 'base' ? 'base' : - props.size == 'large' ? 'lg' : - props.size == 'small' ? 'sm' : 'base' : 'base' - } - - css` + css` .paragraph{ color: ${bodyColor()}; } @@ -28,13 +30,13 @@ const Paragraph = (props : JSX.SelectHTMLAttributes<HTMLParagraphElement & { .hint{ color: ${hintColor()} } - ` + `; - return ( - <p class={`text-${textSize()} paragraph inline ${props.class}`} {...props}> - {props.children} - </p> - ) -} + return ( + <p class={`text-${textSize()} paragraph inline ${props.class}`} {...props}> + {props.children} + </p> + ); +}; -export default Paragraph; \ No newline at end of file +export default Paragraph; diff --git a/src/components/playground/components/playgroundButtons.tsx b/src/components/playground/components/playgroundButtons.tsx index 4443f93..d316133 100644 --- a/src/components/playground/components/playgroundButtons.tsx +++ b/src/components/playground/components/playgroundButtons.tsx @@ -1,59 +1,65 @@ -import { Component, For } from "solid-js"; -import { BaseBackgroundArr, colorsToArr } from "../../../functions/colorConfig"; -import { calcMaxAPCAText } from "../../../functions/contrastCalc"; -import PlaygroundBtn from "../button/playgroundButton"; -import { darkMode } from "../../shared/darkModeToggle"; -import { visibleColorScale } from "../../shared/toggleColorScale"; +import type { Component } from 'solid-js'; +import { For } from 'solid-js'; +import { BaseBackgroundArr, colorsToArr } from '../../../functions/colorConfig'; +import { calcMaxAPCAText } from '../../../functions/contrastCalc'; +import PlaygroundBtn from '../button/playgroundButton'; +import { darkMode } from '../../shared/darkModeToggle'; +import { visibleColorScale } from '../../shared/toggleColorScale'; type IButtonProps = Component< & { - baseColorPos: number; - textColorful?: boolean; - border?: 'top' | 'full' | 'full-top'; - direction?: 1 | -1; + baseColorPos: number + textColorful?: boolean + border?: 'top' | 'full' | 'full-top' + direction?: 1 | -1 }>; const PlaygroundButtons: IButtonProps = (props) => { + const watchingSwatch = () => colorsToArr(visibleColorScale()); + const swatchNames = () => Object.keys(visibleColorScale()); + const direction = props.direction ? props.direction : -1; - const watchingSwatch = () => colorsToArr(visibleColorScale()); - const swatchNames = () => Object.keys(visibleColorScale()); - const direction = props.direction ? props.direction : -1 ; + const textColor = () => 'NEUTRAL' in visibleColorScale() + ? [visibleColorScale().NEUTRAL['00'], visibleColorScale().NEUTRAL['09']] + : ['red', 'red']; - const textColor = () => "NEUTRAL" in visibleColorScale() ? - [visibleColorScale()["NEUTRAL"]["00"], visibleColorScale()["NEUTRAL"]["09"]] : ['red', 'red']; + const calcTextColor = (swatch: Array<string>) => { + const bg = swatch[props.baseColorPos]; + if (props.textColorful) + return calcMaxAPCAText(bg, swatch[swatch.length - 1], swatch[0]); + else + return calcMaxAPCAText(bg, textColor()[0], textColor()[1]); + }; - const calcTextColor = (swatch: Array<string>) => { - const bg = swatch[props.baseColorPos]; - if (props.textColorful) { - return calcMaxAPCAText(bg, swatch[swatch.length - 1], swatch[0]) - } else { - return calcMaxAPCAText(bg, textColor()[0], textColor()[1]) - } - } + return ( + <> + <div class="flex flex-row flex-wrap gap-4 justify-center"> + <PlaygroundBtn + border={props.border ? props.border : 'full'} + textColor={watchingSwatch()[0][9]} + color={darkMode() ? watchingSwatch()[0][0] : BaseBackgroundArr[0]} + hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} + borderColor={watchingSwatch()[0][2]} + hoverBorderColor={watchingSwatch()[0][1]} + > + Default + </PlaygroundBtn> + <For each={watchingSwatch()}> + {(swatch, i) => ( + <PlaygroundBtn + border={props.border ? props.border : 'full'} + textColor={calcTextColor(swatch)} + color={swatch[props.baseColorPos]} + hoverColor={swatch[props.baseColorPos + direction]} + borderColor={swatch[props.baseColorPos + 1]} + hoverBorderColor={swatch[props.baseColorPos + direction + 1]} + > + {swatchNames()[i()].toLocaleLowerCase()} + </PlaygroundBtn> + )} + </For> + </div> + </> + ); +}; - return ( - <> - <div class="flex flex-row flex-wrap gap-4 justify-center"> - <PlaygroundBtn border={props.border ? props.border : 'full'} - textColor={watchingSwatch()[0][9]} - color={darkMode() ? watchingSwatch()[0][0] : BaseBackgroundArr[0]} - hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} - borderColor={watchingSwatch()[0][2]} - hoverBorderColor={watchingSwatch()[0][1]}> - Default - </PlaygroundBtn> - <For each={watchingSwatch()}>{(swatch, i) => - <PlaygroundBtn border={props.border ? props.border : 'full'} - textColor={calcTextColor(swatch)} - color={swatch[props.baseColorPos]} - hoverColor={swatch[props.baseColorPos + direction]} - borderColor={swatch[props.baseColorPos + 1]} - hoverBorderColor={swatch[props.baseColorPos + direction + 1]}> - {swatchNames()[i()].toLocaleLowerCase()} - </PlaygroundBtn> - }</For> - </div> - </> - ) -} - -export default PlaygroundButtons +export default PlaygroundButtons; diff --git a/src/components/playground/components/playgroundDocumentation.tsx b/src/components/playground/components/playgroundDocumentation.tsx index 9732730..e5efad1 100644 --- a/src/components/playground/components/playgroundDocumentation.tsx +++ b/src/components/playground/components/playgroundDocumentation.tsx @@ -1,42 +1,48 @@ -import { Component, createEffect } from "solid-js"; -import { css } from "solid-styled"; -import { BaseBackgroundArr, colorsToArr } from "../../../functions/colorConfig"; -import { calcMaxAPCAText } from "../../../functions/contrastCalc"; -import { focused } from "../../../functions/keyHandler"; -import ColorSwatchLarge from "../../colorSwatchLarge"; -import PlaygroundBtn from "../button/playgroundButton"; -import { darkMode } from "../../shared/darkModeToggle"; -import { visibleColorScale } from "../../shared/toggleColorScale"; -import DefaultButton from "./defaultButton"; +import type { Component } from 'solid-js'; +import { createEffect } from 'solid-js'; +import { css } from 'solid-styled'; +import { BaseBackgroundArr, colorsToArr } from '../../../functions/colorConfig'; +import { focused } from '../../../functions/keyHandler'; +import PlaygroundBtn from '../button/playgroundButton'; +import { darkMode } from '../../shared/darkModeToggle'; +import { visibleColorScale } from '../../shared/toggleColorScale'; +import DefaultButton from './defaultButton'; -const DEBUG = false +const DEBUG = false; const PlaygroundDocumentation: Component = () => { + const watchingSwatch = () => colorsToArr(visibleColorScale()); - const watchingSwatch = () => colorsToArr(visibleColorScale()); - const swatchNames = () => Object.keys(visibleColorScale()); - const focusRow = () => focused()[1] + // eslint-disable-next-line unused-imports/no-unused-vars + const swatchNames = () => Object.keys(visibleColorScale()); + const focusRow = () => focused()[1]; - const baseSwatch = () => watchingSwatch()[focusRow()] - const baseNeutral = () => watchingSwatch()[0] - const headerColor = () => baseNeutral()[9] - const bodyColor = () => baseNeutral()[7] - const boldColor = () => baseNeutral()[8] - const hintColor = () => baseNeutral()[5] - const linkColor = () => baseSwatch()[7] + const baseSwatch = () => watchingSwatch()[focusRow()]; + const baseNeutral = () => watchingSwatch()[0]; + const headerColor = () => baseNeutral()[9]; + const bodyColor = () => baseNeutral()[7]; + const boldColor = () => baseNeutral()[8]; + const hintColor = () => baseNeutral()[5]; + const linkColor = () => baseSwatch()[7]; - const codeBG = () => baseNeutral()[0] - const codeBorder = () => baseNeutral()[1] - const codeBorderTop = () => baseNeutral()[2] - const codeColor = () => baseNeutral()[8] + const codeBG = () => baseNeutral()[0]; + const codeBorder = () => baseNeutral()[1]; + const codeBorderTop = () => baseNeutral()[2]; + const codeColor = () => baseNeutral()[8]; - createEffect(() => { - if (DEBUG) console.log("Page Effected"); - if (DEBUG) console.log(darkMode()); - if (DEBUG) console.log(watchingSwatch()); - }) + createEffect(() => { + if (DEBUG) + // eslint-disable-next-line no-console + console.log('Page Effected'); + if (DEBUG) + // eslint-disable-next-line no-console + console.log(darkMode()); + if (DEBUG) + // eslint-disable-next-line no-console + console.log(watchingSwatch()); + }); - css` + css` .link{ color: ${linkColor()}; } @@ -65,62 +71,74 @@ const PlaygroundDocumentation: Component = () => { border-top: 1px solid ${codeBorderTop()}; color: ${codeColor()}; } - ` + `; - return ( - <div class="flex flex-col pb-3"> - <div class="flex pt-6 gap-x-6"> - <div class="flex-none w-64 h-full border-r border-color"> - <div class="flex flex-col pr-6"> - <PlaygroundBtn border={'full'} - textColor={watchingSwatch()[0][9]} - color={darkMode() ? watchingSwatch()[0][0] : BaseBackgroundArr[0]} - hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} - borderColor={watchingSwatch()[0][2]} - hoverBorderColor={watchingSwatch()[0][1]} selfFlex> - <i class="bi bi-search pr-3"></i>Quick Search - </PlaygroundBtn> - <h5 class="text-md heading font-medium pt-4 pb-2">Getting Started</h5> - <div class="border-l border-color py-1 px-4 hint"> - Introduction - </div> - <div class="font-medium border-l-2 py-1 px-4 link link-border"> - Setup and Install - </div> - <div class="border-l border-color py-1 px-4 hint"> - Pre-requisite - </div> - </div> - </div> - <div class="flex flex-col gap-1 grow"> - <a class="link font-semibold">Getting Started</a> - <h1 class="text-4xl heading font-bold">This is the heading</h1> - <p class="paragraph">Required setup and install instructions</p> - <h2 class="text-2xl heading font-bold pt-4">Enviornment Setup</h2> - <p class="paragraph">Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco - laboris nisi ut <b class="bold">aliquip ex ea commodo consequat.</b> Duis aute irure - dolor in reprehenderit in voluptate velit esse cillum dolore eu - fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id - est laborum.</p> - <div class="flex flex-wrap py-2 gap-3"> - <DefaultButton type="default"> - More documentation - </DefaultButton> - <DefaultButton type="primary"> - Go see examples! - </DefaultButton> - </div> - <h2 class="text-2xl heading font-bold pt-4">Using TurboPack</h2> - <p class="paragraph">Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p> - <code class="code rounded-md px-5 py-3 mt-4">npx create-spring-turbo@latest</code> - </div> - </div> - </div> - ) -} + return ( + <div class="flex flex-col pb-3"> + <div class="flex pt-6 gap-x-6"> + <div class="flex-none w-64 h-full border-r border-color"> + <div class="flex flex-col pr-6"> + <PlaygroundBtn + border="full" + textColor={watchingSwatch()[0][9]} + color={darkMode() ? watchingSwatch()[0][0] : BaseBackgroundArr[0]} + hoverColor={darkMode() ? BaseBackgroundArr[1] : BaseBackgroundArr[0]} + borderColor={watchingSwatch()[0][2]} + hoverBorderColor={watchingSwatch()[0][1]} + selfFlex + > + <i class="bi bi-search pr-3"></i> + Quick Search + </PlaygroundBtn> + <h5 class="text-md heading font-medium pt-4 pb-2">Getting Started</h5> + <div class="border-l border-color py-1 px-4 hint"> + Introduction + </div> + <div class="font-medium border-l-2 py-1 px-4 link link-border"> + Setup and Install + </div> + <div class="border-l border-color py-1 px-4 hint"> + Pre-requisite + </div> + </div> + </div> + <div class="flex flex-col gap-1 grow"> + <a class="link font-semibold">Getting Started</a> + <h1 class="text-4xl heading font-bold">This is the heading</h1> + <p class="paragraph">Required setup and install instructions</p> + <h2 class="text-2xl heading font-bold pt-4">Enviornment Setup</h2> + <p class="paragraph"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut + <b class="bold">aliquip ex ea commodo consequat.</b> + {' '} + Duis aute irure + dolor in reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. + </p> + <div class="flex flex-wrap py-2 gap-3"> + <DefaultButton type="default"> + More documentation + </DefaultButton> + <DefaultButton type="primary"> + Go see examples! + </DefaultButton> + </div> + <h2 class="text-2xl heading font-bold pt-4">Using TurboPack</h2> + <p class="paragraph"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + {' '} + </p> + <code class="code rounded-md px-5 py-3 mt-4">npx create-spring-turbo@latest</code> + </div> + </div> + </div> + ); +}; -export default PlaygroundDocumentation +export default PlaygroundDocumentation; diff --git a/src/components/playground/components/playgroundLanding.tsx b/src/components/playground/components/playgroundLanding.tsx index e8e22ef..9797aba 100644 --- a/src/components/playground/components/playgroundLanding.tsx +++ b/src/components/playground/components/playgroundLanding.tsx @@ -1,54 +1,56 @@ -import { Component, createEffect } from "solid-js"; -import { css } from "solid-styled"; -import { BaseBackgroundArr, colorsToArr } from "../../../functions/colorConfig"; -import { calcMaxAPCAText } from "../../../functions/contrastCalc"; -import { focused } from "../../../functions/keyHandler"; -import ColorSwatchLarge from "../../colorSwatchLarge"; -import PlaygroundBtn from "../button/playgroundButton"; -import { darkMode } from "../../shared/darkModeToggle"; -import { visibleColorScale } from "../../shared/toggleColorScale"; -import DefaultButton from "./defaultButton"; -import {A} from "@solidjs/router"; -import lightLogoUrl from "../../../assets/images/ambient_logo_black_new.png"; -import darkLogoUrl from "../../../assets/images/ambient_logo_white_new.png"; - -const DEBUG = false +import type { Component } from 'solid-js'; +import { createEffect } from 'solid-js'; +import { css } from 'solid-styled'; +import { colorsToArr } from '../../../functions/colorConfig'; +import { focused } from '../../../functions/keyHandler'; +import { darkMode } from '../../shared/darkModeToggle'; +import { visibleColorScale } from '../../shared/toggleColorScale'; +import DefaultButton from './defaultButton'; + +const DEBUG = false; const PlaygroundLanding: Component = () => { + const watchingSwatch = () => colorsToArr(visibleColorScale()); - const watchingSwatch = () => colorsToArr(visibleColorScale()); - const swatchNames = () => Object.keys(visibleColorScale()); - const focusRow = () => focused()[1] + // eslint-disable-next-line unused-imports/no-unused-vars + const swatchNames = () => Object.keys(visibleColorScale()); + const focusRow = () => focused()[1]; - const baseSwatch = () => watchingSwatch()[focusRow()] - const baseNeutral = () => watchingSwatch()[0] + const baseSwatch = () => watchingSwatch()[focusRow()]; + const baseNeutral = () => watchingSwatch()[0]; - const headerColor = () => baseNeutral()[9] - const bodyColor = () => baseNeutral()[7] - const boldColor = () => baseNeutral()[8] - const hintColor = () => baseNeutral()[5] - const linkColor = () => baseSwatch()[7] + const headerColor = () => baseNeutral()[9]; + const bodyColor = () => baseNeutral()[7]; + const boldColor = () => baseNeutral()[8]; + const hintColor = () => baseNeutral()[5]; + const linkColor = () => baseSwatch()[7]; - const codeBG = () => baseNeutral()[0] - const codeBorder = () => baseNeutral()[1] - const codeBorderTop = () => baseNeutral()[2] - const codeColor = () => baseNeutral()[8] + const codeBG = () => baseNeutral()[0]; + const codeBorder = () => baseNeutral()[1]; + const codeBorderTop = () => baseNeutral()[2]; + const codeColor = () => baseNeutral()[8]; - createEffect(() => { - if (DEBUG) console.log("Page Effected"); - if (DEBUG) console.log(darkMode()); - if (DEBUG) console.log(watchingSwatch()); - }) + createEffect(() => { + if (DEBUG) + // eslint-disable-next-line no-console + console.log('Page Effected'); + if (DEBUG) + // eslint-disable-next-line no-console + console.log(darkMode()); + if (DEBUG) + // eslint-disable-next-line no-console + console.log(watchingSwatch()); + }); - css` + css` .link{ color: ${linkColor()}; } - + .link:hover{ color: ${baseSwatch()[8]} } - + .link-border{ border-color: ${linkColor()}; } @@ -63,15 +65,15 @@ const PlaygroundLanding: Component = () => { -webkit-background-clip: text; -webkit-text-fill-color: transparent; } - + .over{ color: ${baseSwatch()[6]} } - + .icon{ - color: ${baseSwatch()[5]} + color: ${baseSwatch()[5]} } - + .neutral-01{ fill: ${baseNeutral()[1]} } @@ -81,7 +83,7 @@ const PlaygroundLanding: Component = () => { .neutral-03{ fill: ${baseNeutral()[3]} } - + .color-01{ fill: ${baseSwatch()[1]} } @@ -100,15 +102,15 @@ const PlaygroundLanding: Component = () => { .color-06{ fill: ${baseSwatch()[6]} } - + .bg-neutral-00{ background: ${baseNeutral()[0]} } - + .bg-neutral-01{ background: ${baseNeutral()[1]} } - + .paragraph{ color: ${bodyColor()}; } @@ -125,125 +127,150 @@ const PlaygroundLanding: Component = () => { border-top: 1px solid ${codeBorderTop()}; color: ${codeColor()}; } - ` - - return ( - <> - <div class="flex flex-col pb-3 overflow-hidden rounded -m-6 sm:-m-8"> - <div class="flex justify-between items-center px-16 h-16 border-b border-neutral-300 dark:border-neutral-700"> - <div class="flex gap-2"> - <div class="w-6"> - <svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="color-06"/> - <path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="color-06"/> - <path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06"/> - <path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-06"/> - <path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-06"/> - <path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="color-06"/> - <path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-06"/> - <path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-06"/> - </svg> - </div> - <div class="font-[800] text-lg heading">Ambient</div> - </div> - <div> - <DefaultButton type="default"> - Sign in - </DefaultButton> - </div> - </div> - <section class="flex items-center p-16 "> - <div class="flex flex-col gap-4 w-9/12 max-w-xl"> - <h1 class="text-5xl heading font-bold"> - Let your imagination run <div class="heading-special inline">wild!</div> - </h1> - <h2 class="text-2xl paragraph"> - Contrast safe, tested, and beautiful colors! <br/> - Use Flex Colors to design your next website's color palette. - </h2> - <div class="flex flex-wrap py-2 gap-3"> - <DefaultButton type="primary"> - Get started - </DefaultButton> - <DefaultButton type="secondary"> - Why choose Flex? - </DefaultButton> - </div> - <div class="hint"> - <i class="bi bi-arrow-90deg-down pr-2"/>See what we are all about - </div> - </div> - <div class="flex flex-col w-full items-end justify-center gap-2"> - <div class="hidden sm:block w-40 sm:w-52 md:w-64 xl:w-72"> - <svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="neutral-01"/> - <path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="neutral-02"/> - <path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06"/> - <path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-01"/> - <path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-05"/> - <path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="neutral-03"/> - <path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-02"/> - <path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-03"/> - </svg> - </div> - </div> - </section> - <section class="flex flex-col p-16 py-12 bg-neutral-00"> - <p class="over">What sets us apart</p> - <h2 class="text-4xl heading font-bold pb-2"> - Features - </h2> - <p class="paragraph pb-8">Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco - laboris nisi ut <b class="bold">aliquip ex ea commodo consequat.</b></p> - <div class="flex flex-row gap-8"> - <div class="bg-neutral-01 p-8 rounded-md"> - <i class="bi bi-cloud-sun-fill text-4xl icon"/> - <h3 class="text-xl heading font-bold pt-4">Lightweight</h3> - <p class="hint pb-3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> - <a class="link font-semibold underline cursor-pointer">Read More <i class="bi bi-arrow-right"/> </a> - </div> - <div class="bg-neutral-01 p-8 rounded-md"> - <i class="bi bi-bounding-box text-4xl icon"/> - <h3 class="text-xl heading font-bold pt-4">Composable</h3> - <p class="hint pb-3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> - <a class="link font-semibold underline cursor-pointer">Read More <i class="bi bi-arrow-right"/> </a> - </div> - <div class="bg-neutral-01 p-8 rounded-md"> - <i class="bi bi-lightning-fill text-4xl icon"/> - <h3 class="text-xl heading font-bold pt-4">Fast</h3> - <p class="hint pb-3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> - <a class="link font-semibold underline cursor-pointer">Read More <i class="bi bi-arrow-right"/> </a> - </div> - </div> - </section> - <section class="flex flex-col md:flex-row p-16 py-12 gap-12 items-center"> - <div class="flex flex-col"> - <h2 class="text-4xl heading font-bold pb-2"> - About our team - </h2> - <p class="paragraph pb-8">Lorem ipsum dolor sit amet, consectetur adipiscing elit, - sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco - laboris nisi ut <b class="bold">aliquip ex ea commodo consequat.</b>Duis aute irure - dolor in reprehenderit in voluptate velit esse cillum dolore eu - fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id - est laborum.</p> - <DefaultButton type="default"> - Read our blog post <i class="bi bi-arrow-right pl-1"/> - </DefaultButton> - </div> - <img class="flex rounded-md w-full md:w-2/5 h-auto object-cover" - src="https://images.unsplash.com/photo-1546407341-a6b1cff53f9e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=4170&q=80"/> - </section> - <section> - - </section> - </div> - </> - ) -} - -export default PlaygroundLanding + `; + + return ( + <> + <div class="flex flex-col pb-3 overflow-hidden rounded -m-6 sm:-m-8"> + <div class="flex justify-between items-center px-16 h-16 border-b border-neutral-300 dark:border-neutral-700"> + <div class="flex gap-2"> + <div class="w-6"> + <svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="color-06" /> + <path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="color-06" /> + <path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06" /> + <path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-06" /> + <path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-06" /> + <path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="color-06" /> + <path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-06" /> + <path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-06" /> + </svg> + </div> + <div class="font-[800] text-lg heading">Ambient</div> + </div> + <div> + <DefaultButton type="default"> + Sign in + </DefaultButton> + </div> + </div> + <section class="flex items-center p-16 "> + <div class="flex flex-col gap-4 w-9/12 max-w-xl"> + <h1 class="text-5xl heading font-bold"> + Let your imagination run + {' '} + <div class="heading-special inline">wild!</div> + </h1> + <h2 class="text-2xl paragraph"> + Contrast safe, tested, and beautiful colors! + {' '} + <br /> + Use Flex Colors to design your next website's color palette. + </h2> + <div class="flex flex-wrap py-2 gap-3"> + <DefaultButton type="primary"> + Get started + </DefaultButton> + <DefaultButton type="secondary"> + Why choose Flex? + </DefaultButton> + </div> + <div class="hint"> + <i class="bi bi-arrow-90deg-down pr-2" /> + See what we are all about + </div> + </div> + <div class="flex flex-col w-full items-end justify-center gap-2"> + <div class="hidden sm:block w-40 sm:w-52 md:w-64 xl:w-72"> + <svg viewBox="0 0 88 96" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M41.7835 3.21448C43.5002 0.126508 47.4331 -0.925881 50.4625 0.892138L60.0019 6.61697C65.437 9.87873 63.1244 18.2263 56.7857 18.2263H44.0638C39.2974 18.2263 36.2852 13.1053 38.601 8.93931L41.7835 3.21448Z" class="neutral-01" /> + <path d="M0 30.7266C0 27.2747 2.79829 24.4764 6.25015 24.4764H11.7339C16.5678 24.4764 19.572 29.729 17.1211 33.8955L11.6374 43.2179C8.40882 48.7064 0 46.4166 0 40.0489V30.7266Z" class="neutral-02" /> + <path d="M33.5285 36.6747C31.113 32.5658 25.1718 32.5641 22.754 36.6717L7.88563 61.9319C5.43317 66.0984 8.43723 71.3525 13.272 71.3525H42.9898C47.823 71.3525 50.8273 66.1015 48.3779 61.9349L33.5285 36.6747Z" class="color-06" /> + <path d="M87.5019 55.78C87.5019 49.4123 79.0931 47.1225 75.8646 52.6111L70.3808 61.9334C67.9299 66.0999 70.9341 71.3525 75.7681 71.3525H81.2518C84.7036 71.3525 87.5019 68.5542 87.5019 65.1023V55.78Z" class="color-01" /> + <path d="M44.5121 24.4764C39.6789 24.4764 36.6746 29.7275 39.124 33.894L53.9734 59.1542C56.3889 63.2632 62.3301 63.2648 64.7479 59.1572L79.6163 33.897C82.0687 29.7305 79.0647 24.4764 74.2299 24.4764H44.5121Z" class="color-05" /> + <path d="M30.2677 17.5443C33.9787 10.8645 26.4502 3.5828 19.8978 7.51428C13.4032 11.411 16.166 21.3854 23.7398 21.3854C26.4518 21.3854 28.9507 19.9151 30.2677 17.5443Z" class="neutral-03" /> + <path d="M27.5266 89.2132C22.0893 85.9528 24.4009 77.6027 30.7408 77.6027H43.4577C48.2211 77.6027 51.2337 82.7179 48.9238 86.8837L45.7506 92.6063C44.0365 95.6977 40.102 96.7536 37.0704 94.9358L27.5266 89.2132Z" class="color-02" /> + <path d="M63.7438 73.796C60.7932 73.796 58.0749 75.3967 56.6438 77.9771C52.6159 85.2395 60.7997 93.1493 67.9209 88.8766C74.9817 84.6401 71.9781 73.796 63.7438 73.796Z" class="color-03" /> + </svg> + </div> + </div> + </section> + <section class="flex flex-col p-16 py-12 bg-neutral-00"> + <p class="over">What sets us apart</p> + <h2 class="text-4xl heading font-bold pb-2"> + Features + </h2> + <p class="paragraph pb-8"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut + <b class="bold">aliquip ex ea commodo consequat.</b> + </p> + <div class="flex flex-row gap-8"> + <div class="bg-neutral-01 p-8 rounded-md"> + <i class="bi bi-cloud-sun-fill text-4xl icon" /> + <h3 class="text-xl heading font-bold pt-4">Lightweight</h3> + <p class="hint pb-3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> + <a class="link font-semibold underline cursor-pointer"> + Read More + <i class="bi bi-arrow-right" /> + </a> + </div> + <div class="bg-neutral-01 p-8 rounded-md"> + <i class="bi bi-bounding-box text-4xl icon" /> + <h3 class="text-xl heading font-bold pt-4">Composable</h3> + <p class="hint pb-3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> + <a class="link font-semibold underline cursor-pointer"> + Read More + <i class="bi bi-arrow-right" /> + </a> + </div> + <div class="bg-neutral-01 p-8 rounded-md"> + <i class="bi bi-lightning-fill text-4xl icon" /> + <h3 class="text-xl heading font-bold pt-4">Fast</h3> + <p class="hint pb-3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> + <a class="link font-semibold underline cursor-pointer"> + Read More + <i class="bi bi-arrow-right" /> + </a> + </div> + </div> + </section> + <section class="flex flex-col md:flex-row p-16 py-12 gap-12 items-center"> + <div class="flex flex-col"> + <h2 class="text-4xl heading font-bold pb-2"> + About our team + </h2> + <p class="paragraph pb-8"> + Lorem ipsum dolor sit amet, consectetur adipiscing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + Ut enim ad minim veniam, quis nostrud exercitation ullamco + laboris nisi ut + <b class="bold">aliquip ex ea commodo consequat.</b> + Duis aute irure + dolor in reprehenderit in voluptate velit esse cillum dolore eu + fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. + </p> + <DefaultButton type="default"> + Read our blog post + {' '} + <i class="bi bi-arrow-right pl-1" /> + </DefaultButton> + </div> + <img + class="flex rounded-md w-full md:w-2/5 h-auto object-cover" + src="https://images.unsplash.com/photo-1546407341-a6b1cff53f9e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=4170&q=80" + /> + </section> + <section> + + </section> + </div> + </> + ); +}; + +export default PlaygroundLanding; diff --git a/src/components/playground/components/sandboxCard.tsx b/src/components/playground/components/sandboxCard.tsx index cde3f4a..0c0ab3c 100644 --- a/src/components/playground/components/sandboxCard.tsx +++ b/src/components/playground/components/sandboxCard.tsx @@ -1,40 +1,41 @@ -import { createSignal, ParentComponent, Show } from "solid-js"; -import Button from "../../../assets/components/button.styled"; -import { BaseBackgroundArr } from "../../../functions/colorConfig"; +import type { ParentComponent } from 'solid-js'; +import { Show, createSignal } from 'solid-js'; +import Button from '../../../assets/components/button.styled'; +import { BaseBackgroundArr } from '../../../functions/colorConfig'; const SandboxCard: ParentComponent = (props) => { + const [open, setOpen] = createSignal(false); - const [open, setOpen] = createSignal(false) + return ( + <> + <Show + when={open()} + > + <div class="fixed w-screen max-h-screen overflow-x-scroll bg-black bg-opacity-90 dark:bg-opacity-70 top-0 left-0 z-[9998] backdrop-blur"> + <div class="flex w-full h-full justify-center items-center p-6 sm:p-8 z-[9999]"> + <div class={`relative rounded border w-full max-w-screen-xl + border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${BaseBackgroundArr[1]}] shadow p-6 sm:p-8`} + > + <div class="absolute right-4 top-3" onClick={() => setOpen(false)}> + <Button aria="Toggle Fullscreen View" square> + <i class="bi bi-fullscreen-exit -mx-[3.5px]"></i> + </Button> + </div> + {props.children} + </div> + </div> + </div> + </Show> + <div class={`relative rounded border w-full border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${BaseBackgroundArr[1]}] shadow p-6 sm:p-8`}> + <div class="absolute right-4 top-3" onClick={() => setOpen(true)}> + <Button aria="Toggle Fullscreen View" square> + <i class="bi bi-fullscreen -mx-[3.5px]"></i> + </Button> + </div> + {props.children} + </div> + </> + ); +}; - return ( - <> - <Show - when={open()} - > - <div class="fixed w-screen max-h-screen overflow-x-scroll bg-black bg-opacity-90 dark:bg-opacity-70 top-0 left-0 z-[9998] backdrop-blur"> - <div class="flex w-full h-full justify-center items-center p-6 sm:p-8 z-[9999]"> - <div class={`relative rounded border w-full max-w-screen-xl - border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${BaseBackgroundArr[1]}] shadow p-6 sm:p-8`}> - <div class="absolute right-4 top-3" onClick={() => setOpen(false)}> - <Button aria={"Toggle Fullscreen View"} square> - <i class="bi bi-fullscreen-exit -mx-[3.5px]"></i> - </Button> - </div> - {props.children} - </div> - </div> - </div> - </Show> - <div class={`relative rounded border w-full border-neutral-300 bg-white dark:border-neutral-800 dark:bg-[${BaseBackgroundArr[1]}] shadow p-6 sm:p-8`}> - <div class="absolute right-4 top-3" onClick={() => setOpen(true)}> - <Button aria={"Toggle Fullscreen View"} square> - <i class="bi bi-fullscreen -mx-[3.5px]"></i> - </Button> - </div> - {props.children} - </div> - </> - ) -} - -export default SandboxCard +export default SandboxCard; diff --git a/src/components/playground/pages/buttonPlaygroundPage.tsx b/src/components/playground/pages/buttonPlaygroundPage.tsx index 8378c52..1f02b13 100644 --- a/src/components/playground/pages/buttonPlaygroundPage.tsx +++ b/src/components/playground/pages/buttonPlaygroundPage.tsx @@ -1,139 +1,139 @@ -import { Component } from "solid-js"; -import Collapsible from "../../../assets/components/collapsible.styled"; -import ToggleColorScale, { currScaleText } from "../../shared/toggleColorScale"; -import DefaultButton from "../components/defaultButton"; -import Divider from "../components/divider"; -import PlaygroundButtons from "../components/playgroundButtons"; -import SandboxCard from "../components/sandboxCard"; -import AccessibilityCheck from "../../shared/accessibilityCheck"; +import type { Component } from 'solid-js'; +import Collapsible from '../../../assets/components/collapsible.styled'; +import ToggleColorScale, { currScaleText } from '../../shared/toggleColorScale'; +import DefaultButton from '../components/defaultButton'; +import Divider from '../components/divider'; +import PlaygroundButtons from '../components/playgroundButtons'; +import SandboxCard from '../components/sandboxCard'; +import AccessibilityCheck from '../../shared/accessibilityCheck'; const ButtonPlaygroundPage: Component = () => { - return ( - <div class="flex flex-col"> - <div class='flex justify-center px-4 sm:px-6'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6'> - <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> - Components - </h6> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Buttons - </h1> - <p class='text-slate-600 dark:text-neutral-400 pb-6'> - This area was created for users to see the effect of Color Scales on UIUX components. We have devised components to test your color scales to. - </p> - <h1 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> - Color Swatch - </h1> - <div class="flex gap-x-2"> - <ToggleColorScale/> - </div> - </div> - </div> - <div class='flex flex-auto flex-col justify-center w-full px-4 sm:px-6'> - <div class='flex flex-col gap-x-8 w-full max-w-screen-2xl'> - <div class='flex flex-col'> - <h4 class="text-slate-600 dark:text-neutral-400"> - Active Color Swatch - </h4> - <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> - {currScaleText()} - </h3> - </div> - <Divider/> - <div class="flex flex-col gap-8"> + return ( + <div class="flex flex-col"> + <div class="flex justify-center px-4 sm:px-6"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"> + <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> + Components + </h6> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Buttons + </h1> + <p class="text-slate-600 dark:text-neutral-400 pb-6"> + This area was created for users to see the effect of Color Scales on UIUX components. We have devised components to test your color scales to. + </p> + <h1 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> + Color Swatch + </h1> + <div class="flex gap-x-2"> + <ToggleColorScale /> + </div> + </div> + </div> + <div class="flex flex-auto flex-col justify-center w-full px-4 sm:px-6"> + <div class="flex flex-col gap-x-8 w-full max-w-screen-2xl"> + <div class="flex flex-col"> + <h4 class="text-slate-600 dark:text-neutral-400"> + Active Color Swatch + </h4> + <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> + {currScaleText()} + </h3> + </div> + <Divider /> + <div class="flex flex-col gap-8"> - <Collapsible title="Possible color combinations for button"> - <div class="flex flex-col gap-2 pb-6 pt-2"> - <h6 class="text-slate-800 dark:text-slate-200"> - Secondary Buttons - Increase text contrast on hover - </h6> - <AccessibilityCheck APCA WCAG/> - <PlaygroundButtons baseColorPos={2}/> + <Collapsible title="Possible color combinations for button"> + <div class="flex flex-col gap-2 pb-6 pt-2"> + <h6 class="text-slate-800 dark:text-slate-200"> + Secondary Buttons - Increase text contrast on hover + </h6> + <AccessibilityCheck APCA WCAG /> + <PlaygroundButtons baseColorPos={2} /> - <h6 class="text-slate-800 dark:text-slate-200 pt-3"> - Primary Buttons - Increase text contrast on hover - </h6> - <AccessibilityCheck APCA WCAG={false}/> - <PlaygroundButtons baseColorPos={5} border="top"/> + <h6 class="text-slate-800 dark:text-slate-200 pt-3"> + Primary Buttons - Increase text contrast on hover + </h6> + <AccessibilityCheck APCA WCAG={false} /> + <PlaygroundButtons baseColorPos={5} border="top" /> - <h6 class="text-slate-800 dark:text-slate-200 pt-3"> - Primary Buttons - Colorful text - </h6> - <AccessibilityCheck APCA WCAG={false}/> - <PlaygroundButtons baseColorPos={5} border="top" textColorful/> + <h6 class="text-slate-800 dark:text-slate-200 pt-3"> + Primary Buttons - Colorful text + </h6> + <AccessibilityCheck APCA WCAG={false} /> + <PlaygroundButtons baseColorPos={5} border="top" textColorful /> - <h6 class="text-slate-800 dark:text-slate-200 pt-3"> - Secondary Buttons (Default) - Colorful text - </h6> - <AccessibilityCheck APCA WCAG/> - <PlaygroundButtons baseColorPos={2} textColorful/> + <h6 class="text-slate-800 dark:text-slate-200 pt-3"> + Secondary Buttons (Default) - Colorful text + </h6> + <AccessibilityCheck APCA WCAG /> + <PlaygroundButtons baseColorPos={2} textColorful /> - <h6 class="text-slate-800 dark:text-slate-200 pt-3"> - Primary Buttons (Default) - Increase button contrast on hover - </h6> - <AccessibilityCheck APCA WCAG={false}/> - <PlaygroundButtons baseColorPos={5} border="top" direction={1}/> - </div> - </Collapsible> - <div class="flex flex-col gap-3"> - <h6 class="text-lg text-slate-800 dark:text-slate-200 pb-2"> - Secondary Buttons - </h6> - <AccessibilityCheck APCA WCAG/> - <PlaygroundButtons baseColorPos={2} border="full" textColorful direction={1}/> - </div> - <div class="flex flex-col gap-3"> - <h6 class="text-lg text-slate-800 dark:text-slate-200 pb-2"> - Primary Buttons - </h6> - <AccessibilityCheck APCA WCAG={false}/> - <PlaygroundButtons baseColorPos={5} border="top" direction={1}/> - </div> - <div class="flex flex-col gap-3"> - <h6 class="text-lg text-slate-800 dark:text-slate-200"> - Default Button - </h6> - <AccessibilityCheck APCA/> - <SandboxCard> - <div class="flex w-full justify-center"> - <DefaultButton type="default"> - Default Button - </DefaultButton> - </div> - </SandboxCard> - </div> - <div class="flex flex-col gap-3"> - <h6 class="text-lg text-slate-800 dark:text-slate-200"> - Default Secondary Button - </h6> - <AccessibilityCheck APCA/> + <h6 class="text-slate-800 dark:text-slate-200 pt-3"> + Primary Buttons (Default) - Increase button contrast on hover + </h6> + <AccessibilityCheck APCA WCAG={false} /> + <PlaygroundButtons baseColorPos={5} border="top" direction={1} /> + </div> + </Collapsible> + <div class="flex flex-col gap-3"> + <h6 class="text-lg text-slate-800 dark:text-slate-200 pb-2"> + Secondary Buttons + </h6> + <AccessibilityCheck APCA WCAG /> + <PlaygroundButtons baseColorPos={2} border="full" textColorful direction={1} /> + </div> + <div class="flex flex-col gap-3"> + <h6 class="text-lg text-slate-800 dark:text-slate-200 pb-2"> + Primary Buttons + </h6> + <AccessibilityCheck APCA WCAG={false} /> + <PlaygroundButtons baseColorPos={5} border="top" direction={1} /> + </div> + <div class="flex flex-col gap-3"> + <h6 class="text-lg text-slate-800 dark:text-slate-200"> + Default Button + </h6> + <AccessibilityCheck APCA /> + <SandboxCard> + <div class="flex w-full justify-center"> + <DefaultButton type="default"> + Default Button + </DefaultButton> + </div> + </SandboxCard> + </div> + <div class="flex flex-col gap-3"> + <h6 class="text-lg text-slate-800 dark:text-slate-200"> + Default Secondary Button + </h6> + <AccessibilityCheck APCA /> - <SandboxCard> - <div class="flex w-full justify-center"> - <DefaultButton type="secondary"> - Secondary Button - </DefaultButton> - </div> - </SandboxCard> - </div> - <div class="flex flex-col gap-3"> - <h6 class="text-lg text-slate-800 dark:text-slate-200"> - Default Primary Button - </h6> - <AccessibilityCheck APCA/> - <SandboxCard> - <div class="flex w-full justify-center"> - <DefaultButton type="primary"> - Primary Button - </DefaultButton> - </div> - </SandboxCard> - </div> - </div> - </div> - </div> - </div> - ) -} + <SandboxCard> + <div class="flex w-full justify-center"> + <DefaultButton type="secondary"> + Secondary Button + </DefaultButton> + </div> + </SandboxCard> + </div> + <div class="flex flex-col gap-3"> + <h6 class="text-lg text-slate-800 dark:text-slate-200"> + Default Primary Button + </h6> + <AccessibilityCheck APCA /> + <SandboxCard> + <div class="flex w-full justify-center"> + <DefaultButton type="primary"> + Primary Button + </DefaultButton> + </div> + </SandboxCard> + </div> + </div> + </div> + </div> + </div> + ); +}; -export default ButtonPlaygroundPage +export default ButtonPlaygroundPage; diff --git a/src/components/playground/pages/documentationSamplePage.tsx b/src/components/playground/pages/documentationSamplePage.tsx index baca5c5..2c39239 100644 --- a/src/components/playground/pages/documentationSamplePage.tsx +++ b/src/components/playground/pages/documentationSamplePage.tsx @@ -1,31 +1,31 @@ -import { Component } from "solid-js"; -import { colorsToArr } from "../../../functions/colorConfig"; -import ColorSwatchLarge from "../../colorSwatchLarge"; -import { visibleColorScale } from "../../shared/toggleColorScale"; -import PlaygroundDocumentation from "../components/playgroundDocumentation"; -import SandboxCard from "../components/sandboxCard"; +import type { Component } from 'solid-js'; +import { colorsToArr } from '../../../functions/colorConfig'; +import ColorSwatchLarge from '../../colorSwatchLarge'; +import { visibleColorScale } from '../../shared/toggleColorScale'; +import PlaygroundDocumentation from '../components/playgroundDocumentation'; +import SandboxCard from '../components/sandboxCard'; const DocumentationSamplePage: Component = () => { - return( - <> - <div class='flex flex-col justify-center px-4 sm:px-6'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6'> - <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> - Pages - </h6> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Documentation - </h1> - </div> + return ( + <> + <div class="flex flex-col justify-center px-4 sm:px-6"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"> + <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> + Pages + </h6> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Documentation + </h1> + </div> - <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={colorsToArr(visibleColorScale())}trackIndex='id' disableText/> + <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={colorsToArr(visibleColorScale())}trackIndex="id" disableText /> - <SandboxCard> - <PlaygroundDocumentation/> - </SandboxCard> - </div> - </> - ) -} + <SandboxCard> + <PlaygroundDocumentation /> + </SandboxCard> + </div> + </> + ); +}; -export default DocumentationSamplePage +export default DocumentationSamplePage; diff --git a/src/components/playground/pages/introPlaygroundPage.tsx b/src/components/playground/pages/introPlaygroundPage.tsx index c1ef4c4..15739c2 100644 --- a/src/components/playground/pages/introPlaygroundPage.tsx +++ b/src/components/playground/pages/introPlaygroundPage.tsx @@ -1,68 +1,68 @@ -import { Component } from "solid-js"; -import Divider from "../components/divider"; +import type { Component } from 'solid-js'; +import Divider from '../components/divider'; const IntroPlaygroundPage: Component = () => { - return( - <div class="flex flex-col w-full"> - <div class='flex flex-col w-full justify-center px-4 sm:px-6'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1'> - <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> - Components - </h6> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Introduction - </h1> - <p class='text-slate-600 dark:text-neutral-400'> - The Playground was created for users to quickly test and see how different colors may look in different UIUX applications. - </p> - </div> - <Divider/> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-2 pb-6'> - <div class='flex flex-col'> - <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> - Changing Color Scales - </h3> - </div> - <p class='text-slate-600 dark:text-neutral-400 pb-6'> - Some components supports the ability to change color schemes. To do this please select the desired color scheme from the top of the page. - </p> - <div class='flex flex-col'> - <h4 class="text-slate-600 dark:text-neutral-400"> - Shortcuts - </h4> - <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> - Changing Dark/Light Modes - </h3> - </div> - <p class='text-slate-600 dark:text-neutral-400 pb-6'> - Cmd + k or Ctrl + k can be used to quickly switch between Dark and Light Mode at any page in the application. There is also a helpful toggle on the top of the navigation page. - </p> - <div class='flex flex-col'> - <h4 class="text-slate-600 dark:text-neutral-400"> - Interactive components - </h4> - <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> - Components with changing colors - </h3> - </div> - <p class='text-slate-600 dark:text-neutral-400 pb-6'> - The Playground was created for users to quickly test and see how different colors may look in different UIUX applications. - </p> - <div class='flex flex-col'> - <h4 class="text-slate-600 dark:text-neutral-400"> - Components vs Pages - </h4> - <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> - Playground Components - </h3> - </div> - <p class='text-slate-600 dark:text-neutral-400 pb-6'> - Components define possible UIUX elements while Pages define the sample pages that are created through Ambient. - </p> - </div> - </div> - </div> - ) -} + return ( + <div class="flex flex-col w-full"> + <div class="flex flex-col w-full justify-center px-4 sm:px-6"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1"> + <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> + Components + </h6> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Introduction + </h1> + <p class="text-slate-600 dark:text-neutral-400"> + The Playground was created for users to quickly test and see how different colors may look in different UIUX applications. + </p> + </div> + <Divider /> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-2 pb-6"> + <div class="flex flex-col"> + <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> + Changing Color Scales + </h3> + </div> + <p class="text-slate-600 dark:text-neutral-400 pb-6"> + Some components supports the ability to change color schemes. To do this please select the desired color scheme from the top of the page. + </p> + <div class="flex flex-col"> + <h4 class="text-slate-600 dark:text-neutral-400"> + Shortcuts + </h4> + <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> + Changing Dark/Light Modes + </h3> + </div> + <p class="text-slate-600 dark:text-neutral-400 pb-6"> + Cmd + k or Ctrl + k can be used to quickly switch between Dark and Light Mode at any page in the application. There is also a helpful toggle on the top of the navigation page. + </p> + <div class="flex flex-col"> + <h4 class="text-slate-600 dark:text-neutral-400"> + Interactive components + </h4> + <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> + Components with changing colors + </h3> + </div> + <p class="text-slate-600 dark:text-neutral-400 pb-6"> + The Playground was created for users to quickly test and see how different colors may look in different UIUX applications. + </p> + <div class="flex flex-col"> + <h4 class="text-slate-600 dark:text-neutral-400"> + Components vs Pages + </h4> + <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> + Playground Components + </h3> + </div> + <p class="text-slate-600 dark:text-neutral-400 pb-6"> + Components define possible UIUX elements while Pages define the sample pages that are created through Ambient. + </p> + </div> + </div> + </div> + ); +}; -export default IntroPlaygroundPage +export default IntroPlaygroundPage; diff --git a/src/components/playground/pages/landingSamplePage.tsx b/src/components/playground/pages/landingSamplePage.tsx index 6cb93f2..cc99829 100644 --- a/src/components/playground/pages/landingSamplePage.tsx +++ b/src/components/playground/pages/landingSamplePage.tsx @@ -1,31 +1,31 @@ -import { Component } from "solid-js"; -import { colorsToArr } from "../../../functions/colorConfig"; -import ColorSwatchLarge from "../../colorSwatchLarge"; -import { visibleColorScale } from "../../shared/toggleColorScale"; -import SandboxCard from "../components/sandboxCard"; -import PlaygroundLanding from "../components/playgroundLanding"; +import type { Component } from 'solid-js'; +import { colorsToArr } from '../../../functions/colorConfig'; +import ColorSwatchLarge from '../../colorSwatchLarge'; +import { visibleColorScale } from '../../shared/toggleColorScale'; +import SandboxCard from '../components/sandboxCard'; +import PlaygroundLanding from '../components/playgroundLanding'; const LandingSamplePage: Component = () => { - return( - <> - <div class='flex flex-col justify-center px-4 sm:px-6'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6'> - <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> - Pages - </h6> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Landing Page - </h1> - </div> + return ( + <> + <div class="flex flex-col justify-center px-4 sm:px-6"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"> + <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> + Pages + </h6> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Landing Page + </h1> + </div> - <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={colorsToArr(visibleColorScale())} trackIndex='id' disableText/> + <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={colorsToArr(visibleColorScale())} trackIndex="id" disableText /> - <SandboxCard> - <PlaygroundLanding/> - </SandboxCard> - </div> - </> - ) -} + <SandboxCard> + <PlaygroundLanding /> + </SandboxCard> + </div> + </> + ); +}; -export default LandingSamplePage +export default LandingSamplePage; diff --git a/src/components/playground/pages/testerPage.tsx b/src/components/playground/pages/testerPage.tsx index 1bcb23c..3b82dee 100644 --- a/src/components/playground/pages/testerPage.tsx +++ b/src/components/playground/pages/testerPage.tsx @@ -1,32 +1,33 @@ -import { Component, createEffect, onError, onMount } from "solid-js" -import { css } from "solid-styled" -import Button from "../../../assets/components/button.styled"; -import { colorsToArr } from "../../../functions/colorConfig"; -import ToggleColorScale, { visibleColorScale } from "../../shared/toggleColorScale"; - +import type { Component } from 'solid-js'; +import { createEffect } from 'solid-js'; +import { css } from 'solid-styled'; +import { colorsToArr } from '../../../functions/colorConfig'; +import ToggleColorScale, { visibleColorScale } from '../../shared/toggleColorScale'; const TesterPage: Component = () => { - const Array = () => visibleColorScale(); - const ColorArray = () => colorsToArr(Array()); + // eslint-disable-next-line unused-imports/no-unused-vars + const Array = () => visibleColorScale(); + const ColorArray = () => colorsToArr({}); - createEffect(() => { - console.log(ColorArray()[5][2]) - }) + createEffect(() => { + // eslint-disable-next-line no-console + console.log(ColorArray()[5][2]); + }); - css` + css` .text-style{ color: ${ColorArray()[5][2]}; } - ` + `; - return ( - <> - <ToggleColorScale/> - <div class="text-2xl text-style"> - Testing Reactivity - </div> - </> - ) -} + return ( + <> + <ToggleColorScale /> + <div class="text-2xl text-style"> + Testing Reactivity + </div> + </> + ); +}; -export default TesterPage +export default TesterPage; diff --git a/src/components/playground/pages/textPlaygroundPage.tsx b/src/components/playground/pages/textPlaygroundPage.tsx index 9b5a321..1d4427b 100644 --- a/src/components/playground/pages/textPlaygroundPage.tsx +++ b/src/components/playground/pages/textPlaygroundPage.tsx @@ -1,135 +1,166 @@ -import { Component, For } from "solid-js"; -import { focused } from "../../../functions/keyHandler"; -import ColorSwatchHelper from "../../colorSwatchHelper"; -import { visibleColorScale } from "../../shared/toggleColorScale"; -import Divider from "../components/divider"; -import Heading from "../components/heading"; -import HelperBadge from "../components/helperBadge"; -import LinkAnchor from "../components/link"; -import Paragraph from "../components/paragraph"; -import SandboxCard from "../components/sandboxCard"; -import AccessibilityCheck from "../../shared/accessibilityCheck"; +import type { Component } from 'solid-js'; +import { For } from 'solid-js'; +import { focused } from '../../../functions/keyHandler'; +import ColorSwatchHelper from '../../colorSwatchHelper'; +import { visibleColorScale } from '../../shared/toggleColorScale'; +import Divider from '../components/divider'; +import Heading from '../components/heading'; +import HelperBadge from '../components/helperBadge'; +import LinkAnchor from '../components/link'; +import Paragraph from '../components/paragraph'; +import SandboxCard from '../components/sandboxCard'; +import AccessibilityCheck from '../../shared/accessibilityCheck'; const TextPlaygroundPage: Component = () => { + const headingSizes = [1, 2, 3, 4, 5, 6]; - const headingSizes = [1, 2, 3, 4, 5, 6] + const textTypes = ['default', 'hint', 'bold']; + const textSizes = ['small', 'base', 'large']; - const textTypes = ['default', 'hint', 'bold'] - const textSizes = ['small', 'base', 'large'] + return ( + <> + <div class="flex flex-col justify-center px-4 sm:px-6"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1"> + <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> + Components + </h6> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Typography + </h1> + </div> + <Divider /> + <div class="flex flex-col gap-y-4 pb-12"> + <h6 class="text-lg text-slate-800 dark:text-slate-200 pt-2"> + Headings + </h6> + <AccessibilityCheck APCA /> - return( - <> - <div class='flex flex-col justify-center px-4 sm:px-6'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1'> - <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> - Components - </h6> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Typography - </h1> - </div> - <Divider/> - <div class="flex flex-col gap-y-4 pb-12"> - <h6 class="text-lg text-slate-800 dark:text-slate-200 pt-2"> - Headings - </h6> - <AccessibilityCheck APCA/> + <ColorSwatchHelper track="neutral" active={[9]} activeHelper={['Default']} /> + <For each={headingSizes}> + {size => ( + <Heading size={size}> + This is a heading of size + {' '} + {size} + <HelperBadge margin> + {Object.keys(visibleColorScale())[0].toLocaleLowerCase()} + {' '} + 09 + </HelperBadge> + </Heading> + )} + </For> - <ColorSwatchHelper track="neutral" active={[9]} activeHelper={['Default']}/> - <For each={headingSizes}>{size => ( - <Heading size={size}> - This is a heading of size {size} - <HelperBadge margin> - {Object.keys(visibleColorScale())[0].toLocaleLowerCase()} 09 - </HelperBadge> - </Heading> - )}</For> + <h6 class="text-lg text-slate-800 dark:text-slate-200 pt-3 pb-1"> + Paragraphs (body) + </h6> + <AccessibilityCheck APCA /> - <h6 class="text-lg text-slate-800 dark:text-slate-200 pt-3 pb-1"> - Paragraphs (body) - </h6> - <AccessibilityCheck APCA/> + <ColorSwatchHelper track="neutral" active={[4, 7, 8]} activeHelper={['Hint', 'Default', 'Bold']} /> + <For each={textTypes}> + {type => ( + <For each={textSizes}> + {size => ( + <Paragraph size={size} class={type}> + This is the + {' '} + {type} + {' '} + paragraph text of size + {size} + <HelperBadge margin> + {Object.keys(visibleColorScale())[0].toLocaleLowerCase()} + {' '} + {type === 'bold' ? ' 08' : type === 'hint' ? ' 04' : ' 07'} + </HelperBadge> + </Paragraph> + )} + </For> + )} + </For> - <ColorSwatchHelper track="neutral" active={[4, 7, 8]} activeHelper={['Hint', 'Default', 'Bold']}/> - <For each={textTypes}>{type => ( - <For each={textSizes}>{size => ( - <Paragraph size={size} class={type}> - This is the {type} paragraph text of size {size} - <HelperBadge margin> - {Object.keys(visibleColorScale())[0].toLocaleLowerCase()} {type=='bold' ? ' 08' : type=='hint' ? ' 04' : ' 07'} - </HelperBadge> - </Paragraph> - )}</For> - )}</For> + <h6 class="text-lg text-slate-800 dark:text-slate-200 pt-3 pb-1"> + Links + </h6> + <AccessibilityCheck APCA WCAG={false} /> - <h6 class="text-lg text-slate-800 dark:text-slate-200 pt-3 pb-1"> - Links - </h6> - <AccessibilityCheck APCA WCAG={false}/> + <ColorSwatchHelper track="color" active={[3, 4, 6, 7]} activeHelper={['Hint Hover', 'Hint', 'Default Hover', 'Default']} /> + <For each={textSizes}> + {size => ( + <LinkAnchor size={size}> + This is the default link of size + {' '} + {size} + <HelperBadge margin> + {Object.keys(visibleColorScale())[focused()[1]].toLocaleLowerCase()} + {' '} + 07 + </HelperBadge> + </LinkAnchor> + )} + </For> + <For each={textSizes}> + {size => ( + <LinkAnchor size={size} class="hint"> + This is the hint link of size + {' '} + {size} + <HelperBadge margin> + {Object.keys(visibleColorScale())[focused()[1]].toLocaleLowerCase()} + {' '} + 04 + </HelperBadge> + </LinkAnchor> + )} + </For> + </div> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1"> + <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> + Sample + </h6> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Typography sample + </h1> + </div> + <Divider /> + <div class="flex flex-col gap-y-4"> + <SandboxCard> + <div> + <Heading size={1}> + We do things differently, + </Heading> + <Heading size={1}> + Its what makes us unique. + </Heading> + </div> + <Divider /> + <div class="flex flex-col gap-4"> + <Paragraph> + <Paragraph class="bold"> + Technology can be complicated sometimes. It has its own ecosystem, its own language, and it’s just difficult to understand how it works. + </Paragraph> + Some of us humans may not get it easily. This is why our core value is to build an intimate and intricate connection between technology and humans. + After all tech is built to help humans. + </Paragraph> + <Paragraph> + Our technology is for everyone. Our tech is humanly familiar. This is perhaps what we thrive the most, which makes us different from the other traditional agencies. + We care deeply about helping you tackle your most significant challenges and turn your vision into reality, keeping the end-user in mind at all times. With us, it’s never just about the project in hand. + <Paragraph class="bold"> + It’s about building trust and enabling your long-term success. + </Paragraph> + We will meet you where you are on your journey, integrate our people with yours, and share our skills every step of the way to make the product you envisioned a reality. + </Paragraph> + <LinkAnchor> + Check out what makes us different + {' '} + <i class="bi bi-arrow-right" /> + </LinkAnchor> + </div> + </SandboxCard> + </div> + </div> + </> + ); +}; - <ColorSwatchHelper track="color" active={[3, 4, 6, 7]} activeHelper={['Hint Hover', 'Hint', 'Default Hover', 'Default']}/> - <For each={textSizes}>{size => ( - <LinkAnchor size={size}> - This is the default link of size {size} - <HelperBadge margin> - {Object.keys(visibleColorScale())[focused()[1]].toLocaleLowerCase()} 07 - </HelperBadge> - </LinkAnchor> - )}</For> - <For each={textSizes}>{size => ( - <LinkAnchor size={size} class="hint"> - This is the hint link of size {size} - <HelperBadge margin> - {Object.keys(visibleColorScale())[focused()[1]].toLocaleLowerCase()} 04 - </HelperBadge> - </LinkAnchor> - )}</For> - </div> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1'> - <h6 class="font-semibold text-sm text-am-pink dark:text-am-pink-light"> - Sample - </h6> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Typography sample - </h1> - </div> - <Divider/> - <div class="flex flex-col gap-y-4"> - <SandboxCard> - <div> - <Heading size={1}> - We do things differently, - </Heading> - <Heading size={1}> - Its what makes us unique. - </Heading> - </div> - <Divider/> - <div class="flex flex-col gap-4"> - <Paragraph> - <Paragraph class="bold"> - Technology can be complicated sometimes. It has its own ecosystem, its own language, and it’s just difficult to understand how it works. - </Paragraph> - Some of us humans may not get it easily. This is why our core value is to build an intimate and intricate connection between technology and humans. - After all tech is built to help humans. - </Paragraph> - <Paragraph> - Our technology is for everyone. Our tech is humanly familiar. This is perhaps what we thrive the most, which makes us different from the other traditional agencies. - We care deeply about helping you tackle your most significant challenges and turn your vision into reality, keeping the end-user in mind at all times. With us, it’s never just about the project in hand. - <Paragraph class="bold"> - It’s about building trust and enabling your long-term success. - </Paragraph> - We will meet you where you are on your journey, integrate our people with yours, and share our skills every step of the way to make the product you envisioned a reality. - </Paragraph> - <LinkAnchor> - Check out what makes us different <i class="bi bi-arrow-right"/> - </LinkAnchor> - </div> - </SandboxCard> - </div> - </div> - </> - ) -} - -export default TextPlaygroundPage +export default TextPlaygroundPage; diff --git a/src/components/playground/playgroundRoutes.tsx b/src/components/playground/playgroundRoutes.tsx index e429272..4446151 100644 --- a/src/components/playground/playgroundRoutes.tsx +++ b/src/components/playground/playgroundRoutes.tsx @@ -1,28 +1,30 @@ -import { Route } from "@solidjs/router"; -import { Component, lazy } from "solid-js"; -import TesterPage from "./pages/testerPage"; -import TextPlaygroundPage from "./pages/textPlaygroundPage"; -import LandingSamplePage from "./pages/landingSamplePage"; -const PlaygroundPage = lazy (() => import("../../pages/playgroundPage")); -const ButtonPlaygroundPage = lazy(() => import("./pages/buttonPlaygroundPage")); -const IntroPlaygroundPage = lazy(() => import("./pages/introPlaygroundPage")); -const DocumentationSamplePage = lazy (() => import("./pages/documentationSamplePage")); +import { Route } from '@solidjs/router'; +import type { Component } from 'solid-js'; +import { lazy } from 'solid-js'; +import TesterPage from './pages/testerPage'; +import TextPlaygroundPage from './pages/textPlaygroundPage'; +import LandingSamplePage from './pages/landingSamplePage'; + +const PlaygroundPage = lazy (() => import('../../pages/playgroundPage')); +const ButtonPlaygroundPage = lazy(() => import('./pages/buttonPlaygroundPage')); +const IntroPlaygroundPage = lazy(() => import('./pages/introPlaygroundPage')); +const DocumentationSamplePage = lazy (() => import('./pages/documentationSamplePage')); const PlaygroundRoutes: Component = () => { - return ( - <> - <Route path="/playground" component={PlaygroundPage}> - <Route path="/intro" component={IntroPlaygroundPage}/> - <Route path="/buttons" component={ButtonPlaygroundPage}/> - <Route path="/texts" component={TextPlaygroundPage}/> + return ( + <> + <Route path="/playground" component={PlaygroundPage}> + <Route path="/intro" component={IntroPlaygroundPage} /> + <Route path="/buttons" component={ButtonPlaygroundPage} /> + <Route path="/texts" component={TextPlaygroundPage} /> - <Route path="/documentation" component={DocumentationSamplePage}/> - <Route path="/landing" component={LandingSamplePage}/> + <Route path="/documentation" component={DocumentationSamplePage} /> + <Route path="/landing" component={LandingSamplePage} /> - <Route path="/test" component={TesterPage}/> - </Route> - </> - ) -} + <Route path="/test" component={TesterPage} /> + </Route> + </> + ); +}; -export default PlaygroundRoutes +export default PlaygroundRoutes; diff --git a/src/components/shared/accessibilityCheck.tsx b/src/components/shared/accessibilityCheck.tsx index 6544203..5373190 100644 --- a/src/components/shared/accessibilityCheck.tsx +++ b/src/components/shared/accessibilityCheck.tsx @@ -1,60 +1,70 @@ -import {Component, Show} from "solid-js"; +import type { Component } from 'solid-js'; +import { Show } from 'solid-js'; type IAccessibilityCheckProps = Component< & { - APCA?: boolean; - WCAG?: boolean; + APCA?: boolean + WCAG?: boolean }>; const AccessibilityCheck: IAccessibilityCheckProps = (props) => { - return ( - <div class={"flex gap-x-2"}> - <Show when={props.APCA}> - <div class={`mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 + return ( + <div class="flex gap-x-2"> + <Show when={props.APCA}> + <div class={`mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-[#6bc28066] via-[#a5dcb242] to-transparent - dark:from-[#01542366] dark:via-[#0f3f2042] dark:to-transparent - font-semibold text-sm inline dark:text-white`}> - <div class={"rounded-full bg-green-700 inline mr-2"}><i class={"bi bi-check-all p-1 text-white"}/></div> - APCA Contrast Passing - </div> - </Show> - <Show when={props.WCAG}> - <div class={`mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 + dark:from-[#01542366] dark:via-[#0f3f2042] dark:to-transparent + font-semibold text-sm inline dark:text-white`} + > + <div class="rounded-full bg-green-700 inline mr-2"><i class="bi bi-check-all p-1 text-white" /></div> + APCA Contrast Passing + </div> + </Show> + <Show when={props.WCAG}> + <div class={`mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-[#ffd56b36] via-[#fff7e142] to-transparent - dark:from-[#472b1366] dark:via-[#61401642] dark:to-transparent - font-semibold text-sm inline dark:text-neutral-400 text-neutral-600 group`}> - <div class={"rounded-full bg-[#ffd56b] inline mr-2"}><i class={"bi bi-check p-1 text-yellow-800"}/></div> - WCAG AA Contrast Passing - <Show when={!props.APCA}> - <a><i class={"bi bi-info-circle-fill ml-2"}></i></a> - <div role="tooltip" class={`rounded-md border border-neutral-300 dark:border-neutral-600 shadow-md - bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 - px-3.5 py-2.5 text-sm w-80 absolute z-40 hidden group-hover:block`}> - This component passes WCAG 2.0 contrast test, however may fail APCA (WCAG 3.0) tests depending on the use case. - <b>It is recommended that special care is put to the font size and background separation for better readability. </b> - </div> - </Show> - </div> - </Show> - <Show when={props.WCAG == false}> - <div class={`mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 + dark:from-[#472b1366] dark:via-[#61401642] dark:to-transparent + font-semibold text-sm inline dark:text-neutral-400 text-neutral-600 group`} + > + <div class="rounded-full bg-[#ffd56b] inline mr-2"><i class="bi bi-check p-1 text-yellow-800" /></div> + WCAG AA Contrast Passing + <Show when={!props.APCA}> + <a><i class="bi bi-info-circle-fill ml-2"></i></a> + <div + role="tooltip" + class={`rounded-md border border-neutral-300 dark:border-neutral-600 shadow-md + bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 + px-3.5 py-2.5 text-sm w-80 absolute z-40 hidden group-hover:block`} + > + This component passes WCAG 2.0 contrast test, however may fail APCA (WCAG 3.0) tests depending on the use case. + <b>It is recommended that special care is put to the font size and background separation for better readability. </b> + </div> + </Show> + </div> + </Show> + <Show when={props.WCAG === false}> + <div class={`mb-3 px-2 py-1 pr-2.5 rounded-full border border-neutral-300 dark:border-neutral-700 bg-[radial-gradient(ellipse_at_top_left,_var(--tw-gradient-stops))] from-[#ca233136] via-[#fac6c042] to-transparent - dark:from-[#4e141a66] dark:via-[#91202828] dark:to-transparent - font-semibold text-sm inline dark:text-neutral-400 text-neutral-600 group cursor-help`}> - <div class={"rounded-full bg-[#961524] inline mr-2"}><i class={"bi bi-exclamation p-1 text-white"}/></div> - Contains WCAG Failing Colors - <a><i class={"bi bi-info-circle-fill ml-2"}></i></a> - <div role="tooltip" class={`rounded-md border border-neutral-300 dark:border-neutral-600 shadow-md - bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 - px-3.5 py-2.5 text-sm w-80 absolute z-40 hidden group-hover:block`}> - Some of the components that contain the colors below have WCAG 2.0 failing contrast values. - <b>These components have been tested against APCA (WCAG 3.0) contrast tests and have passed. </b> - If you require WCAG 2.0 compliance, please consider using a different colorset. - </div> - </div> - </Show> - </div> + dark:from-[#4e141a66] dark:via-[#91202828] dark:to-transparent + font-semibold text-sm inline dark:text-neutral-400 text-neutral-600 group cursor-help`} + > + <div class="rounded-full bg-[#961524] inline mr-2"><i class="bi bi-exclamation p-1 text-white" /></div> + Contains WCAG Failing Colors + <a><i class="bi bi-info-circle-fill ml-2"></i></a> + <div + role="tooltip" + class={`rounded-md border border-neutral-300 dark:border-neutral-600 shadow-md + bg-white dark:bg-neutral-800 text-neutral-700 dark:text-neutral-200 + px-3.5 py-2.5 text-sm w-80 absolute z-40 hidden group-hover:block`} + > + Some of the components that contain the colors below have WCAG 2.0 failing contrast values. + <b>These components have been tested against APCA (WCAG 3.0) contrast tests and have passed. </b> + If you require WCAG 2.0 compliance, please consider using a different colorset. + </div> + </div> + </Show> + </div> - ) -} + ); +}; export default AccessibilityCheck; diff --git a/src/components/shared/darkModeToggle.tsx b/src/components/shared/darkModeToggle.tsx index d5f2ec2..49d496f 100644 --- a/src/components/shared/darkModeToggle.tsx +++ b/src/components/shared/darkModeToggle.tsx @@ -1,51 +1,53 @@ -import { Component, createEffect, createSignal, onMount } from "solid-js" -import { colors } from "../../assets/color"; -import Button from "../../assets/components/button.styled" -import { generatedColors } from "../../functions/colorConfig"; -import { currScaleText, setColorScale } from "./toggleColorScale"; +import type { Component } from 'solid-js'; +import { createEffect, createSignal, onMount } from 'solid-js'; +import { colors } from '../../assets/color'; +import Button from '../../assets/components/button.styled'; +import { generatedColors } from '../../functions/colorConfig'; +import { currScaleText, setColorScale } from './toggleColorScale'; -export const [darkMode, setDarkMode] = createSignal(window.matchMedia('(prefers-color-scheme: dark)').matches) +export const [darkMode, setDarkMode] = createSignal(window.matchMedia('(prefers-color-scheme: dark)').matches); const DEBUG = false; const DarkModeToggle: Component = () => { - onMount(() => { - if(localStorage.getItem('theme')){ - setDarkMode(localStorage.getItem('theme') == 'dark' ? true : false); - } - }) + onMount(() => { + if (localStorage.getItem('theme')) + setDarkMode(localStorage.getItem('theme') === 'dark'); + }); - createEffect(() => { - // On page load or when changing themes, best to add inline in `head` to avoid FOUC - if (darkMode()) { - document.documentElement.classList.add('dark') - localStorage.setItem('theme', 'dark'); - } else { - document.documentElement.classList.remove('dark') - localStorage.setItem('theme', 'light'); - } - if (DEBUG) { - console.log('Theme dark: ' + darkMode()); - console.log('Local storage theme: ' + localStorage.theme); - } - if (currScaleText() == 'Flex Design Colors Uniform') { - setColorScale(generatedColors()) - } else { - setColorScale(colors()) - } - }) + createEffect(() => { + // On page load or when changing themes, best to add inline in `head` to avoid FOUC + if (darkMode()) { + document.documentElement.classList.add('dark'); + localStorage.setItem('theme', 'dark'); + } + else { + document.documentElement.classList.remove('dark'); + localStorage.setItem('theme', 'light'); + } + if (DEBUG) { + // eslint-disable-next-line no-console + console.log(`Theme dark: ${darkMode()}`); + // eslint-disable-next-line no-console + console.log(`Local storage theme: ${localStorage.theme}`); + } + if (currScaleText() === 'Flex Design Colors Uniform') + setColorScale(generatedColors()); + else + setColorScale(colors()); + }); - const toggleDarkMode = () => { - setDarkMode(!darkMode()); - } + const toggleDarkMode = () => { + setDarkMode(!darkMode()); + }; - return( - <Button aria={"Dark-mode Toggle"}> - <a onClick={() => toggleDarkMode()}> - {darkMode() ? <i class="bi bi-lightbulb-fill"></i> : <i class="bi bi-moon-stars-fill"></i>} - </a> - </Button> - ) -} + return ( + <Button aria="Dark-mode Toggle"> + <a onClick={() => toggleDarkMode()}> + {darkMode() ? <i class="bi bi-lightbulb-fill"></i> : <i class="bi bi-moon-stars-fill"></i>} + </a> + </Button> + ); +}; export default DarkModeToggle; diff --git a/src/components/shared/toast.tsx b/src/components/shared/toast.tsx index 1ed0698..1dd70b4 100644 --- a/src/components/shared/toast.tsx +++ b/src/components/shared/toast.tsx @@ -1,70 +1,70 @@ -import {ParentComponent, splitProps,} from "solid-js"; -import toast from "solid-toast"; -import ColorIdentifier from "../../assets/components/colorIdentifier.styled"; - -export const copy = (color: string) => { - navigator.clipboard.writeText(color).then(() => { - /* clipboard successfully set */ - toast.custom((t) => ( - <Toast box={color} showExit={true} toast={t}> - Pallette Copied! - </Toast> - ), { - unmountDelay: 0 - }); - }, () => { - /* clipboard write failed */ - toast.custom((t) => ( - <Toast color={'error'} showExit={true} toast={t}> - Copying Failed! - </Toast> - )); - }) -} +import type { ParentComponent } from 'solid-js'; +import { splitProps } from 'solid-js'; +import toast from 'solid-toast'; +import ColorIdentifier from '../../assets/components/colorIdentifier.styled'; type IToastProps = ParentComponent< & { - toast?: any, - color?: 'warning' | 'error' | 'info', - showExit?: boolean, - box?: string, - } + toast?: any + color?: 'warning' | 'error' | 'info' + showExit?: boolean + box?: string +} >; const Toast: IToastProps = (props) => { + const [local, others] = splitProps(props, ['children', 'toast', 'color', 'showExit', 'box']); - const [local, others] = splitProps(props, ['children', 'toast', 'color', 'showExit', 'box']); + // TODO: Implement default toast colors + // eslint-disable-next-line unused-imports/no-unused-vars + const toastColor = () => { + switch (props.color) { + case 'warning': + return '#674d0f'; + case 'error': + return '#5d000a'; + case 'info': + return '#040e1f'; + } + return 'black'; + }; - const toastColor = () => { - switch(props.color) { - case 'warning': - return '#674d0f' - case 'error': - return '#5d000a' - case 'info': - return '#040e1f' - } - return 'black'; - } + return ( + <div + {...others} + class="flex p-2 pb-1.5 gap-2 bg-neutral-50 border border-neutral-200 dark:bg-neutral-800 dark:border-neutral-700 dark:shadow-black/40 hover:shadow-lg rounded-md shadow-md" + > + {local.box + && <ColorIdentifier class="h-5 w-5 rounded-md" color={props.box} />} + <div class="flex flex-row text-sm text-slate-700 dark:text-neutral-300"> + {props.children} + <p class="font-mono font-semibold pl-1"> + {props.box} + </p> + </div> + {local.showExit + && <a class="cursor-pointer -mt-0.5" onClick={() => toast.dismiss(props.toast.id)}><i class="bi bi-x text-slate-600 dark:text-neutral-400"></i></a>} + </div> + ); +}; - return( - <div {...others} - class="flex p-2 pb-1.5 gap-2 - bg-neutral-50 border border-neutral-200 dark:bg-neutral-800 dark:border-neutral-700 dark:shadow-black/40 hover:shadow-lg rounded-md shadow-md"> - {local.box && - <ColorIdentifier class="h-5 w-5 rounded-md" color={props.box}/> - } - <div class="flex flex-row text-sm text-slate-700 dark:text-neutral-300"> - {props.children} - <p class="font-mono font-semibold pl-1"> - {props.box} - </p> - </div> - {local.showExit && - <a class="cursor-pointer -mt-0.5" onClick={() => toast.dismiss(props.toast.id)}><i class="bi bi-x text-slate-600 dark:text-neutral-400"></i></a> - } - </div> - ) - -} +export const copy = (color: string) => { + navigator.clipboard.writeText(color).then(() => { + /* clipboard successfully set */ + toast.custom(t => ( + <Toast box={color} showExit={true} toast={t}> + Pallette Copied! + </Toast> + ), { + unmountDelay: 0, + }); + }, () => { + /* clipboard write failed */ + toast.custom(t => ( + <Toast color="error" showExit={true} toast={t}> + Copying Failed! + </Toast> + )); + }); +}; export default Toast; diff --git a/src/components/shared/toggleColorScale.tsx b/src/components/shared/toggleColorScale.tsx index 4af1d6b..e95c5d1 100644 --- a/src/components/shared/toggleColorScale.tsx +++ b/src/components/shared/toggleColorScale.tsx @@ -1,42 +1,43 @@ -import { Component, createEffect, createSignal, onMount } from "solid-js" -import { BaseColorScaleDark, colors } from "../../assets/color"; -import Select from "../../assets/components/select.styled"; -import { generatedColors } from "../../functions/colorConfig"; +import type { Component } from 'solid-js'; +import { createEffect, createSignal } from 'solid-js'; +import { BaseColorScaleDark, colors } from '../../assets/color'; +import Select from '../../assets/components/select.styled'; +import { generatedColors } from '../../functions/colorConfig'; -const DEBUG = true; - -export const [currScaleText, setCurrScaleText] = createSignal('Flex Design Colors Uniform') -export const [visibleColorScale, setColorScale] = createSignal(BaseColorScaleDark) +export const [currScaleText, setCurrScaleText] = createSignal('Flex Design Colors Uniform'); +export const [visibleColorScale, setColorScale] = createSignal(BaseColorScaleDark); const ToggleColorScale: Component = () => { + const [currScale, setCurrScale] = createSignal('fu'); - const [currScale, setCurrScale] = createSignal('fu') - - createEffect(() => { - if (currScale() == 'fc') setColorScale(colors()) - if (currScale() == 'fu') setColorScale(generatedColors()) - else setColorScale(colors()) - }) + createEffect(() => { + if (currScale() === 'fc') + setColorScale(colors()); + if (currScale() === 'fu') + setColorScale(generatedColors()); + else setColorScale(colors()); + }); - const handleColorScaleChange = (type: any) => { - if (type.target.value == 'fc'){ - setCurrScale('fc') - setCurrScaleText('Flex Design Colors (Legacy)') - } else if (type.target.value == 'fu') { - setCurrScale('fu') - setCurrScaleText('Flex Design Colors Uniform') - }; - } - return( - <Select aria-label={"Change Color Pallet"} value="fu" onChange={handleColorScaleChange}> - <option value={'fc'}> - Flex Design Colors - </option> - <option value={'fu'} selected> - Flex Design Colors Uniform - </option> - </Select> - ) -} + const handleColorScaleChange = (type: any) => { + if (type.target.value === 'fc') { + setCurrScale('fc'); + setCurrScaleText('Flex Design Colors (Legacy)'); + } + else if (type.target.value === 'fu') { + setCurrScale('fu'); + setCurrScaleText('Flex Design Colors Uniform'); + }; + }; + return ( + <Select aria-label="Change Color Pallet" value="fu" onChange={handleColorScaleChange}> + <option value="fc"> + Flex Design Colors + </option> + <option value="fu" selected> + Flex Design Colors Uniform + </option> + </Select> + ); +}; export default ToggleColorScale; diff --git a/src/functions/apca.ts b/src/functions/apca.ts new file mode 100644 index 0000000..ea57e5c --- /dev/null +++ b/src/functions/apca.ts @@ -0,0 +1,223 @@ +/////////////////////////////////////////////////////////////////////////////// +///// +/// // SAPC APCA - Accessible Perceptual Contrast Algorithm +/// // Beta 0.0.98G-4g • contrast function only +/// // DIST: GH SE Revision date: Oct 1, 2021 +/// // Function to parse color values and determine Lc contrast +/// // Copyright © 2019-2021 by Andrew Somers. All Rights Reserved. +/// // LICENSE: Non-Commercial, Limited Use, beta versions are revocable +/// // CONTACT: For SAPC/APCA Please use the ISSUES tab at: +/// // https://github.com/Myndex/SAPC-APCA/ +///// +/////////////////////////////////////////////////////////////////////////////// +///// +/// // USAGE: +/// // Use sRGBtoY(color) to convert sRGB to Luminance (Y) +/// // Then send Y-text and Y-background to APCAcontrast(Text, BG) +///// +/// // Lc = APCAcontrast( sRGBtoY(TEXTcolor) , sRGBtoY(BACKGNDcolor) ); +///// +/// // Live Demonstrator at https://www.myndex.com/APCA/ +///// +/////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +///// +/// // SAPC Method and APCA Algorithm +///// +/// // GITHUB: https://github.com/Myndex/SAPC-APCA +/// // DEVELOPER SITE: https://www.myndex.com/WEB/Perception +///// +/// // Acknowledgments and Thanks To: +/// // • This project references the research and work of Dr.Lovie-Kitchin, +/// // Dr.Legge, Dr.Arditi, M.Fairchild, R.Hunt, M.Stone, Dr.Poynton, +/// // L.Arend, M.Luo, E.Burns, R.Blackwell, P.Barton, M.Brettel, and many +/// // others — see refs at https://www.myndex.com/WEB/WCAG_CE17polarity +/// // • Bruce Bailey of USAccessBoard for his encouragement, ideas, & feedback +/// // • Chris Lilley of W3 for his early and continued comments & feedback. +/// // • Chris Loiselle of Oracle for getting us back on track in a pandemic +/// // • The many volunteer test subjects for participating in the studies. +/// // • Principal research conducted at Myndex by A.Somers. +///// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +///// +/// // ***** SAPC BLOCK ***** +///// +/// // For Evaluations, refer to this as: SAPC-8, v0.0.98 G-series constant 4g +/// // SAPC • S-LUV Advanced Predictive Color +///// +/// // SIMPLE VERSION — Only the basic APCA contrast predictor. +///// +/// // Included Extensions & Model Features in this file: +/// // • SAPC-8 Core Contrast (Base APCA) +/// // • G series constants, group "G-4g" using a 2.4 monitor exponent +/// // • sRGB to Y, parses numeric sRGB color to luminance +/// // • SmoothScale™ scaling technique (non-clinical use only) +/// // • SoftToe black level soft clamp and flare compensation. +///// +///// +//////////////////////////////////////////////////////////////////////////////// +///// +/// // DISCLAIMER AND LIMITATIONS OF USE +/// // APCA is an embodiment of certain suprathreshold contrast +/// // prediction technologies and it is licensed to the W3 on a +/// // limited basis for use in certain specific accessibility +/// // guidelines for web content only. APCA may be used for +/// // predicting colors for web content use without royalty. +///// +/// // However, Any such license excludes other use cases +/// // not related to web content. Prohibited uses include +/// // medical, clinical evaluation, human safety related, +/// // aerospace, transportation, military applications, +/// // and uses which are not specific to web based content +/// // presented on self-illuminated displays or devices. +///// +//////////////////////////////////////////////////////////////////////////////// + +/// /////// APCA 0.0.98 G USAGE ////////////////////////////////////////////// +/// +/// The API for "APCA_0_0_98G_4g_minimal" is trivially simple. +/// Send text and background sRGB numeric values to the sRGBtoY() function, +/// and send the resulting text-Y and background-Y to the APCAcontrast function, +/// it returns a signed float with the numeric Lc contrast result. +/// +/// The two inputs are TEXT color and BACKGROUND color in that order. +/// Each must be a numeric NOT a string, as this simple version has +/// no string parsing utilities. EXAMPLE: +/// ________________________________________________________________________ +/// +/// txtColor = 0x123456; // color of the text, as will be rendered +/// bgColor = 0xabcdef; // color for the background, as will be rendered +/// +/// contrastLc = APCAcontrast( sRGBtoY(txtColor) , sRGBtoY(bgColor) ); +/// ________________________________________________________________________ +/// +/// ********** QUICK START ********** +/// +/// Each color must be a 24bit color (8 bit per channel) as a single integer +/// (or 0x) sRGB encoded color, i.e. White is either the integer 16777216 or +/// the hex 0xffffff. A float is returned with a positive or negative value. +/// Negative values mean light text and a dark background, positive values +/// mean dark text and a light background. 60.0, or -60.0 is a contrast +/// "sort of like" the old WCAG 2's 4.5:1. NOTE: the total range is now less +/// than ± 110, so output can be rounded to a signed INT but DO NOT output +/// an absolute value - light text on dark BG should return a negative number. +/// +/// ***** IMPORTANT: Do Not Mix Up Text and Background inputs. ***** +/// **************** APCA is polarity dependent! ***************** +/// +/// /////// APCA 0.0.98 G - 4g Constants //////////////////////////////////// + +const mainTRC = 2.4; // 2.4 exponent emulates actual monitor perception + +const sRco = 0.2126729; +const sGco = 0.7151522; +const sBco = 0.0721750; // sRGB coefficients + +const normBG = 0.56; +const normTXT = 0.57; +const revTXT = 0.62; +const revBG = 0.65; // G-4g constants for use with 2.4 exponent + +const blkThrs = 0.022; +const blkClmp = 1.414; +const scaleBoW = 1.14; +const scaleWoB = 1.14; +const loBoWthresh = 0.035991; +const loWoBthresh = 0.035991; +const loBoWfactor = 27.7847239587675; +const loWoBfactor = 27.7847239587675; +const loBoWoffset = 0.027; +const loWoBoffset = 0.027; +const loClip = 0.001; +const deltaYmin = 0.0005; + +/// /////// ƒ sRGBtoY() /////////////////////////////////////////////////////// + +export function sRGBtoY(sRGBcolor) { + // send 8 bit-per-channel integer sRGB (0xFFFFFF) + + const r = (sRGBcolor & 0xFF0000) >> 16; + const g = (sRGBcolor & 0x00FF00) >> 8; + const b = (sRGBcolor & 0x0000FF); + + function simpleExp(chan) { return (chan / 255.0) ** mainTRC; } + + // linearize r, g, or b then apply coefficients + // and sum then return the resulting luminance + + return sRco * simpleExp(r) + sGco * simpleExp(g) + sBco * simpleExp(b); +} + +/// /////// ƒ APCAcontrast() ////////////////////////////////////////////////// + +export function APCAcontrast(txtY, bgY) { + // send linear Y (luminance) for text and background. + // IMPORTANT: Do not swap, polarity is important. + + let SAPC = 0.0; // For raw SAPC values + let outputContrast = 0.0; // For weighted final values + + // TUTORIAL + + // Use Y for text and BG, and soft clamp black, + // return 0 for very close luminances, determine + // polarity, and calculate SAPC raw contrast + // Then scale for easy to remember levels. + + // Note that reverse contrast (white text on black) + // intentionally returns a negative number + // Proper polarity is important! + + /// /////// BLACK SOFT CLAMP ///////////////////////////////////////// + + // Soft clamps Y for either color if it is near black. + txtY = (txtY > blkThrs) + ? txtY + : txtY + (blkThrs - txtY) ** blkClmp; + bgY = (bgY > blkThrs) + ? bgY + : bgY + (blkThrs - bgY) ** blkClmp; + + /// // Return 0 Early for extremely low ∆Y + if (Math.abs(bgY - txtY) < deltaYmin) + return 0.0; + + /// /////// APCA/SAPC CONTRAST /////////////////////////////////////// + + if (bgY > txtY) { // For normal polarity, black text on white (BoW) + // Calculate the SAPC contrast value and scale + + SAPC = (bgY ** normBG - txtY ** normTXT) * scaleBoW; + + // Low Contrast smooth rollout to prevent polarity reversal + // and also a low-clip for very low contrasts + outputContrast = (SAPC < loClip) + ? 0.0 + : (SAPC < loBoWthresh) + ? SAPC - SAPC * loBoWfactor * loBoWoffset + : SAPC - loBoWoffset; + } + else { // For reverse polarity, light text on dark (WoB) + // WoB should always return negative value. + + SAPC = (bgY ** revBG - txtY ** revTXT) * scaleWoB; + + outputContrast = (SAPC > -loClip) + ? 0.0 + : (SAPC > -loWoBthresh) + ? SAPC - SAPC * loWoBfactor * loWoBoffset + : SAPC + loWoBoffset; + } + + // return Lc (lightness contrast) as a signed numeric value + // It is permissible to round to the nearest whole number. + + return outputContrast * 100.0; +} // End APCAcontrast() + +/// /\ ////////////////////////////////////////////// +/// //\ END 0.98G4g APCA BLOCK ////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// diff --git a/src/functions/apca.tsx b/src/functions/apca.tsx deleted file mode 100644 index 82857aa..0000000 --- a/src/functions/apca.tsx +++ /dev/null @@ -1,224 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -///// -///// SAPC APCA - Accessible Perceptual Contrast Algorithm -///// Beta 0.0.98G-4g • contrast function only -///// DIST: GH SE Revision date: Oct 1, 2021 -///// Function to parse color values and determine Lc contrast -///// Copyright © 2019-2021 by Andrew Somers. All Rights Reserved. -///// LICENSE: Non-Commercial, Limited Use, beta versions are revocable -///// CONTACT: For SAPC/APCA Please use the ISSUES tab at: -///// https://github.com/Myndex/SAPC-APCA/ -///// -/////////////////////////////////////////////////////////////////////////////// -///// -///// USAGE: -///// Use sRGBtoY(color) to convert sRGB to Luminance (Y) -///// Then send Y-text and Y-background to APCAcontrast(Text, BG) -///// -///// Lc = APCAcontrast( sRGBtoY(TEXTcolor) , sRGBtoY(BACKGNDcolor) ); -///// -///// Live Demonstrator at https://www.myndex.com/APCA/ -///// -/////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -///// -///// SAPC Method and APCA Algorithm -///// -///// GITHUB: https://github.com/Myndex/SAPC-APCA -///// DEVELOPER SITE: https://www.myndex.com/WEB/Perception -///// -///// Acknowledgments and Thanks To: -///// • This project references the research and work of Dr.Lovie-Kitchin, -///// Dr.Legge, Dr.Arditi, M.Fairchild, R.Hunt, M.Stone, Dr.Poynton, -///// L.Arend, M.Luo, E.Burns, R.Blackwell, P.Barton, M.Brettel, and many -///// others — see refs at https://www.myndex.com/WEB/WCAG_CE17polarity -///// • Bruce Bailey of USAccessBoard for his encouragement, ideas, & feedback -///// • Chris Lilley of W3 for his early and continued comments & feedback. -///// • Chris Loiselle of Oracle for getting us back on track in a pandemic -///// • The many volunteer test subjects for participating in the studies. -///// • Principal research conducted at Myndex by A.Somers. -///// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -///// -///// ***** SAPC BLOCK ***** -///// -///// For Evaluations, refer to this as: SAPC-8, v0.0.98 G-series constant 4g -///// SAPC • S-LUV Advanced Predictive Color -///// -///// SIMPLE VERSION — Only the basic APCA contrast predictor. -///// -///// Included Extensions & Model Features in this file: -///// • SAPC-8 Core Contrast (Base APCA) -///// • G series constants, group "G-4g" using a 2.4 monitor exponent -///// • sRGB to Y, parses numeric sRGB color to luminance -///// • SmoothScale™ scaling technique (non-clinical use only) -///// • SoftToe black level soft clamp and flare compensation. -///// -///// -//////////////////////////////////////////////////////////////////////////////// -///// -///// DISCLAIMER AND LIMITATIONS OF USE -///// APCA is an embodiment of certain suprathreshold contrast -///// prediction technologies and it is licensed to the W3 on a -///// limited basis for use in certain specific accessibility -///// guidelines for web content only. APCA may be used for -///// predicting colors for web content use without royalty. -///// -///// However, Any such license excludes other use cases -///// not related to web content. Prohibited uses include -///// medical, clinical evaluation, human safety related, -///// aerospace, transportation, military applications, -///// and uses which are not specific to web based content -///// presented on self-illuminated displays or devices. -///// -//////////////////////////////////////////////////////////////////////////////// - -////////// APCA 0.0.98 G USAGE ////////////////////////////////////////////// -/// -/// The API for "APCA_0_0_98G_4g_minimal" is trivially simple. -/// Send text and background sRGB numeric values to the sRGBtoY() function, -/// and send the resulting text-Y and background-Y to the APCAcontrast function, -/// it returns a signed float with the numeric Lc contrast result. -/// -/// The two inputs are TEXT color and BACKGROUND color in that order. -/// Each must be a numeric NOT a string, as this simple version has -/// no string parsing utilities. EXAMPLE: -/// ________________________________________________________________________ -/// -/// txtColor = 0x123456; // color of the text, as will be rendered -/// bgColor = 0xabcdef; // color for the background, as will be rendered -/// -/// contrastLc = APCAcontrast( sRGBtoY(txtColor) , sRGBtoY(bgColor) ); -/// ________________________________________________________________________ -/// -/// ********** QUICK START ********** -/// -/// Each color must be a 24bit color (8 bit per channel) as a single integer -/// (or 0x) sRGB encoded color, i.e. White is either the integer 16777216 or -/// the hex 0xffffff. A float is returned with a positive or negative value. -/// Negative values mean light text and a dark background, positive values -/// mean dark text and a light background. 60.0, or -60.0 is a contrast -/// "sort of like" the old WCAG 2's 4.5:1. NOTE: the total range is now less -/// than ± 110, so output can be rounded to a signed INT but DO NOT output -/// an absolute value - light text on dark BG should return a negative number. -/// -/// ***** IMPORTANT: Do Not Mix Up Text and Background inputs. ***** -/// **************** APCA is polarity dependent! ***************** -/// -////////// APCA 0.0.98 G - 4g Constants //////////////////////////////////// - -const mainTRC = 2.4; // 2.4 exponent emulates actual monitor perception - -const sRco = 0.2126729, - sGco = 0.7151522, - sBco = 0.0721750; // sRGB coefficients - -const normBG = 0.56, - normTXT = 0.57, - revTXT = 0.62, - revBG = 0.65; // G-4g constants for use with 2.4 exponent - -const blkThrs = 0.022, - blkClmp = 1.414, - scaleBoW = 1.14, - scaleWoB = 1.14, - loBoWthresh = 0.035991, - loWoBthresh = 0.035991, - loBoWfactor = 27.7847239587675, - loWoBfactor = 27.7847239587675, - loBoWoffset = 0.027, - loWoBoffset = 0.027, - loClip = 0.001, - deltaYmin = 0.0005; - -////////// ƒ sRGBtoY() /////////////////////////////////////////////////////// - -export function sRGBtoY (sRGBcolor) { - // send 8 bit-per-channel integer sRGB (0xFFFFFF) - - - - let r = (sRGBcolor & 0xFF0000) >> 16, - g = (sRGBcolor & 0x00FF00) >> 8, - b = (sRGBcolor & 0x0000FF); - - function simpleExp (chan) { return Math.pow(chan/255.0, mainTRC); } - - // linearize r, g, or b then apply coefficients - // and sum then return the resulting luminance - - return sRco * simpleExp(r) + sGco * simpleExp(g) + sBco * simpleExp(b); -} - - -////////// ƒ APCAcontrast() ////////////////////////////////////////////////// - -export function APCAcontrast (txtY,bgY) { - // send linear Y (luminance) for text and background. - // IMPORTANT: Do not swap, polarity is important. - - var SAPC = 0.0; // For raw SAPC values - var outputContrast = 0.0; // For weighted final values - - // TUTORIAL - - // Use Y for text and BG, and soft clamp black, - // return 0 for very close luminances, determine - // polarity, and calculate SAPC raw contrast - // Then scale for easy to remember levels. - - // Note that reverse contrast (white text on black) - // intentionally returns a negative number - // Proper polarity is important! - -////////// BLACK SOFT CLAMP ///////////////////////////////////////// - - // Soft clamps Y for either color if it is near black. - txtY = (txtY > blkThrs) ? txtY : - txtY + Math.pow(blkThrs - txtY, blkClmp); - bgY = (bgY > blkThrs) ? bgY : - bgY + Math.pow(blkThrs - bgY, blkClmp); - - ///// Return 0 Early for extremely low ∆Y - if ( Math.abs(bgY - txtY) < deltaYmin ) { return 0.0; } - - -////////// APCA/SAPC CONTRAST /////////////////////////////////////// - - if ( bgY > txtY ) { // For normal polarity, black text on white (BoW) - - // Calculate the SAPC contrast value and scale - - SAPC = ( Math.pow(bgY, normBG) - Math.pow(txtY, normTXT) ) * scaleBoW; - - // Low Contrast smooth rollout to prevent polarity reversal - // and also a low-clip for very low contrasts - outputContrast = (SAPC < loClip) ? 0.0 : - (SAPC < loBoWthresh) ? - SAPC - SAPC * loBoWfactor * loBoWoffset : - SAPC - loBoWoffset; - - } else { // For reverse polarity, light text on dark (WoB) - // WoB should always return negative value. - - SAPC = ( Math.pow(bgY, revBG) - Math.pow(txtY, revTXT) ) * scaleWoB; - - outputContrast = (SAPC > -loClip) ? 0.0 : - (SAPC > -loWoBthresh) ? - SAPC - SAPC * loWoBfactor * loWoBoffset : - SAPC + loWoBoffset; - } - - // return Lc (lightness contrast) as a signed numeric value - // It is permissible to round to the nearest whole number. - - return outputContrast * 100.0; - -} // End APCAcontrast() - -////\ ////////////////////////////////////////////// -/////\ END 0.98G4g APCA BLOCK ////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// diff --git a/src/functions/colorConfig.tsx b/src/functions/colorConfig.tsx index dc0481e..e1d3e18 100644 --- a/src/functions/colorConfig.tsx +++ b/src/functions/colorConfig.tsx @@ -1,91 +1,94 @@ -import chroma, { hex } from "chroma-js" -import { darkMode } from "../components/shared/darkModeToggle" +import chroma from 'chroma-js'; +import { darkMode } from '../components/shared/darkModeToggle'; export const BaseBackgroundArr: Array<string> = ['#FFFFFF', '#181819']; -const BaseBackgroundDarkMixed = chroma.mix(BaseBackgroundArr[1], '#000', 0.2, 'rgb') +const BaseBackgroundDarkMixed = chroma.mix(BaseBackgroundArr[1], '#000', 0.2, 'rgb'); export const ScalePrimObj = { - "NEUTRAL": ['#F8F8F6', '#626262', '#181816'], - "OCEAN": ['#E6F5FA', '#359AFA', '#081F46'], - // "SKY": ['#E2F1FF', '#1B78E7', '#091847'], - "BLUE": ['#E9EEFE', '#264FE3', '#061148'], - "INDIGO": ['#EBEDFB', '#4624D3', '#0B003D'], - "VIOLET": ['#F0E9F8', '#6C1CDB', '#1c063d'], - "CRIMSON": ["#FAEAF2", "#E03780", "#420518"], - "WINE": ['#FDE9ED', '#9d1635', '#32000A'], - "RED": ['#FEEEEC', '#CA2331', '#380004'], - "SUN": ['#FEF2EE', '#ea3e33', '#460405'], - "ORANGE": ['#FDF6ED', '#fb7912', '#52160B'], - "AMBER": ['#fdfaf2', '#fdad18', '#542210'], - "YELLOW": ['#FDFCF2', '#f8c51a', '#58280F'], - "SAPLING": ['#FAFEEC', '#a2c940', '#2b3a06'], - "GREEN": ['#EEFDF3', '#0da750', '#002f0f'], - "AURORA": ['#EBFDF9', '#02B192', '#003228'], - "CYAN": ['#EFFDFD', '#20C4D9', '#01313F'] -} + NEUTRAL: ['#F8F8F6', '#626262', '#181816'], + OCEAN: ['#E6F5FA', '#359AFA', '#081F46'], + // "SKY": ['#E2F1FF', '#1B78E7', '#091847'], + BLUE: ['#E9EEFE', '#264FE3', '#061148'], + INDIGO: ['#EBEDFB', '#4624D3', '#0B003D'], + VIOLET: ['#F0E9F8', '#6C1CDB', '#1c063d'], + CRIMSON: ['#FAEAF2', '#E03780', '#420518'], + WINE: ['#FDE9ED', '#9d1635', '#32000A'], + RED: ['#FEEEEC', '#CA2331', '#380004'], + SUN: ['#FEF2EE', '#ea3e33', '#460405'], + ORANGE: ['#FDF6ED', '#fb7912', '#52160B'], + AMBER: ['#fdfaf2', '#fdad18', '#542210'], + YELLOW: ['#FDFCF2', '#f8c51a', '#58280F'], + SAPLING: ['#FAFEEC', '#a2c940', '#2b3a06'], + GREEN: ['#EEFDF3', '#0da750', '#002f0f'], + AURORA: ['#EBFDF9', '#02B192', '#003228'], + CYAN: ['#EFFDFD', '#20C4D9', '#01313F'], +}; // Generate dark scales using background colors -export const generateDarkScales = (genScaleObj: Record<string, Array<string>>, darkScale: Array<string>) => { - const out: Record<string, Array<string>> = {} - for (const prop in genScaleObj) { - const primary = chroma.mix(genScaleObj[prop][0], genScaleObj[prop][1], (prop == "NEUTRAL" ? 0.8 : 0.95), 'lab') - const mixedDark = chroma.mix(chroma(genScaleObj[prop][1]), BaseBackgroundDarkMixed, 0.8, 'rgb') - const mixedLight = chroma.mix(primary, genScaleObj[prop][0], 0.7, 'lch') - out[prop] = [ - prop == "NEUTRAL" ? chroma(genScaleObj[prop][2]).brighten(0.3).hex() : - chroma.mix(chroma(genScaleObj[prop][2]).darken(0.44), mixedDark, 0.15, 'lab').saturate(0.7).hex(), - chroma.mix(primary.hex(), mixedLight.hex(),0.03).hex(), - prop == "NEUTRAL" ? chroma(mixedLight).brighten(0.75).hex() : - chroma.mix(mixedLight, genScaleObj[prop][0], 0.86, 'lab').hex() - ] - } - return out -} +export const generateDarkScales = (genScaleObj: Record<string, Array<string>>, _darkScale: Array<string>) => { + const out: Record<string, Array<string>> = {}; + for (const prop in genScaleObj) { + const primary = chroma.mix(genScaleObj[prop][0], genScaleObj[prop][1], (prop === 'NEUTRAL' ? 0.8 : 0.95), 'lab'); + const mixedDark = chroma.mix(chroma(genScaleObj[prop][1]), BaseBackgroundDarkMixed, 0.8, 'rgb'); + const mixedLight = chroma.mix(primary, genScaleObj[prop][0], 0.7, 'lch'); + out[prop] = [ + prop === 'NEUTRAL' + ? chroma(genScaleObj[prop][2]).brighten(0.3).hex() + : chroma.mix(chroma(genScaleObj[prop][2]).darken(0.44), mixedDark, 0.15, 'lab').saturate(0.7).hex(), + chroma.mix(primary.hex(), mixedLight.hex(), 0.03).hex(), + prop === 'NEUTRAL' + ? chroma(mixedLight).brighten(0.75).hex() + : chroma.mix(mixedLight, genScaleObj[prop][0], 0.86, 'lab').hex(), + ]; + } + return out; +}; // Steps to elect using the color scales generator -const ColorTakeInd = [0, 2, 5, 9, 16, 19] - +const ColorTakeInd = [0, 2, 5, 9, 16, 19]; // Generate color scales from the primitive scale for one color const generateScalePrim = (genPrim: Array<string>) => { - return [...chroma.scale([genPrim[0], genPrim[1]]).mode('lab').colors(24).filter((val, i) => ColorTakeInd.includes(i)), - ...chroma.scale([genPrim[1], genPrim[2]]).mode('lab').colors(7).filter((val, i) => i % 2 == 0)] -} + return [...chroma.scale([genPrim[0], genPrim[1]]).mode('lab').colors(24).filter((val, i) => ColorTakeInd.includes(i)), ...chroma.scale([genPrim[1], genPrim[2]]).mode('lab').colors(7).filter((val, i) => i % 2 === 0)]; +}; // Generate color scale object with name for one color const generateScalePrimObject = (genScale: Array<string>) => { - return genScale.reduce((memo, val, i) => ({...memo, [`0${i}`]: val}), {}) -} - -// Generate the entire object map for the color scale -export const genColorScale = (genScaleObj: Record<string, Array<string>>, dark: boolean) => { - const out: Record<string, Record<string, string>> = {} - for (const prop in genScaleObj) { - if (dark) out[prop] = generateScalePrimObject(redefineDarkScale(generateScalePrim(genScaleObj[prop]))) - else out[prop] = generateScalePrimObject(generateScalePrim(genScaleObj[prop])) - } - return out -} + return genScale.reduce((memo, val, i) => ({ ...memo, [`0${i}`]: val }), {}); +}; -const DarkenInd = [0.87, 0.7, 0.5, 0.4, 0.1, 0] +const DarkenInd = [0.87, 0.7, 0.5, 0.4, 0.1, 0]; // Correct dark scales for background const redefineDarkScale = (genScale: Array<string>) => { - const out: Array<string> = genScale - const BackgroundMixed = chroma(BaseBackgroundArr[1]).brighten(0.05) - for (var c = 0; c < 6; c++){ - out[c] = chroma.mix(genScale[c], BackgroundMixed, DarkenInd[c], 'rgb').hex() - } - return out -} + const out: Array<string> = genScale; + const BackgroundMixed = chroma(BaseBackgroundArr[1]).brighten(0.05); + for (let c = 0; c < 6; c++) + out[c] = chroma.mix(genScale[c], BackgroundMixed, DarkenInd[c], 'rgb').hex(); + + return out; +}; + +// Generate the entire object map for the color scale +export const genColorScale = (genScaleObj: Record<string, Array<string>>, dark: boolean) => { + const out: Record<string, Record<string, string>> = {}; + for (const prop in genScaleObj) { + if (dark) + out[prop] = generateScalePrimObject(redefineDarkScale(generateScalePrim(genScaleObj[prop]))); + else out[prop] = generateScalePrimObject(generateScalePrim(genScaleObj[prop])); + } + return out; +}; -let genLightScale = genColorScale(ScalePrimObj, false) -let genDarkScale = genColorScale(generateDarkScales(ScalePrimObj, BaseBackgroundArr), true) +const genLightScale = genColorScale(ScalePrimObj, false); +const genDarkScale = genColorScale(generateDarkScales(ScalePrimObj, BaseBackgroundArr), true); -export const generatedColors = () => darkMode() ? genDarkScale : genLightScale -export const generatedColorsArr = () => darkMode() ? colorsToArr(genDarkScale) : colorsToArr(genLightScale) +export const generatedColors = () => darkMode() ? genDarkScale : genLightScale; -export const colorsToArr = (colorObj : Record<string, Record<string, string>>) => { - return Object.values(colorObj).map((obj) => {return Object.values(obj)}) -} +export const colorsToArr = (colorObj: Record<string, Record<string, string>>) => { + return Object.values(colorObj).map((obj) => { + return Object.values(obj); + }); +}; +export const generatedColorsArr = () => darkMode() ? colorsToArr(genDarkScale) : colorsToArr(genLightScale); diff --git a/src/functions/contrastCalc.tsx b/src/functions/contrastCalc.tsx index 50f83ae..5f067c9 100644 --- a/src/functions/contrastCalc.tsx +++ b/src/functions/contrastCalc.tsx @@ -1,28 +1,30 @@ -import chroma from "chroma-js" -import { darkMode } from "../components/shared/darkModeToggle"; -import { APCAcontrast, sRGBtoY } from "./apca"; +import chroma from 'chroma-js'; +import { darkMode } from '../components/shared/darkModeToggle'; +import { APCAcontrast, sRGBtoY } from './apca'; export const calcWCAG = (text: string, bg: string) => { - return chroma.contrast(text, bg); -} + return chroma.contrast(text, bg); +}; -export const calcAPCA = (txt: string, bg: string) : number => { - const textHex: number = parseInt(`0x${txt.substring(1)}`, 16); - const bgHex: number = parseInt(`0x${bg.substring(1)}`, 16); +export const calcAPCA = (txt: string, bg: string): number => { + const textHex: number = Number.parseInt(`0x${txt.substring(1)}`, 16); + const bgHex: number = Number.parseInt(`0x${bg.substring(1)}`, 16); - return APCAcontrast(sRGBtoY(textHex), sRGBtoY(bgHex)); -} + return APCAcontrast(sRGBtoY(textHex), sRGBtoY(bgHex)); +}; -export const calcMinAPCA = (text: Array<string>, bg: string) : [number, string] => { - for (const textColor of text) { - if (calcAPCA(textColor, bg) > (darkMode() ? 30 : 40)) return [calcAPCA(darkMode() ? text[2] : text[8], bg), darkMode() ? text[2] : text[8]] - if (calcAPCA(textColor, bg) < (darkMode() ? -60 : -50)) return [calcAPCA(darkMode() ? text[8] : text[2], bg), darkMode() ? text[8] : text[2]] - } - return [0, '#000'] -} +export const calcMinAPCA = (text: Array<string>, bg: string): [number, string] => { + for (const textColor of text) { + if (calcAPCA(textColor, bg) > (darkMode() ? 30 : 40)) + return [calcAPCA(darkMode() ? text[2] : text[8], bg), darkMode() ? text[2] : text[8]]; + if (calcAPCA(textColor, bg) < (darkMode() ? -60 : -50)) + return [calcAPCA(darkMode() ? text[8] : text[2], bg), darkMode() ? text[8] : text[2]]; + } + return [0, '#000']; +}; export const calcMaxAPCAText = (bg: string, txtBright: string, txtDark: string) => { - const brightAPCA = Math.abs(calcAPCA(txtBright, bg)) - const darkAPCA = Math.abs(calcAPCA(txtDark, bg)) - return brightAPCA > darkAPCA ? txtBright : txtDark -} \ No newline at end of file + const brightAPCA = Math.abs(calcAPCA(txtBright, bg)); + const darkAPCA = Math.abs(calcAPCA(txtDark, bg)); + return brightAPCA > darkAPCA ? txtBright : txtDark; +}; diff --git a/src/functions/keyHandler.tsx b/src/functions/keyHandler.tsx index d4eb41c..4aa02c5 100644 --- a/src/functions/keyHandler.tsx +++ b/src/functions/keyHandler.tsx @@ -1,39 +1,38 @@ -import {Component, createEffect, createSignal, onCleanup } from "solid-js"; -import { colorsArr } from "../assets/color"; -import { darkMode, setDarkMode } from "../components/shared/darkModeToggle"; +import type { Component } from 'solid-js'; +import { createEffect, createSignal, onCleanup } from 'solid-js'; +import { colorsArr } from '../assets/color'; +import { darkMode, setDarkMode } from '../components/shared/darkModeToggle'; -export const [focused, setFocused] = createSignal([7,5]); +export const [focused, setFocused] = createSignal([7, 5]); const KeyHandler: Component = () => { + onCleanup(() => { + document.removeEventListener('keydown', () => true); + }); - onCleanup(() => { - document.removeEventListener('keydown', () => true); - }) - - createEffect(() => { - document.removeEventListener('keydown', () => true); - document.addEventListener('keydown', (e: KeyboardEvent) => { - if ((e.ctrlKey || e.metaKey) && e.key === 'k') { - setDarkMode(!darkMode()); - } - if(["Space","ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].indexOf(e.code) > -1) { - e.preventDefault(); - } - if("ArrowUp" == e.code && focused()[1] > 0) { - setFocused([focused()[0], focused()[1] - 1]); - } - if("ArrowDown" == e.code && focused()[1] < colorsArr().length -1) { - setFocused([focused()[0], focused()[1] + 1]); - } - if("ArrowLeft" == e.code && focused()[0] > 0) { - setFocused([focused()[0] - 1, focused()[1]]); - } - if("ArrowRight" == e.code && focused()[0] < colorsArr()[0].length - 1) { - setFocused([focused()[0] + 1, focused()[1]]); - } - }) - }) - return (<></>) -} + createEffect(() => { + document.removeEventListener('keydown', () => true); + document.addEventListener('keydown', (e: KeyboardEvent) => { + if ((e.ctrlKey || e.metaKey) && e.key === 'k') + setDarkMode(!darkMode()); + + if (['Space', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.code)) + e.preventDefault(); + + if (e.code === 'ArrowUp' && focused()[1] > 0) + setFocused([focused()[0], focused()[1] - 1]); + + if (e.code === 'ArrowDown' && focused()[1] < colorsArr().length - 1) + setFocused([focused()[0], focused()[1] + 1]); + + if (e.code === 'ArrowLeft' && focused()[0] > 0) + setFocused([focused()[0] - 1, focused()[1]]); + + if (e.code === 'ArrowRight' && focused()[0] < colorsArr()[0].length - 1) + setFocused([focused()[0] + 1, focused()[1]]); + }); + }); + return (<></>); +}; export default KeyHandler; diff --git a/src/functions/parsley.js b/src/functions/parsley.js index b78e14c..53b223a 100644 --- a/src/functions/parsley.js +++ b/src/functions/parsley.js @@ -1,5 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// -/** @preserve +/** + @preserve ///// CoLoR PaRsLeY a simple set of color parsing thingies! ///// Beta 0.1.8 Revision date: June 04, 2022 ///// @@ -18,362 +19,527 @@ ///// ///// Output as array: [r,g,b,a,isValid,colorspace] ///// Example: [123,123,123,1.0,true,'sRGB'] -// */ +// + */ /////////////////////////////////////////////////////////////////////////////// -// ==ClosureCompiler== +// ===ClosureCompiler=== // @compilation_level SIMPLE_OPTIMIZATIONS // @output_file_name colorparsley.min.js // @code_url https://raw.githubusercontent.com/Myndex/colorparsley/master/src/colorparsley.js -// ==/ClosureCompiler== +// ===/ClosureCompiler=== -// +// //////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////// -///// BEGIN COLOR PARSLEY 0.1.8 BLOCK \///////////////////////////////////// -//// \/////////////////////////////////// +/// // BEGIN COLOR PARSLEY 0.1.8 BLOCK \///////////////////////////////////// +/// / \/////////////////////////////////// /// \///////////////////////////////// - -///// Æ’ colorParsley() /////////////////////////////////////////////////// +/// // Æ’ colorParsley() /////////////////////////////////////////////////// // export -export function colorParsley (colorIn) { - - if (typeof colorIn === 'string') { - return parseString(colorIn); - } else if (typeof colorIn === 'number') { - return [(colorIn & 0xFF0000) >> 16, - (colorIn & 0x00FF00) >> 8, - (colorIn & 0x0000FF), 1, true, 'unknown']; - } else if (typeof colorIn === 'object') { - if (Array.isArray(colorIn)) { - return colorIn; - } else if (!isNaN(colorIn.r) || !isNaN(colorIn.red)){ - // validate object & return array - let objArray = [0,0,0,0,false,'unknown']; - // takes object with r g b or red green blue etc... - objArray[0] = (colorIn.r)?colorIn.r:(colorIn.red)? - colorIn.red:false; - objArray[1] = (colorIn.g)?colorIn.g:(colorIn.green)? - colorIn.green:false; - objArray[2] = (colorIn.b)?colorIn.b:(colorIn.blue)? - colorIn.blue:false; - objArray[3] = (colorIn.a)?colorIn.a:(colorIn.alpha)? - colorIn.alpha:1; - objArray[4] = (objArray[0]&&objArray[1]&&objArray[2]) ? true : false; - objArray[5] = - (colorIn.space)?colorIn.space: - (colorIn.colorSpace)?colorIn.colorSpace: - (colorIn.colorspace)?colorIn.colorspace: - 'unknown'; - - return objArray; - } - }; // End if statement - // console.log('colorParsley error: invalid input') - return [0,0,0,0,false,'inputError'] // throw 'InvalidInput' // return error +export function colorParsley(colorIn) { + if (typeof colorIn === 'string') { + return parseString(colorIn); + } + else if (typeof colorIn === 'number') { + return [ + (colorIn & 0xFF0000) >> 16, + (colorIn & 0x00FF00) >> 8, + ( + colorIn & 0x0000FF), + 1, + true, + 'unknown', + ]; + } + else if (typeof colorIn === 'object') { + if (Array.isArray(colorIn)) { + return colorIn; + } + else if (!isNaN(colorIn.r) || !isNaN(colorIn.red)) { + // validate object & return array + const objArray = [0, 0, 0, 0, false, 'unknown']; + // takes object with r g b or red green blue etc... + objArray[0] = (colorIn.r) + ? colorIn.r + : (colorIn.red) + ? colorIn.red + : false; + objArray[1] = (colorIn.g) + ? colorIn.g + : (colorIn.green) + ? colorIn.green + : false; + objArray[2] = (colorIn.b) + ? colorIn.b + : (colorIn.blue) + ? colorIn.blue + : false; + objArray[3] = (colorIn.a) + ? colorIn.a + : (colorIn.alpha) + ? colorIn.alpha + : 1; + objArray[4] = !!((objArray[0] && objArray[1] && objArray[2])); + objArray[5] + = (colorIn.space) + ? colorIn.space + : (colorIn.colorSpace) + ? colorIn.colorSpace + : (colorIn.colorspace) + ? colorIn.colorspace + : 'unknown'; + + return objArray; + } + }; // End if statement + // console.log('colorParsley error: invalid input') + return [0, 0, 0, 0, false, 'inputError']; // throw 'InvalidInput' // return error }; - -///// Æ’ parseString() /////////////////////////////////////////////////// +/// // Æ’ parseString() /////////////////////////////////////////////////// // private -function parseString (colorString = '#abcdef') { - - // strip junk and make a clean string (replace unmatched) - // This retains all alphanumeric and , . # % ( ) / - colorString = colorString.replace(/[^\w,.#%()\/ -]/g,''); - colorString = colorString.toLowerCase(); // set lowercase - - let isValid = false; // validation flag, in array element [4] - let type = 'sRGB'; // Default colorspace flag in element [5] - let retArray = [0,0,0,0,isValid,type]; // init the return array - - - // test for named color before iterating array - if (colorString.match(/^(?:(?!rgb|l.h|hs|col|\d|#).{0,4})(?=[g-z])/)) { - - - ///// CSS4 NAMED COLORS plus a bonus set of GREYS and GRAYS ////////// - - // If name is matched, parse and return the color values - let namedColors = { - gray0:'000000',gray1:'111111',gray2:'222222',gray3:'333333',gray4:'444444',gray5:'555555',gray6:'666666',gray7:'777777',gray8:'888888',gray9:'999999',graya:'aaaaaa',grayb:'bbbbbb',grayc:'cccccc',grayd:'dddddd',graye:'eeeeee',grayf:'ffffff',midgray:'a0a0a0', - grey0:'000000',grey1:'111111',grey2:'222222',grey3:'333333',grey4:'444444',grey5:'555555',grey6:'666666',grey7:'777777',grey8:'888888',grey9:'999999',greya:'aaaaaa',greyb:'bbbbbb',greyc:'cccccc',greyd:'dddddd',greye:'eeeeee',greyf:'ffffff',midgrey:'a0a0a0', - aliceblue:'f0f8ff',antiquewhite:'faebd7',aqua:'00ffff',aquamarine:'7fffd4',azure:'f0ffff', - beige:'f5f5dc',bisque:'ffe4c4',black:'000000',blanchedalmond:'ffebcd',blue:'0000ff',blueviolet:'8a2be2',brown:'a52a2a',burlywood:'deb887', - cadetblue:'5f9ea0',chartreuse:'7fff00',chocolate:'d2691e',coral:'ff7f50',cornflowerblue:'6495ed',cornsilk:'fff8dc',crimson:'dc143c',cyan:'00ffff', - darkblue:'00008b',darkcyan:'008b8b',darkgoldenrod:'b8860b',darkgray:'a9a9a9',darkgreen:'006400',darkgrey:'a9a9a9',darkkhaki:'bdb76b',darkmagenta:'8b008b',darkolivegreen:'556b2f',darkorange:'ff8c00',darkorchid:'9932cc',darkred:'8b0000',darksalmon:'e9967a',darkseagreen:'8fbc8f',darkslateblue:'483d8b',darkslategray:'2f4f4f',darkslategrey:'2f4f4f',darkturquoise:'00ced1',darkviolet:'9400d3',deeppink:'ff1493',deepskyblue:'00bfff',dimgray:'696969',dimgrey:'696969',dodgerblue:'1e90ff', - firebrick:'b22222',floralwhite:'fffaf0',forestgreen:'228b22',fuchsia:'ff00ff', - gainsboro:'dcdcdc',ghostwhite:'f8f8ff',gold:'ffd700',goldenrod:'daa520',gray:'808080',green:'008000',greenyellow:'adff2f',grey:'808080', - honeydew:'f0fff0',hotpink:'ff69b4', - indianred:'cd5c5c',indigo:'4b0082',ivory:'fffff0', - khaki:'f0e68c', - lavender:'e6e6fa',lavenderblush:'fff0f5',lawngreen:'7cfc00',lemonchiffon:'fffacd',lightblue:'add8e6',lightcoral:'f08080',lightcyan:'e0ffff',lightgoldenrodyellow:'fafad2',lightgray:'d3d3d3',lightgreen:'90ee90',lightgrey:'d3d3d3',lightpink:'ffb6c1',lightsalmon:'ffa07a',lightseagreen:'20b2aa',lightskyblue:'87cefa',lightslategray:'778899',lightslategrey:'778899',lightsteelblue:'b0c4de',lightyellow:'ffffe0',lime:'00ff00',limegreen:'32cd32',linen:'faf0e6', - magenta:'ff00ff',maroon:'800000',mediumaquamarine:'66cdaa',mediumblue:'0000cd',mediumorchid:'ba55d3',mediumpurple:'9370db',mediumseagreen:'3cb371',mediumslateblue:'7b68ee',mediumspringgreen:'00fa9a',mediumturquoise:'48d1cc',mediumvioletred:'c71585',midnightblue:'191970',mintcream:'f5fffa',mistyrose:'ffe4e1',moccasin:'ffe4b5', - navajowhite:'ffdead',navy:'000080', - oldlace:'fdf5e6',olive:'808000',olivedrab:'6b8e23',orange:'ffa500',orangered:'ff4500',orchid:'da70d6', - palegoldenrod:'eee8aa',palegreen:'98fb98',paleturquoise:'afeeee',palevioletred:'db7093',papayawhip:'ffefd5',peachpuff:'ffdab9',peru:'cd853f',pink:'ffc0cb',plum:'dda0dd',powderblue:'b0e0e6',purple:'800080', - rebeccapurple:'663399',red:'ff0000',rosybrown:'bc8f8f',royalblue:'4169e1', - saddlebrown:'8b4513',salmon:'fa8072',sandybrown:'f4a460',seagreen:'2e8b57',seashell:'fff5ee',sienna:'a0522d',silver:'c0c0c0',skyblue:'87ceeb',slateblue:'6a5acd',slategray:'708090',slategrey:'708090',snow:'fffafa',springgreen:'00ff7f',steelblue:'4682b4', - tan:'d2b48c',teal:'008080',thistle:'d8bfd8',tomato:'ff6347',turquoise:'40e0d0', - violet:'ee82ee', - wheat:'f5deb3',white:'ffffff',whitesmoke:'f5f5f5', - yellow:'ffff00',yellowgreen:'9acd32' - }; - - for (let key in namedColors) { - if (colorString == key) { - - let hexRex = { - rex: /^([\da-f]{2})([\da-f]{2})([\da-f]{2})$/, - sprig: function (slices) { - for (let i = 0; i < 3; i++) { - retArray[i] = parseInt(slices[i+1],16); - } - retArray[3] = 1; - return true; - } - }; - - let hexProc = hexRex.rex.exec(namedColors[key]); - retArray[4] = isValid = hexRex.sprig(hexProc); - - return retArray; - } - } - }; // end of named colors section - - - // NEW regex 0.1.6 - still current for use with with 0.1.8+ - // See docs for breakdown of regex pattern - let colorRex = { - rex: /(?:^(?:#|0x|)(?:(?:([\da-f])([\da-f])([\da-f])([\da-f])?)(?!\S)|(?:([\da-f]{2})(?:([\da-f]{2})([\da-f]{2})([\da-f]{2})?)?))|(?:(?:^(?:rgba?|)\(? ?(?:(?:(?:(255|(?:25[0-4]|2[0-4]\d|1?\d{1,2})(?:\.\d{1,24})?)))(?:,[^\S]*$|(?:(?:, ?| )(255|(?:25[0-4]|2[0-4]\d|1?\d{1,2})(?:\.\d{1,24})?)(?:, ?| )(255|(?:25[0-4]|2[0-4]\d|1?\d{1,2})(?:\.\d{1,24})?)))|(100%|\d{1,2}(?:\.\d{1,24})?%)(?:,?[^\S]*$|(?:(?:, ?| )(?:(100%|\d{1,2}(?:\.\d{1,24})?%)(?:, ?| )(100%|\d{1,2}(?:\.\d{1,24})?%)))))|^(?:color\((srgb|srgb-linear|display-p3|a98-rgb|prophoto-rgb|rec2020|xyz|xyz-d50|xyz-d65) (?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])) (?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])) (?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])))|^(?:((?:r(?!gb)|c(?!olor)|[abd-qs-z])[a-z]{2,5})\( ?((?:\d{0,3}\.|)\d{1,24}%?)(?:, ?| )((?:\d{0,3}\.|)\d{1,24}%?)(?:, ?| )((?:\d{0,3}\.|)\d{1,24}%?))))(?:(?:,| \/| ) ?(?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])))?(?:\)| |))[^\S]*$/, - - - parsley: function (slices) { - - let slicePos = 0; - let sliceLast = 0; - let base = 10; - let divisor = 100.0; - let convertPct = 2.55; - let alpha = '1'; - - - if (slices[23]) { - alpha = slices[23]; - delete slices[23]; - } - // Set alpha before anything else - retArray[3] = (alpha.match(/%/g)) ? - parseFloat(alpha) / divisor : - parseFloat(alpha); - - // determine first and last element - for (let k=1; k < slices.length; k++) { - if (slices[k]) { - slicePos = (slicePos) ? slicePos : k; - sliceLast = k; - } - } - - switch (sliceLast) { - - case 4: // This is the 3-4 digit hex parsing - base = 16; - divisor = 15.0; - retArray[3] = parseInt(slices[sliceLast],base) / divisor ; - case 3: - base = 16; - for (let i = 0; i < 3; i++) { - retArray[i] = parseInt(slices[slicePos+i] + slices[slicePos+i],base); - } - break; - - case 5: // allows two digit hex to become grey - base = 16; - case 9: // allows 1-3 digit INT with comma to become grey - retArray[0] = retArray[1] = retArray[2] = - (base == 10) ? parseFloat(slices[sliceLast]) : - parseInt(slices[sliceLast],base); - break; - - case 12: // allows single percentage to become grey - retArray[0] = retArray[1] = retArray[2] = - parseFloat(slices[sliceLast]) * convertPct; - break; - - case 8: // These are the main parsings for hex and rgb() - base = 16; - divisor = 255.0; - retArray[3] = parseInt(slices[8],base) / divisor ; - case 7: - base = 16; - case 11: - for (let i = 0; i < 3; i++) { - retArray[i] = (base == 10) ? parseFloat(slices[slicePos+i]) : - parseInt(slices[slicePos+i],base); - } - break; - - case 14: // rgb() percentage - for (let i = 0; i < 3; i++) { - retArray[i] = parseFloat(slices[slicePos+i]) * convertPct; - } - break; - - case 18: // This is for color() CSS 4 - retArray[5] = slices[15]; - - for (let i = 0; i < 3; i++) { // color() is converted to 0.0-255.0 - slicePos++; - retArray[i] = (slices[slicePos].match(/%/g)) ? - parseFloat(slices[slicePos]) * 2.55: - parseFloat(slices[slicePos]) * 255; - } - break; - - case 22: // This is the "wild west" section - - retArray[5] = slices[slicePos]; - - for (let i = 0; i < 3; i++ ) { - slicePos++; - retArray[i] = (slices[slicePos]) ? (slices[slicePos].match(/%/g)) ? - parseFloat(slices[slicePos]) / divisor : - parseFloat(slices[slicePos]) : 0.0 ; - } - - // Process for HSL and HWB - if (retArray[5].match(/^(?:hsla?|hwba?)/i) ) { - let sat,light,white,black,hwbFact; - - let hue = retArray[0] % 360.0; - if (hue < 0) { hue += 360.0; } - - if (retArray[5].match(/^hsla?/i) ) { - sat = retArray[1]; - light = retArray[2]; - white = 0; - hwbFact = 1; - } else if (retArray[5].match(/^hwba?/i) ) { - white = retArray[1]; - black = retArray[2]; - - if (white + black >= 1) { - retArray[0] = retArray[1] = retArray[2] = white / (white + black); - retArray[5] = 'sRGB'; - break; - } - - sat = 1.0; - light = 0.5; - hwbFact = (1.0 - white - black); - } - - function f(n) { // from CSS reference implementation - let k = (n + hue/30) % 12; - let a = sat * Math.min(light, 1 - light); - return light - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); - } - - retArray[0] = Math.round(255 * (f(0) * hwbFact + white)); - retArray[1] = Math.round(255 * (f(8) * hwbFact + white)); - retArray[2] = Math.round(255 * (f(4) * hwbFact + white)); - retArray[5] = 'sRGB'; - } - break; - } - return true; - } // close parsley sub-function - }; // close colorRex obj - - - // The main call - let slicesProc = colorRex.rex.exec(colorString); - - if (slicesProc) { // Error catch - - retArray[4] = isValid = colorRex.parsley(slicesProc); // set the isValid flag - - return retArray; - - } else { - isValid = false; - // console.log('colorParsley error: unable to parse string') - return [0,0,0,0,isValid,'parsleyError'] // throw 'InvalidString' - } +function parseString(colorString = '#abcdef') { + // strip junk and make a clean string (replace unmatched) + // This retains all alphanumeric and , . # % ( ) / + colorString = colorString.replace(/[^\w,.#%()\/ -]/g, ''); + colorString = colorString.toLowerCase(); // set lowercase + + let isValid = false; // validation flag, in array element [4] + const type = 'sRGB'; // Default colorspace flag in element [5] + const retArray = [0, 0, 0, 0, isValid, type]; // init the return array + + // test for named color before iterating array + if (colorString.match(/^(?:(?!rgb|l.h|hs|col|\d|#).{0,4})(?=[g-z])/)) { + /// // CSS4 NAMED COLORS plus a bonus set of GREYS and GRAYS ////////// + + // If name is matched, parse and return the color values + const namedColors = { + gray0: '000000', + gray1: '111111', + gray2: '222222', + gray3: '333333', + gray4: '444444', + gray5: '555555', + gray6: '666666', + gray7: '777777', + gray8: '888888', + gray9: '999999', + graya: 'aaaaaa', + grayb: 'bbbbbb', + grayc: 'cccccc', + grayd: 'dddddd', + graye: 'eeeeee', + grayf: 'ffffff', + midgray: 'a0a0a0', + grey0: '000000', + grey1: '111111', + grey2: '222222', + grey3: '333333', + grey4: '444444', + grey5: '555555', + grey6: '666666', + grey7: '777777', + grey8: '888888', + grey9: '999999', + greya: 'aaaaaa', + greyb: 'bbbbbb', + greyc: 'cccccc', + greyd: 'dddddd', + greye: 'eeeeee', + greyf: 'ffffff', + midgrey: 'a0a0a0', + aliceblue: 'f0f8ff', + antiquewhite: 'faebd7', + aqua: '00ffff', + aquamarine: '7fffd4', + azure: 'f0ffff', + beige: 'f5f5dc', + bisque: 'ffe4c4', + black: '000000', + blanchedalmond: 'ffebcd', + blue: '0000ff', + blueviolet: '8a2be2', + brown: 'a52a2a', + burlywood: 'deb887', + cadetblue: '5f9ea0', + chartreuse: '7fff00', + chocolate: 'd2691e', + coral: 'ff7f50', + cornflowerblue: '6495ed', + cornsilk: 'fff8dc', + crimson: 'dc143c', + cyan: '00ffff', + darkblue: '00008b', + darkcyan: '008b8b', + darkgoldenrod: 'b8860b', + darkgray: 'a9a9a9', + darkgreen: '006400', + darkgrey: 'a9a9a9', + darkkhaki: 'bdb76b', + darkmagenta: '8b008b', + darkolivegreen: '556b2f', + darkorange: 'ff8c00', + darkorchid: '9932cc', + darkred: '8b0000', + darksalmon: 'e9967a', + darkseagreen: '8fbc8f', + darkslateblue: '483d8b', + darkslategray: '2f4f4f', + darkslategrey: '2f4f4f', + darkturquoise: '00ced1', + darkviolet: '9400d3', + deeppink: 'ff1493', + deepskyblue: '00bfff', + dimgray: '696969', + dimgrey: '696969', + dodgerblue: '1e90ff', + firebrick: 'b22222', + floralwhite: 'fffaf0', + forestgreen: '228b22', + fuchsia: 'ff00ff', + gainsboro: 'dcdcdc', + ghostwhite: 'f8f8ff', + gold: 'ffd700', + goldenrod: 'daa520', + gray: '808080', + green: '008000', + greenyellow: 'adff2f', + grey: '808080', + honeydew: 'f0fff0', + hotpink: 'ff69b4', + indianred: 'cd5c5c', + indigo: '4b0082', + ivory: 'fffff0', + khaki: 'f0e68c', + lavender: 'e6e6fa', + lavenderblush: 'fff0f5', + lawngreen: '7cfc00', + lemonchiffon: 'fffacd', + lightblue: 'add8e6', + lightcoral: 'f08080', + lightcyan: 'e0ffff', + lightgoldenrodyellow: 'fafad2', + lightgray: 'd3d3d3', + lightgreen: '90ee90', + lightgrey: 'd3d3d3', + lightpink: 'ffb6c1', + lightsalmon: 'ffa07a', + lightseagreen: '20b2aa', + lightskyblue: '87cefa', + lightslategray: '778899', + lightslategrey: '778899', + lightsteelblue: 'b0c4de', + lightyellow: 'ffffe0', + lime: '00ff00', + limegreen: '32cd32', + linen: 'faf0e6', + magenta: 'ff00ff', + maroon: '800000', + mediumaquamarine: '66cdaa', + mediumblue: '0000cd', + mediumorchid: 'ba55d3', + mediumpurple: '9370db', + mediumseagreen: '3cb371', + mediumslateblue: '7b68ee', + mediumspringgreen: '00fa9a', + mediumturquoise: '48d1cc', + mediumvioletred: 'c71585', + midnightblue: '191970', + mintcream: 'f5fffa', + mistyrose: 'ffe4e1', + moccasin: 'ffe4b5', + navajowhite: 'ffdead', + navy: '000080', + oldlace: 'fdf5e6', + olive: '808000', + olivedrab: '6b8e23', + orange: 'ffa500', + orangered: 'ff4500', + orchid: 'da70d6', + palegoldenrod: 'eee8aa', + palegreen: '98fb98', + paleturquoise: 'afeeee', + palevioletred: 'db7093', + papayawhip: 'ffefd5', + peachpuff: 'ffdab9', + peru: 'cd853f', + pink: 'ffc0cb', + plum: 'dda0dd', + powderblue: 'b0e0e6', + purple: '800080', + rebeccapurple: '663399', + red: 'ff0000', + rosybrown: 'bc8f8f', + royalblue: '4169e1', + saddlebrown: '8b4513', + salmon: 'fa8072', + sandybrown: 'f4a460', + seagreen: '2e8b57', + seashell: 'fff5ee', + sienna: 'a0522d', + silver: 'c0c0c0', + skyblue: '87ceeb', + slateblue: '6a5acd', + slategray: '708090', + slategrey: '708090', + snow: 'fffafa', + springgreen: '00ff7f', + steelblue: '4682b4', + tan: 'd2b48c', + teal: '008080', + thistle: 'd8bfd8', + tomato: 'ff6347', + turquoise: '40e0d0', + violet: 'ee82ee', + wheat: 'f5deb3', + white: 'ffffff', + whitesmoke: 'f5f5f5', + yellow: 'ffff00', + yellowgreen: '9acd32', + }; + + for (const key in namedColors) { + if (colorString === key) { + const hexRex = { + rex: /^([\da-f]{2})([\da-f]{2})([\da-f]{2})$/, + sprig(slices) { + for (let i = 0; i < 3; i++) + retArray[i] = Number.parseInt(slices[i + 1], 16); + + retArray[3] = 1; + return true; + }, + }; + + const hexProc = hexRex.rex.exec(namedColors[key]); + retArray[4] = isValid = hexRex.sprig(hexProc); + + return retArray; + } + } + }; // end of named colors section + + // NEW regex 0.1.6 - still current for use with with 0.1.8+ + // See docs for breakdown of regex pattern + const colorRex = { + rex: /(?:^(?:#|0x|)(?:(?:([\da-f])([\da-f])([\da-f])([\da-f])?)(?!\S)|(?:([\da-f]{2})(?:([\da-f]{2})([\da-f]{2})([\da-f]{2})?)?))|(?:(?:^(?:rgba?|)\(? ?(?:(?:(?:(255|(?:25[0-4]|2[0-4]\d|1?\d{1,2})(?:\.\d{1,24})?)))(?:,[^\S]*$|(?:(?:, ?| )(255|(?:25[0-4]|2[0-4]\d|1?\d{1,2})(?:\.\d{1,24})?)(?:, ?| )(255|(?:25[0-4]|2[0-4]\d|1?\d{1,2})(?:\.\d{1,24})?)))|(100%|\d{1,2}(?:\.\d{1,24})?%)(?:,?[^\S]*$|(?:(?:, ?| )(?:(100%|\d{1,2}(?:\.\d{1,24})?%)(?:, ?| )(100%|\d{1,2}(?:\.\d{1,24})?%)))))|^(?:color\((srgb|srgb-linear|display-p3|a98-rgb|prophoto-rgb|rec2020|xyz|xyz-d50|xyz-d65) (?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])) (?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])) (?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])))|^(?:((?:r(?!gb)|c(?!olor)|[abd-qs-z])[a-z]{2,5})\( ?((?:\d{0,3}\.|)\d{1,24}%?)(?:, ?| )((?:\d{0,3}\.|)\d{1,24}%?)(?:, ?| )((?:\d{0,3}\.|)\d{1,24}%?))))(?:(?:,| \/| ) ?(?:(100%|\d{1,2}(?:\.\d{1,24})?%|[0 ]\.\d{1,24}|[01])))?(?:\)| |))[^\S]*$/, + + parsley(slices) { + let slicePos = 0; + let sliceLast = 0; + let base = 10; + let divisor = 100.0; + const convertPct = 2.55; + let alpha = '1'; + + if (slices[23]) { + alpha = slices[23]; + delete slices[23]; + } + // Set alpha before anything else + retArray[3] = (alpha.match(/%/g)) + ? Number.parseFloat(alpha) / divisor + : Number.parseFloat(alpha); + + // determine first and last element + for (let k = 1; k < slices.length; k++) { + if (slices[k]) { + slicePos = (slicePos) || k; + sliceLast = k; + } + } + + switch (sliceLast) { + case 4: // This is the 3-4 digit hex parsing + base = 16; + divisor = 15.0; + retArray[3] = Number.parseInt(slices[sliceLast], base) / divisor; + case 3: + base = 16; + for (let i = 0; i < 3; i++) + retArray[i] = Number.parseInt(slices[slicePos + i] + slices[slicePos + i], base); + + break; + + case 5: // allows two digit hex to become grey + base = 16; + case 9: // allows 1-3 digit INT with comma to become grey + retArray[0] = retArray[1] = retArray[2] + = (base === 10) + ? Number.parseFloat(slices[sliceLast]) + : Number.parseInt(slices[sliceLast], base); + break; + + case 12: // allows single percentage to become grey + retArray[0] = retArray[1] = retArray[2] + = Number.parseFloat(slices[sliceLast]) * convertPct; + break; + + case 8: // These are the main parsings for hex and rgb() + base = 16; + divisor = 255.0; + retArray[3] = Number.parseInt(slices[8], base) / divisor; + case 7: + base = 16; + case 11: + for (let i = 0; i < 3; i++) { + retArray[i] = (base === 10) + ? Number.parseFloat(slices[slicePos + i]) + : Number.parseInt(slices[slicePos + i], base); + } + break; + + case 14: // rgb() percentage + for (let i = 0; i < 3; i++) + retArray[i] = Number.parseFloat(slices[slicePos + i]) * convertPct; + + break; + + case 18: // This is for color() CSS 4 + retArray[5] = slices[15]; + + for (let i = 0; i < 3; i++) { // color() is converted to 0.0-255.0 + slicePos++; + retArray[i] = (slices[slicePos].match(/%/g)) + ? Number.parseFloat(slices[slicePos]) * 2.55 + : Number.parseFloat(slices[slicePos]) * 255; + } + break; + + case 22: // This is the "wild west" section + + retArray[5] = slices[slicePos]; + + for (let i = 0; i < 3; i++) { + slicePos++; + retArray[i] = (slices[slicePos]) + ? (slices[slicePos].match(/%/g)) + ? Number.parseFloat(slices[slicePos]) / divisor + : Number.parseFloat(slices[slicePos]) + : 0.0; + } + + // Process for HSL and HWB + if (retArray[5].match(/^(?:hsla?|hwba?)/i)) { + let sat, light, white, black, hwbFact; + + let hue = retArray[0] % 360.0; + if (hue < 0) + hue += 360.0; + + if (retArray[5].match(/^hsla?/i)) { + sat = retArray[1]; + light = retArray[2]; + white = 0; + hwbFact = 1; + } + else if (retArray[5].match(/^hwba?/i)) { + white = retArray[1]; + black = retArray[2]; + + if (white + black >= 1) { + retArray[0] = retArray[1] = retArray[2] = white / (white + black); + retArray[5] = 'sRGB'; + break; + } + + sat = 1.0; + light = 0.5; + hwbFact = (1.0 - white - black); + } + + function f(n) { // from CSS reference implementation + const k = (n + hue / 30) % 12; + const a = sat * Math.min(light, 1 - light); + return light - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); + } + + retArray[0] = Math.round(255 * (f(0) * hwbFact + white)); + retArray[1] = Math.round(255 * (f(8) * hwbFact + white)); + retArray[2] = Math.round(255 * (f(4) * hwbFact + white)); + retArray[5] = 'sRGB'; + } + break; + } + return true; + }, // close parsley sub-function + }; // close colorRex obj + + // The main call + const slicesProc = colorRex.rex.exec(colorString); + + if (slicesProc) { // Error catch + retArray[4] = isValid = colorRex.parsley(slicesProc); // set the isValid flag + + return retArray; + } + else { + isValid = false; + // console.log('colorParsley error: unable to parse string') + return [0, 0, 0, 0, isValid, 'parsleyError']; // throw 'InvalidString' + } }; - - - //////////////////////////////////////////////////////////////////////////////// -///// BONUS STRING FORMATTING UTILITIES \//////////////////////////////////// +/// // BONUS STRING FORMATTING UTILITIES \//////////////////////////////////// +/// // Æ’ colorToHex() /////////////////////////////////////////////////// -///// Æ’ colorToHex() /////////////////////////////////////////////////// +// returns hex string, 3,4,6, or 8 chars if that was entered, no # +// If alpha is 1 or empty, no alpha is returned i.e. abcf returns abc - // returns hex string, 3,4,6, or 8 chars if that was entered, no # - // If alpha is 1 or empty, no alpha is returned i.e. abcf returns abc - // export -function colorToHex (rgba = [0,0,0,''], allow3 = true) { - let R = Math.round(rgba[0]).toString(16).padStart(2, '0'); - let G = Math.round(rgba[1]).toString(16).padStart(2, '0'); - let B = Math.round(rgba[2]).toString(16).padStart(2, '0'); - let A = (rgba[3] == '' || rgba[3] == 1) ? '' : - Math.round(rgba[3] * 255).toString(16).padStart(2, '0') ; - - // this if returns a 3 character hex if possible - aabbcc becomes abc - if ( allow3 && - parseInt(A, 16) % 17 == 0 && - parseInt(A, 16) % 17 == 0 && - parseInt(A, 16) % 17 == 0 && - (parseInt(A, 16) % 17 == 0 || A == '') - ) { - return R.charAt(0) + G.charAt(0) + B.charAt(0) + A.charAt(0); - } else { - return R + G + B + A; - } +function colorToHex(rgba = [0, 0, 0, ''], allow3 = true) { + const R = Math.round(rgba[0]).toString(16).padStart(2, '0'); + const G = Math.round(rgba[1]).toString(16).padStart(2, '0'); + const B = Math.round(rgba[2]).toString(16).padStart(2, '0'); + const A = (rgba[3] === '' || rgba[3] === 1) + ? '' + : Math.round(rgba[3] * 255).toString(16).padStart(2, '0'); + + // this if returns a 3 character hex if possible - aabbcc becomes abc + if (allow3 + && Number.parseInt(A, 16) % 17 === 0 + && Number.parseInt(A, 16) % 17 === 0 + && Number.parseInt(A, 16) % 17 === 0 + && (Number.parseInt(A, 16) % 17 === 0 || A === '') + ) + return R.charAt(0) + G.charAt(0) + B.charAt(0) + A.charAt(0); + else + return R + G + B + A; } +/// // Æ’ colorToRGB() /////////////////////////////////////////////////// +// RGBAstr — returns rgb() or rgba() INT value string (0-255) no spaces +// If alpha is 1 or empty, no alpha is returned - -///// Æ’ colorToRGB() /////////////////////////////////////////////////// - - // RGBAstr — returns rgb() or rgba() INT value string (0-255) no spaces - // If alpha is 1 or empty, no alpha is returned - // export -function colorToRGB (rgba = [0,0,0,''], round = true) { - if (round) { - for (let i=0; i < 3; i++) { - rgba[i] = Math.round(rgba[i]); - } - // while RGB tuples round to int, A needs additional precision - rgba[3] = ( rgba[3] == '' || rgba[3] == 1) ? 1 : - Math.trunc(rgba[3]*1000)*0.001; - } - - return ( rgba[3] == '' || rgba[3] == 1) ? - 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')' : - 'rgba(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ',' + rgba[3] + ')'; +function colorToRGB(rgba = [0, 0, 0, ''], round = true) { + if (round) { + for (let i = 0; i < 3; i++) + rgba[i] = Math.round(rgba[i]); + + // while RGB tuples round to int, A needs additional precision + rgba[3] = (rgba[3] === '' || rgba[3] === 1) + ? 1 + : Math.trunc(rgba[3] * 1000) * 0.001; + } + + return (rgba[3] === '' || rgba[3] === 1) + ? `rgb(${rgba[0]},${rgba[1]},${rgba[2]})` + : `rgba(${rgba[0]},${rgba[1]},${rgba[2]},${rgba[3]})`; } - -/////\ END UTILITIES /////////////////////////////////////////////////////// +/// //\ END UTILITIES /////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// - -///\ ////////////////////////////////////// -////\ ////////////////////////////////////// -/////\ END COLOR PARSLEY 0.1.8 BLOCK ////////////////////////////////////// +/// \ ////////////////////////////////////// +/// /\ ////////////////////////////////////// +/// //\ END COLOR PARSLEY 0.1.8 BLOCK ////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// - diff --git a/src/index.tsx b/src/index.tsx index 3b2064c..02adea4 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,15 +1,17 @@ /* @refresh reload */ import { render } from 'solid-js/web'; -import { Router } from "@solidjs/router"; +import { Router } from '@solidjs/router'; import './assets/SCSS/styles.scss'; import './index.css'; import App from './App'; -render(( - () => - <Router> - <App/> - </Router> - ), - document.getElementById('root') as HTMLElement); +render( + () => ( + <Router> + <App /> + </Router> + ) + , + document.getElementById('root') as HTMLElement, +); diff --git a/src/pages/colorGenerationPage.tsx b/src/pages/colorGenerationPage.tsx index ce8451e..0b815b2 100644 --- a/src/pages/colorGenerationPage.tsx +++ b/src/pages/colorGenerationPage.tsx @@ -1,152 +1,153 @@ -import {Component, createContext, createSignal, Accessor, Setter, useContext, createEffect} from "solid-js"; -import ColorSelectorComponent from "../components/colorSelectorComponent"; +import type { Accessor, Component, Setter } from 'solid-js'; +import { createContext, createSignal, useContext } from 'solid-js'; +import ColorSelectorComponent from '../components/colorSelectorComponent'; import { - BaseBackgroundArr, - colorsToArr, - genColorScale, - generateDarkScales, - ScalePrimObj -} from "../functions/colorConfig"; -import ToggleColorScale, {currScaleText, visibleColorScale} from "../components/shared/toggleColorScale"; -import ColorSwatch from "../components/colorSwatch"; -import ColorSwatchLarge from "../components/colorSwatchLarge"; -import DataPlot from "../components/dataPlot"; -import {darkMode} from "../components/shared/darkModeToggle"; -import Button from "../assets/components/button.styled"; - + BaseBackgroundArr, + ScalePrimObj, + colorsToArr, + genColorScale, + generateDarkScales, +} from '../functions/colorConfig'; +import { currScaleText, visibleColorScale } from '../components/shared/toggleColorScale'; +import ColorSwatch from '../components/colorSwatch'; +import ColorSwatchLarge from '../components/colorSwatchLarge'; +import DataPlot from '../components/dataPlot'; +import { darkMode } from '../components/shared/darkModeToggle'; +import Button from '../assets/components/button.styled'; const ColorArrContext = createContext<ColorArrContextType>(); type ColorArrContextType = [Accessor<[string, string[]][]>, Setter<[string, string[]][]>]; const ColorGenerationPage: Component = () => { - - const [colors, setColors] = createSignal(Object.entries(ScalePrimObj)), colorObj: ColorArrContextType = [ - colors, - setColors - ]; - - const [jsonFile, setJsonFile] = createSignal(); - - const handleColorExport = (mode: 'obj' | 'arr') => { - const darkText = darkMode() ? 'dark' : 'light'; - const fileName = `${currScaleText()}-${darkText}.json`; - const obj = mode == 'obj' ? Object.fromEntries(colors()) : colors() - const file = new Blob([JSON.stringify(obj, undefined, 2)], { - type: 'application/json' - }); - const link = document.createElement('a'); - link.download = fileName; - link.href = URL.createObjectURL(file); - link.click(); - link.remove(); - } - - const handleFileChange = (e: any) => { - const fileReader = new FileReader(); - fileReader.readAsText(e.target.files[0]); - fileReader.onload = e => { - // console.log(e.target?.result); - setJsonFile(eval(`(${e.target?.result as string})`)); - // console.log(eval(`(${jsonFile() as string})`)) - setColors(Object.entries(jsonFile() as object)); - // setColorScale(jsonFile() as any); - }; - } - - const generatedColors = () => darkMode() ? - genColorScale(generateDarkScales(Object.fromEntries(colors()), BaseBackgroundArr), true) : - genColorScale(Object.fromEntries(colors()), false) - - const generatedColorsArr = () => colorsToArr(generatedColors()) - - return ( - <ColorArrContext.Provider value={colorObj}> - <div class='flex justify-center w-full px-4 sm:px-6 pt-6 md:pt-8'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6'> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Color Table - </h1> - <p class='text-slate-600 dark:text-neutral-400 pb-4'> - Ambient color generation algorithm utilizes: 1. the lightest color 2. most saturated color 3. darkest color to generate the full color palette. The dark scales are also automatically generated using a fixed background color variable. - </p> - <div class="flex gap-2 flex-wrap pb-4"> - <Button aria={"Import Color Set"} type="submit"> - <label class="cursor-pointer"> - Import Color Table (JSON) - <input type="file" onChange={handleFileChange} class="hidden"/> - </label> - </Button> - <a onClick={() => handleColorExport('obj')}> - <Button aria={"Export Current Table as Object"}> - Export Color Table - </Button> - </a> - <a onClick={() => handleColorExport('arr')}> - <Button aria={"Export Current Table as Array"}> - Export Color Table as Array - </Button> - </a> - </div> - - <ColorSelectorComponent/> - <h1 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> - Color Swatch - </h1> - <p class='text-slate-600 dark:text-neutral-400 pb-2'> - This tool was designed with the Flex Design Colors in mind. This color set can be modified and also exported. - </p> - </div> - </div> - <div class='flex justify-center w-full px-4 sm:px-6'> - <div class='flex flex-row gap-x-8 flex-wrap 2xl:flex-nowrap w-full max-w-screen-2xl'> - <div class='flex flex-col basis-full 2xl:basis-1/2 pb-10'> - <h2 class="text-slate-600 dark:text-neutral-400"> - Active Color Swatch - </h2> - <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> - Customized Color Scale - - {/*{currScaleText()}*/} - </h3> - <ColorSwatch swatch={generatedColors()}/> - </div> - - <div class='grow w-full basis-full 2xl:basis-1/2'> - <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={generatedColorsArr()} trackIndex='color'/> - <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> - <div class="grow basis-ful md:basis-0"> - <DataPlot swatchArr={generatedColorsArr()} plotArea={1} plotType={"l"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={generatedColorsArr()} plotArea={1} plotType={"c"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={generatedColorsArr()} plotArea={1} plotType={"h"}/> - </div> - </div> - <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={generatedColorsArr()}trackIndex='id'/> - <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> - <div class="grow basis-ful md:basis-0"> - <DataPlot swatchArr={generatedColorsArr()} plotArea={0} plotType={"l"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={generatedColorsArr()} plotArea={0} plotType={"c"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={generatedColorsArr()} plotArea={0} plotType={"h"}/> - </div> - </div> - </div> - - </div> - </div> - </ColorArrContext.Provider> - ) -} + const [colors, setColors] = createSignal(Object.entries(ScalePrimObj)); + const colorObj: ColorArrContextType = [ + colors, + setColors, + ]; + + const [jsonFile, setJsonFile] = createSignal(); + + const handleColorExport = (mode: 'obj' | 'arr') => { + const darkText = darkMode() ? 'dark' : 'light'; + const fileName = `${currScaleText()}-${darkText}.json`; + const obj = mode === 'obj' ? Object.fromEntries(colors()) : colors(); + const file = new Blob([JSON.stringify(obj, undefined, 2)], { + type: 'application/json', + }); + const link = document.createElement('a'); + link.download = fileName; + link.href = URL.createObjectURL(file); + link.click(); + link.remove(); + }; + + const handleFileChange = (e: any) => { + const fileReader = new FileReader(); + fileReader.readAsText(e.target.files[0]); + fileReader.onload = (e) => { + // console.log(e.target?.result); + // eslint-disable-next-line no-eval + setJsonFile(eval(`(${e.target?.result as string})`)); + // console.log(eval(`(${jsonFile() as string})`)) + setColors(Object.entries(jsonFile() as object)); + // setColorScale(jsonFile() as any); + }; + }; + + const generatedColors = () => darkMode() + ? genColorScale(generateDarkScales(Object.fromEntries(colors()), BaseBackgroundArr), true) + : genColorScale(Object.fromEntries(colors()), false); + + const generatedColorsArr = () => colorsToArr(generatedColors()); + + return ( + <ColorArrContext.Provider value={colorObj}> + <div class="flex justify-center w-full px-4 sm:px-6 pt-6 md:pt-8"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Color Table + </h1> + <p class="text-slate-600 dark:text-neutral-400 pb-4"> + Ambient color generation algorithm utilizes: 1. the lightest color 2. most saturated color 3. darkest color to generate the full color palette. The dark scales are also automatically generated using a fixed background color variable. + </p> + <div class="flex gap-2 flex-wrap pb-4"> + <Button aria="Import Color Set" type="submit"> + <label class="cursor-pointer"> + Import Color Table (JSON) + <input type="file" onChange={handleFileChange} class="hidden" /> + </label> + </Button> + <a onClick={() => handleColorExport('obj')}> + <Button aria="Export Current Table as Object"> + Export Color Table + </Button> + </a> + <a onClick={() => handleColorExport('arr')}> + <Button aria="Export Current Table as Array"> + Export Color Table as Array + </Button> + </a> + </div> + + <ColorSelectorComponent /> + <h1 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> + Color Swatch + </h1> + <p class="text-slate-600 dark:text-neutral-400 pb-2"> + This tool was designed with the Flex Design Colors in mind. This color set can be modified and also exported. + </p> + </div> + </div> + <div class="flex justify-center w-full px-4 sm:px-6"> + <div class="flex flex-row gap-x-8 flex-wrap 2xl:flex-nowrap w-full max-w-screen-2xl"> + <div class="flex flex-col basis-full 2xl:basis-1/2 pb-10"> + <h2 class="text-slate-600 dark:text-neutral-400"> + Active Color Swatch + </h2> + <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> + Customized Color Scale + + {/* {currScaleText()} */} + </h3> + <ColorSwatch swatch={generatedColors()} /> + </div> + + <div class="grow w-full basis-full 2xl:basis-1/2"> + <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={generatedColorsArr()} trackIndex="color" /> + <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> + <div class="grow basis-ful md:basis-0"> + <DataPlot swatchArr={generatedColorsArr()} plotArea={1} plotType="l" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={generatedColorsArr()} plotArea={1} plotType="c" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={generatedColorsArr()} plotArea={1} plotType="h" /> + </div> + </div> + <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={generatedColorsArr()}trackIndex="id" /> + <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> + <div class="grow basis-ful md:basis-0"> + <DataPlot swatchArr={generatedColorsArr()} plotArea={0} plotType="l" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={generatedColorsArr()} plotArea={0} plotType="c" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={generatedColorsArr()} plotArea={0} plotType="h" /> + </div> + </div> + </div> + + </div> + </div> + </ColorArrContext.Provider> + ); +}; export function useColorArrContext() { - return useContext(ColorArrContext)!; + return useContext(ColorArrContext)!; } -export default ColorGenerationPage +export default ColorGenerationPage; diff --git a/src/pages/colorTablePage.tsx b/src/pages/colorTablePage.tsx index e233958..3aea00a 100644 --- a/src/pages/colorTablePage.tsx +++ b/src/pages/colorTablePage.tsx @@ -1,181 +1,181 @@ -import { Component, createEffect, createMemo, createSignal } from "solid-js"; -import ColorSwatch from "../components/colorSwatch"; -import ColorSwatchLarge from "../components/colorSwatchLarge"; -import DataPlot from "../components/dataPlot"; -import Button from "../assets/components/button.styled"; -import { colorsToArr } from "../functions/colorConfig"; -import ToggleColorScale, { currScaleText, visibleColorScale } from "../components/shared/toggleColorScale"; -import {darkMode} from "../components/shared/darkModeToggle"; +import type { Component } from 'solid-js'; +import { createMemo } from 'solid-js'; +import ColorSwatch from '../components/colorSwatch'; +import ColorSwatchLarge from '../components/colorSwatchLarge'; +import DataPlot from '../components/dataPlot'; +import Button from '../assets/components/button.styled'; +import { colorsToArr } from '../functions/colorConfig'; +import ToggleColorScale, { currScaleText, visibleColorScale } from '../components/shared/toggleColorScale'; +import { darkMode } from '../components/shared/darkModeToggle'; const ColorTablePage: Component = () => { + const visibleColorScaleArr = createMemo(() => colorsToArr(visibleColorScale())); - const visibleColorScaleArr = createMemo(() => colorsToArr(visibleColorScale())) + const ColorExportAsArr = () => { + const out: Record<string, Array<string>> = {}; + Object.keys(visibleColorScale()).forEach((key, i) => { + out[key.toLowerCase()] = visibleColorScaleArr()[i]; + }); + return out; + }; - const handleColorExport = (mode: 'obj' | 'arr') => { - const darkText = darkMode() ? 'dark' : 'light'; - const fileName = `${currScaleText()}-${darkText}.json`; - const obj = mode == 'obj' ? ColorExportAsObj() : ColorExportAsArr() - const file = new Blob([JSON.stringify(obj, undefined, 2)], { - type: 'application/json' - }); - const link = document.createElement('a'); - link.download = fileName; - link.href = URL.createObjectURL(file); - link.click(); - link.remove(); - } + const ColorExportAsArrJS = () => { + let out: string = ''; + Object.keys(visibleColorScale()).forEach((key, i) => { + out += `const ${key.toLowerCase()} = [${visibleColorScaleArr()[i]}];\r\n`; + }); + return out; + }; - const handleJSExport = (mode: 'arrjs' | 'objjs') => { - const darkText = darkMode() ? 'dark' : 'light'; - const fileName = `${currScaleText()}-${darkText}.js`; - const str = mode == 'arrjs' ? ColorExportAsArrJS() : ColorExportAsObjJS(); - const file = new Blob([str], { - type: 'application/javascript' - }); - const link = document.createElement('a'); - link.download = fileName; - link.href = URL.createObjectURL(file); - link.click(); - link.remove(); - } + const ColorExportAsObjJS = () => { + let out: string = ''; + const type: string = 'ColorScale<HexColor>'; + Object.keys(visibleColorScale()).forEach((key, i) => { + let newobj: string = `export const ${key.toLowerCase()}: ${type} = {\r\n`; + Object.keys(visibleColorScale()[key]).forEach((_, k) => { + newobj += ` ${k}: '${visibleColorScaleArr()[i][k]}',\r\n`; + }); + newobj += '}'; + out += `${newobj};\r\n\r\n`; + }); + return out; + }; - const ColorExportAsArr = () => { - const out: Record<string, Array<string>> = {} - Object.keys(visibleColorScale()).forEach((key, i) => { - out[key.toLowerCase()] = visibleColorScaleArr()[i] - }) - return out; - } + const ColorExportAsObj = () => { + const out: Record<string, Record<string, string>> = {}; + Object.keys(visibleColorScale()).forEach((key, i) => { + const colorOut: Record<string, string> = {}; + Object.keys(visibleColorScale()[key]).forEach((key, k) => { + colorOut[k] = visibleColorScaleArr()[i][k]; + }); + out[key.toLowerCase()] = colorOut; + }); + return out; + }; - const ColorExportAsArrJS = () => { - let out: string = '' - Object.keys(visibleColorScale()).forEach((key, i) => { - out += `const ${key.toLowerCase()} = [${visibleColorScaleArr()[i]}];\r\n` - }) - return out; - } + const handleColorExport = (mode: 'obj' | 'arr') => { + const darkText = darkMode() ? 'dark' : 'light'; + const fileName = `${currScaleText()}-${darkText}.json`; + const obj = mode === 'obj' ? ColorExportAsObj() : ColorExportAsArr(); + const file = new Blob([JSON.stringify(obj, undefined, 2)], { + type: 'application/json', + }); + const link = document.createElement('a'); + link.download = fileName; + link.href = URL.createObjectURL(file); + link.click(); + link.remove(); + }; - const ColorExportAsObjJS = () => { - let out: string = '' - const type: string = 'ColorScale<HexColor>' - Object.keys(visibleColorScale()).forEach((key, i) => { - let newobj: string = `export const ${key.toLowerCase()}: ${type} = {\r\n` - Object.keys(visibleColorScale()[key]).forEach((_, k) => { - newobj += ` ${k}: '${visibleColorScaleArr()[i][k]}',\r\n` - }) - newobj += '}' - out += `${newobj};\r\n\r\n` - }) - return out; - } + const handleJSExport = (mode: 'arrjs' | 'objjs') => { + const darkText = darkMode() ? 'dark' : 'light'; + const fileName = `${currScaleText()}-${darkText}.js`; + const str = mode === 'arrjs' ? ColorExportAsArrJS() : ColorExportAsObjJS(); + const file = new Blob([str], { + type: 'application/javascript', + }); + const link = document.createElement('a'); + link.download = fileName; + link.href = URL.createObjectURL(file); + link.click(); + link.remove(); + }; - const ColorExportAsObj = () => { - const out: Record<string, Record<string, string>> = {} - Object.keys(visibleColorScale()).forEach((key, i) => { - const colorOut: Record<string, string> = {} - Object.keys(visibleColorScale()[key]).forEach((key, k) => { - colorOut[k] = visibleColorScaleArr()[i][k] - }) - out[key.toLowerCase()] = colorOut - }) - return out; - } + return ( + <> + <div class="flex justify-center w-full px-4 sm:px-6 pt-6 md:pt-8"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6"> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> + Ambient Color Generation Tool + </h1> + <p class="text-slate-600 dark:text-neutral-400 pb-6"> + This tool is designed to generate contrast ready color pallets built specifically for UIUX design. Unlike other palette generation tools, Ambient generates the colors based on the primary color. Hues, saturation, and relative lightness adjustments are made automatically using our algorithm. These values can be adjusted by adjusting the base functions.styled.tsx file located inside the styles folder. As ambient relies on the primary color for alternative color generation, primary colors must be contrast compliant. Ambient displays both WACG and APCA definitions of text contrast, a 4.5:1(WACG) or 60Lc(APCA) is recommended for text contrast. Please remember that for the best results, contrast in colors or differences in color should not represent meaningful information in UIUX design to prevent accessability issues. + </p> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200 pb-4"> + Color Table + </h1> + <h1 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> + Color Swatch + </h1> + <p class="text-slate-600 dark:text-neutral-400 pb-2"> + This tool was designed with the Flex Design Colors in mind. This color set can be modified and also exported. + </p> + <div class="flex gap-2 flex-wrap"> + <a href="/gen"> + <Button aria="Configure Colors"> + Configure Colors + </Button> + </a> + <a href="/#"> + <Button aria="Import Color Set"> + Import Colorset + </Button> + </a> + <a onClick={() => handleColorExport('obj')}> + <Button aria="Export Current Colors as Object"> + Export Colorset + </Button> + </a> + <a onClick={() => handleColorExport('arr')}> + <Button aria="Export Current Colors as Array"> + Export Colorset as Array + </Button> + </a> + <a onClick={() => handleJSExport('arrjs')}> + <Button aria="Export Current Colors as Array"> + Export Colorset as Array (JS) + </Button> + </a> + <a onClick={() => handleJSExport('objjs')}> + <Button aria="Export Current Colors as Array"> + Export Colorset as Object (JS) + </Button> + </a> + <ToggleColorScale /> + </div> + </div> + </div> + <div class="flex justify-center w-full px-4 sm:px-6"> + <div class="flex flex-row gap-x-8 flex-wrap 2xl:flex-nowrap w-full max-w-screen-2xl"> + <div class="flex flex-col basis-full 2xl:basis-1/2 pb-10"> + <h2 class="text-slate-600 dark:text-neutral-400"> + Active Color Swatch + </h2> + <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> + {currScaleText()} + </h3> + <ColorSwatch swatch={visibleColorScale()} /> + </div> + <div class="grow w-full basis-full 2xl:basis-1/2"> + <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={visibleColorScaleArr()} trackIndex="color" /> + <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> + <div class="grow basis-ful md:basis-0"> + <DataPlot swatchArr={visibleColorScaleArr()} plotArea={1} plotType="l" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={visibleColorScaleArr()} plotArea={1} plotType="c" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={visibleColorScaleArr()} plotArea={1} plotType="h" /> + </div> + </div> + <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={visibleColorScaleArr()}trackIndex="id" /> + <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> + <div class="grow basis-ful md:basis-0"> + <DataPlot swatchArr={visibleColorScaleArr()} plotArea={0} plotType="l" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={visibleColorScaleArr()} plotArea={0} plotType="c" /> + </div> + <div class="grow basis-full md:basis-0"> + <DataPlot swatchArr={visibleColorScaleArr()} plotArea={0} plotType="h" /> + </div> + </div> + </div> + </div> + </div> + </> + ); +}; - return ( - <> - <div class='flex justify-center w-full px-4 sm:px-6 pt-6 md:pt-8'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1 pb-6'> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200"> - Ambient Color Generation Tool - </h1> - <p class='text-slate-600 dark:text-neutral-400 pb-6'> - This tool is designed to generate contrast ready color pallets built specifically for UIUX design. Unlike other palette generation tools, Ambient generates the colors based on the primary color. Hues, saturation, and relative lightness adjustments are made automatically using our algorithm. These values can be adjusted by adjusting the base functions.styled.tsx file located inside the styles folder. As ambient relies on the primary color for alternative color generation, primary colors must be contrast compliant. Ambient displays both WACG and APCA definitions of text contrast, a 4.5:1(WACG) or 60Lc(APCA) is recommended for text contrast. Please remember that for the best results, contrast in colors or differences in color should not represent meaningful information in UIUX design to prevent accessability issues. - </p> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200 pb-4"> - Color Table - </h1> - <h1 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200"> - Color Swatch - </h1> - <p class='text-slate-600 dark:text-neutral-400 pb-2'> - This tool was designed with the Flex Design Colors in mind. This color set can be modified and also exported. - </p> - <div class="flex gap-2 flex-wrap"> - <a href="/gen"> - <Button aria={"Configure Colors"}> - Configure Colors - </Button> - </a> - <a href="/#"> - <Button aria={"Import Color Set"}> - Import Colorset - </Button> - </a> - <a onClick={() => handleColorExport('obj')}> - <Button aria={"Export Current Colors as Object"}> - Export Colorset - </Button> - </a> - <a onClick={() => handleColorExport('arr')}> - <Button aria={"Export Current Colors as Array"}> - Export Colorset as Array - </Button> - </a> - <a onClick={() => handleJSExport('arrjs')}> - <Button aria={"Export Current Colors as Array"}> - Export Colorset as Array (JS) - </Button> - </a> - <a onClick={() => handleJSExport('objjs')}> - <Button aria={"Export Current Colors as Array"}> - Export Colorset as Object (JS) - </Button> - </a> - <ToggleColorScale/> - </div> - </div> - </div> - <div class='flex justify-center w-full px-4 sm:px-6'> - <div class='flex flex-row gap-x-8 flex-wrap 2xl:flex-nowrap w-full max-w-screen-2xl'> - <div class='flex flex-col basis-full 2xl:basis-1/2 pb-10'> - <h2 class="text-slate-600 dark:text-neutral-400"> - Active Color Swatch - </h2> - <h3 class="font-semibold font-display text-xl text-slate-800 dark:text-slate-200 pb-2"> - {currScaleText()} - </h3> - <ColorSwatch swatch={visibleColorScale()}/> - </div> - <div class='grow w-full basis-full 2xl:basis-1/2'> - <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={visibleColorScaleArr()} trackIndex='color'/> - <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> - <div class="grow basis-ful md:basis-0"> - <DataPlot swatchArr={visibleColorScaleArr()} plotArea={1} plotType={"l"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={visibleColorScaleArr()} plotArea={1} plotType={"c"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={visibleColorScaleArr()} plotArea={1} plotType={"h"}/> - </div> - </div> - <ColorSwatchLarge swatch={visibleColorScale()} swatchArr={visibleColorScaleArr()}trackIndex='id'/> - <div class="flex flex-row gap-x-4 pb-6 flex-wrap"> - <div class="grow basis-ful md:basis-0"> - <DataPlot swatchArr={visibleColorScaleArr()} plotArea={0} plotType={"l"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={visibleColorScaleArr()} plotArea={0} plotType={"c"}/> - </div> - <div class="grow basis-full md:basis-0"> - <DataPlot swatchArr={visibleColorScaleArr()} plotArea={0} plotType={"h"}/> - </div> - </div> - </div> - </div> - </div> - </> - ) -} - -export default ColorTablePage +export default ColorTablePage; diff --git a/src/pages/comingSoonPage.tsx b/src/pages/comingSoonPage.tsx index ccd5e5b..9f0db38 100644 --- a/src/pages/comingSoonPage.tsx +++ b/src/pages/comingSoonPage.tsx @@ -1,33 +1,34 @@ -import { Component } from "solid-js"; -import Button from "../assets/components/button.styled"; -import LinkUrl from "../assets/images/link.png" +import type { Component } from 'solid-js'; +import Button from '../assets/components/button.styled'; +import LinkUrl from '../assets/images/link.png'; const ComingSoonPage: Component = () => { - return ( - <> - <div class='flex justify-center px-4 sm:px-6'> - <div class='flex flex-col justify-center items-center text-center max-w-screen-md gap-y-1 pb-6 px-auto'> - <img aria-label={"Unlinked Image"} src={LinkUrl} class="w-20 pb-4"/> - <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200 pb-2"> - I haven't created this yet! - </h1> - <p class='text-slate-600 dark:text-neutral-400 pb-6'> - Ambient v0.0.0, which includes many of the features which were removed, is available on - <a class="font-semibold underline" href="https://github.com/kevintyj/ambient">Github</a>. - I am working to migrating as many features of the previous version to this live site as fast as possible. - If you have any questions, you can also send me a email! - </p> - <div> - <a onClick={() => history.back()}> - <Button aria={"Navigate to previous page"}> - Take me back! - </Button> - </a> - </div> - </div> - </div> - </> - ) -} + return ( + <> + <div class="flex justify-center px-4 sm:px-6"> + <div class="flex flex-col justify-center items-center text-center max-w-screen-md gap-y-1 pb-6 px-auto"> + <img aria-label="Unlinked Image" src={LinkUrl} class="w-20 pb-4" /> + <h1 class="font-semibold font-display text-3xl text-slate-800 dark:text-slate-200 pb-2"> + I haven't created this yet! + </h1> + <p class="text-slate-600 dark:text-neutral-400 pb-6"> + Ambient v0.0.0, which includes many of the features which were removed, is available on + <a class="font-semibold underline" href="https://github.com/kevintyj/ambient">Github</a> + . + I am working to migrating as many features of the previous version to this live site as fast as possible. + If you have any questions, you can also send me a email! + </p> + <div> + <a onClick={() => history.back()}> + <Button aria="Navigate to previous page"> + Take me back! + </Button> + </a> + </div> + </div> + </div> + </> + ); +}; -export default ComingSoonPage +export default ComingSoonPage; diff --git a/src/pages/playgroundPage.tsx b/src/pages/playgroundPage.tsx index 216e95f..5409f4a 100644 --- a/src/pages/playgroundPage.tsx +++ b/src/pages/playgroundPage.tsx @@ -1,73 +1,82 @@ -import { A, Outlet, useLocation } from "@solidjs/router"; -import { Component, createSignal, Show } from "solid-js"; -import { css } from "solid-styled"; -import Button from "../assets/components/button.styled"; -import DocumentationMenuList from "../assets/components/documentationMenu.styled"; -import Divider from "../components/playground/components/divider"; +import { A, Outlet, useLocation } from '@solidjs/router'; +import type { Component } from 'solid-js'; +import { Show, createSignal } from 'solid-js'; +import { css } from 'solid-styled'; +import Button from '../assets/components/button.styled'; +import DocumentationMenuList from '../assets/components/documentationMenu.styled'; +import Divider from '../components/playground/components/divider'; const PlaygroundPage: Component = () => { + const [mobileMenu, setMobileMenu] = createSignal(false); - const [mobileMenu, setMobileMenu] = createSignal(false) + const [menuList, _setMenuList] = createSignal({ + Components: '', + Introduction: '/playground/intro', + Buttons: '/playground/buttons', + Texts: '/playground/texts', + Pages: '', + Documentation: '/playground/documentation', + Landing: '/playground/landing', + }); - const [menuList, setMenuList] = createSignal({ - "Components" : "", - "Introduction" : "/playground/intro", - "Buttons" : "/playground/buttons", - "Texts" : "/playground/texts", - "Pages": "", - "Documentation": "/playground/documentation", - "Landing": "/playground/landing" - }) + const pathname = () => useLocation().pathname; + const currInd = () => Object.entries(menuList()).findIndex(val => val[1] === pathname()); + const prevPath = () => Object.values(menuList())[currInd() - 1] ? Object.values(menuList())[currInd() - 1] : ''; + const nextPath = () => Object.values(menuList())[currInd() + 1] ? Object.values(menuList())[currInd() + 1] : ''; - const pathname = () => useLocation().pathname; - const currInd = () => Object.entries(menuList()).findIndex(val => val[1] == pathname()); - const prevPath = () => Object.values(menuList())[currInd() - 1] ? Object.values(menuList())[currInd() - 1] : "" - const nextPath = () => Object.values(menuList())[currInd() + 1] ? Object.values(menuList())[currInd() + 1] : "" - - css` + css` .menuBG { display: flex; } .menuShown { transform: translateX(0) !important; } - ` + `; - return ( - <> - <div class="hidden h-screen w-screen fixed top-0 left-0 + return ( + <> + <div + class="hidden h-screen w-screen fixed top-0 left-0 backdrop-blur-sm z-[100] bg-neutral-50 dark:bg-[#181819] bg-opacity-60 dark:bg-opacity-70 cursor-pointer" - classList={{menuBG: mobileMenu()}} onClick={() => setMobileMenu(false)}> - <div class="left-0 h-screen border-r p-4 py-3 sm:px-6 flex flex-col + classList={{ menuBG: mobileMenu() }} + onClick={() => setMobileMenu(false)} + > + <div + class="left-0 h-screen border-r p-4 py-3 sm:px-6 flex flex-col backdrop-blur-md bg-neutral-50 dark:bg-[#181819] border-neutral-200 dark:border-neutral-800 w-64 shadow-xl" - classList={{menuShown: mobileMenu()}}> - <a onClick={() => setMobileMenu(false)} class="my-2 mb-6"> - <Button aria={"Open Mobile Menu"}> - <i class="bi bi-list"></i> - </Button> - </a> - <DocumentationMenuList list={menuList()}/> - </div> - </div> - <div class="flex justify-center lg:px-6"> - <div class="flex flex-row flex-auto overflow-x-hidden -mb-20 w-full max-w-screen-2xl"> - <div class="flex-none h-screen w-0 sm:w-4 md:w-8 lg:w-64 transition-all"> - <div class="border-b h-12 px-0 lg:px-10 flex fixed backdrop-blur-md backdrop-brightness-125 + classList={{ menuShown: mobileMenu() }} + > + <a onClick={() => setMobileMenu(false)} class="my-2 mb-6"> + <Button aria="Open Mobile Menu"> + <i class="bi bi-list"></i> + </Button> + </a> + <DocumentationMenuList list={menuList()} /> + </div> + </div> + <div class="flex justify-center lg:px-6"> + <div class="flex flex-row flex-auto overflow-x-hidden -mb-20 w-full max-w-screen-2xl"> + <div class="flex-none h-screen w-0 sm:w-4 md:w-8 lg:w-64 transition-all"> + <div class="border-b h-12 px-0 lg:px-10 flex fixed backdrop-blur-md backdrop-brightness-125 bg-neutral-50 dark:bg-[#181819] border-b-neutral-200 dark:border-b-neutral-800 - bg-opacity-80 dark:bg-opacity-90 w-full z-50 md:hidden justify-start items-center"> - <a onClick={() => setMobileMenu(true)} class=" + bg-opacity-80 dark:bg-opacity-90 w-full z-50 md:hidden justify-start items-center" + > + <a + onClick={() => setMobileMenu(true)} + class=" block pl-4 sm:pl-10 z-50 md:z-[60] rounded-md - drop-shadow-[0_0_4px_rgba(0,0,0,0.08)]"> - <Button aria={"Open Mobile Menu"} square> - <i class="bi bi-list -ml-1"></i> - </Button> - </a> - </div> - <div class="hidden sm:flex flex-col fixed w-64 overflow-x-visible lg:-mx-4 + drop-shadow-[0_0_4px_rgba(0,0,0,0.08)]" + > + <Button aria="Open Mobile Menu" square> + <i class="bi bi-list -ml-1"></i> + </Button> + </a> + </div> + <div class="hidden sm:flex flex-col fixed w-64 overflow-x-visible lg:-mx-4 backdrop-blur-md backdrop-brightness-125 lg:backdrop-blur-0 lg:backdrop-brightness-100 bg-opacity-80 bg-neutral-50 dark:bg-[#181819] lg:bg-transparent dark:lg:bg-transparent border-r border-neutral-200 dark:border-neutral-800 @@ -75,53 +84,57 @@ const PlaygroundPage: Component = () => { -translate-x-60 md:-translate-x-56 lg:translate-x-0 ease-in-out hover:translate-x-0 dark:hover:shadow-[0_35px_35px_rgba(0,0,0,0.4)] hover:shadow-[0_35px_35px_#00000032] - h-[calc(100vh-56px)] hover:lg:shadow-none hover:lg:dark:shadow-none"> - <a onClick={() => setMobileMenu(true)} class=" + h-[calc(100vh-56px)] hover:lg:shadow-none hover:lg:dark:shadow-none" + > + <a + onClick={() => setMobileMenu(true)} + class=" hidden md:block lg:hidden absolute left-60 top-8 bg-white dark:bg-neutral-900 z-50 md:z-[60] rounded-md - drop-shadow-[0_0_8px_rgba(0,0,0,0.14)]"> - <Button aria={"Toggle Mobile Navigation List"} square> - <i class="bi bi-chevron-bar-right -ml-1"></i> - </Button> - </a> - <div class="p-6 pl-4 sm:pl-6 lg:pl-4 pt-2"> - <DocumentationMenuList list={menuList()}/> - </div> - <div class="h-28"/> - </div> - </div> - <div class="flex flex-col overflow-x-hidden pt-16 md:pt-8 lg:-mr-4 pb-12"> - <Outlet/> - <div class='flex flex-col justify-center px-4 sm:px-6 pt-12'> - <div class='flex flex-col w-full max-w-screen-2xl gap-y-1'> - <Divider/> - <div class="flex justify-between w-full text-slate-600 dark:text-neutral-400"> - <div> - <Show when={prevPath() != ""}> - <A href={prevPath() ? prevPath() : "#"}> - <i class="bi bi-arrow-left pr-2"/> - <a class="font-semibold font-display text-slate-700 dark:text-neutral-300"> - {Object.keys(menuList())[currInd() - 1]} - </a> - </A> - </Show> - </div> - <Show when={nextPath() != ""}> - <A href={nextPath() ? nextPath() : "#"}> - <a class="font-semibold font-display text-slate-700 dark:text-neutral-300"> - {Object.keys(menuList())[currInd() + 1]} - </a> - <i class="bi bi-arrow-right pl-2"/> - </A> - </Show> - </div> - </div> - </div> - </div> - </div> - </div> - </> - ) -} + drop-shadow-[0_0_8px_rgba(0,0,0,0.14)]" + > + <Button aria="Toggle Mobile Navigation List" square> + <i class="bi bi-chevron-bar-right -ml-1"></i> + </Button> + </a> + <div class="p-6 pl-4 sm:pl-6 lg:pl-4 pt-2"> + <DocumentationMenuList list={menuList()} /> + </div> + <div class="h-28" /> + </div> + </div> + <div class="flex flex-col overflow-x-hidden pt-16 md:pt-8 lg:-mr-4 pb-12"> + <Outlet /> + <div class="flex flex-col justify-center px-4 sm:px-6 pt-12"> + <div class="flex flex-col w-full max-w-screen-2xl gap-y-1"> + <Divider /> + <div class="flex justify-between w-full text-slate-600 dark:text-neutral-400"> + <div> + <Show when={prevPath() !== ''}> + <A href={prevPath() ? prevPath() : '#'}> + <i class="bi bi-arrow-left pr-2" /> + <a class="font-semibold font-display text-slate-700 dark:text-neutral-300"> + {Object.keys(menuList())[currInd() - 1]} + </a> + </A> + </Show> + </div> + <Show when={nextPath() !== ''}> + <A href={nextPath() ? nextPath() : '#'}> + <a class="font-semibold font-display text-slate-700 dark:text-neutral-300"> + {Object.keys(menuList())[currInd() + 1]} + </a> + <i class="bi bi-arrow-right pl-2" /> + </A> + </Show> + </div> + </div> + </div> + </div> + </div> + </div> + </> + ); +}; -export default PlaygroundPage +export default PlaygroundPage; diff --git a/tailwind.config.js b/tailwind.config.js index d666cab..9bf6a26 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,47 +1,43 @@ /** @type {import('tailwindcss').Config} */ -const defaultTheme = require('tailwindcss/defaultTheme') +import defaultTheme from 'tailwindcss/defaultTheme'; -module.exports = { - darkMode: 'class', - content: [ - "./src/**/*.{js,jsx,ts,tsx}", - ], - theme: { - extend: { - colors: { - 'am-pink':'#de273c', - 'am-pink-light': '#ff4d62', - 'helper-primary': '#EA6042', - 'helper-secondary': '#FF9979', - 'helper-transparent': '#EA604229', - 'helper-dark': '#511C10' - }, - fontFamily: { - 'display': ['Hubot Sans', ...defaultTheme.fontFamily.sans], - }, - typography: ( theme ) => ({ - DEFAULT: { - css: { - color: theme('colors.gray.600'), - h: { - color: theme('colors.gray.800'), - }, - strong: { - color: theme('colors.gray.700'), - }, - a: { - color: theme('colors.green.500'), - '&:hover': { - color: theme('colors.green.600') - }, - }, - }, - } - }) - }, - }, - plugins: [ - require('@tailwindcss/typography'), - ], -} +export default { + darkMode: 'class', + content: ['./src/**/*.{js,jsx,ts,tsx}'], + theme: { + extend: { + colors: { + 'am-pink': '#de273c', + 'am-pink-light': '#ff4d62', + 'helper-primary': '#EA6042', + 'helper-secondary': '#FF9979', + 'helper-transparent': '#EA604229', + 'helper-dark': '#511C10', + }, + fontFamily: { + display: ['Hubot Sans', ...defaultTheme.fontFamily.sans], + }, + typography: theme => ({ + DEFAULT: { + css: { + color: theme('colors.gray.600'), + h: { + color: theme('colors.gray.800'), + }, + strong: { + color: theme('colors.gray.700'), + }, + a: { + 'color': theme('colors.green.500'), + '&:hover': { + color: theme('colors.green.600'), + }, + }, + }, + }, + }), + }, + }, + plugins: [require('@tailwindcss/typography')], +}; diff --git a/tsconfig.json b/tsconfig.json index 249b273..6197ad0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,15 @@ { - "compilerOptions": { - "strict": true, - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "preserve", - "jsxImportSource": "solid-js", - "types": ["vite/client"], - "noEmit": true, - "isolatedModules": true - } + "compilerOptions": { + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "types": ["vite/client"], + "noEmit": true, + "isolatedModules": true + } } diff --git a/vite.config.ts b/vite.config.ts index 272495f..53ce302 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,20 +3,20 @@ import solidPlugin from 'vite-plugin-solid'; import solidStyled from 'vite-plugin-solid-styled'; export default defineConfig({ - plugins: [ - solidPlugin(), - solidStyled({ - prefix: 'amb-', - filter: { - include: 'src/**/*.tsx', - exclude: 'node_modules/**/*.{ts,js}', - }, - }), - ], - server: { - port: 3000, - }, - build: { - target: 'esnext', - }, + plugins: [ + solidPlugin(), + solidStyled({ + prefix: 'amb-', + filter: { + include: 'src/**/*.tsx', + exclude: 'node_modules/**/*.{ts,js}', + }, + }), + ], + server: { + port: 3000, + }, + build: { + target: 'esnext', + }, });