├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .prettierrc.js ├── LICENSE ├── README.md ├── biome.json ├── index.d.ts ├── index.js ├── package-lock.json ├── package.json ├── tests ├── base.specs.tsx ├── button.ref.specs.tsx ├── complex.ref.specs.tsx ├── components │ ├── base.tsx │ ├── button.ref.tsx │ ├── complex.ref.tsx │ ├── exotic.memo.tsx │ ├── exotic.ref.tsx │ ├── exotic.tsx │ ├── functional.tsx │ ├── memo.tsx │ ├── ref-react-19.tsx │ └── ref.tsx ├── exotic.memo.specs.tsx ├── exotic.ref.specs.tsx ├── exotic.specs.tsx ├── functional.specs.tsx ├── memo.specs.tsx └── ref.specs.tsx └── tsconfig.json /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [18.x, 20.x, 22.x] 16 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 17 | 18 | steps: 19 | - uses: actions/checkout@v3 20 | - name: Use Node.js ${{ matrix.node-version }} 21 | uses: actions/setup-node@v3 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | - run: npm ci 25 | - run: npm test 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Editor files 123 | .vscode-test 124 | .idea 125 | 126 | # yarn v2 127 | .yarn/cache 128 | .yarn/unplugged 129 | .yarn/build-state.yml 130 | .yarn/install-state.gz 131 | .pnp.* 132 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | import { prettier } from '@axa-ch/easy-config'; 2 | 3 | export default prettier.base; 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 AXA Switzerland (Open Source) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-polymorphic-types 2 | 3 | [![Build Status][ci-image]][ci-url] 4 | [![MIT License][license-image]][license-url] 5 | [![NPM version][npm-version-image]][npm-url] 6 | [![NPM downloads][npm-downloads-image]][npm-url] 7 | 8 | ## About 9 | 10 | **react-polymorphic-types** is a library that enables the creation of zero-runtime polymorphic component definitions in React. 11 | 12 | ## Explanation 13 | 14 | ### What is a React polymorphic component? 15 | 16 | When building design systems or reusable UI components in React, you may come across the need for **polymorphic components**. A polymorphic component is a versatile component that can render different underlying HTML elements or custom components based on a prop. 17 | 18 | A React polymorphic component provides flexibility to the consumer, allowing them to specify the desired element or component type to be rendered using a prop. 19 | 20 | For example, let's consider a polymorphic heading component: 21 | 22 | ```tsx 23 | import { createElement, ElementType, PropsWithChildren, ComponentProps } from 'react'; 24 | 25 | // Define the props for the polymorphic heading component 26 | type HeadingProps = PropsWithChildren< 27 | { 28 | as?: T; 29 | } & ComponentProps 30 | >; 31 | 32 | // Define the polymorphic heading component 33 | export const Heading = ({ as = 'h1', children, ...rest }: HeadingProps) => 34 | createElement(as, rest, children); 35 | ``` 36 | 37 | In the above example, the `Heading` component can render different heading levels (`h1`, `h2`, `h3`, etc.) based on the `as` prop. By default, it renders as an `h1` element. 38 | 39 | You can use the `Heading` component in your application like this: 40 | 41 | ```tsx 42 | const App = () => ( 43 |
44 | My Main Headline 45 | A Subtitle 46 |

A description

47 |
48 | ); 49 | ``` 50 | 51 | In this case, the same `Heading` component is used to render two different semantic tags, `h1` and `h2`, allowing you to control the heading level and maintain consistency across your application. 52 | 53 | Polymorphic components provide an elegant solution for building flexible and reusable UI components in React, enabling you to create a cohesive design system with consistent semantics. 54 | 55 | ### What problems does this package solve? 56 | 57 | The use of the `as` attribute can become complex when adding constraints to your rendered markup or when using third-party components. Declaring polymorphic types for each component can also be a tedious task that you may want to abstract. 58 | 59 | With `@axa-ch/react-polymorphic-types`, you can easily add constraints to your polymorphic React components and avoid redundant type definitions. 60 | 61 | ## Installation and Usage 62 | 63 | Install the TypeScript types via npm: 64 | 65 | ```shell 66 | npm i @axa-ch/react-polymorphic-types -D 67 | ``` 68 | 69 | ### Polymorphic Components Recipes 70 | 71 | The following recipes provide a starting point for creating polymorphic components. You can copy and modify them according to your requirements. 72 | 73 |
74 | Basic Example 75 | 76 | This example showcases a simple polymorphic heading element. It allows you to independently define its size and markup using props. 77 | 78 | ```tsx 79 | import { ComponentPropsWithoutRef, createElement, ElementType } from 'react'; 80 | import { PolymorphicProps } from '@axa-ch/react-polymorphic-types'; 81 | 82 | // Default HTML element if the "as" prop is not provided 83 | export const HeadingDefaultElement: ElementType = 'h1'; 84 | // List of allowed HTML elements that can be passed via the "as" prop 85 | export type HeadingAllowedElements = typeof HeadingDefaultElement | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; 86 | export type HeadingSizes = 1 | 2 | 3 | 4 | 5 | 6; 87 | 88 | // Component-specific props 89 | export type HeadingOwnProps = ComponentPropsWithoutRef & { 90 | size?: HeadingSizes; 91 | }; 92 | 93 | // Extend own props with others inherited from the underlying element type 94 | // Own props take precedence over the inherited ones 95 | export type HeadingProps = PolymorphicProps< 96 | HeadingOwnProps, 97 | T, 98 | HeadingAllowedElements 99 | >; 100 | 101 | export const Heading = ({ 102 | as = HeadingDefaultElement, 103 | size, 104 | className, 105 | children, 106 | ...rest 107 | }: HeadingProps) => 108 | createElement( 109 | as, 110 | { 111 | ...rest, 112 | className: `${className} size-${size || 1}`, 113 | }, 114 | children, 115 | ); 116 | ``` 117 | 118 | You can use the `Heading` component in your application as shown below: 119 | 120 | ```tsx 121 | const App = () => ( 122 |
123 | 127 | My Main Headline 128 | 129 | 133 | A Subtitle 134 | 135 | 136 | {/* The following component will throw a TypeScript error because 'div' elements are not allowed here */} 137 | 141 | A Subtitle 142 | 143 |

A description

