├── .github └── workflows │ └── npmjs-deploy.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── Dropdown.tsx ├── ThemeProvider.tsx ├── fallbacks.module.scss ├── fallbacks.themes.json ├── global.d.ts ├── index.tsx └── lib │ ├── constants.tsx │ ├── helpers.tsx │ └── types.ts └── tsconfig.json /.github/workflows/npmjs-deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to npmjs 2 | 3 | on: 4 | create: 5 | tags: 6 | - v* 7 | 8 | jobs: 9 | publish: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: actions/setup-node@v3 14 | with: 15 | node-version: 20 16 | - run: npm install 17 | - run: npm run build 18 | - uses: JS-DevTools/npm-publish@v3 19 | with: 20 | token: ${{ secrets.NPM_TOKEN }} 21 | strategy: upgrade 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .vscode/ 3 | coverage/ 4 | dist/ 5 | lib/ 6 | node_modules/ 7 | types/ 8 | !src/lib/ -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | **/dist 2 | **/types -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "semi": true, 5 | "singleQuote": false, 6 | "arrowParens": "avoid", 7 | "printWidth": 100 8 | } 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Jacob Kofron 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solid Theme Provider 2 | 3 | 5 | 6 | Lightweight component that allows for theme switching by injecting css variables into the document's root element. 7 | 8 | ![Example of UI with no configuration](https://github.com/gnomical/solid-theme-provider/blob/assets/minimum_ui.gif?raw=true) 9 | 10 | ## Features 11 | 12 | - Auto detect system theme (light vs dark) 13 | - Browser theme-color control 14 | - click to toggle theme 15 | - handle invert of select images for light/dark modes 16 | - dropdown list when more than 2 themes configured 17 | - fully customizable 18 | - automatically generates complementary transparencies when hex colors are provided as theme variables 19 | 20 | ## Installation 21 | 22 | ```bash 23 | npm install solid-theme-provider 24 | ``` 25 | 26 | ## Usage 27 | 28 | ### Props: 29 | 30 | All of these properties are optional 31 | 32 | - **default** - string 33 | the key of the theme that should be set upon first load. 34 | defaults to the system preference 35 | - **id** - string 36 | an id that will be applied to the root `` element for easily selecting it from external stylesheets 37 | - **label** - string 38 | a text label that will display inside the theme toggle button. 39 | defaults to an empty string 40 | - **prefix** - string 41 | override the css variable prefix. 42 | defaults to `'stp-'` 43 | - **styles** - style object 44 | override the styles that get applied to the toggle button. 45 | - **themes** - json 46 | override the default variables that will be injected to the document's root element styles upon theme switching 47 | - **menu_placement** - string 48 | a key that indicates the direction the menu will open to. the options available represent ordinal, or intercardinal, directions. 49 | [`'ne'`, `'se'`, `'sw'`, `'nw'`] 50 | defaults to `'se'` 51 | - **[calculate_variants](#calculating-variants)** - (name: string, value: string) => { [key: string]: string } 52 | override the default behavior of adding complementary transparencies to any hex color code value. 53 | Instead, you can computationally augment the variables of your theme.json in any way you please. 54 | 55 | ### Component: 56 | 57 | `` serves as both the UI handle and the receiver of the themes json which will control the themes available for switching 58 | 59 | ```jsx 60 | // Example with a modified label 61 | import { ThemeProvider } from "solid-theme-provider"; 62 | 63 | 64 | ``` 65 | 66 | ![Example of UI with custom label](https://github.com/gnomical/solid-theme-provider/blob/assets/label_ui.gif?raw=true) 67 | 68 | ### CSS Variables 69 | 70 | This component provides a few variables by default. 71 | 72 | ```css 73 | /* 'Light' theme values as an example */ 74 | --stp-background: #fffff5; 75 | --stp-foreground: #111100; 76 | --stp-button_radius: 0.5em; 77 | ``` 78 | 79 | These variables are used to render the button of the `` component and should also be used within your application's style sheets to adopt the theme globally. 80 | 81 | **For Example**: 82 | It may be common for the `--stp-background` and `--stp-foreground` variables to be used as follows. 83 | 84 | ```css 85 | body, 86 | html { 87 | background: var(--stp-background); 88 | color: var(--stp-foreground); 89 | } 90 | ``` 91 | 92 | > **Note** 93 | > If you implement custom themes for this component then you can add as many variables to the theme config as you want. The variables listed above are just the defaults. 94 | 95 | ### Special Considerations - Color 96 | 97 | > **Note** 98 | > This behavior can be overriden, see the `Calculating Variants` section below this one. 99 | 100 | In addition to the default variables this package also detects hex colors (e.g. #FFFFFF) and auto calculates complementary transparent versions for use throughout your project. They are accessed by appending a suffix to the variable name. 101 | 102 | | suffix | transparency | 103 | | ------------------- | :----------: | 104 | | `-alpha_primary` | 95% | 105 | | `-alpha_secondary` | 60% | 106 | | `-alpha_tertiary` | 30% | 107 | | `-alpha_quaternary` | 9% | 108 | 109 | **For Example**: 110 | You might use the quaternary of the foreground as a hover state on a button. 111 | 112 | ```css 113 | .btn { 114 | background: var(--stp-background); 115 | } 116 | 117 | .btn:hover { 118 | background: var(--stp-foreground-alpha_quaternary); 119 | } 120 | ``` 121 | 122 | ### Calculating Variants 123 | 124 | The behavior outlined above is just the default `calculate_variants` function. You can supply an override to this behavior by passing a function into the `ThemeProvider`'s calculate_variants prop. 125 | 126 | The function will be passed the name and value of each variable in the current theme. It expects an object returned which contains the variants of the key/value to be added to the css variables written to the root element of the dom. 127 | 128 | for instance, our default function looks like this: 129 | 130 | ```javascript 131 | const calculate_variants = (name: string, value: string) => { 132 | // if the current value is a hex color 133 | // add complementary transparencies 134 | let pattern = /^#[0-9A-F]{6}$/i; 135 | if (value.match(pattern)) { 136 | return { 137 | [name + "-alpha_primary"]: value + "f2", // 95% 138 | [name + "-alpha_secondary"]: value + "99", // 60% 139 | [name + "-alpha_tertiary"]: value + "4d", // 30% 140 | [name + "-alpha_quaternary"]: value + "17", // 9% 141 | }; 142 | } 143 | return {}; 144 | }; 145 | ``` 146 | 147 | to override this behavior you would pass your own function to the `ThemeProvider` 148 | 149 | ```javascript 150 | const my_custom_variants = (name: string, value: string) => { 151 | // your custom logic 152 | }; 153 | 154 | 155 | ``` 156 | 157 | ## Inverting Images 158 | 159 | This component injects styles that can be applied by your application. When a theme that is configured as one of your system themes is selected, it can cause select images to invert. 160 | 161 | > **Note** 162 | > This feature works great on black and white line art style images. It also attempts to preserve the original hues within an image and can therefore sometimes work well on more complex or colorful images. 163 | 164 | > **For Example** 165 | > 166 | > ![Example of inverting a light image](https://github.com/gnomical/solid-theme-provider/blob/assets/weather_invert_example.gif?raw=true) 167 | 168 | To cause a primarily white element to invert when the dark theme is selected, apply the `.invert-safe--light` class. 169 | 170 | ```html 171 | 172 | ``` 173 | 174 | To cause a primarily black element to invert when the light theme is selected, apply the `.invert-safe--dark` class. 175 | 176 | ```html 177 | 178 | ``` 179 | 180 | You may also wish to use this feature on images you cannot control the class names on. The library also supports watching for images whose src attribute ends with the class names. 181 | 182 | ```html 183 | 184 | ``` 185 | 186 | ## Custom Themes 187 | 188 | ```jsx 189 | // Example with custom themes configured 190 | import { ThemeProvider } from "solid-theme-provider"; 191 | import myThemes from "./themes.json"; 192 | 193 | 194 | ``` 195 | 196 | ![Example of UI with custom label](https://github.com/gnomical/solid-theme-provider/blob/assets/dropdown_ui.gif?raw=true) 197 | 198 | Example themes.json: 199 | 200 | ```json 201 | { 202 | "system_theme_config": { 203 | "dark": "humid_night", 204 | "light": "warm_light" 205 | }, 206 | "themes": { 207 | "humid_night": { 208 | "config": { 209 | "icon": "base64 encoded svg or html", 210 | "browser_theme_color": "#110000" 211 | }, 212 | "vars": { 213 | "background": "#110000", 214 | "background_active": "#2b1d1c", 215 | "foreground": "#ddddcc", 216 | "foreground_muted": "#999988", 217 | "button_radius": "0.5em" 218 | } 219 | }, 220 | "warm_light": { 221 | "config": { 222 | "icon": "base64 encoded svg or html", 223 | "browser_theme_color": "#f1efe5" 224 | }, 225 | "vars": { 226 | "background": "#fffff5", 227 | "background_active": "#f1efe5", 228 | "foreground": "#111100", 229 | "foreground_muted": "#777755", 230 | "button_radius": "0.5em" 231 | } 232 | }, 233 | "turtle": { 234 | "config": { 235 | "icon": "base64 encoded svg or html", 236 | "browser_theme_color": "#f1efe5" 237 | }, 238 | "vars": { 239 | "background": "#115522", 240 | "background_active": "#226633", 241 | "foreground": "#eeffee", 242 | "foreground_muted": "#ddcccc", 243 | "button_radius": "1.2em" 244 | } 245 | } 246 | } 247 | } 248 | ``` 249 | 250 | **system_themes**: 251 | this object represents which of the themes listed in your root object should be used applied when accommodating system settings for theme preference 252 | 253 | **all other root objects**: 254 | Everything else is keyed by the theme name. If/when presented in the UI they will have their first first letters capitalized and underscores converted to spaces 255 | 256 | - **config:** 257 | 258 | - **icon**: base 64 encoded svg or html 259 | This is presented within the toggle button to represent which theme will be applied if the button is clicked. 260 | - **browser_theme_color**: (optional) hex color code 261 | Sets the `` tag value in the documents `` element so as to apply the theme to the browser's surrounding user interface or "chrome". 262 | 263 | - **vars:** 264 | each property within this object becomes a css variable that is injected into the document's root element styles. the key name becomes the variable name and all variables will be prefixed. For example, `background` would be combined with the default prefix, `stp`, to become the css variable `--stp-background`. 265 | You can store any value within these variables that would normally be accepted by the CSS standard. 266 | 267 | ## Advanced Integrations: 268 | 269 | `currentTheme` and `setTheme` are exposed for applications that wish to extend the functionality of this component 270 | 271 | ```jsx 272 | // Example of passing a string of the theme name to a 3rd party component 273 | import { ThemeProvider, currentTheme } from 'solid-theme-provider'; 274 | 275 | 276 | 277 | ``` 278 | 279 | ## Custom Styles 280 | 281 | ```scss 282 | // Example Button Styling 283 | .button { 284 | cursor: pointer; 285 | display: inline-block; 286 | padding: 0.25em 0.5em; 287 | border-radius: var(--stp-button_radius); 288 | background: var(--stp-background); 289 | color: var(--stp-foreground_muted); 290 | vertical-align: top; 291 | 292 | .icon, 293 | .text { 294 | vertical-align: middle; 295 | display: inline-block; 296 | -webkit-user-select: none; 297 | user-select: none; 298 | } 299 | 300 | .icon { 301 | padding-top: 0.2em; 302 | } 303 | 304 | .text:not(:empty) { 305 | padding-left: 0.25em; 306 | } 307 | 308 | .icon svg { 309 | width: 1.5em; 310 | fill: var(--stp-foreground_muted); 311 | } 312 | 313 | &:hover { 314 | background: var(--stp-background_active); 315 | color: var(--stp-foreground); 316 | 317 | .icon svg { 318 | fill: var(--stp-foreground); 319 | } 320 | } 321 | } 322 | ``` 323 | 324 | > **Note** 325 | > The styles used to override the toggle button should leverage the theme variables, just as everything else in your project. 326 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "solid-theme-provider", 3 | "version": "0.10.1", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "solid-theme-provider", 9 | "version": "0.10.1", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@babel/core": "^7.26.10", 13 | "@babel/preset-typescript": "^7.26.0", 14 | "@rollup/plugin-babel": "^6.0.4", 15 | "@rollup/plugin-json": "^6.1.0", 16 | "@rollup/plugin-node-resolve": "^16.0.1", 17 | "@rollup/plugin-typescript": "^12.1.2", 18 | "acorn-jsx": "^5.3.2", 19 | "postcss": "^8.5.3", 20 | "prettier": "^3.5.3", 21 | "rollup": "^3.29.5", 22 | "rollup-plugin-postcss": "^4.0.2", 23 | "sass": "^1.85.1", 24 | "solid-js": "^1.9.5", 25 | "tslib": "^2.8.1", 26 | "typescript": "^5.8.2" 27 | }, 28 | "peerDependencies": { 29 | "solid-js": "^1.9.5" 30 | } 31 | }, 32 | "node_modules/@ampproject/remapping": { 33 | "version": "2.3.0", 34 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 35 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 36 | "dev": true, 37 | "license": "Apache-2.0", 38 | "dependencies": { 39 | "@jridgewell/gen-mapping": "^0.3.5", 40 | "@jridgewell/trace-mapping": "^0.3.24" 41 | }, 42 | "engines": { 43 | "node": ">=6.0.0" 44 | } 45 | }, 46 | "node_modules/@babel/code-frame": { 47 | "version": "7.26.2", 48 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 49 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@babel/helper-validator-identifier": "^7.25.9", 54 | "js-tokens": "^4.0.0", 55 | "picocolors": "^1.0.0" 56 | }, 57 | "engines": { 58 | "node": ">=6.9.0" 59 | } 60 | }, 61 | "node_modules/@babel/compat-data": { 62 | "version": "7.26.8", 63 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", 64 | "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", 65 | "dev": true, 66 | "license": "MIT", 67 | "engines": { 68 | "node": ">=6.9.0" 69 | } 70 | }, 71 | "node_modules/@babel/core": { 72 | "version": "7.26.10", 73 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", 74 | "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", 75 | "dev": true, 76 | "license": "MIT", 77 | "dependencies": { 78 | "@ampproject/remapping": "^2.2.0", 79 | "@babel/code-frame": "^7.26.2", 80 | "@babel/generator": "^7.26.10", 81 | "@babel/helper-compilation-targets": "^7.26.5", 82 | "@babel/helper-module-transforms": "^7.26.0", 83 | "@babel/helpers": "^7.26.10", 84 | "@babel/parser": "^7.26.10", 85 | "@babel/template": "^7.26.9", 86 | "@babel/traverse": "^7.26.10", 87 | "@babel/types": "^7.26.10", 88 | "convert-source-map": "^2.0.0", 89 | "debug": "^4.1.0", 90 | "gensync": "^1.0.0-beta.2", 91 | "json5": "^2.2.3", 92 | "semver": "^6.3.1" 93 | }, 94 | "engines": { 95 | "node": ">=6.9.0" 96 | }, 97 | "funding": { 98 | "type": "opencollective", 99 | "url": "https://opencollective.com/babel" 100 | } 101 | }, 102 | "node_modules/@babel/generator": { 103 | "version": "7.26.10", 104 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", 105 | "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", 106 | "dev": true, 107 | "license": "MIT", 108 | "dependencies": { 109 | "@babel/parser": "^7.26.10", 110 | "@babel/types": "^7.26.10", 111 | "@jridgewell/gen-mapping": "^0.3.5", 112 | "@jridgewell/trace-mapping": "^0.3.25", 113 | "jsesc": "^3.0.2" 114 | }, 115 | "engines": { 116 | "node": ">=6.9.0" 117 | } 118 | }, 119 | "node_modules/@babel/helper-annotate-as-pure": { 120 | "version": "7.25.9", 121 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", 122 | "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", 123 | "dev": true, 124 | "license": "MIT", 125 | "dependencies": { 126 | "@babel/types": "^7.25.9" 127 | }, 128 | "engines": { 129 | "node": ">=6.9.0" 130 | } 131 | }, 132 | "node_modules/@babel/helper-compilation-targets": { 133 | "version": "7.26.5", 134 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", 135 | "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", 136 | "dev": true, 137 | "license": "MIT", 138 | "dependencies": { 139 | "@babel/compat-data": "^7.26.5", 140 | "@babel/helper-validator-option": "^7.25.9", 141 | "browserslist": "^4.24.0", 142 | "lru-cache": "^5.1.1", 143 | "semver": "^6.3.1" 144 | }, 145 | "engines": { 146 | "node": ">=6.9.0" 147 | } 148 | }, 149 | "node_modules/@babel/helper-create-class-features-plugin": { 150 | "version": "7.26.9", 151 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", 152 | "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", 153 | "dev": true, 154 | "license": "MIT", 155 | "dependencies": { 156 | "@babel/helper-annotate-as-pure": "^7.25.9", 157 | "@babel/helper-member-expression-to-functions": "^7.25.9", 158 | "@babel/helper-optimise-call-expression": "^7.25.9", 159 | "@babel/helper-replace-supers": "^7.26.5", 160 | "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", 161 | "@babel/traverse": "^7.26.9", 162 | "semver": "^6.3.1" 163 | }, 164 | "engines": { 165 | "node": ">=6.9.0" 166 | }, 167 | "peerDependencies": { 168 | "@babel/core": "^7.0.0" 169 | } 170 | }, 171 | "node_modules/@babel/helper-member-expression-to-functions": { 172 | "version": "7.25.9", 173 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", 174 | "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", 175 | "dev": true, 176 | "license": "MIT", 177 | "dependencies": { 178 | "@babel/traverse": "^7.25.9", 179 | "@babel/types": "^7.25.9" 180 | }, 181 | "engines": { 182 | "node": ">=6.9.0" 183 | } 184 | }, 185 | "node_modules/@babel/helper-module-imports": { 186 | "version": "7.25.9", 187 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", 188 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", 189 | "dev": true, 190 | "license": "MIT", 191 | "dependencies": { 192 | "@babel/traverse": "^7.25.9", 193 | "@babel/types": "^7.25.9" 194 | }, 195 | "engines": { 196 | "node": ">=6.9.0" 197 | } 198 | }, 199 | "node_modules/@babel/helper-module-transforms": { 200 | "version": "7.26.0", 201 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", 202 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", 203 | "dev": true, 204 | "license": "MIT", 205 | "dependencies": { 206 | "@babel/helper-module-imports": "^7.25.9", 207 | "@babel/helper-validator-identifier": "^7.25.9", 208 | "@babel/traverse": "^7.25.9" 209 | }, 210 | "engines": { 211 | "node": ">=6.9.0" 212 | }, 213 | "peerDependencies": { 214 | "@babel/core": "^7.0.0" 215 | } 216 | }, 217 | "node_modules/@babel/helper-optimise-call-expression": { 218 | "version": "7.25.9", 219 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", 220 | "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", 221 | "dev": true, 222 | "license": "MIT", 223 | "dependencies": { 224 | "@babel/types": "^7.25.9" 225 | }, 226 | "engines": { 227 | "node": ">=6.9.0" 228 | } 229 | }, 230 | "node_modules/@babel/helper-plugin-utils": { 231 | "version": "7.26.5", 232 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", 233 | "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", 234 | "dev": true, 235 | "license": "MIT", 236 | "engines": { 237 | "node": ">=6.9.0" 238 | } 239 | }, 240 | "node_modules/@babel/helper-replace-supers": { 241 | "version": "7.26.5", 242 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", 243 | "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", 244 | "dev": true, 245 | "license": "MIT", 246 | "dependencies": { 247 | "@babel/helper-member-expression-to-functions": "^7.25.9", 248 | "@babel/helper-optimise-call-expression": "^7.25.9", 249 | "@babel/traverse": "^7.26.5" 250 | }, 251 | "engines": { 252 | "node": ">=6.9.0" 253 | }, 254 | "peerDependencies": { 255 | "@babel/core": "^7.0.0" 256 | } 257 | }, 258 | "node_modules/@babel/helper-skip-transparent-expression-wrappers": { 259 | "version": "7.25.9", 260 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", 261 | "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", 262 | "dev": true, 263 | "license": "MIT", 264 | "dependencies": { 265 | "@babel/traverse": "^7.25.9", 266 | "@babel/types": "^7.25.9" 267 | }, 268 | "engines": { 269 | "node": ">=6.9.0" 270 | } 271 | }, 272 | "node_modules/@babel/helper-string-parser": { 273 | "version": "7.25.9", 274 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 275 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 276 | "dev": true, 277 | "license": "MIT", 278 | "engines": { 279 | "node": ">=6.9.0" 280 | } 281 | }, 282 | "node_modules/@babel/helper-validator-identifier": { 283 | "version": "7.25.9", 284 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 285 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 286 | "dev": true, 287 | "license": "MIT", 288 | "engines": { 289 | "node": ">=6.9.0" 290 | } 291 | }, 292 | "node_modules/@babel/helper-validator-option": { 293 | "version": "7.25.9", 294 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", 295 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", 296 | "dev": true, 297 | "license": "MIT", 298 | "engines": { 299 | "node": ">=6.9.0" 300 | } 301 | }, 302 | "node_modules/@babel/helpers": { 303 | "version": "7.26.10", 304 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", 305 | "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", 306 | "dev": true, 307 | "license": "MIT", 308 | "dependencies": { 309 | "@babel/template": "^7.26.9", 310 | "@babel/types": "^7.26.10" 311 | }, 312 | "engines": { 313 | "node": ">=6.9.0" 314 | } 315 | }, 316 | "node_modules/@babel/parser": { 317 | "version": "7.26.10", 318 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", 319 | "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", 320 | "dev": true, 321 | "license": "MIT", 322 | "dependencies": { 323 | "@babel/types": "^7.26.10" 324 | }, 325 | "bin": { 326 | "parser": "bin/babel-parser.js" 327 | }, 328 | "engines": { 329 | "node": ">=6.0.0" 330 | } 331 | }, 332 | "node_modules/@babel/plugin-syntax-jsx": { 333 | "version": "7.25.9", 334 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", 335 | "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", 336 | "dev": true, 337 | "license": "MIT", 338 | "dependencies": { 339 | "@babel/helper-plugin-utils": "^7.25.9" 340 | }, 341 | "engines": { 342 | "node": ">=6.9.0" 343 | }, 344 | "peerDependencies": { 345 | "@babel/core": "^7.0.0-0" 346 | } 347 | }, 348 | "node_modules/@babel/plugin-syntax-typescript": { 349 | "version": "7.25.9", 350 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", 351 | "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", 352 | "dev": true, 353 | "license": "MIT", 354 | "dependencies": { 355 | "@babel/helper-plugin-utils": "^7.25.9" 356 | }, 357 | "engines": { 358 | "node": ">=6.9.0" 359 | }, 360 | "peerDependencies": { 361 | "@babel/core": "^7.0.0-0" 362 | } 363 | }, 364 | "node_modules/@babel/plugin-transform-modules-commonjs": { 365 | "version": "7.26.3", 366 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", 367 | "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", 368 | "dev": true, 369 | "license": "MIT", 370 | "dependencies": { 371 | "@babel/helper-module-transforms": "^7.26.0", 372 | "@babel/helper-plugin-utils": "^7.25.9" 373 | }, 374 | "engines": { 375 | "node": ">=6.9.0" 376 | }, 377 | "peerDependencies": { 378 | "@babel/core": "^7.0.0-0" 379 | } 380 | }, 381 | "node_modules/@babel/plugin-transform-typescript": { 382 | "version": "7.26.8", 383 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", 384 | "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", 385 | "dev": true, 386 | "license": "MIT", 387 | "dependencies": { 388 | "@babel/helper-annotate-as-pure": "^7.25.9", 389 | "@babel/helper-create-class-features-plugin": "^7.25.9", 390 | "@babel/helper-plugin-utils": "^7.26.5", 391 | "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", 392 | "@babel/plugin-syntax-typescript": "^7.25.9" 393 | }, 394 | "engines": { 395 | "node": ">=6.9.0" 396 | }, 397 | "peerDependencies": { 398 | "@babel/core": "^7.0.0-0" 399 | } 400 | }, 401 | "node_modules/@babel/preset-typescript": { 402 | "version": "7.26.0", 403 | "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", 404 | "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", 405 | "dev": true, 406 | "license": "MIT", 407 | "dependencies": { 408 | "@babel/helper-plugin-utils": "^7.25.9", 409 | "@babel/helper-validator-option": "^7.25.9", 410 | "@babel/plugin-syntax-jsx": "^7.25.9", 411 | "@babel/plugin-transform-modules-commonjs": "^7.25.9", 412 | "@babel/plugin-transform-typescript": "^7.25.9" 413 | }, 414 | "engines": { 415 | "node": ">=6.9.0" 416 | }, 417 | "peerDependencies": { 418 | "@babel/core": "^7.0.0-0" 419 | } 420 | }, 421 | "node_modules/@babel/template": { 422 | "version": "7.26.9", 423 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", 424 | "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", 425 | "dev": true, 426 | "license": "MIT", 427 | "dependencies": { 428 | "@babel/code-frame": "^7.26.2", 429 | "@babel/parser": "^7.26.9", 430 | "@babel/types": "^7.26.9" 431 | }, 432 | "engines": { 433 | "node": ">=6.9.0" 434 | } 435 | }, 436 | "node_modules/@babel/traverse": { 437 | "version": "7.26.10", 438 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", 439 | "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", 440 | "dev": true, 441 | "license": "MIT", 442 | "dependencies": { 443 | "@babel/code-frame": "^7.26.2", 444 | "@babel/generator": "^7.26.10", 445 | "@babel/parser": "^7.26.10", 446 | "@babel/template": "^7.26.9", 447 | "@babel/types": "^7.26.10", 448 | "debug": "^4.3.1", 449 | "globals": "^11.1.0" 450 | }, 451 | "engines": { 452 | "node": ">=6.9.0" 453 | } 454 | }, 455 | "node_modules/@babel/types": { 456 | "version": "7.26.10", 457 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", 458 | "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", 459 | "dev": true, 460 | "license": "MIT", 461 | "dependencies": { 462 | "@babel/helper-string-parser": "^7.25.9", 463 | "@babel/helper-validator-identifier": "^7.25.9" 464 | }, 465 | "engines": { 466 | "node": ">=6.9.0" 467 | } 468 | }, 469 | "node_modules/@jridgewell/gen-mapping": { 470 | "version": "0.3.8", 471 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 472 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 473 | "dev": true, 474 | "license": "MIT", 475 | "dependencies": { 476 | "@jridgewell/set-array": "^1.2.1", 477 | "@jridgewell/sourcemap-codec": "^1.4.10", 478 | "@jridgewell/trace-mapping": "^0.3.24" 479 | }, 480 | "engines": { 481 | "node": ">=6.0.0" 482 | } 483 | }, 484 | "node_modules/@jridgewell/resolve-uri": { 485 | "version": "3.1.2", 486 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 487 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 488 | "dev": true, 489 | "license": "MIT", 490 | "engines": { 491 | "node": ">=6.0.0" 492 | } 493 | }, 494 | "node_modules/@jridgewell/set-array": { 495 | "version": "1.2.1", 496 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 497 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 498 | "dev": true, 499 | "license": "MIT", 500 | "engines": { 501 | "node": ">=6.0.0" 502 | } 503 | }, 504 | "node_modules/@jridgewell/sourcemap-codec": { 505 | "version": "1.5.0", 506 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 507 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 508 | "dev": true, 509 | "license": "MIT" 510 | }, 511 | "node_modules/@jridgewell/trace-mapping": { 512 | "version": "0.3.25", 513 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 514 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 515 | "dev": true, 516 | "license": "MIT", 517 | "dependencies": { 518 | "@jridgewell/resolve-uri": "^3.1.0", 519 | "@jridgewell/sourcemap-codec": "^1.4.14" 520 | } 521 | }, 522 | "node_modules/@parcel/watcher": { 523 | "version": "2.5.1", 524 | "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", 525 | "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", 526 | "dev": true, 527 | "hasInstallScript": true, 528 | "license": "MIT", 529 | "optional": true, 530 | "dependencies": { 531 | "detect-libc": "^1.0.3", 532 | "is-glob": "^4.0.3", 533 | "micromatch": "^4.0.5", 534 | "node-addon-api": "^7.0.0" 535 | }, 536 | "engines": { 537 | "node": ">= 10.0.0" 538 | }, 539 | "funding": { 540 | "type": "opencollective", 541 | "url": "https://opencollective.com/parcel" 542 | }, 543 | "optionalDependencies": { 544 | "@parcel/watcher-android-arm64": "2.5.1", 545 | "@parcel/watcher-darwin-arm64": "2.5.1", 546 | "@parcel/watcher-darwin-x64": "2.5.1", 547 | "@parcel/watcher-freebsd-x64": "2.5.1", 548 | "@parcel/watcher-linux-arm-glibc": "2.5.1", 549 | "@parcel/watcher-linux-arm-musl": "2.5.1", 550 | "@parcel/watcher-linux-arm64-glibc": "2.5.1", 551 | "@parcel/watcher-linux-arm64-musl": "2.5.1", 552 | "@parcel/watcher-linux-x64-glibc": "2.5.1", 553 | "@parcel/watcher-linux-x64-musl": "2.5.1", 554 | "@parcel/watcher-win32-arm64": "2.5.1", 555 | "@parcel/watcher-win32-ia32": "2.5.1", 556 | "@parcel/watcher-win32-x64": "2.5.1" 557 | } 558 | }, 559 | "node_modules/@parcel/watcher-android-arm64": { 560 | "version": "2.5.1", 561 | "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", 562 | "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", 563 | "cpu": [ 564 | "arm64" 565 | ], 566 | "dev": true, 567 | "license": "MIT", 568 | "optional": true, 569 | "os": [ 570 | "android" 571 | ], 572 | "engines": { 573 | "node": ">= 10.0.0" 574 | }, 575 | "funding": { 576 | "type": "opencollective", 577 | "url": "https://opencollective.com/parcel" 578 | } 579 | }, 580 | "node_modules/@parcel/watcher-darwin-arm64": { 581 | "version": "2.5.1", 582 | "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", 583 | "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", 584 | "cpu": [ 585 | "arm64" 586 | ], 587 | "dev": true, 588 | "license": "MIT", 589 | "optional": true, 590 | "os": [ 591 | "darwin" 592 | ], 593 | "engines": { 594 | "node": ">= 10.0.0" 595 | }, 596 | "funding": { 597 | "type": "opencollective", 598 | "url": "https://opencollective.com/parcel" 599 | } 600 | }, 601 | "node_modules/@parcel/watcher-darwin-x64": { 602 | "version": "2.5.1", 603 | "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", 604 | "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", 605 | "cpu": [ 606 | "x64" 607 | ], 608 | "dev": true, 609 | "license": "MIT", 610 | "optional": true, 611 | "os": [ 612 | "darwin" 613 | ], 614 | "engines": { 615 | "node": ">= 10.0.0" 616 | }, 617 | "funding": { 618 | "type": "opencollective", 619 | "url": "https://opencollective.com/parcel" 620 | } 621 | }, 622 | "node_modules/@parcel/watcher-freebsd-x64": { 623 | "version": "2.5.1", 624 | "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", 625 | "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", 626 | "cpu": [ 627 | "x64" 628 | ], 629 | "dev": true, 630 | "license": "MIT", 631 | "optional": true, 632 | "os": [ 633 | "freebsd" 634 | ], 635 | "engines": { 636 | "node": ">= 10.0.0" 637 | }, 638 | "funding": { 639 | "type": "opencollective", 640 | "url": "https://opencollective.com/parcel" 641 | } 642 | }, 643 | "node_modules/@parcel/watcher-linux-arm-glibc": { 644 | "version": "2.5.1", 645 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", 646 | "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", 647 | "cpu": [ 648 | "arm" 649 | ], 650 | "dev": true, 651 | "license": "MIT", 652 | "optional": true, 653 | "os": [ 654 | "linux" 655 | ], 656 | "engines": { 657 | "node": ">= 10.0.0" 658 | }, 659 | "funding": { 660 | "type": "opencollective", 661 | "url": "https://opencollective.com/parcel" 662 | } 663 | }, 664 | "node_modules/@parcel/watcher-linux-arm-musl": { 665 | "version": "2.5.1", 666 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", 667 | "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", 668 | "cpu": [ 669 | "arm" 670 | ], 671 | "dev": true, 672 | "license": "MIT", 673 | "optional": true, 674 | "os": [ 675 | "linux" 676 | ], 677 | "engines": { 678 | "node": ">= 10.0.0" 679 | }, 680 | "funding": { 681 | "type": "opencollective", 682 | "url": "https://opencollective.com/parcel" 683 | } 684 | }, 685 | "node_modules/@parcel/watcher-linux-arm64-glibc": { 686 | "version": "2.5.1", 687 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", 688 | "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", 689 | "cpu": [ 690 | "arm64" 691 | ], 692 | "dev": true, 693 | "license": "MIT", 694 | "optional": true, 695 | "os": [ 696 | "linux" 697 | ], 698 | "engines": { 699 | "node": ">= 10.0.0" 700 | }, 701 | "funding": { 702 | "type": "opencollective", 703 | "url": "https://opencollective.com/parcel" 704 | } 705 | }, 706 | "node_modules/@parcel/watcher-linux-arm64-musl": { 707 | "version": "2.5.1", 708 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", 709 | "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", 710 | "cpu": [ 711 | "arm64" 712 | ], 713 | "dev": true, 714 | "license": "MIT", 715 | "optional": true, 716 | "os": [ 717 | "linux" 718 | ], 719 | "engines": { 720 | "node": ">= 10.0.0" 721 | }, 722 | "funding": { 723 | "type": "opencollective", 724 | "url": "https://opencollective.com/parcel" 725 | } 726 | }, 727 | "node_modules/@parcel/watcher-linux-x64-glibc": { 728 | "version": "2.5.1", 729 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", 730 | "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", 731 | "cpu": [ 732 | "x64" 733 | ], 734 | "dev": true, 735 | "license": "MIT", 736 | "optional": true, 737 | "os": [ 738 | "linux" 739 | ], 740 | "engines": { 741 | "node": ">= 10.0.0" 742 | }, 743 | "funding": { 744 | "type": "opencollective", 745 | "url": "https://opencollective.com/parcel" 746 | } 747 | }, 748 | "node_modules/@parcel/watcher-linux-x64-musl": { 749 | "version": "2.5.1", 750 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", 751 | "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", 752 | "cpu": [ 753 | "x64" 754 | ], 755 | "dev": true, 756 | "license": "MIT", 757 | "optional": true, 758 | "os": [ 759 | "linux" 760 | ], 761 | "engines": { 762 | "node": ">= 10.0.0" 763 | }, 764 | "funding": { 765 | "type": "opencollective", 766 | "url": "https://opencollective.com/parcel" 767 | } 768 | }, 769 | "node_modules/@parcel/watcher-win32-arm64": { 770 | "version": "2.5.1", 771 | "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", 772 | "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", 773 | "cpu": [ 774 | "arm64" 775 | ], 776 | "dev": true, 777 | "license": "MIT", 778 | "optional": true, 779 | "os": [ 780 | "win32" 781 | ], 782 | "engines": { 783 | "node": ">= 10.0.0" 784 | }, 785 | "funding": { 786 | "type": "opencollective", 787 | "url": "https://opencollective.com/parcel" 788 | } 789 | }, 790 | "node_modules/@parcel/watcher-win32-ia32": { 791 | "version": "2.5.1", 792 | "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", 793 | "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", 794 | "cpu": [ 795 | "ia32" 796 | ], 797 | "dev": true, 798 | "license": "MIT", 799 | "optional": true, 800 | "os": [ 801 | "win32" 802 | ], 803 | "engines": { 804 | "node": ">= 10.0.0" 805 | }, 806 | "funding": { 807 | "type": "opencollective", 808 | "url": "https://opencollective.com/parcel" 809 | } 810 | }, 811 | "node_modules/@parcel/watcher-win32-x64": { 812 | "version": "2.5.1", 813 | "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", 814 | "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", 815 | "cpu": [ 816 | "x64" 817 | ], 818 | "dev": true, 819 | "license": "MIT", 820 | "optional": true, 821 | "os": [ 822 | "win32" 823 | ], 824 | "engines": { 825 | "node": ">= 10.0.0" 826 | }, 827 | "funding": { 828 | "type": "opencollective", 829 | "url": "https://opencollective.com/parcel" 830 | } 831 | }, 832 | "node_modules/@rollup/plugin-babel": { 833 | "version": "6.0.4", 834 | "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz", 835 | "integrity": "sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==", 836 | "dev": true, 837 | "license": "MIT", 838 | "dependencies": { 839 | "@babel/helper-module-imports": "^7.18.6", 840 | "@rollup/pluginutils": "^5.0.1" 841 | }, 842 | "engines": { 843 | "node": ">=14.0.0" 844 | }, 845 | "peerDependencies": { 846 | "@babel/core": "^7.0.0", 847 | "@types/babel__core": "^7.1.9", 848 | "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 849 | }, 850 | "peerDependenciesMeta": { 851 | "@types/babel__core": { 852 | "optional": true 853 | }, 854 | "rollup": { 855 | "optional": true 856 | } 857 | } 858 | }, 859 | "node_modules/@rollup/plugin-json": { 860 | "version": "6.1.0", 861 | "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", 862 | "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", 863 | "dev": true, 864 | "license": "MIT", 865 | "dependencies": { 866 | "@rollup/pluginutils": "^5.1.0" 867 | }, 868 | "engines": { 869 | "node": ">=14.0.0" 870 | }, 871 | "peerDependencies": { 872 | "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 873 | }, 874 | "peerDependenciesMeta": { 875 | "rollup": { 876 | "optional": true 877 | } 878 | } 879 | }, 880 | "node_modules/@rollup/plugin-node-resolve": { 881 | "version": "16.0.1", 882 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", 883 | "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", 884 | "dev": true, 885 | "license": "MIT", 886 | "dependencies": { 887 | "@rollup/pluginutils": "^5.0.1", 888 | "@types/resolve": "1.20.2", 889 | "deepmerge": "^4.2.2", 890 | "is-module": "^1.0.0", 891 | "resolve": "^1.22.1" 892 | }, 893 | "engines": { 894 | "node": ">=14.0.0" 895 | }, 896 | "peerDependencies": { 897 | "rollup": "^2.78.0||^3.0.0||^4.0.0" 898 | }, 899 | "peerDependenciesMeta": { 900 | "rollup": { 901 | "optional": true 902 | } 903 | } 904 | }, 905 | "node_modules/@rollup/plugin-typescript": { 906 | "version": "12.1.2", 907 | "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", 908 | "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", 909 | "dev": true, 910 | "license": "MIT", 911 | "dependencies": { 912 | "@rollup/pluginutils": "^5.1.0", 913 | "resolve": "^1.22.1" 914 | }, 915 | "engines": { 916 | "node": ">=14.0.0" 917 | }, 918 | "peerDependencies": { 919 | "rollup": "^2.14.0||^3.0.0||^4.0.0", 920 | "tslib": "*", 921 | "typescript": ">=3.7.0" 922 | }, 923 | "peerDependenciesMeta": { 924 | "rollup": { 925 | "optional": true 926 | }, 927 | "tslib": { 928 | "optional": true 929 | } 930 | } 931 | }, 932 | "node_modules/@rollup/pluginutils": { 933 | "version": "5.1.4", 934 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", 935 | "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", 936 | "dev": true, 937 | "license": "MIT", 938 | "dependencies": { 939 | "@types/estree": "^1.0.0", 940 | "estree-walker": "^2.0.2", 941 | "picomatch": "^4.0.2" 942 | }, 943 | "engines": { 944 | "node": ">=14.0.0" 945 | }, 946 | "peerDependencies": { 947 | "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 948 | }, 949 | "peerDependenciesMeta": { 950 | "rollup": { 951 | "optional": true 952 | } 953 | } 954 | }, 955 | "node_modules/@trysound/sax": { 956 | "version": "0.2.0", 957 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", 958 | "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", 959 | "dev": true, 960 | "license": "ISC", 961 | "engines": { 962 | "node": ">=10.13.0" 963 | } 964 | }, 965 | "node_modules/@types/estree": { 966 | "version": "1.0.6", 967 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 968 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 969 | "dev": true, 970 | "license": "MIT" 971 | }, 972 | "node_modules/@types/resolve": { 973 | "version": "1.20.2", 974 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", 975 | "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", 976 | "dev": true, 977 | "license": "MIT" 978 | }, 979 | "node_modules/acorn": { 980 | "version": "8.14.1", 981 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", 982 | "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", 983 | "dev": true, 984 | "license": "MIT", 985 | "peer": true, 986 | "bin": { 987 | "acorn": "bin/acorn" 988 | }, 989 | "engines": { 990 | "node": ">=0.4.0" 991 | } 992 | }, 993 | "node_modules/acorn-jsx": { 994 | "version": "5.3.2", 995 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 996 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 997 | "dev": true, 998 | "license": "MIT", 999 | "peerDependencies": { 1000 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1001 | } 1002 | }, 1003 | "node_modules/ansi-styles": { 1004 | "version": "4.3.0", 1005 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1006 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1007 | "dev": true, 1008 | "license": "MIT", 1009 | "dependencies": { 1010 | "color-convert": "^2.0.1" 1011 | }, 1012 | "engines": { 1013 | "node": ">=8" 1014 | }, 1015 | "funding": { 1016 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1017 | } 1018 | }, 1019 | "node_modules/boolbase": { 1020 | "version": "1.0.0", 1021 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 1022 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 1023 | "dev": true, 1024 | "license": "ISC" 1025 | }, 1026 | "node_modules/braces": { 1027 | "version": "3.0.3", 1028 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1029 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1030 | "dev": true, 1031 | "license": "MIT", 1032 | "optional": true, 1033 | "dependencies": { 1034 | "fill-range": "^7.1.1" 1035 | }, 1036 | "engines": { 1037 | "node": ">=8" 1038 | } 1039 | }, 1040 | "node_modules/browserslist": { 1041 | "version": "4.24.4", 1042 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", 1043 | "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", 1044 | "dev": true, 1045 | "funding": [ 1046 | { 1047 | "type": "opencollective", 1048 | "url": "https://opencollective.com/browserslist" 1049 | }, 1050 | { 1051 | "type": "tidelift", 1052 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1053 | }, 1054 | { 1055 | "type": "github", 1056 | "url": "https://github.com/sponsors/ai" 1057 | } 1058 | ], 1059 | "license": "MIT", 1060 | "dependencies": { 1061 | "caniuse-lite": "^1.0.30001688", 1062 | "electron-to-chromium": "^1.5.73", 1063 | "node-releases": "^2.0.19", 1064 | "update-browserslist-db": "^1.1.1" 1065 | }, 1066 | "bin": { 1067 | "browserslist": "cli.js" 1068 | }, 1069 | "engines": { 1070 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1071 | } 1072 | }, 1073 | "node_modules/caniuse-api": { 1074 | "version": "3.0.0", 1075 | "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", 1076 | "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", 1077 | "dev": true, 1078 | "license": "MIT", 1079 | "dependencies": { 1080 | "browserslist": "^4.0.0", 1081 | "caniuse-lite": "^1.0.0", 1082 | "lodash.memoize": "^4.1.2", 1083 | "lodash.uniq": "^4.5.0" 1084 | } 1085 | }, 1086 | "node_modules/caniuse-lite": { 1087 | "version": "1.0.30001704", 1088 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001704.tgz", 1089 | "integrity": "sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==", 1090 | "dev": true, 1091 | "funding": [ 1092 | { 1093 | "type": "opencollective", 1094 | "url": "https://opencollective.com/browserslist" 1095 | }, 1096 | { 1097 | "type": "tidelift", 1098 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1099 | }, 1100 | { 1101 | "type": "github", 1102 | "url": "https://github.com/sponsors/ai" 1103 | } 1104 | ], 1105 | "license": "CC-BY-4.0" 1106 | }, 1107 | "node_modules/chalk": { 1108 | "version": "4.1.2", 1109 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1110 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1111 | "dev": true, 1112 | "license": "MIT", 1113 | "dependencies": { 1114 | "ansi-styles": "^4.1.0", 1115 | "supports-color": "^7.1.0" 1116 | }, 1117 | "engines": { 1118 | "node": ">=10" 1119 | }, 1120 | "funding": { 1121 | "url": "https://github.com/chalk/chalk?sponsor=1" 1122 | } 1123 | }, 1124 | "node_modules/chokidar": { 1125 | "version": "4.0.3", 1126 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", 1127 | "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", 1128 | "dev": true, 1129 | "license": "MIT", 1130 | "dependencies": { 1131 | "readdirp": "^4.0.1" 1132 | }, 1133 | "engines": { 1134 | "node": ">= 14.16.0" 1135 | }, 1136 | "funding": { 1137 | "url": "https://paulmillr.com/funding/" 1138 | } 1139 | }, 1140 | "node_modules/color-convert": { 1141 | "version": "2.0.1", 1142 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1143 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1144 | "dev": true, 1145 | "license": "MIT", 1146 | "dependencies": { 1147 | "color-name": "~1.1.4" 1148 | }, 1149 | "engines": { 1150 | "node": ">=7.0.0" 1151 | } 1152 | }, 1153 | "node_modules/color-name": { 1154 | "version": "1.1.4", 1155 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1156 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1157 | "dev": true, 1158 | "license": "MIT" 1159 | }, 1160 | "node_modules/colord": { 1161 | "version": "2.9.3", 1162 | "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", 1163 | "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", 1164 | "dev": true, 1165 | "license": "MIT" 1166 | }, 1167 | "node_modules/commander": { 1168 | "version": "7.2.0", 1169 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 1170 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 1171 | "dev": true, 1172 | "license": "MIT", 1173 | "engines": { 1174 | "node": ">= 10" 1175 | } 1176 | }, 1177 | "node_modules/concat-with-sourcemaps": { 1178 | "version": "1.1.0", 1179 | "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", 1180 | "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", 1181 | "dev": true, 1182 | "license": "ISC", 1183 | "dependencies": { 1184 | "source-map": "^0.6.1" 1185 | } 1186 | }, 1187 | "node_modules/convert-source-map": { 1188 | "version": "2.0.0", 1189 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1190 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1191 | "dev": true, 1192 | "license": "MIT" 1193 | }, 1194 | "node_modules/css-declaration-sorter": { 1195 | "version": "6.4.1", 1196 | "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", 1197 | "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", 1198 | "dev": true, 1199 | "license": "ISC", 1200 | "engines": { 1201 | "node": "^10 || ^12 || >=14" 1202 | }, 1203 | "peerDependencies": { 1204 | "postcss": "^8.0.9" 1205 | } 1206 | }, 1207 | "node_modules/css-select": { 1208 | "version": "4.3.0", 1209 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 1210 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 1211 | "dev": true, 1212 | "license": "BSD-2-Clause", 1213 | "dependencies": { 1214 | "boolbase": "^1.0.0", 1215 | "css-what": "^6.0.1", 1216 | "domhandler": "^4.3.1", 1217 | "domutils": "^2.8.0", 1218 | "nth-check": "^2.0.1" 1219 | }, 1220 | "funding": { 1221 | "url": "https://github.com/sponsors/fb55" 1222 | } 1223 | }, 1224 | "node_modules/css-tree": { 1225 | "version": "1.1.3", 1226 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", 1227 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", 1228 | "dev": true, 1229 | "license": "MIT", 1230 | "dependencies": { 1231 | "mdn-data": "2.0.14", 1232 | "source-map": "^0.6.1" 1233 | }, 1234 | "engines": { 1235 | "node": ">=8.0.0" 1236 | } 1237 | }, 1238 | "node_modules/css-what": { 1239 | "version": "6.1.0", 1240 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 1241 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 1242 | "dev": true, 1243 | "license": "BSD-2-Clause", 1244 | "engines": { 1245 | "node": ">= 6" 1246 | }, 1247 | "funding": { 1248 | "url": "https://github.com/sponsors/fb55" 1249 | } 1250 | }, 1251 | "node_modules/cssesc": { 1252 | "version": "3.0.0", 1253 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1254 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1255 | "dev": true, 1256 | "license": "MIT", 1257 | "bin": { 1258 | "cssesc": "bin/cssesc" 1259 | }, 1260 | "engines": { 1261 | "node": ">=4" 1262 | } 1263 | }, 1264 | "node_modules/cssnano": { 1265 | "version": "5.1.15", 1266 | "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", 1267 | "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", 1268 | "dev": true, 1269 | "license": "MIT", 1270 | "dependencies": { 1271 | "cssnano-preset-default": "^5.2.14", 1272 | "lilconfig": "^2.0.3", 1273 | "yaml": "^1.10.2" 1274 | }, 1275 | "engines": { 1276 | "node": "^10 || ^12 || >=14.0" 1277 | }, 1278 | "funding": { 1279 | "type": "opencollective", 1280 | "url": "https://opencollective.com/cssnano" 1281 | }, 1282 | "peerDependencies": { 1283 | "postcss": "^8.2.15" 1284 | } 1285 | }, 1286 | "node_modules/cssnano-preset-default": { 1287 | "version": "5.2.14", 1288 | "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", 1289 | "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", 1290 | "dev": true, 1291 | "license": "MIT", 1292 | "dependencies": { 1293 | "css-declaration-sorter": "^6.3.1", 1294 | "cssnano-utils": "^3.1.0", 1295 | "postcss-calc": "^8.2.3", 1296 | "postcss-colormin": "^5.3.1", 1297 | "postcss-convert-values": "^5.1.3", 1298 | "postcss-discard-comments": "^5.1.2", 1299 | "postcss-discard-duplicates": "^5.1.0", 1300 | "postcss-discard-empty": "^5.1.1", 1301 | "postcss-discard-overridden": "^5.1.0", 1302 | "postcss-merge-longhand": "^5.1.7", 1303 | "postcss-merge-rules": "^5.1.4", 1304 | "postcss-minify-font-values": "^5.1.0", 1305 | "postcss-minify-gradients": "^5.1.1", 1306 | "postcss-minify-params": "^5.1.4", 1307 | "postcss-minify-selectors": "^5.2.1", 1308 | "postcss-normalize-charset": "^5.1.0", 1309 | "postcss-normalize-display-values": "^5.1.0", 1310 | "postcss-normalize-positions": "^5.1.1", 1311 | "postcss-normalize-repeat-style": "^5.1.1", 1312 | "postcss-normalize-string": "^5.1.0", 1313 | "postcss-normalize-timing-functions": "^5.1.0", 1314 | "postcss-normalize-unicode": "^5.1.1", 1315 | "postcss-normalize-url": "^5.1.0", 1316 | "postcss-normalize-whitespace": "^5.1.1", 1317 | "postcss-ordered-values": "^5.1.3", 1318 | "postcss-reduce-initial": "^5.1.2", 1319 | "postcss-reduce-transforms": "^5.1.0", 1320 | "postcss-svgo": "^5.1.0", 1321 | "postcss-unique-selectors": "^5.1.1" 1322 | }, 1323 | "engines": { 1324 | "node": "^10 || ^12 || >=14.0" 1325 | }, 1326 | "peerDependencies": { 1327 | "postcss": "^8.2.15" 1328 | } 1329 | }, 1330 | "node_modules/cssnano-utils": { 1331 | "version": "3.1.0", 1332 | "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", 1333 | "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", 1334 | "dev": true, 1335 | "license": "MIT", 1336 | "engines": { 1337 | "node": "^10 || ^12 || >=14.0" 1338 | }, 1339 | "peerDependencies": { 1340 | "postcss": "^8.2.15" 1341 | } 1342 | }, 1343 | "node_modules/csso": { 1344 | "version": "4.2.0", 1345 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", 1346 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", 1347 | "dev": true, 1348 | "license": "MIT", 1349 | "dependencies": { 1350 | "css-tree": "^1.1.2" 1351 | }, 1352 | "engines": { 1353 | "node": ">=8.0.0" 1354 | } 1355 | }, 1356 | "node_modules/csstype": { 1357 | "version": "3.1.3", 1358 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1359 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1360 | "dev": true, 1361 | "license": "MIT" 1362 | }, 1363 | "node_modules/debug": { 1364 | "version": "4.4.0", 1365 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1366 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1367 | "dev": true, 1368 | "license": "MIT", 1369 | "dependencies": { 1370 | "ms": "^2.1.3" 1371 | }, 1372 | "engines": { 1373 | "node": ">=6.0" 1374 | }, 1375 | "peerDependenciesMeta": { 1376 | "supports-color": { 1377 | "optional": true 1378 | } 1379 | } 1380 | }, 1381 | "node_modules/deepmerge": { 1382 | "version": "4.3.1", 1383 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1384 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1385 | "dev": true, 1386 | "license": "MIT", 1387 | "engines": { 1388 | "node": ">=0.10.0" 1389 | } 1390 | }, 1391 | "node_modules/detect-libc": { 1392 | "version": "1.0.3", 1393 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 1394 | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", 1395 | "dev": true, 1396 | "license": "Apache-2.0", 1397 | "optional": true, 1398 | "bin": { 1399 | "detect-libc": "bin/detect-libc.js" 1400 | }, 1401 | "engines": { 1402 | "node": ">=0.10" 1403 | } 1404 | }, 1405 | "node_modules/dom-serializer": { 1406 | "version": "1.4.1", 1407 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 1408 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 1409 | "dev": true, 1410 | "license": "MIT", 1411 | "dependencies": { 1412 | "domelementtype": "^2.0.1", 1413 | "domhandler": "^4.2.0", 1414 | "entities": "^2.0.0" 1415 | }, 1416 | "funding": { 1417 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 1418 | } 1419 | }, 1420 | "node_modules/domelementtype": { 1421 | "version": "2.3.0", 1422 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 1423 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 1424 | "dev": true, 1425 | "funding": [ 1426 | { 1427 | "type": "github", 1428 | "url": "https://github.com/sponsors/fb55" 1429 | } 1430 | ], 1431 | "license": "BSD-2-Clause" 1432 | }, 1433 | "node_modules/domhandler": { 1434 | "version": "4.3.1", 1435 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 1436 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 1437 | "dev": true, 1438 | "license": "BSD-2-Clause", 1439 | "dependencies": { 1440 | "domelementtype": "^2.2.0" 1441 | }, 1442 | "engines": { 1443 | "node": ">= 4" 1444 | }, 1445 | "funding": { 1446 | "url": "https://github.com/fb55/domhandler?sponsor=1" 1447 | } 1448 | }, 1449 | "node_modules/domutils": { 1450 | "version": "2.8.0", 1451 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 1452 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 1453 | "dev": true, 1454 | "license": "BSD-2-Clause", 1455 | "dependencies": { 1456 | "dom-serializer": "^1.0.1", 1457 | "domelementtype": "^2.2.0", 1458 | "domhandler": "^4.2.0" 1459 | }, 1460 | "funding": { 1461 | "url": "https://github.com/fb55/domutils?sponsor=1" 1462 | } 1463 | }, 1464 | "node_modules/electron-to-chromium": { 1465 | "version": "1.5.118", 1466 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.118.tgz", 1467 | "integrity": "sha512-yNDUus0iultYyVoEFLnQeei7LOQkL8wg8GQpkPCRrOlJXlcCwa6eGKZkxQ9ciHsqZyYbj8Jd94X1CTPzGm+uIA==", 1468 | "dev": true, 1469 | "license": "ISC" 1470 | }, 1471 | "node_modules/entities": { 1472 | "version": "2.2.0", 1473 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 1474 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 1475 | "dev": true, 1476 | "license": "BSD-2-Clause", 1477 | "funding": { 1478 | "url": "https://github.com/fb55/entities?sponsor=1" 1479 | } 1480 | }, 1481 | "node_modules/escalade": { 1482 | "version": "3.2.0", 1483 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1484 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1485 | "dev": true, 1486 | "license": "MIT", 1487 | "engines": { 1488 | "node": ">=6" 1489 | } 1490 | }, 1491 | "node_modules/estree-walker": { 1492 | "version": "2.0.2", 1493 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1494 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1495 | "dev": true, 1496 | "license": "MIT" 1497 | }, 1498 | "node_modules/eventemitter3": { 1499 | "version": "4.0.7", 1500 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 1501 | "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", 1502 | "dev": true, 1503 | "license": "MIT" 1504 | }, 1505 | "node_modules/fill-range": { 1506 | "version": "7.1.1", 1507 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1508 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1509 | "dev": true, 1510 | "license": "MIT", 1511 | "optional": true, 1512 | "dependencies": { 1513 | "to-regex-range": "^5.0.1" 1514 | }, 1515 | "engines": { 1516 | "node": ">=8" 1517 | } 1518 | }, 1519 | "node_modules/fsevents": { 1520 | "version": "2.3.3", 1521 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1522 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1523 | "dev": true, 1524 | "hasInstallScript": true, 1525 | "license": "MIT", 1526 | "optional": true, 1527 | "os": [ 1528 | "darwin" 1529 | ], 1530 | "engines": { 1531 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1532 | } 1533 | }, 1534 | "node_modules/function-bind": { 1535 | "version": "1.1.2", 1536 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1537 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1538 | "dev": true, 1539 | "license": "MIT", 1540 | "funding": { 1541 | "url": "https://github.com/sponsors/ljharb" 1542 | } 1543 | }, 1544 | "node_modules/generic-names": { 1545 | "version": "4.0.0", 1546 | "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", 1547 | "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", 1548 | "dev": true, 1549 | "license": "MIT", 1550 | "dependencies": { 1551 | "loader-utils": "^3.2.0" 1552 | } 1553 | }, 1554 | "node_modules/gensync": { 1555 | "version": "1.0.0-beta.2", 1556 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1557 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1558 | "dev": true, 1559 | "license": "MIT", 1560 | "engines": { 1561 | "node": ">=6.9.0" 1562 | } 1563 | }, 1564 | "node_modules/globals": { 1565 | "version": "11.12.0", 1566 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1567 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1568 | "dev": true, 1569 | "license": "MIT", 1570 | "engines": { 1571 | "node": ">=4" 1572 | } 1573 | }, 1574 | "node_modules/has-flag": { 1575 | "version": "4.0.0", 1576 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1577 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1578 | "dev": true, 1579 | "license": "MIT", 1580 | "engines": { 1581 | "node": ">=8" 1582 | } 1583 | }, 1584 | "node_modules/hasown": { 1585 | "version": "2.0.2", 1586 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1587 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1588 | "dev": true, 1589 | "license": "MIT", 1590 | "dependencies": { 1591 | "function-bind": "^1.1.2" 1592 | }, 1593 | "engines": { 1594 | "node": ">= 0.4" 1595 | } 1596 | }, 1597 | "node_modules/icss-replace-symbols": { 1598 | "version": "1.1.0", 1599 | "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", 1600 | "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", 1601 | "dev": true, 1602 | "license": "ISC" 1603 | }, 1604 | "node_modules/icss-utils": { 1605 | "version": "5.1.0", 1606 | "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", 1607 | "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", 1608 | "dev": true, 1609 | "license": "ISC", 1610 | "engines": { 1611 | "node": "^10 || ^12 || >= 14" 1612 | }, 1613 | "peerDependencies": { 1614 | "postcss": "^8.1.0" 1615 | } 1616 | }, 1617 | "node_modules/immutable": { 1618 | "version": "5.0.3", 1619 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", 1620 | "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", 1621 | "dev": true, 1622 | "license": "MIT" 1623 | }, 1624 | "node_modules/import-cwd": { 1625 | "version": "3.0.0", 1626 | "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", 1627 | "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", 1628 | "dev": true, 1629 | "license": "MIT", 1630 | "dependencies": { 1631 | "import-from": "^3.0.0" 1632 | }, 1633 | "engines": { 1634 | "node": ">=8" 1635 | } 1636 | }, 1637 | "node_modules/import-from": { 1638 | "version": "3.0.0", 1639 | "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", 1640 | "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", 1641 | "dev": true, 1642 | "license": "MIT", 1643 | "dependencies": { 1644 | "resolve-from": "^5.0.0" 1645 | }, 1646 | "engines": { 1647 | "node": ">=8" 1648 | } 1649 | }, 1650 | "node_modules/is-core-module": { 1651 | "version": "2.16.1", 1652 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 1653 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 1654 | "dev": true, 1655 | "license": "MIT", 1656 | "dependencies": { 1657 | "hasown": "^2.0.2" 1658 | }, 1659 | "engines": { 1660 | "node": ">= 0.4" 1661 | }, 1662 | "funding": { 1663 | "url": "https://github.com/sponsors/ljharb" 1664 | } 1665 | }, 1666 | "node_modules/is-extglob": { 1667 | "version": "2.1.1", 1668 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1669 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1670 | "dev": true, 1671 | "license": "MIT", 1672 | "optional": true, 1673 | "engines": { 1674 | "node": ">=0.10.0" 1675 | } 1676 | }, 1677 | "node_modules/is-glob": { 1678 | "version": "4.0.3", 1679 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1680 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1681 | "dev": true, 1682 | "license": "MIT", 1683 | "optional": true, 1684 | "dependencies": { 1685 | "is-extglob": "^2.1.1" 1686 | }, 1687 | "engines": { 1688 | "node": ">=0.10.0" 1689 | } 1690 | }, 1691 | "node_modules/is-module": { 1692 | "version": "1.0.0", 1693 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1694 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 1695 | "dev": true, 1696 | "license": "MIT" 1697 | }, 1698 | "node_modules/is-number": { 1699 | "version": "7.0.0", 1700 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1701 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1702 | "dev": true, 1703 | "license": "MIT", 1704 | "optional": true, 1705 | "engines": { 1706 | "node": ">=0.12.0" 1707 | } 1708 | }, 1709 | "node_modules/js-tokens": { 1710 | "version": "4.0.0", 1711 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1712 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1713 | "dev": true, 1714 | "license": "MIT" 1715 | }, 1716 | "node_modules/jsesc": { 1717 | "version": "3.1.0", 1718 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 1719 | "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 1720 | "dev": true, 1721 | "license": "MIT", 1722 | "bin": { 1723 | "jsesc": "bin/jsesc" 1724 | }, 1725 | "engines": { 1726 | "node": ">=6" 1727 | } 1728 | }, 1729 | "node_modules/json5": { 1730 | "version": "2.2.3", 1731 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1732 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1733 | "dev": true, 1734 | "license": "MIT", 1735 | "bin": { 1736 | "json5": "lib/cli.js" 1737 | }, 1738 | "engines": { 1739 | "node": ">=6" 1740 | } 1741 | }, 1742 | "node_modules/lilconfig": { 1743 | "version": "2.1.0", 1744 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 1745 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 1746 | "dev": true, 1747 | "license": "MIT", 1748 | "engines": { 1749 | "node": ">=10" 1750 | } 1751 | }, 1752 | "node_modules/loader-utils": { 1753 | "version": "3.3.1", 1754 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", 1755 | "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", 1756 | "dev": true, 1757 | "license": "MIT", 1758 | "engines": { 1759 | "node": ">= 12.13.0" 1760 | } 1761 | }, 1762 | "node_modules/lodash.camelcase": { 1763 | "version": "4.3.0", 1764 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 1765 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", 1766 | "dev": true, 1767 | "license": "MIT" 1768 | }, 1769 | "node_modules/lodash.memoize": { 1770 | "version": "4.1.2", 1771 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", 1772 | "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", 1773 | "dev": true, 1774 | "license": "MIT" 1775 | }, 1776 | "node_modules/lodash.uniq": { 1777 | "version": "4.5.0", 1778 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", 1779 | "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", 1780 | "dev": true, 1781 | "license": "MIT" 1782 | }, 1783 | "node_modules/lru-cache": { 1784 | "version": "5.1.1", 1785 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1786 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1787 | "dev": true, 1788 | "license": "ISC", 1789 | "dependencies": { 1790 | "yallist": "^3.0.2" 1791 | } 1792 | }, 1793 | "node_modules/mdn-data": { 1794 | "version": "2.0.14", 1795 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", 1796 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", 1797 | "dev": true, 1798 | "license": "CC0-1.0" 1799 | }, 1800 | "node_modules/micromatch": { 1801 | "version": "4.0.8", 1802 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 1803 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 1804 | "dev": true, 1805 | "license": "MIT", 1806 | "optional": true, 1807 | "dependencies": { 1808 | "braces": "^3.0.3", 1809 | "picomatch": "^2.3.1" 1810 | }, 1811 | "engines": { 1812 | "node": ">=8.6" 1813 | } 1814 | }, 1815 | "node_modules/micromatch/node_modules/picomatch": { 1816 | "version": "2.3.1", 1817 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1818 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1819 | "dev": true, 1820 | "license": "MIT", 1821 | "optional": true, 1822 | "engines": { 1823 | "node": ">=8.6" 1824 | }, 1825 | "funding": { 1826 | "url": "https://github.com/sponsors/jonschlinkert" 1827 | } 1828 | }, 1829 | "node_modules/ms": { 1830 | "version": "2.1.3", 1831 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1832 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1833 | "dev": true, 1834 | "license": "MIT" 1835 | }, 1836 | "node_modules/nanoid": { 1837 | "version": "3.3.9", 1838 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz", 1839 | "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", 1840 | "dev": true, 1841 | "funding": [ 1842 | { 1843 | "type": "github", 1844 | "url": "https://github.com/sponsors/ai" 1845 | } 1846 | ], 1847 | "license": "MIT", 1848 | "bin": { 1849 | "nanoid": "bin/nanoid.cjs" 1850 | }, 1851 | "engines": { 1852 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1853 | } 1854 | }, 1855 | "node_modules/node-addon-api": { 1856 | "version": "7.1.1", 1857 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", 1858 | "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", 1859 | "dev": true, 1860 | "license": "MIT", 1861 | "optional": true 1862 | }, 1863 | "node_modules/node-releases": { 1864 | "version": "2.0.19", 1865 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 1866 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 1867 | "dev": true, 1868 | "license": "MIT" 1869 | }, 1870 | "node_modules/normalize-url": { 1871 | "version": "6.1.0", 1872 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 1873 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 1874 | "dev": true, 1875 | "license": "MIT", 1876 | "engines": { 1877 | "node": ">=10" 1878 | }, 1879 | "funding": { 1880 | "url": "https://github.com/sponsors/sindresorhus" 1881 | } 1882 | }, 1883 | "node_modules/nth-check": { 1884 | "version": "2.1.1", 1885 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 1886 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 1887 | "dev": true, 1888 | "license": "BSD-2-Clause", 1889 | "dependencies": { 1890 | "boolbase": "^1.0.0" 1891 | }, 1892 | "funding": { 1893 | "url": "https://github.com/fb55/nth-check?sponsor=1" 1894 | } 1895 | }, 1896 | "node_modules/p-finally": { 1897 | "version": "1.0.0", 1898 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1899 | "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", 1900 | "dev": true, 1901 | "license": "MIT", 1902 | "engines": { 1903 | "node": ">=4" 1904 | } 1905 | }, 1906 | "node_modules/p-queue": { 1907 | "version": "6.6.2", 1908 | "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", 1909 | "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", 1910 | "dev": true, 1911 | "license": "MIT", 1912 | "dependencies": { 1913 | "eventemitter3": "^4.0.4", 1914 | "p-timeout": "^3.2.0" 1915 | }, 1916 | "engines": { 1917 | "node": ">=8" 1918 | }, 1919 | "funding": { 1920 | "url": "https://github.com/sponsors/sindresorhus" 1921 | } 1922 | }, 1923 | "node_modules/p-timeout": { 1924 | "version": "3.2.0", 1925 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", 1926 | "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", 1927 | "dev": true, 1928 | "license": "MIT", 1929 | "dependencies": { 1930 | "p-finally": "^1.0.0" 1931 | }, 1932 | "engines": { 1933 | "node": ">=8" 1934 | } 1935 | }, 1936 | "node_modules/path-parse": { 1937 | "version": "1.0.7", 1938 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1939 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1940 | "dev": true, 1941 | "license": "MIT" 1942 | }, 1943 | "node_modules/picocolors": { 1944 | "version": "1.1.1", 1945 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1946 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1947 | "dev": true, 1948 | "license": "ISC" 1949 | }, 1950 | "node_modules/picomatch": { 1951 | "version": "4.0.2", 1952 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 1953 | "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 1954 | "dev": true, 1955 | "license": "MIT", 1956 | "engines": { 1957 | "node": ">=12" 1958 | }, 1959 | "funding": { 1960 | "url": "https://github.com/sponsors/jonschlinkert" 1961 | } 1962 | }, 1963 | "node_modules/pify": { 1964 | "version": "5.0.0", 1965 | "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", 1966 | "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", 1967 | "dev": true, 1968 | "license": "MIT", 1969 | "engines": { 1970 | "node": ">=10" 1971 | }, 1972 | "funding": { 1973 | "url": "https://github.com/sponsors/sindresorhus" 1974 | } 1975 | }, 1976 | "node_modules/postcss": { 1977 | "version": "8.5.3", 1978 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 1979 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1980 | "dev": true, 1981 | "funding": [ 1982 | { 1983 | "type": "opencollective", 1984 | "url": "https://opencollective.com/postcss/" 1985 | }, 1986 | { 1987 | "type": "tidelift", 1988 | "url": "https://tidelift.com/funding/github/npm/postcss" 1989 | }, 1990 | { 1991 | "type": "github", 1992 | "url": "https://github.com/sponsors/ai" 1993 | } 1994 | ], 1995 | "license": "MIT", 1996 | "dependencies": { 1997 | "nanoid": "^3.3.8", 1998 | "picocolors": "^1.1.1", 1999 | "source-map-js": "^1.2.1" 2000 | }, 2001 | "engines": { 2002 | "node": "^10 || ^12 || >=14" 2003 | } 2004 | }, 2005 | "node_modules/postcss-calc": { 2006 | "version": "8.2.4", 2007 | "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", 2008 | "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", 2009 | "dev": true, 2010 | "license": "MIT", 2011 | "dependencies": { 2012 | "postcss-selector-parser": "^6.0.9", 2013 | "postcss-value-parser": "^4.2.0" 2014 | }, 2015 | "peerDependencies": { 2016 | "postcss": "^8.2.2" 2017 | } 2018 | }, 2019 | "node_modules/postcss-colormin": { 2020 | "version": "5.3.1", 2021 | "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", 2022 | "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", 2023 | "dev": true, 2024 | "license": "MIT", 2025 | "dependencies": { 2026 | "browserslist": "^4.21.4", 2027 | "caniuse-api": "^3.0.0", 2028 | "colord": "^2.9.1", 2029 | "postcss-value-parser": "^4.2.0" 2030 | }, 2031 | "engines": { 2032 | "node": "^10 || ^12 || >=14.0" 2033 | }, 2034 | "peerDependencies": { 2035 | "postcss": "^8.2.15" 2036 | } 2037 | }, 2038 | "node_modules/postcss-convert-values": { 2039 | "version": "5.1.3", 2040 | "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", 2041 | "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", 2042 | "dev": true, 2043 | "license": "MIT", 2044 | "dependencies": { 2045 | "browserslist": "^4.21.4", 2046 | "postcss-value-parser": "^4.2.0" 2047 | }, 2048 | "engines": { 2049 | "node": "^10 || ^12 || >=14.0" 2050 | }, 2051 | "peerDependencies": { 2052 | "postcss": "^8.2.15" 2053 | } 2054 | }, 2055 | "node_modules/postcss-discard-comments": { 2056 | "version": "5.1.2", 2057 | "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", 2058 | "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", 2059 | "dev": true, 2060 | "license": "MIT", 2061 | "engines": { 2062 | "node": "^10 || ^12 || >=14.0" 2063 | }, 2064 | "peerDependencies": { 2065 | "postcss": "^8.2.15" 2066 | } 2067 | }, 2068 | "node_modules/postcss-discard-duplicates": { 2069 | "version": "5.1.0", 2070 | "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", 2071 | "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", 2072 | "dev": true, 2073 | "license": "MIT", 2074 | "engines": { 2075 | "node": "^10 || ^12 || >=14.0" 2076 | }, 2077 | "peerDependencies": { 2078 | "postcss": "^8.2.15" 2079 | } 2080 | }, 2081 | "node_modules/postcss-discard-empty": { 2082 | "version": "5.1.1", 2083 | "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", 2084 | "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", 2085 | "dev": true, 2086 | "license": "MIT", 2087 | "engines": { 2088 | "node": "^10 || ^12 || >=14.0" 2089 | }, 2090 | "peerDependencies": { 2091 | "postcss": "^8.2.15" 2092 | } 2093 | }, 2094 | "node_modules/postcss-discard-overridden": { 2095 | "version": "5.1.0", 2096 | "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", 2097 | "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", 2098 | "dev": true, 2099 | "license": "MIT", 2100 | "engines": { 2101 | "node": "^10 || ^12 || >=14.0" 2102 | }, 2103 | "peerDependencies": { 2104 | "postcss": "^8.2.15" 2105 | } 2106 | }, 2107 | "node_modules/postcss-load-config": { 2108 | "version": "3.1.4", 2109 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 2110 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 2111 | "dev": true, 2112 | "license": "MIT", 2113 | "dependencies": { 2114 | "lilconfig": "^2.0.5", 2115 | "yaml": "^1.10.2" 2116 | }, 2117 | "engines": { 2118 | "node": ">= 10" 2119 | }, 2120 | "funding": { 2121 | "type": "opencollective", 2122 | "url": "https://opencollective.com/postcss/" 2123 | }, 2124 | "peerDependencies": { 2125 | "postcss": ">=8.0.9", 2126 | "ts-node": ">=9.0.0" 2127 | }, 2128 | "peerDependenciesMeta": { 2129 | "postcss": { 2130 | "optional": true 2131 | }, 2132 | "ts-node": { 2133 | "optional": true 2134 | } 2135 | } 2136 | }, 2137 | "node_modules/postcss-merge-longhand": { 2138 | "version": "5.1.7", 2139 | "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", 2140 | "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", 2141 | "dev": true, 2142 | "license": "MIT", 2143 | "dependencies": { 2144 | "postcss-value-parser": "^4.2.0", 2145 | "stylehacks": "^5.1.1" 2146 | }, 2147 | "engines": { 2148 | "node": "^10 || ^12 || >=14.0" 2149 | }, 2150 | "peerDependencies": { 2151 | "postcss": "^8.2.15" 2152 | } 2153 | }, 2154 | "node_modules/postcss-merge-rules": { 2155 | "version": "5.1.4", 2156 | "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", 2157 | "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", 2158 | "dev": true, 2159 | "license": "MIT", 2160 | "dependencies": { 2161 | "browserslist": "^4.21.4", 2162 | "caniuse-api": "^3.0.0", 2163 | "cssnano-utils": "^3.1.0", 2164 | "postcss-selector-parser": "^6.0.5" 2165 | }, 2166 | "engines": { 2167 | "node": "^10 || ^12 || >=14.0" 2168 | }, 2169 | "peerDependencies": { 2170 | "postcss": "^8.2.15" 2171 | } 2172 | }, 2173 | "node_modules/postcss-minify-font-values": { 2174 | "version": "5.1.0", 2175 | "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", 2176 | "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", 2177 | "dev": true, 2178 | "license": "MIT", 2179 | "dependencies": { 2180 | "postcss-value-parser": "^4.2.0" 2181 | }, 2182 | "engines": { 2183 | "node": "^10 || ^12 || >=14.0" 2184 | }, 2185 | "peerDependencies": { 2186 | "postcss": "^8.2.15" 2187 | } 2188 | }, 2189 | "node_modules/postcss-minify-gradients": { 2190 | "version": "5.1.1", 2191 | "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", 2192 | "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", 2193 | "dev": true, 2194 | "license": "MIT", 2195 | "dependencies": { 2196 | "colord": "^2.9.1", 2197 | "cssnano-utils": "^3.1.0", 2198 | "postcss-value-parser": "^4.2.0" 2199 | }, 2200 | "engines": { 2201 | "node": "^10 || ^12 || >=14.0" 2202 | }, 2203 | "peerDependencies": { 2204 | "postcss": "^8.2.15" 2205 | } 2206 | }, 2207 | "node_modules/postcss-minify-params": { 2208 | "version": "5.1.4", 2209 | "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", 2210 | "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", 2211 | "dev": true, 2212 | "license": "MIT", 2213 | "dependencies": { 2214 | "browserslist": "^4.21.4", 2215 | "cssnano-utils": "^3.1.0", 2216 | "postcss-value-parser": "^4.2.0" 2217 | }, 2218 | "engines": { 2219 | "node": "^10 || ^12 || >=14.0" 2220 | }, 2221 | "peerDependencies": { 2222 | "postcss": "^8.2.15" 2223 | } 2224 | }, 2225 | "node_modules/postcss-minify-selectors": { 2226 | "version": "5.2.1", 2227 | "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", 2228 | "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", 2229 | "dev": true, 2230 | "license": "MIT", 2231 | "dependencies": { 2232 | "postcss-selector-parser": "^6.0.5" 2233 | }, 2234 | "engines": { 2235 | "node": "^10 || ^12 || >=14.0" 2236 | }, 2237 | "peerDependencies": { 2238 | "postcss": "^8.2.15" 2239 | } 2240 | }, 2241 | "node_modules/postcss-modules": { 2242 | "version": "4.3.1", 2243 | "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", 2244 | "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", 2245 | "dev": true, 2246 | "license": "MIT", 2247 | "dependencies": { 2248 | "generic-names": "^4.0.0", 2249 | "icss-replace-symbols": "^1.1.0", 2250 | "lodash.camelcase": "^4.3.0", 2251 | "postcss-modules-extract-imports": "^3.0.0", 2252 | "postcss-modules-local-by-default": "^4.0.0", 2253 | "postcss-modules-scope": "^3.0.0", 2254 | "postcss-modules-values": "^4.0.0", 2255 | "string-hash": "^1.1.1" 2256 | }, 2257 | "peerDependencies": { 2258 | "postcss": "^8.0.0" 2259 | } 2260 | }, 2261 | "node_modules/postcss-modules-extract-imports": { 2262 | "version": "3.1.0", 2263 | "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", 2264 | "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", 2265 | "dev": true, 2266 | "license": "ISC", 2267 | "engines": { 2268 | "node": "^10 || ^12 || >= 14" 2269 | }, 2270 | "peerDependencies": { 2271 | "postcss": "^8.1.0" 2272 | } 2273 | }, 2274 | "node_modules/postcss-modules-local-by-default": { 2275 | "version": "4.2.0", 2276 | "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", 2277 | "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", 2278 | "dev": true, 2279 | "license": "MIT", 2280 | "dependencies": { 2281 | "icss-utils": "^5.0.0", 2282 | "postcss-selector-parser": "^7.0.0", 2283 | "postcss-value-parser": "^4.1.0" 2284 | }, 2285 | "engines": { 2286 | "node": "^10 || ^12 || >= 14" 2287 | }, 2288 | "peerDependencies": { 2289 | "postcss": "^8.1.0" 2290 | } 2291 | }, 2292 | "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { 2293 | "version": "7.1.0", 2294 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", 2295 | "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", 2296 | "dev": true, 2297 | "license": "MIT", 2298 | "dependencies": { 2299 | "cssesc": "^3.0.0", 2300 | "util-deprecate": "^1.0.2" 2301 | }, 2302 | "engines": { 2303 | "node": ">=4" 2304 | } 2305 | }, 2306 | "node_modules/postcss-modules-scope": { 2307 | "version": "3.2.1", 2308 | "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", 2309 | "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", 2310 | "dev": true, 2311 | "license": "ISC", 2312 | "dependencies": { 2313 | "postcss-selector-parser": "^7.0.0" 2314 | }, 2315 | "engines": { 2316 | "node": "^10 || ^12 || >= 14" 2317 | }, 2318 | "peerDependencies": { 2319 | "postcss": "^8.1.0" 2320 | } 2321 | }, 2322 | "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { 2323 | "version": "7.1.0", 2324 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", 2325 | "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", 2326 | "dev": true, 2327 | "license": "MIT", 2328 | "dependencies": { 2329 | "cssesc": "^3.0.0", 2330 | "util-deprecate": "^1.0.2" 2331 | }, 2332 | "engines": { 2333 | "node": ">=4" 2334 | } 2335 | }, 2336 | "node_modules/postcss-modules-values": { 2337 | "version": "4.0.0", 2338 | "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", 2339 | "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", 2340 | "dev": true, 2341 | "license": "ISC", 2342 | "dependencies": { 2343 | "icss-utils": "^5.0.0" 2344 | }, 2345 | "engines": { 2346 | "node": "^10 || ^12 || >= 14" 2347 | }, 2348 | "peerDependencies": { 2349 | "postcss": "^8.1.0" 2350 | } 2351 | }, 2352 | "node_modules/postcss-normalize-charset": { 2353 | "version": "5.1.0", 2354 | "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", 2355 | "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", 2356 | "dev": true, 2357 | "license": "MIT", 2358 | "engines": { 2359 | "node": "^10 || ^12 || >=14.0" 2360 | }, 2361 | "peerDependencies": { 2362 | "postcss": "^8.2.15" 2363 | } 2364 | }, 2365 | "node_modules/postcss-normalize-display-values": { 2366 | "version": "5.1.0", 2367 | "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", 2368 | "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", 2369 | "dev": true, 2370 | "license": "MIT", 2371 | "dependencies": { 2372 | "postcss-value-parser": "^4.2.0" 2373 | }, 2374 | "engines": { 2375 | "node": "^10 || ^12 || >=14.0" 2376 | }, 2377 | "peerDependencies": { 2378 | "postcss": "^8.2.15" 2379 | } 2380 | }, 2381 | "node_modules/postcss-normalize-positions": { 2382 | "version": "5.1.1", 2383 | "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", 2384 | "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", 2385 | "dev": true, 2386 | "license": "MIT", 2387 | "dependencies": { 2388 | "postcss-value-parser": "^4.2.0" 2389 | }, 2390 | "engines": { 2391 | "node": "^10 || ^12 || >=14.0" 2392 | }, 2393 | "peerDependencies": { 2394 | "postcss": "^8.2.15" 2395 | } 2396 | }, 2397 | "node_modules/postcss-normalize-repeat-style": { 2398 | "version": "5.1.1", 2399 | "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", 2400 | "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", 2401 | "dev": true, 2402 | "license": "MIT", 2403 | "dependencies": { 2404 | "postcss-value-parser": "^4.2.0" 2405 | }, 2406 | "engines": { 2407 | "node": "^10 || ^12 || >=14.0" 2408 | }, 2409 | "peerDependencies": { 2410 | "postcss": "^8.2.15" 2411 | } 2412 | }, 2413 | "node_modules/postcss-normalize-string": { 2414 | "version": "5.1.0", 2415 | "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", 2416 | "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", 2417 | "dev": true, 2418 | "license": "MIT", 2419 | "dependencies": { 2420 | "postcss-value-parser": "^4.2.0" 2421 | }, 2422 | "engines": { 2423 | "node": "^10 || ^12 || >=14.0" 2424 | }, 2425 | "peerDependencies": { 2426 | "postcss": "^8.2.15" 2427 | } 2428 | }, 2429 | "node_modules/postcss-normalize-timing-functions": { 2430 | "version": "5.1.0", 2431 | "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", 2432 | "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", 2433 | "dev": true, 2434 | "license": "MIT", 2435 | "dependencies": { 2436 | "postcss-value-parser": "^4.2.0" 2437 | }, 2438 | "engines": { 2439 | "node": "^10 || ^12 || >=14.0" 2440 | }, 2441 | "peerDependencies": { 2442 | "postcss": "^8.2.15" 2443 | } 2444 | }, 2445 | "node_modules/postcss-normalize-unicode": { 2446 | "version": "5.1.1", 2447 | "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", 2448 | "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", 2449 | "dev": true, 2450 | "license": "MIT", 2451 | "dependencies": { 2452 | "browserslist": "^4.21.4", 2453 | "postcss-value-parser": "^4.2.0" 2454 | }, 2455 | "engines": { 2456 | "node": "^10 || ^12 || >=14.0" 2457 | }, 2458 | "peerDependencies": { 2459 | "postcss": "^8.2.15" 2460 | } 2461 | }, 2462 | "node_modules/postcss-normalize-url": { 2463 | "version": "5.1.0", 2464 | "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", 2465 | "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", 2466 | "dev": true, 2467 | "license": "MIT", 2468 | "dependencies": { 2469 | "normalize-url": "^6.0.1", 2470 | "postcss-value-parser": "^4.2.0" 2471 | }, 2472 | "engines": { 2473 | "node": "^10 || ^12 || >=14.0" 2474 | }, 2475 | "peerDependencies": { 2476 | "postcss": "^8.2.15" 2477 | } 2478 | }, 2479 | "node_modules/postcss-normalize-whitespace": { 2480 | "version": "5.1.1", 2481 | "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", 2482 | "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", 2483 | "dev": true, 2484 | "license": "MIT", 2485 | "dependencies": { 2486 | "postcss-value-parser": "^4.2.0" 2487 | }, 2488 | "engines": { 2489 | "node": "^10 || ^12 || >=14.0" 2490 | }, 2491 | "peerDependencies": { 2492 | "postcss": "^8.2.15" 2493 | } 2494 | }, 2495 | "node_modules/postcss-ordered-values": { 2496 | "version": "5.1.3", 2497 | "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", 2498 | "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", 2499 | "dev": true, 2500 | "license": "MIT", 2501 | "dependencies": { 2502 | "cssnano-utils": "^3.1.0", 2503 | "postcss-value-parser": "^4.2.0" 2504 | }, 2505 | "engines": { 2506 | "node": "^10 || ^12 || >=14.0" 2507 | }, 2508 | "peerDependencies": { 2509 | "postcss": "^8.2.15" 2510 | } 2511 | }, 2512 | "node_modules/postcss-reduce-initial": { 2513 | "version": "5.1.2", 2514 | "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", 2515 | "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", 2516 | "dev": true, 2517 | "license": "MIT", 2518 | "dependencies": { 2519 | "browserslist": "^4.21.4", 2520 | "caniuse-api": "^3.0.0" 2521 | }, 2522 | "engines": { 2523 | "node": "^10 || ^12 || >=14.0" 2524 | }, 2525 | "peerDependencies": { 2526 | "postcss": "^8.2.15" 2527 | } 2528 | }, 2529 | "node_modules/postcss-reduce-transforms": { 2530 | "version": "5.1.0", 2531 | "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", 2532 | "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", 2533 | "dev": true, 2534 | "license": "MIT", 2535 | "dependencies": { 2536 | "postcss-value-parser": "^4.2.0" 2537 | }, 2538 | "engines": { 2539 | "node": "^10 || ^12 || >=14.0" 2540 | }, 2541 | "peerDependencies": { 2542 | "postcss": "^8.2.15" 2543 | } 2544 | }, 2545 | "node_modules/postcss-selector-parser": { 2546 | "version": "6.1.2", 2547 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 2548 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 2549 | "dev": true, 2550 | "license": "MIT", 2551 | "dependencies": { 2552 | "cssesc": "^3.0.0", 2553 | "util-deprecate": "^1.0.2" 2554 | }, 2555 | "engines": { 2556 | "node": ">=4" 2557 | } 2558 | }, 2559 | "node_modules/postcss-svgo": { 2560 | "version": "5.1.0", 2561 | "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", 2562 | "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", 2563 | "dev": true, 2564 | "license": "MIT", 2565 | "dependencies": { 2566 | "postcss-value-parser": "^4.2.0", 2567 | "svgo": "^2.7.0" 2568 | }, 2569 | "engines": { 2570 | "node": "^10 || ^12 || >=14.0" 2571 | }, 2572 | "peerDependencies": { 2573 | "postcss": "^8.2.15" 2574 | } 2575 | }, 2576 | "node_modules/postcss-unique-selectors": { 2577 | "version": "5.1.1", 2578 | "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", 2579 | "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", 2580 | "dev": true, 2581 | "license": "MIT", 2582 | "dependencies": { 2583 | "postcss-selector-parser": "^6.0.5" 2584 | }, 2585 | "engines": { 2586 | "node": "^10 || ^12 || >=14.0" 2587 | }, 2588 | "peerDependencies": { 2589 | "postcss": "^8.2.15" 2590 | } 2591 | }, 2592 | "node_modules/postcss-value-parser": { 2593 | "version": "4.2.0", 2594 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2595 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2596 | "dev": true, 2597 | "license": "MIT" 2598 | }, 2599 | "node_modules/prettier": { 2600 | "version": "3.5.3", 2601 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 2602 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 2603 | "dev": true, 2604 | "license": "MIT", 2605 | "bin": { 2606 | "prettier": "bin/prettier.cjs" 2607 | }, 2608 | "engines": { 2609 | "node": ">=14" 2610 | }, 2611 | "funding": { 2612 | "url": "https://github.com/prettier/prettier?sponsor=1" 2613 | } 2614 | }, 2615 | "node_modules/promise.series": { 2616 | "version": "0.2.0", 2617 | "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", 2618 | "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", 2619 | "dev": true, 2620 | "license": "MIT", 2621 | "engines": { 2622 | "node": ">=0.12" 2623 | } 2624 | }, 2625 | "node_modules/readdirp": { 2626 | "version": "4.1.2", 2627 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", 2628 | "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", 2629 | "dev": true, 2630 | "license": "MIT", 2631 | "engines": { 2632 | "node": ">= 14.18.0" 2633 | }, 2634 | "funding": { 2635 | "type": "individual", 2636 | "url": "https://paulmillr.com/funding/" 2637 | } 2638 | }, 2639 | "node_modules/resolve": { 2640 | "version": "1.22.10", 2641 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 2642 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 2643 | "dev": true, 2644 | "license": "MIT", 2645 | "dependencies": { 2646 | "is-core-module": "^2.16.0", 2647 | "path-parse": "^1.0.7", 2648 | "supports-preserve-symlinks-flag": "^1.0.0" 2649 | }, 2650 | "bin": { 2651 | "resolve": "bin/resolve" 2652 | }, 2653 | "engines": { 2654 | "node": ">= 0.4" 2655 | }, 2656 | "funding": { 2657 | "url": "https://github.com/sponsors/ljharb" 2658 | } 2659 | }, 2660 | "node_modules/resolve-from": { 2661 | "version": "5.0.0", 2662 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2663 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2664 | "dev": true, 2665 | "license": "MIT", 2666 | "engines": { 2667 | "node": ">=8" 2668 | } 2669 | }, 2670 | "node_modules/rollup": { 2671 | "version": "3.29.5", 2672 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", 2673 | "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", 2674 | "dev": true, 2675 | "license": "MIT", 2676 | "bin": { 2677 | "rollup": "dist/bin/rollup" 2678 | }, 2679 | "engines": { 2680 | "node": ">=14.18.0", 2681 | "npm": ">=8.0.0" 2682 | }, 2683 | "optionalDependencies": { 2684 | "fsevents": "~2.3.2" 2685 | } 2686 | }, 2687 | "node_modules/rollup-plugin-postcss": { 2688 | "version": "4.0.2", 2689 | "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", 2690 | "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", 2691 | "dev": true, 2692 | "license": "MIT", 2693 | "dependencies": { 2694 | "chalk": "^4.1.0", 2695 | "concat-with-sourcemaps": "^1.1.0", 2696 | "cssnano": "^5.0.1", 2697 | "import-cwd": "^3.0.0", 2698 | "p-queue": "^6.6.2", 2699 | "pify": "^5.0.0", 2700 | "postcss-load-config": "^3.0.0", 2701 | "postcss-modules": "^4.0.0", 2702 | "promise.series": "^0.2.0", 2703 | "resolve": "^1.19.0", 2704 | "rollup-pluginutils": "^2.8.2", 2705 | "safe-identifier": "^0.4.2", 2706 | "style-inject": "^0.3.0" 2707 | }, 2708 | "engines": { 2709 | "node": ">=10" 2710 | }, 2711 | "peerDependencies": { 2712 | "postcss": "8.x" 2713 | } 2714 | }, 2715 | "node_modules/rollup-pluginutils": { 2716 | "version": "2.8.2", 2717 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 2718 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 2719 | "dev": true, 2720 | "license": "MIT", 2721 | "dependencies": { 2722 | "estree-walker": "^0.6.1" 2723 | } 2724 | }, 2725 | "node_modules/rollup-pluginutils/node_modules/estree-walker": { 2726 | "version": "0.6.1", 2727 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 2728 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 2729 | "dev": true, 2730 | "license": "MIT" 2731 | }, 2732 | "node_modules/safe-identifier": { 2733 | "version": "0.4.2", 2734 | "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", 2735 | "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", 2736 | "dev": true, 2737 | "license": "ISC" 2738 | }, 2739 | "node_modules/sass": { 2740 | "version": "1.85.1", 2741 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.1.tgz", 2742 | "integrity": "sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==", 2743 | "dev": true, 2744 | "license": "MIT", 2745 | "dependencies": { 2746 | "chokidar": "^4.0.0", 2747 | "immutable": "^5.0.2", 2748 | "source-map-js": ">=0.6.2 <2.0.0" 2749 | }, 2750 | "bin": { 2751 | "sass": "sass.js" 2752 | }, 2753 | "engines": { 2754 | "node": ">=14.0.0" 2755 | }, 2756 | "optionalDependencies": { 2757 | "@parcel/watcher": "^2.4.1" 2758 | } 2759 | }, 2760 | "node_modules/semver": { 2761 | "version": "6.3.1", 2762 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 2763 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 2764 | "dev": true, 2765 | "license": "ISC", 2766 | "bin": { 2767 | "semver": "bin/semver.js" 2768 | } 2769 | }, 2770 | "node_modules/seroval": { 2771 | "version": "1.2.1", 2772 | "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.2.1.tgz", 2773 | "integrity": "sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==", 2774 | "dev": true, 2775 | "license": "MIT", 2776 | "engines": { 2777 | "node": ">=10" 2778 | } 2779 | }, 2780 | "node_modules/seroval-plugins": { 2781 | "version": "1.2.1", 2782 | "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.2.1.tgz", 2783 | "integrity": "sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==", 2784 | "dev": true, 2785 | "license": "MIT", 2786 | "engines": { 2787 | "node": ">=10" 2788 | }, 2789 | "peerDependencies": { 2790 | "seroval": "^1.0" 2791 | } 2792 | }, 2793 | "node_modules/solid-js": { 2794 | "version": "1.9.5", 2795 | "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.5.tgz", 2796 | "integrity": "sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==", 2797 | "dev": true, 2798 | "license": "MIT", 2799 | "dependencies": { 2800 | "csstype": "^3.1.0", 2801 | "seroval": "^1.1.0", 2802 | "seroval-plugins": "^1.1.0" 2803 | } 2804 | }, 2805 | "node_modules/source-map": { 2806 | "version": "0.6.1", 2807 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2808 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2809 | "dev": true, 2810 | "license": "BSD-3-Clause", 2811 | "engines": { 2812 | "node": ">=0.10.0" 2813 | } 2814 | }, 2815 | "node_modules/source-map-js": { 2816 | "version": "1.2.1", 2817 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2818 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2819 | "dev": true, 2820 | "license": "BSD-3-Clause", 2821 | "engines": { 2822 | "node": ">=0.10.0" 2823 | } 2824 | }, 2825 | "node_modules/stable": { 2826 | "version": "0.1.8", 2827 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", 2828 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", 2829 | "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", 2830 | "dev": true, 2831 | "license": "MIT" 2832 | }, 2833 | "node_modules/string-hash": { 2834 | "version": "1.1.3", 2835 | "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", 2836 | "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", 2837 | "dev": true, 2838 | "license": "CC0-1.0" 2839 | }, 2840 | "node_modules/style-inject": { 2841 | "version": "0.3.0", 2842 | "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", 2843 | "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", 2844 | "dev": true, 2845 | "license": "MIT" 2846 | }, 2847 | "node_modules/stylehacks": { 2848 | "version": "5.1.1", 2849 | "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", 2850 | "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", 2851 | "dev": true, 2852 | "license": "MIT", 2853 | "dependencies": { 2854 | "browserslist": "^4.21.4", 2855 | "postcss-selector-parser": "^6.0.4" 2856 | }, 2857 | "engines": { 2858 | "node": "^10 || ^12 || >=14.0" 2859 | }, 2860 | "peerDependencies": { 2861 | "postcss": "^8.2.15" 2862 | } 2863 | }, 2864 | "node_modules/supports-color": { 2865 | "version": "7.2.0", 2866 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2867 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2868 | "dev": true, 2869 | "license": "MIT", 2870 | "dependencies": { 2871 | "has-flag": "^4.0.0" 2872 | }, 2873 | "engines": { 2874 | "node": ">=8" 2875 | } 2876 | }, 2877 | "node_modules/supports-preserve-symlinks-flag": { 2878 | "version": "1.0.0", 2879 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2880 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2881 | "dev": true, 2882 | "license": "MIT", 2883 | "engines": { 2884 | "node": ">= 0.4" 2885 | }, 2886 | "funding": { 2887 | "url": "https://github.com/sponsors/ljharb" 2888 | } 2889 | }, 2890 | "node_modules/svgo": { 2891 | "version": "2.8.0", 2892 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", 2893 | "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", 2894 | "dev": true, 2895 | "license": "MIT", 2896 | "dependencies": { 2897 | "@trysound/sax": "0.2.0", 2898 | "commander": "^7.2.0", 2899 | "css-select": "^4.1.3", 2900 | "css-tree": "^1.1.3", 2901 | "csso": "^4.2.0", 2902 | "picocolors": "^1.0.0", 2903 | "stable": "^0.1.8" 2904 | }, 2905 | "bin": { 2906 | "svgo": "bin/svgo" 2907 | }, 2908 | "engines": { 2909 | "node": ">=10.13.0" 2910 | } 2911 | }, 2912 | "node_modules/to-regex-range": { 2913 | "version": "5.0.1", 2914 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2915 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2916 | "dev": true, 2917 | "license": "MIT", 2918 | "optional": true, 2919 | "dependencies": { 2920 | "is-number": "^7.0.0" 2921 | }, 2922 | "engines": { 2923 | "node": ">=8.0" 2924 | } 2925 | }, 2926 | "node_modules/tslib": { 2927 | "version": "2.8.1", 2928 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 2929 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 2930 | "dev": true, 2931 | "license": "0BSD" 2932 | }, 2933 | "node_modules/typescript": { 2934 | "version": "5.8.2", 2935 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", 2936 | "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", 2937 | "dev": true, 2938 | "license": "Apache-2.0", 2939 | "bin": { 2940 | "tsc": "bin/tsc", 2941 | "tsserver": "bin/tsserver" 2942 | }, 2943 | "engines": { 2944 | "node": ">=14.17" 2945 | } 2946 | }, 2947 | "node_modules/update-browserslist-db": { 2948 | "version": "1.1.3", 2949 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", 2950 | "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", 2951 | "dev": true, 2952 | "funding": [ 2953 | { 2954 | "type": "opencollective", 2955 | "url": "https://opencollective.com/browserslist" 2956 | }, 2957 | { 2958 | "type": "tidelift", 2959 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2960 | }, 2961 | { 2962 | "type": "github", 2963 | "url": "https://github.com/sponsors/ai" 2964 | } 2965 | ], 2966 | "license": "MIT", 2967 | "dependencies": { 2968 | "escalade": "^3.2.0", 2969 | "picocolors": "^1.1.1" 2970 | }, 2971 | "bin": { 2972 | "update-browserslist-db": "cli.js" 2973 | }, 2974 | "peerDependencies": { 2975 | "browserslist": ">= 4.21.0" 2976 | } 2977 | }, 2978 | "node_modules/util-deprecate": { 2979 | "version": "1.0.2", 2980 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2981 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2982 | "dev": true, 2983 | "license": "MIT" 2984 | }, 2985 | "node_modules/yallist": { 2986 | "version": "3.1.1", 2987 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 2988 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 2989 | "dev": true, 2990 | "license": "ISC" 2991 | }, 2992 | "node_modules/yaml": { 2993 | "version": "1.10.2", 2994 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 2995 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 2996 | "dev": true, 2997 | "license": "ISC", 2998 | "engines": { 2999 | "node": ">= 6" 3000 | } 3001 | } 3002 | } 3003 | } 3004 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "solid-theme-provider", 3 | "description": "Lightweight and customizable theme handler for Solid JS", 4 | "author": "Jacob Kofron", 5 | "license": "MIT", 6 | "version": "0.10.1", 7 | "homepage": "https://github.com/gnomical/solid-theme-provider#readme", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/gnomical/solid-theme-provider.git" 11 | }, 12 | "keywords": [ 13 | "solid", 14 | "solidjs", 15 | "ui", 16 | "themes", 17 | "dark-mode", 18 | "prefers-color-scheme" 19 | ], 20 | "type": "module", 21 | "main": "dist/index.jsx", 22 | "module": "dist/index.jsx", 23 | "types": "types/index.d.ts", 24 | "files": [ 25 | "dist", 26 | "types" 27 | ], 28 | "sideEffects": "false", 29 | "scripts": { 30 | "build": "rollup -c && tsc", 31 | "prepublishOnly": "npm run build", 32 | "prettier": "npx prettier --write ." 33 | }, 34 | "devDependencies": { 35 | "@babel/core": "^7.26.10", 36 | "@babel/preset-typescript": "^7.26.0", 37 | "@rollup/plugin-babel": "^6.0.4", 38 | "@rollup/plugin-json": "^6.1.0", 39 | "@rollup/plugin-node-resolve": "^16.0.1", 40 | "@rollup/plugin-typescript": "^12.1.2", 41 | "acorn-jsx": "^5.3.2", 42 | "postcss": "^8.5.3", 43 | "prettier": "^3.5.3", 44 | "rollup": "^3.29.5", 45 | "rollup-plugin-postcss": "^4.0.2", 46 | "sass": "^1.85.1", 47 | "solid-js": "^1.9.5", 48 | "tslib": "^2.8.1", 49 | "typescript": "^5.8.2" 50 | }, 51 | "peerDependencies": { 52 | "solid-js": "^1.9.5" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import json from "@rollup/plugin-json"; 2 | import typescript from "@rollup/plugin-typescript"; 3 | import postcss from "rollup-plugin-postcss"; 4 | import jsx from "acorn-jsx"; 5 | 6 | export default { 7 | input: "src/index.tsx", 8 | output: [ 9 | { 10 | file: "dist/index.jsx", 11 | format: "es", 12 | }, 13 | ], 14 | external: ["solid-js"], 15 | plugins: [ 16 | typescript({ 17 | compilerOptions: { 18 | jsx: "preserve", 19 | } 20 | }), 21 | json(), 22 | postcss({ 23 | minimize: true, 24 | plugins: [], 25 | }), 26 | ], 27 | acornInjectPlugins: [jsx()], 28 | }; 29 | -------------------------------------------------------------------------------- /src/Dropdown.tsx: -------------------------------------------------------------------------------- 1 | import { createEffect, For, onCleanup } from "solid-js"; 2 | import { 3 | SYSTEM_THEME_CONFIG_KEY, 4 | SYSTEM_THEME_ICON, 5 | SYSTEM_THEME_KEY, 6 | UNKNOWN_ICON, 7 | } from "./lib/constants"; 8 | import { themeHasBase64Icon } from "./lib/helpers"; 9 | 10 | type DropdownProps = { 11 | styles: any; 12 | activeTheme: string; 13 | allowSystemTheme?: boolean; 14 | toggleTheme: any; 15 | themes: any; 16 | setDropdownOpen: any; 17 | }; 18 | 19 | export function Dropdown(props: DropdownProps) { 20 | const styles = props.styles; 21 | const allowSystemTheme = props.allowSystemTheme || false; 22 | 23 | // handle global click events 24 | let containerRef: any; 25 | const closeDropdown = (e: Event) => { 26 | if (!containerRef.contains(e.target)) props.setDropdownOpen(false); 27 | }; 28 | 29 | createEffect(() => { 30 | document.addEventListener("mousedown", closeDropdown); 31 | onCleanup(() => document.removeEventListener("mousedown", closeDropdown)); 32 | }); 33 | 34 | return ( 35 |
36 | {allowSystemTheme && ( 37 |
props.toggleTheme(SYSTEM_THEME_KEY)} 40 | > 41 | {SYSTEM_THEME_ICON} 42 | System Preference 43 |
44 | )} 45 | { 47 | return key != SYSTEM_THEME_CONFIG_KEY && props.themes[key].hasOwnProperty("vars"); 48 | })} 49 | fallback={
Loading...
} 50 | > 51 | {themeName => { 52 | let themeLabel = themeName 53 | .split("_") 54 | .map(word => word.charAt(0).toUpperCase() + word.slice(1)) 55 | .join(" "); 56 | return ( 57 |
props.toggleTheme(themeName)} 60 | > 61 | {themeHasBase64Icon(props.themes[themeName]) ? ( 62 | 63 | ) : ( 64 | {UNKNOWN_ICON} 65 | )} 66 | {themeLabel} 67 |
68 | ); 69 | }} 70 |
71 |
72 | ); 73 | } 74 | -------------------------------------------------------------------------------- /src/ThemeProvider.tsx: -------------------------------------------------------------------------------- 1 | import { createEffect, createSignal } from "solid-js"; 2 | import fallbackStyles from "./fallbacks.module.scss"; 3 | import fallbackThemes from "./fallbacks.themes.json"; 4 | import { SystemThemesObject, ThemeProviderProps, ThemesObject } from "./lib/types"; 5 | import { 6 | CHEVRON_UP_ICON, 7 | SYSTEM_THEME_CONFIG_KEY, 8 | SYSTEM_THEME_KEY, 9 | UNKNOWN_ICON, 10 | } from "./lib/constants"; 11 | import { themeHasBase64Icon } from "./lib/helpers"; 12 | import { Dropdown } from "./Dropdown"; 13 | 14 | export const [currentTheme, setTheme] = createSignal("initializing"); 15 | 16 | const calculate_variants = (name: string, value: string) => { 17 | //if the current value is a hex color - add complementary transparencies 18 | let pattern = /^#[0-9A-F]{6}$/i; 19 | if (value.match(pattern)) { 20 | return { 21 | [name + "-alpha_primary"]: value + "f2", // 95% 22 | [name + "-alpha_secondary"]: value + "99", // 60% 23 | [name + "-alpha_tertiary"]: value + "4d", // 30% 24 | [name + "-alpha_quaternary"]: value + "17", // 9% 25 | // allow for mispelled 'quarternary' for backwards compatibility 26 | [name + "-alpha_quarternary"]: value + "17", // 9% 27 | }; 28 | } 29 | return {}; 30 | }; 31 | 32 | export function ThemeProvider(props: ThemeProviderProps) { 33 | const prefix = props.prefix || "stp-"; 34 | const system_theme_config: SystemThemesObject = 35 | props.themes?.system_theme_config || fallbackThemes.system_theme_config; 36 | const themes: ThemesObject = props.themes?.themes || fallbackThemes.themes; 37 | const themeKeys = Object.keys(themes); 38 | const hasSystemThemesObject = 39 | props.themes && props.themes.hasOwnProperty(SYSTEM_THEME_CONFIG_KEY); 40 | const systemThemesCorrect = 41 | hasSystemThemesObject && 42 | system_theme_config.hasOwnProperty("dark") && 43 | system_theme_config.hasOwnProperty("light") && 44 | themes.hasOwnProperty(system_theme_config.dark) && 45 | themes.hasOwnProperty(system_theme_config.light); 46 | const styles = props.styles || fallbackStyles; 47 | const multiToggle = themeKeys.length > 2; 48 | const menu_placement = props.menu_placement || "se"; 49 | const custom_variants = props.calculate_variants || calculate_variants; 50 | 51 | const [dropdownOpen, setDropdownOpen] = createSignal(false); 52 | const [useSystem, setUseSystem] = createSignal( 53 | props.default ? false : systemThemesCorrect ? true : false 54 | ); 55 | 56 | const systemThemeIsDark = window.matchMedia("(prefers-color-scheme: dark)"); 57 | // initialize the current theme 58 | createEffect(() => { 59 | setTheme( 60 | props.default || 61 | (systemThemesCorrect 62 | ? systemThemeIsDark.matches 63 | ? system_theme_config.dark 64 | : system_theme_config.light 65 | : themeKeys[0]) 66 | ); 67 | }); 68 | 69 | // otherTheme is used when the button is in toggle mode (only two themes configured) 70 | const [otherTheme, setOtherTheme] = createSignal( 71 | systemThemesCorrect 72 | ? props.default 73 | ? props.default == system_theme_config.dark 74 | ? system_theme_config.light 75 | : system_theme_config.dark 76 | : systemThemeIsDark.matches 77 | ? system_theme_config.light 78 | : system_theme_config.dark 79 | : themeKeys[1] 80 | ); 81 | const [currentSystem, setCurrentSystem] = createSignal( 82 | systemThemesCorrect 83 | ? systemThemeIsDark.matches 84 | ? system_theme_config.dark 85 | : system_theme_config.light 86 | : themeKeys[0] 87 | ); 88 | 89 | systemThemeIsDark.addEventListener("change", e => { 90 | if (systemThemesCorrect) { 91 | if (useSystem()) { 92 | let nextTheme = system_theme_config.light; 93 | if (e.matches) { 94 | nextTheme = system_theme_config.dark; 95 | } 96 | setOtherTheme(currentTheme()); 97 | setTheme(nextTheme); 98 | } 99 | if (e.matches) { 100 | setCurrentSystem(system_theme_config.dark); 101 | } else { 102 | setCurrentSystem(system_theme_config.light); 103 | } 104 | } 105 | }); 106 | 107 | // inject the invert stylesheet 108 | createEffect(() => { 109 | let stylesheet = document.createElement("style"); 110 | stylesheet.type = "text/css"; 111 | stylesheet.id = "stp-inverter"; 112 | document.head.appendChild(stylesheet); 113 | }); 114 | 115 | // check themes for proper config 116 | createEffect(() => { 117 | if (!systemThemesCorrect) { 118 | console.warn( 119 | `The '${SYSTEM_THEME_CONFIG_KEY}' property of your themes object is misconfigured. Automatic theme toggling may not work and the 'System Preference' dropdown option has been disabled` 120 | ); 121 | if (!hasSystemThemesObject) { 122 | console.warn(`Your themes object is missing the '${SYSTEM_THEME_CONFIG_KEY}' property.`); 123 | if (!props.default) { 124 | console.warn( 125 | `Because you have omitted the '${SYSTEM_THEME_CONFIG_KEY}' object and have not provided a default theme via props; Theme toggling will utilize the first two themes in your themes object.` 126 | ); 127 | } 128 | } else { 129 | if (!system_theme_config.hasOwnProperty("dark")) { 130 | console.warn("The 'system_themes.dark' property of your themes object is undefined."); 131 | } else if (!themes.hasOwnProperty(system_theme_config.dark)) { 132 | console.warn( 133 | `The 'system_themes.dark' property of your themes object is misconfigured. The theme '${system_theme_config.dark}' cannot be found.` 134 | ); 135 | } 136 | if (!system_theme_config.hasOwnProperty("light")) { 137 | console.warn("The 'system_themes.light' property of your themes object is undefined."); 138 | } else if (!themes.hasOwnProperty(system_theme_config.light)) { 139 | console.warn( 140 | `The 'system_themes.light' property of your themes object is misconfigured. The theme '${system_theme_config.light}' cannot be found.` 141 | ); 142 | } 143 | } 144 | } 145 | for (let [themeName, settings] of Object.entries(themes)) { 146 | if (!settings.hasOwnProperty("vars")) { 147 | console.warn( 148 | `The '${themeName}' object is missing its 'vars' property. It has been removed from the available themes` 149 | ); 150 | } else if (!settings.hasOwnProperty("config")) { 151 | console.warn(`The '${themeName}' theme object is missing its 'config' property.`); 152 | } else if (!settings.config.hasOwnProperty("icon")) { 153 | console.warn( 154 | `The '${themeName}.config' object is missing its 'icon' property. A fallback placeholder is being used instead.` 155 | ); 156 | } 157 | } 158 | }); 159 | 160 | createEffect(() => { 161 | // TODO: loop through properties of last theme and remove any that don't exist in the next theme 162 | 163 | // loop through the theme vars and inject them to the :root style element 164 | Object.keys(themes[currentTheme()].vars).forEach(name => { 165 | document.documentElement.style.setProperty( 166 | "--" + prefix + name, 167 | themes[currentTheme()].vars[name] 168 | ); 169 | 170 | // calculate any variants and inject them to the :root style element 171 | let variants = custom_variants(name, themes[currentTheme()].vars[name]); 172 | Object.keys(variants).forEach(variant => { 173 | document.documentElement.style.setProperty("--" + prefix + variant, variants[variant]); 174 | }); 175 | }); 176 | 177 | // find the theme-color meta tag and edit it, or, create a new one 178 | // 179 | let theme_meta = document.querySelector('meta[name="theme-color"]'); 180 | if ( 181 | themes[currentTheme()].hasOwnProperty("config") && 182 | themes[currentTheme()].config.hasOwnProperty("browser_theme_color") 183 | ) { 184 | if (!theme_meta) { 185 | theme_meta = document.createElement("meta"); 186 | theme_meta.setAttribute("name", "theme-color"); 187 | document.getElementsByTagName("head")[0].appendChild(theme_meta); 188 | } 189 | theme_meta.setAttribute("content", themes[currentTheme()].config.browser_theme_color); 190 | } else { 191 | if (theme_meta) theme_meta.remove(); 192 | } 193 | 194 | // add the browser theme color as a css variable 195 | document.documentElement.style.setProperty( 196 | "--" + prefix + "browser_theme_color", 197 | themes[currentTheme()].config.browser_theme_color 198 | ); 199 | 200 | // find the stp-inverter stylesheet and edit it 201 | if (systemThemesCorrect) { 202 | let invertStylesheet = document.querySelector("#stp-inverter") as HTMLElement; 203 | if (invertStylesheet) { 204 | let currentlyDark = currentTheme() == system_theme_config.dark; 205 | let currentlyLight = currentTheme() == system_theme_config.light; 206 | 207 | if (currentlyDark) { 208 | invertStylesheet.innerText = 209 | 'img[src$="#invert-safe--light"],.invert-safe--light{filter:hue-rotate(180deg) invert()}'; 210 | } else if (currentlyLight) { 211 | invertStylesheet.innerText = 212 | 'img[src$="#invert-safe--dark"],.invert-safe--dark{filter:hue-rotate(180deg) invert()}'; 213 | } 214 | } 215 | } 216 | }); 217 | 218 | function toggleTheme(nextTheme: string) { 219 | if (nextTheme == SYSTEM_THEME_KEY) { 220 | setUseSystem(true); 221 | setTheme(currentSystem()); 222 | } else { 223 | setUseSystem(false); 224 | setOtherTheme(currentTheme()); 225 | setTheme(nextTheme); 226 | } 227 | setDropdownOpen(false); 228 | } 229 | 230 | return ( 231 |
232 |
setDropdownOpen(true) : () => toggleTheme(otherTheme())} 235 | > 236 | {dropdownOpen() ? ( 237 | {CHEVRON_UP_ICON} 238 | ) : themeHasBase64Icon(themes[multiToggle ? currentTheme() : otherTheme()]) ? ( 239 | 243 | ) : ( 244 | {UNKNOWN_ICON} 245 | )} 246 | {props.label && {props.label}} 247 |
248 | {dropdownOpen() && ( 249 | 257 | )} 258 |
259 | ); 260 | } 261 | -------------------------------------------------------------------------------- /src/fallbacks.module.scss: -------------------------------------------------------------------------------- 1 | .component { 2 | position: relative; 3 | .button { 4 | cursor: pointer; 5 | display: inline-block; 6 | padding: 0.25em calc(0.25em + (var(--stp-button_radius) / 2)); 7 | border-radius: var(--stp-button_radius); 8 | background: var(--stp-background); 9 | color: var(--stp-foreground-alpha_secondary); 10 | vertical-align: top; 11 | 12 | &:hover { 13 | background: var(--stp-foreground-alpha_quaternary); 14 | 15 | .text { 16 | color: var(--stp-foreground); 17 | } 18 | .icon svg { 19 | fill: var(--stp-foreground); 20 | } 21 | } 22 | 23 | &.open { 24 | background: var(--stp-background); 25 | border-radius: 0; 26 | .icon svg { 27 | width: 1em; 28 | } 29 | } 30 | } 31 | 32 | .icon, 33 | .text { 34 | vertical-align: middle; 35 | display: inline-block; 36 | -webkit-user-select: none; 37 | user-select: none; 38 | } 39 | 40 | .icon { 41 | width: 1.5em; 42 | height: 1.5em; 43 | position: relative; 44 | margin: 0.2em 0; 45 | } 46 | 47 | .text:not(:empty) { 48 | padding-left: 0.25em; 49 | } 50 | 51 | .icon svg { 52 | width: 1.5em; 53 | fill: var(--stp-foreground-alpha_secondary); 54 | position: absolute; 55 | top: 50%; 56 | left: 50%; 57 | transform: translate(-50%, -50%); 58 | } 59 | 60 | .dropdown { 61 | position: absolute; 62 | font-size: 0.9em; 63 | text-align: left; 64 | background: var(--stp-background-alpha_secondary); 65 | -webkit-backdrop-filter: blur(15px); 66 | backdrop-filter: blur(15px); 67 | border-radius: var(--stp-button_radius); 68 | padding: 0.5em; 69 | 70 | &::before { 71 | content: ""; 72 | background: var(--stp-foreground-alpha_quaternary); 73 | border-radius: var(--stp-button_radius); 74 | position: absolute; 75 | pointer-events: none; 76 | top: 0.25em; 77 | left: 0.25em; 78 | width: calc(100% - 0.5em); 79 | height: calc(100% - 0.5em); 80 | } 81 | 82 | > div { 83 | cursor: pointer; 84 | white-space: nowrap; 85 | position: relative; 86 | &:first-child { 87 | margin-top: 0; 88 | } 89 | margin-top: 0.25em; 90 | padding: 0.2em calc(0.25em + (var(--stp-button_radius) / 2)); 91 | border-radius: calc(var(--stp-button_radius) * 0.9); 92 | .icon { 93 | font-size: 0.9em; 94 | svg { 95 | fill: var(--stp-foreground); 96 | } 97 | } 98 | .text { 99 | padding-left: 0.5em; 100 | color: var(--stp-foreground); 101 | } 102 | &.active { 103 | background: var(--stp-background); 104 | } 105 | &:hover:not(.active) { 106 | background: var(--stp-foreground-alpha_secondary); 107 | .text { 108 | color: var(--stp-background); 109 | } 110 | .icon svg { 111 | fill: var(--stp-background); 112 | } 113 | } 114 | } 115 | } 116 | 117 | &.ne, 118 | &.se { 119 | .dropdown { 120 | left: -0.25em; 121 | } 122 | } 123 | &.nw, 124 | &.sw { 125 | .dropdown { 126 | right: -0.25em; 127 | } 128 | } 129 | &.ne, 130 | &.nw { 131 | .button.open { 132 | border-bottom: 3px solid var(--stp-foreground-alpha_quaternary); 133 | padding-bottom: calc(0.25em - 3px); 134 | .icon svg { 135 | transform: translate(-50%, -50%) rotate(180deg); 136 | } 137 | } 138 | .dropdown { 139 | bottom: 100%; 140 | } 141 | } 142 | &.se, 143 | &.sw { 144 | .button.open { 145 | border-top: 3px solid var(--stp-foreground-alpha_quaternary); 146 | padding-top: calc(0.25em - 3px); 147 | } 148 | .dropdown { 149 | top: 100%; 150 | } 151 | } 152 | } 153 | -------------------------------------------------------------------------------- /src/fallbacks.themes.json: -------------------------------------------------------------------------------- 1 | { 2 | "system_theme_config": { 3 | "dark": "dark", 4 | "light": "light" 5 | }, 6 | "themes": { 7 | "dark": { 8 | "config": { 9 | "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NS42MSA1Ny44MyI+PHBhdGggZD0iTTE0LDU2YTIxLjc0LDIxLjc0LDAsMCwxLTcuNTYtNS4xMywyMi42MywyMi42MywwLDAsMS00LjgtNy42N0EyNi4zOCwyNi4zOCwwLDAsMSwwLDMzLjc1LDI1Ljg1LDI1Ljg1LDAsMCwxLDEuNzQsMjQuMmEyNS4xMSwyNS4xMSwwLDAsMSw0LjgxLTcuNzlBMjQsMjQsMCwwLDEsMTMuNjIsMTFhMi42MywyLjYzLDAsMCwxLDEuMjgtLjM2LDEuMjQsMS4yNCwwLDAsMSwuODYuMzYsMS41NiwxLjU2LDAsMCwxLC4wOSwxLjksMTYuNTgsMTYuNTgsMCwwLDAtMS4zNSw0LjMxLDI2LjkyLDI2LjkyLDAsMCwwLS40MSw0LjYsMjQuNzIsMjQuNzIsMCwwLDAsMi43MSwxMiwxOC41MiwxOC41MiwwLDAsMCw3LjY5LDcuNjJBMjQuNzgsMjQuNzgsMCwwLDAsMzYuMyw0NC4wNiwyMy43NywyMy43NywwLDAsMCw0MSw0My42NWEyNi40MSwyNi40MSwwLDAsMCwzLjgzLTEsMS45MiwxLjkyLDAsMCwxLDEtLjE4LDEsMSwwLDAsMSwuNjkuMzUsMS4xLDEuMSwwLDAsMSwuMzEuNzgsMi4yMywyLjIzLDAsMCwxLS4yNSwxLDIxLjU0LDIxLjU0LDAsMCwxLTUuMjcsNy4xOCwyMy4yOSwyMy4yOSwwLDAsMS03Ljc3LDQuNTEsMjksMjksMCwwLDEtOS42MywxLjU1QTI1LjcsMjUuNywwLDAsMSwxNCw1NlptMTguMzktMS41NWEyMi4xNiwyMi4xNiwwLDAsMCw3LTMuODMsMTkuMTIsMTkuMTIsMCwwLDAsNC44OC01Ljg4LDIxLjc4LDIxLjc4LDAsMCwxLTMuNjQuOTUsMjYsMjYsMCwwLDEtNC42My4zOSwyNi41NCwyNi41NCwwLDAsMS0xMi43LTIuODhBMjAuMjUsMjAuMjUsMCwwLDEsMTUsMzQuOTQsMjYuMywyNi4zLDAsMCwxLDEyLjEsMjIuMTVhMjksMjksMCwwLDEsLjQyLTUsMTUuNCwxNS40LDAsMCwxLDEuMjItNCwyNi44MywyNi44MywwLDAsMC02LDUuMjUsMjQuODksMjQuODksMCwwLDAtNC4xNyw3LDIyLjE5LDIyLjE5LDAsMCwwLTEuNTQsOC4zQTI0LjE0LDI0LjE0LDAsMCwwLDMuNTcsNDIuMywyMC44OSwyMC44OSwwLDAsMCw4LDQ5LjM1YTIwLjExLDIwLjExLDAsMCwwLDYuOTEsNC43M0EyMy4zMiwyMy4zMiwwLDAsMCwyNCw1NS43OCwyNi40LDI2LjQsMCwwLDAsMzIuNDIsNTQuNDVabS0xLjI4LTQxYy0uMjEtMS4yNS0uNDEtMi4yNC0uNTgtM2EzLjU5LDMuNTksMCwwLDAtLjgyLTEuNjYsMy44NCwzLjg0LDAsMCwwLTEuNjktLjg5Yy0uNzUtLjIxLTEuOC0uNDYtMy4xNS0uNzNhLjM0LjM0LDAsMCwxLS4zMi0uMzVjMC0uMTguMTEtLjI4LjMyLS4zQTI3LjQyLDI3LjQyLDAsMCwwLDI4LDUuNzZhMy41NywzLjU3LDAsMCwwLDEuNTktMSw0LDQsMCwwLDAsLjgtMS42NUwzMS4xNC4yNmEuMjcuMjcsMCwwLDEsLjMtLjI2LjI5LjI5LDAsMCwxLC4yOS4yNmMuMzEsMS4yMi41NiwyLjE4Ljc2LDIuODlBNC4xLDQuMSwwLDAsMCwzMy4zLDQuOGEzLjU4LDMuNTgsMCwwLDAsMS41OCwxLDI2LjYxLDI2LjYxLDAsMCwwLDMuMDYuNzdjLjIxLDAsLjMyLjEyLjMyLjNhLjM0LjM0LDAsMCwxLS4zMi4zNSwzMC4xMiwzMC4xMiwwLDAsMC0zLjE0LjY0LDMuNjIsMy42MiwwLDAsMC0xLjY5LjkzLDMuNzgsMy43OCwwLDAsMC0uODQsMS42OSwyNy4yNCwyNy4yNCwwLDAsMC0uNTQsMywuMjkuMjksMCwwLDEtLjI5LjI2QS4yNy4yNywwLDAsMSwzMS4xNCwxMy40MlpNNDUuMDcsMzEuOWEuNTIuNTIsMCwwLDEtLjE2LS4zMmMtLjMxLTEuOTUtLjU5LTMuNDctLjg1LTQuNTVhNC45LDQuOSwwLDAsMC0xLjE4LTIuNDIsNS42OCw1LjY4LDAsMCwwLTIuNDktMS4yNWMtMS4xMy0uMy0yLjctLjY0LTQuNzQtMWEuNDguNDgsMCwwLDEtLjQxLS41Mi40OS40OSwwLDAsMSwuMTItLjM0LjUuNSwwLDAsMSwuMjktLjE2YzItLjM3LDMuNjEtLjcxLDQuNzQtMWE1LjQ3LDUuNDcsMCwwLDAsMi40OS0xLjIzLDQuOSw0LjksMCwwLDAsMS4xOC0yLjQyYy4yNi0xLjA4LjU0LTIuNjEuODUtNC41OGEuNDYuNDYsMCwwLDEsLjUtLjQ0LjQ3LjQ3LDAsMCwxLC41LjQ3Yy4zMSwyLC42LDMuNS44OCw0LjU3QTQuOTQsNC45NCwwLDAsMCw0OCwxOS4xYTUuNDcsNS40NywwLDAsMCwyLjQ5LDEuMjJjMS4xMS4yOCwyLjY2LjYyLDQuNjYsMWEuNDguNDgsMCwwLDEsLjQ0LjUuNS41LDAsMCwxLS40Ny41MmMtMiwuMzctMy41Ny43MS00LjY4LDFBNS41NCw1LjU0LDAsMCwwLDQ4LDI0LjU4LDQuOTMsNC45MywwLDAsMCw0Ni43NywyN2MtLjI2LDEuMDgtLjU1LDIuNi0uODYsNC41N2EuNDYuNDYsMCwwLDEtLjUuNDdBLjQ5LjQ5LDAsMCwxLDQ1LjA3LDMxLjlaIi8+PC9zdmc+", 10 | "browser_theme_color": "#110000" 11 | }, 12 | "vars": { 13 | "background": "#110000", 14 | "foreground": "#ddddcc", 15 | "button_radius": "0.5em" 16 | } 17 | }, 18 | "light": { 19 | "config": { 20 | "icon": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1OC4xOSA1OC4yNCI+PHBhdGggZD0iTTcuNDQsMjhhMS4wNywxLjA3LDAsMCwxLC43OC4zNCwxLjA2LDEuMDYsMCwwLDEsMCwxLjU2LDEuMDcsMS4wNywwLDAsMS0uNzguMzRIMS4xMmExLjA3LDEuMDcsMCwwLDEtLjc4LS4zNCwxLjA2LDEuMDYsMCwwLDEsMC0xLjU2QTEuMDcsMS4wNywwLDAsMSwxLjEyLDI4Wk0xMyw0My42NGExLjA5LDEuMDksMCwwLDEsLjgtLjMzLDEsMSwwLDAsMSwuNzguMzMsMS4xLDEuMSwwLDAsMSwuMzMuODEsMSwxLDAsMCwxLS4zMy43OGwtNC40OCw0LjQ1YTEuMTIsMS4xMiwwLDAsMS0xLjU5LDAsMS4xMSwxLjExLDAsMCwxLDAtMS41NlpNOC41MywxMC4xNGExLjA2LDEuMDYsMCwwLDEtLjMzLS44LDEsMSwwLDAsMSwuMzMtLjc4LDEuMTYsMS4xNiwwLDAsMSwuODItLjMyLDEuMSwxLjEsMCwwLDEsLjc3LjMyTDE0LjU3LDEzYTEuMDksMS4wOSwwLDAsMSwuMzMuOEExLjEzLDEuMTMsMCwwLDEsMTMuNzcsMTVhMSwxLDAsMCwxLS43OC0uMzNaTTI0LjA4LDQxQTEzLjMyLDEzLjMyLDAsMCwxLDIwLDM4LjE5YTEyLjksMTIuOSwwLDAsMS0yLjc5LTQuMTEsMTIuNjgsMTIuNjgsMCwwLDEsMC05LjkyLDEzLjEyLDEzLjEyLDAsMCwxLDYuODgtNi44OSwxMi43OCwxMi43OCwwLDAsMSw5LjkxLDBBMTMsMTMsMCwwLDEsMzguMDksMjBhMTMuNCwxMy40LDAsMCwxLDIuNzksNC4xMiwxMi42OCwxMi42OCwwLDAsMSwwLDkuOTIsMTMuMjMsMTMuMjMsMCwwLDEtMi43OSw0LjExQTEzLjM3LDEzLjM3LDAsMCwxLDM0LDQxYTEyLjY2LDEyLjY2LDAsMCwxLTkuOTEsMFptMTAuNC0yLjQzYTExLjQsMTEuNCwwLDAsMCw0LTQsMTAuNzMsMTAuNzMsMCwwLDAsMC0xMC45MSwxMS40MywxMS40MywwLDAsMC00LTQsMTAuOCwxMC44LDAsMCwwLTEwLjg4LDAsMTEuNDMsMTEuNDMsMCwwLDAtNCw0LDEwLjczLDEwLjczLDAsMCwwLDAsMTAuOTEsMTEuNCwxMS40LDAsMCwwLDQsNCwxMC44LDEwLjgsMCwwLDAsMTAuODgsMFpNMzAuMjEsNy40NGExLDEsMCwwLDEtLjM0Ljc5LDEuMDksMS4wOSwwLDAsMS0xLjU2LDBBMS4wOCwxLjA4LDAsMCwxLDI4LDcuNDRWMS4xNWExLjE0LDEuMTQsMCwwLDEsLjM0LS44MSwxLjA2LDEuMDYsMCwwLDEsMS41NiwwLDEuMSwxLjEsMCwwLDEsLjM0LjgxWm0wLDQ5LjY1YTEuMSwxLjEsMCwwLDEtLjM0LjgxLDEuMDYsMS4wNiwwLDAsMS0xLjU2LDAsMS4xNCwxLjE0LDAsMCwxLS4zNC0uODFWNTAuNzhhMS4xMSwxLjExLDAsMCwxLC4zNC0uNzgsMS4xMiwxLjEyLDAsMCwxLDEuOS43OFpNNDguMDcsOC41NmExLjA3LDEuMDcsMCwwLDEsLjc5LS4zMywxLjA5LDEuMDksMCwwLDEsLjguMzMsMS4wNiwxLjA2LDAsMCwxLC4zMi43OSwxLDEsMCwwLDEtLjMyLjc5bC00LjQ5LDQuNDlhMS4wOSwxLjA5LDAsMCwxLTEuNTYsMCwxLjA1LDEuMDUsMCwwLDEtLjM1LS43OSwxLjA4LDEuMDgsMCwwLDEsLjM1LS44Wk00OS42Niw0OC4xYTEuMTQsMS4xNCwwLDAsMSwwLDEuNTgsMS4wOSwxLjA5LDAsMCwxLS44LjMzLDEuMDcsMS4wNywwLDAsMS0uNzktLjMzTDQzLjYxLDQ1LjJhMS4wNSwxLjA1LDAsMCwxLS4zNS0uNzksMSwxLDAsMCwxLC4zNS0uNzcsMS4wOSwxLjA5LDAsMCwxLC44LS4zMywxLjA3LDEuMDcsMCwwLDEsLjc5LjMzWm0xLjA5LTE3Ljg2YTEuMTIsMS4xMiwwLDAsMSwwLTIuMjRoNi4zMmExLDEsMCwwLDEsLjc5LjM0LDEuMDksMS4wOSwwLDAsMSwwLDEuNTYsMSwxLDAsMCwxLS43OS4zNFoiLz48L3N2Zz4=", 21 | "browser_theme_color": "#f1efe5" 22 | }, 23 | "vars": { 24 | "background": "#fffff5", 25 | "foreground": "#111100", 26 | "button_radius": "0.5em" 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.scss"; 2 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | export { For } from "solid-js"; 2 | export { 3 | SystemThemesObject, 4 | ThemeConfig, 5 | ThemeObject, 6 | ThemeProviderProps, 7 | ThemeVars, 8 | ThemesConfigObject, 9 | ThemesObject, 10 | } from "./lib/types"; 11 | export { Dropdown } from "./Dropdown"; 12 | export { ThemeProvider, currentTheme, setTheme } from "./ThemeProvider"; 13 | -------------------------------------------------------------------------------- /src/lib/constants.tsx: -------------------------------------------------------------------------------- 1 | import { JSX } from "solid-js"; 2 | 3 | export const SYSTEM_THEME_ICON = ( 4 | 5 | 6 | 7 | ); 8 | 9 | export const CHEVRON_UP_ICON = ( 10 | 11 | 12 | 13 | ); 14 | 15 | export const UNKNOWN_ICON = ( 16 | 17 | 18 | 19 | ); 20 | 21 | export const SYSTEM_THEME_KEY = "stp_system_theme"; 22 | export const SYSTEM_THEME_CONFIG_KEY = "system_theme_config"; 23 | -------------------------------------------------------------------------------- /src/lib/helpers.tsx: -------------------------------------------------------------------------------- 1 | import { ThemeObject } from "./types"; 2 | 3 | export function themeHasBase64Icon(theme: ThemeObject) { 4 | if (theme.hasOwnProperty("config")) { 5 | if (theme.config.hasOwnProperty("icon")) { 6 | let base64Pattern = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/; 7 | return theme.config.icon.match(base64Pattern) !== null; 8 | } 9 | } 10 | return false; 11 | } 12 | -------------------------------------------------------------------------------- /src/lib/types.ts: -------------------------------------------------------------------------------- 1 | export type ThemeConfig = { 2 | icon: string; 3 | browser_theme_color: string; 4 | }; 5 | 6 | export type ThemeVars = { 7 | [key: string]: string; 8 | }; 9 | 10 | export type ThemeObject = { 11 | config: ThemeConfig; 12 | vars: ThemeVars; 13 | }; 14 | 15 | export type SystemThemesObject = { 16 | dark: string; 17 | light: string; 18 | }; 19 | 20 | export type ThemesObject = { 21 | [key: string]: ThemeObject; 22 | }; 23 | 24 | export type ThemesConfigObject = { 25 | system_theme_config: SystemThemesObject; 26 | themes: ThemesObject; 27 | }; 28 | 29 | export type ThemeProviderProps = { 30 | calculate_variants?: (value: string, variable: string) => ThemeVars; 31 | default?: string; 32 | id?: string; 33 | label?: string; 34 | prefix?: string; 35 | styles?: any; 36 | themes?: ThemesConfigObject; 37 | menu_placement?: "ne" | "se" | "sw" | "nw"; 38 | }; 39 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "resolveJsonModule": true, 4 | "emitDeclarationOnly": true, 5 | "declaration": true, 6 | "jsx": "preserve", 7 | "jsxImportSource": "solid-js", 8 | "target": "esnext", 9 | "newLine": "LF", 10 | "moduleResolution": "node", 11 | "strict": true, 12 | "outDir": "./dist", 13 | "allowSyntheticDefaultImports": true, 14 | }, 15 | "include": ["./src"], 16 | "exclude": ["node_modules/"], 17 | } 18 | --------------------------------------------------------------------------------