├── .npmrc ├── .husky └── pre-commit ├── .github ├── FUNDING.yml ├── renovate.json ├── workflows │ ├── validate.yaml │ ├── release.yaml │ └── ci.yaml └── ISSUE_TEMPLATE │ ├── feature_request.yml │ └── bug_report.yml ├── .prettierignore ├── hacs.json ├── src ├── vite-env.d.ts ├── styles.ts ├── const.ts ├── modules │ ├── warning.ts │ ├── glance-card.ts │ ├── generic-card.ts │ ├── vertical-stack.ts │ └── generic-entity-row.ts ├── module.ts ├── types.ts ├── utils.ts ├── main.ts ├── templates.ts ├── canary-card.ts └── secondary-info.ts ├── .gitattributes ├── examples ├── glances-align.png ├── secondary-info.png └── vertical-stack-in-card.png ├── .editorconfig ├── .vscode ├── extensions.json ├── tasks.json └── settings.json ├── .git-blame-ignore-revs ├── tsconfig.json ├── .eslintrc.yaml ├── LICENSE ├── vite.config.ts ├── package.json ├── info.md ├── .gitignore ├── README.md └── pnpm-lock.yaml /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | lint-staged 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: jcwillox 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | pnpm-lock.yaml 2 | dist/ 3 | -------------------------------------------------------------------------------- /hacs.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Canary" 3 | } 4 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # normalise line endings to lf on all platforms 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /examples/glances-align.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jcwillox/lovelace-canary/HEAD/examples/glances-align.png -------------------------------------------------------------------------------- /examples/secondary-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jcwillox/lovelace-canary/HEAD/examples/secondary-info.png -------------------------------------------------------------------------------- /examples/vertical-stack-in-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jcwillox/lovelace-canary/HEAD/examples/vertical-stack-in-card.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | trim_trailing_whitespace = true 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 2 9 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "formulahendry.auto-rename-tag", 4 | "editorconfig.editorconfig", 5 | "dbaeumer.vscode-eslint", 6 | "christian-kohler.path-intellisense", 7 | "esbenp.prettier-vscode", 8 | "redhat.vscode-yaml" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /src/styles.ts: -------------------------------------------------------------------------------- 1 | import { StyleInfo } from "lit/directives/style-map"; 2 | 3 | export function mapStyle(styleObject: StyleInfo, prefix = "") { 4 | return Object.keys(styleObject) 5 | .reduce((styles: string[], rule) => { 6 | return [...styles, `${prefix}${rule}: ${styleObject[rule]};`]; 7 | }, []) 8 | .join(" "); 9 | } 10 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["github>jcwillox/renovate-config", ":automergeMinor"], 4 | "packageRules": [ 5 | { 6 | "matchPackageNames": ["lit"], 7 | "allowedVersions": "<3.0.0" 8 | }, 9 | { 10 | "matchPackageNames": ["eslint"], 11 | "allowedVersions": "<9.0.0" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "npm", 6 | "script": "install", 7 | "label": "npm: install" 8 | }, 9 | { 10 | "type": "npm", 11 | "script": "lint", 12 | "problemMatcher": ["$eslint-stylish"], 13 | "label": "npm: lint" 14 | }, 15 | { 16 | "type": "npm", 17 | "script": "build", 18 | "group": "build", 19 | "label": "npm: build" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/const.ts: -------------------------------------------------------------------------------- 1 | export const DEFAULT_SECONDARY_INFO = [ 2 | "entity-id", 3 | "last-changed", 4 | "last-updated", 5 | "last-triggered", 6 | "position", 7 | "tilt-position", 8 | "brightness", 9 | ]; 10 | 11 | // language=CSS 12 | export const VERTICAL_STACK_IN_CARD_STYLE = ` 13 | #root > *:not(:first-child) { 14 | margin-top: -24px; 15 | } 16 | `; 17 | 18 | export const NO_CARD_STYLE = { 19 | boxShadow: "none", 20 | background: "none", 21 | border: "none", 22 | }; 23 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # git-blame supports ignoring specific commits, this allows us to hide formatting 2 | # commits from git-blame. 3 | # 4 | # You can use the ignore list file by running: 5 | # 6 | # $ git config blame.ignoreRevsFile .git-blame-ignore-revs 7 | 8 | # refactor: reformat and sort imports 9 | af2de2cc10091134fd68866eff97e70b387db4f6 10 | 11 | # refactor: reformat with prettier v3 12 | 782d95e4ddf38fa577f0726b965b47567a94f922 13 | 14 | # refactor: use default prettier config 15 | 336fee4c94f4c637842f54a55d772c7f9b62e524 16 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.linkedEditing": true, 4 | "editor.renderWhitespace": "trailing", 5 | "html.autoClosingTags": true, 6 | "editor.quickSuggestions": { 7 | "strings": true 8 | }, 9 | "editor.codeActionsOnSave": { 10 | "source.fixAll": "explicit" 11 | }, 12 | "[javascript][javascriptreact][typescript][typescriptreact][json][jsonc][yaml][html][markdown][postcss][css]": { 13 | "editor.defaultFormatter": "esbenp.prettier-vscode" 14 | }, 15 | "vite.autoStart": false 16 | } 17 | -------------------------------------------------------------------------------- /.github/workflows/validate.yaml: -------------------------------------------------------------------------------- 1 | name: "Validate" 2 | 3 | on: 4 | push: 5 | branches: 6 | - "main" 7 | - "feat**" 8 | - "fix**" 9 | tags-ignore: 10 | - "**" 11 | pull_request: 12 | schedule: 13 | - cron: "0 0 * * *" 14 | 15 | jobs: 16 | validate-hacs: 17 | runs-on: ubuntu-latest 18 | name: "HACS" 19 | steps: 20 | - name: "Checkout the repository" 21 | uses: actions/checkout@v4.1.7 22 | 23 | - name: "Validate HACS" 24 | uses: hacs/action@main 25 | with: 26 | category: plugin 27 | -------------------------------------------------------------------------------- /src/modules/warning.ts: -------------------------------------------------------------------------------- 1 | import { createModule } from "../module"; 2 | import { extensionEnabled, findConfig, moduleEnabled } from "../utils"; 3 | 4 | const MODULE = "warning"; 5 | const ELEMENT = "hui-warning"; 6 | 7 | interface Config { 8 | hide_warning?: boolean; 9 | } 10 | 11 | if (moduleEnabled(MODULE)) { 12 | createModule(ELEMENT, function () { 13 | const config: Config = findConfig(this); 14 | if ( 15 | config.hide_warning === true && 16 | extensionEnabled(config, "hide_warning") 17 | ) { 18 | this.style.display = "none"; 19 | } 20 | }); 21 | } 22 | -------------------------------------------------------------------------------- /src/module.ts: -------------------------------------------------------------------------------- 1 | import { FirstUpdatedFn } from "./types"; 2 | 3 | export function createModule>( 4 | element: string, 5 | firstUpdated: FirstUpdatedFn, 6 | ) { 7 | customElements.whenDefined(element).then(() => { 8 | const el = customElements.get(element) as CustomElementConstructor; 9 | const oFirstUpdated = el.prototype.firstUpdated; 10 | 11 | el.prototype.firstUpdated = function (changedProperties) { 12 | oFirstUpdated.call(this, changedProperties); 13 | firstUpdated.call(this, changedProperties); 14 | }; 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "ES2020", 5 | "moduleResolution": "Node", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "strict": true, 8 | "noEmit": true, 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "noFallthroughCasesInSwitch": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "experimentalDecorators": true, 16 | "emitDecoratorMetadata": true, 17 | "noImplicitAny": false, 18 | "resolveJsonModule": true 19 | }, 20 | "include": ["src", "vite.config.ts"] 21 | } 22 | -------------------------------------------------------------------------------- /.eslintrc.yaml: -------------------------------------------------------------------------------- 1 | root: true 2 | extends: 3 | - "eslint:recommended" 4 | - "plugin:import/recommended" 5 | - "plugin:import/typescript" 6 | - "plugin:@typescript-eslint/recommended" 7 | - "plugin:prettier/recommended" 8 | plugins: 9 | - "only-warn" 10 | ignorePatterns: 11 | - "dist/" 12 | env: 13 | browser: true 14 | settings: 15 | import/resolver: 16 | typescript: {} 17 | rules: 18 | no-var: "warn" 19 | prefer-const: "warn" 20 | prettier/prettier: "warn" 21 | import/newline-after-import: "warn" 22 | quotes: 23 | - "warn" 24 | - "double" 25 | - avoidEscape: true 26 | allowTemplateLiterals: false 27 | sort-imports: 28 | - "warn" 29 | - ignoreDeclarationSort: true 30 | import/order: 31 | - "warn" 32 | - groups: [builtin, external, internal, parent, sibling, index] 33 | pathGroups: 34 | - pattern: "@/**" 35 | group: "internal" 36 | alphabetize: 37 | order: "asc" 38 | -------------------------------------------------------------------------------- /src/modules/glance-card.ts: -------------------------------------------------------------------------------- 1 | import { createModule } from "../module"; 2 | import { extensionEnabled, moduleEnabled } from "../utils"; 3 | 4 | const MODULE = "glance-card"; 5 | const ELEMENT = "hui-glance-card"; 6 | 7 | type AlignmentOption = "left" | "center" | "right"; 8 | interface Config { 9 | align?: AlignmentOption; 10 | } 11 | 12 | if (moduleEnabled(MODULE)) { 13 | const getAlignment = function (alignment: AlignmentOption) { 14 | switch (alignment) { 15 | case "center": 16 | return "space-evenly"; 17 | case "right": 18 | return "flex-end"; 19 | default: 20 | return "flex-start"; 21 | } 22 | }; 23 | 24 | createModule(ELEMENT, function () { 25 | if (this._config?.align && extensionEnabled(this._config, "align")) { 26 | const el = this.shadowRoot?.querySelector(".entities"); 27 | if (el) { 28 | el.style.justifyContent = getAlignment(this._config.align); 29 | } 30 | } 31 | }); 32 | } 33 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { HomeAssistant, LovelaceCard } from "custom-card-helpers"; 2 | import { LovelaceCardConfig } from "custom-card-helpers/src/types"; 3 | import { LitElement, PropertyValues } from "lit"; 4 | import { StyleInfo } from "lit/directives/style-map.js"; 5 | 6 | declare global { 7 | interface HTMLElementTagNameMap { 8 | "hui-error-card": LovelaceCard; 9 | } 10 | 11 | const __NAME__: string; 12 | const __BRANCH__: string; 13 | const __COMMIT__: string; 14 | const __VERSION__: string; 15 | const __BUILD_TIME__: string; 16 | } 17 | 18 | export interface CanaryCardConfig extends LovelaceCardConfig { 19 | theme?: string; 20 | style?: string | StyleInfo; 21 | card: LovelaceCardConfig; 22 | } 23 | 24 | export interface LovelaceElement> 25 | extends LitElement { 26 | hass?: HomeAssistant; 27 | config?: Config; 28 | _config?: Config; 29 | } 30 | 31 | export type FirstUpdatedFn = ( 32 | this: LovelaceElement, 33 | changedProperties: PropertyValues, 34 | ) => void; 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Joshua Cowie-Willox 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { getLovelace } from "custom-card-helpers"; 2 | 3 | interface NodeWithConfig extends Node { 4 | host?: Node; 5 | config?: object; 6 | _config?: object; 7 | } 8 | 9 | export const findConfig = function (node: NodeWithConfig) { 10 | if (node.config) return node.config; 11 | if (node._config) return node._config; 12 | if (node.host) return findConfig(node.host); 13 | if (node.parentElement) return findConfig(node.parentElement); 14 | if (node.parentNode) return findConfig(node.parentNode); 15 | return null; 16 | }; 17 | 18 | const lovelaceConfig = getLovelace(); 19 | const canaryConfig = lovelaceConfig && lovelaceConfig.config.canary; 20 | 21 | export function moduleEnabled(module) { 22 | if (canaryConfig && canaryConfig.disable) { 23 | return !canaryConfig.disable.includes(module); 24 | } 25 | return true; 26 | } 27 | 28 | export function extensionEnabled(config, extension) { 29 | const disableConfig = config.disable_canary; 30 | // check: all extensions are enabled. 31 | if (!disableConfig) return true; 32 | // check: all extensions are disabled. 33 | if (disableConfig === true) return false; 34 | // check: specific extensions are disabled. 35 | return !disableConfig.includes(extension); 36 | } 37 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { exec } from "node:child_process"; 2 | import { promisify } from "node:util"; 3 | import { UserConfig, defineConfig } from "vite"; 4 | import viteCompression from "vite-plugin-compression"; 5 | import pkg from "./package.json"; 6 | 7 | const $ = async (command: string, env = "") => 8 | process.env[env] ?? (await promisify(exec)(command)).stdout.trim(); 9 | 10 | const all = async (obj: Record>) => 11 | Object.fromEntries( 12 | await Promise.all( 13 | Object.entries(obj).map(async ([k, v]) => [k, JSON.stringify(await v)]), 14 | ), 15 | ); 16 | 17 | export default defineConfig( 18 | async (): Promise => ({ 19 | build: { 20 | target: "es6", 21 | lib: { 22 | entry: "src/main.ts", 23 | formats: ["es"], 24 | }, 25 | }, 26 | esbuild: { 27 | legalComments: "none", 28 | }, 29 | plugins: [viteCompression({ verbose: false })], 30 | define: await all({ 31 | __NAME__: pkg.name.toUpperCase(), 32 | __BRANCH__: $("git rev-parse --abbrev-ref HEAD", "GITHUB_REF_NAME"), 33 | __VERSION__: $("git describe --tags --dirty --always", "VERSION"), 34 | __COMMIT__: $("git rev-parse HEAD", "GITHUB_SHA"), 35 | __BUILD_TIME__: new Date().toISOString(), 36 | }), 37 | }), 38 | ); 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for this project. 3 | title: "[FR]: " 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | This form is for submitting feature requests. 9 | 10 | You may want to open a [discussion](https://github.com/jcwillox/lovelace-paper-buttons-row/discussions) instead for less concrete ideas that need to be discussed further. 11 | 12 | Please fill out all the fields that are relevant to your feature request. 13 | - type: textarea 14 | attributes: 15 | label: Is your feature request related to a problem? Please describe. 16 | description: >- 17 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 18 | - type: textarea 19 | attributes: 20 | label: Describe the solution you'd like 21 | description: >- 22 | A clear and concise description of what you want to happen. 23 | - type: textarea 24 | attributes: 25 | label: Describe alternatives you've considered 26 | description: >- 27 | A clear and concise description of any alternative solutions or features you've considered. 28 | - type: textarea 29 | attributes: 30 | label: Additional context 31 | description: >- 32 | Add any other context or screenshots about the feature request here. 33 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: "Release" 2 | 3 | on: 4 | push: 5 | branches: 6 | - "beta" 7 | - "alpha" 8 | workflow_dispatch: 9 | inputs: 10 | draft: 11 | type: boolean 12 | description: "Draft release" 13 | default: false 14 | release_type: 15 | type: choice 16 | description: "Release type" 17 | default: "auto" 18 | options: 19 | - "auto" 20 | - "patch" 21 | - "minor" 22 | - "major" 23 | 24 | jobs: 25 | publish: 26 | name: "Publish" 27 | runs-on: ubuntu-latest 28 | steps: 29 | - name: "Checkout the repository" 30 | uses: actions/checkout@v4.1.7 31 | 32 | - name: "Setup pnpm" 33 | uses: pnpm/action-setup@v4.0.0 34 | 35 | - name: "Setup node" 36 | uses: actions/setup-node@v4.0.3 37 | with: 38 | node-version-file: package.json 39 | cache: "pnpm" 40 | 41 | - name: "Install dependencies" 42 | run: pnpm install 43 | 44 | - name: "Release Package 📦" 45 | run: pnpm dlx @jcwillox/semantic-release-config 46 | env: 47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 48 | SEMANTIC_RELEASE_GITHUB_DRAFT: ${{ inputs.draft }} 49 | SEMANTIC_RELEASE_FORCE_RELEASE: ${{ inputs.release_type }} 50 | SEMANTIC_RELEASE_GITHUB_ASSETS: "dist/*" 51 | SEMANTIC_RELEASE_CMD_PREPARE: "VERSION=${nextRelease.version} pnpm build" 52 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: "CI" 2 | 3 | on: 4 | push: 5 | branches: 6 | - "main" 7 | - "feat**" 8 | - "fix**" 9 | tags-ignore: 10 | - "**" 11 | pull_request: 12 | 13 | jobs: 14 | lint: 15 | name: "Lint" 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: "Checkout the repository" 19 | uses: actions/checkout@v4.1.7 20 | 21 | - name: "Setup pnpm" 22 | uses: pnpm/action-setup@v4.0.0 23 | 24 | - name: "Setup node" 25 | uses: actions/setup-node@v4.0.3 26 | with: 27 | node-version-file: package.json 28 | cache: "pnpm" 29 | 30 | - name: "Install dependencies" 31 | run: pnpm install 32 | 33 | - name: "Run Lint" 34 | run: pnpm run lint 35 | 36 | - name: "Check format" 37 | run: pnpm run format:check 38 | 39 | build: 40 | name: "Build & Test" 41 | runs-on: ubuntu-latest 42 | steps: 43 | - name: "Checkout the repository" 44 | uses: actions/checkout@v4.1.7 45 | 46 | - name: "Setup pnpm" 47 | uses: pnpm/action-setup@v4.0.0 48 | 49 | - name: "Setup node" 50 | uses: actions/setup-node@v4.0.3 51 | with: 52 | node-version-file: package.json 53 | cache: "pnpm" 54 | 55 | - name: "Install dependencies" 56 | run: pnpm install 57 | 58 | - name: "Typecheck" 59 | run: pnpm run typecheck 60 | 61 | - name: "Run Build" 62 | run: pnpm run build 63 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { fireEvent } from "custom-card-helpers"; 2 | import { name } from "../package.json"; 3 | 4 | // allow dynamic updating of secondary info. 5 | import "./secondary-info"; 6 | // adds three methods to add secondary info to entity rows. 7 | import "./modules/generic-entity-row"; 8 | // adds the no_card option. 9 | import "./modules/generic-card"; 10 | // adds the in_card option. 11 | import "./modules/vertical-stack"; 12 | // adds the align option. 13 | import "./modules/glance-card"; 14 | // adds hide warning option. 15 | import "./modules/warning"; 16 | // adds the canary-card card. 17 | import "./canary-card"; 18 | 19 | function getResources() { 20 | const scriptElements = document.querySelectorAll("script"); 21 | const retVal: string[] = []; 22 | for (const script of scriptElements) { 23 | if (script?.innerText?.trim()?.startsWith("import(")) { 24 | const imports = script.innerText.split("\n")?.map((e) => e.trim()); 25 | for (const imp of imports) { 26 | retVal.push(imp.replace(/^import\("/, "").replace(/"\);/, "")); 27 | } 28 | } 29 | } 30 | return retVal; 31 | } 32 | 33 | const resources = getResources(); 34 | if (resources.some((r) => r.endsWith(name + ".js"))) { 35 | console.info(`${name} is loaded as a module`); 36 | } else { 37 | fireEvent(window, "ll-rebuild", {}); 38 | console.info( 39 | `You may not be getting optimal performance out of ${name}.\nSee https://github.com/thomasloven/lovelace-card-mod#performance-improvements`, 40 | ); 41 | } 42 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "canary", 3 | "version": "0.0.0-dev", 4 | "type": "module", 5 | "private": true, 6 | "scripts": { 7 | "prepare": "husky", 8 | "dev": "vite build --watch", 9 | "build": "vite build", 10 | "build:tsc": "tsc && vite build", 11 | "typecheck": "tsc", 12 | "lint": "eslint . --cache --max-warnings=0 --ext js,cjs,mjs,jsx,ts,tsx", 13 | "lint:fix": "pnpm run lint --fix", 14 | "format": "prettier --cache --write .", 15 | "format:check": "prettier --cache --check ." 16 | }, 17 | "lint-staged": { 18 | "*.{js,cjs,mjs,jsx,ts,tsx}": "eslint --cache --max-warnings=0 --fix", 19 | "*.!(js|cjs|mjs|jsx|ts|tsx)": "prettier --ignore-unknown --cache --write" 20 | }, 21 | "dependencies": { 22 | "card-tools": "github:thomasloven/lovelace-card-tools#477f3d4", 23 | "custom-card-helpers": "1.9.0", 24 | "home-assistant-js-websocket": "9.4.0", 25 | "lit": "2.8.0" 26 | }, 27 | "devDependencies": { 28 | "@types/node": "20.14.12", 29 | "@typescript-eslint/eslint-plugin": "7.17.0", 30 | "@typescript-eslint/parser": "7.17.0", 31 | "eslint": "8.57.0", 32 | "eslint-config-prettier": "9.1.0", 33 | "eslint-import-resolver-typescript": "3.6.1", 34 | "eslint-plugin-import": "2.29.1", 35 | "eslint-plugin-only-warn": "1.1.0", 36 | "eslint-plugin-prettier": "5.2.1", 37 | "husky": "9.1.1", 38 | "lint-staged": "15.2.7", 39 | "prettier": "3.3.3", 40 | "typescript": "5.5.4", 41 | "vite": "5.3.4", 42 | "vite-plugin-compression": "0.5.1" 43 | }, 44 | "packageManager": "pnpm@9.6.0", 45 | "engines": { 46 | "node": ">=20.x" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/modules/generic-card.ts: -------------------------------------------------------------------------------- 1 | import { hass } from "card-tools/src/hass"; 2 | import { applyThemesOnElement } from "custom-card-helpers"; 3 | import { StyleInfo } from "lit/directives/style-map.js"; 4 | import { NO_CARD_STYLE } from "../const"; 5 | import { createModule } from "../module"; 6 | import { mapStyle } from "../styles"; 7 | import { extensionEnabled, findConfig, moduleEnabled } from "../utils"; 8 | 9 | const MODULE = "generic-card"; 10 | const ELEMENT = "ha-card"; 11 | 12 | interface Config { 13 | canary_theme?: string; 14 | canary_style?: StyleInfo; 15 | no_card?: boolean; 16 | } 17 | 18 | if (moduleEnabled(MODULE)) { 19 | createModule(ELEMENT, function () { 20 | const config: Config = findConfig(this); 21 | if (!config) return; 22 | 23 | // ha-card elements have default transition that we need to temporarily disable. 24 | this.style.transition = "none"; 25 | 26 | if (config.canary_theme && extensionEnabled(config, "canary_theme")) { 27 | applyThemesOnElement( 28 | this, 29 | this.hass ? this.hass.themes : hass().themes, 30 | config.canary_theme, 31 | ); 32 | } 33 | 34 | if (config.canary_style && extensionEnabled(config, "canary_style")) { 35 | this.style.cssText += mapStyle(config.canary_style); 36 | } 37 | 38 | if (config.no_card === true && extensionEnabled(config, "no_card")) { 39 | Object.assign(this.style, NO_CARD_STYLE); 40 | } 41 | 42 | // flush css. 43 | // eslint-disable-next-line @typescript-eslint/no-unused-expressions 44 | this.offsetHeight; 45 | 46 | // restore transition. 47 | this.style.transition = ""; 48 | }); 49 | } 50 | -------------------------------------------------------------------------------- /src/templates.ts: -------------------------------------------------------------------------------- 1 | export function oldExtractEntities( 2 | template: string, 3 | variables: Record = {}, 4 | ) { 5 | const RE_TEMPLATES = /\[\[\s(.*?)\s]]/g; 6 | 7 | const entity_ids: string[] = []; 8 | 9 | const matches = template.matchAll(RE_TEMPLATES); 10 | 11 | for (const match of matches) { 12 | const FUNCTION = /^\w+\(.*\)$/; 13 | const EXPR = /([^=<>!]+)\s*(?:==|!=|<|>|<=|>=)\s*([^=<>!]+)/; 14 | const SPECIAL = /^\{.+}$/; 15 | const CONDITION = /^\w+\((.*?),/; 16 | 17 | if (FUNCTION.test(match[1].trim())) { 18 | const conditionMatch = match[1].trim().match(CONDITION)?.[1]; 19 | const splitExpression = conditionMatch?.match(EXPR) || []; 20 | 21 | for (let i = 1; i < splitExpression.length; i++) { 22 | const parts = splitExpression[i].trim().split("."); 23 | if (parts.length > 1) { 24 | if (SPECIAL.test(parts[0])) { 25 | if (variables.entity && parts[0].includes("{entity}")) { 26 | entity_ids.push(variables.entity as string); 27 | } 28 | } else { 29 | entity_ids.push(`${parts[0]}.${parts[1]}`); 30 | } 31 | } 32 | } 33 | } else { 34 | const parts = match[1].trim().split("."); 35 | if (parts.length > 1) { 36 | if (SPECIAL.test(parts[0])) { 37 | if (variables.entity && parts[0] === "{entity}") { 38 | entity_ids.push(variables.entity as string); 39 | } 40 | } else { 41 | entity_ids.push(`${parts[0]}.${parts[1]}`); 42 | } 43 | } 44 | } 45 | } 46 | 47 | return Array.from(new Set(entity_ids)); 48 | } 49 | -------------------------------------------------------------------------------- /info.md: -------------------------------------------------------------------------------- 1 | ### Highlights 2 | 3 | #### Template Secondary Info 4 | 5 | 6 | 7 | #### Vertical Stack in Card 8 | 9 | 10 | 11 | #### Glance Card Entities Alignment 12 | 13 | 14 | 15 | ### Info 16 | 17 | Much like [card-mod] Canary extends the default lovelace cards, so you don't need to actually define a `canary-card` for these options to work. The options are added to their respective cards as 'extensions'. 18 | 19 | Check out the [documentation] for the configuration options and examples. 20 | 21 | Available Extensions: 22 | 23 | - [Generic Entity Row](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row) 24 | - [`secondary_info`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#secondary_info) 25 | - [`canary_style`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#canary_style) 26 | - [`canary_theme`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#canary_theme) 27 | - [`hide_warning`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#hide_warning) 28 | - [Generic Card](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card) 29 | - [`no_card`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card#no_card) 30 | - [`canary_style`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card#canary_style) 31 | - [`canary_theme`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card#canary_theme) 32 | - [Glance Card](https://github.com/jcwillox/lovelace-canary/wiki/Glance-Card) 33 | - [`align`](https://github.com/jcwillox/lovelace-canary/wiki/Glance-Card#align) 34 | - [Vertical Stack](https://github.com/jcwillox/lovelace-canary/wiki/Vertical-Stack) 35 | - [`in_card`](https://github.com/jcwillox/lovelace-canary/wiki/Vertical-Stack#in_card) 36 | - [Canary Card](https://github.com/jcwillox/lovelace-canary/wiki/Canary-Card) 37 | - `style` 38 | - `theme` 39 | 40 | [card-mod]: https://github.com/thomasloven/lovelace-card-mod 41 | [documentation]: https://github.com/jcwillox/lovelace-canary/wiki 42 | -------------------------------------------------------------------------------- /src/modules/vertical-stack.ts: -------------------------------------------------------------------------------- 1 | import { LovelaceCard } from "custom-card-helpers"; 2 | import { NO_CARD_STYLE, VERTICAL_STACK_IN_CARD_STYLE } from "../const"; 3 | import { createModule } from "../module"; 4 | import { extensionEnabled, moduleEnabled } from "../utils"; 5 | 6 | const MODULE = "vertical-stack"; 7 | const ELEMENT = "hui-vertical-stack-card"; 8 | 9 | interface CardWithStyles extends LovelaceCard, CustomElementConstructor { 10 | styles?: { 11 | cssText: string; 12 | }; 13 | } 14 | 15 | interface Config { 16 | in_card?: boolean; 17 | } 18 | 19 | if (moduleEnabled(MODULE)) { 20 | const applyStyles = async function (element) { 21 | // exit clause. 22 | if (!element) return; 23 | 24 | await element.updateComplete; 25 | 26 | if (element.tagName === "HA-CARD") { 27 | element.style.transition = "none"; 28 | Object.assign(element.style, NO_CARD_STYLE); 29 | // flush css 30 | // eslint-disable-next-line @typescript-eslint/no-unused-expressions 31 | element.offsetHeight; 32 | element.style.transition = ""; 33 | } 34 | 35 | // depth search. 36 | if (element.firstElementChild) { 37 | await applyStyles(element.firstElementChild); 38 | } 39 | if (element.shadowRoot) { 40 | await applyStyles(element.shadowRoot.firstElementChild); 41 | } 42 | // breadth search. 43 | if (element.nextElementSibling) { 44 | await applyStyles(element.nextElementSibling); 45 | } 46 | }; 47 | 48 | // require ha-card to be defined so that we can take its style 49 | customElements.whenDefined("ha-card").then(() => { 50 | const IN_CARD_STYLE = 51 | VERTICAL_STACK_IN_CARD_STYLE + 52 | (customElements.get("ha-card") as CardWithStyles).styles?.cssText; 53 | 54 | createModule(ELEMENT, function () { 55 | if ( 56 | this._config?.in_card === true && 57 | extensionEnabled(this._config, "in_card") 58 | ) { 59 | // remove space between cards in the stack add ha-card background. 60 | const styleElement = document.createElement("style"); 61 | styleElement.innerHTML = IN_CARD_STYLE; 62 | this.shadowRoot?.appendChild(styleElement); 63 | 64 | // remove style from all ha-card child elements. 65 | const divElement = this.shadowRoot?.querySelector("#root"); 66 | applyStyles(divElement); 67 | } 68 | }); 69 | }); 70 | } 71 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # Snowpack dependency directory (https://snowpack.dev/) 45 | web_modules/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | .parcel-cache 78 | 79 | # Next.js build output 80 | .next 81 | out 82 | 83 | # Nuxt.js build / generate output 84 | .nuxt 85 | dist 86 | 87 | # Gatsby files 88 | .cache/ 89 | # Comment in the public line in if your project uses Gatsby and not Next.js 90 | # https://nextjs.org/blog/next-9-1#public-directory-support 91 | # public 92 | 93 | # vuepress build output 94 | .vuepress/dist 95 | 96 | # Serverless directories 97 | .serverless/ 98 | 99 | # FuseBox cache 100 | .fusebox/ 101 | 102 | # DynamoDB Local files 103 | .dynamodb/ 104 | 105 | # TernJS port file 106 | .tern-port 107 | 108 | # Stores VSCode versions used for testing VSCode extensions 109 | .vscode-test 110 | 111 | # yarn v2 112 | .yarn/cache 113 | .yarn/unplugged 114 | .yarn/build-state.yml 115 | .yarn/install-state.gz 116 | .pnp.* 117 | 118 | # IDE files 119 | .idea/ 120 | -------------------------------------------------------------------------------- /src/canary-card.ts: -------------------------------------------------------------------------------- 1 | import { hass } from "card-tools/src/hass"; 2 | import { 3 | HomeAssistant, 4 | LovelaceCard, 5 | applyThemesOnElement, 6 | computeCardSize, 7 | createThing, 8 | } from "custom-card-helpers"; 9 | import { LitElement } from "lit"; 10 | import { property, state } from "lit/decorators.js"; 11 | import type { CanaryCardConfig } from "./types"; 12 | 13 | export class CanaryCard extends LitElement implements LovelaceCard { 14 | @property({ attribute: false }) public _hass!: HomeAssistant; 15 | @property() private card!: LitElement & LovelaceCard; 16 | @state() private config!: CanaryCardConfig; 17 | 18 | render() { 19 | return this.card; 20 | } 21 | 22 | setConfig(config) { 23 | this.config = JSON.parse(JSON.stringify(config)); 24 | this.card = createThing(this.config.card); 25 | if (!this._hass) { 26 | this._hass = hass() as HomeAssistant; 27 | } 28 | } 29 | 30 | firstUpdated() { 31 | if (typeof this.config.style === "object") { 32 | Object.assign(this.card.style, this.config.style); 33 | } else if (this.config.style) { 34 | const styleEl = document.createElement("style"); 35 | styleEl.innerHTML = this.config.style; 36 | 37 | this.card.updateComplete.then(() => { 38 | (this.card.shadowRoot || this.card).appendChild(styleEl); 39 | }); 40 | } 41 | } 42 | 43 | set hass(hass) { 44 | this._hass = hass; 45 | this.card.hass = hass; 46 | } 47 | 48 | shouldUpdate(changedProps) { 49 | if (changedProps.has("_config")) { 50 | return true; 51 | } 52 | 53 | const oldHass = changedProps.get("_hass"); 54 | 55 | return !oldHass || oldHass.themes !== this._hass.themes; 56 | } 57 | 58 | updated(changedProps) { 59 | super.updated(changedProps); 60 | 61 | if (!this.config || !this._hass) return; 62 | 63 | const oldHass = changedProps.get("_hass"); 64 | const oldConfig = changedProps.get("_config"); 65 | 66 | if ( 67 | !oldHass || 68 | !oldConfig || 69 | oldHass.themes !== this._hass.themes || 70 | oldConfig.theme !== this.config.theme 71 | ) { 72 | applyThemesOnElement(this, this._hass.themes, this.config.theme); 73 | } 74 | } 75 | 76 | getCardSize() { 77 | return computeCardSize(this.card); 78 | } 79 | } 80 | 81 | (async () => { 82 | while (customElements.get("home-assistant") === undefined) 83 | await new Promise((resolve) => window.setTimeout(resolve, 100)); 84 | 85 | if (!customElements.get("canary-card")) { 86 | customElements.define("canary-card", CanaryCard); 87 | console.groupCollapsed( 88 | `%c ${__NAME__} %c ${__VERSION__} `, 89 | "color: #212121; background: #fdd835; font-weight: 700;", 90 | "color: #fdd835; background: #212121; font-weight: 700;", 91 | ); 92 | console.info(`branch : ${__BRANCH__}`); 93 | console.info(`commit : ${__COMMIT__}`); 94 | console.info(`built at : ${__BUILD_TIME__}`); 95 | console.info("https://github.com/jcwillox/lovelace-canary"); 96 | console.groupEnd(); 97 | } 98 | })(); 99 | -------------------------------------------------------------------------------- /src/modules/generic-entity-row.ts: -------------------------------------------------------------------------------- 1 | import { hass, provideHass } from "card-tools/src/hass"; 2 | import { hasOldTemplate } from "card-tools/src/old-templates"; 3 | import { hasTemplate } from "card-tools/src/templates"; 4 | import { applyThemesOnElement } from "custom-card-helpers"; 5 | import { StyleInfo } from "lit/directives/style-map.js"; 6 | import { DEFAULT_SECONDARY_INFO } from "../const"; 7 | import { createModule } from "../module"; 8 | import { mapStyle } from "../styles"; 9 | import { extensionEnabled, moduleEnabled } from "../utils"; 10 | 11 | const MODULE = "generic-entity-row"; 12 | const ELEMENT = "hui-generic-entity-row"; 13 | 14 | interface Config { 15 | entity?: string; 16 | entity_ids?: string[]; 17 | secondary_info?: string; 18 | canary_theme?: string; 19 | canary_style?: string | StyleInfo; 20 | } 21 | 22 | interface SecondaryInfoElement extends HTMLElement { 23 | template?: Record; 24 | } 25 | 26 | declare global { 27 | interface HTMLElementTagNameMap { 28 | "secondary-info": SecondaryInfoElement; 29 | } 30 | } 31 | 32 | if (moduleEnabled(MODULE)) { 33 | createModule(ELEMENT, function () { 34 | if ( 35 | this.config?.secondary_info && 36 | extensionEnabled(this.config, "secondary_info") 37 | ) { 38 | // ensure we don't overwrite the default secondary info behaviour. 39 | if (!DEFAULT_SECONDARY_INFO.includes(this.config.secondary_info)) { 40 | if ( 41 | typeof this.config.secondary_info === "object" || 42 | hasOldTemplate(this.config.secondary_info) || 43 | hasTemplate(this.config.secondary_info) 44 | ) { 45 | // create secondary info element to track state changes. 46 | const secondaryInfoElement = document.createElement("secondary-info"); 47 | 48 | secondaryInfoElement.template = { 49 | template: this.config.secondary_info, 50 | variables: { config: this.config, entity: this.config.entity }, 51 | entity_ids: this.config.entity_ids, 52 | }; 53 | 54 | this.shadowRoot?.appendChild(secondaryInfoElement); 55 | 56 | provideHass(secondaryInfoElement); 57 | } else { 58 | // set the secondary info to plain text. 59 | const secondaryInfoDiv = this.shadowRoot?.querySelector(".secondary"); 60 | if (secondaryInfoDiv) { 61 | secondaryInfoDiv.innerHTML = this.config.secondary_info; 62 | } 63 | } 64 | } 65 | } 66 | 67 | if ( 68 | this.config?.canary_theme && 69 | extensionEnabled(this.config, "canary_theme") 70 | ) { 71 | applyThemesOnElement(this, hass().themes, this.config.canary_theme); 72 | } 73 | 74 | if ( 75 | this.config?.canary_style && 76 | extensionEnabled(this.config, "canary_style") 77 | ) { 78 | if (typeof this.config.canary_style === "string") { 79 | const styleEl = document.createElement("style"); 80 | styleEl.innerHTML = this.config.canary_style; 81 | this.appendChild(styleEl); 82 | } else { 83 | this.style.cssText += mapStyle(this.config.canary_style); 84 | } 85 | } 86 | }); 87 | } 88 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Report an issue 2 | description: Report an issue with the Canary plugin. 3 | body: 4 | - type: markdown 5 | attributes: 6 | value: | 7 | This issue form is for reporting bugs, you should search through 8 | the existing issues to see if others have had the same problem. 9 | 10 | Try fill as many fields as you can, to make it easier to address the issue. 11 | - type: textarea 12 | attributes: 13 | label: The problem 14 | description: >- 15 | Describe the issue you are experiencing here, to communicate to the 16 | maintainers. Tell us what you were trying to do and what happened. 17 | 18 | Provide a clear and concise description of what the problem is. 19 | - type: markdown 20 | attributes: 21 | value: | 22 | ## Environment 23 | - type: input 24 | id: version 25 | attributes: 26 | label: What version of Canary has the issue? 27 | description: > 28 | Can be found in: [HACS -> Frontend -> Canary](https://my.home-assistant.io/redirect/hacs_repository/?owner=jcwillox&repository=lovelace-canary&category=plugin). The version will be displayed in first chip at the top. 29 | 30 | [![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=jcwillox&repository=lovelace-canary&category=plugin) 31 | - type: input 32 | id: ha_version 33 | attributes: 34 | label: What version of Home Assistant are you running? 35 | placeholder: Home Assistant YYYY.MM.XX 36 | description: > 37 | Can be found in: [Settings -> About](https://my.home-assistant.io/redirect/info/). 38 | 39 | [![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/) 40 | - type: input 41 | id: frontend_version 42 | attributes: 43 | label: What version of the Frontend are you running? 44 | placeholder: Frontend YYYYMMDD.X 45 | description: > 46 | Can be found in: [Settings -> About](https://my.home-assistant.io/redirect/info/). 47 | 48 | [![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/) 49 | - type: markdown 50 | attributes: 51 | value: | 52 | # Details 53 | - type: textarea 54 | attributes: 55 | label: Example YAML snippet 56 | description: | 57 | If applicable, please provide an example piece of YAML that can help reproduce this problem. 58 | This can be from an automation, script, service or configuration. 59 | render: yml 60 | - type: textarea 61 | attributes: 62 | label: Anything in the logs that might be useful for us? 63 | description: | 64 | For example, error message, or stack traces. 65 | 66 | To view the browsers logs, press F12 and go to the "Console" tab, or use the "Inspect" option in the browsers right-click menu. 67 | render: python3 68 | - type: textarea 69 | attributes: 70 | label: Additional information 71 | description: > 72 | If you have any additional information for us, use the field below. 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🐤 Canary 2 | 3 | [![HACS Badge](https://img.shields.io/badge/HACS-Default-41BDF5.svg?style=for-the-badge)](https://github.com/hacs/integration) 4 | [![License](https://img.shields.io/github/license/jcwillox/lovelace-canary?style=for-the-badge)](https://github.com/jcwillox/lovelace-canary/blob/main/LICENSE) 5 | [![Latest Release](https://img.shields.io/github/v/release/jcwillox/lovelace-canary?style=for-the-badge)](https://github.com/jcwillox/lovelace-canary/releases) 6 | [![GZIP Size](https://img.badgesize.io/https:/github.com/jcwillox/lovelace-canary/releases/latest/download/canary.js?style=for-the-badge&compression=gzip)](https://github.com/jcwillox/lovelace-canary/releases) 7 | 8 | The idea behind Canary is to extend the functionality of Lovelace in a non-drastic way. This is done mainly, by adding extra configuration options (extensions) to pre-existing Lovelace elements. 9 | 10 | This plugin could be thought of as almost a staging ground for features that if suitable could end up in core Lovelace, hence the name borrowed from Chrome Canary. It's unclear how well that statement will hold, it could also be called "Extensions". 11 | 12 | ## Usage 13 | 14 | Much like [card-mod] Canary extends the default lovelace cards, so you don't need to actually define a `canary-card` for these options to work. The options are added to their respective cards as 'extensions'. 15 | 16 | ### Available Extensions 17 | 18 | - [Generic Entity Row](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row) 19 | - [`secondary_info`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#secondary_info) 20 | - [`canary_style`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#canary_style) 21 | - [`canary_theme`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#canary_theme) 22 | - [`hide_warning`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Entity-Row#hide_warning) 23 | - [Generic Card](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card) 24 | - [`no_card`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card#no_card) 25 | - [`canary_style`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card#canary_style) 26 | - [`canary_theme`](https://github.com/jcwillox/lovelace-canary/wiki/Generic-Card#canary_theme) 27 | - [Glance Card](https://github.com/jcwillox/lovelace-canary/wiki/Glance-Card) 28 | - [`align`](https://github.com/jcwillox/lovelace-canary/wiki/Glance-Card#align) 29 | - [Vertical Stack](https://github.com/jcwillox/lovelace-canary/wiki/Vertical-Stack) 30 | - [`in_card`](https://github.com/jcwillox/lovelace-canary/wiki/Vertical-Stack#in_card) 31 | - [Canary Card](https://github.com/jcwillox/lovelace-canary/wiki/Canary-Card) 32 | - `style` 33 | - `theme` 34 | 35 | For more information head over to the [wiki](https://github.com/jcwillox/lovelace-canary/wiki). 36 | 37 | ## Credits 38 | 39 | I'd like to recognise Thomas Lovén's influence on this card, his work on [card-tools] made the creation of this vastly quicker and easier. Reference to his and other people's lovelace cards is, at this point, like 90% of my knowledge on JavaScript and polymer UI. Code from Thomas Lovén's [card-mod] is the backbone of the extensions to lovelace and what gave me this idea in the first place. 40 | 41 | ## Installation 42 | 43 | ```yaml 44 | resources: 45 | - url: /hacsfiles/lovelace-canary/canary.js 46 | type: module 47 | ``` 48 | 49 | [card-mod]: https://github.com/thomasloven/lovelace-card-mod 50 | [card-tools]: https://github.com/thomasloven/lovelace-card-tools 51 | -------------------------------------------------------------------------------- /src/secondary-info.ts: -------------------------------------------------------------------------------- 1 | import { parseOldTemplate } from "card-tools/src/old-templates"; 2 | import { subscribeRenderTemplate } from "card-tools/src/templates.js"; 3 | import { HomeAssistant } from "custom-card-helpers"; 4 | import { oldExtractEntities } from "./templates"; 5 | 6 | interface SecondaryInfoConfig { 7 | template: Record | string; 8 | variables?: { 9 | config?: { 10 | entity?: string; 11 | [key: string]: unknown; 12 | }; 13 | [key: string]: unknown; 14 | }; 15 | entity_ids?: string[]; 16 | } 17 | 18 | class SecondaryInfo extends HTMLElement { 19 | private _disconnected = true; 20 | private _data!: SecondaryInfoConfig; 21 | private _hass?: HomeAssistant; 22 | private _isJinjaTemplate = false; 23 | private _isOldTemplate = false; 24 | private _element?: Element; 25 | private _unsubRenderTemplate?: Promise<() => Promise>; 26 | 27 | disconnectedCallback() { 28 | this._disconnect(); 29 | } 30 | connectedCallback() { 31 | this._disconnected = false; 32 | if (!this._isJinjaTemplate) this._updateNonJinjaTemplates(this._hass); 33 | else this._connect(); 34 | } 35 | 36 | _hasJinjaTemplate(data) { 37 | if (typeof data.template === "object") return false; 38 | if (data.template.includes("{%")) return true; 39 | return data.template.includes("{{"); 40 | } 41 | 42 | set template(data) { 43 | this._data = JSON.parse(JSON.stringify(data)); 44 | 45 | // ignore entity_ids it's not an array. 46 | if (!Array.isArray(this._data.entity_ids)) 47 | this._data.entity_ids = undefined; 48 | 49 | // setup booleans for type of template. 50 | this._isJinjaTemplate = this._hasJinjaTemplate(this._data); 51 | this._isOldTemplate = 52 | !this._isJinjaTemplate && typeof this._data.template !== "object"; 53 | 54 | if (!this._isJinjaTemplate) { 55 | if (typeof this._data.template === "string") { 56 | if (!this._data.entity_ids) { 57 | this._data.entity_ids = oldExtractEntities( 58 | this._data.template as string, 59 | this._data.variables?.config, 60 | ); 61 | } 62 | } else { 63 | // configure the monitored entity_id for secondary info object type. 64 | const entity = 65 | (this._data.template.entity as string) || 66 | this._data.variables?.config?.entity; 67 | if (entity) { 68 | this._data.entity_ids = [entity]; 69 | } 70 | } 71 | } 72 | } 73 | 74 | update() { 75 | this._disconnect().then(() => this._connect()); 76 | } 77 | 78 | _getElement() { 79 | // ensure secondary info div exists. 80 | if (!this._element) { 81 | const element = this.parentNode?.querySelector(".secondary"); 82 | if (element) { 83 | this._element = element; 84 | this._element.innerHTML = "Loading..."; 85 | } 86 | } 87 | return this._element; 88 | } 89 | 90 | set hass(hass) { 91 | if (!this._isJinjaTemplate && !this._disconnected && this._data.template) { 92 | if (this._shouldUpdate(hass, this._data.entity_ids)) { 93 | this._updateNonJinjaTemplates(hass); 94 | } 95 | } 96 | this._hass = hass; 97 | } 98 | 99 | _updateNonJinjaTemplates(hass) { 100 | if (!hass || !this._getElement()) { 101 | return; 102 | } 103 | 104 | if (this._isOldTemplate) { 105 | if (this._element) 106 | this._element.innerHTML = parseOldTemplate( 107 | this._data.template, 108 | this._data.variables?.config, 109 | ); 110 | } else if (typeof this._data.template !== "string") { 111 | const template = this._data.template; 112 | const entity = this._data.entity_ids?.[0]; // exactly one can be configured for this type. 113 | 114 | if (!entity) { 115 | return; 116 | } 117 | 118 | let state = hass.states[entity]; 119 | state = template.attribute 120 | ? state.attributes[template.attribute as string] 121 | : state.state; 122 | 123 | if (state && this._element) { 124 | this._element.innerHTML = `${template.prefix || ""}${state}${ 125 | template.postfix || "" 126 | }`; 127 | } 128 | } 129 | } 130 | 131 | _shouldUpdate(newHass, entities) { 132 | if (!this._hass || !entities) return true; 133 | return entities.some( 134 | (entity) => newHass.states[entity] !== this._hass?.states[entity], 135 | ); 136 | } 137 | 138 | async _connect() { 139 | if (!this._data) return; 140 | 141 | if (!this._isJinjaTemplate) return; 142 | 143 | if (this._unsubRenderTemplate) return; 144 | 145 | if (!this._getElement()) return; 146 | 147 | // show loading message if this is the first connection. 148 | this._unsubRenderTemplate = subscribeRenderTemplate( 149 | null, 150 | (result) => { 151 | this._element && (this._element.innerHTML = result); 152 | }, 153 | this._data, 154 | ); 155 | 156 | await this._unsubRenderTemplate?.catch(() => { 157 | if (this._element) 158 | if (typeof this._data.template === "string") { 159 | this._element.innerHTML = this._data.template; 160 | } else { 161 | this._element.innerHTML = JSON.stringify(this._data.template); 162 | } 163 | this._unsubRenderTemplate = undefined; 164 | }); 165 | } 166 | 167 | async _disconnect() { 168 | this._disconnected = true; // make sure we don't update needlessly. 169 | 170 | if (this._unsubRenderTemplate) { 171 | try { 172 | const unsub = await this._unsubRenderTemplate; 173 | this._unsubRenderTemplate = undefined; 174 | await unsub(); 175 | } catch (e) { 176 | if (typeof e === "object" && e?.["code"] !== "not_found") throw e; 177 | } 178 | } 179 | } 180 | } 181 | 182 | customElements.define("secondary-info", SecondaryInfo); 183 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | card-tools: 12 | specifier: github:thomasloven/lovelace-card-tools#477f3d4 13 | version: https://codeload.github.com/thomasloven/lovelace-card-tools/tar.gz/477f3d4 14 | custom-card-helpers: 15 | specifier: 1.9.0 16 | version: 1.9.0 17 | home-assistant-js-websocket: 18 | specifier: 9.4.0 19 | version: 9.4.0 20 | lit: 21 | specifier: 2.8.0 22 | version: 2.8.0 23 | devDependencies: 24 | '@types/node': 25 | specifier: 20.14.12 26 | version: 20.14.12 27 | '@typescript-eslint/eslint-plugin': 28 | specifier: 7.17.0 29 | version: 7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) 30 | '@typescript-eslint/parser': 31 | specifier: 7.17.0 32 | version: 7.17.0(eslint@8.57.0)(typescript@5.5.4) 33 | eslint: 34 | specifier: 8.57.0 35 | version: 8.57.0 36 | eslint-config-prettier: 37 | specifier: 9.1.0 38 | version: 9.1.0(eslint@8.57.0) 39 | eslint-import-resolver-typescript: 40 | specifier: 3.6.1 41 | version: 3.6.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0) 42 | eslint-plugin-import: 43 | specifier: 2.29.1 44 | version: 2.29.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 45 | eslint-plugin-only-warn: 46 | specifier: 1.1.0 47 | version: 1.1.0 48 | eslint-plugin-prettier: 49 | specifier: 5.2.1 50 | version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) 51 | husky: 52 | specifier: 9.1.1 53 | version: 9.1.1 54 | lint-staged: 55 | specifier: 15.2.7 56 | version: 15.2.7 57 | prettier: 58 | specifier: 3.3.3 59 | version: 3.3.3 60 | typescript: 61 | specifier: 5.5.4 62 | version: 5.5.4 63 | vite: 64 | specifier: 5.3.4 65 | version: 5.3.4(@types/node@20.14.12) 66 | vite-plugin-compression: 67 | specifier: 0.5.1 68 | version: 0.5.1(vite@5.3.4(@types/node@20.14.12)) 69 | 70 | packages: 71 | 72 | '@esbuild/aix-ppc64@0.21.5': 73 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 74 | engines: {node: '>=12'} 75 | cpu: [ppc64] 76 | os: [aix] 77 | 78 | '@esbuild/android-arm64@0.21.5': 79 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 80 | engines: {node: '>=12'} 81 | cpu: [arm64] 82 | os: [android] 83 | 84 | '@esbuild/android-arm@0.21.5': 85 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 86 | engines: {node: '>=12'} 87 | cpu: [arm] 88 | os: [android] 89 | 90 | '@esbuild/android-x64@0.21.5': 91 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 92 | engines: {node: '>=12'} 93 | cpu: [x64] 94 | os: [android] 95 | 96 | '@esbuild/darwin-arm64@0.21.5': 97 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 98 | engines: {node: '>=12'} 99 | cpu: [arm64] 100 | os: [darwin] 101 | 102 | '@esbuild/darwin-x64@0.21.5': 103 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 104 | engines: {node: '>=12'} 105 | cpu: [x64] 106 | os: [darwin] 107 | 108 | '@esbuild/freebsd-arm64@0.21.5': 109 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 110 | engines: {node: '>=12'} 111 | cpu: [arm64] 112 | os: [freebsd] 113 | 114 | '@esbuild/freebsd-x64@0.21.5': 115 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 116 | engines: {node: '>=12'} 117 | cpu: [x64] 118 | os: [freebsd] 119 | 120 | '@esbuild/linux-arm64@0.21.5': 121 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 122 | engines: {node: '>=12'} 123 | cpu: [arm64] 124 | os: [linux] 125 | 126 | '@esbuild/linux-arm@0.21.5': 127 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 128 | engines: {node: '>=12'} 129 | cpu: [arm] 130 | os: [linux] 131 | 132 | '@esbuild/linux-ia32@0.21.5': 133 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 134 | engines: {node: '>=12'} 135 | cpu: [ia32] 136 | os: [linux] 137 | 138 | '@esbuild/linux-loong64@0.21.5': 139 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 140 | engines: {node: '>=12'} 141 | cpu: [loong64] 142 | os: [linux] 143 | 144 | '@esbuild/linux-mips64el@0.21.5': 145 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 146 | engines: {node: '>=12'} 147 | cpu: [mips64el] 148 | os: [linux] 149 | 150 | '@esbuild/linux-ppc64@0.21.5': 151 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 152 | engines: {node: '>=12'} 153 | cpu: [ppc64] 154 | os: [linux] 155 | 156 | '@esbuild/linux-riscv64@0.21.5': 157 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 158 | engines: {node: '>=12'} 159 | cpu: [riscv64] 160 | os: [linux] 161 | 162 | '@esbuild/linux-s390x@0.21.5': 163 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 164 | engines: {node: '>=12'} 165 | cpu: [s390x] 166 | os: [linux] 167 | 168 | '@esbuild/linux-x64@0.21.5': 169 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 170 | engines: {node: '>=12'} 171 | cpu: [x64] 172 | os: [linux] 173 | 174 | '@esbuild/netbsd-x64@0.21.5': 175 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 176 | engines: {node: '>=12'} 177 | cpu: [x64] 178 | os: [netbsd] 179 | 180 | '@esbuild/openbsd-x64@0.21.5': 181 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 182 | engines: {node: '>=12'} 183 | cpu: [x64] 184 | os: [openbsd] 185 | 186 | '@esbuild/sunos-x64@0.21.5': 187 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 188 | engines: {node: '>=12'} 189 | cpu: [x64] 190 | os: [sunos] 191 | 192 | '@esbuild/win32-arm64@0.21.5': 193 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 194 | engines: {node: '>=12'} 195 | cpu: [arm64] 196 | os: [win32] 197 | 198 | '@esbuild/win32-ia32@0.21.5': 199 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 200 | engines: {node: '>=12'} 201 | cpu: [ia32] 202 | os: [win32] 203 | 204 | '@esbuild/win32-x64@0.21.5': 205 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 206 | engines: {node: '>=12'} 207 | cpu: [x64] 208 | os: [win32] 209 | 210 | '@eslint-community/eslint-utils@4.4.0': 211 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 212 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 213 | peerDependencies: 214 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 215 | 216 | '@eslint-community/regexpp@4.11.0': 217 | resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} 218 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 219 | 220 | '@eslint/eslintrc@2.1.4': 221 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 222 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 223 | 224 | '@eslint/js@8.57.0': 225 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 226 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 227 | 228 | '@formatjs/ecma402-abstract@1.11.4': 229 | resolution: {integrity: sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==} 230 | 231 | '@formatjs/fast-memoize@1.2.1': 232 | resolution: {integrity: sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==} 233 | 234 | '@formatjs/icu-messageformat-parser@2.1.0': 235 | resolution: {integrity: sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==} 236 | 237 | '@formatjs/icu-skeleton-parser@1.3.6': 238 | resolution: {integrity: sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==} 239 | 240 | '@formatjs/intl-localematcher@0.2.25': 241 | resolution: {integrity: sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==} 242 | 243 | '@formatjs/intl-utils@3.8.4': 244 | resolution: {integrity: sha512-j5C6NyfKevIxsfLK8KwO1C0vvP7k1+h4A9cFpc+cr6mEwCc1sPkr17dzh0Ke6k9U5pQccAQoXdcNBl3IYa4+ZQ==} 245 | deprecated: the package is rather renamed to @formatjs/ecma-abstract with some changes in functionality (primarily selectUnit is removed and we don't plan to make any further changes to this package 246 | 247 | '@humanwhocodes/config-array@0.11.14': 248 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 249 | engines: {node: '>=10.10.0'} 250 | deprecated: Use @eslint/config-array instead 251 | 252 | '@humanwhocodes/module-importer@1.0.1': 253 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 254 | engines: {node: '>=12.22'} 255 | 256 | '@humanwhocodes/object-schema@2.0.3': 257 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 258 | deprecated: Use @eslint/object-schema instead 259 | 260 | '@lit-labs/ssr-dom-shim@1.2.0': 261 | resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} 262 | 263 | '@lit/reactive-element@1.6.3': 264 | resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} 265 | 266 | '@nodelib/fs.scandir@2.1.5': 267 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 268 | engines: {node: '>= 8'} 269 | 270 | '@nodelib/fs.stat@2.0.5': 271 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 272 | engines: {node: '>= 8'} 273 | 274 | '@nodelib/fs.walk@1.2.8': 275 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 276 | engines: {node: '>= 8'} 277 | 278 | '@pkgr/core@0.1.1': 279 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 280 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 281 | 282 | '@rollup/rollup-android-arm-eabi@4.19.1': 283 | resolution: {integrity: sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==} 284 | cpu: [arm] 285 | os: [android] 286 | 287 | '@rollup/rollup-android-arm64@4.19.1': 288 | resolution: {integrity: sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==} 289 | cpu: [arm64] 290 | os: [android] 291 | 292 | '@rollup/rollup-darwin-arm64@4.19.1': 293 | resolution: {integrity: sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==} 294 | cpu: [arm64] 295 | os: [darwin] 296 | 297 | '@rollup/rollup-darwin-x64@4.19.1': 298 | resolution: {integrity: sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==} 299 | cpu: [x64] 300 | os: [darwin] 301 | 302 | '@rollup/rollup-linux-arm-gnueabihf@4.19.1': 303 | resolution: {integrity: sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==} 304 | cpu: [arm] 305 | os: [linux] 306 | 307 | '@rollup/rollup-linux-arm-musleabihf@4.19.1': 308 | resolution: {integrity: sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==} 309 | cpu: [arm] 310 | os: [linux] 311 | 312 | '@rollup/rollup-linux-arm64-gnu@4.19.1': 313 | resolution: {integrity: sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==} 314 | cpu: [arm64] 315 | os: [linux] 316 | 317 | '@rollup/rollup-linux-arm64-musl@4.19.1': 318 | resolution: {integrity: sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==} 319 | cpu: [arm64] 320 | os: [linux] 321 | 322 | '@rollup/rollup-linux-powerpc64le-gnu@4.19.1': 323 | resolution: {integrity: sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==} 324 | cpu: [ppc64] 325 | os: [linux] 326 | 327 | '@rollup/rollup-linux-riscv64-gnu@4.19.1': 328 | resolution: {integrity: sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==} 329 | cpu: [riscv64] 330 | os: [linux] 331 | 332 | '@rollup/rollup-linux-s390x-gnu@4.19.1': 333 | resolution: {integrity: sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==} 334 | cpu: [s390x] 335 | os: [linux] 336 | 337 | '@rollup/rollup-linux-x64-gnu@4.19.1': 338 | resolution: {integrity: sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==} 339 | cpu: [x64] 340 | os: [linux] 341 | 342 | '@rollup/rollup-linux-x64-musl@4.19.1': 343 | resolution: {integrity: sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==} 344 | cpu: [x64] 345 | os: [linux] 346 | 347 | '@rollup/rollup-win32-arm64-msvc@4.19.1': 348 | resolution: {integrity: sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==} 349 | cpu: [arm64] 350 | os: [win32] 351 | 352 | '@rollup/rollup-win32-ia32-msvc@4.19.1': 353 | resolution: {integrity: sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==} 354 | cpu: [ia32] 355 | os: [win32] 356 | 357 | '@rollup/rollup-win32-x64-msvc@4.19.1': 358 | resolution: {integrity: sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==} 359 | cpu: [x64] 360 | os: [win32] 361 | 362 | '@types/estree@1.0.5': 363 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 364 | 365 | '@types/json5@0.0.29': 366 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 367 | 368 | '@types/node@20.14.12': 369 | resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} 370 | 371 | '@types/trusted-types@2.0.7': 372 | resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} 373 | 374 | '@typescript-eslint/eslint-plugin@7.17.0': 375 | resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==} 376 | engines: {node: ^18.18.0 || >=20.0.0} 377 | peerDependencies: 378 | '@typescript-eslint/parser': ^7.0.0 379 | eslint: ^8.56.0 380 | typescript: '*' 381 | peerDependenciesMeta: 382 | typescript: 383 | optional: true 384 | 385 | '@typescript-eslint/parser@7.17.0': 386 | resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==} 387 | engines: {node: ^18.18.0 || >=20.0.0} 388 | peerDependencies: 389 | eslint: ^8.56.0 390 | typescript: '*' 391 | peerDependenciesMeta: 392 | typescript: 393 | optional: true 394 | 395 | '@typescript-eslint/scope-manager@7.17.0': 396 | resolution: {integrity: sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==} 397 | engines: {node: ^18.18.0 || >=20.0.0} 398 | 399 | '@typescript-eslint/type-utils@7.17.0': 400 | resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==} 401 | engines: {node: ^18.18.0 || >=20.0.0} 402 | peerDependencies: 403 | eslint: ^8.56.0 404 | typescript: '*' 405 | peerDependenciesMeta: 406 | typescript: 407 | optional: true 408 | 409 | '@typescript-eslint/types@7.17.0': 410 | resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==} 411 | engines: {node: ^18.18.0 || >=20.0.0} 412 | 413 | '@typescript-eslint/typescript-estree@7.17.0': 414 | resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==} 415 | engines: {node: ^18.18.0 || >=20.0.0} 416 | peerDependencies: 417 | typescript: '*' 418 | peerDependenciesMeta: 419 | typescript: 420 | optional: true 421 | 422 | '@typescript-eslint/utils@7.17.0': 423 | resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==} 424 | engines: {node: ^18.18.0 || >=20.0.0} 425 | peerDependencies: 426 | eslint: ^8.56.0 427 | 428 | '@typescript-eslint/visitor-keys@7.17.0': 429 | resolution: {integrity: sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==} 430 | engines: {node: ^18.18.0 || >=20.0.0} 431 | 432 | '@ungap/structured-clone@1.2.0': 433 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 434 | 435 | acorn-jsx@5.3.2: 436 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 437 | peerDependencies: 438 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 439 | 440 | acorn@8.12.1: 441 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 442 | engines: {node: '>=0.4.0'} 443 | hasBin: true 444 | 445 | ajv@6.12.6: 446 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 447 | 448 | ansi-escapes@7.0.0: 449 | resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} 450 | engines: {node: '>=18'} 451 | 452 | ansi-regex@5.0.1: 453 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 454 | engines: {node: '>=8'} 455 | 456 | ansi-regex@6.0.1: 457 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 458 | engines: {node: '>=12'} 459 | 460 | ansi-styles@4.3.0: 461 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 462 | engines: {node: '>=8'} 463 | 464 | ansi-styles@6.2.1: 465 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 466 | engines: {node: '>=12'} 467 | 468 | argparse@2.0.1: 469 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 470 | 471 | array-buffer-byte-length@1.0.1: 472 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 473 | engines: {node: '>= 0.4'} 474 | 475 | array-includes@3.1.8: 476 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 477 | engines: {node: '>= 0.4'} 478 | 479 | array-union@2.1.0: 480 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 481 | engines: {node: '>=8'} 482 | 483 | array.prototype.findlastindex@1.2.5: 484 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 485 | engines: {node: '>= 0.4'} 486 | 487 | array.prototype.flat@1.3.2: 488 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 489 | engines: {node: '>= 0.4'} 490 | 491 | array.prototype.flatmap@1.3.2: 492 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 493 | engines: {node: '>= 0.4'} 494 | 495 | arraybuffer.prototype.slice@1.0.3: 496 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 497 | engines: {node: '>= 0.4'} 498 | 499 | available-typed-arrays@1.0.7: 500 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 501 | engines: {node: '>= 0.4'} 502 | 503 | balanced-match@1.0.2: 504 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 505 | 506 | brace-expansion@1.1.11: 507 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 508 | 509 | brace-expansion@2.0.1: 510 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 511 | 512 | braces@3.0.3: 513 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 514 | engines: {node: '>=8'} 515 | 516 | call-bind@1.0.7: 517 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 518 | engines: {node: '>= 0.4'} 519 | 520 | callsites@3.1.0: 521 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 522 | engines: {node: '>=6'} 523 | 524 | card-tools@https://codeload.github.com/thomasloven/lovelace-card-tools/tar.gz/477f3d4: 525 | resolution: {tarball: https://codeload.github.com/thomasloven/lovelace-card-tools/tar.gz/477f3d4} 526 | version: 2.1.2 527 | 528 | chalk@4.1.2: 529 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 530 | engines: {node: '>=10'} 531 | 532 | chalk@5.3.0: 533 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 534 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 535 | 536 | cli-cursor@5.0.0: 537 | resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} 538 | engines: {node: '>=18'} 539 | 540 | cli-truncate@4.0.0: 541 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 542 | engines: {node: '>=18'} 543 | 544 | color-convert@2.0.1: 545 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 546 | engines: {node: '>=7.0.0'} 547 | 548 | color-name@1.1.4: 549 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 550 | 551 | colorette@2.0.20: 552 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 553 | 554 | commander@12.1.0: 555 | resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} 556 | engines: {node: '>=18'} 557 | 558 | concat-map@0.0.1: 559 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 560 | 561 | cross-spawn@7.0.3: 562 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 563 | engines: {node: '>= 8'} 564 | 565 | custom-card-helpers@1.9.0: 566 | resolution: {integrity: sha512-5IW4OXq3MiiCqDvqeu+MYsM1NmntKW1WfJhyJFsdP2tbzqEI4BOnqRz2qzdp08lE4QLVhYfRLwe0WAqgQVNeFg==} 567 | 568 | data-view-buffer@1.0.1: 569 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 570 | engines: {node: '>= 0.4'} 571 | 572 | data-view-byte-length@1.0.1: 573 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 574 | engines: {node: '>= 0.4'} 575 | 576 | data-view-byte-offset@1.0.0: 577 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 578 | engines: {node: '>= 0.4'} 579 | 580 | debug@3.2.7: 581 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 582 | peerDependencies: 583 | supports-color: '*' 584 | peerDependenciesMeta: 585 | supports-color: 586 | optional: true 587 | 588 | debug@4.3.6: 589 | resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} 590 | engines: {node: '>=6.0'} 591 | peerDependencies: 592 | supports-color: '*' 593 | peerDependenciesMeta: 594 | supports-color: 595 | optional: true 596 | 597 | deep-is@0.1.4: 598 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 599 | 600 | define-data-property@1.1.4: 601 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 602 | engines: {node: '>= 0.4'} 603 | 604 | define-properties@1.2.1: 605 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 606 | engines: {node: '>= 0.4'} 607 | 608 | dir-glob@3.0.1: 609 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 610 | engines: {node: '>=8'} 611 | 612 | doctrine@2.1.0: 613 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 614 | engines: {node: '>=0.10.0'} 615 | 616 | doctrine@3.0.0: 617 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 618 | engines: {node: '>=6.0.0'} 619 | 620 | emoji-regex@10.3.0: 621 | resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} 622 | 623 | emojis-list@3.0.0: 624 | resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} 625 | engines: {node: '>= 4'} 626 | 627 | enhanced-resolve@5.17.1: 628 | resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} 629 | engines: {node: '>=10.13.0'} 630 | 631 | environment@1.1.0: 632 | resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} 633 | engines: {node: '>=18'} 634 | 635 | es-abstract@1.23.3: 636 | resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 637 | engines: {node: '>= 0.4'} 638 | 639 | es-define-property@1.0.0: 640 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 641 | engines: {node: '>= 0.4'} 642 | 643 | es-errors@1.3.0: 644 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 645 | engines: {node: '>= 0.4'} 646 | 647 | es-object-atoms@1.0.0: 648 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 649 | engines: {node: '>= 0.4'} 650 | 651 | es-set-tostringtag@2.0.3: 652 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 653 | engines: {node: '>= 0.4'} 654 | 655 | es-shim-unscopables@1.0.2: 656 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 657 | 658 | es-to-primitive@1.2.1: 659 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 660 | engines: {node: '>= 0.4'} 661 | 662 | esbuild@0.21.5: 663 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 664 | engines: {node: '>=12'} 665 | hasBin: true 666 | 667 | escape-string-regexp@4.0.0: 668 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 669 | engines: {node: '>=10'} 670 | 671 | eslint-config-prettier@9.1.0: 672 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 673 | hasBin: true 674 | peerDependencies: 675 | eslint: '>=7.0.0' 676 | 677 | eslint-import-resolver-node@0.3.9: 678 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 679 | 680 | eslint-import-resolver-typescript@3.6.1: 681 | resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} 682 | engines: {node: ^14.18.0 || >=16.0.0} 683 | peerDependencies: 684 | eslint: '*' 685 | eslint-plugin-import: '*' 686 | 687 | eslint-module-utils@2.8.1: 688 | resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} 689 | engines: {node: '>=4'} 690 | peerDependencies: 691 | '@typescript-eslint/parser': '*' 692 | eslint: '*' 693 | eslint-import-resolver-node: '*' 694 | eslint-import-resolver-typescript: '*' 695 | eslint-import-resolver-webpack: '*' 696 | peerDependenciesMeta: 697 | '@typescript-eslint/parser': 698 | optional: true 699 | eslint: 700 | optional: true 701 | eslint-import-resolver-node: 702 | optional: true 703 | eslint-import-resolver-typescript: 704 | optional: true 705 | eslint-import-resolver-webpack: 706 | optional: true 707 | 708 | eslint-plugin-import@2.29.1: 709 | resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} 710 | engines: {node: '>=4'} 711 | peerDependencies: 712 | '@typescript-eslint/parser': '*' 713 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 714 | peerDependenciesMeta: 715 | '@typescript-eslint/parser': 716 | optional: true 717 | 718 | eslint-plugin-only-warn@1.1.0: 719 | resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} 720 | engines: {node: '>=6'} 721 | 722 | eslint-plugin-prettier@5.2.1: 723 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 724 | engines: {node: ^14.18.0 || >=16.0.0} 725 | peerDependencies: 726 | '@types/eslint': '>=8.0.0' 727 | eslint: '>=8.0.0' 728 | eslint-config-prettier: '*' 729 | prettier: '>=3.0.0' 730 | peerDependenciesMeta: 731 | '@types/eslint': 732 | optional: true 733 | eslint-config-prettier: 734 | optional: true 735 | 736 | eslint-scope@7.2.2: 737 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 738 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 739 | 740 | eslint-visitor-keys@3.4.3: 741 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 742 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 743 | 744 | eslint@8.57.0: 745 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 746 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 747 | hasBin: true 748 | 749 | espree@9.6.1: 750 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 751 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 752 | 753 | esquery@1.6.0: 754 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 755 | engines: {node: '>=0.10'} 756 | 757 | esrecurse@4.3.0: 758 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 759 | engines: {node: '>=4.0'} 760 | 761 | estraverse@5.3.0: 762 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 763 | engines: {node: '>=4.0'} 764 | 765 | esutils@2.0.3: 766 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 767 | engines: {node: '>=0.10.0'} 768 | 769 | eventemitter3@5.0.1: 770 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 771 | 772 | execa@8.0.1: 773 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 774 | engines: {node: '>=16.17'} 775 | 776 | fast-deep-equal@3.1.3: 777 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 778 | 779 | fast-diff@1.3.0: 780 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 781 | 782 | fast-glob@3.3.2: 783 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 784 | engines: {node: '>=8.6.0'} 785 | 786 | fast-json-stable-stringify@2.1.0: 787 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 788 | 789 | fast-levenshtein@2.0.6: 790 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 791 | 792 | fastq@1.17.1: 793 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 794 | 795 | file-entry-cache@6.0.1: 796 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 797 | engines: {node: ^10.12.0 || >=12.0.0} 798 | 799 | fill-range@7.1.1: 800 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 801 | engines: {node: '>=8'} 802 | 803 | find-up@5.0.0: 804 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 805 | engines: {node: '>=10'} 806 | 807 | flat-cache@3.2.0: 808 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 809 | engines: {node: ^10.12.0 || >=12.0.0} 810 | 811 | flatted@3.3.1: 812 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 813 | 814 | for-each@0.3.3: 815 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 816 | 817 | fs-extra@10.1.0: 818 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 819 | engines: {node: '>=12'} 820 | 821 | fs.realpath@1.0.0: 822 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 823 | 824 | fsevents@2.3.3: 825 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 826 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 827 | os: [darwin] 828 | 829 | function-bind@1.1.2: 830 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 831 | 832 | function.prototype.name@1.1.6: 833 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 834 | engines: {node: '>= 0.4'} 835 | 836 | functions-have-names@1.2.3: 837 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 838 | 839 | get-east-asian-width@1.2.0: 840 | resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} 841 | engines: {node: '>=18'} 842 | 843 | get-intrinsic@1.2.4: 844 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 845 | engines: {node: '>= 0.4'} 846 | 847 | get-stream@8.0.1: 848 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 849 | engines: {node: '>=16'} 850 | 851 | get-symbol-description@1.0.2: 852 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 853 | engines: {node: '>= 0.4'} 854 | 855 | get-tsconfig@4.7.6: 856 | resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} 857 | 858 | glob-parent@5.1.2: 859 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 860 | engines: {node: '>= 6'} 861 | 862 | glob-parent@6.0.2: 863 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 864 | engines: {node: '>=10.13.0'} 865 | 866 | glob@7.2.3: 867 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 868 | deprecated: Glob versions prior to v9 are no longer supported 869 | 870 | globals@13.24.0: 871 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 872 | engines: {node: '>=8'} 873 | 874 | globalthis@1.0.4: 875 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 876 | engines: {node: '>= 0.4'} 877 | 878 | globby@11.1.0: 879 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 880 | engines: {node: '>=10'} 881 | 882 | gopd@1.0.1: 883 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 884 | 885 | graceful-fs@4.2.11: 886 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 887 | 888 | graphemer@1.4.0: 889 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 890 | 891 | has-bigints@1.0.2: 892 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 893 | 894 | has-flag@4.0.0: 895 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 896 | engines: {node: '>=8'} 897 | 898 | has-property-descriptors@1.0.2: 899 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 900 | 901 | has-proto@1.0.3: 902 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 903 | engines: {node: '>= 0.4'} 904 | 905 | has-symbols@1.0.3: 906 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 907 | engines: {node: '>= 0.4'} 908 | 909 | has-tostringtag@1.0.2: 910 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 911 | engines: {node: '>= 0.4'} 912 | 913 | hasown@2.0.2: 914 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 915 | engines: {node: '>= 0.4'} 916 | 917 | home-assistant-js-websocket@6.1.1: 918 | resolution: {integrity: sha512-TnZFzF4mn5F/v0XKUTK2GMQXrn/+eQpgaSDSELl6U0HSwSbFwRhGWLz330YT+hiKMspDflamsye//RPL+zwhDw==} 919 | 920 | home-assistant-js-websocket@9.4.0: 921 | resolution: {integrity: sha512-312TuI63IfKf8G+iWvKmPYIdxWMNojwVk03o9OSpQFFDjSCNAYdCUfuPCFs73SuJ1Xpd4D1Eo11CB33MGMqZ+Q==} 922 | 923 | human-signals@5.0.0: 924 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 925 | engines: {node: '>=16.17.0'} 926 | 927 | husky@9.1.1: 928 | resolution: {integrity: sha512-fCqlqLXcBnXa/TJXmT93/A36tJsjdJkibQ1MuIiFyCCYUlpYpIaj2mv1w+3KR6Rzu1IC3slFTje5f6DUp2A2rg==} 929 | engines: {node: '>=18'} 930 | hasBin: true 931 | 932 | ignore@5.3.1: 933 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 934 | engines: {node: '>= 4'} 935 | 936 | import-fresh@3.3.0: 937 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 938 | engines: {node: '>=6'} 939 | 940 | imurmurhash@0.1.4: 941 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 942 | engines: {node: '>=0.8.19'} 943 | 944 | inflight@1.0.6: 945 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 946 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 947 | 948 | inherits@2.0.4: 949 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 950 | 951 | internal-slot@1.0.7: 952 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 953 | engines: {node: '>= 0.4'} 954 | 955 | intl-messageformat@9.13.0: 956 | resolution: {integrity: sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==} 957 | 958 | is-array-buffer@3.0.4: 959 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 960 | engines: {node: '>= 0.4'} 961 | 962 | is-bigint@1.0.4: 963 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 964 | 965 | is-boolean-object@1.1.2: 966 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 967 | engines: {node: '>= 0.4'} 968 | 969 | is-callable@1.2.7: 970 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 971 | engines: {node: '>= 0.4'} 972 | 973 | is-core-module@2.15.0: 974 | resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} 975 | engines: {node: '>= 0.4'} 976 | 977 | is-data-view@1.0.1: 978 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 979 | engines: {node: '>= 0.4'} 980 | 981 | is-date-object@1.0.5: 982 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 983 | engines: {node: '>= 0.4'} 984 | 985 | is-extglob@2.1.1: 986 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 987 | engines: {node: '>=0.10.0'} 988 | 989 | is-fullwidth-code-point@4.0.0: 990 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 991 | engines: {node: '>=12'} 992 | 993 | is-fullwidth-code-point@5.0.0: 994 | resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} 995 | engines: {node: '>=18'} 996 | 997 | is-glob@4.0.3: 998 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 999 | engines: {node: '>=0.10.0'} 1000 | 1001 | is-negative-zero@2.0.3: 1002 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 1003 | engines: {node: '>= 0.4'} 1004 | 1005 | is-number-object@1.0.7: 1006 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1007 | engines: {node: '>= 0.4'} 1008 | 1009 | is-number@7.0.0: 1010 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1011 | engines: {node: '>=0.12.0'} 1012 | 1013 | is-path-inside@3.0.3: 1014 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1015 | engines: {node: '>=8'} 1016 | 1017 | is-regex@1.1.4: 1018 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1019 | engines: {node: '>= 0.4'} 1020 | 1021 | is-shared-array-buffer@1.0.3: 1022 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 1023 | engines: {node: '>= 0.4'} 1024 | 1025 | is-stream@3.0.0: 1026 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1027 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1028 | 1029 | is-string@1.0.7: 1030 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1031 | engines: {node: '>= 0.4'} 1032 | 1033 | is-symbol@1.0.4: 1034 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1035 | engines: {node: '>= 0.4'} 1036 | 1037 | is-typed-array@1.1.13: 1038 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 1039 | engines: {node: '>= 0.4'} 1040 | 1041 | is-weakref@1.0.2: 1042 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1043 | 1044 | isarray@2.0.5: 1045 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1046 | 1047 | isexe@2.0.0: 1048 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1049 | 1050 | js-yaml@4.1.0: 1051 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1052 | hasBin: true 1053 | 1054 | json-buffer@3.0.1: 1055 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1056 | 1057 | json-schema-traverse@0.4.1: 1058 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1059 | 1060 | json-stable-stringify-without-jsonify@1.0.1: 1061 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1062 | 1063 | json5@1.0.2: 1064 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1065 | hasBin: true 1066 | 1067 | jsonfile@6.1.0: 1068 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1069 | 1070 | keyv@4.5.4: 1071 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1072 | 1073 | levn@0.4.1: 1074 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1075 | engines: {node: '>= 0.8.0'} 1076 | 1077 | lilconfig@3.1.2: 1078 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 1079 | engines: {node: '>=14'} 1080 | 1081 | lint-staged@15.2.7: 1082 | resolution: {integrity: sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==} 1083 | engines: {node: '>=18.12.0'} 1084 | hasBin: true 1085 | 1086 | listr2@8.2.4: 1087 | resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} 1088 | engines: {node: '>=18.0.0'} 1089 | 1090 | lit-element@3.3.3: 1091 | resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} 1092 | 1093 | lit-html@2.8.0: 1094 | resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} 1095 | 1096 | lit@2.8.0: 1097 | resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} 1098 | 1099 | locate-path@6.0.0: 1100 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1101 | engines: {node: '>=10'} 1102 | 1103 | lodash.merge@4.6.2: 1104 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1105 | 1106 | log-update@6.1.0: 1107 | resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} 1108 | engines: {node: '>=18'} 1109 | 1110 | merge-stream@2.0.0: 1111 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1112 | 1113 | merge2@1.4.1: 1114 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1115 | engines: {node: '>= 8'} 1116 | 1117 | micromatch@4.0.7: 1118 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} 1119 | engines: {node: '>=8.6'} 1120 | 1121 | mimic-fn@4.0.0: 1122 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1123 | engines: {node: '>=12'} 1124 | 1125 | mimic-function@5.0.1: 1126 | resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1127 | engines: {node: '>=18'} 1128 | 1129 | minimatch@3.1.2: 1130 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1131 | 1132 | minimatch@9.0.5: 1133 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1134 | engines: {node: '>=16 || 14 >=14.17'} 1135 | 1136 | minimist@1.2.8: 1137 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1138 | 1139 | ms@2.1.2: 1140 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1141 | 1142 | ms@2.1.3: 1143 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1144 | 1145 | nanoid@3.3.7: 1146 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1147 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1148 | hasBin: true 1149 | 1150 | natural-compare@1.4.0: 1151 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1152 | 1153 | npm-run-path@5.3.0: 1154 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1155 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1156 | 1157 | object-inspect@1.13.2: 1158 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 1159 | engines: {node: '>= 0.4'} 1160 | 1161 | object-keys@1.1.1: 1162 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1163 | engines: {node: '>= 0.4'} 1164 | 1165 | object.assign@4.1.5: 1166 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1167 | engines: {node: '>= 0.4'} 1168 | 1169 | object.fromentries@2.0.8: 1170 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1171 | engines: {node: '>= 0.4'} 1172 | 1173 | object.groupby@1.0.3: 1174 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1175 | engines: {node: '>= 0.4'} 1176 | 1177 | object.values@1.2.0: 1178 | resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} 1179 | engines: {node: '>= 0.4'} 1180 | 1181 | once@1.4.0: 1182 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1183 | 1184 | onetime@6.0.0: 1185 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1186 | engines: {node: '>=12'} 1187 | 1188 | onetime@7.0.0: 1189 | resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1190 | engines: {node: '>=18'} 1191 | 1192 | optionator@0.9.4: 1193 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1194 | engines: {node: '>= 0.8.0'} 1195 | 1196 | p-limit@3.1.0: 1197 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1198 | engines: {node: '>=10'} 1199 | 1200 | p-locate@5.0.0: 1201 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1202 | engines: {node: '>=10'} 1203 | 1204 | parent-module@1.0.1: 1205 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1206 | engines: {node: '>=6'} 1207 | 1208 | path-exists@4.0.0: 1209 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1210 | engines: {node: '>=8'} 1211 | 1212 | path-is-absolute@1.0.1: 1213 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1214 | engines: {node: '>=0.10.0'} 1215 | 1216 | path-key@3.1.1: 1217 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1218 | engines: {node: '>=8'} 1219 | 1220 | path-key@4.0.0: 1221 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1222 | engines: {node: '>=12'} 1223 | 1224 | path-parse@1.0.7: 1225 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1226 | 1227 | path-type@4.0.0: 1228 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1229 | engines: {node: '>=8'} 1230 | 1231 | picocolors@1.0.1: 1232 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1233 | 1234 | picomatch@2.3.1: 1235 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1236 | engines: {node: '>=8.6'} 1237 | 1238 | pidtree@0.6.0: 1239 | resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 1240 | engines: {node: '>=0.10'} 1241 | hasBin: true 1242 | 1243 | possible-typed-array-names@1.0.0: 1244 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1245 | engines: {node: '>= 0.4'} 1246 | 1247 | postcss@8.4.40: 1248 | resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} 1249 | engines: {node: ^10 || ^12 || >=14} 1250 | 1251 | prelude-ls@1.2.1: 1252 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1253 | engines: {node: '>= 0.8.0'} 1254 | 1255 | prettier-linter-helpers@1.0.0: 1256 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1257 | engines: {node: '>=6.0.0'} 1258 | 1259 | prettier@3.3.3: 1260 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 1261 | engines: {node: '>=14'} 1262 | hasBin: true 1263 | 1264 | punycode@2.3.1: 1265 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1266 | engines: {node: '>=6'} 1267 | 1268 | queue-microtask@1.2.3: 1269 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1270 | 1271 | regexp.prototype.flags@1.5.2: 1272 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} 1273 | engines: {node: '>= 0.4'} 1274 | 1275 | resolve-from@4.0.0: 1276 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1277 | engines: {node: '>=4'} 1278 | 1279 | resolve-pkg-maps@1.0.0: 1280 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1281 | 1282 | resolve@1.22.8: 1283 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1284 | hasBin: true 1285 | 1286 | restore-cursor@5.1.0: 1287 | resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1288 | engines: {node: '>=18'} 1289 | 1290 | reusify@1.0.4: 1291 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1292 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1293 | 1294 | rfdc@1.4.1: 1295 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 1296 | 1297 | rimraf@3.0.2: 1298 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1299 | deprecated: Rimraf versions prior to v4 are no longer supported 1300 | hasBin: true 1301 | 1302 | rollup@2.79.1: 1303 | resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} 1304 | engines: {node: '>=10.0.0'} 1305 | hasBin: true 1306 | 1307 | rollup@4.19.1: 1308 | resolution: {integrity: sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==} 1309 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1310 | hasBin: true 1311 | 1312 | run-parallel@1.2.0: 1313 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1314 | 1315 | safe-array-concat@1.1.2: 1316 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1317 | engines: {node: '>=0.4'} 1318 | 1319 | safe-regex-test@1.0.3: 1320 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1321 | engines: {node: '>= 0.4'} 1322 | 1323 | semver@6.3.1: 1324 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1325 | hasBin: true 1326 | 1327 | semver@7.6.3: 1328 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1329 | engines: {node: '>=10'} 1330 | hasBin: true 1331 | 1332 | set-function-length@1.2.2: 1333 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1334 | engines: {node: '>= 0.4'} 1335 | 1336 | set-function-name@2.0.2: 1337 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1338 | engines: {node: '>= 0.4'} 1339 | 1340 | shebang-command@2.0.0: 1341 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1342 | engines: {node: '>=8'} 1343 | 1344 | shebang-regex@3.0.0: 1345 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1346 | engines: {node: '>=8'} 1347 | 1348 | side-channel@1.0.6: 1349 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1350 | engines: {node: '>= 0.4'} 1351 | 1352 | signal-exit@4.1.0: 1353 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1354 | engines: {node: '>=14'} 1355 | 1356 | slash@3.0.0: 1357 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1358 | engines: {node: '>=8'} 1359 | 1360 | slice-ansi@5.0.0: 1361 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1362 | engines: {node: '>=12'} 1363 | 1364 | slice-ansi@7.1.0: 1365 | resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} 1366 | engines: {node: '>=18'} 1367 | 1368 | source-map-js@1.2.0: 1369 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1370 | engines: {node: '>=0.10.0'} 1371 | 1372 | string-argv@0.3.2: 1373 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1374 | engines: {node: '>=0.6.19'} 1375 | 1376 | string-width@7.2.0: 1377 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1378 | engines: {node: '>=18'} 1379 | 1380 | string.prototype.trim@1.2.9: 1381 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1382 | engines: {node: '>= 0.4'} 1383 | 1384 | string.prototype.trimend@1.0.8: 1385 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1386 | 1387 | string.prototype.trimstart@1.0.8: 1388 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1389 | engines: {node: '>= 0.4'} 1390 | 1391 | strip-ansi@6.0.1: 1392 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1393 | engines: {node: '>=8'} 1394 | 1395 | strip-ansi@7.1.0: 1396 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1397 | engines: {node: '>=12'} 1398 | 1399 | strip-bom@3.0.0: 1400 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1401 | engines: {node: '>=4'} 1402 | 1403 | strip-final-newline@3.0.0: 1404 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1405 | engines: {node: '>=12'} 1406 | 1407 | strip-json-comments@3.1.1: 1408 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1409 | engines: {node: '>=8'} 1410 | 1411 | superstruct@0.15.5: 1412 | resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} 1413 | 1414 | supports-color@7.2.0: 1415 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1416 | engines: {node: '>=8'} 1417 | 1418 | supports-preserve-symlinks-flag@1.0.0: 1419 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1420 | engines: {node: '>= 0.4'} 1421 | 1422 | synckit@0.9.1: 1423 | resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} 1424 | engines: {node: ^14.18.0 || >=16.0.0} 1425 | 1426 | tapable@2.2.1: 1427 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1428 | engines: {node: '>=6'} 1429 | 1430 | text-table@0.2.0: 1431 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1432 | 1433 | to-regex-range@5.0.1: 1434 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1435 | engines: {node: '>=8.0'} 1436 | 1437 | ts-api-utils@1.3.0: 1438 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1439 | engines: {node: '>=16'} 1440 | peerDependencies: 1441 | typescript: '>=4.2.0' 1442 | 1443 | tsconfig-paths@3.15.0: 1444 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1445 | 1446 | tslib@2.6.3: 1447 | resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} 1448 | 1449 | type-check@0.4.0: 1450 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1451 | engines: {node: '>= 0.8.0'} 1452 | 1453 | type-fest@0.20.2: 1454 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1455 | engines: {node: '>=10'} 1456 | 1457 | typed-array-buffer@1.0.2: 1458 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1459 | engines: {node: '>= 0.4'} 1460 | 1461 | typed-array-byte-length@1.0.1: 1462 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1463 | engines: {node: '>= 0.4'} 1464 | 1465 | typed-array-byte-offset@1.0.2: 1466 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1467 | engines: {node: '>= 0.4'} 1468 | 1469 | typed-array-length@1.0.6: 1470 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1471 | engines: {node: '>= 0.4'} 1472 | 1473 | typescript@4.9.5: 1474 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 1475 | engines: {node: '>=4.2.0'} 1476 | hasBin: true 1477 | 1478 | typescript@5.5.4: 1479 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} 1480 | engines: {node: '>=14.17'} 1481 | hasBin: true 1482 | 1483 | unbox-primitive@1.0.2: 1484 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1485 | 1486 | undici-types@5.26.5: 1487 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1488 | 1489 | universalify@2.0.1: 1490 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1491 | engines: {node: '>= 10.0.0'} 1492 | 1493 | uri-js@4.4.1: 1494 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1495 | 1496 | vite-plugin-compression@0.5.1: 1497 | resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} 1498 | peerDependencies: 1499 | vite: '>=2.0.0' 1500 | 1501 | vite@5.3.4: 1502 | resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} 1503 | engines: {node: ^18.0.0 || >=20.0.0} 1504 | hasBin: true 1505 | peerDependencies: 1506 | '@types/node': ^18.0.0 || >=20.0.0 1507 | less: '*' 1508 | lightningcss: ^1.21.0 1509 | sass: '*' 1510 | stylus: '*' 1511 | sugarss: '*' 1512 | terser: ^5.4.0 1513 | peerDependenciesMeta: 1514 | '@types/node': 1515 | optional: true 1516 | less: 1517 | optional: true 1518 | lightningcss: 1519 | optional: true 1520 | sass: 1521 | optional: true 1522 | stylus: 1523 | optional: true 1524 | sugarss: 1525 | optional: true 1526 | terser: 1527 | optional: true 1528 | 1529 | which-boxed-primitive@1.0.2: 1530 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1531 | 1532 | which-typed-array@1.1.15: 1533 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1534 | engines: {node: '>= 0.4'} 1535 | 1536 | which@2.0.2: 1537 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1538 | engines: {node: '>= 8'} 1539 | hasBin: true 1540 | 1541 | word-wrap@1.2.5: 1542 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1543 | engines: {node: '>=0.10.0'} 1544 | 1545 | wrap-ansi@9.0.0: 1546 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1547 | engines: {node: '>=18'} 1548 | 1549 | wrappy@1.0.2: 1550 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1551 | 1552 | yaml@2.4.5: 1553 | resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} 1554 | engines: {node: '>= 14'} 1555 | hasBin: true 1556 | 1557 | yocto-queue@0.1.0: 1558 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1559 | engines: {node: '>=10'} 1560 | 1561 | snapshots: 1562 | 1563 | '@esbuild/aix-ppc64@0.21.5': 1564 | optional: true 1565 | 1566 | '@esbuild/android-arm64@0.21.5': 1567 | optional: true 1568 | 1569 | '@esbuild/android-arm@0.21.5': 1570 | optional: true 1571 | 1572 | '@esbuild/android-x64@0.21.5': 1573 | optional: true 1574 | 1575 | '@esbuild/darwin-arm64@0.21.5': 1576 | optional: true 1577 | 1578 | '@esbuild/darwin-x64@0.21.5': 1579 | optional: true 1580 | 1581 | '@esbuild/freebsd-arm64@0.21.5': 1582 | optional: true 1583 | 1584 | '@esbuild/freebsd-x64@0.21.5': 1585 | optional: true 1586 | 1587 | '@esbuild/linux-arm64@0.21.5': 1588 | optional: true 1589 | 1590 | '@esbuild/linux-arm@0.21.5': 1591 | optional: true 1592 | 1593 | '@esbuild/linux-ia32@0.21.5': 1594 | optional: true 1595 | 1596 | '@esbuild/linux-loong64@0.21.5': 1597 | optional: true 1598 | 1599 | '@esbuild/linux-mips64el@0.21.5': 1600 | optional: true 1601 | 1602 | '@esbuild/linux-ppc64@0.21.5': 1603 | optional: true 1604 | 1605 | '@esbuild/linux-riscv64@0.21.5': 1606 | optional: true 1607 | 1608 | '@esbuild/linux-s390x@0.21.5': 1609 | optional: true 1610 | 1611 | '@esbuild/linux-x64@0.21.5': 1612 | optional: true 1613 | 1614 | '@esbuild/netbsd-x64@0.21.5': 1615 | optional: true 1616 | 1617 | '@esbuild/openbsd-x64@0.21.5': 1618 | optional: true 1619 | 1620 | '@esbuild/sunos-x64@0.21.5': 1621 | optional: true 1622 | 1623 | '@esbuild/win32-arm64@0.21.5': 1624 | optional: true 1625 | 1626 | '@esbuild/win32-ia32@0.21.5': 1627 | optional: true 1628 | 1629 | '@esbuild/win32-x64@0.21.5': 1630 | optional: true 1631 | 1632 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': 1633 | dependencies: 1634 | eslint: 8.57.0 1635 | eslint-visitor-keys: 3.4.3 1636 | 1637 | '@eslint-community/regexpp@4.11.0': {} 1638 | 1639 | '@eslint/eslintrc@2.1.4': 1640 | dependencies: 1641 | ajv: 6.12.6 1642 | debug: 4.3.6 1643 | espree: 9.6.1 1644 | globals: 13.24.0 1645 | ignore: 5.3.1 1646 | import-fresh: 3.3.0 1647 | js-yaml: 4.1.0 1648 | minimatch: 3.1.2 1649 | strip-json-comments: 3.1.1 1650 | transitivePeerDependencies: 1651 | - supports-color 1652 | 1653 | '@eslint/js@8.57.0': {} 1654 | 1655 | '@formatjs/ecma402-abstract@1.11.4': 1656 | dependencies: 1657 | '@formatjs/intl-localematcher': 0.2.25 1658 | tslib: 2.6.3 1659 | 1660 | '@formatjs/fast-memoize@1.2.1': 1661 | dependencies: 1662 | tslib: 2.6.3 1663 | 1664 | '@formatjs/icu-messageformat-parser@2.1.0': 1665 | dependencies: 1666 | '@formatjs/ecma402-abstract': 1.11.4 1667 | '@formatjs/icu-skeleton-parser': 1.3.6 1668 | tslib: 2.6.3 1669 | 1670 | '@formatjs/icu-skeleton-parser@1.3.6': 1671 | dependencies: 1672 | '@formatjs/ecma402-abstract': 1.11.4 1673 | tslib: 2.6.3 1674 | 1675 | '@formatjs/intl-localematcher@0.2.25': 1676 | dependencies: 1677 | tslib: 2.6.3 1678 | 1679 | '@formatjs/intl-utils@3.8.4': 1680 | dependencies: 1681 | emojis-list: 3.0.0 1682 | 1683 | '@humanwhocodes/config-array@0.11.14': 1684 | dependencies: 1685 | '@humanwhocodes/object-schema': 2.0.3 1686 | debug: 4.3.6 1687 | minimatch: 3.1.2 1688 | transitivePeerDependencies: 1689 | - supports-color 1690 | 1691 | '@humanwhocodes/module-importer@1.0.1': {} 1692 | 1693 | '@humanwhocodes/object-schema@2.0.3': {} 1694 | 1695 | '@lit-labs/ssr-dom-shim@1.2.0': {} 1696 | 1697 | '@lit/reactive-element@1.6.3': 1698 | dependencies: 1699 | '@lit-labs/ssr-dom-shim': 1.2.0 1700 | 1701 | '@nodelib/fs.scandir@2.1.5': 1702 | dependencies: 1703 | '@nodelib/fs.stat': 2.0.5 1704 | run-parallel: 1.2.0 1705 | 1706 | '@nodelib/fs.stat@2.0.5': {} 1707 | 1708 | '@nodelib/fs.walk@1.2.8': 1709 | dependencies: 1710 | '@nodelib/fs.scandir': 2.1.5 1711 | fastq: 1.17.1 1712 | 1713 | '@pkgr/core@0.1.1': {} 1714 | 1715 | '@rollup/rollup-android-arm-eabi@4.19.1': 1716 | optional: true 1717 | 1718 | '@rollup/rollup-android-arm64@4.19.1': 1719 | optional: true 1720 | 1721 | '@rollup/rollup-darwin-arm64@4.19.1': 1722 | optional: true 1723 | 1724 | '@rollup/rollup-darwin-x64@4.19.1': 1725 | optional: true 1726 | 1727 | '@rollup/rollup-linux-arm-gnueabihf@4.19.1': 1728 | optional: true 1729 | 1730 | '@rollup/rollup-linux-arm-musleabihf@4.19.1': 1731 | optional: true 1732 | 1733 | '@rollup/rollup-linux-arm64-gnu@4.19.1': 1734 | optional: true 1735 | 1736 | '@rollup/rollup-linux-arm64-musl@4.19.1': 1737 | optional: true 1738 | 1739 | '@rollup/rollup-linux-powerpc64le-gnu@4.19.1': 1740 | optional: true 1741 | 1742 | '@rollup/rollup-linux-riscv64-gnu@4.19.1': 1743 | optional: true 1744 | 1745 | '@rollup/rollup-linux-s390x-gnu@4.19.1': 1746 | optional: true 1747 | 1748 | '@rollup/rollup-linux-x64-gnu@4.19.1': 1749 | optional: true 1750 | 1751 | '@rollup/rollup-linux-x64-musl@4.19.1': 1752 | optional: true 1753 | 1754 | '@rollup/rollup-win32-arm64-msvc@4.19.1': 1755 | optional: true 1756 | 1757 | '@rollup/rollup-win32-ia32-msvc@4.19.1': 1758 | optional: true 1759 | 1760 | '@rollup/rollup-win32-x64-msvc@4.19.1': 1761 | optional: true 1762 | 1763 | '@types/estree@1.0.5': {} 1764 | 1765 | '@types/json5@0.0.29': {} 1766 | 1767 | '@types/node@20.14.12': 1768 | dependencies: 1769 | undici-types: 5.26.5 1770 | 1771 | '@types/trusted-types@2.0.7': {} 1772 | 1773 | '@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': 1774 | dependencies: 1775 | '@eslint-community/regexpp': 4.11.0 1776 | '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) 1777 | '@typescript-eslint/scope-manager': 7.17.0 1778 | '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) 1779 | '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) 1780 | '@typescript-eslint/visitor-keys': 7.17.0 1781 | eslint: 8.57.0 1782 | graphemer: 1.4.0 1783 | ignore: 5.3.1 1784 | natural-compare: 1.4.0 1785 | ts-api-utils: 1.3.0(typescript@5.5.4) 1786 | optionalDependencies: 1787 | typescript: 5.5.4 1788 | transitivePeerDependencies: 1789 | - supports-color 1790 | 1791 | '@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4)': 1792 | dependencies: 1793 | '@typescript-eslint/scope-manager': 7.17.0 1794 | '@typescript-eslint/types': 7.17.0 1795 | '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) 1796 | '@typescript-eslint/visitor-keys': 7.17.0 1797 | debug: 4.3.6 1798 | eslint: 8.57.0 1799 | optionalDependencies: 1800 | typescript: 5.5.4 1801 | transitivePeerDependencies: 1802 | - supports-color 1803 | 1804 | '@typescript-eslint/scope-manager@7.17.0': 1805 | dependencies: 1806 | '@typescript-eslint/types': 7.17.0 1807 | '@typescript-eslint/visitor-keys': 7.17.0 1808 | 1809 | '@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': 1810 | dependencies: 1811 | '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) 1812 | '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) 1813 | debug: 4.3.6 1814 | eslint: 8.57.0 1815 | ts-api-utils: 1.3.0(typescript@5.5.4) 1816 | optionalDependencies: 1817 | typescript: 5.5.4 1818 | transitivePeerDependencies: 1819 | - supports-color 1820 | 1821 | '@typescript-eslint/types@7.17.0': {} 1822 | 1823 | '@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4)': 1824 | dependencies: 1825 | '@typescript-eslint/types': 7.17.0 1826 | '@typescript-eslint/visitor-keys': 7.17.0 1827 | debug: 4.3.6 1828 | globby: 11.1.0 1829 | is-glob: 4.0.3 1830 | minimatch: 9.0.5 1831 | semver: 7.6.3 1832 | ts-api-utils: 1.3.0(typescript@5.5.4) 1833 | optionalDependencies: 1834 | typescript: 5.5.4 1835 | transitivePeerDependencies: 1836 | - supports-color 1837 | 1838 | '@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)': 1839 | dependencies: 1840 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 1841 | '@typescript-eslint/scope-manager': 7.17.0 1842 | '@typescript-eslint/types': 7.17.0 1843 | '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) 1844 | eslint: 8.57.0 1845 | transitivePeerDependencies: 1846 | - supports-color 1847 | - typescript 1848 | 1849 | '@typescript-eslint/visitor-keys@7.17.0': 1850 | dependencies: 1851 | '@typescript-eslint/types': 7.17.0 1852 | eslint-visitor-keys: 3.4.3 1853 | 1854 | '@ungap/structured-clone@1.2.0': {} 1855 | 1856 | acorn-jsx@5.3.2(acorn@8.12.1): 1857 | dependencies: 1858 | acorn: 8.12.1 1859 | 1860 | acorn@8.12.1: {} 1861 | 1862 | ajv@6.12.6: 1863 | dependencies: 1864 | fast-deep-equal: 3.1.3 1865 | fast-json-stable-stringify: 2.1.0 1866 | json-schema-traverse: 0.4.1 1867 | uri-js: 4.4.1 1868 | 1869 | ansi-escapes@7.0.0: 1870 | dependencies: 1871 | environment: 1.1.0 1872 | 1873 | ansi-regex@5.0.1: {} 1874 | 1875 | ansi-regex@6.0.1: {} 1876 | 1877 | ansi-styles@4.3.0: 1878 | dependencies: 1879 | color-convert: 2.0.1 1880 | 1881 | ansi-styles@6.2.1: {} 1882 | 1883 | argparse@2.0.1: {} 1884 | 1885 | array-buffer-byte-length@1.0.1: 1886 | dependencies: 1887 | call-bind: 1.0.7 1888 | is-array-buffer: 3.0.4 1889 | 1890 | array-includes@3.1.8: 1891 | dependencies: 1892 | call-bind: 1.0.7 1893 | define-properties: 1.2.1 1894 | es-abstract: 1.23.3 1895 | es-object-atoms: 1.0.0 1896 | get-intrinsic: 1.2.4 1897 | is-string: 1.0.7 1898 | 1899 | array-union@2.1.0: {} 1900 | 1901 | array.prototype.findlastindex@1.2.5: 1902 | dependencies: 1903 | call-bind: 1.0.7 1904 | define-properties: 1.2.1 1905 | es-abstract: 1.23.3 1906 | es-errors: 1.3.0 1907 | es-object-atoms: 1.0.0 1908 | es-shim-unscopables: 1.0.2 1909 | 1910 | array.prototype.flat@1.3.2: 1911 | dependencies: 1912 | call-bind: 1.0.7 1913 | define-properties: 1.2.1 1914 | es-abstract: 1.23.3 1915 | es-shim-unscopables: 1.0.2 1916 | 1917 | array.prototype.flatmap@1.3.2: 1918 | dependencies: 1919 | call-bind: 1.0.7 1920 | define-properties: 1.2.1 1921 | es-abstract: 1.23.3 1922 | es-shim-unscopables: 1.0.2 1923 | 1924 | arraybuffer.prototype.slice@1.0.3: 1925 | dependencies: 1926 | array-buffer-byte-length: 1.0.1 1927 | call-bind: 1.0.7 1928 | define-properties: 1.2.1 1929 | es-abstract: 1.23.3 1930 | es-errors: 1.3.0 1931 | get-intrinsic: 1.2.4 1932 | is-array-buffer: 3.0.4 1933 | is-shared-array-buffer: 1.0.3 1934 | 1935 | available-typed-arrays@1.0.7: 1936 | dependencies: 1937 | possible-typed-array-names: 1.0.0 1938 | 1939 | balanced-match@1.0.2: {} 1940 | 1941 | brace-expansion@1.1.11: 1942 | dependencies: 1943 | balanced-match: 1.0.2 1944 | concat-map: 0.0.1 1945 | 1946 | brace-expansion@2.0.1: 1947 | dependencies: 1948 | balanced-match: 1.0.2 1949 | 1950 | braces@3.0.3: 1951 | dependencies: 1952 | fill-range: 7.1.1 1953 | 1954 | call-bind@1.0.7: 1955 | dependencies: 1956 | es-define-property: 1.0.0 1957 | es-errors: 1.3.0 1958 | function-bind: 1.1.2 1959 | get-intrinsic: 1.2.4 1960 | set-function-length: 1.2.2 1961 | 1962 | callsites@3.1.0: {} 1963 | 1964 | card-tools@https://codeload.github.com/thomasloven/lovelace-card-tools/tar.gz/477f3d4: {} 1965 | 1966 | chalk@4.1.2: 1967 | dependencies: 1968 | ansi-styles: 4.3.0 1969 | supports-color: 7.2.0 1970 | 1971 | chalk@5.3.0: {} 1972 | 1973 | cli-cursor@5.0.0: 1974 | dependencies: 1975 | restore-cursor: 5.1.0 1976 | 1977 | cli-truncate@4.0.0: 1978 | dependencies: 1979 | slice-ansi: 5.0.0 1980 | string-width: 7.2.0 1981 | 1982 | color-convert@2.0.1: 1983 | dependencies: 1984 | color-name: 1.1.4 1985 | 1986 | color-name@1.1.4: {} 1987 | 1988 | colorette@2.0.20: {} 1989 | 1990 | commander@12.1.0: {} 1991 | 1992 | concat-map@0.0.1: {} 1993 | 1994 | cross-spawn@7.0.3: 1995 | dependencies: 1996 | path-key: 3.1.1 1997 | shebang-command: 2.0.0 1998 | which: 2.0.2 1999 | 2000 | custom-card-helpers@1.9.0: 2001 | dependencies: 2002 | '@formatjs/intl-utils': 3.8.4 2003 | home-assistant-js-websocket: 6.1.1 2004 | intl-messageformat: 9.13.0 2005 | lit: 2.8.0 2006 | rollup: 2.79.1 2007 | superstruct: 0.15.5 2008 | typescript: 4.9.5 2009 | 2010 | data-view-buffer@1.0.1: 2011 | dependencies: 2012 | call-bind: 1.0.7 2013 | es-errors: 1.3.0 2014 | is-data-view: 1.0.1 2015 | 2016 | data-view-byte-length@1.0.1: 2017 | dependencies: 2018 | call-bind: 1.0.7 2019 | es-errors: 1.3.0 2020 | is-data-view: 1.0.1 2021 | 2022 | data-view-byte-offset@1.0.0: 2023 | dependencies: 2024 | call-bind: 1.0.7 2025 | es-errors: 1.3.0 2026 | is-data-view: 1.0.1 2027 | 2028 | debug@3.2.7: 2029 | dependencies: 2030 | ms: 2.1.3 2031 | 2032 | debug@4.3.6: 2033 | dependencies: 2034 | ms: 2.1.2 2035 | 2036 | deep-is@0.1.4: {} 2037 | 2038 | define-data-property@1.1.4: 2039 | dependencies: 2040 | es-define-property: 1.0.0 2041 | es-errors: 1.3.0 2042 | gopd: 1.0.1 2043 | 2044 | define-properties@1.2.1: 2045 | dependencies: 2046 | define-data-property: 1.1.4 2047 | has-property-descriptors: 1.0.2 2048 | object-keys: 1.1.1 2049 | 2050 | dir-glob@3.0.1: 2051 | dependencies: 2052 | path-type: 4.0.0 2053 | 2054 | doctrine@2.1.0: 2055 | dependencies: 2056 | esutils: 2.0.3 2057 | 2058 | doctrine@3.0.0: 2059 | dependencies: 2060 | esutils: 2.0.3 2061 | 2062 | emoji-regex@10.3.0: {} 2063 | 2064 | emojis-list@3.0.0: {} 2065 | 2066 | enhanced-resolve@5.17.1: 2067 | dependencies: 2068 | graceful-fs: 4.2.11 2069 | tapable: 2.2.1 2070 | 2071 | environment@1.1.0: {} 2072 | 2073 | es-abstract@1.23.3: 2074 | dependencies: 2075 | array-buffer-byte-length: 1.0.1 2076 | arraybuffer.prototype.slice: 1.0.3 2077 | available-typed-arrays: 1.0.7 2078 | call-bind: 1.0.7 2079 | data-view-buffer: 1.0.1 2080 | data-view-byte-length: 1.0.1 2081 | data-view-byte-offset: 1.0.0 2082 | es-define-property: 1.0.0 2083 | es-errors: 1.3.0 2084 | es-object-atoms: 1.0.0 2085 | es-set-tostringtag: 2.0.3 2086 | es-to-primitive: 1.2.1 2087 | function.prototype.name: 1.1.6 2088 | get-intrinsic: 1.2.4 2089 | get-symbol-description: 1.0.2 2090 | globalthis: 1.0.4 2091 | gopd: 1.0.1 2092 | has-property-descriptors: 1.0.2 2093 | has-proto: 1.0.3 2094 | has-symbols: 1.0.3 2095 | hasown: 2.0.2 2096 | internal-slot: 1.0.7 2097 | is-array-buffer: 3.0.4 2098 | is-callable: 1.2.7 2099 | is-data-view: 1.0.1 2100 | is-negative-zero: 2.0.3 2101 | is-regex: 1.1.4 2102 | is-shared-array-buffer: 1.0.3 2103 | is-string: 1.0.7 2104 | is-typed-array: 1.1.13 2105 | is-weakref: 1.0.2 2106 | object-inspect: 1.13.2 2107 | object-keys: 1.1.1 2108 | object.assign: 4.1.5 2109 | regexp.prototype.flags: 1.5.2 2110 | safe-array-concat: 1.1.2 2111 | safe-regex-test: 1.0.3 2112 | string.prototype.trim: 1.2.9 2113 | string.prototype.trimend: 1.0.8 2114 | string.prototype.trimstart: 1.0.8 2115 | typed-array-buffer: 1.0.2 2116 | typed-array-byte-length: 1.0.1 2117 | typed-array-byte-offset: 1.0.2 2118 | typed-array-length: 1.0.6 2119 | unbox-primitive: 1.0.2 2120 | which-typed-array: 1.1.15 2121 | 2122 | es-define-property@1.0.0: 2123 | dependencies: 2124 | get-intrinsic: 1.2.4 2125 | 2126 | es-errors@1.3.0: {} 2127 | 2128 | es-object-atoms@1.0.0: 2129 | dependencies: 2130 | es-errors: 1.3.0 2131 | 2132 | es-set-tostringtag@2.0.3: 2133 | dependencies: 2134 | get-intrinsic: 1.2.4 2135 | has-tostringtag: 1.0.2 2136 | hasown: 2.0.2 2137 | 2138 | es-shim-unscopables@1.0.2: 2139 | dependencies: 2140 | hasown: 2.0.2 2141 | 2142 | es-to-primitive@1.2.1: 2143 | dependencies: 2144 | is-callable: 1.2.7 2145 | is-date-object: 1.0.5 2146 | is-symbol: 1.0.4 2147 | 2148 | esbuild@0.21.5: 2149 | optionalDependencies: 2150 | '@esbuild/aix-ppc64': 0.21.5 2151 | '@esbuild/android-arm': 0.21.5 2152 | '@esbuild/android-arm64': 0.21.5 2153 | '@esbuild/android-x64': 0.21.5 2154 | '@esbuild/darwin-arm64': 0.21.5 2155 | '@esbuild/darwin-x64': 0.21.5 2156 | '@esbuild/freebsd-arm64': 0.21.5 2157 | '@esbuild/freebsd-x64': 0.21.5 2158 | '@esbuild/linux-arm': 0.21.5 2159 | '@esbuild/linux-arm64': 0.21.5 2160 | '@esbuild/linux-ia32': 0.21.5 2161 | '@esbuild/linux-loong64': 0.21.5 2162 | '@esbuild/linux-mips64el': 0.21.5 2163 | '@esbuild/linux-ppc64': 0.21.5 2164 | '@esbuild/linux-riscv64': 0.21.5 2165 | '@esbuild/linux-s390x': 0.21.5 2166 | '@esbuild/linux-x64': 0.21.5 2167 | '@esbuild/netbsd-x64': 0.21.5 2168 | '@esbuild/openbsd-x64': 0.21.5 2169 | '@esbuild/sunos-x64': 0.21.5 2170 | '@esbuild/win32-arm64': 0.21.5 2171 | '@esbuild/win32-ia32': 0.21.5 2172 | '@esbuild/win32-x64': 0.21.5 2173 | 2174 | escape-string-regexp@4.0.0: {} 2175 | 2176 | eslint-config-prettier@9.1.0(eslint@8.57.0): 2177 | dependencies: 2178 | eslint: 8.57.0 2179 | 2180 | eslint-import-resolver-node@0.3.9: 2181 | dependencies: 2182 | debug: 3.2.7 2183 | is-core-module: 2.15.0 2184 | resolve: 1.22.8 2185 | transitivePeerDependencies: 2186 | - supports-color 2187 | 2188 | eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0): 2189 | dependencies: 2190 | debug: 4.3.6 2191 | enhanced-resolve: 5.17.1 2192 | eslint: 8.57.0 2193 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) 2194 | eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) 2195 | fast-glob: 3.3.2 2196 | get-tsconfig: 4.7.6 2197 | is-core-module: 2.15.0 2198 | is-glob: 4.0.3 2199 | transitivePeerDependencies: 2200 | - '@typescript-eslint/parser' 2201 | - eslint-import-resolver-node 2202 | - eslint-import-resolver-webpack 2203 | - supports-color 2204 | 2205 | eslint-module-utils@2.8.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): 2206 | dependencies: 2207 | debug: 3.2.7 2208 | optionalDependencies: 2209 | '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) 2210 | eslint: 8.57.0 2211 | eslint-import-resolver-node: 0.3.9 2212 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0) 2213 | transitivePeerDependencies: 2214 | - supports-color 2215 | 2216 | eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): 2217 | dependencies: 2218 | array-includes: 3.1.8 2219 | array.prototype.findlastindex: 1.2.5 2220 | array.prototype.flat: 1.3.2 2221 | array.prototype.flatmap: 1.3.2 2222 | debug: 3.2.7 2223 | doctrine: 2.1.0 2224 | eslint: 8.57.0 2225 | eslint-import-resolver-node: 0.3.9 2226 | eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) 2227 | hasown: 2.0.2 2228 | is-core-module: 2.15.0 2229 | is-glob: 4.0.3 2230 | minimatch: 3.1.2 2231 | object.fromentries: 2.0.8 2232 | object.groupby: 1.0.3 2233 | object.values: 1.2.0 2234 | semver: 6.3.1 2235 | tsconfig-paths: 3.15.0 2236 | optionalDependencies: 2237 | '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) 2238 | transitivePeerDependencies: 2239 | - eslint-import-resolver-typescript 2240 | - eslint-import-resolver-webpack 2241 | - supports-color 2242 | 2243 | eslint-plugin-only-warn@1.1.0: {} 2244 | 2245 | eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): 2246 | dependencies: 2247 | eslint: 8.57.0 2248 | prettier: 3.3.3 2249 | prettier-linter-helpers: 1.0.0 2250 | synckit: 0.9.1 2251 | optionalDependencies: 2252 | eslint-config-prettier: 9.1.0(eslint@8.57.0) 2253 | 2254 | eslint-scope@7.2.2: 2255 | dependencies: 2256 | esrecurse: 4.3.0 2257 | estraverse: 5.3.0 2258 | 2259 | eslint-visitor-keys@3.4.3: {} 2260 | 2261 | eslint@8.57.0: 2262 | dependencies: 2263 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 2264 | '@eslint-community/regexpp': 4.11.0 2265 | '@eslint/eslintrc': 2.1.4 2266 | '@eslint/js': 8.57.0 2267 | '@humanwhocodes/config-array': 0.11.14 2268 | '@humanwhocodes/module-importer': 1.0.1 2269 | '@nodelib/fs.walk': 1.2.8 2270 | '@ungap/structured-clone': 1.2.0 2271 | ajv: 6.12.6 2272 | chalk: 4.1.2 2273 | cross-spawn: 7.0.3 2274 | debug: 4.3.6 2275 | doctrine: 3.0.0 2276 | escape-string-regexp: 4.0.0 2277 | eslint-scope: 7.2.2 2278 | eslint-visitor-keys: 3.4.3 2279 | espree: 9.6.1 2280 | esquery: 1.6.0 2281 | esutils: 2.0.3 2282 | fast-deep-equal: 3.1.3 2283 | file-entry-cache: 6.0.1 2284 | find-up: 5.0.0 2285 | glob-parent: 6.0.2 2286 | globals: 13.24.0 2287 | graphemer: 1.4.0 2288 | ignore: 5.3.1 2289 | imurmurhash: 0.1.4 2290 | is-glob: 4.0.3 2291 | is-path-inside: 3.0.3 2292 | js-yaml: 4.1.0 2293 | json-stable-stringify-without-jsonify: 1.0.1 2294 | levn: 0.4.1 2295 | lodash.merge: 4.6.2 2296 | minimatch: 3.1.2 2297 | natural-compare: 1.4.0 2298 | optionator: 0.9.4 2299 | strip-ansi: 6.0.1 2300 | text-table: 0.2.0 2301 | transitivePeerDependencies: 2302 | - supports-color 2303 | 2304 | espree@9.6.1: 2305 | dependencies: 2306 | acorn: 8.12.1 2307 | acorn-jsx: 5.3.2(acorn@8.12.1) 2308 | eslint-visitor-keys: 3.4.3 2309 | 2310 | esquery@1.6.0: 2311 | dependencies: 2312 | estraverse: 5.3.0 2313 | 2314 | esrecurse@4.3.0: 2315 | dependencies: 2316 | estraverse: 5.3.0 2317 | 2318 | estraverse@5.3.0: {} 2319 | 2320 | esutils@2.0.3: {} 2321 | 2322 | eventemitter3@5.0.1: {} 2323 | 2324 | execa@8.0.1: 2325 | dependencies: 2326 | cross-spawn: 7.0.3 2327 | get-stream: 8.0.1 2328 | human-signals: 5.0.0 2329 | is-stream: 3.0.0 2330 | merge-stream: 2.0.0 2331 | npm-run-path: 5.3.0 2332 | onetime: 6.0.0 2333 | signal-exit: 4.1.0 2334 | strip-final-newline: 3.0.0 2335 | 2336 | fast-deep-equal@3.1.3: {} 2337 | 2338 | fast-diff@1.3.0: {} 2339 | 2340 | fast-glob@3.3.2: 2341 | dependencies: 2342 | '@nodelib/fs.stat': 2.0.5 2343 | '@nodelib/fs.walk': 1.2.8 2344 | glob-parent: 5.1.2 2345 | merge2: 1.4.1 2346 | micromatch: 4.0.7 2347 | 2348 | fast-json-stable-stringify@2.1.0: {} 2349 | 2350 | fast-levenshtein@2.0.6: {} 2351 | 2352 | fastq@1.17.1: 2353 | dependencies: 2354 | reusify: 1.0.4 2355 | 2356 | file-entry-cache@6.0.1: 2357 | dependencies: 2358 | flat-cache: 3.2.0 2359 | 2360 | fill-range@7.1.1: 2361 | dependencies: 2362 | to-regex-range: 5.0.1 2363 | 2364 | find-up@5.0.0: 2365 | dependencies: 2366 | locate-path: 6.0.0 2367 | path-exists: 4.0.0 2368 | 2369 | flat-cache@3.2.0: 2370 | dependencies: 2371 | flatted: 3.3.1 2372 | keyv: 4.5.4 2373 | rimraf: 3.0.2 2374 | 2375 | flatted@3.3.1: {} 2376 | 2377 | for-each@0.3.3: 2378 | dependencies: 2379 | is-callable: 1.2.7 2380 | 2381 | fs-extra@10.1.0: 2382 | dependencies: 2383 | graceful-fs: 4.2.11 2384 | jsonfile: 6.1.0 2385 | universalify: 2.0.1 2386 | 2387 | fs.realpath@1.0.0: {} 2388 | 2389 | fsevents@2.3.3: 2390 | optional: true 2391 | 2392 | function-bind@1.1.2: {} 2393 | 2394 | function.prototype.name@1.1.6: 2395 | dependencies: 2396 | call-bind: 1.0.7 2397 | define-properties: 1.2.1 2398 | es-abstract: 1.23.3 2399 | functions-have-names: 1.2.3 2400 | 2401 | functions-have-names@1.2.3: {} 2402 | 2403 | get-east-asian-width@1.2.0: {} 2404 | 2405 | get-intrinsic@1.2.4: 2406 | dependencies: 2407 | es-errors: 1.3.0 2408 | function-bind: 1.1.2 2409 | has-proto: 1.0.3 2410 | has-symbols: 1.0.3 2411 | hasown: 2.0.2 2412 | 2413 | get-stream@8.0.1: {} 2414 | 2415 | get-symbol-description@1.0.2: 2416 | dependencies: 2417 | call-bind: 1.0.7 2418 | es-errors: 1.3.0 2419 | get-intrinsic: 1.2.4 2420 | 2421 | get-tsconfig@4.7.6: 2422 | dependencies: 2423 | resolve-pkg-maps: 1.0.0 2424 | 2425 | glob-parent@5.1.2: 2426 | dependencies: 2427 | is-glob: 4.0.3 2428 | 2429 | glob-parent@6.0.2: 2430 | dependencies: 2431 | is-glob: 4.0.3 2432 | 2433 | glob@7.2.3: 2434 | dependencies: 2435 | fs.realpath: 1.0.0 2436 | inflight: 1.0.6 2437 | inherits: 2.0.4 2438 | minimatch: 3.1.2 2439 | once: 1.4.0 2440 | path-is-absolute: 1.0.1 2441 | 2442 | globals@13.24.0: 2443 | dependencies: 2444 | type-fest: 0.20.2 2445 | 2446 | globalthis@1.0.4: 2447 | dependencies: 2448 | define-properties: 1.2.1 2449 | gopd: 1.0.1 2450 | 2451 | globby@11.1.0: 2452 | dependencies: 2453 | array-union: 2.1.0 2454 | dir-glob: 3.0.1 2455 | fast-glob: 3.3.2 2456 | ignore: 5.3.1 2457 | merge2: 1.4.1 2458 | slash: 3.0.0 2459 | 2460 | gopd@1.0.1: 2461 | dependencies: 2462 | get-intrinsic: 1.2.4 2463 | 2464 | graceful-fs@4.2.11: {} 2465 | 2466 | graphemer@1.4.0: {} 2467 | 2468 | has-bigints@1.0.2: {} 2469 | 2470 | has-flag@4.0.0: {} 2471 | 2472 | has-property-descriptors@1.0.2: 2473 | dependencies: 2474 | es-define-property: 1.0.0 2475 | 2476 | has-proto@1.0.3: {} 2477 | 2478 | has-symbols@1.0.3: {} 2479 | 2480 | has-tostringtag@1.0.2: 2481 | dependencies: 2482 | has-symbols: 1.0.3 2483 | 2484 | hasown@2.0.2: 2485 | dependencies: 2486 | function-bind: 1.1.2 2487 | 2488 | home-assistant-js-websocket@6.1.1: {} 2489 | 2490 | home-assistant-js-websocket@9.4.0: {} 2491 | 2492 | human-signals@5.0.0: {} 2493 | 2494 | husky@9.1.1: {} 2495 | 2496 | ignore@5.3.1: {} 2497 | 2498 | import-fresh@3.3.0: 2499 | dependencies: 2500 | parent-module: 1.0.1 2501 | resolve-from: 4.0.0 2502 | 2503 | imurmurhash@0.1.4: {} 2504 | 2505 | inflight@1.0.6: 2506 | dependencies: 2507 | once: 1.4.0 2508 | wrappy: 1.0.2 2509 | 2510 | inherits@2.0.4: {} 2511 | 2512 | internal-slot@1.0.7: 2513 | dependencies: 2514 | es-errors: 1.3.0 2515 | hasown: 2.0.2 2516 | side-channel: 1.0.6 2517 | 2518 | intl-messageformat@9.13.0: 2519 | dependencies: 2520 | '@formatjs/ecma402-abstract': 1.11.4 2521 | '@formatjs/fast-memoize': 1.2.1 2522 | '@formatjs/icu-messageformat-parser': 2.1.0 2523 | tslib: 2.6.3 2524 | 2525 | is-array-buffer@3.0.4: 2526 | dependencies: 2527 | call-bind: 1.0.7 2528 | get-intrinsic: 1.2.4 2529 | 2530 | is-bigint@1.0.4: 2531 | dependencies: 2532 | has-bigints: 1.0.2 2533 | 2534 | is-boolean-object@1.1.2: 2535 | dependencies: 2536 | call-bind: 1.0.7 2537 | has-tostringtag: 1.0.2 2538 | 2539 | is-callable@1.2.7: {} 2540 | 2541 | is-core-module@2.15.0: 2542 | dependencies: 2543 | hasown: 2.0.2 2544 | 2545 | is-data-view@1.0.1: 2546 | dependencies: 2547 | is-typed-array: 1.1.13 2548 | 2549 | is-date-object@1.0.5: 2550 | dependencies: 2551 | has-tostringtag: 1.0.2 2552 | 2553 | is-extglob@2.1.1: {} 2554 | 2555 | is-fullwidth-code-point@4.0.0: {} 2556 | 2557 | is-fullwidth-code-point@5.0.0: 2558 | dependencies: 2559 | get-east-asian-width: 1.2.0 2560 | 2561 | is-glob@4.0.3: 2562 | dependencies: 2563 | is-extglob: 2.1.1 2564 | 2565 | is-negative-zero@2.0.3: {} 2566 | 2567 | is-number-object@1.0.7: 2568 | dependencies: 2569 | has-tostringtag: 1.0.2 2570 | 2571 | is-number@7.0.0: {} 2572 | 2573 | is-path-inside@3.0.3: {} 2574 | 2575 | is-regex@1.1.4: 2576 | dependencies: 2577 | call-bind: 1.0.7 2578 | has-tostringtag: 1.0.2 2579 | 2580 | is-shared-array-buffer@1.0.3: 2581 | dependencies: 2582 | call-bind: 1.0.7 2583 | 2584 | is-stream@3.0.0: {} 2585 | 2586 | is-string@1.0.7: 2587 | dependencies: 2588 | has-tostringtag: 1.0.2 2589 | 2590 | is-symbol@1.0.4: 2591 | dependencies: 2592 | has-symbols: 1.0.3 2593 | 2594 | is-typed-array@1.1.13: 2595 | dependencies: 2596 | which-typed-array: 1.1.15 2597 | 2598 | is-weakref@1.0.2: 2599 | dependencies: 2600 | call-bind: 1.0.7 2601 | 2602 | isarray@2.0.5: {} 2603 | 2604 | isexe@2.0.0: {} 2605 | 2606 | js-yaml@4.1.0: 2607 | dependencies: 2608 | argparse: 2.0.1 2609 | 2610 | json-buffer@3.0.1: {} 2611 | 2612 | json-schema-traverse@0.4.1: {} 2613 | 2614 | json-stable-stringify-without-jsonify@1.0.1: {} 2615 | 2616 | json5@1.0.2: 2617 | dependencies: 2618 | minimist: 1.2.8 2619 | 2620 | jsonfile@6.1.0: 2621 | dependencies: 2622 | universalify: 2.0.1 2623 | optionalDependencies: 2624 | graceful-fs: 4.2.11 2625 | 2626 | keyv@4.5.4: 2627 | dependencies: 2628 | json-buffer: 3.0.1 2629 | 2630 | levn@0.4.1: 2631 | dependencies: 2632 | prelude-ls: 1.2.1 2633 | type-check: 0.4.0 2634 | 2635 | lilconfig@3.1.2: {} 2636 | 2637 | lint-staged@15.2.7: 2638 | dependencies: 2639 | chalk: 5.3.0 2640 | commander: 12.1.0 2641 | debug: 4.3.6 2642 | execa: 8.0.1 2643 | lilconfig: 3.1.2 2644 | listr2: 8.2.4 2645 | micromatch: 4.0.7 2646 | pidtree: 0.6.0 2647 | string-argv: 0.3.2 2648 | yaml: 2.4.5 2649 | transitivePeerDependencies: 2650 | - supports-color 2651 | 2652 | listr2@8.2.4: 2653 | dependencies: 2654 | cli-truncate: 4.0.0 2655 | colorette: 2.0.20 2656 | eventemitter3: 5.0.1 2657 | log-update: 6.1.0 2658 | rfdc: 1.4.1 2659 | wrap-ansi: 9.0.0 2660 | 2661 | lit-element@3.3.3: 2662 | dependencies: 2663 | '@lit-labs/ssr-dom-shim': 1.2.0 2664 | '@lit/reactive-element': 1.6.3 2665 | lit-html: 2.8.0 2666 | 2667 | lit-html@2.8.0: 2668 | dependencies: 2669 | '@types/trusted-types': 2.0.7 2670 | 2671 | lit@2.8.0: 2672 | dependencies: 2673 | '@lit/reactive-element': 1.6.3 2674 | lit-element: 3.3.3 2675 | lit-html: 2.8.0 2676 | 2677 | locate-path@6.0.0: 2678 | dependencies: 2679 | p-locate: 5.0.0 2680 | 2681 | lodash.merge@4.6.2: {} 2682 | 2683 | log-update@6.1.0: 2684 | dependencies: 2685 | ansi-escapes: 7.0.0 2686 | cli-cursor: 5.0.0 2687 | slice-ansi: 7.1.0 2688 | strip-ansi: 7.1.0 2689 | wrap-ansi: 9.0.0 2690 | 2691 | merge-stream@2.0.0: {} 2692 | 2693 | merge2@1.4.1: {} 2694 | 2695 | micromatch@4.0.7: 2696 | dependencies: 2697 | braces: 3.0.3 2698 | picomatch: 2.3.1 2699 | 2700 | mimic-fn@4.0.0: {} 2701 | 2702 | mimic-function@5.0.1: {} 2703 | 2704 | minimatch@3.1.2: 2705 | dependencies: 2706 | brace-expansion: 1.1.11 2707 | 2708 | minimatch@9.0.5: 2709 | dependencies: 2710 | brace-expansion: 2.0.1 2711 | 2712 | minimist@1.2.8: {} 2713 | 2714 | ms@2.1.2: {} 2715 | 2716 | ms@2.1.3: {} 2717 | 2718 | nanoid@3.3.7: {} 2719 | 2720 | natural-compare@1.4.0: {} 2721 | 2722 | npm-run-path@5.3.0: 2723 | dependencies: 2724 | path-key: 4.0.0 2725 | 2726 | object-inspect@1.13.2: {} 2727 | 2728 | object-keys@1.1.1: {} 2729 | 2730 | object.assign@4.1.5: 2731 | dependencies: 2732 | call-bind: 1.0.7 2733 | define-properties: 1.2.1 2734 | has-symbols: 1.0.3 2735 | object-keys: 1.1.1 2736 | 2737 | object.fromentries@2.0.8: 2738 | dependencies: 2739 | call-bind: 1.0.7 2740 | define-properties: 1.2.1 2741 | es-abstract: 1.23.3 2742 | es-object-atoms: 1.0.0 2743 | 2744 | object.groupby@1.0.3: 2745 | dependencies: 2746 | call-bind: 1.0.7 2747 | define-properties: 1.2.1 2748 | es-abstract: 1.23.3 2749 | 2750 | object.values@1.2.0: 2751 | dependencies: 2752 | call-bind: 1.0.7 2753 | define-properties: 1.2.1 2754 | es-object-atoms: 1.0.0 2755 | 2756 | once@1.4.0: 2757 | dependencies: 2758 | wrappy: 1.0.2 2759 | 2760 | onetime@6.0.0: 2761 | dependencies: 2762 | mimic-fn: 4.0.0 2763 | 2764 | onetime@7.0.0: 2765 | dependencies: 2766 | mimic-function: 5.0.1 2767 | 2768 | optionator@0.9.4: 2769 | dependencies: 2770 | deep-is: 0.1.4 2771 | fast-levenshtein: 2.0.6 2772 | levn: 0.4.1 2773 | prelude-ls: 1.2.1 2774 | type-check: 0.4.0 2775 | word-wrap: 1.2.5 2776 | 2777 | p-limit@3.1.0: 2778 | dependencies: 2779 | yocto-queue: 0.1.0 2780 | 2781 | p-locate@5.0.0: 2782 | dependencies: 2783 | p-limit: 3.1.0 2784 | 2785 | parent-module@1.0.1: 2786 | dependencies: 2787 | callsites: 3.1.0 2788 | 2789 | path-exists@4.0.0: {} 2790 | 2791 | path-is-absolute@1.0.1: {} 2792 | 2793 | path-key@3.1.1: {} 2794 | 2795 | path-key@4.0.0: {} 2796 | 2797 | path-parse@1.0.7: {} 2798 | 2799 | path-type@4.0.0: {} 2800 | 2801 | picocolors@1.0.1: {} 2802 | 2803 | picomatch@2.3.1: {} 2804 | 2805 | pidtree@0.6.0: {} 2806 | 2807 | possible-typed-array-names@1.0.0: {} 2808 | 2809 | postcss@8.4.40: 2810 | dependencies: 2811 | nanoid: 3.3.7 2812 | picocolors: 1.0.1 2813 | source-map-js: 1.2.0 2814 | 2815 | prelude-ls@1.2.1: {} 2816 | 2817 | prettier-linter-helpers@1.0.0: 2818 | dependencies: 2819 | fast-diff: 1.3.0 2820 | 2821 | prettier@3.3.3: {} 2822 | 2823 | punycode@2.3.1: {} 2824 | 2825 | queue-microtask@1.2.3: {} 2826 | 2827 | regexp.prototype.flags@1.5.2: 2828 | dependencies: 2829 | call-bind: 1.0.7 2830 | define-properties: 1.2.1 2831 | es-errors: 1.3.0 2832 | set-function-name: 2.0.2 2833 | 2834 | resolve-from@4.0.0: {} 2835 | 2836 | resolve-pkg-maps@1.0.0: {} 2837 | 2838 | resolve@1.22.8: 2839 | dependencies: 2840 | is-core-module: 2.15.0 2841 | path-parse: 1.0.7 2842 | supports-preserve-symlinks-flag: 1.0.0 2843 | 2844 | restore-cursor@5.1.0: 2845 | dependencies: 2846 | onetime: 7.0.0 2847 | signal-exit: 4.1.0 2848 | 2849 | reusify@1.0.4: {} 2850 | 2851 | rfdc@1.4.1: {} 2852 | 2853 | rimraf@3.0.2: 2854 | dependencies: 2855 | glob: 7.2.3 2856 | 2857 | rollup@2.79.1: 2858 | optionalDependencies: 2859 | fsevents: 2.3.3 2860 | 2861 | rollup@4.19.1: 2862 | dependencies: 2863 | '@types/estree': 1.0.5 2864 | optionalDependencies: 2865 | '@rollup/rollup-android-arm-eabi': 4.19.1 2866 | '@rollup/rollup-android-arm64': 4.19.1 2867 | '@rollup/rollup-darwin-arm64': 4.19.1 2868 | '@rollup/rollup-darwin-x64': 4.19.1 2869 | '@rollup/rollup-linux-arm-gnueabihf': 4.19.1 2870 | '@rollup/rollup-linux-arm-musleabihf': 4.19.1 2871 | '@rollup/rollup-linux-arm64-gnu': 4.19.1 2872 | '@rollup/rollup-linux-arm64-musl': 4.19.1 2873 | '@rollup/rollup-linux-powerpc64le-gnu': 4.19.1 2874 | '@rollup/rollup-linux-riscv64-gnu': 4.19.1 2875 | '@rollup/rollup-linux-s390x-gnu': 4.19.1 2876 | '@rollup/rollup-linux-x64-gnu': 4.19.1 2877 | '@rollup/rollup-linux-x64-musl': 4.19.1 2878 | '@rollup/rollup-win32-arm64-msvc': 4.19.1 2879 | '@rollup/rollup-win32-ia32-msvc': 4.19.1 2880 | '@rollup/rollup-win32-x64-msvc': 4.19.1 2881 | fsevents: 2.3.3 2882 | 2883 | run-parallel@1.2.0: 2884 | dependencies: 2885 | queue-microtask: 1.2.3 2886 | 2887 | safe-array-concat@1.1.2: 2888 | dependencies: 2889 | call-bind: 1.0.7 2890 | get-intrinsic: 1.2.4 2891 | has-symbols: 1.0.3 2892 | isarray: 2.0.5 2893 | 2894 | safe-regex-test@1.0.3: 2895 | dependencies: 2896 | call-bind: 1.0.7 2897 | es-errors: 1.3.0 2898 | is-regex: 1.1.4 2899 | 2900 | semver@6.3.1: {} 2901 | 2902 | semver@7.6.3: {} 2903 | 2904 | set-function-length@1.2.2: 2905 | dependencies: 2906 | define-data-property: 1.1.4 2907 | es-errors: 1.3.0 2908 | function-bind: 1.1.2 2909 | get-intrinsic: 1.2.4 2910 | gopd: 1.0.1 2911 | has-property-descriptors: 1.0.2 2912 | 2913 | set-function-name@2.0.2: 2914 | dependencies: 2915 | define-data-property: 1.1.4 2916 | es-errors: 1.3.0 2917 | functions-have-names: 1.2.3 2918 | has-property-descriptors: 1.0.2 2919 | 2920 | shebang-command@2.0.0: 2921 | dependencies: 2922 | shebang-regex: 3.0.0 2923 | 2924 | shebang-regex@3.0.0: {} 2925 | 2926 | side-channel@1.0.6: 2927 | dependencies: 2928 | call-bind: 1.0.7 2929 | es-errors: 1.3.0 2930 | get-intrinsic: 1.2.4 2931 | object-inspect: 1.13.2 2932 | 2933 | signal-exit@4.1.0: {} 2934 | 2935 | slash@3.0.0: {} 2936 | 2937 | slice-ansi@5.0.0: 2938 | dependencies: 2939 | ansi-styles: 6.2.1 2940 | is-fullwidth-code-point: 4.0.0 2941 | 2942 | slice-ansi@7.1.0: 2943 | dependencies: 2944 | ansi-styles: 6.2.1 2945 | is-fullwidth-code-point: 5.0.0 2946 | 2947 | source-map-js@1.2.0: {} 2948 | 2949 | string-argv@0.3.2: {} 2950 | 2951 | string-width@7.2.0: 2952 | dependencies: 2953 | emoji-regex: 10.3.0 2954 | get-east-asian-width: 1.2.0 2955 | strip-ansi: 7.1.0 2956 | 2957 | string.prototype.trim@1.2.9: 2958 | dependencies: 2959 | call-bind: 1.0.7 2960 | define-properties: 1.2.1 2961 | es-abstract: 1.23.3 2962 | es-object-atoms: 1.0.0 2963 | 2964 | string.prototype.trimend@1.0.8: 2965 | dependencies: 2966 | call-bind: 1.0.7 2967 | define-properties: 1.2.1 2968 | es-object-atoms: 1.0.0 2969 | 2970 | string.prototype.trimstart@1.0.8: 2971 | dependencies: 2972 | call-bind: 1.0.7 2973 | define-properties: 1.2.1 2974 | es-object-atoms: 1.0.0 2975 | 2976 | strip-ansi@6.0.1: 2977 | dependencies: 2978 | ansi-regex: 5.0.1 2979 | 2980 | strip-ansi@7.1.0: 2981 | dependencies: 2982 | ansi-regex: 6.0.1 2983 | 2984 | strip-bom@3.0.0: {} 2985 | 2986 | strip-final-newline@3.0.0: {} 2987 | 2988 | strip-json-comments@3.1.1: {} 2989 | 2990 | superstruct@0.15.5: {} 2991 | 2992 | supports-color@7.2.0: 2993 | dependencies: 2994 | has-flag: 4.0.0 2995 | 2996 | supports-preserve-symlinks-flag@1.0.0: {} 2997 | 2998 | synckit@0.9.1: 2999 | dependencies: 3000 | '@pkgr/core': 0.1.1 3001 | tslib: 2.6.3 3002 | 3003 | tapable@2.2.1: {} 3004 | 3005 | text-table@0.2.0: {} 3006 | 3007 | to-regex-range@5.0.1: 3008 | dependencies: 3009 | is-number: 7.0.0 3010 | 3011 | ts-api-utils@1.3.0(typescript@5.5.4): 3012 | dependencies: 3013 | typescript: 5.5.4 3014 | 3015 | tsconfig-paths@3.15.0: 3016 | dependencies: 3017 | '@types/json5': 0.0.29 3018 | json5: 1.0.2 3019 | minimist: 1.2.8 3020 | strip-bom: 3.0.0 3021 | 3022 | tslib@2.6.3: {} 3023 | 3024 | type-check@0.4.0: 3025 | dependencies: 3026 | prelude-ls: 1.2.1 3027 | 3028 | type-fest@0.20.2: {} 3029 | 3030 | typed-array-buffer@1.0.2: 3031 | dependencies: 3032 | call-bind: 1.0.7 3033 | es-errors: 1.3.0 3034 | is-typed-array: 1.1.13 3035 | 3036 | typed-array-byte-length@1.0.1: 3037 | dependencies: 3038 | call-bind: 1.0.7 3039 | for-each: 0.3.3 3040 | gopd: 1.0.1 3041 | has-proto: 1.0.3 3042 | is-typed-array: 1.1.13 3043 | 3044 | typed-array-byte-offset@1.0.2: 3045 | dependencies: 3046 | available-typed-arrays: 1.0.7 3047 | call-bind: 1.0.7 3048 | for-each: 0.3.3 3049 | gopd: 1.0.1 3050 | has-proto: 1.0.3 3051 | is-typed-array: 1.1.13 3052 | 3053 | typed-array-length@1.0.6: 3054 | dependencies: 3055 | call-bind: 1.0.7 3056 | for-each: 0.3.3 3057 | gopd: 1.0.1 3058 | has-proto: 1.0.3 3059 | is-typed-array: 1.1.13 3060 | possible-typed-array-names: 1.0.0 3061 | 3062 | typescript@4.9.5: {} 3063 | 3064 | typescript@5.5.4: {} 3065 | 3066 | unbox-primitive@1.0.2: 3067 | dependencies: 3068 | call-bind: 1.0.7 3069 | has-bigints: 1.0.2 3070 | has-symbols: 1.0.3 3071 | which-boxed-primitive: 1.0.2 3072 | 3073 | undici-types@5.26.5: {} 3074 | 3075 | universalify@2.0.1: {} 3076 | 3077 | uri-js@4.4.1: 3078 | dependencies: 3079 | punycode: 2.3.1 3080 | 3081 | vite-plugin-compression@0.5.1(vite@5.3.4(@types/node@20.14.12)): 3082 | dependencies: 3083 | chalk: 4.1.2 3084 | debug: 4.3.6 3085 | fs-extra: 10.1.0 3086 | vite: 5.3.4(@types/node@20.14.12) 3087 | transitivePeerDependencies: 3088 | - supports-color 3089 | 3090 | vite@5.3.4(@types/node@20.14.12): 3091 | dependencies: 3092 | esbuild: 0.21.5 3093 | postcss: 8.4.40 3094 | rollup: 4.19.1 3095 | optionalDependencies: 3096 | '@types/node': 20.14.12 3097 | fsevents: 2.3.3 3098 | 3099 | which-boxed-primitive@1.0.2: 3100 | dependencies: 3101 | is-bigint: 1.0.4 3102 | is-boolean-object: 1.1.2 3103 | is-number-object: 1.0.7 3104 | is-string: 1.0.7 3105 | is-symbol: 1.0.4 3106 | 3107 | which-typed-array@1.1.15: 3108 | dependencies: 3109 | available-typed-arrays: 1.0.7 3110 | call-bind: 1.0.7 3111 | for-each: 0.3.3 3112 | gopd: 1.0.1 3113 | has-tostringtag: 1.0.2 3114 | 3115 | which@2.0.2: 3116 | dependencies: 3117 | isexe: 2.0.0 3118 | 3119 | word-wrap@1.2.5: {} 3120 | 3121 | wrap-ansi@9.0.0: 3122 | dependencies: 3123 | ansi-styles: 6.2.1 3124 | string-width: 7.2.0 3125 | strip-ansi: 7.1.0 3126 | 3127 | wrappy@1.0.2: {} 3128 | 3129 | yaml@2.4.5: {} 3130 | 3131 | yocto-queue@0.1.0: {} 3132 | --------------------------------------------------------------------------------