144 |
145 | ); 146 | ``` 147 | 148 |
149 | 150 |
151 | Basic Example with Ref 152 | 153 | This example is similar to the previous one, but it also allows the use of React refs. 154 | 155 | ```tsx 156 | import { ComponentPropsWithoutRef, createElement, ElementType, forwardRef } from 'react'; 157 | import { PolymorphicProps, PolymorphicForwardedRef } from '@axa-ch/react-polymorphic-types'; 158 | 159 | // Default HTML element if the "as" prop is not provided 160 | export const HeadingDefaultElement: ElementType = 'h1'; 161 | // List of allowed HTML elements that can be passed via the "as" prop 162 | export type HeadingAllowedElements = typeof HeadingDefaultElement | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; 163 | export type HeadingSizes = 1 | 2 | 3 | 4 | 5 | 6; 164 | 165 | // Component-specific props 166 | export type HeadingOwnProps = ComponentPropsWithoutRef & { 167 | size?: HeadingSizes; 168 | }; 169 | 170 | // Extend own props with others inherited from the underlying element type 171 | // Own props take precedence over the inherited ones 172 | export type HeadingProps = PolymorphicProps< 173 | HeadingOwnProps, 174 | T, 175 | HeadingAllowedElements 176 | >; 177 | 178 | const HeadingInner = ( 179 | { 180 | as = HeadingDefaultElement, 181 | size, 182 | className, 183 | children, 184 | ...rest 185 | }: PolymorphicProps, T, HeadingAllowedElements>, 186 | // notice the use of the PolymorphicForwardedRef type here 187 | ref: PolymorphicForwardedRef, 188 | ) => 189 | createElement( 190 | element, 191 | { 192 | ...rest, 193 | ref, 194 | className: `${className} size-${size || 1}`, 195 | }, 196 | children, 197 | ); 198 | 199 | // Forward refs with generics is tricky 200 | // see also https://fettblog.eu/typescript-react-generic-forward-refs/ 201 | export const Heading = forwardRef(HeadingInner) as unknown as < 202 | T extends HeadingAllowedElements, 203 | >( 204 | props: HeadingProps & { ref?: PolymorphicForwardedRef }, 205 | ) => ReturnType; 206 | ``` 207 | 208 | Using the `@axa-ch/react-polymorphic-types` types will allow you to automatically infer the proper ref DOM node. 209 | 210 | ```tsx 211 | const App = () => { 212 | // The use of HTMLHeadingElement type is safe 213 | const ref = useRef(null); 214 | 215 | return ( 216 | 220 | ); 221 | }; 222 | ``` 223 | 224 |
225 |
226 | React 19 Example with Ref 227 | 228 | This example is similar to the previous one, but with React 19 the [refs forwarding got much easier](https://react.dev/blog/2024/12/05/react-19#ref-as-a-prop) 229 | 230 | ```tsx 231 | import { ComponentPropsWithoutRef, createElement, ElementType, forwardRef } from 'react'; 232 | import { PolymorphicProps, PolymorphicForwardedRef } from '@axa-ch/react-polymorphic-types'; 233 | 234 | // Default HTML element if the "as" prop is not provided 235 | export const HeadingDefaultElement: ElementType = 'h1'; 236 | // List of allowed HTML elements that can be passed via the "as" prop 237 | export type HeadingAllowedElements = typeof HeadingDefaultElement | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; 238 | export type HeadingSizes = 1 | 2 | 3 | 4 | 5 | 6; 239 | 240 | // Component-specific props 241 | export type HeadingOwnProps = ComponentPropsWithoutRef & { 242 | size?: HeadingSizes; 243 | ref?: PolymorphicForwardedRef; 244 | }; 245 | 246 | // Extend own props with others inherited from the underlying element type 247 | // Own props take precedence over the inherited ones 248 | export type HeadingProps = PolymorphicProps< 249 | HeadingOwnProps, 250 | T, 251 | HeadingAllowedElements 252 | >; 253 | 254 | const Heading = ({ 255 | as = HeadingDefaultElement, 256 | size, 257 | className, 258 | ref, 259 | children, 260 | ...rest 261 | }: PolymorphicProps, T, HeadingAllowedElements>) => 262 | createElement( 263 | element, 264 | { 265 | ...rest, 266 | ref, 267 | className: `${className} size-${size || 1}`, 268 | }, 269 | children, 270 | ); 271 | ``` 272 | 273 | Using the `@axa-ch/react-polymorphic-types` types will allow you to automatically infer the proper ref DOM node. 274 | 275 | ```tsx 276 | const App = () => { 277 | // The use of HTMLHeadingElement type is safe 278 | const ref = useRef(null); 279 | 280 | return ( 281 | 285 | ); 286 | }; 287 | ``` 288 | 289 |
290 | 291 |
292 | Basic Example with Memo 293 | 294 | This example shows the use of React.memo with a polymorphic component. 295 | 296 | ```tsx 297 | import { ComponentPropsWithoutRef, createElement, ElementType, memo } from 'react'; 298 | import { PolymorphicProps } from '@axa-ch/react-polymorphic-types'; 299 | 300 | // Default HTML element if the "as" prop is not provided 301 | export const HeadingDefaultElement: ElementType = 'h1'; 302 | // List of allowed HTML elements that can be passed via the "as" prop 303 | export type HeadingAllowedElements = typeof HeadingDefaultElement | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; 304 | export type HeadingSizes = 1 | 2 | 3 | 4 | 5 | 6; 305 | 306 | // Component-specific props 307 | export type HeadingOwnProps = ComponentPropsWithoutRef & { 308 | size?: HeadingSizes; 309 | }; 310 | 311 | // Extend own props with others inherited from the underlying element type 312 | // Own props take precedence over the inherited ones 313 | export type HeadingProps = PolymorphicProps< 314 | HeadingOwnProps, 315 | T, 316 | HeadingAllowedElements 317 | >; 318 | 319 | const HeadingInner = ({ 320 | as = HeadingDefaultElement, 321 | size, 322 | className, 323 | children, 324 | ...rest 325 | }: PolymorphicProps, T, HeadingAllowedElements>) => 326 | createElement( 327 | element, 328 | { 329 | ...rest, 330 | className: `${className} size-${size || 1}`, 331 | }, 332 | children, 333 | ); 334 | 335 | // Memo with generics is tricky 336 | // see also https://fettblog.eu/typescript-react-generic-forward-refs/ 337 | export const Heading = memo(HeadingInner) as ( 338 | props: HeadingProps, 339 | ) => ReturnType; 340 | ``` 341 | 342 | The above component can be consumed without any additional overhead as follows: 343 | 344 | ```tsx 345 | const App = () => ( 346 | <> 347 | 348 | 349 | ); 350 | ``` 351 | 352 |
353 | 354 |
355 | Exotic Component Example 356 | 357 | Polymorphic exotic components allow you to use either DOM nodes or custom rendering functions for your HTML. 358 | 359 | ```tsx 360 | import { ComponentPropsWithoutRef, createElement, ElementType, ExoticComponent } from 'react'; 361 | import { PolymorphicExoticProps, PolymorphicProps } from '@axa-ch/react-polymorphic-types'; 362 | 363 | // Default HTML element if the "as" prop is not provided 364 | export const ContainerDefaultElement: ElementType = 'div'; 365 | // List of allowed HTML elements that can be passed via the "as" prop 366 | export type ContainerAllowedDOMElements = typeof ContainerDefaultElement | 'article' | 'section'; 367 | export type ContainerAllowedElements = ContainerAllowedDOMElements | ExoticComponent; 368 | 369 | // Component-specific props 370 | export type ContainerOwnProps = ComponentPropsWithoutRef; 371 | 372 | // Extend own props with others inherited from the underlying element type 373 | // Own props take precedence over the inherited ones 374 | export type ContainerProps = T extends ContainerAllowedDOMElements 375 | ? PolymorphicProps, T, ContainerAllowedDOMElements> 376 | : PolymorphicExoticProps, T, ContainerAllowedDOMElements>; 377 | 378 | export const Container = ({ 379 | as = ContainerDefaultElement, 380 | className, 381 | children, 382 | ...rest 383 | }: ContainerProps) => 384 | createElement( 385 | element, 386 | { 387 | ...rest, 388 | className, 389 | }, 390 | children, 391 | ); 392 | ``` 393 | 394 | The above component works with straight HTML nodes or with external exotic components like, for example, the ones provided by [framer-motion](https://www.framer.com/motion/). 395 | 396 | ```tsx 397 | import { motion } from 'framer-motion'; 398 | 399 | const App = () => ( 400 | <> 401 | 402 | {/* Notice that the exotic props here will be automatically inferred */} 403 | 407 | 408 | ); 409 | ``` 410 | 411 |
412 | 413 |
414 | Exotic Component Example with Ref 415 | 416 | Polymorphic exotic components that use refs are slightly more complex and require some additional code to work properly. 417 | 418 | ```tsx 419 | import { ComponentPropsWithoutRef, createElement, ElementType, ExoticComponent, forwardRef } from 'react'; 420 | import { PolymorphicProps, PolymorphicForwardedRef, PolymorphicExoticProps } from '@axa-ch/react-polymorphic-types'; 421 | 422 | // Default HTML element if the "as" prop is not provided 423 | export const ContainerDefaultElement: ElementType = 'div'; 424 | // List of allowed HTML elements that can be passed via the "as" prop 425 | export type ContainerAllowedDOMElements = 'div' | 'article' | 'section'; 426 | export type ContainerAllowedElements = ContainerAllowedDOMElements | ExoticComponent; 427 | 428 | // Component-specific props 429 | export type ContainerOwnProps = ComponentPropsWithoutRef; 430 | 431 | // Extend own props with others inherited from the underlying element type 432 | // Own props take precedence over the inherited ones 433 | export type ContainerProps = T extends ContainerAllowedDOMElements 434 | ? PolymorphicProps, T, ContainerAllowedDOMElements> 435 | : PolymorphicExoticProps, T, ContainerAllowedDOMElements>; 436 | 437 | // Forwarded ref component 438 | const ContainerInner = ( 439 | { as = ContainerDefaultElement, className, children, ...rest }: ContainerProps, 440 | ref: PolymorphicForwardedRef, 441 | ) => 442 | createElement( 443 | element, 444 | { 445 | ...rest, 446 | ref, 447 | className, 448 | }, 449 | children, 450 | ); 451 | 452 | // Forward refs with generics is tricky 453 | // see also https://fettblog.eu/typescript-react-generic-forward-refs/ 454 | export const Container = forwardRef(ContainerInner) as ( 455 | props: ContainerProps & { ref?: PolymorphicForwardedRef }, 456 | ) => ReturnType; 457 | ``` 458 | 459 | With the above example, DOM nodes will be automatically inferred, including when using third-party exotic rendering functions. 460 | 461 | ```tsx 462 | import { motion } from 'framer-motion'; 463 | 464 | const App = () => { 465 | const div = useRef(null); 466 | // Article and other HTML5 tags are just of type HTMLElement 467 | const article = useRef(null); 468 | 469 | return ( 470 | <> 471 | 475 | 480 | 481 | ); 482 | }; 483 | ``` 484 | 485 |
486 | 487 |
488 | Complex Exotic/Functional Component Example 489 | 490 | This example combines multiple rendering strategies for your component to allow maximum flexibility for its consumers. 491 | 492 | ```tsx 493 | // We need to infer the functional component properties so 'any' is used in this case 494 | // You can also add strict types for your functional components, but it will reduce flexibility 495 | import { ComponentPropsWithoutRef, createElement, ElementType, ExoticComponent, FC } from 'react'; 496 | import { PolymorphicFunctionalProps, PolymorphicExoticProps, PolymorphicProps } from '@axa-ch/react-polymorphic-types'; 497 | 498 | // Default HTML element if the "as" prop is not provided 499 | export const ContainerDefaultElement: ElementType = 'div'; 500 | // List of allowed HTML elements that can be passed via the "as" prop 501 | export type ContainerAllowedDOMElements = 'div' | 'article' | 'section'; 502 | export type ContainerAllowedElements = ContainerAllowedDOMElements | ExoticComponent | FC; 503 | 504 | // Component-specific props 505 | export type ContainerOwnProps = ComponentPropsWithoutRef; 506 | 507 | // Extend own props with others inherited from the underlying element type 508 | // Own props take precedence over the inherited ones 509 | export type ContainerProps = T extends ContainerAllowedDOMElements 510 | ? PolymorphicProps, T, ContainerAllowedDOMElements> 511 | : T extends FC 512 | ? PolymorphicFunctionalProps, T, ContainerAllowedDOMElements> 513 | : PolymorphicExoticProps, T, ContainerAllowedDOMElements>; 514 | 515 | export const Container = ({ 516 | as = ContainerDefaultElement, 517 | className, 518 | children, 519 | ...rest 520 | }: ContainerProps) => 521 | createElement( 522 | as, 523 | { 524 | ...rest, 525 | className, 526 | }, 527 | children, 528 | ); 529 | ``` 530 | 531 | Let's see how we can use the above component with all its possible rendering options: 532 | 533 | ```tsx 534 | import { motion } from 'framer-motion'; 535 | 536 | type FooProps = ComponentPropsWithoutRef<'div'> & { size: 'small' | 'large'; name: string }; 537 | 538 | const Foo: FC = ({ className, size = 'large', ...rest }) => ( 539 |
543 | ); 544 | 545 | const App = () => ( 546 | <> 547 | 548 | 553 | 558 | 559 | ); 560 | ``` 561 | 562 |
563 | 564 | ## Credits 565 | 566 | This project wouldn't exist without [react-polymorphic-types](https://github.com/kripod/react-polymorphic-types) 567 | 568 | [ci-image]: https://img.shields.io/github/actions/workflow/status/axa-ch/react-polymorphic-types/ci.yml?style=flat-square&branch=main 569 | [ci-url]: https://github.com/axa-ch/react-polymorphic-types/actions 570 | [license-image]: http://img.shields.io/badge/license-MIT-000000.svg?style=flat-square 571 | [license-url]: LICENSE 572 | [npm-version-image]: https://img.shields.io/npm/v/@axa-ch/react-polymorphic-types.svg?style=flat-square 573 | [npm-downloads-image]: https://img.shields.io/npm/dm/@axa-ch/react-polymorphic-types.svg?style=flat-square 574 | [npm-url]: https://npmjs.org/package/@axa-ch/react-polymorphic-types 575 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", 3 | "extends": ["./node_modules/@axa-ch/easy-config/biome/base.json"] 4 | } 5 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | Attributes, 3 | ComponentPropsWithRef, 4 | ComponentPropsWithoutRef, 5 | ElementType, 6 | ExoticComponent, 7 | FC, 8 | JSX, 9 | PropsWithoutRef, 10 | } from 'react'; 11 | 12 | // Utility type to merge two types 13 | type Merge = { 14 | [K in keyof T as K extends keyof U ? never : K]: T[K]; 15 | } & U; 16 | 17 | // Props type with an "as" prop that allows specifying the element type 18 | export type PropsWithAs = P & { 19 | as?: T; 20 | }; 21 | 22 | // Helper to get the polymorphic component props without the as attribute 23 | // it will allow the composition of polymorphic components 24 | export type PropsWithoutAs = Omit; 25 | 26 | // Polymorphic props type that merges the component-specific props with the "as" prop 27 | export type PolymorphicProps< 28 | P, 29 | T extends ElementType, 30 | S extends keyof JSX.IntrinsicElements = keyof JSX.IntrinsicElements, 31 | > = Merge< 32 | T extends keyof JSX.IntrinsicElements ? PropsWithoutRef : ComponentPropsWithoutRef, 33 | // cover cases where the allowed ElementType and allowed DOM nodes overlap and are the same 34 | T extends S ? PropsWithAs : PropsWithAs 35 | > & 36 | Attributes; 37 | 38 | // Polymorphic props type for exotic components 39 | export type PolymorphicExoticProps< 40 | P, 41 | T extends ElementType, 42 | S extends keyof JSX.IntrinsicElements = keyof JSX.IntrinsicElements, 43 | > = T extends ExoticComponent ? PolymorphicProps>, P>, T, S> : never; 44 | 45 | // Polymorphic props type for functional components 46 | export type PolymorphicFunctionalProps< 47 | P, 48 | T extends ElementType, 49 | S extends keyof JSX.IntrinsicElements = keyof JSX.IntrinsicElements, 50 | > = T extends FC ? PolymorphicProps>, P>, T, S> : never; 51 | 52 | // Type for the forwarded ref of a component 53 | export type PolymorphicForwardedRef = ComponentPropsWithRef['ref']; 54 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | export default () => 'Enjoy the silence'; 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@axa-ch/react-polymorphic-types", 3 | "version": "1.4.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@axa-ch/react-polymorphic-types", 9 | "version": "1.4.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@axa-ch/easy-config": "3.0.1", 13 | "@biomejs/biome": "1.9.4", 14 | "@types/react": "^19.1.4", 15 | "framer-motion": "^12.12.1", 16 | "prettier": "3.5.3", 17 | "react": "^19.1.0", 18 | "typescript": "^5.8.3" 19 | }, 20 | "peerDependencies": { 21 | "@types/react": "^18.0.0 || ^19.0.0", 22 | "react": "^18.0.0 || ^19.0.0" 23 | } 24 | }, 25 | "node_modules/@axa-ch/easy-config": { 26 | "version": "3.0.1", 27 | "resolved": "https://registry.npmjs.org/@axa-ch/easy-config/-/easy-config-3.0.1.tgz", 28 | "integrity": "sha512-MObL78iA4guiGEC9nIIjg+y5cXpnyp5YF7VKuPVSK5yyTS9bX3tWyRL5gVmVXNP7Ip2e9hUMb7+oEMKpCVJNAw==", 29 | "dev": true, 30 | "license": "MIT", 31 | "optionalDependencies": { 32 | "stylelint": "^16.12.0", 33 | "stylelint-config-standard": "^36.0.0 || ^38.0.0", 34 | "stylelint-config-standard-scss": "^13.0.0 || ^14.0.0 || ^15.0.0", 35 | "stylelint-order": "^6.0.4 || ^7.0.0" 36 | }, 37 | "peerDependencies": { 38 | "@biomejs/biome": "^1.7.0", 39 | "prettier": "^3.0.0" 40 | } 41 | }, 42 | "node_modules/@axa-ch/easy-config/node_modules/known-css-properties": { 43 | "version": "0.34.0", 44 | "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", 45 | "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", 46 | "dev": true, 47 | "optional": true 48 | }, 49 | "node_modules/@axa-ch/easy-config/node_modules/stylelint-config-recommended": { 50 | "version": "14.0.1", 51 | "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", 52 | "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", 53 | "dev": true, 54 | "funding": [ 55 | { 56 | "type": "opencollective", 57 | "url": "https://opencollective.com/stylelint" 58 | }, 59 | { 60 | "type": "github", 61 | "url": "https://github.com/sponsors/stylelint" 62 | } 63 | ], 64 | "optional": true, 65 | "engines": { 66 | "node": ">=18.12.0" 67 | }, 68 | "peerDependencies": { 69 | "stylelint": "^16.1.0" 70 | } 71 | }, 72 | "node_modules/@axa-ch/easy-config/node_modules/stylelint-config-recommended-scss": { 73 | "version": "14.1.0", 74 | "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", 75 | "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", 76 | "dev": true, 77 | "optional": true, 78 | "dependencies": { 79 | "postcss-scss": "^4.0.9", 80 | "stylelint-config-recommended": "^14.0.1", 81 | "stylelint-scss": "^6.4.0" 82 | }, 83 | "engines": { 84 | "node": ">=18.12.0" 85 | }, 86 | "peerDependencies": { 87 | "postcss": "^8.3.3", 88 | "stylelint": "^16.6.1" 89 | }, 90 | "peerDependenciesMeta": { 91 | "postcss": { 92 | "optional": true 93 | } 94 | } 95 | }, 96 | "node_modules/@axa-ch/easy-config/node_modules/stylelint-config-standard": { 97 | "version": "36.0.1", 98 | "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", 99 | "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", 100 | "dev": true, 101 | "funding": [ 102 | { 103 | "type": "opencollective", 104 | "url": "https://opencollective.com/stylelint" 105 | }, 106 | { 107 | "type": "github", 108 | "url": "https://github.com/sponsors/stylelint" 109 | } 110 | ], 111 | "optional": true, 112 | "dependencies": { 113 | "stylelint-config-recommended": "^14.0.1" 114 | }, 115 | "engines": { 116 | "node": ">=18.12.0" 117 | }, 118 | "peerDependencies": { 119 | "stylelint": "^16.1.0" 120 | } 121 | }, 122 | "node_modules/@axa-ch/easy-config/node_modules/stylelint-config-standard-scss": { 123 | "version": "13.1.0", 124 | "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.1.0.tgz", 125 | "integrity": "sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA==", 126 | "dev": true, 127 | "optional": true, 128 | "dependencies": { 129 | "stylelint-config-recommended-scss": "^14.0.0", 130 | "stylelint-config-standard": "^36.0.0" 131 | }, 132 | "engines": { 133 | "node": ">=18.12.0" 134 | }, 135 | "peerDependencies": { 136 | "postcss": "^8.3.3", 137 | "stylelint": "^16.3.1" 138 | }, 139 | "peerDependenciesMeta": { 140 | "postcss": { 141 | "optional": true 142 | } 143 | } 144 | }, 145 | "node_modules/@axa-ch/easy-config/node_modules/stylelint-scss": { 146 | "version": "6.5.1", 147 | "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.5.1.tgz", 148 | "integrity": "sha512-ZLqdqihm6uDYkrsOeD6YWb+stZI8Wn92kUNDhE4M+g9g1aCnRv0JlOrttFiAJJwaNzpdQgX3YJb5vDQXVuO9Ww==", 149 | "dev": true, 150 | "optional": true, 151 | "dependencies": { 152 | "css-tree": "2.3.1", 153 | "is-plain-object": "5.0.0", 154 | "known-css-properties": "^0.34.0", 155 | "postcss-media-query-parser": "^0.2.3", 156 | "postcss-resolve-nested-selector": "^0.1.4", 157 | "postcss-selector-parser": "^6.1.1", 158 | "postcss-value-parser": "^4.2.0" 159 | }, 160 | "engines": { 161 | "node": ">=18.12.0" 162 | }, 163 | "peerDependencies": { 164 | "stylelint": "^16.0.2" 165 | } 166 | }, 167 | "node_modules/@babel/code-frame": { 168 | "version": "7.26.2", 169 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 170 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 171 | "dev": true, 172 | "license": "MIT", 173 | "optional": true, 174 | "dependencies": { 175 | "@babel/helper-validator-identifier": "^7.25.9", 176 | "js-tokens": "^4.0.0", 177 | "picocolors": "^1.0.0" 178 | }, 179 | "engines": { 180 | "node": ">=6.9.0" 181 | } 182 | }, 183 | "node_modules/@babel/helper-validator-identifier": { 184 | "version": "7.25.9", 185 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 186 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 187 | "dev": true, 188 | "license": "MIT", 189 | "optional": true, 190 | "engines": { 191 | "node": ">=6.9.0" 192 | } 193 | }, 194 | "node_modules/@biomejs/biome": { 195 | "version": "1.9.4", 196 | "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", 197 | "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", 198 | "dev": true, 199 | "hasInstallScript": true, 200 | "license": "MIT OR Apache-2.0", 201 | "bin": { 202 | "biome": "bin/biome" 203 | }, 204 | "engines": { 205 | "node": ">=14.21.3" 206 | }, 207 | "funding": { 208 | "type": "opencollective", 209 | "url": "https://opencollective.com/biome" 210 | }, 211 | "optionalDependencies": { 212 | "@biomejs/cli-darwin-arm64": "1.9.4", 213 | "@biomejs/cli-darwin-x64": "1.9.4", 214 | "@biomejs/cli-linux-arm64": "1.9.4", 215 | "@biomejs/cli-linux-arm64-musl": "1.9.4", 216 | "@biomejs/cli-linux-x64": "1.9.4", 217 | "@biomejs/cli-linux-x64-musl": "1.9.4", 218 | "@biomejs/cli-win32-arm64": "1.9.4", 219 | "@biomejs/cli-win32-x64": "1.9.4" 220 | } 221 | }, 222 | "node_modules/@biomejs/cli-darwin-arm64": { 223 | "version": "1.9.4", 224 | "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", 225 | "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", 226 | "cpu": [ 227 | "arm64" 228 | ], 229 | "dev": true, 230 | "license": "MIT OR Apache-2.0", 231 | "optional": true, 232 | "os": [ 233 | "darwin" 234 | ], 235 | "engines": { 236 | "node": ">=14.21.3" 237 | } 238 | }, 239 | "node_modules/@biomejs/cli-darwin-x64": { 240 | "version": "1.9.4", 241 | "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", 242 | "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", 243 | "cpu": [ 244 | "x64" 245 | ], 246 | "dev": true, 247 | "license": "MIT OR Apache-2.0", 248 | "optional": true, 249 | "os": [ 250 | "darwin" 251 | ], 252 | "engines": { 253 | "node": ">=14.21.3" 254 | } 255 | }, 256 | "node_modules/@biomejs/cli-linux-arm64": { 257 | "version": "1.9.4", 258 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", 259 | "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", 260 | "cpu": [ 261 | "arm64" 262 | ], 263 | "dev": true, 264 | "license": "MIT OR Apache-2.0", 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "node": ">=14.21.3" 271 | } 272 | }, 273 | "node_modules/@biomejs/cli-linux-arm64-musl": { 274 | "version": "1.9.4", 275 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", 276 | "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", 277 | "cpu": [ 278 | "arm64" 279 | ], 280 | "dev": true, 281 | "license": "MIT OR Apache-2.0", 282 | "optional": true, 283 | "os": [ 284 | "linux" 285 | ], 286 | "engines": { 287 | "node": ">=14.21.3" 288 | } 289 | }, 290 | "node_modules/@biomejs/cli-linux-x64": { 291 | "version": "1.9.4", 292 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", 293 | "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", 294 | "cpu": [ 295 | "x64" 296 | ], 297 | "dev": true, 298 | "license": "MIT OR Apache-2.0", 299 | "optional": true, 300 | "os": [ 301 | "linux" 302 | ], 303 | "engines": { 304 | "node": ">=14.21.3" 305 | } 306 | }, 307 | "node_modules/@biomejs/cli-linux-x64-musl": { 308 | "version": "1.9.4", 309 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", 310 | "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", 311 | "cpu": [ 312 | "x64" 313 | ], 314 | "dev": true, 315 | "license": "MIT OR Apache-2.0", 316 | "optional": true, 317 | "os": [ 318 | "linux" 319 | ], 320 | "engines": { 321 | "node": ">=14.21.3" 322 | } 323 | }, 324 | "node_modules/@biomejs/cli-win32-arm64": { 325 | "version": "1.9.4", 326 | "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", 327 | "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", 328 | "cpu": [ 329 | "arm64" 330 | ], 331 | "dev": true, 332 | "license": "MIT OR Apache-2.0", 333 | "optional": true, 334 | "os": [ 335 | "win32" 336 | ], 337 | "engines": { 338 | "node": ">=14.21.3" 339 | } 340 | }, 341 | "node_modules/@biomejs/cli-win32-x64": { 342 | "version": "1.9.4", 343 | "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", 344 | "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", 345 | "cpu": [ 346 | "x64" 347 | ], 348 | "dev": true, 349 | "license": "MIT OR Apache-2.0", 350 | "optional": true, 351 | "os": [ 352 | "win32" 353 | ], 354 | "engines": { 355 | "node": ">=14.21.3" 356 | } 357 | }, 358 | "node_modules/@csstools/css-parser-algorithms": { 359 | "version": "3.0.4", 360 | "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", 361 | "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", 362 | "dev": true, 363 | "funding": [ 364 | { 365 | "type": "github", 366 | "url": "https://github.com/sponsors/csstools" 367 | }, 368 | { 369 | "type": "opencollective", 370 | "url": "https://opencollective.com/csstools" 371 | } 372 | ], 373 | "license": "MIT", 374 | "optional": true, 375 | "engines": { 376 | "node": ">=18" 377 | }, 378 | "peerDependencies": { 379 | "@csstools/css-tokenizer": "^3.0.3" 380 | } 381 | }, 382 | "node_modules/@csstools/css-tokenizer": { 383 | "version": "3.0.3", 384 | "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", 385 | "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", 386 | "dev": true, 387 | "funding": [ 388 | { 389 | "type": "github", 390 | "url": "https://github.com/sponsors/csstools" 391 | }, 392 | { 393 | "type": "opencollective", 394 | "url": "https://opencollective.com/csstools" 395 | } 396 | ], 397 | "license": "MIT", 398 | "optional": true, 399 | "engines": { 400 | "node": ">=18" 401 | } 402 | }, 403 | "node_modules/@csstools/media-query-list-parser": { 404 | "version": "4.0.2", 405 | "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", 406 | "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", 407 | "dev": true, 408 | "funding": [ 409 | { 410 | "type": "github", 411 | "url": "https://github.com/sponsors/csstools" 412 | }, 413 | { 414 | "type": "opencollective", 415 | "url": "https://opencollective.com/csstools" 416 | } 417 | ], 418 | "license": "MIT", 419 | "optional": true, 420 | "engines": { 421 | "node": ">=18" 422 | }, 423 | "peerDependencies": { 424 | "@csstools/css-parser-algorithms": "^3.0.4", 425 | "@csstools/css-tokenizer": "^3.0.3" 426 | } 427 | }, 428 | "node_modules/@dual-bundle/import-meta-resolve": { 429 | "version": "4.1.0", 430 | "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 431 | "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", 432 | "dev": true, 433 | "optional": true, 434 | "funding": { 435 | "type": "github", 436 | "url": "https://github.com/sponsors/wooorm" 437 | } 438 | }, 439 | "node_modules/@emotion/is-prop-valid": { 440 | "version": "0.8.8", 441 | "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", 442 | "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", 443 | "dev": true, 444 | "optional": true, 445 | "peer": true, 446 | "dependencies": { 447 | "@emotion/memoize": "0.7.4" 448 | } 449 | }, 450 | "node_modules/@emotion/memoize": { 451 | "version": "0.7.4", 452 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", 453 | "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", 454 | "dev": true, 455 | "optional": true, 456 | "peer": true 457 | }, 458 | "node_modules/@nodelib/fs.scandir": { 459 | "version": "2.1.5", 460 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 461 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 462 | "dev": true, 463 | "optional": true, 464 | "dependencies": { 465 | "@nodelib/fs.stat": "2.0.5", 466 | "run-parallel": "^1.1.9" 467 | }, 468 | "engines": { 469 | "node": ">= 8" 470 | } 471 | }, 472 | "node_modules/@nodelib/fs.stat": { 473 | "version": "2.0.5", 474 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 475 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 476 | "dev": true, 477 | "optional": true, 478 | "engines": { 479 | "node": ">= 8" 480 | } 481 | }, 482 | "node_modules/@nodelib/fs.walk": { 483 | "version": "1.2.8", 484 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 485 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 486 | "dev": true, 487 | "optional": true, 488 | "dependencies": { 489 | "@nodelib/fs.scandir": "2.1.5", 490 | "fastq": "^1.6.0" 491 | }, 492 | "engines": { 493 | "node": ">= 8" 494 | } 495 | }, 496 | "node_modules/@types/react": { 497 | "version": "19.1.4", 498 | "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", 499 | "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", 500 | "dev": true, 501 | "license": "MIT", 502 | "dependencies": { 503 | "csstype": "^3.0.2" 504 | } 505 | }, 506 | "node_modules/ajv": { 507 | "version": "8.17.1", 508 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 509 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 510 | "dev": true, 511 | "license": "MIT", 512 | "optional": true, 513 | "dependencies": { 514 | "fast-deep-equal": "^3.1.3", 515 | "fast-uri": "^3.0.1", 516 | "json-schema-traverse": "^1.0.0", 517 | "require-from-string": "^2.0.2" 518 | }, 519 | "funding": { 520 | "type": "github", 521 | "url": "https://github.com/sponsors/epoberezkin" 522 | } 523 | }, 524 | "node_modules/ansi-regex": { 525 | "version": "5.0.1", 526 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 527 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 528 | "dev": true, 529 | "optional": true, 530 | "engines": { 531 | "node": ">=8" 532 | } 533 | }, 534 | "node_modules/ansi-styles": { 535 | "version": "4.3.0", 536 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 537 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 538 | "dev": true, 539 | "license": "MIT", 540 | "optional": true, 541 | "dependencies": { 542 | "color-convert": "^2.0.1" 543 | }, 544 | "engines": { 545 | "node": ">=8" 546 | }, 547 | "funding": { 548 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 549 | } 550 | }, 551 | "node_modules/argparse": { 552 | "version": "2.0.1", 553 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 554 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 555 | "dev": true, 556 | "license": "Python-2.0", 557 | "optional": true 558 | }, 559 | "node_modules/array-union": { 560 | "version": "2.1.0", 561 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 562 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 563 | "dev": true, 564 | "optional": true, 565 | "engines": { 566 | "node": ">=8" 567 | } 568 | }, 569 | "node_modules/astral-regex": { 570 | "version": "2.0.0", 571 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 572 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 573 | "dev": true, 574 | "license": "MIT", 575 | "optional": true, 576 | "engines": { 577 | "node": ">=8" 578 | } 579 | }, 580 | "node_modules/balanced-match": { 581 | "version": "2.0.0", 582 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", 583 | "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", 584 | "dev": true, 585 | "license": "MIT", 586 | "optional": true 587 | }, 588 | "node_modules/braces": { 589 | "version": "3.0.3", 590 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 591 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 592 | "dev": true, 593 | "optional": true, 594 | "dependencies": { 595 | "fill-range": "^7.1.1" 596 | }, 597 | "engines": { 598 | "node": ">=8" 599 | } 600 | }, 601 | "node_modules/callsites": { 602 | "version": "3.1.0", 603 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 604 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 605 | "dev": true, 606 | "license": "MIT", 607 | "optional": true, 608 | "engines": { 609 | "node": ">=6" 610 | } 611 | }, 612 | "node_modules/color-convert": { 613 | "version": "2.0.1", 614 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 615 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 616 | "dev": true, 617 | "license": "MIT", 618 | "optional": true, 619 | "dependencies": { 620 | "color-name": "~1.1.4" 621 | }, 622 | "engines": { 623 | "node": ">=7.0.0" 624 | } 625 | }, 626 | "node_modules/color-name": { 627 | "version": "1.1.4", 628 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 629 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 630 | "dev": true, 631 | "license": "MIT", 632 | "optional": true 633 | }, 634 | "node_modules/colord": { 635 | "version": "2.9.3", 636 | "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", 637 | "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", 638 | "dev": true, 639 | "optional": true 640 | }, 641 | "node_modules/cosmiconfig": { 642 | "version": "9.0.0", 643 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 644 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 645 | "dev": true, 646 | "license": "MIT", 647 | "optional": true, 648 | "dependencies": { 649 | "env-paths": "^2.2.1", 650 | "import-fresh": "^3.3.0", 651 | "js-yaml": "^4.1.0", 652 | "parse-json": "^5.2.0" 653 | }, 654 | "engines": { 655 | "node": ">=14" 656 | }, 657 | "funding": { 658 | "url": "https://github.com/sponsors/d-fischer" 659 | }, 660 | "peerDependencies": { 661 | "typescript": ">=4.9.5" 662 | }, 663 | "peerDependenciesMeta": { 664 | "typescript": { 665 | "optional": true 666 | } 667 | } 668 | }, 669 | "node_modules/css-functions-list": { 670 | "version": "3.2.3", 671 | "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", 672 | "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", 673 | "dev": true, 674 | "license": "MIT", 675 | "optional": true, 676 | "engines": { 677 | "node": ">=12 || >=16" 678 | } 679 | }, 680 | "node_modules/css-tree": { 681 | "version": "2.3.1", 682 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", 683 | "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", 684 | "dev": true, 685 | "optional": true, 686 | "dependencies": { 687 | "mdn-data": "2.0.30", 688 | "source-map-js": "^1.0.1" 689 | }, 690 | "engines": { 691 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 692 | } 693 | }, 694 | "node_modules/cssesc": { 695 | "version": "3.0.0", 696 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 697 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 698 | "dev": true, 699 | "optional": true, 700 | "bin": { 701 | "cssesc": "bin/cssesc" 702 | }, 703 | "engines": { 704 | "node": ">=4" 705 | } 706 | }, 707 | "node_modules/csstype": { 708 | "version": "3.1.3", 709 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 710 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 711 | "dev": true 712 | }, 713 | "node_modules/debug": { 714 | "version": "4.3.7", 715 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 716 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 717 | "dev": true, 718 | "optional": true, 719 | "dependencies": { 720 | "ms": "^2.1.3" 721 | }, 722 | "engines": { 723 | "node": ">=6.0" 724 | }, 725 | "peerDependenciesMeta": { 726 | "supports-color": { 727 | "optional": true 728 | } 729 | } 730 | }, 731 | "node_modules/dir-glob": { 732 | "version": "3.0.1", 733 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 734 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 735 | "dev": true, 736 | "optional": true, 737 | "dependencies": { 738 | "path-type": "^4.0.0" 739 | }, 740 | "engines": { 741 | "node": ">=8" 742 | } 743 | }, 744 | "node_modules/emoji-regex": { 745 | "version": "8.0.0", 746 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 747 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 748 | "dev": true, 749 | "optional": true 750 | }, 751 | "node_modules/env-paths": { 752 | "version": "2.2.1", 753 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 754 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 755 | "dev": true, 756 | "license": "MIT", 757 | "optional": true, 758 | "engines": { 759 | "node": ">=6" 760 | } 761 | }, 762 | "node_modules/error-ex": { 763 | "version": "1.3.2", 764 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 765 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 766 | "dev": true, 767 | "license": "MIT", 768 | "optional": true, 769 | "dependencies": { 770 | "is-arrayish": "^0.2.1" 771 | } 772 | }, 773 | "node_modules/fast-deep-equal": { 774 | "version": "3.1.3", 775 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 776 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 777 | "dev": true, 778 | "license": "MIT", 779 | "optional": true 780 | }, 781 | "node_modules/fast-glob": { 782 | "version": "3.3.2", 783 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 784 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 785 | "dev": true, 786 | "optional": true, 787 | "dependencies": { 788 | "@nodelib/fs.stat": "^2.0.2", 789 | "@nodelib/fs.walk": "^1.2.3", 790 | "glob-parent": "^5.1.2", 791 | "merge2": "^1.3.0", 792 | "micromatch": "^4.0.4" 793 | }, 794 | "engines": { 795 | "node": ">=8.6.0" 796 | } 797 | }, 798 | "node_modules/fast-glob/node_modules/glob-parent": { 799 | "version": "5.1.2", 800 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 801 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 802 | "dev": true, 803 | "optional": true, 804 | "dependencies": { 805 | "is-glob": "^4.0.1" 806 | }, 807 | "engines": { 808 | "node": ">= 6" 809 | } 810 | }, 811 | "node_modules/fast-uri": { 812 | "version": "3.0.5", 813 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", 814 | "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", 815 | "dev": true, 816 | "funding": [ 817 | { 818 | "type": "github", 819 | "url": "https://github.com/sponsors/fastify" 820 | }, 821 | { 822 | "type": "opencollective", 823 | "url": "https://opencollective.com/fastify" 824 | } 825 | ], 826 | "license": "BSD-3-Clause", 827 | "optional": true 828 | }, 829 | "node_modules/fastest-levenshtein": { 830 | "version": "1.0.16", 831 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", 832 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", 833 | "dev": true, 834 | "optional": true, 835 | "engines": { 836 | "node": ">= 4.9.1" 837 | } 838 | }, 839 | "node_modules/fastq": { 840 | "version": "1.15.0", 841 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 842 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 843 | "dev": true, 844 | "optional": true, 845 | "dependencies": { 846 | "reusify": "^1.0.4" 847 | } 848 | }, 849 | "node_modules/file-entry-cache": { 850 | "version": "9.1.0", 851 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", 852 | "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", 853 | "dev": true, 854 | "optional": true, 855 | "dependencies": { 856 | "flat-cache": "^5.0.0" 857 | }, 858 | "engines": { 859 | "node": ">=18" 860 | } 861 | }, 862 | "node_modules/file-entry-cache/node_modules/flat-cache": { 863 | "version": "5.0.0", 864 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", 865 | "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", 866 | "dev": true, 867 | "optional": true, 868 | "dependencies": { 869 | "flatted": "^3.3.1", 870 | "keyv": "^4.5.4" 871 | }, 872 | "engines": { 873 | "node": ">=18" 874 | } 875 | }, 876 | "node_modules/fill-range": { 877 | "version": "7.1.1", 878 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 879 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 880 | "dev": true, 881 | "optional": true, 882 | "dependencies": { 883 | "to-regex-range": "^5.0.1" 884 | }, 885 | "engines": { 886 | "node": ">=8" 887 | } 888 | }, 889 | "node_modules/flatted": { 890 | "version": "3.3.1", 891 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 892 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 893 | "dev": true, 894 | "optional": true 895 | }, 896 | "node_modules/framer-motion": { 897 | "version": "12.12.1", 898 | "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.12.1.tgz", 899 | "integrity": "sha512-PFw4/GCREHI2suK/NlPSUxd+x6Rkp80uQsfCRFSOQNrm5pZif7eGtmG1VaD/UF1fW9tRBy5AaS77StatB3OJDg==", 900 | "dev": true, 901 | "license": "MIT", 902 | "dependencies": { 903 | "motion-dom": "^12.12.1", 904 | "motion-utils": "^12.12.1", 905 | "tslib": "^2.4.0" 906 | }, 907 | "peerDependencies": { 908 | "@emotion/is-prop-valid": "*", 909 | "react": "^18.0.0 || ^19.0.0", 910 | "react-dom": "^18.0.0 || ^19.0.0" 911 | }, 912 | "peerDependenciesMeta": { 913 | "@emotion/is-prop-valid": { 914 | "optional": true 915 | }, 916 | "react": { 917 | "optional": true 918 | }, 919 | "react-dom": { 920 | "optional": true 921 | } 922 | } 923 | }, 924 | "node_modules/global-modules": { 925 | "version": "2.0.0", 926 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", 927 | "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", 928 | "dev": true, 929 | "optional": true, 930 | "dependencies": { 931 | "global-prefix": "^3.0.0" 932 | }, 933 | "engines": { 934 | "node": ">=6" 935 | } 936 | }, 937 | "node_modules/global-prefix": { 938 | "version": "3.0.0", 939 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", 940 | "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", 941 | "dev": true, 942 | "optional": true, 943 | "dependencies": { 944 | "ini": "^1.3.5", 945 | "kind-of": "^6.0.2", 946 | "which": "^1.3.1" 947 | }, 948 | "engines": { 949 | "node": ">=6" 950 | } 951 | }, 952 | "node_modules/global-prefix/node_modules/which": { 953 | "version": "1.3.1", 954 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 955 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 956 | "dev": true, 957 | "optional": true, 958 | "dependencies": { 959 | "isexe": "^2.0.0" 960 | }, 961 | "bin": { 962 | "which": "bin/which" 963 | } 964 | }, 965 | "node_modules/globby": { 966 | "version": "11.1.0", 967 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 968 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 969 | "dev": true, 970 | "optional": true, 971 | "dependencies": { 972 | "array-union": "^2.1.0", 973 | "dir-glob": "^3.0.1", 974 | "fast-glob": "^3.2.9", 975 | "ignore": "^5.2.0", 976 | "merge2": "^1.4.1", 977 | "slash": "^3.0.0" 978 | }, 979 | "engines": { 980 | "node": ">=10" 981 | }, 982 | "funding": { 983 | "url": "https://github.com/sponsors/sindresorhus" 984 | } 985 | }, 986 | "node_modules/globjoin": { 987 | "version": "0.1.4", 988 | "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", 989 | "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", 990 | "dev": true, 991 | "optional": true 992 | }, 993 | "node_modules/has-flag": { 994 | "version": "4.0.0", 995 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 996 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 997 | "dev": true, 998 | "optional": true, 999 | "engines": { 1000 | "node": ">=8" 1001 | } 1002 | }, 1003 | "node_modules/html-tags": { 1004 | "version": "3.3.1", 1005 | "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", 1006 | "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", 1007 | "dev": true, 1008 | "optional": true, 1009 | "engines": { 1010 | "node": ">=8" 1011 | }, 1012 | "funding": { 1013 | "url": "https://github.com/sponsors/sindresorhus" 1014 | } 1015 | }, 1016 | "node_modules/ignore": { 1017 | "version": "5.3.2", 1018 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 1019 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 1020 | "dev": true, 1021 | "optional": true, 1022 | "engines": { 1023 | "node": ">= 4" 1024 | } 1025 | }, 1026 | "node_modules/import-fresh": { 1027 | "version": "3.3.0", 1028 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1029 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1030 | "dev": true, 1031 | "license": "MIT", 1032 | "optional": true, 1033 | "dependencies": { 1034 | "parent-module": "^1.0.0", 1035 | "resolve-from": "^4.0.0" 1036 | }, 1037 | "engines": { 1038 | "node": ">=6" 1039 | }, 1040 | "funding": { 1041 | "url": "https://github.com/sponsors/sindresorhus" 1042 | } 1043 | }, 1044 | "node_modules/import-fresh/node_modules/resolve-from": { 1045 | "version": "4.0.0", 1046 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1047 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1048 | "dev": true, 1049 | "license": "MIT", 1050 | "optional": true, 1051 | "engines": { 1052 | "node": ">=4" 1053 | } 1054 | }, 1055 | "node_modules/imurmurhash": { 1056 | "version": "0.1.4", 1057 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1058 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1059 | "dev": true, 1060 | "optional": true, 1061 | "engines": { 1062 | "node": ">=0.8.19" 1063 | } 1064 | }, 1065 | "node_modules/ini": { 1066 | "version": "1.3.8", 1067 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1068 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1069 | "dev": true, 1070 | "optional": true 1071 | }, 1072 | "node_modules/is-arrayish": { 1073 | "version": "0.2.1", 1074 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1075 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1076 | "dev": true, 1077 | "license": "MIT", 1078 | "optional": true 1079 | }, 1080 | "node_modules/is-extglob": { 1081 | "version": "2.1.1", 1082 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1083 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1084 | "dev": true, 1085 | "optional": true, 1086 | "engines": { 1087 | "node": ">=0.10.0" 1088 | } 1089 | }, 1090 | "node_modules/is-fullwidth-code-point": { 1091 | "version": "3.0.0", 1092 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1093 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1094 | "dev": true, 1095 | "optional": true, 1096 | "engines": { 1097 | "node": ">=8" 1098 | } 1099 | }, 1100 | "node_modules/is-glob": { 1101 | "version": "4.0.3", 1102 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1103 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1104 | "dev": true, 1105 | "optional": true, 1106 | "dependencies": { 1107 | "is-extglob": "^2.1.1" 1108 | }, 1109 | "engines": { 1110 | "node": ">=0.10.0" 1111 | } 1112 | }, 1113 | "node_modules/is-number": { 1114 | "version": "7.0.0", 1115 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1116 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1117 | "dev": true, 1118 | "optional": true, 1119 | "engines": { 1120 | "node": ">=0.12.0" 1121 | } 1122 | }, 1123 | "node_modules/is-plain-object": { 1124 | "version": "5.0.0", 1125 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 1126 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 1127 | "dev": true, 1128 | "optional": true, 1129 | "engines": { 1130 | "node": ">=0.10.0" 1131 | } 1132 | }, 1133 | "node_modules/isexe": { 1134 | "version": "2.0.0", 1135 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1136 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1137 | "dev": true, 1138 | "optional": true 1139 | }, 1140 | "node_modules/js-tokens": { 1141 | "version": "4.0.0", 1142 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1143 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1144 | "dev": true, 1145 | "optional": true 1146 | }, 1147 | "node_modules/js-yaml": { 1148 | "version": "4.1.0", 1149 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1150 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1151 | "dev": true, 1152 | "license": "MIT", 1153 | "optional": true, 1154 | "dependencies": { 1155 | "argparse": "^2.0.1" 1156 | }, 1157 | "bin": { 1158 | "js-yaml": "bin/js-yaml.js" 1159 | } 1160 | }, 1161 | "node_modules/json-buffer": { 1162 | "version": "3.0.1", 1163 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1164 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1165 | "dev": true, 1166 | "optional": true 1167 | }, 1168 | "node_modules/json-parse-even-better-errors": { 1169 | "version": "2.3.1", 1170 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1171 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1172 | "dev": true, 1173 | "license": "MIT", 1174 | "optional": true 1175 | }, 1176 | "node_modules/json-schema-traverse": { 1177 | "version": "1.0.0", 1178 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1179 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1180 | "dev": true, 1181 | "license": "MIT", 1182 | "optional": true 1183 | }, 1184 | "node_modules/keyv": { 1185 | "version": "4.5.4", 1186 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 1187 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 1188 | "dev": true, 1189 | "optional": true, 1190 | "dependencies": { 1191 | "json-buffer": "3.0.1" 1192 | } 1193 | }, 1194 | "node_modules/kind-of": { 1195 | "version": "6.0.3", 1196 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1197 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1198 | "dev": true, 1199 | "optional": true, 1200 | "engines": { 1201 | "node": ">=0.10.0" 1202 | } 1203 | }, 1204 | "node_modules/known-css-properties": { 1205 | "version": "0.35.0", 1206 | "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", 1207 | "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", 1208 | "dev": true, 1209 | "license": "MIT", 1210 | "optional": true 1211 | }, 1212 | "node_modules/lines-and-columns": { 1213 | "version": "1.2.4", 1214 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1215 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1216 | "dev": true, 1217 | "license": "MIT", 1218 | "optional": true 1219 | }, 1220 | "node_modules/lodash.truncate": { 1221 | "version": "4.4.2", 1222 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 1223 | "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", 1224 | "dev": true, 1225 | "license": "MIT", 1226 | "optional": true 1227 | }, 1228 | "node_modules/mathml-tag-names": { 1229 | "version": "2.1.3", 1230 | "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", 1231 | "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", 1232 | "dev": true, 1233 | "optional": true, 1234 | "funding": { 1235 | "type": "github", 1236 | "url": "https://github.com/sponsors/wooorm" 1237 | } 1238 | }, 1239 | "node_modules/mdn-data": { 1240 | "version": "2.0.30", 1241 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", 1242 | "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", 1243 | "dev": true, 1244 | "optional": true 1245 | }, 1246 | "node_modules/meow": { 1247 | "version": "13.2.0", 1248 | "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", 1249 | "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", 1250 | "dev": true, 1251 | "license": "MIT", 1252 | "optional": true, 1253 | "engines": { 1254 | "node": ">=18" 1255 | }, 1256 | "funding": { 1257 | "url": "https://github.com/sponsors/sindresorhus" 1258 | } 1259 | }, 1260 | "node_modules/merge2": { 1261 | "version": "1.4.1", 1262 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1263 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1264 | "dev": true, 1265 | "optional": true, 1266 | "engines": { 1267 | "node": ">= 8" 1268 | } 1269 | }, 1270 | "node_modules/micromatch": { 1271 | "version": "4.0.8", 1272 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 1273 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 1274 | "dev": true, 1275 | "optional": true, 1276 | "dependencies": { 1277 | "braces": "^3.0.3", 1278 | "picomatch": "^2.3.1" 1279 | }, 1280 | "engines": { 1281 | "node": ">=8.6" 1282 | } 1283 | }, 1284 | "node_modules/motion-dom": { 1285 | "version": "12.12.1", 1286 | "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.12.1.tgz", 1287 | "integrity": "sha512-GXq/uUbZBEiFFE+K1Z/sxdPdadMdfJ/jmBALDfIuHGi0NmtealLOfH9FqT+6aNPgVx8ilq0DtYmyQlo6Uj9LKQ==", 1288 | "dev": true, 1289 | "license": "MIT", 1290 | "dependencies": { 1291 | "motion-utils": "^12.12.1" 1292 | } 1293 | }, 1294 | "node_modules/motion-utils": { 1295 | "version": "12.12.1", 1296 | "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.12.1.tgz", 1297 | "integrity": "sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==", 1298 | "dev": true, 1299 | "license": "MIT" 1300 | }, 1301 | "node_modules/ms": { 1302 | "version": "2.1.3", 1303 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1304 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1305 | "dev": true, 1306 | "optional": true 1307 | }, 1308 | "node_modules/nanoid": { 1309 | "version": "3.3.11", 1310 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1311 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1312 | "dev": true, 1313 | "funding": [ 1314 | { 1315 | "type": "github", 1316 | "url": "https://github.com/sponsors/ai" 1317 | } 1318 | ], 1319 | "license": "MIT", 1320 | "optional": true, 1321 | "bin": { 1322 | "nanoid": "bin/nanoid.cjs" 1323 | }, 1324 | "engines": { 1325 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1326 | } 1327 | }, 1328 | "node_modules/normalize-path": { 1329 | "version": "3.0.0", 1330 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1331 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1332 | "dev": true, 1333 | "optional": true, 1334 | "engines": { 1335 | "node": ">=0.10.0" 1336 | } 1337 | }, 1338 | "node_modules/parent-module": { 1339 | "version": "1.0.1", 1340 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1341 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1342 | "dev": true, 1343 | "license": "MIT", 1344 | "optional": true, 1345 | "dependencies": { 1346 | "callsites": "^3.0.0" 1347 | }, 1348 | "engines": { 1349 | "node": ">=6" 1350 | } 1351 | }, 1352 | "node_modules/parse-json": { 1353 | "version": "5.2.0", 1354 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1355 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1356 | "dev": true, 1357 | "license": "MIT", 1358 | "optional": true, 1359 | "dependencies": { 1360 | "@babel/code-frame": "^7.0.0", 1361 | "error-ex": "^1.3.1", 1362 | "json-parse-even-better-errors": "^2.3.0", 1363 | "lines-and-columns": "^1.1.6" 1364 | }, 1365 | "engines": { 1366 | "node": ">=8" 1367 | }, 1368 | "funding": { 1369 | "url": "https://github.com/sponsors/sindresorhus" 1370 | } 1371 | }, 1372 | "node_modules/path-type": { 1373 | "version": "4.0.0", 1374 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1375 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1376 | "dev": true, 1377 | "optional": true, 1378 | "engines": { 1379 | "node": ">=8" 1380 | } 1381 | }, 1382 | "node_modules/picocolors": { 1383 | "version": "1.1.1", 1384 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1385 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1386 | "dev": true, 1387 | "license": "ISC", 1388 | "optional": true 1389 | }, 1390 | "node_modules/picomatch": { 1391 | "version": "2.3.1", 1392 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1393 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1394 | "dev": true, 1395 | "optional": true, 1396 | "engines": { 1397 | "node": ">=8.6" 1398 | }, 1399 | "funding": { 1400 | "url": "https://github.com/sponsors/jonschlinkert" 1401 | } 1402 | }, 1403 | "node_modules/postcss": { 1404 | "version": "8.4.49", 1405 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", 1406 | "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", 1407 | "dev": true, 1408 | "funding": [ 1409 | { 1410 | "type": "opencollective", 1411 | "url": "https://opencollective.com/postcss/" 1412 | }, 1413 | { 1414 | "type": "tidelift", 1415 | "url": "https://tidelift.com/funding/github/npm/postcss" 1416 | }, 1417 | { 1418 | "type": "github", 1419 | "url": "https://github.com/sponsors/ai" 1420 | } 1421 | ], 1422 | "license": "MIT", 1423 | "optional": true, 1424 | "dependencies": { 1425 | "nanoid": "^3.3.7", 1426 | "picocolors": "^1.1.1", 1427 | "source-map-js": "^1.2.1" 1428 | }, 1429 | "engines": { 1430 | "node": "^10 || ^12 || >=14" 1431 | } 1432 | }, 1433 | "node_modules/postcss-media-query-parser": { 1434 | "version": "0.2.3", 1435 | "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", 1436 | "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", 1437 | "dev": true, 1438 | "optional": true 1439 | }, 1440 | "node_modules/postcss-resolve-nested-selector": { 1441 | "version": "0.1.6", 1442 | "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", 1443 | "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", 1444 | "dev": true, 1445 | "optional": true 1446 | }, 1447 | "node_modules/postcss-safe-parser": { 1448 | "version": "7.0.1", 1449 | "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", 1450 | "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", 1451 | "dev": true, 1452 | "funding": [ 1453 | { 1454 | "type": "opencollective", 1455 | "url": "https://opencollective.com/postcss/" 1456 | }, 1457 | { 1458 | "type": "tidelift", 1459 | "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" 1460 | }, 1461 | { 1462 | "type": "github", 1463 | "url": "https://github.com/sponsors/ai" 1464 | } 1465 | ], 1466 | "license": "MIT", 1467 | "optional": true, 1468 | "engines": { 1469 | "node": ">=18.0" 1470 | }, 1471 | "peerDependencies": { 1472 | "postcss": "^8.4.31" 1473 | } 1474 | }, 1475 | "node_modules/postcss-scss": { 1476 | "version": "4.0.9", 1477 | "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", 1478 | "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", 1479 | "dev": true, 1480 | "funding": [ 1481 | { 1482 | "type": "opencollective", 1483 | "url": "https://opencollective.com/postcss/" 1484 | }, 1485 | { 1486 | "type": "tidelift", 1487 | "url": "https://tidelift.com/funding/github/npm/postcss-scss" 1488 | }, 1489 | { 1490 | "type": "github", 1491 | "url": "https://github.com/sponsors/ai" 1492 | } 1493 | ], 1494 | "optional": true, 1495 | "engines": { 1496 | "node": ">=12.0" 1497 | }, 1498 | "peerDependencies": { 1499 | "postcss": "^8.4.29" 1500 | } 1501 | }, 1502 | "node_modules/postcss-selector-parser": { 1503 | "version": "6.1.2", 1504 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 1505 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 1506 | "dev": true, 1507 | "optional": true, 1508 | "dependencies": { 1509 | "cssesc": "^3.0.0", 1510 | "util-deprecate": "^1.0.2" 1511 | }, 1512 | "engines": { 1513 | "node": ">=4" 1514 | } 1515 | }, 1516 | "node_modules/postcss-sorting": { 1517 | "version": "8.0.2", 1518 | "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", 1519 | "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", 1520 | "dev": true, 1521 | "license": "MIT", 1522 | "optional": true, 1523 | "peerDependencies": { 1524 | "postcss": "^8.4.20" 1525 | } 1526 | }, 1527 | "node_modules/postcss-value-parser": { 1528 | "version": "4.2.0", 1529 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1530 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1531 | "dev": true, 1532 | "optional": true 1533 | }, 1534 | "node_modules/prettier": { 1535 | "version": "3.5.3", 1536 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 1537 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 1538 | "dev": true, 1539 | "license": "MIT", 1540 | "bin": { 1541 | "prettier": "bin/prettier.cjs" 1542 | }, 1543 | "engines": { 1544 | "node": ">=14" 1545 | }, 1546 | "funding": { 1547 | "url": "https://github.com/prettier/prettier?sponsor=1" 1548 | } 1549 | }, 1550 | "node_modules/queue-microtask": { 1551 | "version": "1.2.3", 1552 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1553 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1554 | "dev": true, 1555 | "funding": [ 1556 | { 1557 | "type": "github", 1558 | "url": "https://github.com/sponsors/feross" 1559 | }, 1560 | { 1561 | "type": "patreon", 1562 | "url": "https://www.patreon.com/feross" 1563 | }, 1564 | { 1565 | "type": "consulting", 1566 | "url": "https://feross.org/support" 1567 | } 1568 | ], 1569 | "optional": true 1570 | }, 1571 | "node_modules/react": { 1572 | "version": "19.1.0", 1573 | "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 1574 | "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 1575 | "dev": true, 1576 | "license": "MIT", 1577 | "engines": { 1578 | "node": ">=0.10.0" 1579 | } 1580 | }, 1581 | "node_modules/require-from-string": { 1582 | "version": "2.0.2", 1583 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1584 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1585 | "dev": true, 1586 | "license": "MIT", 1587 | "optional": true, 1588 | "engines": { 1589 | "node": ">=0.10.0" 1590 | } 1591 | }, 1592 | "node_modules/resolve-from": { 1593 | "version": "5.0.0", 1594 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1595 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1596 | "dev": true, 1597 | "license": "MIT", 1598 | "optional": true, 1599 | "engines": { 1600 | "node": ">=8" 1601 | } 1602 | }, 1603 | "node_modules/reusify": { 1604 | "version": "1.0.4", 1605 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1606 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1607 | "dev": true, 1608 | "optional": true, 1609 | "engines": { 1610 | "iojs": ">=1.0.0", 1611 | "node": ">=0.10.0" 1612 | } 1613 | }, 1614 | "node_modules/run-parallel": { 1615 | "version": "1.2.0", 1616 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1617 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1618 | "dev": true, 1619 | "funding": [ 1620 | { 1621 | "type": "github", 1622 | "url": "https://github.com/sponsors/feross" 1623 | }, 1624 | { 1625 | "type": "patreon", 1626 | "url": "https://www.patreon.com/feross" 1627 | }, 1628 | { 1629 | "type": "consulting", 1630 | "url": "https://feross.org/support" 1631 | } 1632 | ], 1633 | "optional": true, 1634 | "dependencies": { 1635 | "queue-microtask": "^1.2.2" 1636 | } 1637 | }, 1638 | "node_modules/signal-exit": { 1639 | "version": "4.0.2", 1640 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", 1641 | "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", 1642 | "dev": true, 1643 | "optional": true, 1644 | "engines": { 1645 | "node": ">=14" 1646 | }, 1647 | "funding": { 1648 | "url": "https://github.com/sponsors/isaacs" 1649 | } 1650 | }, 1651 | "node_modules/slash": { 1652 | "version": "3.0.0", 1653 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1654 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1655 | "dev": true, 1656 | "optional": true, 1657 | "engines": { 1658 | "node": ">=8" 1659 | } 1660 | }, 1661 | "node_modules/slice-ansi": { 1662 | "version": "4.0.0", 1663 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 1664 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 1665 | "dev": true, 1666 | "license": "MIT", 1667 | "optional": true, 1668 | "dependencies": { 1669 | "ansi-styles": "^4.0.0", 1670 | "astral-regex": "^2.0.0", 1671 | "is-fullwidth-code-point": "^3.0.0" 1672 | }, 1673 | "engines": { 1674 | "node": ">=10" 1675 | }, 1676 | "funding": { 1677 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 1678 | } 1679 | }, 1680 | "node_modules/source-map-js": { 1681 | "version": "1.2.1", 1682 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1683 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1684 | "dev": true, 1685 | "optional": true, 1686 | "engines": { 1687 | "node": ">=0.10.0" 1688 | } 1689 | }, 1690 | "node_modules/string-width": { 1691 | "version": "4.2.3", 1692 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1693 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1694 | "dev": true, 1695 | "optional": true, 1696 | "dependencies": { 1697 | "emoji-regex": "^8.0.0", 1698 | "is-fullwidth-code-point": "^3.0.0", 1699 | "strip-ansi": "^6.0.1" 1700 | }, 1701 | "engines": { 1702 | "node": ">=8" 1703 | } 1704 | }, 1705 | "node_modules/strip-ansi": { 1706 | "version": "6.0.1", 1707 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1708 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1709 | "dev": true, 1710 | "optional": true, 1711 | "dependencies": { 1712 | "ansi-regex": "^5.0.1" 1713 | }, 1714 | "engines": { 1715 | "node": ">=8" 1716 | } 1717 | }, 1718 | "node_modules/stylelint": { 1719 | "version": "16.12.0", 1720 | "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz", 1721 | "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==", 1722 | "dev": true, 1723 | "funding": [ 1724 | { 1725 | "type": "opencollective", 1726 | "url": "https://opencollective.com/stylelint" 1727 | }, 1728 | { 1729 | "type": "github", 1730 | "url": "https://github.com/sponsors/stylelint" 1731 | } 1732 | ], 1733 | "license": "MIT", 1734 | "optional": true, 1735 | "dependencies": { 1736 | "@csstools/css-parser-algorithms": "^3.0.4", 1737 | "@csstools/css-tokenizer": "^3.0.3", 1738 | "@csstools/media-query-list-parser": "^4.0.2", 1739 | "@csstools/selector-specificity": "^5.0.0", 1740 | "@dual-bundle/import-meta-resolve": "^4.1.0", 1741 | "balanced-match": "^2.0.0", 1742 | "colord": "^2.9.3", 1743 | "cosmiconfig": "^9.0.0", 1744 | "css-functions-list": "^3.2.3", 1745 | "css-tree": "^3.0.1", 1746 | "debug": "^4.3.7", 1747 | "fast-glob": "^3.3.2", 1748 | "fastest-levenshtein": "^1.0.16", 1749 | "file-entry-cache": "^9.1.0", 1750 | "global-modules": "^2.0.0", 1751 | "globby": "^11.1.0", 1752 | "globjoin": "^0.1.4", 1753 | "html-tags": "^3.3.1", 1754 | "ignore": "^6.0.2", 1755 | "imurmurhash": "^0.1.4", 1756 | "is-plain-object": "^5.0.0", 1757 | "known-css-properties": "^0.35.0", 1758 | "mathml-tag-names": "^2.1.3", 1759 | "meow": "^13.2.0", 1760 | "micromatch": "^4.0.8", 1761 | "normalize-path": "^3.0.0", 1762 | "picocolors": "^1.1.1", 1763 | "postcss": "^8.4.49", 1764 | "postcss-resolve-nested-selector": "^0.1.6", 1765 | "postcss-safe-parser": "^7.0.1", 1766 | "postcss-selector-parser": "^7.0.0", 1767 | "postcss-value-parser": "^4.2.0", 1768 | "resolve-from": "^5.0.0", 1769 | "string-width": "^4.2.3", 1770 | "supports-hyperlinks": "^3.1.0", 1771 | "svg-tags": "^1.0.0", 1772 | "table": "^6.9.0", 1773 | "write-file-atomic": "^5.0.1" 1774 | }, 1775 | "bin": { 1776 | "stylelint": "bin/stylelint.mjs" 1777 | }, 1778 | "engines": { 1779 | "node": ">=18.12.0" 1780 | } 1781 | }, 1782 | "node_modules/stylelint-order": { 1783 | "version": "6.0.4", 1784 | "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", 1785 | "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", 1786 | "dev": true, 1787 | "license": "MIT", 1788 | "optional": true, 1789 | "dependencies": { 1790 | "postcss": "^8.4.32", 1791 | "postcss-sorting": "^8.0.2" 1792 | }, 1793 | "peerDependencies": { 1794 | "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" 1795 | } 1796 | }, 1797 | "node_modules/stylelint/node_modules/@csstools/selector-specificity": { 1798 | "version": "5.0.0", 1799 | "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", 1800 | "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", 1801 | "dev": true, 1802 | "funding": [ 1803 | { 1804 | "type": "github", 1805 | "url": "https://github.com/sponsors/csstools" 1806 | }, 1807 | { 1808 | "type": "opencollective", 1809 | "url": "https://opencollective.com/csstools" 1810 | } 1811 | ], 1812 | "license": "MIT-0", 1813 | "optional": true, 1814 | "engines": { 1815 | "node": ">=18" 1816 | }, 1817 | "peerDependencies": { 1818 | "postcss-selector-parser": "^7.0.0" 1819 | } 1820 | }, 1821 | "node_modules/stylelint/node_modules/css-tree": { 1822 | "version": "3.1.0", 1823 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", 1824 | "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", 1825 | "dev": true, 1826 | "license": "MIT", 1827 | "optional": true, 1828 | "dependencies": { 1829 | "mdn-data": "2.12.2", 1830 | "source-map-js": "^1.0.1" 1831 | }, 1832 | "engines": { 1833 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 1834 | } 1835 | }, 1836 | "node_modules/stylelint/node_modules/ignore": { 1837 | "version": "6.0.2", 1838 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", 1839 | "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", 1840 | "dev": true, 1841 | "license": "MIT", 1842 | "optional": true, 1843 | "engines": { 1844 | "node": ">= 4" 1845 | } 1846 | }, 1847 | "node_modules/stylelint/node_modules/mdn-data": { 1848 | "version": "2.12.2", 1849 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", 1850 | "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", 1851 | "dev": true, 1852 | "license": "CC0-1.0", 1853 | "optional": true 1854 | }, 1855 | "node_modules/stylelint/node_modules/postcss-selector-parser": { 1856 | "version": "7.0.0", 1857 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", 1858 | "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", 1859 | "dev": true, 1860 | "license": "MIT", 1861 | "optional": true, 1862 | "dependencies": { 1863 | "cssesc": "^3.0.0", 1864 | "util-deprecate": "^1.0.2" 1865 | }, 1866 | "engines": { 1867 | "node": ">=4" 1868 | } 1869 | }, 1870 | "node_modules/supports-color": { 1871 | "version": "7.2.0", 1872 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1873 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1874 | "dev": true, 1875 | "optional": true, 1876 | "dependencies": { 1877 | "has-flag": "^4.0.0" 1878 | }, 1879 | "engines": { 1880 | "node": ">=8" 1881 | } 1882 | }, 1883 | "node_modules/supports-hyperlinks": { 1884 | "version": "3.1.0", 1885 | "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", 1886 | "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", 1887 | "dev": true, 1888 | "optional": true, 1889 | "dependencies": { 1890 | "has-flag": "^4.0.0", 1891 | "supports-color": "^7.0.0" 1892 | }, 1893 | "engines": { 1894 | "node": ">=14.18" 1895 | }, 1896 | "funding": { 1897 | "url": "https://github.com/sponsors/sindresorhus" 1898 | } 1899 | }, 1900 | "node_modules/svg-tags": { 1901 | "version": "1.0.0", 1902 | "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", 1903 | "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", 1904 | "dev": true, 1905 | "optional": true 1906 | }, 1907 | "node_modules/table": { 1908 | "version": "6.9.0", 1909 | "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", 1910 | "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", 1911 | "dev": true, 1912 | "license": "BSD-3-Clause", 1913 | "optional": true, 1914 | "dependencies": { 1915 | "ajv": "^8.0.1", 1916 | "lodash.truncate": "^4.4.2", 1917 | "slice-ansi": "^4.0.0", 1918 | "string-width": "^4.2.3", 1919 | "strip-ansi": "^6.0.1" 1920 | }, 1921 | "engines": { 1922 | "node": ">=10.0.0" 1923 | } 1924 | }, 1925 | "node_modules/to-regex-range": { 1926 | "version": "5.0.1", 1927 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1928 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1929 | "dev": true, 1930 | "optional": true, 1931 | "dependencies": { 1932 | "is-number": "^7.0.0" 1933 | }, 1934 | "engines": { 1935 | "node": ">=8.0" 1936 | } 1937 | }, 1938 | "node_modules/tslib": { 1939 | "version": "2.6.2", 1940 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 1941 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 1942 | "dev": true 1943 | }, 1944 | "node_modules/typescript": { 1945 | "version": "5.8.3", 1946 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 1947 | "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 1948 | "dev": true, 1949 | "license": "Apache-2.0", 1950 | "bin": { 1951 | "tsc": "bin/tsc", 1952 | "tsserver": "bin/tsserver" 1953 | }, 1954 | "engines": { 1955 | "node": ">=14.17" 1956 | } 1957 | }, 1958 | "node_modules/util-deprecate": { 1959 | "version": "1.0.2", 1960 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1961 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1962 | "dev": true, 1963 | "optional": true 1964 | }, 1965 | "node_modules/write-file-atomic": { 1966 | "version": "5.0.1", 1967 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 1968 | "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 1969 | "dev": true, 1970 | "optional": true, 1971 | "dependencies": { 1972 | "imurmurhash": "^0.1.4", 1973 | "signal-exit": "^4.0.1" 1974 | }, 1975 | "engines": { 1976 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1977 | } 1978 | } 1979 | }, 1980 | "dependencies": { 1981 | "@axa-ch/easy-config": { 1982 | "version": "3.0.1", 1983 | "resolved": "https://registry.npmjs.org/@axa-ch/easy-config/-/easy-config-3.0.1.tgz", 1984 | "integrity": "sha512-MObL78iA4guiGEC9nIIjg+y5cXpnyp5YF7VKuPVSK5yyTS9bX3tWyRL5gVmVXNP7Ip2e9hUMb7+oEMKpCVJNAw==", 1985 | "dev": true, 1986 | "requires": { 1987 | "stylelint": "^16.12.0", 1988 | "stylelint-config-standard": "^36.0.0 || ^38.0.0", 1989 | "stylelint-config-standard-scss": "^13.0.0 || ^14.0.0 || ^15.0.0", 1990 | "stylelint-order": "^6.0.4 || ^7.0.0" 1991 | }, 1992 | "dependencies": { 1993 | "known-css-properties": { 1994 | "version": "0.34.0", 1995 | "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", 1996 | "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", 1997 | "dev": true, 1998 | "optional": true 1999 | }, 2000 | "stylelint-config-recommended": { 2001 | "version": "14.0.1", 2002 | "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", 2003 | "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", 2004 | "dev": true, 2005 | "optional": true, 2006 | "requires": {} 2007 | }, 2008 | "stylelint-config-recommended-scss": { 2009 | "version": "14.1.0", 2010 | "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", 2011 | "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", 2012 | "dev": true, 2013 | "optional": true, 2014 | "requires": { 2015 | "postcss-scss": "^4.0.9", 2016 | "stylelint-config-recommended": "^14.0.1", 2017 | "stylelint-scss": "^6.4.0" 2018 | } 2019 | }, 2020 | "stylelint-config-standard": { 2021 | "version": "36.0.1", 2022 | "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", 2023 | "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", 2024 | "dev": true, 2025 | "optional": true, 2026 | "requires": { 2027 | "stylelint-config-recommended": "^14.0.1" 2028 | } 2029 | }, 2030 | "stylelint-config-standard-scss": { 2031 | "version": "13.1.0", 2032 | "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.1.0.tgz", 2033 | "integrity": "sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA==", 2034 | "dev": true, 2035 | "optional": true, 2036 | "requires": { 2037 | "stylelint-config-recommended-scss": "^14.0.0", 2038 | "stylelint-config-standard": "^36.0.0" 2039 | } 2040 | }, 2041 | "stylelint-scss": { 2042 | "version": "6.5.1", 2043 | "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.5.1.tgz", 2044 | "integrity": "sha512-ZLqdqihm6uDYkrsOeD6YWb+stZI8Wn92kUNDhE4M+g9g1aCnRv0JlOrttFiAJJwaNzpdQgX3YJb5vDQXVuO9Ww==", 2045 | "dev": true, 2046 | "optional": true, 2047 | "requires": { 2048 | "css-tree": "2.3.1", 2049 | "is-plain-object": "5.0.0", 2050 | "known-css-properties": "^0.34.0", 2051 | "postcss-media-query-parser": "^0.2.3", 2052 | "postcss-resolve-nested-selector": "^0.1.4", 2053 | "postcss-selector-parser": "^6.1.1", 2054 | "postcss-value-parser": "^4.2.0" 2055 | } 2056 | } 2057 | } 2058 | }, 2059 | "@babel/code-frame": { 2060 | "version": "7.26.2", 2061 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 2062 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 2063 | "dev": true, 2064 | "optional": true, 2065 | "requires": { 2066 | "@babel/helper-validator-identifier": "^7.25.9", 2067 | "js-tokens": "^4.0.0", 2068 | "picocolors": "^1.0.0" 2069 | } 2070 | }, 2071 | "@babel/helper-validator-identifier": { 2072 | "version": "7.25.9", 2073 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 2074 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 2075 | "dev": true, 2076 | "optional": true 2077 | }, 2078 | "@biomejs/biome": { 2079 | "version": "1.9.4", 2080 | "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", 2081 | "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", 2082 | "dev": true, 2083 | "requires": { 2084 | "@biomejs/cli-darwin-arm64": "1.9.4", 2085 | "@biomejs/cli-darwin-x64": "1.9.4", 2086 | "@biomejs/cli-linux-arm64": "1.9.4", 2087 | "@biomejs/cli-linux-arm64-musl": "1.9.4", 2088 | "@biomejs/cli-linux-x64": "1.9.4", 2089 | "@biomejs/cli-linux-x64-musl": "1.9.4", 2090 | "@biomejs/cli-win32-arm64": "1.9.4", 2091 | "@biomejs/cli-win32-x64": "1.9.4" 2092 | } 2093 | }, 2094 | "@biomejs/cli-darwin-arm64": { 2095 | "version": "1.9.4", 2096 | "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", 2097 | "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", 2098 | "dev": true, 2099 | "optional": true 2100 | }, 2101 | "@biomejs/cli-darwin-x64": { 2102 | "version": "1.9.4", 2103 | "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", 2104 | "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", 2105 | "dev": true, 2106 | "optional": true 2107 | }, 2108 | "@biomejs/cli-linux-arm64": { 2109 | "version": "1.9.4", 2110 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", 2111 | "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", 2112 | "dev": true, 2113 | "optional": true 2114 | }, 2115 | "@biomejs/cli-linux-arm64-musl": { 2116 | "version": "1.9.4", 2117 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", 2118 | "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", 2119 | "dev": true, 2120 | "optional": true 2121 | }, 2122 | "@biomejs/cli-linux-x64": { 2123 | "version": "1.9.4", 2124 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", 2125 | "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", 2126 | "dev": true, 2127 | "optional": true 2128 | }, 2129 | "@biomejs/cli-linux-x64-musl": { 2130 | "version": "1.9.4", 2131 | "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", 2132 | "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", 2133 | "dev": true, 2134 | "optional": true 2135 | }, 2136 | "@biomejs/cli-win32-arm64": { 2137 | "version": "1.9.4", 2138 | "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", 2139 | "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", 2140 | "dev": true, 2141 | "optional": true 2142 | }, 2143 | "@biomejs/cli-win32-x64": { 2144 | "version": "1.9.4", 2145 | "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", 2146 | "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", 2147 | "dev": true, 2148 | "optional": true 2149 | }, 2150 | "@csstools/css-parser-algorithms": { 2151 | "version": "3.0.4", 2152 | "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", 2153 | "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", 2154 | "dev": true, 2155 | "optional": true, 2156 | "requires": {} 2157 | }, 2158 | "@csstools/css-tokenizer": { 2159 | "version": "3.0.3", 2160 | "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", 2161 | "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", 2162 | "dev": true, 2163 | "optional": true 2164 | }, 2165 | "@csstools/media-query-list-parser": { 2166 | "version": "4.0.2", 2167 | "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", 2168 | "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", 2169 | "dev": true, 2170 | "optional": true, 2171 | "requires": {} 2172 | }, 2173 | "@dual-bundle/import-meta-resolve": { 2174 | "version": "4.1.0", 2175 | "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 2176 | "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", 2177 | "dev": true, 2178 | "optional": true 2179 | }, 2180 | "@emotion/is-prop-valid": { 2181 | "version": "0.8.8", 2182 | "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", 2183 | "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", 2184 | "dev": true, 2185 | "optional": true, 2186 | "peer": true, 2187 | "requires": { 2188 | "@emotion/memoize": "0.7.4" 2189 | } 2190 | }, 2191 | "@emotion/memoize": { 2192 | "version": "0.7.4", 2193 | "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", 2194 | "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", 2195 | "dev": true, 2196 | "optional": true, 2197 | "peer": true 2198 | }, 2199 | "@nodelib/fs.scandir": { 2200 | "version": "2.1.5", 2201 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2202 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2203 | "dev": true, 2204 | "optional": true, 2205 | "requires": { 2206 | "@nodelib/fs.stat": "2.0.5", 2207 | "run-parallel": "^1.1.9" 2208 | } 2209 | }, 2210 | "@nodelib/fs.stat": { 2211 | "version": "2.0.5", 2212 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2213 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 2214 | "dev": true, 2215 | "optional": true 2216 | }, 2217 | "@nodelib/fs.walk": { 2218 | "version": "1.2.8", 2219 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 2220 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 2221 | "dev": true, 2222 | "optional": true, 2223 | "requires": { 2224 | "@nodelib/fs.scandir": "2.1.5", 2225 | "fastq": "^1.6.0" 2226 | } 2227 | }, 2228 | "@types/react": { 2229 | "version": "19.1.4", 2230 | "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", 2231 | "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", 2232 | "dev": true, 2233 | "requires": { 2234 | "csstype": "^3.0.2" 2235 | } 2236 | }, 2237 | "ajv": { 2238 | "version": "8.17.1", 2239 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 2240 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 2241 | "dev": true, 2242 | "optional": true, 2243 | "requires": { 2244 | "fast-deep-equal": "^3.1.3", 2245 | "fast-uri": "^3.0.1", 2246 | "json-schema-traverse": "^1.0.0", 2247 | "require-from-string": "^2.0.2" 2248 | } 2249 | }, 2250 | "ansi-regex": { 2251 | "version": "5.0.1", 2252 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2253 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2254 | "dev": true, 2255 | "optional": true 2256 | }, 2257 | "ansi-styles": { 2258 | "version": "4.3.0", 2259 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2260 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2261 | "dev": true, 2262 | "optional": true, 2263 | "requires": { 2264 | "color-convert": "^2.0.1" 2265 | } 2266 | }, 2267 | "argparse": { 2268 | "version": "2.0.1", 2269 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2270 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2271 | "dev": true, 2272 | "optional": true 2273 | }, 2274 | "array-union": { 2275 | "version": "2.1.0", 2276 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 2277 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 2278 | "dev": true, 2279 | "optional": true 2280 | }, 2281 | "astral-regex": { 2282 | "version": "2.0.0", 2283 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 2284 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 2285 | "dev": true, 2286 | "optional": true 2287 | }, 2288 | "balanced-match": { 2289 | "version": "2.0.0", 2290 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", 2291 | "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", 2292 | "dev": true, 2293 | "optional": true 2294 | }, 2295 | "braces": { 2296 | "version": "3.0.3", 2297 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 2298 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 2299 | "dev": true, 2300 | "optional": true, 2301 | "requires": { 2302 | "fill-range": "^7.1.1" 2303 | } 2304 | }, 2305 | "callsites": { 2306 | "version": "3.1.0", 2307 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 2308 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 2309 | "dev": true, 2310 | "optional": true 2311 | }, 2312 | "color-convert": { 2313 | "version": "2.0.1", 2314 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2315 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2316 | "dev": true, 2317 | "optional": true, 2318 | "requires": { 2319 | "color-name": "~1.1.4" 2320 | } 2321 | }, 2322 | "color-name": { 2323 | "version": "1.1.4", 2324 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2325 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2326 | "dev": true, 2327 | "optional": true 2328 | }, 2329 | "colord": { 2330 | "version": "2.9.3", 2331 | "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", 2332 | "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", 2333 | "dev": true, 2334 | "optional": true 2335 | }, 2336 | "cosmiconfig": { 2337 | "version": "9.0.0", 2338 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 2339 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 2340 | "dev": true, 2341 | "optional": true, 2342 | "requires": { 2343 | "env-paths": "^2.2.1", 2344 | "import-fresh": "^3.3.0", 2345 | "js-yaml": "^4.1.0", 2346 | "parse-json": "^5.2.0" 2347 | } 2348 | }, 2349 | "css-functions-list": { 2350 | "version": "3.2.3", 2351 | "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", 2352 | "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", 2353 | "dev": true, 2354 | "optional": true 2355 | }, 2356 | "css-tree": { 2357 | "version": "2.3.1", 2358 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", 2359 | "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", 2360 | "dev": true, 2361 | "optional": true, 2362 | "requires": { 2363 | "mdn-data": "2.0.30", 2364 | "source-map-js": "^1.0.1" 2365 | } 2366 | }, 2367 | "cssesc": { 2368 | "version": "3.0.0", 2369 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 2370 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 2371 | "dev": true, 2372 | "optional": true 2373 | }, 2374 | "csstype": { 2375 | "version": "3.1.3", 2376 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 2377 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 2378 | "dev": true 2379 | }, 2380 | "debug": { 2381 | "version": "4.3.7", 2382 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 2383 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 2384 | "dev": true, 2385 | "optional": true, 2386 | "requires": { 2387 | "ms": "^2.1.3" 2388 | } 2389 | }, 2390 | "dir-glob": { 2391 | "version": "3.0.1", 2392 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 2393 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 2394 | "dev": true, 2395 | "optional": true, 2396 | "requires": { 2397 | "path-type": "^4.0.0" 2398 | } 2399 | }, 2400 | "emoji-regex": { 2401 | "version": "8.0.0", 2402 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2403 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2404 | "dev": true, 2405 | "optional": true 2406 | }, 2407 | "env-paths": { 2408 | "version": "2.2.1", 2409 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 2410 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 2411 | "dev": true, 2412 | "optional": true 2413 | }, 2414 | "error-ex": { 2415 | "version": "1.3.2", 2416 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 2417 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 2418 | "dev": true, 2419 | "optional": true, 2420 | "requires": { 2421 | "is-arrayish": "^0.2.1" 2422 | } 2423 | }, 2424 | "fast-deep-equal": { 2425 | "version": "3.1.3", 2426 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2427 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2428 | "dev": true, 2429 | "optional": true 2430 | }, 2431 | "fast-glob": { 2432 | "version": "3.3.2", 2433 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 2434 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 2435 | "dev": true, 2436 | "optional": true, 2437 | "requires": { 2438 | "@nodelib/fs.stat": "^2.0.2", 2439 | "@nodelib/fs.walk": "^1.2.3", 2440 | "glob-parent": "^5.1.2", 2441 | "merge2": "^1.3.0", 2442 | "micromatch": "^4.0.4" 2443 | }, 2444 | "dependencies": { 2445 | "glob-parent": { 2446 | "version": "5.1.2", 2447 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2448 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2449 | "dev": true, 2450 | "optional": true, 2451 | "requires": { 2452 | "is-glob": "^4.0.1" 2453 | } 2454 | } 2455 | } 2456 | }, 2457 | "fast-uri": { 2458 | "version": "3.0.5", 2459 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", 2460 | "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", 2461 | "dev": true, 2462 | "optional": true 2463 | }, 2464 | "fastest-levenshtein": { 2465 | "version": "1.0.16", 2466 | "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", 2467 | "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", 2468 | "dev": true, 2469 | "optional": true 2470 | }, 2471 | "fastq": { 2472 | "version": "1.15.0", 2473 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 2474 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 2475 | "dev": true, 2476 | "optional": true, 2477 | "requires": { 2478 | "reusify": "^1.0.4" 2479 | } 2480 | }, 2481 | "file-entry-cache": { 2482 | "version": "9.1.0", 2483 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", 2484 | "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", 2485 | "dev": true, 2486 | "optional": true, 2487 | "requires": { 2488 | "flat-cache": "^5.0.0" 2489 | }, 2490 | "dependencies": { 2491 | "flat-cache": { 2492 | "version": "5.0.0", 2493 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", 2494 | "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", 2495 | "dev": true, 2496 | "optional": true, 2497 | "requires": { 2498 | "flatted": "^3.3.1", 2499 | "keyv": "^4.5.4" 2500 | } 2501 | } 2502 | } 2503 | }, 2504 | "fill-range": { 2505 | "version": "7.1.1", 2506 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2507 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2508 | "dev": true, 2509 | "optional": true, 2510 | "requires": { 2511 | "to-regex-range": "^5.0.1" 2512 | } 2513 | }, 2514 | "flatted": { 2515 | "version": "3.3.1", 2516 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 2517 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 2518 | "dev": true, 2519 | "optional": true 2520 | }, 2521 | "framer-motion": { 2522 | "version": "12.12.1", 2523 | "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.12.1.tgz", 2524 | "integrity": "sha512-PFw4/GCREHI2suK/NlPSUxd+x6Rkp80uQsfCRFSOQNrm5pZif7eGtmG1VaD/UF1fW9tRBy5AaS77StatB3OJDg==", 2525 | "dev": true, 2526 | "requires": { 2527 | "motion-dom": "^12.12.1", 2528 | "motion-utils": "^12.12.1", 2529 | "tslib": "^2.4.0" 2530 | } 2531 | }, 2532 | "global-modules": { 2533 | "version": "2.0.0", 2534 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", 2535 | "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", 2536 | "dev": true, 2537 | "optional": true, 2538 | "requires": { 2539 | "global-prefix": "^3.0.0" 2540 | } 2541 | }, 2542 | "global-prefix": { 2543 | "version": "3.0.0", 2544 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", 2545 | "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", 2546 | "dev": true, 2547 | "optional": true, 2548 | "requires": { 2549 | "ini": "^1.3.5", 2550 | "kind-of": "^6.0.2", 2551 | "which": "^1.3.1" 2552 | }, 2553 | "dependencies": { 2554 | "which": { 2555 | "version": "1.3.1", 2556 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2557 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2558 | "dev": true, 2559 | "optional": true, 2560 | "requires": { 2561 | "isexe": "^2.0.0" 2562 | } 2563 | } 2564 | } 2565 | }, 2566 | "globby": { 2567 | "version": "11.1.0", 2568 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 2569 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 2570 | "dev": true, 2571 | "optional": true, 2572 | "requires": { 2573 | "array-union": "^2.1.0", 2574 | "dir-glob": "^3.0.1", 2575 | "fast-glob": "^3.2.9", 2576 | "ignore": "^5.2.0", 2577 | "merge2": "^1.4.1", 2578 | "slash": "^3.0.0" 2579 | } 2580 | }, 2581 | "globjoin": { 2582 | "version": "0.1.4", 2583 | "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", 2584 | "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", 2585 | "dev": true, 2586 | "optional": true 2587 | }, 2588 | "has-flag": { 2589 | "version": "4.0.0", 2590 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2591 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2592 | "dev": true, 2593 | "optional": true 2594 | }, 2595 | "html-tags": { 2596 | "version": "3.3.1", 2597 | "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", 2598 | "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", 2599 | "dev": true, 2600 | "optional": true 2601 | }, 2602 | "ignore": { 2603 | "version": "5.3.2", 2604 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 2605 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 2606 | "dev": true, 2607 | "optional": true 2608 | }, 2609 | "import-fresh": { 2610 | "version": "3.3.0", 2611 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2612 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2613 | "dev": true, 2614 | "optional": true, 2615 | "requires": { 2616 | "parent-module": "^1.0.0", 2617 | "resolve-from": "^4.0.0" 2618 | }, 2619 | "dependencies": { 2620 | "resolve-from": { 2621 | "version": "4.0.0", 2622 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2623 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2624 | "dev": true, 2625 | "optional": true 2626 | } 2627 | } 2628 | }, 2629 | "imurmurhash": { 2630 | "version": "0.1.4", 2631 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2632 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2633 | "dev": true, 2634 | "optional": true 2635 | }, 2636 | "ini": { 2637 | "version": "1.3.8", 2638 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 2639 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 2640 | "dev": true, 2641 | "optional": true 2642 | }, 2643 | "is-arrayish": { 2644 | "version": "0.2.1", 2645 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2646 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 2647 | "dev": true, 2648 | "optional": true 2649 | }, 2650 | "is-extglob": { 2651 | "version": "2.1.1", 2652 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2653 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2654 | "dev": true, 2655 | "optional": true 2656 | }, 2657 | "is-fullwidth-code-point": { 2658 | "version": "3.0.0", 2659 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2660 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2661 | "dev": true, 2662 | "optional": true 2663 | }, 2664 | "is-glob": { 2665 | "version": "4.0.3", 2666 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2667 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2668 | "dev": true, 2669 | "optional": true, 2670 | "requires": { 2671 | "is-extglob": "^2.1.1" 2672 | } 2673 | }, 2674 | "is-number": { 2675 | "version": "7.0.0", 2676 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2677 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2678 | "dev": true, 2679 | "optional": true 2680 | }, 2681 | "is-plain-object": { 2682 | "version": "5.0.0", 2683 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 2684 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 2685 | "dev": true, 2686 | "optional": true 2687 | }, 2688 | "isexe": { 2689 | "version": "2.0.0", 2690 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2691 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2692 | "dev": true, 2693 | "optional": true 2694 | }, 2695 | "js-tokens": { 2696 | "version": "4.0.0", 2697 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2698 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2699 | "dev": true, 2700 | "optional": true 2701 | }, 2702 | "js-yaml": { 2703 | "version": "4.1.0", 2704 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2705 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2706 | "dev": true, 2707 | "optional": true, 2708 | "requires": { 2709 | "argparse": "^2.0.1" 2710 | } 2711 | }, 2712 | "json-buffer": { 2713 | "version": "3.0.1", 2714 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2715 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2716 | "dev": true, 2717 | "optional": true 2718 | }, 2719 | "json-parse-even-better-errors": { 2720 | "version": "2.3.1", 2721 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 2722 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 2723 | "dev": true, 2724 | "optional": true 2725 | }, 2726 | "json-schema-traverse": { 2727 | "version": "1.0.0", 2728 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2729 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2730 | "dev": true, 2731 | "optional": true 2732 | }, 2733 | "keyv": { 2734 | "version": "4.5.4", 2735 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2736 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2737 | "dev": true, 2738 | "optional": true, 2739 | "requires": { 2740 | "json-buffer": "3.0.1" 2741 | } 2742 | }, 2743 | "kind-of": { 2744 | "version": "6.0.3", 2745 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 2746 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 2747 | "dev": true, 2748 | "optional": true 2749 | }, 2750 | "known-css-properties": { 2751 | "version": "0.35.0", 2752 | "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", 2753 | "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", 2754 | "dev": true, 2755 | "optional": true 2756 | }, 2757 | "lines-and-columns": { 2758 | "version": "1.2.4", 2759 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2760 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2761 | "dev": true, 2762 | "optional": true 2763 | }, 2764 | "lodash.truncate": { 2765 | "version": "4.4.2", 2766 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 2767 | "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", 2768 | "dev": true, 2769 | "optional": true 2770 | }, 2771 | "mathml-tag-names": { 2772 | "version": "2.1.3", 2773 | "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", 2774 | "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", 2775 | "dev": true, 2776 | "optional": true 2777 | }, 2778 | "mdn-data": { 2779 | "version": "2.0.30", 2780 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", 2781 | "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", 2782 | "dev": true, 2783 | "optional": true 2784 | }, 2785 | "meow": { 2786 | "version": "13.2.0", 2787 | "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", 2788 | "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", 2789 | "dev": true, 2790 | "optional": true 2791 | }, 2792 | "merge2": { 2793 | "version": "1.4.1", 2794 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2795 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2796 | "dev": true, 2797 | "optional": true 2798 | }, 2799 | "micromatch": { 2800 | "version": "4.0.8", 2801 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 2802 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2803 | "dev": true, 2804 | "optional": true, 2805 | "requires": { 2806 | "braces": "^3.0.3", 2807 | "picomatch": "^2.3.1" 2808 | } 2809 | }, 2810 | "motion-dom": { 2811 | "version": "12.12.1", 2812 | "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.12.1.tgz", 2813 | "integrity": "sha512-GXq/uUbZBEiFFE+K1Z/sxdPdadMdfJ/jmBALDfIuHGi0NmtealLOfH9FqT+6aNPgVx8ilq0DtYmyQlo6Uj9LKQ==", 2814 | "dev": true, 2815 | "requires": { 2816 | "motion-utils": "^12.12.1" 2817 | } 2818 | }, 2819 | "motion-utils": { 2820 | "version": "12.12.1", 2821 | "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.12.1.tgz", 2822 | "integrity": "sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==", 2823 | "dev": true 2824 | }, 2825 | "ms": { 2826 | "version": "2.1.3", 2827 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2828 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2829 | "dev": true, 2830 | "optional": true 2831 | }, 2832 | "nanoid": { 2833 | "version": "3.3.11", 2834 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 2835 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 2836 | "dev": true, 2837 | "optional": true 2838 | }, 2839 | "normalize-path": { 2840 | "version": "3.0.0", 2841 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2842 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2843 | "dev": true, 2844 | "optional": true 2845 | }, 2846 | "parent-module": { 2847 | "version": "1.0.1", 2848 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2849 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2850 | "dev": true, 2851 | "optional": true, 2852 | "requires": { 2853 | "callsites": "^3.0.0" 2854 | } 2855 | }, 2856 | "parse-json": { 2857 | "version": "5.2.0", 2858 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 2859 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 2860 | "dev": true, 2861 | "optional": true, 2862 | "requires": { 2863 | "@babel/code-frame": "^7.0.0", 2864 | "error-ex": "^1.3.1", 2865 | "json-parse-even-better-errors": "^2.3.0", 2866 | "lines-and-columns": "^1.1.6" 2867 | } 2868 | }, 2869 | "path-type": { 2870 | "version": "4.0.0", 2871 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2872 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2873 | "dev": true, 2874 | "optional": true 2875 | }, 2876 | "picocolors": { 2877 | "version": "1.1.1", 2878 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2879 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2880 | "dev": true, 2881 | "optional": true 2882 | }, 2883 | "picomatch": { 2884 | "version": "2.3.1", 2885 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2886 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2887 | "dev": true, 2888 | "optional": true 2889 | }, 2890 | "postcss": { 2891 | "version": "8.4.49", 2892 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", 2893 | "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", 2894 | "dev": true, 2895 | "optional": true, 2896 | "requires": { 2897 | "nanoid": "^3.3.7", 2898 | "picocolors": "^1.1.1", 2899 | "source-map-js": "^1.2.1" 2900 | } 2901 | }, 2902 | "postcss-media-query-parser": { 2903 | "version": "0.2.3", 2904 | "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", 2905 | "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", 2906 | "dev": true, 2907 | "optional": true 2908 | }, 2909 | "postcss-resolve-nested-selector": { 2910 | "version": "0.1.6", 2911 | "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", 2912 | "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", 2913 | "dev": true, 2914 | "optional": true 2915 | }, 2916 | "postcss-safe-parser": { 2917 | "version": "7.0.1", 2918 | "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", 2919 | "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", 2920 | "dev": true, 2921 | "optional": true, 2922 | "requires": {} 2923 | }, 2924 | "postcss-scss": { 2925 | "version": "4.0.9", 2926 | "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", 2927 | "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", 2928 | "dev": true, 2929 | "optional": true, 2930 | "requires": {} 2931 | }, 2932 | "postcss-selector-parser": { 2933 | "version": "6.1.2", 2934 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 2935 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 2936 | "dev": true, 2937 | "optional": true, 2938 | "requires": { 2939 | "cssesc": "^3.0.0", 2940 | "util-deprecate": "^1.0.2" 2941 | } 2942 | }, 2943 | "postcss-sorting": { 2944 | "version": "8.0.2", 2945 | "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", 2946 | "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", 2947 | "dev": true, 2948 | "optional": true, 2949 | "requires": {} 2950 | }, 2951 | "postcss-value-parser": { 2952 | "version": "4.2.0", 2953 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2954 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2955 | "dev": true, 2956 | "optional": true 2957 | }, 2958 | "prettier": { 2959 | "version": "3.5.3", 2960 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 2961 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 2962 | "dev": true 2963 | }, 2964 | "queue-microtask": { 2965 | "version": "1.2.3", 2966 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2967 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2968 | "dev": true, 2969 | "optional": true 2970 | }, 2971 | "react": { 2972 | "version": "19.1.0", 2973 | "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 2974 | "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 2975 | "dev": true 2976 | }, 2977 | "require-from-string": { 2978 | "version": "2.0.2", 2979 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2980 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2981 | "dev": true, 2982 | "optional": true 2983 | }, 2984 | "resolve-from": { 2985 | "version": "5.0.0", 2986 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2987 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2988 | "dev": true, 2989 | "optional": true 2990 | }, 2991 | "reusify": { 2992 | "version": "1.0.4", 2993 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2994 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2995 | "dev": true, 2996 | "optional": true 2997 | }, 2998 | "run-parallel": { 2999 | "version": "1.2.0", 3000 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3001 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3002 | "dev": true, 3003 | "optional": true, 3004 | "requires": { 3005 | "queue-microtask": "^1.2.2" 3006 | } 3007 | }, 3008 | "signal-exit": { 3009 | "version": "4.0.2", 3010 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", 3011 | "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", 3012 | "dev": true, 3013 | "optional": true 3014 | }, 3015 | "slash": { 3016 | "version": "3.0.0", 3017 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3018 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3019 | "dev": true, 3020 | "optional": true 3021 | }, 3022 | "slice-ansi": { 3023 | "version": "4.0.0", 3024 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 3025 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 3026 | "dev": true, 3027 | "optional": true, 3028 | "requires": { 3029 | "ansi-styles": "^4.0.0", 3030 | "astral-regex": "^2.0.0", 3031 | "is-fullwidth-code-point": "^3.0.0" 3032 | } 3033 | }, 3034 | "source-map-js": { 3035 | "version": "1.2.1", 3036 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 3037 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 3038 | "dev": true, 3039 | "optional": true 3040 | }, 3041 | "string-width": { 3042 | "version": "4.2.3", 3043 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3044 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3045 | "dev": true, 3046 | "optional": true, 3047 | "requires": { 3048 | "emoji-regex": "^8.0.0", 3049 | "is-fullwidth-code-point": "^3.0.0", 3050 | "strip-ansi": "^6.0.1" 3051 | } 3052 | }, 3053 | "strip-ansi": { 3054 | "version": "6.0.1", 3055 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3056 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3057 | "dev": true, 3058 | "optional": true, 3059 | "requires": { 3060 | "ansi-regex": "^5.0.1" 3061 | } 3062 | }, 3063 | "stylelint": { 3064 | "version": "16.12.0", 3065 | "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz", 3066 | "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==", 3067 | "dev": true, 3068 | "optional": true, 3069 | "requires": { 3070 | "@csstools/css-parser-algorithms": "^3.0.4", 3071 | "@csstools/css-tokenizer": "^3.0.3", 3072 | "@csstools/media-query-list-parser": "^4.0.2", 3073 | "@csstools/selector-specificity": "^5.0.0", 3074 | "@dual-bundle/import-meta-resolve": "^4.1.0", 3075 | "balanced-match": "^2.0.0", 3076 | "colord": "^2.9.3", 3077 | "cosmiconfig": "^9.0.0", 3078 | "css-functions-list": "^3.2.3", 3079 | "css-tree": "^3.0.1", 3080 | "debug": "^4.3.7", 3081 | "fast-glob": "^3.3.2", 3082 | "fastest-levenshtein": "^1.0.16", 3083 | "file-entry-cache": "^9.1.0", 3084 | "global-modules": "^2.0.0", 3085 | "globby": "^11.1.0", 3086 | "globjoin": "^0.1.4", 3087 | "html-tags": "^3.3.1", 3088 | "ignore": "^6.0.2", 3089 | "imurmurhash": "^0.1.4", 3090 | "is-plain-object": "^5.0.0", 3091 | "known-css-properties": "^0.35.0", 3092 | "mathml-tag-names": "^2.1.3", 3093 | "meow": "^13.2.0", 3094 | "micromatch": "^4.0.8", 3095 | "normalize-path": "^3.0.0", 3096 | "picocolors": "^1.1.1", 3097 | "postcss": "^8.4.49", 3098 | "postcss-resolve-nested-selector": "^0.1.6", 3099 | "postcss-safe-parser": "^7.0.1", 3100 | "postcss-selector-parser": "^7.0.0", 3101 | "postcss-value-parser": "^4.2.0", 3102 | "resolve-from": "^5.0.0", 3103 | "string-width": "^4.2.3", 3104 | "supports-hyperlinks": "^3.1.0", 3105 | "svg-tags": "^1.0.0", 3106 | "table": "^6.9.0", 3107 | "write-file-atomic": "^5.0.1" 3108 | }, 3109 | "dependencies": { 3110 | "@csstools/selector-specificity": { 3111 | "version": "5.0.0", 3112 | "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", 3113 | "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", 3114 | "dev": true, 3115 | "optional": true, 3116 | "requires": {} 3117 | }, 3118 | "css-tree": { 3119 | "version": "3.1.0", 3120 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", 3121 | "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", 3122 | "dev": true, 3123 | "optional": true, 3124 | "requires": { 3125 | "mdn-data": "2.12.2", 3126 | "source-map-js": "^1.0.1" 3127 | } 3128 | }, 3129 | "ignore": { 3130 | "version": "6.0.2", 3131 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", 3132 | "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", 3133 | "dev": true, 3134 | "optional": true 3135 | }, 3136 | "mdn-data": { 3137 | "version": "2.12.2", 3138 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", 3139 | "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", 3140 | "dev": true, 3141 | "optional": true 3142 | }, 3143 | "postcss-selector-parser": { 3144 | "version": "7.0.0", 3145 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", 3146 | "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", 3147 | "dev": true, 3148 | "optional": true, 3149 | "requires": { 3150 | "cssesc": "^3.0.0", 3151 | "util-deprecate": "^1.0.2" 3152 | } 3153 | } 3154 | } 3155 | }, 3156 | "stylelint-order": { 3157 | "version": "6.0.4", 3158 | "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", 3159 | "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", 3160 | "dev": true, 3161 | "optional": true, 3162 | "requires": { 3163 | "postcss": "^8.4.32", 3164 | "postcss-sorting": "^8.0.2" 3165 | } 3166 | }, 3167 | "supports-color": { 3168 | "version": "7.2.0", 3169 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3170 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3171 | "dev": true, 3172 | "optional": true, 3173 | "requires": { 3174 | "has-flag": "^4.0.0" 3175 | } 3176 | }, 3177 | "supports-hyperlinks": { 3178 | "version": "3.1.0", 3179 | "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", 3180 | "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", 3181 | "dev": true, 3182 | "optional": true, 3183 | "requires": { 3184 | "has-flag": "^4.0.0", 3185 | "supports-color": "^7.0.0" 3186 | } 3187 | }, 3188 | "svg-tags": { 3189 | "version": "1.0.0", 3190 | "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", 3191 | "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", 3192 | "dev": true, 3193 | "optional": true 3194 | }, 3195 | "table": { 3196 | "version": "6.9.0", 3197 | "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", 3198 | "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", 3199 | "dev": true, 3200 | "optional": true, 3201 | "requires": { 3202 | "ajv": "^8.0.1", 3203 | "lodash.truncate": "^4.4.2", 3204 | "slice-ansi": "^4.0.0", 3205 | "string-width": "^4.2.3", 3206 | "strip-ansi": "^6.0.1" 3207 | } 3208 | }, 3209 | "to-regex-range": { 3210 | "version": "5.0.1", 3211 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3212 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3213 | "dev": true, 3214 | "optional": true, 3215 | "requires": { 3216 | "is-number": "^7.0.0" 3217 | } 3218 | }, 3219 | "tslib": { 3220 | "version": "2.6.2", 3221 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 3222 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 3223 | "dev": true 3224 | }, 3225 | "typescript": { 3226 | "version": "5.8.3", 3227 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 3228 | "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 3229 | "dev": true 3230 | }, 3231 | "util-deprecate": { 3232 | "version": "1.0.2", 3233 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3234 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3235 | "dev": true, 3236 | "optional": true 3237 | }, 3238 | "write-file-atomic": { 3239 | "version": "5.0.1", 3240 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 3241 | "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 3242 | "dev": true, 3243 | "optional": true, 3244 | "requires": { 3245 | "imurmurhash": "^0.1.4", 3246 | "signal-exit": "^4.0.1" 3247 | } 3248 | } 3249 | } 3250 | } 3251 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@axa-ch/react-polymorphic-types", 3 | "version": "1.4.0", 4 | "description": "About Zero-runtime polymorphic component definitions for React", 5 | "main": "index.js", 6 | "types": "index.d.ts", 7 | "type": "module", 8 | "exports": { 9 | "import": "./index.js", 10 | "types": "./index.d.ts" 11 | }, 12 | "files": [ 13 | "index.js", 14 | "index.d.ts" 15 | ], 16 | "scripts": { 17 | "lint": "prettier --check . && biome check .", 18 | "postpublish": "git push && git push --tags", 19 | "test": "tsc && npm run lint" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/axa-ch/react-polymorphic-types.git" 24 | }, 25 | "keywords": [ 26 | "react", 27 | "polymorphic", 28 | "as", 29 | "typescript" 30 | ], 31 | "author": "AXA (https://axa.ch)", 32 | "maintainers": [ 33 | { 34 | "name": "Gianluca Guarini", 35 | "email": "gianluca.guarini@axa.ch" 36 | } 37 | ], 38 | "license": "MIT", 39 | "bugs": { 40 | "url": "https://github.com/axa-ch/react-polymorphic-types/issues" 41 | }, 42 | "homepage": "https://github.com/axa-ch/react-polymorphic-types#readme", 43 | "devDependencies": { 44 | "@axa-ch/easy-config": "3.0.1", 45 | "@biomejs/biome": "1.9.4", 46 | "framer-motion": "^12.12.1", 47 | "prettier": "3.5.3", 48 | "typescript": "^5.8.3", 49 | "@types/react": "^19.1.4", 50 | "react": "^19.1.0" 51 | }, 52 | "peerDependencies": { 53 | "@types/react": "^18.0.0 || ^19.0.0", 54 | "react": "^18.0.0 || ^19.0.0" 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /tests/base.specs.tsx: -------------------------------------------------------------------------------- 1 | import { Heading } from './components/base'; 2 | 3 | export default () => { 4 | return ( 5 | <> 6 | 7 | 11 | 17 | 23 | 28 | 29 | ); 30 | }; 31 | -------------------------------------------------------------------------------- /tests/button.ref.specs.tsx: -------------------------------------------------------------------------------- 1 | import { forwardRef, useRef } from 'react'; 2 | import { Button } from './components/button.ref'; 3 | 4 | export default () => { 5 | const ref = useRef(null); 6 | 7 | return ( 8 |