├── .gitignore ├── .parcelrc ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── build-docs.js ├── build.js ├── docs ├── frame.html ├── frame.js ├── frame.scss ├── img │ ├── android-chrome-192x192.png │ ├── android-chrome-256x256.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── meta-image.png │ ├── mstile-150x150.png │ └── safari-pinned-tab.svg ├── index.html ├── index.js ├── index.scss ├── renderExample.js ├── site.webmanifest ├── test.html ├── test.js └── test.scss ├── package.json ├── src ├── _breakpoint-helper.scss └── breakpoint-helper.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .rts2_cache_* 4 | dist 5 | example-dist 6 | docs-dist 7 | out 8 | .vscode 9 | .DS_Store 10 | .parcel-cache -------------------------------------------------------------------------------- /.parcelrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@parcel/config-default" 3 | } -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .*ignore 2 | LICENSE 3 | dist 4 | .cache 5 | docs/*.html -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "es5", 4 | "bracketSpacing": true 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020-present Nicolas Cusan 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # breakpoint-helper 2 | 3 | [![npm][npm-image]][npm-url] [![license][license-image]][license-url] 4 | 5 | Small helper library (~1.1 kB) to work with layout breakpoints[1](#note-1) in Javascript. 6 | 7 | ## Demo 8 | 9 | View a demo [here](https://nicolas-cusan.github.io/breakpoint-helper/). 10 | 11 | ## Core functionality 12 | 13 | - Easily check if a breakpoint is active referencing it by name instead of value. 14 | - Listen to breakpoint changes and add/remove functionality accordingly. 15 | - Works with `px` and `em` breakpoints. 16 | - Supports `min-width` and `max-width`. 17 | - Define your own breakpoint names and values. 18 | - Share CSS breakpoints with Javascript so they only need to be maintained in one place (optional). 19 | 20 | ## Introduction 21 | 22 | In CSS it is common practice to give layout breakpoints, used in width-based media queries, names, such as `'mobile'`, `'tablet'`, `'desktop'` or `'sm'`, `'md'`, `'lg'`, to be able to easily reference them instead of having to remember exact values. 23 | 24 | Often times the the CSS breakpoints apply styling changes that need to be mirrored in Javascript, e.g. display cards in a slider on small screens (with Javascript) and as a grid on larger screens (without Javascript). 25 | 26 | **breakpoint-helper** is a thin wrapper around `window.matchMedia` that aims to make working with layout breakpoints in Javascript more convenient by allowing to reference the breakpoints by name instead of by value (`'sm'` vs. `765px`) and providing a convenient API to set and remove event listeners on media queries. 27 | 28 | ## Installation 29 | 30 | Install via [npm][npm-url] or yarn: 31 | 32 | ```shell 33 | npm install --save breakpoint-helper 34 | # or 35 | yarn add breakpoint-helper 36 | ``` 37 | 38 | ## Usage 39 | 40 | The breakpoint-helper exports a factory function to create a breakpoint-helper instance. The factory function expects to receive the breakpoints it should work with. There are different ways to provide the breakpoints, the best choice depends on the specific project setup. 41 | 42 | > **NOTE:** All initialization options expect the breakpoints to be ordered from small to large. 43 | 44 | ### Initialize with Javascript object 45 | 46 | The breakpoints can defined in an object where the object keys represent the breakpoint names and the values the screen widths. The values should be of type `string` and include a CSS unit, both `px` and `em` are supported. 47 | 48 | ```js 49 | import breakpointHelper from 'breakpoint-helper'; 50 | 51 | const bph = breakpointHelper({ 52 | xs: '416px', 53 | sm: '600px', 54 | md: '768px', 55 | lg: '1024px', 56 | xl: '1280px', 57 | xxl: '1520px', 58 | }); 59 | 60 | export default bph; 61 | ``` 62 | 63 | ### Initialize using CSS custom properties 64 | 65 | Declare custom properties on the `:root` selector using the prefix `--bph-`: 66 | 67 | ```css 68 | :root { 69 | --bph-xs: 416px; 70 | --bph-sm: 600px; 71 | --bph-md: 768px; 72 | --bph-lg: 1024px; 73 | --bph-xl: 1280px; 74 | --bph-xxl: 1520px; 75 | } 76 | ``` 77 | 78 | Then initialize breakpoint-helper passing the string `'custom'` as an argument: 79 | 80 | ```js 81 | // src/utils/bph.js 82 | import breakpointHelper from 'breakpoint-helper'; 83 | 84 | const bph = breakpointHelper('custom'); 85 | 86 | export default bph; 87 | ``` 88 | 89 | ### Initialize with Sass map (share CSS breakpoints with Javascript) 90 | 91 | Breakpoint-helper provides a sass mixin that allows the use of a Sass map to define the breakpoints. To use this method use the mixin in your Sass code by passing it the breakpoints as argument: 92 | 93 | ```scss 94 | // Import the mixin, path may vary depending on implementation 95 | @import './node_modules/breakpoint-helper/src/breakpoint-helper'; 96 | 97 | // Define a map of breakpoints 98 | $bps: ( 99 | 'xs': 416px, 100 | 'sm': 600px, 101 | 'md': 768px, 102 | 'lg': 1024px, 103 | 'xl': 1280px, 104 | 'xxl': 1520px, 105 | ); 106 | 107 | // Use the mixin 108 | @include breakpoint-helper($bps); 109 | ``` 110 | 111 | Then initialize breakpoint-helper with the string `'meta'` as argument: 112 | 113 | ```js 114 | // src/utils/bph.js 115 | import breakpointHelper from 'breakpoint-helper'; 116 | 117 | const bph = breakpointHelper('meta'); 118 | 119 | export default bph; 120 | ``` 121 | 122 | #### What is happening here? 123 | 124 | The Sass mixin will create a ruleset for the class `.breakpoint-helper` with a single `font-family` declaration, the `font-family` value will be a serialized string of the breakpoint map: 125 | 126 | ```css 127 | .breakpoint-helper { 128 | font-family: 'xs=416px&sm=600px&md=768px&lg=1024px&xl=1280px&xxl=1520px'; 129 | } 130 | ``` 131 | 132 | When breakpoint-helper gets initialized it will create a `` element in the document's `` tag with the class `breakpoint-helper`, read the `font-famliy` CSS value and deserialize it. 133 | 134 | > **NOTE:** This method does not require the use of Sass or the mixin per se. All that is required is the class `.breakpoint-helper` with the serialized breakpoints as `font-family` value. 135 | 136 | ### Typescript 137 | 138 | As of `v2.0.0` The library is written in Typescript and types definitions are available. 139 | 140 | ### Usage with React 141 | 142 | To use breakpoint-helper in React, setup an instance using any of the methods above and use it within a `useEffect` hook. You can then use a `useState` hook to use it inside your component's render function. 143 | 144 | ```jsx 145 | import { useEffect, useState } from 'react'; 146 | import { listen } from './src/utils/bph'; 147 | 148 | const MyComponent = (props) => { 149 | const [isMatching, setIsMatching] = useState(true); // Set a default value in case you are using SSR 150 | 151 | useEffect(() => { 152 | const listener = listen('sm', ({ matches }) => { 153 | setIsMatching(matches); 154 | }); 155 | return () => listener.off(); // Remove the event listener on component unmount 156 | }, []); 157 | 158 | return isMatching ? ( 159 |
Matching the "sm" breakpoint.
160 | ) : ( 161 |
Not matching the "sm" breakpoint.
162 | ); 163 | }; 164 | ``` 165 | 166 | ## Methods 167 | 168 | Each breakpoint-helper instance returns methods to work with the breakpoints. 169 | 170 | In larger projects it is convenient to create a reusable breakpoint-helper instance module and export the returned methods for easier usage. 171 | 172 | ```js 173 | import breakpointHelper from 'breakpoint-helper'; 174 | 175 | // Could be any other of the initialization methods 176 | const instance = breakpointHelper({ 177 | xs: '416px', 178 | sm: '600px', 179 | md: '768px', 180 | lg: '1024px', 181 | xl: '1280px', 182 | xxl: '1520px', 183 | }); 184 | 185 | export const { 186 | getBreakpoints, 187 | getMediaQuery, 188 | isMatching, 189 | listen, 190 | listenAll, 191 | } = instance; // Destructure methods and export for conveninece 192 | 193 | export default instance; 194 | ``` 195 | 196 | > **NOTE:** The following code examples assume the use of the instance above. 197 | 198 | ### `getBreakpoints()` 199 | 200 | Get all breakpoints as an object. Useful for debugging or passing breakpoint values to other libraries. 201 | 202 | #### Returns 203 | 204 | - `Object`: Object containing all instance breakpoints. 205 | 206 | #### Example 207 | 208 | ```js 209 | import { getBreakpoints } from './src/utils/bph'; 210 | 211 | const breakpoints = getBreakpoints(); 212 | 213 | console.log(breakpoints); 214 | // { 215 | // xs: '416px', 216 | // sm: '600px', 217 | // md: '768px', 218 | // lg: '1024px', 219 | // xl: '1280px', 220 | // xxl: '1520px', 221 | // } 222 | ``` 223 | 224 | ### `getMediaQuery(name, [useMax=false])` 225 | 226 | Get a `min-width`, `max-width` or `min-width and max-width` media query by breakpoint name. 227 | 228 | #### Arguments 229 | 230 | - **`name`** `{string|Array}`: Breakpoint name or array of two breakpoint names.[2](#note-2) 231 | - **`[useMax=false]`** `{boolean}`: Use `max-width` instead of `min-width`[3](#note-3). 232 | 233 | #### Returns 234 | 235 | - `{string}`: Media query string. 236 | 237 | #### Example 238 | 239 | ```js 240 | import { getMediaquery } from './src/utils/bph'; 241 | 242 | const mq = getMediaquery('md'); 243 | console.log(mq); 244 | // '(min-width: 768px)' 245 | 246 | const mqMax = getMediaquery('md', true); 247 | console.log(mqMax); 248 | // '(max-width: 767px)' 249 | 250 | const mqMinMax = getMediaquery(['md', 'lg']); 251 | console.log(mqMax); 252 | // '(min-width: 768px) and (max-width: 1023px)' 253 | ``` 254 | 255 | ### `isMatching(name, [useMax=false])` 256 | 257 | Check if a breakpoint or breakpoint range is currently matching. 258 | 259 | #### Arguments 260 | 261 | - **`name`** `{string|Array}`: Breakpoint name or array of two breakpoint names.[2](#note-2) 262 | - **`[useMax=false]`** `{boolean}`: Use `max-width` instead of `min-width`[3](#note-3). 263 | 264 | #### Returns 265 | 266 | - `{boolean}`: Whether the breakpoint or breakpoint range is matching or not. 267 | 268 | #### Example 269 | 270 | ```js 271 | import { isMatching } from './src/utils/bph'; 272 | 273 | if (isMatching('md')) { 274 | // Do something 275 | } else { 276 | // Do something else 277 | } 278 | 279 | if (isMatching(['md', 'lg'])) { 280 | // Screen width is between 'md' and 'lg' 281 | } 282 | ``` 283 | 284 | ### `listen(options, callback)` 285 | 286 | Listen to a breakpoint or breakpoint range change and execute a callback function. The callback function will receive a `MediaQueryList` object as parameter that can be used to check wether the breakpoint media query is matching or not. The callback function is called once on listener creation, it is possible to opt out of this behavior via options. 287 | 288 | #### Arguments 289 | 290 | - **`options`** `{Object|string|Array}` Configuration Object, breakpoint name or array of two breakpoint names. 291 | - **`options.name`** `{string}`: Breakpoint name or array of two breakpoint names.[2](#note-2) 292 | - **`[options.useMax=false]`** `{boolean}`: Use `max-width` instead of `min-width`[3](#note-3). 293 | - **`[options.immediate=true]`** `{boolean}`: Execute callback function on listener creation. 294 | - **`callback`** `{Function}` : Callback function, receives a `MediaQueryList` as parameter. 295 | 296 | #### Returns 297 | 298 | - `{Object}`: Object containing the `on` and `off` listener methods. 299 | 300 | #### Example 301 | 302 | ```js 303 | import { listen } from './src/utils/bph'; 304 | 305 | // Destructure the `MediaQueryList.matches` property 306 | const callback = ({ matches }) => { 307 | if (matches) { 308 | // Do somthing 309 | } else { 310 | // Do somthing else 311 | } 312 | }; 313 | 314 | const listener = listen('md', callback); 315 | 316 | // Remove the event listener 317 | listener.off(); 318 | 319 | // Activate it again 320 | listener.on(); 321 | ``` 322 | 323 | Using an options object instead of a breakpoint name: 324 | 325 | ```js 326 | import { listen } from './src/utils/bph'; 327 | 328 | const listener = listen( 329 | { 330 | name: 'md', 331 | useMax: true, 332 | immediate: false, 333 | }, 334 | callback 335 | ); 336 | 337 | const callback = ({ matches }) => { 338 | // ... 339 | }; 340 | ``` 341 | 342 | ### `listenAll(callback, [options])` 343 | 344 | Listen to all breakpoints matching or un-matching and execute a callback function. The callback function will receive an array of the matching breakpoint names in reverse order as a parameter. That means the largest breakpoint name (or smallest when using `options.useMax`) comes first in the array. The array will be empty if no breakpoints are matching. 345 | 346 | #### Arguments 347 | 348 | - **`callback`** `{Function}` : Callback function, receives an array of breakpoint names as parameter. 349 | - **`[options]`** `{Object}`: Configuration Object. 350 | - **`[options.listenTo]`** `{Array}`: Array of breakpoint names. All are used by default. 351 | - **`[options.useMax=false]`** `{boolean}`: Use `max-width` instead of `min-width`[3](#note-3). 352 | - **`[options.immediate=true]`** `{boolean}`: Execute callback function on listener creation. 353 | 354 | #### Returns 355 | 356 | - `{Object}`: Object containing the `on` and `off` listener methods. 357 | 358 | #### Example 359 | 360 | ```js 361 | import { listenAll } from './src/utils/bph'; 362 | 363 | const listener = listenAll(callback); 364 | 365 | const callback = (bps) => { 366 | // Get the first breakpoint in the `bps` array. 367 | const match = bps[0]; 368 | 369 | // If the largest matching breakpoint is 'lg', it will 370 | // be the first in the array `['lg', 'md', 'sm', 'xs',]`. 371 | 372 | switch (match) { 373 | case 'lg': 374 | // Do something if the breakpoint is 'lg' 375 | break; 376 | case 'md': 377 | // Do something if the breakpoint is 'md' 378 | break; 379 | case 'sm': 380 | // Do something if the breakpoint is 'sm' 381 | break; 382 | 383 | default: 384 | // Do something if another breakpoint is matching or none is 385 | break; 386 | } 387 | }; 388 | 389 | // Remove the event listener 390 | listener.off(); 391 | 392 | // Activate it again 393 | listener.on(); 394 | ``` 395 | 396 | Limit the breakpoints by passing using `options.listenTo`: 397 | 398 | ```js 399 | import { listenAll } from './src/utils/bph'; 400 | 401 | const listener = listenAll(callback, { 402 | // Only listen to the breakpoints 'xl', 'lg' and 'sm'. 403 | listenTo: ['xl', 'lg', 'sm'], 404 | // Use `max-width` media queries instead of `min-width` 405 | useMax: true, 406 | }); 407 | 408 | const callback = (bps) => { 409 | // ... 410 | }; 411 | ``` 412 | 413 | ## Size & compatibility 414 | 415 | Depending on the bundle the library is about 1.1 kB when gziped. 416 | 417 | The library is compatible with modern browsers and should also work with IE11 (not tested). 418 | 419 | ## Roadmap 420 | 421 | - Codepen or Codesandbox examples. 422 | - Create React hook. 423 | - Add testing. 424 | 425 | ## Motivation 426 | 427 | I kept needing something like this and was copying the same script from project to project, so I decided to open-source it. On one hand it might help somebody that has the same need as I do and on the other it allows me to install just as another dependency. 428 | 429 | ## Credits 430 | 431 | The initialization via metatag and the serialized `font-family` value is taken from [Zurb's Foundation](https://github.com/zurb/foundation-sites/blob/12317b1854283b3a2708d586f1141d523684f8cd/scss/util/_breakpoint.scss#L159). 432 | 433 | ## Notes 434 | 435 | 1) Browser window widths at which styles/functionality changes to adapt for wider/narrower screens. 436 | 437 | 2) The `useMax` argument will be ignored when `name` is an array. 438 | 439 | 3) When using `useMax` breakpoint-helper will subtract `1px` from the breakpoint value to prevent overlap. If the breakpoint value is defined in `em`s `0.0635em` is subtracted (the equivalent of `1px` in `em` using a `16px` base). 440 | 441 | [license-image]: https://img.shields.io/npm/l/breakpoint-helper.svg?style=flat-square 442 | [license-url]: LICENSE 443 | [npm-image]: https://img.shields.io/npm/v/breakpoint-helper.svg?style=flat-square 444 | [npm-url]: https://www.npmjs.com/package/breakpoint-helper 445 | -------------------------------------------------------------------------------- /build-docs.js: -------------------------------------------------------------------------------- 1 | import { marked } from 'marked'; 2 | import fs from 'fs'; 3 | import path from 'path'; 4 | import cheerio from 'cheerio'; 5 | import { Parcel } from '@parcel/core'; 6 | 7 | import { markedHighlight } from 'marked-highlight'; 8 | import { gfmHeadingId } from 'marked-gfm-heading-id'; 9 | import { mangle } from 'marked-mangle'; 10 | import hljs from 'highlight.js'; 11 | 12 | async function build() { 13 | // const dist = path.join(__dirname, 'docs-dist'); 14 | const src = './docs'; 15 | 16 | // fs.rm(dist, { recursive: true }, (err) => { 17 | // if (err) { 18 | // throw err; 19 | // } else { 20 | // console.log('Remove existing dir'); 21 | // } 22 | // }); 23 | 24 | marked.use(mangle()); 25 | marked.use(gfmHeadingId()); 26 | marked.use( 27 | markedHighlight({ 28 | langPrefix: 'hljs language-', 29 | highlight(code, lang) { 30 | const language = hljs.getLanguage(lang) ? lang : 'plaintext'; 31 | return hljs.highlight(code, { language }).value; 32 | }, 33 | }) 34 | ); 35 | 36 | const md = fs.readFileSync('./README.md', 'utf-8', () => {}); 37 | const index = fs.readFileSync(`${src}/index.html`, 'utf-8', () => {}); 38 | const parsed = marked.parse(md.toString('utf-8')); 39 | 40 | const $ = cheerio.load(index); 41 | const $content = $('#content'); 42 | $content.html('').append(parsed); 43 | $content.find('h2').eq(1).prevAll().remove(); 44 | 45 | let $prevList = null; 46 | let $prevItem = null; 47 | const $toc = $(''); 48 | 49 | $content.find('h2, h3').each((idx, el) => { 50 | const $el = $(el); 51 | const $html = $el 52 | .html() 53 | .toString() 54 | .replace(/ *\([^)]*\) */g, ''); 55 | const $li = $(`
  • ${$html}
  • `); 56 | 57 | if ($el.is('h2')) { 58 | $prevList = $(''); 59 | $prevItem = $li; 60 | $prevItem.append($prevList); 61 | $prevItem.appendTo($toc); 62 | } else { 63 | $li.find('a').addClass('sub-item'); 64 | $prevList.append($li); 65 | } 66 | }); 67 | 68 | $('#toc').html('').html($toc); 69 | 70 | fs.writeFileSync(`${src}/index.html`, $.html()); 71 | 72 | (async function () { 73 | if (process.env.NODE_ENV === 'production') { 74 | const bundler = new Parcel({ 75 | entries: [`${src}/index.html`], 76 | sourceMaps: false, 77 | targets: { 78 | default: { 79 | distDir: './docs-dist', 80 | publicUrl: 'https://nicolas-cusan.github.io/breakpoint-helper/', 81 | }, 82 | }, 83 | }); 84 | 85 | try { 86 | let { bundleGraph, buildTime } = await bundler.run(); 87 | let bundles = bundleGraph.getBundles(); 88 | console.log(`✨ Built ${bundles.length} bundles in ${buildTime}ms!`); 89 | } catch (err) { 90 | console.log(err.diagnostics); 91 | } 92 | } else { 93 | const bundler = new Parcel({ 94 | entries: [`${src}/index.html`], 95 | serveOptions: { 96 | port: 3000, 97 | distDir: './docs-dist', 98 | }, 99 | hmrOptions: { 100 | port: 3000, 101 | }, 102 | targets: { 103 | default: { 104 | distDir: './docs-dist', 105 | }, 106 | }, 107 | }); 108 | 109 | await bundler.watch(); 110 | } 111 | })(); 112 | } 113 | 114 | build().catch(console.error); 115 | -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | import { build } from 'esbuild'; 2 | import { copy } from 'esbuild-plugin-copy'; 3 | 4 | build({ 5 | entryPoints: ['./src/breakpoint-helper.ts'], 6 | outfile: './dist/breakpoint-helper.js', 7 | bundle: true, 8 | sourcemap: true, 9 | platform: 'neutral', // for ESM 10 | format: 'esm', 11 | plugins: [ 12 | copy({ 13 | resolveFrom: 'cwd', 14 | assets: { 15 | from: ['./src/*.scss'], 16 | to: ['./dist'], 17 | }, 18 | }), 19 | ], 20 | }).catch(() => process.exit(1)); 21 | -------------------------------------------------------------------------------- /docs/frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Frame — breakpoint-helper Javascript library 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
    34 | 35 | 36 | -------------------------------------------------------------------------------- /docs/frame.js: -------------------------------------------------------------------------------- 1 | import bph from '../dist/breakpoint-helper'; 2 | 3 | const colors = { 4 | xs: 'salmon', 5 | sm: 'darkviolet', 6 | md: 'gold', 7 | lg: 'deeppink', 8 | xl: 'mediumseagreen', 9 | xxl: 'royalblue', 10 | }; 11 | 12 | const instance = bph({ 13 | xs: '416px', 14 | sm: '600px', 15 | md: '768px', 16 | lg: '1024px', 17 | xl: '1280px', 18 | xxl: '1520px', 19 | }); 20 | 21 | const { listenAll, getMediaQuery } = instance; 22 | 23 | const root = document.getElementById('root'); 24 | 25 | const mobileMessage = ` 26 |
    27 | It looks like you are uing a mobile device, turn your phone to see a different breakpoint. 28 |
    29 | `; 30 | const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( 31 | navigator.userAgent 32 | ); 33 | 34 | function updateColor(color) { 35 | document.body.style.backgroundColor = color; 36 | parent.postMessage(color, window.location.origin); 37 | } 38 | 39 | listenAll((bps) => { 40 | const color = bps.length ? colors[bps[0]] : 'turquoise'; 41 | updateColor(color); 42 | 43 | if (bps.length) { 44 | const bp = bps[0]; 45 | root.innerHTML = ` 46 |
    ${bp}
    47 |
    ${getMediaQuery(bp)}
    48 | `; 49 | } else { 50 | if (!isMobile) { 51 | ``; 52 | } 53 | root.innerHTML = ` 54 | ${isMobile ? mobileMessage : ''} 55 |
    No breakpoint active
    56 | `; 57 | } 58 | }); 59 | -------------------------------------------------------------------------------- /docs/frame.scss: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | background-color: turquoise; 5 | transition: background-color 300ms; 6 | height: 100vh; 7 | color: rgba(255, 255, 255, 0.5); 8 | text-align: center; 9 | font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 10 | 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 11 | sans-serif; 12 | } 13 | 14 | .bp-name { 15 | font-size: 20vw; 16 | line-height: 85vh; 17 | font-weight: 900; 18 | } 19 | 20 | .bp-mq { 21 | position: absolute; 22 | left: 0; 23 | right: 0; 24 | bottom: 1.5rem; 25 | } 26 | 27 | .bp-note { 28 | position: absolute; 29 | left: 1.5rem; 30 | right: 1.5rem; 31 | top: 1.5rem; 32 | color: rgba(0, 0, 0, 0.6); 33 | } 34 | -------------------------------------------------------------------------------- /docs/img/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/android-chrome-192x192.png -------------------------------------------------------------------------------- /docs/img/android-chrome-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/android-chrome-256x256.png -------------------------------------------------------------------------------- /docs/img/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/apple-touch-icon.png -------------------------------------------------------------------------------- /docs/img/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #47b275 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/img/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/favicon-16x16.png -------------------------------------------------------------------------------- /docs/img/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/favicon-32x32.png -------------------------------------------------------------------------------- /docs/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/favicon.ico -------------------------------------------------------------------------------- /docs/img/meta-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/meta-image.png -------------------------------------------------------------------------------- /docs/img/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nicolas-cusan/breakpoint-helper/b292194a70c0837bd84b2fcc43540b986f0703b1/docs/img/mstile-150x150.png -------------------------------------------------------------------------------- /docs/img/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | breakpoint-helper Javascript library 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 40 | 41 | 42 |
    43 |

    breakpoint-helper

    44 |

    Small helper library to work with layout breakpoints1 in Javascript.

    45 |
    46 | 47 | 54 | 55 |
    56 |
    57 |
    58 |
    Demo - Resize me!
    59 | 60 |
    61 |
    62 | 63 |
    64 | 68 | 69 |
    70 |

    Demo

    71 | 72 |

    Resize the window above by dragging the bottom right corner. The current breakpoint name is displayed in the middle of the window.

    73 |
    74 | 75 |
    76 | 77 | 78 | 79 | 80 |

    Core functionality

    81 | 89 |

    Introduction

    90 |

    In CSS it is common practice to give layout breakpoints, used in width-based media queries, names, such as 'mobile', 'tablet', 'desktop' or 'sm', 'md', 'lg', to be able to easily reference them instead of having to remember exact values.

    91 |

    Often times the the CSS breakpoints apply styling changes that need to be mirrored in Javascript, e.g. display cards in a slider on small screens (with Javascript) and as a grid on larger screens (without Javascript).

    92 |

    breakpoint-helper is a thin wrapper around window.matchMedia that aims to make working with layout breakpoints in Javascript more convenient by allowing to reference the breakpoints by name instead of by value ('sm' vs. 765px) and providing a convenient API to set and remove event listeners on media queries.

    93 |

    Installation

    94 |

    Install via npm or yarn:

    95 |
    npm install --save breakpoint-helper
     96 | # or
     97 | yarn add breakpoint-helper
     98 | 

    Usage

    99 |

    The breakpoint-helper exports a factory function to create a breakpoint-helper instance. The factory function expects to receive the breakpoints it should work with. There are different ways to provide the breakpoints, the best choice depends on the specific project setup.

    100 |
    101 |

    NOTE: All initialization options expect the breakpoints to be ordered from small to large.

    102 |
    103 |

    Initialize with Javascript object

    104 |

    The breakpoints can defined in an object where the object keys represent the breakpoint names and the values the screen widths. The values should be of type string and include a CSS unit, both px and em are supported.

    105 |
    import breakpointHelper from 'breakpoint-helper';
    106 | 
    107 | const bph = breakpointHelper({
    108 |   xs: '416px',
    109 |   sm: '600px',
    110 |   md: '768px',
    111 |   lg: '1024px',
    112 |   xl: '1280px',
    113 |   xxl: '1520px',
    114 | });
    115 | 
    116 | export default bph;
    117 | 

    Initialize using CSS custom properties

    118 |

    Declare custom properties on the :root selector using the prefix --bph-:

    119 |
    :root {
    120 |   --bph-xs: 416px;
    121 |   --bph-sm: 600px;
    122 |   --bph-md: 768px;
    123 |   --bph-lg: 1024px;
    124 |   --bph-xl: 1280px;
    125 |   --bph-xxl: 1520px;
    126 | }
    127 | 

    Then initialize breakpoint-helper passing the string 'custom' as an argument:

    128 |
    // src/utils/bph.js
    129 | import breakpointHelper from 'breakpoint-helper';
    130 | 
    131 | const bph = breakpointHelper('custom');
    132 | 
    133 | export default bph;
    134 | 

    Initialize with Sass map (share CSS breakpoints with Javascript)

    135 |

    Breakpoint-helper provides a sass mixin that allows the use of a Sass map to define the breakpoints. To use this method use the mixin in your Sass code by passing it the breakpoints as argument:

    136 |
    // Import the mixin, path may vary depending on implementation
    137 | @import './node_modules/breakpoint-helper/src/breakpoint-helper';
    138 | 
    139 | // Define a map of breakpoints
    140 | $bps: (
    141 |   'xs': 416px,
    142 |   'sm': 600px,
    143 |   'md': 768px,
    144 |   'lg': 1024px,
    145 |   'xl': 1280px,
    146 |   'xxl': 1520px,
    147 | );
    148 | 
    149 | // Use the mixin
    150 | @include breakpoint-helper($bps);
    151 | 

    Then initialize breakpoint-helper with the string 'meta' as argument:

    152 |
    // src/utils/bph.js
    153 | import breakpointHelper from 'breakpoint-helper';
    154 | 
    155 | const bph = breakpointHelper('meta');
    156 | 
    157 | export default bph;
    158 | 

    What is happening here?

    159 |

    The Sass mixin will create a ruleset for the class .breakpoint-helper with a single font-family declaration, the font-family value will be a serialized string of the breakpoint map:

    160 |
    .breakpoint-helper {
    161 |   font-family: 'xs=416px&sm=600px&md=768px&lg=1024px&xl=1280px&xxl=1520px';
    162 | }
    163 | 

    When breakpoint-helper gets initialized it will create a <meta> element in the document's <head> tag with the class breakpoint-helper, read the font-famliy CSS value and deserialize it.

    164 |
    165 |

    NOTE: This method does not require the use of Sass or the mixin per se. All that is required is the class .breakpoint-helper with the serialized breakpoints as font-family value.

    166 |
    167 |

    Typescript

    168 |

    As of v2.0.0 The library is written in Typescript and types definitions are available.

    169 |

    Usage with React

    170 |

    To use breakpoint-helper in React, setup an instance using any of the methods above and use it within a useEffect hook. You can then use a useState hook to use it inside your component's render function.

    171 |
    import { useEffect, useState } from 'react';
    172 | import { listen } from './src/utils/bph';
    173 | 
    174 | const MyComponent = (props) => {
    175 |   const [isMatching, setIsMatching] = useState(true); // Set a default value in case you are using SSR
    176 | 
    177 |   useEffect(() => {
    178 |     const listener = listen('sm', ({ matches }) => {
    179 |       setIsMatching(matches);
    180 |     });
    181 |     return () => listener.off(); // Remove the event listener on component unmount
    182 |   }, []);
    183 | 
    184 |   return isMatching ? (
    185 |     <div className="is-matching">Matching the "sm" breakpoint.</div>
    186 |   ) : (
    187 |     <div className="not-matching">Not matching the "sm" breakpoint.</div>
    188 |   );
    189 | };
    190 | 

    Methods

    191 |

    Each breakpoint-helper instance returns methods to work with the breakpoints.

    192 |

    In larger projects it is convenient to create a reusable breakpoint-helper instance module and export the returned methods for easier usage.

    193 |
    import breakpointHelper from 'breakpoint-helper';
    194 | 
    195 | // Could be any other of the initialization methods
    196 | const instance = breakpointHelper({
    197 |   xs: '416px',
    198 |   sm: '600px',
    199 |   md: '768px',
    200 |   lg: '1024px',
    201 |   xl: '1280px',
    202 |   xxl: '1520px',
    203 | });
    204 | 
    205 | export const {
    206 |   getBreakpoints,
    207 |   getMediaQuery,
    208 |   isMatching,
    209 |   listen,
    210 |   listenAll,
    211 | } = instance; // Destructure methods and export for conveninece
    212 | 
    213 | export default instance;
    214 | 
    215 |

    NOTE: The following code examples assume the use of the instance above.

    216 |
    217 |

    getBreakpoints()

    218 |

    Get all breakpoints as an object. Useful for debugging or passing breakpoint values to other libraries.

    219 |

    Returns

    220 | 223 |

    Example

    224 |
    import { getBreakpoints } from './src/utils/bph';
    225 | 
    226 | const breakpoints = getBreakpoints();
    227 | 
    228 | console.log(breakpoints);
    229 | // {
    230 | //   xs: '416px',
    231 | //   sm: '600px',
    232 | //   md: '768px',
    233 | //   lg: '1024px',
    234 | //   xl: '1280px',
    235 | //   xxl: '1520px',
    236 | // }
    237 | 

    getMediaQuery(name, [useMax=false])

    238 |

    Get a min-width, max-width or min-width and max-width media query by breakpoint name.

    239 |

    Arguments

    240 | 244 |

    Returns

    245 | 248 |

    Example

    249 |
    import { getMediaquery } from './src/utils/bph';
    250 | 
    251 | const mq = getMediaquery('md');
    252 | console.log(mq);
    253 | // '(min-width: 768px)'
    254 | 
    255 | const mqMax = getMediaquery('md', true);
    256 | console.log(mqMax);
    257 | // '(max-width: 767px)'
    258 | 
    259 | const mqMinMax = getMediaquery(['md', 'lg']);
    260 | console.log(mqMax);
    261 | // '(min-width: 768px) and (max-width: 1023px)'
    262 | 

    isMatching(name, [useMax=false])

    263 |

    Check if a breakpoint or breakpoint range is currently matching.

    264 |

    Arguments

    265 | 269 |

    Returns

    270 | 273 |

    Example

    274 |
    import { isMatching } from './src/utils/bph';
    275 | 
    276 | if (isMatching('md')) {
    277 |   // Do something
    278 | } else {
    279 |   // Do something else
    280 | }
    281 | 
    282 | if (isMatching(['md', 'lg'])) {
    283 |   // Screen width is between 'md' and 'lg'
    284 | }
    285 | 

    listen(options, callback)

    286 |

    Listen to a breakpoint or breakpoint range change and execute a callback function. The callback function will receive a MediaQueryList object as parameter that can be used to check wether the breakpoint media query is matching or not. The callback function is called once on listener creation, it is possible to opt out of this behavior via options.

    287 |

    Arguments

    288 | 295 |

    Returns

    296 | 299 |

    Example

    300 |
    import { listen } from './src/utils/bph';
    301 | 
    302 | // Destructure the `MediaQueryList.matches` property
    303 | const callback = ({ matches }) => {
    304 |   if (matches) {
    305 |     // Do somthing
    306 |   } else {
    307 |     // Do somthing else
    308 |   }
    309 | };
    310 | 
    311 | const listener = listen('md', callback);
    312 | 
    313 | // Remove the event listener
    314 | listener.off();
    315 | 
    316 | // Activate it again
    317 | listener.on();
    318 | 

    Using an options object instead of a breakpoint name:

    319 |
    import { listen } from './src/utils/bph';
    320 | 
    321 | const listener = listen(
    322 |   {
    323 |     name: 'md',
    324 |     useMax: true,
    325 |     immediate: false,
    326 |   },
    327 |   callback
    328 | );
    329 | 
    330 | const callback = ({ matches }) => {
    331 |   // ...
    332 | };
    333 | 

    listenAll(callback, [options])

    334 |

    Listen to all breakpoints matching or un-matching and execute a callback function. The callback function will receive an array of the matching breakpoint names in reverse order as a parameter. That means the largest breakpoint name (or smallest when using options.useMax) comes first in the array. The array will be empty if no breakpoints are matching.

    335 |

    Arguments

    336 | 343 |

    Returns

    344 | 347 |

    Example

    348 |
    import { listenAll } from './src/utils/bph';
    349 | 
    350 | const listener = listenAll(callback);
    351 | 
    352 | const callback = (bps) => {
    353 |   // Get the first breakpoint in the `bps` array.
    354 |   const match = bps[0];
    355 | 
    356 |   // If the largest matching breakpoint is 'lg', it will
    357 |   // be the first in the array `['lg', 'md', 'sm', 'xs',]`.
    358 | 
    359 |   switch (match) {
    360 |     case 'lg':
    361 |       // Do something if the breakpoint is 'lg'
    362 |       break;
    363 |     case 'md':
    364 |       // Do something if the breakpoint is 'md'
    365 |       break;
    366 |     case 'sm':
    367 |       // Do something if the breakpoint is 'sm'
    368 |       break;
    369 | 
    370 |     default:
    371 |       // Do something if another breakpoint is matching or none is
    372 |       break;
    373 |   }
    374 | };
    375 | 
    376 | // Remove the event listener
    377 | listener.off();
    378 | 
    379 | // Activate it again
    380 | listener.on();
    381 | 

    Limit the breakpoints by passing using options.listenTo:

    382 |
    import { listenAll } from './src/utils/bph';
    383 | 
    384 | const listener = listenAll(callback, {
    385 |   // Only listen to the breakpoints 'xl', 'lg' and 'sm'.
    386 |   listenTo: ['xl', 'lg', 'sm'],
    387 |   // Use `max-width` media queries instead of `min-width`
    388 |   useMax: true,
    389 | });
    390 | 
    391 | const callback = (bps) => {
    392 |   // ...
    393 | };
    394 | 

    Size & compatibility

    395 |

    Depending on the bundle the library is about 1.1 kB when gziped.

    396 |

    The library is compatible with modern browsers and should also work with IE11 (not tested).

    397 |

    Roadmap

    398 | 403 |

    Motivation

    404 |

    I kept needing something like this and was copying the same script from project to project, so I decided to open-source it. On one hand it might help somebody that has the same need as I do and on the other it allows me to install just as another dependency.

    405 |

    Credits

    406 |

    The initialization via metatag and the serialized font-family value is taken from Zurb's Foundation.

    407 |

    Notes

    408 |

    1) Browser window widths at which styles/functionality changes to adapt for wider/narrower screens.

    409 |

    2) The useMax argument will be ignored when name is an array.

    410 |

    3) When using useMax breakpoint-helper will subtract 1px from the breakpoint value to prevent overlap. If the breakpoint value is defined in ems 0.0635em is subtracted (the equivalent of 1px in em using a 16px base).

    411 |
    412 |
    413 | 414 | 415 | 420 | 421 | 422 | -------------------------------------------------------------------------------- /docs/index.js: -------------------------------------------------------------------------------- 1 | const doc = document.documentElement; 2 | 3 | // Update color 4 | window.addEventListener('message', (event) => { 5 | if (event.origin !== window.location.origin) return; 6 | if (typeof event.data !== 'string') return; 7 | 8 | doc.style.setProperty('--link-color', event.data); 9 | }); 10 | 11 | // Handle Resize 12 | const resizer = document.querySelector('.resizer-inner'); 13 | const dragger = document.querySelector('.resizer-dragger'); 14 | 15 | dragger.addEventListener('pointerdown', initDrag, false); 16 | 17 | let startX, startWidth; 18 | 19 | function initDrag(e) { 20 | startX = e.clientX; 21 | startWidth = parseInt(window.getComputedStyle(resizer).width, 10); 22 | doc.addEventListener('pointermove', doDrag, false); 23 | doc.addEventListener('pointerup', stopDrag, false); 24 | } 25 | 26 | function doDrag(e) { 27 | resizer.style.width = startWidth + e.clientX - startX + 'px'; 28 | } 29 | 30 | function stopDrag(e) { 31 | doc.removeEventListener('pointermove', doDrag, false); 32 | doc.removeEventListener('pointerup', stopDrag, false); 33 | } 34 | 35 | // Handle Menu 36 | 37 | const anchors = [...document.querySelectorAll('#toc a[href^="#"]')]; 38 | let headings = getHeadings(); 39 | 40 | function getHeadings() { 41 | headings = [...document.querySelectorAll('h2[id],h3[id]')].map((heading) => { 42 | return { 43 | id: heading.id, 44 | top: 45 | document.getElementById(heading.id).getBoundingClientRect().top + 46 | window.scrollY, 47 | }; 48 | }); 49 | } 50 | 51 | function onScroll() { 52 | let sortedHeadings = headings.concat([]).sort((a, b) => a.top - b.top); 53 | let top = window.pageYOffset + window.innerHeight / 3; 54 | let current = sortedHeadings[0].id; 55 | for (let i = 0; i < sortedHeadings.length; i++) { 56 | if (top >= sortedHeadings[i].top) { 57 | current = sortedHeadings[i].id; 58 | } 59 | } 60 | 61 | anchors.forEach((anchor) => { 62 | anchor.parentElement.classList.remove('active'); 63 | }); 64 | 65 | const newAnchor = anchors.find( 66 | (anchor) => anchor.href.split('#')[1] === current 67 | ); 68 | 69 | if (!newAnchor) return; 70 | newAnchor.parentElement.classList.add('active'); 71 | if (newAnchor.classList.contains('sub-item')) { 72 | newAnchor.parentElement.parentElement.parentElement.classList.add('active'); 73 | } 74 | } 75 | 76 | window.addEventListener('scroll', onScroll, { 77 | capture: true, 78 | passive: true, 79 | }); 80 | 81 | const resizeObserver = new window.ResizeObserver(() => { 82 | getHeadings(); 83 | }); 84 | resizeObserver.observe(document.body); 85 | 86 | getHeadings(); 87 | onScroll(); 88 | -------------------------------------------------------------------------------- /docs/index.scss: -------------------------------------------------------------------------------- 1 | // Sass stuff 2 | // ============================================ 3 | 4 | $bps: ( 5 | 'xs': 416px, 6 | 'sm': 600px, 7 | 'md': 768px, 8 | 'lg': 1024px, 9 | 'xl': 1280px, 10 | 'xxl': 1520px, 11 | ); 12 | 13 | @mixin mq($name) { 14 | @media (min-width: #{map-get($bps, $name)}) { 15 | @content; 16 | } 17 | } 18 | 19 | // Defaults 20 | // ============================================ 21 | 22 | :root { 23 | --link-color: turquoise; 24 | } 25 | 26 | html { 27 | scroll-behavior: smooth; 28 | } 29 | 30 | body { 31 | line-height: 1.5; 32 | font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 33 | 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 34 | sans-serif; 35 | color: #111; 36 | } 37 | 38 | a { 39 | color: var(--link-color); 40 | transition: color 300ms, opacity 300ms; 41 | 42 | &:focus, 43 | &:hover { 44 | opacity: 0.7; 45 | } 46 | } 47 | 48 | // Code 49 | // ============================================ 50 | 51 | pre, 52 | code { 53 | font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; 54 | font-size: 85%; 55 | border-radius: 4px; 56 | background-color: #f6f8fa; 57 | } 58 | 59 | code { 60 | padding: 0.2em 0.4em; 61 | } 62 | 63 | pre { 64 | line-height: 1.45; 65 | padding: 0.6em 1em; 66 | overflow: auto; 67 | 68 | code { 69 | padding: 0; 70 | font-size: inherit; 71 | } 72 | } 73 | 74 | // Title 75 | // ============================================ 76 | 77 | .main-title { 78 | font-size: 2rem; 79 | font-weight: 900; 80 | letter-spacing: -0.01rem; 81 | text-align: center; 82 | padding: 1.5rem 0; 83 | 84 | @include mq('xs') { 85 | letter-spacing: -0.06rem; 86 | font-size: calc(10vw - 0.5rem); 87 | } 88 | 89 | @include mq('md') { 90 | font-size: calc(8vw - 0.25rem); 91 | } 92 | } 93 | 94 | .tagline { 95 | padding: 0 2rem; 96 | text-align: center; 97 | font-size: 1.4rem; 98 | font-weight: bold; 99 | color: #999; 100 | line-height: 1.3; 101 | max-width: 500px; 102 | margin: 0 auto 2rem; 103 | 104 | @include mq('xs') { 105 | font-size: 1.5rem; 106 | } 107 | 108 | @include mq('md') { 109 | max-width: 90vw; 110 | font-size: calc(4vw - 0.25rem); 111 | } 112 | 113 | @include mq('xl') { 114 | max-width: 1088px; 115 | font-size: 47px; 116 | } 117 | } 118 | 119 | // Buttons 120 | // ============================================ 121 | 122 | .links { 123 | margin-bottom: 4rem; 124 | text-align: center; 125 | } 126 | 127 | .buttons { 128 | display: flex; 129 | align-items: center; 130 | justify-content: center; 131 | margin-bottom: 0.5rem; 132 | flex-wrap: wrap; 133 | } 134 | 135 | .btn { 136 | padding: 0.6rem 1.8rem; 137 | border-radius: 4px; 138 | background-color: var(--link-color); 139 | transition: background-color 300ms, opacity 300ms; 140 | font-weight: bold; 141 | color: white; 142 | margin: 0.3rem; 143 | font-size: 1.2rem; 144 | text-align: center; 145 | 146 | &:hover, 147 | &:focus { 148 | opacity: 0.5; 149 | } 150 | 151 | @include mq('md') { 152 | min-width: 8.5rem; 153 | } 154 | } 155 | 156 | // Resizer 157 | // ============================================ 158 | 159 | .resizer { 160 | margin: 0 auto 4rem; 161 | padding: 0 2rem; 162 | max-width: 1700px; 163 | position: relative; 164 | user-select: none; 165 | touch-action: none; 166 | } 167 | 168 | .resizer-chrome { 169 | display: block; 170 | content: ''; 171 | background-color: #ddd; 172 | border-radius: 5px 5px 0 0; 173 | height: 22px; 174 | position: relative; 175 | text-align: center; 176 | font-size: 0.9rem; 177 | 178 | &::after { 179 | content: ''; 180 | width: 12px; 181 | height: 12px; 182 | border-radius: 50%; 183 | background-color: #aaa; 184 | position: absolute; 185 | left: 8px; 186 | top: 5px; 187 | box-shadow: 18px 0 0 0 #aaa, 36px 0 0 0 #aaa; 188 | } 189 | } 190 | 191 | .resizer-inner { 192 | position: relative; 193 | overflow: hidden; 194 | margin: 0 auto; 195 | min-width: 260px; 196 | max-width: 100%; 197 | } 198 | 199 | .resizer-dragger { 200 | width: 50px; 201 | height: 100%; 202 | position: absolute; 203 | right: 3px; 204 | cursor: ew-resize; 205 | bottom: 3px; 206 | background-position: bottom right; 207 | background-image: linear-gradient( 208 | -45deg, 209 | white, 210 | white 2px, 211 | transparent 2px, 212 | transparent 5px, 213 | white 5px, 214 | white 7px, 215 | transparent 7px, 216 | transparent 10px, 217 | white 10px, 218 | white 12px, 219 | transparent 12px 220 | ); 221 | } 222 | 223 | iframe { 224 | width: 100%; 225 | height: 250px; 226 | display: block; 227 | pointer-events: none; 228 | 229 | @include mq('md') { 230 | height: 400px; 231 | } 232 | } 233 | 234 | // Content 235 | // ============================================ 236 | 237 | .container { 238 | max-width: 800px; 239 | padding: 0 2rem 3rem; 240 | margin: 0 auto; 241 | } 242 | 243 | .toc { 244 | float: right; 245 | width: calc(50vw - 400px); 246 | margin-right: calc((50vw - 400px) * -1); 247 | padding-left: 3rem; 248 | top: 0; 249 | padding-top: 2.5rem; 250 | margin-top: -2.5rem; 251 | position: sticky; 252 | display: none; 253 | font-size: 0.85rem; 254 | font-weight: 500; 255 | color: #999; 256 | height: 100vh; 257 | overflow: auto; 258 | 259 | @include mq('xl') { 260 | display: block; 261 | } 262 | 263 | .list > li { 264 | margin-bottom: 0.6rem; 265 | } 266 | 267 | .list ul { 268 | margin-top: 0.35rem; 269 | } 270 | 271 | .list ul li { 272 | padding-left: 1.6rem; 273 | margin-bottom: 0.35rem; 274 | font-weight: normal; 275 | position: relative; 276 | 277 | &::before { 278 | content: '•'; 279 | position: absolute; 280 | top: 0; 281 | left: 0.6rem; 282 | } 283 | } 284 | 285 | a { 286 | color: inherit; 287 | } 288 | 289 | li.active > a, 290 | a:focus, 291 | a:hover { 292 | color: var(--link-color); 293 | opacity: 1; 294 | } 295 | } 296 | 297 | .content + .content { 298 | margin-top: 2.3rem; 299 | } 300 | 301 | .content { 302 | a { 303 | text-decoration: underline; 304 | } 305 | 306 | p, 307 | ul, 308 | blockquote, 309 | pre { 310 | margin-bottom: 1rem; 311 | 312 | &:last-child { 313 | margin-bottom: 0; 314 | } 315 | } 316 | 317 | h1, 318 | h2, 319 | h3, 320 | h4, 321 | h5, 322 | h6 { 323 | margin-bottom: 1rem; 324 | letter-spacing: -0.02rem; 325 | font-weight: bold; 326 | line-height: 1.3333; 327 | 328 | &:first-child { 329 | margin-top: 0; 330 | } 331 | 332 | &:last-child { 333 | margin-bottom: 0; 334 | } 335 | } 336 | 337 | h1, 338 | h2 { 339 | font-size: 1.7rem; 340 | font-weight: bold; 341 | border-bottom: #e9e9e9 1px solid; 342 | padding-bottom: 0.3rem; 343 | margin-top: 3.7rem; 344 | scroll-margin-top: 3.7rem; 345 | } 346 | 347 | h3 { 348 | margin-bottom: 1.15rem; 349 | margin-top: 3rem; 350 | scroll-margin-top: 1.3rem; 351 | } 352 | 353 | h3 { 354 | font-size: 1.25rem; 355 | 356 | code { 357 | font-size: 100%; 358 | } 359 | } 360 | 361 | h4, 362 | h5, 363 | h5, 364 | h6 { 365 | margin-top: 1.3rem; 366 | margin-bottom: 0.65rem; 367 | scroll-margin-top: 1.3rem; 368 | } 369 | 370 | h4 { 371 | font-size: 1.05rem; 372 | } 373 | 374 | ul { 375 | padding-left: 2rem; 376 | list-style-type: disc; 377 | 378 | li { 379 | margin-top: 0.25rem; 380 | } 381 | } 382 | 383 | blockquote { 384 | border-left: 5px solid #aaa; 385 | color: #666; 386 | padding-left: 1rem; 387 | } 388 | } 389 | 390 | .footer { 391 | border-top: #e9e9e9 1px solid; 392 | } 393 | 394 | .footer-inner { 395 | padding: 2rem; 396 | max-width: 800px; 397 | margin: 0 auto; 398 | font-size: 0.9rem; 399 | } 400 | -------------------------------------------------------------------------------- /docs/renderExample.js: -------------------------------------------------------------------------------- 1 | export const root = document.getElementById('root'); 2 | 3 | function mergeObjects() { 4 | const resObj = {}; 5 | for (let i = 0; i < arguments.length; i += 1) { 6 | const obj = arguments[i], 7 | keys = Object.keys(obj); 8 | for (let j = 0; j < keys.length; j += 1) { 9 | resObj[keys[j]] = obj[keys[j]]; 10 | } 11 | } 12 | return resObj; 13 | } 14 | 15 | export function renderExample(options = {}) { 16 | const defaults = { 17 | title: '', 18 | subtitle: '', 19 | useBtn: false, 20 | code: '', 21 | result: '', 22 | }; 23 | 24 | const settings = mergeObjects({}, defaults, options); 25 | const { title, subtitle, useBtn, code, result } = settings; 26 | 27 | const h2 = document.createElement('h2'); 28 | const example = document.createElement('div'); 29 | const exampleCode = document.createElement('div'); 30 | const exampleResult = document.createElement('div'); 31 | const codePre = document.createElement('pre'); 32 | const resultPre = document.createElement('pre'); 33 | const button = document.createElement('button'); 34 | 35 | example.classList.add('example'); 36 | 37 | example.appendChild(exampleCode); 38 | example.appendChild(exampleResult); 39 | 40 | exampleCode.classList.add('example_item', 'example_item-code'); 41 | exampleCode.appendChild(codePre); 42 | 43 | exampleResult.classList.add('example_item', 'example_item-result'); 44 | exampleResult.appendChild(resultPre); 45 | 46 | codePre.classList.add('example_pre', 'example_pre-code'); 47 | resultPre.classList.add('example_pre', 'example_pre-result'); 48 | 49 | h2.innerHTML = `${title} ${subtitle}`; 50 | codePre.innerHTML = `${code}`; 51 | resultPre.innerHTML = `${result}`; 52 | 53 | if (title) { 54 | root.appendChild(h2); 55 | } 56 | 57 | if (subtitle) { 58 | h2.innerHTML = subtitle; 59 | root.appendChild(h2); 60 | } 61 | 62 | if (code || result) { 63 | root.appendChild(example); 64 | } 65 | 66 | if (useBtn) { 67 | button.innerHTML = 'Disable'; 68 | exampleCode.appendChild(button); 69 | codePre.classList.add('example_pre-button'); 70 | } 71 | 72 | let isActive = true; 73 | 74 | return { 75 | code: (txt) => { 76 | codePre.innerHTML = `${txt}`; 77 | }, 78 | result: (txt) => { 79 | resultPre.innerHTML = `${txt}`; 80 | }, 81 | button: (listener = null) => { 82 | if (!listener) return; 83 | 84 | button.addEventListener('click', () => { 85 | if (isActive) { 86 | listener.off(); 87 | resultPre.innerHTML = `// listener.off() was called!\n// The listener is currently disabled`; 88 | button.innerHTML = 'Enable'; 89 | resultPre.classList.toggle('example_pre-disabled'); 90 | } else { 91 | resultPre.innerHTML = `${result}`; 92 | button.innerHTML = 'Disable'; 93 | resultPre.classList.toggle('example_pre-disabled'); 94 | listener.on(); 95 | } 96 | 97 | isActive = !isActive; 98 | }); 99 | }, 100 | }; 101 | } 102 | -------------------------------------------------------------------------------- /docs/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BPH", 3 | "short_name": "BPH", 4 | "icons": [ 5 | { 6 | "src": "./img/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "./img/android-chrome-256x256.png", 12 | "sizes": "256x256", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /docs/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Test page — breakpoint-helper Javascript library 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 42 | 43 | 44 | ← Back 45 |

    breakpoint-helper — tests

    46 | 47 |
    48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /docs/test.js: -------------------------------------------------------------------------------- 1 | import bph from '../dist/breakpoint-helper'; 2 | import { renderExample } from './renderExample'; 3 | 4 | // Create the instance 5 | const bps = { 6 | xs: '416px', 7 | sm: '600px', 8 | md: '768px', 9 | lg: '1024px', 10 | xl: '1280px', 11 | xxl: '1520px', 12 | }; 13 | 14 | const instance = bph(bps); 15 | 16 | const { 17 | getBreakpoints, 18 | getMediaQuery, 19 | isMatching, 20 | listen, 21 | listenAll, 22 | } = instance; 23 | 24 | renderExample({ 25 | subtitle: 'instance - Object', 26 | result: instance.toString(), 27 | code: `import bph from 'breakpoint-helper'; 28 | 29 | const instance = bph({ 30 | xs: '416px', 31 | sm: '600px', 32 | md: '768px', 33 | lg: '1024px', 34 | xl: '1280px', 35 | xxl: '1520px', 36 | }); 37 | 38 | console.log('instance'); 39 | 40 | const { 41 | getBreakpoints, 42 | getMediaQuery, 43 | isMatching, 44 | listen, 45 | listenAll, 46 | } = instance;`, 47 | }); 48 | 49 | const sassInstance = bph('meta'); 50 | 51 | renderExample({ 52 | subtitle: 'instance - Sass map / meta element', 53 | result: sassInstance.toString(), 54 | code: `import bph from 'breakpoint-helper'; 55 | 56 | const instance = bph('meta'); 57 | console.log('instance');`, 58 | }); 59 | 60 | const cssInstance = bph('custom'); 61 | 62 | renderExample({ 63 | subtitle: 'instance - CSS custom properties', 64 | result: cssInstance.toString(), 65 | code: `import bph from 'breakpoint-helper'; 66 | 67 | const instance = bph('custom'); 68 | console.log('instance');`, 69 | }); 70 | 71 | renderExample({ 72 | title: 'getBreakpoints()', 73 | code: `const bps = getBreakpoints(); 74 | console.log(bps);`, 75 | result: JSON.stringify(getBreakpoints(), null, 2), 76 | }); 77 | 78 | renderExample({ 79 | title: 'getMediaQuery()', 80 | code: `const mq = getMediaQuery('sm'); 81 | console.log(mq);`, 82 | result: getMediaQuery('sm'), 83 | }); 84 | 85 | renderExample({ 86 | title: '', 87 | code: `const mq = getMediaQuery('sm', true); 88 | console.log(mq);`, 89 | result: getMediaQuery('sm', true), 90 | }); 91 | 92 | renderExample({ 93 | title: '', 94 | code: `const mq = getMediaQuery(['sm', 'lg']); 95 | console.log(mq);`, 96 | result: getMediaQuery(['sm', 'lg']), 97 | }); 98 | 99 | renderExample({ 100 | title: 'isMatching()', 101 | code: `const match = isMatching('sm'); 102 | console.log(match);`, 103 | result: isMatching('sm'), 104 | }); 105 | 106 | renderExample({ 107 | title: '', 108 | code: `const match = isMatching('sm', true); 109 | console.log(match);`, 110 | result: isMatching('sm', true), 111 | }); 112 | 113 | renderExample({ 114 | title: '', 115 | code: `const match = isMatching(['sm', 'lg']); 116 | console.log(match);`, 117 | result: isMatching(['sm', 'lg']), 118 | }); 119 | 120 | (function () { 121 | const snippet = `const listener = listen('sm', ({ matches }) => { 122 | console.log(matches); 123 | });`; 124 | const { result, button } = renderExample({ 125 | title: 'listen()', 126 | useBtn: true, 127 | code: snippet, 128 | }); 129 | 130 | const listener = listen('sm', ({ matches }) => { 131 | result(matches); 132 | }); 133 | 134 | button(listener); 135 | })(); 136 | 137 | (function () { 138 | const snippet = `const listener = listen(['sm', 'lg'], ({ matches }) => { 139 | console.log(matches); 140 | });`; 141 | const { result, button } = renderExample({ 142 | title: '', 143 | useBtn: true, 144 | code: snippet, 145 | }); 146 | 147 | const listener = listen(['sm', 'lg'], ({ matches }) => { 148 | result(matches); 149 | }); 150 | 151 | button(listener); 152 | })(); 153 | 154 | (function () { 155 | const snippet = `const listener = listen( 156 | { 157 | name: 'sm', 158 | useMax: true, 159 | }, 160 | ({ matches }) => { 161 | console.log(matches); 162 | } 163 | );`; 164 | const { result, button } = renderExample({ 165 | title: '', 166 | useBtn: true, 167 | code: snippet, 168 | }); 169 | 170 | const listener = listen( 171 | { 172 | name: 'sm', 173 | useMax: true, 174 | }, 175 | ({ matches }) => { 176 | result(matches); 177 | } 178 | ); 179 | 180 | button(listener); 181 | })(); 182 | 183 | (function () { 184 | const snippet = `const listener = listen( 185 | { 186 | name: 'sm', 187 | immediate: false 188 | }, 189 | ({ matches }) => { 190 | console.log(matches); 191 | } 192 | );`; 193 | const { result, button } = renderExample({ 194 | title: '', 195 | useBtn: true, 196 | code: snippet, 197 | result: `// Resize the window to see a result.\n// You need to move passed ${bps['sm']}.`, 198 | }); 199 | 200 | const listener = listen( 201 | { 202 | name: 'sm', 203 | immediate: false, 204 | }, 205 | ({ matches }) => { 206 | result(matches); 207 | } 208 | ); 209 | 210 | button(listener); 211 | })(); 212 | 213 | (function () { 214 | const snippet = `const listener = listen( 215 | { 216 | name: ['sm', 'lg'], 217 | immediate: false 218 | }, 219 | ({ matches }) => { 220 | console.log(matches); 221 | } 222 | );`; 223 | const { result, button } = renderExample({ 224 | title: '', 225 | useBtn: true, 226 | code: snippet, 227 | result: `// Resize the window to see a result.\n// You need to move passed ${ 228 | bps['sm'] 229 | } or ${parseInt(bps['lg']) - 1}px.`, 230 | }); 231 | 232 | const listener = listen( 233 | { 234 | name: ['sm', 'lg'], 235 | immediate: false, 236 | }, 237 | ({ matches }) => { 238 | result(matches); 239 | } 240 | ); 241 | 242 | button(listener); 243 | })(); 244 | 245 | (function () { 246 | const snippet = `const listener = listenAll((matches) => { 247 | console.log(matches); 248 | });`; 249 | const { result, button } = renderExample({ 250 | title: 'listenAll()', 251 | useBtn: true, 252 | code: snippet, 253 | }); 254 | 255 | const listener = listenAll((matches) => { 256 | result(JSON.stringify(matches)); 257 | }); 258 | 259 | button(listener); 260 | })(); 261 | 262 | (function () { 263 | const snippet = `const listener = listenAll( 264 | (matches) => { 265 | console.log(matches); 266 | }, 267 | { 268 | useMax: true, 269 | } 270 | );`; 271 | const { result, button } = renderExample({ 272 | title: '', 273 | useBtn: true, 274 | code: snippet, 275 | }); 276 | 277 | const listener = listenAll( 278 | (matches) => { 279 | result(JSON.stringify(matches)); 280 | }, 281 | { 282 | useMax: true, 283 | } 284 | ); 285 | 286 | button(listener); 287 | })(); 288 | 289 | (function () { 290 | const snippet = `const listener = listenAll( 291 | (matches) => { 292 | console.log(matches); 293 | }, 294 | { 295 | listenTo: ['sm', 'lg', 'xxl'], 296 | } 297 | );`; 298 | const { result, button } = renderExample({ 299 | title: '', 300 | useBtn: true, 301 | code: snippet, 302 | }); 303 | 304 | const listener = listenAll( 305 | (matches) => { 306 | result(JSON.stringify(matches)); 307 | }, 308 | { 309 | listenTo: ['sm', 'lg', 'xxl'], 310 | } 311 | ); 312 | 313 | button(listener); 314 | })(); 315 | 316 | (function () { 317 | const snippet = `const listener = listenAll( 318 | (matches) => { 319 | console.log(matches); 320 | }, 321 | { 322 | listenTo: ['sm', 'lg', 'xxl'], 323 | useMax: true, 324 | } 325 | );`; 326 | const { result, button } = renderExample({ 327 | title: '', 328 | useBtn: true, 329 | code: snippet, 330 | }); 331 | 332 | const listener = listenAll( 333 | (matches) => { 334 | result(JSON.stringify(matches)); 335 | }, 336 | { 337 | listenTo: ['sm', 'lg', 'xxl'], 338 | useMax: true, 339 | } 340 | ); 341 | 342 | button(listener); 343 | })(); 344 | 345 | (function () { 346 | const snippet = `const listener = listenAll( 347 | (matches) => { 348 | console.log(matches); 349 | }, 350 | { 351 | immediate: false, 352 | } 353 | );`; 354 | const { result, button } = renderExample({ 355 | title: '', 356 | useBtn: true, 357 | code: snippet, 358 | result: `// Resize the window to see a result.`, 359 | }); 360 | 361 | const listener = listenAll( 362 | (matches) => { 363 | result(JSON.stringify(matches)); 364 | }, 365 | { 366 | immediate: false, 367 | } 368 | ); 369 | 370 | button(listener); 371 | })(); 372 | -------------------------------------------------------------------------------- /docs/test.scss: -------------------------------------------------------------------------------- 1 | // Breakpoint helper setup 2 | 3 | @import '../src/breakpoint-helper'; 4 | 5 | $bps: ( 6 | 'xs': 416px, 7 | 'sm': 600px, 8 | 'md': 768px, 9 | 'lg': 1024px, 10 | 'xl': 1280px, 11 | 'xxl': 1520px, 12 | ); 13 | 14 | @include breakpoint-helper($bps); 15 | 16 | :root { 17 | --bph-xs: 274px; 18 | --bph-sm: 486px; 19 | --bph-md: 668px; 20 | --bph-lg: 884px; 21 | --bph-xl: 1090px; 22 | --bph-xxl: 1290px; 23 | } 24 | 25 | // Styles 26 | 27 | body { 28 | font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 29 | 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 30 | sans-serif; 31 | padding: 2rem; 32 | } 33 | 34 | h1, 35 | h2 { 36 | margin: 2.5rem 0 1.4rem; 37 | font-weight: bold; 38 | } 39 | 40 | h1 { 41 | font-size: 2em; 42 | } 43 | 44 | h1 { 45 | a { 46 | font-size: 1rem; 47 | } 48 | } 49 | 50 | h2 { 51 | font-size: 1.5em; 52 | } 53 | 54 | code { 55 | background-color: #f0f0f0; 56 | padding: 0 0.2em; 57 | border-radius: 0.2em; 58 | font-size: 85%; 59 | font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; 60 | } 61 | 62 | pre { 63 | background-color: #f0f0f0; 64 | padding: 1.6rem; 65 | overflow: auto; 66 | 67 | code { 68 | background-color: transparent; 69 | padding: 0; 70 | border-radius: 0; 71 | } 72 | } 73 | 74 | .example { 75 | display: flex; 76 | flex-wrap: wrap; 77 | margin-bottom: 1.4rem; 78 | position: relative; 79 | } 80 | 81 | .example_item { 82 | flex: 1 1 400px; 83 | display: flex; 84 | min-width: 0; 85 | position: relative; 86 | 87 | &::after { 88 | position: absolute; 89 | top: 0; 90 | left: 0; 91 | font-size: 0.8rem; 92 | font-family: sans-serif; 93 | padding: 0.4rem; 94 | opacity: 0.5; 95 | } 96 | 97 | &-code::after { 98 | content: 'CODE'; 99 | } 100 | 101 | &-result::after { 102 | content: 'RESULT'; 103 | color: white; 104 | } 105 | 106 | button { 107 | position: absolute; 108 | padding: 0.4rem 0.8rem; 109 | right: 0.5rem; 110 | bottom: 0.5rem; 111 | font-size: 0.95rem; 112 | background-color: rgba(black, 0.1); 113 | } 114 | } 115 | 116 | .example_pre { 117 | width: 100%; 118 | padding-top: 2.6rem; 119 | 120 | &-disabled { 121 | opacity: 0.5; 122 | } 123 | 124 | &-button { 125 | padding-bottom: 2.6rem; 126 | } 127 | 128 | &-result { 129 | background-color: #333; 130 | color: white; 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "breakpoint-helper", 3 | "version": "2.0.4", 4 | "description": "Small helper library to work with layout breakpoints in Javascript.", 5 | "author": "Nicolas Cusan ", 6 | "license": "MIT", 7 | "repository": "git@github.com:nicolas-cusan/breakpoint-helper.git", 8 | "source": "./src/breakpoint-helper.ts", 9 | "main": "./dist/breakpoint-helper.js", 10 | "types": "./dist/breakpoint-helper.d.ts", 11 | "files": [ 12 | "dist/*", 13 | "src/*", 14 | "README.md", 15 | "LICENSE" 16 | ], 17 | "scripts": { 18 | "build:src": "rm -rf dist && tsc && node build.js", 19 | "build:docs": "rm -rf docs-dist && node build-docs.js", 20 | "build": "export NODE_ENV=production && npm run build:src && npm run build:docs", 21 | "dev:src": "rm -rf dist && tsc --watch", 22 | "dev": "export NODE_ENV=development && npm run build:docs", 23 | "docs": "export NODE_ENV=production && rm -rf docs-dist && node build-docs.js && gh-pages -d docs-dist", 24 | "prepublishOnly": "npm run -s build" 25 | }, 26 | "targets": { 27 | "main": false 28 | }, 29 | "type": "module", 30 | "keywords": [ 31 | "media-queries", 32 | "media-query", 33 | "breakpoint", 34 | "breakpoint-helper", 35 | "css", 36 | "sass", 37 | "scss", 38 | "tailwind", 39 | "tailwindcss", 40 | "responsive", 41 | "max-width", 42 | "min-width", 43 | "typescript" 44 | ], 45 | "devDependencies": { 46 | "@parcel/core": "^2.9.1", 47 | "@parcel/packager-raw-url": "^2.9.1", 48 | "@parcel/packager-xml": "^2.9.1", 49 | "@parcel/transformer-sass": "^2.9.1", 50 | "@parcel/transformer-webmanifest": "^2.9.1", 51 | "@parcel/transformer-xml": "^2.9.1", 52 | "cheerio": "^1.0.0-rc.12", 53 | "esbuild": "^0.17.19", 54 | "esbuild-plugin-copy": "^2.1.1", 55 | "gh-pages": "^5.0.0", 56 | "highlight.js": "^11.8.0", 57 | "marked": "^5.0.3", 58 | "marked-gfm-heading-id": "^3.0.3", 59 | "marked-highlight": "^2.0.1", 60 | "marked-mangle": "^1.0.1", 61 | "parcel": "^2.9.1", 62 | "prettier": "^2.8.8", 63 | "sass": "^1.62.1", 64 | "typescript": "^5.0.4" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/_breakpoint-helper.scss: -------------------------------------------------------------------------------- 1 | //============================================ 2 | // Breakpoint String 3 | //============================================ 4 | 5 | // Function to create a js-radable string that 6 | // contains breakpoints used in CSS. 7 | 8 | // @param {Map} $bp-map [] - Map of breakpoints 9 | 10 | // Example: 11 | 12 | // $breakpoints: ( 13 | // 'bp-name': 30em, 14 | // 'other-bp-name': 60em, 15 | // ); 16 | 17 | // Inspiration: https://github.com/zurb/foundation-sites/blob/12317b1854283b3a2708d586f1141d523684f8cd/scss/util/_breakpoint.scss#L159 18 | 19 | @function breakpoint-string($bp-map) { 20 | $string: ''; 21 | 22 | @each $key, $val in $bp-map { 23 | $string: $string + $key + '=' + $val + '&'; 24 | } 25 | 26 | @return str-slice($string, 1, -2); 27 | } 28 | 29 | @mixin breakpoint-helper($bp-map) { 30 | .breakpoint-helper { 31 | font-family: '#{breakpoint-string($bp-map)}'; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/breakpoint-helper.ts: -------------------------------------------------------------------------------- 1 | interface Breakpoints { 2 | [key: string]: string; 3 | } 4 | 5 | type Config = 'meta' | 'custom' | Breakpoints; 6 | type BpNameOrNames = string | string[]; 7 | type MatchingBps = string[]; 8 | 9 | function bph(config: Config) { 10 | let breakpoints = {}; 11 | 12 | if (typeof config === 'string' && config === 'meta') { 13 | breakpoints = _getBpsFromMeta(); 14 | } else if (typeof config === 'string' && config === 'custom') { 15 | breakpoints = _getBpsFromCustomProps(); 16 | } else { 17 | breakpoints = config; 18 | } 19 | 20 | if (Object.keys(breakpoints).length === 0) { 21 | throw new Error(`No breakpoints defined`); 22 | } 23 | 24 | /** 25 | * Generate a `meta` element with class `breakpoint-helper` and deserialize the css `font-family` value to retrieve the breakpoints. 26 | * 27 | * @private 28 | * @returns {Breakpoints} Breakpoint object. 29 | */ 30 | 31 | function _getBpsFromMeta(): Breakpoints { 32 | const el = document.createElement('meta'); 33 | el.classList.add('breakpoint-helper'); 34 | document.getElementsByTagName('head')[0].appendChild(el); 35 | 36 | let fontFamily: string | string[] = window 37 | .getComputedStyle(el) 38 | .getPropertyValue('font-family'); 39 | 40 | if (fontFamily.length <= 0) return {}; 41 | 42 | fontFamily = fontFamily.replace(/'|"/g, '').split('&'); 43 | 44 | return fontFamily.reduce((obj: Breakpoints, elem: string): Breakpoints => { 45 | const [name, value] = elem.split('='); 46 | obj[name] = value; 47 | return obj; 48 | }, {}); 49 | } 50 | 51 | /** 52 | * Retrieve breakpoints by reading css custom properties on the `:root` selector, of all loaded stylesheets, starting with `--bph-`. 53 | * 54 | * @private 55 | * @returns {Breakpoints} Breakpoint object. 56 | */ 57 | 58 | function _getBpsFromCustomProps(): Breakpoints { 59 | const sheets = Array.from(document.styleSheets).filter( 60 | (sheet: CSSStyleSheet) => 61 | sheet?.href?.indexOf(window.location.origin) !== -1 62 | ); 63 | 64 | const rules = [...sheets].reduce((acc, sheet) => { 65 | Array.from(sheet.cssRules).forEach((rule: CSSRule) => { 66 | if (rule instanceof CSSStyleRule && rule.selectorText === ':root') { 67 | const css = rule.cssText.split('{')[1].replace('}', '').split(';'); 68 | 69 | css.forEach((dec) => { 70 | const [prop, val] = dec.split(':'); 71 | 72 | if (prop.indexOf('--bph-') !== -1) { 73 | acc[prop.replace('--bph-', '').trim()] = val.trim(); 74 | } 75 | }); 76 | } 77 | }); 78 | return acc; 79 | }, {}); 80 | 81 | return rules; 82 | } 83 | 84 | /** 85 | * Check if the breakpoints in `keys` are matching 86 | * 87 | * @private 88 | * @param {MatchingBps} keys - Array of breakpoint names. 89 | * @param {boolean} [useMax=false] - Use `max-width` instead of `min-width`. 90 | * 91 | * @returns {string[]} Array containing matching breakpoint names in reverse order. 92 | */ 93 | 94 | function _matchAll(keys: string[], useMax: boolean = false): MatchingBps { 95 | const matches: MatchingBps = []; 96 | keys.forEach((bp: string) => { 97 | if (isMatching(bp, useMax)) { 98 | matches.push(bp); 99 | } 100 | }); 101 | return useMax ? matches : matches.reverse(); 102 | } 103 | 104 | /** 105 | * Get all breakpoints as an object. Useful for debugging or passing breakpoint values to other libraries. 106 | * 107 | * @returns {Breakpoints} Object containing all instance breakpoints. 108 | */ 109 | 110 | function getBreakpoints(): Breakpoints { 111 | return breakpoints; 112 | } 113 | 114 | /** 115 | * Get a `min-width`, `max-width` or `min-width and max-width` media query by breakpoint name. 116 | * 117 | * @param {BpNameOrNames} name - Breakpoint name or array of two breakpoint names. 118 | * @param {boolean} [useMax=false] - Use `max-width` instead of `min-width`. 119 | * 120 | * @returns {string} Media query string. 121 | */ 122 | 123 | function getMediaQuery(name: BpNameOrNames, useMax: boolean = false): string { 124 | if (Array.isArray(name)) { 125 | const [min, max] = name; 126 | return `${getMediaQuery(min)} and ${getMediaQuery(max, true)}`; 127 | } 128 | 129 | const min = breakpoints[name]; 130 | 131 | if (typeof min === 'undefined') { 132 | throw new Error(`"${name}" does not seem to be a breakpoint name`); 133 | } 134 | 135 | if (useMax) { 136 | const number = parseFloat(min); 137 | const unit = min.replace(number, ''); 138 | const substract = unit === 'em' ? 0.0635 : 1; 139 | return `(max-width: ${number - substract}${unit})`; 140 | } 141 | 142 | return `(min-width: ${min})`; 143 | } 144 | 145 | /** 146 | * Check if a breakpoint or breakpoint range is currently matching. 147 | * 148 | * @param {BpNameOrNames} name - Breakpoint name or array of two breakpoint names. 149 | * @param {boolean} [useMax=false] - Use `max-width` instead of `min-width`. 150 | * 151 | * @returns {boolean} Whether the breakpoint or breakpoint range is matching or not. 152 | */ 153 | 154 | function isMatching(name: BpNameOrNames, useMax: boolean = false): boolean { 155 | return window.matchMedia(getMediaQuery(name, useMax)).matches; 156 | } 157 | 158 | /** 159 | * Listen to a breakpoint or breakpoint range change and execute a callback function. The callback function will receive a `MediaQueryList` object as parameter that can be used to check wether the breakpoint media query is matching or not. The callback function is called once on listener creation, it is possible to opt out of this behavior via options. 160 | * 161 | * @param {Object|String} options - Configuration Object, breakpoint name or array of two breakpoint names. 162 | * @param {string} options.name - Breakpoint name or array of two breakpoint names. 163 | * @param {boolean} [options.useMax=false] - Use `max-width` instead of `min-width`. 164 | * @param {boolean} [options.immediate=true] - Execute callback function on listener creation. 165 | * @param {function} callback - Callback function, receives a `MediaQueryList` as parameter. 166 | * 167 | * @returns {Object} Object containing the `on` and `off` listener methods. 168 | */ 169 | 170 | type ListenConfig = { 171 | name: BpNameOrNames; 172 | useMax?: boolean; 173 | immediate?: boolean; 174 | }; 175 | 176 | type ListenOptions = string | ListenConfig; 177 | 178 | type ListenersReturn = { 179 | on: () => void; 180 | off: () => void; 181 | }; 182 | 183 | function listen( 184 | options: ListenOptions, 185 | callback: (event: MediaQueryListEvent | MediaQueryList) => void 186 | ): ListenersReturn { 187 | let mq: MediaQueryList | null = null; 188 | const opts: ListenConfig = { name: '', useMax: false, immediate: true }; 189 | 190 | if (typeof options === 'string' || Array.isArray(options)) { 191 | opts.name = options; 192 | } else { 193 | opts.name = options.name; 194 | opts.useMax = options.useMax || false; 195 | opts.immediate = 196 | typeof options.immediate === 'undefined' ? true : options.immediate; 197 | } 198 | 199 | function on() { 200 | if (typeof opts.name === 'string' || Array.isArray(opts.name)) { 201 | mq = window.matchMedia(getMediaQuery(opts.name)); 202 | } else { 203 | mq = window.matchMedia(getMediaQuery(opts.name, opts.useMax)); 204 | } 205 | 206 | if (opts.immediate) callback(mq); 207 | mq.addEventListener('change', callback); 208 | } 209 | 210 | on(); 211 | 212 | function off() { 213 | if (mq) { 214 | mq.removeEventListener('change', callback); 215 | mq = null; 216 | } 217 | } 218 | 219 | return { on, off }; 220 | } 221 | 222 | /** 223 | * Listen to all breakpoints matching or un-matching and execute a callback function. The callback function will receive an array of the matching breakpoint names in reverse order as a parameter. That means the largest breakpoint name (or smallest when using `options.useMax`) comes first in the array. The array will be empty if no breakpoints are matching. 224 | * 225 | * @param {function} callback - Callback function, receives an array of breakpoint names as parameter. 226 | * @param {ListenAllOptions} [options] - Configuration Object. 227 | * @param {string[]} [options.listenTo] - Array of breakpoint names. All are used by default. 228 | * @param {boolean} [options.useMax=false] - Use `max-width` instead of `min-width`. 229 | * @param {boolean} [options.immediate=true] - Execute callback function on listener creation. 230 | * 231 | * @returns {ListenersReturn} Object containing the `on` and `off` listener methods. 232 | */ 233 | 234 | type ListenAllOptions = { 235 | listenTo?: string[]; 236 | useMax?: boolean; 237 | immediate?: boolean; 238 | }; 239 | 240 | function listenAll( 241 | callback: (bps: string[]) => void, 242 | options: ListenAllOptions = {} 243 | ): ListenersReturn { 244 | const keys = Object.keys(breakpoints); 245 | let listeners: ListenersReturn[] = []; 246 | let bps = keys; 247 | 248 | if (keys.length === 0) return { on: () => {}, off: () => {} }; 249 | 250 | const { useMax, immediate, listenTo } = options; 251 | const opts = { 252 | useMax: useMax || false, 253 | immediate: typeof immediate === 'undefined' ? true : immediate, 254 | }; 255 | 256 | if (listenTo) { 257 | bps = listenTo.sort((a, b) => { 258 | return parseInt(breakpoints[a], 10) - parseInt(breakpoints[b], 10); 259 | }); 260 | } 261 | 262 | const cb = () => { 263 | callback(_matchAll(bps, opts.useMax)); 264 | }; 265 | 266 | function on() { 267 | bps.forEach((bp) => { 268 | const listener = listen( 269 | { name: bp, useMax: opts.useMax, immediate: false }, 270 | cb 271 | ); 272 | listeners.push(listener); 273 | }); 274 | 275 | if (opts.immediate) cb(); 276 | } 277 | 278 | on(); 279 | 280 | function off() { 281 | if (listeners.length) { 282 | listeners.forEach((listener) => listener.off()); 283 | listeners = []; 284 | } 285 | } 286 | 287 | return { on, off }; 288 | } 289 | 290 | return { 291 | getBreakpoints, 292 | getMediaQuery, 293 | isMatching, 294 | listen, 295 | listenAll, 296 | }; 297 | } 298 | 299 | export default bph; 300 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "emitDeclarationOnly": true, 4 | "esModuleInterop": true, 5 | "declaration": true, 6 | "declarationMap": true, 7 | "outFile": "dist/breakpoint-helper.d.ts", 8 | "target": "esnext", 9 | "lib": ["esnext", "dom"], 10 | }, 11 | "exclude": ["dist"] 12 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.10.4" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.10.4": 13 | version "7.10.4" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 15 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.10.4" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.4" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@esbuild/android-arm64@0.17.19": 27 | version "0.17.19" 28 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" 29 | integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== 30 | 31 | "@esbuild/android-arm@0.17.19": 32 | version "0.17.19" 33 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" 34 | integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== 35 | 36 | "@esbuild/android-x64@0.17.19": 37 | version "0.17.19" 38 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" 39 | integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== 40 | 41 | "@esbuild/darwin-arm64@0.17.19": 42 | version "0.17.19" 43 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" 44 | integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== 45 | 46 | "@esbuild/darwin-x64@0.17.19": 47 | version "0.17.19" 48 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" 49 | integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== 50 | 51 | "@esbuild/freebsd-arm64@0.17.19": 52 | version "0.17.19" 53 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" 54 | integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== 55 | 56 | "@esbuild/freebsd-x64@0.17.19": 57 | version "0.17.19" 58 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" 59 | integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== 60 | 61 | "@esbuild/linux-arm64@0.17.19": 62 | version "0.17.19" 63 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" 64 | integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== 65 | 66 | "@esbuild/linux-arm@0.17.19": 67 | version "0.17.19" 68 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" 69 | integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== 70 | 71 | "@esbuild/linux-ia32@0.17.19": 72 | version "0.17.19" 73 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" 74 | integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== 75 | 76 | "@esbuild/linux-loong64@0.17.19": 77 | version "0.17.19" 78 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" 79 | integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== 80 | 81 | "@esbuild/linux-mips64el@0.17.19": 82 | version "0.17.19" 83 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" 84 | integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== 85 | 86 | "@esbuild/linux-ppc64@0.17.19": 87 | version "0.17.19" 88 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" 89 | integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== 90 | 91 | "@esbuild/linux-riscv64@0.17.19": 92 | version "0.17.19" 93 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" 94 | integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== 95 | 96 | "@esbuild/linux-s390x@0.17.19": 97 | version "0.17.19" 98 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" 99 | integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== 100 | 101 | "@esbuild/linux-x64@0.17.19": 102 | version "0.17.19" 103 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" 104 | integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== 105 | 106 | "@esbuild/netbsd-x64@0.17.19": 107 | version "0.17.19" 108 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" 109 | integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== 110 | 111 | "@esbuild/openbsd-x64@0.17.19": 112 | version "0.17.19" 113 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" 114 | integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== 115 | 116 | "@esbuild/sunos-x64@0.17.19": 117 | version "0.17.19" 118 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" 119 | integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== 120 | 121 | "@esbuild/win32-arm64@0.17.19": 122 | version "0.17.19" 123 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" 124 | integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== 125 | 126 | "@esbuild/win32-ia32@0.17.19": 127 | version "0.17.19" 128 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" 129 | integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== 130 | 131 | "@esbuild/win32-x64@0.17.19": 132 | version "0.17.19" 133 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" 134 | integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== 135 | 136 | "@lezer/common@^0.15.0", "@lezer/common@^0.15.7": 137 | version "0.15.12" 138 | resolved "https://registry.yarnpkg.com/@lezer/common/-/common-0.15.12.tgz#2f21aec551dd5fd7d24eb069f90f54d5bc6ee5e9" 139 | integrity sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig== 140 | 141 | "@lezer/lr@^0.15.4": 142 | version "0.15.8" 143 | resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-0.15.8.tgz#1564a911e62b0a0f75ca63794a6aa8c5dc63db21" 144 | integrity sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg== 145 | dependencies: 146 | "@lezer/common" "^0.15.0" 147 | 148 | "@lmdb/lmdb-darwin-arm64@2.7.11": 149 | version "2.7.11" 150 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.7.11.tgz#b717e72f023d4215d14e4c57433c711a53c782cf" 151 | integrity sha512-r6+vYq2vKzE+vgj/rNVRMwAevq0+ZR9IeMFIqcSga+wMtMdXQ27KqQ7uS99/yXASg29bos7yHP3yk4x6Iio0lw== 152 | 153 | "@lmdb/lmdb-darwin-x64@2.7.11": 154 | version "2.7.11" 155 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.7.11.tgz#b42898b0742b4a82b8224b742b2d174c449cd170" 156 | integrity sha512-jhj1aB4K8ycRL1HOQT5OtzlqOq70jxUQEWRN9Gqh3TIDN30dxXtiHi6EWF516tzw6v2+3QqhDMJh8O6DtTGG8Q== 157 | 158 | "@lmdb/lmdb-linux-arm64@2.7.11": 159 | version "2.7.11" 160 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.7.11.tgz#a8dc8e386d27006cfccbf2a8598290b63d03a9ec" 161 | integrity sha512-7xGEfPPbmVJWcY2Nzqo11B9Nfxs+BAsiiaY/OcT4aaTDdykKeCjvKMQJA3KXCtZ1AtiC9ljyGLi+BfUwdulY5A== 162 | 163 | "@lmdb/lmdb-linux-arm@2.7.11": 164 | version "2.7.11" 165 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.7.11.tgz#2103f48af28336efccaac008fe882dfce33e4ac5" 166 | integrity sha512-dHfLFVSrw/v5X5lkwp0Vl7+NFpEeEYKfMG2DpdFJnnG1RgHQZngZxCaBagFoaJGykRpd2DYF1AeuXBFrAUAXfw== 167 | 168 | "@lmdb/lmdb-linux-x64@2.7.11": 169 | version "2.7.11" 170 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.7.11.tgz#d21ac368022a662610540f2ba8bb6ff0b96a9940" 171 | integrity sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng== 172 | 173 | "@lmdb/lmdb-win32-x64@2.7.11": 174 | version "2.7.11" 175 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.7.11.tgz#af2cb4ae6d3a92ecdeb1503b73079417525476d2" 176 | integrity sha512-BJwkHlSUgtB+Ei52Ai32M1AOMerSlzyIGA/KC4dAGL+GGwVMdwG8HGCOA2TxP3KjhbgDPMYkv7bt/NmOmRIFng== 177 | 178 | "@mischnic/json-sourcemap@^0.1.0": 179 | version "0.1.0" 180 | resolved "https://registry.yarnpkg.com/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz#38af657be4108140a548638267d02a2ea3336507" 181 | integrity sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA== 182 | dependencies: 183 | "@lezer/common" "^0.15.7" 184 | "@lezer/lr" "^0.15.4" 185 | json5 "^2.2.1" 186 | 187 | "@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2": 188 | version "3.0.2" 189 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz#44d752c1a2dc113f15f781b7cc4f53a307e3fa38" 190 | integrity sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ== 191 | 192 | "@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2": 193 | version "3.0.2" 194 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz#f954f34355712212a8e06c465bc06c40852c6bb3" 195 | integrity sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw== 196 | 197 | "@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2": 198 | version "3.0.2" 199 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz#45c63037f045c2b15c44f80f0393fa24f9655367" 200 | integrity sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg== 201 | 202 | "@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2": 203 | version "3.0.2" 204 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz#35707efeafe6d22b3f373caf9e8775e8920d1399" 205 | integrity sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA== 206 | 207 | "@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2": 208 | version "3.0.2" 209 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz#091b1218b66c341f532611477ef89e83f25fae4f" 210 | integrity sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA== 211 | 212 | "@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2": 213 | version "3.0.2" 214 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" 215 | integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== 216 | 217 | "@nodelib/fs.scandir@2.1.5": 218 | version "2.1.5" 219 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 220 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 221 | dependencies: 222 | "@nodelib/fs.stat" "2.0.5" 223 | run-parallel "^1.1.9" 224 | 225 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 226 | version "2.0.5" 227 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 228 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 229 | 230 | "@nodelib/fs.walk@^1.2.3": 231 | version "1.2.8" 232 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 233 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 234 | dependencies: 235 | "@nodelib/fs.scandir" "2.1.5" 236 | fastq "^1.6.0" 237 | 238 | "@parcel/bundler-default@2.9.1": 239 | version "2.9.1" 240 | resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.9.1.tgz#70a4f6e85d5e37c949b154ab0f518868a6aa8ab0" 241 | integrity sha512-gNTaSQpp7jiFvkQ/P/KfAiVLT3UOEs5bBivQm4OMdgSi2DTIsjGMQVQ7JDzvzEzrHiFlDmdXKxUagex54pOtJg== 242 | dependencies: 243 | "@parcel/diagnostic" "2.9.1" 244 | "@parcel/graph" "2.9.1" 245 | "@parcel/hash" "2.9.1" 246 | "@parcel/plugin" "2.9.1" 247 | "@parcel/utils" "2.9.1" 248 | nullthrows "^1.1.1" 249 | 250 | "@parcel/cache@2.9.1": 251 | version "2.9.1" 252 | resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.9.1.tgz#feb9191306e20fd9bc6f228138e2508cc276485d" 253 | integrity sha512-2aFWUAi7vkcnIdfOw3oW/vhgvwv9MPb+LjmJSkE59nNUuSJe83jJFAPAhqQTHd9L3kX/Xk+xJBNYNubUq/Cieg== 254 | dependencies: 255 | "@parcel/fs" "2.9.1" 256 | "@parcel/logger" "2.9.1" 257 | "@parcel/utils" "2.9.1" 258 | lmdb "2.7.11" 259 | 260 | "@parcel/codeframe@2.9.1": 261 | version "2.9.1" 262 | resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.9.1.tgz#ffd4dcba0f28ca95d04962abec8ff7d625b413c4" 263 | integrity sha512-qLVIyEHuZq8wWYaXVAwxMzlK3QqWlaB5fUSe1n+kITEa9EEwb2WPmysYAsWiVaFdD62A0+1klJ8Sq9gapOMIng== 264 | dependencies: 265 | chalk "^4.1.0" 266 | 267 | "@parcel/compressor-raw@2.9.1": 268 | version "2.9.1" 269 | resolved "https://registry.yarnpkg.com/@parcel/compressor-raw/-/compressor-raw-2.9.1.tgz#31da509506b4f848a061dd9b88a0ab5c049f4045" 270 | integrity sha512-aUkZ0pOzGjQ9kyaUQ/suDVmU5lR4mT9fU5HXlp3hGD7MWh2HFJUOfQ3gp5g3P9x+MeVZKU+ht6UcIMhrzelLGQ== 271 | dependencies: 272 | "@parcel/plugin" "2.9.1" 273 | 274 | "@parcel/config-default@2.9.1": 275 | version "2.9.1" 276 | resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.9.1.tgz#0dcc7ceea49d1391dfdb8e400d621837b7ccd24f" 277 | integrity sha512-oH6NHKaKp2YBHOcQJxwHGPbgGCZZZH1I4eef+KRBFiabgiDQxHLni+vg+c+mErd8lFrNn2gcGIdKzQwWqavT+w== 278 | dependencies: 279 | "@parcel/bundler-default" "2.9.1" 280 | "@parcel/compressor-raw" "2.9.1" 281 | "@parcel/namer-default" "2.9.1" 282 | "@parcel/optimizer-css" "2.9.1" 283 | "@parcel/optimizer-htmlnano" "2.9.1" 284 | "@parcel/optimizer-image" "2.9.1" 285 | "@parcel/optimizer-svgo" "2.9.1" 286 | "@parcel/optimizer-swc" "2.9.1" 287 | "@parcel/packager-css" "2.9.1" 288 | "@parcel/packager-html" "2.9.1" 289 | "@parcel/packager-js" "2.9.1" 290 | "@parcel/packager-raw" "2.9.1" 291 | "@parcel/packager-svg" "2.9.1" 292 | "@parcel/reporter-dev-server" "2.9.1" 293 | "@parcel/resolver-default" "2.9.1" 294 | "@parcel/runtime-browser-hmr" "2.9.1" 295 | "@parcel/runtime-js" "2.9.1" 296 | "@parcel/runtime-react-refresh" "2.9.1" 297 | "@parcel/runtime-service-worker" "2.9.1" 298 | "@parcel/transformer-babel" "2.9.1" 299 | "@parcel/transformer-css" "2.9.1" 300 | "@parcel/transformer-html" "2.9.1" 301 | "@parcel/transformer-image" "2.9.1" 302 | "@parcel/transformer-js" "2.9.1" 303 | "@parcel/transformer-json" "2.9.1" 304 | "@parcel/transformer-postcss" "2.9.1" 305 | "@parcel/transformer-posthtml" "2.9.1" 306 | "@parcel/transformer-raw" "2.9.1" 307 | "@parcel/transformer-react-refresh-wrap" "2.9.1" 308 | "@parcel/transformer-svg" "2.9.1" 309 | 310 | "@parcel/core@2.9.1", "@parcel/core@^2.9.1": 311 | version "2.9.1" 312 | resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.9.1.tgz#26261b6d76acbf3e8a69553f0ef36aac0b2a3621" 313 | integrity sha512-D/7iyRV5c8kYMV1JGkokktxh3ON5CMvNAllaBucl4SMatAyLo5aLjGG5ey6FD/4Tv+JJ6NsldLtkvciDVJdgFQ== 314 | dependencies: 315 | "@mischnic/json-sourcemap" "^0.1.0" 316 | "@parcel/cache" "2.9.1" 317 | "@parcel/diagnostic" "2.9.1" 318 | "@parcel/events" "2.9.1" 319 | "@parcel/fs" "2.9.1" 320 | "@parcel/graph" "2.9.1" 321 | "@parcel/hash" "2.9.1" 322 | "@parcel/logger" "2.9.1" 323 | "@parcel/package-manager" "2.9.1" 324 | "@parcel/plugin" "2.9.1" 325 | "@parcel/profiler" "2.9.1" 326 | "@parcel/source-map" "^2.1.1" 327 | "@parcel/types" "2.9.1" 328 | "@parcel/utils" "2.9.1" 329 | "@parcel/workers" "2.9.1" 330 | abortcontroller-polyfill "^1.1.9" 331 | base-x "^3.0.8" 332 | browserslist "^4.6.6" 333 | clone "^2.1.1" 334 | dotenv "^7.0.0" 335 | dotenv-expand "^5.1.0" 336 | json5 "^2.2.0" 337 | msgpackr "^1.5.4" 338 | nullthrows "^1.1.1" 339 | semver "^5.7.1" 340 | 341 | "@parcel/diagnostic@2.9.1": 342 | version "2.9.1" 343 | resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.9.1.tgz#8fe5bdba1accb2b72151976fb66b65e9ef4418af" 344 | integrity sha512-LM+w4maoAsjcL+javaHw9B9oEQoLdg/fMCNbuTmAKpQWi16hfNkr4+xz7AxxwL3dCcL7uuvVgoUOUubwxWNLAA== 345 | dependencies: 346 | "@mischnic/json-sourcemap" "^0.1.0" 347 | nullthrows "^1.1.1" 348 | 349 | "@parcel/events@2.9.1": 350 | version "2.9.1" 351 | resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.9.1.tgz#8aa2a4477a8dbc679bafbca45dced63cdf58ed34" 352 | integrity sha512-tga4FiJB1TC4iOKBK66e9zXpcDFXvJhXmsgOMsgSTM6uCZMXeGaYEixHNlPDs3HTfg17qAmHHlhfgPBbku/aOg== 353 | 354 | "@parcel/fs-search@2.9.1": 355 | version "2.9.1" 356 | resolved "https://registry.yarnpkg.com/@parcel/fs-search/-/fs-search-2.9.1.tgz#e8e2a839f23a34d74971036b50553346f1cb6ce1" 357 | integrity sha512-F7SkVsMb5XYcWmeptLz5D3g76Raed3dmNulJMrWIECP8lJ1LUcCExQId7NsdeCfRbNRwaf84gdsjc/1GKM/QYg== 358 | 359 | "@parcel/fs@2.9.1": 360 | version "2.9.1" 361 | resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.9.1.tgz#8bcf0a9b6728abc12392a2831b8d87d9537126db" 362 | integrity sha512-F/GRHtHN4AuTauadsq/UQ1OSpLBLAS/96Sv1x09/AKZxNlZ2UzWExoYEhSkVM5smKVzSnx8XP9OqABcHcZwOLQ== 363 | dependencies: 364 | "@parcel/fs-search" "2.9.1" 365 | "@parcel/types" "2.9.1" 366 | "@parcel/utils" "2.9.1" 367 | "@parcel/watcher" "^2.0.7" 368 | "@parcel/workers" "2.9.1" 369 | 370 | "@parcel/graph@2.9.1": 371 | version "2.9.1" 372 | resolved "https://registry.yarnpkg.com/@parcel/graph/-/graph-2.9.1.tgz#d520de0ff8fadf8e973d36aaa91b6123b53cb4b2" 373 | integrity sha512-fc/Yk1XPzo3ZHhKS7l5aETAEBpnF0nK+0TawkNrQ2rcL21MG1kHNYSR8uBwOqyXmBSMEItals5Ixgd8fWa+9PQ== 374 | dependencies: 375 | nullthrows "^1.1.1" 376 | 377 | "@parcel/hash@2.9.1": 378 | version "2.9.1" 379 | resolved "https://registry.yarnpkg.com/@parcel/hash/-/hash-2.9.1.tgz#6654bc83cc3692f2872b168d47e6762a29e8988b" 380 | integrity sha512-fiqAIi/23h5tnH5W7DRTwOhfRPhadHvI7hYoG8YFGvnFxSQ/XCnOID0B0/vNhaluICSPeFcedjAmDVdqY6/X7w== 381 | dependencies: 382 | xxhash-wasm "^0.4.2" 383 | 384 | "@parcel/logger@2.9.1": 385 | version "2.9.1" 386 | resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.9.1.tgz#445f266780d0000d87626b390bb94b0cf096ed55" 387 | integrity sha512-wUH9ShrRr3RwNa75ymegDIAdJiY3dGB7HCgIP6VOOc2CGyGA2DJKbbYGfw5mkl3DV8lUV+dYsWYMGXZhInAQCQ== 388 | dependencies: 389 | "@parcel/diagnostic" "2.9.1" 390 | "@parcel/events" "2.9.1" 391 | 392 | "@parcel/markdown-ansi@2.9.1": 393 | version "2.9.1" 394 | resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.9.1.tgz#b5fe0a5bdb951748fc77f3fd3896c69511d8d03d" 395 | integrity sha512-FpOz2ltnKnm6QaQCdcpuAEwGuScVUq0ixT/QAmU7A3/cwlsoxqMkB2XeWYIVTjs7p7Bsu0Ctdid/6pdtP7ghpg== 396 | dependencies: 397 | chalk "^4.1.0" 398 | 399 | "@parcel/namer-default@2.9.1": 400 | version "2.9.1" 401 | resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.9.1.tgz#b93eb761c5bddb48893812d1aa8bf90f6ad5de3d" 402 | integrity sha512-XHpAc5JLQchUqRrYqnUvinReR2nCyiD+DhIedMW5hURwlCPBlfcTVf6M5kSSpjzqRDVKezx3TFF6dzZNv0fBJQ== 403 | dependencies: 404 | "@parcel/diagnostic" "2.9.1" 405 | "@parcel/plugin" "2.9.1" 406 | nullthrows "^1.1.1" 407 | 408 | "@parcel/node-resolver-core@3.0.1": 409 | version "3.0.1" 410 | resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-3.0.1.tgz#2a25ffdcefb01bc7537d5ab29886109a5ba7ecb7" 411 | integrity sha512-4owokOoHCONeazQGndB4PkIaUhZfyWuCT7Sx4UJc2UhR1V82MlahHrT2ItT0pkQyKWwCSNgHdBgdKUgKRdIiAw== 412 | dependencies: 413 | "@mischnic/json-sourcemap" "^0.1.0" 414 | "@parcel/diagnostic" "2.9.1" 415 | "@parcel/fs" "2.9.1" 416 | "@parcel/utils" "2.9.1" 417 | nullthrows "^1.1.1" 418 | semver "^5.7.1" 419 | 420 | "@parcel/optimizer-css@2.9.1": 421 | version "2.9.1" 422 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-css/-/optimizer-css-2.9.1.tgz#5a9c0ddb95281dee139be620f03307678d828247" 423 | integrity sha512-IYQpV0kc0KN/aqRAWQsZ8b2pbI4ha4T5HAi27lTGIhQNvEixUtf0gJvCJVSlBxpdMiXVJq9pp97UamoNuB6oig== 424 | dependencies: 425 | "@parcel/diagnostic" "2.9.1" 426 | "@parcel/plugin" "2.9.1" 427 | "@parcel/source-map" "^2.1.1" 428 | "@parcel/utils" "2.9.1" 429 | browserslist "^4.6.6" 430 | lightningcss "^1.16.1" 431 | nullthrows "^1.1.1" 432 | 433 | "@parcel/optimizer-htmlnano@2.9.1": 434 | version "2.9.1" 435 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.9.1.tgz#2d767cfd975da7686d4eb68603555566b47d022f" 436 | integrity sha512-t/e9XsoXZViqOFWcz3LlEClCOYNCjP6MIo+p+WmAuc5+QFF0/9viNqgRbhVe8V1tbtRofxsm4BossFOjOBSjmg== 437 | dependencies: 438 | "@parcel/plugin" "2.9.1" 439 | htmlnano "^2.0.0" 440 | nullthrows "^1.1.1" 441 | posthtml "^0.16.5" 442 | svgo "^2.4.0" 443 | 444 | "@parcel/optimizer-image@2.9.1": 445 | version "2.9.1" 446 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-image/-/optimizer-image-2.9.1.tgz#c9d5fe1d3c117526847f67f705fd3837b2b77578" 447 | integrity sha512-Ml51RUGbQXyoHZ9yhyal8J/khZeWZX5J8NPOEvkCmmOkxo/qM4CMPIvJStzzn5K7mOPRKUheDkM/QoNGO5gTwA== 448 | dependencies: 449 | "@parcel/diagnostic" "2.9.1" 450 | "@parcel/plugin" "2.9.1" 451 | "@parcel/utils" "2.9.1" 452 | "@parcel/workers" "2.9.1" 453 | 454 | "@parcel/optimizer-svgo@2.9.1": 455 | version "2.9.1" 456 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-svgo/-/optimizer-svgo-2.9.1.tgz#71d59e843bcd98ea211070975b241127ab7641c8" 457 | integrity sha512-8XHSEIjJfdTFtUQzRiy0K+fbvdcheYc+azdyuJPnIV5AX04k4heKwp7uH328Ylk2k0JkfDyQmjFEyPj9qWDadQ== 458 | dependencies: 459 | "@parcel/diagnostic" "2.9.1" 460 | "@parcel/plugin" "2.9.1" 461 | "@parcel/utils" "2.9.1" 462 | svgo "^2.4.0" 463 | 464 | "@parcel/optimizer-swc@2.9.1": 465 | version "2.9.1" 466 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-swc/-/optimizer-swc-2.9.1.tgz#4531b547ef37d2e279b53916942463bc5d9fb7e6" 467 | integrity sha512-bLDkAwkmFE8YZNHcfJNj22haSLXrqjZkGXbPgGDkanCUS52yWv1+OFZ+6frX2q4EdXaTX8nFZSJL4VPHZZiUGQ== 468 | dependencies: 469 | "@parcel/diagnostic" "2.9.1" 470 | "@parcel/plugin" "2.9.1" 471 | "@parcel/source-map" "^2.1.1" 472 | "@parcel/utils" "2.9.1" 473 | "@swc/core" "^1.3.36" 474 | nullthrows "^1.1.1" 475 | 476 | "@parcel/package-manager@2.9.1": 477 | version "2.9.1" 478 | resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.9.1.tgz#3eed15d33489ef5f3089d11384916789275d6739" 479 | integrity sha512-cTUBUPRm62770Vw4YG5WGlkFxJII320nSobbP0TMggE/CGXg3ru2pvvX6WqXTFAHeM/z78xTPDq0NP97DBp5Ow== 480 | dependencies: 481 | "@parcel/diagnostic" "2.9.1" 482 | "@parcel/fs" "2.9.1" 483 | "@parcel/logger" "2.9.1" 484 | "@parcel/node-resolver-core" "3.0.1" 485 | "@parcel/types" "2.9.1" 486 | "@parcel/utils" "2.9.1" 487 | "@parcel/workers" "2.9.1" 488 | semver "^5.7.1" 489 | 490 | "@parcel/packager-css@2.9.1": 491 | version "2.9.1" 492 | resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.9.1.tgz#d070906edc2f565f1d042424deff5ff8210f7639" 493 | integrity sha512-efMShrIwVBY9twZTGQ5QFwl9H3xJg8nSjl/xgOGq9rrbkmcrVlfSgPL9ExNx75EvmOwOKxZjFiMsNYNICPNfgg== 494 | dependencies: 495 | "@parcel/diagnostic" "2.9.1" 496 | "@parcel/plugin" "2.9.1" 497 | "@parcel/source-map" "^2.1.1" 498 | "@parcel/utils" "2.9.1" 499 | nullthrows "^1.1.1" 500 | 501 | "@parcel/packager-html@2.9.1": 502 | version "2.9.1" 503 | resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.9.1.tgz#67ec088a5f54906076d91bd1021c053727d883ea" 504 | integrity sha512-mP7iIwyFDZ21XwD2SlwZoSrvKpS5Amlpi/ywd0dLdwQb5TL+Q2f05IcRNfFbWdVd1AJycDQ85ERokNKN3QPMkg== 505 | dependencies: 506 | "@parcel/plugin" "2.9.1" 507 | "@parcel/types" "2.9.1" 508 | "@parcel/utils" "2.9.1" 509 | nullthrows "^1.1.1" 510 | posthtml "^0.16.5" 511 | 512 | "@parcel/packager-js@2.9.1": 513 | version "2.9.1" 514 | resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.9.1.tgz#c18cbd718f69cef1868dabfa9547d0dbb159f169" 515 | integrity sha512-MmeKdp/obO36M8Y9yYAFiFkdhRFbQtYGSxbMwm2JVtRKMcFmlR5KzqLUg67OX6qgKw5lZZ1TkYhSI0hQQ6+Vqw== 516 | dependencies: 517 | "@parcel/diagnostic" "2.9.1" 518 | "@parcel/hash" "2.9.1" 519 | "@parcel/plugin" "2.9.1" 520 | "@parcel/source-map" "^2.1.1" 521 | "@parcel/utils" "2.9.1" 522 | globals "^13.2.0" 523 | nullthrows "^1.1.1" 524 | 525 | "@parcel/packager-raw-url@^2.9.1": 526 | version "2.9.1" 527 | resolved "https://registry.yarnpkg.com/@parcel/packager-raw-url/-/packager-raw-url-2.9.1.tgz#932dc1a678974ebae75656960cc3c4d4b418f24d" 528 | integrity sha512-sS9a9CsYaWtfqaRLLGceRhSVeytC5+4PR1ZrXG+5/wM5kRhBs8kj/jsCmbcc7QXaH7pMAAhg0ahMqX9zf1jXGQ== 529 | dependencies: 530 | "@parcel/plugin" "2.9.1" 531 | "@parcel/utils" "2.9.1" 532 | 533 | "@parcel/packager-raw@2.9.1": 534 | version "2.9.1" 535 | resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.9.1.tgz#bba90032196d0e7b9730d9029f38fa2e3f998a67" 536 | integrity sha512-qHJ389R5cLgR2PcJt8sOrNBcAY0qpZRMTOMgkc9zYkKy1tdUMgCUuDfO1kShfv4E7rr084mtlu9tK8MXChyF6w== 537 | dependencies: 538 | "@parcel/plugin" "2.9.1" 539 | 540 | "@parcel/packager-svg@2.9.1": 541 | version "2.9.1" 542 | resolved "https://registry.yarnpkg.com/@parcel/packager-svg/-/packager-svg-2.9.1.tgz#6adaeefd3687b0da5641f0d1a1f0bd99483fffaf" 543 | integrity sha512-aRzuiwcUlNATfSIbeYpDkJXvwdiAAbiQlxSz6cI53NqWwZn+Dn79WyiKPBST14ij4/P3ZjkcwXevqHpvXP/ArQ== 544 | dependencies: 545 | "@parcel/plugin" "2.9.1" 546 | "@parcel/types" "2.9.1" 547 | "@parcel/utils" "2.9.1" 548 | posthtml "^0.16.4" 549 | 550 | "@parcel/packager-xml@^2.9.1": 551 | version "2.9.1" 552 | resolved "https://registry.yarnpkg.com/@parcel/packager-xml/-/packager-xml-2.9.1.tgz#c01d7b3df9179949a9c3e9ceeaed25d35409212d" 553 | integrity sha512-Hkk+vl6E1Tw08vOTWibh62fK5TEwbuPZ18isz9r2ef0t0y1+vqrEkMb/xtDJm3W2PAUJrL7QTkvXMRqW2CxGXA== 554 | dependencies: 555 | "@parcel/plugin" "2.9.1" 556 | "@parcel/types" "2.9.1" 557 | "@parcel/utils" "2.9.1" 558 | "@xmldom/xmldom" "^0.7.9" 559 | 560 | "@parcel/plugin@2.9.1": 561 | version "2.9.1" 562 | resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.9.1.tgz#9ce68ebe2e568606d8b61b1f3540c2747cf91bee" 563 | integrity sha512-kD+BNkPGRcxZZUKhAXqF/bilUMhXUlf/ZixVlBS5rEsUB1yx/Ze8c4ypaKr5WsEwv34C+X4p4WFYdZVJEr3Y+g== 564 | dependencies: 565 | "@parcel/types" "2.9.1" 566 | 567 | "@parcel/profiler@2.9.1": 568 | version "2.9.1" 569 | resolved "https://registry.yarnpkg.com/@parcel/profiler/-/profiler-2.9.1.tgz#12a8928a2f15356b42cdfe2939083e3e15aba5f7" 570 | integrity sha512-hrptwbh9uUxnWHAAXiZ6BtpM74cU+VfrOWgnmUA8pkYWBmrb2wSLeqRKl8FiSt+nfRTTbNAIlmn9vk2x+wRNOA== 571 | dependencies: 572 | "@parcel/diagnostic" "2.9.1" 573 | "@parcel/events" "2.9.1" 574 | chrome-trace-event "^1.0.2" 575 | 576 | "@parcel/reporter-cli@2.9.1": 577 | version "2.9.1" 578 | resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.9.1.tgz#a5133127dc13f443aa119f5c6b531f2741fa9f54" 579 | integrity sha512-xzJaaHQwcsmHijlCl7gOAdqU0n6AnW7c7rN8AXDH8BvnOx2v8NC8nCIEmDTOfpQYepcuER2+ilTQ7jpDx/iDhg== 580 | dependencies: 581 | "@parcel/plugin" "2.9.1" 582 | "@parcel/types" "2.9.1" 583 | "@parcel/utils" "2.9.1" 584 | chalk "^4.1.0" 585 | term-size "^2.2.1" 586 | 587 | "@parcel/reporter-dev-server@2.9.1": 588 | version "2.9.1" 589 | resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.9.1.tgz#ebbf1558e8c4f90906d90ddbe431892ebfc86601" 590 | integrity sha512-Wa9kmtnuYTqEsKakhrSLvZmWxM4TB+Dg2jl1vC3gYfvlsgt/d/Hp/y2giPH1EeCm4wEEQfdAY3WmSUx9p1x07w== 591 | dependencies: 592 | "@parcel/plugin" "2.9.1" 593 | "@parcel/utils" "2.9.1" 594 | 595 | "@parcel/reporter-tracer@2.9.1": 596 | version "2.9.1" 597 | resolved "https://registry.yarnpkg.com/@parcel/reporter-tracer/-/reporter-tracer-2.9.1.tgz#aef67c36b2f5c58ace1122920fb28d3ef2db9a12" 598 | integrity sha512-LgZKx9qwBAChWHBcpHW8GJXz45IGtiPmzs6HIDavZOiGqjGVzmbHUKxHnFaRZqR6WznJ+0ay/2o+BrJ8cyXUcg== 599 | dependencies: 600 | "@parcel/plugin" "2.9.1" 601 | "@parcel/utils" "2.9.1" 602 | chrome-trace-event "^1.0.3" 603 | nullthrows "^1.1.1" 604 | 605 | "@parcel/resolver-default@2.9.1": 606 | version "2.9.1" 607 | resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.9.1.tgz#c28621b9ba7cd06959a5039eb4b475880cc85228" 608 | integrity sha512-Q+knNaRDTbGIGqUnddtWEgpYduVBkDyi/CpxKpi7dP7sVYNJsXwEf82hpjX6/XqotA5dehT63yJkvJ/wxJF1Nw== 609 | dependencies: 610 | "@parcel/node-resolver-core" "3.0.1" 611 | "@parcel/plugin" "2.9.1" 612 | 613 | "@parcel/runtime-browser-hmr@2.9.1": 614 | version "2.9.1" 615 | resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.9.1.tgz#663d706cf227914a2ca0c07b9ef8c7e2e3253840" 616 | integrity sha512-C+023FOsrycpBHUgUf7Nv4uN0NrLN3UkeymsAHQlgZD5QQD7+nhG6p9PQ7+HbbEAaGaeO7c/86s2qRUglufNig== 617 | dependencies: 618 | "@parcel/plugin" "2.9.1" 619 | "@parcel/utils" "2.9.1" 620 | 621 | "@parcel/runtime-js@2.9.1": 622 | version "2.9.1" 623 | resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.9.1.tgz#8cdc0fe7e0e6b08ffe2c3fd0ea813de73c48bdb0" 624 | integrity sha512-caT1s1BqYNFGFAz9ul7uwDf+ZXzipiYYoHphhmT2JFweQmRA1CrMeFCuCQa2exsdu+UQpRbuKd+v5UUS2n0poQ== 625 | dependencies: 626 | "@parcel/diagnostic" "2.9.1" 627 | "@parcel/plugin" "2.9.1" 628 | "@parcel/utils" "2.9.1" 629 | nullthrows "^1.1.1" 630 | 631 | "@parcel/runtime-react-refresh@2.9.1": 632 | version "2.9.1" 633 | resolved "https://registry.yarnpkg.com/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.9.1.tgz#0e2f0aaf60f3ded371a4babc3ef37ac7473720c0" 634 | integrity sha512-opDW9p3f4gVc1aVdFAyLWTL+2S8rhsPdBQRBHEi4WE2DRe/9lpA12NN5KUUHy88dlIr3wyzmaO2Fts0r/x80zg== 635 | dependencies: 636 | "@parcel/plugin" "2.9.1" 637 | "@parcel/utils" "2.9.1" 638 | react-error-overlay "6.0.9" 639 | react-refresh "^0.9.0" 640 | 641 | "@parcel/runtime-service-worker@2.9.1": 642 | version "2.9.1" 643 | resolved "https://registry.yarnpkg.com/@parcel/runtime-service-worker/-/runtime-service-worker-2.9.1.tgz#4e4fd68bcda49afd20f31cf4c0fc410e539baacf" 644 | integrity sha512-TED4MouYjP7xbU9V7/3rjnmuWbCefrP+OC+eQJG6j3HwKiL92QTZ6trWqdLuxFhtZMXKjwbWaBBbIcELB/PbtQ== 645 | dependencies: 646 | "@parcel/plugin" "2.9.1" 647 | "@parcel/utils" "2.9.1" 648 | nullthrows "^1.1.1" 649 | 650 | "@parcel/source-map@^2.1.1": 651 | version "2.1.1" 652 | resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.1.1.tgz#fb193b82dba6dd62cc7a76b326f57bb35000a782" 653 | integrity sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew== 654 | dependencies: 655 | detect-libc "^1.0.3" 656 | 657 | "@parcel/transformer-babel@2.9.1": 658 | version "2.9.1" 659 | resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.9.1.tgz#db7c11e14b33ce6ce84170eebf93c3fa5a96ae3a" 660 | integrity sha512-HEU3bavD9Cu0RP5T1ioGLbsOQDqND/SQWal8L2f9HsgwTs2kzmTxYylNccqNjAMj3NnoyXzKMKbZyG8qEuLlpw== 661 | dependencies: 662 | "@parcel/diagnostic" "2.9.1" 663 | "@parcel/plugin" "2.9.1" 664 | "@parcel/source-map" "^2.1.1" 665 | "@parcel/utils" "2.9.1" 666 | browserslist "^4.6.6" 667 | json5 "^2.2.0" 668 | nullthrows "^1.1.1" 669 | semver "^5.7.0" 670 | 671 | "@parcel/transformer-css@2.9.1": 672 | version "2.9.1" 673 | resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.9.1.tgz#c70fceddb5352e3fc8a121842c04138a57ec311f" 674 | integrity sha512-nT+xOfyveX6qSb088dOh59HWJ1gm7DAIQZPbjTa1wLzRQul8ysdQRf/loulBmtUheol7YwQtVvUHN2XgoMDCAw== 675 | dependencies: 676 | "@parcel/diagnostic" "2.9.1" 677 | "@parcel/plugin" "2.9.1" 678 | "@parcel/source-map" "^2.1.1" 679 | "@parcel/utils" "2.9.1" 680 | browserslist "^4.6.6" 681 | lightningcss "^1.16.1" 682 | nullthrows "^1.1.1" 683 | 684 | "@parcel/transformer-html@2.9.1": 685 | version "2.9.1" 686 | resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.9.1.tgz#306754b6448df1ef8c3bf0af9eacf6ab019d48df" 687 | integrity sha512-pIkJbcB91Dl2RyZmVd9neGkf7XJeYXwgx0et5hktw+3m0S2QB399OjVWwi5Q6ZdtTrWkQnHLmbeHT3NOmNWlaw== 688 | dependencies: 689 | "@parcel/diagnostic" "2.9.1" 690 | "@parcel/hash" "2.9.1" 691 | "@parcel/plugin" "2.9.1" 692 | nullthrows "^1.1.1" 693 | posthtml "^0.16.5" 694 | posthtml-parser "^0.10.1" 695 | posthtml-render "^3.0.0" 696 | semver "^5.7.1" 697 | srcset "4" 698 | 699 | "@parcel/transformer-image@2.9.1": 700 | version "2.9.1" 701 | resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.9.1.tgz#efbc289114c9330f85a4307b3c7e6e31ec13808d" 702 | integrity sha512-3D4zEavCM1i354ZgJWg7RBNgASA7Q2iHN374lH5hT6I7VAJzNT+PTNrPNQ4vKhi69r+i1sQQzsPdgEUXOExmbQ== 703 | dependencies: 704 | "@parcel/plugin" "2.9.1" 705 | "@parcel/utils" "2.9.1" 706 | "@parcel/workers" "2.9.1" 707 | nullthrows "^1.1.1" 708 | 709 | "@parcel/transformer-js@2.9.1": 710 | version "2.9.1" 711 | resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.9.1.tgz#175e552de1b4466b5d4ae6f51b6c58d7a7d6a549" 712 | integrity sha512-7hlbAIufIvx6iPspfZ3v1g2cmtpaNEaC04RzRv8HVVru8TE868yplFI840ZBnF5ylOfmxwFTUjlphVtVcPs13A== 713 | dependencies: 714 | "@parcel/diagnostic" "2.9.1" 715 | "@parcel/plugin" "2.9.1" 716 | "@parcel/source-map" "^2.1.1" 717 | "@parcel/utils" "2.9.1" 718 | "@parcel/workers" "2.9.1" 719 | "@swc/helpers" "^0.5.0" 720 | browserslist "^4.6.6" 721 | nullthrows "^1.1.1" 722 | regenerator-runtime "^0.13.7" 723 | semver "^5.7.1" 724 | 725 | "@parcel/transformer-json@2.9.1": 726 | version "2.9.1" 727 | resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.9.1.tgz#bb754e02d7f13cc6becfe473857823bf435087e6" 728 | integrity sha512-yFRSz1qVbdCssC65D37Ru3diQk7GQl5ZOOyQ7MeMYlhvl8mcFKGRC3wUAyqBZrh70VOWuWR7WS2XLdqTdE9WqQ== 729 | dependencies: 730 | "@parcel/plugin" "2.9.1" 731 | json5 "^2.2.0" 732 | 733 | "@parcel/transformer-postcss@2.9.1": 734 | version "2.9.1" 735 | resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.9.1.tgz#5cccedb2bf2f14afc91a42b354d219cf47f42ee5" 736 | integrity sha512-sNSJbdT4Z8H+/cZ/vCmos44SfbB9O5gNgMEgGa6WqU7MV7cVlnE8zuNJkxR97ZZTpIXNrfVerOY3lOrUrFCxdA== 737 | dependencies: 738 | "@parcel/diagnostic" "2.9.1" 739 | "@parcel/hash" "2.9.1" 740 | "@parcel/plugin" "2.9.1" 741 | "@parcel/utils" "2.9.1" 742 | clone "^2.1.1" 743 | nullthrows "^1.1.1" 744 | postcss-value-parser "^4.2.0" 745 | semver "^5.7.1" 746 | 747 | "@parcel/transformer-posthtml@2.9.1": 748 | version "2.9.1" 749 | resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.9.1.tgz#b999b3366c73202ae28a1f7cb7a05b80ec0b766b" 750 | integrity sha512-I6fr6lVAqjDxdkOwxelx7FibMWP55JPf3ZTXKCWpoIGkOuT2i2tYZMdXEHVshZWJmByelbYSC96w8P8rSY+6XQ== 751 | dependencies: 752 | "@parcel/plugin" "2.9.1" 753 | "@parcel/utils" "2.9.1" 754 | nullthrows "^1.1.1" 755 | posthtml "^0.16.5" 756 | posthtml-parser "^0.10.1" 757 | posthtml-render "^3.0.0" 758 | semver "^5.7.1" 759 | 760 | "@parcel/transformer-raw@2.9.1": 761 | version "2.9.1" 762 | resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.9.1.tgz#7a329ae7d8eb42d9f424daa209d99edfd302b6fa" 763 | integrity sha512-Wr0Y9fETiyF5ntL3yhn/ZXjcnswcn1T9YLXa+yAxpAxKW+/D7A1jKVS0tyDOZsdakWA9gzlLP6w1O4Nl8pVmEg== 764 | dependencies: 765 | "@parcel/plugin" "2.9.1" 766 | 767 | "@parcel/transformer-react-refresh-wrap@2.9.1": 768 | version "2.9.1" 769 | resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.9.1.tgz#6600352f0d83fab99f0c9cb99d048028c649c614" 770 | integrity sha512-ML+KDvLoZ6O+9r3/yf8DeVtobhYc9DPXYHZ75aXoFyou97I9WDf4EqlY4/MSkbZV79FUXxC68dyLJj3Q9ILqeA== 771 | dependencies: 772 | "@parcel/plugin" "2.9.1" 773 | "@parcel/utils" "2.9.1" 774 | react-refresh "^0.9.0" 775 | 776 | "@parcel/transformer-sass@^2.9.1": 777 | version "2.9.1" 778 | resolved "https://registry.yarnpkg.com/@parcel/transformer-sass/-/transformer-sass-2.9.1.tgz#5cc6a57de261d71de0acea88e039c9d74d80415a" 779 | integrity sha512-foGi2lyO3da6vla3XM2SzFdVwhc9vZE+i5OQvv2JTfyO1h1PSJeQRSbJV+H6tQ0UTg2vansHx9yzKwu7M4Vnlg== 780 | dependencies: 781 | "@parcel/plugin" "2.9.1" 782 | "@parcel/source-map" "^2.1.1" 783 | sass "^1.38.0" 784 | 785 | "@parcel/transformer-svg@2.9.1": 786 | version "2.9.1" 787 | resolved "https://registry.yarnpkg.com/@parcel/transformer-svg/-/transformer-svg-2.9.1.tgz#c267e15c6fa1517684db1ca335ccded6a3a7dfdd" 788 | integrity sha512-DYcUfutjtghPXMVybFygncIKJl/4rrpQMxv8yTVeDtplUTvFzbI+3hIoYfYm8z9CXaSBzsCw2Kud6PD8Ob2AzQ== 789 | dependencies: 790 | "@parcel/diagnostic" "2.9.1" 791 | "@parcel/hash" "2.9.1" 792 | "@parcel/plugin" "2.9.1" 793 | nullthrows "^1.1.1" 794 | posthtml "^0.16.5" 795 | posthtml-parser "^0.10.1" 796 | posthtml-render "^3.0.0" 797 | semver "^5.7.1" 798 | 799 | "@parcel/transformer-webmanifest@^2.9.1": 800 | version "2.9.1" 801 | resolved "https://registry.yarnpkg.com/@parcel/transformer-webmanifest/-/transformer-webmanifest-2.9.1.tgz#23f03bdda7760d1f031d1e556e869b82d792f15c" 802 | integrity sha512-mnNfDJQBaqkc8S0I9IOHEM0dKRMXNMXcl4vUMCUrcAiNYGcSLaPrSfZqvyuUgc5Lx6T2FCeQ/KzamWBdH3e0PA== 803 | dependencies: 804 | "@mischnic/json-sourcemap" "^0.1.0" 805 | "@parcel/diagnostic" "2.9.1" 806 | "@parcel/plugin" "2.9.1" 807 | "@parcel/utils" "2.9.1" 808 | 809 | "@parcel/transformer-xml@^2.9.1": 810 | version "2.9.1" 811 | resolved "https://registry.yarnpkg.com/@parcel/transformer-xml/-/transformer-xml-2.9.1.tgz#c69382dc8b606d2de8ee009c44c57b2c17b3fef5" 812 | integrity sha512-fcWkCC6iEsiN7aHSDFwIMXMrsFtLEU+AX/xQFR1sdXnE8i0KJqtA+brnx9DYOaIVX0Cr1f62w7D2Jr/gM7OnmA== 813 | dependencies: 814 | "@parcel/plugin" "2.9.1" 815 | "@xmldom/xmldom" "^0.7.9" 816 | 817 | "@parcel/types@2.9.1": 818 | version "2.9.1" 819 | resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.9.1.tgz#6d79b5b6459119e58aac734adf2c3c4a261b983f" 820 | integrity sha512-LBx4Tvr1sK9t+FmPjS4jPvcmUcJo6co22sn0pBuz2oXISs/YK2N+3ZHXL+KsozKvLn2wXysgaWFIARN9xFoORw== 821 | dependencies: 822 | "@parcel/cache" "2.9.1" 823 | "@parcel/diagnostic" "2.9.1" 824 | "@parcel/fs" "2.9.1" 825 | "@parcel/package-manager" "2.9.1" 826 | "@parcel/source-map" "^2.1.1" 827 | "@parcel/workers" "2.9.1" 828 | utility-types "^3.10.0" 829 | 830 | "@parcel/utils@2.9.1": 831 | version "2.9.1" 832 | resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.9.1.tgz#2ecec9b17ce880b1768c2956545e18af3e63b791" 833 | integrity sha512-0P/zIvtvLyuzQA4VFMzA8F22lrUyGR+phve/NlBUH+4Tn+Rt/evh9fP9vG1YTVMXWd90tesLdrtqatm1hqrJSA== 834 | dependencies: 835 | "@parcel/codeframe" "2.9.1" 836 | "@parcel/diagnostic" "2.9.1" 837 | "@parcel/hash" "2.9.1" 838 | "@parcel/logger" "2.9.1" 839 | "@parcel/markdown-ansi" "2.9.1" 840 | "@parcel/source-map" "^2.1.1" 841 | chalk "^4.1.0" 842 | nullthrows "^1.1.1" 843 | 844 | "@parcel/watcher@^2.0.7": 845 | version "2.1.0" 846 | resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.1.0.tgz#5f32969362db4893922c526a842d8af7a8538545" 847 | integrity sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw== 848 | dependencies: 849 | is-glob "^4.0.3" 850 | micromatch "^4.0.5" 851 | node-addon-api "^3.2.1" 852 | node-gyp-build "^4.3.0" 853 | 854 | "@parcel/workers@2.9.1": 855 | version "2.9.1" 856 | resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.9.1.tgz#a6962f0b8a53d59ebb4de21ce5e8f49b12bf69ce" 857 | integrity sha512-24R4IRMX8TBghak6pDCzM5B8NB4LTt0pI4dwNqSENyZA/Q5s/xMbG5gdn4aTwkAyIQ5lHrgDsHzoHbjOT0HLYQ== 858 | dependencies: 859 | "@parcel/diagnostic" "2.9.1" 860 | "@parcel/logger" "2.9.1" 861 | "@parcel/profiler" "2.9.1" 862 | "@parcel/types" "2.9.1" 863 | "@parcel/utils" "2.9.1" 864 | nullthrows "^1.1.1" 865 | 866 | "@swc/core-darwin-arm64@1.3.61": 867 | version "1.3.61" 868 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.61.tgz#5935e76df79596deac71a98afbbfe82d0a8e03ab" 869 | integrity sha512-Ra1CZIYYyIp/Y64VcKyaLjIPUwT83JmGduvHu8vhUZOvWV4dWL4s5DrcxQVaQJjjb7Z2N/IUYYS55US1TGnxZw== 870 | 871 | "@swc/core-darwin-x64@1.3.61": 872 | version "1.3.61" 873 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.61.tgz#14883499c59457a8a3f114f0f94004a37c743866" 874 | integrity sha512-LUia75UByUFkYH1Ddw7IE0X9usNVGJ7aL6+cgOTju7P0dsU0f8h/OGc/GDfp1E4qnKxDCJE+GwDRLoi4SjIxpg== 875 | 876 | "@swc/core-linux-arm-gnueabihf@1.3.61": 877 | version "1.3.61" 878 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.61.tgz#3b9b2ad3d1387ef12372f4fc9821e760b9ac36a2" 879 | integrity sha512-aalPlicYxHAn2PxNlo3JFEZkMXzCtUwjP27AgMqnfV4cSz7Omo56OtC+413e/kGyCH86Er9gJRQQsxNKP8Qbsg== 880 | 881 | "@swc/core-linux-arm64-gnu@1.3.61": 882 | version "1.3.61" 883 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.61.tgz#8d0ccdc2e45c0f8f4e270b5d144aeb3921ce5ed3" 884 | integrity sha512-9hGdsbQrYNPo1c7YzWF57yl17bsIuuEQi3I1fOFSv3puL3l5M/C/oCD0Bz6IdKh6mEDC5UNJE4LWtV1gFA995A== 885 | 886 | "@swc/core-linux-arm64-musl@1.3.61": 887 | version "1.3.61" 888 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.61.tgz#6983481a0e15fbc8ce60c536de82e39b8669d7c5" 889 | integrity sha512-mVmcNfFQRP4SYbGC08IPB3B9Xox+VpGIQqA3Qg7LMCcejLAQLi4Lfe8CDvvBPlQzXHso0Cv+BicJnQVKs8JLOA== 890 | 891 | "@swc/core-linux-x64-gnu@1.3.61": 892 | version "1.3.61" 893 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.61.tgz#9fe55668d1eccbce2739134d4a15436f4c17aba8" 894 | integrity sha512-ZkRHs7GEikN6JiVL1/stvq9BVHKrSKoRn9ulVK2hMr+mAGNOKm3Y06NSzOO+BWwMaFOgnO2dWlszCUICsQ0kpg== 895 | 896 | "@swc/core-linux-x64-musl@1.3.61": 897 | version "1.3.61" 898 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.61.tgz#5729aa85b039d40aa642867b520fdc96267e2aa4" 899 | integrity sha512-zK7VqQ5JlK20+7fxI4AgvIUckeZyX0XIbliGXNMR3i+39SJq1vs9scYEmq8VnAfvNdMU5BG+DewbFJlMfCtkxQ== 900 | 901 | "@swc/core-win32-arm64-msvc@1.3.61": 902 | version "1.3.61" 903 | resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.61.tgz#1e8f343b67e9c69aa55f8a3c19539f632be76b3f" 904 | integrity sha512-e9kVVPk5iVNhO41TvLvcExDHn5iATQ5/M4U7/CdcC7s0fK19TKSEUqkdoTLIJvHBFhgR7w3JJSErfnauO0xXoA== 905 | 906 | "@swc/core-win32-ia32-msvc@1.3.61": 907 | version "1.3.61" 908 | resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.61.tgz#e560de48ef13bebd9e7bc35c19c2c40e5a2d3d4b" 909 | integrity sha512-7cJULfa6HvKqvFh6M/f7mKiNRhE2AjgFUCZfdOuy5r8vbtpk+qBK94TXwaDjJYDUGKzDVZw/tJ1eN4Y9n9Ls/Q== 910 | 911 | "@swc/core-win32-x64-msvc@1.3.61": 912 | version "1.3.61" 913 | resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.61.tgz#07b75b5af65afd207c96ef5503e44767fe0239f5" 914 | integrity sha512-Jx8S+21WcKF/wlhW+sYpystWUyymDTEsbBpOgBRpXZelakVcNBCIIYSZOKW/A9PwWTpu6S8yvbs9nUOzKiVPqA== 915 | 916 | "@swc/core@^1.3.36": 917 | version "1.3.61" 918 | resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.61.tgz#b526d6ca3f98f703d1d7f3e61c08da6da2ed3f17" 919 | integrity sha512-p58Ltdjo7Yy8CU3zK0cp4/eAgy5qkHs35znGedqVGPiA67cuYZM63DuTfmyrOntMRwQnaFkMLklDAPCizDdDng== 920 | optionalDependencies: 921 | "@swc/core-darwin-arm64" "1.3.61" 922 | "@swc/core-darwin-x64" "1.3.61" 923 | "@swc/core-linux-arm-gnueabihf" "1.3.61" 924 | "@swc/core-linux-arm64-gnu" "1.3.61" 925 | "@swc/core-linux-arm64-musl" "1.3.61" 926 | "@swc/core-linux-x64-gnu" "1.3.61" 927 | "@swc/core-linux-x64-musl" "1.3.61" 928 | "@swc/core-win32-arm64-msvc" "1.3.61" 929 | "@swc/core-win32-ia32-msvc" "1.3.61" 930 | "@swc/core-win32-x64-msvc" "1.3.61" 931 | 932 | "@swc/helpers@^0.5.0": 933 | version "0.5.1" 934 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a" 935 | integrity sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg== 936 | dependencies: 937 | tslib "^2.4.0" 938 | 939 | "@trysound/sax@0.2.0": 940 | version "0.2.0" 941 | resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" 942 | integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== 943 | 944 | "@xmldom/xmldom@^0.7.9": 945 | version "0.7.10" 946 | resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.10.tgz#b1f4a7dc63ac35b2750847644d5dacf5b4ead12f" 947 | integrity sha512-hb9QhOg5MGmpVkFcoZ9XJMe1em5gd0e2eqqjK87O1dwULedXsnY/Zg/Ju6lcohA+t6jVkmKpe7I1etqhvdRdrQ== 948 | 949 | abortcontroller-polyfill@^1.1.9: 950 | version "1.7.5" 951 | resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" 952 | integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== 953 | 954 | ansi-styles@^3.2.1: 955 | version "3.2.1" 956 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 957 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 958 | dependencies: 959 | color-convert "^1.9.0" 960 | 961 | ansi-styles@^4.1.0: 962 | version "4.3.0" 963 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 964 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 965 | dependencies: 966 | color-convert "^2.0.1" 967 | 968 | anymatch@~3.1.2: 969 | version "3.1.3" 970 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 971 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 972 | dependencies: 973 | normalize-path "^3.0.0" 974 | picomatch "^2.0.4" 975 | 976 | argparse@^2.0.1: 977 | version "2.0.1" 978 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 979 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 980 | 981 | array-union@^1.0.1: 982 | version "1.0.2" 983 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 984 | integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= 985 | dependencies: 986 | array-uniq "^1.0.1" 987 | 988 | array-union@^2.1.0: 989 | version "2.1.0" 990 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 991 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 992 | 993 | array-uniq@^1.0.1: 994 | version "1.0.3" 995 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 996 | integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= 997 | 998 | async@^3.2.4: 999 | version "3.2.4" 1000 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" 1001 | integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== 1002 | 1003 | balanced-match@^1.0.0: 1004 | version "1.0.0" 1005 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 1006 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 1007 | 1008 | base-x@^3.0.8: 1009 | version "3.0.9" 1010 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 1011 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 1012 | dependencies: 1013 | safe-buffer "^5.0.1" 1014 | 1015 | binary-extensions@^2.0.0: 1016 | version "2.1.0" 1017 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" 1018 | integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== 1019 | 1020 | boolbase@^1.0.0: 1021 | version "1.0.0" 1022 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 1023 | integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 1024 | 1025 | brace-expansion@^1.1.7: 1026 | version "1.1.11" 1027 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 1028 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 1029 | dependencies: 1030 | balanced-match "^1.0.0" 1031 | concat-map "0.0.1" 1032 | 1033 | braces@^3.0.2, braces@~3.0.2: 1034 | version "3.0.2" 1035 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 1036 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 1037 | dependencies: 1038 | fill-range "^7.0.1" 1039 | 1040 | browserslist@^4.6.6: 1041 | version "4.21.7" 1042 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551" 1043 | integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA== 1044 | dependencies: 1045 | caniuse-lite "^1.0.30001489" 1046 | electron-to-chromium "^1.4.411" 1047 | node-releases "^2.0.12" 1048 | update-browserslist-db "^1.0.11" 1049 | 1050 | callsites@^3.0.0: 1051 | version "3.1.0" 1052 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 1053 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 1054 | 1055 | caniuse-lite@^1.0.30001489: 1056 | version "1.0.30001491" 1057 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001491.tgz#eab0e0f392de6f7411751d148de9b5bd6b203e46" 1058 | integrity sha512-17EYIi4TLnPiTzVKMveIxU5ETlxbSO3B6iPvMbprqnKh4qJsQGk5Nh1Lp4jIMAE0XfrujsJuWZAM3oJdMHaKBA== 1059 | 1060 | chalk@^2.0.0: 1061 | version "2.4.2" 1062 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1063 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1064 | dependencies: 1065 | ansi-styles "^3.2.1" 1066 | escape-string-regexp "^1.0.5" 1067 | supports-color "^5.3.0" 1068 | 1069 | chalk@^4.1.0, chalk@^4.1.2: 1070 | version "4.1.2" 1071 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1072 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1073 | dependencies: 1074 | ansi-styles "^4.1.0" 1075 | supports-color "^7.1.0" 1076 | 1077 | cheerio-select@^2.1.0: 1078 | version "2.1.0" 1079 | resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" 1080 | integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== 1081 | dependencies: 1082 | boolbase "^1.0.0" 1083 | css-select "^5.1.0" 1084 | css-what "^6.1.0" 1085 | domelementtype "^2.3.0" 1086 | domhandler "^5.0.3" 1087 | domutils "^3.0.1" 1088 | 1089 | cheerio@^1.0.0-rc.12: 1090 | version "1.0.0-rc.12" 1091 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" 1092 | integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== 1093 | dependencies: 1094 | cheerio-select "^2.1.0" 1095 | dom-serializer "^2.0.0" 1096 | domhandler "^5.0.3" 1097 | domutils "^3.0.1" 1098 | htmlparser2 "^8.0.1" 1099 | parse5 "^7.0.0" 1100 | parse5-htmlparser2-tree-adapter "^7.0.0" 1101 | 1102 | "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: 1103 | version "3.5.3" 1104 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 1105 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 1106 | dependencies: 1107 | anymatch "~3.1.2" 1108 | braces "~3.0.2" 1109 | glob-parent "~5.1.2" 1110 | is-binary-path "~2.1.0" 1111 | is-glob "~4.0.1" 1112 | normalize-path "~3.0.0" 1113 | readdirp "~3.6.0" 1114 | optionalDependencies: 1115 | fsevents "~2.3.2" 1116 | 1117 | chrome-trace-event@^1.0.2, chrome-trace-event@^1.0.3: 1118 | version "1.0.3" 1119 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 1120 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 1121 | 1122 | clone@^2.1.1: 1123 | version "2.1.2" 1124 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" 1125 | integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= 1126 | 1127 | color-convert@^1.9.0: 1128 | version "1.9.3" 1129 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1130 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1131 | dependencies: 1132 | color-name "1.1.3" 1133 | 1134 | color-convert@^2.0.1: 1135 | version "2.0.1" 1136 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1137 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1138 | dependencies: 1139 | color-name "~1.1.4" 1140 | 1141 | color-name@1.1.3: 1142 | version "1.1.3" 1143 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1144 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 1145 | 1146 | color-name@~1.1.4: 1147 | version "1.1.4" 1148 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1149 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1150 | 1151 | commander@^2.18.0: 1152 | version "2.20.3" 1153 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 1154 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 1155 | 1156 | commander@^7.0.0, commander@^7.2.0: 1157 | version "7.2.0" 1158 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 1159 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 1160 | 1161 | commondir@^1.0.1: 1162 | version "1.0.1" 1163 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 1164 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 1165 | 1166 | concat-map@0.0.1: 1167 | version "0.0.1" 1168 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1169 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 1170 | 1171 | cosmiconfig@^8.0.0: 1172 | version "8.1.3" 1173 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" 1174 | integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== 1175 | dependencies: 1176 | import-fresh "^3.2.1" 1177 | js-yaml "^4.1.0" 1178 | parse-json "^5.0.0" 1179 | path-type "^4.0.0" 1180 | 1181 | css-select@^4.1.3: 1182 | version "4.3.0" 1183 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" 1184 | integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== 1185 | dependencies: 1186 | boolbase "^1.0.0" 1187 | css-what "^6.0.1" 1188 | domhandler "^4.3.1" 1189 | domutils "^2.8.0" 1190 | nth-check "^2.0.1" 1191 | 1192 | css-select@^5.1.0: 1193 | version "5.1.0" 1194 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" 1195 | integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== 1196 | dependencies: 1197 | boolbase "^1.0.0" 1198 | css-what "^6.1.0" 1199 | domhandler "^5.0.2" 1200 | domutils "^3.0.1" 1201 | nth-check "^2.0.1" 1202 | 1203 | css-tree@^1.1.2, css-tree@^1.1.3: 1204 | version "1.1.3" 1205 | resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" 1206 | integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== 1207 | dependencies: 1208 | mdn-data "2.0.14" 1209 | source-map "^0.6.1" 1210 | 1211 | css-what@^6.0.1, css-what@^6.1.0: 1212 | version "6.1.0" 1213 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" 1214 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== 1215 | 1216 | csso@^4.2.0: 1217 | version "4.2.0" 1218 | resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" 1219 | integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== 1220 | dependencies: 1221 | css-tree "^1.1.2" 1222 | 1223 | detect-libc@^1.0.3: 1224 | version "1.0.3" 1225 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 1226 | integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== 1227 | 1228 | dir-glob@^3.0.1: 1229 | version "3.0.1" 1230 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 1231 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 1232 | dependencies: 1233 | path-type "^4.0.0" 1234 | 1235 | dom-serializer@^1.0.1: 1236 | version "1.1.0" 1237 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" 1238 | integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== 1239 | dependencies: 1240 | domelementtype "^2.0.1" 1241 | domhandler "^3.0.0" 1242 | entities "^2.0.0" 1243 | 1244 | dom-serializer@^2.0.0: 1245 | version "2.0.0" 1246 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" 1247 | integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== 1248 | dependencies: 1249 | domelementtype "^2.3.0" 1250 | domhandler "^5.0.2" 1251 | entities "^4.2.0" 1252 | 1253 | domelementtype@^2.0.1: 1254 | version "2.0.2" 1255 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" 1256 | integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== 1257 | 1258 | domelementtype@^2.2.0, domelementtype@^2.3.0: 1259 | version "2.3.0" 1260 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 1261 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 1262 | 1263 | domhandler@^3.0.0: 1264 | version "3.3.0" 1265 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" 1266 | integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== 1267 | dependencies: 1268 | domelementtype "^2.0.1" 1269 | 1270 | domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: 1271 | version "4.3.1" 1272 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" 1273 | integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== 1274 | dependencies: 1275 | domelementtype "^2.2.0" 1276 | 1277 | domhandler@^5.0.2, domhandler@^5.0.3: 1278 | version "5.0.3" 1279 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" 1280 | integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== 1281 | dependencies: 1282 | domelementtype "^2.3.0" 1283 | 1284 | domutils@^2.8.0: 1285 | version "2.8.0" 1286 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" 1287 | integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== 1288 | dependencies: 1289 | dom-serializer "^1.0.1" 1290 | domelementtype "^2.2.0" 1291 | domhandler "^4.2.0" 1292 | 1293 | domutils@^3.0.1: 1294 | version "3.1.0" 1295 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" 1296 | integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== 1297 | dependencies: 1298 | dom-serializer "^2.0.0" 1299 | domelementtype "^2.3.0" 1300 | domhandler "^5.0.3" 1301 | 1302 | dotenv-expand@^5.1.0: 1303 | version "5.1.0" 1304 | resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" 1305 | integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== 1306 | 1307 | dotenv@^7.0.0: 1308 | version "7.0.0" 1309 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" 1310 | integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== 1311 | 1312 | electron-to-chromium@^1.4.411: 1313 | version "1.4.413" 1314 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.413.tgz#0067c3122946ae234cbefb9401ecefde851cdcf2" 1315 | integrity sha512-Gd+/OAhRca06dkVxIQo/W7dr6Nmk9cx6lQdZ19GvFp51k5B/lUAokm6SJfNkdV8kFLsC3Z4sLTyEHWCnB1Efbw== 1316 | 1317 | email-addresses@^5.0.0: 1318 | version "5.0.0" 1319 | resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" 1320 | integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== 1321 | 1322 | entities@^2.0.0: 1323 | version "2.1.0" 1324 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" 1325 | integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== 1326 | 1327 | entities@^3.0.1: 1328 | version "3.0.1" 1329 | resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" 1330 | integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== 1331 | 1332 | entities@^4.2.0, entities@^4.4.0: 1333 | version "4.5.0" 1334 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" 1335 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== 1336 | 1337 | error-ex@^1.3.1: 1338 | version "1.3.2" 1339 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1340 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1341 | dependencies: 1342 | is-arrayish "^0.2.1" 1343 | 1344 | esbuild-plugin-copy@^2.1.1: 1345 | version "2.1.1" 1346 | resolved "https://registry.yarnpkg.com/esbuild-plugin-copy/-/esbuild-plugin-copy-2.1.1.tgz#638308ecfd679e4c7c76b71c62f7dd9a4cc7f901" 1347 | integrity sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw== 1348 | dependencies: 1349 | chalk "^4.1.2" 1350 | chokidar "^3.5.3" 1351 | fs-extra "^10.0.1" 1352 | globby "^11.0.3" 1353 | 1354 | esbuild@^0.17.19: 1355 | version "0.17.19" 1356 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" 1357 | integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== 1358 | optionalDependencies: 1359 | "@esbuild/android-arm" "0.17.19" 1360 | "@esbuild/android-arm64" "0.17.19" 1361 | "@esbuild/android-x64" "0.17.19" 1362 | "@esbuild/darwin-arm64" "0.17.19" 1363 | "@esbuild/darwin-x64" "0.17.19" 1364 | "@esbuild/freebsd-arm64" "0.17.19" 1365 | "@esbuild/freebsd-x64" "0.17.19" 1366 | "@esbuild/linux-arm" "0.17.19" 1367 | "@esbuild/linux-arm64" "0.17.19" 1368 | "@esbuild/linux-ia32" "0.17.19" 1369 | "@esbuild/linux-loong64" "0.17.19" 1370 | "@esbuild/linux-mips64el" "0.17.19" 1371 | "@esbuild/linux-ppc64" "0.17.19" 1372 | "@esbuild/linux-riscv64" "0.17.19" 1373 | "@esbuild/linux-s390x" "0.17.19" 1374 | "@esbuild/linux-x64" "0.17.19" 1375 | "@esbuild/netbsd-x64" "0.17.19" 1376 | "@esbuild/openbsd-x64" "0.17.19" 1377 | "@esbuild/sunos-x64" "0.17.19" 1378 | "@esbuild/win32-arm64" "0.17.19" 1379 | "@esbuild/win32-ia32" "0.17.19" 1380 | "@esbuild/win32-x64" "0.17.19" 1381 | 1382 | escalade@^3.1.1: 1383 | version "3.1.1" 1384 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1385 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1386 | 1387 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1388 | version "1.0.5" 1389 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1390 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1391 | 1392 | fast-glob@^3.2.9: 1393 | version "3.2.12" 1394 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 1395 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 1396 | dependencies: 1397 | "@nodelib/fs.stat" "^2.0.2" 1398 | "@nodelib/fs.walk" "^1.2.3" 1399 | glob-parent "^5.1.2" 1400 | merge2 "^1.3.0" 1401 | micromatch "^4.0.4" 1402 | 1403 | fastq@^1.6.0: 1404 | version "1.15.0" 1405 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 1406 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 1407 | dependencies: 1408 | reusify "^1.0.4" 1409 | 1410 | filename-reserved-regex@^2.0.0: 1411 | version "2.0.0" 1412 | resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" 1413 | integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== 1414 | 1415 | filenamify@^4.3.0: 1416 | version "4.3.0" 1417 | resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" 1418 | integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== 1419 | dependencies: 1420 | filename-reserved-regex "^2.0.0" 1421 | strip-outer "^1.0.1" 1422 | trim-repeated "^1.0.0" 1423 | 1424 | fill-range@^7.0.1: 1425 | version "7.0.1" 1426 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1427 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1428 | dependencies: 1429 | to-regex-range "^5.0.1" 1430 | 1431 | find-cache-dir@^3.3.1: 1432 | version "3.3.1" 1433 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" 1434 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== 1435 | dependencies: 1436 | commondir "^1.0.1" 1437 | make-dir "^3.0.2" 1438 | pkg-dir "^4.1.0" 1439 | 1440 | find-up@^4.0.0: 1441 | version "4.1.0" 1442 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1443 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1444 | dependencies: 1445 | locate-path "^5.0.0" 1446 | path-exists "^4.0.0" 1447 | 1448 | fs-extra@^10.0.1: 1449 | version "10.1.0" 1450 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" 1451 | integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== 1452 | dependencies: 1453 | graceful-fs "^4.2.0" 1454 | jsonfile "^6.0.1" 1455 | universalify "^2.0.0" 1456 | 1457 | fs-extra@^8.1.0: 1458 | version "8.1.0" 1459 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" 1460 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 1461 | dependencies: 1462 | graceful-fs "^4.2.0" 1463 | jsonfile "^4.0.0" 1464 | universalify "^0.1.0" 1465 | 1466 | fs.realpath@^1.0.0: 1467 | version "1.0.0" 1468 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1469 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1470 | 1471 | fsevents@~2.3.2: 1472 | version "2.3.2" 1473 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1474 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1475 | 1476 | get-port@^4.2.0: 1477 | version "4.2.0" 1478 | resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" 1479 | integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== 1480 | 1481 | gh-pages@^5.0.0: 1482 | version "5.0.0" 1483 | resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-5.0.0.tgz#e0893272a0e33f0453e53a3c017c33b91ddd6394" 1484 | integrity sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ== 1485 | dependencies: 1486 | async "^3.2.4" 1487 | commander "^2.18.0" 1488 | email-addresses "^5.0.0" 1489 | filenamify "^4.3.0" 1490 | find-cache-dir "^3.3.1" 1491 | fs-extra "^8.1.0" 1492 | globby "^6.1.0" 1493 | 1494 | github-slugger@^2.0.0: 1495 | version "2.0.0" 1496 | resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" 1497 | integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== 1498 | 1499 | glob-parent@^5.1.2, glob-parent@~5.1.2: 1500 | version "5.1.2" 1501 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1502 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1503 | dependencies: 1504 | is-glob "^4.0.1" 1505 | 1506 | glob@^7.0.3: 1507 | version "7.1.6" 1508 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1509 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1510 | dependencies: 1511 | fs.realpath "^1.0.0" 1512 | inflight "^1.0.4" 1513 | inherits "2" 1514 | minimatch "^3.0.4" 1515 | once "^1.3.0" 1516 | path-is-absolute "^1.0.0" 1517 | 1518 | globals@^13.2.0: 1519 | version "13.20.0" 1520 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 1521 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 1522 | dependencies: 1523 | type-fest "^0.20.2" 1524 | 1525 | globby@^11.0.3: 1526 | version "11.1.0" 1527 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1528 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1529 | dependencies: 1530 | array-union "^2.1.0" 1531 | dir-glob "^3.0.1" 1532 | fast-glob "^3.2.9" 1533 | ignore "^5.2.0" 1534 | merge2 "^1.4.1" 1535 | slash "^3.0.0" 1536 | 1537 | globby@^6.1.0: 1538 | version "6.1.0" 1539 | resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" 1540 | integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= 1541 | dependencies: 1542 | array-union "^1.0.1" 1543 | glob "^7.0.3" 1544 | object-assign "^4.0.1" 1545 | pify "^2.0.0" 1546 | pinkie-promise "^2.0.0" 1547 | 1548 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 1549 | version "4.2.4" 1550 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 1551 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 1552 | 1553 | has-flag@^3.0.0: 1554 | version "3.0.0" 1555 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1556 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1557 | 1558 | has-flag@^4.0.0: 1559 | version "4.0.0" 1560 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1561 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1562 | 1563 | highlight.js@^11.8.0: 1564 | version "11.8.0" 1565 | resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.8.0.tgz#966518ea83257bae2e7c9a48596231856555bb65" 1566 | integrity sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg== 1567 | 1568 | htmlnano@^2.0.0: 1569 | version "2.0.4" 1570 | resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.0.4.tgz#315108063ed0bb6a16ccb53ad1b601f02d3fe721" 1571 | integrity sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA== 1572 | dependencies: 1573 | cosmiconfig "^8.0.0" 1574 | posthtml "^0.16.5" 1575 | timsort "^0.3.0" 1576 | 1577 | htmlparser2@^7.1.1: 1578 | version "7.2.0" 1579 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" 1580 | integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== 1581 | dependencies: 1582 | domelementtype "^2.0.1" 1583 | domhandler "^4.2.2" 1584 | domutils "^2.8.0" 1585 | entities "^3.0.1" 1586 | 1587 | htmlparser2@^8.0.1: 1588 | version "8.0.2" 1589 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" 1590 | integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== 1591 | dependencies: 1592 | domelementtype "^2.3.0" 1593 | domhandler "^5.0.3" 1594 | domutils "^3.0.1" 1595 | entities "^4.4.0" 1596 | 1597 | ignore@^5.2.0: 1598 | version "5.2.4" 1599 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1600 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1601 | 1602 | immutable@^4.0.0: 1603 | version "4.3.0" 1604 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" 1605 | integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== 1606 | 1607 | import-fresh@^3.2.1: 1608 | version "3.3.0" 1609 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1610 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1611 | dependencies: 1612 | parent-module "^1.0.0" 1613 | resolve-from "^4.0.0" 1614 | 1615 | inflight@^1.0.4: 1616 | version "1.0.6" 1617 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1618 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1619 | dependencies: 1620 | once "^1.3.0" 1621 | wrappy "1" 1622 | 1623 | inherits@2: 1624 | version "2.0.4" 1625 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1626 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1627 | 1628 | is-arrayish@^0.2.1: 1629 | version "0.2.1" 1630 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1631 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1632 | 1633 | is-binary-path@~2.1.0: 1634 | version "2.1.0" 1635 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1636 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1637 | dependencies: 1638 | binary-extensions "^2.0.0" 1639 | 1640 | is-extglob@^2.1.1: 1641 | version "2.1.1" 1642 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1643 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1644 | 1645 | is-glob@^4.0.1, is-glob@~4.0.1: 1646 | version "4.0.1" 1647 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1648 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1649 | dependencies: 1650 | is-extglob "^2.1.1" 1651 | 1652 | is-glob@^4.0.3: 1653 | version "4.0.3" 1654 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1655 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1656 | dependencies: 1657 | is-extglob "^2.1.1" 1658 | 1659 | is-json@^2.0.1: 1660 | version "2.0.1" 1661 | resolved "https://registry.yarnpkg.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" 1662 | integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== 1663 | 1664 | is-number@^7.0.0: 1665 | version "7.0.0" 1666 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1667 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1668 | 1669 | js-tokens@^4.0.0: 1670 | version "4.0.0" 1671 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1672 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1673 | 1674 | js-yaml@^4.1.0: 1675 | version "4.1.0" 1676 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1677 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1678 | dependencies: 1679 | argparse "^2.0.1" 1680 | 1681 | json-parse-even-better-errors@^2.3.0: 1682 | version "2.3.1" 1683 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1684 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1685 | 1686 | json5@^2.2.0, json5@^2.2.1: 1687 | version "2.2.3" 1688 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1689 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1690 | 1691 | jsonfile@^4.0.0: 1692 | version "4.0.0" 1693 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1694 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 1695 | optionalDependencies: 1696 | graceful-fs "^4.1.6" 1697 | 1698 | jsonfile@^6.0.1: 1699 | version "6.1.0" 1700 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 1701 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1702 | dependencies: 1703 | universalify "^2.0.0" 1704 | optionalDependencies: 1705 | graceful-fs "^4.1.6" 1706 | 1707 | lightningcss-darwin-arm64@1.20.0: 1708 | version "1.20.0" 1709 | resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.20.0.tgz#0416a0cb840944ea4aee972df02491c0168a784c" 1710 | integrity sha512-aYEohJTlzwB8URJaNiS57tMbjyLub0mYvxlxKQk8SZv+irXx6MoBWpDNQKKTS9gg1pGf/eAwjpa3BLAoCBsh1A== 1711 | 1712 | lightningcss-darwin-x64@1.20.0: 1713 | version "1.20.0" 1714 | resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.20.0.tgz#4caa2b38fe223eabb32ebc3e1268a6b09e6b8d06" 1715 | integrity sha512-cmMgY8FFWVaGgtift7eKKkHMqlz9O09/yTdlCXEDOeDP9yeo6vHOBTRP7ojb368kjw8Ew3l0L2uT1Gtx56eNkg== 1716 | 1717 | lightningcss-linux-arm-gnueabihf@1.20.0: 1718 | version "1.20.0" 1719 | resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.20.0.tgz#3e999a07aa77c10a06c9dda9b507c7a737f8521f" 1720 | integrity sha512-/m+NDO1O6JCv7R9F0XWlXcintQHx4MPNU+kt8jZJO07LLdGwCfvjN31GVcwVPlStnnx/cU8uTTmax6g/Qu/whg== 1721 | 1722 | lightningcss-linux-arm64-gnu@1.20.0: 1723 | version "1.20.0" 1724 | resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.20.0.tgz#8b7786936ea462f744a85038fb033cc56049b677" 1725 | integrity sha512-gtXoa6v0HvMRLbev6Hsef0+Q5He7NslB+Rs7G49Y5LUSdJeGIATEN+j8JzHC0DnxCsOGbEgGRmvtJzzYDkkluw== 1726 | 1727 | lightningcss-linux-arm64-musl@1.20.0: 1728 | version "1.20.0" 1729 | resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.20.0.tgz#8d812309c4e70398cee79fcdc452548ca521a6eb" 1730 | integrity sha512-Po7XpucM1kZnkiyd2BNwTExSDcZ8jm8uB9u+Sq44qjpkf5f75jreQwn3DQm9I1t5C6tB9HGt30HExMju9umJBQ== 1731 | 1732 | lightningcss-linux-x64-gnu@1.20.0: 1733 | version "1.20.0" 1734 | resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.20.0.tgz#7652fbb26e50a5fa21b763aaebdb4bc657540c7e" 1735 | integrity sha512-8yR/fGNn/P0I+Lc3PK+VWPET/zdSpBfHFIG0DJ38TywMbItVKvnFvoTBwnIm4LqBz7g2G2dDexnNP95za2Ll8g== 1736 | 1737 | lightningcss-linux-x64-musl@1.20.0: 1738 | version "1.20.0" 1739 | resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.20.0.tgz#aa21957fc51c363b4436e973911d01af4bed3c35" 1740 | integrity sha512-EmpJ+VkPZ8RACiB4m+l8TmapmE1W2UvJKDHE+ML/3Ihr9tRKUs3CibfnQTFZC8aSsrxgXagDAN+PgCDDhIyriA== 1741 | 1742 | lightningcss-win32-x64-msvc@1.20.0: 1743 | version "1.20.0" 1744 | resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.20.0.tgz#dcec3f7e03deda94504c93a9a03aec0484a5d5eb" 1745 | integrity sha512-BRdPvbq7Cc1qxAzp2emqWJHrqsEkf4ggxS29VOnxT7jhkdHKU+a26OVMjvm/OL0NH0ToNOZNAPvHMSexiEgBeA== 1746 | 1747 | lightningcss@^1.16.1: 1748 | version "1.20.0" 1749 | resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.20.0.tgz#efa36a52feae9b0c8537c8e650a7819f549a4a23" 1750 | integrity sha512-4bj8aP+Vi+or8Gwq/hknmicr4PmA8D9uL/3qY0N0daX5vYBMYERGI6Y93nzoeRgQMULq+gtrN/FvJYtH0xNN8g== 1751 | dependencies: 1752 | detect-libc "^1.0.3" 1753 | optionalDependencies: 1754 | lightningcss-darwin-arm64 "1.20.0" 1755 | lightningcss-darwin-x64 "1.20.0" 1756 | lightningcss-linux-arm-gnueabihf "1.20.0" 1757 | lightningcss-linux-arm64-gnu "1.20.0" 1758 | lightningcss-linux-arm64-musl "1.20.0" 1759 | lightningcss-linux-x64-gnu "1.20.0" 1760 | lightningcss-linux-x64-musl "1.20.0" 1761 | lightningcss-win32-x64-msvc "1.20.0" 1762 | 1763 | lines-and-columns@^1.1.6: 1764 | version "1.1.6" 1765 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 1766 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 1767 | 1768 | lmdb@2.7.11: 1769 | version "2.7.11" 1770 | resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-2.7.11.tgz#a24b6d36b5c7ed9889cc2d9e103fdd3f5e144d7e" 1771 | integrity sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw== 1772 | dependencies: 1773 | msgpackr "1.8.5" 1774 | node-addon-api "^4.3.0" 1775 | node-gyp-build-optional-packages "5.0.6" 1776 | ordered-binary "^1.4.0" 1777 | weak-lru-cache "^1.2.2" 1778 | optionalDependencies: 1779 | "@lmdb/lmdb-darwin-arm64" "2.7.11" 1780 | "@lmdb/lmdb-darwin-x64" "2.7.11" 1781 | "@lmdb/lmdb-linux-arm" "2.7.11" 1782 | "@lmdb/lmdb-linux-arm64" "2.7.11" 1783 | "@lmdb/lmdb-linux-x64" "2.7.11" 1784 | "@lmdb/lmdb-win32-x64" "2.7.11" 1785 | 1786 | locate-path@^5.0.0: 1787 | version "5.0.0" 1788 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1789 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1790 | dependencies: 1791 | p-locate "^4.1.0" 1792 | 1793 | make-dir@^3.0.2: 1794 | version "3.1.0" 1795 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1796 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1797 | dependencies: 1798 | semver "^6.0.0" 1799 | 1800 | marked-gfm-heading-id@^3.0.3: 1801 | version "3.0.3" 1802 | resolved "https://registry.yarnpkg.com/marked-gfm-heading-id/-/marked-gfm-heading-id-3.0.3.tgz#dbcf18066ae880600575801d6efc90f0c315c116" 1803 | integrity sha512-ouAOxtHYa34yFocjCk5xIIcEjg40YXNdpkfLqH6TGbkmXPMPxApWXLdOi0Z1AXUweMQC9bWt2e8MGrIYB2f6+w== 1804 | dependencies: 1805 | github-slugger "^2.0.0" 1806 | 1807 | marked-highlight@^2.0.1: 1808 | version "2.0.1" 1809 | resolved "https://registry.yarnpkg.com/marked-highlight/-/marked-highlight-2.0.1.tgz#a2b48533df77ea73bec3895be98bae6160dceec3" 1810 | integrity sha512-LDUfR/zDvD+dJ+lQOWHkxvBLNxiXcaN8pBtwJ/i4pI0bkDC/Ef6Mz1qUrAuHXfnpdr2rabdMpVFhqFuU+5Mskg== 1811 | 1812 | marked-mangle@^1.0.1: 1813 | version "1.0.1" 1814 | resolved "https://registry.yarnpkg.com/marked-mangle/-/marked-mangle-1.0.1.tgz#022486251cde50a08a23b9675b3a7096266d7c3f" 1815 | integrity sha512-ZmWErsTkfE78OFgrpry2XGh+lYNRePfGy7bGh20l4rWHsH+bciKth1IHQXO9B6Ov5dHmY0jAswvgDxtcxGcFQQ== 1816 | 1817 | marked@^5.0.3: 1818 | version "5.0.3" 1819 | resolved "https://registry.yarnpkg.com/marked/-/marked-5.0.3.tgz#a8d0d457d7bce3606db3e32bb0797490cec2fa19" 1820 | integrity sha512-KUONa43Uk74uUNWMxh6lfaNYmSAsRMiDAaX8QBCCRVXzEufR0zX6T33vrGbvTnQLL02ungDM3KSzZtO+chJaHg== 1821 | 1822 | mdn-data@2.0.14: 1823 | version "2.0.14" 1824 | resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" 1825 | integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== 1826 | 1827 | merge2@^1.3.0, merge2@^1.4.1: 1828 | version "1.4.1" 1829 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1830 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1831 | 1832 | micromatch@^4.0.4, micromatch@^4.0.5: 1833 | version "4.0.5" 1834 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1835 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1836 | dependencies: 1837 | braces "^3.0.2" 1838 | picomatch "^2.3.1" 1839 | 1840 | minimatch@^3.0.4: 1841 | version "3.0.4" 1842 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1843 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1844 | dependencies: 1845 | brace-expansion "^1.1.7" 1846 | 1847 | msgpackr-extract@^3.0.1, msgpackr-extract@^3.0.2: 1848 | version "3.0.2" 1849 | resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz#e05ec1bb4453ddf020551bcd5daaf0092a2c279d" 1850 | integrity sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A== 1851 | dependencies: 1852 | node-gyp-build-optional-packages "5.0.7" 1853 | optionalDependencies: 1854 | "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.2" 1855 | "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.2" 1856 | "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.2" 1857 | "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.2" 1858 | "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.2" 1859 | "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" 1860 | 1861 | msgpackr@1.8.5: 1862 | version "1.8.5" 1863 | resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.8.5.tgz#8cadfb935357680648f33699d0e833c9179dbfeb" 1864 | integrity sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg== 1865 | optionalDependencies: 1866 | msgpackr-extract "^3.0.1" 1867 | 1868 | msgpackr@^1.5.4: 1869 | version "1.9.2" 1870 | resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.9.2.tgz#cd301f85de948111eb34553bfb402f21650f368d" 1871 | integrity sha512-xtDgI3Xv0AAiZWLRGDchyzBwU6aq0rwJ+W+5Y4CZhEWtkl/hJtFFLc+3JtGTw7nz1yquxs7nL8q/yA2aqpflIQ== 1872 | optionalDependencies: 1873 | msgpackr-extract "^3.0.2" 1874 | 1875 | node-addon-api@^3.2.1: 1876 | version "3.2.1" 1877 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" 1878 | integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== 1879 | 1880 | node-addon-api@^4.3.0: 1881 | version "4.3.0" 1882 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" 1883 | integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== 1884 | 1885 | node-gyp-build-optional-packages@5.0.6: 1886 | version "5.0.6" 1887 | resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz#2949f5cc7dace3ac470fa2ff1a37456907120a1d" 1888 | integrity sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw== 1889 | 1890 | node-gyp-build-optional-packages@5.0.7: 1891 | version "5.0.7" 1892 | resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" 1893 | integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== 1894 | 1895 | node-gyp-build@^4.3.0: 1896 | version "4.6.0" 1897 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" 1898 | integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== 1899 | 1900 | node-releases@^2.0.12: 1901 | version "2.0.12" 1902 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" 1903 | integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== 1904 | 1905 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1906 | version "3.0.0" 1907 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1908 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1909 | 1910 | nth-check@^2.0.1: 1911 | version "2.1.1" 1912 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 1913 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 1914 | dependencies: 1915 | boolbase "^1.0.0" 1916 | 1917 | nullthrows@^1.1.1: 1918 | version "1.1.1" 1919 | resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" 1920 | integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== 1921 | 1922 | object-assign@^4.0.1: 1923 | version "4.1.1" 1924 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1925 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1926 | 1927 | once@^1.3.0: 1928 | version "1.4.0" 1929 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1930 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1931 | dependencies: 1932 | wrappy "1" 1933 | 1934 | ordered-binary@^1.4.0: 1935 | version "1.4.0" 1936 | resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.4.0.tgz#6bb53d44925f3b8afc33d1eed0fa15693b211389" 1937 | integrity sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ== 1938 | 1939 | p-limit@^2.2.0: 1940 | version "2.3.0" 1941 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1942 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1943 | dependencies: 1944 | p-try "^2.0.0" 1945 | 1946 | p-locate@^4.1.0: 1947 | version "4.1.0" 1948 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1949 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1950 | dependencies: 1951 | p-limit "^2.2.0" 1952 | 1953 | p-try@^2.0.0: 1954 | version "2.2.0" 1955 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1956 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1957 | 1958 | parcel@^2.9.1: 1959 | version "2.9.1" 1960 | resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.9.1.tgz#aac949aa5533ce4e8c209e9a69afc0256fb1dc6b" 1961 | integrity sha512-LBD+jeCpvnDJ8MeE0ciEns4EZw+WH01qLEKT2O1tW2uHM1njhcWvuc9bx19f8iyE2+8Xwwr2GsGTQgPXKiA/yQ== 1962 | dependencies: 1963 | "@parcel/config-default" "2.9.1" 1964 | "@parcel/core" "2.9.1" 1965 | "@parcel/diagnostic" "2.9.1" 1966 | "@parcel/events" "2.9.1" 1967 | "@parcel/fs" "2.9.1" 1968 | "@parcel/logger" "2.9.1" 1969 | "@parcel/package-manager" "2.9.1" 1970 | "@parcel/reporter-cli" "2.9.1" 1971 | "@parcel/reporter-dev-server" "2.9.1" 1972 | "@parcel/reporter-tracer" "2.9.1" 1973 | "@parcel/utils" "2.9.1" 1974 | chalk "^4.1.0" 1975 | commander "^7.0.0" 1976 | get-port "^4.2.0" 1977 | 1978 | parent-module@^1.0.0: 1979 | version "1.0.1" 1980 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1981 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1982 | dependencies: 1983 | callsites "^3.0.0" 1984 | 1985 | parse-json@^5.0.0: 1986 | version "5.1.0" 1987 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" 1988 | integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== 1989 | dependencies: 1990 | "@babel/code-frame" "^7.0.0" 1991 | error-ex "^1.3.1" 1992 | json-parse-even-better-errors "^2.3.0" 1993 | lines-and-columns "^1.1.6" 1994 | 1995 | parse5-htmlparser2-tree-adapter@^7.0.0: 1996 | version "7.0.0" 1997 | resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" 1998 | integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== 1999 | dependencies: 2000 | domhandler "^5.0.2" 2001 | parse5 "^7.0.0" 2002 | 2003 | parse5@^7.0.0: 2004 | version "7.1.2" 2005 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" 2006 | integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== 2007 | dependencies: 2008 | entities "^4.4.0" 2009 | 2010 | path-exists@^4.0.0: 2011 | version "4.0.0" 2012 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2013 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2014 | 2015 | path-is-absolute@^1.0.0: 2016 | version "1.0.1" 2017 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2018 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2019 | 2020 | path-type@^4.0.0: 2021 | version "4.0.0" 2022 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 2023 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2024 | 2025 | picocolors@^1.0.0: 2026 | version "1.0.0" 2027 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2028 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2029 | 2030 | picomatch@^2.0.4, picomatch@^2.2.1: 2031 | version "2.2.2" 2032 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 2033 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 2034 | 2035 | picomatch@^2.3.1: 2036 | version "2.3.1" 2037 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2038 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2039 | 2040 | pify@^2.0.0: 2041 | version "2.3.0" 2042 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2043 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 2044 | 2045 | pinkie-promise@^2.0.0: 2046 | version "2.0.1" 2047 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 2048 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 2049 | dependencies: 2050 | pinkie "^2.0.0" 2051 | 2052 | pinkie@^2.0.0: 2053 | version "2.0.4" 2054 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 2055 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 2056 | 2057 | pkg-dir@^4.1.0: 2058 | version "4.2.0" 2059 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2060 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2061 | dependencies: 2062 | find-up "^4.0.0" 2063 | 2064 | postcss-value-parser@^4.2.0: 2065 | version "4.2.0" 2066 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" 2067 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 2068 | 2069 | posthtml-parser@^0.10.1: 2070 | version "0.10.2" 2071 | resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.10.2.tgz#df364d7b179f2a6bf0466b56be7b98fd4e97c573" 2072 | integrity sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg== 2073 | dependencies: 2074 | htmlparser2 "^7.1.1" 2075 | 2076 | posthtml-parser@^0.11.0: 2077 | version "0.11.0" 2078 | resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz#25d1c7bf811ea83559bc4c21c189a29747a24b7a" 2079 | integrity sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw== 2080 | dependencies: 2081 | htmlparser2 "^7.1.1" 2082 | 2083 | posthtml-render@^3.0.0: 2084 | version "3.0.0" 2085 | resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-3.0.0.tgz#97be44931496f495b4f07b99e903cc70ad6a3205" 2086 | integrity sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA== 2087 | dependencies: 2088 | is-json "^2.0.1" 2089 | 2090 | posthtml@^0.16.4, posthtml@^0.16.5: 2091 | version "0.16.6" 2092 | resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.6.tgz#e2fc407f67a64d2fa3567afe770409ffdadafe59" 2093 | integrity sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ== 2094 | dependencies: 2095 | posthtml-parser "^0.11.0" 2096 | posthtml-render "^3.0.0" 2097 | 2098 | prettier@^2.8.8: 2099 | version "2.8.8" 2100 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 2101 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 2102 | 2103 | queue-microtask@^1.2.2: 2104 | version "1.2.3" 2105 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 2106 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2107 | 2108 | react-error-overlay@6.0.9: 2109 | version "6.0.9" 2110 | resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" 2111 | integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== 2112 | 2113 | react-refresh@^0.9.0: 2114 | version "0.9.0" 2115 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" 2116 | integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== 2117 | 2118 | readdirp@~3.6.0: 2119 | version "3.6.0" 2120 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 2121 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 2122 | dependencies: 2123 | picomatch "^2.2.1" 2124 | 2125 | regenerator-runtime@^0.13.7: 2126 | version "0.13.11" 2127 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 2128 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 2129 | 2130 | resolve-from@^4.0.0: 2131 | version "4.0.0" 2132 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2133 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2134 | 2135 | reusify@^1.0.4: 2136 | version "1.0.4" 2137 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2138 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2139 | 2140 | run-parallel@^1.1.9: 2141 | version "1.2.0" 2142 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2143 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2144 | dependencies: 2145 | queue-microtask "^1.2.2" 2146 | 2147 | safe-buffer@^5.0.1: 2148 | version "5.2.1" 2149 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2150 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2151 | 2152 | sass@^1.38.0, sass@^1.62.1: 2153 | version "1.62.1" 2154 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.62.1.tgz#caa8d6bf098935bc92fc73fa169fb3790cacd029" 2155 | integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A== 2156 | dependencies: 2157 | chokidar ">=3.0.0 <4.0.0" 2158 | immutable "^4.0.0" 2159 | source-map-js ">=0.6.2 <2.0.0" 2160 | 2161 | semver@^5.7.0, semver@^5.7.1: 2162 | version "5.7.1" 2163 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2164 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2165 | 2166 | semver@^6.0.0: 2167 | version "6.3.0" 2168 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2169 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2170 | 2171 | slash@^3.0.0: 2172 | version "3.0.0" 2173 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2174 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2175 | 2176 | "source-map-js@>=0.6.2 <2.0.0": 2177 | version "1.0.2" 2178 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 2179 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 2180 | 2181 | source-map@^0.6.1: 2182 | version "0.6.1" 2183 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2184 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2185 | 2186 | srcset@4: 2187 | version "4.0.0" 2188 | resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" 2189 | integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== 2190 | 2191 | stable@^0.1.8: 2192 | version "0.1.8" 2193 | resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" 2194 | integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== 2195 | 2196 | strip-outer@^1.0.1: 2197 | version "1.0.1" 2198 | resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" 2199 | integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== 2200 | dependencies: 2201 | escape-string-regexp "^1.0.2" 2202 | 2203 | supports-color@^5.3.0: 2204 | version "5.5.0" 2205 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2206 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2207 | dependencies: 2208 | has-flag "^3.0.0" 2209 | 2210 | supports-color@^7.1.0: 2211 | version "7.2.0" 2212 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2213 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2214 | dependencies: 2215 | has-flag "^4.0.0" 2216 | 2217 | svgo@^2.4.0: 2218 | version "2.8.0" 2219 | resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" 2220 | integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== 2221 | dependencies: 2222 | "@trysound/sax" "0.2.0" 2223 | commander "^7.2.0" 2224 | css-select "^4.1.3" 2225 | css-tree "^1.1.3" 2226 | csso "^4.2.0" 2227 | picocolors "^1.0.0" 2228 | stable "^0.1.8" 2229 | 2230 | term-size@^2.2.1: 2231 | version "2.2.1" 2232 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 2233 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 2234 | 2235 | timsort@^0.3.0: 2236 | version "0.3.0" 2237 | resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" 2238 | integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= 2239 | 2240 | to-regex-range@^5.0.1: 2241 | version "5.0.1" 2242 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2243 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2244 | dependencies: 2245 | is-number "^7.0.0" 2246 | 2247 | trim-repeated@^1.0.0: 2248 | version "1.0.0" 2249 | resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" 2250 | integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= 2251 | dependencies: 2252 | escape-string-regexp "^1.0.2" 2253 | 2254 | tslib@^2.4.0: 2255 | version "2.5.2" 2256 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" 2257 | integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== 2258 | 2259 | type-fest@^0.20.2: 2260 | version "0.20.2" 2261 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2262 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2263 | 2264 | typescript@^5.0.4: 2265 | version "5.0.4" 2266 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" 2267 | integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== 2268 | 2269 | universalify@^0.1.0: 2270 | version "0.1.2" 2271 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 2272 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 2273 | 2274 | universalify@^2.0.0: 2275 | version "2.0.0" 2276 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 2277 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 2278 | 2279 | update-browserslist-db@^1.0.11: 2280 | version "1.0.11" 2281 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" 2282 | integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== 2283 | dependencies: 2284 | escalade "^3.1.1" 2285 | picocolors "^1.0.0" 2286 | 2287 | utility-types@^3.10.0: 2288 | version "3.10.0" 2289 | resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" 2290 | integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== 2291 | 2292 | weak-lru-cache@^1.2.2: 2293 | version "1.2.2" 2294 | resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" 2295 | integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== 2296 | 2297 | wrappy@1: 2298 | version "1.0.2" 2299 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2300 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2301 | 2302 | xxhash-wasm@^0.4.2: 2303 | version "0.4.2" 2304 | resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz#752398c131a4dd407b5132ba62ad372029be6f79" 2305 | integrity sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA== 2306 | --------------------------------------------------------------------------------